1//===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//  This file implements semantic analysis for C++ declarations.
10//
11//===----------------------------------------------------------------------===//
12
13#include "clang/AST/ASTConsumer.h"
14#include "clang/AST/ASTContext.h"
15#include "clang/AST/ASTLambda.h"
16#include "clang/AST/ASTMutationListener.h"
17#include "clang/AST/CXXInheritance.h"
18#include "clang/AST/CharUnits.h"
19#include "clang/AST/ComparisonCategories.h"
20#include "clang/AST/DeclCXX.h"
21#include "clang/AST/DeclTemplate.h"
22#include "clang/AST/EvaluatedExprVisitor.h"
23#include "clang/AST/Expr.h"
24#include "clang/AST/ExprCXX.h"
25#include "clang/AST/RecordLayout.h"
26#include "clang/AST/RecursiveASTVisitor.h"
27#include "clang/AST/StmtVisitor.h"
28#include "clang/AST/TypeLoc.h"
29#include "clang/AST/TypeOrdering.h"
30#include "clang/Basic/AttributeCommonInfo.h"
31#include "clang/Basic/PartialDiagnostic.h"
32#include "clang/Basic/Specifiers.h"
33#include "clang/Basic/TargetInfo.h"
34#include "clang/Lex/LiteralSupport.h"
35#include "clang/Lex/Preprocessor.h"
36#include "clang/Sema/CXXFieldCollector.h"
37#include "clang/Sema/DeclSpec.h"
38#include "clang/Sema/EnterExpressionEvaluationContext.h"
39#include "clang/Sema/Initialization.h"
40#include "clang/Sema/Lookup.h"
41#include "clang/Sema/Ownership.h"
42#include "clang/Sema/ParsedTemplate.h"
43#include "clang/Sema/Scope.h"
44#include "clang/Sema/ScopeInfo.h"
45#include "clang/Sema/SemaInternal.h"
46#include "clang/Sema/Template.h"
47#include "llvm/ADT/ArrayRef.h"
48#include "llvm/ADT/STLExtras.h"
49#include "llvm/ADT/ScopeExit.h"
50#include "llvm/ADT/SmallString.h"
51#include "llvm/ADT/StringExtras.h"
52#include "llvm/Support/ConvertUTF.h"
53#include "llvm/Support/SaveAndRestore.h"
54#include <map>
55#include <optional>
56#include <set>
57
58using namespace clang;
59
60//===----------------------------------------------------------------------===//
61// CheckDefaultArgumentVisitor
62//===----------------------------------------------------------------------===//
63
64namespace {
65/// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
66/// the default argument of a parameter to determine whether it
67/// contains any ill-formed subexpressions. For example, this will
68/// diagnose the use of local variables or parameters within the
69/// default argument expression.
70class CheckDefaultArgumentVisitor
71    : public ConstStmtVisitor<CheckDefaultArgumentVisitor, bool> {
72  Sema &S;
73  const Expr *DefaultArg;
74
75public:
76  CheckDefaultArgumentVisitor(Sema &S, const Expr *DefaultArg)
77      : S(S), DefaultArg(DefaultArg) {}
78
79  bool VisitExpr(const Expr *Node);
80  bool VisitDeclRefExpr(const DeclRefExpr *DRE);
81  bool VisitCXXThisExpr(const CXXThisExpr *ThisE);
82  bool VisitLambdaExpr(const LambdaExpr *Lambda);
83  bool VisitPseudoObjectExpr(const PseudoObjectExpr *POE);
84};
85
86/// VisitExpr - Visit all of the children of this expression.
87bool CheckDefaultArgumentVisitor::VisitExpr(const Expr *Node) {
88  bool IsInvalid = false;
89  for (const Stmt *SubStmt : Node->children())
90    if (SubStmt)
91      IsInvalid |= Visit(SubStmt);
92  return IsInvalid;
93}
94
95/// VisitDeclRefExpr - Visit a reference to a declaration, to
96/// determine whether this declaration can be used in the default
97/// argument expression.
98bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {
99  const ValueDecl *Decl = dyn_cast<ValueDecl>(DRE->getDecl());
100
101  if (!isa<VarDecl, BindingDecl>(Decl))
102    return false;
103
104  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {
105    // C++ [dcl.fct.default]p9:
106    //   [...] parameters of a function shall not be used in default
107    //   argument expressions, even if they are not evaluated. [...]
108    //
109    // C++17 [dcl.fct.default]p9 (by CWG 2082):
110    //   [...] A parameter shall not appear as a potentially-evaluated
111    //   expression in a default argument. [...]
112    //
113    if (DRE->isNonOdrUse() != NOUR_Unevaluated)
114      return S.Diag(DRE->getBeginLoc(),
115                    diag::err_param_default_argument_references_param)
116             << Param->getDeclName() << DefaultArg->getSourceRange();
117  } else if (auto *VD = Decl->getPotentiallyDecomposedVarDecl()) {
118    // C++ [dcl.fct.default]p7:
119    //   Local variables shall not be used in default argument
120    //   expressions.
121    //
122    // C++17 [dcl.fct.default]p7 (by CWG 2082):
123    //   A local variable shall not appear as a potentially-evaluated
124    //   expression in a default argument.
125    //
126    // C++20 [dcl.fct.default]p7 (DR as part of P0588R1, see also CWG 2346):
127    //   Note: A local variable cannot be odr-used (6.3) in a default
128    //   argument.
129    //
130    if (VD->isLocalVarDecl() && !DRE->isNonOdrUse())
131      return S.Diag(DRE->getBeginLoc(),
132                    diag::err_param_default_argument_references_local)
133             << Decl << DefaultArg->getSourceRange();
134  }
135  return false;
136}
137
138/// VisitCXXThisExpr - Visit a C++ "this" expression.
139bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(const CXXThisExpr *ThisE) {
140  // C++ [dcl.fct.default]p8:
141  //   The keyword this shall not be used in a default argument of a
142  //   member function.
143  return S.Diag(ThisE->getBeginLoc(),
144                diag::err_param_default_argument_references_this)
145         << ThisE->getSourceRange();
146}
147
148bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(
149    const PseudoObjectExpr *POE) {
150  bool Invalid = false;
151  for (const Expr *E : POE->semantics()) {
152    // Look through bindings.
153    if (const auto *OVE = dyn_cast<OpaqueValueExpr>(E)) {
154      E = OVE->getSourceExpr();
155      assert(E && "pseudo-object binding without source expression?");
156    }
157
158    Invalid |= Visit(E);
159  }
160  return Invalid;
161}
162
163bool CheckDefaultArgumentVisitor::VisitLambdaExpr(const LambdaExpr *Lambda) {
164  // [expr.prim.lambda.capture]p9
165  // a lambda-expression appearing in a default argument cannot implicitly or
166  // explicitly capture any local entity. Such a lambda-expression can still
167  // have an init-capture if any full-expression in its initializer satisfies
168  // the constraints of an expression appearing in a default argument.
169  bool Invalid = false;
170  for (const LambdaCapture &LC : Lambda->captures()) {
171    if (!Lambda->isInitCapture(&LC))
172      return S.Diag(LC.getLocation(), diag::err_lambda_capture_default_arg);
173    // Init captures are always VarDecl.
174    auto *D = cast<VarDecl>(LC.getCapturedVar());
175    Invalid |= Visit(D->getInit());
176  }
177  return Invalid;
178}
179} // namespace
180
181void
182Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
183                                                 const CXXMethodDecl *Method) {
184  // If we have an MSAny spec already, don't bother.
185  if (!Method || ComputedEST == EST_MSAny)
186    return;
187
188  const FunctionProtoType *Proto
189    = Method->getType()->getAs<FunctionProtoType>();
190  Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
191  if (!Proto)
192    return;
193
194  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
195
196  // If we have a throw-all spec at this point, ignore the function.
197  if (ComputedEST == EST_None)
198    return;
199
200  if (EST == EST_None && Method->hasAttr<NoThrowAttr>())
201    EST = EST_BasicNoexcept;
202
203  switch (EST) {
204  case EST_Unparsed:
205  case EST_Uninstantiated:
206  case EST_Unevaluated:
207    llvm_unreachable("should not see unresolved exception specs here");
208
209  // If this function can throw any exceptions, make a note of that.
210  case EST_MSAny:
211  case EST_None:
212    // FIXME: Whichever we see last of MSAny and None determines our result.
213    // We should make a consistent, order-independent choice here.
214    ClearExceptions();
215    ComputedEST = EST;
216    return;
217  case EST_NoexceptFalse:
218    ClearExceptions();
219    ComputedEST = EST_None;
220    return;
221  // FIXME: If the call to this decl is using any of its default arguments, we
222  // need to search them for potentially-throwing calls.
223  // If this function has a basic noexcept, it doesn't affect the outcome.
224  case EST_BasicNoexcept:
225  case EST_NoexceptTrue:
226  case EST_NoThrow:
227    return;
228  // If we're still at noexcept(true) and there's a throw() callee,
229  // change to that specification.
230  case EST_DynamicNone:
231    if (ComputedEST == EST_BasicNoexcept)
232      ComputedEST = EST_DynamicNone;
233    return;
234  case EST_DependentNoexcept:
235    llvm_unreachable(
236        "should not generate implicit declarations for dependent cases");
237  case EST_Dynamic:
238    break;
239  }
240  assert(EST == EST_Dynamic && "EST case not considered earlier.");
241  assert(ComputedEST != EST_None &&
242         "Shouldn't collect exceptions when throw-all is guaranteed.");
243  ComputedEST = EST_Dynamic;
244  // Record the exceptions in this function's exception specification.
245  for (const auto &E : Proto->exceptions())
246    if (ExceptionsSeen.insert(Self->Context.getCanonicalType(E)).second)
247      Exceptions.push_back(E);
248}
249
250void Sema::ImplicitExceptionSpecification::CalledStmt(Stmt *S) {
251  if (!S || ComputedEST == EST_MSAny)
252    return;
253
254  // FIXME:
255  //
256  // C++0x [except.spec]p14:
257  //   [An] implicit exception-specification specifies the type-id T if and
258  // only if T is allowed by the exception-specification of a function directly
259  // invoked by f's implicit definition; f shall allow all exceptions if any
260  // function it directly invokes allows all exceptions, and f shall allow no
261  // exceptions if every function it directly invokes allows no exceptions.
262  //
263  // Note in particular that if an implicit exception-specification is generated
264  // for a function containing a throw-expression, that specification can still
265  // be noexcept(true).
266  //
267  // Note also that 'directly invoked' is not defined in the standard, and there
268  // is no indication that we should only consider potentially-evaluated calls.
269  //
270  // Ultimately we should implement the intent of the standard: the exception
271  // specification should be the set of exceptions which can be thrown by the
272  // implicit definition. For now, we assume that any non-nothrow expression can
273  // throw any exception.
274
275  if (Self->canThrow(S))
276    ComputedEST = EST_None;
277}
278
279ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
280                                             SourceLocation EqualLoc) {
281  if (RequireCompleteType(Param->getLocation(), Param->getType(),
282                          diag::err_typecheck_decl_incomplete_type))
283    return true;
284
285  // C++ [dcl.fct.default]p5
286  //   A default argument expression is implicitly converted (clause
287  //   4) to the parameter type. The default argument expression has
288  //   the same semantic constraints as the initializer expression in
289  //   a declaration of a variable of the parameter type, using the
290  //   copy-initialization semantics (8.5).
291  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
292                                                                    Param);
293  InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
294                                                           EqualLoc);
295  InitializationSequence InitSeq(*this, Entity, Kind, Arg);
296  ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
297  if (Result.isInvalid())
298    return true;
299  Arg = Result.getAs<Expr>();
300
301  CheckCompletedExpr(Arg, EqualLoc);
302  Arg = MaybeCreateExprWithCleanups(Arg);
303
304  return Arg;
305}
306
307void Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
308                                   SourceLocation EqualLoc) {
309  // Add the default argument to the parameter
310  Param->setDefaultArg(Arg);
311
312  // We have already instantiated this parameter; provide each of the
313  // instantiations with the uninstantiated default argument.
314  UnparsedDefaultArgInstantiationsMap::iterator InstPos
315    = UnparsedDefaultArgInstantiations.find(Param);
316  if (InstPos != UnparsedDefaultArgInstantiations.end()) {
317    for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
318      InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
319
320    // We're done tracking this parameter's instantiations.
321    UnparsedDefaultArgInstantiations.erase(InstPos);
322  }
323}
324
325/// ActOnParamDefaultArgument - Check whether the default argument
326/// provided for a function parameter is well-formed. If so, attach it
327/// to the parameter declaration.
328void
329Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
330                                Expr *DefaultArg) {
331  if (!param || !DefaultArg)
332    return;
333
334  ParmVarDecl *Param = cast<ParmVarDecl>(param);
335  UnparsedDefaultArgLocs.erase(Param);
336
337  // Default arguments are only permitted in C++
338  if (!getLangOpts().CPlusPlus) {
339    Diag(EqualLoc, diag::err_param_default_argument)
340      << DefaultArg->getSourceRange();
341    return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg);
342  }
343
344  // Check for unexpanded parameter packs.
345  if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument))
346    return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg);
347
348  // C++11 [dcl.fct.default]p3
349  //   A default argument expression [...] shall not be specified for a
350  //   parameter pack.
351  if (Param->isParameterPack()) {
352    Diag(EqualLoc, diag::err_param_default_argument_on_parameter_pack)
353        << DefaultArg->getSourceRange();
354    // Recover by discarding the default argument.
355    Param->setDefaultArg(nullptr);
356    return;
357  }
358
359  ExprResult Result = ConvertParamDefaultArgument(Param, DefaultArg, EqualLoc);
360  if (Result.isInvalid())
361    return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg);
362
363  DefaultArg = Result.getAs<Expr>();
364
365  // Check that the default argument is well-formed
366  CheckDefaultArgumentVisitor DefaultArgChecker(*this, DefaultArg);
367  if (DefaultArgChecker.Visit(DefaultArg))
368    return ActOnParamDefaultArgumentError(param, EqualLoc, DefaultArg);
369
370  SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
371}
372
373/// ActOnParamUnparsedDefaultArgument - We've seen a default
374/// argument for a function parameter, but we can't parse it yet
375/// because we're inside a class definition. Note that this default
376/// argument will be parsed later.
377void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
378                                             SourceLocation EqualLoc,
379                                             SourceLocation ArgLoc) {
380  if (!param)
381    return;
382
383  ParmVarDecl *Param = cast<ParmVarDecl>(param);
384  Param->setUnparsedDefaultArg();
385  UnparsedDefaultArgLocs[Param] = ArgLoc;
386}
387
388/// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
389/// the default argument for the parameter param failed.
390void Sema::ActOnParamDefaultArgumentError(Decl *param, SourceLocation EqualLoc,
391                                          Expr *DefaultArg) {
392  if (!param)
393    return;
394
395  ParmVarDecl *Param = cast<ParmVarDecl>(param);
396  Param->setInvalidDecl();
397  UnparsedDefaultArgLocs.erase(Param);
398  ExprResult RE;
399  if (DefaultArg) {
400    RE = CreateRecoveryExpr(EqualLoc, DefaultArg->getEndLoc(), {DefaultArg},
401                            Param->getType().getNonReferenceType());
402  } else {
403    RE = CreateRecoveryExpr(EqualLoc, EqualLoc, {},
404                            Param->getType().getNonReferenceType());
405  }
406  Param->setDefaultArg(RE.get());
407}
408
409/// CheckExtraCXXDefaultArguments - Check for any extra default
410/// arguments in the declarator, which is not a function declaration
411/// or definition and therefore is not permitted to have default
412/// arguments. This routine should be invoked for every declarator
413/// that is not a function declaration or definition.
414void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
415  // C++ [dcl.fct.default]p3
416  //   A default argument expression shall be specified only in the
417  //   parameter-declaration-clause of a function declaration or in a
418  //   template-parameter (14.1). It shall not be specified for a
419  //   parameter pack. If it is specified in a
420  //   parameter-declaration-clause, it shall not occur within a
421  //   declarator or abstract-declarator of a parameter-declaration.
422  bool MightBeFunction = D.isFunctionDeclarationContext();
423  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
424    DeclaratorChunk &chunk = D.getTypeObject(i);
425    if (chunk.Kind == DeclaratorChunk::Function) {
426      if (MightBeFunction) {
427        // This is a function declaration. It can have default arguments, but
428        // keep looking in case its return type is a function type with default
429        // arguments.
430        MightBeFunction = false;
431        continue;
432      }
433      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e;
434           ++argIdx) {
435        ParmVarDecl *Param = cast<ParmVarDecl>(chunk.Fun.Params[argIdx].Param);
436        if (Param->hasUnparsedDefaultArg()) {
437          std::unique_ptr<CachedTokens> Toks =
438              std::move(chunk.Fun.Params[argIdx].DefaultArgTokens);
439          SourceRange SR;
440          if (Toks->size() > 1)
441            SR = SourceRange((*Toks)[1].getLocation(),
442                             Toks->back().getLocation());
443          else
444            SR = UnparsedDefaultArgLocs[Param];
445          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
446            << SR;
447        } else if (Param->getDefaultArg()) {
448          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
449            << Param->getDefaultArg()->getSourceRange();
450          Param->setDefaultArg(nullptr);
451        }
452      }
453    } else if (chunk.Kind != DeclaratorChunk::Paren) {
454      MightBeFunction = false;
455    }
456  }
457}
458
459static bool functionDeclHasDefaultArgument(const FunctionDecl *FD) {
460  return llvm::any_of(FD->parameters(), [](ParmVarDecl *P) {
461    return P->hasDefaultArg() && !P->hasInheritedDefaultArg();
462  });
463}
464
465/// MergeCXXFunctionDecl - Merge two declarations of the same C++
466/// function, once we already know that they have the same
467/// type. Subroutine of MergeFunctionDecl. Returns true if there was an
468/// error, false otherwise.
469bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
470                                Scope *S) {
471  bool Invalid = false;
472
473  // The declaration context corresponding to the scope is the semantic
474  // parent, unless this is a local function declaration, in which case
475  // it is that surrounding function.
476  DeclContext *ScopeDC = New->isLocalExternDecl()
477                             ? New->getLexicalDeclContext()
478                             : New->getDeclContext();
479
480  // Find the previous declaration for the purpose of default arguments.
481  FunctionDecl *PrevForDefaultArgs = Old;
482  for (/**/; PrevForDefaultArgs;
483       // Don't bother looking back past the latest decl if this is a local
484       // extern declaration; nothing else could work.
485       PrevForDefaultArgs = New->isLocalExternDecl()
486                                ? nullptr
487                                : PrevForDefaultArgs->getPreviousDecl()) {
488    // Ignore hidden declarations.
489    if (!LookupResult::isVisible(*this, PrevForDefaultArgs))
490      continue;
491
492    if (S && !isDeclInScope(PrevForDefaultArgs, ScopeDC, S) &&
493        !New->isCXXClassMember()) {
494      // Ignore default arguments of old decl if they are not in
495      // the same scope and this is not an out-of-line definition of
496      // a member function.
497      continue;
498    }
499
500    if (PrevForDefaultArgs->isLocalExternDecl() != New->isLocalExternDecl()) {
501      // If only one of these is a local function declaration, then they are
502      // declared in different scopes, even though isDeclInScope may think
503      // they're in the same scope. (If both are local, the scope check is
504      // sufficient, and if neither is local, then they are in the same scope.)
505      continue;
506    }
507
508    // We found the right previous declaration.
509    break;
510  }
511
512  // C++ [dcl.fct.default]p4:
513  //   For non-template functions, default arguments can be added in
514  //   later declarations of a function in the same
515  //   scope. Declarations in different scopes have completely
516  //   distinct sets of default arguments. That is, declarations in
517  //   inner scopes do not acquire default arguments from
518  //   declarations in outer scopes, and vice versa. In a given
519  //   function declaration, all parameters subsequent to a
520  //   parameter with a default argument shall have default
521  //   arguments supplied in this or previous declarations. A
522  //   default argument shall not be redefined by a later
523  //   declaration (not even to the same value).
524  //
525  // C++ [dcl.fct.default]p6:
526  //   Except for member functions of class templates, the default arguments
527  //   in a member function definition that appears outside of the class
528  //   definition are added to the set of default arguments provided by the
529  //   member function declaration in the class definition.
530  for (unsigned p = 0, NumParams = PrevForDefaultArgs
531                                       ? PrevForDefaultArgs->getNumParams()
532                                       : 0;
533       p < NumParams; ++p) {
534    ParmVarDecl *OldParam = PrevForDefaultArgs->getParamDecl(p);
535    ParmVarDecl *NewParam = New->getParamDecl(p);
536
537    bool OldParamHasDfl = OldParam ? OldParam->hasDefaultArg() : false;
538    bool NewParamHasDfl = NewParam->hasDefaultArg();
539
540    if (OldParamHasDfl && NewParamHasDfl) {
541      unsigned DiagDefaultParamID =
542        diag::err_param_default_argument_redefinition;
543
544      // MSVC accepts that default parameters be redefined for member functions
545      // of template class. The new default parameter's value is ignored.
546      Invalid = true;
547      if (getLangOpts().MicrosoftExt) {
548        CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(New);
549        if (MD && MD->getParent()->getDescribedClassTemplate()) {
550          // Merge the old default argument into the new parameter.
551          NewParam->setHasInheritedDefaultArg();
552          if (OldParam->hasUninstantiatedDefaultArg())
553            NewParam->setUninstantiatedDefaultArg(
554                                      OldParam->getUninstantiatedDefaultArg());
555          else
556            NewParam->setDefaultArg(OldParam->getInit());
557          DiagDefaultParamID = diag::ext_param_default_argument_redefinition;
558          Invalid = false;
559        }
560      }
561
562      // FIXME: If we knew where the '=' was, we could easily provide a fix-it
563      // hint here. Alternatively, we could walk the type-source information
564      // for NewParam to find the last source location in the type... but it
565      // isn't worth the effort right now. This is the kind of test case that
566      // is hard to get right:
567      //   int f(int);
568      //   void g(int (*fp)(int) = f);
569      //   void g(int (*fp)(int) = &f);
570      Diag(NewParam->getLocation(), DiagDefaultParamID)
571        << NewParam->getDefaultArgRange();
572
573      // Look for the function declaration where the default argument was
574      // actually written, which may be a declaration prior to Old.
575      for (auto Older = PrevForDefaultArgs;
576           OldParam->hasInheritedDefaultArg(); /**/) {
577        Older = Older->getPreviousDecl();
578        OldParam = Older->getParamDecl(p);
579      }
580
581      Diag(OldParam->getLocation(), diag::note_previous_definition)
582        << OldParam->getDefaultArgRange();
583    } else if (OldParamHasDfl) {
584      // Merge the old default argument into the new parameter unless the new
585      // function is a friend declaration in a template class. In the latter
586      // case the default arguments will be inherited when the friend
587      // declaration will be instantiated.
588      if (New->getFriendObjectKind() == Decl::FOK_None ||
589          !New->getLexicalDeclContext()->isDependentContext()) {
590        // It's important to use getInit() here;  getDefaultArg()
591        // strips off any top-level ExprWithCleanups.
592        NewParam->setHasInheritedDefaultArg();
593        if (OldParam->hasUnparsedDefaultArg())
594          NewParam->setUnparsedDefaultArg();
595        else if (OldParam->hasUninstantiatedDefaultArg())
596          NewParam->setUninstantiatedDefaultArg(
597                                       OldParam->getUninstantiatedDefaultArg());
598        else
599          NewParam->setDefaultArg(OldParam->getInit());
600      }
601    } else if (NewParamHasDfl) {
602      if (New->getDescribedFunctionTemplate()) {
603        // Paragraph 4, quoted above, only applies to non-template functions.
604        Diag(NewParam->getLocation(),
605             diag::err_param_default_argument_template_redecl)
606          << NewParam->getDefaultArgRange();
607        Diag(PrevForDefaultArgs->getLocation(),
608             diag::note_template_prev_declaration)
609            << false;
610      } else if (New->getTemplateSpecializationKind()
611                   != TSK_ImplicitInstantiation &&
612                 New->getTemplateSpecializationKind() != TSK_Undeclared) {
613        // C++ [temp.expr.spec]p21:
614        //   Default function arguments shall not be specified in a declaration
615        //   or a definition for one of the following explicit specializations:
616        //     - the explicit specialization of a function template;
617        //     - the explicit specialization of a member function template;
618        //     - the explicit specialization of a member function of a class
619        //       template where the class template specialization to which the
620        //       member function specialization belongs is implicitly
621        //       instantiated.
622        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
623          << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
624          << New->getDeclName()
625          << NewParam->getDefaultArgRange();
626      } else if (New->getDeclContext()->isDependentContext()) {
627        // C++ [dcl.fct.default]p6 (DR217):
628        //   Default arguments for a member function of a class template shall
629        //   be specified on the initial declaration of the member function
630        //   within the class template.
631        //
632        // Reading the tea leaves a bit in DR217 and its reference to DR205
633        // leads me to the conclusion that one cannot add default function
634        // arguments for an out-of-line definition of a member function of a
635        // dependent type.
636        int WhichKind = 2;
637        if (CXXRecordDecl *Record
638              = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
639          if (Record->getDescribedClassTemplate())
640            WhichKind = 0;
641          else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
642            WhichKind = 1;
643          else
644            WhichKind = 2;
645        }
646
647        Diag(NewParam->getLocation(),
648             diag::err_param_default_argument_member_template_redecl)
649          << WhichKind
650          << NewParam->getDefaultArgRange();
651      }
652    }
653  }
654
655  // DR1344: If a default argument is added outside a class definition and that
656  // default argument makes the function a special member function, the program
657  // is ill-formed. This can only happen for constructors.
658  if (isa<CXXConstructorDecl>(New) &&
659      New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
660    CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
661                     OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
662    if (NewSM != OldSM) {
663      ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
664      assert(NewParam->hasDefaultArg());
665      Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
666        << NewParam->getDefaultArgRange() << NewSM;
667      Diag(Old->getLocation(), diag::note_previous_declaration);
668    }
669  }
670
671  const FunctionDecl *Def;
672  // C++11 [dcl.constexpr]p1: If any declaration of a function or function
673  // template has a constexpr specifier then all its declarations shall
674  // contain the constexpr specifier.
675  if (New->getConstexprKind() != Old->getConstexprKind()) {
676    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
677        << New << static_cast<int>(New->getConstexprKind())
678        << static_cast<int>(Old->getConstexprKind());
679    Diag(Old->getLocation(), diag::note_previous_declaration);
680    Invalid = true;
681  } else if (!Old->getMostRecentDecl()->isInlined() && New->isInlined() &&
682             Old->isDefined(Def) &&
683             // If a friend function is inlined but does not have 'inline'
684             // specifier, it is a definition. Do not report attribute conflict
685             // in this case, redefinition will be diagnosed later.
686             (New->isInlineSpecified() ||
687              New->getFriendObjectKind() == Decl::FOK_None)) {
688    // C++11 [dcl.fcn.spec]p4:
689    //   If the definition of a function appears in a translation unit before its
690    //   first declaration as inline, the program is ill-formed.
691    Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;
692    Diag(Def->getLocation(), diag::note_previous_definition);
693    Invalid = true;
694  }
695
696  // C++17 [temp.deduct.guide]p3:
697  //   Two deduction guide declarations in the same translation unit
698  //   for the same class template shall not have equivalent
699  //   parameter-declaration-clauses.
700  if (isa<CXXDeductionGuideDecl>(New) &&
701      !New->isFunctionTemplateSpecialization() && isVisible(Old)) {
702    Diag(New->getLocation(), diag::err_deduction_guide_redeclared);
703    Diag(Old->getLocation(), diag::note_previous_declaration);
704  }
705
706  // C++11 [dcl.fct.default]p4: If a friend declaration specifies a default
707  // argument expression, that declaration shall be a definition and shall be
708  // the only declaration of the function or function template in the
709  // translation unit.
710  if (Old->getFriendObjectKind() == Decl::FOK_Undeclared &&
711      functionDeclHasDefaultArgument(Old)) {
712    Diag(New->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
713    Diag(Old->getLocation(), diag::note_previous_declaration);
714    Invalid = true;
715  }
716
717  // C++11 [temp.friend]p4 (DR329):
718  //   When a function is defined in a friend function declaration in a class
719  //   template, the function is instantiated when the function is odr-used.
720  //   The same restrictions on multiple declarations and definitions that
721  //   apply to non-template function declarations and definitions also apply
722  //   to these implicit definitions.
723  const FunctionDecl *OldDefinition = nullptr;
724  if (New->isThisDeclarationInstantiatedFromAFriendDefinition() &&
725      Old->isDefined(OldDefinition, true))
726    CheckForFunctionRedefinition(New, OldDefinition);
727
728  return Invalid;
729}
730
731void Sema::DiagPlaceholderVariableDefinition(SourceLocation Loc) {
732  Diag(Loc, getLangOpts().CPlusPlus26
733                ? diag::warn_cxx23_placeholder_var_definition
734                : diag::ext_placeholder_var_definition);
735}
736
737NamedDecl *
738Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D,
739                                   MultiTemplateParamsArg TemplateParamLists) {
740  assert(D.isDecompositionDeclarator());
741  const DecompositionDeclarator &Decomp = D.getDecompositionDeclarator();
742
743  // The syntax only allows a decomposition declarator as a simple-declaration,
744  // a for-range-declaration, or a condition in Clang, but we parse it in more
745  // cases than that.
746  if (!D.mayHaveDecompositionDeclarator()) {
747    Diag(Decomp.getLSquareLoc(), diag::err_decomp_decl_context)
748      << Decomp.getSourceRange();
749    return nullptr;
750  }
751
752  if (!TemplateParamLists.empty()) {
753    // FIXME: There's no rule against this, but there are also no rules that
754    // would actually make it usable, so we reject it for now.
755    Diag(TemplateParamLists.front()->getTemplateLoc(),
756         diag::err_decomp_decl_template);
757    return nullptr;
758  }
759
760  Diag(Decomp.getLSquareLoc(),
761       !getLangOpts().CPlusPlus17
762           ? diag::ext_decomp_decl
763           : D.getContext() == DeclaratorContext::Condition
764                 ? diag::ext_decomp_decl_cond
765                 : diag::warn_cxx14_compat_decomp_decl)
766      << Decomp.getSourceRange();
767
768  // The semantic context is always just the current context.
769  DeclContext *const DC = CurContext;
770
771  // C++17 [dcl.dcl]/8:
772  //   The decl-specifier-seq shall contain only the type-specifier auto
773  //   and cv-qualifiers.
774  // C++20 [dcl.dcl]/8:
775  //   If decl-specifier-seq contains any decl-specifier other than static,
776  //   thread_local, auto, or cv-qualifiers, the program is ill-formed.
777  // C++23 [dcl.pre]/6:
778  //   Each decl-specifier in the decl-specifier-seq shall be static,
779  //   thread_local, auto (9.2.9.6 [dcl.spec.auto]), or a cv-qualifier.
780  auto &DS = D.getDeclSpec();
781  {
782    // Note: While constrained-auto needs to be checked, we do so separately so
783    // we can emit a better diagnostic.
784    SmallVector<StringRef, 8> BadSpecifiers;
785    SmallVector<SourceLocation, 8> BadSpecifierLocs;
786    SmallVector<StringRef, 8> CPlusPlus20Specifiers;
787    SmallVector<SourceLocation, 8> CPlusPlus20SpecifierLocs;
788    if (auto SCS = DS.getStorageClassSpec()) {
789      if (SCS == DeclSpec::SCS_static) {
790        CPlusPlus20Specifiers.push_back(DeclSpec::getSpecifierName(SCS));
791        CPlusPlus20SpecifierLocs.push_back(DS.getStorageClassSpecLoc());
792      } else {
793        BadSpecifiers.push_back(DeclSpec::getSpecifierName(SCS));
794        BadSpecifierLocs.push_back(DS.getStorageClassSpecLoc());
795      }
796    }
797    if (auto TSCS = DS.getThreadStorageClassSpec()) {
798      CPlusPlus20Specifiers.push_back(DeclSpec::getSpecifierName(TSCS));
799      CPlusPlus20SpecifierLocs.push_back(DS.getThreadStorageClassSpecLoc());
800    }
801    if (DS.hasConstexprSpecifier()) {
802      BadSpecifiers.push_back(
803          DeclSpec::getSpecifierName(DS.getConstexprSpecifier()));
804      BadSpecifierLocs.push_back(DS.getConstexprSpecLoc());
805    }
806    if (DS.isInlineSpecified()) {
807      BadSpecifiers.push_back("inline");
808      BadSpecifierLocs.push_back(DS.getInlineSpecLoc());
809    }
810
811    if (!BadSpecifiers.empty()) {
812      auto &&Err = Diag(BadSpecifierLocs.front(), diag::err_decomp_decl_spec);
813      Err << (int)BadSpecifiers.size()
814          << llvm::join(BadSpecifiers.begin(), BadSpecifiers.end(), " ");
815      // Don't add FixItHints to remove the specifiers; we do still respect
816      // them when building the underlying variable.
817      for (auto Loc : BadSpecifierLocs)
818        Err << SourceRange(Loc, Loc);
819    } else if (!CPlusPlus20Specifiers.empty()) {
820      auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(),
821                         getLangOpts().CPlusPlus20
822                             ? diag::warn_cxx17_compat_decomp_decl_spec
823                             : diag::ext_decomp_decl_spec);
824      Warn << (int)CPlusPlus20Specifiers.size()
825           << llvm::join(CPlusPlus20Specifiers.begin(),
826                         CPlusPlus20Specifiers.end(), " ");
827      for (auto Loc : CPlusPlus20SpecifierLocs)
828        Warn << SourceRange(Loc, Loc);
829    }
830    // We can't recover from it being declared as a typedef.
831    if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef)
832      return nullptr;
833  }
834
835  // C++2a [dcl.struct.bind]p1:
836  //   A cv that includes volatile is deprecated
837  if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) &&
838      getLangOpts().CPlusPlus20)
839    Diag(DS.getVolatileSpecLoc(),
840         diag::warn_deprecated_volatile_structured_binding);
841
842  TypeSourceInfo *TInfo = GetTypeForDeclarator(D);
843  QualType R = TInfo->getType();
844
845  if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
846                                      UPPC_DeclarationType))
847    D.setInvalidType();
848
849  // The syntax only allows a single ref-qualifier prior to the decomposition
850  // declarator. No other declarator chunks are permitted. Also check the type
851  // specifier here.
852  if (DS.getTypeSpecType() != DeclSpec::TST_auto ||
853      D.hasGroupingParens() || D.getNumTypeObjects() > 1 ||
854      (D.getNumTypeObjects() == 1 &&
855       D.getTypeObject(0).Kind != DeclaratorChunk::Reference)) {
856    Diag(Decomp.getLSquareLoc(),
857         (D.hasGroupingParens() ||
858          (D.getNumTypeObjects() &&
859           D.getTypeObject(0).Kind == DeclaratorChunk::Paren))
860             ? diag::err_decomp_decl_parens
861             : diag::err_decomp_decl_type)
862        << R;
863
864    // In most cases, there's no actual problem with an explicitly-specified
865    // type, but a function type won't work here, and ActOnVariableDeclarator
866    // shouldn't be called for such a type.
867    if (R->isFunctionType())
868      D.setInvalidType();
869  }
870
871  // Constrained auto is prohibited by [decl.pre]p6, so check that here.
872  if (DS.isConstrainedAuto()) {
873    TemplateIdAnnotation *TemplRep = DS.getRepAsTemplateId();
874    assert(TemplRep->Kind == TNK_Concept_template &&
875           "No other template kind should be possible for a constrained auto");
876
877    SourceRange TemplRange{TemplRep->TemplateNameLoc,
878                           TemplRep->RAngleLoc.isValid()
879                               ? TemplRep->RAngleLoc
880                               : TemplRep->TemplateNameLoc};
881    Diag(TemplRep->TemplateNameLoc, diag::err_decomp_decl_constraint)
882        << TemplRange << FixItHint::CreateRemoval(TemplRange);
883  }
884
885  // Build the BindingDecls.
886  SmallVector<BindingDecl*, 8> Bindings;
887
888  // Build the BindingDecls.
889  for (auto &B : D.getDecompositionDeclarator().bindings()) {
890    // Check for name conflicts.
891    DeclarationNameInfo NameInfo(B.Name, B.NameLoc);
892    IdentifierInfo *VarName = B.Name;
893    assert(VarName && "Cannot have an unnamed binding declaration");
894
895    LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
896                          ForVisibleRedeclaration);
897    LookupName(Previous, S,
898               /*CreateBuiltins*/DC->getRedeclContext()->isTranslationUnit());
899
900    // It's not permitted to shadow a template parameter name.
901    if (Previous.isSingleResult() &&
902        Previous.getFoundDecl()->isTemplateParameter()) {
903      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
904                                      Previous.getFoundDecl());
905      Previous.clear();
906    }
907
908    auto *BD = BindingDecl::Create(Context, DC, B.NameLoc, VarName);
909
910    // Find the shadowed declaration before filtering for scope.
911    NamedDecl *ShadowedDecl = D.getCXXScopeSpec().isEmpty()
912                                  ? getShadowedDeclaration(BD, Previous)
913                                  : nullptr;
914
915    bool ConsiderLinkage = DC->isFunctionOrMethod() &&
916                           DS.getStorageClassSpec() == DeclSpec::SCS_extern;
917    FilterLookupForScope(Previous, DC, S, ConsiderLinkage,
918                         /*AllowInlineNamespace*/false);
919
920    bool IsPlaceholder = DS.getStorageClassSpec() != DeclSpec::SCS_static &&
921                         DC->isFunctionOrMethod() && VarName->isPlaceholder();
922    if (!Previous.empty()) {
923      if (IsPlaceholder) {
924        bool sameDC = (Previous.end() - 1)
925                          ->getDeclContext()
926                          ->getRedeclContext()
927                          ->Equals(DC->getRedeclContext());
928        if (sameDC &&
929            isDeclInScope(*(Previous.end() - 1), CurContext, S, false)) {
930          Previous.clear();
931          DiagPlaceholderVariableDefinition(B.NameLoc);
932        }
933      } else {
934        auto *Old = Previous.getRepresentativeDecl();
935        Diag(B.NameLoc, diag::err_redefinition) << B.Name;
936        Diag(Old->getLocation(), diag::note_previous_definition);
937      }
938    } else if (ShadowedDecl && !D.isRedeclaration()) {
939      CheckShadow(BD, ShadowedDecl, Previous);
940    }
941    PushOnScopeChains(BD, S, true);
942    Bindings.push_back(BD);
943    ParsingInitForAutoVars.insert(BD);
944  }
945
946  // There are no prior lookup results for the variable itself, because it
947  // is unnamed.
948  DeclarationNameInfo NameInfo((IdentifierInfo *)nullptr,
949                               Decomp.getLSquareLoc());
950  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
951                        ForVisibleRedeclaration);
952
953  // Build the variable that holds the non-decomposed object.
954  bool AddToScope = true;
955  NamedDecl *New =
956      ActOnVariableDeclarator(S, D, DC, TInfo, Previous,
957                              MultiTemplateParamsArg(), AddToScope, Bindings);
958  if (AddToScope) {
959    S->AddDecl(New);
960    CurContext->addHiddenDecl(New);
961  }
962
963  if (isInOpenMPDeclareTargetContext())
964    checkDeclIsAllowedInOpenMPTarget(nullptr, New);
965
966  return New;
967}
968
969static bool checkSimpleDecomposition(
970    Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src,
971    QualType DecompType, const llvm::APSInt &NumElems, QualType ElemType,
972    llvm::function_ref<ExprResult(SourceLocation, Expr *, unsigned)> GetInit) {
973  if ((int64_t)Bindings.size() != NumElems) {
974    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings)
975        << DecompType << (unsigned)Bindings.size()
976        << (unsigned)NumElems.getLimitedValue(UINT_MAX)
977        << toString(NumElems, 10) << (NumElems < Bindings.size());
978    return true;
979  }
980
981  unsigned I = 0;
982  for (auto *B : Bindings) {
983    SourceLocation Loc = B->getLocation();
984    ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc);
985    if (E.isInvalid())
986      return true;
987    E = GetInit(Loc, E.get(), I++);
988    if (E.isInvalid())
989      return true;
990    B->setBinding(ElemType, E.get());
991  }
992
993  return false;
994}
995
996static bool checkArrayLikeDecomposition(Sema &S,
997                                        ArrayRef<BindingDecl *> Bindings,
998                                        ValueDecl *Src, QualType DecompType,
999                                        const llvm::APSInt &NumElems,
1000                                        QualType ElemType) {
1001  return checkSimpleDecomposition(
1002      S, Bindings, Src, DecompType, NumElems, ElemType,
1003      [&](SourceLocation Loc, Expr *Base, unsigned I) -> ExprResult {
1004        ExprResult E = S.ActOnIntegerConstant(Loc, I);
1005        if (E.isInvalid())
1006          return ExprError();
1007        return S.CreateBuiltinArraySubscriptExpr(Base, Loc, E.get(), Loc);
1008      });
1009}
1010
1011static bool checkArrayDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings,
1012                                    ValueDecl *Src, QualType DecompType,
1013                                    const ConstantArrayType *CAT) {
1014  return checkArrayLikeDecomposition(S, Bindings, Src, DecompType,
1015                                     llvm::APSInt(CAT->getSize()),
1016                                     CAT->getElementType());
1017}
1018
1019static bool checkVectorDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings,
1020                                     ValueDecl *Src, QualType DecompType,
1021                                     const VectorType *VT) {
1022  return checkArrayLikeDecomposition(
1023      S, Bindings, Src, DecompType, llvm::APSInt::get(VT->getNumElements()),
1024      S.Context.getQualifiedType(VT->getElementType(),
1025                                 DecompType.getQualifiers()));
1026}
1027
1028static bool checkComplexDecomposition(Sema &S,
1029                                      ArrayRef<BindingDecl *> Bindings,
1030                                      ValueDecl *Src, QualType DecompType,
1031                                      const ComplexType *CT) {
1032  return checkSimpleDecomposition(
1033      S, Bindings, Src, DecompType, llvm::APSInt::get(2),
1034      S.Context.getQualifiedType(CT->getElementType(),
1035                                 DecompType.getQualifiers()),
1036      [&](SourceLocation Loc, Expr *Base, unsigned I) -> ExprResult {
1037        return S.CreateBuiltinUnaryOp(Loc, I ? UO_Imag : UO_Real, Base);
1038      });
1039}
1040
1041static std::string printTemplateArgs(const PrintingPolicy &PrintingPolicy,
1042                                     TemplateArgumentListInfo &Args,
1043                                     const TemplateParameterList *Params) {
1044  SmallString<128> SS;
1045  llvm::raw_svector_ostream OS(SS);
1046  bool First = true;
1047  unsigned I = 0;
1048  for (auto &Arg : Args.arguments()) {
1049    if (!First)
1050      OS << ", ";
1051    Arg.getArgument().print(PrintingPolicy, OS,
1052                            TemplateParameterList::shouldIncludeTypeForArgument(
1053                                PrintingPolicy, Params, I));
1054    First = false;
1055    I++;
1056  }
1057  return std::string(OS.str());
1058}
1059
1060static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup,
1061                                     SourceLocation Loc, StringRef Trait,
1062                                     TemplateArgumentListInfo &Args,
1063                                     unsigned DiagID) {
1064  auto DiagnoseMissing = [&] {
1065    if (DiagID)
1066      S.Diag(Loc, DiagID) << printTemplateArgs(S.Context.getPrintingPolicy(),
1067                                               Args, /*Params*/ nullptr);
1068    return true;
1069  };
1070
1071  // FIXME: Factor out duplication with lookupPromiseType in SemaCoroutine.
1072  NamespaceDecl *Std = S.getStdNamespace();
1073  if (!Std)
1074    return DiagnoseMissing();
1075
1076  // Look up the trait itself, within namespace std. We can diagnose various
1077  // problems with this lookup even if we've been asked to not diagnose a
1078  // missing specialization, because this can only fail if the user has been
1079  // declaring their own names in namespace std or we don't support the
1080  // standard library implementation in use.
1081  LookupResult Result(S, &S.PP.getIdentifierTable().get(Trait),
1082                      Loc, Sema::LookupOrdinaryName);
1083  if (!S.LookupQualifiedName(Result, Std))
1084    return DiagnoseMissing();
1085  if (Result.isAmbiguous())
1086    return true;
1087
1088  ClassTemplateDecl *TraitTD = Result.getAsSingle<ClassTemplateDecl>();
1089  if (!TraitTD) {
1090    Result.suppressDiagnostics();
1091    NamedDecl *Found = *Result.begin();
1092    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;
1093    S.Diag(Found->getLocation(), diag::note_declared_at);
1094    return true;
1095  }
1096
1097  // Build the template-id.
1098  QualType TraitTy = S.CheckTemplateIdType(TemplateName(TraitTD), Loc, Args);
1099  if (TraitTy.isNull())
1100    return true;
1101  if (!S.isCompleteType(Loc, TraitTy)) {
1102    if (DiagID)
1103      S.RequireCompleteType(
1104          Loc, TraitTy, DiagID,
1105          printTemplateArgs(S.Context.getPrintingPolicy(), Args,
1106                            TraitTD->getTemplateParameters()));
1107    return true;
1108  }
1109
1110  CXXRecordDecl *RD = TraitTy->getAsCXXRecordDecl();
1111  assert(RD && "specialization of class template is not a class?");
1112
1113  // Look up the member of the trait type.
1114  S.LookupQualifiedName(TraitMemberLookup, RD);
1115  return TraitMemberLookup.isAmbiguous();
1116}
1117
1118static TemplateArgumentLoc
1119getTrivialIntegralTemplateArgument(Sema &S, SourceLocation Loc, QualType T,
1120                                   uint64_t I) {
1121  TemplateArgument Arg(S.Context, S.Context.MakeIntValue(I, T), T);
1122  return S.getTrivialTemplateArgumentLoc(Arg, T, Loc);
1123}
1124
1125static TemplateArgumentLoc
1126getTrivialTypeTemplateArgument(Sema &S, SourceLocation Loc, QualType T) {
1127  return S.getTrivialTemplateArgumentLoc(TemplateArgument(T), QualType(), Loc);
1128}
1129
1130namespace { enum class IsTupleLike { TupleLike, NotTupleLike, Error }; }
1131
1132static IsTupleLike isTupleLike(Sema &S, SourceLocation Loc, QualType T,
1133                               llvm::APSInt &Size) {
1134  EnterExpressionEvaluationContext ContextRAII(
1135      S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
1136
1137  DeclarationName Value = S.PP.getIdentifierInfo("value");
1138  LookupResult R(S, Value, Loc, Sema::LookupOrdinaryName);
1139
1140  // Form template argument list for tuple_size<T>.
1141  TemplateArgumentListInfo Args(Loc, Loc);
1142  Args.addArgument(getTrivialTypeTemplateArgument(S, Loc, T));
1143
1144  // If there's no tuple_size specialization or the lookup of 'value' is empty,
1145  // it's not tuple-like.
1146  if (lookupStdTypeTraitMember(S, R, Loc, "tuple_size", Args, /*DiagID*/ 0) ||
1147      R.empty())
1148    return IsTupleLike::NotTupleLike;
1149
1150  // If we get this far, we've committed to the tuple interpretation, but
1151  // we can still fail if there actually isn't a usable ::value.
1152
1153  struct ICEDiagnoser : Sema::VerifyICEDiagnoser {
1154    LookupResult &R;
1155    TemplateArgumentListInfo &Args;
1156    ICEDiagnoser(LookupResult &R, TemplateArgumentListInfo &Args)
1157        : R(R), Args(Args) {}
1158    Sema::SemaDiagnosticBuilder diagnoseNotICE(Sema &S,
1159                                               SourceLocation Loc) override {
1160      return S.Diag(Loc, diag::err_decomp_decl_std_tuple_size_not_constant)
1161             << printTemplateArgs(S.Context.getPrintingPolicy(), Args,
1162                                  /*Params*/ nullptr);
1163    }
1164  } Diagnoser(R, Args);
1165
1166  ExprResult E =
1167      S.BuildDeclarationNameExpr(CXXScopeSpec(), R, /*NeedsADL*/false);
1168  if (E.isInvalid())
1169    return IsTupleLike::Error;
1170
1171  E = S.VerifyIntegerConstantExpression(E.get(), &Size, Diagnoser);
1172  if (E.isInvalid())
1173    return IsTupleLike::Error;
1174
1175  return IsTupleLike::TupleLike;
1176}
1177
1178/// \return std::tuple_element<I, T>::type.
1179static QualType getTupleLikeElementType(Sema &S, SourceLocation Loc,
1180                                        unsigned I, QualType T) {
1181  // Form template argument list for tuple_element<I, T>.
1182  TemplateArgumentListInfo Args(Loc, Loc);
1183  Args.addArgument(
1184      getTrivialIntegralTemplateArgument(S, Loc, S.Context.getSizeType(), I));
1185  Args.addArgument(getTrivialTypeTemplateArgument(S, Loc, T));
1186
1187  DeclarationName TypeDN = S.PP.getIdentifierInfo("type");
1188  LookupResult R(S, TypeDN, Loc, Sema::LookupOrdinaryName);
1189  if (lookupStdTypeTraitMember(
1190          S, R, Loc, "tuple_element", Args,
1191          diag::err_decomp_decl_std_tuple_element_not_specialized))
1192    return QualType();
1193
1194  auto *TD = R.getAsSingle<TypeDecl>();
1195  if (!TD) {
1196    R.suppressDiagnostics();
1197    S.Diag(Loc, diag::err_decomp_decl_std_tuple_element_not_specialized)
1198        << printTemplateArgs(S.Context.getPrintingPolicy(), Args,
1199                             /*Params*/ nullptr);
1200    if (!R.empty())
1201      S.Diag(R.getRepresentativeDecl()->getLocation(), diag::note_declared_at);
1202    return QualType();
1203  }
1204
1205  return S.Context.getTypeDeclType(TD);
1206}
1207
1208namespace {
1209struct InitializingBinding {
1210  Sema &S;
1211  InitializingBinding(Sema &S, BindingDecl *BD) : S(S) {
1212    Sema::CodeSynthesisContext Ctx;
1213    Ctx.Kind = Sema::CodeSynthesisContext::InitializingStructuredBinding;
1214    Ctx.PointOfInstantiation = BD->getLocation();
1215    Ctx.Entity = BD;
1216    S.pushCodeSynthesisContext(Ctx);
1217  }
1218  ~InitializingBinding() {
1219    S.popCodeSynthesisContext();
1220  }
1221};
1222}
1223
1224static bool checkTupleLikeDecomposition(Sema &S,
1225                                        ArrayRef<BindingDecl *> Bindings,
1226                                        VarDecl *Src, QualType DecompType,
1227                                        const llvm::APSInt &TupleSize) {
1228  if ((int64_t)Bindings.size() != TupleSize) {
1229    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings)
1230        << DecompType << (unsigned)Bindings.size()
1231        << (unsigned)TupleSize.getLimitedValue(UINT_MAX)
1232        << toString(TupleSize, 10) << (TupleSize < Bindings.size());
1233    return true;
1234  }
1235
1236  if (Bindings.empty())
1237    return false;
1238
1239  DeclarationName GetDN = S.PP.getIdentifierInfo("get");
1240
1241  // [dcl.decomp]p3:
1242  //   The unqualified-id get is looked up in the scope of E by class member
1243  //   access lookup ...
1244  LookupResult MemberGet(S, GetDN, Src->getLocation(), Sema::LookupMemberName);
1245  bool UseMemberGet = false;
1246  if (S.isCompleteType(Src->getLocation(), DecompType)) {
1247    if (auto *RD = DecompType->getAsCXXRecordDecl())
1248      S.LookupQualifiedName(MemberGet, RD);
1249    if (MemberGet.isAmbiguous())
1250      return true;
1251    //   ... and if that finds at least one declaration that is a function
1252    //   template whose first template parameter is a non-type parameter ...
1253    for (NamedDecl *D : MemberGet) {
1254      if (FunctionTemplateDecl *FTD =
1255              dyn_cast<FunctionTemplateDecl>(D->getUnderlyingDecl())) {
1256        TemplateParameterList *TPL = FTD->getTemplateParameters();
1257        if (TPL->size() != 0 &&
1258            isa<NonTypeTemplateParmDecl>(TPL->getParam(0))) {
1259          //   ... the initializer is e.get<i>().
1260          UseMemberGet = true;
1261          break;
1262        }
1263      }
1264    }
1265  }
1266
1267  unsigned I = 0;
1268  for (auto *B : Bindings) {
1269    InitializingBinding InitContext(S, B);
1270    SourceLocation Loc = B->getLocation();
1271
1272    ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc);
1273    if (E.isInvalid())
1274      return true;
1275
1276    //   e is an lvalue if the type of the entity is an lvalue reference and
1277    //   an xvalue otherwise
1278    if (!Src->getType()->isLValueReferenceType())
1279      E = ImplicitCastExpr::Create(S.Context, E.get()->getType(), CK_NoOp,
1280                                   E.get(), nullptr, VK_XValue,
1281                                   FPOptionsOverride());
1282
1283    TemplateArgumentListInfo Args(Loc, Loc);
1284    Args.addArgument(
1285        getTrivialIntegralTemplateArgument(S, Loc, S.Context.getSizeType(), I));
1286
1287    if (UseMemberGet) {
1288      //   if [lookup of member get] finds at least one declaration, the
1289      //   initializer is e.get<i-1>().
1290      E = S.BuildMemberReferenceExpr(E.get(), DecompType, Loc, false,
1291                                     CXXScopeSpec(), SourceLocation(), nullptr,
1292                                     MemberGet, &Args, nullptr);
1293      if (E.isInvalid())
1294        return true;
1295
1296      E = S.BuildCallExpr(nullptr, E.get(), Loc, std::nullopt, Loc);
1297    } else {
1298      //   Otherwise, the initializer is get<i-1>(e), where get is looked up
1299      //   in the associated namespaces.
1300      Expr *Get = UnresolvedLookupExpr::Create(
1301          S.Context, nullptr, NestedNameSpecifierLoc(), SourceLocation(),
1302          DeclarationNameInfo(GetDN, Loc), /*RequiresADL*/ true, &Args,
1303          UnresolvedSetIterator(), UnresolvedSetIterator(),
1304          /*KnownDependent=*/false);
1305
1306      Expr *Arg = E.get();
1307      E = S.BuildCallExpr(nullptr, Get, Loc, Arg, Loc);
1308    }
1309    if (E.isInvalid())
1310      return true;
1311    Expr *Init = E.get();
1312
1313    //   Given the type T designated by std::tuple_element<i - 1, E>::type,
1314    QualType T = getTupleLikeElementType(S, Loc, I, DecompType);
1315    if (T.isNull())
1316      return true;
1317
1318    //   each vi is a variable of type "reference to T" initialized with the
1319    //   initializer, where the reference is an lvalue reference if the
1320    //   initializer is an lvalue and an rvalue reference otherwise
1321    QualType RefType =
1322        S.BuildReferenceType(T, E.get()->isLValue(), Loc, B->getDeclName());
1323    if (RefType.isNull())
1324      return true;
1325    auto *RefVD = VarDecl::Create(
1326        S.Context, Src->getDeclContext(), Loc, Loc,
1327        B->getDeclName().getAsIdentifierInfo(), RefType,
1328        S.Context.getTrivialTypeSourceInfo(T, Loc), Src->getStorageClass());
1329    RefVD->setLexicalDeclContext(Src->getLexicalDeclContext());
1330    RefVD->setTSCSpec(Src->getTSCSpec());
1331    RefVD->setImplicit();
1332    if (Src->isInlineSpecified())
1333      RefVD->setInlineSpecified();
1334    RefVD->getLexicalDeclContext()->addHiddenDecl(RefVD);
1335
1336    InitializedEntity Entity = InitializedEntity::InitializeBinding(RefVD);
1337    InitializationKind Kind = InitializationKind::CreateCopy(Loc, Loc);
1338    InitializationSequence Seq(S, Entity, Kind, Init);
1339    E = Seq.Perform(S, Entity, Kind, Init);
1340    if (E.isInvalid())
1341      return true;
1342    E = S.ActOnFinishFullExpr(E.get(), Loc, /*DiscardedValue*/ false);
1343    if (E.isInvalid())
1344      return true;
1345    RefVD->setInit(E.get());
1346    S.CheckCompleteVariableDeclaration(RefVD);
1347
1348    E = S.BuildDeclarationNameExpr(CXXScopeSpec(),
1349                                   DeclarationNameInfo(B->getDeclName(), Loc),
1350                                   RefVD);
1351    if (E.isInvalid())
1352      return true;
1353
1354    B->setBinding(T, E.get());
1355    I++;
1356  }
1357
1358  return false;
1359}
1360
1361/// Find the base class to decompose in a built-in decomposition of a class type.
1362/// This base class search is, unfortunately, not quite like any other that we
1363/// perform anywhere else in C++.
1364static DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc,
1365                                                const CXXRecordDecl *RD,
1366                                                CXXCastPath &BasePath) {
1367  auto BaseHasFields = [](const CXXBaseSpecifier *Specifier,
1368                          CXXBasePath &Path) {
1369    return Specifier->getType()->getAsCXXRecordDecl()->hasDirectFields();
1370  };
1371
1372  const CXXRecordDecl *ClassWithFields = nullptr;
1373  AccessSpecifier AS = AS_public;
1374  if (RD->hasDirectFields())
1375    // [dcl.decomp]p4:
1376    //   Otherwise, all of E's non-static data members shall be public direct
1377    //   members of E ...
1378    ClassWithFields = RD;
1379  else {
1380    //   ... or of ...
1381    CXXBasePaths Paths;
1382    Paths.setOrigin(const_cast<CXXRecordDecl*>(RD));
1383    if (!RD->lookupInBases(BaseHasFields, Paths)) {
1384      // If no classes have fields, just decompose RD itself. (This will work
1385      // if and only if zero bindings were provided.)
1386      return DeclAccessPair::make(const_cast<CXXRecordDecl*>(RD), AS_public);
1387    }
1388
1389    CXXBasePath *BestPath = nullptr;
1390    for (auto &P : Paths) {
1391      if (!BestPath)
1392        BestPath = &P;
1393      else if (!S.Context.hasSameType(P.back().Base->getType(),
1394                                      BestPath->back().Base->getType())) {
1395        //   ... the same ...
1396        S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members)
1397          << false << RD << BestPath->back().Base->getType()
1398          << P.back().Base->getType();
1399        return DeclAccessPair();
1400      } else if (P.Access < BestPath->Access) {
1401        BestPath = &P;
1402      }
1403    }
1404
1405    //   ... unambiguous ...
1406    QualType BaseType = BestPath->back().Base->getType();
1407    if (Paths.isAmbiguous(S.Context.getCanonicalType(BaseType))) {
1408      S.Diag(Loc, diag::err_decomp_decl_ambiguous_base)
1409        << RD << BaseType << S.getAmbiguousPathsDisplayString(Paths);
1410      return DeclAccessPair();
1411    }
1412
1413    //   ... [accessible, implied by other rules] base class of E.
1414    S.CheckBaseClassAccess(Loc, BaseType, S.Context.getRecordType(RD),
1415                           *BestPath, diag::err_decomp_decl_inaccessible_base);
1416    AS = BestPath->Access;
1417
1418    ClassWithFields = BaseType->getAsCXXRecordDecl();
1419    S.BuildBasePathArray(Paths, BasePath);
1420  }
1421
1422  // The above search did not check whether the selected class itself has base
1423  // classes with fields, so check that now.
1424  CXXBasePaths Paths;
1425  if (ClassWithFields->lookupInBases(BaseHasFields, Paths)) {
1426    S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members)
1427      << (ClassWithFields == RD) << RD << ClassWithFields
1428      << Paths.front().back().Base->getType();
1429    return DeclAccessPair();
1430  }
1431
1432  return DeclAccessPair::make(const_cast<CXXRecordDecl*>(ClassWithFields), AS);
1433}
1434
1435static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl*> Bindings,
1436                                     ValueDecl *Src, QualType DecompType,
1437                                     const CXXRecordDecl *OrigRD) {
1438  if (S.RequireCompleteType(Src->getLocation(), DecompType,
1439                            diag::err_incomplete_type))
1440    return true;
1441
1442  CXXCastPath BasePath;
1443  DeclAccessPair BasePair =
1444      findDecomposableBaseClass(S, Src->getLocation(), OrigRD, BasePath);
1445  const CXXRecordDecl *RD = cast_or_null<CXXRecordDecl>(BasePair.getDecl());
1446  if (!RD)
1447    return true;
1448  QualType BaseType = S.Context.getQualifiedType(S.Context.getRecordType(RD),
1449                                                 DecompType.getQualifiers());
1450
1451  auto DiagnoseBadNumberOfBindings = [&]() -> bool {
1452    unsigned NumFields = llvm::count_if(
1453        RD->fields(), [](FieldDecl *FD) { return !FD->isUnnamedBitfield(); });
1454    assert(Bindings.size() != NumFields);
1455    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings)
1456        << DecompType << (unsigned)Bindings.size() << NumFields << NumFields
1457        << (NumFields < Bindings.size());
1458    return true;
1459  };
1460
1461  //   all of E's non-static data members shall be [...] well-formed
1462  //   when named as e.name in the context of the structured binding,
1463  //   E shall not have an anonymous union member, ...
1464  unsigned I = 0;
1465  for (auto *FD : RD->fields()) {
1466    if (FD->isUnnamedBitfield())
1467      continue;
1468
1469    // All the non-static data members are required to be nameable, so they
1470    // must all have names.
1471    if (!FD->getDeclName()) {
1472      if (RD->isLambda()) {
1473        S.Diag(Src->getLocation(), diag::err_decomp_decl_lambda);
1474        S.Diag(RD->getLocation(), diag::note_lambda_decl);
1475        return true;
1476      }
1477
1478      if (FD->isAnonymousStructOrUnion()) {
1479        S.Diag(Src->getLocation(), diag::err_decomp_decl_anon_union_member)
1480          << DecompType << FD->getType()->isUnionType();
1481        S.Diag(FD->getLocation(), diag::note_declared_at);
1482        return true;
1483      }
1484
1485      // FIXME: Are there any other ways we could have an anonymous member?
1486    }
1487
1488    // We have a real field to bind.
1489    if (I >= Bindings.size())
1490      return DiagnoseBadNumberOfBindings();
1491    auto *B = Bindings[I++];
1492    SourceLocation Loc = B->getLocation();
1493
1494    // The field must be accessible in the context of the structured binding.
1495    // We already checked that the base class is accessible.
1496    // FIXME: Add 'const' to AccessedEntity's classes so we can remove the
1497    // const_cast here.
1498    S.CheckStructuredBindingMemberAccess(
1499        Loc, const_cast<CXXRecordDecl *>(OrigRD),
1500        DeclAccessPair::make(FD, CXXRecordDecl::MergeAccess(
1501                                     BasePair.getAccess(), FD->getAccess())));
1502
1503    // Initialize the binding to Src.FD.
1504    ExprResult E = S.BuildDeclRefExpr(Src, DecompType, VK_LValue, Loc);
1505    if (E.isInvalid())
1506      return true;
1507    E = S.ImpCastExprToType(E.get(), BaseType, CK_UncheckedDerivedToBase,
1508                            VK_LValue, &BasePath);
1509    if (E.isInvalid())
1510      return true;
1511    E = S.BuildFieldReferenceExpr(E.get(), /*IsArrow*/ false, Loc,
1512                                  CXXScopeSpec(), FD,
1513                                  DeclAccessPair::make(FD, FD->getAccess()),
1514                                  DeclarationNameInfo(FD->getDeclName(), Loc));
1515    if (E.isInvalid())
1516      return true;
1517
1518    // If the type of the member is T, the referenced type is cv T, where cv is
1519    // the cv-qualification of the decomposition expression.
1520    //
1521    // FIXME: We resolve a defect here: if the field is mutable, we do not add
1522    // 'const' to the type of the field.
1523    Qualifiers Q = DecompType.getQualifiers();
1524    if (FD->isMutable())
1525      Q.removeConst();
1526    B->setBinding(S.BuildQualifiedType(FD->getType(), Loc, Q), E.get());
1527  }
1528
1529  if (I != Bindings.size())
1530    return DiagnoseBadNumberOfBindings();
1531
1532  return false;
1533}
1534
1535void Sema::CheckCompleteDecompositionDeclaration(DecompositionDecl *DD) {
1536  QualType DecompType = DD->getType();
1537
1538  // If the type of the decomposition is dependent, then so is the type of
1539  // each binding.
1540  if (DecompType->isDependentType()) {
1541    for (auto *B : DD->bindings())
1542      B->setType(Context.DependentTy);
1543    return;
1544  }
1545
1546  DecompType = DecompType.getNonReferenceType();
1547  ArrayRef<BindingDecl*> Bindings = DD->bindings();
1548
1549  // C++1z [dcl.decomp]/2:
1550  //   If E is an array type [...]
1551  // As an extension, we also support decomposition of built-in complex and
1552  // vector types.
1553  if (auto *CAT = Context.getAsConstantArrayType(DecompType)) {
1554    if (checkArrayDecomposition(*this, Bindings, DD, DecompType, CAT))
1555      DD->setInvalidDecl();
1556    return;
1557  }
1558  if (auto *VT = DecompType->getAs<VectorType>()) {
1559    if (checkVectorDecomposition(*this, Bindings, DD, DecompType, VT))
1560      DD->setInvalidDecl();
1561    return;
1562  }
1563  if (auto *CT = DecompType->getAs<ComplexType>()) {
1564    if (checkComplexDecomposition(*this, Bindings, DD, DecompType, CT))
1565      DD->setInvalidDecl();
1566    return;
1567  }
1568
1569  // C++1z [dcl.decomp]/3:
1570  //   if the expression std::tuple_size<E>::value is a well-formed integral
1571  //   constant expression, [...]
1572  llvm::APSInt TupleSize(32);
1573  switch (isTupleLike(*this, DD->getLocation(), DecompType, TupleSize)) {
1574  case IsTupleLike::Error:
1575    DD->setInvalidDecl();
1576    return;
1577
1578  case IsTupleLike::TupleLike:
1579    if (checkTupleLikeDecomposition(*this, Bindings, DD, DecompType, TupleSize))
1580      DD->setInvalidDecl();
1581    return;
1582
1583  case IsTupleLike::NotTupleLike:
1584    break;
1585  }
1586
1587  // C++1z [dcl.dcl]/8:
1588  //   [E shall be of array or non-union class type]
1589  CXXRecordDecl *RD = DecompType->getAsCXXRecordDecl();
1590  if (!RD || RD->isUnion()) {
1591    Diag(DD->getLocation(), diag::err_decomp_decl_unbindable_type)
1592        << DD << !RD << DecompType;
1593    DD->setInvalidDecl();
1594    return;
1595  }
1596
1597  // C++1z [dcl.decomp]/4:
1598  //   all of E's non-static data members shall be [...] direct members of
1599  //   E or of the same unambiguous public base class of E, ...
1600  if (checkMemberDecomposition(*this, Bindings, DD, DecompType, RD))
1601    DD->setInvalidDecl();
1602}
1603
1604/// Merge the exception specifications of two variable declarations.
1605///
1606/// This is called when there's a redeclaration of a VarDecl. The function
1607/// checks if the redeclaration might have an exception specification and
1608/// validates compatibility and merges the specs if necessary.
1609void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
1610  // Shortcut if exceptions are disabled.
1611  if (!getLangOpts().CXXExceptions)
1612    return;
1613
1614  assert(Context.hasSameType(New->getType(), Old->getType()) &&
1615         "Should only be called if types are otherwise the same.");
1616
1617  QualType NewType = New->getType();
1618  QualType OldType = Old->getType();
1619
1620  // We're only interested in pointers and references to functions, as well
1621  // as pointers to member functions.
1622  if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
1623    NewType = R->getPointeeType();
1624    OldType = OldType->castAs<ReferenceType>()->getPointeeType();
1625  } else if (const PointerType *P = NewType->getAs<PointerType>()) {
1626    NewType = P->getPointeeType();
1627    OldType = OldType->castAs<PointerType>()->getPointeeType();
1628  } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
1629    NewType = M->getPointeeType();
1630    OldType = OldType->castAs<MemberPointerType>()->getPointeeType();
1631  }
1632
1633  if (!NewType->isFunctionProtoType())
1634    return;
1635
1636  // There's lots of special cases for functions. For function pointers, system
1637  // libraries are hopefully not as broken so that we don't need these
1638  // workarounds.
1639  if (CheckEquivalentExceptionSpec(
1640        OldType->getAs<FunctionProtoType>(), Old->getLocation(),
1641        NewType->getAs<FunctionProtoType>(), New->getLocation())) {
1642    New->setInvalidDecl();
1643  }
1644}
1645
1646/// CheckCXXDefaultArguments - Verify that the default arguments for a
1647/// function declaration are well-formed according to C++
1648/// [dcl.fct.default].
1649void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
1650  unsigned NumParams = FD->getNumParams();
1651  unsigned ParamIdx = 0;
1652
1653  // This checking doesn't make sense for explicit specializations; their
1654  // default arguments are determined by the declaration we're specializing,
1655  // not by FD.
1656  if (FD->getTemplateSpecializationKind() == TSK_ExplicitSpecialization)
1657    return;
1658  if (auto *FTD = FD->getDescribedFunctionTemplate())
1659    if (FTD->isMemberSpecialization())
1660      return;
1661
1662  // Find first parameter with a default argument
1663  for (; ParamIdx < NumParams; ++ParamIdx) {
1664    ParmVarDecl *Param = FD->getParamDecl(ParamIdx);
1665    if (Param->hasDefaultArg())
1666      break;
1667  }
1668
1669  // C++20 [dcl.fct.default]p4:
1670  //   In a given function declaration, each parameter subsequent to a parameter
1671  //   with a default argument shall have a default argument supplied in this or
1672  //   a previous declaration, unless the parameter was expanded from a
1673  //   parameter pack, or shall be a function parameter pack.
1674  for (; ParamIdx < NumParams; ++ParamIdx) {
1675    ParmVarDecl *Param = FD->getParamDecl(ParamIdx);
1676    if (!Param->hasDefaultArg() && !Param->isParameterPack() &&
1677        !(CurrentInstantiationScope &&
1678          CurrentInstantiationScope->isLocalPackExpansion(Param))) {
1679      if (Param->isInvalidDecl())
1680        /* We already complained about this parameter. */;
1681      else if (Param->getIdentifier())
1682        Diag(Param->getLocation(),
1683             diag::err_param_default_argument_missing_name)
1684          << Param->getIdentifier();
1685      else
1686        Diag(Param->getLocation(),
1687             diag::err_param_default_argument_missing);
1688    }
1689  }
1690}
1691
1692/// Check that the given type is a literal type. Issue a diagnostic if not,
1693/// if Kind is Diagnose.
1694/// \return \c true if a problem has been found (and optionally diagnosed).
1695template <typename... Ts>
1696static bool CheckLiteralType(Sema &SemaRef, Sema::CheckConstexprKind Kind,
1697                             SourceLocation Loc, QualType T, unsigned DiagID,
1698                             Ts &&...DiagArgs) {
1699  if (T->isDependentType())
1700    return false;
1701
1702  switch (Kind) {
1703  case Sema::CheckConstexprKind::Diagnose:
1704    return SemaRef.RequireLiteralType(Loc, T, DiagID,
1705                                      std::forward<Ts>(DiagArgs)...);
1706
1707  case Sema::CheckConstexprKind::CheckValid:
1708    return !T->isLiteralType(SemaRef.Context);
1709  }
1710
1711  llvm_unreachable("unknown CheckConstexprKind");
1712}
1713
1714/// Determine whether a destructor cannot be constexpr due to
1715static bool CheckConstexprDestructorSubobjects(Sema &SemaRef,
1716                                               const CXXDestructorDecl *DD,
1717                                               Sema::CheckConstexprKind Kind) {
1718  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {
1719    const CXXRecordDecl *RD =
1720        T->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
1721    if (!RD || RD->hasConstexprDestructor())
1722      return true;
1723
1724    if (Kind == Sema::CheckConstexprKind::Diagnose) {
1725      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject)
1726          << static_cast<int>(DD->getConstexprKind()) << !FD
1727          << (FD ? FD->getDeclName() : DeclarationName()) << T;
1728      SemaRef.Diag(Loc, diag::note_constexpr_dtor_subobject)
1729          << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;
1730    }
1731    return false;
1732  };
1733
1734  const CXXRecordDecl *RD = DD->getParent();
1735  for (const CXXBaseSpecifier &B : RD->bases())
1736    if (!Check(B.getBaseTypeLoc(), B.getType(), nullptr))
1737      return false;
1738  for (const FieldDecl *FD : RD->fields())
1739    if (!Check(FD->getLocation(), FD->getType(), FD))
1740      return false;
1741  return true;
1742}
1743
1744/// Check whether a function's parameter types are all literal types. If so,
1745/// return true. If not, produce a suitable diagnostic and return false.
1746static bool CheckConstexprParameterTypes(Sema &SemaRef,
1747                                         const FunctionDecl *FD,
1748                                         Sema::CheckConstexprKind Kind) {
1749  unsigned ArgIndex = 0;
1750  const auto *FT = FD->getType()->castAs<FunctionProtoType>();
1751  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(),
1752                                              e = FT->param_type_end();
1753       i != e; ++i, ++ArgIndex) {
1754    const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
1755    assert(PD && "null in a parameter list");
1756    SourceLocation ParamLoc = PD->getLocation();
1757    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i,
1758                         diag::err_constexpr_non_literal_param, ArgIndex + 1,
1759                         PD->getSourceRange(), isa<CXXConstructorDecl>(FD),
1760                         FD->isConsteval()))
1761      return false;
1762  }
1763  return true;
1764}
1765
1766/// Check whether a function's return type is a literal type. If so, return
1767/// true. If not, produce a suitable diagnostic and return false.
1768static bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD,
1769                                     Sema::CheckConstexprKind Kind) {
1770  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(),
1771                       diag::err_constexpr_non_literal_return,
1772                       FD->isConsteval()))
1773    return false;
1774  return true;
1775}
1776
1777/// Get diagnostic %select index for tag kind for
1778/// record diagnostic message.
1779/// WARNING: Indexes apply to particular diagnostics only!
1780///
1781/// \returns diagnostic %select index.
1782static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
1783  switch (Tag) {
1784  case TagTypeKind::Struct:
1785    return 0;
1786  case TagTypeKind::Interface:
1787    return 1;
1788  case TagTypeKind::Class:
1789    return 2;
1790  default: llvm_unreachable("Invalid tag kind for record diagnostic!");
1791  }
1792}
1793
1794static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl,
1795                                       Stmt *Body,
1796                                       Sema::CheckConstexprKind Kind);
1797
1798// Check whether a function declaration satisfies the requirements of a
1799// constexpr function definition or a constexpr constructor definition. If so,
1800// return true. If not, produce appropriate diagnostics (unless asked not to by
1801// Kind) and return false.
1802//
1803// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
1804bool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD,
1805                                            CheckConstexprKind Kind) {
1806  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
1807  if (MD && MD->isInstance()) {
1808    // C++11 [dcl.constexpr]p4:
1809    //  The definition of a constexpr constructor shall satisfy the following
1810    //  constraints:
1811    //  - the class shall not have any virtual base classes;
1812    //
1813    // FIXME: This only applies to constructors and destructors, not arbitrary
1814    // member functions.
1815    const CXXRecordDecl *RD = MD->getParent();
1816    if (RD->getNumVBases()) {
1817      if (Kind == CheckConstexprKind::CheckValid)
1818        return false;
1819
1820      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
1821        << isa<CXXConstructorDecl>(NewFD)
1822        << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
1823      for (const auto &I : RD->vbases())
1824        Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here)
1825            << I.getSourceRange();
1826      return false;
1827    }
1828  }
1829
1830  if (!isa<CXXConstructorDecl>(NewFD)) {
1831    // C++11 [dcl.constexpr]p3:
1832    //  The definition of a constexpr function shall satisfy the following
1833    //  constraints:
1834    // - it shall not be virtual; (removed in C++20)
1835    const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
1836    if (Method && Method->isVirtual()) {
1837      if (getLangOpts().CPlusPlus20) {
1838        if (Kind == CheckConstexprKind::Diagnose)
1839          Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual);
1840      } else {
1841        if (Kind == CheckConstexprKind::CheckValid)
1842          return false;
1843
1844        Method = Method->getCanonicalDecl();
1845        Diag(Method->getLocation(), diag::err_constexpr_virtual);
1846
1847        // If it's not obvious why this function is virtual, find an overridden
1848        // function which uses the 'virtual' keyword.
1849        const CXXMethodDecl *WrittenVirtual = Method;
1850        while (!WrittenVirtual->isVirtualAsWritten())
1851          WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
1852        if (WrittenVirtual != Method)
1853          Diag(WrittenVirtual->getLocation(),
1854               diag::note_overridden_virtual_function);
1855        return false;
1856      }
1857    }
1858
1859    // - its return type shall be a literal type;
1860    if (!CheckConstexprReturnType(*this, NewFD, Kind))
1861      return false;
1862  }
1863
1864  if (auto *Dtor = dyn_cast<CXXDestructorDecl>(NewFD)) {
1865    // A destructor can be constexpr only if the defaulted destructor could be;
1866    // we don't need to check the members and bases if we already know they all
1867    // have constexpr destructors.
1868    if (!Dtor->getParent()->defaultedDestructorIsConstexpr()) {
1869      if (Kind == CheckConstexprKind::CheckValid)
1870        return false;
1871      if (!CheckConstexprDestructorSubobjects(*this, Dtor, Kind))
1872        return false;
1873    }
1874  }
1875
1876  // - each of its parameter types shall be a literal type;
1877  if (!CheckConstexprParameterTypes(*this, NewFD, Kind))
1878    return false;
1879
1880  Stmt *Body = NewFD->getBody();
1881  assert(Body &&
1882         "CheckConstexprFunctionDefinition called on function with no body");
1883  return CheckConstexprFunctionBody(*this, NewFD, Body, Kind);
1884}
1885
1886/// Check the given declaration statement is legal within a constexpr function
1887/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
1888///
1889/// \return true if the body is OK (maybe only as an extension), false if we
1890///         have diagnosed a problem.
1891static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
1892                                   DeclStmt *DS, SourceLocation &Cxx1yLoc,
1893                                   Sema::CheckConstexprKind Kind) {
1894  // C++11 [dcl.constexpr]p3 and p4:
1895  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
1896  //  contain only
1897  for (const auto *DclIt : DS->decls()) {
1898    switch (DclIt->getKind()) {
1899    case Decl::StaticAssert:
1900    case Decl::Using:
1901    case Decl::UsingShadow:
1902    case Decl::UsingDirective:
1903    case Decl::UnresolvedUsingTypename:
1904    case Decl::UnresolvedUsingValue:
1905    case Decl::UsingEnum:
1906      //   - static_assert-declarations
1907      //   - using-declarations,
1908      //   - using-directives,
1909      //   - using-enum-declaration
1910      continue;
1911
1912    case Decl::Typedef:
1913    case Decl::TypeAlias: {
1914      //   - typedef declarations and alias-declarations that do not define
1915      //     classes or enumerations,
1916      const auto *TN = cast<TypedefNameDecl>(DclIt);
1917      if (TN->getUnderlyingType()->isVariablyModifiedType()) {
1918        // Don't allow variably-modified types in constexpr functions.
1919        if (Kind == Sema::CheckConstexprKind::Diagnose) {
1920          TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
1921          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
1922            << TL.getSourceRange() << TL.getType()
1923            << isa<CXXConstructorDecl>(Dcl);
1924        }
1925        return false;
1926      }
1927      continue;
1928    }
1929
1930    case Decl::Enum:
1931    case Decl::CXXRecord:
1932      // C++1y allows types to be defined, not just declared.
1933      if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {
1934        if (Kind == Sema::CheckConstexprKind::Diagnose) {
1935          SemaRef.Diag(DS->getBeginLoc(),
1936                       SemaRef.getLangOpts().CPlusPlus14
1937                           ? diag::warn_cxx11_compat_constexpr_type_definition
1938                           : diag::ext_constexpr_type_definition)
1939              << isa<CXXConstructorDecl>(Dcl);
1940        } else if (!SemaRef.getLangOpts().CPlusPlus14) {
1941          return false;
1942        }
1943      }
1944      continue;
1945
1946    case Decl::EnumConstant:
1947    case Decl::IndirectField:
1948    case Decl::ParmVar:
1949      // These can only appear with other declarations which are banned in
1950      // C++11 and permitted in C++1y, so ignore them.
1951      continue;
1952
1953    case Decl::Var:
1954    case Decl::Decomposition: {
1955      // C++1y [dcl.constexpr]p3 allows anything except:
1956      //   a definition of a variable of non-literal type or of static or
1957      //   thread storage duration or [before C++2a] for which no
1958      //   initialization is performed.
1959      const auto *VD = cast<VarDecl>(DclIt);
1960      if (VD->isThisDeclarationADefinition()) {
1961        if (VD->isStaticLocal()) {
1962          if (Kind == Sema::CheckConstexprKind::Diagnose) {
1963            SemaRef.Diag(VD->getLocation(),
1964                         SemaRef.getLangOpts().CPlusPlus23
1965                             ? diag::warn_cxx20_compat_constexpr_var
1966                             : diag::ext_constexpr_static_var)
1967                << isa<CXXConstructorDecl>(Dcl)
1968                << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
1969          } else if (!SemaRef.getLangOpts().CPlusPlus23) {
1970            return false;
1971          }
1972        }
1973        if (SemaRef.LangOpts.CPlusPlus23) {
1974          CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(),
1975                           diag::warn_cxx20_compat_constexpr_var,
1976                           isa<CXXConstructorDecl>(Dcl),
1977                           /*variable of non-literal type*/ 2);
1978        } else if (CheckLiteralType(
1979                       SemaRef, Kind, VD->getLocation(), VD->getType(),
1980                       diag::err_constexpr_local_var_non_literal_type,
1981                       isa<CXXConstructorDecl>(Dcl))) {
1982          return false;
1983        }
1984        if (!VD->getType()->isDependentType() &&
1985            !VD->hasInit() && !VD->isCXXForRangeDecl()) {
1986          if (Kind == Sema::CheckConstexprKind::Diagnose) {
1987            SemaRef.Diag(
1988                VD->getLocation(),
1989                SemaRef.getLangOpts().CPlusPlus20
1990                    ? diag::warn_cxx17_compat_constexpr_local_var_no_init
1991                    : diag::ext_constexpr_local_var_no_init)
1992                << isa<CXXConstructorDecl>(Dcl);
1993          } else if (!SemaRef.getLangOpts().CPlusPlus20) {
1994            return false;
1995          }
1996          continue;
1997        }
1998      }
1999      if (Kind == Sema::CheckConstexprKind::Diagnose) {
2000        SemaRef.Diag(VD->getLocation(),
2001                     SemaRef.getLangOpts().CPlusPlus14
2002                      ? diag::warn_cxx11_compat_constexpr_local_var
2003                      : diag::ext_constexpr_local_var)
2004          << isa<CXXConstructorDecl>(Dcl);
2005      } else if (!SemaRef.getLangOpts().CPlusPlus14) {
2006        return false;
2007      }
2008      continue;
2009    }
2010
2011    case Decl::NamespaceAlias:
2012    case Decl::Function:
2013      // These are disallowed in C++11 and permitted in C++1y. Allow them
2014      // everywhere as an extension.
2015      if (!Cxx1yLoc.isValid())
2016        Cxx1yLoc = DS->getBeginLoc();
2017      continue;
2018
2019    default:
2020      if (Kind == Sema::CheckConstexprKind::Diagnose) {
2021        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt)
2022            << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();
2023      }
2024      return false;
2025    }
2026  }
2027
2028  return true;
2029}
2030
2031/// Check that the given field is initialized within a constexpr constructor.
2032///
2033/// \param Dcl The constexpr constructor being checked.
2034/// \param Field The field being checked. This may be a member of an anonymous
2035///        struct or union nested within the class being checked.
2036/// \param Inits All declarations, including anonymous struct/union members and
2037///        indirect members, for which any initialization was provided.
2038/// \param Diagnosed Whether we've emitted the error message yet. Used to attach
2039///        multiple notes for different members to the same error.
2040/// \param Kind Whether we're diagnosing a constructor as written or determining
2041///        whether the formal requirements are satisfied.
2042/// \return \c false if we're checking for validity and the constructor does
2043///         not satisfy the requirements on a constexpr constructor.
2044static bool CheckConstexprCtorInitializer(Sema &SemaRef,
2045                                          const FunctionDecl *Dcl,
2046                                          FieldDecl *Field,
2047                                          llvm::SmallSet<Decl*, 16> &Inits,
2048                                          bool &Diagnosed,
2049                                          Sema::CheckConstexprKind Kind) {
2050  // In C++20 onwards, there's nothing to check for validity.
2051  if (Kind == Sema::CheckConstexprKind::CheckValid &&
2052      SemaRef.getLangOpts().CPlusPlus20)
2053    return true;
2054
2055  if (Field->isInvalidDecl())
2056    return true;
2057
2058  if (Field->isUnnamedBitfield())
2059    return true;
2060
2061  // Anonymous unions with no variant members and empty anonymous structs do not
2062  // need to be explicitly initialized. FIXME: Anonymous structs that contain no
2063  // indirect fields don't need initializing.
2064  if (Field->isAnonymousStructOrUnion() &&
2065      (Field->getType()->isUnionType()
2066           ? !Field->getType()->getAsCXXRecordDecl()->hasVariantMembers()
2067           : Field->getType()->getAsCXXRecordDecl()->isEmpty()))
2068    return true;
2069
2070  if (!Inits.count(Field)) {
2071    if (Kind == Sema::CheckConstexprKind::Diagnose) {
2072      if (!Diagnosed) {
2073        SemaRef.Diag(Dcl->getLocation(),
2074                     SemaRef.getLangOpts().CPlusPlus20
2075                         ? diag::warn_cxx17_compat_constexpr_ctor_missing_init
2076                         : diag::ext_constexpr_ctor_missing_init);
2077        Diagnosed = true;
2078      }
2079      SemaRef.Diag(Field->getLocation(),
2080                   diag::note_constexpr_ctor_missing_init);
2081    } else if (!SemaRef.getLangOpts().CPlusPlus20) {
2082      return false;
2083    }
2084  } else if (Field->isAnonymousStructOrUnion()) {
2085    const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
2086    for (auto *I : RD->fields())
2087      // If an anonymous union contains an anonymous struct of which any member
2088      // is initialized, all members must be initialized.
2089      if (!RD->isUnion() || Inits.count(I))
2090        if (!CheckConstexprCtorInitializer(SemaRef, Dcl, I, Inits, Diagnosed,
2091                                           Kind))
2092          return false;
2093  }
2094  return true;
2095}
2096
2097/// Check the provided statement is allowed in a constexpr function
2098/// definition.
2099static bool
2100CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
2101                           SmallVectorImpl<SourceLocation> &ReturnStmts,
2102                           SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc,
2103                           SourceLocation &Cxx2bLoc,
2104                           Sema::CheckConstexprKind Kind) {
2105  // - its function-body shall be [...] a compound-statement that contains only
2106  switch (S->getStmtClass()) {
2107  case Stmt::NullStmtClass:
2108    //   - null statements,
2109    return true;
2110
2111  case Stmt::DeclStmtClass:
2112    //   - static_assert-declarations
2113    //   - using-declarations,
2114    //   - using-directives,
2115    //   - typedef declarations and alias-declarations that do not define
2116    //     classes or enumerations,
2117    if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc, Kind))
2118      return false;
2119    return true;
2120
2121  case Stmt::ReturnStmtClass:
2122    //   - and exactly one return statement;
2123    if (isa<CXXConstructorDecl>(Dcl)) {
2124      // C++1y allows return statements in constexpr constructors.
2125      if (!Cxx1yLoc.isValid())
2126        Cxx1yLoc = S->getBeginLoc();
2127      return true;
2128    }
2129
2130    ReturnStmts.push_back(S->getBeginLoc());
2131    return true;
2132
2133  case Stmt::AttributedStmtClass:
2134    // Attributes on a statement don't affect its formal kind and hence don't
2135    // affect its validity in a constexpr function.
2136    return CheckConstexprFunctionStmt(
2137        SemaRef, Dcl, cast<AttributedStmt>(S)->getSubStmt(), ReturnStmts,
2138        Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind);
2139
2140  case Stmt::CompoundStmtClass: {
2141    // C++1y allows compound-statements.
2142    if (!Cxx1yLoc.isValid())
2143      Cxx1yLoc = S->getBeginLoc();
2144
2145    CompoundStmt *CompStmt = cast<CompoundStmt>(S);
2146    for (auto *BodyIt : CompStmt->body()) {
2147      if (!CheckConstexprFunctionStmt(SemaRef, Dcl, BodyIt, ReturnStmts,
2148                                      Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2149        return false;
2150    }
2151    return true;
2152  }
2153
2154  case Stmt::IfStmtClass: {
2155    // C++1y allows if-statements.
2156    if (!Cxx1yLoc.isValid())
2157      Cxx1yLoc = S->getBeginLoc();
2158
2159    IfStmt *If = cast<IfStmt>(S);
2160    if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
2161                                    Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2162      return false;
2163    if (If->getElse() &&
2164        !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
2165                                    Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2166      return false;
2167    return true;
2168  }
2169
2170  case Stmt::WhileStmtClass:
2171  case Stmt::DoStmtClass:
2172  case Stmt::ForStmtClass:
2173  case Stmt::CXXForRangeStmtClass:
2174  case Stmt::ContinueStmtClass:
2175    // C++1y allows all of these. We don't allow them as extensions in C++11,
2176    // because they don't make sense without variable mutation.
2177    if (!SemaRef.getLangOpts().CPlusPlus14)
2178      break;
2179    if (!Cxx1yLoc.isValid())
2180      Cxx1yLoc = S->getBeginLoc();
2181    for (Stmt *SubStmt : S->children()) {
2182      if (SubStmt &&
2183          !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts,
2184                                      Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2185        return false;
2186    }
2187    return true;
2188
2189  case Stmt::SwitchStmtClass:
2190  case Stmt::CaseStmtClass:
2191  case Stmt::DefaultStmtClass:
2192  case Stmt::BreakStmtClass:
2193    // C++1y allows switch-statements, and since they don't need variable
2194    // mutation, we can reasonably allow them in C++11 as an extension.
2195    if (!Cxx1yLoc.isValid())
2196      Cxx1yLoc = S->getBeginLoc();
2197    for (Stmt *SubStmt : S->children()) {
2198      if (SubStmt &&
2199          !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts,
2200                                      Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2201        return false;
2202    }
2203    return true;
2204
2205  case Stmt::LabelStmtClass:
2206  case Stmt::GotoStmtClass:
2207    if (Cxx2bLoc.isInvalid())
2208      Cxx2bLoc = S->getBeginLoc();
2209    for (Stmt *SubStmt : S->children()) {
2210      if (SubStmt &&
2211          !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts,
2212                                      Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2213        return false;
2214    }
2215    return true;
2216
2217  case Stmt::GCCAsmStmtClass:
2218  case Stmt::MSAsmStmtClass:
2219    // C++2a allows inline assembly statements.
2220  case Stmt::CXXTryStmtClass:
2221    if (Cxx2aLoc.isInvalid())
2222      Cxx2aLoc = S->getBeginLoc();
2223    for (Stmt *SubStmt : S->children()) {
2224      if (SubStmt &&
2225          !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts,
2226                                      Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2227        return false;
2228    }
2229    return true;
2230
2231  case Stmt::CXXCatchStmtClass:
2232    // Do not bother checking the language mode (already covered by the
2233    // try block check).
2234    if (!CheckConstexprFunctionStmt(
2235            SemaRef, Dcl, cast<CXXCatchStmt>(S)->getHandlerBlock(), ReturnStmts,
2236            Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2237      return false;
2238    return true;
2239
2240  default:
2241    if (!isa<Expr>(S))
2242      break;
2243
2244    // C++1y allows expression-statements.
2245    if (!Cxx1yLoc.isValid())
2246      Cxx1yLoc = S->getBeginLoc();
2247    return true;
2248  }
2249
2250  if (Kind == Sema::CheckConstexprKind::Diagnose) {
2251    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt)
2252        << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();
2253  }
2254  return false;
2255}
2256
2257/// Check the body for the given constexpr function declaration only contains
2258/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
2259///
2260/// \return true if the body is OK, false if we have found or diagnosed a
2261/// problem.
2262static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl,
2263                                       Stmt *Body,
2264                                       Sema::CheckConstexprKind Kind) {
2265  SmallVector<SourceLocation, 4> ReturnStmts;
2266
2267  if (isa<CXXTryStmt>(Body)) {
2268    // C++11 [dcl.constexpr]p3:
2269    //  The definition of a constexpr function shall satisfy the following
2270    //  constraints: [...]
2271    // - its function-body shall be = delete, = default, or a
2272    //   compound-statement
2273    //
2274    // C++11 [dcl.constexpr]p4:
2275    //  In the definition of a constexpr constructor, [...]
2276    // - its function-body shall not be a function-try-block;
2277    //
2278    // This restriction is lifted in C++2a, as long as inner statements also
2279    // apply the general constexpr rules.
2280    switch (Kind) {
2281    case Sema::CheckConstexprKind::CheckValid:
2282      if (!SemaRef.getLangOpts().CPlusPlus20)
2283        return false;
2284      break;
2285
2286    case Sema::CheckConstexprKind::Diagnose:
2287      SemaRef.Diag(Body->getBeginLoc(),
2288           !SemaRef.getLangOpts().CPlusPlus20
2289               ? diag::ext_constexpr_function_try_block_cxx20
2290               : diag::warn_cxx17_compat_constexpr_function_try_block)
2291          << isa<CXXConstructorDecl>(Dcl);
2292      break;
2293    }
2294  }
2295
2296  // - its function-body shall be [...] a compound-statement that contains only
2297  //   [... list of cases ...]
2298  //
2299  // Note that walking the children here is enough to properly check for
2300  // CompoundStmt and CXXTryStmt body.
2301  SourceLocation Cxx1yLoc, Cxx2aLoc, Cxx2bLoc;
2302  for (Stmt *SubStmt : Body->children()) {
2303    if (SubStmt &&
2304        !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts,
2305                                    Cxx1yLoc, Cxx2aLoc, Cxx2bLoc, Kind))
2306      return false;
2307  }
2308
2309  if (Kind == Sema::CheckConstexprKind::CheckValid) {
2310    // If this is only valid as an extension, report that we don't satisfy the
2311    // constraints of the current language.
2312    if ((Cxx2bLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus23) ||
2313        (Cxx2aLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus20) ||
2314        (Cxx1yLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus17))
2315      return false;
2316  } else if (Cxx2bLoc.isValid()) {
2317    SemaRef.Diag(Cxx2bLoc,
2318                 SemaRef.getLangOpts().CPlusPlus23
2319                     ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt
2320                     : diag::ext_constexpr_body_invalid_stmt_cxx23)
2321        << isa<CXXConstructorDecl>(Dcl);
2322  } else if (Cxx2aLoc.isValid()) {
2323    SemaRef.Diag(Cxx2aLoc,
2324         SemaRef.getLangOpts().CPlusPlus20
2325           ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt
2326           : diag::ext_constexpr_body_invalid_stmt_cxx20)
2327      << isa<CXXConstructorDecl>(Dcl);
2328  } else if (Cxx1yLoc.isValid()) {
2329    SemaRef.Diag(Cxx1yLoc,
2330         SemaRef.getLangOpts().CPlusPlus14
2331           ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
2332           : diag::ext_constexpr_body_invalid_stmt)
2333      << isa<CXXConstructorDecl>(Dcl);
2334  }
2335
2336  if (const CXXConstructorDecl *Constructor
2337        = dyn_cast<CXXConstructorDecl>(Dcl)) {
2338    const CXXRecordDecl *RD = Constructor->getParent();
2339    // DR1359:
2340    // - every non-variant non-static data member and base class sub-object
2341    //   shall be initialized;
2342    // DR1460:
2343    // - if the class is a union having variant members, exactly one of them
2344    //   shall be initialized;
2345    if (RD->isUnion()) {
2346      if (Constructor->getNumCtorInitializers() == 0 &&
2347          RD->hasVariantMembers()) {
2348        if (Kind == Sema::CheckConstexprKind::Diagnose) {
2349          SemaRef.Diag(
2350              Dcl->getLocation(),
2351              SemaRef.getLangOpts().CPlusPlus20
2352                  ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init
2353                  : diag::ext_constexpr_union_ctor_no_init);
2354        } else if (!SemaRef.getLangOpts().CPlusPlus20) {
2355          return false;
2356        }
2357      }
2358    } else if (!Constructor->isDependentContext() &&
2359               !Constructor->isDelegatingConstructor()) {
2360      assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
2361
2362      // Skip detailed checking if we have enough initializers, and we would
2363      // allow at most one initializer per member.
2364      bool AnyAnonStructUnionMembers = false;
2365      unsigned Fields = 0;
2366      for (CXXRecordDecl::field_iterator I = RD->field_begin(),
2367           E = RD->field_end(); I != E; ++I, ++Fields) {
2368        if (I->isAnonymousStructOrUnion()) {
2369          AnyAnonStructUnionMembers = true;
2370          break;
2371        }
2372      }
2373      // DR1460:
2374      // - if the class is a union-like class, but is not a union, for each of
2375      //   its anonymous union members having variant members, exactly one of
2376      //   them shall be initialized;
2377      if (AnyAnonStructUnionMembers ||
2378          Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
2379        // Check initialization of non-static data members. Base classes are
2380        // always initialized so do not need to be checked. Dependent bases
2381        // might not have initializers in the member initializer list.
2382        llvm::SmallSet<Decl*, 16> Inits;
2383        for (const auto *I: Constructor->inits()) {
2384          if (FieldDecl *FD = I->getMember())
2385            Inits.insert(FD);
2386          else if (IndirectFieldDecl *ID = I->getIndirectMember())
2387            Inits.insert(ID->chain_begin(), ID->chain_end());
2388        }
2389
2390        bool Diagnosed = false;
2391        for (auto *I : RD->fields())
2392          if (!CheckConstexprCtorInitializer(SemaRef, Dcl, I, Inits, Diagnosed,
2393                                             Kind))
2394            return false;
2395      }
2396    }
2397  } else {
2398    if (ReturnStmts.empty()) {
2399      // C++1y doesn't require constexpr functions to contain a 'return'
2400      // statement. We still do, unless the return type might be void, because
2401      // otherwise if there's no return statement, the function cannot
2402      // be used in a core constant expression.
2403      bool OK = SemaRef.getLangOpts().CPlusPlus14 &&
2404                (Dcl->getReturnType()->isVoidType() ||
2405                 Dcl->getReturnType()->isDependentType());
2406      switch (Kind) {
2407      case Sema::CheckConstexprKind::Diagnose:
2408        SemaRef.Diag(Dcl->getLocation(),
2409                     OK ? diag::warn_cxx11_compat_constexpr_body_no_return
2410                        : diag::err_constexpr_body_no_return)
2411            << Dcl->isConsteval();
2412        if (!OK)
2413          return false;
2414        break;
2415
2416      case Sema::CheckConstexprKind::CheckValid:
2417        // The formal requirements don't include this rule in C++14, even
2418        // though the "must be able to produce a constant expression" rules
2419        // still imply it in some cases.
2420        if (!SemaRef.getLangOpts().CPlusPlus14)
2421          return false;
2422        break;
2423      }
2424    } else if (ReturnStmts.size() > 1) {
2425      switch (Kind) {
2426      case Sema::CheckConstexprKind::Diagnose:
2427        SemaRef.Diag(
2428            ReturnStmts.back(),
2429            SemaRef.getLangOpts().CPlusPlus14
2430                ? diag::warn_cxx11_compat_constexpr_body_multiple_return
2431                : diag::ext_constexpr_body_multiple_return);
2432        for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
2433          SemaRef.Diag(ReturnStmts[I],
2434                       diag::note_constexpr_body_previous_return);
2435        break;
2436
2437      case Sema::CheckConstexprKind::CheckValid:
2438        if (!SemaRef.getLangOpts().CPlusPlus14)
2439          return false;
2440        break;
2441      }
2442    }
2443  }
2444
2445  // C++11 [dcl.constexpr]p5:
2446  //   if no function argument values exist such that the function invocation
2447  //   substitution would produce a constant expression, the program is
2448  //   ill-formed; no diagnostic required.
2449  // C++11 [dcl.constexpr]p3:
2450  //   - every constructor call and implicit conversion used in initializing the
2451  //     return value shall be one of those allowed in a constant expression.
2452  // C++11 [dcl.constexpr]p4:
2453  //   - every constructor involved in initializing non-static data members and
2454  //     base class sub-objects shall be a constexpr constructor.
2455  //
2456  // Note that this rule is distinct from the "requirements for a constexpr
2457  // function", so is not checked in CheckValid mode.
2458  SmallVector<PartialDiagnosticAt, 8> Diags;
2459  if (Kind == Sema::CheckConstexprKind::Diagnose &&
2460      !Expr::isPotentialConstantExpr(Dcl, Diags)) {
2461    SemaRef.Diag(Dcl->getLocation(),
2462                 diag::ext_constexpr_function_never_constant_expr)
2463        << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval()
2464        << Dcl->getNameInfo().getSourceRange();
2465    for (size_t I = 0, N = Diags.size(); I != N; ++I)
2466      SemaRef.Diag(Diags[I].first, Diags[I].second);
2467    // Don't return false here: we allow this for compatibility in
2468    // system headers.
2469  }
2470
2471  return true;
2472}
2473
2474bool Sema::CheckImmediateEscalatingFunctionDefinition(
2475    FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) {
2476  if (!getLangOpts().CPlusPlus20 || !FD->isImmediateEscalating())
2477    return true;
2478  FD->setBodyContainsImmediateEscalatingExpressions(
2479      FSI->FoundImmediateEscalatingExpression);
2480  if (FSI->FoundImmediateEscalatingExpression) {
2481    auto it = UndefinedButUsed.find(FD->getCanonicalDecl());
2482    if (it != UndefinedButUsed.end()) {
2483      Diag(it->second, diag::err_immediate_function_used_before_definition)
2484          << it->first;
2485      Diag(FD->getLocation(), diag::note_defined_here) << FD;
2486      if (FD->isImmediateFunction() && !FD->isConsteval())
2487        DiagnoseImmediateEscalatingReason(FD);
2488      return false;
2489    }
2490  }
2491  return true;
2492}
2493
2494void Sema::DiagnoseImmediateEscalatingReason(FunctionDecl *FD) {
2495  assert(FD->isImmediateEscalating() && !FD->isConsteval() &&
2496         "expected an immediate function");
2497  assert(FD->hasBody() && "expected the function to have a body");
2498  struct ImmediateEscalatingExpressionsVisitor
2499      : public RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor> {
2500
2501    using Base = RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor>;
2502    Sema &SemaRef;
2503
2504    const FunctionDecl *ImmediateFn;
2505    bool ImmediateFnIsConstructor;
2506    CXXConstructorDecl *CurrentConstructor = nullptr;
2507    CXXCtorInitializer *CurrentInit = nullptr;
2508
2509    ImmediateEscalatingExpressionsVisitor(Sema &SemaRef, FunctionDecl *FD)
2510        : SemaRef(SemaRef), ImmediateFn(FD),
2511          ImmediateFnIsConstructor(isa<CXXConstructorDecl>(FD)) {}
2512
2513    bool shouldVisitImplicitCode() const { return true; }
2514    bool shouldVisitLambdaBody() const { return false; }
2515
2516    void Diag(const Expr *E, const FunctionDecl *Fn, bool IsCall) {
2517      SourceLocation Loc = E->getBeginLoc();
2518      SourceRange Range = E->getSourceRange();
2519      if (CurrentConstructor && CurrentInit) {
2520        Loc = CurrentConstructor->getLocation();
2521        Range = CurrentInit->isWritten() ? CurrentInit->getSourceRange()
2522                                         : SourceRange();
2523      }
2524
2525      FieldDecl* InitializedField = CurrentInit ? CurrentInit->getAnyMember() : nullptr;
2526
2527      SemaRef.Diag(Loc, diag::note_immediate_function_reason)
2528          << ImmediateFn << Fn << Fn->isConsteval() << IsCall
2529          << isa<CXXConstructorDecl>(Fn) << ImmediateFnIsConstructor
2530          << (InitializedField != nullptr)
2531          << (CurrentInit && !CurrentInit->isWritten())
2532          << InitializedField << Range;
2533    }
2534    bool TraverseCallExpr(CallExpr *E) {
2535      if (const auto *DR =
2536              dyn_cast<DeclRefExpr>(E->getCallee()->IgnoreImplicit());
2537          DR && DR->isImmediateEscalating()) {
2538        Diag(E, E->getDirectCallee(), /*IsCall=*/true);
2539        return false;
2540      }
2541
2542      for (Expr *A : E->arguments())
2543        if (!getDerived().TraverseStmt(A))
2544          return false;
2545
2546      return true;
2547    }
2548
2549    bool VisitDeclRefExpr(DeclRefExpr *E) {
2550      if (const auto *ReferencedFn = dyn_cast<FunctionDecl>(E->getDecl());
2551          ReferencedFn && E->isImmediateEscalating()) {
2552        Diag(E, ReferencedFn, /*IsCall=*/false);
2553        return false;
2554      }
2555
2556      return true;
2557    }
2558
2559    bool VisitCXXConstructExpr(CXXConstructExpr *E) {
2560      CXXConstructorDecl *D = E->getConstructor();
2561      if (E->isImmediateEscalating()) {
2562        Diag(E, D, /*IsCall=*/true);
2563        return false;
2564      }
2565      return true;
2566    }
2567
2568    bool TraverseConstructorInitializer(CXXCtorInitializer *Init) {
2569      llvm::SaveAndRestore RAII(CurrentInit, Init);
2570      return Base::TraverseConstructorInitializer(Init);
2571    }
2572
2573    bool TraverseCXXConstructorDecl(CXXConstructorDecl *Ctr) {
2574      llvm::SaveAndRestore RAII(CurrentConstructor, Ctr);
2575      return Base::TraverseCXXConstructorDecl(Ctr);
2576    }
2577
2578    bool TraverseType(QualType T) { return true; }
2579    bool VisitBlockExpr(BlockExpr *T) { return true; }
2580
2581  } Visitor(*this, FD);
2582  Visitor.TraverseDecl(FD);
2583}
2584
2585/// Get the class that is directly named by the current context. This is the
2586/// class for which an unqualified-id in this scope could name a constructor
2587/// or destructor.
2588///
2589/// If the scope specifier denotes a class, this will be that class.
2590/// If the scope specifier is empty, this will be the class whose
2591/// member-specification we are currently within. Otherwise, there
2592/// is no such class.
2593CXXRecordDecl *Sema::getCurrentClass(Scope *, const CXXScopeSpec *SS) {
2594  assert(getLangOpts().CPlusPlus && "No class names in C!");
2595
2596  if (SS && SS->isInvalid())
2597    return nullptr;
2598
2599  if (SS && SS->isNotEmpty()) {
2600    DeclContext *DC = computeDeclContext(*SS, true);
2601    return dyn_cast_or_null<CXXRecordDecl>(DC);
2602  }
2603
2604  return dyn_cast_or_null<CXXRecordDecl>(CurContext);
2605}
2606
2607/// isCurrentClassName - Determine whether the identifier II is the
2608/// name of the class type currently being defined. In the case of
2609/// nested classes, this will only return true if II is the name of
2610/// the innermost class.
2611bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *S,
2612                              const CXXScopeSpec *SS) {
2613  CXXRecordDecl *CurDecl = getCurrentClass(S, SS);
2614  return CurDecl && &II == CurDecl->getIdentifier();
2615}
2616
2617/// Determine whether the identifier II is a typo for the name of
2618/// the class type currently being defined. If so, update it to the identifier
2619/// that should have been used.
2620bool Sema::isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS) {
2621  assert(getLangOpts().CPlusPlus && "No class names in C!");
2622
2623  if (!getLangOpts().SpellChecking)
2624    return false;
2625
2626  CXXRecordDecl *CurDecl;
2627  if (SS && SS->isSet() && !SS->isInvalid()) {
2628    DeclContext *DC = computeDeclContext(*SS, true);
2629    CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
2630  } else
2631    CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
2632
2633  if (CurDecl && CurDecl->getIdentifier() && II != CurDecl->getIdentifier() &&
2634      3 * II->getName().edit_distance(CurDecl->getIdentifier()->getName())
2635          < II->getLength()) {
2636    II = CurDecl->getIdentifier();
2637    return true;
2638  }
2639
2640  return false;
2641}
2642
2643/// Determine whether the given class is a base class of the given
2644/// class, including looking at dependent bases.
2645static bool findCircularInheritance(const CXXRecordDecl *Class,
2646                                    const CXXRecordDecl *Current) {
2647  SmallVector<const CXXRecordDecl*, 8> Queue;
2648
2649  Class = Class->getCanonicalDecl();
2650  while (true) {
2651    for (const auto &I : Current->bases()) {
2652      CXXRecordDecl *Base = I.getType()->getAsCXXRecordDecl();
2653      if (!Base)
2654        continue;
2655
2656      Base = Base->getDefinition();
2657      if (!Base)
2658        continue;
2659
2660      if (Base->getCanonicalDecl() == Class)
2661        return true;
2662
2663      Queue.push_back(Base);
2664    }
2665
2666    if (Queue.empty())
2667      return false;
2668
2669    Current = Queue.pop_back_val();
2670  }
2671
2672  return false;
2673}
2674
2675/// Check the validity of a C++ base class specifier.
2676///
2677/// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
2678/// and returns NULL otherwise.
2679CXXBaseSpecifier *
2680Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
2681                         SourceRange SpecifierRange,
2682                         bool Virtual, AccessSpecifier Access,
2683                         TypeSourceInfo *TInfo,
2684                         SourceLocation EllipsisLoc) {
2685  // In HLSL, unspecified class access is public rather than private.
2686  if (getLangOpts().HLSL && Class->getTagKind() == TagTypeKind::Class &&
2687      Access == AS_none)
2688    Access = AS_public;
2689
2690  QualType BaseType = TInfo->getType();
2691  if (BaseType->containsErrors()) {
2692    // Already emitted a diagnostic when parsing the error type.
2693    return nullptr;
2694  }
2695  // C++ [class.union]p1:
2696  //   A union shall not have base classes.
2697  if (Class->isUnion()) {
2698    Diag(Class->getLocation(), diag::err_base_clause_on_union)
2699      << SpecifierRange;
2700    return nullptr;
2701  }
2702
2703  if (EllipsisLoc.isValid() &&
2704      !TInfo->getType()->containsUnexpandedParameterPack()) {
2705    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2706      << TInfo->getTypeLoc().getSourceRange();
2707    EllipsisLoc = SourceLocation();
2708  }
2709
2710  SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
2711
2712  if (BaseType->isDependentType()) {
2713    // Make sure that we don't have circular inheritance among our dependent
2714    // bases. For non-dependent bases, the check for completeness below handles
2715    // this.
2716    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
2717      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
2718          ((BaseDecl = BaseDecl->getDefinition()) &&
2719           findCircularInheritance(Class, BaseDecl))) {
2720        Diag(BaseLoc, diag::err_circular_inheritance)
2721          << BaseType << Context.getTypeDeclType(Class);
2722
2723        if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
2724          Diag(BaseDecl->getLocation(), diag::note_previous_decl)
2725            << BaseType;
2726
2727        return nullptr;
2728      }
2729    }
2730
2731    // Make sure that we don't make an ill-formed AST where the type of the
2732    // Class is non-dependent and its attached base class specifier is an
2733    // dependent type, which violates invariants in many clang code paths (e.g.
2734    // constexpr evaluator). If this case happens (in errory-recovery mode), we
2735    // explicitly mark the Class decl invalid. The diagnostic was already
2736    // emitted.
2737    if (!Class->getTypeForDecl()->isDependentType())
2738      Class->setInvalidDecl();
2739    return new (Context) CXXBaseSpecifier(
2740        SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class,
2741        Access, TInfo, EllipsisLoc);
2742  }
2743
2744  // Base specifiers must be record types.
2745  if (!BaseType->isRecordType()) {
2746    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
2747    return nullptr;
2748  }
2749
2750  // C++ [class.union]p1:
2751  //   A union shall not be used as a base class.
2752  if (BaseType->isUnionType()) {
2753    Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
2754    return nullptr;
2755  }
2756
2757  // For the MS ABI, propagate DLL attributes to base class templates.
2758  if (Context.getTargetInfo().getCXXABI().isMicrosoft() ||
2759      Context.getTargetInfo().getTriple().isPS()) {
2760    if (Attr *ClassAttr = getDLLAttr(Class)) {
2761      if (auto *BaseTemplate = dyn_cast_or_null<ClassTemplateSpecializationDecl>(
2762              BaseType->getAsCXXRecordDecl())) {
2763        propagateDLLAttrToBaseClassTemplate(Class, ClassAttr, BaseTemplate,
2764                                            BaseLoc);
2765      }
2766    }
2767  }
2768
2769  // C++ [class.derived]p2:
2770  //   The class-name in a base-specifier shall not be an incompletely
2771  //   defined class.
2772  if (RequireCompleteType(BaseLoc, BaseType,
2773                          diag::err_incomplete_base_class, SpecifierRange)) {
2774    Class->setInvalidDecl();
2775    return nullptr;
2776  }
2777
2778  // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
2779  RecordDecl *BaseDecl = BaseType->castAs<RecordType>()->getDecl();
2780  assert(BaseDecl && "Record type has no declaration");
2781  BaseDecl = BaseDecl->getDefinition();
2782  assert(BaseDecl && "Base type is not incomplete, but has no definition");
2783  CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
2784  assert(CXXBaseDecl && "Base type is not a C++ type");
2785
2786  // Microsoft docs say:
2787  // "If a base-class has a code_seg attribute, derived classes must have the
2788  // same attribute."
2789  const auto *BaseCSA = CXXBaseDecl->getAttr<CodeSegAttr>();
2790  const auto *DerivedCSA = Class->getAttr<CodeSegAttr>();
2791  if ((DerivedCSA || BaseCSA) &&
2792      (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {
2793    Diag(Class->getLocation(), diag::err_mismatched_code_seg_base);
2794    Diag(CXXBaseDecl->getLocation(), diag::note_base_class_specified_here)
2795      << CXXBaseDecl;
2796    return nullptr;
2797  }
2798
2799  // A class which contains a flexible array member is not suitable for use as a
2800  // base class:
2801  //   - If the layout determines that a base comes before another base,
2802  //     the flexible array member would index into the subsequent base.
2803  //   - If the layout determines that base comes before the derived class,
2804  //     the flexible array member would index into the derived class.
2805  if (CXXBaseDecl->hasFlexibleArrayMember()) {
2806    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member)
2807      << CXXBaseDecl->getDeclName();
2808    return nullptr;
2809  }
2810
2811  // C++ [class]p3:
2812  //   If a class is marked final and it appears as a base-type-specifier in
2813  //   base-clause, the program is ill-formed.
2814  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {
2815    Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
2816      << CXXBaseDecl->getDeclName()
2817      << FA->isSpelledAsSealed();
2818    Diag(CXXBaseDecl->getLocation(), diag::note_entity_declared_at)
2819        << CXXBaseDecl->getDeclName() << FA->getRange();
2820    return nullptr;
2821  }
2822
2823  if (BaseDecl->isInvalidDecl())
2824    Class->setInvalidDecl();
2825
2826  // Create the base specifier.
2827  return new (Context) CXXBaseSpecifier(
2828      SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class,
2829      Access, TInfo, EllipsisLoc);
2830}
2831
2832/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
2833/// one entry in the base class list of a class specifier, for
2834/// example:
2835///    class foo : public bar, virtual private baz {
2836/// 'public bar' and 'virtual private baz' are each base-specifiers.
2837BaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
2838                                    const ParsedAttributesView &Attributes,
2839                                    bool Virtual, AccessSpecifier Access,
2840                                    ParsedType basetype, SourceLocation BaseLoc,
2841                                    SourceLocation EllipsisLoc) {
2842  if (!classdecl)
2843    return true;
2844
2845  AdjustDeclIfTemplate(classdecl);
2846  CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
2847  if (!Class)
2848    return true;
2849
2850  // We haven't yet attached the base specifiers.
2851  Class->setIsParsingBaseSpecifiers();
2852
2853  // We do not support any C++11 attributes on base-specifiers yet.
2854  // Diagnose any attributes we see.
2855  for (const ParsedAttr &AL : Attributes) {
2856    if (AL.isInvalid() || AL.getKind() == ParsedAttr::IgnoredAttribute)
2857      continue;
2858    if (AL.getKind() == ParsedAttr::UnknownAttribute)
2859      Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored)
2860          << AL << AL.getRange();
2861    else
2862      Diag(AL.getLoc(), diag::err_base_specifier_attribute)
2863          << AL << AL.isRegularKeywordAttribute() << AL.getRange();
2864  }
2865
2866  TypeSourceInfo *TInfo = nullptr;
2867  GetTypeFromParser(basetype, &TInfo);
2868
2869  if (EllipsisLoc.isInvalid() &&
2870      DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
2871                                      UPPC_BaseType))
2872    return true;
2873
2874  if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
2875                                                      Virtual, Access, TInfo,
2876                                                      EllipsisLoc))
2877    return BaseSpec;
2878  else
2879    Class->setInvalidDecl();
2880
2881  return true;
2882}
2883
2884/// Use small set to collect indirect bases.  As this is only used
2885/// locally, there's no need to abstract the small size parameter.
2886typedef llvm::SmallPtrSet<QualType, 4> IndirectBaseSet;
2887
2888/// Recursively add the bases of Type.  Don't add Type itself.
2889static void
2890NoteIndirectBases(ASTContext &Context, IndirectBaseSet &Set,
2891                  const QualType &Type)
2892{
2893  // Even though the incoming type is a base, it might not be
2894  // a class -- it could be a template parm, for instance.
2895  if (auto Rec = Type->getAs<RecordType>()) {
2896    auto Decl = Rec->getAsCXXRecordDecl();
2897
2898    // Iterate over its bases.
2899    for (const auto &BaseSpec : Decl->bases()) {
2900      QualType Base = Context.getCanonicalType(BaseSpec.getType())
2901        .getUnqualifiedType();
2902      if (Set.insert(Base).second)
2903        // If we've not already seen it, recurse.
2904        NoteIndirectBases(Context, Set, Base);
2905    }
2906  }
2907}
2908
2909/// Performs the actual work of attaching the given base class
2910/// specifiers to a C++ class.
2911bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class,
2912                                MutableArrayRef<CXXBaseSpecifier *> Bases) {
2913 if (Bases.empty())
2914    return false;
2915
2916  // Used to keep track of which base types we have already seen, so
2917  // that we can properly diagnose redundant direct base types. Note
2918  // that the key is always the unqualified canonical type of the base
2919  // class.
2920  std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
2921
2922  // Used to track indirect bases so we can see if a direct base is
2923  // ambiguous.
2924  IndirectBaseSet IndirectBaseTypes;
2925
2926  // Copy non-redundant base specifiers into permanent storage.
2927  unsigned NumGoodBases = 0;
2928  bool Invalid = false;
2929  for (unsigned idx = 0; idx < Bases.size(); ++idx) {
2930    QualType NewBaseType
2931      = Context.getCanonicalType(Bases[idx]->getType());
2932    NewBaseType = NewBaseType.getLocalUnqualifiedType();
2933
2934    CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
2935    if (KnownBase) {
2936      // C++ [class.mi]p3:
2937      //   A class shall not be specified as a direct base class of a
2938      //   derived class more than once.
2939      Diag(Bases[idx]->getBeginLoc(), diag::err_duplicate_base_class)
2940          << KnownBase->getType() << Bases[idx]->getSourceRange();
2941
2942      // Delete the duplicate base class specifier; we're going to
2943      // overwrite its pointer later.
2944      Context.Deallocate(Bases[idx]);
2945
2946      Invalid = true;
2947    } else {
2948      // Okay, add this new base class.
2949      KnownBase = Bases[idx];
2950      Bases[NumGoodBases++] = Bases[idx];
2951
2952      if (NewBaseType->isDependentType())
2953        continue;
2954      // Note this base's direct & indirect bases, if there could be ambiguity.
2955      if (Bases.size() > 1)
2956        NoteIndirectBases(Context, IndirectBaseTypes, NewBaseType);
2957
2958      if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
2959        const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
2960        if (Class->isInterface() &&
2961              (!RD->isInterfaceLike() ||
2962               KnownBase->getAccessSpecifier() != AS_public)) {
2963          // The Microsoft extension __interface does not permit bases that
2964          // are not themselves public interfaces.
2965          Diag(KnownBase->getBeginLoc(), diag::err_invalid_base_in_interface)
2966              << getRecordDiagFromTagKind(RD->getTagKind()) << RD
2967              << RD->getSourceRange();
2968          Invalid = true;
2969        }
2970        if (RD->hasAttr<WeakAttr>())
2971          Class->addAttr(WeakAttr::CreateImplicit(Context));
2972      }
2973    }
2974  }
2975
2976  // Attach the remaining base class specifiers to the derived class.
2977  Class->setBases(Bases.data(), NumGoodBases);
2978
2979  // Check that the only base classes that are duplicate are virtual.
2980  for (unsigned idx = 0; idx < NumGoodBases; ++idx) {
2981    // Check whether this direct base is inaccessible due to ambiguity.
2982    QualType BaseType = Bases[idx]->getType();
2983
2984    // Skip all dependent types in templates being used as base specifiers.
2985    // Checks below assume that the base specifier is a CXXRecord.
2986    if (BaseType->isDependentType())
2987      continue;
2988
2989    CanQualType CanonicalBase = Context.getCanonicalType(BaseType)
2990      .getUnqualifiedType();
2991
2992    if (IndirectBaseTypes.count(CanonicalBase)) {
2993      CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2994                         /*DetectVirtual=*/true);
2995      bool found
2996        = Class->isDerivedFrom(CanonicalBase->getAsCXXRecordDecl(), Paths);
2997      assert(found);
2998      (void)found;
2999
3000      if (Paths.isAmbiguous(CanonicalBase))
3001        Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class)
3002            << BaseType << getAmbiguousPathsDisplayString(Paths)
3003            << Bases[idx]->getSourceRange();
3004      else
3005        assert(Bases[idx]->isVirtual());
3006    }
3007
3008    // Delete the base class specifier, since its data has been copied
3009    // into the CXXRecordDecl.
3010    Context.Deallocate(Bases[idx]);
3011  }
3012
3013  return Invalid;
3014}
3015
3016/// ActOnBaseSpecifiers - Attach the given base specifiers to the
3017/// class, after checking whether there are any duplicate base
3018/// classes.
3019void Sema::ActOnBaseSpecifiers(Decl *ClassDecl,
3020                               MutableArrayRef<CXXBaseSpecifier *> Bases) {
3021  if (!ClassDecl || Bases.empty())
3022    return;
3023
3024  AdjustDeclIfTemplate(ClassDecl);
3025  AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases);
3026}
3027
3028/// Determine whether the type \p Derived is a C++ class that is
3029/// derived from the type \p Base.
3030bool Sema::IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base) {
3031  if (!getLangOpts().CPlusPlus)
3032    return false;
3033
3034  CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
3035  if (!DerivedRD)
3036    return false;
3037
3038  CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
3039  if (!BaseRD)
3040    return false;
3041
3042  // If either the base or the derived type is invalid, don't try to
3043  // check whether one is derived from the other.
3044  if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
3045    return false;
3046
3047  // FIXME: In a modules build, do we need the entire path to be visible for us
3048  // to be able to use the inheritance relationship?
3049  if (!isCompleteType(Loc, Derived) && !DerivedRD->isBeingDefined())
3050    return false;
3051
3052  return DerivedRD->isDerivedFrom(BaseRD);
3053}
3054
3055/// Determine whether the type \p Derived is a C++ class that is
3056/// derived from the type \p Base.
3057bool Sema::IsDerivedFrom(SourceLocation Loc, QualType Derived, QualType Base,
3058                         CXXBasePaths &Paths) {
3059  if (!getLangOpts().CPlusPlus)
3060    return false;
3061
3062  CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
3063  if (!DerivedRD)
3064    return false;
3065
3066  CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
3067  if (!BaseRD)
3068    return false;
3069
3070  if (!isCompleteType(Loc, Derived) && !DerivedRD->isBeingDefined())
3071    return false;
3072
3073  return DerivedRD->isDerivedFrom(BaseRD, Paths);
3074}
3075
3076static void BuildBasePathArray(const CXXBasePath &Path,
3077                               CXXCastPath &BasePathArray) {
3078  // We first go backward and check if we have a virtual base.
3079  // FIXME: It would be better if CXXBasePath had the base specifier for
3080  // the nearest virtual base.
3081  unsigned Start = 0;
3082  for (unsigned I = Path.size(); I != 0; --I) {
3083    if (Path[I - 1].Base->isVirtual()) {
3084      Start = I - 1;
3085      break;
3086    }
3087  }
3088
3089  // Now add all bases.
3090  for (unsigned I = Start, E = Path.size(); I != E; ++I)
3091    BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
3092}
3093
3094
3095void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
3096                              CXXCastPath &BasePathArray) {
3097  assert(BasePathArray.empty() && "Base path array must be empty!");
3098  assert(Paths.isRecordingPaths() && "Must record paths!");
3099  return ::BuildBasePathArray(Paths.front(), BasePathArray);
3100}
3101/// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
3102/// conversion (where Derived and Base are class types) is
3103/// well-formed, meaning that the conversion is unambiguous (and
3104/// that all of the base classes are accessible). Returns true
3105/// and emits a diagnostic if the code is ill-formed, returns false
3106/// otherwise. Loc is the location where this routine should point to
3107/// if there is an error, and Range is the source range to highlight
3108/// if there is an error.
3109///
3110/// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the
3111/// diagnostic for the respective type of error will be suppressed, but the
3112/// check for ill-formed code will still be performed.
3113bool
3114Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
3115                                   unsigned InaccessibleBaseID,
3116                                   unsigned AmbiguousBaseConvID,
3117                                   SourceLocation Loc, SourceRange Range,
3118                                   DeclarationName Name,
3119                                   CXXCastPath *BasePath,
3120                                   bool IgnoreAccess) {
3121  // First, determine whether the path from Derived to Base is
3122  // ambiguous. This is slightly more expensive than checking whether
3123  // the Derived to Base conversion exists, because here we need to
3124  // explore multiple paths to determine if there is an ambiguity.
3125  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
3126                     /*DetectVirtual=*/false);
3127  bool DerivationOkay = IsDerivedFrom(Loc, Derived, Base, Paths);
3128  if (!DerivationOkay)
3129    return true;
3130
3131  const CXXBasePath *Path = nullptr;
3132  if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType()))
3133    Path = &Paths.front();
3134
3135  // For MSVC compatibility, check if Derived directly inherits from Base. Clang
3136  // warns about this hierarchy under -Winaccessible-base, but MSVC allows the
3137  // user to access such bases.
3138  if (!Path && getLangOpts().MSVCCompat) {
3139    for (const CXXBasePath &PossiblePath : Paths) {
3140      if (PossiblePath.size() == 1) {
3141        Path = &PossiblePath;
3142        if (AmbiguousBaseConvID)
3143          Diag(Loc, diag::ext_ms_ambiguous_direct_base)
3144              << Base << Derived << Range;
3145        break;
3146      }
3147    }
3148  }
3149
3150  if (Path) {
3151    if (!IgnoreAccess) {
3152      // Check that the base class can be accessed.
3153      switch (
3154          CheckBaseClassAccess(Loc, Base, Derived, *Path, InaccessibleBaseID)) {
3155      case AR_inaccessible:
3156        return true;
3157      case AR_accessible:
3158      case AR_dependent:
3159      case AR_delayed:
3160        break;
3161      }
3162    }
3163
3164    // Build a base path if necessary.
3165    if (BasePath)
3166      ::BuildBasePathArray(*Path, *BasePath);
3167    return false;
3168  }
3169
3170  if (AmbiguousBaseConvID) {
3171    // We know that the derived-to-base conversion is ambiguous, and
3172    // we're going to produce a diagnostic. Perform the derived-to-base
3173    // search just one more time to compute all of the possible paths so
3174    // that we can print them out. This is more expensive than any of
3175    // the previous derived-to-base checks we've done, but at this point
3176    // performance isn't as much of an issue.
3177    Paths.clear();
3178    Paths.setRecordingPaths(true);
3179    bool StillOkay = IsDerivedFrom(Loc, Derived, Base, Paths);
3180    assert(StillOkay && "Can only be used with a derived-to-base conversion");
3181    (void)StillOkay;
3182
3183    // Build up a textual representation of the ambiguous paths, e.g.,
3184    // D -> B -> A, that will be used to illustrate the ambiguous
3185    // conversions in the diagnostic. We only print one of the paths
3186    // to each base class subobject.
3187    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
3188
3189    Diag(Loc, AmbiguousBaseConvID)
3190    << Derived << Base << PathDisplayStr << Range << Name;
3191  }
3192  return true;
3193}
3194
3195bool
3196Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
3197                                   SourceLocation Loc, SourceRange Range,
3198                                   CXXCastPath *BasePath,
3199                                   bool IgnoreAccess) {
3200  return CheckDerivedToBaseConversion(
3201      Derived, Base, diag::err_upcast_to_inaccessible_base,
3202      diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(),
3203      BasePath, IgnoreAccess);
3204}
3205
3206
3207/// Builds a string representing ambiguous paths from a
3208/// specific derived class to different subobjects of the same base
3209/// class.
3210///
3211/// This function builds a string that can be used in error messages
3212/// to show the different paths that one can take through the
3213/// inheritance hierarchy to go from the derived class to different
3214/// subobjects of a base class. The result looks something like this:
3215/// @code
3216/// struct D -> struct B -> struct A
3217/// struct D -> struct C -> struct A
3218/// @endcode
3219std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
3220  std::string PathDisplayStr;
3221  std::set<unsigned> DisplayedPaths;
3222  for (CXXBasePaths::paths_iterator Path = Paths.begin();
3223       Path != Paths.end(); ++Path) {
3224    if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
3225      // We haven't displayed a path to this particular base
3226      // class subobject yet.
3227      PathDisplayStr += "\n    ";
3228      PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
3229      for (CXXBasePath::const_iterator Element = Path->begin();
3230           Element != Path->end(); ++Element)
3231        PathDisplayStr += " -> " + Element->Base->getType().getAsString();
3232    }
3233  }
3234
3235  return PathDisplayStr;
3236}
3237
3238//===----------------------------------------------------------------------===//
3239// C++ class member Handling
3240//===----------------------------------------------------------------------===//
3241
3242/// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
3243bool Sema::ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc,
3244                                SourceLocation ColonLoc,
3245                                const ParsedAttributesView &Attrs) {
3246  assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
3247  AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
3248                                                  ASLoc, ColonLoc);
3249  CurContext->addHiddenDecl(ASDecl);
3250  return ProcessAccessDeclAttributeList(ASDecl, Attrs);
3251}
3252
3253/// CheckOverrideControl - Check C++11 override control semantics.
3254void Sema::CheckOverrideControl(NamedDecl *D) {
3255  if (D->isInvalidDecl())
3256    return;
3257
3258  // We only care about "override" and "final" declarations.
3259  if (!D->hasAttr<OverrideAttr>() && !D->hasAttr<FinalAttr>())
3260    return;
3261
3262  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
3263
3264  // We can't check dependent instance methods.
3265  if (MD && MD->isInstance() &&
3266      (MD->getParent()->hasAnyDependentBases() ||
3267       MD->getType()->isDependentType()))
3268    return;
3269
3270  if (MD && !MD->isVirtual()) {
3271    // If we have a non-virtual method, check if it hides a virtual method.
3272    // (In that case, it's most likely the method has the wrong type.)
3273    SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
3274    FindHiddenVirtualMethods(MD, OverloadedMethods);
3275
3276    if (!OverloadedMethods.empty()) {
3277      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
3278        Diag(OA->getLocation(),
3279             diag::override_keyword_hides_virtual_member_function)
3280          << "override" << (OverloadedMethods.size() > 1);
3281      } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
3282        Diag(FA->getLocation(),
3283             diag::override_keyword_hides_virtual_member_function)
3284          << (FA->isSpelledAsSealed() ? "sealed" : "final")
3285          << (OverloadedMethods.size() > 1);
3286      }
3287      NoteHiddenVirtualMethods(MD, OverloadedMethods);
3288      MD->setInvalidDecl();
3289      return;
3290    }
3291    // Fall through into the general case diagnostic.
3292    // FIXME: We might want to attempt typo correction here.
3293  }
3294
3295  if (!MD || !MD->isVirtual()) {
3296    if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
3297      Diag(OA->getLocation(),
3298           diag::override_keyword_only_allowed_on_virtual_member_functions)
3299        << "override" << FixItHint::CreateRemoval(OA->getLocation());
3300      D->dropAttr<OverrideAttr>();
3301    }
3302    if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
3303      Diag(FA->getLocation(),
3304           diag::override_keyword_only_allowed_on_virtual_member_functions)
3305        << (FA->isSpelledAsSealed() ? "sealed" : "final")
3306        << FixItHint::CreateRemoval(FA->getLocation());
3307      D->dropAttr<FinalAttr>();
3308    }
3309    return;
3310  }
3311
3312  // C++11 [class.virtual]p5:
3313  //   If a function is marked with the virt-specifier override and
3314  //   does not override a member function of a base class, the program is
3315  //   ill-formed.
3316  bool HasOverriddenMethods = MD->size_overridden_methods() != 0;
3317  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
3318    Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
3319      << MD->getDeclName();
3320}
3321
3322void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {
3323  if (D->isInvalidDecl() || D->hasAttr<OverrideAttr>())
3324    return;
3325  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
3326  if (!MD || MD->isImplicit() || MD->hasAttr<FinalAttr>())
3327    return;
3328
3329  SourceLocation Loc = MD->getLocation();
3330  SourceLocation SpellingLoc = Loc;
3331  if (getSourceManager().isMacroArgExpansion(Loc))
3332    SpellingLoc = getSourceManager().getImmediateExpansionRange(Loc).getBegin();
3333  SpellingLoc = getSourceManager().getSpellingLoc(SpellingLoc);
3334  if (SpellingLoc.isValid() && getSourceManager().isInSystemHeader(SpellingLoc))
3335      return;
3336
3337  if (MD->size_overridden_methods() > 0) {
3338    auto EmitDiag = [&](unsigned DiagInconsistent, unsigned DiagSuggest) {
3339      unsigned DiagID =
3340          Inconsistent && !Diags.isIgnored(DiagInconsistent, MD->getLocation())
3341              ? DiagInconsistent
3342              : DiagSuggest;
3343      Diag(MD->getLocation(), DiagID) << MD->getDeclName();
3344      const CXXMethodDecl *OMD = *MD->begin_overridden_methods();
3345      Diag(OMD->getLocation(), diag::note_overridden_virtual_function);
3346    };
3347    if (isa<CXXDestructorDecl>(MD))
3348      EmitDiag(
3349          diag::warn_inconsistent_destructor_marked_not_override_overriding,
3350          diag::warn_suggest_destructor_marked_not_override_overriding);
3351    else
3352      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding,
3353               diag::warn_suggest_function_marked_not_override_overriding);
3354  }
3355}
3356
3357/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
3358/// function overrides a virtual member function marked 'final', according to
3359/// C++11 [class.virtual]p4.
3360bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
3361                                                  const CXXMethodDecl *Old) {
3362  FinalAttr *FA = Old->getAttr<FinalAttr>();
3363  if (!FA)
3364    return false;
3365
3366  Diag(New->getLocation(), diag::err_final_function_overridden)
3367    << New->getDeclName()
3368    << FA->isSpelledAsSealed();
3369  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3370  return true;
3371}
3372
3373static bool InitializationHasSideEffects(const FieldDecl &FD) {
3374  const Type *T = FD.getType()->getBaseElementTypeUnsafe();
3375  // FIXME: Destruction of ObjC lifetime types has side-effects.
3376  if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
3377    return !RD->isCompleteDefinition() ||
3378           !RD->hasTrivialDefaultConstructor() ||
3379           !RD->hasTrivialDestructor();
3380  return false;
3381}
3382
3383// Check if there is a field shadowing.
3384void Sema::CheckShadowInheritedFields(const SourceLocation &Loc,
3385                                      DeclarationName FieldName,
3386                                      const CXXRecordDecl *RD,
3387                                      bool DeclIsField) {
3388  if (Diags.isIgnored(diag::warn_shadow_field, Loc))
3389    return;
3390
3391  // To record a shadowed field in a base
3392  std::map<CXXRecordDecl*, NamedDecl*> Bases;
3393  auto FieldShadowed = [&](const CXXBaseSpecifier *Specifier,
3394                           CXXBasePath &Path) {
3395    const auto Base = Specifier->getType()->getAsCXXRecordDecl();
3396    // Record an ambiguous path directly
3397    if (Bases.find(Base) != Bases.end())
3398      return true;
3399    for (const auto Field : Base->lookup(FieldName)) {
3400      if ((isa<FieldDecl>(Field) || isa<IndirectFieldDecl>(Field)) &&
3401          Field->getAccess() != AS_private) {
3402        assert(Field->getAccess() != AS_none);
3403        assert(Bases.find(Base) == Bases.end());
3404        Bases[Base] = Field;
3405        return true;
3406      }
3407    }
3408    return false;
3409  };
3410
3411  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
3412                     /*DetectVirtual=*/true);
3413  if (!RD->lookupInBases(FieldShadowed, Paths))
3414    return;
3415
3416  for (const auto &P : Paths) {
3417    auto Base = P.back().Base->getType()->getAsCXXRecordDecl();
3418    auto It = Bases.find(Base);
3419    // Skip duplicated bases
3420    if (It == Bases.end())
3421      continue;
3422    auto BaseField = It->second;
3423    assert(BaseField->getAccess() != AS_private);
3424    if (AS_none !=
3425        CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {
3426      Diag(Loc, diag::warn_shadow_field)
3427        << FieldName << RD << Base << DeclIsField;
3428      Diag(BaseField->getLocation(), diag::note_shadow_field);
3429      Bases.erase(It);
3430    }
3431  }
3432}
3433
3434/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
3435/// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
3436/// bitfield width if there is one, 'InitExpr' specifies the initializer if
3437/// one has been parsed, and 'InitStyle' is set if an in-class initializer is
3438/// present (but parsing it has been deferred).
3439NamedDecl *
3440Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
3441                               MultiTemplateParamsArg TemplateParameterLists,
3442                               Expr *BW, const VirtSpecifiers &VS,
3443                               InClassInitStyle InitStyle) {
3444  const DeclSpec &DS = D.getDeclSpec();
3445  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
3446  DeclarationName Name = NameInfo.getName();
3447  SourceLocation Loc = NameInfo.getLoc();
3448
3449  // For anonymous bitfields, the location should point to the type.
3450  if (Loc.isInvalid())
3451    Loc = D.getBeginLoc();
3452
3453  Expr *BitWidth = static_cast<Expr*>(BW);
3454
3455  assert(isa<CXXRecordDecl>(CurContext));
3456  assert(!DS.isFriendSpecified());
3457
3458  bool isFunc = D.isDeclarationOfFunction();
3459  const ParsedAttr *MSPropertyAttr =
3460      D.getDeclSpec().getAttributes().getMSPropertyAttr();
3461
3462  if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
3463    // The Microsoft extension __interface only permits public member functions
3464    // and prohibits constructors, destructors, operators, non-public member
3465    // functions, static methods and data members.
3466    unsigned InvalidDecl;
3467    bool ShowDeclName = true;
3468    if (!isFunc &&
3469        (DS.getStorageClassSpec() == DeclSpec::SCS_typedef || MSPropertyAttr))
3470      InvalidDecl = 0;
3471    else if (!isFunc)
3472      InvalidDecl = 1;
3473    else if (AS != AS_public)
3474      InvalidDecl = 2;
3475    else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
3476      InvalidDecl = 3;
3477    else switch (Name.getNameKind()) {
3478      case DeclarationName::CXXConstructorName:
3479        InvalidDecl = 4;
3480        ShowDeclName = false;
3481        break;
3482
3483      case DeclarationName::CXXDestructorName:
3484        InvalidDecl = 5;
3485        ShowDeclName = false;
3486        break;
3487
3488      case DeclarationName::CXXOperatorName:
3489      case DeclarationName::CXXConversionFunctionName:
3490        InvalidDecl = 6;
3491        break;
3492
3493      default:
3494        InvalidDecl = 0;
3495        break;
3496    }
3497
3498    if (InvalidDecl) {
3499      if (ShowDeclName)
3500        Diag(Loc, diag::err_invalid_member_in_interface)
3501          << (InvalidDecl-1) << Name;
3502      else
3503        Diag(Loc, diag::err_invalid_member_in_interface)
3504          << (InvalidDecl-1) << "";
3505      return nullptr;
3506    }
3507  }
3508
3509  // C++ 9.2p6: A member shall not be declared to have automatic storage
3510  // duration (auto, register) or with the extern storage-class-specifier.
3511  // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
3512  // data members and cannot be applied to names declared const or static,
3513  // and cannot be applied to reference members.
3514  switch (DS.getStorageClassSpec()) {
3515  case DeclSpec::SCS_unspecified:
3516  case DeclSpec::SCS_typedef:
3517  case DeclSpec::SCS_static:
3518    break;
3519  case DeclSpec::SCS_mutable:
3520    if (isFunc) {
3521      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
3522
3523      // FIXME: It would be nicer if the keyword was ignored only for this
3524      // declarator. Otherwise we could get follow-up errors.
3525      D.getMutableDeclSpec().ClearStorageClassSpecs();
3526    }
3527    break;
3528  default:
3529    Diag(DS.getStorageClassSpecLoc(),
3530         diag::err_storageclass_invalid_for_member);
3531    D.getMutableDeclSpec().ClearStorageClassSpecs();
3532    break;
3533  }
3534
3535  bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
3536                       DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
3537                      !isFunc);
3538
3539  if (DS.hasConstexprSpecifier() && isInstField) {
3540    SemaDiagnosticBuilder B =
3541        Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
3542    SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
3543    if (InitStyle == ICIS_NoInit) {
3544      B << 0 << 0;
3545      if (D.getDeclSpec().getTypeQualifiers() & DeclSpec::TQ_const)
3546        B << FixItHint::CreateRemoval(ConstexprLoc);
3547      else {
3548        B << FixItHint::CreateReplacement(ConstexprLoc, "const");
3549        D.getMutableDeclSpec().ClearConstexprSpec();
3550        const char *PrevSpec;
3551        unsigned DiagID;
3552        bool Failed = D.getMutableDeclSpec().SetTypeQual(
3553            DeclSpec::TQ_const, ConstexprLoc, PrevSpec, DiagID, getLangOpts());
3554        (void)Failed;
3555        assert(!Failed && "Making a constexpr member const shouldn't fail");
3556      }
3557    } else {
3558      B << 1;
3559      const char *PrevSpec;
3560      unsigned DiagID;
3561      if (D.getMutableDeclSpec().SetStorageClassSpec(
3562          *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID,
3563          Context.getPrintingPolicy())) {
3564        assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
3565               "This is the only DeclSpec that should fail to be applied");
3566        B << 1;
3567      } else {
3568        B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
3569        isInstField = false;
3570      }
3571    }
3572  }
3573
3574  NamedDecl *Member;
3575  if (isInstField) {
3576    CXXScopeSpec &SS = D.getCXXScopeSpec();
3577
3578    // Data members must have identifiers for names.
3579    if (!Name.isIdentifier()) {
3580      Diag(Loc, diag::err_bad_variable_name)
3581        << Name;
3582      return nullptr;
3583    }
3584
3585    IdentifierInfo *II = Name.getAsIdentifierInfo();
3586
3587    // Member field could not be with "template" keyword.
3588    // So TemplateParameterLists should be empty in this case.
3589    if (TemplateParameterLists.size()) {
3590      TemplateParameterList* TemplateParams = TemplateParameterLists[0];
3591      if (TemplateParams->size()) {
3592        // There is no such thing as a member field template.
3593        Diag(D.getIdentifierLoc(), diag::err_template_member)
3594            << II
3595            << SourceRange(TemplateParams->getTemplateLoc(),
3596                TemplateParams->getRAngleLoc());
3597      } else {
3598        // There is an extraneous 'template<>' for this member.
3599        Diag(TemplateParams->getTemplateLoc(),
3600            diag::err_template_member_noparams)
3601            << II
3602            << SourceRange(TemplateParams->getTemplateLoc(),
3603                TemplateParams->getRAngleLoc());
3604      }
3605      return nullptr;
3606    }
3607
3608    if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {
3609      Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments)
3610          << II
3611          << SourceRange(D.getName().TemplateId->LAngleLoc,
3612                         D.getName().TemplateId->RAngleLoc)
3613          << D.getName().TemplateId->LAngleLoc;
3614      D.SetIdentifier(II, Loc);
3615    }
3616
3617    if (SS.isSet() && !SS.isInvalid()) {
3618      // The user provided a superfluous scope specifier inside a class
3619      // definition:
3620      //
3621      // class X {
3622      //   int X::member;
3623      // };
3624      if (DeclContext *DC = computeDeclContext(SS, false))
3625        diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc(),
3626                                     D.getName().getKind() ==
3627                                         UnqualifiedIdKind::IK_TemplateId);
3628      else
3629        Diag(D.getIdentifierLoc(), diag::err_member_qualification)
3630          << Name << SS.getRange();
3631
3632      SS.clear();
3633    }
3634
3635    if (MSPropertyAttr) {
3636      Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
3637                                BitWidth, InitStyle, AS, *MSPropertyAttr);
3638      if (!Member)
3639        return nullptr;
3640      isInstField = false;
3641    } else {
3642      Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
3643                                BitWidth, InitStyle, AS);
3644      if (!Member)
3645        return nullptr;
3646    }
3647
3648    CheckShadowInheritedFields(Loc, Name, cast<CXXRecordDecl>(CurContext));
3649  } else {
3650    Member = HandleDeclarator(S, D, TemplateParameterLists);
3651    if (!Member)
3652      return nullptr;
3653
3654    // Non-instance-fields can't have a bitfield.
3655    if (BitWidth) {
3656      if (Member->isInvalidDecl()) {
3657        // don't emit another diagnostic.
3658      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {
3659        // C++ 9.6p3: A bit-field shall not be a static member.
3660        // "static member 'A' cannot be a bit-field"
3661        Diag(Loc, diag::err_static_not_bitfield)
3662          << Name << BitWidth->getSourceRange();
3663      } else if (isa<TypedefDecl>(Member)) {
3664        // "typedef member 'x' cannot be a bit-field"
3665        Diag(Loc, diag::err_typedef_not_bitfield)
3666          << Name << BitWidth->getSourceRange();
3667      } else {
3668        // A function typedef ("typedef int f(); f a;").
3669        // C++ 9.6p3: A bit-field shall have integral or enumeration type.
3670        Diag(Loc, diag::err_not_integral_type_bitfield)
3671          << Name << cast<ValueDecl>(Member)->getType()
3672          << BitWidth->getSourceRange();
3673      }
3674
3675      BitWidth = nullptr;
3676      Member->setInvalidDecl();
3677    }
3678
3679    NamedDecl *NonTemplateMember = Member;
3680    if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
3681      NonTemplateMember = FunTmpl->getTemplatedDecl();
3682    else if (VarTemplateDecl *VarTmpl = dyn_cast<VarTemplateDecl>(Member))
3683      NonTemplateMember = VarTmpl->getTemplatedDecl();
3684
3685    Member->setAccess(AS);
3686
3687    // If we have declared a member function template or static data member
3688    // template, set the access of the templated declaration as well.
3689    if (NonTemplateMember != Member)
3690      NonTemplateMember->setAccess(AS);
3691
3692    // C++ [temp.deduct.guide]p3:
3693    //   A deduction guide [...] for a member class template [shall be
3694    //   declared] with the same access [as the template].
3695    if (auto *DG = dyn_cast<CXXDeductionGuideDecl>(NonTemplateMember)) {
3696      auto *TD = DG->getDeducedTemplate();
3697      // Access specifiers are only meaningful if both the template and the
3698      // deduction guide are from the same scope.
3699      if (AS != TD->getAccess() &&
3700          TD->getDeclContext()->getRedeclContext()->Equals(
3701              DG->getDeclContext()->getRedeclContext())) {
3702        Diag(DG->getBeginLoc(), diag::err_deduction_guide_wrong_access);
3703        Diag(TD->getBeginLoc(), diag::note_deduction_guide_template_access)
3704            << TD->getAccess();
3705        const AccessSpecDecl *LastAccessSpec = nullptr;
3706        for (const auto *D : cast<CXXRecordDecl>(CurContext)->decls()) {
3707          if (const auto *AccessSpec = dyn_cast<AccessSpecDecl>(D))
3708            LastAccessSpec = AccessSpec;
3709        }
3710        assert(LastAccessSpec && "differing access with no access specifier");
3711        Diag(LastAccessSpec->getBeginLoc(), diag::note_deduction_guide_access)
3712            << AS;
3713      }
3714    }
3715  }
3716
3717  if (VS.isOverrideSpecified())
3718    Member->addAttr(OverrideAttr::Create(Context, VS.getOverrideLoc()));
3719  if (VS.isFinalSpecified())
3720    Member->addAttr(FinalAttr::Create(Context, VS.getFinalLoc(),
3721                                      VS.isFinalSpelledSealed()
3722                                          ? FinalAttr::Keyword_sealed
3723                                          : FinalAttr::Keyword_final));
3724
3725  if (VS.getLastLocation().isValid()) {
3726    // Update the end location of a method that has a virt-specifiers.
3727    if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
3728      MD->setRangeEnd(VS.getLastLocation());
3729  }
3730
3731  CheckOverrideControl(Member);
3732
3733  assert((Name || isInstField) && "No identifier for non-field ?");
3734
3735  if (isInstField) {
3736    FieldDecl *FD = cast<FieldDecl>(Member);
3737    FieldCollector->Add(FD);
3738
3739    if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) {
3740      // Remember all explicit private FieldDecls that have a name, no side
3741      // effects and are not part of a dependent type declaration.
3742
3743      auto DeclHasUnusedAttr = [](const QualType &T) {
3744        if (const TagDecl *TD = T->getAsTagDecl())
3745          return TD->hasAttr<UnusedAttr>();
3746        if (const TypedefType *TDT = T->getAs<TypedefType>())
3747          return TDT->getDecl()->hasAttr<UnusedAttr>();
3748        return false;
3749      };
3750
3751      if (!FD->isImplicit() && FD->getDeclName() &&
3752          FD->getAccess() == AS_private &&
3753          !FD->hasAttr<UnusedAttr>() &&
3754          !FD->getParent()->isDependentContext() &&
3755          !DeclHasUnusedAttr(FD->getType()) &&
3756          !InitializationHasSideEffects(*FD))
3757        UnusedPrivateFields.insert(FD);
3758    }
3759  }
3760
3761  return Member;
3762}
3763
3764namespace {
3765  class UninitializedFieldVisitor
3766      : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
3767    Sema &S;
3768    // List of Decls to generate a warning on.  Also remove Decls that become
3769    // initialized.
3770    llvm::SmallPtrSetImpl<ValueDecl*> &Decls;
3771    // List of base classes of the record.  Classes are removed after their
3772    // initializers.
3773    llvm::SmallPtrSetImpl<QualType> &BaseClasses;
3774    // Vector of decls to be removed from the Decl set prior to visiting the
3775    // nodes.  These Decls may have been initialized in the prior initializer.
3776    llvm::SmallVector<ValueDecl*, 4> DeclsToRemove;
3777    // If non-null, add a note to the warning pointing back to the constructor.
3778    const CXXConstructorDecl *Constructor;
3779    // Variables to hold state when processing an initializer list.  When
3780    // InitList is true, special case initialization of FieldDecls matching
3781    // InitListFieldDecl.
3782    bool InitList;
3783    FieldDecl *InitListFieldDecl;
3784    llvm::SmallVector<unsigned, 4> InitFieldIndex;
3785
3786  public:
3787    typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
3788    UninitializedFieldVisitor(Sema &S,
3789                              llvm::SmallPtrSetImpl<ValueDecl*> &Decls,
3790                              llvm::SmallPtrSetImpl<QualType> &BaseClasses)
3791      : Inherited(S.Context), S(S), Decls(Decls), BaseClasses(BaseClasses),
3792        Constructor(nullptr), InitList(false), InitListFieldDecl(nullptr) {}
3793
3794    // Returns true if the use of ME is not an uninitialized use.
3795    bool IsInitListMemberExprInitialized(MemberExpr *ME,
3796                                         bool CheckReferenceOnly) {
3797      llvm::SmallVector<FieldDecl*, 4> Fields;
3798      bool ReferenceField = false;
3799      while (ME) {
3800        FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl());
3801        if (!FD)
3802          return false;
3803        Fields.push_back(FD);
3804        if (FD->getType()->isReferenceType())
3805          ReferenceField = true;
3806        ME = dyn_cast<MemberExpr>(ME->getBase()->IgnoreParenImpCasts());
3807      }
3808
3809      // Binding a reference to an uninitialized field is not an
3810      // uninitialized use.
3811      if (CheckReferenceOnly && !ReferenceField)
3812        return true;
3813
3814      llvm::SmallVector<unsigned, 4> UsedFieldIndex;
3815      // Discard the first field since it is the field decl that is being
3816      // initialized.
3817      for (const FieldDecl *FD : llvm::drop_begin(llvm::reverse(Fields)))
3818        UsedFieldIndex.push_back(FD->getFieldIndex());
3819
3820      for (auto UsedIter = UsedFieldIndex.begin(),
3821                UsedEnd = UsedFieldIndex.end(),
3822                OrigIter = InitFieldIndex.begin(),
3823                OrigEnd = InitFieldIndex.end();
3824           UsedIter != UsedEnd && OrigIter != OrigEnd; ++UsedIter, ++OrigIter) {
3825        if (*UsedIter < *OrigIter)
3826          return true;
3827        if (*UsedIter > *OrigIter)
3828          break;
3829      }
3830
3831      return false;
3832    }
3833
3834    void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly,
3835                          bool AddressOf) {
3836      if (isa<EnumConstantDecl>(ME->getMemberDecl()))
3837        return;
3838
3839      // FieldME is the inner-most MemberExpr that is not an anonymous struct
3840      // or union.
3841      MemberExpr *FieldME = ME;
3842
3843      bool AllPODFields = FieldME->getType().isPODType(S.Context);
3844
3845      Expr *Base = ME;
3846      while (MemberExpr *SubME =
3847                 dyn_cast<MemberExpr>(Base->IgnoreParenImpCasts())) {
3848
3849        if (isa<VarDecl>(SubME->getMemberDecl()))
3850          return;
3851
3852        if (FieldDecl *FD = dyn_cast<FieldDecl>(SubME->getMemberDecl()))
3853          if (!FD->isAnonymousStructOrUnion())
3854            FieldME = SubME;
3855
3856        if (!FieldME->getType().isPODType(S.Context))
3857          AllPODFields = false;
3858
3859        Base = SubME->getBase();
3860      }
3861
3862      if (!isa<CXXThisExpr>(Base->IgnoreParenImpCasts())) {
3863        Visit(Base);
3864        return;
3865      }
3866
3867      if (AddressOf && AllPODFields)
3868        return;
3869
3870      ValueDecl* FoundVD = FieldME->getMemberDecl();
3871
3872      if (ImplicitCastExpr *BaseCast = dyn_cast<ImplicitCastExpr>(Base)) {
3873        while (isa<ImplicitCastExpr>(BaseCast->getSubExpr())) {
3874          BaseCast = cast<ImplicitCastExpr>(BaseCast->getSubExpr());
3875        }
3876
3877        if (BaseCast->getCastKind() == CK_UncheckedDerivedToBase) {
3878          QualType T = BaseCast->getType();
3879          if (T->isPointerType() &&
3880              BaseClasses.count(T->getPointeeType())) {
3881            S.Diag(FieldME->getExprLoc(), diag::warn_base_class_is_uninit)
3882                << T->getPointeeType() << FoundVD;
3883          }
3884        }
3885      }
3886
3887      if (!Decls.count(FoundVD))
3888        return;
3889
3890      const bool IsReference = FoundVD->getType()->isReferenceType();
3891
3892      if (InitList && !AddressOf && FoundVD == InitListFieldDecl) {
3893        // Special checking for initializer lists.
3894        if (IsInitListMemberExprInitialized(ME, CheckReferenceOnly)) {
3895          return;
3896        }
3897      } else {
3898        // Prevent double warnings on use of unbounded references.
3899        if (CheckReferenceOnly && !IsReference)
3900          return;
3901      }
3902
3903      unsigned diag = IsReference
3904          ? diag::warn_reference_field_is_uninit
3905          : diag::warn_field_is_uninit;
3906      S.Diag(FieldME->getExprLoc(), diag) << FoundVD;
3907      if (Constructor)
3908        S.Diag(Constructor->getLocation(),
3909               diag::note_uninit_in_this_constructor)
3910          << (Constructor->isDefaultConstructor() && Constructor->isImplicit());
3911
3912    }
3913
3914    void HandleValue(Expr *E, bool AddressOf) {
3915      E = E->IgnoreParens();
3916
3917      if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
3918        HandleMemberExpr(ME, false /*CheckReferenceOnly*/,
3919                         AddressOf /*AddressOf*/);
3920        return;
3921      }
3922
3923      if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
3924        Visit(CO->getCond());
3925        HandleValue(CO->getTrueExpr(), AddressOf);
3926        HandleValue(CO->getFalseExpr(), AddressOf);
3927        return;
3928      }
3929
3930      if (BinaryConditionalOperator *BCO =
3931              dyn_cast<BinaryConditionalOperator>(E)) {
3932        Visit(BCO->getCond());
3933        HandleValue(BCO->getFalseExpr(), AddressOf);
3934        return;
3935      }
3936
3937      if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
3938        HandleValue(OVE->getSourceExpr(), AddressOf);
3939        return;
3940      }
3941
3942      if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
3943        switch (BO->getOpcode()) {
3944        default:
3945          break;
3946        case(BO_PtrMemD):
3947        case(BO_PtrMemI):
3948          HandleValue(BO->getLHS(), AddressOf);
3949          Visit(BO->getRHS());
3950          return;
3951        case(BO_Comma):
3952          Visit(BO->getLHS());
3953          HandleValue(BO->getRHS(), AddressOf);
3954          return;
3955        }
3956      }
3957
3958      Visit(E);
3959    }
3960
3961    void CheckInitListExpr(InitListExpr *ILE) {
3962      InitFieldIndex.push_back(0);
3963      for (auto *Child : ILE->children()) {
3964        if (InitListExpr *SubList = dyn_cast<InitListExpr>(Child)) {
3965          CheckInitListExpr(SubList);
3966        } else {
3967          Visit(Child);
3968        }
3969        ++InitFieldIndex.back();
3970      }
3971      InitFieldIndex.pop_back();
3972    }
3973
3974    void CheckInitializer(Expr *E, const CXXConstructorDecl *FieldConstructor,
3975                          FieldDecl *Field, const Type *BaseClass) {
3976      // Remove Decls that may have been initialized in the previous
3977      // initializer.
3978      for (ValueDecl* VD : DeclsToRemove)
3979        Decls.erase(VD);
3980      DeclsToRemove.clear();
3981
3982      Constructor = FieldConstructor;
3983      InitListExpr *ILE = dyn_cast<InitListExpr>(E);
3984
3985      if (ILE && Field) {
3986        InitList = true;
3987        InitListFieldDecl = Field;
3988        InitFieldIndex.clear();
3989        CheckInitListExpr(ILE);
3990      } else {
3991        InitList = false;
3992        Visit(E);
3993      }
3994
3995      if (Field)
3996        Decls.erase(Field);
3997      if (BaseClass)
3998        BaseClasses.erase(BaseClass->getCanonicalTypeInternal());
3999    }
4000
4001    void VisitMemberExpr(MemberExpr *ME) {
4002      // All uses of unbounded reference fields will warn.
4003      HandleMemberExpr(ME, true /*CheckReferenceOnly*/, false /*AddressOf*/);
4004    }
4005
4006    void VisitImplicitCastExpr(ImplicitCastExpr *E) {
4007      if (E->getCastKind() == CK_LValueToRValue) {
4008        HandleValue(E->getSubExpr(), false /*AddressOf*/);
4009        return;
4010      }
4011
4012      Inherited::VisitImplicitCastExpr(E);
4013    }
4014
4015    void VisitCXXConstructExpr(CXXConstructExpr *E) {
4016      if (E->getConstructor()->isCopyConstructor()) {
4017        Expr *ArgExpr = E->getArg(0);
4018        if (InitListExpr *ILE = dyn_cast<InitListExpr>(ArgExpr))
4019          if (ILE->getNumInits() == 1)
4020            ArgExpr = ILE->getInit(0);
4021        if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(ArgExpr))
4022          if (ICE->getCastKind() == CK_NoOp)
4023            ArgExpr = ICE->getSubExpr();
4024        HandleValue(ArgExpr, false /*AddressOf*/);
4025        return;
4026      }
4027      Inherited::VisitCXXConstructExpr(E);
4028    }
4029
4030    void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
4031      Expr *Callee = E->getCallee();
4032      if (isa<MemberExpr>(Callee)) {
4033        HandleValue(Callee, false /*AddressOf*/);
4034        for (auto *Arg : E->arguments())
4035          Visit(Arg);
4036        return;
4037      }
4038
4039      Inherited::VisitCXXMemberCallExpr(E);
4040    }
4041
4042    void VisitCallExpr(CallExpr *E) {
4043      // Treat std::move as a use.
4044      if (E->isCallToStdMove()) {
4045        HandleValue(E->getArg(0), /*AddressOf=*/false);
4046        return;
4047      }
4048
4049      Inherited::VisitCallExpr(E);
4050    }
4051
4052    void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) {
4053      Expr *Callee = E->getCallee();
4054
4055      if (isa<UnresolvedLookupExpr>(Callee))
4056        return Inherited::VisitCXXOperatorCallExpr(E);
4057
4058      Visit(Callee);
4059      for (auto *Arg : E->arguments())
4060        HandleValue(Arg->IgnoreParenImpCasts(), false /*AddressOf*/);
4061    }
4062
4063    void VisitBinaryOperator(BinaryOperator *E) {
4064      // If a field assignment is detected, remove the field from the
4065      // uninitiailized field set.
4066      if (E->getOpcode() == BO_Assign)
4067        if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getLHS()))
4068          if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
4069            if (!FD->getType()->isReferenceType())
4070              DeclsToRemove.push_back(FD);
4071
4072      if (E->isCompoundAssignmentOp()) {
4073        HandleValue(E->getLHS(), false /*AddressOf*/);
4074        Visit(E->getRHS());
4075        return;
4076      }
4077
4078      Inherited::VisitBinaryOperator(E);
4079    }
4080
4081    void VisitUnaryOperator(UnaryOperator *E) {
4082      if (E->isIncrementDecrementOp()) {
4083        HandleValue(E->getSubExpr(), false /*AddressOf*/);
4084        return;
4085      }
4086      if (E->getOpcode() == UO_AddrOf) {
4087        if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getSubExpr())) {
4088          HandleValue(ME->getBase(), true /*AddressOf*/);
4089          return;
4090        }
4091      }
4092
4093      Inherited::VisitUnaryOperator(E);
4094    }
4095  };
4096
4097  // Diagnose value-uses of fields to initialize themselves, e.g.
4098  //   foo(foo)
4099  // where foo is not also a parameter to the constructor.
4100  // Also diagnose across field uninitialized use such as
4101  //   x(y), y(x)
4102  // TODO: implement -Wuninitialized and fold this into that framework.
4103  static void DiagnoseUninitializedFields(
4104      Sema &SemaRef, const CXXConstructorDecl *Constructor) {
4105
4106    if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit,
4107                                           Constructor->getLocation())) {
4108      return;
4109    }
4110
4111    if (Constructor->isInvalidDecl())
4112      return;
4113
4114    const CXXRecordDecl *RD = Constructor->getParent();
4115
4116    if (RD->isDependentContext())
4117      return;
4118
4119    // Holds fields that are uninitialized.
4120    llvm::SmallPtrSet<ValueDecl*, 4> UninitializedFields;
4121
4122    // At the beginning, all fields are uninitialized.
4123    for (auto *I : RD->decls()) {
4124      if (auto *FD = dyn_cast<FieldDecl>(I)) {
4125        UninitializedFields.insert(FD);
4126      } else if (auto *IFD = dyn_cast<IndirectFieldDecl>(I)) {
4127        UninitializedFields.insert(IFD->getAnonField());
4128      }
4129    }
4130
4131    llvm::SmallPtrSet<QualType, 4> UninitializedBaseClasses;
4132    for (const auto &I : RD->bases())
4133      UninitializedBaseClasses.insert(I.getType().getCanonicalType());
4134
4135    if (UninitializedFields.empty() && UninitializedBaseClasses.empty())
4136      return;
4137
4138    UninitializedFieldVisitor UninitializedChecker(SemaRef,
4139                                                   UninitializedFields,
4140                                                   UninitializedBaseClasses);
4141
4142    for (const auto *FieldInit : Constructor->inits()) {
4143      if (UninitializedFields.empty() && UninitializedBaseClasses.empty())
4144        break;
4145
4146      Expr *InitExpr = FieldInit->getInit();
4147      if (!InitExpr)
4148        continue;
4149
4150      if (CXXDefaultInitExpr *Default =
4151              dyn_cast<CXXDefaultInitExpr>(InitExpr)) {
4152        InitExpr = Default->getExpr();
4153        if (!InitExpr)
4154          continue;
4155        // In class initializers will point to the constructor.
4156        UninitializedChecker.CheckInitializer(InitExpr, Constructor,
4157                                              FieldInit->getAnyMember(),
4158                                              FieldInit->getBaseClass());
4159      } else {
4160        UninitializedChecker.CheckInitializer(InitExpr, nullptr,
4161                                              FieldInit->getAnyMember(),
4162                                              FieldInit->getBaseClass());
4163      }
4164    }
4165  }
4166} // namespace
4167
4168/// Enter a new C++ default initializer scope. After calling this, the
4169/// caller must call \ref ActOnFinishCXXInClassMemberInitializer, even if
4170/// parsing or instantiating the initializer failed.
4171void Sema::ActOnStartCXXInClassMemberInitializer() {
4172  // Create a synthetic function scope to represent the call to the constructor
4173  // that notionally surrounds a use of this initializer.
4174  PushFunctionScope();
4175}
4176
4177void Sema::ActOnStartTrailingRequiresClause(Scope *S, Declarator &D) {
4178  if (!D.isFunctionDeclarator())
4179    return;
4180  auto &FTI = D.getFunctionTypeInfo();
4181  if (!FTI.Params)
4182    return;
4183  for (auto &Param : ArrayRef<DeclaratorChunk::ParamInfo>(FTI.Params,
4184                                                          FTI.NumParams)) {
4185    auto *ParamDecl = cast<NamedDecl>(Param.Param);
4186    if (ParamDecl->getDeclName())
4187      PushOnScopeChains(ParamDecl, S, /*AddToContext=*/false);
4188  }
4189}
4190
4191ExprResult Sema::ActOnFinishTrailingRequiresClause(ExprResult ConstraintExpr) {
4192  return ActOnRequiresClause(ConstraintExpr);
4193}
4194
4195ExprResult Sema::ActOnRequiresClause(ExprResult ConstraintExpr) {
4196  if (ConstraintExpr.isInvalid())
4197    return ExprError();
4198
4199  ConstraintExpr = CorrectDelayedTyposInExpr(ConstraintExpr);
4200  if (ConstraintExpr.isInvalid())
4201    return ExprError();
4202
4203  if (DiagnoseUnexpandedParameterPack(ConstraintExpr.get(),
4204                                      UPPC_RequiresClause))
4205    return ExprError();
4206
4207  return ConstraintExpr;
4208}
4209
4210ExprResult Sema::ConvertMemberDefaultInitExpression(FieldDecl *FD,
4211                                                    Expr *InitExpr,
4212                                                    SourceLocation InitLoc) {
4213  InitializedEntity Entity =
4214      InitializedEntity::InitializeMemberFromDefaultMemberInitializer(FD);
4215  InitializationKind Kind =
4216      FD->getInClassInitStyle() == ICIS_ListInit
4217          ? InitializationKind::CreateDirectList(InitExpr->getBeginLoc(),
4218                                                 InitExpr->getBeginLoc(),
4219                                                 InitExpr->getEndLoc())
4220          : InitializationKind::CreateCopy(InitExpr->getBeginLoc(), InitLoc);
4221  InitializationSequence Seq(*this, Entity, Kind, InitExpr);
4222  return Seq.Perform(*this, Entity, Kind, InitExpr);
4223}
4224
4225/// This is invoked after parsing an in-class initializer for a
4226/// non-static C++ class member, and after instantiating an in-class initializer
4227/// in a class template. Such actions are deferred until the class is complete.
4228void Sema::ActOnFinishCXXInClassMemberInitializer(Decl *D,
4229                                                  SourceLocation InitLoc,
4230                                                  Expr *InitExpr) {
4231  // Pop the notional constructor scope we created earlier.
4232  PopFunctionScopeInfo(nullptr, D);
4233
4234  FieldDecl *FD = dyn_cast<FieldDecl>(D);
4235  assert((isa<MSPropertyDecl>(D) || FD->getInClassInitStyle() != ICIS_NoInit) &&
4236         "must set init style when field is created");
4237
4238  if (!InitExpr) {
4239    D->setInvalidDecl();
4240    if (FD)
4241      FD->removeInClassInitializer();
4242    return;
4243  }
4244
4245  if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
4246    FD->setInvalidDecl();
4247    FD->removeInClassInitializer();
4248    return;
4249  }
4250
4251  ExprResult Init = CorrectDelayedTyposInExpr(InitExpr, /*InitDecl=*/nullptr,
4252                                              /*RecoverUncorrectedTypos=*/true);
4253  assert(Init.isUsable() && "Init should at least have a RecoveryExpr");
4254  if (!FD->getType()->isDependentType() && !Init.get()->isTypeDependent()) {
4255    Init = ConvertMemberDefaultInitExpression(FD, Init.get(), InitLoc);
4256    // C++11 [class.base.init]p7:
4257    //   The initialization of each base and member constitutes a
4258    //   full-expression.
4259    if (!Init.isInvalid())
4260      Init = ActOnFinishFullExpr(Init.get(), /*DiscarededValue=*/false);
4261    if (Init.isInvalid()) {
4262      FD->setInvalidDecl();
4263      return;
4264    }
4265  }
4266
4267  FD->setInClassInitializer(Init.get());
4268}
4269
4270/// Find the direct and/or virtual base specifiers that
4271/// correspond to the given base type, for use in base initialization
4272/// within a constructor.
4273static bool FindBaseInitializer(Sema &SemaRef,
4274                                CXXRecordDecl *ClassDecl,
4275                                QualType BaseType,
4276                                const CXXBaseSpecifier *&DirectBaseSpec,
4277                                const CXXBaseSpecifier *&VirtualBaseSpec) {
4278  // First, check for a direct base class.
4279  DirectBaseSpec = nullptr;
4280  for (const auto &Base : ClassDecl->bases()) {
4281    if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base.getType())) {
4282      // We found a direct base of this type. That's what we're
4283      // initializing.
4284      DirectBaseSpec = &Base;
4285      break;
4286    }
4287  }
4288
4289  // Check for a virtual base class.
4290  // FIXME: We might be able to short-circuit this if we know in advance that
4291  // there are no virtual bases.
4292  VirtualBaseSpec = nullptr;
4293  if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
4294    // We haven't found a base yet; search the class hierarchy for a
4295    // virtual base class.
4296    CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
4297                       /*DetectVirtual=*/false);
4298    if (SemaRef.IsDerivedFrom(ClassDecl->getLocation(),
4299                              SemaRef.Context.getTypeDeclType(ClassDecl),
4300                              BaseType, Paths)) {
4301      for (CXXBasePaths::paths_iterator Path = Paths.begin();
4302           Path != Paths.end(); ++Path) {
4303        if (Path->back().Base->isVirtual()) {
4304          VirtualBaseSpec = Path->back().Base;
4305          break;
4306        }
4307      }
4308    }
4309  }
4310
4311  return DirectBaseSpec || VirtualBaseSpec;
4312}
4313
4314/// Handle a C++ member initializer using braced-init-list syntax.
4315MemInitResult
4316Sema::ActOnMemInitializer(Decl *ConstructorD,
4317                          Scope *S,
4318                          CXXScopeSpec &SS,
4319                          IdentifierInfo *MemberOrBase,
4320                          ParsedType TemplateTypeTy,
4321                          const DeclSpec &DS,
4322                          SourceLocation IdLoc,
4323                          Expr *InitList,
4324                          SourceLocation EllipsisLoc) {
4325  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
4326                             DS, IdLoc, InitList,
4327                             EllipsisLoc);
4328}
4329
4330/// Handle a C++ member initializer using parentheses syntax.
4331MemInitResult
4332Sema::ActOnMemInitializer(Decl *ConstructorD,
4333                          Scope *S,
4334                          CXXScopeSpec &SS,
4335                          IdentifierInfo *MemberOrBase,
4336                          ParsedType TemplateTypeTy,
4337                          const DeclSpec &DS,
4338                          SourceLocation IdLoc,
4339                          SourceLocation LParenLoc,
4340                          ArrayRef<Expr *> Args,
4341                          SourceLocation RParenLoc,
4342                          SourceLocation EllipsisLoc) {
4343  Expr *List = ParenListExpr::Create(Context, LParenLoc, Args, RParenLoc);
4344  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
4345                             DS, IdLoc, List, EllipsisLoc);
4346}
4347
4348namespace {
4349
4350// Callback to only accept typo corrections that can be a valid C++ member
4351// initializer: either a non-static field member or a base class.
4352class MemInitializerValidatorCCC final : public CorrectionCandidateCallback {
4353public:
4354  explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
4355      : ClassDecl(ClassDecl) {}
4356
4357  bool ValidateCandidate(const TypoCorrection &candidate) override {
4358    if (NamedDecl *ND = candidate.getCorrectionDecl()) {
4359      if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
4360        return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
4361      return isa<TypeDecl>(ND);
4362    }
4363    return false;
4364  }
4365
4366  std::unique_ptr<CorrectionCandidateCallback> clone() override {
4367    return std::make_unique<MemInitializerValidatorCCC>(*this);
4368  }
4369
4370private:
4371  CXXRecordDecl *ClassDecl;
4372};
4373
4374}
4375
4376bool Sema::DiagRedefinedPlaceholderFieldDecl(SourceLocation Loc,
4377                                             RecordDecl *ClassDecl,
4378                                             const IdentifierInfo *Name) {
4379  DeclContextLookupResult Result = ClassDecl->lookup(Name);
4380  DeclContextLookupResult::iterator Found =
4381      llvm::find_if(Result, [this](const NamedDecl *Elem) {
4382        return isa<FieldDecl, IndirectFieldDecl>(Elem) &&
4383               Elem->isPlaceholderVar(getLangOpts());
4384      });
4385  // We did not find a placeholder variable
4386  if (Found == Result.end())
4387    return false;
4388  Diag(Loc, diag::err_using_placeholder_variable) << Name;
4389  for (DeclContextLookupResult::iterator It = Found; It != Result.end(); It++) {
4390    const NamedDecl *ND = *It;
4391    if (ND->getDeclContext() != ND->getDeclContext())
4392      break;
4393    if (isa<FieldDecl, IndirectFieldDecl>(ND) &&
4394        ND->isPlaceholderVar(getLangOpts()))
4395      Diag(ND->getLocation(), diag::note_reference_placeholder) << ND;
4396  }
4397  return true;
4398}
4399
4400ValueDecl *
4401Sema::tryLookupUnambiguousFieldDecl(RecordDecl *ClassDecl,
4402                                    const IdentifierInfo *MemberOrBase) {
4403  ValueDecl *ND = nullptr;
4404  for (auto *D : ClassDecl->lookup(MemberOrBase)) {
4405    if (isa<FieldDecl, IndirectFieldDecl>(D)) {
4406      bool IsPlaceholder = D->isPlaceholderVar(getLangOpts());
4407      if (ND) {
4408        if (IsPlaceholder && D->getDeclContext() == ND->getDeclContext())
4409          return nullptr;
4410        break;
4411      }
4412      if (!IsPlaceholder)
4413        return cast<ValueDecl>(D);
4414      ND = cast<ValueDecl>(D);
4415    }
4416  }
4417  return ND;
4418}
4419
4420ValueDecl *Sema::tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl,
4421                                             CXXScopeSpec &SS,
4422                                             ParsedType TemplateTypeTy,
4423                                             IdentifierInfo *MemberOrBase) {
4424  if (SS.getScopeRep() || TemplateTypeTy)
4425    return nullptr;
4426  return tryLookupUnambiguousFieldDecl(ClassDecl, MemberOrBase);
4427}
4428
4429/// Handle a C++ member initializer.
4430MemInitResult
4431Sema::BuildMemInitializer(Decl *ConstructorD,
4432                          Scope *S,
4433                          CXXScopeSpec &SS,
4434                          IdentifierInfo *MemberOrBase,
4435                          ParsedType TemplateTypeTy,
4436                          const DeclSpec &DS,
4437                          SourceLocation IdLoc,
4438                          Expr *Init,
4439                          SourceLocation EllipsisLoc) {
4440  ExprResult Res = CorrectDelayedTyposInExpr(Init, /*InitDecl=*/nullptr,
4441                                             /*RecoverUncorrectedTypos=*/true);
4442  if (!Res.isUsable())
4443    return true;
4444  Init = Res.get();
4445
4446  if (!ConstructorD)
4447    return true;
4448
4449  AdjustDeclIfTemplate(ConstructorD);
4450
4451  CXXConstructorDecl *Constructor
4452    = dyn_cast<CXXConstructorDecl>(ConstructorD);
4453  if (!Constructor) {
4454    // The user wrote a constructor initializer on a function that is
4455    // not a C++ constructor. Ignore the error for now, because we may
4456    // have more member initializers coming; we'll diagnose it just
4457    // once in ActOnMemInitializers.
4458    return true;
4459  }
4460
4461  CXXRecordDecl *ClassDecl = Constructor->getParent();
4462
4463  // C++ [class.base.init]p2:
4464  //   Names in a mem-initializer-id are looked up in the scope of the
4465  //   constructor's class and, if not found in that scope, are looked
4466  //   up in the scope containing the constructor's definition.
4467  //   [Note: if the constructor's class contains a member with the
4468  //   same name as a direct or virtual base class of the class, a
4469  //   mem-initializer-id naming the member or base class and composed
4470  //   of a single identifier refers to the class member. A
4471  //   mem-initializer-id for the hidden base class may be specified
4472  //   using a qualified name. ]
4473
4474  // Look for a member, first.
4475  if (ValueDecl *Member = tryLookupCtorInitMemberDecl(
4476          ClassDecl, SS, TemplateTypeTy, MemberOrBase)) {
4477    if (EllipsisLoc.isValid())
4478      Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
4479          << MemberOrBase
4480          << SourceRange(IdLoc, Init->getSourceRange().getEnd());
4481
4482    return BuildMemberInitializer(Member, Init, IdLoc);
4483  }
4484  // It didn't name a member, so see if it names a class.
4485  QualType BaseType;
4486  TypeSourceInfo *TInfo = nullptr;
4487
4488  if (TemplateTypeTy) {
4489    BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
4490    if (BaseType.isNull())
4491      return true;
4492  } else if (DS.getTypeSpecType() == TST_decltype) {
4493    BaseType = BuildDecltypeType(DS.getRepAsExpr());
4494  } else if (DS.getTypeSpecType() == TST_decltype_auto) {
4495    Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid);
4496    return true;
4497  } else {
4498    LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
4499    LookupParsedName(R, S, &SS);
4500
4501    TypeDecl *TyD = R.getAsSingle<TypeDecl>();
4502    if (!TyD) {
4503      if (R.isAmbiguous()) return true;
4504
4505      // We don't want access-control diagnostics here.
4506      R.suppressDiagnostics();
4507
4508      if (SS.isSet() && isDependentScopeSpecifier(SS)) {
4509        bool NotUnknownSpecialization = false;
4510        DeclContext *DC = computeDeclContext(SS, false);
4511        if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
4512          NotUnknownSpecialization = !Record->hasAnyDependentBases();
4513
4514        if (!NotUnknownSpecialization) {
4515          // When the scope specifier can refer to a member of an unknown
4516          // specialization, we take it as a type name.
4517          BaseType = CheckTypenameType(
4518              ElaboratedTypeKeyword::None, SourceLocation(),
4519              SS.getWithLocInContext(Context), *MemberOrBase, IdLoc);
4520          if (BaseType.isNull())
4521            return true;
4522
4523          TInfo = Context.CreateTypeSourceInfo(BaseType);
4524          DependentNameTypeLoc TL =
4525              TInfo->getTypeLoc().castAs<DependentNameTypeLoc>();
4526          if (!TL.isNull()) {
4527            TL.setNameLoc(IdLoc);
4528            TL.setElaboratedKeywordLoc(SourceLocation());
4529            TL.setQualifierLoc(SS.getWithLocInContext(Context));
4530          }
4531
4532          R.clear();
4533          R.setLookupName(MemberOrBase);
4534        }
4535      }
4536
4537      if (getLangOpts().MSVCCompat && !getLangOpts().CPlusPlus20) {
4538        if (auto UnqualifiedBase = R.getAsSingle<ClassTemplateDecl>()) {
4539          auto *TempSpec = cast<TemplateSpecializationType>(
4540              UnqualifiedBase->getInjectedClassNameSpecialization());
4541          TemplateName TN = TempSpec->getTemplateName();
4542          for (auto const &Base : ClassDecl->bases()) {
4543            auto BaseTemplate =
4544                Base.getType()->getAs<TemplateSpecializationType>();
4545            if (BaseTemplate && Context.hasSameTemplateName(
4546                                    BaseTemplate->getTemplateName(), TN)) {
4547              Diag(IdLoc, diag::ext_unqualified_base_class)
4548                  << SourceRange(IdLoc, Init->getSourceRange().getEnd());
4549              BaseType = Base.getType();
4550              break;
4551            }
4552          }
4553        }
4554      }
4555
4556      // If no results were found, try to correct typos.
4557      TypoCorrection Corr;
4558      MemInitializerValidatorCCC CCC(ClassDecl);
4559      if (R.empty() && BaseType.isNull() &&
4560          (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
4561                              CCC, CTK_ErrorRecovery, ClassDecl))) {
4562        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
4563          // We have found a non-static data member with a similar
4564          // name to what was typed; complain and initialize that
4565          // member.
4566          diagnoseTypo(Corr,
4567                       PDiag(diag::err_mem_init_not_member_or_class_suggest)
4568                         << MemberOrBase << true);
4569          return BuildMemberInitializer(Member, Init, IdLoc);
4570        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
4571          const CXXBaseSpecifier *DirectBaseSpec;
4572          const CXXBaseSpecifier *VirtualBaseSpec;
4573          if (FindBaseInitializer(*this, ClassDecl,
4574                                  Context.getTypeDeclType(Type),
4575                                  DirectBaseSpec, VirtualBaseSpec)) {
4576            // We have found a direct or virtual base class with a
4577            // similar name to what was typed; complain and initialize
4578            // that base class.
4579            diagnoseTypo(Corr,
4580                         PDiag(diag::err_mem_init_not_member_or_class_suggest)
4581                           << MemberOrBase << false,
4582                         PDiag() /*Suppress note, we provide our own.*/);
4583
4584            const CXXBaseSpecifier *BaseSpec = DirectBaseSpec ? DirectBaseSpec
4585                                                              : VirtualBaseSpec;
4586            Diag(BaseSpec->getBeginLoc(), diag::note_base_class_specified_here)
4587                << BaseSpec->getType() << BaseSpec->getSourceRange();
4588
4589            TyD = Type;
4590          }
4591        }
4592      }
4593
4594      if (!TyD && BaseType.isNull()) {
4595        Diag(IdLoc, diag::err_mem_init_not_member_or_class)
4596          << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
4597        return true;
4598      }
4599    }
4600
4601    if (BaseType.isNull()) {
4602      BaseType = getElaboratedType(ElaboratedTypeKeyword::None, SS,
4603                                   Context.getTypeDeclType(TyD));
4604      MarkAnyDeclReferenced(TyD->getLocation(), TyD, /*OdrUse=*/false);
4605      TInfo = Context.CreateTypeSourceInfo(BaseType);
4606      ElaboratedTypeLoc TL = TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>();
4607      TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc);
4608      TL.setElaboratedKeywordLoc(SourceLocation());
4609      TL.setQualifierLoc(SS.getWithLocInContext(Context));
4610    }
4611  }
4612
4613  if (!TInfo)
4614    TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
4615
4616  return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
4617}
4618
4619MemInitResult
4620Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
4621                             SourceLocation IdLoc) {
4622  FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
4623  IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
4624  assert((DirectMember || IndirectMember) &&
4625         "Member must be a FieldDecl or IndirectFieldDecl");
4626
4627  if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
4628    return true;
4629
4630  if (Member->isInvalidDecl())
4631    return true;
4632
4633  MultiExprArg Args;
4634  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
4635    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
4636  } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
4637    Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
4638  } else {
4639    // Template instantiation doesn't reconstruct ParenListExprs for us.
4640    Args = Init;
4641  }
4642
4643  SourceRange InitRange = Init->getSourceRange();
4644
4645  if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
4646    // Can't check initialization for a member of dependent type or when
4647    // any of the arguments are type-dependent expressions.
4648    DiscardCleanupsInEvaluationContext();
4649  } else {
4650    bool InitList = false;
4651    if (isa<InitListExpr>(Init)) {
4652      InitList = true;
4653      Args = Init;
4654    }
4655
4656    // Initialize the member.
4657    InitializedEntity MemberEntity =
4658      DirectMember ? InitializedEntity::InitializeMember(DirectMember, nullptr)
4659                   : InitializedEntity::InitializeMember(IndirectMember,
4660                                                         nullptr);
4661    InitializationKind Kind =
4662        InitList ? InitializationKind::CreateDirectList(
4663                       IdLoc, Init->getBeginLoc(), Init->getEndLoc())
4664                 : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
4665                                                    InitRange.getEnd());
4666
4667    InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
4668    ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args,
4669                                            nullptr);
4670    if (!MemberInit.isInvalid()) {
4671      // C++11 [class.base.init]p7:
4672      //   The initialization of each base and member constitutes a
4673      //   full-expression.
4674      MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin(),
4675                                       /*DiscardedValue*/ false);
4676    }
4677
4678    if (MemberInit.isInvalid()) {
4679      // Args were sensible expressions but we couldn't initialize the member
4680      // from them. Preserve them in a RecoveryExpr instead.
4681      Init = CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(), Args,
4682                                Member->getType())
4683                 .get();
4684      if (!Init)
4685        return true;
4686    } else {
4687      Init = MemberInit.get();
4688    }
4689  }
4690
4691  if (DirectMember) {
4692    return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
4693                                            InitRange.getBegin(), Init,
4694                                            InitRange.getEnd());
4695  } else {
4696    return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
4697                                            InitRange.getBegin(), Init,
4698                                            InitRange.getEnd());
4699  }
4700}
4701
4702MemInitResult
4703Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
4704                                 CXXRecordDecl *ClassDecl) {
4705  SourceLocation NameLoc = TInfo->getTypeLoc().getSourceRange().getBegin();
4706  if (!LangOpts.CPlusPlus11)
4707    return Diag(NameLoc, diag::err_delegating_ctor)
4708           << TInfo->getTypeLoc().getSourceRange();
4709  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
4710
4711  bool InitList = true;
4712  MultiExprArg Args = Init;
4713  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
4714    InitList = false;
4715    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
4716  }
4717
4718  SourceRange InitRange = Init->getSourceRange();
4719  // Initialize the object.
4720  InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
4721                                     QualType(ClassDecl->getTypeForDecl(), 0));
4722  InitializationKind Kind =
4723      InitList ? InitializationKind::CreateDirectList(
4724                     NameLoc, Init->getBeginLoc(), Init->getEndLoc())
4725               : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
4726                                                  InitRange.getEnd());
4727  InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
4728  ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
4729                                              Args, nullptr);
4730  if (!DelegationInit.isInvalid()) {
4731    assert((DelegationInit.get()->containsErrors() ||
4732            cast<CXXConstructExpr>(DelegationInit.get())->getConstructor()) &&
4733           "Delegating constructor with no target?");
4734
4735    // C++11 [class.base.init]p7:
4736    //   The initialization of each base and member constitutes a
4737    //   full-expression.
4738    DelegationInit = ActOnFinishFullExpr(
4739        DelegationInit.get(), InitRange.getBegin(), /*DiscardedValue*/ false);
4740  }
4741
4742  if (DelegationInit.isInvalid()) {
4743    DelegationInit =
4744        CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(), Args,
4745                           QualType(ClassDecl->getTypeForDecl(), 0));
4746    if (DelegationInit.isInvalid())
4747      return true;
4748  } else {
4749    // If we are in a dependent context, template instantiation will
4750    // perform this type-checking again. Just save the arguments that we
4751    // received in a ParenListExpr.
4752    // FIXME: This isn't quite ideal, since our ASTs don't capture all
4753    // of the information that we have about the base
4754    // initializer. However, deconstructing the ASTs is a dicey process,
4755    // and this approach is far more likely to get the corner cases right.
4756    if (CurContext->isDependentContext())
4757      DelegationInit = Init;
4758  }
4759
4760  return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
4761                                          DelegationInit.getAs<Expr>(),
4762                                          InitRange.getEnd());
4763}
4764
4765MemInitResult
4766Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
4767                           Expr *Init, CXXRecordDecl *ClassDecl,
4768                           SourceLocation EllipsisLoc) {
4769  SourceLocation BaseLoc = BaseTInfo->getTypeLoc().getBeginLoc();
4770
4771  if (!BaseType->isDependentType() && !BaseType->isRecordType())
4772    return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
4773           << BaseType << BaseTInfo->getTypeLoc().getSourceRange();
4774
4775  // C++ [class.base.init]p2:
4776  //   [...] Unless the mem-initializer-id names a nonstatic data
4777  //   member of the constructor's class or a direct or virtual base
4778  //   of that class, the mem-initializer is ill-formed. A
4779  //   mem-initializer-list can initialize a base class using any
4780  //   name that denotes that base class type.
4781
4782  // We can store the initializers in "as-written" form and delay analysis until
4783  // instantiation if the constructor is dependent. But not for dependent
4784  // (broken) code in a non-template! SetCtorInitializers does not expect this.
4785  bool Dependent = CurContext->isDependentContext() &&
4786                   (BaseType->isDependentType() || Init->isTypeDependent());
4787
4788  SourceRange InitRange = Init->getSourceRange();
4789  if (EllipsisLoc.isValid()) {
4790    // This is a pack expansion.
4791    if (!BaseType->containsUnexpandedParameterPack())  {
4792      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
4793        << SourceRange(BaseLoc, InitRange.getEnd());
4794
4795      EllipsisLoc = SourceLocation();
4796    }
4797  } else {
4798    // Check for any unexpanded parameter packs.
4799    if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
4800      return true;
4801
4802    if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
4803      return true;
4804  }
4805
4806  // Check for direct and virtual base classes.
4807  const CXXBaseSpecifier *DirectBaseSpec = nullptr;
4808  const CXXBaseSpecifier *VirtualBaseSpec = nullptr;
4809  if (!Dependent) {
4810    if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
4811                                       BaseType))
4812      return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
4813
4814    FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
4815                        VirtualBaseSpec);
4816
4817    // C++ [base.class.init]p2:
4818    // Unless the mem-initializer-id names a nonstatic data member of the
4819    // constructor's class or a direct or virtual base of that class, the
4820    // mem-initializer is ill-formed.
4821    if (!DirectBaseSpec && !VirtualBaseSpec) {
4822      // If the class has any dependent bases, then it's possible that
4823      // one of those types will resolve to the same type as
4824      // BaseType. Therefore, just treat this as a dependent base
4825      // class initialization.  FIXME: Should we try to check the
4826      // initialization anyway? It seems odd.
4827      if (ClassDecl->hasAnyDependentBases())
4828        Dependent = true;
4829      else
4830        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
4831               << BaseType << Context.getTypeDeclType(ClassDecl)
4832               << BaseTInfo->getTypeLoc().getSourceRange();
4833    }
4834  }
4835
4836  if (Dependent) {
4837    DiscardCleanupsInEvaluationContext();
4838
4839    return new (Context) CXXCtorInitializer(Context, BaseTInfo,
4840                                            /*IsVirtual=*/false,
4841                                            InitRange.getBegin(), Init,
4842                                            InitRange.getEnd(), EllipsisLoc);
4843  }
4844
4845  // C++ [base.class.init]p2:
4846  //   If a mem-initializer-id is ambiguous because it designates both
4847  //   a direct non-virtual base class and an inherited virtual base
4848  //   class, the mem-initializer is ill-formed.
4849  if (DirectBaseSpec && VirtualBaseSpec)
4850    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
4851      << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
4852
4853  const CXXBaseSpecifier *BaseSpec = DirectBaseSpec;
4854  if (!BaseSpec)
4855    BaseSpec = VirtualBaseSpec;
4856
4857  // Initialize the base.
4858  bool InitList = true;
4859  MultiExprArg Args = Init;
4860  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
4861    InitList = false;
4862    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
4863  }
4864
4865  InitializedEntity BaseEntity =
4866    InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
4867  InitializationKind Kind =
4868      InitList ? InitializationKind::CreateDirectList(BaseLoc)
4869               : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
4870                                                  InitRange.getEnd());
4871  InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
4872  ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, nullptr);
4873  if (!BaseInit.isInvalid()) {
4874    // C++11 [class.base.init]p7:
4875    //   The initialization of each base and member constitutes a
4876    //   full-expression.
4877    BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin(),
4878                                   /*DiscardedValue*/ false);
4879  }
4880
4881  if (BaseInit.isInvalid()) {
4882    BaseInit = CreateRecoveryExpr(InitRange.getBegin(), InitRange.getEnd(),
4883                                  Args, BaseType);
4884    if (BaseInit.isInvalid())
4885      return true;
4886  } else {
4887    // If we are in a dependent context, template instantiation will
4888    // perform this type-checking again. Just save the arguments that we
4889    // received in a ParenListExpr.
4890    // FIXME: This isn't quite ideal, since our ASTs don't capture all
4891    // of the information that we have about the base
4892    // initializer. However, deconstructing the ASTs is a dicey process,
4893    // and this approach is far more likely to get the corner cases right.
4894    if (CurContext->isDependentContext())
4895      BaseInit = Init;
4896  }
4897
4898  return new (Context) CXXCtorInitializer(Context, BaseTInfo,
4899                                          BaseSpec->isVirtual(),
4900                                          InitRange.getBegin(),
4901                                          BaseInit.getAs<Expr>(),
4902                                          InitRange.getEnd(), EllipsisLoc);
4903}
4904
4905// Create a static_cast\<T&&>(expr).
4906static Expr *CastForMoving(Sema &SemaRef, Expr *E) {
4907  QualType TargetType =
4908      SemaRef.BuildReferenceType(E->getType(), /*SpelledAsLValue*/ false,
4909                                 SourceLocation(), DeclarationName());
4910  SourceLocation ExprLoc = E->getBeginLoc();
4911  TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
4912      TargetType, ExprLoc);
4913
4914  return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
4915                                   SourceRange(ExprLoc, ExprLoc),
4916                                   E->getSourceRange()).get();
4917}
4918
4919/// ImplicitInitializerKind - How an implicit base or member initializer should
4920/// initialize its base or member.
4921enum ImplicitInitializerKind {
4922  IIK_Default,
4923  IIK_Copy,
4924  IIK_Move,
4925  IIK_Inherit
4926};
4927
4928static bool
4929BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
4930                             ImplicitInitializerKind ImplicitInitKind,
4931                             CXXBaseSpecifier *BaseSpec,
4932                             bool IsInheritedVirtualBase,
4933                             CXXCtorInitializer *&CXXBaseInit) {
4934  InitializedEntity InitEntity
4935    = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
4936                                        IsInheritedVirtualBase);
4937
4938  ExprResult BaseInit;
4939
4940  switch (ImplicitInitKind) {
4941  case IIK_Inherit:
4942  case IIK_Default: {
4943    InitializationKind InitKind
4944      = InitializationKind::CreateDefault(Constructor->getLocation());
4945    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, std::nullopt);
4946    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, std::nullopt);
4947    break;
4948  }
4949
4950  case IIK_Move:
4951  case IIK_Copy: {
4952    bool Moving = ImplicitInitKind == IIK_Move;
4953    ParmVarDecl *Param = Constructor->getParamDecl(0);
4954    QualType ParamType = Param->getType().getNonReferenceType();
4955
4956    Expr *CopyCtorArg =
4957      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
4958                          SourceLocation(), Param, false,
4959                          Constructor->getLocation(), ParamType,
4960                          VK_LValue, nullptr);
4961
4962    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
4963
4964    // Cast to the base class to avoid ambiguities.
4965    QualType ArgTy =
4966      SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
4967                                       ParamType.getQualifiers());
4968
4969    if (Moving) {
4970      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
4971    }
4972
4973    CXXCastPath BasePath;
4974    BasePath.push_back(BaseSpec);
4975    CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
4976                                            CK_UncheckedDerivedToBase,
4977                                            Moving ? VK_XValue : VK_LValue,
4978                                            &BasePath).get();
4979
4980    InitializationKind InitKind
4981      = InitializationKind::CreateDirect(Constructor->getLocation(),
4982                                         SourceLocation(), SourceLocation());
4983    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
4984    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
4985    break;
4986  }
4987  }
4988
4989  BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
4990  if (BaseInit.isInvalid())
4991    return true;
4992
4993  CXXBaseInit =
4994    new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
4995               SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
4996                                                        SourceLocation()),
4997                                             BaseSpec->isVirtual(),
4998                                             SourceLocation(),
4999                                             BaseInit.getAs<Expr>(),
5000                                             SourceLocation(),
5001                                             SourceLocation());
5002
5003  return false;
5004}
5005
5006static bool RefersToRValueRef(Expr *MemRef) {
5007  ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
5008  return Referenced->getType()->isRValueReferenceType();
5009}
5010
5011static bool
5012BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
5013                               ImplicitInitializerKind ImplicitInitKind,
5014                               FieldDecl *Field, IndirectFieldDecl *Indirect,
5015                               CXXCtorInitializer *&CXXMemberInit) {
5016  if (Field->isInvalidDecl())
5017    return true;
5018
5019  SourceLocation Loc = Constructor->getLocation();
5020
5021  if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
5022    bool Moving = ImplicitInitKind == IIK_Move;
5023    ParmVarDecl *Param = Constructor->getParamDecl(0);
5024    QualType ParamType = Param->getType().getNonReferenceType();
5025
5026    // Suppress copying zero-width bitfields.
5027    if (Field->isZeroLengthBitField(SemaRef.Context))
5028      return false;
5029
5030    Expr *MemberExprBase =
5031      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
5032                          SourceLocation(), Param, false,
5033                          Loc, ParamType, VK_LValue, nullptr);
5034
5035    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
5036
5037    if (Moving) {
5038      MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
5039    }
5040
5041    // Build a reference to this field within the parameter.
5042    CXXScopeSpec SS;
5043    LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
5044                              Sema::LookupMemberName);
5045    MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
5046                                  : cast<ValueDecl>(Field), AS_public);
5047    MemberLookup.resolveKind();
5048    ExprResult CtorArg
5049      = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
5050                                         ParamType, Loc,
5051                                         /*IsArrow=*/false,
5052                                         SS,
5053                                         /*TemplateKWLoc=*/SourceLocation(),
5054                                         /*FirstQualifierInScope=*/nullptr,
5055                                         MemberLookup,
5056                                         /*TemplateArgs=*/nullptr,
5057                                         /*S*/nullptr);
5058    if (CtorArg.isInvalid())
5059      return true;
5060
5061    // C++11 [class.copy]p15:
5062    //   - if a member m has rvalue reference type T&&, it is direct-initialized
5063    //     with static_cast<T&&>(x.m);
5064    if (RefersToRValueRef(CtorArg.get())) {
5065      CtorArg = CastForMoving(SemaRef, CtorArg.get());
5066    }
5067
5068    InitializedEntity Entity =
5069        Indirect ? InitializedEntity::InitializeMember(Indirect, nullptr,
5070                                                       /*Implicit*/ true)
5071                 : InitializedEntity::InitializeMember(Field, nullptr,
5072                                                       /*Implicit*/ true);
5073
5074    // Direct-initialize to use the copy constructor.
5075    InitializationKind InitKind =
5076      InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
5077
5078    Expr *CtorArgE = CtorArg.getAs<Expr>();
5079    InitializationSequence InitSeq(SemaRef, Entity, InitKind, CtorArgE);
5080    ExprResult MemberInit =
5081        InitSeq.Perform(SemaRef, Entity, InitKind, MultiExprArg(&CtorArgE, 1));
5082    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
5083    if (MemberInit.isInvalid())
5084      return true;
5085
5086    if (Indirect)
5087      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(
5088          SemaRef.Context, Indirect, Loc, Loc, MemberInit.getAs<Expr>(), Loc);
5089    else
5090      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(
5091          SemaRef.Context, Field, Loc, Loc, MemberInit.getAs<Expr>(), Loc);
5092    return false;
5093  }
5094
5095  assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
5096         "Unhandled implicit init kind!");
5097
5098  QualType FieldBaseElementType =
5099    SemaRef.Context.getBaseElementType(Field->getType());
5100
5101  if (FieldBaseElementType->isRecordType()) {
5102    InitializedEntity InitEntity =
5103        Indirect ? InitializedEntity::InitializeMember(Indirect, nullptr,
5104                                                       /*Implicit*/ true)
5105                 : InitializedEntity::InitializeMember(Field, nullptr,
5106                                                       /*Implicit*/ true);
5107    InitializationKind InitKind =
5108      InitializationKind::CreateDefault(Loc);
5109
5110    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, std::nullopt);
5111    ExprResult MemberInit =
5112        InitSeq.Perform(SemaRef, InitEntity, InitKind, std::nullopt);
5113
5114    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
5115    if (MemberInit.isInvalid())
5116      return true;
5117
5118    if (Indirect)
5119      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
5120                                                               Indirect, Loc,
5121                                                               Loc,
5122                                                               MemberInit.get(),
5123                                                               Loc);
5124    else
5125      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
5126                                                               Field, Loc, Loc,
5127                                                               MemberInit.get(),
5128                                                               Loc);
5129    return false;
5130  }
5131
5132  if (!Field->getParent()->isUnion()) {
5133    if (FieldBaseElementType->isReferenceType()) {
5134      SemaRef.Diag(Constructor->getLocation(),
5135                   diag::err_uninitialized_member_in_ctor)
5136      << (int)Constructor->isImplicit()
5137      << SemaRef.Context.getTagDeclType(Constructor->getParent())
5138      << 0 << Field->getDeclName();
5139      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
5140      return true;
5141    }
5142
5143    if (FieldBaseElementType.isConstQualified()) {
5144      SemaRef.Diag(Constructor->getLocation(),
5145                   diag::err_uninitialized_member_in_ctor)
5146      << (int)Constructor->isImplicit()
5147      << SemaRef.Context.getTagDeclType(Constructor->getParent())
5148      << 1 << Field->getDeclName();
5149      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
5150      return true;
5151    }
5152  }
5153
5154  if (FieldBaseElementType.hasNonTrivialObjCLifetime()) {
5155    // ARC and Weak:
5156    //   Default-initialize Objective-C pointers to NULL.
5157    CXXMemberInit
5158      = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
5159                                                 Loc, Loc,
5160                 new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
5161                                                 Loc);
5162    return false;
5163  }
5164
5165  // Nothing to initialize.
5166  CXXMemberInit = nullptr;
5167  return false;
5168}
5169
5170namespace {
5171struct BaseAndFieldInfo {
5172  Sema &S;
5173  CXXConstructorDecl *Ctor;
5174  bool AnyErrorsInInits;
5175  ImplicitInitializerKind IIK;
5176  llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
5177  SmallVector<CXXCtorInitializer*, 8> AllToInit;
5178  llvm::DenseMap<TagDecl*, FieldDecl*> ActiveUnionMember;
5179
5180  BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
5181    : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
5182    bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
5183    if (Ctor->getInheritedConstructor())
5184      IIK = IIK_Inherit;
5185    else if (Generated && Ctor->isCopyConstructor())
5186      IIK = IIK_Copy;
5187    else if (Generated && Ctor->isMoveConstructor())
5188      IIK = IIK_Move;
5189    else
5190      IIK = IIK_Default;
5191  }
5192
5193  bool isImplicitCopyOrMove() const {
5194    switch (IIK) {
5195    case IIK_Copy:
5196    case IIK_Move:
5197      return true;
5198
5199    case IIK_Default:
5200    case IIK_Inherit:
5201      return false;
5202    }
5203
5204    llvm_unreachable("Invalid ImplicitInitializerKind!");
5205  }
5206
5207  bool addFieldInitializer(CXXCtorInitializer *Init) {
5208    AllToInit.push_back(Init);
5209
5210    // Check whether this initializer makes the field "used".
5211    if (Init->getInit()->HasSideEffects(S.Context))
5212      S.UnusedPrivateFields.remove(Init->getAnyMember());
5213
5214    return false;
5215  }
5216
5217  bool isInactiveUnionMember(FieldDecl *Field) {
5218    RecordDecl *Record = Field->getParent();
5219    if (!Record->isUnion())
5220      return false;
5221
5222    if (FieldDecl *Active =
5223            ActiveUnionMember.lookup(Record->getCanonicalDecl()))
5224      return Active != Field->getCanonicalDecl();
5225
5226    // In an implicit copy or move constructor, ignore any in-class initializer.
5227    if (isImplicitCopyOrMove())
5228      return true;
5229
5230    // If there's no explicit initialization, the field is active only if it
5231    // has an in-class initializer...
5232    if (Field->hasInClassInitializer())
5233      return false;
5234    // ... or it's an anonymous struct or union whose class has an in-class
5235    // initializer.
5236    if (!Field->isAnonymousStructOrUnion())
5237      return true;
5238    CXXRecordDecl *FieldRD = Field->getType()->getAsCXXRecordDecl();
5239    return !FieldRD->hasInClassInitializer();
5240  }
5241
5242  /// Determine whether the given field is, or is within, a union member
5243  /// that is inactive (because there was an initializer given for a different
5244  /// member of the union, or because the union was not initialized at all).
5245  bool isWithinInactiveUnionMember(FieldDecl *Field,
5246                                   IndirectFieldDecl *Indirect) {
5247    if (!Indirect)
5248      return isInactiveUnionMember(Field);
5249
5250    for (auto *C : Indirect->chain()) {
5251      FieldDecl *Field = dyn_cast<FieldDecl>(C);
5252      if (Field && isInactiveUnionMember(Field))
5253        return true;
5254    }
5255    return false;
5256  }
5257};
5258}
5259
5260/// Determine whether the given type is an incomplete or zero-lenfgth
5261/// array type.
5262static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
5263  if (T->isIncompleteArrayType())
5264    return true;
5265
5266  while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
5267    if (!ArrayT->getSize())
5268      return true;
5269
5270    T = ArrayT->getElementType();
5271  }
5272
5273  return false;
5274}
5275
5276static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
5277                                    FieldDecl *Field,
5278                                    IndirectFieldDecl *Indirect = nullptr) {
5279  if (Field->isInvalidDecl())
5280    return false;
5281
5282  // Overwhelmingly common case: we have a direct initializer for this field.
5283  if (CXXCtorInitializer *Init =
5284          Info.AllBaseFields.lookup(Field->getCanonicalDecl()))
5285    return Info.addFieldInitializer(Init);
5286
5287  // C++11 [class.base.init]p8:
5288  //   if the entity is a non-static data member that has a
5289  //   brace-or-equal-initializer and either
5290  //   -- the constructor's class is a union and no other variant member of that
5291  //      union is designated by a mem-initializer-id or
5292  //   -- the constructor's class is not a union, and, if the entity is a member
5293  //      of an anonymous union, no other member of that union is designated by
5294  //      a mem-initializer-id,
5295  //   the entity is initialized as specified in [dcl.init].
5296  //
5297  // We also apply the same rules to handle anonymous structs within anonymous
5298  // unions.
5299  if (Info.isWithinInactiveUnionMember(Field, Indirect))
5300    return false;
5301
5302  if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
5303    ExprResult DIE =
5304        SemaRef.BuildCXXDefaultInitExpr(Info.Ctor->getLocation(), Field);
5305    if (DIE.isInvalid())
5306      return true;
5307
5308    auto Entity = InitializedEntity::InitializeMember(Field, nullptr, true);
5309    SemaRef.checkInitializerLifetime(Entity, DIE.get());
5310
5311    CXXCtorInitializer *Init;
5312    if (Indirect)
5313      Init = new (SemaRef.Context)
5314          CXXCtorInitializer(SemaRef.Context, Indirect, SourceLocation(),
5315                             SourceLocation(), DIE.get(), SourceLocation());
5316    else
5317      Init = new (SemaRef.Context)
5318          CXXCtorInitializer(SemaRef.Context, Field, SourceLocation(),
5319                             SourceLocation(), DIE.get(), SourceLocation());
5320    return Info.addFieldInitializer(Init);
5321  }
5322
5323  // Don't initialize incomplete or zero-length arrays.
5324  if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
5325    return false;
5326
5327  // Don't try to build an implicit initializer if there were semantic
5328  // errors in any of the initializers (and therefore we might be
5329  // missing some that the user actually wrote).
5330  if (Info.AnyErrorsInInits)
5331    return false;
5332
5333  CXXCtorInitializer *Init = nullptr;
5334  if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
5335                                     Indirect, Init))
5336    return true;
5337
5338  if (!Init)
5339    return false;
5340
5341  return Info.addFieldInitializer(Init);
5342}
5343
5344bool
5345Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
5346                               CXXCtorInitializer *Initializer) {
5347  assert(Initializer->isDelegatingInitializer());
5348  Constructor->setNumCtorInitializers(1);
5349  CXXCtorInitializer **initializer =
5350    new (Context) CXXCtorInitializer*[1];
5351  memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
5352  Constructor->setCtorInitializers(initializer);
5353
5354  if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
5355    MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
5356    DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
5357  }
5358
5359  DelegatingCtorDecls.push_back(Constructor);
5360
5361  DiagnoseUninitializedFields(*this, Constructor);
5362
5363  return false;
5364}
5365
5366bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
5367                               ArrayRef<CXXCtorInitializer *> Initializers) {
5368  if (Constructor->isDependentContext()) {
5369    // Just store the initializers as written, they will be checked during
5370    // instantiation.
5371    if (!Initializers.empty()) {
5372      Constructor->setNumCtorInitializers(Initializers.size());
5373      CXXCtorInitializer **baseOrMemberInitializers =
5374        new (Context) CXXCtorInitializer*[Initializers.size()];
5375      memcpy(baseOrMemberInitializers, Initializers.data(),
5376             Initializers.size() * sizeof(CXXCtorInitializer*));
5377      Constructor->setCtorInitializers(baseOrMemberInitializers);
5378    }
5379
5380    // Let template instantiation know whether we had errors.
5381    if (AnyErrors)
5382      Constructor->setInvalidDecl();
5383
5384    return false;
5385  }
5386
5387  BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
5388
5389  // We need to build the initializer AST according to order of construction
5390  // and not what user specified in the Initializers list.
5391  CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
5392  if (!ClassDecl)
5393    return true;
5394
5395  bool HadError = false;
5396
5397  for (unsigned i = 0; i < Initializers.size(); i++) {
5398    CXXCtorInitializer *Member = Initializers[i];
5399
5400    if (Member->isBaseInitializer())
5401      Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
5402    else {
5403      Info.AllBaseFields[Member->getAnyMember()->getCanonicalDecl()] = Member;
5404
5405      if (IndirectFieldDecl *F = Member->getIndirectMember()) {
5406        for (auto *C : F->chain()) {
5407          FieldDecl *FD = dyn_cast<FieldDecl>(C);
5408          if (FD && FD->getParent()->isUnion())
5409            Info.ActiveUnionMember.insert(std::make_pair(
5410                FD->getParent()->getCanonicalDecl(), FD->getCanonicalDecl()));
5411        }
5412      } else if (FieldDecl *FD = Member->getMember()) {
5413        if (FD->getParent()->isUnion())
5414          Info.ActiveUnionMember.insert(std::make_pair(
5415              FD->getParent()->getCanonicalDecl(), FD->getCanonicalDecl()));
5416      }
5417    }
5418  }
5419
5420  // Keep track of the direct virtual bases.
5421  llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
5422  for (auto &I : ClassDecl->bases()) {
5423    if (I.isVirtual())
5424      DirectVBases.insert(&I);
5425  }
5426
5427  // Push virtual bases before others.
5428  for (auto &VBase : ClassDecl->vbases()) {
5429    if (CXXCtorInitializer *Value
5430        = Info.AllBaseFields.lookup(VBase.getType()->getAs<RecordType>())) {
5431      // [class.base.init]p7, per DR257:
5432      //   A mem-initializer where the mem-initializer-id names a virtual base
5433      //   class is ignored during execution of a constructor of any class that
5434      //   is not the most derived class.
5435      if (ClassDecl->isAbstract()) {
5436        // FIXME: Provide a fixit to remove the base specifier. This requires
5437        // tracking the location of the associated comma for a base specifier.
5438        Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored)
5439          << VBase.getType() << ClassDecl;
5440        DiagnoseAbstractType(ClassDecl);
5441      }
5442
5443      Info.AllToInit.push_back(Value);
5444    } else if (!AnyErrors && !ClassDecl->isAbstract()) {
5445      // [class.base.init]p8, per DR257:
5446      //   If a given [...] base class is not named by a mem-initializer-id
5447      //   [...] and the entity is not a virtual base class of an abstract
5448      //   class, then [...] the entity is default-initialized.
5449      bool IsInheritedVirtualBase = !DirectVBases.count(&VBase);
5450      CXXCtorInitializer *CXXBaseInit;
5451      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
5452                                       &VBase, IsInheritedVirtualBase,
5453                                       CXXBaseInit)) {
5454        HadError = true;
5455        continue;
5456      }
5457
5458      Info.AllToInit.push_back(CXXBaseInit);
5459    }
5460  }
5461
5462  // Non-virtual bases.
5463  for (auto &Base : ClassDecl->bases()) {
5464    // Virtuals are in the virtual base list and already constructed.
5465    if (Base.isVirtual())
5466      continue;
5467
5468    if (CXXCtorInitializer *Value
5469          = Info.AllBaseFields.lookup(Base.getType()->getAs<RecordType>())) {
5470      Info.AllToInit.push_back(Value);
5471    } else if (!AnyErrors) {
5472      CXXCtorInitializer *CXXBaseInit;
5473      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
5474                                       &Base, /*IsInheritedVirtualBase=*/false,
5475                                       CXXBaseInit)) {
5476        HadError = true;
5477        continue;
5478      }
5479
5480      Info.AllToInit.push_back(CXXBaseInit);
5481    }
5482  }
5483
5484  // Fields.
5485  for (auto *Mem : ClassDecl->decls()) {
5486    if (auto *F = dyn_cast<FieldDecl>(Mem)) {
5487      // C++ [class.bit]p2:
5488      //   A declaration for a bit-field that omits the identifier declares an
5489      //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
5490      //   initialized.
5491      if (F->isUnnamedBitfield())
5492        continue;
5493
5494      // If we're not generating the implicit copy/move constructor, then we'll
5495      // handle anonymous struct/union fields based on their individual
5496      // indirect fields.
5497      if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
5498        continue;
5499
5500      if (CollectFieldInitializer(*this, Info, F))
5501        HadError = true;
5502      continue;
5503    }
5504
5505    // Beyond this point, we only consider default initialization.
5506    if (Info.isImplicitCopyOrMove())
5507      continue;
5508
5509    if (auto *F = dyn_cast<IndirectFieldDecl>(Mem)) {
5510      if (F->getType()->isIncompleteArrayType()) {
5511        assert(ClassDecl->hasFlexibleArrayMember() &&
5512               "Incomplete array type is not valid");
5513        continue;
5514      }
5515
5516      // Initialize each field of an anonymous struct individually.
5517      if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
5518        HadError = true;
5519
5520      continue;
5521    }
5522  }
5523
5524  unsigned NumInitializers = Info.AllToInit.size();
5525  if (NumInitializers > 0) {
5526    Constructor->setNumCtorInitializers(NumInitializers);
5527    CXXCtorInitializer **baseOrMemberInitializers =
5528      new (Context) CXXCtorInitializer*[NumInitializers];
5529    memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
5530           NumInitializers * sizeof(CXXCtorInitializer*));
5531    Constructor->setCtorInitializers(baseOrMemberInitializers);
5532
5533    // Constructors implicitly reference the base and member
5534    // destructors.
5535    MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
5536                                           Constructor->getParent());
5537  }
5538
5539  return HadError;
5540}
5541
5542static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
5543  if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
5544    const RecordDecl *RD = RT->getDecl();
5545    if (RD->isAnonymousStructOrUnion()) {
5546      for (auto *Field : RD->fields())
5547        PopulateKeysForFields(Field, IdealInits);
5548      return;
5549    }
5550  }
5551  IdealInits.push_back(Field->getCanonicalDecl());
5552}
5553
5554static const void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
5555  return Context.getCanonicalType(BaseType).getTypePtr();
5556}
5557
5558static const void *GetKeyForMember(ASTContext &Context,
5559                                   CXXCtorInitializer *Member) {
5560  if (!Member->isAnyMemberInitializer())
5561    return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
5562
5563  return Member->getAnyMember()->getCanonicalDecl();
5564}
5565
5566static void AddInitializerToDiag(const Sema::SemaDiagnosticBuilder &Diag,
5567                                 const CXXCtorInitializer *Previous,
5568                                 const CXXCtorInitializer *Current) {
5569  if (Previous->isAnyMemberInitializer())
5570    Diag << 0 << Previous->getAnyMember();
5571  else
5572    Diag << 1 << Previous->getTypeSourceInfo()->getType();
5573
5574  if (Current->isAnyMemberInitializer())
5575    Diag << 0 << Current->getAnyMember();
5576  else
5577    Diag << 1 << Current->getTypeSourceInfo()->getType();
5578}
5579
5580static void DiagnoseBaseOrMemInitializerOrder(
5581    Sema &SemaRef, const CXXConstructorDecl *Constructor,
5582    ArrayRef<CXXCtorInitializer *> Inits) {
5583  if (Constructor->getDeclContext()->isDependentContext())
5584    return;
5585
5586  // Don't check initializers order unless the warning is enabled at the
5587  // location of at least one initializer.
5588  bool ShouldCheckOrder = false;
5589  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
5590    CXXCtorInitializer *Init = Inits[InitIndex];
5591    if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order,
5592                                 Init->getSourceLocation())) {
5593      ShouldCheckOrder = true;
5594      break;
5595    }
5596  }
5597  if (!ShouldCheckOrder)
5598    return;
5599
5600  // Build the list of bases and members in the order that they'll
5601  // actually be initialized.  The explicit initializers should be in
5602  // this same order but may be missing things.
5603  SmallVector<const void*, 32> IdealInitKeys;
5604
5605  const CXXRecordDecl *ClassDecl = Constructor->getParent();
5606
5607  // 1. Virtual bases.
5608  for (const auto &VBase : ClassDecl->vbases())
5609    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase.getType()));
5610
5611  // 2. Non-virtual bases.
5612  for (const auto &Base : ClassDecl->bases()) {
5613    if (Base.isVirtual())
5614      continue;
5615    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base.getType()));
5616  }
5617
5618  // 3. Direct fields.
5619  for (auto *Field : ClassDecl->fields()) {
5620    if (Field->isUnnamedBitfield())
5621      continue;
5622
5623    PopulateKeysForFields(Field, IdealInitKeys);
5624  }
5625
5626  unsigned NumIdealInits = IdealInitKeys.size();
5627  unsigned IdealIndex = 0;
5628
5629  // Track initializers that are in an incorrect order for either a warning or
5630  // note if multiple ones occur.
5631  SmallVector<unsigned> WarnIndexes;
5632  // Correlates the index of an initializer in the init-list to the index of
5633  // the field/base in the class.
5634  SmallVector<std::pair<unsigned, unsigned>, 32> CorrelatedInitOrder;
5635
5636  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
5637    const void *InitKey = GetKeyForMember(SemaRef.Context, Inits[InitIndex]);
5638
5639    // Scan forward to try to find this initializer in the idealized
5640    // initializers list.
5641    for (; IdealIndex != NumIdealInits; ++IdealIndex)
5642      if (InitKey == IdealInitKeys[IdealIndex])
5643        break;
5644
5645    // If we didn't find this initializer, it must be because we
5646    // scanned past it on a previous iteration.  That can only
5647    // happen if we're out of order;  emit a warning.
5648    if (IdealIndex == NumIdealInits && InitIndex) {
5649      WarnIndexes.push_back(InitIndex);
5650
5651      // Move back to the initializer's location in the ideal list.
5652      for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
5653        if (InitKey == IdealInitKeys[IdealIndex])
5654          break;
5655
5656      assert(IdealIndex < NumIdealInits &&
5657             "initializer not found in initializer list");
5658    }
5659    CorrelatedInitOrder.emplace_back(IdealIndex, InitIndex);
5660  }
5661
5662  if (WarnIndexes.empty())
5663    return;
5664
5665  // Sort based on the ideal order, first in the pair.
5666  llvm::sort(CorrelatedInitOrder, llvm::less_first());
5667
5668  // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to
5669  // emit the diagnostic before we can try adding notes.
5670  {
5671    Sema::SemaDiagnosticBuilder D = SemaRef.Diag(
5672        Inits[WarnIndexes.front() - 1]->getSourceLocation(),
5673        WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order
5674                                : diag::warn_some_initializers_out_of_order);
5675
5676    for (unsigned I = 0; I < CorrelatedInitOrder.size(); ++I) {
5677      if (CorrelatedInitOrder[I].second == I)
5678        continue;
5679      // Ideally we would be using InsertFromRange here, but clang doesn't
5680      // appear to handle InsertFromRange correctly when the source range is
5681      // modified by another fix-it.
5682      D << FixItHint::CreateReplacement(
5683          Inits[I]->getSourceRange(),
5684          Lexer::getSourceText(
5685              CharSourceRange::getTokenRange(
5686                  Inits[CorrelatedInitOrder[I].second]->getSourceRange()),
5687              SemaRef.getSourceManager(), SemaRef.getLangOpts()));
5688    }
5689
5690    // If there is only 1 item out of order, the warning expects the name and
5691    // type of each being added to it.
5692    if (WarnIndexes.size() == 1) {
5693      AddInitializerToDiag(D, Inits[WarnIndexes.front() - 1],
5694                           Inits[WarnIndexes.front()]);
5695      return;
5696    }
5697  }
5698  // More than 1 item to warn, create notes letting the user know which ones
5699  // are bad.
5700  for (unsigned WarnIndex : WarnIndexes) {
5701    const clang::CXXCtorInitializer *PrevInit = Inits[WarnIndex - 1];
5702    auto D = SemaRef.Diag(PrevInit->getSourceLocation(),
5703                          diag::note_initializer_out_of_order);
5704    AddInitializerToDiag(D, PrevInit, Inits[WarnIndex]);
5705    D << PrevInit->getSourceRange();
5706  }
5707}
5708
5709namespace {
5710bool CheckRedundantInit(Sema &S,
5711                        CXXCtorInitializer *Init,
5712                        CXXCtorInitializer *&PrevInit) {
5713  if (!PrevInit) {
5714    PrevInit = Init;
5715    return false;
5716  }
5717
5718  if (FieldDecl *Field = Init->getAnyMember())
5719    S.Diag(Init->getSourceLocation(),
5720           diag::err_multiple_mem_initialization)
5721      << Field->getDeclName()
5722      << Init->getSourceRange();
5723  else {
5724    const Type *BaseClass = Init->getBaseClass();
5725    assert(BaseClass && "neither field nor base");
5726    S.Diag(Init->getSourceLocation(),
5727           diag::err_multiple_base_initialization)
5728      << QualType(BaseClass, 0)
5729      << Init->getSourceRange();
5730  }
5731  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
5732    << 0 << PrevInit->getSourceRange();
5733
5734  return true;
5735}
5736
5737typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
5738typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
5739
5740bool CheckRedundantUnionInit(Sema &S,
5741                             CXXCtorInitializer *Init,
5742                             RedundantUnionMap &Unions) {
5743  FieldDecl *Field = Init->getAnyMember();
5744  RecordDecl *Parent = Field->getParent();
5745  NamedDecl *Child = Field;
5746
5747  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
5748    if (Parent->isUnion()) {
5749      UnionEntry &En = Unions[Parent];
5750      if (En.first && En.first != Child) {
5751        S.Diag(Init->getSourceLocation(),
5752               diag::err_multiple_mem_union_initialization)
5753          << Field->getDeclName()
5754          << Init->getSourceRange();
5755        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
5756          << 0 << En.second->getSourceRange();
5757        return true;
5758      }
5759      if (!En.first) {
5760        En.first = Child;
5761        En.second = Init;
5762      }
5763      if (!Parent->isAnonymousStructOrUnion())
5764        return false;
5765    }
5766
5767    Child = Parent;
5768    Parent = cast<RecordDecl>(Parent->getDeclContext());
5769  }
5770
5771  return false;
5772}
5773} // namespace
5774
5775/// ActOnMemInitializers - Handle the member initializers for a constructor.
5776void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
5777                                SourceLocation ColonLoc,
5778                                ArrayRef<CXXCtorInitializer*> MemInits,
5779                                bool AnyErrors) {
5780  if (!ConstructorDecl)
5781    return;
5782
5783  AdjustDeclIfTemplate(ConstructorDecl);
5784
5785  CXXConstructorDecl *Constructor
5786    = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
5787
5788  if (!Constructor) {
5789    Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
5790    return;
5791  }
5792
5793  // Mapping for the duplicate initializers check.
5794  // For member initializers, this is keyed with a FieldDecl*.
5795  // For base initializers, this is keyed with a Type*.
5796  llvm::DenseMap<const void *, CXXCtorInitializer *> Members;
5797
5798  // Mapping for the inconsistent anonymous-union initializers check.
5799  RedundantUnionMap MemberUnions;
5800
5801  bool HadError = false;
5802  for (unsigned i = 0; i < MemInits.size(); i++) {
5803    CXXCtorInitializer *Init = MemInits[i];
5804
5805    // Set the source order index.
5806    Init->setSourceOrder(i);
5807
5808    if (Init->isAnyMemberInitializer()) {
5809      const void *Key = GetKeyForMember(Context, Init);
5810      if (CheckRedundantInit(*this, Init, Members[Key]) ||
5811          CheckRedundantUnionInit(*this, Init, MemberUnions))
5812        HadError = true;
5813    } else if (Init->isBaseInitializer()) {
5814      const void *Key = GetKeyForMember(Context, Init);
5815      if (CheckRedundantInit(*this, Init, Members[Key]))
5816        HadError = true;
5817    } else {
5818      assert(Init->isDelegatingInitializer());
5819      // This must be the only initializer
5820      if (MemInits.size() != 1) {
5821        Diag(Init->getSourceLocation(),
5822             diag::err_delegating_initializer_alone)
5823          << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
5824        // We will treat this as being the only initializer.
5825      }
5826      SetDelegatingInitializer(Constructor, MemInits[i]);
5827      // Return immediately as the initializer is set.
5828      return;
5829    }
5830  }
5831
5832  if (HadError)
5833    return;
5834
5835  DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
5836
5837  SetCtorInitializers(Constructor, AnyErrors, MemInits);
5838
5839  DiagnoseUninitializedFields(*this, Constructor);
5840}
5841
5842void
5843Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
5844                                             CXXRecordDecl *ClassDecl) {
5845  // Ignore dependent contexts. Also ignore unions, since their members never
5846  // have destructors implicitly called.
5847  if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
5848    return;
5849
5850  // FIXME: all the access-control diagnostics are positioned on the
5851  // field/base declaration.  That's probably good; that said, the
5852  // user might reasonably want to know why the destructor is being
5853  // emitted, and we currently don't say.
5854
5855  // Non-static data members.
5856  for (auto *Field : ClassDecl->fields()) {
5857    if (Field->isInvalidDecl())
5858      continue;
5859
5860    // Don't destroy incomplete or zero-length arrays.
5861    if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
5862      continue;
5863
5864    QualType FieldType = Context.getBaseElementType(Field->getType());
5865
5866    const RecordType* RT = FieldType->getAs<RecordType>();
5867    if (!RT)
5868      continue;
5869
5870    CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
5871    if (FieldClassDecl->isInvalidDecl())
5872      continue;
5873    if (FieldClassDecl->hasIrrelevantDestructor())
5874      continue;
5875    // The destructor for an implicit anonymous union member is never invoked.
5876    if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
5877      continue;
5878
5879    CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
5880    // Dtor might still be missing, e.g because it's invalid.
5881    if (!Dtor)
5882      continue;
5883    CheckDestructorAccess(Field->getLocation(), Dtor,
5884                          PDiag(diag::err_access_dtor_field)
5885                            << Field->getDeclName()
5886                            << FieldType);
5887
5888    MarkFunctionReferenced(Location, Dtor);
5889    DiagnoseUseOfDecl(Dtor, Location);
5890  }
5891
5892  // We only potentially invoke the destructors of potentially constructed
5893  // subobjects.
5894  bool VisitVirtualBases = !ClassDecl->isAbstract();
5895
5896  // If the destructor exists and has already been marked used in the MS ABI,
5897  // then virtual base destructors have already been checked and marked used.
5898  // Skip checking them again to avoid duplicate diagnostics.
5899  if (Context.getTargetInfo().getCXXABI().isMicrosoft()) {
5900    CXXDestructorDecl *Dtor = ClassDecl->getDestructor();
5901    if (Dtor && Dtor->isUsed())
5902      VisitVirtualBases = false;
5903  }
5904
5905  llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
5906
5907  // Bases.
5908  for (const auto &Base : ClassDecl->bases()) {
5909    const RecordType *RT = Base.getType()->getAs<RecordType>();
5910    if (!RT)
5911      continue;
5912
5913    // Remember direct virtual bases.
5914    if (Base.isVirtual()) {
5915      if (!VisitVirtualBases)
5916        continue;
5917      DirectVirtualBases.insert(RT);
5918    }
5919
5920    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
5921    // If our base class is invalid, we probably can't get its dtor anyway.
5922    if (BaseClassDecl->isInvalidDecl())
5923      continue;
5924    if (BaseClassDecl->hasIrrelevantDestructor())
5925      continue;
5926
5927    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
5928    // Dtor might still be missing, e.g because it's invalid.
5929    if (!Dtor)
5930      continue;
5931
5932    // FIXME: caret should be on the start of the class name
5933    CheckDestructorAccess(Base.getBeginLoc(), Dtor,
5934                          PDiag(diag::err_access_dtor_base)
5935                              << Base.getType() << Base.getSourceRange(),
5936                          Context.getTypeDeclType(ClassDecl));
5937
5938    MarkFunctionReferenced(Location, Dtor);
5939    DiagnoseUseOfDecl(Dtor, Location);
5940  }
5941
5942  if (VisitVirtualBases)
5943    MarkVirtualBaseDestructorsReferenced(Location, ClassDecl,
5944                                         &DirectVirtualBases);
5945}
5946
5947void Sema::MarkVirtualBaseDestructorsReferenced(
5948    SourceLocation Location, CXXRecordDecl *ClassDecl,
5949    llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {
5950  // Virtual bases.
5951  for (const auto &VBase : ClassDecl->vbases()) {
5952    // Bases are always records in a well-formed non-dependent class.
5953    const RecordType *RT = VBase.getType()->castAs<RecordType>();
5954
5955    // Ignore already visited direct virtual bases.
5956    if (DirectVirtualBases && DirectVirtualBases->count(RT))
5957      continue;
5958
5959    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
5960    // If our base class is invalid, we probably can't get its dtor anyway.
5961    if (BaseClassDecl->isInvalidDecl())
5962      continue;
5963    if (BaseClassDecl->hasIrrelevantDestructor())
5964      continue;
5965
5966    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
5967    // Dtor might still be missing, e.g because it's invalid.
5968    if (!Dtor)
5969      continue;
5970    if (CheckDestructorAccess(
5971            ClassDecl->getLocation(), Dtor,
5972            PDiag(diag::err_access_dtor_vbase)
5973                << Context.getTypeDeclType(ClassDecl) << VBase.getType(),
5974            Context.getTypeDeclType(ClassDecl)) ==
5975        AR_accessible) {
5976      CheckDerivedToBaseConversion(
5977          Context.getTypeDeclType(ClassDecl), VBase.getType(),
5978          diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
5979          SourceRange(), DeclarationName(), nullptr);
5980    }
5981
5982    MarkFunctionReferenced(Location, Dtor);
5983    DiagnoseUseOfDecl(Dtor, Location);
5984  }
5985}
5986
5987void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
5988  if (!CDtorDecl)
5989    return;
5990
5991  if (CXXConstructorDecl *Constructor
5992      = dyn_cast<CXXConstructorDecl>(CDtorDecl)) {
5993    SetCtorInitializers(Constructor, /*AnyErrors=*/false);
5994    DiagnoseUninitializedFields(*this, Constructor);
5995  }
5996}
5997
5998bool Sema::isAbstractType(SourceLocation Loc, QualType T) {
5999  if (!getLangOpts().CPlusPlus)
6000    return false;
6001
6002  const auto *RD = Context.getBaseElementType(T)->getAsCXXRecordDecl();
6003  if (!RD)
6004    return false;
6005
6006  // FIXME: Per [temp.inst]p1, we are supposed to trigger instantiation of a
6007  // class template specialization here, but doing so breaks a lot of code.
6008
6009  // We can't answer whether something is abstract until it has a
6010  // definition. If it's currently being defined, we'll walk back
6011  // over all the declarations when we have a full definition.
6012  const CXXRecordDecl *Def = RD->getDefinition();
6013  if (!Def || Def->isBeingDefined())
6014    return false;
6015
6016  return RD->isAbstract();
6017}
6018
6019bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
6020                                  TypeDiagnoser &Diagnoser) {
6021  if (!isAbstractType(Loc, T))
6022    return false;
6023
6024  T = Context.getBaseElementType(T);
6025  Diagnoser.diagnose(*this, Loc, T);
6026  DiagnoseAbstractType(T->getAsCXXRecordDecl());
6027  return true;
6028}
6029
6030void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
6031  // Check if we've already emitted the list of pure virtual functions
6032  // for this class.
6033  if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
6034    return;
6035
6036  // If the diagnostic is suppressed, don't emit the notes. We're only
6037  // going to emit them once, so try to attach them to a diagnostic we're
6038  // actually going to show.
6039  if (Diags.isLastDiagnosticIgnored())
6040    return;
6041
6042  CXXFinalOverriderMap FinalOverriders;
6043  RD->getFinalOverriders(FinalOverriders);
6044
6045  // Keep a set of seen pure methods so we won't diagnose the same method
6046  // more than once.
6047  llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
6048
6049  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
6050                                   MEnd = FinalOverriders.end();
6051       M != MEnd;
6052       ++M) {
6053    for (OverridingMethods::iterator SO = M->second.begin(),
6054                                  SOEnd = M->second.end();
6055         SO != SOEnd; ++SO) {
6056      // C++ [class.abstract]p4:
6057      //   A class is abstract if it contains or inherits at least one
6058      //   pure virtual function for which the final overrider is pure
6059      //   virtual.
6060
6061      //
6062      if (SO->second.size() != 1)
6063        continue;
6064
6065      if (!SO->second.front().Method->isPureVirtual())
6066        continue;
6067
6068      if (!SeenPureMethods.insert(SO->second.front().Method).second)
6069        continue;
6070
6071      Diag(SO->second.front().Method->getLocation(),
6072           diag::note_pure_virtual_function)
6073        << SO->second.front().Method->getDeclName() << RD->getDeclName();
6074    }
6075  }
6076
6077  if (!PureVirtualClassDiagSet)
6078    PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
6079  PureVirtualClassDiagSet->insert(RD);
6080}
6081
6082namespace {
6083struct AbstractUsageInfo {
6084  Sema &S;
6085  CXXRecordDecl *Record;
6086  CanQualType AbstractType;
6087  bool Invalid;
6088
6089  AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
6090    : S(S), Record(Record),
6091      AbstractType(S.Context.getCanonicalType(
6092                   S.Context.getTypeDeclType(Record))),
6093      Invalid(false) {}
6094
6095  void DiagnoseAbstractType() {
6096    if (Invalid) return;
6097    S.DiagnoseAbstractType(Record);
6098    Invalid = true;
6099  }
6100
6101  void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
6102};
6103
6104struct CheckAbstractUsage {
6105  AbstractUsageInfo &Info;
6106  const NamedDecl *Ctx;
6107
6108  CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
6109    : Info(Info), Ctx(Ctx) {}
6110
6111  void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
6112    switch (TL.getTypeLocClass()) {
6113#define ABSTRACT_TYPELOC(CLASS, PARENT)
6114#define TYPELOC(CLASS, PARENT) \
6115    case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
6116#include "clang/AST/TypeLocNodes.def"
6117    }
6118  }
6119
6120  void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
6121    Visit(TL.getReturnLoc(), Sema::AbstractReturnType);
6122    for (unsigned I = 0, E = TL.getNumParams(); I != E; ++I) {
6123      if (!TL.getParam(I))
6124        continue;
6125
6126      TypeSourceInfo *TSI = TL.getParam(I)->getTypeSourceInfo();
6127      if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
6128    }
6129  }
6130
6131  void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
6132    Visit(TL.getElementLoc(), Sema::AbstractArrayType);
6133  }
6134
6135  void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
6136    // Visit the type parameters from a permissive context.
6137    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
6138      TemplateArgumentLoc TAL = TL.getArgLoc(I);
6139      if (TAL.getArgument().getKind() == TemplateArgument::Type)
6140        if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
6141          Visit(TSI->getTypeLoc(), Sema::AbstractNone);
6142      // TODO: other template argument types?
6143    }
6144  }
6145
6146  // Visit pointee types from a permissive context.
6147#define CheckPolymorphic(Type) \
6148  void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
6149    Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
6150  }
6151  CheckPolymorphic(PointerTypeLoc)
6152  CheckPolymorphic(ReferenceTypeLoc)
6153  CheckPolymorphic(MemberPointerTypeLoc)
6154  CheckPolymorphic(BlockPointerTypeLoc)
6155  CheckPolymorphic(AtomicTypeLoc)
6156
6157  /// Handle all the types we haven't given a more specific
6158  /// implementation for above.
6159  void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
6160    // Every other kind of type that we haven't called out already
6161    // that has an inner type is either (1) sugar or (2) contains that
6162    // inner type in some way as a subobject.
6163    if (TypeLoc Next = TL.getNextTypeLoc())
6164      return Visit(Next, Sel);
6165
6166    // If there's no inner type and we're in a permissive context,
6167    // don't diagnose.
6168    if (Sel == Sema::AbstractNone) return;
6169
6170    // Check whether the type matches the abstract type.
6171    QualType T = TL.getType();
6172    if (T->isArrayType()) {
6173      Sel = Sema::AbstractArrayType;
6174      T = Info.S.Context.getBaseElementType(T);
6175    }
6176    CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
6177    if (CT != Info.AbstractType) return;
6178
6179    // It matched; do some magic.
6180    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.
6181    if (Sel == Sema::AbstractArrayType) {
6182      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
6183        << T << TL.getSourceRange();
6184    } else {
6185      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
6186        << Sel << T << TL.getSourceRange();
6187    }
6188    Info.DiagnoseAbstractType();
6189  }
6190};
6191
6192void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
6193                                  Sema::AbstractDiagSelID Sel) {
6194  CheckAbstractUsage(*this, D).Visit(TL, Sel);
6195}
6196
6197}
6198
6199/// Check for invalid uses of an abstract type in a function declaration.
6200static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
6201                                    FunctionDecl *FD) {
6202  // Only definitions are required to refer to complete and
6203  // non-abstract types.
6204  if (!FD->doesThisDeclarationHaveABody())
6205    return;
6206
6207  // For safety's sake, just ignore it if we don't have type source
6208  // information.  This should never happen for non-implicit methods,
6209  // but...
6210  if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
6211    Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractNone);
6212}
6213
6214/// Check for invalid uses of an abstract type in a variable0 declaration.
6215static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
6216                                    VarDecl *VD) {
6217  // No need to do the check on definitions, which require that
6218  // the type is complete.
6219  if (VD->isThisDeclarationADefinition())
6220    return;
6221
6222  Info.CheckType(VD, VD->getTypeSourceInfo()->getTypeLoc(),
6223                 Sema::AbstractVariableType);
6224}
6225
6226/// Check for invalid uses of an abstract type within a class definition.
6227static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
6228                                    CXXRecordDecl *RD) {
6229  for (auto *D : RD->decls()) {
6230    if (D->isImplicit()) continue;
6231
6232    // Step through friends to the befriended declaration.
6233    if (auto *FD = dyn_cast<FriendDecl>(D)) {
6234      D = FD->getFriendDecl();
6235      if (!D) continue;
6236    }
6237
6238    // Functions and function templates.
6239    if (auto *FD = dyn_cast<FunctionDecl>(D)) {
6240      CheckAbstractClassUsage(Info, FD);
6241    } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(D)) {
6242      CheckAbstractClassUsage(Info, FTD->getTemplatedDecl());
6243
6244    // Fields and static variables.
6245    } else if (auto *FD = dyn_cast<FieldDecl>(D)) {
6246      if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
6247        Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
6248    } else if (auto *VD = dyn_cast<VarDecl>(D)) {
6249      CheckAbstractClassUsage(Info, VD);
6250    } else if (auto *VTD = dyn_cast<VarTemplateDecl>(D)) {
6251      CheckAbstractClassUsage(Info, VTD->getTemplatedDecl());
6252
6253    // Nested classes and class templates.
6254    } else if (auto *RD = dyn_cast<CXXRecordDecl>(D)) {
6255      CheckAbstractClassUsage(Info, RD);
6256    } else if (auto *CTD = dyn_cast<ClassTemplateDecl>(D)) {
6257      CheckAbstractClassUsage(Info, CTD->getTemplatedDecl());
6258    }
6259  }
6260}
6261
6262static void ReferenceDllExportedMembers(Sema &S, CXXRecordDecl *Class) {
6263  Attr *ClassAttr = getDLLAttr(Class);
6264  if (!ClassAttr)
6265    return;
6266
6267  assert(ClassAttr->getKind() == attr::DLLExport);
6268
6269  TemplateSpecializationKind TSK = Class->getTemplateSpecializationKind();
6270
6271  if (TSK == TSK_ExplicitInstantiationDeclaration)
6272    // Don't go any further if this is just an explicit instantiation
6273    // declaration.
6274    return;
6275
6276  // Add a context note to explain how we got to any diagnostics produced below.
6277  struct MarkingClassDllexported {
6278    Sema &S;
6279    MarkingClassDllexported(Sema &S, CXXRecordDecl *Class,
6280                            SourceLocation AttrLoc)
6281        : S(S) {
6282      Sema::CodeSynthesisContext Ctx;
6283      Ctx.Kind = Sema::CodeSynthesisContext::MarkingClassDllexported;
6284      Ctx.PointOfInstantiation = AttrLoc;
6285      Ctx.Entity = Class;
6286      S.pushCodeSynthesisContext(Ctx);
6287    }
6288    ~MarkingClassDllexported() {
6289      S.popCodeSynthesisContext();
6290    }
6291  } MarkingDllexportedContext(S, Class, ClassAttr->getLocation());
6292
6293  if (S.Context.getTargetInfo().getTriple().isWindowsGNUEnvironment())
6294    S.MarkVTableUsed(Class->getLocation(), Class, true);
6295
6296  for (Decl *Member : Class->decls()) {
6297    // Skip members that were not marked exported.
6298    if (!Member->hasAttr<DLLExportAttr>())
6299      continue;
6300
6301    // Defined static variables that are members of an exported base
6302    // class must be marked export too.
6303    auto *VD = dyn_cast<VarDecl>(Member);
6304    if (VD && VD->getStorageClass() == SC_Static &&
6305        TSK == TSK_ImplicitInstantiation)
6306      S.MarkVariableReferenced(VD->getLocation(), VD);
6307
6308    auto *MD = dyn_cast<CXXMethodDecl>(Member);
6309    if (!MD)
6310      continue;
6311
6312    if (MD->isUserProvided()) {
6313      // Instantiate non-default class member functions ...
6314
6315      // .. except for certain kinds of template specializations.
6316      if (TSK == TSK_ImplicitInstantiation && !ClassAttr->isInherited())
6317        continue;
6318
6319      // If this is an MS ABI dllexport default constructor, instantiate any
6320      // default arguments.
6321      if (S.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
6322        auto *CD = dyn_cast<CXXConstructorDecl>(MD);
6323        if (CD && CD->isDefaultConstructor() && TSK == TSK_Undeclared) {
6324          S.InstantiateDefaultCtorDefaultArgs(CD);
6325        }
6326      }
6327
6328      S.MarkFunctionReferenced(Class->getLocation(), MD);
6329
6330      // The function will be passed to the consumer when its definition is
6331      // encountered.
6332    } else if (MD->isExplicitlyDefaulted()) {
6333      // Synthesize and instantiate explicitly defaulted methods.
6334      S.MarkFunctionReferenced(Class->getLocation(), MD);
6335
6336      if (TSK != TSK_ExplicitInstantiationDefinition) {
6337        // Except for explicit instantiation defs, we will not see the
6338        // definition again later, so pass it to the consumer now.
6339        S.Consumer.HandleTopLevelDecl(DeclGroupRef(MD));
6340      }
6341    } else if (!MD->isTrivial() ||
6342               MD->isCopyAssignmentOperator() ||
6343               MD->isMoveAssignmentOperator()) {
6344      // Synthesize and instantiate non-trivial implicit methods, and the copy
6345      // and move assignment operators. The latter are exported even if they
6346      // are trivial, because the address of an operator can be taken and
6347      // should compare equal across libraries.
6348      S.MarkFunctionReferenced(Class->getLocation(), MD);
6349
6350      // There is no later point when we will see the definition of this
6351      // function, so pass it to the consumer now.
6352      S.Consumer.HandleTopLevelDecl(DeclGroupRef(MD));
6353    }
6354  }
6355}
6356
6357static void checkForMultipleExportedDefaultConstructors(Sema &S,
6358                                                        CXXRecordDecl *Class) {
6359  // Only the MS ABI has default constructor closures, so we don't need to do
6360  // this semantic checking anywhere else.
6361  if (!S.Context.getTargetInfo().getCXXABI().isMicrosoft())
6362    return;
6363
6364  CXXConstructorDecl *LastExportedDefaultCtor = nullptr;
6365  for (Decl *Member : Class->decls()) {
6366    // Look for exported default constructors.
6367    auto *CD = dyn_cast<CXXConstructorDecl>(Member);
6368    if (!CD || !CD->isDefaultConstructor())
6369      continue;
6370    auto *Attr = CD->getAttr<DLLExportAttr>();
6371    if (!Attr)
6372      continue;
6373
6374    // If the class is non-dependent, mark the default arguments as ODR-used so
6375    // that we can properly codegen the constructor closure.
6376    if (!Class->isDependentContext()) {
6377      for (ParmVarDecl *PD : CD->parameters()) {
6378        (void)S.CheckCXXDefaultArgExpr(Attr->getLocation(), CD, PD);
6379        S.DiscardCleanupsInEvaluationContext();
6380      }
6381    }
6382
6383    if (LastExportedDefaultCtor) {
6384      S.Diag(LastExportedDefaultCtor->getLocation(),
6385             diag::err_attribute_dll_ambiguous_default_ctor)
6386          << Class;
6387      S.Diag(CD->getLocation(), diag::note_entity_declared_at)
6388          << CD->getDeclName();
6389      return;
6390    }
6391    LastExportedDefaultCtor = CD;
6392  }
6393}
6394
6395static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S,
6396                                                       CXXRecordDecl *Class) {
6397  bool ErrorReported = false;
6398  auto reportIllegalClassTemplate = [&ErrorReported](Sema &S,
6399                                                     ClassTemplateDecl *TD) {
6400    if (ErrorReported)
6401      return;
6402    S.Diag(TD->getLocation(),
6403           diag::err_cuda_device_builtin_surftex_cls_template)
6404        << /*surface*/ 0 << TD;
6405    ErrorReported = true;
6406  };
6407
6408  ClassTemplateDecl *TD = Class->getDescribedClassTemplate();
6409  if (!TD) {
6410    auto *SD = dyn_cast<ClassTemplateSpecializationDecl>(Class);
6411    if (!SD) {
6412      S.Diag(Class->getLocation(),
6413             diag::err_cuda_device_builtin_surftex_ref_decl)
6414          << /*surface*/ 0 << Class;
6415      S.Diag(Class->getLocation(),
6416             diag::note_cuda_device_builtin_surftex_should_be_template_class)
6417          << Class;
6418      return;
6419    }
6420    TD = SD->getSpecializedTemplate();
6421  }
6422
6423  TemplateParameterList *Params = TD->getTemplateParameters();
6424  unsigned N = Params->size();
6425
6426  if (N != 2) {
6427    reportIllegalClassTemplate(S, TD);
6428    S.Diag(TD->getLocation(),
6429           diag::note_cuda_device_builtin_surftex_cls_should_have_n_args)
6430        << TD << 2;
6431  }
6432  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6433    reportIllegalClassTemplate(S, TD);
6434    S.Diag(TD->getLocation(),
6435           diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg)
6436        << TD << /*1st*/ 0 << /*type*/ 0;
6437  }
6438  if (N > 1) {
6439    auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(1));
6440    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {
6441      reportIllegalClassTemplate(S, TD);
6442      S.Diag(TD->getLocation(),
6443             diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg)
6444          << TD << /*2nd*/ 1 << /*integer*/ 1;
6445    }
6446  }
6447}
6448
6449static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S,
6450                                                       CXXRecordDecl *Class) {
6451  bool ErrorReported = false;
6452  auto reportIllegalClassTemplate = [&ErrorReported](Sema &S,
6453                                                     ClassTemplateDecl *TD) {
6454    if (ErrorReported)
6455      return;
6456    S.Diag(TD->getLocation(),
6457           diag::err_cuda_device_builtin_surftex_cls_template)
6458        << /*texture*/ 1 << TD;
6459    ErrorReported = true;
6460  };
6461
6462  ClassTemplateDecl *TD = Class->getDescribedClassTemplate();
6463  if (!TD) {
6464    auto *SD = dyn_cast<ClassTemplateSpecializationDecl>(Class);
6465    if (!SD) {
6466      S.Diag(Class->getLocation(),
6467             diag::err_cuda_device_builtin_surftex_ref_decl)
6468          << /*texture*/ 1 << Class;
6469      S.Diag(Class->getLocation(),
6470             diag::note_cuda_device_builtin_surftex_should_be_template_class)
6471          << Class;
6472      return;
6473    }
6474    TD = SD->getSpecializedTemplate();
6475  }
6476
6477  TemplateParameterList *Params = TD->getTemplateParameters();
6478  unsigned N = Params->size();
6479
6480  if (N != 3) {
6481    reportIllegalClassTemplate(S, TD);
6482    S.Diag(TD->getLocation(),
6483           diag::note_cuda_device_builtin_surftex_cls_should_have_n_args)
6484        << TD << 3;
6485  }
6486  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6487    reportIllegalClassTemplate(S, TD);
6488    S.Diag(TD->getLocation(),
6489           diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg)
6490        << TD << /*1st*/ 0 << /*type*/ 0;
6491  }
6492  if (N > 1) {
6493    auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(1));
6494    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {
6495      reportIllegalClassTemplate(S, TD);
6496      S.Diag(TD->getLocation(),
6497             diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg)
6498          << TD << /*2nd*/ 1 << /*integer*/ 1;
6499    }
6500  }
6501  if (N > 2) {
6502    auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(2));
6503    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {
6504      reportIllegalClassTemplate(S, TD);
6505      S.Diag(TD->getLocation(),
6506             diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg)
6507          << TD << /*3rd*/ 2 << /*integer*/ 1;
6508    }
6509  }
6510}
6511
6512void Sema::checkClassLevelCodeSegAttribute(CXXRecordDecl *Class) {
6513  // Mark any compiler-generated routines with the implicit code_seg attribute.
6514  for (auto *Method : Class->methods()) {
6515    if (Method->isUserProvided())
6516      continue;
6517    if (Attr *A = getImplicitCodeSegOrSectionAttrForFunction(Method, /*IsDefinition=*/true))
6518      Method->addAttr(A);
6519  }
6520}
6521
6522/// Check class-level dllimport/dllexport attribute.
6523void Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {
6524  Attr *ClassAttr = getDLLAttr(Class);
6525
6526  // MSVC inherits DLL attributes to partial class template specializations.
6527  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr) {
6528    if (auto *Spec = dyn_cast<ClassTemplatePartialSpecializationDecl>(Class)) {
6529      if (Attr *TemplateAttr =
6530              getDLLAttr(Spec->getSpecializedTemplate()->getTemplatedDecl())) {
6531        auto *A = cast<InheritableAttr>(TemplateAttr->clone(getASTContext()));
6532        A->setInherited(true);
6533        ClassAttr = A;
6534      }
6535    }
6536  }
6537
6538  if (!ClassAttr)
6539    return;
6540
6541  // MSVC allows imported or exported template classes that have UniqueExternal
6542  // linkage. This occurs when the template class has been instantiated with
6543  // a template parameter which itself has internal linkage.
6544  // We drop the attribute to avoid exporting or importing any members.
6545  if ((Context.getTargetInfo().getCXXABI().isMicrosoft() ||
6546       Context.getTargetInfo().getTriple().isPS()) &&
6547      (!Class->isExternallyVisible() && Class->hasExternalFormalLinkage())) {
6548    Class->dropAttrs<DLLExportAttr, DLLImportAttr>();
6549    return;
6550  }
6551
6552  if (!Class->isExternallyVisible()) {
6553    Diag(Class->getLocation(), diag::err_attribute_dll_not_extern)
6554        << Class << ClassAttr;
6555    return;
6556  }
6557
6558  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() &&
6559      !ClassAttr->isInherited()) {
6560    // Diagnose dll attributes on members of class with dll attribute.
6561    for (Decl *Member : Class->decls()) {
6562      if (!isa<VarDecl>(Member) && !isa<CXXMethodDecl>(Member))
6563        continue;
6564      InheritableAttr *MemberAttr = getDLLAttr(Member);
6565      if (!MemberAttr || MemberAttr->isInherited() || Member->isInvalidDecl())
6566        continue;
6567
6568      Diag(MemberAttr->getLocation(),
6569             diag::err_attribute_dll_member_of_dll_class)
6570          << MemberAttr << ClassAttr;
6571      Diag(ClassAttr->getLocation(), diag::note_previous_attribute);
6572      Member->setInvalidDecl();
6573    }
6574  }
6575
6576  if (Class->getDescribedClassTemplate())
6577    // Don't inherit dll attribute until the template is instantiated.
6578    return;
6579
6580  // The class is either imported or exported.
6581  const bool ClassExported = ClassAttr->getKind() == attr::DLLExport;
6582
6583  // Check if this was a dllimport attribute propagated from a derived class to
6584  // a base class template specialization. We don't apply these attributes to
6585  // static data members.
6586  const bool PropagatedImport =
6587      !ClassExported &&
6588      cast<DLLImportAttr>(ClassAttr)->wasPropagatedToBaseTemplate();
6589
6590  TemplateSpecializationKind TSK = Class->getTemplateSpecializationKind();
6591
6592  // Ignore explicit dllexport on explicit class template instantiation
6593  // declarations, except in MinGW mode.
6594  if (ClassExported && !ClassAttr->isInherited() &&
6595      TSK == TSK_ExplicitInstantiationDeclaration &&
6596      !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {
6597    Class->dropAttr<DLLExportAttr>();
6598    return;
6599  }
6600
6601  // Force declaration of implicit members so they can inherit the attribute.
6602  ForceDeclarationOfImplicitMembers(Class);
6603
6604  // FIXME: MSVC's docs say all bases must be exportable, but this doesn't
6605  // seem to be true in practice?
6606
6607  for (Decl *Member : Class->decls()) {
6608    VarDecl *VD = dyn_cast<VarDecl>(Member);
6609    CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
6610
6611    // Only methods and static fields inherit the attributes.
6612    if (!VD && !MD)
6613      continue;
6614
6615    if (MD) {
6616      // Don't process deleted methods.
6617      if (MD->isDeleted())
6618        continue;
6619
6620      if (MD->isInlined()) {
6621        // MinGW does not import or export inline methods. But do it for
6622        // template instantiations.
6623        if (!Context.getTargetInfo().shouldDLLImportComdatSymbols() &&
6624            TSK != TSK_ExplicitInstantiationDeclaration &&
6625            TSK != TSK_ExplicitInstantiationDefinition)
6626          continue;
6627
6628        // MSVC versions before 2015 don't export the move assignment operators
6629        // and move constructor, so don't attempt to import/export them if
6630        // we have a definition.
6631        auto *Ctor = dyn_cast<CXXConstructorDecl>(MD);
6632        if ((MD->isMoveAssignmentOperator() ||
6633             (Ctor && Ctor->isMoveConstructor())) &&
6634            !getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015))
6635          continue;
6636
6637        // MSVC2015 doesn't export trivial defaulted x-tor but copy assign
6638        // operator is exported anyway.
6639        if (getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) &&
6640            (Ctor || isa<CXXDestructorDecl>(MD)) && MD->isTrivial())
6641          continue;
6642      }
6643    }
6644
6645    // Don't apply dllimport attributes to static data members of class template
6646    // instantiations when the attribute is propagated from a derived class.
6647    if (VD && PropagatedImport)
6648      continue;
6649
6650    if (!cast<NamedDecl>(Member)->isExternallyVisible())
6651      continue;
6652
6653    if (!getDLLAttr(Member)) {
6654      InheritableAttr *NewAttr = nullptr;
6655
6656      // Do not export/import inline function when -fno-dllexport-inlines is
6657      // passed. But add attribute for later local static var check.
6658      if (!getLangOpts().DllExportInlines && MD && MD->isInlined() &&
6659          TSK != TSK_ExplicitInstantiationDeclaration &&
6660          TSK != TSK_ExplicitInstantiationDefinition) {
6661        if (ClassExported) {
6662          NewAttr = ::new (getASTContext())
6663              DLLExportStaticLocalAttr(getASTContext(), *ClassAttr);
6664        } else {
6665          NewAttr = ::new (getASTContext())
6666              DLLImportStaticLocalAttr(getASTContext(), *ClassAttr);
6667        }
6668      } else {
6669        NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext()));
6670      }
6671
6672      NewAttr->setInherited(true);
6673      Member->addAttr(NewAttr);
6674
6675      if (MD) {
6676        // Propagate DLLAttr to friend re-declarations of MD that have already
6677        // been constructed.
6678        for (FunctionDecl *FD = MD->getMostRecentDecl(); FD;
6679             FD = FD->getPreviousDecl()) {
6680          if (FD->getFriendObjectKind() == Decl::FOK_None)
6681            continue;
6682          assert(!getDLLAttr(FD) &&
6683                 "friend re-decl should not already have a DLLAttr");
6684          NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext()));
6685          NewAttr->setInherited(true);
6686          FD->addAttr(NewAttr);
6687        }
6688      }
6689    }
6690  }
6691
6692  if (ClassExported)
6693    DelayedDllExportClasses.push_back(Class);
6694}
6695
6696/// Perform propagation of DLL attributes from a derived class to a
6697/// templated base class for MS compatibility.
6698void Sema::propagateDLLAttrToBaseClassTemplate(
6699    CXXRecordDecl *Class, Attr *ClassAttr,
6700    ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {
6701  if (getDLLAttr(
6702          BaseTemplateSpec->getSpecializedTemplate()->getTemplatedDecl())) {
6703    // If the base class template has a DLL attribute, don't try to change it.
6704    return;
6705  }
6706
6707  auto TSK = BaseTemplateSpec->getSpecializationKind();
6708  if (!getDLLAttr(BaseTemplateSpec) &&
6709      (TSK == TSK_Undeclared || TSK == TSK_ExplicitInstantiationDeclaration ||
6710       TSK == TSK_ImplicitInstantiation)) {
6711    // The template hasn't been instantiated yet (or it has, but only as an
6712    // explicit instantiation declaration or implicit instantiation, which means
6713    // we haven't codegenned any members yet), so propagate the attribute.
6714    auto *NewAttr = cast<InheritableAttr>(ClassAttr->clone(getASTContext()));
6715    NewAttr->setInherited(true);
6716    BaseTemplateSpec->addAttr(NewAttr);
6717
6718    // If this was an import, mark that we propagated it from a derived class to
6719    // a base class template specialization.
6720    if (auto *ImportAttr = dyn_cast<DLLImportAttr>(NewAttr))
6721      ImportAttr->setPropagatedToBaseTemplate();
6722
6723    // If the template is already instantiated, checkDLLAttributeRedeclaration()
6724    // needs to be run again to work see the new attribute. Otherwise this will
6725    // get run whenever the template is instantiated.
6726    if (TSK != TSK_Undeclared)
6727      checkClassLevelDLLAttribute(BaseTemplateSpec);
6728
6729    return;
6730  }
6731
6732  if (getDLLAttr(BaseTemplateSpec)) {
6733    // The template has already been specialized or instantiated with an
6734    // attribute, explicitly or through propagation. We should not try to change
6735    // it.
6736    return;
6737  }
6738
6739  // The template was previously instantiated or explicitly specialized without
6740  // a dll attribute, It's too late for us to add an attribute, so warn that
6741  // this is unsupported.
6742  Diag(BaseLoc, diag::warn_attribute_dll_instantiated_base_class)
6743      << BaseTemplateSpec->isExplicitSpecialization();
6744  Diag(ClassAttr->getLocation(), diag::note_attribute);
6745  if (BaseTemplateSpec->isExplicitSpecialization()) {
6746    Diag(BaseTemplateSpec->getLocation(),
6747           diag::note_template_class_explicit_specialization_was_here)
6748        << BaseTemplateSpec;
6749  } else {
6750    Diag(BaseTemplateSpec->getPointOfInstantiation(),
6751           diag::note_template_class_instantiation_was_here)
6752        << BaseTemplateSpec;
6753  }
6754}
6755
6756/// Determine the kind of defaulting that would be done for a given function.
6757///
6758/// If the function is both a default constructor and a copy / move constructor
6759/// (due to having a default argument for the first parameter), this picks
6760/// CXXDefaultConstructor.
6761///
6762/// FIXME: Check that case is properly handled by all callers.
6763Sema::DefaultedFunctionKind
6764Sema::getDefaultedFunctionKind(const FunctionDecl *FD) {
6765  if (auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
6766    if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(FD)) {
6767      if (Ctor->isDefaultConstructor())
6768        return Sema::CXXDefaultConstructor;
6769
6770      if (Ctor->isCopyConstructor())
6771        return Sema::CXXCopyConstructor;
6772
6773      if (Ctor->isMoveConstructor())
6774        return Sema::CXXMoveConstructor;
6775    }
6776
6777    if (MD->isCopyAssignmentOperator())
6778      return Sema::CXXCopyAssignment;
6779
6780    if (MD->isMoveAssignmentOperator())
6781      return Sema::CXXMoveAssignment;
6782
6783    if (isa<CXXDestructorDecl>(FD))
6784      return Sema::CXXDestructor;
6785  }
6786
6787  switch (FD->getDeclName().getCXXOverloadedOperator()) {
6788  case OO_EqualEqual:
6789    return DefaultedComparisonKind::Equal;
6790
6791  case OO_ExclaimEqual:
6792    return DefaultedComparisonKind::NotEqual;
6793
6794  case OO_Spaceship:
6795    // No point allowing this if <=> doesn't exist in the current language mode.
6796    if (!getLangOpts().CPlusPlus20)
6797      break;
6798    return DefaultedComparisonKind::ThreeWay;
6799
6800  case OO_Less:
6801  case OO_LessEqual:
6802  case OO_Greater:
6803  case OO_GreaterEqual:
6804    // No point allowing this if <=> doesn't exist in the current language mode.
6805    if (!getLangOpts().CPlusPlus20)
6806      break;
6807    return DefaultedComparisonKind::Relational;
6808
6809  default:
6810    break;
6811  }
6812
6813  // Not defaultable.
6814  return DefaultedFunctionKind();
6815}
6816
6817static void DefineDefaultedFunction(Sema &S, FunctionDecl *FD,
6818                                    SourceLocation DefaultLoc) {
6819  Sema::DefaultedFunctionKind DFK = S.getDefaultedFunctionKind(FD);
6820  if (DFK.isComparison())
6821    return S.DefineDefaultedComparison(DefaultLoc, FD, DFK.asComparison());
6822
6823  switch (DFK.asSpecialMember()) {
6824  case Sema::CXXDefaultConstructor:
6825    S.DefineImplicitDefaultConstructor(DefaultLoc,
6826                                       cast<CXXConstructorDecl>(FD));
6827    break;
6828  case Sema::CXXCopyConstructor:
6829    S.DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(FD));
6830    break;
6831  case Sema::CXXCopyAssignment:
6832    S.DefineImplicitCopyAssignment(DefaultLoc, cast<CXXMethodDecl>(FD));
6833    break;
6834  case Sema::CXXDestructor:
6835    S.DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(FD));
6836    break;
6837  case Sema::CXXMoveConstructor:
6838    S.DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(FD));
6839    break;
6840  case Sema::CXXMoveAssignment:
6841    S.DefineImplicitMoveAssignment(DefaultLoc, cast<CXXMethodDecl>(FD));
6842    break;
6843  case Sema::CXXInvalid:
6844    llvm_unreachable("Invalid special member.");
6845  }
6846}
6847
6848/// Determine whether a type is permitted to be passed or returned in
6849/// registers, per C++ [class.temporary]p3.
6850static bool canPassInRegisters(Sema &S, CXXRecordDecl *D,
6851                               TargetInfo::CallingConvKind CCK) {
6852  if (D->isDependentType() || D->isInvalidDecl())
6853    return false;
6854
6855  // Clang <= 4 used the pre-C++11 rule, which ignores move operations.
6856  // The PS4 platform ABI follows the behavior of Clang 3.2.
6857  if (CCK == TargetInfo::CCK_ClangABI4OrPS4)
6858    return !D->hasNonTrivialDestructorForCall() &&
6859           !D->hasNonTrivialCopyConstructorForCall();
6860
6861  if (CCK == TargetInfo::CCK_MicrosoftWin64) {
6862    bool CopyCtorIsTrivial = false, CopyCtorIsTrivialForCall = false;
6863    bool DtorIsTrivialForCall = false;
6864
6865    // If a class has at least one eligible, trivial copy constructor, it
6866    // is passed according to the C ABI. Otherwise, it is passed indirectly.
6867    //
6868    // Note: This permits classes with non-trivial copy or move ctors to be
6869    // passed in registers, so long as they *also* have a trivial copy ctor,
6870    // which is non-conforming.
6871    if (D->needsImplicitCopyConstructor()) {
6872      if (!D->defaultedCopyConstructorIsDeleted()) {
6873        if (D->hasTrivialCopyConstructor())
6874          CopyCtorIsTrivial = true;
6875        if (D->hasTrivialCopyConstructorForCall())
6876          CopyCtorIsTrivialForCall = true;
6877      }
6878    } else {
6879      for (const CXXConstructorDecl *CD : D->ctors()) {
6880        if (CD->isCopyConstructor() && !CD->isDeleted() &&
6881            !CD->isIneligibleOrNotSelected()) {
6882          if (CD->isTrivial())
6883            CopyCtorIsTrivial = true;
6884          if (CD->isTrivialForCall())
6885            CopyCtorIsTrivialForCall = true;
6886        }
6887      }
6888    }
6889
6890    if (D->needsImplicitDestructor()) {
6891      if (!D->defaultedDestructorIsDeleted() &&
6892          D->hasTrivialDestructorForCall())
6893        DtorIsTrivialForCall = true;
6894    } else if (const auto *DD = D->getDestructor()) {
6895      if (!DD->isDeleted() && DD->isTrivialForCall())
6896        DtorIsTrivialForCall = true;
6897    }
6898
6899    // If the copy ctor and dtor are both trivial-for-calls, pass direct.
6900    if (CopyCtorIsTrivialForCall && DtorIsTrivialForCall)
6901      return true;
6902
6903    // If a class has a destructor, we'd really like to pass it indirectly
6904    // because it allows us to elide copies.  Unfortunately, MSVC makes that
6905    // impossible for small types, which it will pass in a single register or
6906    // stack slot. Most objects with dtors are large-ish, so handle that early.
6907    // We can't call out all large objects as being indirect because there are
6908    // multiple x64 calling conventions and the C++ ABI code shouldn't dictate
6909    // how we pass large POD types.
6910
6911    // Note: This permits small classes with nontrivial destructors to be
6912    // passed in registers, which is non-conforming.
6913    bool isAArch64 = S.Context.getTargetInfo().getTriple().isAArch64();
6914    uint64_t TypeSize = isAArch64 ? 128 : 64;
6915
6916    if (CopyCtorIsTrivial &&
6917        S.getASTContext().getTypeSize(D->getTypeForDecl()) <= TypeSize)
6918      return true;
6919    return false;
6920  }
6921
6922  // Per C++ [class.temporary]p3, the relevant condition is:
6923  //   each copy constructor, move constructor, and destructor of X is
6924  //   either trivial or deleted, and X has at least one non-deleted copy
6925  //   or move constructor
6926  bool HasNonDeletedCopyOrMove = false;
6927
6928  if (D->needsImplicitCopyConstructor() &&
6929      !D->defaultedCopyConstructorIsDeleted()) {
6930    if (!D->hasTrivialCopyConstructorForCall())
6931      return false;
6932    HasNonDeletedCopyOrMove = true;
6933  }
6934
6935  if (S.getLangOpts().CPlusPlus11 && D->needsImplicitMoveConstructor() &&
6936      !D->defaultedMoveConstructorIsDeleted()) {
6937    if (!D->hasTrivialMoveConstructorForCall())
6938      return false;
6939    HasNonDeletedCopyOrMove = true;
6940  }
6941
6942  if (D->needsImplicitDestructor() && !D->defaultedDestructorIsDeleted() &&
6943      !D->hasTrivialDestructorForCall())
6944    return false;
6945
6946  for (const CXXMethodDecl *MD : D->methods()) {
6947    if (MD->isDeleted() || MD->isIneligibleOrNotSelected())
6948      continue;
6949
6950    auto *CD = dyn_cast<CXXConstructorDecl>(MD);
6951    if (CD && CD->isCopyOrMoveConstructor())
6952      HasNonDeletedCopyOrMove = true;
6953    else if (!isa<CXXDestructorDecl>(MD))
6954      continue;
6955
6956    if (!MD->isTrivialForCall())
6957      return false;
6958  }
6959
6960  return HasNonDeletedCopyOrMove;
6961}
6962
6963/// Report an error regarding overriding, along with any relevant
6964/// overridden methods.
6965///
6966/// \param DiagID the primary error to report.
6967/// \param MD the overriding method.
6968static bool
6969ReportOverrides(Sema &S, unsigned DiagID, const CXXMethodDecl *MD,
6970                llvm::function_ref<bool(const CXXMethodDecl *)> Report) {
6971  bool IssuedDiagnostic = false;
6972  for (const CXXMethodDecl *O : MD->overridden_methods()) {
6973    if (Report(O)) {
6974      if (!IssuedDiagnostic) {
6975        S.Diag(MD->getLocation(), DiagID) << MD->getDeclName();
6976        IssuedDiagnostic = true;
6977      }
6978      S.Diag(O->getLocation(), diag::note_overridden_virtual_function);
6979    }
6980  }
6981  return IssuedDiagnostic;
6982}
6983
6984/// Perform semantic checks on a class definition that has been
6985/// completing, introducing implicitly-declared members, checking for
6986/// abstract types, etc.
6987///
6988/// \param S The scope in which the class was parsed. Null if we didn't just
6989///        parse a class definition.
6990/// \param Record The completed class.
6991void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {
6992  if (!Record)
6993    return;
6994
6995  if (Record->isAbstract() && !Record->isInvalidDecl()) {
6996    AbstractUsageInfo Info(*this, Record);
6997    CheckAbstractClassUsage(Info, Record);
6998  }
6999
7000  // If this is not an aggregate type and has no user-declared constructor,
7001  // complain about any non-static data members of reference or const scalar
7002  // type, since they will never get initializers.
7003  if (!Record->isInvalidDecl() && !Record->isDependentType() &&
7004      !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
7005      !Record->isLambda()) {
7006    bool Complained = false;
7007    for (const auto *F : Record->fields()) {
7008      if (F->hasInClassInitializer() || F->isUnnamedBitfield())
7009        continue;
7010
7011      if (F->getType()->isReferenceType() ||
7012          (F->getType().isConstQualified() && F->getType()->isScalarType())) {
7013        if (!Complained) {
7014          Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
7015              << llvm::to_underlying(Record->getTagKind()) << Record;
7016          Complained = true;
7017        }
7018
7019        Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
7020          << F->getType()->isReferenceType()
7021          << F->getDeclName();
7022      }
7023    }
7024  }
7025
7026  if (Record->getIdentifier()) {
7027    // C++ [class.mem]p13:
7028    //   If T is the name of a class, then each of the following shall have a
7029    //   name different from T:
7030    //     - every member of every anonymous union that is a member of class T.
7031    //
7032    // C++ [class.mem]p14:
7033    //   In addition, if class T has a user-declared constructor (12.1), every
7034    //   non-static data member of class T shall have a name different from T.
7035    DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
7036    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
7037         ++I) {
7038      NamedDecl *D = (*I)->getUnderlyingDecl();
7039      if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) &&
7040           Record->hasUserDeclaredConstructor()) ||
7041          isa<IndirectFieldDecl>(D)) {
7042        Diag((*I)->getLocation(), diag::err_member_name_of_class)
7043          << D->getDeclName();
7044        break;
7045      }
7046    }
7047  }
7048
7049  // Warn if the class has virtual methods but non-virtual public destructor.
7050  if (Record->isPolymorphic() && !Record->isDependentType()) {
7051    CXXDestructorDecl *dtor = Record->getDestructor();
7052    if ((!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public)) &&
7053        !Record->hasAttr<FinalAttr>())
7054      Diag(dtor ? dtor->getLocation() : Record->getLocation(),
7055           diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
7056  }
7057
7058  if (Record->isAbstract()) {
7059    if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {
7060      Diag(Record->getLocation(), diag::warn_abstract_final_class)
7061        << FA->isSpelledAsSealed();
7062      DiagnoseAbstractType(Record);
7063    }
7064  }
7065
7066  // Warn if the class has a final destructor but is not itself marked final.
7067  if (!Record->hasAttr<FinalAttr>()) {
7068    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {
7069      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {
7070        Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class)
7071            << FA->isSpelledAsSealed()
7072            << FixItHint::CreateInsertion(
7073                   getLocForEndOfToken(Record->getLocation()),
7074                   (FA->isSpelledAsSealed() ? " sealed" : " final"));
7075        Diag(Record->getLocation(),
7076             diag::note_final_dtor_non_final_class_silence)
7077            << Context.getRecordType(Record) << FA->isSpelledAsSealed();
7078      }
7079    }
7080  }
7081
7082  // See if trivial_abi has to be dropped.
7083  if (Record->hasAttr<TrivialABIAttr>())
7084    checkIllFormedTrivialABIStruct(*Record);
7085
7086  // Set HasTrivialSpecialMemberForCall if the record has attribute
7087  // "trivial_abi".
7088  bool HasTrivialABI = Record->hasAttr<TrivialABIAttr>();
7089
7090  if (HasTrivialABI)
7091    Record->setHasTrivialSpecialMemberForCall();
7092
7093  // Explicitly-defaulted secondary comparison functions (!=, <, <=, >, >=).
7094  // We check these last because they can depend on the properties of the
7095  // primary comparison functions (==, <=>).
7096  llvm::SmallVector<FunctionDecl*, 5> DefaultedSecondaryComparisons;
7097
7098  // Perform checks that can't be done until we know all the properties of a
7099  // member function (whether it's defaulted, deleted, virtual, overriding,
7100  // ...).
7101  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {
7102    // A static function cannot override anything.
7103    if (MD->getStorageClass() == SC_Static) {
7104      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD,
7105                          [](const CXXMethodDecl *) { return true; }))
7106        return;
7107    }
7108
7109    // A deleted function cannot override a non-deleted function and vice
7110    // versa.
7111    if (ReportOverrides(*this,
7112                        MD->isDeleted() ? diag::err_deleted_override
7113                                        : diag::err_non_deleted_override,
7114                        MD, [&](const CXXMethodDecl *V) {
7115                          return MD->isDeleted() != V->isDeleted();
7116                        })) {
7117      if (MD->isDefaulted() && MD->isDeleted())
7118        // Explain why this defaulted function was deleted.
7119        DiagnoseDeletedDefaultedFunction(MD);
7120      return;
7121    }
7122
7123    // A consteval function cannot override a non-consteval function and vice
7124    // versa.
7125    if (ReportOverrides(*this,
7126                        MD->isConsteval() ? diag::err_consteval_override
7127                                          : diag::err_non_consteval_override,
7128                        MD, [&](const CXXMethodDecl *V) {
7129                          return MD->isConsteval() != V->isConsteval();
7130                        })) {
7131      if (MD->isDefaulted() && MD->isDeleted())
7132        // Explain why this defaulted function was deleted.
7133        DiagnoseDeletedDefaultedFunction(MD);
7134      return;
7135    }
7136  };
7137
7138  auto CheckForDefaultedFunction = [&](FunctionDecl *FD) -> bool {
7139    if (!FD || FD->isInvalidDecl() || !FD->isExplicitlyDefaulted())
7140      return false;
7141
7142    DefaultedFunctionKind DFK = getDefaultedFunctionKind(FD);
7143    if (DFK.asComparison() == DefaultedComparisonKind::NotEqual ||
7144        DFK.asComparison() == DefaultedComparisonKind::Relational) {
7145      DefaultedSecondaryComparisons.push_back(FD);
7146      return true;
7147    }
7148
7149    CheckExplicitlyDefaultedFunction(S, FD);
7150    return false;
7151  };
7152
7153  auto CompleteMemberFunction = [&](CXXMethodDecl *M) {
7154    // Check whether the explicitly-defaulted members are valid.
7155    bool Incomplete = CheckForDefaultedFunction(M);
7156
7157    // Skip the rest of the checks for a member of a dependent class.
7158    if (Record->isDependentType())
7159      return;
7160
7161    // For an explicitly defaulted or deleted special member, we defer
7162    // determining triviality until the class is complete. That time is now!
7163    CXXSpecialMember CSM = getSpecialMember(M);
7164    if (!M->isImplicit() && !M->isUserProvided()) {
7165      if (CSM != CXXInvalid) {
7166        M->setTrivial(SpecialMemberIsTrivial(M, CSM));
7167        // Inform the class that we've finished declaring this member.
7168        Record->finishedDefaultedOrDeletedMember(M);
7169        M->setTrivialForCall(
7170            HasTrivialABI ||
7171            SpecialMemberIsTrivial(M, CSM, TAH_ConsiderTrivialABI));
7172        Record->setTrivialForCallFlags(M);
7173      }
7174    }
7175
7176    // Set triviality for the purpose of calls if this is a user-provided
7177    // copy/move constructor or destructor.
7178    if ((CSM == CXXCopyConstructor || CSM == CXXMoveConstructor ||
7179         CSM == CXXDestructor) && M->isUserProvided()) {
7180      M->setTrivialForCall(HasTrivialABI);
7181      Record->setTrivialForCallFlags(M);
7182    }
7183
7184    if (!M->isInvalidDecl() && M->isExplicitlyDefaulted() &&
7185        M->hasAttr<DLLExportAttr>()) {
7186      if (getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) &&
7187          M->isTrivial() &&
7188          (CSM == CXXDefaultConstructor || CSM == CXXCopyConstructor ||
7189           CSM == CXXDestructor))
7190        M->dropAttr<DLLExportAttr>();
7191
7192      if (M->hasAttr<DLLExportAttr>()) {
7193        // Define after any fields with in-class initializers have been parsed.
7194        DelayedDllExportMemberFunctions.push_back(M);
7195      }
7196    }
7197
7198    // Define defaulted constexpr virtual functions that override a base class
7199    // function right away.
7200    // FIXME: We can defer doing this until the vtable is marked as used.
7201    if (CSM != CXXInvalid && !M->isDeleted() && M->isDefaulted() &&
7202        M->isConstexpr() && M->size_overridden_methods())
7203      DefineDefaultedFunction(*this, M, M->getLocation());
7204
7205    if (!Incomplete)
7206      CheckCompletedMemberFunction(M);
7207  };
7208
7209  // Check the destructor before any other member function. We need to
7210  // determine whether it's trivial in order to determine whether the claas
7211  // type is a literal type, which is a prerequisite for determining whether
7212  // other special member functions are valid and whether they're implicitly
7213  // 'constexpr'.
7214  if (CXXDestructorDecl *Dtor = Record->getDestructor())
7215    CompleteMemberFunction(Dtor);
7216
7217  bool HasMethodWithOverrideControl = false,
7218       HasOverridingMethodWithoutOverrideControl = false;
7219  for (auto *D : Record->decls()) {
7220    if (auto *M = dyn_cast<CXXMethodDecl>(D)) {
7221      // FIXME: We could do this check for dependent types with non-dependent
7222      // bases.
7223      if (!Record->isDependentType()) {
7224        // See if a method overloads virtual methods in a base
7225        // class without overriding any.
7226        if (!M->isStatic())
7227          DiagnoseHiddenVirtualMethods(M);
7228        if (M->hasAttr<OverrideAttr>())
7229          HasMethodWithOverrideControl = true;
7230        else if (M->size_overridden_methods() > 0)
7231          HasOverridingMethodWithoutOverrideControl = true;
7232      }
7233
7234      if (!isa<CXXDestructorDecl>(M))
7235        CompleteMemberFunction(M);
7236    } else if (auto *F = dyn_cast<FriendDecl>(D)) {
7237      CheckForDefaultedFunction(
7238          dyn_cast_or_null<FunctionDecl>(F->getFriendDecl()));
7239    }
7240  }
7241
7242  if (HasOverridingMethodWithoutOverrideControl) {
7243    bool HasInconsistentOverrideControl = HasMethodWithOverrideControl;
7244    for (auto *M : Record->methods())
7245      DiagnoseAbsenceOfOverrideControl(M, HasInconsistentOverrideControl);
7246  }
7247
7248  // Check the defaulted secondary comparisons after any other member functions.
7249  for (FunctionDecl *FD : DefaultedSecondaryComparisons) {
7250    CheckExplicitlyDefaultedFunction(S, FD);
7251
7252    // If this is a member function, we deferred checking it until now.
7253    if (auto *MD = dyn_cast<CXXMethodDecl>(FD))
7254      CheckCompletedMemberFunction(MD);
7255  }
7256
7257  // ms_struct is a request to use the same ABI rules as MSVC.  Check
7258  // whether this class uses any C++ features that are implemented
7259  // completely differently in MSVC, and if so, emit a diagnostic.
7260  // That diagnostic defaults to an error, but we allow projects to
7261  // map it down to a warning (or ignore it).  It's a fairly common
7262  // practice among users of the ms_struct pragma to mass-annotate
7263  // headers, sweeping up a bunch of types that the project doesn't
7264  // really rely on MSVC-compatible layout for.  We must therefore
7265  // support "ms_struct except for C++ stuff" as a secondary ABI.
7266  // Don't emit this diagnostic if the feature was enabled as a
7267  // language option (as opposed to via a pragma or attribute), as
7268  // the option -mms-bitfields otherwise essentially makes it impossible
7269  // to build C++ code, unless this diagnostic is turned off.
7270  if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields &&
7271      (Record->isPolymorphic() || Record->getNumBases())) {
7272    Diag(Record->getLocation(), diag::warn_cxx_ms_struct);
7273  }
7274
7275  checkClassLevelDLLAttribute(Record);
7276  checkClassLevelCodeSegAttribute(Record);
7277
7278  bool ClangABICompat4 =
7279      Context.getLangOpts().getClangABICompat() <= LangOptions::ClangABI::Ver4;
7280  TargetInfo::CallingConvKind CCK =
7281      Context.getTargetInfo().getCallingConvKind(ClangABICompat4);
7282  bool CanPass = canPassInRegisters(*this, Record, CCK);
7283
7284  // Do not change ArgPassingRestrictions if it has already been set to
7285  // ArgPassingKind::CanNeverPassInRegs.
7286  if (Record->getArgPassingRestrictions() !=
7287      RecordArgPassingKind::CanNeverPassInRegs)
7288    Record->setArgPassingRestrictions(
7289        CanPass ? RecordArgPassingKind::CanPassInRegs
7290                : RecordArgPassingKind::CannotPassInRegs);
7291
7292  // If canPassInRegisters returns true despite the record having a non-trivial
7293  // destructor, the record is destructed in the callee. This happens only when
7294  // the record or one of its subobjects has a field annotated with trivial_abi
7295  // or a field qualified with ObjC __strong/__weak.
7296  if (Context.getTargetInfo().getCXXABI().areArgsDestroyedLeftToRightInCallee())
7297    Record->setParamDestroyedInCallee(true);
7298  else if (Record->hasNonTrivialDestructor())
7299    Record->setParamDestroyedInCallee(CanPass);
7300
7301  if (getLangOpts().ForceEmitVTables) {
7302    // If we want to emit all the vtables, we need to mark it as used.  This
7303    // is especially required for cases like vtable assumption loads.
7304    MarkVTableUsed(Record->getInnerLocStart(), Record);
7305  }
7306
7307  if (getLangOpts().CUDA) {
7308    if (Record->hasAttr<CUDADeviceBuiltinSurfaceTypeAttr>())
7309      checkCUDADeviceBuiltinSurfaceClassTemplate(*this, Record);
7310    else if (Record->hasAttr<CUDADeviceBuiltinTextureTypeAttr>())
7311      checkCUDADeviceBuiltinTextureClassTemplate(*this, Record);
7312  }
7313}
7314
7315/// Look up the special member function that would be called by a special
7316/// member function for a subobject of class type.
7317///
7318/// \param Class The class type of the subobject.
7319/// \param CSM The kind of special member function.
7320/// \param FieldQuals If the subobject is a field, its cv-qualifiers.
7321/// \param ConstRHS True if this is a copy operation with a const object
7322///        on its RHS, that is, if the argument to the outer special member
7323///        function is 'const' and this is not a field marked 'mutable'.
7324static Sema::SpecialMemberOverloadResult lookupCallFromSpecialMember(
7325    Sema &S, CXXRecordDecl *Class, Sema::CXXSpecialMember CSM,
7326    unsigned FieldQuals, bool ConstRHS) {
7327  unsigned LHSQuals = 0;
7328  if (CSM == Sema::CXXCopyAssignment || CSM == Sema::CXXMoveAssignment)
7329    LHSQuals = FieldQuals;
7330
7331  unsigned RHSQuals = FieldQuals;
7332  if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
7333    RHSQuals = 0;
7334  else if (ConstRHS)
7335    RHSQuals |= Qualifiers::Const;
7336
7337  return S.LookupSpecialMember(Class, CSM,
7338                               RHSQuals & Qualifiers::Const,
7339                               RHSQuals & Qualifiers::Volatile,
7340                               false,
7341                               LHSQuals & Qualifiers::Const,
7342                               LHSQuals & Qualifiers::Volatile);
7343}
7344
7345class Sema::InheritedConstructorInfo {
7346  Sema &S;
7347  SourceLocation UseLoc;
7348
7349  /// A mapping from the base classes through which the constructor was
7350  /// inherited to the using shadow declaration in that base class (or a null
7351  /// pointer if the constructor was declared in that base class).
7352  llvm::DenseMap<CXXRecordDecl *, ConstructorUsingShadowDecl *>
7353      InheritedFromBases;
7354
7355public:
7356  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc,
7357                           ConstructorUsingShadowDecl *Shadow)
7358      : S(S), UseLoc(UseLoc) {
7359    bool DiagnosedMultipleConstructedBases = false;
7360    CXXRecordDecl *ConstructedBase = nullptr;
7361    BaseUsingDecl *ConstructedBaseIntroducer = nullptr;
7362
7363    // Find the set of such base class subobjects and check that there's a
7364    // unique constructed subobject.
7365    for (auto *D : Shadow->redecls()) {
7366      auto *DShadow = cast<ConstructorUsingShadowDecl>(D);
7367      auto *DNominatedBase = DShadow->getNominatedBaseClass();
7368      auto *DConstructedBase = DShadow->getConstructedBaseClass();
7369
7370      InheritedFromBases.insert(
7371          std::make_pair(DNominatedBase->getCanonicalDecl(),
7372                         DShadow->getNominatedBaseClassShadowDecl()));
7373      if (DShadow->constructsVirtualBase())
7374        InheritedFromBases.insert(
7375            std::make_pair(DConstructedBase->getCanonicalDecl(),
7376                           DShadow->getConstructedBaseClassShadowDecl()));
7377      else
7378        assert(DNominatedBase == DConstructedBase);
7379
7380      // [class.inhctor.init]p2:
7381      //   If the constructor was inherited from multiple base class subobjects
7382      //   of type B, the program is ill-formed.
7383      if (!ConstructedBase) {
7384        ConstructedBase = DConstructedBase;
7385        ConstructedBaseIntroducer = D->getIntroducer();
7386      } else if (ConstructedBase != DConstructedBase &&
7387                 !Shadow->isInvalidDecl()) {
7388        if (!DiagnosedMultipleConstructedBases) {
7389          S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor)
7390              << Shadow->getTargetDecl();
7391          S.Diag(ConstructedBaseIntroducer->getLocation(),
7392                 diag::note_ambiguous_inherited_constructor_using)
7393              << ConstructedBase;
7394          DiagnosedMultipleConstructedBases = true;
7395        }
7396        S.Diag(D->getIntroducer()->getLocation(),
7397               diag::note_ambiguous_inherited_constructor_using)
7398            << DConstructedBase;
7399      }
7400    }
7401
7402    if (DiagnosedMultipleConstructedBases)
7403      Shadow->setInvalidDecl();
7404  }
7405
7406  /// Find the constructor to use for inherited construction of a base class,
7407  /// and whether that base class constructor inherits the constructor from a
7408  /// virtual base class (in which case it won't actually invoke it).
7409  std::pair<CXXConstructorDecl *, bool>
7410  findConstructorForBase(CXXRecordDecl *Base, CXXConstructorDecl *Ctor) const {
7411    auto It = InheritedFromBases.find(Base->getCanonicalDecl());
7412    if (It == InheritedFromBases.end())
7413      return std::make_pair(nullptr, false);
7414
7415    // This is an intermediary class.
7416    if (It->second)
7417      return std::make_pair(
7418          S.findInheritingConstructor(UseLoc, Ctor, It->second),
7419          It->second->constructsVirtualBase());
7420
7421    // This is the base class from which the constructor was inherited.
7422    return std::make_pair(Ctor, false);
7423  }
7424};
7425
7426/// Is the special member function which would be selected to perform the
7427/// specified operation on the specified class type a constexpr constructor?
7428static bool
7429specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
7430                         Sema::CXXSpecialMember CSM, unsigned Quals,
7431                         bool ConstRHS,
7432                         CXXConstructorDecl *InheritedCtor = nullptr,
7433                         Sema::InheritedConstructorInfo *Inherited = nullptr) {
7434  // Suppress duplicate constraint checking here, in case a constraint check
7435  // caused us to decide to do this.  Any truely recursive checks will get
7436  // caught during these checks anyway.
7437  Sema::SatisfactionStackResetRAII SSRAII{S};
7438
7439  // If we're inheriting a constructor, see if we need to call it for this base
7440  // class.
7441  if (InheritedCtor) {
7442    assert(CSM == Sema::CXXDefaultConstructor);
7443    auto BaseCtor =
7444        Inherited->findConstructorForBase(ClassDecl, InheritedCtor).first;
7445    if (BaseCtor)
7446      return BaseCtor->isConstexpr();
7447  }
7448
7449  if (CSM == Sema::CXXDefaultConstructor)
7450    return ClassDecl->hasConstexprDefaultConstructor();
7451  if (CSM == Sema::CXXDestructor)
7452    return ClassDecl->hasConstexprDestructor();
7453
7454  Sema::SpecialMemberOverloadResult SMOR =
7455      lookupCallFromSpecialMember(S, ClassDecl, CSM, Quals, ConstRHS);
7456  if (!SMOR.getMethod())
7457    // A constructor we wouldn't select can't be "involved in initializing"
7458    // anything.
7459    return true;
7460  return SMOR.getMethod()->isConstexpr();
7461}
7462
7463/// Determine whether the specified special member function would be constexpr
7464/// if it were implicitly defined.
7465static bool defaultedSpecialMemberIsConstexpr(
7466    Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM,
7467    bool ConstArg, CXXConstructorDecl *InheritedCtor = nullptr,
7468    Sema::InheritedConstructorInfo *Inherited = nullptr) {
7469  if (!S.getLangOpts().CPlusPlus11)
7470    return false;
7471
7472  // C++11 [dcl.constexpr]p4:
7473  // In the definition of a constexpr constructor [...]
7474  bool Ctor = true;
7475  switch (CSM) {
7476  case Sema::CXXDefaultConstructor:
7477    if (Inherited)
7478      break;
7479    // Since default constructor lookup is essentially trivial (and cannot
7480    // involve, for instance, template instantiation), we compute whether a
7481    // defaulted default constructor is constexpr directly within CXXRecordDecl.
7482    //
7483    // This is important for performance; we need to know whether the default
7484    // constructor is constexpr to determine whether the type is a literal type.
7485    return ClassDecl->defaultedDefaultConstructorIsConstexpr();
7486
7487  case Sema::CXXCopyConstructor:
7488  case Sema::CXXMoveConstructor:
7489    // For copy or move constructors, we need to perform overload resolution.
7490    break;
7491
7492  case Sema::CXXCopyAssignment:
7493  case Sema::CXXMoveAssignment:
7494    if (!S.getLangOpts().CPlusPlus14)
7495      return false;
7496    // In C++1y, we need to perform overload resolution.
7497    Ctor = false;
7498    break;
7499
7500  case Sema::CXXDestructor:
7501    return ClassDecl->defaultedDestructorIsConstexpr();
7502
7503  case Sema::CXXInvalid:
7504    return false;
7505  }
7506
7507  //   -- if the class is a non-empty union, or for each non-empty anonymous
7508  //      union member of a non-union class, exactly one non-static data member
7509  //      shall be initialized; [DR1359]
7510  //
7511  // If we squint, this is guaranteed, since exactly one non-static data member
7512  // will be initialized (if the constructor isn't deleted), we just don't know
7513  // which one.
7514  if (Ctor && ClassDecl->isUnion())
7515    return CSM == Sema::CXXDefaultConstructor
7516               ? ClassDecl->hasInClassInitializer() ||
7517                     !ClassDecl->hasVariantMembers()
7518               : true;
7519
7520  //   -- the class shall not have any virtual base classes;
7521  if (Ctor && ClassDecl->getNumVBases())
7522    return false;
7523
7524  // C++1y [class.copy]p26:
7525  //   -- [the class] is a literal type, and
7526  if (!Ctor && !ClassDecl->isLiteral())
7527    return false;
7528
7529  //   -- every constructor involved in initializing [...] base class
7530  //      sub-objects shall be a constexpr constructor;
7531  //   -- the assignment operator selected to copy/move each direct base
7532  //      class is a constexpr function, and
7533  for (const auto &B : ClassDecl->bases()) {
7534    const RecordType *BaseType = B.getType()->getAs<RecordType>();
7535    if (!BaseType)
7536      continue;
7537    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7538    if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, 0, ConstArg,
7539                                  InheritedCtor, Inherited))
7540      return false;
7541  }
7542
7543  //   -- every constructor involved in initializing non-static data members
7544  //      [...] shall be a constexpr constructor;
7545  //   -- every non-static data member and base class sub-object shall be
7546  //      initialized
7547  //   -- for each non-static data member of X that is of class type (or array
7548  //      thereof), the assignment operator selected to copy/move that member is
7549  //      a constexpr function
7550  for (const auto *F : ClassDecl->fields()) {
7551    if (F->isInvalidDecl())
7552      continue;
7553    if (CSM == Sema::CXXDefaultConstructor && F->hasInClassInitializer())
7554      continue;
7555    QualType BaseType = S.Context.getBaseElementType(F->getType());
7556    if (const RecordType *RecordTy = BaseType->getAs<RecordType>()) {
7557      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7558      if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM,
7559                                    BaseType.getCVRQualifiers(),
7560                                    ConstArg && !F->isMutable()))
7561        return false;
7562    } else if (CSM == Sema::CXXDefaultConstructor) {
7563      return false;
7564    }
7565  }
7566
7567  // All OK, it's constexpr!
7568  return true;
7569}
7570
7571namespace {
7572/// RAII object to register a defaulted function as having its exception
7573/// specification computed.
7574struct ComputingExceptionSpec {
7575  Sema &S;
7576
7577  ComputingExceptionSpec(Sema &S, FunctionDecl *FD, SourceLocation Loc)
7578      : S(S) {
7579    Sema::CodeSynthesisContext Ctx;
7580    Ctx.Kind = Sema::CodeSynthesisContext::ExceptionSpecEvaluation;
7581    Ctx.PointOfInstantiation = Loc;
7582    Ctx.Entity = FD;
7583    S.pushCodeSynthesisContext(Ctx);
7584  }
7585  ~ComputingExceptionSpec() {
7586    S.popCodeSynthesisContext();
7587  }
7588};
7589}
7590
7591static Sema::ImplicitExceptionSpecification
7592ComputeDefaultedSpecialMemberExceptionSpec(
7593    Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
7594    Sema::InheritedConstructorInfo *ICI);
7595
7596static Sema::ImplicitExceptionSpecification
7597ComputeDefaultedComparisonExceptionSpec(Sema &S, SourceLocation Loc,
7598                                        FunctionDecl *FD,
7599                                        Sema::DefaultedComparisonKind DCK);
7600
7601static Sema::ImplicitExceptionSpecification
7602computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, FunctionDecl *FD) {
7603  auto DFK = S.getDefaultedFunctionKind(FD);
7604  if (DFK.isSpecialMember())
7605    return ComputeDefaultedSpecialMemberExceptionSpec(
7606        S, Loc, cast<CXXMethodDecl>(FD), DFK.asSpecialMember(), nullptr);
7607  if (DFK.isComparison())
7608    return ComputeDefaultedComparisonExceptionSpec(S, Loc, FD,
7609                                                   DFK.asComparison());
7610
7611  auto *CD = cast<CXXConstructorDecl>(FD);
7612  assert(CD->getInheritedConstructor() &&
7613         "only defaulted functions and inherited constructors have implicit "
7614         "exception specs");
7615  Sema::InheritedConstructorInfo ICI(
7616      S, Loc, CD->getInheritedConstructor().getShadowDecl());
7617  return ComputeDefaultedSpecialMemberExceptionSpec(
7618      S, Loc, CD, Sema::CXXDefaultConstructor, &ICI);
7619}
7620
7621static FunctionProtoType::ExtProtoInfo getImplicitMethodEPI(Sema &S,
7622                                                            CXXMethodDecl *MD) {
7623  FunctionProtoType::ExtProtoInfo EPI;
7624
7625  // Build an exception specification pointing back at this member.
7626  EPI.ExceptionSpec.Type = EST_Unevaluated;
7627  EPI.ExceptionSpec.SourceDecl = MD;
7628
7629  // Set the calling convention to the default for C++ instance methods.
7630  EPI.ExtInfo = EPI.ExtInfo.withCallingConv(
7631      S.Context.getDefaultCallingConvention(/*IsVariadic=*/false,
7632                                            /*IsCXXMethod=*/true));
7633  return EPI;
7634}
7635
7636void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, FunctionDecl *FD) {
7637  const FunctionProtoType *FPT = FD->getType()->castAs<FunctionProtoType>();
7638  if (FPT->getExceptionSpecType() != EST_Unevaluated)
7639    return;
7640
7641  // Evaluate the exception specification.
7642  auto IES = computeImplicitExceptionSpec(*this, Loc, FD);
7643  auto ESI = IES.getExceptionSpec();
7644
7645  // Update the type of the special member to use it.
7646  UpdateExceptionSpec(FD, ESI);
7647}
7648
7649void Sema::CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *FD) {
7650  assert(FD->isExplicitlyDefaulted() && "not explicitly-defaulted");
7651
7652  DefaultedFunctionKind DefKind = getDefaultedFunctionKind(FD);
7653  if (!DefKind) {
7654    assert(FD->getDeclContext()->isDependentContext());
7655    return;
7656  }
7657
7658  if (DefKind.isComparison())
7659    UnusedPrivateFields.clear();
7660
7661  if (DefKind.isSpecialMember()
7662          ? CheckExplicitlyDefaultedSpecialMember(cast<CXXMethodDecl>(FD),
7663                                                  DefKind.asSpecialMember(),
7664                                                  FD->getDefaultLoc())
7665          : CheckExplicitlyDefaultedComparison(S, FD, DefKind.asComparison()))
7666    FD->setInvalidDecl();
7667}
7668
7669bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD,
7670                                                 CXXSpecialMember CSM,
7671                                                 SourceLocation DefaultLoc) {
7672  CXXRecordDecl *RD = MD->getParent();
7673
7674  assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
7675         "not an explicitly-defaulted special member");
7676
7677  // Defer all checking for special members of a dependent type.
7678  if (RD->isDependentType())
7679    return false;
7680
7681  // Whether this was the first-declared instance of the constructor.
7682  // This affects whether we implicitly add an exception spec and constexpr.
7683  bool First = MD == MD->getCanonicalDecl();
7684
7685  bool HadError = false;
7686
7687  // C++11 [dcl.fct.def.default]p1:
7688  //   A function that is explicitly defaulted shall
7689  //     -- be a special member function [...] (checked elsewhere),
7690  //     -- have the same type (except for ref-qualifiers, and except that a
7691  //        copy operation can take a non-const reference) as an implicit
7692  //        declaration, and
7693  //     -- not have default arguments.
7694  // C++2a changes the second bullet to instead delete the function if it's
7695  // defaulted on its first declaration, unless it's "an assignment operator,
7696  // and its return type differs or its parameter type is not a reference".
7697  bool DeleteOnTypeMismatch = getLangOpts().CPlusPlus20 && First;
7698  bool ShouldDeleteForTypeMismatch = false;
7699  unsigned ExpectedParams = 1;
7700  if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
7701    ExpectedParams = 0;
7702  if (MD->getNumExplicitParams() != ExpectedParams) {
7703    // This checks for default arguments: a copy or move constructor with a
7704    // default argument is classified as a default constructor, and assignment
7705    // operations and destructors can't have default arguments.
7706    Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
7707      << CSM << MD->getSourceRange();
7708    HadError = true;
7709  } else if (MD->isVariadic()) {
7710    if (DeleteOnTypeMismatch)
7711      ShouldDeleteForTypeMismatch = true;
7712    else {
7713      Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
7714        << CSM << MD->getSourceRange();
7715      HadError = true;
7716    }
7717  }
7718
7719  const FunctionProtoType *Type = MD->getType()->castAs<FunctionProtoType>();
7720
7721  bool CanHaveConstParam = false;
7722  if (CSM == CXXCopyConstructor)
7723    CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
7724  else if (CSM == CXXCopyAssignment)
7725    CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
7726
7727  QualType ReturnType = Context.VoidTy;
7728  if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
7729    // Check for return type matching.
7730    ReturnType = Type->getReturnType();
7731    QualType ThisType = MD->getFunctionObjectParameterType();
7732
7733    QualType DeclType = Context.getTypeDeclType(RD);
7734    DeclType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr,
7735                                         DeclType, nullptr);
7736    DeclType = Context.getAddrSpaceQualType(
7737        DeclType, ThisType.getQualifiers().getAddressSpace());
7738    QualType ExpectedReturnType = Context.getLValueReferenceType(DeclType);
7739
7740    if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
7741      Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
7742        << (CSM == CXXMoveAssignment) << ExpectedReturnType;
7743      HadError = true;
7744    }
7745
7746    // A defaulted special member cannot have cv-qualifiers.
7747    if (ThisType.isConstQualified() || ThisType.isVolatileQualified()) {
7748      if (DeleteOnTypeMismatch)
7749        ShouldDeleteForTypeMismatch = true;
7750      else {
7751        Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
7752          << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14;
7753        HadError = true;
7754      }
7755    }
7756    // [C++23][dcl.fct.def.default]/p2.2
7757    // if F2 has an implicit object parameter of type ���reference to C���,
7758    // F1 may be an explicit object member function whose explicit object
7759    // parameter is of (possibly different) type ���reference to C���,
7760    // in which case the type of F1 would differ from the type of F2
7761    // in that the type of F1 has an additional parameter;
7762    if (!Context.hasSameType(
7763            ThisType.getNonReferenceType().getUnqualifiedType(),
7764            Context.getRecordType(RD))) {
7765      if (DeleteOnTypeMismatch)
7766        ShouldDeleteForTypeMismatch = true;
7767      else {
7768        Diag(MD->getLocation(),
7769             diag::err_defaulted_special_member_explicit_object_mismatch)
7770            << (CSM == CXXMoveAssignment) << RD << MD->getSourceRange();
7771        HadError = true;
7772      }
7773    }
7774  }
7775
7776  // Check for parameter type matching.
7777  QualType ArgType =
7778      ExpectedParams
7779          ? Type->getParamType(MD->isExplicitObjectMemberFunction() ? 1 : 0)
7780          : QualType();
7781  bool HasConstParam = false;
7782  if (ExpectedParams && ArgType->isReferenceType()) {
7783    // Argument must be reference to possibly-const T.
7784    QualType ReferentType = ArgType->getPointeeType();
7785    HasConstParam = ReferentType.isConstQualified();
7786
7787    if (ReferentType.isVolatileQualified()) {
7788      if (DeleteOnTypeMismatch)
7789        ShouldDeleteForTypeMismatch = true;
7790      else {
7791        Diag(MD->getLocation(),
7792             diag::err_defaulted_special_member_volatile_param) << CSM;
7793        HadError = true;
7794      }
7795    }
7796
7797    if (HasConstParam && !CanHaveConstParam) {
7798      if (DeleteOnTypeMismatch)
7799        ShouldDeleteForTypeMismatch = true;
7800      else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
7801        Diag(MD->getLocation(),
7802             diag::err_defaulted_special_member_copy_const_param)
7803          << (CSM == CXXCopyAssignment);
7804        // FIXME: Explain why this special member can't be const.
7805        HadError = true;
7806      } else {
7807        Diag(MD->getLocation(),
7808             diag::err_defaulted_special_member_move_const_param)
7809          << (CSM == CXXMoveAssignment);
7810        HadError = true;
7811      }
7812    }
7813  } else if (ExpectedParams) {
7814    // A copy assignment operator can take its argument by value, but a
7815    // defaulted one cannot.
7816    assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
7817    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
7818    HadError = true;
7819  }
7820
7821  // C++11 [dcl.fct.def.default]p2:
7822  //   An explicitly-defaulted function may be declared constexpr only if it
7823  //   would have been implicitly declared as constexpr,
7824  // Do not apply this rule to members of class templates, since core issue 1358
7825  // makes such functions always instantiate to constexpr functions. For
7826  // functions which cannot be constexpr (for non-constructors in C++11 and for
7827  // destructors in C++14 and C++17), this is checked elsewhere.
7828  //
7829  // FIXME: This should not apply if the member is deleted.
7830  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
7831                                                     HasConstParam);
7832
7833  // C++14 [dcl.constexpr]p6 (CWG DR647/CWG DR1358):
7834  //   If the instantiated template specialization of a constexpr function
7835  //   template or member function of a class template would fail to satisfy
7836  //   the requirements for a constexpr function or constexpr constructor, that
7837  //   specialization is still a constexpr function or constexpr constructor,
7838  //   even though a call to such a function cannot appear in a constant
7839  //   expression.
7840  if (MD->isTemplateInstantiation() && MD->isConstexpr())
7841    Constexpr = true;
7842
7843  if ((getLangOpts().CPlusPlus20 ||
7844       (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD)
7845                                  : isa<CXXConstructorDecl>(MD))) &&
7846      MD->isConstexpr() && !Constexpr &&
7847      MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
7848        if (!MD->isConsteval() && RD->getNumVBases()) {
7849          Diag(MD->getBeginLoc(), diag::err_incorrect_defaulted_constexpr_with_vb)
7850              << CSM;
7851          for (const auto &I : RD->vbases())
7852            Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here);
7853        } else {
7854          Diag(MD->getBeginLoc(), MD->isConsteval()
7855                                      ? diag::err_incorrect_defaulted_consteval
7856                                      : diag::err_incorrect_defaulted_constexpr)
7857              << CSM;
7858        }
7859    // FIXME: Explain why the special member can't be constexpr.
7860    HadError = true;
7861  }
7862
7863  if (First) {
7864    // C++2a [dcl.fct.def.default]p3:
7865    //   If a function is explicitly defaulted on its first declaration, it is
7866    //   implicitly considered to be constexpr if the implicit declaration
7867    //   would be.
7868    MD->setConstexprKind(Constexpr ? (MD->isConsteval()
7869                                          ? ConstexprSpecKind::Consteval
7870                                          : ConstexprSpecKind::Constexpr)
7871                                   : ConstexprSpecKind::Unspecified);
7872
7873    if (!Type->hasExceptionSpec()) {
7874      // C++2a [except.spec]p3:
7875      //   If a declaration of a function does not have a noexcept-specifier
7876      //   [and] is defaulted on its first declaration, [...] the exception
7877      //   specification is as specified below
7878      FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
7879      EPI.ExceptionSpec.Type = EST_Unevaluated;
7880      EPI.ExceptionSpec.SourceDecl = MD;
7881      MD->setType(
7882          Context.getFunctionType(ReturnType, Type->getParamTypes(), EPI));
7883    }
7884  }
7885
7886  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {
7887    if (First) {
7888      SetDeclDeleted(MD, MD->getLocation());
7889      if (!inTemplateInstantiation() && !HadError) {
7890        Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;
7891        if (ShouldDeleteForTypeMismatch) {
7892          Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM;
7893        } else if (ShouldDeleteSpecialMember(MD, CSM, nullptr,
7894                                             /*Diagnose*/ true) &&
7895                   DefaultLoc.isValid()) {
7896          Diag(DefaultLoc, diag::note_replace_equals_default_to_delete)
7897              << FixItHint::CreateReplacement(DefaultLoc, "delete");
7898        }
7899      }
7900      if (ShouldDeleteForTypeMismatch && !HadError) {
7901        Diag(MD->getLocation(),
7902             diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;
7903      }
7904    } else {
7905      // C++11 [dcl.fct.def.default]p4:
7906      //   [For a] user-provided explicitly-defaulted function [...] if such a
7907      //   function is implicitly defined as deleted, the program is ill-formed.
7908      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
7909      assert(!ShouldDeleteForTypeMismatch && "deleted non-first decl");
7910      ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true);
7911      HadError = true;
7912    }
7913  }
7914
7915  return HadError;
7916}
7917
7918namespace {
7919/// Helper class for building and checking a defaulted comparison.
7920///
7921/// Defaulted functions are built in two phases:
7922///
7923///  * First, the set of operations that the function will perform are
7924///    identified, and some of them are checked. If any of the checked
7925///    operations is invalid in certain ways, the comparison function is
7926///    defined as deleted and no body is built.
7927///  * Then, if the function is not defined as deleted, the body is built.
7928///
7929/// This is accomplished by performing two visitation steps over the eventual
7930/// body of the function.
7931template<typename Derived, typename ResultList, typename Result,
7932         typename Subobject>
7933class DefaultedComparisonVisitor {
7934public:
7935  using DefaultedComparisonKind = Sema::DefaultedComparisonKind;
7936
7937  DefaultedComparisonVisitor(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD,
7938                             DefaultedComparisonKind DCK)
7939      : S(S), RD(RD), FD(FD), DCK(DCK) {
7940    if (auto *Info = FD->getDefaultedFunctionInfo()) {
7941      // FIXME: Change CreateOverloadedBinOp to take an ArrayRef instead of an
7942      // UnresolvedSet to avoid this copy.
7943      Fns.assign(Info->getUnqualifiedLookups().begin(),
7944                 Info->getUnqualifiedLookups().end());
7945    }
7946  }
7947
7948  ResultList visit() {
7949    // The type of an lvalue naming a parameter of this function.
7950    QualType ParamLvalType =
7951        FD->getParamDecl(0)->getType().getNonReferenceType();
7952
7953    ResultList Results;
7954
7955    switch (DCK) {
7956    case DefaultedComparisonKind::None:
7957      llvm_unreachable("not a defaulted comparison");
7958
7959    case DefaultedComparisonKind::Equal:
7960    case DefaultedComparisonKind::ThreeWay:
7961      getDerived().visitSubobjects(Results, RD, ParamLvalType.getQualifiers());
7962      return Results;
7963
7964    case DefaultedComparisonKind::NotEqual:
7965    case DefaultedComparisonKind::Relational:
7966      Results.add(getDerived().visitExpandedSubobject(
7967          ParamLvalType, getDerived().getCompleteObject()));
7968      return Results;
7969    }
7970    llvm_unreachable("");
7971  }
7972
7973protected:
7974  Derived &getDerived() { return static_cast<Derived&>(*this); }
7975
7976  /// Visit the expanded list of subobjects of the given type, as specified in
7977  /// C++2a [class.compare.default].
7978  ///
7979  /// \return \c true if the ResultList object said we're done, \c false if not.
7980  bool visitSubobjects(ResultList &Results, CXXRecordDecl *Record,
7981                       Qualifiers Quals) {
7982    // C++2a [class.compare.default]p4:
7983    //   The direct base class subobjects of C
7984    for (CXXBaseSpecifier &Base : Record->bases())
7985      if (Results.add(getDerived().visitSubobject(
7986              S.Context.getQualifiedType(Base.getType(), Quals),
7987              getDerived().getBase(&Base))))
7988        return true;
7989
7990    //   followed by the non-static data members of C
7991    for (FieldDecl *Field : Record->fields()) {
7992      // C++23 [class.bit]p2:
7993      //   Unnamed bit-fields are not members ...
7994      if (Field->isUnnamedBitfield())
7995        continue;
7996      // Recursively expand anonymous structs.
7997      if (Field->isAnonymousStructOrUnion()) {
7998        if (visitSubobjects(Results, Field->getType()->getAsCXXRecordDecl(),
7999                            Quals))
8000          return true;
8001        continue;
8002      }
8003
8004      // Figure out the type of an lvalue denoting this field.
8005      Qualifiers FieldQuals = Quals;
8006      if (Field->isMutable())
8007        FieldQuals.removeConst();
8008      QualType FieldType =
8009          S.Context.getQualifiedType(Field->getType(), FieldQuals);
8010
8011      if (Results.add(getDerived().visitSubobject(
8012              FieldType, getDerived().getField(Field))))
8013        return true;
8014    }
8015
8016    //   form a list of subobjects.
8017    return false;
8018  }
8019
8020  Result visitSubobject(QualType Type, Subobject Subobj) {
8021    //   In that list, any subobject of array type is recursively expanded
8022    const ArrayType *AT = S.Context.getAsArrayType(Type);
8023    if (auto *CAT = dyn_cast_or_null<ConstantArrayType>(AT))
8024      return getDerived().visitSubobjectArray(CAT->getElementType(),
8025                                              CAT->getSize(), Subobj);
8026    return getDerived().visitExpandedSubobject(Type, Subobj);
8027  }
8028
8029  Result visitSubobjectArray(QualType Type, const llvm::APInt &Size,
8030                             Subobject Subobj) {
8031    return getDerived().visitSubobject(Type, Subobj);
8032  }
8033
8034protected:
8035  Sema &S;
8036  CXXRecordDecl *RD;
8037  FunctionDecl *FD;
8038  DefaultedComparisonKind DCK;
8039  UnresolvedSet<16> Fns;
8040};
8041
8042/// Information about a defaulted comparison, as determined by
8043/// DefaultedComparisonAnalyzer.
8044struct DefaultedComparisonInfo {
8045  bool Deleted = false;
8046  bool Constexpr = true;
8047  ComparisonCategoryType Category = ComparisonCategoryType::StrongOrdering;
8048
8049  static DefaultedComparisonInfo deleted() {
8050    DefaultedComparisonInfo Deleted;
8051    Deleted.Deleted = true;
8052    return Deleted;
8053  }
8054
8055  bool add(const DefaultedComparisonInfo &R) {
8056    Deleted |= R.Deleted;
8057    Constexpr &= R.Constexpr;
8058    Category = commonComparisonType(Category, R.Category);
8059    return Deleted;
8060  }
8061};
8062
8063/// An element in the expanded list of subobjects of a defaulted comparison, as
8064/// specified in C++2a [class.compare.default]p4.
8065struct DefaultedComparisonSubobject {
8066  enum { CompleteObject, Member, Base } Kind;
8067  NamedDecl *Decl;
8068  SourceLocation Loc;
8069};
8070
8071/// A visitor over the notional body of a defaulted comparison that determines
8072/// whether that body would be deleted or constexpr.
8073class DefaultedComparisonAnalyzer
8074    : public DefaultedComparisonVisitor<DefaultedComparisonAnalyzer,
8075                                        DefaultedComparisonInfo,
8076                                        DefaultedComparisonInfo,
8077                                        DefaultedComparisonSubobject> {
8078public:
8079  enum DiagnosticKind { NoDiagnostics, ExplainDeleted, ExplainConstexpr };
8080
8081private:
8082  DiagnosticKind Diagnose;
8083
8084public:
8085  using Base = DefaultedComparisonVisitor;
8086  using Result = DefaultedComparisonInfo;
8087  using Subobject = DefaultedComparisonSubobject;
8088
8089  friend Base;
8090
8091  DefaultedComparisonAnalyzer(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD,
8092                              DefaultedComparisonKind DCK,
8093                              DiagnosticKind Diagnose = NoDiagnostics)
8094      : Base(S, RD, FD, DCK), Diagnose(Diagnose) {}
8095
8096  Result visit() {
8097    if ((DCK == DefaultedComparisonKind::Equal ||
8098         DCK == DefaultedComparisonKind::ThreeWay) &&
8099        RD->hasVariantMembers()) {
8100      // C++2a [class.compare.default]p2 [P2002R0]:
8101      //   A defaulted comparison operator function for class C is defined as
8102      //   deleted if [...] C has variant members.
8103      if (Diagnose == ExplainDeleted) {
8104        S.Diag(FD->getLocation(), diag::note_defaulted_comparison_union)
8105          << FD << RD->isUnion() << RD;
8106      }
8107      return Result::deleted();
8108    }
8109
8110    return Base::visit();
8111  }
8112
8113private:
8114  Subobject getCompleteObject() {
8115    return Subobject{Subobject::CompleteObject, RD, FD->getLocation()};
8116  }
8117
8118  Subobject getBase(CXXBaseSpecifier *Base) {
8119    return Subobject{Subobject::Base, Base->getType()->getAsCXXRecordDecl(),
8120                     Base->getBaseTypeLoc()};
8121  }
8122
8123  Subobject getField(FieldDecl *Field) {
8124    return Subobject{Subobject::Member, Field, Field->getLocation()};
8125  }
8126
8127  Result visitExpandedSubobject(QualType Type, Subobject Subobj) {
8128    // C++2a [class.compare.default]p2 [P2002R0]:
8129    //   A defaulted <=> or == operator function for class C is defined as
8130    //   deleted if any non-static data member of C is of reference type
8131    if (Type->isReferenceType()) {
8132      if (Diagnose == ExplainDeleted) {
8133        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_reference_member)
8134            << FD << RD;
8135      }
8136      return Result::deleted();
8137    }
8138
8139    // [...] Let xi be an lvalue denoting the ith element [...]
8140    OpaqueValueExpr Xi(FD->getLocation(), Type, VK_LValue);
8141    Expr *Args[] = {&Xi, &Xi};
8142
8143    // All operators start by trying to apply that same operator recursively.
8144    OverloadedOperatorKind OO = FD->getOverloadedOperator();
8145    assert(OO != OO_None && "not an overloaded operator!");
8146    return visitBinaryOperator(OO, Args, Subobj);
8147  }
8148
8149  Result
8150  visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args,
8151                      Subobject Subobj,
8152                      OverloadCandidateSet *SpaceshipCandidates = nullptr) {
8153    // Note that there is no need to consider rewritten candidates here if
8154    // we've already found there is no viable 'operator<=>' candidate (and are
8155    // considering synthesizing a '<=>' from '==' and '<').
8156    OverloadCandidateSet CandidateSet(
8157        FD->getLocation(), OverloadCandidateSet::CSK_Operator,
8158        OverloadCandidateSet::OperatorRewriteInfo(
8159            OO, FD->getLocation(),
8160            /*AllowRewrittenCandidates=*/!SpaceshipCandidates));
8161
8162    /// C++2a [class.compare.default]p1 [P2002R0]:
8163    ///   [...] the defaulted function itself is never a candidate for overload
8164    ///   resolution [...]
8165    CandidateSet.exclude(FD);
8166
8167    if (Args[0]->getType()->isOverloadableType())
8168      S.LookupOverloadedBinOp(CandidateSet, OO, Fns, Args);
8169    else
8170      // FIXME: We determine whether this is a valid expression by checking to
8171      // see if there's a viable builtin operator candidate for it. That isn't
8172      // really what the rules ask us to do, but should give the right results.
8173      S.AddBuiltinOperatorCandidates(OO, FD->getLocation(), Args, CandidateSet);
8174
8175    Result R;
8176
8177    OverloadCandidateSet::iterator Best;
8178    switch (CandidateSet.BestViableFunction(S, FD->getLocation(), Best)) {
8179    case OR_Success: {
8180      // C++2a [class.compare.secondary]p2 [P2002R0]:
8181      //   The operator function [...] is defined as deleted if [...] the
8182      //   candidate selected by overload resolution is not a rewritten
8183      //   candidate.
8184      if ((DCK == DefaultedComparisonKind::NotEqual ||
8185           DCK == DefaultedComparisonKind::Relational) &&
8186          !Best->RewriteKind) {
8187        if (Diagnose == ExplainDeleted) {
8188          if (Best->Function) {
8189            S.Diag(Best->Function->getLocation(),
8190                   diag::note_defaulted_comparison_not_rewritten_callee)
8191                << FD;
8192          } else {
8193            assert(Best->Conversions.size() == 2 &&
8194                   Best->Conversions[0].isUserDefined() &&
8195                   "non-user-defined conversion from class to built-in "
8196                   "comparison");
8197            S.Diag(Best->Conversions[0]
8198                       .UserDefined.FoundConversionFunction.getDecl()
8199                       ->getLocation(),
8200                   diag::note_defaulted_comparison_not_rewritten_conversion)
8201                << FD;
8202          }
8203        }
8204        return Result::deleted();
8205      }
8206
8207      // Throughout C++2a [class.compare]: if overload resolution does not
8208      // result in a usable function, the candidate function is defined as
8209      // deleted. This requires that we selected an accessible function.
8210      //
8211      // Note that this only considers the access of the function when named
8212      // within the type of the subobject, and not the access path for any
8213      // derived-to-base conversion.
8214      CXXRecordDecl *ArgClass = Args[0]->getType()->getAsCXXRecordDecl();
8215      if (ArgClass && Best->FoundDecl.getDecl() &&
8216          Best->FoundDecl.getDecl()->isCXXClassMember()) {
8217        QualType ObjectType = Subobj.Kind == Subobject::Member
8218                                  ? Args[0]->getType()
8219                                  : S.Context.getRecordType(RD);
8220        if (!S.isMemberAccessibleForDeletion(
8221                ArgClass, Best->FoundDecl, ObjectType, Subobj.Loc,
8222                Diagnose == ExplainDeleted
8223                    ? S.PDiag(diag::note_defaulted_comparison_inaccessible)
8224                          << FD << Subobj.Kind << Subobj.Decl
8225                    : S.PDiag()))
8226          return Result::deleted();
8227      }
8228
8229      bool NeedsDeducing =
8230          OO == OO_Spaceship && FD->getReturnType()->isUndeducedAutoType();
8231
8232      if (FunctionDecl *BestFD = Best->Function) {
8233        // C++2a [class.compare.default]p3 [P2002R0]:
8234        //   A defaulted comparison function is constexpr-compatible if
8235        //   [...] no overlod resolution performed [...] results in a
8236        //   non-constexpr function.
8237        assert(!BestFD->isDeleted() && "wrong overload resolution result");
8238        // If it's not constexpr, explain why not.
8239        if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) {
8240          if (Subobj.Kind != Subobject::CompleteObject)
8241            S.Diag(Subobj.Loc, diag::note_defaulted_comparison_not_constexpr)
8242              << Subobj.Kind << Subobj.Decl;
8243          S.Diag(BestFD->getLocation(),
8244                 diag::note_defaulted_comparison_not_constexpr_here);
8245          // Bail out after explaining; we don't want any more notes.
8246          return Result::deleted();
8247        }
8248        R.Constexpr &= BestFD->isConstexpr();
8249
8250        if (NeedsDeducing) {
8251          // If any callee has an undeduced return type, deduce it now.
8252          // FIXME: It's not clear how a failure here should be handled. For
8253          // now, we produce an eager diagnostic, because that is forward
8254          // compatible with most (all?) other reasonable options.
8255          if (BestFD->getReturnType()->isUndeducedType() &&
8256              S.DeduceReturnType(BestFD, FD->getLocation(),
8257                                 /*Diagnose=*/false)) {
8258            // Don't produce a duplicate error when asked to explain why the
8259            // comparison is deleted: we diagnosed that when initially checking
8260            // the defaulted operator.
8261            if (Diagnose == NoDiagnostics) {
8262              S.Diag(
8263                  FD->getLocation(),
8264                  diag::err_defaulted_comparison_cannot_deduce_undeduced_auto)
8265                  << Subobj.Kind << Subobj.Decl;
8266              S.Diag(
8267                  Subobj.Loc,
8268                  diag::note_defaulted_comparison_cannot_deduce_undeduced_auto)
8269                  << Subobj.Kind << Subobj.Decl;
8270              S.Diag(BestFD->getLocation(),
8271                     diag::note_defaulted_comparison_cannot_deduce_callee)
8272                  << Subobj.Kind << Subobj.Decl;
8273            }
8274            return Result::deleted();
8275          }
8276          auto *Info = S.Context.CompCategories.lookupInfoForType(
8277              BestFD->getCallResultType());
8278          if (!Info) {
8279            if (Diagnose == ExplainDeleted) {
8280              S.Diag(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce)
8281                  << Subobj.Kind << Subobj.Decl
8282                  << BestFD->getCallResultType().withoutLocalFastQualifiers();
8283              S.Diag(BestFD->getLocation(),
8284                     diag::note_defaulted_comparison_cannot_deduce_callee)
8285                  << Subobj.Kind << Subobj.Decl;
8286            }
8287            return Result::deleted();
8288          }
8289          R.Category = Info->Kind;
8290        }
8291      } else {
8292        QualType T = Best->BuiltinParamTypes[0];
8293        assert(T == Best->BuiltinParamTypes[1] &&
8294               "builtin comparison for different types?");
8295        assert(Best->BuiltinParamTypes[2].isNull() &&
8296               "invalid builtin comparison");
8297
8298        if (NeedsDeducing) {
8299          std::optional<ComparisonCategoryType> Cat =
8300              getComparisonCategoryForBuiltinCmp(T);
8301          assert(Cat && "no category for builtin comparison?");
8302          R.Category = *Cat;
8303        }
8304      }
8305
8306      // Note that we might be rewriting to a different operator. That call is
8307      // not considered until we come to actually build the comparison function.
8308      break;
8309    }
8310
8311    case OR_Ambiguous:
8312      if (Diagnose == ExplainDeleted) {
8313        unsigned Kind = 0;
8314        if (FD->getOverloadedOperator() == OO_Spaceship && OO != OO_Spaceship)
8315          Kind = OO == OO_EqualEqual ? 1 : 2;
8316        CandidateSet.NoteCandidates(
8317            PartialDiagnosticAt(
8318                Subobj.Loc, S.PDiag(diag::note_defaulted_comparison_ambiguous)
8319                                << FD << Kind << Subobj.Kind << Subobj.Decl),
8320            S, OCD_AmbiguousCandidates, Args);
8321      }
8322      R = Result::deleted();
8323      break;
8324
8325    case OR_Deleted:
8326      if (Diagnose == ExplainDeleted) {
8327        if ((DCK == DefaultedComparisonKind::NotEqual ||
8328             DCK == DefaultedComparisonKind::Relational) &&
8329            !Best->RewriteKind) {
8330          S.Diag(Best->Function->getLocation(),
8331                 diag::note_defaulted_comparison_not_rewritten_callee)
8332              << FD;
8333        } else {
8334          S.Diag(Subobj.Loc,
8335                 diag::note_defaulted_comparison_calls_deleted)
8336              << FD << Subobj.Kind << Subobj.Decl;
8337          S.NoteDeletedFunction(Best->Function);
8338        }
8339      }
8340      R = Result::deleted();
8341      break;
8342
8343    case OR_No_Viable_Function:
8344      // If there's no usable candidate, we're done unless we can rewrite a
8345      // '<=>' in terms of '==' and '<'.
8346      if (OO == OO_Spaceship &&
8347          S.Context.CompCategories.lookupInfoForType(FD->getReturnType())) {
8348        // For any kind of comparison category return type, we need a usable
8349        // '==' and a usable '<'.
8350        if (!R.add(visitBinaryOperator(OO_EqualEqual, Args, Subobj,
8351                                       &CandidateSet)))
8352          R.add(visitBinaryOperator(OO_Less, Args, Subobj, &CandidateSet));
8353        break;
8354      }
8355
8356      if (Diagnose == ExplainDeleted) {
8357        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function)
8358            << FD << (OO == OO_EqualEqual || OO == OO_ExclaimEqual)
8359            << Subobj.Kind << Subobj.Decl;
8360
8361        // For a three-way comparison, list both the candidates for the
8362        // original operator and the candidates for the synthesized operator.
8363        if (SpaceshipCandidates) {
8364          SpaceshipCandidates->NoteCandidates(
8365              S, Args,
8366              SpaceshipCandidates->CompleteCandidates(S, OCD_AllCandidates,
8367                                                      Args, FD->getLocation()));
8368          S.Diag(Subobj.Loc,
8369                 diag::note_defaulted_comparison_no_viable_function_synthesized)
8370              << (OO == OO_EqualEqual ? 0 : 1);
8371        }
8372
8373        CandidateSet.NoteCandidates(
8374            S, Args,
8375            CandidateSet.CompleteCandidates(S, OCD_AllCandidates, Args,
8376                                            FD->getLocation()));
8377      }
8378      R = Result::deleted();
8379      break;
8380    }
8381
8382    return R;
8383  }
8384};
8385
8386/// A list of statements.
8387struct StmtListResult {
8388  bool IsInvalid = false;
8389  llvm::SmallVector<Stmt*, 16> Stmts;
8390
8391  bool add(const StmtResult &S) {
8392    IsInvalid |= S.isInvalid();
8393    if (IsInvalid)
8394      return true;
8395    Stmts.push_back(S.get());
8396    return false;
8397  }
8398};
8399
8400/// A visitor over the notional body of a defaulted comparison that synthesizes
8401/// the actual body.
8402class DefaultedComparisonSynthesizer
8403    : public DefaultedComparisonVisitor<DefaultedComparisonSynthesizer,
8404                                        StmtListResult, StmtResult,
8405                                        std::pair<ExprResult, ExprResult>> {
8406  SourceLocation Loc;
8407  unsigned ArrayDepth = 0;
8408
8409public:
8410  using Base = DefaultedComparisonVisitor;
8411  using ExprPair = std::pair<ExprResult, ExprResult>;
8412
8413  friend Base;
8414
8415  DefaultedComparisonSynthesizer(Sema &S, CXXRecordDecl *RD, FunctionDecl *FD,
8416                                 DefaultedComparisonKind DCK,
8417                                 SourceLocation BodyLoc)
8418      : Base(S, RD, FD, DCK), Loc(BodyLoc) {}
8419
8420  /// Build a suitable function body for this defaulted comparison operator.
8421  StmtResult build() {
8422    Sema::CompoundScopeRAII CompoundScope(S);
8423
8424    StmtListResult Stmts = visit();
8425    if (Stmts.IsInvalid)
8426      return StmtError();
8427
8428    ExprResult RetVal;
8429    switch (DCK) {
8430    case DefaultedComparisonKind::None:
8431      llvm_unreachable("not a defaulted comparison");
8432
8433    case DefaultedComparisonKind::Equal: {
8434      // C++2a [class.eq]p3:
8435      //   [...] compar[e] the corresponding elements [...] until the first
8436      //   index i where xi == yi yields [...] false. If no such index exists,
8437      //   V is true. Otherwise, V is false.
8438      //
8439      // Join the comparisons with '&&'s and return the result. Use a right
8440      // fold (traversing the conditions right-to-left), because that
8441      // short-circuits more naturally.
8442      auto OldStmts = std::move(Stmts.Stmts);
8443      Stmts.Stmts.clear();
8444      ExprResult CmpSoFar;
8445      // Finish a particular comparison chain.
8446      auto FinishCmp = [&] {
8447        if (Expr *Prior = CmpSoFar.get()) {
8448          // Convert the last expression to 'return ...;'
8449          if (RetVal.isUnset() && Stmts.Stmts.empty())
8450            RetVal = CmpSoFar;
8451          // Convert any prior comparison to 'if (!(...)) return false;'
8452          else if (Stmts.add(buildIfNotCondReturnFalse(Prior)))
8453            return true;
8454          CmpSoFar = ExprResult();
8455        }
8456        return false;
8457      };
8458      for (Stmt *EAsStmt : llvm::reverse(OldStmts)) {
8459        Expr *E = dyn_cast<Expr>(EAsStmt);
8460        if (!E) {
8461          // Found an array comparison.
8462          if (FinishCmp() || Stmts.add(EAsStmt))
8463            return StmtError();
8464          continue;
8465        }
8466
8467        if (CmpSoFar.isUnset()) {
8468          CmpSoFar = E;
8469          continue;
8470        }
8471        CmpSoFar = S.CreateBuiltinBinOp(Loc, BO_LAnd, E, CmpSoFar.get());
8472        if (CmpSoFar.isInvalid())
8473          return StmtError();
8474      }
8475      if (FinishCmp())
8476        return StmtError();
8477      std::reverse(Stmts.Stmts.begin(), Stmts.Stmts.end());
8478      //   If no such index exists, V is true.
8479      if (RetVal.isUnset())
8480        RetVal = S.ActOnCXXBoolLiteral(Loc, tok::kw_true);
8481      break;
8482    }
8483
8484    case DefaultedComparisonKind::ThreeWay: {
8485      // Per C++2a [class.spaceship]p3, as a fallback add:
8486      // return static_cast<R>(std::strong_ordering::equal);
8487      QualType StrongOrdering = S.CheckComparisonCategoryType(
8488          ComparisonCategoryType::StrongOrdering, Loc,
8489          Sema::ComparisonCategoryUsage::DefaultedOperator);
8490      if (StrongOrdering.isNull())
8491        return StmtError();
8492      VarDecl *EqualVD = S.Context.CompCategories.getInfoForType(StrongOrdering)
8493                             .getValueInfo(ComparisonCategoryResult::Equal)
8494                             ->VD;
8495      RetVal = getDecl(EqualVD);
8496      if (RetVal.isInvalid())
8497        return StmtError();
8498      RetVal = buildStaticCastToR(RetVal.get());
8499      break;
8500    }
8501
8502    case DefaultedComparisonKind::NotEqual:
8503    case DefaultedComparisonKind::Relational:
8504      RetVal = cast<Expr>(Stmts.Stmts.pop_back_val());
8505      break;
8506    }
8507
8508    // Build the final return statement.
8509    if (RetVal.isInvalid())
8510      return StmtError();
8511    StmtResult ReturnStmt = S.BuildReturnStmt(Loc, RetVal.get());
8512    if (ReturnStmt.isInvalid())
8513      return StmtError();
8514    Stmts.Stmts.push_back(ReturnStmt.get());
8515
8516    return S.ActOnCompoundStmt(Loc, Loc, Stmts.Stmts, /*IsStmtExpr=*/false);
8517  }
8518
8519private:
8520  ExprResult getDecl(ValueDecl *VD) {
8521    return S.BuildDeclarationNameExpr(
8522        CXXScopeSpec(), DeclarationNameInfo(VD->getDeclName(), Loc), VD);
8523  }
8524
8525  ExprResult getParam(unsigned I) {
8526    ParmVarDecl *PD = FD->getParamDecl(I);
8527    return getDecl(PD);
8528  }
8529
8530  ExprPair getCompleteObject() {
8531    unsigned Param = 0;
8532    ExprResult LHS;
8533    if (const auto *MD = dyn_cast<CXXMethodDecl>(FD);
8534        MD && MD->isImplicitObjectMemberFunction()) {
8535      // LHS is '*this'.
8536      LHS = S.ActOnCXXThis(Loc);
8537      if (!LHS.isInvalid())
8538        LHS = S.CreateBuiltinUnaryOp(Loc, UO_Deref, LHS.get());
8539    } else {
8540      LHS = getParam(Param++);
8541    }
8542    ExprResult RHS = getParam(Param++);
8543    assert(Param == FD->getNumParams());
8544    return {LHS, RHS};
8545  }
8546
8547  ExprPair getBase(CXXBaseSpecifier *Base) {
8548    ExprPair Obj = getCompleteObject();
8549    if (Obj.first.isInvalid() || Obj.second.isInvalid())
8550      return {ExprError(), ExprError()};
8551    CXXCastPath Path = {Base};
8552    return {S.ImpCastExprToType(Obj.first.get(), Base->getType(),
8553                                CK_DerivedToBase, VK_LValue, &Path),
8554            S.ImpCastExprToType(Obj.second.get(), Base->getType(),
8555                                CK_DerivedToBase, VK_LValue, &Path)};
8556  }
8557
8558  ExprPair getField(FieldDecl *Field) {
8559    ExprPair Obj = getCompleteObject();
8560    if (Obj.first.isInvalid() || Obj.second.isInvalid())
8561      return {ExprError(), ExprError()};
8562
8563    DeclAccessPair Found = DeclAccessPair::make(Field, Field->getAccess());
8564    DeclarationNameInfo NameInfo(Field->getDeclName(), Loc);
8565    return {S.BuildFieldReferenceExpr(Obj.first.get(), /*IsArrow=*/false, Loc,
8566                                      CXXScopeSpec(), Field, Found, NameInfo),
8567            S.BuildFieldReferenceExpr(Obj.second.get(), /*IsArrow=*/false, Loc,
8568                                      CXXScopeSpec(), Field, Found, NameInfo)};
8569  }
8570
8571  // FIXME: When expanding a subobject, register a note in the code synthesis
8572  // stack to say which subobject we're comparing.
8573
8574  StmtResult buildIfNotCondReturnFalse(ExprResult Cond) {
8575    if (Cond.isInvalid())
8576      return StmtError();
8577
8578    ExprResult NotCond = S.CreateBuiltinUnaryOp(Loc, UO_LNot, Cond.get());
8579    if (NotCond.isInvalid())
8580      return StmtError();
8581
8582    ExprResult False = S.ActOnCXXBoolLiteral(Loc, tok::kw_false);
8583    assert(!False.isInvalid() && "should never fail");
8584    StmtResult ReturnFalse = S.BuildReturnStmt(Loc, False.get());
8585    if (ReturnFalse.isInvalid())
8586      return StmtError();
8587
8588    return S.ActOnIfStmt(Loc, IfStatementKind::Ordinary, Loc, nullptr,
8589                         S.ActOnCondition(nullptr, Loc, NotCond.get(),
8590                                          Sema::ConditionKind::Boolean),
8591                         Loc, ReturnFalse.get(), SourceLocation(), nullptr);
8592  }
8593
8594  StmtResult visitSubobjectArray(QualType Type, llvm::APInt Size,
8595                                 ExprPair Subobj) {
8596    QualType SizeType = S.Context.getSizeType();
8597    Size = Size.zextOrTrunc(S.Context.getTypeSize(SizeType));
8598
8599    // Build 'size_t i$n = 0'.
8600    IdentifierInfo *IterationVarName = nullptr;
8601    {
8602      SmallString<8> Str;
8603      llvm::raw_svector_ostream OS(Str);
8604      OS << "i" << ArrayDepth;
8605      IterationVarName = &S.Context.Idents.get(OS.str());
8606    }
8607    VarDecl *IterationVar = VarDecl::Create(
8608        S.Context, S.CurContext, Loc, Loc, IterationVarName, SizeType,
8609        S.Context.getTrivialTypeSourceInfo(SizeType, Loc), SC_None);
8610    llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
8611    IterationVar->setInit(
8612        IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
8613    Stmt *Init = new (S.Context) DeclStmt(DeclGroupRef(IterationVar), Loc, Loc);
8614
8615    auto IterRef = [&] {
8616      ExprResult Ref = S.BuildDeclarationNameExpr(
8617          CXXScopeSpec(), DeclarationNameInfo(IterationVarName, Loc),
8618          IterationVar);
8619      assert(!Ref.isInvalid() && "can't reference our own variable?");
8620      return Ref.get();
8621    };
8622
8623    // Build 'i$n != Size'.
8624    ExprResult Cond = S.CreateBuiltinBinOp(
8625        Loc, BO_NE, IterRef(),
8626        IntegerLiteral::Create(S.Context, Size, SizeType, Loc));
8627    assert(!Cond.isInvalid() && "should never fail");
8628
8629    // Build '++i$n'.
8630    ExprResult Inc = S.CreateBuiltinUnaryOp(Loc, UO_PreInc, IterRef());
8631    assert(!Inc.isInvalid() && "should never fail");
8632
8633    // Build 'a[i$n]' and 'b[i$n]'.
8634    auto Index = [&](ExprResult E) {
8635      if (E.isInvalid())
8636        return ExprError();
8637      return S.CreateBuiltinArraySubscriptExpr(E.get(), Loc, IterRef(), Loc);
8638    };
8639    Subobj.first = Index(Subobj.first);
8640    Subobj.second = Index(Subobj.second);
8641
8642    // Compare the array elements.
8643    ++ArrayDepth;
8644    StmtResult Substmt = visitSubobject(Type, Subobj);
8645    --ArrayDepth;
8646
8647    if (Substmt.isInvalid())
8648      return StmtError();
8649
8650    // For the inner level of an 'operator==', build 'if (!cmp) return false;'.
8651    // For outer levels or for an 'operator<=>' we already have a suitable
8652    // statement that returns as necessary.
8653    if (Expr *ElemCmp = dyn_cast<Expr>(Substmt.get())) {
8654      assert(DCK == DefaultedComparisonKind::Equal &&
8655             "should have non-expression statement");
8656      Substmt = buildIfNotCondReturnFalse(ElemCmp);
8657      if (Substmt.isInvalid())
8658        return StmtError();
8659    }
8660
8661    // Build 'for (...) ...'
8662    return S.ActOnForStmt(Loc, Loc, Init,
8663                          S.ActOnCondition(nullptr, Loc, Cond.get(),
8664                                           Sema::ConditionKind::Boolean),
8665                          S.MakeFullDiscardedValueExpr(Inc.get()), Loc,
8666                          Substmt.get());
8667  }
8668
8669  StmtResult visitExpandedSubobject(QualType Type, ExprPair Obj) {
8670    if (Obj.first.isInvalid() || Obj.second.isInvalid())
8671      return StmtError();
8672
8673    OverloadedOperatorKind OO = FD->getOverloadedOperator();
8674    BinaryOperatorKind Opc = BinaryOperator::getOverloadedOpcode(OO);
8675    ExprResult Op;
8676    if (Type->isOverloadableType())
8677      Op = S.CreateOverloadedBinOp(Loc, Opc, Fns, Obj.first.get(),
8678                                   Obj.second.get(), /*PerformADL=*/true,
8679                                   /*AllowRewrittenCandidates=*/true, FD);
8680    else
8681      Op = S.CreateBuiltinBinOp(Loc, Opc, Obj.first.get(), Obj.second.get());
8682    if (Op.isInvalid())
8683      return StmtError();
8684
8685    switch (DCK) {
8686    case DefaultedComparisonKind::None:
8687      llvm_unreachable("not a defaulted comparison");
8688
8689    case DefaultedComparisonKind::Equal:
8690      // Per C++2a [class.eq]p2, each comparison is individually contextually
8691      // converted to bool.
8692      Op = S.PerformContextuallyConvertToBool(Op.get());
8693      if (Op.isInvalid())
8694        return StmtError();
8695      return Op.get();
8696
8697    case DefaultedComparisonKind::ThreeWay: {
8698      // Per C++2a [class.spaceship]p3, form:
8699      //   if (R cmp = static_cast<R>(op); cmp != 0)
8700      //     return cmp;
8701      QualType R = FD->getReturnType();
8702      Op = buildStaticCastToR(Op.get());
8703      if (Op.isInvalid())
8704        return StmtError();
8705
8706      // R cmp = ...;
8707      IdentifierInfo *Name = &S.Context.Idents.get("cmp");
8708      VarDecl *VD =
8709          VarDecl::Create(S.Context, S.CurContext, Loc, Loc, Name, R,
8710                          S.Context.getTrivialTypeSourceInfo(R, Loc), SC_None);
8711      S.AddInitializerToDecl(VD, Op.get(), /*DirectInit=*/false);
8712      Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(VD), Loc, Loc);
8713
8714      // cmp != 0
8715      ExprResult VDRef = getDecl(VD);
8716      if (VDRef.isInvalid())
8717        return StmtError();
8718      llvm::APInt ZeroVal(S.Context.getIntWidth(S.Context.IntTy), 0);
8719      Expr *Zero =
8720          IntegerLiteral::Create(S.Context, ZeroVal, S.Context.IntTy, Loc);
8721      ExprResult Comp;
8722      if (VDRef.get()->getType()->isOverloadableType())
8723        Comp = S.CreateOverloadedBinOp(Loc, BO_NE, Fns, VDRef.get(), Zero, true,
8724                                       true, FD);
8725      else
8726        Comp = S.CreateBuiltinBinOp(Loc, BO_NE, VDRef.get(), Zero);
8727      if (Comp.isInvalid())
8728        return StmtError();
8729      Sema::ConditionResult Cond = S.ActOnCondition(
8730          nullptr, Loc, Comp.get(), Sema::ConditionKind::Boolean);
8731      if (Cond.isInvalid())
8732        return StmtError();
8733
8734      // return cmp;
8735      VDRef = getDecl(VD);
8736      if (VDRef.isInvalid())
8737        return StmtError();
8738      StmtResult ReturnStmt = S.BuildReturnStmt(Loc, VDRef.get());
8739      if (ReturnStmt.isInvalid())
8740        return StmtError();
8741
8742      // if (...)
8743      return S.ActOnIfStmt(Loc, IfStatementKind::Ordinary, Loc, InitStmt, Cond,
8744                           Loc, ReturnStmt.get(),
8745                           /*ElseLoc=*/SourceLocation(), /*Else=*/nullptr);
8746    }
8747
8748    case DefaultedComparisonKind::NotEqual:
8749    case DefaultedComparisonKind::Relational:
8750      // C++2a [class.compare.secondary]p2:
8751      //   Otherwise, the operator function yields x @ y.
8752      return Op.get();
8753    }
8754    llvm_unreachable("");
8755  }
8756
8757  /// Build "static_cast<R>(E)".
8758  ExprResult buildStaticCastToR(Expr *E) {
8759    QualType R = FD->getReturnType();
8760    assert(!R->isUndeducedType() && "type should have been deduced already");
8761
8762    // Don't bother forming a no-op cast in the common case.
8763    if (E->isPRValue() && S.Context.hasSameType(E->getType(), R))
8764      return E;
8765    return S.BuildCXXNamedCast(Loc, tok::kw_static_cast,
8766                               S.Context.getTrivialTypeSourceInfo(R, Loc), E,
8767                               SourceRange(Loc, Loc), SourceRange(Loc, Loc));
8768  }
8769};
8770}
8771
8772/// Perform the unqualified lookups that might be needed to form a defaulted
8773/// comparison function for the given operator.
8774static void lookupOperatorsForDefaultedComparison(Sema &Self, Scope *S,
8775                                                  UnresolvedSetImpl &Operators,
8776                                                  OverloadedOperatorKind Op) {
8777  auto Lookup = [&](OverloadedOperatorKind OO) {
8778    Self.LookupOverloadedOperatorName(OO, S, Operators);
8779  };
8780
8781  // Every defaulted operator looks up itself.
8782  Lookup(Op);
8783  // ... and the rewritten form of itself, if any.
8784  if (OverloadedOperatorKind ExtraOp = getRewrittenOverloadedOperator(Op))
8785    Lookup(ExtraOp);
8786
8787  // For 'operator<=>', we also form a 'cmp != 0' expression, and might
8788  // synthesize a three-way comparison from '<' and '=='. In a dependent
8789  // context, we also need to look up '==' in case we implicitly declare a
8790  // defaulted 'operator=='.
8791  if (Op == OO_Spaceship) {
8792    Lookup(OO_ExclaimEqual);
8793    Lookup(OO_Less);
8794    Lookup(OO_EqualEqual);
8795  }
8796}
8797
8798bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD,
8799                                              DefaultedComparisonKind DCK) {
8800  assert(DCK != DefaultedComparisonKind::None && "not a defaulted comparison");
8801
8802  // Perform any unqualified lookups we're going to need to default this
8803  // function.
8804  if (S) {
8805    UnresolvedSet<32> Operators;
8806    lookupOperatorsForDefaultedComparison(*this, S, Operators,
8807                                          FD->getOverloadedOperator());
8808    FD->setDefaultedFunctionInfo(FunctionDecl::DefaultedFunctionInfo::Create(
8809        Context, Operators.pairs()));
8810  }
8811
8812  // C++2a [class.compare.default]p1:
8813  //   A defaulted comparison operator function for some class C shall be a
8814  //   non-template function declared in the member-specification of C that is
8815  //    -- a non-static const non-volatile member of C having one parameter of
8816  //       type const C& and either no ref-qualifier or the ref-qualifier &, or
8817  //    -- a friend of C having two parameters of type const C& or two
8818  //       parameters of type C.
8819
8820  CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext());
8821  bool IsMethod = isa<CXXMethodDecl>(FD);
8822  if (IsMethod) {
8823    auto *MD = cast<CXXMethodDecl>(FD);
8824    assert(!MD->isStatic() && "comparison function cannot be a static member");
8825
8826    if (MD->getRefQualifier() == RQ_RValue) {
8827      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);
8828
8829      // Remove the ref qualifier to recover.
8830      const auto *FPT = MD->getType()->castAs<FunctionProtoType>();
8831      FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8832      EPI.RefQualifier = RQ_None;
8833      MD->setType(Context.getFunctionType(FPT->getReturnType(),
8834                                          FPT->getParamTypes(), EPI));
8835    }
8836
8837    // If we're out-of-class, this is the class we're comparing.
8838    if (!RD)
8839      RD = MD->getParent();
8840    QualType T = MD->getFunctionObjectParameterType();
8841    if (!T.isConstQualified()) {
8842      SourceLocation Loc, InsertLoc;
8843      if (MD->isExplicitObjectMemberFunction()) {
8844        Loc = MD->getParamDecl(0)->getBeginLoc();
8845        InsertLoc = getLocForEndOfToken(
8846            MD->getParamDecl(0)->getExplicitObjectParamThisLoc());
8847      } else {
8848        Loc = MD->getLocation();
8849        if (FunctionTypeLoc Loc = MD->getFunctionTypeLoc())
8850          InsertLoc = Loc.getRParenLoc();
8851      }
8852      // Don't diagnose an implicit 'operator=='; we will have diagnosed the
8853      // corresponding defaulted 'operator<=>' already.
8854      if (!MD->isImplicit()) {
8855        Diag(Loc, diag::err_defaulted_comparison_non_const)
8856            << (int)DCK << FixItHint::CreateInsertion(InsertLoc, " const");
8857      }
8858
8859      // Add the 'const' to the type to recover.
8860      const auto *FPT = MD->getType()->castAs<FunctionProtoType>();
8861      FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8862      EPI.TypeQuals.addConst();
8863      MD->setType(Context.getFunctionType(FPT->getReturnType(),
8864                                          FPT->getParamTypes(), EPI));
8865    }
8866
8867    if (MD->isVolatile()) {
8868      Diag(MD->getLocation(), diag::err_volatile_comparison_operator);
8869
8870      // Remove the 'volatile' from the type to recover.
8871      const auto *FPT = MD->getType()->castAs<FunctionProtoType>();
8872      FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8873      EPI.TypeQuals.removeVolatile();
8874      MD->setType(Context.getFunctionType(FPT->getReturnType(),
8875                                          FPT->getParamTypes(), EPI));
8876    }
8877  }
8878
8879  if ((FD->getNumParams() -
8880       (unsigned)FD->hasCXXExplicitFunctionObjectParameter()) !=
8881      (IsMethod ? 1 : 2)) {
8882    // Let's not worry about using a variadic template pack here -- who would do
8883    // such a thing?
8884    Diag(FD->getLocation(), diag::err_defaulted_comparison_num_args)
8885        << int(IsMethod) << int(DCK);
8886    return true;
8887  }
8888
8889  const ParmVarDecl *KnownParm = nullptr;
8890  for (const ParmVarDecl *Param : FD->parameters()) {
8891    if (Param->isExplicitObjectParameter())
8892      continue;
8893    QualType ParmTy = Param->getType();
8894
8895    if (!KnownParm) {
8896      auto CTy = ParmTy;
8897      // Is it `T const &`?
8898      bool Ok = !IsMethod;
8899      QualType ExpectedTy;
8900      if (RD)
8901        ExpectedTy = Context.getRecordType(RD);
8902      if (auto *Ref = CTy->getAs<ReferenceType>()) {
8903        CTy = Ref->getPointeeType();
8904        if (RD)
8905          ExpectedTy.addConst();
8906        Ok = true;
8907      }
8908
8909      // Is T a class?
8910      if (!Ok) {
8911      } else if (RD) {
8912        if (!RD->isDependentType() && !Context.hasSameType(CTy, ExpectedTy))
8913          Ok = false;
8914      } else if (auto *CRD = CTy->getAsRecordDecl()) {
8915        RD = cast<CXXRecordDecl>(CRD);
8916      } else {
8917        Ok = false;
8918      }
8919
8920      if (Ok) {
8921        KnownParm = Param;
8922      } else {
8923        // Don't diagnose an implicit 'operator=='; we will have diagnosed the
8924        // corresponding defaulted 'operator<=>' already.
8925        if (!FD->isImplicit()) {
8926          if (RD) {
8927            QualType PlainTy = Context.getRecordType(RD);
8928            QualType RefTy =
8929                Context.getLValueReferenceType(PlainTy.withConst());
8930            Diag(FD->getLocation(), diag::err_defaulted_comparison_param)
8931                << int(DCK) << ParmTy << RefTy << int(!IsMethod) << PlainTy
8932                << Param->getSourceRange();
8933          } else {
8934            assert(!IsMethod && "should know expected type for method");
8935            Diag(FD->getLocation(),
8936                 diag::err_defaulted_comparison_param_unknown)
8937                << int(DCK) << ParmTy << Param->getSourceRange();
8938          }
8939        }
8940        return true;
8941      }
8942    } else if (!Context.hasSameType(KnownParm->getType(), ParmTy)) {
8943      Diag(FD->getLocation(), diag::err_defaulted_comparison_param_mismatch)
8944          << int(DCK) << KnownParm->getType() << KnownParm->getSourceRange()
8945          << ParmTy << Param->getSourceRange();
8946      return true;
8947    }
8948  }
8949
8950  assert(RD && "must have determined class");
8951  if (IsMethod) {
8952  } else if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
8953    // In-class, must be a friend decl.
8954    assert(FD->getFriendObjectKind() && "expected a friend declaration");
8955  } else {
8956    // Out of class, require the defaulted comparison to be a friend (of a
8957    // complete type).
8958    if (RequireCompleteType(FD->getLocation(), Context.getRecordType(RD),
8959                            diag::err_defaulted_comparison_not_friend, int(DCK),
8960                            int(1)))
8961      return true;
8962
8963    if (llvm::none_of(RD->friends(), [&](const FriendDecl *F) {
8964          return FD->getCanonicalDecl() ==
8965                 F->getFriendDecl()->getCanonicalDecl();
8966        })) {
8967      Diag(FD->getLocation(), diag::err_defaulted_comparison_not_friend)
8968          << int(DCK) << int(0) << RD;
8969      Diag(RD->getCanonicalDecl()->getLocation(), diag::note_declared_at);
8970      return true;
8971    }
8972  }
8973
8974  // C++2a [class.eq]p1, [class.rel]p1:
8975  //   A [defaulted comparison other than <=>] shall have a declared return
8976  //   type bool.
8977  if (DCK != DefaultedComparisonKind::ThreeWay &&
8978      !FD->getDeclaredReturnType()->isDependentType() &&
8979      !Context.hasSameType(FD->getDeclaredReturnType(), Context.BoolTy)) {
8980    Diag(FD->getLocation(), diag::err_defaulted_comparison_return_type_not_bool)
8981        << (int)DCK << FD->getDeclaredReturnType() << Context.BoolTy
8982        << FD->getReturnTypeSourceRange();
8983    return true;
8984  }
8985  // C++2a [class.spaceship]p2 [P2002R0]:
8986  //   Let R be the declared return type [...]. If R is auto, [...]. Otherwise,
8987  //   R shall not contain a placeholder type.
8988  if (QualType RT = FD->getDeclaredReturnType();
8989      DCK == DefaultedComparisonKind::ThreeWay &&
8990      RT->getContainedDeducedType() &&
8991      (!Context.hasSameType(RT, Context.getAutoDeductType()) ||
8992       RT->getContainedAutoType()->isConstrained())) {
8993    Diag(FD->getLocation(),
8994         diag::err_defaulted_comparison_deduced_return_type_not_auto)
8995        << (int)DCK << FD->getDeclaredReturnType() << Context.AutoDeductTy
8996        << FD->getReturnTypeSourceRange();
8997    return true;
8998  }
8999
9000  // For a defaulted function in a dependent class, defer all remaining checks
9001  // until instantiation.
9002  if (RD->isDependentType())
9003    return false;
9004
9005  // Determine whether the function should be defined as deleted.
9006  DefaultedComparisonInfo Info =
9007      DefaultedComparisonAnalyzer(*this, RD, FD, DCK).visit();
9008
9009  bool First = FD == FD->getCanonicalDecl();
9010
9011  if (!First) {
9012    if (Info.Deleted) {
9013      // C++11 [dcl.fct.def.default]p4:
9014      //   [For a] user-provided explicitly-defaulted function [...] if such a
9015      //   function is implicitly defined as deleted, the program is ill-formed.
9016      //
9017      // This is really just a consequence of the general rule that you can
9018      // only delete a function on its first declaration.
9019      Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes)
9020          << FD->isImplicit() << (int)DCK;
9021      DefaultedComparisonAnalyzer(*this, RD, FD, DCK,
9022                                  DefaultedComparisonAnalyzer::ExplainDeleted)
9023          .visit();
9024      return true;
9025    }
9026    if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
9027      // C++20 [class.compare.default]p1:
9028      //   [...] A definition of a comparison operator as defaulted that appears
9029      //   in a class shall be the first declaration of that function.
9030      Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class)
9031          << (int)DCK;
9032      Diag(FD->getCanonicalDecl()->getLocation(),
9033           diag::note_previous_declaration);
9034      return true;
9035    }
9036  }
9037
9038  // If we want to delete the function, then do so; there's nothing else to
9039  // check in that case.
9040  if (Info.Deleted) {
9041    SetDeclDeleted(FD, FD->getLocation());
9042    if (!inTemplateInstantiation() && !FD->isImplicit()) {
9043      Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted)
9044          << (int)DCK;
9045      DefaultedComparisonAnalyzer(*this, RD, FD, DCK,
9046                                  DefaultedComparisonAnalyzer::ExplainDeleted)
9047          .visit();
9048      if (FD->getDefaultLoc().isValid())
9049        Diag(FD->getDefaultLoc(), diag::note_replace_equals_default_to_delete)
9050            << FixItHint::CreateReplacement(FD->getDefaultLoc(), "delete");
9051    }
9052    return false;
9053  }
9054
9055  // C++2a [class.spaceship]p2:
9056  //   The return type is deduced as the common comparison type of R0, R1, ...
9057  if (DCK == DefaultedComparisonKind::ThreeWay &&
9058      FD->getDeclaredReturnType()->isUndeducedAutoType()) {
9059    SourceLocation RetLoc = FD->getReturnTypeSourceRange().getBegin();
9060    if (RetLoc.isInvalid())
9061      RetLoc = FD->getBeginLoc();
9062    // FIXME: Should we really care whether we have the complete type and the
9063    // 'enumerator' constants here? A forward declaration seems sufficient.
9064    QualType Cat = CheckComparisonCategoryType(
9065        Info.Category, RetLoc, ComparisonCategoryUsage::DefaultedOperator);
9066    if (Cat.isNull())
9067      return true;
9068    Context.adjustDeducedFunctionResultType(
9069        FD, SubstAutoType(FD->getDeclaredReturnType(), Cat));
9070  }
9071
9072  // C++2a [dcl.fct.def.default]p3 [P2002R0]:
9073  //   An explicitly-defaulted function that is not defined as deleted may be
9074  //   declared constexpr or consteval only if it is constexpr-compatible.
9075  // C++2a [class.compare.default]p3 [P2002R0]:
9076  //   A defaulted comparison function is constexpr-compatible if it satisfies
9077  //   the requirements for a constexpr function [...]
9078  // The only relevant requirements are that the parameter and return types are
9079  // literal types. The remaining conditions are checked by the analyzer.
9080  //
9081  // We support P2448R2 in language modes earlier than C++23 as an extension.
9082  // The concept of constexpr-compatible was removed.
9083  // C++23 [dcl.fct.def.default]p3 [P2448R2]
9084  //  A function explicitly defaulted on its first declaration is implicitly
9085  //  inline, and is implicitly constexpr if it is constexpr-suitable.
9086  // C++23 [dcl.constexpr]p3
9087  //   A function is constexpr-suitable if
9088  //    - it is not a coroutine, and
9089  //    - if the function is a constructor or destructor, its class does not
9090  //      have any virtual base classes.
9091  if (FD->isConstexpr()) {
9092    if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) &&
9093        CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) &&
9094        !Info.Constexpr) {
9095      Diag(FD->getBeginLoc(),
9096           getLangOpts().CPlusPlus23
9097               ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch
9098               : diag::ext_defaulted_comparison_constexpr_mismatch)
9099          << FD->isImplicit() << (int)DCK << FD->isConsteval();
9100      DefaultedComparisonAnalyzer(*this, RD, FD, DCK,
9101                                  DefaultedComparisonAnalyzer::ExplainConstexpr)
9102          .visit();
9103    }
9104  }
9105
9106  // C++2a [dcl.fct.def.default]p3 [P2002R0]:
9107  //   If a constexpr-compatible function is explicitly defaulted on its first
9108  //   declaration, it is implicitly considered to be constexpr.
9109  // FIXME: Only applying this to the first declaration seems problematic, as
9110  // simple reorderings can affect the meaning of the program.
9111  if (First && !FD->isConstexpr() && Info.Constexpr)
9112    FD->setConstexprKind(ConstexprSpecKind::Constexpr);
9113
9114  // C++2a [except.spec]p3:
9115  //   If a declaration of a function does not have a noexcept-specifier
9116  //   [and] is defaulted on its first declaration, [...] the exception
9117  //   specification is as specified below
9118  if (FD->getExceptionSpecType() == EST_None) {
9119    auto *FPT = FD->getType()->castAs<FunctionProtoType>();
9120    FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
9121    EPI.ExceptionSpec.Type = EST_Unevaluated;
9122    EPI.ExceptionSpec.SourceDecl = FD;
9123    FD->setType(Context.getFunctionType(FPT->getReturnType(),
9124                                        FPT->getParamTypes(), EPI));
9125  }
9126
9127  return false;
9128}
9129
9130void Sema::DeclareImplicitEqualityComparison(CXXRecordDecl *RD,
9131                                             FunctionDecl *Spaceship) {
9132  Sema::CodeSynthesisContext Ctx;
9133  Ctx.Kind = Sema::CodeSynthesisContext::DeclaringImplicitEqualityComparison;
9134  Ctx.PointOfInstantiation = Spaceship->getEndLoc();
9135  Ctx.Entity = Spaceship;
9136  pushCodeSynthesisContext(Ctx);
9137
9138  if (FunctionDecl *EqualEqual = SubstSpaceshipAsEqualEqual(RD, Spaceship))
9139    EqualEqual->setImplicit();
9140
9141  popCodeSynthesisContext();
9142}
9143
9144void Sema::DefineDefaultedComparison(SourceLocation UseLoc, FunctionDecl *FD,
9145                                     DefaultedComparisonKind DCK) {
9146  assert(FD->isDefaulted() && !FD->isDeleted() &&
9147         !FD->doesThisDeclarationHaveABody());
9148  if (FD->willHaveBody() || FD->isInvalidDecl())
9149    return;
9150
9151  SynthesizedFunctionScope Scope(*this, FD);
9152
9153  // Add a context note for diagnostics produced after this point.
9154  Scope.addContextNote(UseLoc);
9155
9156  {
9157    // Build and set up the function body.
9158    // The first parameter has type maybe-ref-to maybe-const T, use that to get
9159    // the type of the class being compared.
9160    auto PT = FD->getParamDecl(0)->getType();
9161    CXXRecordDecl *RD = PT.getNonReferenceType()->getAsCXXRecordDecl();
9162    SourceLocation BodyLoc =
9163        FD->getEndLoc().isValid() ? FD->getEndLoc() : FD->getLocation();
9164    StmtResult Body =
9165        DefaultedComparisonSynthesizer(*this, RD, FD, DCK, BodyLoc).build();
9166    if (Body.isInvalid()) {
9167      FD->setInvalidDecl();
9168      return;
9169    }
9170    FD->setBody(Body.get());
9171    FD->markUsed(Context);
9172  }
9173
9174  // The exception specification is needed because we are defining the
9175  // function. Note that this will reuse the body we just built.
9176  ResolveExceptionSpec(UseLoc, FD->getType()->castAs<FunctionProtoType>());
9177
9178  if (ASTMutationListener *L = getASTMutationListener())
9179    L->CompletedImplicitDefinition(FD);
9180}
9181
9182static Sema::ImplicitExceptionSpecification
9183ComputeDefaultedComparisonExceptionSpec(Sema &S, SourceLocation Loc,
9184                                        FunctionDecl *FD,
9185                                        Sema::DefaultedComparisonKind DCK) {
9186  ComputingExceptionSpec CES(S, FD, Loc);
9187  Sema::ImplicitExceptionSpecification ExceptSpec(S);
9188
9189  if (FD->isInvalidDecl())
9190    return ExceptSpec;
9191
9192  // The common case is that we just defined the comparison function. In that
9193  // case, just look at whether the body can throw.
9194  if (FD->hasBody()) {
9195    ExceptSpec.CalledStmt(FD->getBody());
9196  } else {
9197    // Otherwise, build a body so we can check it. This should ideally only
9198    // happen when we're not actually marking the function referenced. (This is
9199    // only really important for efficiency: we don't want to build and throw
9200    // away bodies for comparison functions more than we strictly need to.)
9201
9202    // Pretend to synthesize the function body in an unevaluated context.
9203    // Note that we can't actually just go ahead and define the function here:
9204    // we are not permitted to mark its callees as referenced.
9205    Sema::SynthesizedFunctionScope Scope(S, FD);
9206    EnterExpressionEvaluationContext Context(
9207        S, Sema::ExpressionEvaluationContext::Unevaluated);
9208
9209    CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getLexicalParent());
9210    SourceLocation BodyLoc =
9211        FD->getEndLoc().isValid() ? FD->getEndLoc() : FD->getLocation();
9212    StmtResult Body =
9213        DefaultedComparisonSynthesizer(S, RD, FD, DCK, BodyLoc).build();
9214    if (!Body.isInvalid())
9215      ExceptSpec.CalledStmt(Body.get());
9216
9217    // FIXME: Can we hold onto this body and just transform it to potentially
9218    // evaluated when we're asked to define the function rather than rebuilding
9219    // it? Either that, or we should only build the bits of the body that we
9220    // need (the expressions, not the statements).
9221  }
9222
9223  return ExceptSpec;
9224}
9225
9226void Sema::CheckDelayedMemberExceptionSpecs() {
9227  decltype(DelayedOverridingExceptionSpecChecks) Overriding;
9228  decltype(DelayedEquivalentExceptionSpecChecks) Equivalent;
9229
9230  std::swap(Overriding, DelayedOverridingExceptionSpecChecks);
9231  std::swap(Equivalent, DelayedEquivalentExceptionSpecChecks);
9232
9233  // Perform any deferred checking of exception specifications for virtual
9234  // destructors.
9235  for (auto &Check : Overriding)
9236    CheckOverridingFunctionExceptionSpec(Check.first, Check.second);
9237
9238  // Perform any deferred checking of exception specifications for befriended
9239  // special members.
9240  for (auto &Check : Equivalent)
9241    CheckEquivalentExceptionSpec(Check.second, Check.first);
9242}
9243
9244namespace {
9245/// CRTP base class for visiting operations performed by a special member
9246/// function (or inherited constructor).
9247template<typename Derived>
9248struct SpecialMemberVisitor {
9249  Sema &S;
9250  CXXMethodDecl *MD;
9251  Sema::CXXSpecialMember CSM;
9252  Sema::InheritedConstructorInfo *ICI;
9253
9254  // Properties of the special member, computed for convenience.
9255  bool IsConstructor = false, IsAssignment = false, ConstArg = false;
9256
9257  SpecialMemberVisitor(Sema &S, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
9258                       Sema::InheritedConstructorInfo *ICI)
9259      : S(S), MD(MD), CSM(CSM), ICI(ICI) {
9260    switch (CSM) {
9261    case Sema::CXXDefaultConstructor:
9262    case Sema::CXXCopyConstructor:
9263    case Sema::CXXMoveConstructor:
9264      IsConstructor = true;
9265      break;
9266    case Sema::CXXCopyAssignment:
9267    case Sema::CXXMoveAssignment:
9268      IsAssignment = true;
9269      break;
9270    case Sema::CXXDestructor:
9271      break;
9272    case Sema::CXXInvalid:
9273      llvm_unreachable("invalid special member kind");
9274    }
9275
9276    if (MD->getNumExplicitParams()) {
9277      if (const ReferenceType *RT =
9278              MD->getNonObjectParameter(0)->getType()->getAs<ReferenceType>())
9279        ConstArg = RT->getPointeeType().isConstQualified();
9280    }
9281  }
9282
9283  Derived &getDerived() { return static_cast<Derived&>(*this); }
9284
9285  /// Is this a "move" special member?
9286  bool isMove() const {
9287    return CSM == Sema::CXXMoveConstructor || CSM == Sema::CXXMoveAssignment;
9288  }
9289
9290  /// Look up the corresponding special member in the given class.
9291  Sema::SpecialMemberOverloadResult lookupIn(CXXRecordDecl *Class,
9292                                             unsigned Quals, bool IsMutable) {
9293    return lookupCallFromSpecialMember(S, Class, CSM, Quals,
9294                                       ConstArg && !IsMutable);
9295  }
9296
9297  /// Look up the constructor for the specified base class to see if it's
9298  /// overridden due to this being an inherited constructor.
9299  Sema::SpecialMemberOverloadResult lookupInheritedCtor(CXXRecordDecl *Class) {
9300    if (!ICI)
9301      return {};
9302    assert(CSM == Sema::CXXDefaultConstructor);
9303    auto *BaseCtor =
9304      cast<CXXConstructorDecl>(MD)->getInheritedConstructor().getConstructor();
9305    if (auto *MD = ICI->findConstructorForBase(Class, BaseCtor).first)
9306      return MD;
9307    return {};
9308  }
9309
9310  /// A base or member subobject.
9311  typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
9312
9313  /// Get the location to use for a subobject in diagnostics.
9314  static SourceLocation getSubobjectLoc(Subobject Subobj) {
9315    // FIXME: For an indirect virtual base, the direct base leading to
9316    // the indirect virtual base would be a more useful choice.
9317    if (auto *B = Subobj.dyn_cast<CXXBaseSpecifier*>())
9318      return B->getBaseTypeLoc();
9319    else
9320      return Subobj.get<FieldDecl*>()->getLocation();
9321  }
9322
9323  enum BasesToVisit {
9324    /// Visit all non-virtual (direct) bases.
9325    VisitNonVirtualBases,
9326    /// Visit all direct bases, virtual or not.
9327    VisitDirectBases,
9328    /// Visit all non-virtual bases, and all virtual bases if the class
9329    /// is not abstract.
9330    VisitPotentiallyConstructedBases,
9331    /// Visit all direct or virtual bases.
9332    VisitAllBases
9333  };
9334
9335  // Visit the bases and members of the class.
9336  bool visit(BasesToVisit Bases) {
9337    CXXRecordDecl *RD = MD->getParent();
9338
9339    if (Bases == VisitPotentiallyConstructedBases)
9340      Bases = RD->isAbstract() ? VisitNonVirtualBases : VisitAllBases;
9341
9342    for (auto &B : RD->bases())
9343      if ((Bases == VisitDirectBases || !B.isVirtual()) &&
9344          getDerived().visitBase(&B))
9345        return true;
9346
9347    if (Bases == VisitAllBases)
9348      for (auto &B : RD->vbases())
9349        if (getDerived().visitBase(&B))
9350          return true;
9351
9352    for (auto *F : RD->fields())
9353      if (!F->isInvalidDecl() && !F->isUnnamedBitfield() &&
9354          getDerived().visitField(F))
9355        return true;
9356
9357    return false;
9358  }
9359};
9360}
9361
9362namespace {
9363struct SpecialMemberDeletionInfo
9364    : SpecialMemberVisitor<SpecialMemberDeletionInfo> {
9365  bool Diagnose;
9366
9367  SourceLocation Loc;
9368
9369  bool AllFieldsAreConst;
9370
9371  SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
9372                            Sema::CXXSpecialMember CSM,
9373                            Sema::InheritedConstructorInfo *ICI, bool Diagnose)
9374      : SpecialMemberVisitor(S, MD, CSM, ICI), Diagnose(Diagnose),
9375        Loc(MD->getLocation()), AllFieldsAreConst(true) {}
9376
9377  bool inUnion() const { return MD->getParent()->isUnion(); }
9378
9379  Sema::CXXSpecialMember getEffectiveCSM() {
9380    return ICI ? Sema::CXXInvalid : CSM;
9381  }
9382
9383  bool shouldDeleteForVariantObjCPtrMember(FieldDecl *FD, QualType FieldType);
9384
9385  bool visitBase(CXXBaseSpecifier *Base) { return shouldDeleteForBase(Base); }
9386  bool visitField(FieldDecl *Field) { return shouldDeleteForField(Field); }
9387
9388  bool shouldDeleteForBase(CXXBaseSpecifier *Base);
9389  bool shouldDeleteForField(FieldDecl *FD);
9390  bool shouldDeleteForAllConstMembers();
9391
9392  bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
9393                                     unsigned Quals);
9394  bool shouldDeleteForSubobjectCall(Subobject Subobj,
9395                                    Sema::SpecialMemberOverloadResult SMOR,
9396                                    bool IsDtorCallInCtor);
9397
9398  bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
9399};
9400}
9401
9402/// Is the given special member inaccessible when used on the given
9403/// sub-object.
9404bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
9405                                             CXXMethodDecl *target) {
9406  /// If we're operating on a base class, the object type is the
9407  /// type of this special member.
9408  QualType objectTy;
9409  AccessSpecifier access = target->getAccess();
9410  if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
9411    objectTy = S.Context.getTypeDeclType(MD->getParent());
9412    access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
9413
9414  // If we're operating on a field, the object type is the type of the field.
9415  } else {
9416    objectTy = S.Context.getTypeDeclType(target->getParent());
9417  }
9418
9419  return S.isMemberAccessibleForDeletion(
9420      target->getParent(), DeclAccessPair::make(target, access), objectTy);
9421}
9422
9423/// Check whether we should delete a special member due to the implicit
9424/// definition containing a call to a special member of a subobject.
9425bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
9426    Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR,
9427    bool IsDtorCallInCtor) {
9428  CXXMethodDecl *Decl = SMOR.getMethod();
9429  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
9430
9431  int DiagKind = -1;
9432
9433  if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
9434    DiagKind = !Decl ? 0 : 1;
9435  else if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
9436    DiagKind = 2;
9437  else if (!isAccessible(Subobj, Decl))
9438    DiagKind = 3;
9439  else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
9440           !Decl->isTrivial()) {
9441    // A member of a union must have a trivial corresponding special member.
9442    // As a weird special case, a destructor call from a union's constructor
9443    // must be accessible and non-deleted, but need not be trivial. Such a
9444    // destructor is never actually called, but is semantically checked as
9445    // if it were.
9446    if (CSM == Sema::CXXDefaultConstructor) {
9447      // [class.default.ctor]p2:
9448      //   A defaulted default constructor for class X is defined as deleted if
9449      //   - X is a union that has a variant member with a non-trivial default
9450      //     constructor and no variant member of X has a default member
9451      //     initializer
9452      const auto *RD = cast<CXXRecordDecl>(Field->getParent());
9453      if (!RD->hasInClassInitializer())
9454        DiagKind = 4;
9455    } else {
9456      DiagKind = 4;
9457    }
9458  }
9459
9460  if (DiagKind == -1)
9461    return false;
9462
9463  if (Diagnose) {
9464    if (Field) {
9465      S.Diag(Field->getLocation(),
9466             diag::note_deleted_special_member_class_subobject)
9467        << getEffectiveCSM() << MD->getParent() << /*IsField*/true
9468        << Field << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/false;
9469    } else {
9470      CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
9471      S.Diag(Base->getBeginLoc(),
9472             diag::note_deleted_special_member_class_subobject)
9473          << getEffectiveCSM() << MD->getParent() << /*IsField*/ false
9474          << Base->getType() << DiagKind << IsDtorCallInCtor
9475          << /*IsObjCPtr*/false;
9476    }
9477
9478    if (DiagKind == 1)
9479      S.NoteDeletedFunction(Decl);
9480    // FIXME: Explain inaccessibility if DiagKind == 3.
9481  }
9482
9483  return true;
9484}
9485
9486/// Check whether we should delete a special member function due to having a
9487/// direct or virtual base class or non-static data member of class type M.
9488bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
9489    CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
9490  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
9491  bool IsMutable = Field && Field->isMutable();
9492
9493  // C++11 [class.ctor]p5:
9494  // -- any direct or virtual base class, or non-static data member with no
9495  //    brace-or-equal-initializer, has class type M (or array thereof) and
9496  //    either M has no default constructor or overload resolution as applied
9497  //    to M's default constructor results in an ambiguity or in a function
9498  //    that is deleted or inaccessible
9499  // C++11 [class.copy]p11, C++11 [class.copy]p23:
9500  // -- a direct or virtual base class B that cannot be copied/moved because
9501  //    overload resolution, as applied to B's corresponding special member,
9502  //    results in an ambiguity or a function that is deleted or inaccessible
9503  //    from the defaulted special member
9504  // C++11 [class.dtor]p5:
9505  // -- any direct or virtual base class [...] has a type with a destructor
9506  //    that is deleted or inaccessible
9507  if (!(CSM == Sema::CXXDefaultConstructor &&
9508        Field && Field->hasInClassInitializer()) &&
9509      shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals, IsMutable),
9510                                   false))
9511    return true;
9512
9513  // C++11 [class.ctor]p5, C++11 [class.copy]p11:
9514  // -- any direct or virtual base class or non-static data member has a
9515  //    type with a destructor that is deleted or inaccessible
9516  if (IsConstructor) {
9517    Sema::SpecialMemberOverloadResult SMOR =
9518        S.LookupSpecialMember(Class, Sema::CXXDestructor,
9519                              false, false, false, false, false);
9520    if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
9521      return true;
9522  }
9523
9524  return false;
9525}
9526
9527bool SpecialMemberDeletionInfo::shouldDeleteForVariantObjCPtrMember(
9528    FieldDecl *FD, QualType FieldType) {
9529  // The defaulted special functions are defined as deleted if this is a variant
9530  // member with a non-trivial ownership type, e.g., ObjC __strong or __weak
9531  // type under ARC.
9532  if (!FieldType.hasNonTrivialObjCLifetime())
9533    return false;
9534
9535  // Don't make the defaulted default constructor defined as deleted if the
9536  // member has an in-class initializer.
9537  if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer())
9538    return false;
9539
9540  if (Diagnose) {
9541    auto *ParentClass = cast<CXXRecordDecl>(FD->getParent());
9542    S.Diag(FD->getLocation(),
9543           diag::note_deleted_special_member_class_subobject)
9544        << getEffectiveCSM() << ParentClass << /*IsField*/true
9545        << FD << 4 << /*IsDtorCallInCtor*/false << /*IsObjCPtr*/true;
9546  }
9547
9548  return true;
9549}
9550
9551/// Check whether we should delete a special member function due to the class
9552/// having a particular direct or virtual base class.
9553bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
9554  CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
9555  // If program is correct, BaseClass cannot be null, but if it is, the error
9556  // must be reported elsewhere.
9557  if (!BaseClass)
9558    return false;
9559  // If we have an inheriting constructor, check whether we're calling an
9560  // inherited constructor instead of a default constructor.
9561  Sema::SpecialMemberOverloadResult SMOR = lookupInheritedCtor(BaseClass);
9562  if (auto *BaseCtor = SMOR.getMethod()) {
9563    // Note that we do not check access along this path; other than that,
9564    // this is the same as shouldDeleteForSubobjectCall(Base, BaseCtor, false);
9565    // FIXME: Check that the base has a usable destructor! Sink this into
9566    // shouldDeleteForClassSubobject.
9567    if (BaseCtor->isDeleted() && Diagnose) {
9568      S.Diag(Base->getBeginLoc(),
9569             diag::note_deleted_special_member_class_subobject)
9570          << getEffectiveCSM() << MD->getParent() << /*IsField*/ false
9571          << Base->getType() << /*Deleted*/ 1 << /*IsDtorCallInCtor*/ false
9572          << /*IsObjCPtr*/false;
9573      S.NoteDeletedFunction(BaseCtor);
9574    }
9575    return BaseCtor->isDeleted();
9576  }
9577  return shouldDeleteForClassSubobject(BaseClass, Base, 0);
9578}
9579
9580/// Check whether we should delete a special member function due to the class
9581/// having a particular non-static data member.
9582bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
9583  QualType FieldType = S.Context.getBaseElementType(FD->getType());
9584  CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
9585
9586  if (inUnion() && shouldDeleteForVariantObjCPtrMember(FD, FieldType))
9587    return true;
9588
9589  if (CSM == Sema::CXXDefaultConstructor) {
9590    // For a default constructor, all references must be initialized in-class
9591    // and, if a union, it must have a non-const member.
9592    if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
9593      if (Diagnose)
9594        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
9595          << !!ICI << MD->getParent() << FD << FieldType << /*Reference*/0;
9596      return true;
9597    }
9598    // C++11 [class.ctor]p5 (modified by DR2394): any non-variant non-static
9599    // data member of const-qualified type (or array thereof) with no
9600    // brace-or-equal-initializer is not const-default-constructible.
9601    if (!inUnion() && FieldType.isConstQualified() &&
9602        !FD->hasInClassInitializer() &&
9603        (!FieldRecord || !FieldRecord->allowConstDefaultInit())) {
9604      if (Diagnose)
9605        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
9606          << !!ICI << MD->getParent() << FD << FD->getType() << /*Const*/1;
9607      return true;
9608    }
9609
9610    if (inUnion() && !FieldType.isConstQualified())
9611      AllFieldsAreConst = false;
9612  } else if (CSM == Sema::CXXCopyConstructor) {
9613    // For a copy constructor, data members must not be of rvalue reference
9614    // type.
9615    if (FieldType->isRValueReferenceType()) {
9616      if (Diagnose)
9617        S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
9618          << MD->getParent() << FD << FieldType;
9619      return true;
9620    }
9621  } else if (IsAssignment) {
9622    // For an assignment operator, data members must not be of reference type.
9623    if (FieldType->isReferenceType()) {
9624      if (Diagnose)
9625        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
9626          << isMove() << MD->getParent() << FD << FieldType << /*Reference*/0;
9627      return true;
9628    }
9629    if (!FieldRecord && FieldType.isConstQualified()) {
9630      // C++11 [class.copy]p23:
9631      // -- a non-static data member of const non-class type (or array thereof)
9632      if (Diagnose)
9633        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
9634          << isMove() << MD->getParent() << FD << FD->getType() << /*Const*/1;
9635      return true;
9636    }
9637  }
9638
9639  if (FieldRecord) {
9640    // Some additional restrictions exist on the variant members.
9641    if (!inUnion() && FieldRecord->isUnion() &&
9642        FieldRecord->isAnonymousStructOrUnion()) {
9643      bool AllVariantFieldsAreConst = true;
9644
9645      // FIXME: Handle anonymous unions declared within anonymous unions.
9646      for (auto *UI : FieldRecord->fields()) {
9647        QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
9648
9649        if (shouldDeleteForVariantObjCPtrMember(&*UI, UnionFieldType))
9650          return true;
9651
9652        if (!UnionFieldType.isConstQualified())
9653          AllVariantFieldsAreConst = false;
9654
9655        CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
9656        if (UnionFieldRecord &&
9657            shouldDeleteForClassSubobject(UnionFieldRecord, UI,
9658                                          UnionFieldType.getCVRQualifiers()))
9659          return true;
9660      }
9661
9662      // At least one member in each anonymous union must be non-const
9663      if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
9664          !FieldRecord->field_empty()) {
9665        if (Diagnose)
9666          S.Diag(FieldRecord->getLocation(),
9667                 diag::note_deleted_default_ctor_all_const)
9668            << !!ICI << MD->getParent() << /*anonymous union*/1;
9669        return true;
9670      }
9671
9672      // Don't check the implicit member of the anonymous union type.
9673      // This is technically non-conformant but supported, and we have a
9674      // diagnostic for this elsewhere.
9675      return false;
9676    }
9677
9678    if (shouldDeleteForClassSubobject(FieldRecord, FD,
9679                                      FieldType.getCVRQualifiers()))
9680      return true;
9681  }
9682
9683  return false;
9684}
9685
9686/// C++11 [class.ctor] p5:
9687///   A defaulted default constructor for a class X is defined as deleted if
9688/// X is a union and all of its variant members are of const-qualified type.
9689bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
9690  // This is a silly definition, because it gives an empty union a deleted
9691  // default constructor. Don't do that.
9692  if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst) {
9693    bool AnyFields = false;
9694    for (auto *F : MD->getParent()->fields())
9695      if ((AnyFields = !F->isUnnamedBitfield()))
9696        break;
9697    if (!AnyFields)
9698      return false;
9699    if (Diagnose)
9700      S.Diag(MD->getParent()->getLocation(),
9701             diag::note_deleted_default_ctor_all_const)
9702        << !!ICI << MD->getParent() << /*not anonymous union*/0;
9703    return true;
9704  }
9705  return false;
9706}
9707
9708/// Determine whether a defaulted special member function should be defined as
9709/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
9710/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
9711bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
9712                                     InheritedConstructorInfo *ICI,
9713                                     bool Diagnose) {
9714  if (MD->isInvalidDecl())
9715    return false;
9716  CXXRecordDecl *RD = MD->getParent();
9717  assert(!RD->isDependentType() && "do deletion after instantiation");
9718  if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
9719    return false;
9720
9721  // C++11 [expr.lambda.prim]p19:
9722  //   The closure type associated with a lambda-expression has a
9723  //   deleted (8.4.3) default constructor and a deleted copy
9724  //   assignment operator.
9725  // C++2a adds back these operators if the lambda has no lambda-capture.
9726  if (RD->isLambda() && !RD->lambdaIsDefaultConstructibleAndAssignable() &&
9727      (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
9728    if (Diagnose)
9729      Diag(RD->getLocation(), diag::note_lambda_decl);
9730    return true;
9731  }
9732
9733  // For an anonymous struct or union, the copy and assignment special members
9734  // will never be used, so skip the check. For an anonymous union declared at
9735  // namespace scope, the constructor and destructor are used.
9736  if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
9737      RD->isAnonymousStructOrUnion())
9738    return false;
9739
9740  // C++11 [class.copy]p7, p18:
9741  //   If the class definition declares a move constructor or move assignment
9742  //   operator, an implicitly declared copy constructor or copy assignment
9743  //   operator is defined as deleted.
9744  if (MD->isImplicit() &&
9745      (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
9746    CXXMethodDecl *UserDeclaredMove = nullptr;
9747
9748    // In Microsoft mode up to MSVC 2013, a user-declared move only causes the
9749    // deletion of the corresponding copy operation, not both copy operations.
9750    // MSVC 2015 has adopted the standards conforming behavior.
9751    bool DeletesOnlyMatchingCopy =
9752        getLangOpts().MSVCCompat &&
9753        !getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015);
9754
9755    if (RD->hasUserDeclaredMoveConstructor() &&
9756        (!DeletesOnlyMatchingCopy || CSM == CXXCopyConstructor)) {
9757      if (!Diagnose) return true;
9758
9759      // Find any user-declared move constructor.
9760      for (auto *I : RD->ctors()) {
9761        if (I->isMoveConstructor()) {
9762          UserDeclaredMove = I;
9763          break;
9764        }
9765      }
9766      assert(UserDeclaredMove);
9767    } else if (RD->hasUserDeclaredMoveAssignment() &&
9768               (!DeletesOnlyMatchingCopy || CSM == CXXCopyAssignment)) {
9769      if (!Diagnose) return true;
9770
9771      // Find any user-declared move assignment operator.
9772      for (auto *I : RD->methods()) {
9773        if (I->isMoveAssignmentOperator()) {
9774          UserDeclaredMove = I;
9775          break;
9776        }
9777      }
9778      assert(UserDeclaredMove);
9779    }
9780
9781    if (UserDeclaredMove) {
9782      Diag(UserDeclaredMove->getLocation(),
9783           diag::note_deleted_copy_user_declared_move)
9784        << (CSM == CXXCopyAssignment) << RD
9785        << UserDeclaredMove->isMoveAssignmentOperator();
9786      return true;
9787    }
9788  }
9789
9790  // Do access control from the special member function
9791  ContextRAII MethodContext(*this, MD);
9792
9793  // C++11 [class.dtor]p5:
9794  // -- for a virtual destructor, lookup of the non-array deallocation function
9795  //    results in an ambiguity or in a function that is deleted or inaccessible
9796  if (CSM == CXXDestructor && MD->isVirtual()) {
9797    FunctionDecl *OperatorDelete = nullptr;
9798    DeclarationName Name =
9799      Context.DeclarationNames.getCXXOperatorName(OO_Delete);
9800    if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
9801                                 OperatorDelete, /*Diagnose*/false)) {
9802      if (Diagnose)
9803        Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
9804      return true;
9805    }
9806  }
9807
9808  SpecialMemberDeletionInfo SMI(*this, MD, CSM, ICI, Diagnose);
9809
9810  // Per DR1611, do not consider virtual bases of constructors of abstract
9811  // classes, since we are not going to construct them.
9812  // Per DR1658, do not consider virtual bases of destructors of abstract
9813  // classes either.
9814  // Per DR2180, for assignment operators we only assign (and thus only
9815  // consider) direct bases.
9816  if (SMI.visit(SMI.IsAssignment ? SMI.VisitDirectBases
9817                                 : SMI.VisitPotentiallyConstructedBases))
9818    return true;
9819
9820  if (SMI.shouldDeleteForAllConstMembers())
9821    return true;
9822
9823  if (getLangOpts().CUDA) {
9824    // We should delete the special member in CUDA mode if target inference
9825    // failed.
9826    // For inherited constructors (non-null ICI), CSM may be passed so that MD
9827    // is treated as certain special member, which may not reflect what special
9828    // member MD really is. However inferCUDATargetForImplicitSpecialMember
9829    // expects CSM to match MD, therefore recalculate CSM.
9830    assert(ICI || CSM == getSpecialMember(MD));
9831    auto RealCSM = CSM;
9832    if (ICI)
9833      RealCSM = getSpecialMember(MD);
9834
9835    return inferCUDATargetForImplicitSpecialMember(RD, RealCSM, MD,
9836                                                   SMI.ConstArg, Diagnose);
9837  }
9838
9839  return false;
9840}
9841
9842void Sema::DiagnoseDeletedDefaultedFunction(FunctionDecl *FD) {
9843  DefaultedFunctionKind DFK = getDefaultedFunctionKind(FD);
9844  assert(DFK && "not a defaultable function");
9845  assert(FD->isDefaulted() && FD->isDeleted() && "not defaulted and deleted");
9846
9847  if (DFK.isSpecialMember()) {
9848    ShouldDeleteSpecialMember(cast<CXXMethodDecl>(FD), DFK.asSpecialMember(),
9849                              nullptr, /*Diagnose=*/true);
9850  } else {
9851    DefaultedComparisonAnalyzer(
9852        *this, cast<CXXRecordDecl>(FD->getLexicalDeclContext()), FD,
9853        DFK.asComparison(), DefaultedComparisonAnalyzer::ExplainDeleted)
9854        .visit();
9855  }
9856}
9857
9858/// Perform lookup for a special member of the specified kind, and determine
9859/// whether it is trivial. If the triviality can be determined without the
9860/// lookup, skip it. This is intended for use when determining whether a
9861/// special member of a containing object is trivial, and thus does not ever
9862/// perform overload resolution for default constructors.
9863///
9864/// If \p Selected is not \c NULL, \c *Selected will be filled in with the
9865/// member that was most likely to be intended to be trivial, if any.
9866///
9867/// If \p ForCall is true, look at CXXRecord::HasTrivialSpecialMembersForCall to
9868/// determine whether the special member is trivial.
9869static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
9870                                     Sema::CXXSpecialMember CSM, unsigned Quals,
9871                                     bool ConstRHS,
9872                                     Sema::TrivialABIHandling TAH,
9873                                     CXXMethodDecl **Selected) {
9874  if (Selected)
9875    *Selected = nullptr;
9876
9877  switch (CSM) {
9878  case Sema::CXXInvalid:
9879    llvm_unreachable("not a special member");
9880
9881  case Sema::CXXDefaultConstructor:
9882    // C++11 [class.ctor]p5:
9883    //   A default constructor is trivial if:
9884    //    - all the [direct subobjects] have trivial default constructors
9885    //
9886    // Note, no overload resolution is performed in this case.
9887    if (RD->hasTrivialDefaultConstructor())
9888      return true;
9889
9890    if (Selected) {
9891      // If there's a default constructor which could have been trivial, dig it
9892      // out. Otherwise, if there's any user-provided default constructor, point
9893      // to that as an example of why there's not a trivial one.
9894      CXXConstructorDecl *DefCtor = nullptr;
9895      if (RD->needsImplicitDefaultConstructor())
9896        S.DeclareImplicitDefaultConstructor(RD);
9897      for (auto *CI : RD->ctors()) {
9898        if (!CI->isDefaultConstructor())
9899          continue;
9900        DefCtor = CI;
9901        if (!DefCtor->isUserProvided())
9902          break;
9903      }
9904
9905      *Selected = DefCtor;
9906    }
9907
9908    return false;
9909
9910  case Sema::CXXDestructor:
9911    // C++11 [class.dtor]p5:
9912    //   A destructor is trivial if:
9913    //    - all the direct [subobjects] have trivial destructors
9914    if (RD->hasTrivialDestructor() ||
9915        (TAH == Sema::TAH_ConsiderTrivialABI &&
9916         RD->hasTrivialDestructorForCall()))
9917      return true;
9918
9919    if (Selected) {
9920      if (RD->needsImplicitDestructor())
9921        S.DeclareImplicitDestructor(RD);
9922      *Selected = RD->getDestructor();
9923    }
9924
9925    return false;
9926
9927  case Sema::CXXCopyConstructor:
9928    // C++11 [class.copy]p12:
9929    //   A copy constructor is trivial if:
9930    //    - the constructor selected to copy each direct [subobject] is trivial
9931    if (RD->hasTrivialCopyConstructor() ||
9932        (TAH == Sema::TAH_ConsiderTrivialABI &&
9933         RD->hasTrivialCopyConstructorForCall())) {
9934      if (Quals == Qualifiers::Const)
9935        // We must either select the trivial copy constructor or reach an
9936        // ambiguity; no need to actually perform overload resolution.
9937        return true;
9938    } else if (!Selected) {
9939      return false;
9940    }
9941    // In C++98, we are not supposed to perform overload resolution here, but we
9942    // treat that as a language defect, as suggested on cxx-abi-dev, to treat
9943    // cases like B as having a non-trivial copy constructor:
9944    //   struct A { template<typename T> A(T&); };
9945    //   struct B { mutable A a; };
9946    goto NeedOverloadResolution;
9947
9948  case Sema::CXXCopyAssignment:
9949    // C++11 [class.copy]p25:
9950    //   A copy assignment operator is trivial if:
9951    //    - the assignment operator selected to copy each direct [subobject] is
9952    //      trivial
9953    if (RD->hasTrivialCopyAssignment()) {
9954      if (Quals == Qualifiers::Const)
9955        return true;
9956    } else if (!Selected) {
9957      return false;
9958    }
9959    // In C++98, we are not supposed to perform overload resolution here, but we
9960    // treat that as a language defect.
9961    goto NeedOverloadResolution;
9962
9963  case Sema::CXXMoveConstructor:
9964  case Sema::CXXMoveAssignment:
9965  NeedOverloadResolution:
9966    Sema::SpecialMemberOverloadResult SMOR =
9967        lookupCallFromSpecialMember(S, RD, CSM, Quals, ConstRHS);
9968
9969    // The standard doesn't describe how to behave if the lookup is ambiguous.
9970    // We treat it as not making the member non-trivial, just like the standard
9971    // mandates for the default constructor. This should rarely matter, because
9972    // the member will also be deleted.
9973    if (SMOR.getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
9974      return true;
9975
9976    if (!SMOR.getMethod()) {
9977      assert(SMOR.getKind() ==
9978             Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
9979      return false;
9980    }
9981
9982    // We deliberately don't check if we found a deleted special member. We're
9983    // not supposed to!
9984    if (Selected)
9985      *Selected = SMOR.getMethod();
9986
9987    if (TAH == Sema::TAH_ConsiderTrivialABI &&
9988        (CSM == Sema::CXXCopyConstructor || CSM == Sema::CXXMoveConstructor))
9989      return SMOR.getMethod()->isTrivialForCall();
9990    return SMOR.getMethod()->isTrivial();
9991  }
9992
9993  llvm_unreachable("unknown special method kind");
9994}
9995
9996static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
9997  for (auto *CI : RD->ctors())
9998    if (!CI->isImplicit())
9999      return CI;
10000
10001  // Look for constructor templates.
10002  typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
10003  for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
10004    if (CXXConstructorDecl *CD =
10005          dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
10006      return CD;
10007  }
10008
10009  return nullptr;
10010}
10011
10012/// The kind of subobject we are checking for triviality. The values of this
10013/// enumeration are used in diagnostics.
10014enum TrivialSubobjectKind {
10015  /// The subobject is a base class.
10016  TSK_BaseClass,
10017  /// The subobject is a non-static data member.
10018  TSK_Field,
10019  /// The object is actually the complete object.
10020  TSK_CompleteObject
10021};
10022
10023/// Check whether the special member selected for a given type would be trivial.
10024static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
10025                                      QualType SubType, bool ConstRHS,
10026                                      Sema::CXXSpecialMember CSM,
10027                                      TrivialSubobjectKind Kind,
10028                                      Sema::TrivialABIHandling TAH, bool Diagnose) {
10029  CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
10030  if (!SubRD)
10031    return true;
10032
10033  CXXMethodDecl *Selected;
10034  if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
10035                               ConstRHS, TAH, Diagnose ? &Selected : nullptr))
10036    return true;
10037
10038  if (Diagnose) {
10039    if (ConstRHS)
10040      SubType.addConst();
10041
10042    if (!Selected && CSM == Sema::CXXDefaultConstructor) {
10043      S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
10044        << Kind << SubType.getUnqualifiedType();
10045      if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
10046        S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
10047    } else if (!Selected)
10048      S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
10049        << Kind << SubType.getUnqualifiedType() << CSM << SubType;
10050    else if (Selected->isUserProvided()) {
10051      if (Kind == TSK_CompleteObject)
10052        S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
10053          << Kind << SubType.getUnqualifiedType() << CSM;
10054      else {
10055        S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
10056          << Kind << SubType.getUnqualifiedType() << CSM;
10057        S.Diag(Selected->getLocation(), diag::note_declared_at);
10058      }
10059    } else {
10060      if (Kind != TSK_CompleteObject)
10061        S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
10062          << Kind << SubType.getUnqualifiedType() << CSM;
10063
10064      // Explain why the defaulted or deleted special member isn't trivial.
10065      S.SpecialMemberIsTrivial(Selected, CSM, Sema::TAH_IgnoreTrivialABI,
10066                               Diagnose);
10067    }
10068  }
10069
10070  return false;
10071}
10072
10073/// Check whether the members of a class type allow a special member to be
10074/// trivial.
10075static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
10076                                     Sema::CXXSpecialMember CSM,
10077                                     bool ConstArg,
10078                                     Sema::TrivialABIHandling TAH,
10079                                     bool Diagnose) {
10080  for (const auto *FI : RD->fields()) {
10081    if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
10082      continue;
10083
10084    QualType FieldType = S.Context.getBaseElementType(FI->getType());
10085
10086    // Pretend anonymous struct or union members are members of this class.
10087    if (FI->isAnonymousStructOrUnion()) {
10088      if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
10089                                    CSM, ConstArg, TAH, Diagnose))
10090        return false;
10091      continue;
10092    }
10093
10094    // C++11 [class.ctor]p5:
10095    //   A default constructor is trivial if [...]
10096    //    -- no non-static data member of its class has a
10097    //       brace-or-equal-initializer
10098    if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
10099      if (Diagnose)
10100        S.Diag(FI->getLocation(), diag::note_nontrivial_default_member_init)
10101            << FI;
10102      return false;
10103    }
10104
10105    // Objective C ARC 4.3.5:
10106    //   [...] nontrivally ownership-qualified types are [...] not trivially
10107    //   default constructible, copy constructible, move constructible, copy
10108    //   assignable, move assignable, or destructible [...]
10109    if (FieldType.hasNonTrivialObjCLifetime()) {
10110      if (Diagnose)
10111        S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
10112          << RD << FieldType.getObjCLifetime();
10113      return false;
10114    }
10115
10116    bool ConstRHS = ConstArg && !FI->isMutable();
10117    if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, ConstRHS,
10118                                   CSM, TSK_Field, TAH, Diagnose))
10119      return false;
10120  }
10121
10122  return true;
10123}
10124
10125/// Diagnose why the specified class does not have a trivial special member of
10126/// the given kind.
10127void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
10128  QualType Ty = Context.getRecordType(RD);
10129
10130  bool ConstArg = (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment);
10131  checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM,
10132                            TSK_CompleteObject, TAH_IgnoreTrivialABI,
10133                            /*Diagnose*/true);
10134}
10135
10136/// Determine whether a defaulted or deleted special member function is trivial,
10137/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
10138/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
10139bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
10140                                  TrivialABIHandling TAH, bool Diagnose) {
10141  assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
10142
10143  CXXRecordDecl *RD = MD->getParent();
10144
10145  bool ConstArg = false;
10146
10147  // C++11 [class.copy]p12, p25: [DR1593]
10148  //   A [special member] is trivial if [...] its parameter-type-list is
10149  //   equivalent to the parameter-type-list of an implicit declaration [...]
10150  switch (CSM) {
10151  case CXXDefaultConstructor:
10152  case CXXDestructor:
10153    // Trivial default constructors and destructors cannot have parameters.
10154    break;
10155
10156  case CXXCopyConstructor:
10157  case CXXCopyAssignment: {
10158    const ParmVarDecl *Param0 = MD->getNonObjectParameter(0);
10159    const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
10160
10161    // When ClangABICompat14 is true, CXX copy constructors will only be trivial
10162    // if they are not user-provided and their parameter-type-list is equivalent
10163    // to the parameter-type-list of an implicit declaration. This maintains the
10164    // behavior before dr2171 was implemented.
10165    //
10166    // Otherwise, if ClangABICompat14 is false, All copy constructors can be
10167    // trivial, if they are not user-provided, regardless of the qualifiers on
10168    // the reference type.
10169    const bool ClangABICompat14 = Context.getLangOpts().getClangABICompat() <=
10170                                  LangOptions::ClangABI::Ver14;
10171    if (!RT ||
10172        ((RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) &&
10173         ClangABICompat14)) {
10174      if (Diagnose)
10175        Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
10176          << Param0->getSourceRange() << Param0->getType()
10177          << Context.getLValueReferenceType(
10178               Context.getRecordType(RD).withConst());
10179      return false;
10180    }
10181
10182    ConstArg = RT->getPointeeType().isConstQualified();
10183    break;
10184  }
10185
10186  case CXXMoveConstructor:
10187  case CXXMoveAssignment: {
10188    // Trivial move operations always have non-cv-qualified parameters.
10189    const ParmVarDecl *Param0 = MD->getNonObjectParameter(0);
10190    const RValueReferenceType *RT =
10191      Param0->getType()->getAs<RValueReferenceType>();
10192    if (!RT || RT->getPointeeType().getCVRQualifiers()) {
10193      if (Diagnose)
10194        Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
10195          << Param0->getSourceRange() << Param0->getType()
10196          << Context.getRValueReferenceType(Context.getRecordType(RD));
10197      return false;
10198    }
10199    break;
10200  }
10201
10202  case CXXInvalid:
10203    llvm_unreachable("not a special member");
10204  }
10205
10206  if (MD->getMinRequiredArguments() < MD->getNumParams()) {
10207    if (Diagnose)
10208      Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
10209           diag::note_nontrivial_default_arg)
10210        << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
10211    return false;
10212  }
10213  if (MD->isVariadic()) {
10214    if (Diagnose)
10215      Diag(MD->getLocation(), diag::note_nontrivial_variadic);
10216    return false;
10217  }
10218
10219  // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
10220  //   A copy/move [constructor or assignment operator] is trivial if
10221  //    -- the [member] selected to copy/move each direct base class subobject
10222  //       is trivial
10223  //
10224  // C++11 [class.copy]p12, C++11 [class.copy]p25:
10225  //   A [default constructor or destructor] is trivial if
10226  //    -- all the direct base classes have trivial [default constructors or
10227  //       destructors]
10228  for (const auto &BI : RD->bases())
10229    if (!checkTrivialSubobjectCall(*this, BI.getBeginLoc(), BI.getType(),
10230                                   ConstArg, CSM, TSK_BaseClass, TAH, Diagnose))
10231      return false;
10232
10233  // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
10234  //   A copy/move [constructor or assignment operator] for a class X is
10235  //   trivial if
10236  //    -- for each non-static data member of X that is of class type (or array
10237  //       thereof), the constructor selected to copy/move that member is
10238  //       trivial
10239  //
10240  // C++11 [class.copy]p12, C++11 [class.copy]p25:
10241  //   A [default constructor or destructor] is trivial if
10242  //    -- for all of the non-static data members of its class that are of class
10243  //       type (or array thereof), each such class has a trivial [default
10244  //       constructor or destructor]
10245  if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, TAH, Diagnose))
10246    return false;
10247
10248  // C++11 [class.dtor]p5:
10249  //   A destructor is trivial if [...]
10250  //    -- the destructor is not virtual
10251  if (CSM == CXXDestructor && MD->isVirtual()) {
10252    if (Diagnose)
10253      Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
10254    return false;
10255  }
10256
10257  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
10258  //   A [special member] for class X is trivial if [...]
10259  //    -- class X has no virtual functions and no virtual base classes
10260  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
10261    if (!Diagnose)
10262      return false;
10263
10264    if (RD->getNumVBases()) {
10265      // Check for virtual bases. We already know that the corresponding
10266      // member in all bases is trivial, so vbases must all be direct.
10267      CXXBaseSpecifier &BS = *RD->vbases_begin();
10268      assert(BS.isVirtual());
10269      Diag(BS.getBeginLoc(), diag::note_nontrivial_has_virtual) << RD << 1;
10270      return false;
10271    }
10272
10273    // Must have a virtual method.
10274    for (const auto *MI : RD->methods()) {
10275      if (MI->isVirtual()) {
10276        SourceLocation MLoc = MI->getBeginLoc();
10277        Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
10278        return false;
10279      }
10280    }
10281
10282    llvm_unreachable("dynamic class with no vbases and no virtual functions");
10283  }
10284
10285  // Looks like it's trivial!
10286  return true;
10287}
10288
10289namespace {
10290struct FindHiddenVirtualMethod {
10291  Sema *S;
10292  CXXMethodDecl *Method;
10293  llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
10294  SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
10295
10296private:
10297  /// Check whether any most overridden method from MD in Methods
10298  static bool CheckMostOverridenMethods(
10299      const CXXMethodDecl *MD,
10300      const llvm::SmallPtrSetImpl<const CXXMethodDecl *> &Methods) {
10301    if (MD->size_overridden_methods() == 0)
10302      return Methods.count(MD->getCanonicalDecl());
10303    for (const CXXMethodDecl *O : MD->overridden_methods())
10304      if (CheckMostOverridenMethods(O, Methods))
10305        return true;
10306    return false;
10307  }
10308
10309public:
10310  /// Member lookup function that determines whether a given C++
10311  /// method overloads virtual methods in a base class without overriding any,
10312  /// to be used with CXXRecordDecl::lookupInBases().
10313  bool operator()(const CXXBaseSpecifier *Specifier, CXXBasePath &Path) {
10314    RecordDecl *BaseRecord =
10315        Specifier->getType()->castAs<RecordType>()->getDecl();
10316
10317    DeclarationName Name = Method->getDeclName();
10318    assert(Name.getNameKind() == DeclarationName::Identifier);
10319
10320    bool foundSameNameMethod = false;
10321    SmallVector<CXXMethodDecl *, 8> overloadedMethods;
10322    for (Path.Decls = BaseRecord->lookup(Name).begin();
10323         Path.Decls != DeclContext::lookup_iterator(); ++Path.Decls) {
10324      NamedDecl *D = *Path.Decls;
10325      if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
10326        MD = MD->getCanonicalDecl();
10327        foundSameNameMethod = true;
10328        // Interested only in hidden virtual methods.
10329        if (!MD->isVirtual())
10330          continue;
10331        // If the method we are checking overrides a method from its base
10332        // don't warn about the other overloaded methods. Clang deviates from
10333        // GCC by only diagnosing overloads of inherited virtual functions that
10334        // do not override any other virtual functions in the base. GCC's
10335        // -Woverloaded-virtual diagnoses any derived function hiding a virtual
10336        // function from a base class. These cases may be better served by a
10337        // warning (not specific to virtual functions) on call sites when the
10338        // call would select a different function from the base class, were it
10339        // visible.
10340        // See FIXME in test/SemaCXX/warn-overload-virtual.cpp for an example.
10341        if (!S->IsOverload(Method, MD, false))
10342          return true;
10343        // Collect the overload only if its hidden.
10344        if (!CheckMostOverridenMethods(MD, OverridenAndUsingBaseMethods))
10345          overloadedMethods.push_back(MD);
10346      }
10347    }
10348
10349    if (foundSameNameMethod)
10350      OverloadedMethods.append(overloadedMethods.begin(),
10351                               overloadedMethods.end());
10352    return foundSameNameMethod;
10353  }
10354};
10355} // end anonymous namespace
10356
10357/// Add the most overridden methods from MD to Methods
10358static void AddMostOverridenMethods(const CXXMethodDecl *MD,
10359                        llvm::SmallPtrSetImpl<const CXXMethodDecl *>& Methods) {
10360  if (MD->size_overridden_methods() == 0)
10361    Methods.insert(MD->getCanonicalDecl());
10362  else
10363    for (const CXXMethodDecl *O : MD->overridden_methods())
10364      AddMostOverridenMethods(O, Methods);
10365}
10366
10367/// Check if a method overloads virtual methods in a base class without
10368/// overriding any.
10369void Sema::FindHiddenVirtualMethods(CXXMethodDecl *MD,
10370                          SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) {
10371  if (!MD->getDeclName().isIdentifier())
10372    return;
10373
10374  CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
10375                     /*bool RecordPaths=*/false,
10376                     /*bool DetectVirtual=*/false);
10377  FindHiddenVirtualMethod FHVM;
10378  FHVM.Method = MD;
10379  FHVM.S = this;
10380
10381  // Keep the base methods that were overridden or introduced in the subclass
10382  // by 'using' in a set. A base method not in this set is hidden.
10383  CXXRecordDecl *DC = MD->getParent();
10384  DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
10385  for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
10386    NamedDecl *ND = *I;
10387    if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
10388      ND = shad->getTargetDecl();
10389    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
10390      AddMostOverridenMethods(MD, FHVM.OverridenAndUsingBaseMethods);
10391  }
10392
10393  if (DC->lookupInBases(FHVM, Paths))
10394    OverloadedMethods = FHVM.OverloadedMethods;
10395}
10396
10397void Sema::NoteHiddenVirtualMethods(CXXMethodDecl *MD,
10398                          SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) {
10399  for (unsigned i = 0, e = OverloadedMethods.size(); i != e; ++i) {
10400    CXXMethodDecl *overloadedMD = OverloadedMethods[i];
10401    PartialDiagnostic PD = PDiag(
10402         diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
10403    HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
10404    Diag(overloadedMD->getLocation(), PD);
10405  }
10406}
10407
10408/// Diagnose methods which overload virtual methods in a base class
10409/// without overriding any.
10410void Sema::DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD) {
10411  if (MD->isInvalidDecl())
10412    return;
10413
10414  if (Diags.isIgnored(diag::warn_overloaded_virtual, MD->getLocation()))
10415    return;
10416
10417  SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
10418  FindHiddenVirtualMethods(MD, OverloadedMethods);
10419  if (!OverloadedMethods.empty()) {
10420    Diag(MD->getLocation(), diag::warn_overloaded_virtual)
10421      << MD << (OverloadedMethods.size() > 1);
10422
10423    NoteHiddenVirtualMethods(MD, OverloadedMethods);
10424  }
10425}
10426
10427void Sema::checkIllFormedTrivialABIStruct(CXXRecordDecl &RD) {
10428  auto PrintDiagAndRemoveAttr = [&](unsigned N) {
10429    // No diagnostics if this is a template instantiation.
10430    if (!isTemplateInstantiation(RD.getTemplateSpecializationKind())) {
10431      Diag(RD.getAttr<TrivialABIAttr>()->getLocation(),
10432           diag::ext_cannot_use_trivial_abi) << &RD;
10433      Diag(RD.getAttr<TrivialABIAttr>()->getLocation(),
10434           diag::note_cannot_use_trivial_abi_reason) << &RD << N;
10435    }
10436    RD.dropAttr<TrivialABIAttr>();
10437  };
10438
10439  // Ill-formed if the copy and move constructors are deleted.
10440  auto HasNonDeletedCopyOrMoveConstructor = [&]() {
10441    // If the type is dependent, then assume it might have
10442    // implicit copy or move ctor because we won't know yet at this point.
10443    if (RD.isDependentType())
10444      return true;
10445    if (RD.needsImplicitCopyConstructor() &&
10446        !RD.defaultedCopyConstructorIsDeleted())
10447      return true;
10448    if (RD.needsImplicitMoveConstructor() &&
10449        !RD.defaultedMoveConstructorIsDeleted())
10450      return true;
10451    for (const CXXConstructorDecl *CD : RD.ctors())
10452      if (CD->isCopyOrMoveConstructor() && !CD->isDeleted())
10453        return true;
10454    return false;
10455  };
10456
10457  if (!HasNonDeletedCopyOrMoveConstructor()) {
10458    PrintDiagAndRemoveAttr(0);
10459    return;
10460  }
10461
10462  // Ill-formed if the struct has virtual functions.
10463  if (RD.isPolymorphic()) {
10464    PrintDiagAndRemoveAttr(1);
10465    return;
10466  }
10467
10468  for (const auto &B : RD.bases()) {
10469    // Ill-formed if the base class is non-trivial for the purpose of calls or a
10470    // virtual base.
10471    if (!B.getType()->isDependentType() &&
10472        !B.getType()->getAsCXXRecordDecl()->canPassInRegisters()) {
10473      PrintDiagAndRemoveAttr(2);
10474      return;
10475    }
10476
10477    if (B.isVirtual()) {
10478      PrintDiagAndRemoveAttr(3);
10479      return;
10480    }
10481  }
10482
10483  for (const auto *FD : RD.fields()) {
10484    // Ill-formed if the field is an ObjectiveC pointer or of a type that is
10485    // non-trivial for the purpose of calls.
10486    QualType FT = FD->getType();
10487    if (FT.getObjCLifetime() == Qualifiers::OCL_Weak) {
10488      PrintDiagAndRemoveAttr(4);
10489      return;
10490    }
10491
10492    if (const auto *RT = FT->getBaseElementTypeUnsafe()->getAs<RecordType>())
10493      if (!RT->isDependentType() &&
10494          !cast<CXXRecordDecl>(RT->getDecl())->canPassInRegisters()) {
10495        PrintDiagAndRemoveAttr(5);
10496        return;
10497      }
10498  }
10499}
10500
10501void Sema::ActOnFinishCXXMemberSpecification(
10502    Scope *S, SourceLocation RLoc, Decl *TagDecl, SourceLocation LBrac,
10503    SourceLocation RBrac, const ParsedAttributesView &AttrList) {
10504  if (!TagDecl)
10505    return;
10506
10507  AdjustDeclIfTemplate(TagDecl);
10508
10509  for (const ParsedAttr &AL : AttrList) {
10510    if (AL.getKind() != ParsedAttr::AT_Visibility)
10511      continue;
10512    AL.setInvalid();
10513    Diag(AL.getLoc(), diag::warn_attribute_after_definition_ignored) << AL;
10514  }
10515
10516  ActOnFields(S, RLoc, TagDecl,
10517              llvm::ArrayRef(
10518                  // strict aliasing violation!
10519                  reinterpret_cast<Decl **>(FieldCollector->getCurFields()),
10520                  FieldCollector->getCurNumFields()),
10521              LBrac, RBrac, AttrList);
10522
10523  CheckCompletedCXXClass(S, cast<CXXRecordDecl>(TagDecl));
10524}
10525
10526/// Find the equality comparison functions that should be implicitly declared
10527/// in a given class definition, per C++2a [class.compare.default]p3.
10528static void findImplicitlyDeclaredEqualityComparisons(
10529    ASTContext &Ctx, CXXRecordDecl *RD,
10530    llvm::SmallVectorImpl<FunctionDecl *> &Spaceships) {
10531  DeclarationName EqEq = Ctx.DeclarationNames.getCXXOperatorName(OO_EqualEqual);
10532  if (!RD->lookup(EqEq).empty())
10533    // Member operator== explicitly declared: no implicit operator==s.
10534    return;
10535
10536  // Traverse friends looking for an '==' or a '<=>'.
10537  for (FriendDecl *Friend : RD->friends()) {
10538    FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(Friend->getFriendDecl());
10539    if (!FD) continue;
10540
10541    if (FD->getOverloadedOperator() == OO_EqualEqual) {
10542      // Friend operator== explicitly declared: no implicit operator==s.
10543      Spaceships.clear();
10544      return;
10545    }
10546
10547    if (FD->getOverloadedOperator() == OO_Spaceship &&
10548        FD->isExplicitlyDefaulted())
10549      Spaceships.push_back(FD);
10550  }
10551
10552  // Look for members named 'operator<=>'.
10553  DeclarationName Cmp = Ctx.DeclarationNames.getCXXOperatorName(OO_Spaceship);
10554  for (NamedDecl *ND : RD->lookup(Cmp)) {
10555    // Note that we could find a non-function here (either a function template
10556    // or a using-declaration). Neither case results in an implicit
10557    // 'operator=='.
10558    if (auto *FD = dyn_cast<FunctionDecl>(ND))
10559      if (FD->isExplicitlyDefaulted())
10560        Spaceships.push_back(FD);
10561  }
10562}
10563
10564/// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
10565/// special functions, such as the default constructor, copy
10566/// constructor, or destructor, to the given C++ class (C++
10567/// [special]p1).  This routine can only be executed just before the
10568/// definition of the class is complete.
10569void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
10570  // Don't add implicit special members to templated classes.
10571  // FIXME: This means unqualified lookups for 'operator=' within a class
10572  // template don't work properly.
10573  if (!ClassDecl->isDependentType()) {
10574    if (ClassDecl->needsImplicitDefaultConstructor()) {
10575      ++getASTContext().NumImplicitDefaultConstructors;
10576
10577      if (ClassDecl->hasInheritedConstructor())
10578        DeclareImplicitDefaultConstructor(ClassDecl);
10579    }
10580
10581    if (ClassDecl->needsImplicitCopyConstructor()) {
10582      ++getASTContext().NumImplicitCopyConstructors;
10583
10584      // If the properties or semantics of the copy constructor couldn't be
10585      // determined while the class was being declared, force a declaration
10586      // of it now.
10587      if (ClassDecl->needsOverloadResolutionForCopyConstructor() ||
10588          ClassDecl->hasInheritedConstructor())
10589        DeclareImplicitCopyConstructor(ClassDecl);
10590      // For the MS ABI we need to know whether the copy ctor is deleted. A
10591      // prerequisite for deleting the implicit copy ctor is that the class has
10592      // a move ctor or move assignment that is either user-declared or whose
10593      // semantics are inherited from a subobject. FIXME: We should provide a
10594      // more direct way for CodeGen to ask whether the constructor was deleted.
10595      else if (Context.getTargetInfo().getCXXABI().isMicrosoft() &&
10596               (ClassDecl->hasUserDeclaredMoveConstructor() ||
10597                ClassDecl->needsOverloadResolutionForMoveConstructor() ||
10598                ClassDecl->hasUserDeclaredMoveAssignment() ||
10599                ClassDecl->needsOverloadResolutionForMoveAssignment()))
10600        DeclareImplicitCopyConstructor(ClassDecl);
10601    }
10602
10603    if (getLangOpts().CPlusPlus11 &&
10604        ClassDecl->needsImplicitMoveConstructor()) {
10605      ++getASTContext().NumImplicitMoveConstructors;
10606
10607      if (ClassDecl->needsOverloadResolutionForMoveConstructor() ||
10608          ClassDecl->hasInheritedConstructor())
10609        DeclareImplicitMoveConstructor(ClassDecl);
10610    }
10611
10612    if (ClassDecl->needsImplicitCopyAssignment()) {
10613      ++getASTContext().NumImplicitCopyAssignmentOperators;
10614
10615      // If we have a dynamic class, then the copy assignment operator may be
10616      // virtual, so we have to declare it immediately. This ensures that, e.g.,
10617      // it shows up in the right place in the vtable and that we diagnose
10618      // problems with the implicit exception specification.
10619      if (ClassDecl->isDynamicClass() ||
10620          ClassDecl->needsOverloadResolutionForCopyAssignment() ||
10621          ClassDecl->hasInheritedAssignment())
10622        DeclareImplicitCopyAssignment(ClassDecl);
10623    }
10624
10625    if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
10626      ++getASTContext().NumImplicitMoveAssignmentOperators;
10627
10628      // Likewise for the move assignment operator.
10629      if (ClassDecl->isDynamicClass() ||
10630          ClassDecl->needsOverloadResolutionForMoveAssignment() ||
10631          ClassDecl->hasInheritedAssignment())
10632        DeclareImplicitMoveAssignment(ClassDecl);
10633    }
10634
10635    if (ClassDecl->needsImplicitDestructor()) {
10636      ++getASTContext().NumImplicitDestructors;
10637
10638      // If we have a dynamic class, then the destructor may be virtual, so we
10639      // have to declare the destructor immediately. This ensures that, e.g., it
10640      // shows up in the right place in the vtable and that we diagnose problems
10641      // with the implicit exception specification.
10642      if (ClassDecl->isDynamicClass() ||
10643          ClassDecl->needsOverloadResolutionForDestructor())
10644        DeclareImplicitDestructor(ClassDecl);
10645    }
10646  }
10647
10648  // C++2a [class.compare.default]p3:
10649  //   If the member-specification does not explicitly declare any member or
10650  //   friend named operator==, an == operator function is declared implicitly
10651  //   for each defaulted three-way comparison operator function defined in
10652  //   the member-specification
10653  // FIXME: Consider doing this lazily.
10654  // We do this during the initial parse for a class template, not during
10655  // instantiation, so that we can handle unqualified lookups for 'operator=='
10656  // when parsing the template.
10657  if (getLangOpts().CPlusPlus20 && !inTemplateInstantiation()) {
10658    llvm::SmallVector<FunctionDecl *, 4> DefaultedSpaceships;
10659    findImplicitlyDeclaredEqualityComparisons(Context, ClassDecl,
10660                                              DefaultedSpaceships);
10661    for (auto *FD : DefaultedSpaceships)
10662      DeclareImplicitEqualityComparison(ClassDecl, FD);
10663  }
10664}
10665
10666unsigned
10667Sema::ActOnReenterTemplateScope(Decl *D,
10668                                llvm::function_ref<Scope *()> EnterScope) {
10669  if (!D)
10670    return 0;
10671  AdjustDeclIfTemplate(D);
10672
10673  // In order to get name lookup right, reenter template scopes in order from
10674  // outermost to innermost.
10675  SmallVector<TemplateParameterList *, 4> ParameterLists;
10676  DeclContext *LookupDC = dyn_cast<DeclContext>(D);
10677
10678  if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) {
10679    for (unsigned i = 0; i < DD->getNumTemplateParameterLists(); ++i)
10680      ParameterLists.push_back(DD->getTemplateParameterList(i));
10681
10682    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
10683      if (FunctionTemplateDecl *FTD = FD->getDescribedFunctionTemplate())
10684        ParameterLists.push_back(FTD->getTemplateParameters());
10685    } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
10686      LookupDC = VD->getDeclContext();
10687
10688      if (VarTemplateDecl *VTD = VD->getDescribedVarTemplate())
10689        ParameterLists.push_back(VTD->getTemplateParameters());
10690      else if (auto *PSD = dyn_cast<VarTemplatePartialSpecializationDecl>(D))
10691        ParameterLists.push_back(PSD->getTemplateParameters());
10692    }
10693  } else if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
10694    for (unsigned i = 0; i < TD->getNumTemplateParameterLists(); ++i)
10695      ParameterLists.push_back(TD->getTemplateParameterList(i));
10696
10697    if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TD)) {
10698      if (ClassTemplateDecl *CTD = RD->getDescribedClassTemplate())
10699        ParameterLists.push_back(CTD->getTemplateParameters());
10700      else if (auto *PSD = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
10701        ParameterLists.push_back(PSD->getTemplateParameters());
10702    }
10703  }
10704  // FIXME: Alias declarations and concepts.
10705
10706  unsigned Count = 0;
10707  Scope *InnermostTemplateScope = nullptr;
10708  for (TemplateParameterList *Params : ParameterLists) {
10709    // Ignore explicit specializations; they don't contribute to the template
10710    // depth.
10711    if (Params->size() == 0)
10712      continue;
10713
10714    InnermostTemplateScope = EnterScope();
10715    for (NamedDecl *Param : *Params) {
10716      if (Param->getDeclName()) {
10717        InnermostTemplateScope->AddDecl(Param);
10718        IdResolver.AddDecl(Param);
10719      }
10720    }
10721    ++Count;
10722  }
10723
10724  // Associate the new template scopes with the corresponding entities.
10725  if (InnermostTemplateScope) {
10726    assert(LookupDC && "no enclosing DeclContext for template lookup");
10727    EnterTemplatedContext(InnermostTemplateScope, LookupDC);
10728  }
10729
10730  return Count;
10731}
10732
10733void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
10734  if (!RecordD) return;
10735  AdjustDeclIfTemplate(RecordD);
10736  CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
10737  PushDeclContext(S, Record);
10738}
10739
10740void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
10741  if (!RecordD) return;
10742  PopDeclContext();
10743}
10744
10745/// This is used to implement the constant expression evaluation part of the
10746/// attribute enable_if extension. There is nothing in standard C++ which would
10747/// require reentering parameters.
10748void Sema::ActOnReenterCXXMethodParameter(Scope *S, ParmVarDecl *Param) {
10749  if (!Param)
10750    return;
10751
10752  S->AddDecl(Param);
10753  if (Param->getDeclName())
10754    IdResolver.AddDecl(Param);
10755}
10756
10757/// ActOnStartDelayedCXXMethodDeclaration - We have completed
10758/// parsing a top-level (non-nested) C++ class, and we are now
10759/// parsing those parts of the given Method declaration that could
10760/// not be parsed earlier (C++ [class.mem]p2), such as default
10761/// arguments. This action should enter the scope of the given
10762/// Method declaration as if we had just parsed the qualified method
10763/// name. However, it should not bring the parameters into scope;
10764/// that will be performed by ActOnDelayedCXXMethodParameter.
10765void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
10766}
10767
10768/// ActOnDelayedCXXMethodParameter - We've already started a delayed
10769/// C++ method declaration. We're (re-)introducing the given
10770/// function parameter into scope for use in parsing later parts of
10771/// the method declaration. For example, we could see an
10772/// ActOnParamDefaultArgument event for this parameter.
10773void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
10774  if (!ParamD)
10775    return;
10776
10777  ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
10778
10779  S->AddDecl(Param);
10780  if (Param->getDeclName())
10781    IdResolver.AddDecl(Param);
10782}
10783
10784/// ActOnFinishDelayedCXXMethodDeclaration - We have finished
10785/// processing the delayed method declaration for Method. The method
10786/// declaration is now considered finished. There may be a separate
10787/// ActOnStartOfFunctionDef action later (not necessarily
10788/// immediately!) for this method, if it was also defined inside the
10789/// class body.
10790void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
10791  if (!MethodD)
10792    return;
10793
10794  AdjustDeclIfTemplate(MethodD);
10795
10796  FunctionDecl *Method = cast<FunctionDecl>(MethodD);
10797
10798  // Now that we have our default arguments, check the constructor
10799  // again. It could produce additional diagnostics or affect whether
10800  // the class has implicitly-declared destructors, among other
10801  // things.
10802  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
10803    CheckConstructor(Constructor);
10804
10805  // Check the default arguments, which we may have added.
10806  if (!Method->isInvalidDecl())
10807    CheckCXXDefaultArguments(Method);
10808}
10809
10810// Emit the given diagnostic for each non-address-space qualifier.
10811// Common part of CheckConstructorDeclarator and CheckDestructorDeclarator.
10812static void checkMethodTypeQualifiers(Sema &S, Declarator &D, unsigned DiagID) {
10813  const DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
10814  if (FTI.hasMethodTypeQualifiers() && !D.isInvalidType()) {
10815    bool DiagOccured = false;
10816    FTI.MethodQualifiers->forEachQualifier(
10817        [DiagID, &S, &DiagOccured](DeclSpec::TQ, StringRef QualName,
10818                                   SourceLocation SL) {
10819          // This diagnostic should be emitted on any qualifier except an addr
10820          // space qualifier. However, forEachQualifier currently doesn't visit
10821          // addr space qualifiers, so there's no way to write this condition
10822          // right now; we just diagnose on everything.
10823          S.Diag(SL, DiagID) << QualName << SourceRange(SL);
10824          DiagOccured = true;
10825        });
10826    if (DiagOccured)
10827      D.setInvalidType();
10828  }
10829}
10830
10831/// CheckConstructorDeclarator - Called by ActOnDeclarator to check
10832/// the well-formedness of the constructor declarator @p D with type @p
10833/// R. If there are any errors in the declarator, this routine will
10834/// emit diagnostics and set the invalid bit to true.  In any case, the type
10835/// will be updated to reflect a well-formed type for the constructor and
10836/// returned.
10837QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
10838                                          StorageClass &SC) {
10839  bool isVirtual = D.getDeclSpec().isVirtualSpecified();
10840
10841  // C++ [class.ctor]p3:
10842  //   A constructor shall not be virtual (10.3) or static (9.4). A
10843  //   constructor can be invoked for a const, volatile or const
10844  //   volatile object. A constructor shall not be declared const,
10845  //   volatile, or const volatile (9.3.2).
10846  if (isVirtual) {
10847    if (!D.isInvalidType())
10848      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
10849        << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
10850        << SourceRange(D.getIdentifierLoc());
10851    D.setInvalidType();
10852  }
10853  if (SC == SC_Static) {
10854    if (!D.isInvalidType())
10855      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
10856        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
10857        << SourceRange(D.getIdentifierLoc());
10858    D.setInvalidType();
10859    SC = SC_None;
10860  }
10861
10862  if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {
10863    diagnoseIgnoredQualifiers(
10864        diag::err_constructor_return_type, TypeQuals, SourceLocation(),
10865        D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(),
10866        D.getDeclSpec().getRestrictSpecLoc(),
10867        D.getDeclSpec().getAtomicSpecLoc());
10868    D.setInvalidType();
10869  }
10870
10871  checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_constructor);
10872
10873  // C++0x [class.ctor]p4:
10874  //   A constructor shall not be declared with a ref-qualifier.
10875  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
10876  if (FTI.hasRefQualifier()) {
10877    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
10878      << FTI.RefQualifierIsLValueRef
10879      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
10880    D.setInvalidType();
10881  }
10882
10883  // Rebuild the function type "R" without any type qualifiers (in
10884  // case any of the errors above fired) and with "void" as the
10885  // return type, since constructors don't have return types.
10886  const FunctionProtoType *Proto = R->castAs<FunctionProtoType>();
10887  if (Proto->getReturnType() == Context.VoidTy && !D.isInvalidType())
10888    return R;
10889
10890  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
10891  EPI.TypeQuals = Qualifiers();
10892  EPI.RefQualifier = RQ_None;
10893
10894  return Context.getFunctionType(Context.VoidTy, Proto->getParamTypes(), EPI);
10895}
10896
10897/// CheckConstructor - Checks a fully-formed constructor for
10898/// well-formedness, issuing any diagnostics required. Returns true if
10899/// the constructor declarator is invalid.
10900void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
10901  CXXRecordDecl *ClassDecl
10902    = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
10903  if (!ClassDecl)
10904    return Constructor->setInvalidDecl();
10905
10906  // C++ [class.copy]p3:
10907  //   A declaration of a constructor for a class X is ill-formed if
10908  //   its first parameter is of type (optionally cv-qualified) X and
10909  //   either there are no other parameters or else all other
10910  //   parameters have default arguments.
10911  if (!Constructor->isInvalidDecl() &&
10912      Constructor->hasOneParamOrDefaultArgs() &&
10913      Constructor->getTemplateSpecializationKind() !=
10914          TSK_ImplicitInstantiation) {
10915    QualType ParamType = Constructor->getParamDecl(0)->getType();
10916    QualType ClassTy = Context.getTagDeclType(ClassDecl);
10917    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
10918      SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
10919      const char *ConstRef
10920        = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
10921                                                        : " const &";
10922      Diag(ParamLoc, diag::err_constructor_byvalue_arg)
10923        << FixItHint::CreateInsertion(ParamLoc, ConstRef);
10924
10925      // FIXME: Rather that making the constructor invalid, we should endeavor
10926      // to fix the type.
10927      Constructor->setInvalidDecl();
10928    }
10929  }
10930}
10931
10932/// CheckDestructor - Checks a fully-formed destructor definition for
10933/// well-formedness, issuing any diagnostics required.  Returns true
10934/// on error.
10935bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
10936  CXXRecordDecl *RD = Destructor->getParent();
10937
10938  if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
10939    SourceLocation Loc;
10940
10941    if (!Destructor->isImplicit())
10942      Loc = Destructor->getLocation();
10943    else
10944      Loc = RD->getLocation();
10945
10946    // If we have a virtual destructor, look up the deallocation function
10947    if (FunctionDecl *OperatorDelete =
10948            FindDeallocationFunctionForDestructor(Loc, RD)) {
10949      Expr *ThisArg = nullptr;
10950
10951      // If the notional 'delete this' expression requires a non-trivial
10952      // conversion from 'this' to the type of a destroying operator delete's
10953      // first parameter, perform that conversion now.
10954      if (OperatorDelete->isDestroyingOperatorDelete()) {
10955        QualType ParamType = OperatorDelete->getParamDecl(0)->getType();
10956        if (!declaresSameEntity(ParamType->getAsCXXRecordDecl(), RD)) {
10957          // C++ [class.dtor]p13:
10958          //   ... as if for the expression 'delete this' appearing in a
10959          //   non-virtual destructor of the destructor's class.
10960          ContextRAII SwitchContext(*this, Destructor);
10961          ExprResult This =
10962              ActOnCXXThis(OperatorDelete->getParamDecl(0)->getLocation());
10963          assert(!This.isInvalid() && "couldn't form 'this' expr in dtor?");
10964          This = PerformImplicitConversion(This.get(), ParamType, AA_Passing);
10965          if (This.isInvalid()) {
10966            // FIXME: Register this as a context note so that it comes out
10967            // in the right order.
10968            Diag(Loc, diag::note_implicit_delete_this_in_destructor_here);
10969            return true;
10970          }
10971          ThisArg = This.get();
10972        }
10973      }
10974
10975      DiagnoseUseOfDecl(OperatorDelete, Loc);
10976      MarkFunctionReferenced(Loc, OperatorDelete);
10977      Destructor->setOperatorDelete(OperatorDelete, ThisArg);
10978    }
10979  }
10980
10981  return false;
10982}
10983
10984/// CheckDestructorDeclarator - Called by ActOnDeclarator to check
10985/// the well-formednes of the destructor declarator @p D with type @p
10986/// R. If there are any errors in the declarator, this routine will
10987/// emit diagnostics and set the declarator to invalid.  Even if this happens,
10988/// will be updated to reflect a well-formed type for the destructor and
10989/// returned.
10990QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
10991                                         StorageClass& SC) {
10992  // C++ [class.dtor]p1:
10993  //   [...] A typedef-name that names a class is a class-name
10994  //   (7.1.3); however, a typedef-name that names a class shall not
10995  //   be used as the identifier in the declarator for a destructor
10996  //   declaration.
10997  QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
10998  if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
10999    Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name)
11000      << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
11001  else if (const TemplateSpecializationType *TST =
11002             DeclaratorType->getAs<TemplateSpecializationType>())
11003    if (TST->isTypeAlias())
11004      Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name)
11005        << DeclaratorType << 1;
11006
11007  // C++ [class.dtor]p2:
11008  //   A destructor is used to destroy objects of its class type. A
11009  //   destructor takes no parameters, and no return type can be
11010  //   specified for it (not even void). The address of a destructor
11011  //   shall not be taken. A destructor shall not be static. A
11012  //   destructor can be invoked for a const, volatile or const
11013  //   volatile object. A destructor shall not be declared const,
11014  //   volatile or const volatile (9.3.2).
11015  if (SC == SC_Static) {
11016    if (!D.isInvalidType())
11017      Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
11018        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
11019        << SourceRange(D.getIdentifierLoc())
11020        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
11021
11022    SC = SC_None;
11023  }
11024  if (!D.isInvalidType()) {
11025    // Destructors don't have return types, but the parser will
11026    // happily parse something like:
11027    //
11028    //   class X {
11029    //     float ~X();
11030    //   };
11031    //
11032    // The return type will be eliminated later.
11033    if (D.getDeclSpec().hasTypeSpecifier())
11034      Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
11035        << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
11036        << SourceRange(D.getIdentifierLoc());
11037    else if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {
11038      diagnoseIgnoredQualifiers(diag::err_destructor_return_type, TypeQuals,
11039                                SourceLocation(),
11040                                D.getDeclSpec().getConstSpecLoc(),
11041                                D.getDeclSpec().getVolatileSpecLoc(),
11042                                D.getDeclSpec().getRestrictSpecLoc(),
11043                                D.getDeclSpec().getAtomicSpecLoc());
11044      D.setInvalidType();
11045    }
11046  }
11047
11048  checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_destructor);
11049
11050  // C++0x [class.dtor]p2:
11051  //   A destructor shall not be declared with a ref-qualifier.
11052  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
11053  if (FTI.hasRefQualifier()) {
11054    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
11055      << FTI.RefQualifierIsLValueRef
11056      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
11057    D.setInvalidType();
11058  }
11059
11060  // Make sure we don't have any parameters.
11061  if (FTIHasNonVoidParameters(FTI)) {
11062    Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
11063
11064    // Delete the parameters.
11065    FTI.freeParams();
11066    D.setInvalidType();
11067  }
11068
11069  // Make sure the destructor isn't variadic.
11070  if (FTI.isVariadic) {
11071    Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
11072    D.setInvalidType();
11073  }
11074
11075  // Rebuild the function type "R" without any type qualifiers or
11076  // parameters (in case any of the errors above fired) and with
11077  // "void" as the return type, since destructors don't have return
11078  // types.
11079  if (!D.isInvalidType())
11080    return R;
11081
11082  const FunctionProtoType *Proto = R->castAs<FunctionProtoType>();
11083  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
11084  EPI.Variadic = false;
11085  EPI.TypeQuals = Qualifiers();
11086  EPI.RefQualifier = RQ_None;
11087  return Context.getFunctionType(Context.VoidTy, std::nullopt, EPI);
11088}
11089
11090static void extendLeft(SourceRange &R, SourceRange Before) {
11091  if (Before.isInvalid())
11092    return;
11093  R.setBegin(Before.getBegin());
11094  if (R.getEnd().isInvalid())
11095    R.setEnd(Before.getEnd());
11096}
11097
11098static void extendRight(SourceRange &R, SourceRange After) {
11099  if (After.isInvalid())
11100    return;
11101  if (R.getBegin().isInvalid())
11102    R.setBegin(After.getBegin());
11103  R.setEnd(After.getEnd());
11104}
11105
11106/// CheckConversionDeclarator - Called by ActOnDeclarator to check the
11107/// well-formednes of the conversion function declarator @p D with
11108/// type @p R. If there are any errors in the declarator, this routine
11109/// will emit diagnostics and return true. Otherwise, it will return
11110/// false. Either way, the type @p R will be updated to reflect a
11111/// well-formed type for the conversion operator.
11112void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
11113                                     StorageClass& SC) {
11114  // C++ [class.conv.fct]p1:
11115  //   Neither parameter types nor return type can be specified. The
11116  //   type of a conversion function (8.3.5) is "function taking no
11117  //   parameter returning conversion-type-id."
11118  if (SC == SC_Static) {
11119    if (!D.isInvalidType())
11120      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
11121        << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
11122        << D.getName().getSourceRange();
11123    D.setInvalidType();
11124    SC = SC_None;
11125  }
11126
11127  TypeSourceInfo *ConvTSI = nullptr;
11128  QualType ConvType =
11129      GetTypeFromParser(D.getName().ConversionFunctionId, &ConvTSI);
11130
11131  const DeclSpec &DS = D.getDeclSpec();
11132  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {
11133    // Conversion functions don't have return types, but the parser will
11134    // happily parse something like:
11135    //
11136    //   class X {
11137    //     float operator bool();
11138    //   };
11139    //
11140    // The return type will be changed later anyway.
11141    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
11142      << SourceRange(DS.getTypeSpecTypeLoc())
11143      << SourceRange(D.getIdentifierLoc());
11144    D.setInvalidType();
11145  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {
11146    // It's also plausible that the user writes type qualifiers in the wrong
11147    // place, such as:
11148    //   struct S { const operator int(); };
11149    // FIXME: we could provide a fixit to move the qualifiers onto the
11150    // conversion type.
11151    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
11152        << SourceRange(D.getIdentifierLoc()) << 0;
11153    D.setInvalidType();
11154  }
11155  const auto *Proto = R->castAs<FunctionProtoType>();
11156  // Make sure we don't have any parameters.
11157  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
11158  unsigned NumParam = Proto->getNumParams();
11159
11160  // [C++2b]
11161  // A conversion function shall have no non-object parameters.
11162  if (NumParam == 1) {
11163    DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
11164    if (const auto *First =
11165            dyn_cast_if_present<ParmVarDecl>(FTI.Params[0].Param);
11166        First && First->isExplicitObjectParameter())
11167      NumParam--;
11168  }
11169
11170  if (NumParam != 0) {
11171    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
11172    // Delete the parameters.
11173    FTI.freeParams();
11174    D.setInvalidType();
11175  } else if (Proto->isVariadic()) {
11176    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
11177    D.setInvalidType();
11178  }
11179
11180  // Diagnose "&operator bool()" and other such nonsense.  This
11181  // is actually a gcc extension which we don't support.
11182  if (Proto->getReturnType() != ConvType) {
11183    bool NeedsTypedef = false;
11184    SourceRange Before, After;
11185
11186    // Walk the chunks and extract information on them for our diagnostic.
11187    bool PastFunctionChunk = false;
11188    for (auto &Chunk : D.type_objects()) {
11189      switch (Chunk.Kind) {
11190      case DeclaratorChunk::Function:
11191        if (!PastFunctionChunk) {
11192          if (Chunk.Fun.HasTrailingReturnType) {
11193            TypeSourceInfo *TRT = nullptr;
11194            GetTypeFromParser(Chunk.Fun.getTrailingReturnType(), &TRT);
11195            if (TRT) extendRight(After, TRT->getTypeLoc().getSourceRange());
11196          }
11197          PastFunctionChunk = true;
11198          break;
11199        }
11200        [[fallthrough]];
11201      case DeclaratorChunk::Array:
11202        NeedsTypedef = true;
11203        extendRight(After, Chunk.getSourceRange());
11204        break;
11205
11206      case DeclaratorChunk::Pointer:
11207      case DeclaratorChunk::BlockPointer:
11208      case DeclaratorChunk::Reference:
11209      case DeclaratorChunk::MemberPointer:
11210      case DeclaratorChunk::Pipe:
11211        extendLeft(Before, Chunk.getSourceRange());
11212        break;
11213
11214      case DeclaratorChunk::Paren:
11215        extendLeft(Before, Chunk.Loc);
11216        extendRight(After, Chunk.EndLoc);
11217        break;
11218      }
11219    }
11220
11221    SourceLocation Loc = Before.isValid() ? Before.getBegin() :
11222                         After.isValid()  ? After.getBegin() :
11223                                            D.getIdentifierLoc();
11224    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);
11225    DB << Before << After;
11226
11227    if (!NeedsTypedef) {
11228      DB << /*don't need a typedef*/0;
11229
11230      // If we can provide a correct fix-it hint, do so.
11231      if (After.isInvalid() && ConvTSI) {
11232        SourceLocation InsertLoc =
11233            getLocForEndOfToken(ConvTSI->getTypeLoc().getEndLoc());
11234        DB << FixItHint::CreateInsertion(InsertLoc, " ")
11235           << FixItHint::CreateInsertionFromRange(
11236                  InsertLoc, CharSourceRange::getTokenRange(Before))
11237           << FixItHint::CreateRemoval(Before);
11238      }
11239    } else if (!Proto->getReturnType()->isDependentType()) {
11240      DB << /*typedef*/1 << Proto->getReturnType();
11241    } else if (getLangOpts().CPlusPlus11) {
11242      DB << /*alias template*/2 << Proto->getReturnType();
11243    } else {
11244      DB << /*might not be fixable*/3;
11245    }
11246
11247    // Recover by incorporating the other type chunks into the result type.
11248    // Note, this does *not* change the name of the function. This is compatible
11249    // with the GCC extension:
11250    //   struct S { &operator int(); } s;
11251    //   int &r = s.operator int(); // ok in GCC
11252    //   S::operator int&() {} // error in GCC, function name is 'operator int'.
11253    ConvType = Proto->getReturnType();
11254  }
11255
11256  // C++ [class.conv.fct]p4:
11257  //   The conversion-type-id shall not represent a function type nor
11258  //   an array type.
11259  if (ConvType->isArrayType()) {
11260    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
11261    ConvType = Context.getPointerType(ConvType);
11262    D.setInvalidType();
11263  } else if (ConvType->isFunctionType()) {
11264    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
11265    ConvType = Context.getPointerType(ConvType);
11266    D.setInvalidType();
11267  }
11268
11269  // Rebuild the function type "R" without any parameters (in case any
11270  // of the errors above fired) and with the conversion type as the
11271  // return type.
11272  if (D.isInvalidType())
11273    R = Context.getFunctionType(ConvType, std::nullopt,
11274                                Proto->getExtProtoInfo());
11275
11276  // C++0x explicit conversion operators.
11277  if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20)
11278    Diag(DS.getExplicitSpecLoc(),
11279         getLangOpts().CPlusPlus11
11280             ? diag::warn_cxx98_compat_explicit_conversion_functions
11281             : diag::ext_explicit_conversion_functions)
11282        << SourceRange(DS.getExplicitSpecRange());
11283}
11284
11285/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
11286/// the declaration of the given C++ conversion function. This routine
11287/// is responsible for recording the conversion function in the C++
11288/// class, if possible.
11289Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
11290  assert(Conversion && "Expected to receive a conversion function declaration");
11291
11292  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
11293
11294  // Make sure we aren't redeclaring the conversion function.
11295  QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
11296  // C++ [class.conv.fct]p1:
11297  //   [...] A conversion function is never used to convert a
11298  //   (possibly cv-qualified) object to the (possibly cv-qualified)
11299  //   same object type (or a reference to it), to a (possibly
11300  //   cv-qualified) base class of that type (or a reference to it),
11301  //   or to (possibly cv-qualified) void.
11302  QualType ClassType
11303    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
11304  if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
11305    ConvType = ConvTypeRef->getPointeeType();
11306  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
11307      Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
11308    /* Suppress diagnostics for instantiations. */;
11309  else if (Conversion->size_overridden_methods() != 0)
11310    /* Suppress diagnostics for overriding virtual function in a base class. */;
11311  else if (ConvType->isRecordType()) {
11312    ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
11313    if (ConvType == ClassType)
11314      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
11315        << ClassType;
11316    else if (IsDerivedFrom(Conversion->getLocation(), ClassType, ConvType))
11317      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
11318        <<  ClassType << ConvType;
11319  } else if (ConvType->isVoidType()) {
11320    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
11321      << ClassType << ConvType;
11322  }
11323
11324  if (FunctionTemplateDecl *ConversionTemplate =
11325          Conversion->getDescribedFunctionTemplate()) {
11326    if (const auto *ConvTypePtr = ConvType->getAs<PointerType>()) {
11327      ConvType = ConvTypePtr->getPointeeType();
11328    }
11329    if (ConvType->isUndeducedAutoType()) {
11330      Diag(Conversion->getTypeSpecStartLoc(), diag::err_auto_not_allowed)
11331          << getReturnTypeLoc(Conversion).getSourceRange()
11332          << llvm::to_underlying(ConvType->getAs<AutoType>()->getKeyword())
11333          << /* in declaration of conversion function template= */ 24;
11334    }
11335
11336    return ConversionTemplate;
11337  }
11338
11339  return Conversion;
11340}
11341
11342void Sema::CheckExplicitObjectMemberFunction(DeclContext *DC, Declarator &D,
11343                                             DeclarationName Name, QualType R) {
11344  CheckExplicitObjectMemberFunction(D, Name, R, false, DC);
11345}
11346
11347void Sema::CheckExplicitObjectLambda(Declarator &D) {
11348  CheckExplicitObjectMemberFunction(D, {}, {}, true);
11349}
11350
11351void Sema::CheckExplicitObjectMemberFunction(Declarator &D,
11352                                             DeclarationName Name, QualType R,
11353                                             bool IsLambda, DeclContext *DC) {
11354  if (!D.isFunctionDeclarator())
11355    return;
11356
11357  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
11358  if (FTI.NumParams == 0)
11359    return;
11360  ParmVarDecl *ExplicitObjectParam = nullptr;
11361  for (unsigned Idx = 0; Idx < FTI.NumParams; Idx++) {
11362    const auto &ParamInfo = FTI.Params[Idx];
11363    if (!ParamInfo.Param)
11364      continue;
11365    ParmVarDecl *Param = cast<ParmVarDecl>(ParamInfo.Param);
11366    if (!Param->isExplicitObjectParameter())
11367      continue;
11368    if (Idx == 0) {
11369      ExplicitObjectParam = Param;
11370      continue;
11371    } else {
11372      Diag(Param->getLocation(),
11373           diag::err_explicit_object_parameter_must_be_first)
11374          << IsLambda << Param->getSourceRange();
11375    }
11376  }
11377  if (!ExplicitObjectParam)
11378    return;
11379
11380  if (ExplicitObjectParam->hasDefaultArg()) {
11381    Diag(ExplicitObjectParam->getLocation(),
11382         diag::err_explicit_object_default_arg)
11383        << ExplicitObjectParam->getSourceRange();
11384  }
11385
11386  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static) {
11387    Diag(ExplicitObjectParam->getBeginLoc(),
11388         diag::err_explicit_object_parameter_nonmember)
11389        << D.getSourceRange() << /*static=*/0 << IsLambda;
11390    D.setInvalidType();
11391  }
11392
11393  if (D.getDeclSpec().isVirtualSpecified()) {
11394    Diag(ExplicitObjectParam->getBeginLoc(),
11395         diag::err_explicit_object_parameter_nonmember)
11396        << D.getSourceRange() << /*virtual=*/1 << IsLambda;
11397    D.setInvalidType();
11398  }
11399
11400  if (IsLambda && FTI.hasMutableQualifier()) {
11401    Diag(ExplicitObjectParam->getBeginLoc(),
11402         diag::err_explicit_object_parameter_mutable)
11403        << D.getSourceRange();
11404  }
11405
11406  if (IsLambda)
11407    return;
11408
11409  if (!DC || !DC->isRecord()) {
11410    Diag(ExplicitObjectParam->getLocation(),
11411         diag::err_explicit_object_parameter_nonmember)
11412        << D.getSourceRange() << /*non-member=*/2 << IsLambda;
11413    D.setInvalidType();
11414    return;
11415  }
11416
11417  // CWG2674: constructors and destructors cannot have explicit parameters.
11418  if (Name.getNameKind() == DeclarationName::CXXConstructorName ||
11419      Name.getNameKind() == DeclarationName::CXXDestructorName) {
11420    Diag(ExplicitObjectParam->getBeginLoc(),
11421         diag::err_explicit_object_parameter_constructor)
11422        << (Name.getNameKind() == DeclarationName::CXXDestructorName)
11423        << D.getSourceRange();
11424    D.setInvalidType();
11425  }
11426}
11427
11428namespace {
11429/// Utility class to accumulate and print a diagnostic listing the invalid
11430/// specifier(s) on a declaration.
11431struct BadSpecifierDiagnoser {
11432  BadSpecifierDiagnoser(Sema &S, SourceLocation Loc, unsigned DiagID)
11433      : S(S), Diagnostic(S.Diag(Loc, DiagID)) {}
11434  ~BadSpecifierDiagnoser() {
11435    Diagnostic << Specifiers;
11436  }
11437
11438  template<typename T> void check(SourceLocation SpecLoc, T Spec) {
11439    return check(SpecLoc, DeclSpec::getSpecifierName(Spec));
11440  }
11441  void check(SourceLocation SpecLoc, DeclSpec::TST Spec) {
11442    return check(SpecLoc,
11443                 DeclSpec::getSpecifierName(Spec, S.getPrintingPolicy()));
11444  }
11445  void check(SourceLocation SpecLoc, const char *Spec) {
11446    if (SpecLoc.isInvalid()) return;
11447    Diagnostic << SourceRange(SpecLoc, SpecLoc);
11448    if (!Specifiers.empty()) Specifiers += " ";
11449    Specifiers += Spec;
11450  }
11451
11452  Sema &S;
11453  Sema::SemaDiagnosticBuilder Diagnostic;
11454  std::string Specifiers;
11455};
11456}
11457
11458/// Check the validity of a declarator that we parsed for a deduction-guide.
11459/// These aren't actually declarators in the grammar, so we need to check that
11460/// the user didn't specify any pieces that are not part of the deduction-guide
11461/// grammar. Return true on invalid deduction-guide.
11462bool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R,
11463                                         StorageClass &SC) {
11464  TemplateName GuidedTemplate = D.getName().TemplateName.get().get();
11465  TemplateDecl *GuidedTemplateDecl = GuidedTemplate.getAsTemplateDecl();
11466  assert(GuidedTemplateDecl && "missing template decl for deduction guide");
11467
11468  // C++ [temp.deduct.guide]p3:
11469  //   A deduction-gide shall be declared in the same scope as the
11470  //   corresponding class template.
11471  if (!CurContext->getRedeclContext()->Equals(
11472          GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {
11473    Diag(D.getIdentifierLoc(), diag::err_deduction_guide_wrong_scope)
11474      << GuidedTemplateDecl;
11475    NoteTemplateLocation(*GuidedTemplateDecl);
11476  }
11477
11478  auto &DS = D.getMutableDeclSpec();
11479  // We leave 'friend' and 'virtual' to be rejected in the normal way.
11480  if (DS.hasTypeSpecifier() || DS.getTypeQualifiers() ||
11481      DS.getStorageClassSpecLoc().isValid() || DS.isInlineSpecified() ||
11482      DS.isNoreturnSpecified() || DS.hasConstexprSpecifier()) {
11483    BadSpecifierDiagnoser Diagnoser(
11484        *this, D.getIdentifierLoc(),
11485        diag::err_deduction_guide_invalid_specifier);
11486
11487    Diagnoser.check(DS.getStorageClassSpecLoc(), DS.getStorageClassSpec());
11488    DS.ClearStorageClassSpecs();
11489    SC = SC_None;
11490
11491    // 'explicit' is permitted.
11492    Diagnoser.check(DS.getInlineSpecLoc(), "inline");
11493    Diagnoser.check(DS.getNoreturnSpecLoc(), "_Noreturn");
11494    Diagnoser.check(DS.getConstexprSpecLoc(), "constexpr");
11495    DS.ClearConstexprSpec();
11496
11497    Diagnoser.check(DS.getConstSpecLoc(), "const");
11498    Diagnoser.check(DS.getRestrictSpecLoc(), "__restrict");
11499    Diagnoser.check(DS.getVolatileSpecLoc(), "volatile");
11500    Diagnoser.check(DS.getAtomicSpecLoc(), "_Atomic");
11501    Diagnoser.check(DS.getUnalignedSpecLoc(), "__unaligned");
11502    DS.ClearTypeQualifiers();
11503
11504    Diagnoser.check(DS.getTypeSpecComplexLoc(), DS.getTypeSpecComplex());
11505    Diagnoser.check(DS.getTypeSpecSignLoc(), DS.getTypeSpecSign());
11506    Diagnoser.check(DS.getTypeSpecWidthLoc(), DS.getTypeSpecWidth());
11507    Diagnoser.check(DS.getTypeSpecTypeLoc(), DS.getTypeSpecType());
11508    DS.ClearTypeSpecType();
11509  }
11510
11511  if (D.isInvalidType())
11512    return true;
11513
11514  // Check the declarator is simple enough.
11515  bool FoundFunction = false;
11516  for (const DeclaratorChunk &Chunk : llvm::reverse(D.type_objects())) {
11517    if (Chunk.Kind == DeclaratorChunk::Paren)
11518      continue;
11519    if (Chunk.Kind != DeclaratorChunk::Function || FoundFunction) {
11520      Diag(D.getDeclSpec().getBeginLoc(),
11521           diag::err_deduction_guide_with_complex_decl)
11522          << D.getSourceRange();
11523      break;
11524    }
11525    if (!Chunk.Fun.hasTrailingReturnType())
11526      return Diag(D.getName().getBeginLoc(),
11527                  diag::err_deduction_guide_no_trailing_return_type);
11528
11529    // Check that the return type is written as a specialization of
11530    // the template specified as the deduction-guide's name.
11531    // The template name may not be qualified. [temp.deduct.guide]
11532    ParsedType TrailingReturnType = Chunk.Fun.getTrailingReturnType();
11533    TypeSourceInfo *TSI = nullptr;
11534    QualType RetTy = GetTypeFromParser(TrailingReturnType, &TSI);
11535    assert(TSI && "deduction guide has valid type but invalid return type?");
11536    bool AcceptableReturnType = false;
11537    bool MightInstantiateToSpecialization = false;
11538    if (auto RetTST =
11539            TSI->getTypeLoc().getAsAdjusted<TemplateSpecializationTypeLoc>()) {
11540      TemplateName SpecifiedName = RetTST.getTypePtr()->getTemplateName();
11541      bool TemplateMatches =
11542          Context.hasSameTemplateName(SpecifiedName, GuidedTemplate);
11543      auto TKind = SpecifiedName.getKind();
11544      // A Using TemplateName can't actually be valid (either it's qualified, or
11545      // we're in the wrong scope). But we have diagnosed these problems
11546      // already.
11547      bool SimplyWritten = TKind == TemplateName::Template ||
11548                           TKind == TemplateName::UsingTemplate;
11549      if (SimplyWritten && TemplateMatches)
11550        AcceptableReturnType = true;
11551      else {
11552        // This could still instantiate to the right type, unless we know it
11553        // names the wrong class template.
11554        auto *TD = SpecifiedName.getAsTemplateDecl();
11555        MightInstantiateToSpecialization = !(TD && isa<ClassTemplateDecl>(TD) &&
11556                                             !TemplateMatches);
11557      }
11558    } else if (!RetTy.hasQualifiers() && RetTy->isDependentType()) {
11559      MightInstantiateToSpecialization = true;
11560    }
11561
11562    if (!AcceptableReturnType)
11563      return Diag(TSI->getTypeLoc().getBeginLoc(),
11564                  diag::err_deduction_guide_bad_trailing_return_type)
11565             << GuidedTemplate << TSI->getType()
11566             << MightInstantiateToSpecialization
11567             << TSI->getTypeLoc().getSourceRange();
11568
11569    // Keep going to check that we don't have any inner declarator pieces (we
11570    // could still have a function returning a pointer to a function).
11571    FoundFunction = true;
11572  }
11573
11574  if (D.isFunctionDefinition())
11575    // we can still create a valid deduction guide here.
11576    Diag(D.getIdentifierLoc(), diag::err_deduction_guide_defines_function);
11577  return false;
11578}
11579
11580//===----------------------------------------------------------------------===//
11581// Namespace Handling
11582//===----------------------------------------------------------------------===//
11583
11584/// Diagnose a mismatch in 'inline' qualifiers when a namespace is
11585/// reopened.
11586static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
11587                                            SourceLocation Loc,
11588                                            IdentifierInfo *II, bool *IsInline,
11589                                            NamespaceDecl *PrevNS) {
11590  assert(*IsInline != PrevNS->isInline());
11591
11592  // 'inline' must appear on the original definition, but not necessarily
11593  // on all extension definitions, so the note should point to the first
11594  // definition to avoid confusion.
11595  PrevNS = PrevNS->getFirstDecl();
11596
11597  if (PrevNS->isInline())
11598    // The user probably just forgot the 'inline', so suggest that it
11599    // be added back.
11600    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
11601      << FixItHint::CreateInsertion(KeywordLoc, "inline ");
11602  else
11603    S.Diag(Loc, diag::err_inline_namespace_mismatch);
11604
11605  S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
11606  *IsInline = PrevNS->isInline();
11607}
11608
11609/// ActOnStartNamespaceDef - This is called at the start of a namespace
11610/// definition.
11611Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
11612                                   SourceLocation InlineLoc,
11613                                   SourceLocation NamespaceLoc,
11614                                   SourceLocation IdentLoc, IdentifierInfo *II,
11615                                   SourceLocation LBrace,
11616                                   const ParsedAttributesView &AttrList,
11617                                   UsingDirectiveDecl *&UD, bool IsNested) {
11618  SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
11619  // For anonymous namespace, take the location of the left brace.
11620  SourceLocation Loc = II ? IdentLoc : LBrace;
11621  bool IsInline = InlineLoc.isValid();
11622  bool IsInvalid = false;
11623  bool IsStd = false;
11624  bool AddToKnown = false;
11625  Scope *DeclRegionScope = NamespcScope->getParent();
11626
11627  NamespaceDecl *PrevNS = nullptr;
11628  if (II) {
11629    // C++ [namespace.std]p7:
11630    //   A translation unit shall not declare namespace std to be an inline
11631    //   namespace (9.8.2).
11632    //
11633    // Precondition: the std namespace is in the file scope and is declared to
11634    // be inline
11635    auto DiagnoseInlineStdNS = [&]() {
11636      assert(IsInline && II->isStr("std") &&
11637             CurContext->getRedeclContext()->isTranslationUnit() &&
11638             "Precondition of DiagnoseInlineStdNS not met");
11639      Diag(InlineLoc, diag::err_inline_namespace_std)
11640          << SourceRange(InlineLoc, InlineLoc.getLocWithOffset(6));
11641      IsInline = false;
11642    };
11643    // C++ [namespace.def]p2:
11644    //   The identifier in an original-namespace-definition shall not
11645    //   have been previously defined in the declarative region in
11646    //   which the original-namespace-definition appears. The
11647    //   identifier in an original-namespace-definition is the name of
11648    //   the namespace. Subsequently in that declarative region, it is
11649    //   treated as an original-namespace-name.
11650    //
11651    // Since namespace names are unique in their scope, and we don't
11652    // look through using directives, just look for any ordinary names
11653    // as if by qualified name lookup.
11654    LookupResult R(*this, II, IdentLoc, LookupOrdinaryName,
11655                   ForExternalRedeclaration);
11656    LookupQualifiedName(R, CurContext->getRedeclContext());
11657    NamedDecl *PrevDecl =
11658        R.isSingleResult() ? R.getRepresentativeDecl() : nullptr;
11659    PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
11660
11661    if (PrevNS) {
11662      // This is an extended namespace definition.
11663      if (IsInline && II->isStr("std") &&
11664          CurContext->getRedeclContext()->isTranslationUnit())
11665        DiagnoseInlineStdNS();
11666      else if (IsInline != PrevNS->isInline())
11667        DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
11668                                        &IsInline, PrevNS);
11669    } else if (PrevDecl) {
11670      // This is an invalid name redefinition.
11671      Diag(Loc, diag::err_redefinition_different_kind)
11672        << II;
11673      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
11674      IsInvalid = true;
11675      // Continue on to push Namespc as current DeclContext and return it.
11676    } else if (II->isStr("std") &&
11677               CurContext->getRedeclContext()->isTranslationUnit()) {
11678      if (IsInline)
11679        DiagnoseInlineStdNS();
11680      // This is the first "real" definition of the namespace "std", so update
11681      // our cache of the "std" namespace to point at this definition.
11682      PrevNS = getStdNamespace();
11683      IsStd = true;
11684      AddToKnown = !IsInline;
11685    } else {
11686      // We've seen this namespace for the first time.
11687      AddToKnown = !IsInline;
11688    }
11689  } else {
11690    // Anonymous namespaces.
11691
11692    // Determine whether the parent already has an anonymous namespace.
11693    DeclContext *Parent = CurContext->getRedeclContext();
11694    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
11695      PrevNS = TU->getAnonymousNamespace();
11696    } else {
11697      NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
11698      PrevNS = ND->getAnonymousNamespace();
11699    }
11700
11701    if (PrevNS && IsInline != PrevNS->isInline())
11702      DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
11703                                      &IsInline, PrevNS);
11704  }
11705
11706  NamespaceDecl *Namespc = NamespaceDecl::Create(
11707      Context, CurContext, IsInline, StartLoc, Loc, II, PrevNS, IsNested);
11708  if (IsInvalid)
11709    Namespc->setInvalidDecl();
11710
11711  ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
11712  AddPragmaAttributes(DeclRegionScope, Namespc);
11713
11714  // FIXME: Should we be merging attributes?
11715  if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
11716    PushNamespaceVisibilityAttr(Attr, Loc);
11717
11718  if (IsStd)
11719    StdNamespace = Namespc;
11720  if (AddToKnown)
11721    KnownNamespaces[Namespc] = false;
11722
11723  if (II) {
11724    PushOnScopeChains(Namespc, DeclRegionScope);
11725  } else {
11726    // Link the anonymous namespace into its parent.
11727    DeclContext *Parent = CurContext->getRedeclContext();
11728    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
11729      TU->setAnonymousNamespace(Namespc);
11730    } else {
11731      cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
11732    }
11733
11734    CurContext->addDecl(Namespc);
11735
11736    // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
11737    //   behaves as if it were replaced by
11738    //     namespace unique { /* empty body */ }
11739    //     using namespace unique;
11740    //     namespace unique { namespace-body }
11741    //   where all occurrences of 'unique' in a translation unit are
11742    //   replaced by the same identifier and this identifier differs
11743    //   from all other identifiers in the entire program.
11744
11745    // We just create the namespace with an empty name and then add an
11746    // implicit using declaration, just like the standard suggests.
11747    //
11748    // CodeGen enforces the "universally unique" aspect by giving all
11749    // declarations semantically contained within an anonymous
11750    // namespace internal linkage.
11751
11752    if (!PrevNS) {
11753      UD = UsingDirectiveDecl::Create(Context, Parent,
11754                                      /* 'using' */ LBrace,
11755                                      /* 'namespace' */ SourceLocation(),
11756                                      /* qualifier */ NestedNameSpecifierLoc(),
11757                                      /* identifier */ SourceLocation(),
11758                                      Namespc,
11759                                      /* Ancestor */ Parent);
11760      UD->setImplicit();
11761      Parent->addDecl(UD);
11762    }
11763  }
11764
11765  ActOnDocumentableDecl(Namespc);
11766
11767  // Although we could have an invalid decl (i.e. the namespace name is a
11768  // redefinition), push it as current DeclContext and try to continue parsing.
11769  // FIXME: We should be able to push Namespc here, so that the each DeclContext
11770  // for the namespace has the declarations that showed up in that particular
11771  // namespace definition.
11772  PushDeclContext(NamespcScope, Namespc);
11773  return Namespc;
11774}
11775
11776/// getNamespaceDecl - Returns the namespace a decl represents. If the decl
11777/// is a namespace alias, returns the namespace it points to.
11778static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
11779  if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
11780    return AD->getNamespace();
11781  return dyn_cast_or_null<NamespaceDecl>(D);
11782}
11783
11784/// ActOnFinishNamespaceDef - This callback is called after a namespace is
11785/// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
11786void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
11787  NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
11788  assert(Namespc && "Invalid parameter, expected NamespaceDecl");
11789  Namespc->setRBraceLoc(RBrace);
11790  PopDeclContext();
11791  if (Namespc->hasAttr<VisibilityAttr>())
11792    PopPragmaVisibility(true, RBrace);
11793  // If this namespace contains an export-declaration, export it now.
11794  if (DeferredExportedNamespaces.erase(Namespc))
11795    Dcl->setModuleOwnershipKind(Decl::ModuleOwnershipKind::VisibleWhenImported);
11796}
11797
11798CXXRecordDecl *Sema::getStdBadAlloc() const {
11799  return cast_or_null<CXXRecordDecl>(
11800                                  StdBadAlloc.get(Context.getExternalSource()));
11801}
11802
11803EnumDecl *Sema::getStdAlignValT() const {
11804  return cast_or_null<EnumDecl>(StdAlignValT.get(Context.getExternalSource()));
11805}
11806
11807NamespaceDecl *Sema::getStdNamespace() const {
11808  return cast_or_null<NamespaceDecl>(
11809                                 StdNamespace.get(Context.getExternalSource()));
11810}
11811namespace {
11812
11813enum UnsupportedSTLSelect {
11814  USS_InvalidMember,
11815  USS_MissingMember,
11816  USS_NonTrivial,
11817  USS_Other
11818};
11819
11820struct InvalidSTLDiagnoser {
11821  Sema &S;
11822  SourceLocation Loc;
11823  QualType TyForDiags;
11824
11825  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = "",
11826                      const VarDecl *VD = nullptr) {
11827    {
11828      auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported)
11829               << TyForDiags << ((int)Sel);
11830      if (Sel == USS_InvalidMember || Sel == USS_MissingMember) {
11831        assert(!Name.empty());
11832        D << Name;
11833      }
11834    }
11835    if (Sel == USS_InvalidMember) {
11836      S.Diag(VD->getLocation(), diag::note_var_declared_here)
11837          << VD << VD->getSourceRange();
11838    }
11839    return QualType();
11840  }
11841};
11842} // namespace
11843
11844QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind,
11845                                           SourceLocation Loc,
11846                                           ComparisonCategoryUsage Usage) {
11847  assert(getLangOpts().CPlusPlus &&
11848         "Looking for comparison category type outside of C++.");
11849
11850  // Use an elaborated type for diagnostics which has a name containing the
11851  // prepended 'std' namespace but not any inline namespace names.
11852  auto TyForDiags = [&](ComparisonCategoryInfo *Info) {
11853    auto *NNS =
11854        NestedNameSpecifier::Create(Context, nullptr, getStdNamespace());
11855    return Context.getElaboratedType(ElaboratedTypeKeyword::None, NNS,
11856                                     Info->getType());
11857  };
11858
11859  // Check if we've already successfully checked the comparison category type
11860  // before. If so, skip checking it again.
11861  ComparisonCategoryInfo *Info = Context.CompCategories.lookupInfo(Kind);
11862  if (Info && FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)]) {
11863    // The only thing we need to check is that the type has a reachable
11864    // definition in the current context.
11865    if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))
11866      return QualType();
11867
11868    return Info->getType();
11869  }
11870
11871  // If lookup failed
11872  if (!Info) {
11873    std::string NameForDiags = "std::";
11874    NameForDiags += ComparisonCategories::getCategoryString(Kind);
11875    Diag(Loc, diag::err_implied_comparison_category_type_not_found)
11876        << NameForDiags << (int)Usage;
11877    return QualType();
11878  }
11879
11880  assert(Info->Kind == Kind);
11881  assert(Info->Record);
11882
11883  // Update the Record decl in case we encountered a forward declaration on our
11884  // first pass. FIXME: This is a bit of a hack.
11885  if (Info->Record->hasDefinition())
11886    Info->Record = Info->Record->getDefinition();
11887
11888  if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))
11889    return QualType();
11890
11891  InvalidSTLDiagnoser UnsupportedSTLError{*this, Loc, TyForDiags(Info)};
11892
11893  if (!Info->Record->isTriviallyCopyable())
11894    return UnsupportedSTLError(USS_NonTrivial);
11895
11896  for (const CXXBaseSpecifier &BaseSpec : Info->Record->bases()) {
11897    CXXRecordDecl *Base = BaseSpec.getType()->getAsCXXRecordDecl();
11898    // Tolerate empty base classes.
11899    if (Base->isEmpty())
11900      continue;
11901    // Reject STL implementations which have at least one non-empty base.
11902    return UnsupportedSTLError();
11903  }
11904
11905  // Check that the STL has implemented the types using a single integer field.
11906  // This expectation allows better codegen for builtin operators. We require:
11907  //   (1) The class has exactly one field.
11908  //   (2) The field is an integral or enumeration type.
11909  auto FIt = Info->Record->field_begin(), FEnd = Info->Record->field_end();
11910  if (std::distance(FIt, FEnd) != 1 ||
11911      !FIt->getType()->isIntegralOrEnumerationType()) {
11912    return UnsupportedSTLError();
11913  }
11914
11915  // Build each of the require values and store them in Info.
11916  for (ComparisonCategoryResult CCR :
11917       ComparisonCategories::getPossibleResultsForType(Kind)) {
11918    StringRef MemName = ComparisonCategories::getResultString(CCR);
11919    ComparisonCategoryInfo::ValueInfo *ValInfo = Info->lookupValueInfo(CCR);
11920
11921    if (!ValInfo)
11922      return UnsupportedSTLError(USS_MissingMember, MemName);
11923
11924    VarDecl *VD = ValInfo->VD;
11925    assert(VD && "should not be null!");
11926
11927    // Attempt to diagnose reasons why the STL definition of this type
11928    // might be foobar, including it failing to be a constant expression.
11929    // TODO Handle more ways the lookup or result can be invalid.
11930    if (!VD->isStaticDataMember() ||
11931        !VD->isUsableInConstantExpressions(Context))
11932      return UnsupportedSTLError(USS_InvalidMember, MemName, VD);
11933
11934    // Attempt to evaluate the var decl as a constant expression and extract
11935    // the value of its first field as a ICE. If this fails, the STL
11936    // implementation is not supported.
11937    if (!ValInfo->hasValidIntValue())
11938      return UnsupportedSTLError();
11939
11940    MarkVariableReferenced(Loc, VD);
11941  }
11942
11943  // We've successfully built the required types and expressions. Update
11944  // the cache and return the newly cached value.
11945  FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)] = true;
11946  return Info->getType();
11947}
11948
11949/// Retrieve the special "std" namespace, which may require us to
11950/// implicitly define the namespace.
11951NamespaceDecl *Sema::getOrCreateStdNamespace() {
11952  if (!StdNamespace) {
11953    // The "std" namespace has not yet been defined, so build one implicitly.
11954    StdNamespace = NamespaceDecl::Create(
11955        Context, Context.getTranslationUnitDecl(),
11956        /*Inline=*/false, SourceLocation(), SourceLocation(),
11957        &PP.getIdentifierTable().get("std"),
11958        /*PrevDecl=*/nullptr, /*Nested=*/false);
11959    getStdNamespace()->setImplicit(true);
11960    // We want the created NamespaceDecl to be available for redeclaration
11961    // lookups, but not for regular name lookups.
11962    Context.getTranslationUnitDecl()->addDecl(getStdNamespace());
11963    getStdNamespace()->clearIdentifierNamespace();
11964  }
11965
11966  return getStdNamespace();
11967}
11968
11969bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
11970  assert(getLangOpts().CPlusPlus &&
11971         "Looking for std::initializer_list outside of C++.");
11972
11973  // We're looking for implicit instantiations of
11974  // template <typename E> class std::initializer_list.
11975
11976  if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
11977    return false;
11978
11979  ClassTemplateDecl *Template = nullptr;
11980  const TemplateArgument *Arguments = nullptr;
11981
11982  if (const RecordType *RT = Ty->getAs<RecordType>()) {
11983
11984    ClassTemplateSpecializationDecl *Specialization =
11985        dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
11986    if (!Specialization)
11987      return false;
11988
11989    Template = Specialization->getSpecializedTemplate();
11990    Arguments = Specialization->getTemplateArgs().data();
11991  } else if (const TemplateSpecializationType *TST =
11992                 Ty->getAs<TemplateSpecializationType>()) {
11993    Template = dyn_cast_or_null<ClassTemplateDecl>(
11994        TST->getTemplateName().getAsTemplateDecl());
11995    Arguments = TST->template_arguments().begin();
11996  }
11997  if (!Template)
11998    return false;
11999
12000  if (!StdInitializerList) {
12001    // Haven't recognized std::initializer_list yet, maybe this is it.
12002    CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
12003    if (TemplateClass->getIdentifier() !=
12004            &PP.getIdentifierTable().get("initializer_list") ||
12005        !getStdNamespace()->InEnclosingNamespaceSetOf(
12006            TemplateClass->getDeclContext()))
12007      return false;
12008    // This is a template called std::initializer_list, but is it the right
12009    // template?
12010    TemplateParameterList *Params = Template->getTemplateParameters();
12011    if (Params->getMinRequiredArguments() != 1)
12012      return false;
12013    if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
12014      return false;
12015
12016    // It's the right template.
12017    StdInitializerList = Template;
12018  }
12019
12020  if (Template->getCanonicalDecl() != StdInitializerList->getCanonicalDecl())
12021    return false;
12022
12023  // This is an instance of std::initializer_list. Find the argument type.
12024  if (Element)
12025    *Element = Arguments[0].getAsType();
12026  return true;
12027}
12028
12029static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
12030  NamespaceDecl *Std = S.getStdNamespace();
12031  if (!Std) {
12032    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
12033    return nullptr;
12034  }
12035
12036  LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
12037                      Loc, Sema::LookupOrdinaryName);
12038  if (!S.LookupQualifiedName(Result, Std)) {
12039    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
12040    return nullptr;
12041  }
12042  ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
12043  if (!Template) {
12044    Result.suppressDiagnostics();
12045    // We found something weird. Complain about the first thing we found.
12046    NamedDecl *Found = *Result.begin();
12047    S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
12048    return nullptr;
12049  }
12050
12051  // We found some template called std::initializer_list. Now verify that it's
12052  // correct.
12053  TemplateParameterList *Params = Template->getTemplateParameters();
12054  if (Params->getMinRequiredArguments() != 1 ||
12055      !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
12056    S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
12057    return nullptr;
12058  }
12059
12060  return Template;
12061}
12062
12063QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
12064  if (!StdInitializerList) {
12065    StdInitializerList = LookupStdInitializerList(*this, Loc);
12066    if (!StdInitializerList)
12067      return QualType();
12068  }
12069
12070  TemplateArgumentListInfo Args(Loc, Loc);
12071  Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
12072                                       Context.getTrivialTypeSourceInfo(Element,
12073                                                                        Loc)));
12074  return Context.getElaboratedType(
12075      ElaboratedTypeKeyword::None,
12076      NestedNameSpecifier::Create(Context, nullptr, getStdNamespace()),
12077      CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
12078}
12079
12080bool Sema::isInitListConstructor(const FunctionDecl *Ctor) {
12081  // C++ [dcl.init.list]p2:
12082  //   A constructor is an initializer-list constructor if its first parameter
12083  //   is of type std::initializer_list<E> or reference to possibly cv-qualified
12084  //   std::initializer_list<E> for some type E, and either there are no other
12085  //   parameters or else all other parameters have default arguments.
12086  if (!Ctor->hasOneParamOrDefaultArgs())
12087    return false;
12088
12089  QualType ArgType = Ctor->getParamDecl(0)->getType();
12090  if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
12091    ArgType = RT->getPointeeType().getUnqualifiedType();
12092
12093  return isStdInitializerList(ArgType, nullptr);
12094}
12095
12096/// Determine whether a using statement is in a context where it will be
12097/// apply in all contexts.
12098static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
12099  switch (CurContext->getDeclKind()) {
12100    case Decl::TranslationUnit:
12101      return true;
12102    case Decl::LinkageSpec:
12103      return IsUsingDirectiveInToplevelContext(CurContext->getParent());
12104    default:
12105      return false;
12106  }
12107}
12108
12109namespace {
12110
12111// Callback to only accept typo corrections that are namespaces.
12112class NamespaceValidatorCCC final : public CorrectionCandidateCallback {
12113public:
12114  bool ValidateCandidate(const TypoCorrection &candidate) override {
12115    if (NamedDecl *ND = candidate.getCorrectionDecl())
12116      return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
12117    return false;
12118  }
12119
12120  std::unique_ptr<CorrectionCandidateCallback> clone() override {
12121    return std::make_unique<NamespaceValidatorCCC>(*this);
12122  }
12123};
12124
12125}
12126
12127static void DiagnoseInvisibleNamespace(const TypoCorrection &Corrected,
12128                                       Sema &S) {
12129  auto *ND = cast<NamespaceDecl>(Corrected.getFoundDecl());
12130  Module *M = ND->getOwningModule();
12131  assert(M && "hidden namespace definition not in a module?");
12132
12133  if (M->isExplicitGlobalModule())
12134    S.Diag(Corrected.getCorrectionRange().getBegin(),
12135           diag::err_module_unimported_use_header)
12136        << (int)Sema::MissingImportKind::Declaration << Corrected.getFoundDecl()
12137        << /*Header Name*/ false;
12138  else
12139    S.Diag(Corrected.getCorrectionRange().getBegin(),
12140           diag::err_module_unimported_use)
12141        << (int)Sema::MissingImportKind::Declaration << Corrected.getFoundDecl()
12142        << M->getTopLevelModuleName();
12143}
12144
12145static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
12146                                       CXXScopeSpec &SS,
12147                                       SourceLocation IdentLoc,
12148                                       IdentifierInfo *Ident) {
12149  R.clear();
12150  NamespaceValidatorCCC CCC{};
12151  if (TypoCorrection Corrected =
12152          S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC,
12153                        Sema::CTK_ErrorRecovery)) {
12154    // Generally we find it is confusing more than helpful to diagnose the
12155    // invisible namespace.
12156    // See https://github.com/llvm/llvm-project/issues/73893.
12157    //
12158    // However, we should diagnose when the users are trying to using an
12159    // invisible namespace. So we handle the case specially here.
12160    if (isa_and_nonnull<NamespaceDecl>(Corrected.getFoundDecl()) &&
12161        Corrected.requiresImport()) {
12162      DiagnoseInvisibleNamespace(Corrected, S);
12163    } else if (DeclContext *DC = S.computeDeclContext(SS, false)) {
12164      std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
12165      bool DroppedSpecifier = Corrected.WillReplaceSpecifier() &&
12166                              Ident->getName().equals(CorrectedStr);
12167      S.diagnoseTypo(Corrected,
12168                     S.PDiag(diag::err_using_directive_member_suggest)
12169                       << Ident << DC << DroppedSpecifier << SS.getRange(),
12170                     S.PDiag(diag::note_namespace_defined_here));
12171    } else {
12172      S.diagnoseTypo(Corrected,
12173                     S.PDiag(diag::err_using_directive_suggest) << Ident,
12174                     S.PDiag(diag::note_namespace_defined_here));
12175    }
12176    R.addDecl(Corrected.getFoundDecl());
12177    return true;
12178  }
12179  return false;
12180}
12181
12182Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc,
12183                                SourceLocation NamespcLoc, CXXScopeSpec &SS,
12184                                SourceLocation IdentLoc,
12185                                IdentifierInfo *NamespcName,
12186                                const ParsedAttributesView &AttrList) {
12187  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
12188  assert(NamespcName && "Invalid NamespcName.");
12189  assert(IdentLoc.isValid() && "Invalid NamespceName location.");
12190
12191  // This can only happen along a recovery path.
12192  while (S->isTemplateParamScope())
12193    S = S->getParent();
12194  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
12195
12196  UsingDirectiveDecl *UDir = nullptr;
12197  NestedNameSpecifier *Qualifier = nullptr;
12198  if (SS.isSet())
12199    Qualifier = SS.getScopeRep();
12200
12201  // Lookup namespace name.
12202  LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
12203  LookupParsedName(R, S, &SS);
12204  if (R.isAmbiguous())
12205    return nullptr;
12206
12207  if (R.empty()) {
12208    R.clear();
12209    // Allow "using namespace std;" or "using namespace ::std;" even if
12210    // "std" hasn't been defined yet, for GCC compatibility.
12211    if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
12212        NamespcName->isStr("std")) {
12213      Diag(IdentLoc, diag::ext_using_undefined_std);
12214      R.addDecl(getOrCreateStdNamespace());
12215      R.resolveKind();
12216    }
12217    // Otherwise, attempt typo correction.
12218    else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
12219  }
12220
12221  if (!R.empty()) {
12222    NamedDecl *Named = R.getRepresentativeDecl();
12223    NamespaceDecl *NS = R.getAsSingle<NamespaceDecl>();
12224    assert(NS && "expected namespace decl");
12225
12226    // The use of a nested name specifier may trigger deprecation warnings.
12227    DiagnoseUseOfDecl(Named, IdentLoc);
12228
12229    // C++ [namespace.udir]p1:
12230    //   A using-directive specifies that the names in the nominated
12231    //   namespace can be used in the scope in which the
12232    //   using-directive appears after the using-directive. During
12233    //   unqualified name lookup (3.4.1), the names appear as if they
12234    //   were declared in the nearest enclosing namespace which
12235    //   contains both the using-directive and the nominated
12236    //   namespace. [Note: in this context, "contains" means "contains
12237    //   directly or indirectly". ]
12238
12239    // Find enclosing context containing both using-directive and
12240    // nominated namespace.
12241    DeclContext *CommonAncestor = NS;
12242    while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
12243      CommonAncestor = CommonAncestor->getParent();
12244
12245    UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
12246                                      SS.getWithLocInContext(Context),
12247                                      IdentLoc, Named, CommonAncestor);
12248
12249    if (IsUsingDirectiveInToplevelContext(CurContext) &&
12250        !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
12251      Diag(IdentLoc, diag::warn_using_directive_in_header);
12252    }
12253
12254    PushUsingDirective(S, UDir);
12255  } else {
12256    Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
12257  }
12258
12259  if (UDir)
12260    ProcessDeclAttributeList(S, UDir, AttrList);
12261
12262  return UDir;
12263}
12264
12265void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
12266  // If the scope has an associated entity and the using directive is at
12267  // namespace or translation unit scope, add the UsingDirectiveDecl into
12268  // its lookup structure so qualified name lookup can find it.
12269  DeclContext *Ctx = S->getEntity();
12270  if (Ctx && !Ctx->isFunctionOrMethod())
12271    Ctx->addDecl(UDir);
12272  else
12273    // Otherwise, it is at block scope. The using-directives will affect lookup
12274    // only to the end of the scope.
12275    S->PushUsingDirective(UDir);
12276}
12277
12278Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS,
12279                                  SourceLocation UsingLoc,
12280                                  SourceLocation TypenameLoc, CXXScopeSpec &SS,
12281                                  UnqualifiedId &Name,
12282                                  SourceLocation EllipsisLoc,
12283                                  const ParsedAttributesView &AttrList) {
12284  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
12285
12286  if (SS.isEmpty()) {
12287    Diag(Name.getBeginLoc(), diag::err_using_requires_qualname);
12288    return nullptr;
12289  }
12290
12291  switch (Name.getKind()) {
12292  case UnqualifiedIdKind::IK_ImplicitSelfParam:
12293  case UnqualifiedIdKind::IK_Identifier:
12294  case UnqualifiedIdKind::IK_OperatorFunctionId:
12295  case UnqualifiedIdKind::IK_LiteralOperatorId:
12296  case UnqualifiedIdKind::IK_ConversionFunctionId:
12297    break;
12298
12299  case UnqualifiedIdKind::IK_ConstructorName:
12300  case UnqualifiedIdKind::IK_ConstructorTemplateId:
12301    // C++11 inheriting constructors.
12302    Diag(Name.getBeginLoc(),
12303         getLangOpts().CPlusPlus11
12304             ? diag::warn_cxx98_compat_using_decl_constructor
12305             : diag::err_using_decl_constructor)
12306        << SS.getRange();
12307
12308    if (getLangOpts().CPlusPlus11) break;
12309
12310    return nullptr;
12311
12312  case UnqualifiedIdKind::IK_DestructorName:
12313    Diag(Name.getBeginLoc(), diag::err_using_decl_destructor) << SS.getRange();
12314    return nullptr;
12315
12316  case UnqualifiedIdKind::IK_TemplateId:
12317    Diag(Name.getBeginLoc(), diag::err_using_decl_template_id)
12318        << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
12319    return nullptr;
12320
12321  case UnqualifiedIdKind::IK_DeductionGuideName:
12322    llvm_unreachable("cannot parse qualified deduction guide name");
12323  }
12324
12325  DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
12326  DeclarationName TargetName = TargetNameInfo.getName();
12327  if (!TargetName)
12328    return nullptr;
12329
12330  // Warn about access declarations.
12331  if (UsingLoc.isInvalid()) {
12332    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11
12333                                 ? diag::err_access_decl
12334                                 : diag::warn_access_decl_deprecated)
12335        << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
12336  }
12337
12338  if (EllipsisLoc.isInvalid()) {
12339    if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
12340        DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
12341      return nullptr;
12342  } else {
12343    if (!SS.getScopeRep()->containsUnexpandedParameterPack() &&
12344        !TargetNameInfo.containsUnexpandedParameterPack()) {
12345      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
12346        << SourceRange(SS.getBeginLoc(), TargetNameInfo.getEndLoc());
12347      EllipsisLoc = SourceLocation();
12348    }
12349  }
12350
12351  NamedDecl *UD =
12352      BuildUsingDeclaration(S, AS, UsingLoc, TypenameLoc.isValid(), TypenameLoc,
12353                            SS, TargetNameInfo, EllipsisLoc, AttrList,
12354                            /*IsInstantiation*/ false,
12355                            AttrList.hasAttribute(ParsedAttr::AT_UsingIfExists));
12356  if (UD)
12357    PushOnScopeChains(UD, S, /*AddToContext*/ false);
12358
12359  return UD;
12360}
12361
12362Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS,
12363                                      SourceLocation UsingLoc,
12364                                      SourceLocation EnumLoc,
12365                                      SourceLocation IdentLoc,
12366                                      IdentifierInfo &II, CXXScopeSpec *SS) {
12367  assert(!SS->isInvalid() && "ScopeSpec is invalid");
12368  TypeSourceInfo *TSI = nullptr;
12369  QualType EnumTy = GetTypeFromParser(
12370      getTypeName(II, IdentLoc, S, SS, /*isClassName=*/false,
12371                  /*HasTrailingDot=*/false,
12372                  /*ObjectType=*/nullptr, /*IsCtorOrDtorName=*/false,
12373                  /*WantNontrivialTypeSourceInfo=*/true),
12374      &TSI);
12375  if (EnumTy.isNull()) {
12376    Diag(IdentLoc, SS && isDependentScopeSpecifier(*SS)
12377                       ? diag::err_using_enum_is_dependent
12378                       : diag::err_unknown_typename)
12379        << II.getName()
12380        << SourceRange(SS ? SS->getBeginLoc() : IdentLoc, IdentLoc);
12381    return nullptr;
12382  }
12383
12384  auto *Enum = dyn_cast_if_present<EnumDecl>(EnumTy->getAsTagDecl());
12385  if (!Enum) {
12386    Diag(IdentLoc, diag::err_using_enum_not_enum) << EnumTy;
12387    return nullptr;
12388  }
12389
12390  if (auto *Def = Enum->getDefinition())
12391    Enum = Def;
12392
12393  if (TSI == nullptr)
12394    TSI = Context.getTrivialTypeSourceInfo(EnumTy, IdentLoc);
12395
12396  auto *UD =
12397      BuildUsingEnumDeclaration(S, AS, UsingLoc, EnumLoc, IdentLoc, TSI, Enum);
12398
12399  if (UD)
12400    PushOnScopeChains(UD, S, /*AddToContext*/ false);
12401
12402  return UD;
12403}
12404
12405/// Determine whether a using declaration considers the given
12406/// declarations as "equivalent", e.g., if they are redeclarations of
12407/// the same entity or are both typedefs of the same type.
12408static bool
12409IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2) {
12410  if (D1->getCanonicalDecl() == D2->getCanonicalDecl())
12411    return true;
12412
12413  if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
12414    if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2))
12415      return Context.hasSameType(TD1->getUnderlyingType(),
12416                                 TD2->getUnderlyingType());
12417
12418  // Two using_if_exists using-declarations are equivalent if both are
12419  // unresolved.
12420  if (isa<UnresolvedUsingIfExistsDecl>(D1) &&
12421      isa<UnresolvedUsingIfExistsDecl>(D2))
12422    return true;
12423
12424  return false;
12425}
12426
12427
12428/// Determines whether to create a using shadow decl for a particular
12429/// decl, given the set of decls existing prior to this using lookup.
12430bool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig,
12431                                const LookupResult &Previous,
12432                                UsingShadowDecl *&PrevShadow) {
12433  // Diagnose finding a decl which is not from a base class of the
12434  // current class.  We do this now because there are cases where this
12435  // function will silently decide not to build a shadow decl, which
12436  // will pre-empt further diagnostics.
12437  //
12438  // We don't need to do this in C++11 because we do the check once on
12439  // the qualifier.
12440  //
12441  // FIXME: diagnose the following if we care enough:
12442  //   struct A { int foo; };
12443  //   struct B : A { using A::foo; };
12444  //   template <class T> struct C : A {};
12445  //   template <class T> struct D : C<T> { using B::foo; } // <---
12446  // This is invalid (during instantiation) in C++03 because B::foo
12447  // resolves to the using decl in B, which is not a base class of D<T>.
12448  // We can't diagnose it immediately because C<T> is an unknown
12449  // specialization. The UsingShadowDecl in D<T> then points directly
12450  // to A::foo, which will look well-formed when we instantiate.
12451  // The right solution is to not collapse the shadow-decl chain.
12452  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())
12453    if (auto *Using = dyn_cast<UsingDecl>(BUD)) {
12454      DeclContext *OrigDC = Orig->getDeclContext();
12455
12456      // Handle enums and anonymous structs.
12457      if (isa<EnumDecl>(OrigDC))
12458        OrigDC = OrigDC->getParent();
12459      CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
12460      while (OrigRec->isAnonymousStructOrUnion())
12461        OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
12462
12463      if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
12464        if (OrigDC == CurContext) {
12465          Diag(Using->getLocation(),
12466               diag::err_using_decl_nested_name_specifier_is_current_class)
12467              << Using->getQualifierLoc().getSourceRange();
12468          Diag(Orig->getLocation(), diag::note_using_decl_target);
12469          Using->setInvalidDecl();
12470          return true;
12471        }
12472
12473        Diag(Using->getQualifierLoc().getBeginLoc(),
12474             diag::err_using_decl_nested_name_specifier_is_not_base_class)
12475            << Using->getQualifier() << cast<CXXRecordDecl>(CurContext)
12476            << Using->getQualifierLoc().getSourceRange();
12477        Diag(Orig->getLocation(), diag::note_using_decl_target);
12478        Using->setInvalidDecl();
12479        return true;
12480      }
12481    }
12482
12483  if (Previous.empty()) return false;
12484
12485  NamedDecl *Target = Orig;
12486  if (isa<UsingShadowDecl>(Target))
12487    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
12488
12489  // If the target happens to be one of the previous declarations, we
12490  // don't have a conflict.
12491  //
12492  // FIXME: but we might be increasing its access, in which case we
12493  // should redeclare it.
12494  NamedDecl *NonTag = nullptr, *Tag = nullptr;
12495  bool FoundEquivalentDecl = false;
12496  for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
12497         I != E; ++I) {
12498    NamedDecl *D = (*I)->getUnderlyingDecl();
12499    // We can have UsingDecls in our Previous results because we use the same
12500    // LookupResult for checking whether the UsingDecl itself is a valid
12501    // redeclaration.
12502    if (isa<UsingDecl>(D) || isa<UsingPackDecl>(D) || isa<UsingEnumDecl>(D))
12503      continue;
12504
12505    if (auto *RD = dyn_cast<CXXRecordDecl>(D)) {
12506      // C++ [class.mem]p19:
12507      //   If T is the name of a class, then [every named member other than
12508      //   a non-static data member] shall have a name different from T
12509      if (RD->isInjectedClassName() && !isa<FieldDecl>(Target) &&
12510          !isa<IndirectFieldDecl>(Target) &&
12511          !isa<UnresolvedUsingValueDecl>(Target) &&
12512          DiagnoseClassNameShadow(
12513              CurContext,
12514              DeclarationNameInfo(BUD->getDeclName(), BUD->getLocation())))
12515        return true;
12516    }
12517
12518    if (IsEquivalentForUsingDecl(Context, D, Target)) {
12519      if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(*I))
12520        PrevShadow = Shadow;
12521      FoundEquivalentDecl = true;
12522    } else if (isEquivalentInternalLinkageDeclaration(D, Target)) {
12523      // We don't conflict with an existing using shadow decl of an equivalent
12524      // declaration, but we're not a redeclaration of it.
12525      FoundEquivalentDecl = true;
12526    }
12527
12528    if (isVisible(D))
12529      (isa<TagDecl>(D) ? Tag : NonTag) = D;
12530  }
12531
12532  if (FoundEquivalentDecl)
12533    return false;
12534
12535  // Always emit a diagnostic for a mismatch between an unresolved
12536  // using_if_exists and a resolved using declaration in either direction.
12537  if (isa<UnresolvedUsingIfExistsDecl>(Target) !=
12538      (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {
12539    if (!NonTag && !Tag)
12540      return false;
12541    Diag(BUD->getLocation(), diag::err_using_decl_conflict);
12542    Diag(Target->getLocation(), diag::note_using_decl_target);
12543    Diag((NonTag ? NonTag : Tag)->getLocation(),
12544         diag::note_using_decl_conflict);
12545    BUD->setInvalidDecl();
12546    return true;
12547  }
12548
12549  if (FunctionDecl *FD = Target->getAsFunction()) {
12550    NamedDecl *OldDecl = nullptr;
12551    switch (CheckOverload(nullptr, FD, Previous, OldDecl,
12552                          /*IsForUsingDecl*/ true)) {
12553    case Ovl_Overload:
12554      return false;
12555
12556    case Ovl_NonFunction:
12557      Diag(BUD->getLocation(), diag::err_using_decl_conflict);
12558      break;
12559
12560    // We found a decl with the exact signature.
12561    case Ovl_Match:
12562      // If we're in a record, we want to hide the target, so we
12563      // return true (without a diagnostic) to tell the caller not to
12564      // build a shadow decl.
12565      if (CurContext->isRecord())
12566        return true;
12567
12568      // If we're not in a record, this is an error.
12569      Diag(BUD->getLocation(), diag::err_using_decl_conflict);
12570      break;
12571    }
12572
12573    Diag(Target->getLocation(), diag::note_using_decl_target);
12574    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
12575    BUD->setInvalidDecl();
12576    return true;
12577  }
12578
12579  // Target is not a function.
12580
12581  if (isa<TagDecl>(Target)) {
12582    // No conflict between a tag and a non-tag.
12583    if (!Tag) return false;
12584
12585    Diag(BUD->getLocation(), diag::err_using_decl_conflict);
12586    Diag(Target->getLocation(), diag::note_using_decl_target);
12587    Diag(Tag->getLocation(), diag::note_using_decl_conflict);
12588    BUD->setInvalidDecl();
12589    return true;
12590  }
12591
12592  // No conflict between a tag and a non-tag.
12593  if (!NonTag) return false;
12594
12595  Diag(BUD->getLocation(), diag::err_using_decl_conflict);
12596  Diag(Target->getLocation(), diag::note_using_decl_target);
12597  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
12598  BUD->setInvalidDecl();
12599  return true;
12600}
12601
12602/// Determine whether a direct base class is a virtual base class.
12603static bool isVirtualDirectBase(CXXRecordDecl *Derived, CXXRecordDecl *Base) {
12604  if (!Derived->getNumVBases())
12605    return false;
12606  for (auto &B : Derived->bases())
12607    if (B.getType()->getAsCXXRecordDecl() == Base)
12608      return B.isVirtual();
12609  llvm_unreachable("not a direct base class");
12610}
12611
12612/// Builds a shadow declaration corresponding to a 'using' declaration.
12613UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S, BaseUsingDecl *BUD,
12614                                            NamedDecl *Orig,
12615                                            UsingShadowDecl *PrevDecl) {
12616  // If we resolved to another shadow declaration, just coalesce them.
12617  NamedDecl *Target = Orig;
12618  if (isa<UsingShadowDecl>(Target)) {
12619    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
12620    assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
12621  }
12622
12623  NamedDecl *NonTemplateTarget = Target;
12624  if (auto *TargetTD = dyn_cast<TemplateDecl>(Target))
12625    NonTemplateTarget = TargetTD->getTemplatedDecl();
12626
12627  UsingShadowDecl *Shadow;
12628  if (NonTemplateTarget && isa<CXXConstructorDecl>(NonTemplateTarget)) {
12629    UsingDecl *Using = cast<UsingDecl>(BUD);
12630    bool IsVirtualBase =
12631        isVirtualDirectBase(cast<CXXRecordDecl>(CurContext),
12632                            Using->getQualifier()->getAsRecordDecl());
12633    Shadow = ConstructorUsingShadowDecl::Create(
12634        Context, CurContext, Using->getLocation(), Using, Orig, IsVirtualBase);
12635  } else {
12636    Shadow = UsingShadowDecl::Create(Context, CurContext, BUD->getLocation(),
12637                                     Target->getDeclName(), BUD, Target);
12638  }
12639  BUD->addShadowDecl(Shadow);
12640
12641  Shadow->setAccess(BUD->getAccess());
12642  if (Orig->isInvalidDecl() || BUD->isInvalidDecl())
12643    Shadow->setInvalidDecl();
12644
12645  Shadow->setPreviousDecl(PrevDecl);
12646
12647  if (S)
12648    PushOnScopeChains(Shadow, S);
12649  else
12650    CurContext->addDecl(Shadow);
12651
12652
12653  return Shadow;
12654}
12655
12656/// Hides a using shadow declaration.  This is required by the current
12657/// using-decl implementation when a resolvable using declaration in a
12658/// class is followed by a declaration which would hide or override
12659/// one or more of the using decl's targets; for example:
12660///
12661///   struct Base { void foo(int); };
12662///   struct Derived : Base {
12663///     using Base::foo;
12664///     void foo(int);
12665///   };
12666///
12667/// The governing language is C++03 [namespace.udecl]p12:
12668///
12669///   When a using-declaration brings names from a base class into a
12670///   derived class scope, member functions in the derived class
12671///   override and/or hide member functions with the same name and
12672///   parameter types in a base class (rather than conflicting).
12673///
12674/// There are two ways to implement this:
12675///   (1) optimistically create shadow decls when they're not hidden
12676///       by existing declarations, or
12677///   (2) don't create any shadow decls (or at least don't make them
12678///       visible) until we've fully parsed/instantiated the class.
12679/// The problem with (1) is that we might have to retroactively remove
12680/// a shadow decl, which requires several O(n) operations because the
12681/// decl structures are (very reasonably) not designed for removal.
12682/// (2) avoids this but is very fiddly and phase-dependent.
12683void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
12684  if (Shadow->getDeclName().getNameKind() ==
12685        DeclarationName::CXXConversionFunctionName)
12686    cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
12687
12688  // Remove it from the DeclContext...
12689  Shadow->getDeclContext()->removeDecl(Shadow);
12690
12691  // ...and the scope, if applicable...
12692  if (S) {
12693    S->RemoveDecl(Shadow);
12694    IdResolver.RemoveDecl(Shadow);
12695  }
12696
12697  // ...and the using decl.
12698  Shadow->getIntroducer()->removeShadowDecl(Shadow);
12699
12700  // TODO: complain somehow if Shadow was used.  It shouldn't
12701  // be possible for this to happen, because...?
12702}
12703
12704/// Find the base specifier for a base class with the given type.
12705static CXXBaseSpecifier *findDirectBaseWithType(CXXRecordDecl *Derived,
12706                                                QualType DesiredBase,
12707                                                bool &AnyDependentBases) {
12708  // Check whether the named type is a direct base class.
12709  CanQualType CanonicalDesiredBase = DesiredBase->getCanonicalTypeUnqualified()
12710    .getUnqualifiedType();
12711  for (auto &Base : Derived->bases()) {
12712    CanQualType BaseType = Base.getType()->getCanonicalTypeUnqualified();
12713    if (CanonicalDesiredBase == BaseType)
12714      return &Base;
12715    if (BaseType->isDependentType())
12716      AnyDependentBases = true;
12717  }
12718  return nullptr;
12719}
12720
12721namespace {
12722class UsingValidatorCCC final : public CorrectionCandidateCallback {
12723public:
12724  UsingValidatorCCC(bool HasTypenameKeyword, bool IsInstantiation,
12725                    NestedNameSpecifier *NNS, CXXRecordDecl *RequireMemberOf)
12726      : HasTypenameKeyword(HasTypenameKeyword),
12727        IsInstantiation(IsInstantiation), OldNNS(NNS),
12728        RequireMemberOf(RequireMemberOf) {}
12729
12730  bool ValidateCandidate(const TypoCorrection &Candidate) override {
12731    NamedDecl *ND = Candidate.getCorrectionDecl();
12732
12733    // Keywords are not valid here.
12734    if (!ND || isa<NamespaceDecl>(ND))
12735      return false;
12736
12737    // Completely unqualified names are invalid for a 'using' declaration.
12738    if (Candidate.WillReplaceSpecifier() && !Candidate.getCorrectionSpecifier())
12739      return false;
12740
12741    // FIXME: Don't correct to a name that CheckUsingDeclRedeclaration would
12742    // reject.
12743
12744    if (RequireMemberOf) {
12745      auto *FoundRecord = dyn_cast<CXXRecordDecl>(ND);
12746      if (FoundRecord && FoundRecord->isInjectedClassName()) {
12747        // No-one ever wants a using-declaration to name an injected-class-name
12748        // of a base class, unless they're declaring an inheriting constructor.
12749        ASTContext &Ctx = ND->getASTContext();
12750        if (!Ctx.getLangOpts().CPlusPlus11)
12751          return false;
12752        QualType FoundType = Ctx.getRecordType(FoundRecord);
12753
12754        // Check that the injected-class-name is named as a member of its own
12755        // type; we don't want to suggest 'using Derived::Base;', since that
12756        // means something else.
12757        NestedNameSpecifier *Specifier =
12758            Candidate.WillReplaceSpecifier()
12759                ? Candidate.getCorrectionSpecifier()
12760                : OldNNS;
12761        if (!Specifier->getAsType() ||
12762            !Ctx.hasSameType(QualType(Specifier->getAsType(), 0), FoundType))
12763          return false;
12764
12765        // Check that this inheriting constructor declaration actually names a
12766        // direct base class of the current class.
12767        bool AnyDependentBases = false;
12768        if (!findDirectBaseWithType(RequireMemberOf,
12769                                    Ctx.getRecordType(FoundRecord),
12770                                    AnyDependentBases) &&
12771            !AnyDependentBases)
12772          return false;
12773      } else {
12774        auto *RD = dyn_cast<CXXRecordDecl>(ND->getDeclContext());
12775        if (!RD || RequireMemberOf->isProvablyNotDerivedFrom(RD))
12776          return false;
12777
12778        // FIXME: Check that the base class member is accessible?
12779      }
12780    } else {
12781      auto *FoundRecord = dyn_cast<CXXRecordDecl>(ND);
12782      if (FoundRecord && FoundRecord->isInjectedClassName())
12783        return false;
12784    }
12785
12786    if (isa<TypeDecl>(ND))
12787      return HasTypenameKeyword || !IsInstantiation;
12788
12789    return !HasTypenameKeyword;
12790  }
12791
12792  std::unique_ptr<CorrectionCandidateCallback> clone() override {
12793    return std::make_unique<UsingValidatorCCC>(*this);
12794  }
12795
12796private:
12797  bool HasTypenameKeyword;
12798  bool IsInstantiation;
12799  NestedNameSpecifier *OldNNS;
12800  CXXRecordDecl *RequireMemberOf;
12801};
12802} // end anonymous namespace
12803
12804/// Remove decls we can't actually see from a lookup being used to declare
12805/// shadow using decls.
12806///
12807/// \param S - The scope of the potential shadow decl
12808/// \param Previous - The lookup of a potential shadow decl's name.
12809void Sema::FilterUsingLookup(Scope *S, LookupResult &Previous) {
12810  // It is really dumb that we have to do this.
12811  LookupResult::Filter F = Previous.makeFilter();
12812  while (F.hasNext()) {
12813    NamedDecl *D = F.next();
12814    if (!isDeclInScope(D, CurContext, S))
12815      F.erase();
12816    // If we found a local extern declaration that's not ordinarily visible,
12817    // and this declaration is being added to a non-block scope, ignore it.
12818    // We're only checking for scope conflicts here, not also for violations
12819    // of the linkage rules.
12820    else if (!CurContext->isFunctionOrMethod() && D->isLocalExternDecl() &&
12821             !(D->getIdentifierNamespace() & Decl::IDNS_Ordinary))
12822      F.erase();
12823  }
12824  F.done();
12825}
12826
12827/// Builds a using declaration.
12828///
12829/// \param IsInstantiation - Whether this call arises from an
12830///   instantiation of an unresolved using declaration.  We treat
12831///   the lookup differently for these declarations.
12832NamedDecl *Sema::BuildUsingDeclaration(
12833    Scope *S, AccessSpecifier AS, SourceLocation UsingLoc,
12834    bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS,
12835    DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc,
12836    const ParsedAttributesView &AttrList, bool IsInstantiation,
12837    bool IsUsingIfExists) {
12838  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
12839  SourceLocation IdentLoc = NameInfo.getLoc();
12840  assert(IdentLoc.isValid() && "Invalid TargetName location.");
12841
12842  // FIXME: We ignore attributes for now.
12843
12844  // For an inheriting constructor declaration, the name of the using
12845  // declaration is the name of a constructor in this class, not in the
12846  // base class.
12847  DeclarationNameInfo UsingName = NameInfo;
12848  if (UsingName.getName().getNameKind() == DeclarationName::CXXConstructorName)
12849    if (auto *RD = dyn_cast<CXXRecordDecl>(CurContext))
12850      UsingName.setName(Context.DeclarationNames.getCXXConstructorName(
12851          Context.getCanonicalType(Context.getRecordType(RD))));
12852
12853  // Do the redeclaration lookup in the current scope.
12854  LookupResult Previous(*this, UsingName, LookupUsingDeclName,
12855                        ForVisibleRedeclaration);
12856  Previous.setHideTags(false);
12857  if (S) {
12858    LookupName(Previous, S);
12859
12860    FilterUsingLookup(S, Previous);
12861  } else {
12862    assert(IsInstantiation && "no scope in non-instantiation");
12863    if (CurContext->isRecord())
12864      LookupQualifiedName(Previous, CurContext);
12865    else {
12866      // No redeclaration check is needed here; in non-member contexts we
12867      // diagnosed all possible conflicts with other using-declarations when
12868      // building the template:
12869      //
12870      // For a dependent non-type using declaration, the only valid case is
12871      // if we instantiate to a single enumerator. We check for conflicts
12872      // between shadow declarations we introduce, and we check in the template
12873      // definition for conflicts between a non-type using declaration and any
12874      // other declaration, which together covers all cases.
12875      //
12876      // A dependent typename using declaration will never successfully
12877      // instantiate, since it will always name a class member, so we reject
12878      // that in the template definition.
12879    }
12880  }
12881
12882  // Check for invalid redeclarations.
12883  if (CheckUsingDeclRedeclaration(UsingLoc, HasTypenameKeyword,
12884                                  SS, IdentLoc, Previous))
12885    return nullptr;
12886
12887  // 'using_if_exists' doesn't make sense on an inherited constructor.
12888  if (IsUsingIfExists && UsingName.getName().getNameKind() ==
12889                             DeclarationName::CXXConstructorName) {
12890    Diag(UsingLoc, diag::err_using_if_exists_on_ctor);
12891    return nullptr;
12892  }
12893
12894  DeclContext *LookupContext = computeDeclContext(SS);
12895  NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
12896  if (!LookupContext || EllipsisLoc.isValid()) {
12897    NamedDecl *D;
12898    // Dependent scope, or an unexpanded pack
12899    if (!LookupContext && CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword,
12900                                                  SS, NameInfo, IdentLoc))
12901      return nullptr;
12902
12903    if (HasTypenameKeyword) {
12904      // FIXME: not all declaration name kinds are legal here
12905      D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
12906                                              UsingLoc, TypenameLoc,
12907                                              QualifierLoc,
12908                                              IdentLoc, NameInfo.getName(),
12909                                              EllipsisLoc);
12910    } else {
12911      D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
12912                                           QualifierLoc, NameInfo, EllipsisLoc);
12913    }
12914    D->setAccess(AS);
12915    CurContext->addDecl(D);
12916    ProcessDeclAttributeList(S, D, AttrList);
12917    return D;
12918  }
12919
12920  auto Build = [&](bool Invalid) {
12921    UsingDecl *UD =
12922        UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
12923                          UsingName, HasTypenameKeyword);
12924    UD->setAccess(AS);
12925    CurContext->addDecl(UD);
12926    ProcessDeclAttributeList(S, UD, AttrList);
12927    UD->setInvalidDecl(Invalid);
12928    return UD;
12929  };
12930  auto BuildInvalid = [&]{ return Build(true); };
12931  auto BuildValid = [&]{ return Build(false); };
12932
12933  if (RequireCompleteDeclContext(SS, LookupContext))
12934    return BuildInvalid();
12935
12936  // Look up the target name.
12937  LookupResult R(*this, NameInfo, LookupOrdinaryName);
12938
12939  // Unlike most lookups, we don't always want to hide tag
12940  // declarations: tag names are visible through the using declaration
12941  // even if hidden by ordinary names, *except* in a dependent context
12942  // where they may be used by two-phase lookup.
12943  if (!IsInstantiation)
12944    R.setHideTags(false);
12945
12946  // For the purposes of this lookup, we have a base object type
12947  // equal to that of the current context.
12948  if (CurContext->isRecord()) {
12949    R.setBaseObjectType(
12950                   Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
12951  }
12952
12953  LookupQualifiedName(R, LookupContext);
12954
12955  // Validate the context, now we have a lookup
12956  if (CheckUsingDeclQualifier(UsingLoc, HasTypenameKeyword, SS, NameInfo,
12957                              IdentLoc, &R))
12958    return nullptr;
12959
12960  if (R.empty() && IsUsingIfExists)
12961    R.addDecl(UnresolvedUsingIfExistsDecl::Create(Context, CurContext, UsingLoc,
12962                                                  UsingName.getName()),
12963              AS_public);
12964
12965  // Try to correct typos if possible. If constructor name lookup finds no
12966  // results, that means the named class has no explicit constructors, and we
12967  // suppressed declaring implicit ones (probably because it's dependent or
12968  // invalid).
12969  if (R.empty() &&
12970      NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {
12971    // HACK 2017-01-08: Work around an issue with libstdc++'s detection of
12972    // ::gets. Sometimes it believes that glibc provides a ::gets in cases where
12973    // it does not. The issue was fixed in libstdc++ 6.3 (2016-12-21) and later.
12974    auto *II = NameInfo.getName().getAsIdentifierInfo();
12975    if (getLangOpts().CPlusPlus14 && II && II->isStr("gets") &&
12976        CurContext->isStdNamespace() &&
12977        isa<TranslationUnitDecl>(LookupContext) &&
12978        getSourceManager().isInSystemHeader(UsingLoc))
12979      return nullptr;
12980    UsingValidatorCCC CCC(HasTypenameKeyword, IsInstantiation, SS.getScopeRep(),
12981                          dyn_cast<CXXRecordDecl>(CurContext));
12982    if (TypoCorrection Corrected =
12983            CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC,
12984                        CTK_ErrorRecovery)) {
12985      // We reject candidates where DroppedSpecifier == true, hence the
12986      // literal '0' below.
12987      diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest)
12988                                << NameInfo.getName() << LookupContext << 0
12989                                << SS.getRange());
12990
12991      // If we picked a correction with no attached Decl we can't do anything
12992      // useful with it, bail out.
12993      NamedDecl *ND = Corrected.getCorrectionDecl();
12994      if (!ND)
12995        return BuildInvalid();
12996
12997      // If we corrected to an inheriting constructor, handle it as one.
12998      auto *RD = dyn_cast<CXXRecordDecl>(ND);
12999      if (RD && RD->isInjectedClassName()) {
13000        // The parent of the injected class name is the class itself.
13001        RD = cast<CXXRecordDecl>(RD->getParent());
13002
13003        // Fix up the information we'll use to build the using declaration.
13004        if (Corrected.WillReplaceSpecifier()) {
13005          NestedNameSpecifierLocBuilder Builder;
13006          Builder.MakeTrivial(Context, Corrected.getCorrectionSpecifier(),
13007                              QualifierLoc.getSourceRange());
13008          QualifierLoc = Builder.getWithLocInContext(Context);
13009        }
13010
13011        // In this case, the name we introduce is the name of a derived class
13012        // constructor.
13013        auto *CurClass = cast<CXXRecordDecl>(CurContext);
13014        UsingName.setName(Context.DeclarationNames.getCXXConstructorName(
13015            Context.getCanonicalType(Context.getRecordType(CurClass))));
13016        UsingName.setNamedTypeInfo(nullptr);
13017        for (auto *Ctor : LookupConstructors(RD))
13018          R.addDecl(Ctor);
13019        R.resolveKind();
13020      } else {
13021        // FIXME: Pick up all the declarations if we found an overloaded
13022        // function.
13023        UsingName.setName(ND->getDeclName());
13024        R.addDecl(ND);
13025      }
13026    } else {
13027      Diag(IdentLoc, diag::err_no_member)
13028        << NameInfo.getName() << LookupContext << SS.getRange();
13029      return BuildInvalid();
13030    }
13031  }
13032
13033  if (R.isAmbiguous())
13034    return BuildInvalid();
13035
13036  if (HasTypenameKeyword) {
13037    // If we asked for a typename and got a non-type decl, error out.
13038    if (!R.getAsSingle<TypeDecl>() &&
13039        !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {
13040      Diag(IdentLoc, diag::err_using_typename_non_type);
13041      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
13042        Diag((*I)->getUnderlyingDecl()->getLocation(),
13043             diag::note_using_decl_target);
13044      return BuildInvalid();
13045    }
13046  } else {
13047    // If we asked for a non-typename and we got a type, error out,
13048    // but only if this is an instantiation of an unresolved using
13049    // decl.  Otherwise just silently find the type name.
13050    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
13051      Diag(IdentLoc, diag::err_using_dependent_value_is_type);
13052      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
13053      return BuildInvalid();
13054    }
13055  }
13056
13057  // C++14 [namespace.udecl]p6:
13058  // A using-declaration shall not name a namespace.
13059  if (R.getAsSingle<NamespaceDecl>()) {
13060    Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
13061      << SS.getRange();
13062    return BuildInvalid();
13063  }
13064
13065  UsingDecl *UD = BuildValid();
13066
13067  // Some additional rules apply to inheriting constructors.
13068  if (UsingName.getName().getNameKind() ==
13069        DeclarationName::CXXConstructorName) {
13070    // Suppress access diagnostics; the access check is instead performed at the
13071    // point of use for an inheriting constructor.
13072    R.suppressDiagnostics();
13073    if (CheckInheritingConstructorUsingDecl(UD))
13074      return UD;
13075  }
13076
13077  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
13078    UsingShadowDecl *PrevDecl = nullptr;
13079    if (!CheckUsingShadowDecl(UD, *I, Previous, PrevDecl))
13080      BuildUsingShadowDecl(S, UD, *I, PrevDecl);
13081  }
13082
13083  return UD;
13084}
13085
13086NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS,
13087                                           SourceLocation UsingLoc,
13088                                           SourceLocation EnumLoc,
13089                                           SourceLocation NameLoc,
13090                                           TypeSourceInfo *EnumType,
13091                                           EnumDecl *ED) {
13092  bool Invalid = false;
13093
13094  if (CurContext->getRedeclContext()->isRecord()) {
13095    /// In class scope, check if this is a duplicate, for better a diagnostic.
13096    DeclarationNameInfo UsingEnumName(ED->getDeclName(), NameLoc);
13097    LookupResult Previous(*this, UsingEnumName, LookupUsingDeclName,
13098                          ForVisibleRedeclaration);
13099
13100    LookupName(Previous, S);
13101
13102    for (NamedDecl *D : Previous)
13103      if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))
13104        if (UED->getEnumDecl() == ED) {
13105          Diag(UsingLoc, diag::err_using_enum_decl_redeclaration)
13106              << SourceRange(EnumLoc, NameLoc);
13107          Diag(D->getLocation(), diag::note_using_enum_decl) << 1;
13108          Invalid = true;
13109          break;
13110        }
13111  }
13112
13113  if (RequireCompleteEnumDecl(ED, NameLoc))
13114    Invalid = true;
13115
13116  UsingEnumDecl *UD = UsingEnumDecl::Create(Context, CurContext, UsingLoc,
13117                                            EnumLoc, NameLoc, EnumType);
13118  UD->setAccess(AS);
13119  CurContext->addDecl(UD);
13120
13121  if (Invalid) {
13122    UD->setInvalidDecl();
13123    return UD;
13124  }
13125
13126  // Create the shadow decls for each enumerator
13127  for (EnumConstantDecl *EC : ED->enumerators()) {
13128    UsingShadowDecl *PrevDecl = nullptr;
13129    DeclarationNameInfo DNI(EC->getDeclName(), EC->getLocation());
13130    LookupResult Previous(*this, DNI, LookupOrdinaryName,
13131                          ForVisibleRedeclaration);
13132    LookupName(Previous, S);
13133    FilterUsingLookup(S, Previous);
13134
13135    if (!CheckUsingShadowDecl(UD, EC, Previous, PrevDecl))
13136      BuildUsingShadowDecl(S, UD, EC, PrevDecl);
13137  }
13138
13139  return UD;
13140}
13141
13142NamedDecl *Sema::BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
13143                                    ArrayRef<NamedDecl *> Expansions) {
13144  assert(isa<UnresolvedUsingValueDecl>(InstantiatedFrom) ||
13145         isa<UnresolvedUsingTypenameDecl>(InstantiatedFrom) ||
13146         isa<UsingPackDecl>(InstantiatedFrom));
13147
13148  auto *UPD =
13149      UsingPackDecl::Create(Context, CurContext, InstantiatedFrom, Expansions);
13150  UPD->setAccess(InstantiatedFrom->getAccess());
13151  CurContext->addDecl(UPD);
13152  return UPD;
13153}
13154
13155/// Additional checks for a using declaration referring to a constructor name.
13156bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
13157  assert(!UD->hasTypename() && "expecting a constructor name");
13158
13159  const Type *SourceType = UD->getQualifier()->getAsType();
13160  assert(SourceType &&
13161         "Using decl naming constructor doesn't have type in scope spec.");
13162  CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
13163
13164  // Check whether the named type is a direct base class.
13165  bool AnyDependentBases = false;
13166  auto *Base = findDirectBaseWithType(TargetClass, QualType(SourceType, 0),
13167                                      AnyDependentBases);
13168  if (!Base && !AnyDependentBases) {
13169    Diag(UD->getUsingLoc(),
13170         diag::err_using_decl_constructor_not_in_direct_base)
13171      << UD->getNameInfo().getSourceRange()
13172      << QualType(SourceType, 0) << TargetClass;
13173    UD->setInvalidDecl();
13174    return true;
13175  }
13176
13177  if (Base)
13178    Base->setInheritConstructors();
13179
13180  return false;
13181}
13182
13183/// Checks that the given using declaration is not an invalid
13184/// redeclaration.  Note that this is checking only for the using decl
13185/// itself, not for any ill-formedness among the UsingShadowDecls.
13186bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
13187                                       bool HasTypenameKeyword,
13188                                       const CXXScopeSpec &SS,
13189                                       SourceLocation NameLoc,
13190                                       const LookupResult &Prev) {
13191  NestedNameSpecifier *Qual = SS.getScopeRep();
13192
13193  // C++03 [namespace.udecl]p8:
13194  // C++0x [namespace.udecl]p10:
13195  //   A using-declaration is a declaration and can therefore be used
13196  //   repeatedly where (and only where) multiple declarations are
13197  //   allowed.
13198  //
13199  // That's in non-member contexts.
13200  if (!CurContext->getRedeclContext()->isRecord()) {
13201    // A dependent qualifier outside a class can only ever resolve to an
13202    // enumeration type. Therefore it conflicts with any other non-type
13203    // declaration in the same scope.
13204    // FIXME: How should we check for dependent type-type conflicts at block
13205    // scope?
13206    if (Qual->isDependent() && !HasTypenameKeyword) {
13207      for (auto *D : Prev) {
13208        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {
13209          bool OldCouldBeEnumerator =
13210              isa<UnresolvedUsingValueDecl>(D) || isa<EnumConstantDecl>(D);
13211          Diag(NameLoc,
13212               OldCouldBeEnumerator ? diag::err_redefinition
13213                                    : diag::err_redefinition_different_kind)
13214              << Prev.getLookupName();
13215          Diag(D->getLocation(), diag::note_previous_definition);
13216          return true;
13217        }
13218      }
13219    }
13220    return false;
13221  }
13222
13223  const NestedNameSpecifier *CNNS =
13224      Context.getCanonicalNestedNameSpecifier(Qual);
13225  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
13226    NamedDecl *D = *I;
13227
13228    bool DTypename;
13229    NestedNameSpecifier *DQual;
13230    if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
13231      DTypename = UD->hasTypename();
13232      DQual = UD->getQualifier();
13233    } else if (UnresolvedUsingValueDecl *UD
13234                 = dyn_cast<UnresolvedUsingValueDecl>(D)) {
13235      DTypename = false;
13236      DQual = UD->getQualifier();
13237    } else if (UnresolvedUsingTypenameDecl *UD
13238                 = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
13239      DTypename = true;
13240      DQual = UD->getQualifier();
13241    } else continue;
13242
13243    // using decls differ if one says 'typename' and the other doesn't.
13244    // FIXME: non-dependent using decls?
13245    if (HasTypenameKeyword != DTypename) continue;
13246
13247    // using decls differ if they name different scopes (but note that
13248    // template instantiation can cause this check to trigger when it
13249    // didn't before instantiation).
13250    if (CNNS != Context.getCanonicalNestedNameSpecifier(DQual))
13251      continue;
13252
13253    Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
13254    Diag(D->getLocation(), diag::note_using_decl) << 1;
13255    return true;
13256  }
13257
13258  return false;
13259}
13260
13261/// Checks that the given nested-name qualifier used in a using decl
13262/// in the current context is appropriately related to the current
13263/// scope.  If an error is found, diagnoses it and returns true.
13264/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it's the
13265/// result of that lookup. UD is likewise nullptr, except when we have an
13266/// already-populated UsingDecl whose shadow decls contain the same information
13267/// (i.e. we're instantiating a UsingDecl with non-dependent scope).
13268bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename,
13269                                   const CXXScopeSpec &SS,
13270                                   const DeclarationNameInfo &NameInfo,
13271                                   SourceLocation NameLoc,
13272                                   const LookupResult *R, const UsingDecl *UD) {
13273  DeclContext *NamedContext = computeDeclContext(SS);
13274  assert(bool(NamedContext) == (R || UD) && !(R && UD) &&
13275         "resolvable context must have exactly one set of decls");
13276
13277  // C++ 20 permits using an enumerator that does not have a class-hierarchy
13278  // relationship.
13279  bool Cxx20Enumerator = false;
13280  if (NamedContext) {
13281    EnumConstantDecl *EC = nullptr;
13282    if (R)
13283      EC = R->getAsSingle<EnumConstantDecl>();
13284    else if (UD && UD->shadow_size() == 1)
13285      EC = dyn_cast<EnumConstantDecl>(UD->shadow_begin()->getTargetDecl());
13286    if (EC)
13287      Cxx20Enumerator = getLangOpts().CPlusPlus20;
13288
13289    if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {
13290      // C++14 [namespace.udecl]p7:
13291      // A using-declaration shall not name a scoped enumerator.
13292      // C++20 p1099 permits enumerators.
13293      if (EC && R && ED->isScoped())
13294        Diag(SS.getBeginLoc(),
13295             getLangOpts().CPlusPlus20
13296                 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator
13297                 : diag::ext_using_decl_scoped_enumerator)
13298            << SS.getRange();
13299
13300      // We want to consider the scope of the enumerator
13301      NamedContext = ED->getDeclContext();
13302    }
13303  }
13304
13305  if (!CurContext->isRecord()) {
13306    // C++03 [namespace.udecl]p3:
13307    // C++0x [namespace.udecl]p8:
13308    //   A using-declaration for a class member shall be a member-declaration.
13309    // C++20 [namespace.udecl]p7
13310    //   ... other than an enumerator ...
13311
13312    // If we weren't able to compute a valid scope, it might validly be a
13313    // dependent class or enumeration scope. If we have a 'typename' keyword,
13314    // the scope must resolve to a class type.
13315    if (NamedContext ? !NamedContext->getRedeclContext()->isRecord()
13316                     : !HasTypename)
13317      return false; // OK
13318
13319    Diag(NameLoc,
13320         Cxx20Enumerator
13321             ? diag::warn_cxx17_compat_using_decl_class_member_enumerator
13322             : diag::err_using_decl_can_not_refer_to_class_member)
13323        << SS.getRange();
13324
13325    if (Cxx20Enumerator)
13326      return false; // OK
13327
13328    auto *RD = NamedContext
13329                   ? cast<CXXRecordDecl>(NamedContext->getRedeclContext())
13330                   : nullptr;
13331    if (RD && !RequireCompleteDeclContext(const_cast<CXXScopeSpec &>(SS), RD)) {
13332      // See if there's a helpful fixit
13333
13334      if (!R) {
13335        // We will have already diagnosed the problem on the template
13336        // definition,  Maybe we should do so again?
13337      } else if (R->getAsSingle<TypeDecl>()) {
13338        if (getLangOpts().CPlusPlus11) {
13339          // Convert 'using X::Y;' to 'using Y = X::Y;'.
13340          Diag(SS.getBeginLoc(), diag::note_using_decl_class_member_workaround)
13341            << 0 // alias declaration
13342            << FixItHint::CreateInsertion(SS.getBeginLoc(),
13343                                          NameInfo.getName().getAsString() +
13344                                              " = ");
13345        } else {
13346          // Convert 'using X::Y;' to 'typedef X::Y Y;'.
13347          SourceLocation InsertLoc = getLocForEndOfToken(NameInfo.getEndLoc());
13348          Diag(InsertLoc, diag::note_using_decl_class_member_workaround)
13349            << 1 // typedef declaration
13350            << FixItHint::CreateReplacement(UsingLoc, "typedef")
13351            << FixItHint::CreateInsertion(
13352                   InsertLoc, " " + NameInfo.getName().getAsString());
13353        }
13354      } else if (R->getAsSingle<VarDecl>()) {
13355        // Don't provide a fixit outside C++11 mode; we don't want to suggest
13356        // repeating the type of the static data member here.
13357        FixItHint FixIt;
13358        if (getLangOpts().CPlusPlus11) {
13359          // Convert 'using X::Y;' to 'auto &Y = X::Y;'.
13360          FixIt = FixItHint::CreateReplacement(
13361              UsingLoc, "auto &" + NameInfo.getName().getAsString() + " = ");
13362        }
13363
13364        Diag(UsingLoc, diag::note_using_decl_class_member_workaround)
13365          << 2 // reference declaration
13366          << FixIt;
13367      } else if (R->getAsSingle<EnumConstantDecl>()) {
13368        // Don't provide a fixit outside C++11 mode; we don't want to suggest
13369        // repeating the type of the enumeration here, and we can't do so if
13370        // the type is anonymous.
13371        FixItHint FixIt;
13372        if (getLangOpts().CPlusPlus11) {
13373          // Convert 'using X::Y;' to 'auto &Y = X::Y;'.
13374          FixIt = FixItHint::CreateReplacement(
13375              UsingLoc,
13376              "constexpr auto " + NameInfo.getName().getAsString() + " = ");
13377        }
13378
13379        Diag(UsingLoc, diag::note_using_decl_class_member_workaround)
13380          << (getLangOpts().CPlusPlus11 ? 4 : 3) // const[expr] variable
13381          << FixIt;
13382      }
13383    }
13384
13385    return true; // Fail
13386  }
13387
13388  // If the named context is dependent, we can't decide much.
13389  if (!NamedContext) {
13390    // FIXME: in C++0x, we can diagnose if we can prove that the
13391    // nested-name-specifier does not refer to a base class, which is
13392    // still possible in some cases.
13393
13394    // Otherwise we have to conservatively report that things might be
13395    // okay.
13396    return false;
13397  }
13398
13399  // The current scope is a record.
13400  if (!NamedContext->isRecord()) {
13401    // Ideally this would point at the last name in the specifier,
13402    // but we don't have that level of source info.
13403    Diag(SS.getBeginLoc(),
13404         Cxx20Enumerator
13405             ? diag::warn_cxx17_compat_using_decl_non_member_enumerator
13406             : diag::err_using_decl_nested_name_specifier_is_not_class)
13407        << SS.getScopeRep() << SS.getRange();
13408
13409    if (Cxx20Enumerator)
13410      return false; // OK
13411
13412    return true;
13413  }
13414
13415  if (!NamedContext->isDependentContext() &&
13416      RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
13417    return true;
13418
13419  if (getLangOpts().CPlusPlus11) {
13420    // C++11 [namespace.udecl]p3:
13421    //   In a using-declaration used as a member-declaration, the
13422    //   nested-name-specifier shall name a base class of the class
13423    //   being defined.
13424
13425    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
13426                                 cast<CXXRecordDecl>(NamedContext))) {
13427
13428      if (Cxx20Enumerator) {
13429        Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator)
13430            << SS.getRange();
13431        return false;
13432      }
13433
13434      if (CurContext == NamedContext) {
13435        Diag(SS.getBeginLoc(),
13436             diag::err_using_decl_nested_name_specifier_is_current_class)
13437            << SS.getRange();
13438        return !getLangOpts().CPlusPlus20;
13439      }
13440
13441      if (!cast<CXXRecordDecl>(NamedContext)->isInvalidDecl()) {
13442        Diag(SS.getBeginLoc(),
13443             diag::err_using_decl_nested_name_specifier_is_not_base_class)
13444            << SS.getScopeRep() << cast<CXXRecordDecl>(CurContext)
13445            << SS.getRange();
13446      }
13447      return true;
13448    }
13449
13450    return false;
13451  }
13452
13453  // C++03 [namespace.udecl]p4:
13454  //   A using-declaration used as a member-declaration shall refer
13455  //   to a member of a base class of the class being defined [etc.].
13456
13457  // Salient point: SS doesn't have to name a base class as long as
13458  // lookup only finds members from base classes.  Therefore we can
13459  // diagnose here only if we can prove that can't happen,
13460  // i.e. if the class hierarchies provably don't intersect.
13461
13462  // TODO: it would be nice if "definitely valid" results were cached
13463  // in the UsingDecl and UsingShadowDecl so that these checks didn't
13464  // need to be repeated.
13465
13466  llvm::SmallPtrSet<const CXXRecordDecl *, 4> Bases;
13467  auto Collect = [&Bases](const CXXRecordDecl *Base) {
13468    Bases.insert(Base);
13469    return true;
13470  };
13471
13472  // Collect all bases. Return false if we find a dependent base.
13473  if (!cast<CXXRecordDecl>(CurContext)->forallBases(Collect))
13474    return false;
13475
13476  // Returns true if the base is dependent or is one of the accumulated base
13477  // classes.
13478  auto IsNotBase = [&Bases](const CXXRecordDecl *Base) {
13479    return !Bases.count(Base);
13480  };
13481
13482  // Return false if the class has a dependent base or if it or one
13483  // of its bases is present in the base set of the current context.
13484  if (Bases.count(cast<CXXRecordDecl>(NamedContext)) ||
13485      !cast<CXXRecordDecl>(NamedContext)->forallBases(IsNotBase))
13486    return false;
13487
13488  Diag(SS.getRange().getBegin(),
13489       diag::err_using_decl_nested_name_specifier_is_not_base_class)
13490    << SS.getScopeRep()
13491    << cast<CXXRecordDecl>(CurContext)
13492    << SS.getRange();
13493
13494  return true;
13495}
13496
13497Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS,
13498                                  MultiTemplateParamsArg TemplateParamLists,
13499                                  SourceLocation UsingLoc, UnqualifiedId &Name,
13500                                  const ParsedAttributesView &AttrList,
13501                                  TypeResult Type, Decl *DeclFromDeclSpec) {
13502  // Skip up to the relevant declaration scope.
13503  while (S->isTemplateParamScope())
13504    S = S->getParent();
13505  assert((S->getFlags() & Scope::DeclScope) &&
13506         "got alias-declaration outside of declaration scope");
13507
13508  if (Type.isInvalid())
13509    return nullptr;
13510
13511  bool Invalid = false;
13512  DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
13513  TypeSourceInfo *TInfo = nullptr;
13514  GetTypeFromParser(Type.get(), &TInfo);
13515
13516  if (DiagnoseClassNameShadow(CurContext, NameInfo))
13517    return nullptr;
13518
13519  if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
13520                                      UPPC_DeclarationType)) {
13521    Invalid = true;
13522    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
13523                                             TInfo->getTypeLoc().getBeginLoc());
13524  }
13525
13526  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
13527                        TemplateParamLists.size()
13528                            ? forRedeclarationInCurContext()
13529                            : ForVisibleRedeclaration);
13530  LookupName(Previous, S);
13531
13532  // Warn about shadowing the name of a template parameter.
13533  if (Previous.isSingleResult() &&
13534      Previous.getFoundDecl()->isTemplateParameter()) {
13535    DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
13536    Previous.clear();
13537  }
13538
13539  assert(Name.getKind() == UnqualifiedIdKind::IK_Identifier &&
13540         "name in alias declaration must be an identifier");
13541  TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
13542                                               Name.StartLocation,
13543                                               Name.Identifier, TInfo);
13544
13545  NewTD->setAccess(AS);
13546
13547  if (Invalid)
13548    NewTD->setInvalidDecl();
13549
13550  ProcessDeclAttributeList(S, NewTD, AttrList);
13551  AddPragmaAttributes(S, NewTD);
13552
13553  CheckTypedefForVariablyModifiedType(S, NewTD);
13554  Invalid |= NewTD->isInvalidDecl();
13555
13556  bool Redeclaration = false;
13557
13558  NamedDecl *NewND;
13559  if (TemplateParamLists.size()) {
13560    TypeAliasTemplateDecl *OldDecl = nullptr;
13561    TemplateParameterList *OldTemplateParams = nullptr;
13562
13563    if (TemplateParamLists.size() != 1) {
13564      Diag(UsingLoc, diag::err_alias_template_extra_headers)
13565        << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
13566         TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
13567    }
13568    TemplateParameterList *TemplateParams = TemplateParamLists[0];
13569
13570    // Check that we can declare a template here.
13571    if (CheckTemplateDeclScope(S, TemplateParams))
13572      return nullptr;
13573
13574    // Only consider previous declarations in the same scope.
13575    FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
13576                         /*ExplicitInstantiationOrSpecialization*/false);
13577    if (!Previous.empty()) {
13578      Redeclaration = true;
13579
13580      OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
13581      if (!OldDecl && !Invalid) {
13582        Diag(UsingLoc, diag::err_redefinition_different_kind)
13583          << Name.Identifier;
13584
13585        NamedDecl *OldD = Previous.getRepresentativeDecl();
13586        if (OldD->getLocation().isValid())
13587          Diag(OldD->getLocation(), diag::note_previous_definition);
13588
13589        Invalid = true;
13590      }
13591
13592      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
13593        if (TemplateParameterListsAreEqual(TemplateParams,
13594                                           OldDecl->getTemplateParameters(),
13595                                           /*Complain=*/true,
13596                                           TPL_TemplateMatch))
13597          OldTemplateParams =
13598              OldDecl->getMostRecentDecl()->getTemplateParameters();
13599        else
13600          Invalid = true;
13601
13602        TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
13603        if (!Invalid &&
13604            !Context.hasSameType(OldTD->getUnderlyingType(),
13605                                 NewTD->getUnderlyingType())) {
13606          // FIXME: The C++0x standard does not clearly say this is ill-formed,
13607          // but we can't reasonably accept it.
13608          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
13609            << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
13610          if (OldTD->getLocation().isValid())
13611            Diag(OldTD->getLocation(), diag::note_previous_definition);
13612          Invalid = true;
13613        }
13614      }
13615    }
13616
13617    // Merge any previous default template arguments into our parameters,
13618    // and check the parameter list.
13619    if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
13620                                   TPC_TypeAliasTemplate))
13621      return nullptr;
13622
13623    TypeAliasTemplateDecl *NewDecl =
13624      TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
13625                                    Name.Identifier, TemplateParams,
13626                                    NewTD);
13627    NewTD->setDescribedAliasTemplate(NewDecl);
13628
13629    NewDecl->setAccess(AS);
13630
13631    if (Invalid)
13632      NewDecl->setInvalidDecl();
13633    else if (OldDecl) {
13634      NewDecl->setPreviousDecl(OldDecl);
13635      CheckRedeclarationInModule(NewDecl, OldDecl);
13636    }
13637
13638    NewND = NewDecl;
13639  } else {
13640    if (auto *TD = dyn_cast_or_null<TagDecl>(DeclFromDeclSpec)) {
13641      setTagNameForLinkagePurposes(TD, NewTD);
13642      handleTagNumbering(TD, S);
13643    }
13644    ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
13645    NewND = NewTD;
13646  }
13647
13648  PushOnScopeChains(NewND, S);
13649  ActOnDocumentableDecl(NewND);
13650  return NewND;
13651}
13652
13653Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc,
13654                                   SourceLocation AliasLoc,
13655                                   IdentifierInfo *Alias, CXXScopeSpec &SS,
13656                                   SourceLocation IdentLoc,
13657                                   IdentifierInfo *Ident) {
13658
13659  // Lookup the namespace name.
13660  LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
13661  LookupParsedName(R, S, &SS);
13662
13663  if (R.isAmbiguous())
13664    return nullptr;
13665
13666  if (R.empty()) {
13667    if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
13668      Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
13669      return nullptr;
13670    }
13671  }
13672  assert(!R.isAmbiguous() && !R.empty());
13673  NamedDecl *ND = R.getRepresentativeDecl();
13674
13675  // Check if we have a previous declaration with the same name.
13676  LookupResult PrevR(*this, Alias, AliasLoc, LookupOrdinaryName,
13677                     ForVisibleRedeclaration);
13678  LookupName(PrevR, S);
13679
13680  // Check we're not shadowing a template parameter.
13681  if (PrevR.isSingleResult() && PrevR.getFoundDecl()->isTemplateParameter()) {
13682    DiagnoseTemplateParameterShadow(AliasLoc, PrevR.getFoundDecl());
13683    PrevR.clear();
13684  }
13685
13686  // Filter out any other lookup result from an enclosing scope.
13687  FilterLookupForScope(PrevR, CurContext, S, /*ConsiderLinkage*/false,
13688                       /*AllowInlineNamespace*/false);
13689
13690  // Find the previous declaration and check that we can redeclare it.
13691  NamespaceAliasDecl *Prev = nullptr;
13692  if (PrevR.isSingleResult()) {
13693    NamedDecl *PrevDecl = PrevR.getRepresentativeDecl();
13694    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
13695      // We already have an alias with the same name that points to the same
13696      // namespace; check that it matches.
13697      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {
13698        Prev = AD;
13699      } else if (isVisible(PrevDecl)) {
13700        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias)
13701          << Alias;
13702        Diag(AD->getLocation(), diag::note_previous_namespace_alias)
13703          << AD->getNamespace();
13704        return nullptr;
13705      }
13706    } else if (isVisible(PrevDecl)) {
13707      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl())
13708                            ? diag::err_redefinition
13709                            : diag::err_redefinition_different_kind;
13710      Diag(AliasLoc, DiagID) << Alias;
13711      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
13712      return nullptr;
13713    }
13714  }
13715
13716  // The use of a nested name specifier may trigger deprecation warnings.
13717  DiagnoseUseOfDecl(ND, IdentLoc);
13718
13719  NamespaceAliasDecl *AliasDecl =
13720    NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
13721                               Alias, SS.getWithLocInContext(Context),
13722                               IdentLoc, ND);
13723  if (Prev)
13724    AliasDecl->setPreviousDecl(Prev);
13725
13726  PushOnScopeChains(AliasDecl, S);
13727  return AliasDecl;
13728}
13729
13730namespace {
13731struct SpecialMemberExceptionSpecInfo
13732    : SpecialMemberVisitor<SpecialMemberExceptionSpecInfo> {
13733  SourceLocation Loc;
13734  Sema::ImplicitExceptionSpecification ExceptSpec;
13735
13736  SpecialMemberExceptionSpecInfo(Sema &S, CXXMethodDecl *MD,
13737                                 Sema::CXXSpecialMember CSM,
13738                                 Sema::InheritedConstructorInfo *ICI,
13739                                 SourceLocation Loc)
13740      : SpecialMemberVisitor(S, MD, CSM, ICI), Loc(Loc), ExceptSpec(S) {}
13741
13742  bool visitBase(CXXBaseSpecifier *Base);
13743  bool visitField(FieldDecl *FD);
13744
13745  void visitClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
13746                           unsigned Quals);
13747
13748  void visitSubobjectCall(Subobject Subobj,
13749                          Sema::SpecialMemberOverloadResult SMOR);
13750};
13751}
13752
13753bool SpecialMemberExceptionSpecInfo::visitBase(CXXBaseSpecifier *Base) {
13754  auto *RT = Base->getType()->getAs<RecordType>();
13755  if (!RT)
13756    return false;
13757
13758  auto *BaseClass = cast<CXXRecordDecl>(RT->getDecl());
13759  Sema::SpecialMemberOverloadResult SMOR = lookupInheritedCtor(BaseClass);
13760  if (auto *BaseCtor = SMOR.getMethod()) {
13761    visitSubobjectCall(Base, BaseCtor);
13762    return false;
13763  }
13764
13765  visitClassSubobject(BaseClass, Base, 0);
13766  return false;
13767}
13768
13769bool SpecialMemberExceptionSpecInfo::visitField(FieldDecl *FD) {
13770  if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer()) {
13771    Expr *E = FD->getInClassInitializer();
13772    if (!E)
13773      // FIXME: It's a little wasteful to build and throw away a
13774      // CXXDefaultInitExpr here.
13775      // FIXME: We should have a single context note pointing at Loc, and
13776      // this location should be MD->getLocation() instead, since that's
13777      // the location where we actually use the default init expression.
13778      E = S.BuildCXXDefaultInitExpr(Loc, FD).get();
13779    if (E)
13780      ExceptSpec.CalledExpr(E);
13781  } else if (auto *RT = S.Context.getBaseElementType(FD->getType())
13782                            ->getAs<RecordType>()) {
13783    visitClassSubobject(cast<CXXRecordDecl>(RT->getDecl()), FD,
13784                        FD->getType().getCVRQualifiers());
13785  }
13786  return false;
13787}
13788
13789void SpecialMemberExceptionSpecInfo::visitClassSubobject(CXXRecordDecl *Class,
13790                                                         Subobject Subobj,
13791                                                         unsigned Quals) {
13792  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
13793  bool IsMutable = Field && Field->isMutable();
13794  visitSubobjectCall(Subobj, lookupIn(Class, Quals, IsMutable));
13795}
13796
13797void SpecialMemberExceptionSpecInfo::visitSubobjectCall(
13798    Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR) {
13799  // Note, if lookup fails, it doesn't matter what exception specification we
13800  // choose because the special member will be deleted.
13801  if (CXXMethodDecl *MD = SMOR.getMethod())
13802    ExceptSpec.CalledDecl(getSubobjectLoc(Subobj), MD);
13803}
13804
13805bool Sema::tryResolveExplicitSpecifier(ExplicitSpecifier &ExplicitSpec) {
13806  llvm::APSInt Result;
13807  ExprResult Converted = CheckConvertedConstantExpression(
13808      ExplicitSpec.getExpr(), Context.BoolTy, Result, CCEK_ExplicitBool);
13809  ExplicitSpec.setExpr(Converted.get());
13810  if (Converted.isUsable() && !Converted.get()->isValueDependent()) {
13811    ExplicitSpec.setKind(Result.getBoolValue()
13812                             ? ExplicitSpecKind::ResolvedTrue
13813                             : ExplicitSpecKind::ResolvedFalse);
13814    return true;
13815  }
13816  ExplicitSpec.setKind(ExplicitSpecKind::Unresolved);
13817  return false;
13818}
13819
13820ExplicitSpecifier Sema::ActOnExplicitBoolSpecifier(Expr *ExplicitExpr) {
13821  ExplicitSpecifier ES(ExplicitExpr, ExplicitSpecKind::Unresolved);
13822  if (!ExplicitExpr->isTypeDependent())
13823    tryResolveExplicitSpecifier(ES);
13824  return ES;
13825}
13826
13827static Sema::ImplicitExceptionSpecification
13828ComputeDefaultedSpecialMemberExceptionSpec(
13829    Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
13830    Sema::InheritedConstructorInfo *ICI) {
13831  ComputingExceptionSpec CES(S, MD, Loc);
13832
13833  CXXRecordDecl *ClassDecl = MD->getParent();
13834
13835  // C++ [except.spec]p14:
13836  //   An implicitly declared special member function (Clause 12) shall have an
13837  //   exception-specification. [...]
13838  SpecialMemberExceptionSpecInfo Info(S, MD, CSM, ICI, MD->getLocation());
13839  if (ClassDecl->isInvalidDecl())
13840    return Info.ExceptSpec;
13841
13842  // FIXME: If this diagnostic fires, we're probably missing a check for
13843  // attempting to resolve an exception specification before it's known
13844  // at a higher level.
13845  if (S.RequireCompleteType(MD->getLocation(),
13846                            S.Context.getRecordType(ClassDecl),
13847                            diag::err_exception_spec_incomplete_type))
13848    return Info.ExceptSpec;
13849
13850  // C++1z [except.spec]p7:
13851  //   [Look for exceptions thrown by] a constructor selected [...] to
13852  //   initialize a potentially constructed subobject,
13853  // C++1z [except.spec]p8:
13854  //   The exception specification for an implicitly-declared destructor, or a
13855  //   destructor without a noexcept-specifier, is potentially-throwing if and
13856  //   only if any of the destructors for any of its potentially constructed
13857  //   subojects is potentially throwing.
13858  // FIXME: We respect the first rule but ignore the "potentially constructed"
13859  // in the second rule to resolve a core issue (no number yet) that would have
13860  // us reject:
13861  //   struct A { virtual void f() = 0; virtual ~A() noexcept(false) = 0; };
13862  //   struct B : A {};
13863  //   struct C : B { void f(); };
13864  // ... due to giving B::~B() a non-throwing exception specification.
13865  Info.visit(Info.IsConstructor ? Info.VisitPotentiallyConstructedBases
13866                                : Info.VisitAllBases);
13867
13868  return Info.ExceptSpec;
13869}
13870
13871namespace {
13872/// RAII object to register a special member as being currently declared.
13873struct DeclaringSpecialMember {
13874  Sema &S;
13875  Sema::SpecialMemberDecl D;
13876  Sema::ContextRAII SavedContext;
13877  bool WasAlreadyBeingDeclared;
13878
13879  DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
13880      : S(S), D(RD, CSM), SavedContext(S, RD) {
13881    WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D).second;
13882    if (WasAlreadyBeingDeclared)
13883      // This almost never happens, but if it does, ensure that our cache
13884      // doesn't contain a stale result.
13885      S.SpecialMemberCache.clear();
13886    else {
13887      // Register a note to be produced if we encounter an error while
13888      // declaring the special member.
13889      Sema::CodeSynthesisContext Ctx;
13890      Ctx.Kind = Sema::CodeSynthesisContext::DeclaringSpecialMember;
13891      // FIXME: We don't have a location to use here. Using the class's
13892      // location maintains the fiction that we declare all special members
13893      // with the class, but (1) it's not clear that lying about that helps our
13894      // users understand what's going on, and (2) there may be outer contexts
13895      // on the stack (some of which are relevant) and printing them exposes
13896      // our lies.
13897      Ctx.PointOfInstantiation = RD->getLocation();
13898      Ctx.Entity = RD;
13899      Ctx.SpecialMember = CSM;
13900      S.pushCodeSynthesisContext(Ctx);
13901    }
13902  }
13903  ~DeclaringSpecialMember() {
13904    if (!WasAlreadyBeingDeclared) {
13905      S.SpecialMembersBeingDeclared.erase(D);
13906      S.popCodeSynthesisContext();
13907    }
13908  }
13909
13910  /// Are we already trying to declare this special member?
13911  bool isAlreadyBeingDeclared() const {
13912    return WasAlreadyBeingDeclared;
13913  }
13914};
13915}
13916
13917void Sema::CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD) {
13918  // Look up any existing declarations, but don't trigger declaration of all
13919  // implicit special members with this name.
13920  DeclarationName Name = FD->getDeclName();
13921  LookupResult R(*this, Name, SourceLocation(), LookupOrdinaryName,
13922                 ForExternalRedeclaration);
13923  for (auto *D : FD->getParent()->lookup(Name))
13924    if (auto *Acceptable = R.getAcceptableDecl(D))
13925      R.addDecl(Acceptable);
13926  R.resolveKind();
13927  R.suppressDiagnostics();
13928
13929  CheckFunctionDeclaration(S, FD, R, /*IsMemberSpecialization*/ false,
13930                           FD->isThisDeclarationADefinition());
13931}
13932
13933void Sema::setupImplicitSpecialMemberType(CXXMethodDecl *SpecialMem,
13934                                          QualType ResultTy,
13935                                          ArrayRef<QualType> Args) {
13936  // Build an exception specification pointing back at this constructor.
13937  FunctionProtoType::ExtProtoInfo EPI = getImplicitMethodEPI(*this, SpecialMem);
13938
13939  LangAS AS = getDefaultCXXMethodAddrSpace();
13940  if (AS != LangAS::Default) {
13941    EPI.TypeQuals.addAddressSpace(AS);
13942  }
13943
13944  auto QT = Context.getFunctionType(ResultTy, Args, EPI);
13945  SpecialMem->setType(QT);
13946
13947  // During template instantiation of implicit special member functions we need
13948  // a reliable TypeSourceInfo for the function prototype in order to allow
13949  // functions to be substituted.
13950  if (inTemplateInstantiation() &&
13951      cast<CXXRecordDecl>(SpecialMem->getParent())->isLambda()) {
13952    TypeSourceInfo *TSI =
13953        Context.getTrivialTypeSourceInfo(SpecialMem->getType());
13954    SpecialMem->setTypeSourceInfo(TSI);
13955  }
13956}
13957
13958CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
13959                                                     CXXRecordDecl *ClassDecl) {
13960  // C++ [class.ctor]p5:
13961  //   A default constructor for a class X is a constructor of class X
13962  //   that can be called without an argument. If there is no
13963  //   user-declared constructor for class X, a default constructor is
13964  //   implicitly declared. An implicitly-declared default constructor
13965  //   is an inline public member of its class.
13966  assert(ClassDecl->needsImplicitDefaultConstructor() &&
13967         "Should not build implicit default constructor!");
13968
13969  DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
13970  if (DSM.isAlreadyBeingDeclared())
13971    return nullptr;
13972
13973  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
13974                                                     CXXDefaultConstructor,
13975                                                     false);
13976
13977  // Create the actual constructor declaration.
13978  CanQualType ClassType
13979    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
13980  SourceLocation ClassLoc = ClassDecl->getLocation();
13981  DeclarationName Name
13982    = Context.DeclarationNames.getCXXConstructorName(ClassType);
13983  DeclarationNameInfo NameInfo(Name, ClassLoc);
13984  CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
13985      Context, ClassDecl, ClassLoc, NameInfo, /*Type*/ QualType(),
13986      /*TInfo=*/nullptr, ExplicitSpecifier(),
13987      getCurFPFeatures().isFPConstrained(),
13988      /*isInline=*/true, /*isImplicitlyDeclared=*/true,
13989      Constexpr ? ConstexprSpecKind::Constexpr
13990                : ConstexprSpecKind::Unspecified);
13991  DefaultCon->setAccess(AS_public);
13992  DefaultCon->setDefaulted();
13993
13994  setupImplicitSpecialMemberType(DefaultCon, Context.VoidTy, std::nullopt);
13995
13996  if (getLangOpts().CUDA)
13997    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDefaultConstructor,
13998                                            DefaultCon,
13999                                            /* ConstRHS */ false,
14000                                            /* Diagnose */ false);
14001
14002  // We don't need to use SpecialMemberIsTrivial here; triviality for default
14003  // constructors is easy to compute.
14004  DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
14005
14006  // Note that we have declared this constructor.
14007  ++getASTContext().NumImplicitDefaultConstructorsDeclared;
14008
14009  Scope *S = getScopeForContext(ClassDecl);
14010  CheckImplicitSpecialMemberDeclaration(S, DefaultCon);
14011
14012  if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
14013    SetDeclDeleted(DefaultCon, ClassLoc);
14014
14015  if (S)
14016    PushOnScopeChains(DefaultCon, S, false);
14017  ClassDecl->addDecl(DefaultCon);
14018
14019  return DefaultCon;
14020}
14021
14022void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
14023                                            CXXConstructorDecl *Constructor) {
14024  assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
14025          !Constructor->doesThisDeclarationHaveABody() &&
14026          !Constructor->isDeleted()) &&
14027    "DefineImplicitDefaultConstructor - call it for implicit default ctor");
14028  if (Constructor->willHaveBody() || Constructor->isInvalidDecl())
14029    return;
14030
14031  CXXRecordDecl *ClassDecl = Constructor->getParent();
14032  assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
14033
14034  SynthesizedFunctionScope Scope(*this, Constructor);
14035
14036  // The exception specification is needed because we are defining the
14037  // function.
14038  ResolveExceptionSpec(CurrentLocation,
14039                       Constructor->getType()->castAs<FunctionProtoType>());
14040  MarkVTableUsed(CurrentLocation, ClassDecl);
14041
14042  // Add a context note for diagnostics produced after this point.
14043  Scope.addContextNote(CurrentLocation);
14044
14045  if (SetCtorInitializers(Constructor, /*AnyErrors=*/false)) {
14046    Constructor->setInvalidDecl();
14047    return;
14048  }
14049
14050  SourceLocation Loc = Constructor->getEndLoc().isValid()
14051                           ? Constructor->getEndLoc()
14052                           : Constructor->getLocation();
14053  Constructor->setBody(new (Context) CompoundStmt(Loc));
14054  Constructor->markUsed(Context);
14055
14056  if (ASTMutationListener *L = getASTMutationListener()) {
14057    L->CompletedImplicitDefinition(Constructor);
14058  }
14059
14060  DiagnoseUninitializedFields(*this, Constructor);
14061}
14062
14063void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
14064  // Perform any delayed checks on exception specifications.
14065  CheckDelayedMemberExceptionSpecs();
14066}
14067
14068/// Find or create the fake constructor we synthesize to model constructing an
14069/// object of a derived class via a constructor of a base class.
14070CXXConstructorDecl *
14071Sema::findInheritingConstructor(SourceLocation Loc,
14072                                CXXConstructorDecl *BaseCtor,
14073                                ConstructorUsingShadowDecl *Shadow) {
14074  CXXRecordDecl *Derived = Shadow->getParent();
14075  SourceLocation UsingLoc = Shadow->getLocation();
14076
14077  // FIXME: Add a new kind of DeclarationName for an inherited constructor.
14078  // For now we use the name of the base class constructor as a member of the
14079  // derived class to indicate a (fake) inherited constructor name.
14080  DeclarationName Name = BaseCtor->getDeclName();
14081
14082  // Check to see if we already have a fake constructor for this inherited
14083  // constructor call.
14084  for (NamedDecl *Ctor : Derived->lookup(Name))
14085    if (declaresSameEntity(cast<CXXConstructorDecl>(Ctor)
14086                               ->getInheritedConstructor()
14087                               .getConstructor(),
14088                           BaseCtor))
14089      return cast<CXXConstructorDecl>(Ctor);
14090
14091  DeclarationNameInfo NameInfo(Name, UsingLoc);
14092  TypeSourceInfo *TInfo =
14093      Context.getTrivialTypeSourceInfo(BaseCtor->getType(), UsingLoc);
14094  FunctionProtoTypeLoc ProtoLoc =
14095      TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
14096
14097  // Check the inherited constructor is valid and find the list of base classes
14098  // from which it was inherited.
14099  InheritedConstructorInfo ICI(*this, Loc, Shadow);
14100
14101  bool Constexpr =
14102      BaseCtor->isConstexpr() &&
14103      defaultedSpecialMemberIsConstexpr(*this, Derived, CXXDefaultConstructor,
14104                                        false, BaseCtor, &ICI);
14105
14106  CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
14107      Context, Derived, UsingLoc, NameInfo, TInfo->getType(), TInfo,
14108      BaseCtor->getExplicitSpecifier(), getCurFPFeatures().isFPConstrained(),
14109      /*isInline=*/true,
14110      /*isImplicitlyDeclared=*/true,
14111      Constexpr ? BaseCtor->getConstexprKind() : ConstexprSpecKind::Unspecified,
14112      InheritedConstructor(Shadow, BaseCtor),
14113      BaseCtor->getTrailingRequiresClause());
14114  if (Shadow->isInvalidDecl())
14115    DerivedCtor->setInvalidDecl();
14116
14117  // Build an unevaluated exception specification for this fake constructor.
14118  const FunctionProtoType *FPT = TInfo->getType()->castAs<FunctionProtoType>();
14119  FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
14120  EPI.ExceptionSpec.Type = EST_Unevaluated;
14121  EPI.ExceptionSpec.SourceDecl = DerivedCtor;
14122  DerivedCtor->setType(Context.getFunctionType(FPT->getReturnType(),
14123                                               FPT->getParamTypes(), EPI));
14124
14125  // Build the parameter declarations.
14126  SmallVector<ParmVarDecl *, 16> ParamDecls;
14127  for (unsigned I = 0, N = FPT->getNumParams(); I != N; ++I) {
14128    TypeSourceInfo *TInfo =
14129        Context.getTrivialTypeSourceInfo(FPT->getParamType(I), UsingLoc);
14130    ParmVarDecl *PD = ParmVarDecl::Create(
14131        Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/nullptr,
14132        FPT->getParamType(I), TInfo, SC_None, /*DefArg=*/nullptr);
14133    PD->setScopeInfo(0, I);
14134    PD->setImplicit();
14135    // Ensure attributes are propagated onto parameters (this matters for
14136    // format, pass_object_size, ...).
14137    mergeDeclAttributes(PD, BaseCtor->getParamDecl(I));
14138    ParamDecls.push_back(PD);
14139    ProtoLoc.setParam(I, PD);
14140  }
14141
14142  // Set up the new constructor.
14143  assert(!BaseCtor->isDeleted() && "should not use deleted constructor");
14144  DerivedCtor->setAccess(BaseCtor->getAccess());
14145  DerivedCtor->setParams(ParamDecls);
14146  Derived->addDecl(DerivedCtor);
14147
14148  if (ShouldDeleteSpecialMember(DerivedCtor, CXXDefaultConstructor, &ICI))
14149    SetDeclDeleted(DerivedCtor, UsingLoc);
14150
14151  return DerivedCtor;
14152}
14153
14154void Sema::NoteDeletedInheritingConstructor(CXXConstructorDecl *Ctor) {
14155  InheritedConstructorInfo ICI(*this, Ctor->getLocation(),
14156                               Ctor->getInheritedConstructor().getShadowDecl());
14157  ShouldDeleteSpecialMember(Ctor, CXXDefaultConstructor, &ICI,
14158                            /*Diagnose*/true);
14159}
14160
14161void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
14162                                       CXXConstructorDecl *Constructor) {
14163  CXXRecordDecl *ClassDecl = Constructor->getParent();
14164  assert(Constructor->getInheritedConstructor() &&
14165         !Constructor->doesThisDeclarationHaveABody() &&
14166         !Constructor->isDeleted());
14167  if (Constructor->willHaveBody() || Constructor->isInvalidDecl())
14168    return;
14169
14170  // Initializations are performed "as if by a defaulted default constructor",
14171  // so enter the appropriate scope.
14172  SynthesizedFunctionScope Scope(*this, Constructor);
14173
14174  // The exception specification is needed because we are defining the
14175  // function.
14176  ResolveExceptionSpec(CurrentLocation,
14177                       Constructor->getType()->castAs<FunctionProtoType>());
14178  MarkVTableUsed(CurrentLocation, ClassDecl);
14179
14180  // Add a context note for diagnostics produced after this point.
14181  Scope.addContextNote(CurrentLocation);
14182
14183  ConstructorUsingShadowDecl *Shadow =
14184      Constructor->getInheritedConstructor().getShadowDecl();
14185  CXXConstructorDecl *InheritedCtor =
14186      Constructor->getInheritedConstructor().getConstructor();
14187
14188  // [class.inhctor.init]p1:
14189  //   initialization proceeds as if a defaulted default constructor is used to
14190  //   initialize the D object and each base class subobject from which the
14191  //   constructor was inherited
14192
14193  InheritedConstructorInfo ICI(*this, CurrentLocation, Shadow);
14194  CXXRecordDecl *RD = Shadow->getParent();
14195  SourceLocation InitLoc = Shadow->getLocation();
14196
14197  // Build explicit initializers for all base classes from which the
14198  // constructor was inherited.
14199  SmallVector<CXXCtorInitializer*, 8> Inits;
14200  for (bool VBase : {false, true}) {
14201    for (CXXBaseSpecifier &B : VBase ? RD->vbases() : RD->bases()) {
14202      if (B.isVirtual() != VBase)
14203        continue;
14204
14205      auto *BaseRD = B.getType()->getAsCXXRecordDecl();
14206      if (!BaseRD)
14207        continue;
14208
14209      auto BaseCtor = ICI.findConstructorForBase(BaseRD, InheritedCtor);
14210      if (!BaseCtor.first)
14211        continue;
14212
14213      MarkFunctionReferenced(CurrentLocation, BaseCtor.first);
14214      ExprResult Init = new (Context) CXXInheritedCtorInitExpr(
14215          InitLoc, B.getType(), BaseCtor.first, VBase, BaseCtor.second);
14216
14217      auto *TInfo = Context.getTrivialTypeSourceInfo(B.getType(), InitLoc);
14218      Inits.push_back(new (Context) CXXCtorInitializer(
14219          Context, TInfo, VBase, InitLoc, Init.get(), InitLoc,
14220          SourceLocation()));
14221    }
14222  }
14223
14224  // We now proceed as if for a defaulted default constructor, with the relevant
14225  // initializers replaced.
14226
14227  if (SetCtorInitializers(Constructor, /*AnyErrors*/false, Inits)) {
14228    Constructor->setInvalidDecl();
14229    return;
14230  }
14231
14232  Constructor->setBody(new (Context) CompoundStmt(InitLoc));
14233  Constructor->markUsed(Context);
14234
14235  if (ASTMutationListener *L = getASTMutationListener()) {
14236    L->CompletedImplicitDefinition(Constructor);
14237  }
14238
14239  DiagnoseUninitializedFields(*this, Constructor);
14240}
14241
14242CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
14243  // C++ [class.dtor]p2:
14244  //   If a class has no user-declared destructor, a destructor is
14245  //   declared implicitly. An implicitly-declared destructor is an
14246  //   inline public member of its class.
14247  assert(ClassDecl->needsImplicitDestructor());
14248
14249  DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
14250  if (DSM.isAlreadyBeingDeclared())
14251    return nullptr;
14252
14253  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
14254                                                     CXXDestructor,
14255                                                     false);
14256
14257  // Create the actual destructor declaration.
14258  CanQualType ClassType
14259    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
14260  SourceLocation ClassLoc = ClassDecl->getLocation();
14261  DeclarationName Name
14262    = Context.DeclarationNames.getCXXDestructorName(ClassType);
14263  DeclarationNameInfo NameInfo(Name, ClassLoc);
14264  CXXDestructorDecl *Destructor = CXXDestructorDecl::Create(
14265      Context, ClassDecl, ClassLoc, NameInfo, QualType(), nullptr,
14266      getCurFPFeatures().isFPConstrained(),
14267      /*isInline=*/true,
14268      /*isImplicitlyDeclared=*/true,
14269      Constexpr ? ConstexprSpecKind::Constexpr
14270                : ConstexprSpecKind::Unspecified);
14271  Destructor->setAccess(AS_public);
14272  Destructor->setDefaulted();
14273
14274  setupImplicitSpecialMemberType(Destructor, Context.VoidTy, std::nullopt);
14275
14276  if (getLangOpts().CUDA)
14277    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDestructor,
14278                                            Destructor,
14279                                            /* ConstRHS */ false,
14280                                            /* Diagnose */ false);
14281
14282  // We don't need to use SpecialMemberIsTrivial here; triviality for
14283  // destructors is easy to compute.
14284  Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
14285  Destructor->setTrivialForCall(ClassDecl->hasAttr<TrivialABIAttr>() ||
14286                                ClassDecl->hasTrivialDestructorForCall());
14287
14288  // Note that we have declared this destructor.
14289  ++getASTContext().NumImplicitDestructorsDeclared;
14290
14291  Scope *S = getScopeForContext(ClassDecl);
14292  CheckImplicitSpecialMemberDeclaration(S, Destructor);
14293
14294  // We can't check whether an implicit destructor is deleted before we complete
14295  // the definition of the class, because its validity depends on the alignment
14296  // of the class. We'll check this from ActOnFields once the class is complete.
14297  if (ClassDecl->isCompleteDefinition() &&
14298      ShouldDeleteSpecialMember(Destructor, CXXDestructor))
14299    SetDeclDeleted(Destructor, ClassLoc);
14300
14301  // Introduce this destructor into its scope.
14302  if (S)
14303    PushOnScopeChains(Destructor, S, false);
14304  ClassDecl->addDecl(Destructor);
14305
14306  return Destructor;
14307}
14308
14309void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
14310                                    CXXDestructorDecl *Destructor) {
14311  assert((Destructor->isDefaulted() &&
14312          !Destructor->doesThisDeclarationHaveABody() &&
14313          !Destructor->isDeleted()) &&
14314         "DefineImplicitDestructor - call it for implicit default dtor");
14315  if (Destructor->willHaveBody() || Destructor->isInvalidDecl())
14316    return;
14317
14318  CXXRecordDecl *ClassDecl = Destructor->getParent();
14319  assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
14320
14321  SynthesizedFunctionScope Scope(*this, Destructor);
14322
14323  // The exception specification is needed because we are defining the
14324  // function.
14325  ResolveExceptionSpec(CurrentLocation,
14326                       Destructor->getType()->castAs<FunctionProtoType>());
14327  MarkVTableUsed(CurrentLocation, ClassDecl);
14328
14329  // Add a context note for diagnostics produced after this point.
14330  Scope.addContextNote(CurrentLocation);
14331
14332  MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
14333                                         Destructor->getParent());
14334
14335  if (CheckDestructor(Destructor)) {
14336    Destructor->setInvalidDecl();
14337    return;
14338  }
14339
14340  SourceLocation Loc = Destructor->getEndLoc().isValid()
14341                           ? Destructor->getEndLoc()
14342                           : Destructor->getLocation();
14343  Destructor->setBody(new (Context) CompoundStmt(Loc));
14344  Destructor->markUsed(Context);
14345
14346  if (ASTMutationListener *L = getASTMutationListener()) {
14347    L->CompletedImplicitDefinition(Destructor);
14348  }
14349}
14350
14351void Sema::CheckCompleteDestructorVariant(SourceLocation CurrentLocation,
14352                                          CXXDestructorDecl *Destructor) {
14353  if (Destructor->isInvalidDecl())
14354    return;
14355
14356  CXXRecordDecl *ClassDecl = Destructor->getParent();
14357  assert(Context.getTargetInfo().getCXXABI().isMicrosoft() &&
14358         "implicit complete dtors unneeded outside MS ABI");
14359  assert(ClassDecl->getNumVBases() > 0 &&
14360         "complete dtor only exists for classes with vbases");
14361
14362  SynthesizedFunctionScope Scope(*this, Destructor);
14363
14364  // Add a context note for diagnostics produced after this point.
14365  Scope.addContextNote(CurrentLocation);
14366
14367  MarkVirtualBaseDestructorsReferenced(Destructor->getLocation(), ClassDecl);
14368}
14369
14370/// Perform any semantic analysis which needs to be delayed until all
14371/// pending class member declarations have been parsed.
14372void Sema::ActOnFinishCXXMemberDecls() {
14373  // If the context is an invalid C++ class, just suppress these checks.
14374  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
14375    if (Record->isInvalidDecl()) {
14376      DelayedOverridingExceptionSpecChecks.clear();
14377      DelayedEquivalentExceptionSpecChecks.clear();
14378      return;
14379    }
14380    checkForMultipleExportedDefaultConstructors(*this, Record);
14381  }
14382}
14383
14384void Sema::ActOnFinishCXXNonNestedClass() {
14385  referenceDLLExportedClassMethods();
14386
14387  if (!DelayedDllExportMemberFunctions.empty()) {
14388    SmallVector<CXXMethodDecl*, 4> WorkList;
14389    std::swap(DelayedDllExportMemberFunctions, WorkList);
14390    for (CXXMethodDecl *M : WorkList) {
14391      DefineDefaultedFunction(*this, M, M->getLocation());
14392
14393      // Pass the method to the consumer to get emitted. This is not necessary
14394      // for explicit instantiation definitions, as they will get emitted
14395      // anyway.
14396      if (M->getParent()->getTemplateSpecializationKind() !=
14397          TSK_ExplicitInstantiationDefinition)
14398        ActOnFinishInlineFunctionDef(M);
14399    }
14400  }
14401}
14402
14403void Sema::referenceDLLExportedClassMethods() {
14404  if (!DelayedDllExportClasses.empty()) {
14405    // Calling ReferenceDllExportedMembers might cause the current function to
14406    // be called again, so use a local copy of DelayedDllExportClasses.
14407    SmallVector<CXXRecordDecl *, 4> WorkList;
14408    std::swap(DelayedDllExportClasses, WorkList);
14409    for (CXXRecordDecl *Class : WorkList)
14410      ReferenceDllExportedMembers(*this, Class);
14411  }
14412}
14413
14414void Sema::AdjustDestructorExceptionSpec(CXXDestructorDecl *Destructor) {
14415  assert(getLangOpts().CPlusPlus11 &&
14416         "adjusting dtor exception specs was introduced in c++11");
14417
14418  if (Destructor->isDependentContext())
14419    return;
14420
14421  // C++11 [class.dtor]p3:
14422  //   A declaration of a destructor that does not have an exception-
14423  //   specification is implicitly considered to have the same exception-
14424  //   specification as an implicit declaration.
14425  const auto *DtorType = Destructor->getType()->castAs<FunctionProtoType>();
14426  if (DtorType->hasExceptionSpec())
14427    return;
14428
14429  // Replace the destructor's type, building off the existing one. Fortunately,
14430  // the only thing of interest in the destructor type is its extended info.
14431  // The return and arguments are fixed.
14432  FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
14433  EPI.ExceptionSpec.Type = EST_Unevaluated;
14434  EPI.ExceptionSpec.SourceDecl = Destructor;
14435  Destructor->setType(
14436      Context.getFunctionType(Context.VoidTy, std::nullopt, EPI));
14437
14438  // FIXME: If the destructor has a body that could throw, and the newly created
14439  // spec doesn't allow exceptions, we should emit a warning, because this
14440  // change in behavior can break conforming C++03 programs at runtime.
14441  // However, we don't have a body or an exception specification yet, so it
14442  // needs to be done somewhere else.
14443}
14444
14445namespace {
14446/// An abstract base class for all helper classes used in building the
14447//  copy/move operators. These classes serve as factory functions and help us
14448//  avoid using the same Expr* in the AST twice.
14449class ExprBuilder {
14450  ExprBuilder(const ExprBuilder&) = delete;
14451  ExprBuilder &operator=(const ExprBuilder&) = delete;
14452
14453protected:
14454  static Expr *assertNotNull(Expr *E) {
14455    assert(E && "Expression construction must not fail.");
14456    return E;
14457  }
14458
14459public:
14460  ExprBuilder() {}
14461  virtual ~ExprBuilder() {}
14462
14463  virtual Expr *build(Sema &S, SourceLocation Loc) const = 0;
14464};
14465
14466class RefBuilder: public ExprBuilder {
14467  VarDecl *Var;
14468  QualType VarType;
14469
14470public:
14471  Expr *build(Sema &S, SourceLocation Loc) const override {
14472    return assertNotNull(S.BuildDeclRefExpr(Var, VarType, VK_LValue, Loc));
14473  }
14474
14475  RefBuilder(VarDecl *Var, QualType VarType)
14476      : Var(Var), VarType(VarType) {}
14477};
14478
14479class ThisBuilder: public ExprBuilder {
14480public:
14481  Expr *build(Sema &S, SourceLocation Loc) const override {
14482    return assertNotNull(S.ActOnCXXThis(Loc).getAs<Expr>());
14483  }
14484};
14485
14486class CastBuilder: public ExprBuilder {
14487  const ExprBuilder &Builder;
14488  QualType Type;
14489  ExprValueKind Kind;
14490  const CXXCastPath &Path;
14491
14492public:
14493  Expr *build(Sema &S, SourceLocation Loc) const override {
14494    return assertNotNull(S.ImpCastExprToType(Builder.build(S, Loc), Type,
14495                                             CK_UncheckedDerivedToBase, Kind,
14496                                             &Path).get());
14497  }
14498
14499  CastBuilder(const ExprBuilder &Builder, QualType Type, ExprValueKind Kind,
14500              const CXXCastPath &Path)
14501      : Builder(Builder), Type(Type), Kind(Kind), Path(Path) {}
14502};
14503
14504class DerefBuilder: public ExprBuilder {
14505  const ExprBuilder &Builder;
14506
14507public:
14508  Expr *build(Sema &S, SourceLocation Loc) const override {
14509    return assertNotNull(
14510        S.CreateBuiltinUnaryOp(Loc, UO_Deref, Builder.build(S, Loc)).get());
14511  }
14512
14513  DerefBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
14514};
14515
14516class MemberBuilder: public ExprBuilder {
14517  const ExprBuilder &Builder;
14518  QualType Type;
14519  CXXScopeSpec SS;
14520  bool IsArrow;
14521  LookupResult &MemberLookup;
14522
14523public:
14524  Expr *build(Sema &S, SourceLocation Loc) const override {
14525    return assertNotNull(S.BuildMemberReferenceExpr(
14526        Builder.build(S, Loc), Type, Loc, IsArrow, SS, SourceLocation(),
14527        nullptr, MemberLookup, nullptr, nullptr).get());
14528  }
14529
14530  MemberBuilder(const ExprBuilder &Builder, QualType Type, bool IsArrow,
14531                LookupResult &MemberLookup)
14532      : Builder(Builder), Type(Type), IsArrow(IsArrow),
14533        MemberLookup(MemberLookup) {}
14534};
14535
14536class MoveCastBuilder: public ExprBuilder {
14537  const ExprBuilder &Builder;
14538
14539public:
14540  Expr *build(Sema &S, SourceLocation Loc) const override {
14541    return assertNotNull(CastForMoving(S, Builder.build(S, Loc)));
14542  }
14543
14544  MoveCastBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
14545};
14546
14547class LvalueConvBuilder: public ExprBuilder {
14548  const ExprBuilder &Builder;
14549
14550public:
14551  Expr *build(Sema &S, SourceLocation Loc) const override {
14552    return assertNotNull(
14553        S.DefaultLvalueConversion(Builder.build(S, Loc)).get());
14554  }
14555
14556  LvalueConvBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
14557};
14558
14559class SubscriptBuilder: public ExprBuilder {
14560  const ExprBuilder &Base;
14561  const ExprBuilder &Index;
14562
14563public:
14564  Expr *build(Sema &S, SourceLocation Loc) const override {
14565    return assertNotNull(S.CreateBuiltinArraySubscriptExpr(
14566        Base.build(S, Loc), Loc, Index.build(S, Loc), Loc).get());
14567  }
14568
14569  SubscriptBuilder(const ExprBuilder &Base, const ExprBuilder &Index)
14570      : Base(Base), Index(Index) {}
14571};
14572
14573} // end anonymous namespace
14574
14575/// When generating a defaulted copy or move assignment operator, if a field
14576/// should be copied with __builtin_memcpy rather than via explicit assignments,
14577/// do so. This optimization only applies for arrays of scalars, and for arrays
14578/// of class type where the selected copy/move-assignment operator is trivial.
14579static StmtResult
14580buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
14581                           const ExprBuilder &ToB, const ExprBuilder &FromB) {
14582  // Compute the size of the memory buffer to be copied.
14583  QualType SizeType = S.Context.getSizeType();
14584  llvm::APInt Size(S.Context.getTypeSize(SizeType),
14585                   S.Context.getTypeSizeInChars(T).getQuantity());
14586
14587  // Take the address of the field references for "from" and "to". We
14588  // directly construct UnaryOperators here because semantic analysis
14589  // does not permit us to take the address of an xvalue.
14590  Expr *From = FromB.build(S, Loc);
14591  From = UnaryOperator::Create(
14592      S.Context, From, UO_AddrOf, S.Context.getPointerType(From->getType()),
14593      VK_PRValue, OK_Ordinary, Loc, false, S.CurFPFeatureOverrides());
14594  Expr *To = ToB.build(S, Loc);
14595  To = UnaryOperator::Create(
14596      S.Context, To, UO_AddrOf, S.Context.getPointerType(To->getType()),
14597      VK_PRValue, OK_Ordinary, Loc, false, S.CurFPFeatureOverrides());
14598
14599  const Type *E = T->getBaseElementTypeUnsafe();
14600  bool NeedsCollectableMemCpy =
14601      E->isRecordType() &&
14602      E->castAs<RecordType>()->getDecl()->hasObjectMember();
14603
14604  // Create a reference to the __builtin_objc_memmove_collectable function
14605  StringRef MemCpyName = NeedsCollectableMemCpy ?
14606    "__builtin_objc_memmove_collectable" :
14607    "__builtin_memcpy";
14608  LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
14609                 Sema::LookupOrdinaryName);
14610  S.LookupName(R, S.TUScope, true);
14611
14612  FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
14613  if (!MemCpy)
14614    // Something went horribly wrong earlier, and we will have complained
14615    // about it.
14616    return StmtError();
14617
14618  ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
14619                                            VK_PRValue, Loc, nullptr);
14620  assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
14621
14622  Expr *CallArgs[] = {
14623    To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
14624  };
14625  ExprResult Call = S.BuildCallExpr(/*Scope=*/nullptr, MemCpyRef.get(),
14626                                    Loc, CallArgs, Loc);
14627
14628  assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
14629  return Call.getAs<Stmt>();
14630}
14631
14632/// Builds a statement that copies/moves the given entity from \p From to
14633/// \c To.
14634///
14635/// This routine is used to copy/move the members of a class with an
14636/// implicitly-declared copy/move assignment operator. When the entities being
14637/// copied are arrays, this routine builds for loops to copy them.
14638///
14639/// \param S The Sema object used for type-checking.
14640///
14641/// \param Loc The location where the implicit copy/move is being generated.
14642///
14643/// \param T The type of the expressions being copied/moved. Both expressions
14644/// must have this type.
14645///
14646/// \param To The expression we are copying/moving to.
14647///
14648/// \param From The expression we are copying/moving from.
14649///
14650/// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
14651/// Otherwise, it's a non-static member subobject.
14652///
14653/// \param Copying Whether we're copying or moving.
14654///
14655/// \param Depth Internal parameter recording the depth of the recursion.
14656///
14657/// \returns A statement or a loop that copies the expressions, or StmtResult(0)
14658/// if a memcpy should be used instead.
14659static StmtResult
14660buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
14661                                 const ExprBuilder &To, const ExprBuilder &From,
14662                                 bool CopyingBaseSubobject, bool Copying,
14663                                 unsigned Depth = 0) {
14664  // C++11 [class.copy]p28:
14665  //   Each subobject is assigned in the manner appropriate to its type:
14666  //
14667  //     - if the subobject is of class type, as if by a call to operator= with
14668  //       the subobject as the object expression and the corresponding
14669  //       subobject of x as a single function argument (as if by explicit
14670  //       qualification; that is, ignoring any possible virtual overriding
14671  //       functions in more derived classes);
14672  //
14673  // C++03 [class.copy]p13:
14674  //     - if the subobject is of class type, the copy assignment operator for
14675  //       the class is used (as if by explicit qualification; that is,
14676  //       ignoring any possible virtual overriding functions in more derived
14677  //       classes);
14678  if (const RecordType *RecordTy = T->getAs<RecordType>()) {
14679    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
14680
14681    // Look for operator=.
14682    DeclarationName Name
14683      = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
14684    LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
14685    S.LookupQualifiedName(OpLookup, ClassDecl, false);
14686
14687    // Prior to C++11, filter out any result that isn't a copy/move-assignment
14688    // operator.
14689    if (!S.getLangOpts().CPlusPlus11) {
14690      LookupResult::Filter F = OpLookup.makeFilter();
14691      while (F.hasNext()) {
14692        NamedDecl *D = F.next();
14693        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
14694          if (Method->isCopyAssignmentOperator() ||
14695              (!Copying && Method->isMoveAssignmentOperator()))
14696            continue;
14697
14698        F.erase();
14699      }
14700      F.done();
14701    }
14702
14703    // Suppress the protected check (C++ [class.protected]) for each of the
14704    // assignment operators we found. This strange dance is required when
14705    // we're assigning via a base classes's copy-assignment operator. To
14706    // ensure that we're getting the right base class subobject (without
14707    // ambiguities), we need to cast "this" to that subobject type; to
14708    // ensure that we don't go through the virtual call mechanism, we need
14709    // to qualify the operator= name with the base class (see below). However,
14710    // this means that if the base class has a protected copy assignment
14711    // operator, the protected member access check will fail. So, we
14712    // rewrite "protected" access to "public" access in this case, since we
14713    // know by construction that we're calling from a derived class.
14714    if (CopyingBaseSubobject) {
14715      for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
14716           L != LEnd; ++L) {
14717        if (L.getAccess() == AS_protected)
14718          L.setAccess(AS_public);
14719      }
14720    }
14721
14722    // Create the nested-name-specifier that will be used to qualify the
14723    // reference to operator=; this is required to suppress the virtual
14724    // call mechanism.
14725    CXXScopeSpec SS;
14726    const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
14727    SS.MakeTrivial(S.Context,
14728                   NestedNameSpecifier::Create(S.Context, nullptr, false,
14729                                               CanonicalT),
14730                   Loc);
14731
14732    // Create the reference to operator=.
14733    ExprResult OpEqualRef
14734      = S.BuildMemberReferenceExpr(To.build(S, Loc), T, Loc, /*IsArrow=*/false,
14735                                   SS, /*TemplateKWLoc=*/SourceLocation(),
14736                                   /*FirstQualifierInScope=*/nullptr,
14737                                   OpLookup,
14738                                   /*TemplateArgs=*/nullptr, /*S*/nullptr,
14739                                   /*SuppressQualifierCheck=*/true);
14740    if (OpEqualRef.isInvalid())
14741      return StmtError();
14742
14743    // Build the call to the assignment operator.
14744
14745    Expr *FromInst = From.build(S, Loc);
14746    ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/nullptr,
14747                                                  OpEqualRef.getAs<Expr>(),
14748                                                  Loc, FromInst, Loc);
14749    if (Call.isInvalid())
14750      return StmtError();
14751
14752    // If we built a call to a trivial 'operator=' while copying an array,
14753    // bail out. We'll replace the whole shebang with a memcpy.
14754    CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
14755    if (CE && CE->getMethodDecl()->isTrivial() && Depth)
14756      return StmtResult((Stmt*)nullptr);
14757
14758    // Convert to an expression-statement, and clean up any produced
14759    // temporaries.
14760    return S.ActOnExprStmt(Call);
14761  }
14762
14763  //     - if the subobject is of scalar type, the built-in assignment
14764  //       operator is used.
14765  const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
14766  if (!ArrayTy) {
14767    ExprResult Assignment = S.CreateBuiltinBinOp(
14768        Loc, BO_Assign, To.build(S, Loc), From.build(S, Loc));
14769    if (Assignment.isInvalid())
14770      return StmtError();
14771    return S.ActOnExprStmt(Assignment);
14772  }
14773
14774  //     - if the subobject is an array, each element is assigned, in the
14775  //       manner appropriate to the element type;
14776
14777  // Construct a loop over the array bounds, e.g.,
14778  //
14779  //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
14780  //
14781  // that will copy each of the array elements.
14782  QualType SizeType = S.Context.getSizeType();
14783
14784  // Create the iteration variable.
14785  IdentifierInfo *IterationVarName = nullptr;
14786  {
14787    SmallString<8> Str;
14788    llvm::raw_svector_ostream OS(Str);
14789    OS << "__i" << Depth;
14790    IterationVarName = &S.Context.Idents.get(OS.str());
14791  }
14792  VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
14793                                          IterationVarName, SizeType,
14794                            S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
14795                                          SC_None);
14796
14797  // Initialize the iteration variable to zero.
14798  llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
14799  IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
14800
14801  // Creates a reference to the iteration variable.
14802  RefBuilder IterationVarRef(IterationVar, SizeType);
14803  LvalueConvBuilder IterationVarRefRVal(IterationVarRef);
14804
14805  // Create the DeclStmt that holds the iteration variable.
14806  Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
14807
14808  // Subscript the "from" and "to" expressions with the iteration variable.
14809  SubscriptBuilder FromIndexCopy(From, IterationVarRefRVal);
14810  MoveCastBuilder FromIndexMove(FromIndexCopy);
14811  const ExprBuilder *FromIndex;
14812  if (Copying)
14813    FromIndex = &FromIndexCopy;
14814  else
14815    FromIndex = &FromIndexMove;
14816
14817  SubscriptBuilder ToIndex(To, IterationVarRefRVal);
14818
14819  // Build the copy/move for an individual element of the array.
14820  StmtResult Copy =
14821    buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
14822                                     ToIndex, *FromIndex, CopyingBaseSubobject,
14823                                     Copying, Depth + 1);
14824  // Bail out if copying fails or if we determined that we should use memcpy.
14825  if (Copy.isInvalid() || !Copy.get())
14826    return Copy;
14827
14828  // Create the comparison against the array bound.
14829  llvm::APInt Upper
14830    = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
14831  Expr *Comparison = BinaryOperator::Create(
14832      S.Context, IterationVarRefRVal.build(S, Loc),
14833      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc), BO_NE,
14834      S.Context.BoolTy, VK_PRValue, OK_Ordinary, Loc,
14835      S.CurFPFeatureOverrides());
14836
14837  // Create the pre-increment of the iteration variable. We can determine
14838  // whether the increment will overflow based on the value of the array
14839  // bound.
14840  Expr *Increment = UnaryOperator::Create(
14841      S.Context, IterationVarRef.build(S, Loc), UO_PreInc, SizeType, VK_LValue,
14842      OK_Ordinary, Loc, Upper.isMaxValue(), S.CurFPFeatureOverrides());
14843
14844  // Construct the loop that copies all elements of this array.
14845  return S.ActOnForStmt(
14846      Loc, Loc, InitStmt,
14847      S.ActOnCondition(nullptr, Loc, Comparison, Sema::ConditionKind::Boolean),
14848      S.MakeFullDiscardedValueExpr(Increment), Loc, Copy.get());
14849}
14850
14851static StmtResult
14852buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
14853                      const ExprBuilder &To, const ExprBuilder &From,
14854                      bool CopyingBaseSubobject, bool Copying) {
14855  // Maybe we should use a memcpy?
14856  if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
14857      T.isTriviallyCopyableType(S.Context))
14858    return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
14859
14860  StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
14861                                                     CopyingBaseSubobject,
14862                                                     Copying, 0));
14863
14864  // If we ended up picking a trivial assignment operator for an array of a
14865  // non-trivially-copyable class type, just emit a memcpy.
14866  if (!Result.isInvalid() && !Result.get())
14867    return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
14868
14869  return Result;
14870}
14871
14872CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
14873  // Note: The following rules are largely analoguous to the copy
14874  // constructor rules. Note that virtual bases are not taken into account
14875  // for determining the argument type of the operator. Note also that
14876  // operators taking an object instead of a reference are allowed.
14877  assert(ClassDecl->needsImplicitCopyAssignment());
14878
14879  DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
14880  if (DSM.isAlreadyBeingDeclared())
14881    return nullptr;
14882
14883  QualType ArgType = Context.getTypeDeclType(ClassDecl);
14884  ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr,
14885                                      ArgType, nullptr);
14886  LangAS AS = getDefaultCXXMethodAddrSpace();
14887  if (AS != LangAS::Default)
14888    ArgType = Context.getAddrSpaceQualType(ArgType, AS);
14889  QualType RetType = Context.getLValueReferenceType(ArgType);
14890  bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
14891  if (Const)
14892    ArgType = ArgType.withConst();
14893
14894  ArgType = Context.getLValueReferenceType(ArgType);
14895
14896  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
14897                                                     CXXCopyAssignment,
14898                                                     Const);
14899
14900  //   An implicitly-declared copy assignment operator is an inline public
14901  //   member of its class.
14902  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
14903  SourceLocation ClassLoc = ClassDecl->getLocation();
14904  DeclarationNameInfo NameInfo(Name, ClassLoc);
14905  CXXMethodDecl *CopyAssignment = CXXMethodDecl::Create(
14906      Context, ClassDecl, ClassLoc, NameInfo, QualType(),
14907      /*TInfo=*/nullptr, /*StorageClass=*/SC_None,
14908      getCurFPFeatures().isFPConstrained(),
14909      /*isInline=*/true,
14910      Constexpr ? ConstexprSpecKind::Constexpr : ConstexprSpecKind::Unspecified,
14911      SourceLocation());
14912  CopyAssignment->setAccess(AS_public);
14913  CopyAssignment->setDefaulted();
14914  CopyAssignment->setImplicit();
14915
14916  setupImplicitSpecialMemberType(CopyAssignment, RetType, ArgType);
14917
14918  if (getLangOpts().CUDA)
14919    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyAssignment,
14920                                            CopyAssignment,
14921                                            /* ConstRHS */ Const,
14922                                            /* Diagnose */ false);
14923
14924  // Add the parameter to the operator.
14925  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
14926                                               ClassLoc, ClassLoc,
14927                                               /*Id=*/nullptr, ArgType,
14928                                               /*TInfo=*/nullptr, SC_None,
14929                                               nullptr);
14930  CopyAssignment->setParams(FromParam);
14931
14932  CopyAssignment->setTrivial(
14933    ClassDecl->needsOverloadResolutionForCopyAssignment()
14934      ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
14935      : ClassDecl->hasTrivialCopyAssignment());
14936
14937  // Note that we have added this copy-assignment operator.
14938  ++getASTContext().NumImplicitCopyAssignmentOperatorsDeclared;
14939
14940  Scope *S = getScopeForContext(ClassDecl);
14941  CheckImplicitSpecialMemberDeclaration(S, CopyAssignment);
14942
14943  if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment)) {
14944    ClassDecl->setImplicitCopyAssignmentIsDeleted();
14945    SetDeclDeleted(CopyAssignment, ClassLoc);
14946  }
14947
14948  if (S)
14949    PushOnScopeChains(CopyAssignment, S, false);
14950  ClassDecl->addDecl(CopyAssignment);
14951
14952  return CopyAssignment;
14953}
14954
14955/// Diagnose an implicit copy operation for a class which is odr-used, but
14956/// which is deprecated because the class has a user-declared copy constructor,
14957/// copy assignment operator, or destructor.
14958static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {
14959  assert(CopyOp->isImplicit());
14960
14961  CXXRecordDecl *RD = CopyOp->getParent();
14962  CXXMethodDecl *UserDeclaredOperation = nullptr;
14963
14964  if (RD->hasUserDeclaredDestructor()) {
14965    UserDeclaredOperation = RD->getDestructor();
14966  } else if (!isa<CXXConstructorDecl>(CopyOp) &&
14967             RD->hasUserDeclaredCopyConstructor()) {
14968    // Find any user-declared copy constructor.
14969    for (auto *I : RD->ctors()) {
14970      if (I->isCopyConstructor()) {
14971        UserDeclaredOperation = I;
14972        break;
14973      }
14974    }
14975    assert(UserDeclaredOperation);
14976  } else if (isa<CXXConstructorDecl>(CopyOp) &&
14977             RD->hasUserDeclaredCopyAssignment()) {
14978    // Find any user-declared move assignment operator.
14979    for (auto *I : RD->methods()) {
14980      if (I->isCopyAssignmentOperator()) {
14981        UserDeclaredOperation = I;
14982        break;
14983      }
14984    }
14985    assert(UserDeclaredOperation);
14986  }
14987
14988  if (UserDeclaredOperation) {
14989    bool UDOIsUserProvided = UserDeclaredOperation->isUserProvided();
14990    bool UDOIsDestructor = isa<CXXDestructorDecl>(UserDeclaredOperation);
14991    bool IsCopyAssignment = !isa<CXXConstructorDecl>(CopyOp);
14992    unsigned DiagID =
14993        (UDOIsUserProvided && UDOIsDestructor)
14994            ? diag::warn_deprecated_copy_with_user_provided_dtor
14995        : (UDOIsUserProvided && !UDOIsDestructor)
14996            ? diag::warn_deprecated_copy_with_user_provided_copy
14997        : (!UDOIsUserProvided && UDOIsDestructor)
14998            ? diag::warn_deprecated_copy_with_dtor
14999            : diag::warn_deprecated_copy;
15000    S.Diag(UserDeclaredOperation->getLocation(), DiagID)
15001        << RD << IsCopyAssignment;
15002  }
15003}
15004
15005void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
15006                                        CXXMethodDecl *CopyAssignOperator) {
15007  assert((CopyAssignOperator->isDefaulted() &&
15008          CopyAssignOperator->isOverloadedOperator() &&
15009          CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
15010          !CopyAssignOperator->doesThisDeclarationHaveABody() &&
15011          !CopyAssignOperator->isDeleted()) &&
15012         "DefineImplicitCopyAssignment called for wrong function");
15013  if (CopyAssignOperator->willHaveBody() || CopyAssignOperator->isInvalidDecl())
15014    return;
15015
15016  CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
15017  if (ClassDecl->isInvalidDecl()) {
15018    CopyAssignOperator->setInvalidDecl();
15019    return;
15020  }
15021
15022  SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
15023
15024  // The exception specification is needed because we are defining the
15025  // function.
15026  ResolveExceptionSpec(CurrentLocation,
15027                       CopyAssignOperator->getType()->castAs<FunctionProtoType>());
15028
15029  // Add a context note for diagnostics produced after this point.
15030  Scope.addContextNote(CurrentLocation);
15031
15032  // C++11 [class.copy]p18:
15033  //   The [definition of an implicitly declared copy assignment operator] is
15034  //   deprecated if the class has a user-declared copy constructor or a
15035  //   user-declared destructor.
15036  if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
15037    diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator);
15038
15039  // C++0x [class.copy]p30:
15040  //   The implicitly-defined or explicitly-defaulted copy assignment operator
15041  //   for a non-union class X performs memberwise copy assignment of its
15042  //   subobjects. The direct base classes of X are assigned first, in the
15043  //   order of their declaration in the base-specifier-list, and then the
15044  //   immediate non-static data members of X are assigned, in the order in
15045  //   which they were declared in the class definition.
15046
15047  // The statements that form the synthesized function body.
15048  SmallVector<Stmt*, 8> Statements;
15049
15050  // The parameter for the "other" object, which we are copying from.
15051  ParmVarDecl *Other = CopyAssignOperator->getNonObjectParameter(0);
15052  Qualifiers OtherQuals = Other->getType().getQualifiers();
15053  QualType OtherRefType = Other->getType();
15054  if (OtherRefType->isLValueReferenceType()) {
15055    OtherRefType = OtherRefType->getPointeeType();
15056    OtherQuals = OtherRefType.getQualifiers();
15057  }
15058
15059  // Our location for everything implicitly-generated.
15060  SourceLocation Loc = CopyAssignOperator->getEndLoc().isValid()
15061                           ? CopyAssignOperator->getEndLoc()
15062                           : CopyAssignOperator->getLocation();
15063
15064  // Builds a DeclRefExpr for the "other" object.
15065  RefBuilder OtherRef(Other, OtherRefType);
15066
15067  // Builds the function object parameter.
15068  std::optional<ThisBuilder> This;
15069  std::optional<DerefBuilder> DerefThis;
15070  std::optional<RefBuilder> ExplicitObject;
15071  bool IsArrow = false;
15072  QualType ObjectType;
15073  if (CopyAssignOperator->isExplicitObjectMemberFunction()) {
15074    ObjectType = CopyAssignOperator->getParamDecl(0)->getType();
15075    if (ObjectType->isReferenceType())
15076      ObjectType = ObjectType->getPointeeType();
15077    ExplicitObject.emplace(CopyAssignOperator->getParamDecl(0), ObjectType);
15078  } else {
15079    ObjectType = getCurrentThisType();
15080    This.emplace();
15081    DerefThis.emplace(*This);
15082    IsArrow = !LangOpts.HLSL;
15083  }
15084  ExprBuilder &ObjectParameter =
15085      ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject)
15086                     : static_cast<ExprBuilder &>(*This);
15087
15088  // Assign base classes.
15089  bool Invalid = false;
15090  for (auto &Base : ClassDecl->bases()) {
15091    // Form the assignment:
15092    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
15093    QualType BaseType = Base.getType().getUnqualifiedType();
15094    if (!BaseType->isRecordType()) {
15095      Invalid = true;
15096      continue;
15097    }
15098
15099    CXXCastPath BasePath;
15100    BasePath.push_back(&Base);
15101
15102    // Construct the "from" expression, which is an implicit cast to the
15103    // appropriately-qualified base type.
15104    CastBuilder From(OtherRef, Context.getQualifiedType(BaseType, OtherQuals),
15105                     VK_LValue, BasePath);
15106
15107    // Dereference "this".
15108    CastBuilder To(
15109        ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject)
15110                       : static_cast<ExprBuilder &>(*DerefThis),
15111        Context.getQualifiedType(BaseType, ObjectType.getQualifiers()),
15112        VK_LValue, BasePath);
15113
15114    // Build the copy.
15115    StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
15116                                            To, From,
15117                                            /*CopyingBaseSubobject=*/true,
15118                                            /*Copying=*/true);
15119    if (Copy.isInvalid()) {
15120      CopyAssignOperator->setInvalidDecl();
15121      return;
15122    }
15123
15124    // Success! Record the copy.
15125    Statements.push_back(Copy.getAs<Expr>());
15126  }
15127
15128  // Assign non-static members.
15129  for (auto *Field : ClassDecl->fields()) {
15130    // FIXME: We should form some kind of AST representation for the implied
15131    // memcpy in a union copy operation.
15132    if (Field->isUnnamedBitfield() || Field->getParent()->isUnion())
15133      continue;
15134
15135    if (Field->isInvalidDecl()) {
15136      Invalid = true;
15137      continue;
15138    }
15139
15140    // Check for members of reference type; we can't copy those.
15141    if (Field->getType()->isReferenceType()) {
15142      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
15143        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
15144      Diag(Field->getLocation(), diag::note_declared_at);
15145      Invalid = true;
15146      continue;
15147    }
15148
15149    // Check for members of const-qualified, non-class type.
15150    QualType BaseType = Context.getBaseElementType(Field->getType());
15151    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
15152      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
15153        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
15154      Diag(Field->getLocation(), diag::note_declared_at);
15155      Invalid = true;
15156      continue;
15157    }
15158
15159    // Suppress assigning zero-width bitfields.
15160    if (Field->isZeroLengthBitField(Context))
15161      continue;
15162
15163    QualType FieldType = Field->getType().getNonReferenceType();
15164    if (FieldType->isIncompleteArrayType()) {
15165      assert(ClassDecl->hasFlexibleArrayMember() &&
15166             "Incomplete array type is not valid");
15167      continue;
15168    }
15169
15170    // Build references to the field in the object we're copying from and to.
15171    CXXScopeSpec SS; // Intentionally empty
15172    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
15173                              LookupMemberName);
15174    MemberLookup.addDecl(Field);
15175    MemberLookup.resolveKind();
15176
15177    MemberBuilder From(OtherRef, OtherRefType, /*IsArrow=*/false, MemberLookup);
15178    MemberBuilder To(ObjectParameter, ObjectType, IsArrow, MemberLookup);
15179    // Build the copy of this field.
15180    StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
15181                                            To, From,
15182                                            /*CopyingBaseSubobject=*/false,
15183                                            /*Copying=*/true);
15184    if (Copy.isInvalid()) {
15185      CopyAssignOperator->setInvalidDecl();
15186      return;
15187    }
15188
15189    // Success! Record the copy.
15190    Statements.push_back(Copy.getAs<Stmt>());
15191  }
15192
15193  if (!Invalid) {
15194    // Add a "return *this;"
15195    Expr *ThisExpr =
15196        (ExplicitObject  ? static_cast<ExprBuilder &>(*ExplicitObject)
15197         : LangOpts.HLSL ? static_cast<ExprBuilder &>(*This)
15198                         : static_cast<ExprBuilder &>(*DerefThis))
15199            .build(*this, Loc);
15200    StmtResult Return = BuildReturnStmt(Loc, ThisExpr);
15201    if (Return.isInvalid())
15202      Invalid = true;
15203    else
15204      Statements.push_back(Return.getAs<Stmt>());
15205  }
15206
15207  if (Invalid) {
15208    CopyAssignOperator->setInvalidDecl();
15209    return;
15210  }
15211
15212  StmtResult Body;
15213  {
15214    CompoundScopeRAII CompoundScope(*this);
15215    Body = ActOnCompoundStmt(Loc, Loc, Statements,
15216                             /*isStmtExpr=*/false);
15217    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
15218  }
15219  CopyAssignOperator->setBody(Body.getAs<Stmt>());
15220  CopyAssignOperator->markUsed(Context);
15221
15222  if (ASTMutationListener *L = getASTMutationListener()) {
15223    L->CompletedImplicitDefinition(CopyAssignOperator);
15224  }
15225}
15226
15227CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
15228  assert(ClassDecl->needsImplicitMoveAssignment());
15229
15230  DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
15231  if (DSM.isAlreadyBeingDeclared())
15232    return nullptr;
15233
15234  // Note: The following rules are largely analoguous to the move
15235  // constructor rules.
15236
15237  QualType ArgType = Context.getTypeDeclType(ClassDecl);
15238  ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr,
15239                                      ArgType, nullptr);
15240  LangAS AS = getDefaultCXXMethodAddrSpace();
15241  if (AS != LangAS::Default)
15242    ArgType = Context.getAddrSpaceQualType(ArgType, AS);
15243  QualType RetType = Context.getLValueReferenceType(ArgType);
15244  ArgType = Context.getRValueReferenceType(ArgType);
15245
15246  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
15247                                                     CXXMoveAssignment,
15248                                                     false);
15249
15250  //   An implicitly-declared move assignment operator is an inline public
15251  //   member of its class.
15252  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
15253  SourceLocation ClassLoc = ClassDecl->getLocation();
15254  DeclarationNameInfo NameInfo(Name, ClassLoc);
15255  CXXMethodDecl *MoveAssignment = CXXMethodDecl::Create(
15256      Context, ClassDecl, ClassLoc, NameInfo, QualType(),
15257      /*TInfo=*/nullptr, /*StorageClass=*/SC_None,
15258      getCurFPFeatures().isFPConstrained(),
15259      /*isInline=*/true,
15260      Constexpr ? ConstexprSpecKind::Constexpr : ConstexprSpecKind::Unspecified,
15261      SourceLocation());
15262  MoveAssignment->setAccess(AS_public);
15263  MoveAssignment->setDefaulted();
15264  MoveAssignment->setImplicit();
15265
15266  setupImplicitSpecialMemberType(MoveAssignment, RetType, ArgType);
15267
15268  if (getLangOpts().CUDA)
15269    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveAssignment,
15270                                            MoveAssignment,
15271                                            /* ConstRHS */ false,
15272                                            /* Diagnose */ false);
15273
15274  // Add the parameter to the operator.
15275  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
15276                                               ClassLoc, ClassLoc,
15277                                               /*Id=*/nullptr, ArgType,
15278                                               /*TInfo=*/nullptr, SC_None,
15279                                               nullptr);
15280  MoveAssignment->setParams(FromParam);
15281
15282  MoveAssignment->setTrivial(
15283    ClassDecl->needsOverloadResolutionForMoveAssignment()
15284      ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
15285      : ClassDecl->hasTrivialMoveAssignment());
15286
15287  // Note that we have added this copy-assignment operator.
15288  ++getASTContext().NumImplicitMoveAssignmentOperatorsDeclared;
15289
15290  Scope *S = getScopeForContext(ClassDecl);
15291  CheckImplicitSpecialMemberDeclaration(S, MoveAssignment);
15292
15293  if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
15294    ClassDecl->setImplicitMoveAssignmentIsDeleted();
15295    SetDeclDeleted(MoveAssignment, ClassLoc);
15296  }
15297
15298  if (S)
15299    PushOnScopeChains(MoveAssignment, S, false);
15300  ClassDecl->addDecl(MoveAssignment);
15301
15302  return MoveAssignment;
15303}
15304
15305/// Check if we're implicitly defining a move assignment operator for a class
15306/// with virtual bases. Such a move assignment might move-assign the virtual
15307/// base multiple times.
15308static void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class,
15309                                               SourceLocation CurrentLocation) {
15310  assert(!Class->isDependentContext() && "should not define dependent move");
15311
15312  // Only a virtual base could get implicitly move-assigned multiple times.
15313  // Only a non-trivial move assignment can observe this. We only want to
15314  // diagnose if we implicitly define an assignment operator that assigns
15315  // two base classes, both of which move-assign the same virtual base.
15316  if (Class->getNumVBases() == 0 || Class->hasTrivialMoveAssignment() ||
15317      Class->getNumBases() < 2)
15318    return;
15319
15320  llvm::SmallVector<CXXBaseSpecifier *, 16> Worklist;
15321  typedef llvm::DenseMap<CXXRecordDecl*, CXXBaseSpecifier*> VBaseMap;
15322  VBaseMap VBases;
15323
15324  for (auto &BI : Class->bases()) {
15325    Worklist.push_back(&BI);
15326    while (!Worklist.empty()) {
15327      CXXBaseSpecifier *BaseSpec = Worklist.pop_back_val();
15328      CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
15329
15330      // If the base has no non-trivial move assignment operators,
15331      // we don't care about moves from it.
15332      if (!Base->hasNonTrivialMoveAssignment())
15333        continue;
15334
15335      // If there's nothing virtual here, skip it.
15336      if (!BaseSpec->isVirtual() && !Base->getNumVBases())
15337        continue;
15338
15339      // If we're not actually going to call a move assignment for this base,
15340      // or the selected move assignment is trivial, skip it.
15341      Sema::SpecialMemberOverloadResult SMOR =
15342        S.LookupSpecialMember(Base, Sema::CXXMoveAssignment,
15343                              /*ConstArg*/false, /*VolatileArg*/false,
15344                              /*RValueThis*/true, /*ConstThis*/false,
15345                              /*VolatileThis*/false);
15346      if (!SMOR.getMethod() || SMOR.getMethod()->isTrivial() ||
15347          !SMOR.getMethod()->isMoveAssignmentOperator())
15348        continue;
15349
15350      if (BaseSpec->isVirtual()) {
15351        // We're going to move-assign this virtual base, and its move
15352        // assignment operator is not trivial. If this can happen for
15353        // multiple distinct direct bases of Class, diagnose it. (If it
15354        // only happens in one base, we'll diagnose it when synthesizing
15355        // that base class's move assignment operator.)
15356        CXXBaseSpecifier *&Existing =
15357            VBases.insert(std::make_pair(Base->getCanonicalDecl(), &BI))
15358                .first->second;
15359        if (Existing && Existing != &BI) {
15360          S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times)
15361            << Class << Base;
15362          S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here)
15363              << (Base->getCanonicalDecl() ==
15364                  Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl())
15365              << Base << Existing->getType() << Existing->getSourceRange();
15366          S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here)
15367              << (Base->getCanonicalDecl() ==
15368                  BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl())
15369              << Base << BI.getType() << BaseSpec->getSourceRange();
15370
15371          // Only diagnose each vbase once.
15372          Existing = nullptr;
15373        }
15374      } else {
15375        // Only walk over bases that have defaulted move assignment operators.
15376        // We assume that any user-provided move assignment operator handles
15377        // the multiple-moves-of-vbase case itself somehow.
15378        if (!SMOR.getMethod()->isDefaulted())
15379          continue;
15380
15381        // We're going to move the base classes of Base. Add them to the list.
15382        llvm::append_range(Worklist, llvm::make_pointer_range(Base->bases()));
15383      }
15384    }
15385  }
15386}
15387
15388void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
15389                                        CXXMethodDecl *MoveAssignOperator) {
15390  assert((MoveAssignOperator->isDefaulted() &&
15391          MoveAssignOperator->isOverloadedOperator() &&
15392          MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
15393          !MoveAssignOperator->doesThisDeclarationHaveABody() &&
15394          !MoveAssignOperator->isDeleted()) &&
15395         "DefineImplicitMoveAssignment called for wrong function");
15396  if (MoveAssignOperator->willHaveBody() || MoveAssignOperator->isInvalidDecl())
15397    return;
15398
15399  CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
15400  if (ClassDecl->isInvalidDecl()) {
15401    MoveAssignOperator->setInvalidDecl();
15402    return;
15403  }
15404
15405  // C++0x [class.copy]p28:
15406  //   The implicitly-defined or move assignment operator for a non-union class
15407  //   X performs memberwise move assignment of its subobjects. The direct base
15408  //   classes of X are assigned first, in the order of their declaration in the
15409  //   base-specifier-list, and then the immediate non-static data members of X
15410  //   are assigned, in the order in which they were declared in the class
15411  //   definition.
15412
15413  // Issue a warning if our implicit move assignment operator will move
15414  // from a virtual base more than once.
15415  checkMoveAssignmentForRepeatedMove(*this, ClassDecl, CurrentLocation);
15416
15417  SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
15418
15419  // The exception specification is needed because we are defining the
15420  // function.
15421  ResolveExceptionSpec(CurrentLocation,
15422                       MoveAssignOperator->getType()->castAs<FunctionProtoType>());
15423
15424  // Add a context note for diagnostics produced after this point.
15425  Scope.addContextNote(CurrentLocation);
15426
15427  // The statements that form the synthesized function body.
15428  SmallVector<Stmt*, 8> Statements;
15429
15430  // The parameter for the "other" object, which we are move from.
15431  ParmVarDecl *Other = MoveAssignOperator->getNonObjectParameter(0);
15432  QualType OtherRefType =
15433      Other->getType()->castAs<RValueReferenceType>()->getPointeeType();
15434
15435  // Our location for everything implicitly-generated.
15436  SourceLocation Loc = MoveAssignOperator->getEndLoc().isValid()
15437                           ? MoveAssignOperator->getEndLoc()
15438                           : MoveAssignOperator->getLocation();
15439
15440  // Builds a reference to the "other" object.
15441  RefBuilder OtherRef(Other, OtherRefType);
15442  // Cast to rvalue.
15443  MoveCastBuilder MoveOther(OtherRef);
15444
15445  // Builds the function object parameter.
15446  std::optional<ThisBuilder> This;
15447  std::optional<DerefBuilder> DerefThis;
15448  std::optional<RefBuilder> ExplicitObject;
15449  QualType ObjectType;
15450  if (MoveAssignOperator->isExplicitObjectMemberFunction()) {
15451    ObjectType = MoveAssignOperator->getParamDecl(0)->getType();
15452    if (ObjectType->isReferenceType())
15453      ObjectType = ObjectType->getPointeeType();
15454    ExplicitObject.emplace(MoveAssignOperator->getParamDecl(0), ObjectType);
15455  } else {
15456    ObjectType = getCurrentThisType();
15457    This.emplace();
15458    DerefThis.emplace(*This);
15459  }
15460  ExprBuilder &ObjectParameter =
15461      ExplicitObject ? *ExplicitObject : static_cast<ExprBuilder &>(*This);
15462
15463  // Assign base classes.
15464  bool Invalid = false;
15465  for (auto &Base : ClassDecl->bases()) {
15466    // C++11 [class.copy]p28:
15467    //   It is unspecified whether subobjects representing virtual base classes
15468    //   are assigned more than once by the implicitly-defined copy assignment
15469    //   operator.
15470    // FIXME: Do not assign to a vbase that will be assigned by some other base
15471    // class. For a move-assignment, this can result in the vbase being moved
15472    // multiple times.
15473
15474    // Form the assignment:
15475    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
15476    QualType BaseType = Base.getType().getUnqualifiedType();
15477    if (!BaseType->isRecordType()) {
15478      Invalid = true;
15479      continue;
15480    }
15481
15482    CXXCastPath BasePath;
15483    BasePath.push_back(&Base);
15484
15485    // Construct the "from" expression, which is an implicit cast to the
15486    // appropriately-qualified base type.
15487    CastBuilder From(OtherRef, BaseType, VK_XValue, BasePath);
15488
15489    // Implicitly cast "this" to the appropriately-qualified base type.
15490    // Dereference "this".
15491    CastBuilder To(
15492        ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject)
15493                       : static_cast<ExprBuilder &>(*DerefThis),
15494        Context.getQualifiedType(BaseType, ObjectType.getQualifiers()),
15495        VK_LValue, BasePath);
15496
15497    // Build the move.
15498    StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
15499                                            To, From,
15500                                            /*CopyingBaseSubobject=*/true,
15501                                            /*Copying=*/false);
15502    if (Move.isInvalid()) {
15503      MoveAssignOperator->setInvalidDecl();
15504      return;
15505    }
15506
15507    // Success! Record the move.
15508    Statements.push_back(Move.getAs<Expr>());
15509  }
15510
15511  // Assign non-static members.
15512  for (auto *Field : ClassDecl->fields()) {
15513    // FIXME: We should form some kind of AST representation for the implied
15514    // memcpy in a union copy operation.
15515    if (Field->isUnnamedBitfield() || Field->getParent()->isUnion())
15516      continue;
15517
15518    if (Field->isInvalidDecl()) {
15519      Invalid = true;
15520      continue;
15521    }
15522
15523    // Check for members of reference type; we can't move those.
15524    if (Field->getType()->isReferenceType()) {
15525      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
15526        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
15527      Diag(Field->getLocation(), diag::note_declared_at);
15528      Invalid = true;
15529      continue;
15530    }
15531
15532    // Check for members of const-qualified, non-class type.
15533    QualType BaseType = Context.getBaseElementType(Field->getType());
15534    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
15535      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
15536        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
15537      Diag(Field->getLocation(), diag::note_declared_at);
15538      Invalid = true;
15539      continue;
15540    }
15541
15542    // Suppress assigning zero-width bitfields.
15543    if (Field->isZeroLengthBitField(Context))
15544      continue;
15545
15546    QualType FieldType = Field->getType().getNonReferenceType();
15547    if (FieldType->isIncompleteArrayType()) {
15548      assert(ClassDecl->hasFlexibleArrayMember() &&
15549             "Incomplete array type is not valid");
15550      continue;
15551    }
15552
15553    // Build references to the field in the object we're copying from and to.
15554    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
15555                              LookupMemberName);
15556    MemberLookup.addDecl(Field);
15557    MemberLookup.resolveKind();
15558    MemberBuilder From(MoveOther, OtherRefType,
15559                       /*IsArrow=*/false, MemberLookup);
15560    MemberBuilder To(ObjectParameter, ObjectType, /*IsArrow=*/!ExplicitObject,
15561                     MemberLookup);
15562
15563    assert(!From.build(*this, Loc)->isLValue() && // could be xvalue or prvalue
15564        "Member reference with rvalue base must be rvalue except for reference "
15565        "members, which aren't allowed for move assignment.");
15566
15567    // Build the move of this field.
15568    StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
15569                                            To, From,
15570                                            /*CopyingBaseSubobject=*/false,
15571                                            /*Copying=*/false);
15572    if (Move.isInvalid()) {
15573      MoveAssignOperator->setInvalidDecl();
15574      return;
15575    }
15576
15577    // Success! Record the copy.
15578    Statements.push_back(Move.getAs<Stmt>());
15579  }
15580
15581  if (!Invalid) {
15582    // Add a "return *this;"
15583    Expr *ThisExpr =
15584        (ExplicitObject ? static_cast<ExprBuilder &>(*ExplicitObject)
15585                        : static_cast<ExprBuilder &>(*DerefThis))
15586            .build(*this, Loc);
15587
15588    StmtResult Return = BuildReturnStmt(Loc, ThisExpr);
15589    if (Return.isInvalid())
15590      Invalid = true;
15591    else
15592      Statements.push_back(Return.getAs<Stmt>());
15593  }
15594
15595  if (Invalid) {
15596    MoveAssignOperator->setInvalidDecl();
15597    return;
15598  }
15599
15600  StmtResult Body;
15601  {
15602    CompoundScopeRAII CompoundScope(*this);
15603    Body = ActOnCompoundStmt(Loc, Loc, Statements,
15604                             /*isStmtExpr=*/false);
15605    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
15606  }
15607  MoveAssignOperator->setBody(Body.getAs<Stmt>());
15608  MoveAssignOperator->markUsed(Context);
15609
15610  if (ASTMutationListener *L = getASTMutationListener()) {
15611    L->CompletedImplicitDefinition(MoveAssignOperator);
15612  }
15613}
15614
15615CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
15616                                                    CXXRecordDecl *ClassDecl) {
15617  // C++ [class.copy]p4:
15618  //   If the class definition does not explicitly declare a copy
15619  //   constructor, one is declared implicitly.
15620  assert(ClassDecl->needsImplicitCopyConstructor());
15621
15622  DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
15623  if (DSM.isAlreadyBeingDeclared())
15624    return nullptr;
15625
15626  QualType ClassType = Context.getTypeDeclType(ClassDecl);
15627  QualType ArgType = ClassType;
15628  ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr,
15629                                      ArgType, nullptr);
15630  bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
15631  if (Const)
15632    ArgType = ArgType.withConst();
15633
15634  LangAS AS = getDefaultCXXMethodAddrSpace();
15635  if (AS != LangAS::Default)
15636    ArgType = Context.getAddrSpaceQualType(ArgType, AS);
15637
15638  ArgType = Context.getLValueReferenceType(ArgType);
15639
15640  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
15641                                                     CXXCopyConstructor,
15642                                                     Const);
15643
15644  DeclarationName Name
15645    = Context.DeclarationNames.getCXXConstructorName(
15646                                           Context.getCanonicalType(ClassType));
15647  SourceLocation ClassLoc = ClassDecl->getLocation();
15648  DeclarationNameInfo NameInfo(Name, ClassLoc);
15649
15650  //   An implicitly-declared copy constructor is an inline public
15651  //   member of its class.
15652  CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
15653      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr,
15654      ExplicitSpecifier(), getCurFPFeatures().isFPConstrained(),
15655      /*isInline=*/true,
15656      /*isImplicitlyDeclared=*/true,
15657      Constexpr ? ConstexprSpecKind::Constexpr
15658                : ConstexprSpecKind::Unspecified);
15659  CopyConstructor->setAccess(AS_public);
15660  CopyConstructor->setDefaulted();
15661
15662  setupImplicitSpecialMemberType(CopyConstructor, Context.VoidTy, ArgType);
15663
15664  if (getLangOpts().CUDA)
15665    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyConstructor,
15666                                            CopyConstructor,
15667                                            /* ConstRHS */ Const,
15668                                            /* Diagnose */ false);
15669
15670  // During template instantiation of special member functions we need a
15671  // reliable TypeSourceInfo for the parameter types in order to allow functions
15672  // to be substituted.
15673  TypeSourceInfo *TSI = nullptr;
15674  if (inTemplateInstantiation() && ClassDecl->isLambda())
15675    TSI = Context.getTrivialTypeSourceInfo(ArgType);
15676
15677  // Add the parameter to the constructor.
15678  ParmVarDecl *FromParam =
15679      ParmVarDecl::Create(Context, CopyConstructor, ClassLoc, ClassLoc,
15680                          /*IdentifierInfo=*/nullptr, ArgType,
15681                          /*TInfo=*/TSI, SC_None, nullptr);
15682  CopyConstructor->setParams(FromParam);
15683
15684  CopyConstructor->setTrivial(
15685      ClassDecl->needsOverloadResolutionForCopyConstructor()
15686          ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
15687          : ClassDecl->hasTrivialCopyConstructor());
15688
15689  CopyConstructor->setTrivialForCall(
15690      ClassDecl->hasAttr<TrivialABIAttr>() ||
15691      (ClassDecl->needsOverloadResolutionForCopyConstructor()
15692           ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor,
15693             TAH_ConsiderTrivialABI)
15694           : ClassDecl->hasTrivialCopyConstructorForCall()));
15695
15696  // Note that we have declared this constructor.
15697  ++getASTContext().NumImplicitCopyConstructorsDeclared;
15698
15699  Scope *S = getScopeForContext(ClassDecl);
15700  CheckImplicitSpecialMemberDeclaration(S, CopyConstructor);
15701
15702  if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor)) {
15703    ClassDecl->setImplicitCopyConstructorIsDeleted();
15704    SetDeclDeleted(CopyConstructor, ClassLoc);
15705  }
15706
15707  if (S)
15708    PushOnScopeChains(CopyConstructor, S, false);
15709  ClassDecl->addDecl(CopyConstructor);
15710
15711  return CopyConstructor;
15712}
15713
15714void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
15715                                         CXXConstructorDecl *CopyConstructor) {
15716  assert((CopyConstructor->isDefaulted() &&
15717          CopyConstructor->isCopyConstructor() &&
15718          !CopyConstructor->doesThisDeclarationHaveABody() &&
15719          !CopyConstructor->isDeleted()) &&
15720         "DefineImplicitCopyConstructor - call it for implicit copy ctor");
15721  if (CopyConstructor->willHaveBody() || CopyConstructor->isInvalidDecl())
15722    return;
15723
15724  CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
15725  assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
15726
15727  SynthesizedFunctionScope Scope(*this, CopyConstructor);
15728
15729  // The exception specification is needed because we are defining the
15730  // function.
15731  ResolveExceptionSpec(CurrentLocation,
15732                       CopyConstructor->getType()->castAs<FunctionProtoType>());
15733  MarkVTableUsed(CurrentLocation, ClassDecl);
15734
15735  // Add a context note for diagnostics produced after this point.
15736  Scope.addContextNote(CurrentLocation);
15737
15738  // C++11 [class.copy]p7:
15739  //   The [definition of an implicitly declared copy constructor] is
15740  //   deprecated if the class has a user-declared copy assignment operator
15741  //   or a user-declared destructor.
15742  if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
15743    diagnoseDeprecatedCopyOperation(*this, CopyConstructor);
15744
15745  if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false)) {
15746    CopyConstructor->setInvalidDecl();
15747  }  else {
15748    SourceLocation Loc = CopyConstructor->getEndLoc().isValid()
15749                             ? CopyConstructor->getEndLoc()
15750                             : CopyConstructor->getLocation();
15751    Sema::CompoundScopeRAII CompoundScope(*this);
15752    CopyConstructor->setBody(
15753        ActOnCompoundStmt(Loc, Loc, std::nullopt, /*isStmtExpr=*/false)
15754            .getAs<Stmt>());
15755    CopyConstructor->markUsed(Context);
15756  }
15757
15758  if (ASTMutationListener *L = getASTMutationListener()) {
15759    L->CompletedImplicitDefinition(CopyConstructor);
15760  }
15761}
15762
15763CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
15764                                                    CXXRecordDecl *ClassDecl) {
15765  assert(ClassDecl->needsImplicitMoveConstructor());
15766
15767  DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
15768  if (DSM.isAlreadyBeingDeclared())
15769    return nullptr;
15770
15771  QualType ClassType = Context.getTypeDeclType(ClassDecl);
15772
15773  QualType ArgType = ClassType;
15774  ArgType = Context.getElaboratedType(ElaboratedTypeKeyword::None, nullptr,
15775                                      ArgType, nullptr);
15776  LangAS AS = getDefaultCXXMethodAddrSpace();
15777  if (AS != LangAS::Default)
15778    ArgType = Context.getAddrSpaceQualType(ClassType, AS);
15779  ArgType = Context.getRValueReferenceType(ArgType);
15780
15781  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
15782                                                     CXXMoveConstructor,
15783                                                     false);
15784
15785  DeclarationName Name
15786    = Context.DeclarationNames.getCXXConstructorName(
15787                                           Context.getCanonicalType(ClassType));
15788  SourceLocation ClassLoc = ClassDecl->getLocation();
15789  DeclarationNameInfo NameInfo(Name, ClassLoc);
15790
15791  // C++11 [class.copy]p11:
15792  //   An implicitly-declared copy/move constructor is an inline public
15793  //   member of its class.
15794  CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
15795      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr,
15796      ExplicitSpecifier(), getCurFPFeatures().isFPConstrained(),
15797      /*isInline=*/true,
15798      /*isImplicitlyDeclared=*/true,
15799      Constexpr ? ConstexprSpecKind::Constexpr
15800                : ConstexprSpecKind::Unspecified);
15801  MoveConstructor->setAccess(AS_public);
15802  MoveConstructor->setDefaulted();
15803
15804  setupImplicitSpecialMemberType(MoveConstructor, Context.VoidTy, ArgType);
15805
15806  if (getLangOpts().CUDA)
15807    inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveConstructor,
15808                                            MoveConstructor,
15809                                            /* ConstRHS */ false,
15810                                            /* Diagnose */ false);
15811
15812  // Add the parameter to the constructor.
15813  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
15814                                               ClassLoc, ClassLoc,
15815                                               /*IdentifierInfo=*/nullptr,
15816                                               ArgType, /*TInfo=*/nullptr,
15817                                               SC_None, nullptr);
15818  MoveConstructor->setParams(FromParam);
15819
15820  MoveConstructor->setTrivial(
15821      ClassDecl->needsOverloadResolutionForMoveConstructor()
15822          ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
15823          : ClassDecl->hasTrivialMoveConstructor());
15824
15825  MoveConstructor->setTrivialForCall(
15826      ClassDecl->hasAttr<TrivialABIAttr>() ||
15827      (ClassDecl->needsOverloadResolutionForMoveConstructor()
15828           ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor,
15829                                    TAH_ConsiderTrivialABI)
15830           : ClassDecl->hasTrivialMoveConstructorForCall()));
15831
15832  // Note that we have declared this constructor.
15833  ++getASTContext().NumImplicitMoveConstructorsDeclared;
15834
15835  Scope *S = getScopeForContext(ClassDecl);
15836  CheckImplicitSpecialMemberDeclaration(S, MoveConstructor);
15837
15838  if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
15839    ClassDecl->setImplicitMoveConstructorIsDeleted();
15840    SetDeclDeleted(MoveConstructor, ClassLoc);
15841  }
15842
15843  if (S)
15844    PushOnScopeChains(MoveConstructor, S, false);
15845  ClassDecl->addDecl(MoveConstructor);
15846
15847  return MoveConstructor;
15848}
15849
15850void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
15851                                         CXXConstructorDecl *MoveConstructor) {
15852  assert((MoveConstructor->isDefaulted() &&
15853          MoveConstructor->isMoveConstructor() &&
15854          !MoveConstructor->doesThisDeclarationHaveABody() &&
15855          !MoveConstructor->isDeleted()) &&
15856         "DefineImplicitMoveConstructor - call it for implicit move ctor");
15857  if (MoveConstructor->willHaveBody() || MoveConstructor->isInvalidDecl())
15858    return;
15859
15860  CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
15861  assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
15862
15863  SynthesizedFunctionScope Scope(*this, MoveConstructor);
15864
15865  // The exception specification is needed because we are defining the
15866  // function.
15867  ResolveExceptionSpec(CurrentLocation,
15868                       MoveConstructor->getType()->castAs<FunctionProtoType>());
15869  MarkVTableUsed(CurrentLocation, ClassDecl);
15870
15871  // Add a context note for diagnostics produced after this point.
15872  Scope.addContextNote(CurrentLocation);
15873
15874  if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false)) {
15875    MoveConstructor->setInvalidDecl();
15876  } else {
15877    SourceLocation Loc = MoveConstructor->getEndLoc().isValid()
15878                             ? MoveConstructor->getEndLoc()
15879                             : MoveConstructor->getLocation();
15880    Sema::CompoundScopeRAII CompoundScope(*this);
15881    MoveConstructor->setBody(
15882        ActOnCompoundStmt(Loc, Loc, std::nullopt, /*isStmtExpr=*/false)
15883            .getAs<Stmt>());
15884    MoveConstructor->markUsed(Context);
15885  }
15886
15887  if (ASTMutationListener *L = getASTMutationListener()) {
15888    L->CompletedImplicitDefinition(MoveConstructor);
15889  }
15890}
15891
15892bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
15893  return FD->isDeleted() && FD->isDefaulted() && isa<CXXMethodDecl>(FD);
15894}
15895
15896void Sema::DefineImplicitLambdaToFunctionPointerConversion(
15897                            SourceLocation CurrentLocation,
15898                            CXXConversionDecl *Conv) {
15899  SynthesizedFunctionScope Scope(*this, Conv);
15900  assert(!Conv->getReturnType()->isUndeducedType());
15901
15902  QualType ConvRT = Conv->getType()->castAs<FunctionType>()->getReturnType();
15903  CallingConv CC =
15904      ConvRT->getPointeeType()->castAs<FunctionType>()->getCallConv();
15905
15906  CXXRecordDecl *Lambda = Conv->getParent();
15907  FunctionDecl *CallOp = Lambda->getLambdaCallOperator();
15908  FunctionDecl *Invoker =
15909      CallOp->hasCXXExplicitFunctionObjectParameter() || CallOp->isStatic()
15910          ? CallOp
15911          : Lambda->getLambdaStaticInvoker(CC);
15912
15913  if (auto *TemplateArgs = Conv->getTemplateSpecializationArgs()) {
15914    CallOp = InstantiateFunctionDeclaration(
15915        CallOp->getDescribedFunctionTemplate(), TemplateArgs, CurrentLocation);
15916    if (!CallOp)
15917      return;
15918
15919    if (CallOp != Invoker) {
15920      Invoker = InstantiateFunctionDeclaration(
15921          Invoker->getDescribedFunctionTemplate(), TemplateArgs,
15922          CurrentLocation);
15923      if (!Invoker)
15924        return;
15925    }
15926  }
15927
15928  if (CallOp->isInvalidDecl())
15929    return;
15930
15931  // Mark the call operator referenced (and add to pending instantiations
15932  // if necessary).
15933  // For both the conversion and static-invoker template specializations
15934  // we construct their body's in this function, so no need to add them
15935  // to the PendingInstantiations.
15936  MarkFunctionReferenced(CurrentLocation, CallOp);
15937
15938  if (Invoker != CallOp) {
15939    // Fill in the __invoke function with a dummy implementation. IR generation
15940    // will fill in the actual details. Update its type in case it contained
15941    // an 'auto'.
15942    Invoker->markUsed(Context);
15943    Invoker->setReferenced();
15944    Invoker->setType(Conv->getReturnType()->getPointeeType());
15945    Invoker->setBody(new (Context) CompoundStmt(Conv->getLocation()));
15946  }
15947
15948  // Construct the body of the conversion function { return __invoke; }.
15949  Expr *FunctionRef = BuildDeclRefExpr(Invoker, Invoker->getType(), VK_LValue,
15950                                       Conv->getLocation());
15951  assert(FunctionRef && "Can't refer to __invoke function?");
15952  Stmt *Return = BuildReturnStmt(Conv->getLocation(), FunctionRef).get();
15953  Conv->setBody(CompoundStmt::Create(Context, Return, FPOptionsOverride(),
15954                                     Conv->getLocation(), Conv->getLocation()));
15955  Conv->markUsed(Context);
15956  Conv->setReferenced();
15957
15958  if (ASTMutationListener *L = getASTMutationListener()) {
15959    L->CompletedImplicitDefinition(Conv);
15960    if (Invoker != CallOp)
15961      L->CompletedImplicitDefinition(Invoker);
15962  }
15963}
15964
15965void Sema::DefineImplicitLambdaToBlockPointerConversion(
15966    SourceLocation CurrentLocation, CXXConversionDecl *Conv) {
15967  assert(!Conv->getParent()->isGenericLambda());
15968
15969  SynthesizedFunctionScope Scope(*this, Conv);
15970
15971  // Copy-initialize the lambda object as needed to capture it.
15972  Expr *This = ActOnCXXThis(CurrentLocation).get();
15973  Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).get();
15974
15975  ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
15976                                                        Conv->getLocation(),
15977                                                        Conv, DerefThis);
15978
15979  // If we're not under ARC, make sure we still get the _Block_copy/autorelease
15980  // behavior.  Note that only the general conversion function does this
15981  // (since it's unusable otherwise); in the case where we inline the
15982  // block literal, it has block literal lifetime semantics.
15983  if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
15984    BuildBlock = ImplicitCastExpr::Create(
15985        Context, BuildBlock.get()->getType(), CK_CopyAndAutoreleaseBlockObject,
15986        BuildBlock.get(), nullptr, VK_PRValue, FPOptionsOverride());
15987
15988  if (BuildBlock.isInvalid()) {
15989    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
15990    Conv->setInvalidDecl();
15991    return;
15992  }
15993
15994  // Create the return statement that returns the block from the conversion
15995  // function.
15996  StmtResult Return = BuildReturnStmt(Conv->getLocation(), BuildBlock.get());
15997  if (Return.isInvalid()) {
15998    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
15999    Conv->setInvalidDecl();
16000    return;
16001  }
16002
16003  // Set the body of the conversion function.
16004  Stmt *ReturnS = Return.get();
16005  Conv->setBody(CompoundStmt::Create(Context, ReturnS, FPOptionsOverride(),
16006                                     Conv->getLocation(), Conv->getLocation()));
16007  Conv->markUsed(Context);
16008
16009  // We're done; notify the mutation listener, if any.
16010  if (ASTMutationListener *L = getASTMutationListener()) {
16011    L->CompletedImplicitDefinition(Conv);
16012  }
16013}
16014
16015/// Determine whether the given list arguments contains exactly one
16016/// "real" (non-default) argument.
16017static bool hasOneRealArgument(MultiExprArg Args) {
16018  switch (Args.size()) {
16019  case 0:
16020    return false;
16021
16022  default:
16023    if (!Args[1]->isDefaultArgument())
16024      return false;
16025
16026    [[fallthrough]];
16027  case 1:
16028    return !Args[0]->isDefaultArgument();
16029  }
16030
16031  return false;
16032}
16033
16034ExprResult Sema::BuildCXXConstructExpr(
16035    SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
16036    CXXConstructorDecl *Constructor, MultiExprArg ExprArgs,
16037    bool HadMultipleCandidates, bool IsListInitialization,
16038    bool IsStdInitListInitialization, bool RequiresZeroInit,
16039    CXXConstructionKind ConstructKind, SourceRange ParenRange) {
16040  bool Elidable = false;
16041
16042  // C++0x [class.copy]p34:
16043  //   When certain criteria are met, an implementation is allowed to
16044  //   omit the copy/move construction of a class object, even if the
16045  //   copy/move constructor and/or destructor for the object have
16046  //   side effects. [...]
16047  //     - when a temporary class object that has not been bound to a
16048  //       reference (12.2) would be copied/moved to a class object
16049  //       with the same cv-unqualified type, the copy/move operation
16050  //       can be omitted by constructing the temporary object
16051  //       directly into the target of the omitted copy/move
16052  if (ConstructKind == CXXConstructionKind::Complete && Constructor &&
16053      // FIXME: Converting constructors should also be accepted.
16054      // But to fix this, the logic that digs down into a CXXConstructExpr
16055      // to find the source object needs to handle it.
16056      // Right now it assumes the source object is passed directly as the
16057      // first argument.
16058      Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
16059    Expr *SubExpr = ExprArgs[0];
16060    // FIXME: Per above, this is also incorrect if we want to accept
16061    //        converting constructors, as isTemporaryObject will
16062    //        reject temporaries with different type from the
16063    //        CXXRecord itself.
16064    Elidable = SubExpr->isTemporaryObject(
16065        Context, cast<CXXRecordDecl>(FoundDecl->getDeclContext()));
16066  }
16067
16068  return BuildCXXConstructExpr(ConstructLoc, DeclInitType,
16069                               FoundDecl, Constructor,
16070                               Elidable, ExprArgs, HadMultipleCandidates,
16071                               IsListInitialization,
16072                               IsStdInitListInitialization, RequiresZeroInit,
16073                               ConstructKind, ParenRange);
16074}
16075
16076ExprResult Sema::BuildCXXConstructExpr(
16077    SourceLocation ConstructLoc, QualType DeclInitType, NamedDecl *FoundDecl,
16078    CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg ExprArgs,
16079    bool HadMultipleCandidates, bool IsListInitialization,
16080    bool IsStdInitListInitialization, bool RequiresZeroInit,
16081    CXXConstructionKind ConstructKind, SourceRange ParenRange) {
16082  if (auto *Shadow = dyn_cast<ConstructorUsingShadowDecl>(FoundDecl)) {
16083    Constructor = findInheritingConstructor(ConstructLoc, Constructor, Shadow);
16084    // The only way to get here is if we did overlaod resolution to find the
16085    // shadow decl, so we don't need to worry about re-checking the trailing
16086    // requires clause.
16087    if (DiagnoseUseOfOverloadedDecl(Constructor, ConstructLoc))
16088      return ExprError();
16089  }
16090
16091  return BuildCXXConstructExpr(
16092      ConstructLoc, DeclInitType, Constructor, Elidable, ExprArgs,
16093      HadMultipleCandidates, IsListInitialization, IsStdInitListInitialization,
16094      RequiresZeroInit, ConstructKind, ParenRange);
16095}
16096
16097/// BuildCXXConstructExpr - Creates a complete call to a constructor,
16098/// including handling of its default argument expressions.
16099ExprResult Sema::BuildCXXConstructExpr(
16100    SourceLocation ConstructLoc, QualType DeclInitType,
16101    CXXConstructorDecl *Constructor, bool Elidable, MultiExprArg ExprArgs,
16102    bool HadMultipleCandidates, bool IsListInitialization,
16103    bool IsStdInitListInitialization, bool RequiresZeroInit,
16104    CXXConstructionKind ConstructKind, SourceRange ParenRange) {
16105  assert(declaresSameEntity(
16106             Constructor->getParent(),
16107             DeclInitType->getBaseElementTypeUnsafe()->getAsCXXRecordDecl()) &&
16108         "given constructor for wrong type");
16109  MarkFunctionReferenced(ConstructLoc, Constructor);
16110  if (getLangOpts().CUDA && !CheckCUDACall(ConstructLoc, Constructor))
16111    return ExprError();
16112
16113  return CheckForImmediateInvocation(
16114      CXXConstructExpr::Create(
16115          Context, DeclInitType, ConstructLoc, Constructor, Elidable, ExprArgs,
16116          HadMultipleCandidates, IsListInitialization,
16117          IsStdInitListInitialization, RequiresZeroInit,
16118          static_cast<CXXConstructionKind>(ConstructKind), ParenRange),
16119      Constructor);
16120}
16121
16122void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
16123  if (VD->isInvalidDecl()) return;
16124  // If initializing the variable failed, don't also diagnose problems with
16125  // the destructor, they're likely related.
16126  if (VD->getInit() && VD->getInit()->containsErrors())
16127    return;
16128
16129  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
16130  if (ClassDecl->isInvalidDecl()) return;
16131  if (ClassDecl->hasIrrelevantDestructor()) return;
16132  if (ClassDecl->isDependentContext()) return;
16133
16134  if (VD->isNoDestroy(getASTContext()))
16135    return;
16136
16137  CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
16138  // The result of `LookupDestructor` might be nullptr if the destructor is
16139  // invalid, in which case it is marked as `IneligibleOrNotSelected` and
16140  // will not be selected by `CXXRecordDecl::getDestructor()`.
16141  if (!Destructor)
16142    return;
16143  // If this is an array, we'll require the destructor during initialization, so
16144  // we can skip over this. We still want to emit exit-time destructor warnings
16145  // though.
16146  if (!VD->getType()->isArrayType()) {
16147    MarkFunctionReferenced(VD->getLocation(), Destructor);
16148    CheckDestructorAccess(VD->getLocation(), Destructor,
16149                          PDiag(diag::err_access_dtor_var)
16150                              << VD->getDeclName() << VD->getType());
16151    DiagnoseUseOfDecl(Destructor, VD->getLocation());
16152  }
16153
16154  if (Destructor->isTrivial()) return;
16155
16156  // If the destructor is constexpr, check whether the variable has constant
16157  // destruction now.
16158  if (Destructor->isConstexpr()) {
16159    bool HasConstantInit = false;
16160    if (VD->getInit() && !VD->getInit()->isValueDependent())
16161      HasConstantInit = VD->evaluateValue();
16162    SmallVector<PartialDiagnosticAt, 8> Notes;
16163    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() &&
16164        HasConstantInit) {
16165      Diag(VD->getLocation(),
16166           diag::err_constexpr_var_requires_const_destruction) << VD;
16167      for (unsigned I = 0, N = Notes.size(); I != N; ++I)
16168        Diag(Notes[I].first, Notes[I].second);
16169    }
16170  }
16171
16172  if (!VD->hasGlobalStorage() || !VD->needsDestruction(Context))
16173    return;
16174
16175  // Emit warning for non-trivial dtor in global scope (a real global,
16176  // class-static, function-static).
16177  Diag(VD->getLocation(), diag::warn_exit_time_destructor);
16178
16179  // TODO: this should be re-enabled for static locals by !CXAAtExit
16180  if (!VD->isStaticLocal())
16181    Diag(VD->getLocation(), diag::warn_global_destructor);
16182}
16183
16184/// Given a constructor and the set of arguments provided for the
16185/// constructor, convert the arguments and add any required default arguments
16186/// to form a proper call to this constructor.
16187///
16188/// \returns true if an error occurred, false otherwise.
16189bool Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
16190                                   QualType DeclInitType, MultiExprArg ArgsPtr,
16191                                   SourceLocation Loc,
16192                                   SmallVectorImpl<Expr *> &ConvertedArgs,
16193                                   bool AllowExplicit,
16194                                   bool IsListInitialization) {
16195  // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
16196  unsigned NumArgs = ArgsPtr.size();
16197  Expr **Args = ArgsPtr.data();
16198
16199  const auto *Proto = Constructor->getType()->castAs<FunctionProtoType>();
16200  unsigned NumParams = Proto->getNumParams();
16201
16202  // If too few arguments are available, we'll fill in the rest with defaults.
16203  if (NumArgs < NumParams)
16204    ConvertedArgs.reserve(NumParams);
16205  else
16206    ConvertedArgs.reserve(NumArgs);
16207
16208  VariadicCallType CallType =
16209    Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
16210  SmallVector<Expr *, 8> AllArgs;
16211  bool Invalid = GatherArgumentsForCall(
16212      Loc, Constructor, Proto, 0, llvm::ArrayRef(Args, NumArgs), AllArgs,
16213      CallType, AllowExplicit, IsListInitialization);
16214  ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
16215
16216  DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
16217
16218  CheckConstructorCall(Constructor, DeclInitType,
16219                       llvm::ArrayRef(AllArgs.data(), AllArgs.size()), Proto,
16220                       Loc);
16221
16222  return Invalid;
16223}
16224
16225static inline bool
16226CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
16227                                       const FunctionDecl *FnDecl) {
16228  const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
16229  if (isa<NamespaceDecl>(DC)) {
16230    return SemaRef.Diag(FnDecl->getLocation(),
16231                        diag::err_operator_new_delete_declared_in_namespace)
16232      << FnDecl->getDeclName();
16233  }
16234
16235  if (isa<TranslationUnitDecl>(DC) &&
16236      FnDecl->getStorageClass() == SC_Static) {
16237    return SemaRef.Diag(FnDecl->getLocation(),
16238                        diag::err_operator_new_delete_declared_static)
16239      << FnDecl->getDeclName();
16240  }
16241
16242  return false;
16243}
16244
16245static CanQualType RemoveAddressSpaceFromPtr(Sema &SemaRef,
16246                                             const PointerType *PtrTy) {
16247  auto &Ctx = SemaRef.Context;
16248  Qualifiers PtrQuals = PtrTy->getPointeeType().getQualifiers();
16249  PtrQuals.removeAddressSpace();
16250  return Ctx.getPointerType(Ctx.getCanonicalType(Ctx.getQualifiedType(
16251      PtrTy->getPointeeType().getUnqualifiedType(), PtrQuals)));
16252}
16253
16254static inline bool
16255CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
16256                            CanQualType ExpectedResultType,
16257                            CanQualType ExpectedFirstParamType,
16258                            unsigned DependentParamTypeDiag,
16259                            unsigned InvalidParamTypeDiag) {
16260  QualType ResultType =
16261      FnDecl->getType()->castAs<FunctionType>()->getReturnType();
16262
16263  if (SemaRef.getLangOpts().OpenCLCPlusPlus) {
16264    // The operator is valid on any address space for OpenCL.
16265    // Drop address space from actual and expected result types.
16266    if (const auto *PtrTy = ResultType->getAs<PointerType>())
16267      ResultType = RemoveAddressSpaceFromPtr(SemaRef, PtrTy);
16268
16269    if (auto ExpectedPtrTy = ExpectedResultType->getAs<PointerType>())
16270      ExpectedResultType = RemoveAddressSpaceFromPtr(SemaRef, ExpectedPtrTy);
16271  }
16272
16273  // Check that the result type is what we expect.
16274  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {
16275    // Reject even if the type is dependent; an operator delete function is
16276    // required to have a non-dependent result type.
16277    return SemaRef.Diag(
16278               FnDecl->getLocation(),
16279               ResultType->isDependentType()
16280                   ? diag::err_operator_new_delete_dependent_result_type
16281                   : diag::err_operator_new_delete_invalid_result_type)
16282           << FnDecl->getDeclName() << ExpectedResultType;
16283  }
16284
16285  // A function template must have at least 2 parameters.
16286  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
16287    return SemaRef.Diag(FnDecl->getLocation(),
16288                      diag::err_operator_new_delete_template_too_few_parameters)
16289        << FnDecl->getDeclName();
16290
16291  // The function decl must have at least 1 parameter.
16292  if (FnDecl->getNumParams() == 0)
16293    return SemaRef.Diag(FnDecl->getLocation(),
16294                        diag::err_operator_new_delete_too_few_parameters)
16295      << FnDecl->getDeclName();
16296
16297  QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
16298  if (SemaRef.getLangOpts().OpenCLCPlusPlus) {
16299    // The operator is valid on any address space for OpenCL.
16300    // Drop address space from actual and expected first parameter types.
16301    if (const auto *PtrTy =
16302            FnDecl->getParamDecl(0)->getType()->getAs<PointerType>())
16303      FirstParamType = RemoveAddressSpaceFromPtr(SemaRef, PtrTy);
16304
16305    if (auto ExpectedPtrTy = ExpectedFirstParamType->getAs<PointerType>())
16306      ExpectedFirstParamType =
16307          RemoveAddressSpaceFromPtr(SemaRef, ExpectedPtrTy);
16308  }
16309
16310  // Check that the first parameter type is what we expect.
16311  if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
16312      ExpectedFirstParamType) {
16313    // The first parameter type is not allowed to be dependent. As a tentative
16314    // DR resolution, we allow a dependent parameter type if it is the right
16315    // type anyway, to allow destroying operator delete in class templates.
16316    return SemaRef.Diag(FnDecl->getLocation(), FirstParamType->isDependentType()
16317                                                   ? DependentParamTypeDiag
16318                                                   : InvalidParamTypeDiag)
16319           << FnDecl->getDeclName() << ExpectedFirstParamType;
16320  }
16321
16322  return false;
16323}
16324
16325static bool
16326CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
16327  // C++ [basic.stc.dynamic.allocation]p1:
16328  //   A program is ill-formed if an allocation function is declared in a
16329  //   namespace scope other than global scope or declared static in global
16330  //   scope.
16331  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
16332    return true;
16333
16334  CanQualType SizeTy =
16335    SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
16336
16337  // C++ [basic.stc.dynamic.allocation]p1:
16338  //  The return type shall be void*. The first parameter shall have type
16339  //  std::size_t.
16340  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
16341                                  SizeTy,
16342                                  diag::err_operator_new_dependent_param_type,
16343                                  diag::err_operator_new_param_type))
16344    return true;
16345
16346  // C++ [basic.stc.dynamic.allocation]p1:
16347  //  The first parameter shall not have an associated default argument.
16348  if (FnDecl->getParamDecl(0)->hasDefaultArg())
16349    return SemaRef.Diag(FnDecl->getLocation(),
16350                        diag::err_operator_new_default_arg)
16351      << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
16352
16353  return false;
16354}
16355
16356static bool
16357CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
16358  // C++ [basic.stc.dynamic.deallocation]p1:
16359  //   A program is ill-formed if deallocation functions are declared in a
16360  //   namespace scope other than global scope or declared static in global
16361  //   scope.
16362  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
16363    return true;
16364
16365  auto *MD = dyn_cast<CXXMethodDecl>(FnDecl);
16366
16367  // C++ P0722:
16368  //   Within a class C, the first parameter of a destroying operator delete
16369  //   shall be of type C *. The first parameter of any other deallocation
16370  //   function shall be of type void *.
16371  CanQualType ExpectedFirstParamType =
16372      MD && MD->isDestroyingOperatorDelete()
16373          ? SemaRef.Context.getCanonicalType(SemaRef.Context.getPointerType(
16374                SemaRef.Context.getRecordType(MD->getParent())))
16375          : SemaRef.Context.VoidPtrTy;
16376
16377  // C++ [basic.stc.dynamic.deallocation]p2:
16378  //   Each deallocation function shall return void
16379  if (CheckOperatorNewDeleteTypes(
16380          SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType,
16381          diag::err_operator_delete_dependent_param_type,
16382          diag::err_operator_delete_param_type))
16383    return true;
16384
16385  // C++ P0722:
16386  //   A destroying operator delete shall be a usual deallocation function.
16387  if (MD && !MD->getParent()->isDependentContext() &&
16388      MD->isDestroyingOperatorDelete() &&
16389      !SemaRef.isUsualDeallocationFunction(MD)) {
16390    SemaRef.Diag(MD->getLocation(),
16391                 diag::err_destroying_operator_delete_not_usual);
16392    return true;
16393  }
16394
16395  return false;
16396}
16397
16398/// CheckOverloadedOperatorDeclaration - Check whether the declaration
16399/// of this overloaded operator is well-formed. If so, returns false;
16400/// otherwise, emits appropriate diagnostics and returns true.
16401bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
16402  assert(FnDecl && FnDecl->isOverloadedOperator() &&
16403         "Expected an overloaded operator declaration");
16404
16405  OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
16406
16407  // C++ [over.oper]p5:
16408  //   The allocation and deallocation functions, operator new,
16409  //   operator new[], operator delete and operator delete[], are
16410  //   described completely in 3.7.3. The attributes and restrictions
16411  //   found in the rest of this subclause do not apply to them unless
16412  //   explicitly stated in 3.7.3.
16413  if (Op == OO_Delete || Op == OO_Array_Delete)
16414    return CheckOperatorDeleteDeclaration(*this, FnDecl);
16415
16416  if (Op == OO_New || Op == OO_Array_New)
16417    return CheckOperatorNewDeclaration(*this, FnDecl);
16418
16419  // C++ [over.oper]p7:
16420  //   An operator function shall either be a member function or
16421  //   be a non-member function and have at least one parameter
16422  //   whose type is a class, a reference to a class, an enumeration,
16423  //   or a reference to an enumeration.
16424  // Note: Before C++23, a member function could not be static. The only member
16425  //       function allowed to be static is the call operator function.
16426  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
16427    if (MethodDecl->isStatic()) {
16428      if (Op == OO_Call || Op == OO_Subscript)
16429        Diag(FnDecl->getLocation(),
16430             (LangOpts.CPlusPlus23
16431                  ? diag::warn_cxx20_compat_operator_overload_static
16432                  : diag::ext_operator_overload_static))
16433            << FnDecl;
16434      else
16435        return Diag(FnDecl->getLocation(), diag::err_operator_overload_static)
16436               << FnDecl;
16437    }
16438  } else {
16439    bool ClassOrEnumParam = false;
16440    for (auto *Param : FnDecl->parameters()) {
16441      QualType ParamType = Param->getType().getNonReferenceType();
16442      if (ParamType->isDependentType() || ParamType->isRecordType() ||
16443          ParamType->isEnumeralType()) {
16444        ClassOrEnumParam = true;
16445        break;
16446      }
16447    }
16448
16449    if (!ClassOrEnumParam)
16450      return Diag(FnDecl->getLocation(),
16451                  diag::err_operator_overload_needs_class_or_enum)
16452        << FnDecl->getDeclName();
16453  }
16454
16455  // C++ [over.oper]p8:
16456  //   An operator function cannot have default arguments (8.3.6),
16457  //   except where explicitly stated below.
16458  //
16459  // Only the function-call operator (C++ [over.call]p1) and the subscript
16460  // operator (CWG2507) allow default arguments.
16461  if (Op != OO_Call) {
16462    ParmVarDecl *FirstDefaultedParam = nullptr;
16463    for (auto *Param : FnDecl->parameters()) {
16464      if (Param->hasDefaultArg()) {
16465        FirstDefaultedParam = Param;
16466        break;
16467      }
16468    }
16469    if (FirstDefaultedParam) {
16470      if (Op == OO_Subscript) {
16471        Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23
16472                                        ? diag::ext_subscript_overload
16473                                        : diag::error_subscript_overload)
16474            << FnDecl->getDeclName() << 1
16475            << FirstDefaultedParam->getDefaultArgRange();
16476      } else {
16477        return Diag(FirstDefaultedParam->getLocation(),
16478                    diag::err_operator_overload_default_arg)
16479               << FnDecl->getDeclName()
16480               << FirstDefaultedParam->getDefaultArgRange();
16481      }
16482    }
16483  }
16484
16485  static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
16486    { false, false, false }
16487#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
16488    , { Unary, Binary, MemberOnly }
16489#include "clang/Basic/OperatorKinds.def"
16490  };
16491
16492  bool CanBeUnaryOperator = OperatorUses[Op][0];
16493  bool CanBeBinaryOperator = OperatorUses[Op][1];
16494  bool MustBeMemberOperator = OperatorUses[Op][2];
16495
16496  // C++ [over.oper]p8:
16497  //   [...] Operator functions cannot have more or fewer parameters
16498  //   than the number required for the corresponding operator, as
16499  //   described in the rest of this subclause.
16500  unsigned NumParams = FnDecl->getNumParams() +
16501                       (isa<CXXMethodDecl>(FnDecl) &&
16502                                !FnDecl->hasCXXExplicitFunctionObjectParameter()
16503                            ? 1
16504                            : 0);
16505  if (Op != OO_Call && Op != OO_Subscript &&
16506      ((NumParams == 1 && !CanBeUnaryOperator) ||
16507       (NumParams == 2 && !CanBeBinaryOperator) || (NumParams < 1) ||
16508       (NumParams > 2))) {
16509    // We have the wrong number of parameters.
16510    unsigned ErrorKind;
16511    if (CanBeUnaryOperator && CanBeBinaryOperator) {
16512      ErrorKind = 2;  // 2 -> unary or binary.
16513    } else if (CanBeUnaryOperator) {
16514      ErrorKind = 0;  // 0 -> unary
16515    } else {
16516      assert(CanBeBinaryOperator &&
16517             "All non-call overloaded operators are unary or binary!");
16518      ErrorKind = 1;  // 1 -> binary
16519    }
16520    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
16521      << FnDecl->getDeclName() << NumParams << ErrorKind;
16522  }
16523
16524  if (Op == OO_Subscript && NumParams != 2) {
16525    Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23
16526                                    ? diag::ext_subscript_overload
16527                                    : diag::error_subscript_overload)
16528        << FnDecl->getDeclName() << (NumParams == 1 ? 0 : 2);
16529  }
16530
16531  // Overloaded operators other than operator() and operator[] cannot be
16532  // variadic.
16533  if (Op != OO_Call &&
16534      FnDecl->getType()->castAs<FunctionProtoType>()->isVariadic()) {
16535    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
16536           << FnDecl->getDeclName();
16537  }
16538
16539  // Some operators must be member functions.
16540  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
16541    return Diag(FnDecl->getLocation(),
16542                diag::err_operator_overload_must_be_member)
16543      << FnDecl->getDeclName();
16544  }
16545
16546  // C++ [over.inc]p1:
16547  //   The user-defined function called operator++ implements the
16548  //   prefix and postfix ++ operator. If this function is a member
16549  //   function with no parameters, or a non-member function with one
16550  //   parameter of class or enumeration type, it defines the prefix
16551  //   increment operator ++ for objects of that type. If the function
16552  //   is a member function with one parameter (which shall be of type
16553  //   int) or a non-member function with two parameters (the second
16554  //   of which shall be of type int), it defines the postfix
16555  //   increment operator ++ for objects of that type.
16556  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
16557    ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
16558    QualType ParamType = LastParam->getType();
16559
16560    if (!ParamType->isSpecificBuiltinType(BuiltinType::Int) &&
16561        !ParamType->isDependentType())
16562      return Diag(LastParam->getLocation(),
16563                  diag::err_operator_overload_post_incdec_must_be_int)
16564        << LastParam->getType() << (Op == OO_MinusMinus);
16565  }
16566
16567  return false;
16568}
16569
16570static bool
16571checkLiteralOperatorTemplateParameterList(Sema &SemaRef,
16572                                          FunctionTemplateDecl *TpDecl) {
16573  TemplateParameterList *TemplateParams = TpDecl->getTemplateParameters();
16574
16575  // Must have one or two template parameters.
16576  if (TemplateParams->size() == 1) {
16577    NonTypeTemplateParmDecl *PmDecl =
16578        dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(0));
16579
16580    // The template parameter must be a char parameter pack.
16581    if (PmDecl && PmDecl->isTemplateParameterPack() &&
16582        SemaRef.Context.hasSameType(PmDecl->getType(), SemaRef.Context.CharTy))
16583      return false;
16584
16585    // C++20 [over.literal]p5:
16586    //   A string literal operator template is a literal operator template
16587    //   whose template-parameter-list comprises a single non-type
16588    //   template-parameter of class type.
16589    //
16590    // As a DR resolution, we also allow placeholders for deduced class
16591    // template specializations.
16592    if (SemaRef.getLangOpts().CPlusPlus20 && PmDecl &&
16593        !PmDecl->isTemplateParameterPack() &&
16594        (PmDecl->getType()->isRecordType() ||
16595         PmDecl->getType()->getAs<DeducedTemplateSpecializationType>()))
16596      return false;
16597  } else if (TemplateParams->size() == 2) {
16598    TemplateTypeParmDecl *PmType =
16599        dyn_cast<TemplateTypeParmDecl>(TemplateParams->getParam(0));
16600    NonTypeTemplateParmDecl *PmArgs =
16601        dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(1));
16602
16603    // The second template parameter must be a parameter pack with the
16604    // first template parameter as its type.
16605    if (PmType && PmArgs && !PmType->isTemplateParameterPack() &&
16606        PmArgs->isTemplateParameterPack()) {
16607      const TemplateTypeParmType *TArgs =
16608          PmArgs->getType()->getAs<TemplateTypeParmType>();
16609      if (TArgs && TArgs->getDepth() == PmType->getDepth() &&
16610          TArgs->getIndex() == PmType->getIndex()) {
16611        if (!SemaRef.inTemplateInstantiation())
16612          SemaRef.Diag(TpDecl->getLocation(),
16613                       diag::ext_string_literal_operator_template);
16614        return false;
16615      }
16616    }
16617  }
16618
16619  SemaRef.Diag(TpDecl->getTemplateParameters()->getSourceRange().getBegin(),
16620               diag::err_literal_operator_template)
16621      << TpDecl->getTemplateParameters()->getSourceRange();
16622  return true;
16623}
16624
16625/// CheckLiteralOperatorDeclaration - Check whether the declaration
16626/// of this literal operator function is well-formed. If so, returns
16627/// false; otherwise, emits appropriate diagnostics and returns true.
16628bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
16629  if (isa<CXXMethodDecl>(FnDecl)) {
16630    Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
16631      << FnDecl->getDeclName();
16632    return true;
16633  }
16634
16635  if (FnDecl->isExternC()) {
16636    Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
16637    if (const LinkageSpecDecl *LSD =
16638            FnDecl->getDeclContext()->getExternCContext())
16639      Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here);
16640    return true;
16641  }
16642
16643  // This might be the definition of a literal operator template.
16644  FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
16645
16646  // This might be a specialization of a literal operator template.
16647  if (!TpDecl)
16648    TpDecl = FnDecl->getPrimaryTemplate();
16649
16650  // template <char...> type operator "" name() and
16651  // template <class T, T...> type operator "" name() are the only valid
16652  // template signatures, and the only valid signatures with no parameters.
16653  //
16654  // C++20 also allows template <SomeClass T> type operator "" name().
16655  if (TpDecl) {
16656    if (FnDecl->param_size() != 0) {
16657      Diag(FnDecl->getLocation(),
16658           diag::err_literal_operator_template_with_params);
16659      return true;
16660    }
16661
16662    if (checkLiteralOperatorTemplateParameterList(*this, TpDecl))
16663      return true;
16664
16665  } else if (FnDecl->param_size() == 1) {
16666    const ParmVarDecl *Param = FnDecl->getParamDecl(0);
16667
16668    QualType ParamType = Param->getType().getUnqualifiedType();
16669
16670    // Only unsigned long long int, long double, any character type, and const
16671    // char * are allowed as the only parameters.
16672    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) ||
16673        ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) ||
16674        Context.hasSameType(ParamType, Context.CharTy) ||
16675        Context.hasSameType(ParamType, Context.WideCharTy) ||
16676        Context.hasSameType(ParamType, Context.Char8Ty) ||
16677        Context.hasSameType(ParamType, Context.Char16Ty) ||
16678        Context.hasSameType(ParamType, Context.Char32Ty)) {
16679    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {
16680      QualType InnerType = Ptr->getPointeeType();
16681
16682      // Pointer parameter must be a const char *.
16683      if (!(Context.hasSameType(InnerType.getUnqualifiedType(),
16684                                Context.CharTy) &&
16685            InnerType.isConstQualified() && !InnerType.isVolatileQualified())) {
16686        Diag(Param->getSourceRange().getBegin(),
16687             diag::err_literal_operator_param)
16688            << ParamType << "'const char *'" << Param->getSourceRange();
16689        return true;
16690      }
16691
16692    } else if (ParamType->isRealFloatingType()) {
16693      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param)
16694          << ParamType << Context.LongDoubleTy << Param->getSourceRange();
16695      return true;
16696
16697    } else if (ParamType->isIntegerType()) {
16698      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param)
16699          << ParamType << Context.UnsignedLongLongTy << Param->getSourceRange();
16700      return true;
16701
16702    } else {
16703      Diag(Param->getSourceRange().getBegin(),
16704           diag::err_literal_operator_invalid_param)
16705          << ParamType << Param->getSourceRange();
16706      return true;
16707    }
16708
16709  } else if (FnDecl->param_size() == 2) {
16710    FunctionDecl::param_iterator Param = FnDecl->param_begin();
16711
16712    // First, verify that the first parameter is correct.
16713
16714    QualType FirstParamType = (*Param)->getType().getUnqualifiedType();
16715
16716    // Two parameter function must have a pointer to const as a
16717    // first parameter; let's strip those qualifiers.
16718    const PointerType *PT = FirstParamType->getAs<PointerType>();
16719
16720    if (!PT) {
16721      Diag((*Param)->getSourceRange().getBegin(),
16722           diag::err_literal_operator_param)
16723          << FirstParamType << "'const char *'" << (*Param)->getSourceRange();
16724      return true;
16725    }
16726
16727    QualType PointeeType = PT->getPointeeType();
16728    // First parameter must be const
16729    if (!PointeeType.isConstQualified() || PointeeType.isVolatileQualified()) {
16730      Diag((*Param)->getSourceRange().getBegin(),
16731           diag::err_literal_operator_param)
16732          << FirstParamType << "'const char *'" << (*Param)->getSourceRange();
16733      return true;
16734    }
16735
16736    QualType InnerType = PointeeType.getUnqualifiedType();
16737    // Only const char *, const wchar_t*, const char8_t*, const char16_t*, and
16738    // const char32_t* are allowed as the first parameter to a two-parameter
16739    // function
16740    if (!(Context.hasSameType(InnerType, Context.CharTy) ||
16741          Context.hasSameType(InnerType, Context.WideCharTy) ||
16742          Context.hasSameType(InnerType, Context.Char8Ty) ||
16743          Context.hasSameType(InnerType, Context.Char16Ty) ||
16744          Context.hasSameType(InnerType, Context.Char32Ty))) {
16745      Diag((*Param)->getSourceRange().getBegin(),
16746           diag::err_literal_operator_param)
16747          << FirstParamType << "'const char *'" << (*Param)->getSourceRange();
16748      return true;
16749    }
16750
16751    // Move on to the second and final parameter.
16752    ++Param;
16753
16754    // The second parameter must be a std::size_t.
16755    QualType SecondParamType = (*Param)->getType().getUnqualifiedType();
16756    if (!Context.hasSameType(SecondParamType, Context.getSizeType())) {
16757      Diag((*Param)->getSourceRange().getBegin(),
16758           diag::err_literal_operator_param)
16759          << SecondParamType << Context.getSizeType()
16760          << (*Param)->getSourceRange();
16761      return true;
16762    }
16763  } else {
16764    Diag(FnDecl->getLocation(), diag::err_literal_operator_bad_param_count);
16765    return true;
16766  }
16767
16768  // Parameters are good.
16769
16770  // A parameter-declaration-clause containing a default argument is not
16771  // equivalent to any of the permitted forms.
16772  for (auto *Param : FnDecl->parameters()) {
16773    if (Param->hasDefaultArg()) {
16774      Diag(Param->getDefaultArgRange().getBegin(),
16775           diag::err_literal_operator_default_argument)
16776        << Param->getDefaultArgRange();
16777      break;
16778    }
16779  }
16780
16781  const IdentifierInfo *II = FnDecl->getDeclName().getCXXLiteralIdentifier();
16782  ReservedLiteralSuffixIdStatus Status = II->isReservedLiteralSuffixId();
16783  if (Status != ReservedLiteralSuffixIdStatus::NotReserved &&
16784      !getSourceManager().isInSystemHeader(FnDecl->getLocation())) {
16785    // C++23 [usrlit.suffix]p1:
16786    //   Literal suffix identifiers that do not start with an underscore are
16787    //   reserved for future standardization. Literal suffix identifiers that
16788    //   contain a double underscore __ are reserved for use by C++
16789    //   implementations.
16790    Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved)
16791        << static_cast<int>(Status)
16792        << StringLiteralParser::isValidUDSuffix(getLangOpts(), II->getName());
16793  }
16794
16795  return false;
16796}
16797
16798/// ActOnStartLinkageSpecification - Parsed the beginning of a C++
16799/// linkage specification, including the language and (if present)
16800/// the '{'. ExternLoc is the location of the 'extern', Lang is the
16801/// language string literal. LBraceLoc, if valid, provides the location of
16802/// the '{' brace. Otherwise, this linkage specification does not
16803/// have any braces.
16804Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
16805                                           Expr *LangStr,
16806                                           SourceLocation LBraceLoc) {
16807  StringLiteral *Lit = cast<StringLiteral>(LangStr);
16808  assert(Lit->isUnevaluated() && "Unexpected string literal kind");
16809
16810  StringRef Lang = Lit->getString();
16811  LinkageSpecLanguageIDs Language;
16812  if (Lang == "C")
16813    Language = LinkageSpecLanguageIDs::C;
16814  else if (Lang == "C++")
16815    Language = LinkageSpecLanguageIDs::CXX;
16816  else {
16817    Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown)
16818      << LangStr->getSourceRange();
16819    return nullptr;
16820  }
16821
16822  // FIXME: Add all the various semantics of linkage specifications
16823
16824  LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext, ExternLoc,
16825                                               LangStr->getExprLoc(), Language,
16826                                               LBraceLoc.isValid());
16827
16828  /// C++ [module.unit]p7.2.3
16829  /// - Otherwise, if the declaration
16830  ///   - ...
16831  ///   - ...
16832  ///   - appears within a linkage-specification,
16833  ///   it is attached to the global module.
16834  ///
16835  /// If the declaration is already in global module fragment, we don't
16836  /// need to attach it again.
16837  if (getLangOpts().CPlusPlusModules && isCurrentModulePurview()) {
16838    Module *GlobalModule = PushImplicitGlobalModuleFragment(ExternLoc);
16839    D->setLocalOwningModule(GlobalModule);
16840  }
16841
16842  CurContext->addDecl(D);
16843  PushDeclContext(S, D);
16844  return D;
16845}
16846
16847/// ActOnFinishLinkageSpecification - Complete the definition of
16848/// the C++ linkage specification LinkageSpec. If RBraceLoc is
16849/// valid, it's the position of the closing '}' brace in a linkage
16850/// specification that uses braces.
16851Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
16852                                            Decl *LinkageSpec,
16853                                            SourceLocation RBraceLoc) {
16854  if (RBraceLoc.isValid()) {
16855    LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
16856    LSDecl->setRBraceLoc(RBraceLoc);
16857  }
16858
16859  // If the current module doesn't has Parent, it implies that the
16860  // LinkageSpec isn't in the module created by itself. So we don't
16861  // need to pop it.
16862  if (getLangOpts().CPlusPlusModules && getCurrentModule() &&
16863      getCurrentModule()->isImplicitGlobalModule() &&
16864      getCurrentModule()->Parent)
16865    PopImplicitGlobalModuleFragment();
16866
16867  PopDeclContext();
16868  return LinkageSpec;
16869}
16870
16871Decl *Sema::ActOnEmptyDeclaration(Scope *S,
16872                                  const ParsedAttributesView &AttrList,
16873                                  SourceLocation SemiLoc) {
16874  Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
16875  // Attribute declarations appertain to empty declaration so we handle
16876  // them here.
16877  ProcessDeclAttributeList(S, ED, AttrList);
16878
16879  CurContext->addDecl(ED);
16880  return ED;
16881}
16882
16883/// Perform semantic analysis for the variable declaration that
16884/// occurs within a C++ catch clause, returning the newly-created
16885/// variable.
16886VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
16887                                         TypeSourceInfo *TInfo,
16888                                         SourceLocation StartLoc,
16889                                         SourceLocation Loc,
16890                                         IdentifierInfo *Name) {
16891  bool Invalid = false;
16892  QualType ExDeclType = TInfo->getType();
16893
16894  // Arrays and functions decay.
16895  if (ExDeclType->isArrayType())
16896    ExDeclType = Context.getArrayDecayedType(ExDeclType);
16897  else if (ExDeclType->isFunctionType())
16898    ExDeclType = Context.getPointerType(ExDeclType);
16899
16900  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
16901  // The exception-declaration shall not denote a pointer or reference to an
16902  // incomplete type, other than [cv] void*.
16903  // N2844 forbids rvalue references.
16904  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
16905    Diag(Loc, diag::err_catch_rvalue_ref);
16906    Invalid = true;
16907  }
16908
16909  if (ExDeclType->isVariablyModifiedType()) {
16910    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;
16911    Invalid = true;
16912  }
16913
16914  QualType BaseType = ExDeclType;
16915  int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
16916  unsigned DK = diag::err_catch_incomplete;
16917  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
16918    BaseType = Ptr->getPointeeType();
16919    Mode = 1;
16920    DK = diag::err_catch_incomplete_ptr;
16921  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
16922    // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
16923    BaseType = Ref->getPointeeType();
16924    Mode = 2;
16925    DK = diag::err_catch_incomplete_ref;
16926  }
16927  if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
16928      !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
16929    Invalid = true;
16930
16931  if (!Invalid && BaseType.isWebAssemblyReferenceType()) {
16932    Diag(Loc, diag::err_wasm_reftype_tc) << 1;
16933    Invalid = true;
16934  }
16935
16936  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {
16937    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;
16938    Invalid = true;
16939  }
16940
16941  if (!Invalid && !ExDeclType->isDependentType() &&
16942      RequireNonAbstractType(Loc, ExDeclType,
16943                             diag::err_abstract_type_in_decl,
16944                             AbstractVariableType))
16945    Invalid = true;
16946
16947  // Only the non-fragile NeXT runtime currently supports C++ catches
16948  // of ObjC types, and no runtime supports catching ObjC types by value.
16949  if (!Invalid && getLangOpts().ObjC) {
16950    QualType T = ExDeclType;
16951    if (const ReferenceType *RT = T->getAs<ReferenceType>())
16952      T = RT->getPointeeType();
16953
16954    if (T->isObjCObjectType()) {
16955      Diag(Loc, diag::err_objc_object_catch);
16956      Invalid = true;
16957    } else if (T->isObjCObjectPointerType()) {
16958      // FIXME: should this be a test for macosx-fragile specifically?
16959      if (getLangOpts().ObjCRuntime.isFragile())
16960        Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
16961    }
16962  }
16963
16964  VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
16965                                    ExDeclType, TInfo, SC_None);
16966  ExDecl->setExceptionVariable(true);
16967
16968  // In ARC, infer 'retaining' for variables of retainable type.
16969  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
16970    Invalid = true;
16971
16972  if (!Invalid && !ExDeclType->isDependentType()) {
16973    if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
16974      // Insulate this from anything else we might currently be parsing.
16975      EnterExpressionEvaluationContext scope(
16976          *this, ExpressionEvaluationContext::PotentiallyEvaluated);
16977
16978      // C++ [except.handle]p16:
16979      //   The object declared in an exception-declaration or, if the
16980      //   exception-declaration does not specify a name, a temporary (12.2) is
16981      //   copy-initialized (8.5) from the exception object. [...]
16982      //   The object is destroyed when the handler exits, after the destruction
16983      //   of any automatic objects initialized within the handler.
16984      //
16985      // We just pretend to initialize the object with itself, then make sure
16986      // it can be destroyed later.
16987      QualType initType = Context.getExceptionObjectType(ExDeclType);
16988
16989      InitializedEntity entity =
16990        InitializedEntity::InitializeVariable(ExDecl);
16991      InitializationKind initKind =
16992        InitializationKind::CreateCopy(Loc, SourceLocation());
16993
16994      Expr *opaqueValue =
16995        new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
16996      InitializationSequence sequence(*this, entity, initKind, opaqueValue);
16997      ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
16998      if (result.isInvalid())
16999        Invalid = true;
17000      else {
17001        // If the constructor used was non-trivial, set this as the
17002        // "initializer".
17003        CXXConstructExpr *construct = result.getAs<CXXConstructExpr>();
17004        if (!construct->getConstructor()->isTrivial()) {
17005          Expr *init = MaybeCreateExprWithCleanups(construct);
17006          ExDecl->setInit(init);
17007        }
17008
17009        // And make sure it's destructable.
17010        FinalizeVarWithDestructor(ExDecl, recordType);
17011      }
17012    }
17013  }
17014
17015  if (Invalid)
17016    ExDecl->setInvalidDecl();
17017
17018  return ExDecl;
17019}
17020
17021/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
17022/// handler.
17023Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
17024  TypeSourceInfo *TInfo = GetTypeForDeclarator(D);
17025  bool Invalid = D.isInvalidType();
17026
17027  // Check for unexpanded parameter packs.
17028  if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
17029                                      UPPC_ExceptionType)) {
17030    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
17031                                             D.getIdentifierLoc());
17032    Invalid = true;
17033  }
17034
17035  IdentifierInfo *II = D.getIdentifier();
17036  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
17037                                             LookupOrdinaryName,
17038                                             ForVisibleRedeclaration)) {
17039    // The scope should be freshly made just for us. There is just no way
17040    // it contains any previous declaration, except for function parameters in
17041    // a function-try-block's catch statement.
17042    assert(!S->isDeclScope(PrevDecl));
17043    if (isDeclInScope(PrevDecl, CurContext, S)) {
17044      Diag(D.getIdentifierLoc(), diag::err_redefinition)
17045        << D.getIdentifier();
17046      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
17047      Invalid = true;
17048    } else if (PrevDecl->isTemplateParameter())
17049      // Maybe we will complain about the shadowed template parameter.
17050      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
17051  }
17052
17053  if (D.getCXXScopeSpec().isSet() && !Invalid) {
17054    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
17055      << D.getCXXScopeSpec().getRange();
17056    Invalid = true;
17057  }
17058
17059  VarDecl *ExDecl = BuildExceptionDeclaration(
17060      S, TInfo, D.getBeginLoc(), D.getIdentifierLoc(), D.getIdentifier());
17061  if (Invalid)
17062    ExDecl->setInvalidDecl();
17063
17064  // Add the exception declaration into this scope.
17065  if (II)
17066    PushOnScopeChains(ExDecl, S);
17067  else
17068    CurContext->addDecl(ExDecl);
17069
17070  ProcessDeclAttributes(S, ExDecl, D);
17071  return ExDecl;
17072}
17073
17074Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
17075                                         Expr *AssertExpr,
17076                                         Expr *AssertMessageExpr,
17077                                         SourceLocation RParenLoc) {
17078  if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
17079    return nullptr;
17080
17081  return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
17082                                      AssertMessageExpr, RParenLoc, false);
17083}
17084
17085static void WriteCharTypePrefix(BuiltinType::Kind BTK, llvm::raw_ostream &OS) {
17086  switch (BTK) {
17087  case BuiltinType::Char_S:
17088  case BuiltinType::Char_U:
17089    break;
17090  case BuiltinType::Char8:
17091    OS << "u8";
17092    break;
17093  case BuiltinType::Char16:
17094    OS << 'u';
17095    break;
17096  case BuiltinType::Char32:
17097    OS << 'U';
17098    break;
17099  case BuiltinType::WChar_S:
17100  case BuiltinType::WChar_U:
17101    OS << 'L';
17102    break;
17103  default:
17104    llvm_unreachable("Non-character type");
17105  }
17106}
17107
17108/// Convert character's value, interpreted as a code unit, to a string.
17109/// The value needs to be zero-extended to 32-bits.
17110/// FIXME: This assumes Unicode literal encodings
17111static void WriteCharValueForDiagnostic(uint32_t Value, const BuiltinType *BTy,
17112                                        unsigned TyWidth,
17113                                        SmallVectorImpl<char> &Str) {
17114  char Arr[UNI_MAX_UTF8_BYTES_PER_CODE_POINT];
17115  char *Ptr = Arr;
17116  BuiltinType::Kind K = BTy->getKind();
17117  llvm::raw_svector_ostream OS(Str);
17118
17119  // This should catch Char_S, Char_U, Char8, and use of escaped characters in
17120  // other types.
17121  if (K == BuiltinType::Char_S || K == BuiltinType::Char_U ||
17122      K == BuiltinType::Char8 || Value <= 0x7F) {
17123    StringRef Escaped = escapeCStyle<EscapeChar::Single>(Value);
17124    if (!Escaped.empty())
17125      EscapeStringForDiagnostic(Escaped, Str);
17126    else
17127      OS << static_cast<char>(Value);
17128    return;
17129  }
17130
17131  switch (K) {
17132  case BuiltinType::Char16:
17133  case BuiltinType::Char32:
17134  case BuiltinType::WChar_S:
17135  case BuiltinType::WChar_U: {
17136    if (llvm::ConvertCodePointToUTF8(Value, Ptr))
17137      EscapeStringForDiagnostic(StringRef(Arr, Ptr - Arr), Str);
17138    else
17139      OS << "\\x"
17140         << llvm::format_hex_no_prefix(Value, TyWidth / 4, /*Upper=*/true);
17141    break;
17142  }
17143  default:
17144    llvm_unreachable("Non-character type is passed");
17145  }
17146}
17147
17148/// Convert \V to a string we can present to the user in a diagnostic
17149/// \T is the type of the expression that has been evaluated into \V
17150static bool ConvertAPValueToString(const APValue &V, QualType T,
17151                                   SmallVectorImpl<char> &Str,
17152                                   ASTContext &Context) {
17153  if (!V.hasValue())
17154    return false;
17155
17156  switch (V.getKind()) {
17157  case APValue::ValueKind::Int:
17158    if (T->isBooleanType()) {
17159      // Bools are reduced to ints during evaluation, but for
17160      // diagnostic purposes we want to print them as
17161      // true or false.
17162      int64_t BoolValue = V.getInt().getExtValue();
17163      assert((BoolValue == 0 || BoolValue == 1) &&
17164             "Bool type, but value is not 0 or 1");
17165      llvm::raw_svector_ostream OS(Str);
17166      OS << (BoolValue ? "true" : "false");
17167    } else {
17168      llvm::raw_svector_ostream OS(Str);
17169      // Same is true for chars.
17170      // We want to print the character representation for textual types
17171      const auto *BTy = T->getAs<BuiltinType>();
17172      if (BTy) {
17173        switch (BTy->getKind()) {
17174        case BuiltinType::Char_S:
17175        case BuiltinType::Char_U:
17176        case BuiltinType::Char8:
17177        case BuiltinType::Char16:
17178        case BuiltinType::Char32:
17179        case BuiltinType::WChar_S:
17180        case BuiltinType::WChar_U: {
17181          unsigned TyWidth = Context.getIntWidth(T);
17182          assert(8 <= TyWidth && TyWidth <= 32 && "Unexpected integer width");
17183          uint32_t CodeUnit = static_cast<uint32_t>(V.getInt().getZExtValue());
17184          WriteCharTypePrefix(BTy->getKind(), OS);
17185          OS << '\'';
17186          WriteCharValueForDiagnostic(CodeUnit, BTy, TyWidth, Str);
17187          OS << "' (0x"
17188             << llvm::format_hex_no_prefix(CodeUnit, /*Width=*/2,
17189                                           /*Upper=*/true)
17190             << ", " << V.getInt() << ')';
17191          return true;
17192        }
17193        default:
17194          break;
17195        }
17196      }
17197      V.getInt().toString(Str);
17198    }
17199
17200    break;
17201
17202  case APValue::ValueKind::Float:
17203    V.getFloat().toString(Str);
17204    break;
17205
17206  case APValue::ValueKind::LValue:
17207    if (V.isNullPointer()) {
17208      llvm::raw_svector_ostream OS(Str);
17209      OS << "nullptr";
17210    } else
17211      return false;
17212    break;
17213
17214  case APValue::ValueKind::ComplexFloat: {
17215    llvm::raw_svector_ostream OS(Str);
17216    OS << '(';
17217    V.getComplexFloatReal().toString(Str);
17218    OS << " + ";
17219    V.getComplexFloatImag().toString(Str);
17220    OS << "i)";
17221  } break;
17222
17223  case APValue::ValueKind::ComplexInt: {
17224    llvm::raw_svector_ostream OS(Str);
17225    OS << '(';
17226    V.getComplexIntReal().toString(Str);
17227    OS << " + ";
17228    V.getComplexIntImag().toString(Str);
17229    OS << "i)";
17230  } break;
17231
17232  default:
17233    return false;
17234  }
17235
17236  return true;
17237}
17238
17239/// Some Expression types are not useful to print notes about,
17240/// e.g. literals and values that have already been expanded
17241/// before such as int-valued template parameters.
17242static bool UsefulToPrintExpr(const Expr *E) {
17243  E = E->IgnoreParenImpCasts();
17244  // Literals are pretty easy for humans to understand.
17245  if (isa<IntegerLiteral, FloatingLiteral, CharacterLiteral, CXXBoolLiteralExpr,
17246          CXXNullPtrLiteralExpr, FixedPointLiteral, ImaginaryLiteral>(E))
17247    return false;
17248
17249  // These have been substituted from template parameters
17250  // and appear as literals in the static assert error.
17251  if (isa<SubstNonTypeTemplateParmExpr>(E))
17252    return false;
17253
17254  // -5 is also simple to understand.
17255  if (const auto *UnaryOp = dyn_cast<UnaryOperator>(E))
17256    return UsefulToPrintExpr(UnaryOp->getSubExpr());
17257
17258  // Only print nested arithmetic operators.
17259  if (const auto *BO = dyn_cast<BinaryOperator>(E))
17260    return (BO->isShiftOp() || BO->isAdditiveOp() || BO->isMultiplicativeOp() ||
17261            BO->isBitwiseOp());
17262
17263  return true;
17264}
17265
17266/// Try to print more useful information about a failed static_assert
17267/// with expression \E
17268void Sema::DiagnoseStaticAssertDetails(const Expr *E) {
17269  if (const auto *Op = dyn_cast<BinaryOperator>(E);
17270      Op && Op->getOpcode() != BO_LOr) {
17271    const Expr *LHS = Op->getLHS()->IgnoreParenImpCasts();
17272    const Expr *RHS = Op->getRHS()->IgnoreParenImpCasts();
17273
17274    // Ignore comparisons of boolean expressions with a boolean literal.
17275    if ((isa<CXXBoolLiteralExpr>(LHS) && RHS->getType()->isBooleanType()) ||
17276        (isa<CXXBoolLiteralExpr>(RHS) && LHS->getType()->isBooleanType()))
17277      return;
17278
17279    // Don't print obvious expressions.
17280    if (!UsefulToPrintExpr(LHS) && !UsefulToPrintExpr(RHS))
17281      return;
17282
17283    struct {
17284      const clang::Expr *Cond;
17285      Expr::EvalResult Result;
17286      SmallString<12> ValueString;
17287      bool Print;
17288    } DiagSide[2] = {{LHS, Expr::EvalResult(), {}, false},
17289                     {RHS, Expr::EvalResult(), {}, false}};
17290    for (unsigned I = 0; I < 2; I++) {
17291      const Expr *Side = DiagSide[I].Cond;
17292
17293      Side->EvaluateAsRValue(DiagSide[I].Result, Context, true);
17294
17295      DiagSide[I].Print =
17296          ConvertAPValueToString(DiagSide[I].Result.Val, Side->getType(),
17297                                 DiagSide[I].ValueString, Context);
17298    }
17299    if (DiagSide[0].Print && DiagSide[1].Print) {
17300      Diag(Op->getExprLoc(), diag::note_expr_evaluates_to)
17301          << DiagSide[0].ValueString << Op->getOpcodeStr()
17302          << DiagSide[1].ValueString << Op->getSourceRange();
17303    }
17304  }
17305}
17306
17307bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message,
17308                                               std::string &Result,
17309                                               ASTContext &Ctx,
17310                                               bool ErrorOnInvalidMessage) {
17311  assert(Message);
17312  assert(!Message->isTypeDependent() && !Message->isValueDependent() &&
17313         "can't evaluate a dependant static assert message");
17314
17315  if (const auto *SL = dyn_cast<StringLiteral>(Message)) {
17316    assert(SL->isUnevaluated() && "expected an unevaluated string");
17317    Result.assign(SL->getString().begin(), SL->getString().end());
17318    return true;
17319  }
17320
17321  SourceLocation Loc = Message->getBeginLoc();
17322  QualType T = Message->getType().getNonReferenceType();
17323  auto *RD = T->getAsCXXRecordDecl();
17324  if (!RD) {
17325    Diag(Loc, diag::err_static_assert_invalid_message);
17326    return false;
17327  }
17328
17329  auto FindMember = [&](StringRef Member, bool &Empty,
17330                        bool Diag = false) -> std::optional<LookupResult> {
17331    DeclarationName DN = PP.getIdentifierInfo(Member);
17332    LookupResult MemberLookup(*this, DN, Loc, Sema::LookupMemberName);
17333    LookupQualifiedName(MemberLookup, RD);
17334    Empty = MemberLookup.empty();
17335    OverloadCandidateSet Candidates(MemberLookup.getNameLoc(),
17336                                    OverloadCandidateSet::CSK_Normal);
17337    if (MemberLookup.empty())
17338      return std::nullopt;
17339    return std::move(MemberLookup);
17340  };
17341
17342  bool SizeNotFound, DataNotFound;
17343  std::optional<LookupResult> SizeMember = FindMember("size", SizeNotFound);
17344  std::optional<LookupResult> DataMember = FindMember("data", DataNotFound);
17345  if (SizeNotFound || DataNotFound) {
17346    Diag(Loc, diag::err_static_assert_missing_member_function)
17347        << ((SizeNotFound && DataNotFound) ? 2
17348            : SizeNotFound                 ? 0
17349                                           : 1);
17350    return false;
17351  }
17352
17353  if (!SizeMember || !DataMember) {
17354    if (!SizeMember)
17355      FindMember("size", SizeNotFound, /*Diag=*/true);
17356    if (!DataMember)
17357      FindMember("data", DataNotFound, /*Diag=*/true);
17358    return false;
17359  }
17360
17361  auto BuildExpr = [&](LookupResult &LR) {
17362    ExprResult Res = BuildMemberReferenceExpr(
17363        Message, Message->getType(), Message->getBeginLoc(), false,
17364        CXXScopeSpec(), SourceLocation(), nullptr, LR, nullptr, nullptr);
17365    if (Res.isInvalid())
17366      return ExprError();
17367    Res = BuildCallExpr(nullptr, Res.get(), Loc, std::nullopt, Loc, nullptr,
17368                        false, true);
17369    if (Res.isInvalid())
17370      return ExprError();
17371    if (Res.get()->isTypeDependent() || Res.get()->isValueDependent())
17372      return ExprError();
17373    return TemporaryMaterializationConversion(Res.get());
17374  };
17375
17376  ExprResult SizeE = BuildExpr(*SizeMember);
17377  ExprResult DataE = BuildExpr(*DataMember);
17378
17379  QualType SizeT = Context.getSizeType();
17380  QualType ConstCharPtr =
17381      Context.getPointerType(Context.getConstType(Context.CharTy));
17382
17383  ExprResult EvaluatedSize =
17384      SizeE.isInvalid() ? ExprError()
17385                        : BuildConvertedConstantExpression(
17386                              SizeE.get(), SizeT, CCEK_StaticAssertMessageSize);
17387  if (EvaluatedSize.isInvalid()) {
17388    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;
17389    return false;
17390  }
17391
17392  ExprResult EvaluatedData =
17393      DataE.isInvalid()
17394          ? ExprError()
17395          : BuildConvertedConstantExpression(DataE.get(), ConstCharPtr,
17396                                             CCEK_StaticAssertMessageData);
17397  if (EvaluatedData.isInvalid()) {
17398    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;
17399    return false;
17400  }
17401
17402  if (!ErrorOnInvalidMessage &&
17403      Diags.isIgnored(diag::warn_static_assert_message_constexpr, Loc))
17404    return true;
17405
17406  Expr::EvalResult Status;
17407  SmallVector<PartialDiagnosticAt, 8> Notes;
17408  Status.Diag = &Notes;
17409  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(),
17410                                          EvaluatedData.get(), Ctx, Status) ||
17411      !Notes.empty()) {
17412    Diag(Message->getBeginLoc(),
17413         ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr
17414                               : diag::warn_static_assert_message_constexpr);
17415    for (const auto &Note : Notes)
17416      Diag(Note.first, Note.second);
17417    return !ErrorOnInvalidMessage;
17418  }
17419  return true;
17420}
17421
17422Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
17423                                         Expr *AssertExpr, Expr *AssertMessage,
17424                                         SourceLocation RParenLoc,
17425                                         bool Failed) {
17426  assert(AssertExpr != nullptr && "Expected non-null condition");
17427  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
17428      (!AssertMessage || (!AssertMessage->isTypeDependent() &&
17429                          !AssertMessage->isValueDependent())) &&
17430      !Failed) {
17431    // In a static_assert-declaration, the constant-expression shall be a
17432    // constant expression that can be contextually converted to bool.
17433    ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
17434    if (Converted.isInvalid())
17435      Failed = true;
17436
17437    ExprResult FullAssertExpr =
17438        ActOnFinishFullExpr(Converted.get(), StaticAssertLoc,
17439                            /*DiscardedValue*/ false,
17440                            /*IsConstexpr*/ true);
17441    if (FullAssertExpr.isInvalid())
17442      Failed = true;
17443    else
17444      AssertExpr = FullAssertExpr.get();
17445
17446    llvm::APSInt Cond;
17447    Expr *BaseExpr = AssertExpr;
17448    AllowFoldKind FoldKind = NoFold;
17449
17450    if (!getLangOpts().CPlusPlus) {
17451      // In C mode, allow folding as an extension for better compatibility with
17452      // C++ in terms of expressions like static_assert("test") or
17453      // static_assert(nullptr).
17454      FoldKind = AllowFold;
17455    }
17456
17457    if (!Failed && VerifyIntegerConstantExpression(
17458                       BaseExpr, &Cond,
17459                       diag::err_static_assert_expression_is_not_constant,
17460                       FoldKind).isInvalid())
17461      Failed = true;
17462
17463    // If the static_assert passes, only verify that
17464    // the message is grammatically valid without evaluating it.
17465    if (!Failed && AssertMessage && Cond.getBoolValue()) {
17466      std::string Str;
17467      EvaluateStaticAssertMessageAsString(AssertMessage, Str, Context,
17468                                          /*ErrorOnInvalidMessage=*/false);
17469    }
17470
17471    // CWG2518
17472    // [dcl.pre]/p10  If [...] the expression is evaluated in the context of a
17473    // template definition, the declaration has no effect.
17474    bool InTemplateDefinition =
17475        getLangOpts().CPlusPlus && CurContext->isDependentContext();
17476
17477    if (!Failed && !Cond && !InTemplateDefinition) {
17478      SmallString<256> MsgBuffer;
17479      llvm::raw_svector_ostream Msg(MsgBuffer);
17480      bool HasMessage = AssertMessage;
17481      if (AssertMessage) {
17482        std::string Str;
17483        HasMessage =
17484            EvaluateStaticAssertMessageAsString(
17485                AssertMessage, Str, Context, /*ErrorOnInvalidMessage=*/true) ||
17486            !Str.empty();
17487        Msg << Str;
17488      }
17489      Expr *InnerCond = nullptr;
17490      std::string InnerCondDescription;
17491      std::tie(InnerCond, InnerCondDescription) =
17492        findFailedBooleanCondition(Converted.get());
17493      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {
17494        // Drill down into concept specialization expressions to see why they
17495        // weren't satisfied.
17496        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed)
17497            << !HasMessage << Msg.str() << AssertExpr->getSourceRange();
17498        ConstraintSatisfaction Satisfaction;
17499        if (!CheckConstraintSatisfaction(InnerCond, Satisfaction))
17500          DiagnoseUnsatisfiedConstraint(Satisfaction);
17501      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond)
17502                           && !isa<IntegerLiteral>(InnerCond)) {
17503        Diag(InnerCond->getBeginLoc(),
17504             diag::err_static_assert_requirement_failed)
17505            << InnerCondDescription << !HasMessage << Msg.str()
17506            << InnerCond->getSourceRange();
17507        DiagnoseStaticAssertDetails(InnerCond);
17508      } else {
17509        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed)
17510            << !HasMessage << Msg.str() << AssertExpr->getSourceRange();
17511        PrintContextStack();
17512      }
17513      Failed = true;
17514    }
17515  } else {
17516    ExprResult FullAssertExpr = ActOnFinishFullExpr(AssertExpr, StaticAssertLoc,
17517                                                    /*DiscardedValue*/false,
17518                                                    /*IsConstexpr*/true);
17519    if (FullAssertExpr.isInvalid())
17520      Failed = true;
17521    else
17522      AssertExpr = FullAssertExpr.get();
17523  }
17524
17525  Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
17526                                        AssertExpr, AssertMessage, RParenLoc,
17527                                        Failed);
17528
17529  CurContext->addDecl(Decl);
17530  return Decl;
17531}
17532
17533/// Perform semantic analysis of the given friend type declaration.
17534///
17535/// \returns A friend declaration that.
17536FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
17537                                      SourceLocation FriendLoc,
17538                                      TypeSourceInfo *TSInfo) {
17539  assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
17540
17541  QualType T = TSInfo->getType();
17542  SourceRange TypeRange = TSInfo->getTypeLoc().getSourceRange();
17543
17544  // C++03 [class.friend]p2:
17545  //   An elaborated-type-specifier shall be used in a friend declaration
17546  //   for a class.*
17547  //
17548  //   * The class-key of the elaborated-type-specifier is required.
17549  if (!CodeSynthesisContexts.empty()) {
17550    // Do not complain about the form of friend template types during any kind
17551    // of code synthesis. For template instantiation, we will have complained
17552    // when the template was defined.
17553  } else {
17554    if (!T->isElaboratedTypeSpecifier()) {
17555      // If we evaluated the type to a record type, suggest putting
17556      // a tag in front.
17557      if (const RecordType *RT = T->getAs<RecordType>()) {
17558        RecordDecl *RD = RT->getDecl();
17559
17560        SmallString<16> InsertionText(" ");
17561        InsertionText += RD->getKindName();
17562
17563        Diag(TypeRange.getBegin(),
17564             getLangOpts().CPlusPlus11 ?
17565               diag::warn_cxx98_compat_unelaborated_friend_type :
17566               diag::ext_unelaborated_friend_type)
17567          << (unsigned) RD->getTagKind()
17568          << T
17569          << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc),
17570                                        InsertionText);
17571      } else {
17572        Diag(FriendLoc,
17573             getLangOpts().CPlusPlus11 ?
17574               diag::warn_cxx98_compat_nonclass_type_friend :
17575               diag::ext_nonclass_type_friend)
17576          << T
17577          << TypeRange;
17578      }
17579    } else if (T->getAs<EnumType>()) {
17580      Diag(FriendLoc,
17581           getLangOpts().CPlusPlus11 ?
17582             diag::warn_cxx98_compat_enum_friend :
17583             diag::ext_enum_friend)
17584        << T
17585        << TypeRange;
17586    }
17587
17588    // C++11 [class.friend]p3:
17589    //   A friend declaration that does not declare a function shall have one
17590    //   of the following forms:
17591    //     friend elaborated-type-specifier ;
17592    //     friend simple-type-specifier ;
17593    //     friend typename-specifier ;
17594    if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
17595      Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
17596  }
17597
17598  //   If the type specifier in a friend declaration designates a (possibly
17599  //   cv-qualified) class type, that class is declared as a friend; otherwise,
17600  //   the friend declaration is ignored.
17601  return FriendDecl::Create(Context, CurContext,
17602                            TSInfo->getTypeLoc().getBeginLoc(), TSInfo,
17603                            FriendLoc);
17604}
17605
17606/// Handle a friend tag declaration where the scope specifier was
17607/// templated.
17608DeclResult Sema::ActOnTemplatedFriendTag(
17609    Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc,
17610    CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc,
17611    const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {
17612  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
17613
17614  bool IsMemberSpecialization = false;
17615  bool Invalid = false;
17616
17617  if (TemplateParameterList *TemplateParams =
17618          MatchTemplateParametersToScopeSpecifier(
17619              TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true,
17620              IsMemberSpecialization, Invalid)) {
17621    if (TemplateParams->size() > 0) {
17622      // This is a declaration of a class template.
17623      if (Invalid)
17624        return true;
17625
17626      return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc, SS, Name,
17627                                NameLoc, Attr, TemplateParams, AS_public,
17628                                /*ModulePrivateLoc=*/SourceLocation(),
17629                                FriendLoc, TempParamLists.size() - 1,
17630                                TempParamLists.data()).get();
17631    } else {
17632      // The "template<>" header is extraneous.
17633      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
17634        << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
17635      IsMemberSpecialization = true;
17636    }
17637  }
17638
17639  if (Invalid) return true;
17640
17641  bool isAllExplicitSpecializations = true;
17642  for (unsigned I = TempParamLists.size(); I-- > 0; ) {
17643    if (TempParamLists[I]->size()) {
17644      isAllExplicitSpecializations = false;
17645      break;
17646    }
17647  }
17648
17649  // FIXME: don't ignore attributes.
17650
17651  // If it's explicit specializations all the way down, just forget
17652  // about the template header and build an appropriate non-templated
17653  // friend.  TODO: for source fidelity, remember the headers.
17654  if (isAllExplicitSpecializations) {
17655    if (SS.isEmpty()) {
17656      bool Owned = false;
17657      bool IsDependent = false;
17658      return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc, Attr,
17659                      AS_public,
17660                      /*ModulePrivateLoc=*/SourceLocation(),
17661                      MultiTemplateParamsArg(), Owned, IsDependent,
17662                      /*ScopedEnumKWLoc=*/SourceLocation(),
17663                      /*ScopedEnumUsesClassTag=*/false,
17664                      /*UnderlyingType=*/TypeResult(),
17665                      /*IsTypeSpecifier=*/false,
17666                      /*IsTemplateParamOrArg=*/false, /*OOK=*/OOK_Outside);
17667    }
17668
17669    NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
17670    ElaboratedTypeKeyword Keyword
17671      = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
17672    QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
17673                                   *Name, NameLoc);
17674    if (T.isNull())
17675      return true;
17676
17677    TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
17678    if (isa<DependentNameType>(T)) {
17679      DependentNameTypeLoc TL =
17680          TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
17681      TL.setElaboratedKeywordLoc(TagLoc);
17682      TL.setQualifierLoc(QualifierLoc);
17683      TL.setNameLoc(NameLoc);
17684    } else {
17685      ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
17686      TL.setElaboratedKeywordLoc(TagLoc);
17687      TL.setQualifierLoc(QualifierLoc);
17688      TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
17689    }
17690
17691    FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
17692                                            TSI, FriendLoc, TempParamLists);
17693    Friend->setAccess(AS_public);
17694    CurContext->addDecl(Friend);
17695    return Friend;
17696  }
17697
17698  assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
17699
17700
17701
17702  // Handle the case of a templated-scope friend class.  e.g.
17703  //   template <class T> class A<T>::B;
17704  // FIXME: we don't support these right now.
17705  Diag(NameLoc, diag::warn_template_qualified_friend_unsupported)
17706    << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);
17707  ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
17708  QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
17709  TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
17710  DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
17711  TL.setElaboratedKeywordLoc(TagLoc);
17712  TL.setQualifierLoc(SS.getWithLocInContext(Context));
17713  TL.setNameLoc(NameLoc);
17714
17715  FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
17716                                          TSI, FriendLoc, TempParamLists);
17717  Friend->setAccess(AS_public);
17718  Friend->setUnsupportedFriend(true);
17719  CurContext->addDecl(Friend);
17720  return Friend;
17721}
17722
17723/// Handle a friend type declaration.  This works in tandem with
17724/// ActOnTag.
17725///
17726/// Notes on friend class templates:
17727///
17728/// We generally treat friend class declarations as if they were
17729/// declaring a class.  So, for example, the elaborated type specifier
17730/// in a friend declaration is required to obey the restrictions of a
17731/// class-head (i.e. no typedefs in the scope chain), template
17732/// parameters are required to match up with simple template-ids, &c.
17733/// However, unlike when declaring a template specialization, it's
17734/// okay to refer to a template specialization without an empty
17735/// template parameter declaration, e.g.
17736///   friend class A<T>::B<unsigned>;
17737/// We permit this as a special case; if there are any template
17738/// parameters present at all, require proper matching, i.e.
17739///   template <> template \<class T> friend class A<int>::B;
17740Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
17741                                MultiTemplateParamsArg TempParams) {
17742  SourceLocation Loc = DS.getBeginLoc();
17743
17744  assert(DS.isFriendSpecified());
17745  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
17746
17747  // C++ [class.friend]p3:
17748  // A friend declaration that does not declare a function shall have one of
17749  // the following forms:
17750  //     friend elaborated-type-specifier ;
17751  //     friend simple-type-specifier ;
17752  //     friend typename-specifier ;
17753  //
17754  // Any declaration with a type qualifier does not have that form. (It's
17755  // legal to specify a qualified type as a friend, you just can't write the
17756  // keywords.)
17757  if (DS.getTypeQualifiers()) {
17758    if (DS.getTypeQualifiers() & DeclSpec::TQ_const)
17759      Diag(DS.getConstSpecLoc(), diag::err_friend_decl_spec) << "const";
17760    if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)
17761      Diag(DS.getVolatileSpecLoc(), diag::err_friend_decl_spec) << "volatile";
17762    if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict)
17763      Diag(DS.getRestrictSpecLoc(), diag::err_friend_decl_spec) << "restrict";
17764    if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)
17765      Diag(DS.getAtomicSpecLoc(), diag::err_friend_decl_spec) << "_Atomic";
17766    if (DS.getTypeQualifiers() & DeclSpec::TQ_unaligned)
17767      Diag(DS.getUnalignedSpecLoc(), diag::err_friend_decl_spec) << "__unaligned";
17768  }
17769
17770  // Try to convert the decl specifier to a type.  This works for
17771  // friend templates because ActOnTag never produces a ClassTemplateDecl
17772  // for a TUK_Friend.
17773  Declarator TheDeclarator(DS, ParsedAttributesView::none(),
17774                           DeclaratorContext::Member);
17775  TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator);
17776  QualType T = TSI->getType();
17777  if (TheDeclarator.isInvalidType())
17778    return nullptr;
17779
17780  if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
17781    return nullptr;
17782
17783  // This is definitely an error in C++98.  It's probably meant to
17784  // be forbidden in C++0x, too, but the specification is just
17785  // poorly written.
17786  //
17787  // The problem is with declarations like the following:
17788  //   template <T> friend A<T>::foo;
17789  // where deciding whether a class C is a friend or not now hinges
17790  // on whether there exists an instantiation of A that causes
17791  // 'foo' to equal C.  There are restrictions on class-heads
17792  // (which we declare (by fiat) elaborated friend declarations to
17793  // be) that makes this tractable.
17794  //
17795  // FIXME: handle "template <> friend class A<T>;", which
17796  // is possibly well-formed?  Who even knows?
17797  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
17798    Diag(Loc, diag::err_tagless_friend_type_template)
17799      << DS.getSourceRange();
17800    return nullptr;
17801  }
17802
17803  // C++98 [class.friend]p1: A friend of a class is a function
17804  //   or class that is not a member of the class . . .
17805  // This is fixed in DR77, which just barely didn't make the C++03
17806  // deadline.  It's also a very silly restriction that seriously
17807  // affects inner classes and which nobody else seems to implement;
17808  // thus we never diagnose it, not even in -pedantic.
17809  //
17810  // But note that we could warn about it: it's always useless to
17811  // friend one of your own members (it's not, however, worthless to
17812  // friend a member of an arbitrary specialization of your template).
17813
17814  Decl *D;
17815  if (!TempParams.empty())
17816    D = FriendTemplateDecl::Create(Context, CurContext, Loc,
17817                                   TempParams,
17818                                   TSI,
17819                                   DS.getFriendSpecLoc());
17820  else
17821    D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
17822
17823  if (!D)
17824    return nullptr;
17825
17826  D->setAccess(AS_public);
17827  CurContext->addDecl(D);
17828
17829  return D;
17830}
17831
17832NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
17833                                        MultiTemplateParamsArg TemplateParams) {
17834  const DeclSpec &DS = D.getDeclSpec();
17835
17836  assert(DS.isFriendSpecified());
17837  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
17838
17839  SourceLocation Loc = D.getIdentifierLoc();
17840  TypeSourceInfo *TInfo = GetTypeForDeclarator(D);
17841
17842  // C++ [class.friend]p1
17843  //   A friend of a class is a function or class....
17844  // Note that this sees through typedefs, which is intended.
17845  // It *doesn't* see through dependent types, which is correct
17846  // according to [temp.arg.type]p3:
17847  //   If a declaration acquires a function type through a
17848  //   type dependent on a template-parameter and this causes
17849  //   a declaration that does not use the syntactic form of a
17850  //   function declarator to have a function type, the program
17851  //   is ill-formed.
17852  if (!TInfo->getType()->isFunctionType()) {
17853    Diag(Loc, diag::err_unexpected_friend);
17854
17855    // It might be worthwhile to try to recover by creating an
17856    // appropriate declaration.
17857    return nullptr;
17858  }
17859
17860  // C++ [namespace.memdef]p3
17861  //  - If a friend declaration in a non-local class first declares a
17862  //    class or function, the friend class or function is a member
17863  //    of the innermost enclosing namespace.
17864  //  - The name of the friend is not found by simple name lookup
17865  //    until a matching declaration is provided in that namespace
17866  //    scope (either before or after the class declaration granting
17867  //    friendship).
17868  //  - If a friend function is called, its name may be found by the
17869  //    name lookup that considers functions from namespaces and
17870  //    classes associated with the types of the function arguments.
17871  //  - When looking for a prior declaration of a class or a function
17872  //    declared as a friend, scopes outside the innermost enclosing
17873  //    namespace scope are not considered.
17874
17875  CXXScopeSpec &SS = D.getCXXScopeSpec();
17876  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
17877  assert(NameInfo.getName());
17878
17879  // Check for unexpanded parameter packs.
17880  if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
17881      DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
17882      DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
17883    return nullptr;
17884
17885  // The context we found the declaration in, or in which we should
17886  // create the declaration.
17887  DeclContext *DC;
17888  Scope *DCScope = S;
17889  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
17890                        ForExternalRedeclaration);
17891
17892  bool isTemplateId = D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId;
17893
17894  // There are five cases here.
17895  //   - There's no scope specifier and we're in a local class. Only look
17896  //     for functions declared in the immediately-enclosing block scope.
17897  // We recover from invalid scope qualifiers as if they just weren't there.
17898  FunctionDecl *FunctionContainingLocalClass = nullptr;
17899  if ((SS.isInvalid() || !SS.isSet()) &&
17900      (FunctionContainingLocalClass =
17901           cast<CXXRecordDecl>(CurContext)->isLocalClass())) {
17902    // C++11 [class.friend]p11:
17903    //   If a friend declaration appears in a local class and the name
17904    //   specified is an unqualified name, a prior declaration is
17905    //   looked up without considering scopes that are outside the
17906    //   innermost enclosing non-class scope. For a friend function
17907    //   declaration, if there is no prior declaration, the program is
17908    //   ill-formed.
17909
17910    // Find the innermost enclosing non-class scope. This is the block
17911    // scope containing the local class definition (or for a nested class,
17912    // the outer local class).
17913    DCScope = S->getFnParent();
17914
17915    // Look up the function name in the scope.
17916    Previous.clear(LookupLocalFriendName);
17917    LookupName(Previous, S, /*AllowBuiltinCreation*/false);
17918
17919    if (!Previous.empty()) {
17920      // All possible previous declarations must have the same context:
17921      // either they were declared at block scope or they are members of
17922      // one of the enclosing local classes.
17923      DC = Previous.getRepresentativeDecl()->getDeclContext();
17924    } else {
17925      // This is ill-formed, but provide the context that we would have
17926      // declared the function in, if we were permitted to, for error recovery.
17927      DC = FunctionContainingLocalClass;
17928    }
17929    adjustContextForLocalExternDecl(DC);
17930
17931  //   - There's no scope specifier, in which case we just go to the
17932  //     appropriate scope and look for a function or function template
17933  //     there as appropriate.
17934  } else if (SS.isInvalid() || !SS.isSet()) {
17935    // C++11 [namespace.memdef]p3:
17936    //   If the name in a friend declaration is neither qualified nor
17937    //   a template-id and the declaration is a function or an
17938    //   elaborated-type-specifier, the lookup to determine whether
17939    //   the entity has been previously declared shall not consider
17940    //   any scopes outside the innermost enclosing namespace.
17941
17942    // Find the appropriate context according to the above.
17943    DC = CurContext;
17944
17945    // Skip class contexts.  If someone can cite chapter and verse
17946    // for this behavior, that would be nice --- it's what GCC and
17947    // EDG do, and it seems like a reasonable intent, but the spec
17948    // really only says that checks for unqualified existing
17949    // declarations should stop at the nearest enclosing namespace,
17950    // not that they should only consider the nearest enclosing
17951    // namespace.
17952    while (DC->isRecord())
17953      DC = DC->getParent();
17954
17955    DeclContext *LookupDC = DC->getNonTransparentContext();
17956    while (true) {
17957      LookupQualifiedName(Previous, LookupDC);
17958
17959      if (!Previous.empty()) {
17960        DC = LookupDC;
17961        break;
17962      }
17963
17964      if (isTemplateId) {
17965        if (isa<TranslationUnitDecl>(LookupDC)) break;
17966      } else {
17967        if (LookupDC->isFileContext()) break;
17968      }
17969      LookupDC = LookupDC->getParent();
17970    }
17971
17972    DCScope = getScopeForDeclContext(S, DC);
17973
17974  //   - There's a non-dependent scope specifier, in which case we
17975  //     compute it and do a previous lookup there for a function
17976  //     or function template.
17977  } else if (!SS.getScopeRep()->isDependent()) {
17978    DC = computeDeclContext(SS);
17979    if (!DC) return nullptr;
17980
17981    if (RequireCompleteDeclContext(SS, DC)) return nullptr;
17982
17983    LookupQualifiedName(Previous, DC);
17984
17985    // C++ [class.friend]p1: A friend of a class is a function or
17986    //   class that is not a member of the class . . .
17987    if (DC->Equals(CurContext))
17988      Diag(DS.getFriendSpecLoc(),
17989           getLangOpts().CPlusPlus11 ?
17990             diag::warn_cxx98_compat_friend_is_member :
17991             diag::err_friend_is_member);
17992
17993  //   - There's a scope specifier that does not match any template
17994  //     parameter lists, in which case we use some arbitrary context,
17995  //     create a method or method template, and wait for instantiation.
17996  //   - There's a scope specifier that does match some template
17997  //     parameter lists, which we don't handle right now.
17998  } else {
17999    DC = CurContext;
18000    assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
18001  }
18002
18003  if (!DC->isRecord()) {
18004    int DiagArg = -1;
18005    switch (D.getName().getKind()) {
18006    case UnqualifiedIdKind::IK_ConstructorTemplateId:
18007    case UnqualifiedIdKind::IK_ConstructorName:
18008      DiagArg = 0;
18009      break;
18010    case UnqualifiedIdKind::IK_DestructorName:
18011      DiagArg = 1;
18012      break;
18013    case UnqualifiedIdKind::IK_ConversionFunctionId:
18014      DiagArg = 2;
18015      break;
18016    case UnqualifiedIdKind::IK_DeductionGuideName:
18017      DiagArg = 3;
18018      break;
18019    case UnqualifiedIdKind::IK_Identifier:
18020    case UnqualifiedIdKind::IK_ImplicitSelfParam:
18021    case UnqualifiedIdKind::IK_LiteralOperatorId:
18022    case UnqualifiedIdKind::IK_OperatorFunctionId:
18023    case UnqualifiedIdKind::IK_TemplateId:
18024      break;
18025    }
18026    // This implies that it has to be an operator or function.
18027    if (DiagArg >= 0) {
18028      Diag(Loc, diag::err_introducing_special_friend) << DiagArg;
18029      return nullptr;
18030    }
18031  }
18032
18033  // FIXME: This is an egregious hack to cope with cases where the scope stack
18034  // does not contain the declaration context, i.e., in an out-of-line
18035  // definition of a class.
18036  Scope FakeDCScope(S, Scope::DeclScope, Diags);
18037  if (!DCScope) {
18038    FakeDCScope.setEntity(DC);
18039    DCScope = &FakeDCScope;
18040  }
18041
18042  bool AddToScope = true;
18043  NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
18044                                          TemplateParams, AddToScope);
18045  if (!ND) return nullptr;
18046
18047  assert(ND->getLexicalDeclContext() == CurContext);
18048
18049  // If we performed typo correction, we might have added a scope specifier
18050  // and changed the decl context.
18051  DC = ND->getDeclContext();
18052
18053  // Add the function declaration to the appropriate lookup tables,
18054  // adjusting the redeclarations list as necessary.  We don't
18055  // want to do this yet if the friending class is dependent.
18056  //
18057  // Also update the scope-based lookup if the target context's
18058  // lookup context is in lexical scope.
18059  if (!CurContext->isDependentContext()) {
18060    DC = DC->getRedeclContext();
18061    DC->makeDeclVisibleInContext(ND);
18062    if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
18063      PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
18064  }
18065
18066  FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
18067                                       D.getIdentifierLoc(), ND,
18068                                       DS.getFriendSpecLoc());
18069  FrD->setAccess(AS_public);
18070  CurContext->addDecl(FrD);
18071
18072  if (ND->isInvalidDecl()) {
18073    FrD->setInvalidDecl();
18074  } else {
18075    if (DC->isRecord()) CheckFriendAccess(ND);
18076
18077    FunctionDecl *FD;
18078    if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
18079      FD = FTD->getTemplatedDecl();
18080    else
18081      FD = cast<FunctionDecl>(ND);
18082
18083    // C++ [class.friend]p6:
18084    //   A function may be defined in a friend declaration of a class if and
18085    //   only if the class is a non-local class, and the function name is
18086    //   unqualified.
18087    if (D.isFunctionDefinition()) {
18088      // Qualified friend function definition.
18089      if (SS.isNotEmpty()) {
18090        // FIXME: We should only do this if the scope specifier names the
18091        // innermost enclosing namespace; otherwise the fixit changes the
18092        // meaning of the code.
18093        SemaDiagnosticBuilder DB =
18094            Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
18095
18096        DB << SS.getScopeRep();
18097        if (DC->isFileContext())
18098          DB << FixItHint::CreateRemoval(SS.getRange());
18099
18100        // Friend function defined in a local class.
18101      } else if (FunctionContainingLocalClass) {
18102        Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
18103
18104        // Per [basic.pre]p4, a template-id is not a name. Therefore, if we have
18105        // a template-id, the function name is not unqualified because these is
18106        // no name. While the wording requires some reading in-between the
18107        // lines, GCC, MSVC, and EDG all consider a friend function
18108        // specialization definitions // to be de facto explicit specialization
18109        // and diagnose them as such.
18110      } else if (isTemplateId) {
18111        Diag(NameInfo.getBeginLoc(), diag::err_friend_specialization_def);
18112      }
18113    }
18114
18115    // C++11 [dcl.fct.default]p4: If a friend declaration specifies a
18116    // default argument expression, that declaration shall be a definition
18117    // and shall be the only declaration of the function or function
18118    // template in the translation unit.
18119    if (functionDeclHasDefaultArgument(FD)) {
18120      // We can't look at FD->getPreviousDecl() because it may not have been set
18121      // if we're in a dependent context. If the function is known to be a
18122      // redeclaration, we will have narrowed Previous down to the right decl.
18123      if (D.isRedeclaration()) {
18124        Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
18125        Diag(Previous.getRepresentativeDecl()->getLocation(),
18126             diag::note_previous_declaration);
18127      } else if (!D.isFunctionDefinition())
18128        Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def);
18129    }
18130
18131    // Mark templated-scope function declarations as unsupported.
18132    if (FD->getNumTemplateParameterLists() && SS.isValid()) {
18133      Diag(FD->getLocation(), diag::warn_template_qualified_friend_unsupported)
18134        << SS.getScopeRep() << SS.getRange()
18135        << cast<CXXRecordDecl>(CurContext);
18136      FrD->setUnsupportedFriend(true);
18137    }
18138  }
18139
18140  warnOnReservedIdentifier(ND);
18141
18142  return ND;
18143}
18144
18145void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
18146  AdjustDeclIfTemplate(Dcl);
18147
18148  FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
18149  if (!Fn) {
18150    Diag(DelLoc, diag::err_deleted_non_function);
18151    return;
18152  }
18153
18154  // Deleted function does not have a body.
18155  Fn->setWillHaveBody(false);
18156
18157  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
18158    // Don't consider the implicit declaration we generate for explicit
18159    // specializations. FIXME: Do not generate these implicit declarations.
18160    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization ||
18161         Prev->getPreviousDecl()) &&
18162        !Prev->isDefined()) {
18163      Diag(DelLoc, diag::err_deleted_decl_not_first);
18164      Diag(Prev->getLocation().isInvalid() ? DelLoc : Prev->getLocation(),
18165           Prev->isImplicit() ? diag::note_previous_implicit_declaration
18166                              : diag::note_previous_declaration);
18167      // We can't recover from this; the declaration might have already
18168      // been used.
18169      Fn->setInvalidDecl();
18170      return;
18171    }
18172
18173    // To maintain the invariant that functions are only deleted on their first
18174    // declaration, mark the implicitly-instantiated declaration of the
18175    // explicitly-specialized function as deleted instead of marking the
18176    // instantiated redeclaration.
18177    Fn = Fn->getCanonicalDecl();
18178  }
18179
18180  // dllimport/dllexport cannot be deleted.
18181  if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) {
18182    Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr;
18183    Fn->setInvalidDecl();
18184  }
18185
18186  // C++11 [basic.start.main]p3:
18187  //   A program that defines main as deleted [...] is ill-formed.
18188  if (Fn->isMain())
18189    Diag(DelLoc, diag::err_deleted_main);
18190
18191  // C++11 [dcl.fct.def.delete]p4:
18192  //  A deleted function is implicitly inline.
18193  Fn->setImplicitlyInline();
18194  Fn->setDeletedAsWritten();
18195}
18196
18197void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
18198  if (!Dcl || Dcl->isInvalidDecl())
18199    return;
18200
18201  auto *FD = dyn_cast<FunctionDecl>(Dcl);
18202  if (!FD) {
18203    if (auto *FTD = dyn_cast<FunctionTemplateDecl>(Dcl)) {
18204      if (getDefaultedFunctionKind(FTD->getTemplatedDecl()).isComparison()) {
18205        Diag(DefaultLoc, diag::err_defaulted_comparison_template);
18206        return;
18207      }
18208    }
18209
18210    Diag(DefaultLoc, diag::err_default_special_members)
18211        << getLangOpts().CPlusPlus20;
18212    return;
18213  }
18214
18215  // Reject if this can't possibly be a defaultable function.
18216  DefaultedFunctionKind DefKind = getDefaultedFunctionKind(FD);
18217  if (!DefKind &&
18218      // A dependent function that doesn't locally look defaultable can
18219      // still instantiate to a defaultable function if it's a constructor
18220      // or assignment operator.
18221      (!FD->isDependentContext() ||
18222       (!isa<CXXConstructorDecl>(FD) &&
18223        FD->getDeclName().getCXXOverloadedOperator() != OO_Equal))) {
18224    Diag(DefaultLoc, diag::err_default_special_members)
18225        << getLangOpts().CPlusPlus20;
18226    return;
18227  }
18228
18229  // Issue compatibility warning. We already warned if the operator is
18230  // 'operator<=>' when parsing the '<=>' token.
18231  if (DefKind.isComparison() &&
18232      DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {
18233    Diag(DefaultLoc, getLangOpts().CPlusPlus20
18234                         ? diag::warn_cxx17_compat_defaulted_comparison
18235                         : diag::ext_defaulted_comparison);
18236  }
18237
18238  FD->setDefaulted();
18239  FD->setExplicitlyDefaulted();
18240  FD->setDefaultLoc(DefaultLoc);
18241
18242  // Defer checking functions that are defaulted in a dependent context.
18243  if (FD->isDependentContext())
18244    return;
18245
18246  // Unset that we will have a body for this function. We might not,
18247  // if it turns out to be trivial, and we don't need this marking now
18248  // that we've marked it as defaulted.
18249  FD->setWillHaveBody(false);
18250
18251  if (DefKind.isComparison()) {
18252    // If this comparison's defaulting occurs within the definition of its
18253    // lexical class context, we have to do the checking when complete.
18254    if (auto const *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalDeclContext()))
18255      if (!RD->isCompleteDefinition())
18256        return;
18257  }
18258
18259  // If this member fn was defaulted on its first declaration, we will have
18260  // already performed the checking in CheckCompletedCXXClass. Such a
18261  // declaration doesn't trigger an implicit definition.
18262  if (isa<CXXMethodDecl>(FD)) {
18263    const FunctionDecl *Primary = FD;
18264    if (const FunctionDecl *Pattern = FD->getTemplateInstantiationPattern())
18265      // Ask the template instantiation pattern that actually had the
18266      // '= default' on it.
18267      Primary = Pattern;
18268    if (Primary->getCanonicalDecl()->isDefaulted())
18269      return;
18270  }
18271
18272  if (DefKind.isComparison()) {
18273    if (CheckExplicitlyDefaultedComparison(nullptr, FD, DefKind.asComparison()))
18274      FD->setInvalidDecl();
18275    else
18276      DefineDefaultedComparison(DefaultLoc, FD, DefKind.asComparison());
18277  } else {
18278    auto *MD = cast<CXXMethodDecl>(FD);
18279
18280    if (CheckExplicitlyDefaultedSpecialMember(MD, DefKind.asSpecialMember(),
18281                                              DefaultLoc))
18282      MD->setInvalidDecl();
18283    else
18284      DefineDefaultedFunction(*this, MD, DefaultLoc);
18285  }
18286}
18287
18288static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
18289  for (Stmt *SubStmt : S->children()) {
18290    if (!SubStmt)
18291      continue;
18292    if (isa<ReturnStmt>(SubStmt))
18293      Self.Diag(SubStmt->getBeginLoc(),
18294                diag::err_return_in_constructor_handler);
18295    if (!isa<Expr>(SubStmt))
18296      SearchForReturnInStmt(Self, SubStmt);
18297  }
18298}
18299
18300void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
18301  for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
18302    CXXCatchStmt *Handler = TryBlock->getHandler(I);
18303    SearchForReturnInStmt(*this, Handler);
18304  }
18305}
18306
18307void Sema::SetFunctionBodyKind(Decl *D, SourceLocation Loc,
18308                               FnBodyKind BodyKind) {
18309  switch (BodyKind) {
18310  case FnBodyKind::Delete:
18311    SetDeclDeleted(D, Loc);
18312    break;
18313  case FnBodyKind::Default:
18314    SetDeclDefaulted(D, Loc);
18315    break;
18316  case FnBodyKind::Other:
18317    llvm_unreachable(
18318        "Parsed function body should be '= delete;' or '= default;'");
18319  }
18320}
18321
18322bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
18323                                             const CXXMethodDecl *Old) {
18324  const auto *NewFT = New->getType()->castAs<FunctionProtoType>();
18325  const auto *OldFT = Old->getType()->castAs<FunctionProtoType>();
18326
18327  if (OldFT->hasExtParameterInfos()) {
18328    for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)
18329      // A parameter of the overriding method should be annotated with noescape
18330      // if the corresponding parameter of the overridden method is annotated.
18331      if (OldFT->getExtParameterInfo(I).isNoEscape() &&
18332          !NewFT->getExtParameterInfo(I).isNoEscape()) {
18333        Diag(New->getParamDecl(I)->getLocation(),
18334             diag::warn_overriding_method_missing_noescape);
18335        Diag(Old->getParamDecl(I)->getLocation(),
18336             diag::note_overridden_marked_noescape);
18337      }
18338  }
18339
18340  // SME attributes must match when overriding a function declaration.
18341  if (IsInvalidSMECallConversion(Old->getType(), New->getType())) {
18342    Diag(New->getLocation(), diag::err_conflicting_overriding_attributes)
18343        << New << New->getType() << Old->getType();
18344    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
18345    return true;
18346  }
18347
18348  // Virtual overrides must have the same code_seg.
18349  const auto *OldCSA = Old->getAttr<CodeSegAttr>();
18350  const auto *NewCSA = New->getAttr<CodeSegAttr>();
18351  if ((NewCSA || OldCSA) &&
18352      (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) {
18353    Diag(New->getLocation(), diag::err_mismatched_code_seg_override);
18354    Diag(Old->getLocation(), diag::note_previous_declaration);
18355    return true;
18356  }
18357
18358  CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
18359
18360  // If the calling conventions match, everything is fine
18361  if (NewCC == OldCC)
18362    return false;
18363
18364  // If the calling conventions mismatch because the new function is static,
18365  // suppress the calling convention mismatch error; the error about static
18366  // function override (err_static_overrides_virtual from
18367  // Sema::CheckFunctionDeclaration) is more clear.
18368  if (New->getStorageClass() == SC_Static)
18369    return false;
18370
18371  Diag(New->getLocation(),
18372       diag::err_conflicting_overriding_cc_attributes)
18373    << New->getDeclName() << New->getType() << Old->getType();
18374  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
18375  return true;
18376}
18377
18378bool Sema::CheckExplicitObjectOverride(CXXMethodDecl *New,
18379                                       const CXXMethodDecl *Old) {
18380  // CWG2553
18381  // A virtual function shall not be an explicit object member function.
18382  if (!New->isExplicitObjectMemberFunction())
18383    return true;
18384  Diag(New->getParamDecl(0)->getBeginLoc(),
18385       diag::err_explicit_object_parameter_nonmember)
18386      << New->getSourceRange() << /*virtual*/ 1 << /*IsLambda*/ false;
18387  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
18388  New->setInvalidDecl();
18389  return false;
18390}
18391
18392bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
18393                                             const CXXMethodDecl *Old) {
18394  QualType NewTy = New->getType()->castAs<FunctionType>()->getReturnType();
18395  QualType OldTy = Old->getType()->castAs<FunctionType>()->getReturnType();
18396
18397  if (Context.hasSameType(NewTy, OldTy) ||
18398      NewTy->isDependentType() || OldTy->isDependentType())
18399    return false;
18400
18401  // Check if the return types are covariant
18402  QualType NewClassTy, OldClassTy;
18403
18404  /// Both types must be pointers or references to classes.
18405  if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
18406    if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
18407      NewClassTy = NewPT->getPointeeType();
18408      OldClassTy = OldPT->getPointeeType();
18409    }
18410  } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
18411    if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
18412      if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
18413        NewClassTy = NewRT->getPointeeType();
18414        OldClassTy = OldRT->getPointeeType();
18415      }
18416    }
18417  }
18418
18419  // The return types aren't either both pointers or references to a class type.
18420  if (NewClassTy.isNull()) {
18421    Diag(New->getLocation(),
18422         diag::err_different_return_type_for_overriding_virtual_function)
18423        << New->getDeclName() << NewTy << OldTy
18424        << New->getReturnTypeSourceRange();
18425    Diag(Old->getLocation(), diag::note_overridden_virtual_function)
18426        << Old->getReturnTypeSourceRange();
18427
18428    return true;
18429  }
18430
18431  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
18432    // C++14 [class.virtual]p8:
18433    //   If the class type in the covariant return type of D::f differs from
18434    //   that of B::f, the class type in the return type of D::f shall be
18435    //   complete at the point of declaration of D::f or shall be the class
18436    //   type D.
18437    if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
18438      if (!RT->isBeingDefined() &&
18439          RequireCompleteType(New->getLocation(), NewClassTy,
18440                              diag::err_covariant_return_incomplete,
18441                              New->getDeclName()))
18442        return true;
18443    }
18444
18445    // Check if the new class derives from the old class.
18446    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {
18447      Diag(New->getLocation(), diag::err_covariant_return_not_derived)
18448          << New->getDeclName() << NewTy << OldTy
18449          << New->getReturnTypeSourceRange();
18450      Diag(Old->getLocation(), diag::note_overridden_virtual_function)
18451          << Old->getReturnTypeSourceRange();
18452      return true;
18453    }
18454
18455    // Check if we the conversion from derived to base is valid.
18456    if (CheckDerivedToBaseConversion(
18457            NewClassTy, OldClassTy,
18458            diag::err_covariant_return_inaccessible_base,
18459            diag::err_covariant_return_ambiguous_derived_to_base_conv,
18460            New->getLocation(), New->getReturnTypeSourceRange(),
18461            New->getDeclName(), nullptr)) {
18462      // FIXME: this note won't trigger for delayed access control
18463      // diagnostics, and it's impossible to get an undelayed error
18464      // here from access control during the original parse because
18465      // the ParsingDeclSpec/ParsingDeclarator are still in scope.
18466      Diag(Old->getLocation(), diag::note_overridden_virtual_function)
18467          << Old->getReturnTypeSourceRange();
18468      return true;
18469    }
18470  }
18471
18472  // The qualifiers of the return types must be the same.
18473  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
18474    Diag(New->getLocation(),
18475         diag::err_covariant_return_type_different_qualifications)
18476        << New->getDeclName() << NewTy << OldTy
18477        << New->getReturnTypeSourceRange();
18478    Diag(Old->getLocation(), diag::note_overridden_virtual_function)
18479        << Old->getReturnTypeSourceRange();
18480    return true;
18481  }
18482
18483
18484  // The new class type must have the same or less qualifiers as the old type.
18485  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
18486    Diag(New->getLocation(),
18487         diag::err_covariant_return_type_class_type_more_qualified)
18488        << New->getDeclName() << NewTy << OldTy
18489        << New->getReturnTypeSourceRange();
18490    Diag(Old->getLocation(), diag::note_overridden_virtual_function)
18491        << Old->getReturnTypeSourceRange();
18492    return true;
18493  }
18494
18495  return false;
18496}
18497
18498/// Mark the given method pure.
18499///
18500/// \param Method the method to be marked pure.
18501///
18502/// \param InitRange the source range that covers the "0" initializer.
18503bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
18504  SourceLocation EndLoc = InitRange.getEnd();
18505  if (EndLoc.isValid())
18506    Method->setRangeEnd(EndLoc);
18507
18508  if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
18509    Method->setIsPureVirtual();
18510    return false;
18511  }
18512
18513  if (!Method->isInvalidDecl())
18514    Diag(Method->getLocation(), diag::err_non_virtual_pure)
18515      << Method->getDeclName() << InitRange;
18516  return true;
18517}
18518
18519void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {
18520  if (D->getFriendObjectKind())
18521    Diag(D->getLocation(), diag::err_pure_friend);
18522  else if (auto *M = dyn_cast<CXXMethodDecl>(D))
18523    CheckPureMethod(M, ZeroLoc);
18524  else
18525    Diag(D->getLocation(), diag::err_illegal_initializer);
18526}
18527
18528/// Determine whether the given declaration is a global variable or
18529/// static data member.
18530static bool isNonlocalVariable(const Decl *D) {
18531  if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D))
18532    return Var->hasGlobalStorage();
18533
18534  return false;
18535}
18536
18537/// Invoked when we are about to parse an initializer for the declaration
18538/// 'Dcl'.
18539///
18540/// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
18541/// static data member of class X, names should be looked up in the scope of
18542/// class X. If the declaration had a scope specifier, a scope will have
18543/// been created and passed in for this purpose. Otherwise, S will be null.
18544void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
18545  // If there is no declaration, there was an error parsing it.
18546  if (!D || D->isInvalidDecl())
18547    return;
18548
18549  // We will always have a nested name specifier here, but this declaration
18550  // might not be out of line if the specifier names the current namespace:
18551  //   extern int n;
18552  //   int ::n = 0;
18553  if (S && D->isOutOfLine())
18554    EnterDeclaratorContext(S, D->getDeclContext());
18555
18556  // If we are parsing the initializer for a static data member, push a
18557  // new expression evaluation context that is associated with this static
18558  // data member.
18559  if (isNonlocalVariable(D))
18560    PushExpressionEvaluationContext(
18561        ExpressionEvaluationContext::PotentiallyEvaluated, D);
18562}
18563
18564/// Invoked after we are finished parsing an initializer for the declaration D.
18565void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
18566  // If there is no declaration, there was an error parsing it.
18567  if (!D || D->isInvalidDecl())
18568    return;
18569
18570  if (isNonlocalVariable(D))
18571    PopExpressionEvaluationContext();
18572
18573  if (S && D->isOutOfLine())
18574    ExitDeclaratorContext(S);
18575}
18576
18577/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
18578/// C++ if/switch/while/for statement.
18579/// e.g: "if (int x = f()) {...}"
18580DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
18581  // C++ 6.4p2:
18582  // The declarator shall not specify a function or an array.
18583  // The type-specifier-seq shall not contain typedef and shall not declare a
18584  // new class or enumeration.
18585  assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
18586         "Parser allowed 'typedef' as storage class of condition decl.");
18587
18588  Decl *Dcl = ActOnDeclarator(S, D);
18589  if (!Dcl)
18590    return true;
18591
18592  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
18593    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
18594      << D.getSourceRange();
18595    return true;
18596  }
18597
18598  return Dcl;
18599}
18600
18601void Sema::LoadExternalVTableUses() {
18602  if (!ExternalSource)
18603    return;
18604
18605  SmallVector<ExternalVTableUse, 4> VTables;
18606  ExternalSource->ReadUsedVTables(VTables);
18607  SmallVector<VTableUse, 4> NewUses;
18608  for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
18609    llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
18610      = VTablesUsed.find(VTables[I].Record);
18611    // Even if a definition wasn't required before, it may be required now.
18612    if (Pos != VTablesUsed.end()) {
18613      if (!Pos->second && VTables[I].DefinitionRequired)
18614        Pos->second = true;
18615      continue;
18616    }
18617
18618    VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
18619    NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
18620  }
18621
18622  VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
18623}
18624
18625void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
18626                          bool DefinitionRequired) {
18627  // Ignore any vtable uses in unevaluated operands or for classes that do
18628  // not have a vtable.
18629  if (!Class->isDynamicClass() || Class->isDependentContext() ||
18630      CurContext->isDependentContext() || isUnevaluatedContext())
18631    return;
18632  // Do not mark as used if compiling for the device outside of the target
18633  // region.
18634  if (TUKind != TU_Prefix && LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice &&
18635      !isInOpenMPDeclareTargetContext() &&
18636      !isInOpenMPTargetExecutionDirective()) {
18637    if (!DefinitionRequired)
18638      MarkVirtualMembersReferenced(Loc, Class);
18639    return;
18640  }
18641
18642  // Try to insert this class into the map.
18643  LoadExternalVTableUses();
18644  Class = Class->getCanonicalDecl();
18645  std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
18646    Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
18647  if (!Pos.second) {
18648    // If we already had an entry, check to see if we are promoting this vtable
18649    // to require a definition. If so, we need to reappend to the VTableUses
18650    // list, since we may have already processed the first entry.
18651    if (DefinitionRequired && !Pos.first->second) {
18652      Pos.first->second = true;
18653    } else {
18654      // Otherwise, we can early exit.
18655      return;
18656    }
18657  } else {
18658    // The Microsoft ABI requires that we perform the destructor body
18659    // checks (i.e. operator delete() lookup) when the vtable is marked used, as
18660    // the deleting destructor is emitted with the vtable, not with the
18661    // destructor definition as in the Itanium ABI.
18662    if (Context.getTargetInfo().getCXXABI().isMicrosoft()) {
18663      CXXDestructorDecl *DD = Class->getDestructor();
18664      if (DD && DD->isVirtual() && !DD->isDeleted()) {
18665        if (Class->hasUserDeclaredDestructor() && !DD->isDefined()) {
18666          // If this is an out-of-line declaration, marking it referenced will
18667          // not do anything. Manually call CheckDestructor to look up operator
18668          // delete().
18669          ContextRAII SavedContext(*this, DD);
18670          CheckDestructor(DD);
18671        } else {
18672          MarkFunctionReferenced(Loc, Class->getDestructor());
18673        }
18674      }
18675    }
18676  }
18677
18678  // Local classes need to have their virtual members marked
18679  // immediately. For all other classes, we mark their virtual members
18680  // at the end of the translation unit.
18681  if (Class->isLocalClass())
18682    MarkVirtualMembersReferenced(Loc, Class->getDefinition());
18683  else
18684    VTableUses.push_back(std::make_pair(Class, Loc));
18685}
18686
18687bool Sema::DefineUsedVTables() {
18688  LoadExternalVTableUses();
18689  if (VTableUses.empty())
18690    return false;
18691
18692  // Note: The VTableUses vector could grow as a result of marking
18693  // the members of a class as "used", so we check the size each
18694  // time through the loop and prefer indices (which are stable) to
18695  // iterators (which are not).
18696  bool DefinedAnything = false;
18697  for (unsigned I = 0; I != VTableUses.size(); ++I) {
18698    CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
18699    if (!Class)
18700      continue;
18701    TemplateSpecializationKind ClassTSK =
18702        Class->getTemplateSpecializationKind();
18703
18704    SourceLocation Loc = VTableUses[I].second;
18705
18706    bool DefineVTable = true;
18707
18708    // If this class has a key function, but that key function is
18709    // defined in another translation unit, we don't need to emit the
18710    // vtable even though we're using it.
18711    const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
18712    if (KeyFunction && !KeyFunction->hasBody()) {
18713      // The key function is in another translation unit.
18714      DefineVTable = false;
18715      TemplateSpecializationKind TSK =
18716          KeyFunction->getTemplateSpecializationKind();
18717      assert(TSK != TSK_ExplicitInstantiationDefinition &&
18718             TSK != TSK_ImplicitInstantiation &&
18719             "Instantiations don't have key functions");
18720      (void)TSK;
18721    } else if (!KeyFunction) {
18722      // If we have a class with no key function that is the subject
18723      // of an explicit instantiation declaration, suppress the
18724      // vtable; it will live with the explicit instantiation
18725      // definition.
18726      bool IsExplicitInstantiationDeclaration =
18727          ClassTSK == TSK_ExplicitInstantiationDeclaration;
18728      for (auto *R : Class->redecls()) {
18729        TemplateSpecializationKind TSK
18730          = cast<CXXRecordDecl>(R)->getTemplateSpecializationKind();
18731        if (TSK == TSK_ExplicitInstantiationDeclaration)
18732          IsExplicitInstantiationDeclaration = true;
18733        else if (TSK == TSK_ExplicitInstantiationDefinition) {
18734          IsExplicitInstantiationDeclaration = false;
18735          break;
18736        }
18737      }
18738
18739      if (IsExplicitInstantiationDeclaration)
18740        DefineVTable = false;
18741    }
18742
18743    // The exception specifications for all virtual members may be needed even
18744    // if we are not providing an authoritative form of the vtable in this TU.
18745    // We may choose to emit it available_externally anyway.
18746    if (!DefineVTable) {
18747      MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
18748      continue;
18749    }
18750
18751    // Mark all of the virtual members of this class as referenced, so
18752    // that we can build a vtable. Then, tell the AST consumer that a
18753    // vtable for this class is required.
18754    DefinedAnything = true;
18755    MarkVirtualMembersReferenced(Loc, Class);
18756    CXXRecordDecl *Canonical = Class->getCanonicalDecl();
18757    if (VTablesUsed[Canonical])
18758      Consumer.HandleVTable(Class);
18759
18760    // Warn if we're emitting a weak vtable. The vtable will be weak if there is
18761    // no key function or the key function is inlined. Don't warn in C++ ABIs
18762    // that lack key functions, since the user won't be able to make one.
18763    if (Context.getTargetInfo().getCXXABI().hasKeyFunctions() &&
18764        Class->isExternallyVisible() && ClassTSK != TSK_ImplicitInstantiation &&
18765        ClassTSK != TSK_ExplicitInstantiationDefinition) {
18766      const FunctionDecl *KeyFunctionDef = nullptr;
18767      if (!KeyFunction || (KeyFunction->hasBody(KeyFunctionDef) &&
18768                           KeyFunctionDef->isInlined()))
18769        Diag(Class->getLocation(), diag::warn_weak_vtable) << Class;
18770    }
18771  }
18772  VTableUses.clear();
18773
18774  return DefinedAnything;
18775}
18776
18777void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
18778                                                 const CXXRecordDecl *RD) {
18779  for (const auto *I : RD->methods())
18780    if (I->isVirtual() && !I->isPureVirtual())
18781      ResolveExceptionSpec(Loc, I->getType()->castAs<FunctionProtoType>());
18782}
18783
18784void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
18785                                        const CXXRecordDecl *RD,
18786                                        bool ConstexprOnly) {
18787  // Mark all functions which will appear in RD's vtable as used.
18788  CXXFinalOverriderMap FinalOverriders;
18789  RD->getFinalOverriders(FinalOverriders);
18790  for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
18791                                            E = FinalOverriders.end();
18792       I != E; ++I) {
18793    for (OverridingMethods::const_iterator OI = I->second.begin(),
18794                                           OE = I->second.end();
18795         OI != OE; ++OI) {
18796      assert(OI->second.size() > 0 && "no final overrider");
18797      CXXMethodDecl *Overrider = OI->second.front().Method;
18798
18799      // C++ [basic.def.odr]p2:
18800      //   [...] A virtual member function is used if it is not pure. [...]
18801      if (!Overrider->isPureVirtual() &&
18802          (!ConstexprOnly || Overrider->isConstexpr()))
18803        MarkFunctionReferenced(Loc, Overrider);
18804    }
18805  }
18806
18807  // Only classes that have virtual bases need a VTT.
18808  if (RD->getNumVBases() == 0)
18809    return;
18810
18811  for (const auto &I : RD->bases()) {
18812    const auto *Base =
18813        cast<CXXRecordDecl>(I.getType()->castAs<RecordType>()->getDecl());
18814    if (Base->getNumVBases() == 0)
18815      continue;
18816    MarkVirtualMembersReferenced(Loc, Base);
18817  }
18818}
18819
18820/// SetIvarInitializers - This routine builds initialization ASTs for the
18821/// Objective-C implementation whose ivars need be initialized.
18822void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
18823  if (!getLangOpts().CPlusPlus)
18824    return;
18825  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
18826    SmallVector<ObjCIvarDecl*, 8> ivars;
18827    CollectIvarsToConstructOrDestruct(OID, ivars);
18828    if (ivars.empty())
18829      return;
18830    SmallVector<CXXCtorInitializer*, 32> AllToInit;
18831    for (unsigned i = 0; i < ivars.size(); i++) {
18832      FieldDecl *Field = ivars[i];
18833      if (Field->isInvalidDecl())
18834        continue;
18835
18836      CXXCtorInitializer *Member;
18837      InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
18838      InitializationKind InitKind =
18839        InitializationKind::CreateDefault(ObjCImplementation->getLocation());
18840
18841      InitializationSequence InitSeq(*this, InitEntity, InitKind, std::nullopt);
18842      ExprResult MemberInit =
18843          InitSeq.Perform(*this, InitEntity, InitKind, std::nullopt);
18844      MemberInit = MaybeCreateExprWithCleanups(MemberInit);
18845      // Note, MemberInit could actually come back empty if no initialization
18846      // is required (e.g., because it would call a trivial default constructor)
18847      if (!MemberInit.get() || MemberInit.isInvalid())
18848        continue;
18849
18850      Member =
18851        new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
18852                                         SourceLocation(),
18853                                         MemberInit.getAs<Expr>(),
18854                                         SourceLocation());
18855      AllToInit.push_back(Member);
18856
18857      // Be sure that the destructor is accessible and is marked as referenced.
18858      if (const RecordType *RecordTy =
18859              Context.getBaseElementType(Field->getType())
18860                  ->getAs<RecordType>()) {
18861        CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
18862        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
18863          MarkFunctionReferenced(Field->getLocation(), Destructor);
18864          CheckDestructorAccess(Field->getLocation(), Destructor,
18865                            PDiag(diag::err_access_dtor_ivar)
18866                              << Context.getBaseElementType(Field->getType()));
18867        }
18868      }
18869    }
18870    ObjCImplementation->setIvarInitializers(Context,
18871                                            AllToInit.data(), AllToInit.size());
18872  }
18873}
18874
18875static
18876void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
18877                           llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Valid,
18878                           llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Invalid,
18879                           llvm::SmallPtrSet<CXXConstructorDecl*, 4> &Current,
18880                           Sema &S) {
18881  if (Ctor->isInvalidDecl())
18882    return;
18883
18884  CXXConstructorDecl *Target = Ctor->getTargetConstructor();
18885
18886  // Target may not be determinable yet, for instance if this is a dependent
18887  // call in an uninstantiated template.
18888  if (Target) {
18889    const FunctionDecl *FNTarget = nullptr;
18890    (void)Target->hasBody(FNTarget);
18891    Target = const_cast<CXXConstructorDecl*>(
18892      cast_or_null<CXXConstructorDecl>(FNTarget));
18893  }
18894
18895  CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
18896                     // Avoid dereferencing a null pointer here.
18897                     *TCanonical = Target? Target->getCanonicalDecl() : nullptr;
18898
18899  if (!Current.insert(Canonical).second)
18900    return;
18901
18902  // We know that beyond here, we aren't chaining into a cycle.
18903  if (!Target || !Target->isDelegatingConstructor() ||
18904      Target->isInvalidDecl() || Valid.count(TCanonical)) {
18905    Valid.insert(Current.begin(), Current.end());
18906    Current.clear();
18907  // We've hit a cycle.
18908  } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
18909             Current.count(TCanonical)) {
18910    // If we haven't diagnosed this cycle yet, do so now.
18911    if (!Invalid.count(TCanonical)) {
18912      S.Diag((*Ctor->init_begin())->getSourceLocation(),
18913             diag::warn_delegating_ctor_cycle)
18914        << Ctor;
18915
18916      // Don't add a note for a function delegating directly to itself.
18917      if (TCanonical != Canonical)
18918        S.Diag(Target->getLocation(), diag::note_it_delegates_to);
18919
18920      CXXConstructorDecl *C = Target;
18921      while (C->getCanonicalDecl() != Canonical) {
18922        const FunctionDecl *FNTarget = nullptr;
18923        (void)C->getTargetConstructor()->hasBody(FNTarget);
18924        assert(FNTarget && "Ctor cycle through bodiless function");
18925
18926        C = const_cast<CXXConstructorDecl*>(
18927          cast<CXXConstructorDecl>(FNTarget));
18928        S.Diag(C->getLocation(), diag::note_which_delegates_to);
18929      }
18930    }
18931
18932    Invalid.insert(Current.begin(), Current.end());
18933    Current.clear();
18934  } else {
18935    DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
18936  }
18937}
18938
18939
18940void Sema::CheckDelegatingCtorCycles() {
18941  llvm::SmallPtrSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
18942
18943  for (DelegatingCtorDeclsType::iterator
18944           I = DelegatingCtorDecls.begin(ExternalSource.get()),
18945           E = DelegatingCtorDecls.end();
18946       I != E; ++I)
18947    DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
18948
18949  for (auto CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
18950    (*CI)->setInvalidDecl();
18951}
18952
18953namespace {
18954  /// AST visitor that finds references to the 'this' expression.
18955  class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
18956    Sema &S;
18957
18958  public:
18959    explicit FindCXXThisExpr(Sema &S) : S(S) { }
18960
18961    bool VisitCXXThisExpr(CXXThisExpr *E) {
18962      S.Diag(E->getLocation(), diag::err_this_static_member_func)
18963        << E->isImplicit();
18964      return false;
18965    }
18966  };
18967}
18968
18969bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
18970  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
18971  if (!TSInfo)
18972    return false;
18973
18974  TypeLoc TL = TSInfo->getTypeLoc();
18975  FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
18976  if (!ProtoTL)
18977    return false;
18978
18979  // C++11 [expr.prim.general]p3:
18980  //   [The expression this] shall not appear before the optional
18981  //   cv-qualifier-seq and it shall not appear within the declaration of a
18982  //   static member function (although its type and value category are defined
18983  //   within a static member function as they are within a non-static member
18984  //   function). [ Note: this is because declaration matching does not occur
18985  //  until the complete declarator is known. - end note ]
18986  const FunctionProtoType *Proto = ProtoTL.getTypePtr();
18987  FindCXXThisExpr Finder(*this);
18988
18989  // If the return type came after the cv-qualifier-seq, check it now.
18990  if (Proto->hasTrailingReturn() &&
18991      !Finder.TraverseTypeLoc(ProtoTL.getReturnLoc()))
18992    return true;
18993
18994  // Check the exception specification.
18995  if (checkThisInStaticMemberFunctionExceptionSpec(Method))
18996    return true;
18997
18998  // Check the trailing requires clause
18999  if (Expr *E = Method->getTrailingRequiresClause())
19000    if (!Finder.TraverseStmt(E))
19001      return true;
19002
19003  return checkThisInStaticMemberFunctionAttributes(Method);
19004}
19005
19006bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
19007  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
19008  if (!TSInfo)
19009    return false;
19010
19011  TypeLoc TL = TSInfo->getTypeLoc();
19012  FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
19013  if (!ProtoTL)
19014    return false;
19015
19016  const FunctionProtoType *Proto = ProtoTL.getTypePtr();
19017  FindCXXThisExpr Finder(*this);
19018
19019  switch (Proto->getExceptionSpecType()) {
19020  case EST_Unparsed:
19021  case EST_Uninstantiated:
19022  case EST_Unevaluated:
19023  case EST_BasicNoexcept:
19024  case EST_NoThrow:
19025  case EST_DynamicNone:
19026  case EST_MSAny:
19027  case EST_None:
19028    break;
19029
19030  case EST_DependentNoexcept:
19031  case EST_NoexceptFalse:
19032  case EST_NoexceptTrue:
19033    if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
19034      return true;
19035    [[fallthrough]];
19036
19037  case EST_Dynamic:
19038    for (const auto &E : Proto->exceptions()) {
19039      if (!Finder.TraverseType(E))
19040        return true;
19041    }
19042    break;
19043  }
19044
19045  return false;
19046}
19047
19048bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
19049  FindCXXThisExpr Finder(*this);
19050
19051  // Check attributes.
19052  for (const auto *A : Method->attrs()) {
19053    // FIXME: This should be emitted by tblgen.
19054    Expr *Arg = nullptr;
19055    ArrayRef<Expr *> Args;
19056    if (const auto *G = dyn_cast<GuardedByAttr>(A))
19057      Arg = G->getArg();
19058    else if (const auto *G = dyn_cast<PtGuardedByAttr>(A))
19059      Arg = G->getArg();
19060    else if (const auto *AA = dyn_cast<AcquiredAfterAttr>(A))
19061      Args = llvm::ArrayRef(AA->args_begin(), AA->args_size());
19062    else if (const auto *AB = dyn_cast<AcquiredBeforeAttr>(A))
19063      Args = llvm::ArrayRef(AB->args_begin(), AB->args_size());
19064    else if (const auto *ETLF = dyn_cast<ExclusiveTrylockFunctionAttr>(A)) {
19065      Arg = ETLF->getSuccessValue();
19066      Args = llvm::ArrayRef(ETLF->args_begin(), ETLF->args_size());
19067    } else if (const auto *STLF = dyn_cast<SharedTrylockFunctionAttr>(A)) {
19068      Arg = STLF->getSuccessValue();
19069      Args = llvm::ArrayRef(STLF->args_begin(), STLF->args_size());
19070    } else if (const auto *LR = dyn_cast<LockReturnedAttr>(A))
19071      Arg = LR->getArg();
19072    else if (const auto *LE = dyn_cast<LocksExcludedAttr>(A))
19073      Args = llvm::ArrayRef(LE->args_begin(), LE->args_size());
19074    else if (const auto *RC = dyn_cast<RequiresCapabilityAttr>(A))
19075      Args = llvm::ArrayRef(RC->args_begin(), RC->args_size());
19076    else if (const auto *AC = dyn_cast<AcquireCapabilityAttr>(A))
19077      Args = llvm::ArrayRef(AC->args_begin(), AC->args_size());
19078    else if (const auto *AC = dyn_cast<TryAcquireCapabilityAttr>(A))
19079      Args = llvm::ArrayRef(AC->args_begin(), AC->args_size());
19080    else if (const auto *RC = dyn_cast<ReleaseCapabilityAttr>(A))
19081      Args = llvm::ArrayRef(RC->args_begin(), RC->args_size());
19082
19083    if (Arg && !Finder.TraverseStmt(Arg))
19084      return true;
19085
19086    for (unsigned I = 0, N = Args.size(); I != N; ++I) {
19087      if (!Finder.TraverseStmt(Args[I]))
19088        return true;
19089    }
19090  }
19091
19092  return false;
19093}
19094
19095void Sema::checkExceptionSpecification(
19096    bool IsTopLevel, ExceptionSpecificationType EST,
19097    ArrayRef<ParsedType> DynamicExceptions,
19098    ArrayRef<SourceRange> DynamicExceptionRanges, Expr *NoexceptExpr,
19099    SmallVectorImpl<QualType> &Exceptions,
19100    FunctionProtoType::ExceptionSpecInfo &ESI) {
19101  Exceptions.clear();
19102  ESI.Type = EST;
19103  if (EST == EST_Dynamic) {
19104    Exceptions.reserve(DynamicExceptions.size());
19105    for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
19106      // FIXME: Preserve type source info.
19107      QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
19108
19109      if (IsTopLevel) {
19110        SmallVector<UnexpandedParameterPack, 2> Unexpanded;
19111        collectUnexpandedParameterPacks(ET, Unexpanded);
19112        if (!Unexpanded.empty()) {
19113          DiagnoseUnexpandedParameterPacks(
19114              DynamicExceptionRanges[ei].getBegin(), UPPC_ExceptionType,
19115              Unexpanded);
19116          continue;
19117        }
19118      }
19119
19120      // Check that the type is valid for an exception spec, and
19121      // drop it if not.
19122      if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
19123        Exceptions.push_back(ET);
19124    }
19125    ESI.Exceptions = Exceptions;
19126    return;
19127  }
19128
19129  if (isComputedNoexcept(EST)) {
19130    assert((NoexceptExpr->isTypeDependent() ||
19131            NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
19132            Context.BoolTy) &&
19133           "Parser should have made sure that the expression is boolean");
19134    if (IsTopLevel && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
19135      ESI.Type = EST_BasicNoexcept;
19136      return;
19137    }
19138
19139    ESI.NoexceptExpr = NoexceptExpr;
19140    return;
19141  }
19142}
19143
19144void Sema::actOnDelayedExceptionSpecification(Decl *MethodD,
19145             ExceptionSpecificationType EST,
19146             SourceRange SpecificationRange,
19147             ArrayRef<ParsedType> DynamicExceptions,
19148             ArrayRef<SourceRange> DynamicExceptionRanges,
19149             Expr *NoexceptExpr) {
19150  if (!MethodD)
19151    return;
19152
19153  // Dig out the method we're referring to.
19154  if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(MethodD))
19155    MethodD = FunTmpl->getTemplatedDecl();
19156
19157  CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(MethodD);
19158  if (!Method)
19159    return;
19160
19161  // Check the exception specification.
19162  llvm::SmallVector<QualType, 4> Exceptions;
19163  FunctionProtoType::ExceptionSpecInfo ESI;
19164  checkExceptionSpecification(/*IsTopLevel*/true, EST, DynamicExceptions,
19165                              DynamicExceptionRanges, NoexceptExpr, Exceptions,
19166                              ESI);
19167
19168  // Update the exception specification on the function type.
19169  Context.adjustExceptionSpec(Method, ESI, /*AsWritten*/true);
19170
19171  if (Method->isStatic())
19172    checkThisInStaticMemberFunctionExceptionSpec(Method);
19173
19174  if (Method->isVirtual()) {
19175    // Check overrides, which we previously had to delay.
19176    for (const CXXMethodDecl *O : Method->overridden_methods())
19177      CheckOverridingFunctionExceptionSpec(Method, O);
19178  }
19179}
19180
19181/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
19182///
19183MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
19184                                       SourceLocation DeclStart, Declarator &D,
19185                                       Expr *BitWidth,
19186                                       InClassInitStyle InitStyle,
19187                                       AccessSpecifier AS,
19188                                       const ParsedAttr &MSPropertyAttr) {
19189  IdentifierInfo *II = D.getIdentifier();
19190  if (!II) {
19191    Diag(DeclStart, diag::err_anonymous_property);
19192    return nullptr;
19193  }
19194  SourceLocation Loc = D.getIdentifierLoc();
19195
19196  TypeSourceInfo *TInfo = GetTypeForDeclarator(D);
19197  QualType T = TInfo->getType();
19198  if (getLangOpts().CPlusPlus) {
19199    CheckExtraCXXDefaultArguments(D);
19200
19201    if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
19202                                        UPPC_DataMemberType)) {
19203      D.setInvalidType();
19204      T = Context.IntTy;
19205      TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
19206    }
19207  }
19208
19209  DiagnoseFunctionSpecifiers(D.getDeclSpec());
19210
19211  if (D.getDeclSpec().isInlineSpecified())
19212    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function)
19213        << getLangOpts().CPlusPlus17;
19214  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
19215    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
19216         diag::err_invalid_thread)
19217      << DeclSpec::getSpecifierName(TSCS);
19218
19219  // Check to see if this name was declared as a member previously
19220  NamedDecl *PrevDecl = nullptr;
19221  LookupResult Previous(*this, II, Loc, LookupMemberName,
19222                        ForVisibleRedeclaration);
19223  LookupName(Previous, S);
19224  switch (Previous.getResultKind()) {
19225  case LookupResult::Found:
19226  case LookupResult::FoundUnresolvedValue:
19227    PrevDecl = Previous.getAsSingle<NamedDecl>();
19228    break;
19229
19230  case LookupResult::FoundOverloaded:
19231    PrevDecl = Previous.getRepresentativeDecl();
19232    break;
19233
19234  case LookupResult::NotFound:
19235  case LookupResult::NotFoundInCurrentInstantiation:
19236  case LookupResult::Ambiguous:
19237    break;
19238  }
19239
19240  if (PrevDecl && PrevDecl->isTemplateParameter()) {
19241    // Maybe we will complain about the shadowed template parameter.
19242    DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
19243    // Just pretend that we didn't see the previous declaration.
19244    PrevDecl = nullptr;
19245  }
19246
19247  if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
19248    PrevDecl = nullptr;
19249
19250  SourceLocation TSSL = D.getBeginLoc();
19251  MSPropertyDecl *NewPD =
19252      MSPropertyDecl::Create(Context, Record, Loc, II, T, TInfo, TSSL,
19253                             MSPropertyAttr.getPropertyDataGetter(),
19254                             MSPropertyAttr.getPropertyDataSetter());
19255  ProcessDeclAttributes(TUScope, NewPD, D);
19256  NewPD->setAccess(AS);
19257
19258  if (NewPD->isInvalidDecl())
19259    Record->setInvalidDecl();
19260
19261  if (D.getDeclSpec().isModulePrivateSpecified())
19262    NewPD->setModulePrivate();
19263
19264  if (NewPD->isInvalidDecl() && PrevDecl) {
19265    // Don't introduce NewFD into scope; there's already something
19266    // with the same name in the same scope.
19267  } else if (II) {
19268    PushOnScopeChains(NewPD, S);
19269  } else
19270    Record->addDecl(NewPD);
19271
19272  return NewPD;
19273}
19274
19275void Sema::ActOnStartFunctionDeclarationDeclarator(
19276    Declarator &Declarator, unsigned TemplateParameterDepth) {
19277  auto &Info = InventedParameterInfos.emplace_back();
19278  TemplateParameterList *ExplicitParams = nullptr;
19279  ArrayRef<TemplateParameterList *> ExplicitLists =
19280      Declarator.getTemplateParameterLists();
19281  if (!ExplicitLists.empty()) {
19282    bool IsMemberSpecialization, IsInvalid;
19283    ExplicitParams = MatchTemplateParametersToScopeSpecifier(
19284        Declarator.getBeginLoc(), Declarator.getIdentifierLoc(),
19285        Declarator.getCXXScopeSpec(), /*TemplateId=*/nullptr,
19286        ExplicitLists, /*IsFriend=*/false, IsMemberSpecialization, IsInvalid,
19287        /*SuppressDiagnostic=*/true);
19288  }
19289  if (ExplicitParams) {
19290    Info.AutoTemplateParameterDepth = ExplicitParams->getDepth();
19291    llvm::append_range(Info.TemplateParams, *ExplicitParams);
19292    Info.NumExplicitTemplateParams = ExplicitParams->size();
19293  } else {
19294    Info.AutoTemplateParameterDepth = TemplateParameterDepth;
19295    Info.NumExplicitTemplateParams = 0;
19296  }
19297}
19298
19299void Sema::ActOnFinishFunctionDeclarationDeclarator(Declarator &Declarator) {
19300  auto &FSI = InventedParameterInfos.back();
19301  if (FSI.TemplateParams.size() > FSI.NumExplicitTemplateParams) {
19302    if (FSI.NumExplicitTemplateParams != 0) {
19303      TemplateParameterList *ExplicitParams =
19304          Declarator.getTemplateParameterLists().back();
19305      Declarator.setInventedTemplateParameterList(
19306          TemplateParameterList::Create(
19307              Context, ExplicitParams->getTemplateLoc(),
19308              ExplicitParams->getLAngleLoc(), FSI.TemplateParams,
19309              ExplicitParams->getRAngleLoc(),
19310              ExplicitParams->getRequiresClause()));
19311    } else {
19312      Declarator.setInventedTemplateParameterList(
19313          TemplateParameterList::Create(
19314              Context, SourceLocation(), SourceLocation(), FSI.TemplateParams,
19315              SourceLocation(), /*RequiresClause=*/nullptr));
19316    }
19317  }
19318  InventedParameterInfos.pop_back();
19319}
19320