Home | History | Annotate | Download | only in Sema
      1 //===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file implements semantic analysis for C++ declarations.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "clang/Sema/SemaInternal.h"
     15 #include "clang/AST/ASTConsumer.h"
     16 #include "clang/AST/ASTContext.h"
     17 #include "clang/AST/ASTMutationListener.h"
     18 #include "clang/AST/CXXInheritance.h"
     19 #include "clang/AST/CharUnits.h"
     20 #include "clang/AST/DeclVisitor.h"
     21 #include "clang/AST/EvaluatedExprVisitor.h"
     22 #include "clang/AST/ExprCXX.h"
     23 #include "clang/AST/RecordLayout.h"
     24 #include "clang/AST/RecursiveASTVisitor.h"
     25 #include "clang/AST/StmtVisitor.h"
     26 #include "clang/AST/TypeLoc.h"
     27 #include "clang/AST/TypeOrdering.h"
     28 #include "clang/Basic/PartialDiagnostic.h"
     29 #include "clang/Basic/TargetInfo.h"
     30 #include "clang/Lex/LiteralSupport.h"
     31 #include "clang/Lex/Preprocessor.h"
     32 #include "clang/Sema/CXXFieldCollector.h"
     33 #include "clang/Sema/DeclSpec.h"
     34 #include "clang/Sema/Initialization.h"
     35 #include "clang/Sema/Lookup.h"
     36 #include "clang/Sema/ParsedTemplate.h"
     37 #include "clang/Sema/Scope.h"
     38 #include "clang/Sema/ScopeInfo.h"
     39 #include "llvm/ADT/STLExtras.h"
     40 #include "llvm/ADT/SmallString.h"
     41 #include <map>
     42 #include <set>
     43 
     44 using namespace clang;
     45 
     46 //===----------------------------------------------------------------------===//
     47 // CheckDefaultArgumentVisitor
     48 //===----------------------------------------------------------------------===//
     49 
     50 namespace {
     51   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
     52   /// the default argument of a parameter to determine whether it
     53   /// contains any ill-formed subexpressions. For example, this will
     54   /// diagnose the use of local variables or parameters within the
     55   /// default argument expression.
     56   class CheckDefaultArgumentVisitor
     57     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
     58     Expr *DefaultArg;
     59     Sema *S;
     60 
     61   public:
     62     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
     63       : DefaultArg(defarg), S(s) {}
     64 
     65     bool VisitExpr(Expr *Node);
     66     bool VisitDeclRefExpr(DeclRefExpr *DRE);
     67     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
     68     bool VisitLambdaExpr(LambdaExpr *Lambda);
     69     bool VisitPseudoObjectExpr(PseudoObjectExpr *POE);
     70   };
     71 
     72   /// VisitExpr - Visit all of the children of this expression.
     73   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
     74     bool IsInvalid = false;
     75     for (Stmt::child_range I = Node->children(); I; ++I)
     76       IsInvalid |= Visit(*I);
     77     return IsInvalid;
     78   }
     79 
     80   /// VisitDeclRefExpr - Visit a reference to a declaration, to
     81   /// determine whether this declaration can be used in the default
     82   /// argument expression.
     83   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
     84     NamedDecl *Decl = DRE->getDecl();
     85     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
     86       // C++ [dcl.fct.default]p9
     87       //   Default arguments are evaluated each time the function is
     88       //   called. The order of evaluation of function arguments is
     89       //   unspecified. Consequently, parameters of a function shall not
     90       //   be used in default argument expressions, even if they are not
     91       //   evaluated. Parameters of a function declared before a default
     92       //   argument expression are in scope and can hide namespace and
     93       //   class member names.
     94       return S->Diag(DRE->getLocStart(),
     95                      diag::err_param_default_argument_references_param)
     96          << Param->getDeclName() << DefaultArg->getSourceRange();
     97     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
     98       // C++ [dcl.fct.default]p7
     99       //   Local variables shall not be used in default argument
    100       //   expressions.
    101       if (VDecl->isLocalVarDecl())
    102         return S->Diag(DRE->getLocStart(),
    103                        diag::err_param_default_argument_references_local)
    104           << VDecl->getDeclName() << DefaultArg->getSourceRange();
    105     }
    106 
    107     return false;
    108   }
    109 
    110   /// VisitCXXThisExpr - Visit a C++ "this" expression.
    111   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
    112     // C++ [dcl.fct.default]p8:
    113     //   The keyword this shall not be used in a default argument of a
    114     //   member function.
    115     return S->Diag(ThisE->getLocStart(),
    116                    diag::err_param_default_argument_references_this)
    117                << ThisE->getSourceRange();
    118   }
    119 
    120   bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) {
    121     bool Invalid = false;
    122     for (PseudoObjectExpr::semantics_iterator
    123            i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
    124       Expr *E = *i;
    125 
    126       // Look through bindings.
    127       if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
    128         E = OVE->getSourceExpr();
    129         assert(E && "pseudo-object binding without source expression?");
    130       }
    131 
    132       Invalid |= Visit(E);
    133     }
    134     return Invalid;
    135   }
    136 
    137   bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
    138     // C++11 [expr.lambda.prim]p13:
    139     //   A lambda-expression appearing in a default argument shall not
    140     //   implicitly or explicitly capture any entity.
    141     if (Lambda->capture_begin() == Lambda->capture_end())
    142       return false;
    143 
    144     return S->Diag(Lambda->getLocStart(),
    145                    diag::err_lambda_capture_default_arg);
    146   }
    147 }
    148 
    149 void
    150 Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
    151                                                  const CXXMethodDecl *Method) {
    152   // If we have an MSAny spec already, don't bother.
    153   if (!Method || ComputedEST == EST_MSAny)
    154     return;
    155 
    156   const FunctionProtoType *Proto
    157     = Method->getType()->getAs<FunctionProtoType>();
    158   Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
    159   if (!Proto)
    160     return;
    161 
    162   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
    163 
    164   // If this function can throw any exceptions, make a note of that.
    165   if (EST == EST_MSAny || EST == EST_None) {
    166     ClearExceptions();
    167     ComputedEST = EST;
    168     return;
    169   }
    170 
    171   // FIXME: If the call to this decl is using any of its default arguments, we
    172   // need to search them for potentially-throwing calls.
    173 
    174   // If this function has a basic noexcept, it doesn't affect the outcome.
    175   if (EST == EST_BasicNoexcept)
    176     return;
    177 
    178   // If we have a throw-all spec at this point, ignore the function.
    179   if (ComputedEST == EST_None)
    180     return;
    181 
    182   // If we're still at noexcept(true) and there's a nothrow() callee,
    183   // change to that specification.
    184   if (EST == EST_DynamicNone) {
    185     if (ComputedEST == EST_BasicNoexcept)
    186       ComputedEST = EST_DynamicNone;
    187     return;
    188   }
    189 
    190   // Check out noexcept specs.
    191   if (EST == EST_ComputedNoexcept) {
    192     FunctionProtoType::NoexceptResult NR =
    193         Proto->getNoexceptSpec(Self->Context);
    194     assert(NR != FunctionProtoType::NR_NoNoexcept &&
    195            "Must have noexcept result for EST_ComputedNoexcept.");
    196     assert(NR != FunctionProtoType::NR_Dependent &&
    197            "Should not generate implicit declarations for dependent cases, "
    198            "and don't know how to handle them anyway.");
    199 
    200     // noexcept(false) -> no spec on the new function
    201     if (NR == FunctionProtoType::NR_Throw) {
    202       ClearExceptions();
    203       ComputedEST = EST_None;
    204     }
    205     // noexcept(true) won't change anything either.
    206     return;
    207   }
    208 
    209   assert(EST == EST_Dynamic && "EST case not considered earlier.");
    210   assert(ComputedEST != EST_None &&
    211          "Shouldn't collect exceptions when throw-all is guaranteed.");
    212   ComputedEST = EST_Dynamic;
    213   // Record the exceptions in this function's exception specification.
    214   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
    215                                           EEnd = Proto->exception_end();
    216        E != EEnd; ++E)
    217     if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
    218       Exceptions.push_back(*E);
    219 }
    220 
    221 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
    222   if (!E || ComputedEST == EST_MSAny)
    223     return;
    224 
    225   // FIXME:
    226   //
    227   // C++0x [except.spec]p14:
    228   //   [An] implicit exception-specification specifies the type-id T if and
    229   // only if T is allowed by the exception-specification of a function directly
    230   // invoked by f's implicit definition; f shall allow all exceptions if any
    231   // function it directly invokes allows all exceptions, and f shall allow no
    232   // exceptions if every function it directly invokes allows no exceptions.
    233   //
    234   // Note in particular that if an implicit exception-specification is generated
    235   // for a function containing a throw-expression, that specification can still
    236   // be noexcept(true).
    237   //
    238   // Note also that 'directly invoked' is not defined in the standard, and there
    239   // is no indication that we should only consider potentially-evaluated calls.
    240   //
    241   // Ultimately we should implement the intent of the standard: the exception
    242   // specification should be the set of exceptions which can be thrown by the
    243   // implicit definition. For now, we assume that any non-nothrow expression can
    244   // throw any exception.
    245 
    246   if (Self->canThrow(E))
    247     ComputedEST = EST_None;
    248 }
    249 
    250 bool
    251 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
    252                               SourceLocation EqualLoc) {
    253   if (RequireCompleteType(Param->getLocation(), Param->getType(),
    254                           diag::err_typecheck_decl_incomplete_type)) {
    255     Param->setInvalidDecl();
    256     return true;
    257   }
    258 
    259   // C++ [dcl.fct.default]p5
    260   //   A default argument expression is implicitly converted (clause
    261   //   4) to the parameter type. The default argument expression has
    262   //   the same semantic constraints as the initializer expression in
    263   //   a declaration of a variable of the parameter type, using the
    264   //   copy-initialization semantics (8.5).
    265   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
    266                                                                     Param);
    267   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
    268                                                            EqualLoc);
    269   InitializationSequence InitSeq(*this, Entity, Kind, Arg);
    270   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
    271   if (Result.isInvalid())
    272     return true;
    273   Arg = Result.takeAs<Expr>();
    274 
    275   CheckCompletedExpr(Arg, EqualLoc);
    276   Arg = MaybeCreateExprWithCleanups(Arg);
    277 
    278   // Okay: add the default argument to the parameter
    279   Param->setDefaultArg(Arg);
    280 
    281   // We have already instantiated this parameter; provide each of the
    282   // instantiations with the uninstantiated default argument.
    283   UnparsedDefaultArgInstantiationsMap::iterator InstPos
    284     = UnparsedDefaultArgInstantiations.find(Param);
    285   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
    286     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
    287       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
    288 
    289     // We're done tracking this parameter's instantiations.
    290     UnparsedDefaultArgInstantiations.erase(InstPos);
    291   }
    292 
    293   return false;
    294 }
    295 
    296 /// ActOnParamDefaultArgument - Check whether the default argument
    297 /// provided for a function parameter is well-formed. If so, attach it
    298 /// to the parameter declaration.
    299 void
    300 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
    301                                 Expr *DefaultArg) {
    302   if (!param || !DefaultArg)
    303     return;
    304 
    305   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    306   UnparsedDefaultArgLocs.erase(Param);
    307 
    308   // Default arguments are only permitted in C++
    309   if (!getLangOpts().CPlusPlus) {
    310     Diag(EqualLoc, diag::err_param_default_argument)
    311       << DefaultArg->getSourceRange();
    312     Param->setInvalidDecl();
    313     return;
    314   }
    315 
    316   // Check for unexpanded parameter packs.
    317   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
    318     Param->setInvalidDecl();
    319     return;
    320   }
    321 
    322   // Check that the default argument is well-formed
    323   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
    324   if (DefaultArgChecker.Visit(DefaultArg)) {
    325     Param->setInvalidDecl();
    326     return;
    327   }
    328 
    329   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
    330 }
    331 
    332 /// ActOnParamUnparsedDefaultArgument - We've seen a default
    333 /// argument for a function parameter, but we can't parse it yet
    334 /// because we're inside a class definition. Note that this default
    335 /// argument will be parsed later.
    336 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
    337                                              SourceLocation EqualLoc,
    338                                              SourceLocation ArgLoc) {
    339   if (!param)
    340     return;
    341 
    342   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    343   if (Param)
    344     Param->setUnparsedDefaultArg();
    345 
    346   UnparsedDefaultArgLocs[Param] = ArgLoc;
    347 }
    348 
    349 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
    350 /// the default argument for the parameter param failed.
    351 void Sema::ActOnParamDefaultArgumentError(Decl *param) {
    352   if (!param)
    353     return;
    354 
    355   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    356 
    357   Param->setInvalidDecl();
    358 
    359   UnparsedDefaultArgLocs.erase(Param);
    360 }
    361 
    362 /// CheckExtraCXXDefaultArguments - Check for any extra default
    363 /// arguments in the declarator, which is not a function declaration
    364 /// or definition and therefore is not permitted to have default
    365 /// arguments. This routine should be invoked for every declarator
    366 /// that is not a function declaration or definition.
    367 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
    368   // C++ [dcl.fct.default]p3
    369   //   A default argument expression shall be specified only in the
    370   //   parameter-declaration-clause of a function declaration or in a
    371   //   template-parameter (14.1). It shall not be specified for a
    372   //   parameter pack. If it is specified in a
    373   //   parameter-declaration-clause, it shall not occur within a
    374   //   declarator or abstract-declarator of a parameter-declaration.
    375   bool MightBeFunction = D.isFunctionDeclarationContext();
    376   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
    377     DeclaratorChunk &chunk = D.getTypeObject(i);
    378     if (chunk.Kind == DeclaratorChunk::Function) {
    379       if (MightBeFunction) {
    380         // This is a function declaration. It can have default arguments, but
    381         // keep looking in case its return type is a function type with default
    382         // arguments.
    383         MightBeFunction = false;
    384         continue;
    385       }
    386       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
    387         ParmVarDecl *Param =
    388           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
    389         if (Param->hasUnparsedDefaultArg()) {
    390           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
    391           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    392             << SourceRange((*Toks)[1].getLocation(),
    393                            Toks->back().getLocation());
    394           delete Toks;
    395           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
    396         } else if (Param->getDefaultArg()) {
    397           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    398             << Param->getDefaultArg()->getSourceRange();
    399           Param->setDefaultArg(0);
    400         }
    401       }
    402     } else if (chunk.Kind != DeclaratorChunk::Paren) {
    403       MightBeFunction = false;
    404     }
    405   }
    406 }
    407 
    408 static bool functionDeclHasDefaultArgument(const FunctionDecl *FD) {
    409   for (unsigned NumParams = FD->getNumParams(); NumParams > 0; --NumParams) {
    410     const ParmVarDecl *PVD = FD->getParamDecl(NumParams-1);
    411     if (!PVD->hasDefaultArg())
    412       return false;
    413     if (!PVD->hasInheritedDefaultArg())
    414       return true;
    415   }
    416   return false;
    417 }
    418 
    419 /// MergeCXXFunctionDecl - Merge two declarations of the same C++
    420 /// function, once we already know that they have the same
    421 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
    422 /// error, false otherwise.
    423 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
    424                                 Scope *S) {
    425   bool Invalid = false;
    426 
    427   // C++ [dcl.fct.default]p4:
    428   //   For non-template functions, default arguments can be added in
    429   //   later declarations of a function in the same
    430   //   scope. Declarations in different scopes have completely
    431   //   distinct sets of default arguments. That is, declarations in
    432   //   inner scopes do not acquire default arguments from
    433   //   declarations in outer scopes, and vice versa. In a given
    434   //   function declaration, all parameters subsequent to a
    435   //   parameter with a default argument shall have default
    436   //   arguments supplied in this or previous declarations. A
    437   //   default argument shall not be redefined by a later
    438   //   declaration (not even to the same value).
    439   //
    440   // C++ [dcl.fct.default]p6:
    441   //   Except for member functions of class templates, the default arguments
    442   //   in a member function definition that appears outside of the class
    443   //   definition are added to the set of default arguments provided by the
    444   //   member function declaration in the class definition.
    445   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
    446     ParmVarDecl *OldParam = Old->getParamDecl(p);
    447     ParmVarDecl *NewParam = New->getParamDecl(p);
    448 
    449     bool OldParamHasDfl = OldParam->hasDefaultArg();
    450     bool NewParamHasDfl = NewParam->hasDefaultArg();
    451 
    452     NamedDecl *ND = Old;
    453     if (S && !isDeclInScope(ND, New->getDeclContext(), S))
    454       // Ignore default parameters of old decl if they are not in
    455       // the same scope.
    456       OldParamHasDfl = false;
    457 
    458     if (OldParamHasDfl && NewParamHasDfl) {
    459 
    460       unsigned DiagDefaultParamID =
    461         diag::err_param_default_argument_redefinition;
    462 
    463       // MSVC accepts that default parameters be redefined for member functions
    464       // of template class. The new default parameter's value is ignored.
    465       Invalid = true;
    466       if (getLangOpts().MicrosoftExt) {
    467         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
    468         if (MD && MD->getParent()->getDescribedClassTemplate()) {
    469           // Merge the old default argument into the new parameter.
    470           NewParam->setHasInheritedDefaultArg();
    471           if (OldParam->hasUninstantiatedDefaultArg())
    472             NewParam->setUninstantiatedDefaultArg(
    473                                       OldParam->getUninstantiatedDefaultArg());
    474           else
    475             NewParam->setDefaultArg(OldParam->getInit());
    476           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
    477           Invalid = false;
    478         }
    479       }
    480 
    481       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
    482       // hint here. Alternatively, we could walk the type-source information
    483       // for NewParam to find the last source location in the type... but it
    484       // isn't worth the effort right now. This is the kind of test case that
    485       // is hard to get right:
    486       //   int f(int);
    487       //   void g(int (*fp)(int) = f);
    488       //   void g(int (*fp)(int) = &f);
    489       Diag(NewParam->getLocation(), DiagDefaultParamID)
    490         << NewParam->getDefaultArgRange();
    491 
    492       // Look for the function declaration where the default argument was
    493       // actually written, which may be a declaration prior to Old.
    494       for (FunctionDecl *Older = Old->getPreviousDecl();
    495            Older; Older = Older->getPreviousDecl()) {
    496         if (!Older->getParamDecl(p)->hasDefaultArg())
    497           break;
    498 
    499         OldParam = Older->getParamDecl(p);
    500       }
    501 
    502       Diag(OldParam->getLocation(), diag::note_previous_definition)
    503         << OldParam->getDefaultArgRange();
    504     } else if (OldParamHasDfl) {
    505       // Merge the old default argument into the new parameter.
    506       // It's important to use getInit() here;  getDefaultArg()
    507       // strips off any top-level ExprWithCleanups.
    508       NewParam->setHasInheritedDefaultArg();
    509       if (OldParam->hasUninstantiatedDefaultArg())
    510         NewParam->setUninstantiatedDefaultArg(
    511                                       OldParam->getUninstantiatedDefaultArg());
    512       else
    513         NewParam->setDefaultArg(OldParam->getInit());
    514     } else if (NewParamHasDfl) {
    515       if (New->getDescribedFunctionTemplate()) {
    516         // Paragraph 4, quoted above, only applies to non-template functions.
    517         Diag(NewParam->getLocation(),
    518              diag::err_param_default_argument_template_redecl)
    519           << NewParam->getDefaultArgRange();
    520         Diag(Old->getLocation(), diag::note_template_prev_declaration)
    521           << false;
    522       } else if (New->getTemplateSpecializationKind()
    523                    != TSK_ImplicitInstantiation &&
    524                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
    525         // C++ [temp.expr.spec]p21:
    526         //   Default function arguments shall not be specified in a declaration
    527         //   or a definition for one of the following explicit specializations:
    528         //     - the explicit specialization of a function template;
    529         //     - the explicit specialization of a member function template;
    530         //     - the explicit specialization of a member function of a class
    531         //       template where the class template specialization to which the
    532         //       member function specialization belongs is implicitly
    533         //       instantiated.
    534         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
    535           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
    536           << New->getDeclName()
    537           << NewParam->getDefaultArgRange();
    538       } else if (New->getDeclContext()->isDependentContext()) {
    539         // C++ [dcl.fct.default]p6 (DR217):
    540         //   Default arguments for a member function of a class template shall
    541         //   be specified on the initial declaration of the member function
    542         //   within the class template.
    543         //
    544         // Reading the tea leaves a bit in DR217 and its reference to DR205
    545         // leads me to the conclusion that one cannot add default function
    546         // arguments for an out-of-line definition of a member function of a
    547         // dependent type.
    548         int WhichKind = 2;
    549         if (CXXRecordDecl *Record
    550               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
    551           if (Record->getDescribedClassTemplate())
    552             WhichKind = 0;
    553           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
    554             WhichKind = 1;
    555           else
    556             WhichKind = 2;
    557         }
    558 
    559         Diag(NewParam->getLocation(),
    560              diag::err_param_default_argument_member_template_redecl)
    561           << WhichKind
    562           << NewParam->getDefaultArgRange();
    563       }
    564     }
    565   }
    566 
    567   // DR1344: If a default argument is added outside a class definition and that
    568   // default argument makes the function a special member function, the program
    569   // is ill-formed. This can only happen for constructors.
    570   if (isa<CXXConstructorDecl>(New) &&
    571       New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
    572     CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
    573                      OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
    574     if (NewSM != OldSM) {
    575       ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
    576       assert(NewParam->hasDefaultArg());
    577       Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
    578         << NewParam->getDefaultArgRange() << NewSM;
    579       Diag(Old->getLocation(), diag::note_previous_declaration);
    580     }
    581   }
    582 
    583   // C++11 [dcl.constexpr]p1: If any declaration of a function or function
    584   // template has a constexpr specifier then all its declarations shall
    585   // contain the constexpr specifier.
    586   if (New->isConstexpr() != Old->isConstexpr()) {
    587     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
    588       << New << New->isConstexpr();
    589     Diag(Old->getLocation(), diag::note_previous_declaration);
    590     Invalid = true;
    591   }
    592 
    593   // C++11 [dcl.fct.default]p4: If a friend declaration specifies a default
    594   // argument expression, that declaration shall be a definition and shall be
    595   // the only declaration of the function or function template in the
    596   // translation unit.
    597   if (Old->getFriendObjectKind() == Decl::FOK_Undeclared &&
    598       functionDeclHasDefaultArgument(Old)) {
    599     Diag(New->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
    600     Diag(Old->getLocation(), diag::note_previous_declaration);
    601     Invalid = true;
    602   }
    603 
    604   if (CheckEquivalentExceptionSpec(Old, New))
    605     Invalid = true;
    606 
    607   return Invalid;
    608 }
    609 
    610 /// \brief Merge the exception specifications of two variable declarations.
    611 ///
    612 /// This is called when there's a redeclaration of a VarDecl. The function
    613 /// checks if the redeclaration might have an exception specification and
    614 /// validates compatibility and merges the specs if necessary.
    615 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
    616   // Shortcut if exceptions are disabled.
    617   if (!getLangOpts().CXXExceptions)
    618     return;
    619 
    620   assert(Context.hasSameType(New->getType(), Old->getType()) &&
    621          "Should only be called if types are otherwise the same.");
    622 
    623   QualType NewType = New->getType();
    624   QualType OldType = Old->getType();
    625 
    626   // We're only interested in pointers and references to functions, as well
    627   // as pointers to member functions.
    628   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
    629     NewType = R->getPointeeType();
    630     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
    631   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
    632     NewType = P->getPointeeType();
    633     OldType = OldType->getAs<PointerType>()->getPointeeType();
    634   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
    635     NewType = M->getPointeeType();
    636     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
    637   }
    638 
    639   if (!NewType->isFunctionProtoType())
    640     return;
    641 
    642   // There's lots of special cases for functions. For function pointers, system
    643   // libraries are hopefully not as broken so that we don't need these
    644   // workarounds.
    645   if (CheckEquivalentExceptionSpec(
    646         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
    647         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
    648     New->setInvalidDecl();
    649   }
    650 }
    651 
    652 /// CheckCXXDefaultArguments - Verify that the default arguments for a
    653 /// function declaration are well-formed according to C++
    654 /// [dcl.fct.default].
    655 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
    656   unsigned NumParams = FD->getNumParams();
    657   unsigned p;
    658 
    659   // Find first parameter with a default argument
    660   for (p = 0; p < NumParams; ++p) {
    661     ParmVarDecl *Param = FD->getParamDecl(p);
    662     if (Param->hasDefaultArg())
    663       break;
    664   }
    665 
    666   // C++ [dcl.fct.default]p4:
    667   //   In a given function declaration, all parameters
    668   //   subsequent to a parameter with a default argument shall
    669   //   have default arguments supplied in this or previous
    670   //   declarations. A default argument shall not be redefined
    671   //   by a later declaration (not even to the same value).
    672   unsigned LastMissingDefaultArg = 0;
    673   for (; p < NumParams; ++p) {
    674     ParmVarDecl *Param = FD->getParamDecl(p);
    675     if (!Param->hasDefaultArg()) {
    676       if (Param->isInvalidDecl())
    677         /* We already complained about this parameter. */;
    678       else if (Param->getIdentifier())
    679         Diag(Param->getLocation(),
    680              diag::err_param_default_argument_missing_name)
    681           << Param->getIdentifier();
    682       else
    683         Diag(Param->getLocation(),
    684              diag::err_param_default_argument_missing);
    685 
    686       LastMissingDefaultArg = p;
    687     }
    688   }
    689 
    690   if (LastMissingDefaultArg > 0) {
    691     // Some default arguments were missing. Clear out all of the
    692     // default arguments up to (and including) the last missing
    693     // default argument, so that we leave the function parameters
    694     // in a semantically valid state.
    695     for (p = 0; p <= LastMissingDefaultArg; ++p) {
    696       ParmVarDecl *Param = FD->getParamDecl(p);
    697       if (Param->hasDefaultArg()) {
    698         Param->setDefaultArg(0);
    699       }
    700     }
    701   }
    702 }
    703 
    704 // CheckConstexprParameterTypes - Check whether a function's parameter types
    705 // are all literal types. If so, return true. If not, produce a suitable
    706 // diagnostic and return false.
    707 static bool CheckConstexprParameterTypes(Sema &SemaRef,
    708                                          const FunctionDecl *FD) {
    709   unsigned ArgIndex = 0;
    710   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
    711   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
    712        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
    713     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
    714     SourceLocation ParamLoc = PD->getLocation();
    715     if (!(*i)->isDependentType() &&
    716         SemaRef.RequireLiteralType(ParamLoc, *i,
    717                                    diag::err_constexpr_non_literal_param,
    718                                    ArgIndex+1, PD->getSourceRange(),
    719                                    isa<CXXConstructorDecl>(FD)))
    720       return false;
    721   }
    722   return true;
    723 }
    724 
    725 /// \brief Get diagnostic %select index for tag kind for
    726 /// record diagnostic message.
    727 /// WARNING: Indexes apply to particular diagnostics only!
    728 ///
    729 /// \returns diagnostic %select index.
    730 static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
    731   switch (Tag) {
    732   case TTK_Struct: return 0;
    733   case TTK_Interface: return 1;
    734   case TTK_Class:  return 2;
    735   default: llvm_unreachable("Invalid tag kind for record diagnostic!");
    736   }
    737 }
    738 
    739 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
    740 // the requirements of a constexpr function definition or a constexpr
    741 // constructor definition. If so, return true. If not, produce appropriate
    742 // diagnostics and return false.
    743 //
    744 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
    745 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
    746   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
    747   if (MD && MD->isInstance()) {
    748     // C++11 [dcl.constexpr]p4:
    749     //  The definition of a constexpr constructor shall satisfy the following
    750     //  constraints:
    751     //  - the class shall not have any virtual base classes;
    752     const CXXRecordDecl *RD = MD->getParent();
    753     if (RD->getNumVBases()) {
    754       Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
    755         << isa<CXXConstructorDecl>(NewFD)
    756         << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
    757       for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
    758              E = RD->vbases_end(); I != E; ++I)
    759         Diag(I->getLocStart(),
    760              diag::note_constexpr_virtual_base_here) << I->getSourceRange();
    761       return false;
    762     }
    763   }
    764 
    765   if (!isa<CXXConstructorDecl>(NewFD)) {
    766     // C++11 [dcl.constexpr]p3:
    767     //  The definition of a constexpr function shall satisfy the following
    768     //  constraints:
    769     // - it shall not be virtual;
    770     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
    771     if (Method && Method->isVirtual()) {
    772       Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
    773 
    774       // If it's not obvious why this function is virtual, find an overridden
    775       // function which uses the 'virtual' keyword.
    776       const CXXMethodDecl *WrittenVirtual = Method;
    777       while (!WrittenVirtual->isVirtualAsWritten())
    778         WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
    779       if (WrittenVirtual != Method)
    780         Diag(WrittenVirtual->getLocation(),
    781              diag::note_overridden_virtual_function);
    782       return false;
    783     }
    784 
    785     // - its return type shall be a literal type;
    786     QualType RT = NewFD->getResultType();
    787     if (!RT->isDependentType() &&
    788         RequireLiteralType(NewFD->getLocation(), RT,
    789                            diag::err_constexpr_non_literal_return))
    790       return false;
    791   }
    792 
    793   // - each of its parameter types shall be a literal type;
    794   if (!CheckConstexprParameterTypes(*this, NewFD))
    795     return false;
    796 
    797   return true;
    798 }
    799 
    800 /// Check the given declaration statement is legal within a constexpr function
    801 /// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
    802 ///
    803 /// \return true if the body is OK (maybe only as an extension), false if we
    804 ///         have diagnosed a problem.
    805 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
    806                                    DeclStmt *DS, SourceLocation &Cxx1yLoc) {
    807   // C++11 [dcl.constexpr]p3 and p4:
    808   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
    809   //  contain only
    810   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
    811          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
    812     switch ((*DclIt)->getKind()) {
    813     case Decl::StaticAssert:
    814     case Decl::Using:
    815     case Decl::UsingShadow:
    816     case Decl::UsingDirective:
    817     case Decl::UnresolvedUsingTypename:
    818     case Decl::UnresolvedUsingValue:
    819       //   - static_assert-declarations
    820       //   - using-declarations,
    821       //   - using-directives,
    822       continue;
    823 
    824     case Decl::Typedef:
    825     case Decl::TypeAlias: {
    826       //   - typedef declarations and alias-declarations that do not define
    827       //     classes or enumerations,
    828       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
    829       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
    830         // Don't allow variably-modified types in constexpr functions.
    831         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
    832         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
    833           << TL.getSourceRange() << TL.getType()
    834           << isa<CXXConstructorDecl>(Dcl);
    835         return false;
    836       }
    837       continue;
    838     }
    839 
    840     case Decl::Enum:
    841     case Decl::CXXRecord:
    842       // C++1y allows types to be defined, not just declared.
    843       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition())
    844         SemaRef.Diag(DS->getLocStart(),
    845                      SemaRef.getLangOpts().CPlusPlus1y
    846                        ? diag::warn_cxx11_compat_constexpr_type_definition
    847                        : diag::ext_constexpr_type_definition)
    848           << isa<CXXConstructorDecl>(Dcl);
    849       continue;
    850 
    851     case Decl::EnumConstant:
    852     case Decl::IndirectField:
    853     case Decl::ParmVar:
    854       // These can only appear with other declarations which are banned in
    855       // C++11 and permitted in C++1y, so ignore them.
    856       continue;
    857 
    858     case Decl::Var: {
    859       // C++1y [dcl.constexpr]p3 allows anything except:
    860       //   a definition of a variable of non-literal type or of static or
    861       //   thread storage duration or for which no initialization is performed.
    862       VarDecl *VD = cast<VarDecl>(*DclIt);
    863       if (VD->isThisDeclarationADefinition()) {
    864         if (VD->isStaticLocal()) {
    865           SemaRef.Diag(VD->getLocation(),
    866                        diag::err_constexpr_local_var_static)
    867             << isa<CXXConstructorDecl>(Dcl)
    868             << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
    869           return false;
    870         }
    871         if (!VD->getType()->isDependentType() &&
    872             SemaRef.RequireLiteralType(
    873               VD->getLocation(), VD->getType(),
    874               diag::err_constexpr_local_var_non_literal_type,
    875               isa<CXXConstructorDecl>(Dcl)))
    876           return false;
    877         if (!VD->hasInit()) {
    878           SemaRef.Diag(VD->getLocation(),
    879                        diag::err_constexpr_local_var_no_init)
    880             << isa<CXXConstructorDecl>(Dcl);
    881           return false;
    882         }
    883       }
    884       SemaRef.Diag(VD->getLocation(),
    885                    SemaRef.getLangOpts().CPlusPlus1y
    886                     ? diag::warn_cxx11_compat_constexpr_local_var
    887                     : diag::ext_constexpr_local_var)
    888         << isa<CXXConstructorDecl>(Dcl);
    889       continue;
    890     }
    891 
    892     case Decl::NamespaceAlias:
    893     case Decl::Function:
    894       // These are disallowed in C++11 and permitted in C++1y. Allow them
    895       // everywhere as an extension.
    896       if (!Cxx1yLoc.isValid())
    897         Cxx1yLoc = DS->getLocStart();
    898       continue;
    899 
    900     default:
    901       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
    902         << isa<CXXConstructorDecl>(Dcl);
    903       return false;
    904     }
    905   }
    906 
    907   return true;
    908 }
    909 
    910 /// Check that the given field is initialized within a constexpr constructor.
    911 ///
    912 /// \param Dcl The constexpr constructor being checked.
    913 /// \param Field The field being checked. This may be a member of an anonymous
    914 ///        struct or union nested within the class being checked.
    915 /// \param Inits All declarations, including anonymous struct/union members and
    916 ///        indirect members, for which any initialization was provided.
    917 /// \param Diagnosed Set to true if an error is produced.
    918 static void CheckConstexprCtorInitializer(Sema &SemaRef,
    919                                           const FunctionDecl *Dcl,
    920                                           FieldDecl *Field,
    921                                           llvm::SmallSet<Decl*, 16> &Inits,
    922                                           bool &Diagnosed) {
    923   if (Field->isInvalidDecl())
    924     return;
    925 
    926   if (Field->isUnnamedBitfield())
    927     return;
    928 
    929   if (Field->isAnonymousStructOrUnion() &&
    930       Field->getType()->getAsCXXRecordDecl()->isEmpty())
    931     return;
    932 
    933   if (!Inits.count(Field)) {
    934     if (!Diagnosed) {
    935       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
    936       Diagnosed = true;
    937     }
    938     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
    939   } else if (Field->isAnonymousStructOrUnion()) {
    940     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
    941     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
    942          I != E; ++I)
    943       // If an anonymous union contains an anonymous struct of which any member
    944       // is initialized, all members must be initialized.
    945       if (!RD->isUnion() || Inits.count(*I))
    946         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
    947   }
    948 }
    949 
    950 /// Check the provided statement is allowed in a constexpr function
    951 /// definition.
    952 static bool
    953 CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
    954                            llvm::SmallVectorImpl<SourceLocation> &ReturnStmts,
    955                            SourceLocation &Cxx1yLoc) {
    956   // - its function-body shall be [...] a compound-statement that contains only
    957   switch (S->getStmtClass()) {
    958   case Stmt::NullStmtClass:
    959     //   - null statements,
    960     return true;
    961 
    962   case Stmt::DeclStmtClass:
    963     //   - static_assert-declarations
    964     //   - using-declarations,
    965     //   - using-directives,
    966     //   - typedef declarations and alias-declarations that do not define
    967     //     classes or enumerations,
    968     if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc))
    969       return false;
    970     return true;
    971 
    972   case Stmt::ReturnStmtClass:
    973     //   - and exactly one return statement;
    974     if (isa<CXXConstructorDecl>(Dcl)) {
    975       // C++1y allows return statements in constexpr constructors.
    976       if (!Cxx1yLoc.isValid())
    977         Cxx1yLoc = S->getLocStart();
    978       return true;
    979     }
    980 
    981     ReturnStmts.push_back(S->getLocStart());
    982     return true;
    983 
    984   case Stmt::CompoundStmtClass: {
    985     // C++1y allows compound-statements.
    986     if (!Cxx1yLoc.isValid())
    987       Cxx1yLoc = S->getLocStart();
    988 
    989     CompoundStmt *CompStmt = cast<CompoundStmt>(S);
    990     for (CompoundStmt::body_iterator BodyIt = CompStmt->body_begin(),
    991            BodyEnd = CompStmt->body_end(); BodyIt != BodyEnd; ++BodyIt) {
    992       if (!CheckConstexprFunctionStmt(SemaRef, Dcl, *BodyIt, ReturnStmts,
    993                                       Cxx1yLoc))
    994         return false;
    995     }
    996     return true;
    997   }
    998 
    999   case Stmt::AttributedStmtClass:
   1000     if (!Cxx1yLoc.isValid())
   1001       Cxx1yLoc = S->getLocStart();
   1002     return true;
   1003 
   1004   case Stmt::IfStmtClass: {
   1005     // C++1y allows if-statements.
   1006     if (!Cxx1yLoc.isValid())
   1007       Cxx1yLoc = S->getLocStart();
   1008 
   1009     IfStmt *If = cast<IfStmt>(S);
   1010     if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
   1011                                     Cxx1yLoc))
   1012       return false;
   1013     if (If->getElse() &&
   1014         !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
   1015                                     Cxx1yLoc))
   1016       return false;
   1017     return true;
   1018   }
   1019 
   1020   case Stmt::WhileStmtClass:
   1021   case Stmt::DoStmtClass:
   1022   case Stmt::ForStmtClass:
   1023   case Stmt::CXXForRangeStmtClass:
   1024   case Stmt::ContinueStmtClass:
   1025     // C++1y allows all of these. We don't allow them as extensions in C++11,
   1026     // because they don't make sense without variable mutation.
   1027     if (!SemaRef.getLangOpts().CPlusPlus1y)
   1028       break;
   1029     if (!Cxx1yLoc.isValid())
   1030       Cxx1yLoc = S->getLocStart();
   1031     for (Stmt::child_range Children = S->children(); Children; ++Children)
   1032       if (*Children &&
   1033           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
   1034                                       Cxx1yLoc))
   1035         return false;
   1036     return true;
   1037 
   1038   case Stmt::SwitchStmtClass:
   1039   case Stmt::CaseStmtClass:
   1040   case Stmt::DefaultStmtClass:
   1041   case Stmt::BreakStmtClass:
   1042     // C++1y allows switch-statements, and since they don't need variable
   1043     // mutation, we can reasonably allow them in C++11 as an extension.
   1044     if (!Cxx1yLoc.isValid())
   1045       Cxx1yLoc = S->getLocStart();
   1046     for (Stmt::child_range Children = S->children(); Children; ++Children)
   1047       if (*Children &&
   1048           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
   1049                                       Cxx1yLoc))
   1050         return false;
   1051     return true;
   1052 
   1053   default:
   1054     if (!isa<Expr>(S))
   1055       break;
   1056 
   1057     // C++1y allows expression-statements.
   1058     if (!Cxx1yLoc.isValid())
   1059       Cxx1yLoc = S->getLocStart();
   1060     return true;
   1061   }
   1062 
   1063   SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt)
   1064     << isa<CXXConstructorDecl>(Dcl);
   1065   return false;
   1066 }
   1067 
   1068 /// Check the body for the given constexpr function declaration only contains
   1069 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
   1070 ///
   1071 /// \return true if the body is OK, false if we have diagnosed a problem.
   1072 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
   1073   if (isa<CXXTryStmt>(Body)) {
   1074     // C++11 [dcl.constexpr]p3:
   1075     //  The definition of a constexpr function shall satisfy the following
   1076     //  constraints: [...]
   1077     // - its function-body shall be = delete, = default, or a
   1078     //   compound-statement
   1079     //
   1080     // C++11 [dcl.constexpr]p4:
   1081     //  In the definition of a constexpr constructor, [...]
   1082     // - its function-body shall not be a function-try-block;
   1083     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
   1084       << isa<CXXConstructorDecl>(Dcl);
   1085     return false;
   1086   }
   1087 
   1088   SmallVector<SourceLocation, 4> ReturnStmts;
   1089 
   1090   // - its function-body shall be [...] a compound-statement that contains only
   1091   //   [... list of cases ...]
   1092   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
   1093   SourceLocation Cxx1yLoc;
   1094   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
   1095          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
   1096     if (!CheckConstexprFunctionStmt(*this, Dcl, *BodyIt, ReturnStmts, Cxx1yLoc))
   1097       return false;
   1098   }
   1099 
   1100   if (Cxx1yLoc.isValid())
   1101     Diag(Cxx1yLoc,
   1102          getLangOpts().CPlusPlus1y
   1103            ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
   1104            : diag::ext_constexpr_body_invalid_stmt)
   1105       << isa<CXXConstructorDecl>(Dcl);
   1106 
   1107   if (const CXXConstructorDecl *Constructor
   1108         = dyn_cast<CXXConstructorDecl>(Dcl)) {
   1109     const CXXRecordDecl *RD = Constructor->getParent();
   1110     // DR1359:
   1111     // - every non-variant non-static data member and base class sub-object
   1112     //   shall be initialized;
   1113     // - if the class is a non-empty union, or for each non-empty anonymous
   1114     //   union member of a non-union class, exactly one non-static data member
   1115     //   shall be initialized;
   1116     if (RD->isUnion()) {
   1117       if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
   1118         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
   1119         return false;
   1120       }
   1121     } else if (!Constructor->isDependentContext() &&
   1122                !Constructor->isDelegatingConstructor()) {
   1123       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
   1124 
   1125       // Skip detailed checking if we have enough initializers, and we would
   1126       // allow at most one initializer per member.
   1127       bool AnyAnonStructUnionMembers = false;
   1128       unsigned Fields = 0;
   1129       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
   1130            E = RD->field_end(); I != E; ++I, ++Fields) {
   1131         if (I->isAnonymousStructOrUnion()) {
   1132           AnyAnonStructUnionMembers = true;
   1133           break;
   1134         }
   1135       }
   1136       if (AnyAnonStructUnionMembers ||
   1137           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
   1138         // Check initialization of non-static data members. Base classes are
   1139         // always initialized so do not need to be checked. Dependent bases
   1140         // might not have initializers in the member initializer list.
   1141         llvm::SmallSet<Decl*, 16> Inits;
   1142         for (CXXConstructorDecl::init_const_iterator
   1143                I = Constructor->init_begin(), E = Constructor->init_end();
   1144              I != E; ++I) {
   1145           if (FieldDecl *FD = (*I)->getMember())
   1146             Inits.insert(FD);
   1147           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
   1148             Inits.insert(ID->chain_begin(), ID->chain_end());
   1149         }
   1150 
   1151         bool Diagnosed = false;
   1152         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
   1153              E = RD->field_end(); I != E; ++I)
   1154           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
   1155         if (Diagnosed)
   1156           return false;
   1157       }
   1158     }
   1159   } else {
   1160     if (ReturnStmts.empty()) {
   1161       // C++1y doesn't require constexpr functions to contain a 'return'
   1162       // statement. We still do, unless the return type is void, because
   1163       // otherwise if there's no return statement, the function cannot
   1164       // be used in a core constant expression.
   1165       bool OK = getLangOpts().CPlusPlus1y && Dcl->getResultType()->isVoidType();
   1166       Diag(Dcl->getLocation(),
   1167            OK ? diag::warn_cxx11_compat_constexpr_body_no_return
   1168               : diag::err_constexpr_body_no_return);
   1169       return OK;
   1170     }
   1171     if (ReturnStmts.size() > 1) {
   1172       Diag(ReturnStmts.back(),
   1173            getLangOpts().CPlusPlus1y
   1174              ? diag::warn_cxx11_compat_constexpr_body_multiple_return
   1175              : diag::ext_constexpr_body_multiple_return);
   1176       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
   1177         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
   1178     }
   1179   }
   1180 
   1181   // C++11 [dcl.constexpr]p5:
   1182   //   if no function argument values exist such that the function invocation
   1183   //   substitution would produce a constant expression, the program is
   1184   //   ill-formed; no diagnostic required.
   1185   // C++11 [dcl.constexpr]p3:
   1186   //   - every constructor call and implicit conversion used in initializing the
   1187   //     return value shall be one of those allowed in a constant expression.
   1188   // C++11 [dcl.constexpr]p4:
   1189   //   - every constructor involved in initializing non-static data members and
   1190   //     base class sub-objects shall be a constexpr constructor.
   1191   SmallVector<PartialDiagnosticAt, 8> Diags;
   1192   if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
   1193     Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr)
   1194       << isa<CXXConstructorDecl>(Dcl);
   1195     for (size_t I = 0, N = Diags.size(); I != N; ++I)
   1196       Diag(Diags[I].first, Diags[I].second);
   1197     // Don't return false here: we allow this for compatibility in
   1198     // system headers.
   1199   }
   1200 
   1201   return true;
   1202 }
   1203 
   1204 /// isCurrentClassName - Determine whether the identifier II is the
   1205 /// name of the class type currently being defined. In the case of
   1206 /// nested classes, this will only return true if II is the name of
   1207 /// the innermost class.
   1208 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
   1209                               const CXXScopeSpec *SS) {
   1210   assert(getLangOpts().CPlusPlus && "No class names in C!");
   1211 
   1212   CXXRecordDecl *CurDecl;
   1213   if (SS && SS->isSet() && !SS->isInvalid()) {
   1214     DeclContext *DC = computeDeclContext(*SS, true);
   1215     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
   1216   } else
   1217     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
   1218 
   1219   if (CurDecl && CurDecl->getIdentifier())
   1220     return &II == CurDecl->getIdentifier();
   1221   return false;
   1222 }
   1223 
   1224 /// \brief Determine whether the given class is a base class of the given
   1225 /// class, including looking at dependent bases.
   1226 static bool findCircularInheritance(const CXXRecordDecl *Class,
   1227                                     const CXXRecordDecl *Current) {
   1228   SmallVector<const CXXRecordDecl*, 8> Queue;
   1229 
   1230   Class = Class->getCanonicalDecl();
   1231   while (true) {
   1232     for (CXXRecordDecl::base_class_const_iterator I = Current->bases_begin(),
   1233                                                   E = Current->bases_end();
   1234          I != E; ++I) {
   1235       CXXRecordDecl *Base = I->getType()->getAsCXXRecordDecl();
   1236       if (!Base)
   1237         continue;
   1238 
   1239       Base = Base->getDefinition();
   1240       if (!Base)
   1241         continue;
   1242 
   1243       if (Base->getCanonicalDecl() == Class)
   1244         return true;
   1245 
   1246       Queue.push_back(Base);
   1247     }
   1248 
   1249     if (Queue.empty())
   1250       return false;
   1251 
   1252     Current = Queue.back();
   1253     Queue.pop_back();
   1254   }
   1255 
   1256   return false;
   1257 }
   1258 
   1259 /// \brief Check the validity of a C++ base class specifier.
   1260 ///
   1261 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
   1262 /// and returns NULL otherwise.
   1263 CXXBaseSpecifier *
   1264 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
   1265                          SourceRange SpecifierRange,
   1266                          bool Virtual, AccessSpecifier Access,
   1267                          TypeSourceInfo *TInfo,
   1268                          SourceLocation EllipsisLoc) {
   1269   QualType BaseType = TInfo->getType();
   1270 
   1271   // C++ [class.union]p1:
   1272   //   A union shall not have base classes.
   1273   if (Class->isUnion()) {
   1274     Diag(Class->getLocation(), diag::err_base_clause_on_union)
   1275       << SpecifierRange;
   1276     return 0;
   1277   }
   1278 
   1279   if (EllipsisLoc.isValid() &&
   1280       !TInfo->getType()->containsUnexpandedParameterPack()) {
   1281     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   1282       << TInfo->getTypeLoc().getSourceRange();
   1283     EllipsisLoc = SourceLocation();
   1284   }
   1285 
   1286   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
   1287 
   1288   if (BaseType->isDependentType()) {
   1289     // Make sure that we don't have circular inheritance among our dependent
   1290     // bases. For non-dependent bases, the check for completeness below handles
   1291     // this.
   1292     if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
   1293       if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
   1294           ((BaseDecl = BaseDecl->getDefinition()) &&
   1295            findCircularInheritance(Class, BaseDecl))) {
   1296         Diag(BaseLoc, diag::err_circular_inheritance)
   1297           << BaseType << Context.getTypeDeclType(Class);
   1298 
   1299         if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
   1300           Diag(BaseDecl->getLocation(), diag::note_previous_decl)
   1301             << BaseType;
   1302 
   1303         return 0;
   1304       }
   1305     }
   1306 
   1307     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1308                                           Class->getTagKind() == TTK_Class,
   1309                                           Access, TInfo, EllipsisLoc);
   1310   }
   1311 
   1312   // Base specifiers must be record types.
   1313   if (!BaseType->isRecordType()) {
   1314     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
   1315     return 0;
   1316   }
   1317 
   1318   // C++ [class.union]p1:
   1319   //   A union shall not be used as a base class.
   1320   if (BaseType->isUnionType()) {
   1321     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
   1322     return 0;
   1323   }
   1324 
   1325   // C++ [class.derived]p2:
   1326   //   The class-name in a base-specifier shall not be an incompletely
   1327   //   defined class.
   1328   if (RequireCompleteType(BaseLoc, BaseType,
   1329                           diag::err_incomplete_base_class, SpecifierRange)) {
   1330     Class->setInvalidDecl();
   1331     return 0;
   1332   }
   1333 
   1334   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
   1335   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
   1336   assert(BaseDecl && "Record type has no declaration");
   1337   BaseDecl = BaseDecl->getDefinition();
   1338   assert(BaseDecl && "Base type is not incomplete, but has no definition");
   1339   CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
   1340   assert(CXXBaseDecl && "Base type is not a C++ type");
   1341 
   1342   // C++ [class]p3:
   1343   //   If a class is marked final and it appears as a base-type-specifier in
   1344   //   base-clause, the program is ill-formed.
   1345   if (CXXBaseDecl->hasAttr<FinalAttr>()) {
   1346     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
   1347       << CXXBaseDecl->getDeclName();
   1348     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
   1349       << CXXBaseDecl->getDeclName();
   1350     return 0;
   1351   }
   1352 
   1353   if (BaseDecl->isInvalidDecl())
   1354     Class->setInvalidDecl();
   1355 
   1356   // Create the base specifier.
   1357   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1358                                         Class->getTagKind() == TTK_Class,
   1359                                         Access, TInfo, EllipsisLoc);
   1360 }
   1361 
   1362 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
   1363 /// one entry in the base class list of a class specifier, for
   1364 /// example:
   1365 ///    class foo : public bar, virtual private baz {
   1366 /// 'public bar' and 'virtual private baz' are each base-specifiers.
   1367 BaseResult
   1368 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
   1369                          ParsedAttributes &Attributes,
   1370                          bool Virtual, AccessSpecifier Access,
   1371                          ParsedType basetype, SourceLocation BaseLoc,
   1372                          SourceLocation EllipsisLoc) {
   1373   if (!classdecl)
   1374     return true;
   1375 
   1376   AdjustDeclIfTemplate(classdecl);
   1377   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
   1378   if (!Class)
   1379     return true;
   1380 
   1381   // We do not support any C++11 attributes on base-specifiers yet.
   1382   // Diagnose any attributes we see.
   1383   if (!Attributes.empty()) {
   1384     for (AttributeList *Attr = Attributes.getList(); Attr;
   1385          Attr = Attr->getNext()) {
   1386       if (Attr->isInvalid() ||
   1387           Attr->getKind() == AttributeList::IgnoredAttribute)
   1388         continue;
   1389       Diag(Attr->getLoc(),
   1390            Attr->getKind() == AttributeList::UnknownAttribute
   1391              ? diag::warn_unknown_attribute_ignored
   1392              : diag::err_base_specifier_attribute)
   1393         << Attr->getName();
   1394     }
   1395   }
   1396 
   1397   TypeSourceInfo *TInfo = 0;
   1398   GetTypeFromParser(basetype, &TInfo);
   1399 
   1400   if (EllipsisLoc.isInvalid() &&
   1401       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
   1402                                       UPPC_BaseType))
   1403     return true;
   1404 
   1405   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
   1406                                                       Virtual, Access, TInfo,
   1407                                                       EllipsisLoc))
   1408     return BaseSpec;
   1409   else
   1410     Class->setInvalidDecl();
   1411 
   1412   return true;
   1413 }
   1414 
   1415 /// \brief Performs the actual work of attaching the given base class
   1416 /// specifiers to a C++ class.
   1417 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
   1418                                 unsigned NumBases) {
   1419  if (NumBases == 0)
   1420     return false;
   1421 
   1422   // Used to keep track of which base types we have already seen, so
   1423   // that we can properly diagnose redundant direct base types. Note
   1424   // that the key is always the unqualified canonical type of the base
   1425   // class.
   1426   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
   1427 
   1428   // Copy non-redundant base specifiers into permanent storage.
   1429   unsigned NumGoodBases = 0;
   1430   bool Invalid = false;
   1431   for (unsigned idx = 0; idx < NumBases; ++idx) {
   1432     QualType NewBaseType
   1433       = Context.getCanonicalType(Bases[idx]->getType());
   1434     NewBaseType = NewBaseType.getLocalUnqualifiedType();
   1435 
   1436     CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
   1437     if (KnownBase) {
   1438       // C++ [class.mi]p3:
   1439       //   A class shall not be specified as a direct base class of a
   1440       //   derived class more than once.
   1441       Diag(Bases[idx]->getLocStart(),
   1442            diag::err_duplicate_base_class)
   1443         << KnownBase->getType()
   1444         << Bases[idx]->getSourceRange();
   1445 
   1446       // Delete the duplicate base class specifier; we're going to
   1447       // overwrite its pointer later.
   1448       Context.Deallocate(Bases[idx]);
   1449 
   1450       Invalid = true;
   1451     } else {
   1452       // Okay, add this new base class.
   1453       KnownBase = Bases[idx];
   1454       Bases[NumGoodBases++] = Bases[idx];
   1455       if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
   1456         const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
   1457         if (Class->isInterface() &&
   1458               (!RD->isInterface() ||
   1459                KnownBase->getAccessSpecifier() != AS_public)) {
   1460           // The Microsoft extension __interface does not permit bases that
   1461           // are not themselves public interfaces.
   1462           Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
   1463             << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getName()
   1464             << RD->getSourceRange();
   1465           Invalid = true;
   1466         }
   1467         if (RD->hasAttr<WeakAttr>())
   1468           Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
   1469       }
   1470     }
   1471   }
   1472 
   1473   // Attach the remaining base class specifiers to the derived class.
   1474   Class->setBases(Bases, NumGoodBases);
   1475 
   1476   // Delete the remaining (good) base class specifiers, since their
   1477   // data has been copied into the CXXRecordDecl.
   1478   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
   1479     Context.Deallocate(Bases[idx]);
   1480 
   1481   return Invalid;
   1482 }
   1483 
   1484 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
   1485 /// class, after checking whether there are any duplicate base
   1486 /// classes.
   1487 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
   1488                                unsigned NumBases) {
   1489   if (!ClassDecl || !Bases || !NumBases)
   1490     return;
   1491 
   1492   AdjustDeclIfTemplate(ClassDecl);
   1493   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases, NumBases);
   1494 }
   1495 
   1496 /// \brief Determine whether the type \p Derived is a C++ class that is
   1497 /// derived from the type \p Base.
   1498 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
   1499   if (!getLangOpts().CPlusPlus)
   1500     return false;
   1501 
   1502   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
   1503   if (!DerivedRD)
   1504     return false;
   1505 
   1506   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
   1507   if (!BaseRD)
   1508     return false;
   1509 
   1510   // If either the base or the derived type is invalid, don't try to
   1511   // check whether one is derived from the other.
   1512   if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
   1513     return false;
   1514 
   1515   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
   1516   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
   1517 }
   1518 
   1519 /// \brief Determine whether the type \p Derived is a C++ class that is
   1520 /// derived from the type \p Base.
   1521 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
   1522   if (!getLangOpts().CPlusPlus)
   1523     return false;
   1524 
   1525   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
   1526   if (!DerivedRD)
   1527     return false;
   1528 
   1529   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
   1530   if (!BaseRD)
   1531     return false;
   1532 
   1533   return DerivedRD->isDerivedFrom(BaseRD, Paths);
   1534 }
   1535 
   1536 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
   1537                               CXXCastPath &BasePathArray) {
   1538   assert(BasePathArray.empty() && "Base path array must be empty!");
   1539   assert(Paths.isRecordingPaths() && "Must record paths!");
   1540 
   1541   const CXXBasePath &Path = Paths.front();
   1542 
   1543   // We first go backward and check if we have a virtual base.
   1544   // FIXME: It would be better if CXXBasePath had the base specifier for
   1545   // the nearest virtual base.
   1546   unsigned Start = 0;
   1547   for (unsigned I = Path.size(); I != 0; --I) {
   1548     if (Path[I - 1].Base->isVirtual()) {
   1549       Start = I - 1;
   1550       break;
   1551     }
   1552   }
   1553 
   1554   // Now add all bases.
   1555   for (unsigned I = Start, E = Path.size(); I != E; ++I)
   1556     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
   1557 }
   1558 
   1559 /// \brief Determine whether the given base path includes a virtual
   1560 /// base class.
   1561 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
   1562   for (CXXCastPath::const_iterator B = BasePath.begin(),
   1563                                 BEnd = BasePath.end();
   1564        B != BEnd; ++B)
   1565     if ((*B)->isVirtual())
   1566       return true;
   1567 
   1568   return false;
   1569 }
   1570 
   1571 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
   1572 /// conversion (where Derived and Base are class types) is
   1573 /// well-formed, meaning that the conversion is unambiguous (and
   1574 /// that all of the base classes are accessible). Returns true
   1575 /// and emits a diagnostic if the code is ill-formed, returns false
   1576 /// otherwise. Loc is the location where this routine should point to
   1577 /// if there is an error, and Range is the source range to highlight
   1578 /// if there is an error.
   1579 bool
   1580 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1581                                    unsigned InaccessibleBaseID,
   1582                                    unsigned AmbigiousBaseConvID,
   1583                                    SourceLocation Loc, SourceRange Range,
   1584                                    DeclarationName Name,
   1585                                    CXXCastPath *BasePath) {
   1586   // First, determine whether the path from Derived to Base is
   1587   // ambiguous. This is slightly more expensive than checking whether
   1588   // the Derived to Base conversion exists, because here we need to
   1589   // explore multiple paths to determine if there is an ambiguity.
   1590   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   1591                      /*DetectVirtual=*/false);
   1592   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
   1593   assert(DerivationOkay &&
   1594          "Can only be used with a derived-to-base conversion");
   1595   (void)DerivationOkay;
   1596 
   1597   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
   1598     if (InaccessibleBaseID) {
   1599       // Check that the base class can be accessed.
   1600       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
   1601                                    InaccessibleBaseID)) {
   1602         case AR_inaccessible:
   1603           return true;
   1604         case AR_accessible:
   1605         case AR_dependent:
   1606         case AR_delayed:
   1607           break;
   1608       }
   1609     }
   1610 
   1611     // Build a base path if necessary.
   1612     if (BasePath)
   1613       BuildBasePathArray(Paths, *BasePath);
   1614     return false;
   1615   }
   1616 
   1617   if (AmbigiousBaseConvID) {
   1618     // We know that the derived-to-base conversion is ambiguous, and
   1619     // we're going to produce a diagnostic. Perform the derived-to-base
   1620     // search just one more time to compute all of the possible paths so
   1621     // that we can print them out. This is more expensive than any of
   1622     // the previous derived-to-base checks we've done, but at this point
   1623     // performance isn't as much of an issue.
   1624     Paths.clear();
   1625     Paths.setRecordingPaths(true);
   1626     bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
   1627     assert(StillOkay && "Can only be used with a derived-to-base conversion");
   1628     (void)StillOkay;
   1629 
   1630     // Build up a textual representation of the ambiguous paths, e.g.,
   1631     // D -> B -> A, that will be used to illustrate the ambiguous
   1632     // conversions in the diagnostic. We only print one of the paths
   1633     // to each base class subobject.
   1634     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
   1635 
   1636     Diag(Loc, AmbigiousBaseConvID)
   1637     << Derived << Base << PathDisplayStr << Range << Name;
   1638   }
   1639   return true;
   1640 }
   1641 
   1642 bool
   1643 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1644                                    SourceLocation Loc, SourceRange Range,
   1645                                    CXXCastPath *BasePath,
   1646                                    bool IgnoreAccess) {
   1647   return CheckDerivedToBaseConversion(Derived, Base,
   1648                                       IgnoreAccess ? 0
   1649                                        : diag::err_upcast_to_inaccessible_base,
   1650                                       diag::err_ambiguous_derived_to_base_conv,
   1651                                       Loc, Range, DeclarationName(),
   1652                                       BasePath);
   1653 }
   1654 
   1655 
   1656 /// @brief Builds a string representing ambiguous paths from a
   1657 /// specific derived class to different subobjects of the same base
   1658 /// class.
   1659 ///
   1660 /// This function builds a string that can be used in error messages
   1661 /// to show the different paths that one can take through the
   1662 /// inheritance hierarchy to go from the derived class to different
   1663 /// subobjects of a base class. The result looks something like this:
   1664 /// @code
   1665 /// struct D -> struct B -> struct A
   1666 /// struct D -> struct C -> struct A
   1667 /// @endcode
   1668 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
   1669   std::string PathDisplayStr;
   1670   std::set<unsigned> DisplayedPaths;
   1671   for (CXXBasePaths::paths_iterator Path = Paths.begin();
   1672        Path != Paths.end(); ++Path) {
   1673     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
   1674       // We haven't displayed a path to this particular base
   1675       // class subobject yet.
   1676       PathDisplayStr += "\n    ";
   1677       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
   1678       for (CXXBasePath::const_iterator Element = Path->begin();
   1679            Element != Path->end(); ++Element)
   1680         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
   1681     }
   1682   }
   1683 
   1684   return PathDisplayStr;
   1685 }
   1686 
   1687 //===----------------------------------------------------------------------===//
   1688 // C++ class member Handling
   1689 //===----------------------------------------------------------------------===//
   1690 
   1691 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
   1692 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
   1693                                 SourceLocation ASLoc,
   1694                                 SourceLocation ColonLoc,
   1695                                 AttributeList *Attrs) {
   1696   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
   1697   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
   1698                                                   ASLoc, ColonLoc);
   1699   CurContext->addHiddenDecl(ASDecl);
   1700   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
   1701 }
   1702 
   1703 /// CheckOverrideControl - Check C++11 override control semantics.
   1704 void Sema::CheckOverrideControl(Decl *D) {
   1705   if (D->isInvalidDecl())
   1706     return;
   1707 
   1708   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
   1709 
   1710   // Do we know which functions this declaration might be overriding?
   1711   bool OverridesAreKnown = !MD ||
   1712       (!MD->getParent()->hasAnyDependentBases() &&
   1713        !MD->getType()->isDependentType());
   1714 
   1715   if (!MD || !MD->isVirtual()) {
   1716     if (OverridesAreKnown) {
   1717       if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
   1718         Diag(OA->getLocation(),
   1719              diag::override_keyword_only_allowed_on_virtual_member_functions)
   1720           << "override" << FixItHint::CreateRemoval(OA->getLocation());
   1721         D->dropAttr<OverrideAttr>();
   1722       }
   1723       if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
   1724         Diag(FA->getLocation(),
   1725              diag::override_keyword_only_allowed_on_virtual_member_functions)
   1726           << "final" << FixItHint::CreateRemoval(FA->getLocation());
   1727         D->dropAttr<FinalAttr>();
   1728       }
   1729     }
   1730     return;
   1731   }
   1732 
   1733   if (!OverridesAreKnown)
   1734     return;
   1735 
   1736   // C++11 [class.virtual]p5:
   1737   //   If a virtual function is marked with the virt-specifier override and
   1738   //   does not override a member function of a base class, the program is
   1739   //   ill-formed.
   1740   bool HasOverriddenMethods =
   1741     MD->begin_overridden_methods() != MD->end_overridden_methods();
   1742   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
   1743     Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
   1744       << MD->getDeclName();
   1745 }
   1746 
   1747 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
   1748 /// function overrides a virtual member function marked 'final', according to
   1749 /// C++11 [class.virtual]p4.
   1750 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
   1751                                                   const CXXMethodDecl *Old) {
   1752   if (!Old->hasAttr<FinalAttr>())
   1753     return false;
   1754 
   1755   Diag(New->getLocation(), diag::err_final_function_overridden)
   1756     << New->getDeclName();
   1757   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   1758   return true;
   1759 }
   1760 
   1761 static bool InitializationHasSideEffects(const FieldDecl &FD) {
   1762   const Type *T = FD.getType()->getBaseElementTypeUnsafe();
   1763   // FIXME: Destruction of ObjC lifetime types has side-effects.
   1764   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
   1765     return !RD->isCompleteDefinition() ||
   1766            !RD->hasTrivialDefaultConstructor() ||
   1767            !RD->hasTrivialDestructor();
   1768   return false;
   1769 }
   1770 
   1771 static AttributeList *getMSPropertyAttr(AttributeList *list) {
   1772   for (AttributeList* it = list; it != 0; it = it->getNext())
   1773     if (it->isDeclspecPropertyAttribute())
   1774       return it;
   1775   return 0;
   1776 }
   1777 
   1778 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
   1779 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
   1780 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
   1781 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
   1782 /// present (but parsing it has been deferred).
   1783 NamedDecl *
   1784 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
   1785                                MultiTemplateParamsArg TemplateParameterLists,
   1786                                Expr *BW, const VirtSpecifiers &VS,
   1787                                InClassInitStyle InitStyle) {
   1788   const DeclSpec &DS = D.getDeclSpec();
   1789   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   1790   DeclarationName Name = NameInfo.getName();
   1791   SourceLocation Loc = NameInfo.getLoc();
   1792 
   1793   // For anonymous bitfields, the location should point to the type.
   1794   if (Loc.isInvalid())
   1795     Loc = D.getLocStart();
   1796 
   1797   Expr *BitWidth = static_cast<Expr*>(BW);
   1798 
   1799   assert(isa<CXXRecordDecl>(CurContext));
   1800   assert(!DS.isFriendSpecified());
   1801 
   1802   bool isFunc = D.isDeclarationOfFunction();
   1803 
   1804   if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
   1805     // The Microsoft extension __interface only permits public member functions
   1806     // and prohibits constructors, destructors, operators, non-public member
   1807     // functions, static methods and data members.
   1808     unsigned InvalidDecl;
   1809     bool ShowDeclName = true;
   1810     if (!isFunc)
   1811       InvalidDecl = (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) ? 0 : 1;
   1812     else if (AS != AS_public)
   1813       InvalidDecl = 2;
   1814     else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
   1815       InvalidDecl = 3;
   1816     else switch (Name.getNameKind()) {
   1817       case DeclarationName::CXXConstructorName:
   1818         InvalidDecl = 4;
   1819         ShowDeclName = false;
   1820         break;
   1821 
   1822       case DeclarationName::CXXDestructorName:
   1823         InvalidDecl = 5;
   1824         ShowDeclName = false;
   1825         break;
   1826 
   1827       case DeclarationName::CXXOperatorName:
   1828       case DeclarationName::CXXConversionFunctionName:
   1829         InvalidDecl = 6;
   1830         break;
   1831 
   1832       default:
   1833         InvalidDecl = 0;
   1834         break;
   1835     }
   1836 
   1837     if (InvalidDecl) {
   1838       if (ShowDeclName)
   1839         Diag(Loc, diag::err_invalid_member_in_interface)
   1840           << (InvalidDecl-1) << Name;
   1841       else
   1842         Diag(Loc, diag::err_invalid_member_in_interface)
   1843           << (InvalidDecl-1) << "";
   1844       return 0;
   1845     }
   1846   }
   1847 
   1848   // C++ 9.2p6: A member shall not be declared to have automatic storage
   1849   // duration (auto, register) or with the extern storage-class-specifier.
   1850   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
   1851   // data members and cannot be applied to names declared const or static,
   1852   // and cannot be applied to reference members.
   1853   switch (DS.getStorageClassSpec()) {
   1854   case DeclSpec::SCS_unspecified:
   1855   case DeclSpec::SCS_typedef:
   1856   case DeclSpec::SCS_static:
   1857     break;
   1858   case DeclSpec::SCS_mutable:
   1859     if (isFunc) {
   1860       Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
   1861 
   1862       // FIXME: It would be nicer if the keyword was ignored only for this
   1863       // declarator. Otherwise we could get follow-up errors.
   1864       D.getMutableDeclSpec().ClearStorageClassSpecs();
   1865     }
   1866     break;
   1867   default:
   1868     Diag(DS.getStorageClassSpecLoc(),
   1869          diag::err_storageclass_invalid_for_member);
   1870     D.getMutableDeclSpec().ClearStorageClassSpecs();
   1871     break;
   1872   }
   1873 
   1874   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
   1875                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
   1876                       !isFunc);
   1877 
   1878   if (DS.isConstexprSpecified() && isInstField) {
   1879     SemaDiagnosticBuilder B =
   1880         Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
   1881     SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
   1882     if (InitStyle == ICIS_NoInit) {
   1883       B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const");
   1884       D.getMutableDeclSpec().ClearConstexprSpec();
   1885       const char *PrevSpec;
   1886       unsigned DiagID;
   1887       bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc,
   1888                                          PrevSpec, DiagID, getLangOpts());
   1889       (void)Failed;
   1890       assert(!Failed && "Making a constexpr member const shouldn't fail");
   1891     } else {
   1892       B << 1;
   1893       const char *PrevSpec;
   1894       unsigned DiagID;
   1895       if (D.getMutableDeclSpec().SetStorageClassSpec(
   1896           *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID)) {
   1897         assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
   1898                "This is the only DeclSpec that should fail to be applied");
   1899         B << 1;
   1900       } else {
   1901         B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
   1902         isInstField = false;
   1903       }
   1904     }
   1905   }
   1906 
   1907   NamedDecl *Member;
   1908   if (isInstField) {
   1909     CXXScopeSpec &SS = D.getCXXScopeSpec();
   1910 
   1911     // Data members must have identifiers for names.
   1912     if (!Name.isIdentifier()) {
   1913       Diag(Loc, diag::err_bad_variable_name)
   1914         << Name;
   1915       return 0;
   1916     }
   1917 
   1918     IdentifierInfo *II = Name.getAsIdentifierInfo();
   1919 
   1920     // Member field could not be with "template" keyword.
   1921     // So TemplateParameterLists should be empty in this case.
   1922     if (TemplateParameterLists.size()) {
   1923       TemplateParameterList* TemplateParams = TemplateParameterLists[0];
   1924       if (TemplateParams->size()) {
   1925         // There is no such thing as a member field template.
   1926         Diag(D.getIdentifierLoc(), diag::err_template_member)
   1927             << II
   1928             << SourceRange(TemplateParams->getTemplateLoc(),
   1929                 TemplateParams->getRAngleLoc());
   1930       } else {
   1931         // There is an extraneous 'template<>' for this member.
   1932         Diag(TemplateParams->getTemplateLoc(),
   1933             diag::err_template_member_noparams)
   1934             << II
   1935             << SourceRange(TemplateParams->getTemplateLoc(),
   1936                 TemplateParams->getRAngleLoc());
   1937       }
   1938       return 0;
   1939     }
   1940 
   1941     if (SS.isSet() && !SS.isInvalid()) {
   1942       // The user provided a superfluous scope specifier inside a class
   1943       // definition:
   1944       //
   1945       // class X {
   1946       //   int X::member;
   1947       // };
   1948       if (DeclContext *DC = computeDeclContext(SS, false))
   1949         diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
   1950       else
   1951         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
   1952           << Name << SS.getRange();
   1953 
   1954       SS.clear();
   1955     }
   1956 
   1957     AttributeList *MSPropertyAttr =
   1958       getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
   1959     if (MSPropertyAttr) {
   1960       Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
   1961                                 BitWidth, InitStyle, AS, MSPropertyAttr);
   1962       if (!Member)
   1963         return 0;
   1964       isInstField = false;
   1965     } else {
   1966       Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
   1967                                 BitWidth, InitStyle, AS);
   1968       assert(Member && "HandleField never returns null");
   1969     }
   1970   } else {
   1971     assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
   1972 
   1973     Member = HandleDeclarator(S, D, TemplateParameterLists);
   1974     if (!Member)
   1975       return 0;
   1976 
   1977     // Non-instance-fields can't have a bitfield.
   1978     if (BitWidth) {
   1979       if (Member->isInvalidDecl()) {
   1980         // don't emit another diagnostic.
   1981       } else if (isa<VarDecl>(Member)) {
   1982         // C++ 9.6p3: A bit-field shall not be a static member.
   1983         // "static member 'A' cannot be a bit-field"
   1984         Diag(Loc, diag::err_static_not_bitfield)
   1985           << Name << BitWidth->getSourceRange();
   1986       } else if (isa<TypedefDecl>(Member)) {
   1987         // "typedef member 'x' cannot be a bit-field"
   1988         Diag(Loc, diag::err_typedef_not_bitfield)
   1989           << Name << BitWidth->getSourceRange();
   1990       } else {
   1991         // A function typedef ("typedef int f(); f a;").
   1992         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
   1993         Diag(Loc, diag::err_not_integral_type_bitfield)
   1994           << Name << cast<ValueDecl>(Member)->getType()
   1995           << BitWidth->getSourceRange();
   1996       }
   1997 
   1998       BitWidth = 0;
   1999       Member->setInvalidDecl();
   2000     }
   2001 
   2002     Member->setAccess(AS);
   2003 
   2004     // If we have declared a member function template or static data member
   2005     // template, set the access of the templated declaration as well.
   2006     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
   2007       FunTmpl->getTemplatedDecl()->setAccess(AS);
   2008     else if (VarTemplateDecl *VarTmpl = dyn_cast<VarTemplateDecl>(Member))
   2009       VarTmpl->getTemplatedDecl()->setAccess(AS);
   2010   }
   2011 
   2012   if (VS.isOverrideSpecified())
   2013     Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
   2014   if (VS.isFinalSpecified())
   2015     Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
   2016 
   2017   if (VS.getLastLocation().isValid()) {
   2018     // Update the end location of a method that has a virt-specifiers.
   2019     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
   2020       MD->setRangeEnd(VS.getLastLocation());
   2021   }
   2022 
   2023   CheckOverrideControl(Member);
   2024 
   2025   assert((Name || isInstField) && "No identifier for non-field ?");
   2026 
   2027   if (isInstField) {
   2028     FieldDecl *FD = cast<FieldDecl>(Member);
   2029     FieldCollector->Add(FD);
   2030 
   2031     if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
   2032                                  FD->getLocation())
   2033           != DiagnosticsEngine::Ignored) {
   2034       // Remember all explicit private FieldDecls that have a name, no side
   2035       // effects and are not part of a dependent type declaration.
   2036       if (!FD->isImplicit() && FD->getDeclName() &&
   2037           FD->getAccess() == AS_private &&
   2038           !FD->hasAttr<UnusedAttr>() &&
   2039           !FD->getParent()->isDependentContext() &&
   2040           !InitializationHasSideEffects(*FD))
   2041         UnusedPrivateFields.insert(FD);
   2042     }
   2043   }
   2044 
   2045   return Member;
   2046 }
   2047 
   2048 namespace {
   2049   class UninitializedFieldVisitor
   2050       : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
   2051     Sema &S;
   2052     ValueDecl *VD;
   2053   public:
   2054     typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
   2055     UninitializedFieldVisitor(Sema &S, ValueDecl *VD) : Inherited(S.Context),
   2056                                                         S(S) {
   2057       if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(VD))
   2058         this->VD = IFD->getAnonField();
   2059       else
   2060         this->VD = VD;
   2061     }
   2062 
   2063     void HandleExpr(Expr *E) {
   2064       if (!E) return;
   2065 
   2066       // Expressions like x(x) sometimes lack the surrounding expressions
   2067       // but need to be checked anyways.
   2068       HandleValue(E);
   2069       Visit(E);
   2070     }
   2071 
   2072     void HandleValue(Expr *E) {
   2073       E = E->IgnoreParens();
   2074 
   2075       if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
   2076         if (isa<EnumConstantDecl>(ME->getMemberDecl()))
   2077           return;
   2078 
   2079         // FieldME is the inner-most MemberExpr that is not an anonymous struct
   2080         // or union.
   2081         MemberExpr *FieldME = ME;
   2082 
   2083         Expr *Base = E;
   2084         while (isa<MemberExpr>(Base)) {
   2085           ME = cast<MemberExpr>(Base);
   2086 
   2087           if (isa<VarDecl>(ME->getMemberDecl()))
   2088             return;
   2089 
   2090           if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
   2091             if (!FD->isAnonymousStructOrUnion())
   2092               FieldME = ME;
   2093 
   2094           Base = ME->getBase();
   2095         }
   2096 
   2097         if (VD == FieldME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
   2098           unsigned diag = VD->getType()->isReferenceType()
   2099               ? diag::warn_reference_field_is_uninit
   2100               : diag::warn_field_is_uninit;
   2101           S.Diag(FieldME->getExprLoc(), diag) << VD;
   2102         }
   2103         return;
   2104       }
   2105 
   2106       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
   2107         HandleValue(CO->getTrueExpr());
   2108         HandleValue(CO->getFalseExpr());
   2109         return;
   2110       }
   2111 
   2112       if (BinaryConditionalOperator *BCO =
   2113               dyn_cast<BinaryConditionalOperator>(E)) {
   2114         HandleValue(BCO->getCommon());
   2115         HandleValue(BCO->getFalseExpr());
   2116         return;
   2117       }
   2118 
   2119       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
   2120         switch (BO->getOpcode()) {
   2121         default:
   2122           return;
   2123         case(BO_PtrMemD):
   2124         case(BO_PtrMemI):
   2125           HandleValue(BO->getLHS());
   2126           return;
   2127         case(BO_Comma):
   2128           HandleValue(BO->getRHS());
   2129           return;
   2130         }
   2131       }
   2132     }
   2133 
   2134     void VisitImplicitCastExpr(ImplicitCastExpr *E) {
   2135       if (E->getCastKind() == CK_LValueToRValue)
   2136         HandleValue(E->getSubExpr());
   2137 
   2138       Inherited::VisitImplicitCastExpr(E);
   2139     }
   2140 
   2141     void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
   2142       Expr *Callee = E->getCallee();
   2143       if (isa<MemberExpr>(Callee))
   2144         HandleValue(Callee);
   2145 
   2146       Inherited::VisitCXXMemberCallExpr(E);
   2147     }
   2148   };
   2149   static void CheckInitExprContainsUninitializedFields(Sema &S, Expr *E,
   2150                                                        ValueDecl *VD) {
   2151     UninitializedFieldVisitor(S, VD).HandleExpr(E);
   2152   }
   2153 } // namespace
   2154 
   2155 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
   2156 /// in-class initializer for a non-static C++ class member, and after
   2157 /// instantiating an in-class initializer in a class template. Such actions
   2158 /// are deferred until the class is complete.
   2159 void
   2160 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
   2161                                        Expr *InitExpr) {
   2162   FieldDecl *FD = cast<FieldDecl>(D);
   2163   assert(FD->getInClassInitStyle() != ICIS_NoInit &&
   2164          "must set init style when field is created");
   2165 
   2166   if (!InitExpr) {
   2167     FD->setInvalidDecl();
   2168     FD->removeInClassInitializer();
   2169     return;
   2170   }
   2171 
   2172   if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
   2173     FD->setInvalidDecl();
   2174     FD->removeInClassInitializer();
   2175     return;
   2176   }
   2177 
   2178   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, InitLoc)
   2179       != DiagnosticsEngine::Ignored) {
   2180     CheckInitExprContainsUninitializedFields(*this, InitExpr, FD);
   2181   }
   2182 
   2183   ExprResult Init = InitExpr;
   2184   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
   2185     InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
   2186     InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
   2187         ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
   2188         : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
   2189     InitializationSequence Seq(*this, Entity, Kind, InitExpr);
   2190     Init = Seq.Perform(*this, Entity, Kind, InitExpr);
   2191     if (Init.isInvalid()) {
   2192       FD->setInvalidDecl();
   2193       return;
   2194     }
   2195   }
   2196 
   2197   // C++11 [class.base.init]p7:
   2198   //   The initialization of each base and member constitutes a
   2199   //   full-expression.
   2200   Init = ActOnFinishFullExpr(Init.take(), InitLoc);
   2201   if (Init.isInvalid()) {
   2202     FD->setInvalidDecl();
   2203     return;
   2204   }
   2205 
   2206   InitExpr = Init.release();
   2207 
   2208   FD->setInClassInitializer(InitExpr);
   2209 }
   2210 
   2211 /// \brief Find the direct and/or virtual base specifiers that
   2212 /// correspond to the given base type, for use in base initialization
   2213 /// within a constructor.
   2214 static bool FindBaseInitializer(Sema &SemaRef,
   2215                                 CXXRecordDecl *ClassDecl,
   2216                                 QualType BaseType,
   2217                                 const CXXBaseSpecifier *&DirectBaseSpec,
   2218                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
   2219   // First, check for a direct base class.
   2220   DirectBaseSpec = 0;
   2221   for (CXXRecordDecl::base_class_const_iterator Base
   2222          = ClassDecl->bases_begin();
   2223        Base != ClassDecl->bases_end(); ++Base) {
   2224     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
   2225       // We found a direct base of this type. That's what we're
   2226       // initializing.
   2227       DirectBaseSpec = &*Base;
   2228       break;
   2229     }
   2230   }
   2231 
   2232   // Check for a virtual base class.
   2233   // FIXME: We might be able to short-circuit this if we know in advance that
   2234   // there are no virtual bases.
   2235   VirtualBaseSpec = 0;
   2236   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
   2237     // We haven't found a base yet; search the class hierarchy for a
   2238     // virtual base class.
   2239     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   2240                        /*DetectVirtual=*/false);
   2241     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
   2242                               BaseType, Paths)) {
   2243       for (CXXBasePaths::paths_iterator Path = Paths.begin();
   2244            Path != Paths.end(); ++Path) {
   2245         if (Path->back().Base->isVirtual()) {
   2246           VirtualBaseSpec = Path->back().Base;
   2247           break;
   2248         }
   2249       }
   2250     }
   2251   }
   2252 
   2253   return DirectBaseSpec || VirtualBaseSpec;
   2254 }
   2255 
   2256 /// \brief Handle a C++ member initializer using braced-init-list syntax.
   2257 MemInitResult
   2258 Sema::ActOnMemInitializer(Decl *ConstructorD,
   2259                           Scope *S,
   2260                           CXXScopeSpec &SS,
   2261                           IdentifierInfo *MemberOrBase,
   2262                           ParsedType TemplateTypeTy,
   2263                           const DeclSpec &DS,
   2264                           SourceLocation IdLoc,
   2265                           Expr *InitList,
   2266                           SourceLocation EllipsisLoc) {
   2267   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   2268                              DS, IdLoc, InitList,
   2269                              EllipsisLoc);
   2270 }
   2271 
   2272 /// \brief Handle a C++ member initializer using parentheses syntax.
   2273 MemInitResult
   2274 Sema::ActOnMemInitializer(Decl *ConstructorD,
   2275                           Scope *S,
   2276                           CXXScopeSpec &SS,
   2277                           IdentifierInfo *MemberOrBase,
   2278                           ParsedType TemplateTypeTy,
   2279                           const DeclSpec &DS,
   2280                           SourceLocation IdLoc,
   2281                           SourceLocation LParenLoc,
   2282                           ArrayRef<Expr *> Args,
   2283                           SourceLocation RParenLoc,
   2284                           SourceLocation EllipsisLoc) {
   2285   Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
   2286                                            Args, RParenLoc);
   2287   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   2288                              DS, IdLoc, List, EllipsisLoc);
   2289 }
   2290 
   2291 namespace {
   2292 
   2293 // Callback to only accept typo corrections that can be a valid C++ member
   2294 // intializer: either a non-static field member or a base class.
   2295 class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
   2296 public:
   2297   explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
   2298       : ClassDecl(ClassDecl) {}
   2299 
   2300   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
   2301     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
   2302       if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
   2303         return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
   2304       return isa<TypeDecl>(ND);
   2305     }
   2306     return false;
   2307   }
   2308 
   2309 private:
   2310   CXXRecordDecl *ClassDecl;
   2311 };
   2312 
   2313 }
   2314 
   2315 /// \brief Handle a C++ member initializer.
   2316 MemInitResult
   2317 Sema::BuildMemInitializer(Decl *ConstructorD,
   2318                           Scope *S,
   2319                           CXXScopeSpec &SS,
   2320                           IdentifierInfo *MemberOrBase,
   2321                           ParsedType TemplateTypeTy,
   2322                           const DeclSpec &DS,
   2323                           SourceLocation IdLoc,
   2324                           Expr *Init,
   2325                           SourceLocation EllipsisLoc) {
   2326   if (!ConstructorD)
   2327     return true;
   2328 
   2329   AdjustDeclIfTemplate(ConstructorD);
   2330 
   2331   CXXConstructorDecl *Constructor
   2332     = dyn_cast<CXXConstructorDecl>(ConstructorD);
   2333   if (!Constructor) {
   2334     // The user wrote a constructor initializer on a function that is
   2335     // not a C++ constructor. Ignore the error for now, because we may
   2336     // have more member initializers coming; we'll diagnose it just
   2337     // once in ActOnMemInitializers.
   2338     return true;
   2339   }
   2340 
   2341   CXXRecordDecl *ClassDecl = Constructor->getParent();
   2342 
   2343   // C++ [class.base.init]p2:
   2344   //   Names in a mem-initializer-id are looked up in the scope of the
   2345   //   constructor's class and, if not found in that scope, are looked
   2346   //   up in the scope containing the constructor's definition.
   2347   //   [Note: if the constructor's class contains a member with the
   2348   //   same name as a direct or virtual base class of the class, a
   2349   //   mem-initializer-id naming the member or base class and composed
   2350   //   of a single identifier refers to the class member. A
   2351   //   mem-initializer-id for the hidden base class may be specified
   2352   //   using a qualified name. ]
   2353   if (!SS.getScopeRep() && !TemplateTypeTy) {
   2354     // Look for a member, first.
   2355     DeclContext::lookup_result Result
   2356       = ClassDecl->lookup(MemberOrBase);
   2357     if (!Result.empty()) {
   2358       ValueDecl *Member;
   2359       if ((Member = dyn_cast<FieldDecl>(Result.front())) ||
   2360           (Member = dyn_cast<IndirectFieldDecl>(Result.front()))) {
   2361         if (EllipsisLoc.isValid())
   2362           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
   2363             << MemberOrBase
   2364             << SourceRange(IdLoc, Init->getSourceRange().getEnd());
   2365 
   2366         return BuildMemberInitializer(Member, Init, IdLoc);
   2367       }
   2368     }
   2369   }
   2370   // It didn't name a member, so see if it names a class.
   2371   QualType BaseType;
   2372   TypeSourceInfo *TInfo = 0;
   2373 
   2374   if (TemplateTypeTy) {
   2375     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
   2376   } else if (DS.getTypeSpecType() == TST_decltype) {
   2377     BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
   2378   } else {
   2379     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
   2380     LookupParsedName(R, S, &SS);
   2381 
   2382     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
   2383     if (!TyD) {
   2384       if (R.isAmbiguous()) return true;
   2385 
   2386       // We don't want access-control diagnostics here.
   2387       R.suppressDiagnostics();
   2388 
   2389       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
   2390         bool NotUnknownSpecialization = false;
   2391         DeclContext *DC = computeDeclContext(SS, false);
   2392         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
   2393           NotUnknownSpecialization = !Record->hasAnyDependentBases();
   2394 
   2395         if (!NotUnknownSpecialization) {
   2396           // When the scope specifier can refer to a member of an unknown
   2397           // specialization, we take it as a type name.
   2398           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
   2399                                        SS.getWithLocInContext(Context),
   2400                                        *MemberOrBase, IdLoc);
   2401           if (BaseType.isNull())
   2402             return true;
   2403 
   2404           R.clear();
   2405           R.setLookupName(MemberOrBase);
   2406         }
   2407       }
   2408 
   2409       // If no results were found, try to correct typos.
   2410       TypoCorrection Corr;
   2411       MemInitializerValidatorCCC Validator(ClassDecl);
   2412       if (R.empty() && BaseType.isNull() &&
   2413           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
   2414                               Validator, ClassDecl))) {
   2415         std::string CorrectedStr(Corr.getAsString(getLangOpts()));
   2416         std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
   2417         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
   2418           // We have found a non-static data member with a similar
   2419           // name to what was typed; complain and initialize that
   2420           // member.
   2421           Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   2422             << MemberOrBase << true << CorrectedQuotedStr
   2423             << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   2424           Diag(Member->getLocation(), diag::note_previous_decl)
   2425             << CorrectedQuotedStr;
   2426 
   2427           return BuildMemberInitializer(Member, Init, IdLoc);
   2428         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
   2429           const CXXBaseSpecifier *DirectBaseSpec;
   2430           const CXXBaseSpecifier *VirtualBaseSpec;
   2431           if (FindBaseInitializer(*this, ClassDecl,
   2432                                   Context.getTypeDeclType(Type),
   2433                                   DirectBaseSpec, VirtualBaseSpec)) {
   2434             // We have found a direct or virtual base class with a
   2435             // similar name to what was typed; complain and initialize
   2436             // that base class.
   2437             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   2438               << MemberOrBase << false << CorrectedQuotedStr
   2439               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   2440 
   2441             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
   2442                                                              : VirtualBaseSpec;
   2443             Diag(BaseSpec->getLocStart(),
   2444                  diag::note_base_class_specified_here)
   2445               << BaseSpec->getType()
   2446               << BaseSpec->getSourceRange();
   2447 
   2448             TyD = Type;
   2449           }
   2450         }
   2451       }
   2452 
   2453       if (!TyD && BaseType.isNull()) {
   2454         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
   2455           << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
   2456         return true;
   2457       }
   2458     }
   2459 
   2460     if (BaseType.isNull()) {
   2461       BaseType = Context.getTypeDeclType(TyD);
   2462       if (SS.isSet()) {
   2463         NestedNameSpecifier *Qualifier =
   2464           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   2465 
   2466         // FIXME: preserve source range information
   2467         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
   2468       }
   2469     }
   2470   }
   2471 
   2472   if (!TInfo)
   2473     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
   2474 
   2475   return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
   2476 }
   2477 
   2478 /// Checks a member initializer expression for cases where reference (or
   2479 /// pointer) members are bound to by-value parameters (or their addresses).
   2480 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
   2481                                                Expr *Init,
   2482                                                SourceLocation IdLoc) {
   2483   QualType MemberTy = Member->getType();
   2484 
   2485   // We only handle pointers and references currently.
   2486   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
   2487   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
   2488     return;
   2489 
   2490   const bool IsPointer = MemberTy->isPointerType();
   2491   if (IsPointer) {
   2492     if (const UnaryOperator *Op
   2493           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
   2494       // The only case we're worried about with pointers requires taking the
   2495       // address.
   2496       if (Op->getOpcode() != UO_AddrOf)
   2497         return;
   2498 
   2499       Init = Op->getSubExpr();
   2500     } else {
   2501       // We only handle address-of expression initializers for pointers.
   2502       return;
   2503     }
   2504   }
   2505 
   2506   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
   2507     // We only warn when referring to a non-reference parameter declaration.
   2508     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
   2509     if (!Parameter || Parameter->getType()->isReferenceType())
   2510       return;
   2511 
   2512     S.Diag(Init->getExprLoc(),
   2513            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
   2514                      : diag::warn_bind_ref_member_to_parameter)
   2515       << Member << Parameter << Init->getSourceRange();
   2516   } else {
   2517     // Other initializers are fine.
   2518     return;
   2519   }
   2520 
   2521   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
   2522     << (unsigned)IsPointer;
   2523 }
   2524 
   2525 MemInitResult
   2526 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
   2527                              SourceLocation IdLoc) {
   2528   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
   2529   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
   2530   assert((DirectMember || IndirectMember) &&
   2531          "Member must be a FieldDecl or IndirectFieldDecl");
   2532 
   2533   if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
   2534     return true;
   2535 
   2536   if (Member->isInvalidDecl())
   2537     return true;
   2538 
   2539   // Diagnose value-uses of fields to initialize themselves, e.g.
   2540   //   foo(foo)
   2541   // where foo is not also a parameter to the constructor.
   2542   // TODO: implement -Wuninitialized and fold this into that framework.
   2543   MultiExprArg Args;
   2544   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2545     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
   2546   } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
   2547     Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
   2548   } else {
   2549     // Template instantiation doesn't reconstruct ParenListExprs for us.
   2550     Args = Init;
   2551   }
   2552 
   2553   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, IdLoc)
   2554         != DiagnosticsEngine::Ignored)
   2555     for (unsigned i = 0, e = Args.size(); i != e; ++i)
   2556       // FIXME: Warn about the case when other fields are used before being
   2557       // initialized. For example, let this field be the i'th field. When
   2558       // initializing the i'th field, throw a warning if any of the >= i'th
   2559       // fields are used, as they are not yet initialized.
   2560       // Right now we are only handling the case where the i'th field uses
   2561       // itself in its initializer.
   2562       // Also need to take into account that some fields may be initialized by
   2563       // in-class initializers, see C++11 [class.base.init]p9.
   2564       CheckInitExprContainsUninitializedFields(*this, Args[i], Member);
   2565 
   2566   SourceRange InitRange = Init->getSourceRange();
   2567 
   2568   if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
   2569     // Can't check initialization for a member of dependent type or when
   2570     // any of the arguments are type-dependent expressions.
   2571     DiscardCleanupsInEvaluationContext();
   2572   } else {
   2573     bool InitList = false;
   2574     if (isa<InitListExpr>(Init)) {
   2575       InitList = true;
   2576       Args = Init;
   2577     }
   2578 
   2579     // Initialize the member.
   2580     InitializedEntity MemberEntity =
   2581       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
   2582                    : InitializedEntity::InitializeMember(IndirectMember, 0);
   2583     InitializationKind Kind =
   2584       InitList ? InitializationKind::CreateDirectList(IdLoc)
   2585                : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
   2586                                                   InitRange.getEnd());
   2587 
   2588     InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
   2589     ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 0);
   2590     if (MemberInit.isInvalid())
   2591       return true;
   2592 
   2593     CheckForDanglingReferenceOrPointer(*this, Member, MemberInit.get(), IdLoc);
   2594 
   2595     // C++11 [class.base.init]p7:
   2596     //   The initialization of each base and member constitutes a
   2597     //   full-expression.
   2598     MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin());
   2599     if (MemberInit.isInvalid())
   2600       return true;
   2601 
   2602     Init = MemberInit.get();
   2603   }
   2604 
   2605   if (DirectMember) {
   2606     return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
   2607                                             InitRange.getBegin(), Init,
   2608                                             InitRange.getEnd());
   2609   } else {
   2610     return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
   2611                                             InitRange.getBegin(), Init,
   2612                                             InitRange.getEnd());
   2613   }
   2614 }
   2615 
   2616 MemInitResult
   2617 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
   2618                                  CXXRecordDecl *ClassDecl) {
   2619   SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2620   if (!LangOpts.CPlusPlus11)
   2621     return Diag(NameLoc, diag::err_delegating_ctor)
   2622       << TInfo->getTypeLoc().getLocalSourceRange();
   2623   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
   2624 
   2625   bool InitList = true;
   2626   MultiExprArg Args = Init;
   2627   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2628     InitList = false;
   2629     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
   2630   }
   2631 
   2632   SourceRange InitRange = Init->getSourceRange();
   2633   // Initialize the object.
   2634   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
   2635                                      QualType(ClassDecl->getTypeForDecl(), 0));
   2636   InitializationKind Kind =
   2637     InitList ? InitializationKind::CreateDirectList(NameLoc)
   2638              : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
   2639                                                 InitRange.getEnd());
   2640   InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
   2641   ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
   2642                                               Args, 0);
   2643   if (DelegationInit.isInvalid())
   2644     return true;
   2645 
   2646   assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
   2647          "Delegating constructor with no target?");
   2648 
   2649   // C++11 [class.base.init]p7:
   2650   //   The initialization of each base and member constitutes a
   2651   //   full-expression.
   2652   DelegationInit = ActOnFinishFullExpr(DelegationInit.get(),
   2653                                        InitRange.getBegin());
   2654   if (DelegationInit.isInvalid())
   2655     return true;
   2656 
   2657   // If we are in a dependent context, template instantiation will
   2658   // perform this type-checking again. Just save the arguments that we
   2659   // received in a ParenListExpr.
   2660   // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2661   // of the information that we have about the base
   2662   // initializer. However, deconstructing the ASTs is a dicey process,
   2663   // and this approach is far more likely to get the corner cases right.
   2664   if (CurContext->isDependentContext())
   2665     DelegationInit = Owned(Init);
   2666 
   2667   return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
   2668                                           DelegationInit.takeAs<Expr>(),
   2669                                           InitRange.getEnd());
   2670 }
   2671 
   2672 MemInitResult
   2673 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
   2674                            Expr *Init, CXXRecordDecl *ClassDecl,
   2675                            SourceLocation EllipsisLoc) {
   2676   SourceLocation BaseLoc
   2677     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2678 
   2679   if (!BaseType->isDependentType() && !BaseType->isRecordType())
   2680     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
   2681              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2682 
   2683   // C++ [class.base.init]p2:
   2684   //   [...] Unless the mem-initializer-id names a nonstatic data
   2685   //   member of the constructor's class or a direct or virtual base
   2686   //   of that class, the mem-initializer is ill-formed. A
   2687   //   mem-initializer-list can initialize a base class using any
   2688   //   name that denotes that base class type.
   2689   bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
   2690 
   2691   SourceRange InitRange = Init->getSourceRange();
   2692   if (EllipsisLoc.isValid()) {
   2693     // This is a pack expansion.
   2694     if (!BaseType->containsUnexpandedParameterPack())  {
   2695       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   2696         << SourceRange(BaseLoc, InitRange.getEnd());
   2697 
   2698       EllipsisLoc = SourceLocation();
   2699     }
   2700   } else {
   2701     // Check for any unexpanded parameter packs.
   2702     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
   2703       return true;
   2704 
   2705     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
   2706       return true;
   2707   }
   2708 
   2709   // Check for direct and virtual base classes.
   2710   const CXXBaseSpecifier *DirectBaseSpec = 0;
   2711   const CXXBaseSpecifier *VirtualBaseSpec = 0;
   2712   if (!Dependent) {
   2713     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
   2714                                        BaseType))
   2715       return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
   2716 
   2717     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
   2718                         VirtualBaseSpec);
   2719 
   2720     // C++ [base.class.init]p2:
   2721     // Unless the mem-initializer-id names a nonstatic data member of the
   2722     // constructor's class or a direct or virtual base of that class, the
   2723     // mem-initializer is ill-formed.
   2724     if (!DirectBaseSpec && !VirtualBaseSpec) {
   2725       // If the class has any dependent bases, then it's possible that
   2726       // one of those types will resolve to the same type as
   2727       // BaseType. Therefore, just treat this as a dependent base
   2728       // class initialization.  FIXME: Should we try to check the
   2729       // initialization anyway? It seems odd.
   2730       if (ClassDecl->hasAnyDependentBases())
   2731         Dependent = true;
   2732       else
   2733         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
   2734           << BaseType << Context.getTypeDeclType(ClassDecl)
   2735           << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2736     }
   2737   }
   2738 
   2739   if (Dependent) {
   2740     DiscardCleanupsInEvaluationContext();
   2741 
   2742     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2743                                             /*IsVirtual=*/false,
   2744                                             InitRange.getBegin(), Init,
   2745                                             InitRange.getEnd(), EllipsisLoc);
   2746   }
   2747 
   2748   // C++ [base.class.init]p2:
   2749   //   If a mem-initializer-id is ambiguous because it designates both
   2750   //   a direct non-virtual base class and an inherited virtual base
   2751   //   class, the mem-initializer is ill-formed.
   2752   if (DirectBaseSpec && VirtualBaseSpec)
   2753     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
   2754       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2755 
   2756   const CXXBaseSpecifier *BaseSpec = DirectBaseSpec;
   2757   if (!BaseSpec)
   2758     BaseSpec = VirtualBaseSpec;
   2759 
   2760   // Initialize the base.
   2761   bool InitList = true;
   2762   MultiExprArg Args = Init;
   2763   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2764     InitList = false;
   2765     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
   2766   }
   2767 
   2768   InitializedEntity BaseEntity =
   2769     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
   2770   InitializationKind Kind =
   2771     InitList ? InitializationKind::CreateDirectList(BaseLoc)
   2772              : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
   2773                                                 InitRange.getEnd());
   2774   InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
   2775   ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, 0);
   2776   if (BaseInit.isInvalid())
   2777     return true;
   2778 
   2779   // C++11 [class.base.init]p7:
   2780   //   The initialization of each base and member constitutes a
   2781   //   full-expression.
   2782   BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin());
   2783   if (BaseInit.isInvalid())
   2784     return true;
   2785 
   2786   // If we are in a dependent context, template instantiation will
   2787   // perform this type-checking again. Just save the arguments that we
   2788   // received in a ParenListExpr.
   2789   // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2790   // of the information that we have about the base
   2791   // initializer. However, deconstructing the ASTs is a dicey process,
   2792   // and this approach is far more likely to get the corner cases right.
   2793   if (CurContext->isDependentContext())
   2794     BaseInit = Owned(Init);
   2795 
   2796   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2797                                           BaseSpec->isVirtual(),
   2798                                           InitRange.getBegin(),
   2799                                           BaseInit.takeAs<Expr>(),
   2800                                           InitRange.getEnd(), EllipsisLoc);
   2801 }
   2802 
   2803 // Create a static_cast\<T&&>(expr).
   2804 static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) {
   2805   if (T.isNull()) T = E->getType();
   2806   QualType TargetType = SemaRef.BuildReferenceType(
   2807       T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName());
   2808   SourceLocation ExprLoc = E->getLocStart();
   2809   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
   2810       TargetType, ExprLoc);
   2811 
   2812   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
   2813                                    SourceRange(ExprLoc, ExprLoc),
   2814                                    E->getSourceRange()).take();
   2815 }
   2816 
   2817 /// ImplicitInitializerKind - How an implicit base or member initializer should
   2818 /// initialize its base or member.
   2819 enum ImplicitInitializerKind {
   2820   IIK_Default,
   2821   IIK_Copy,
   2822   IIK_Move,
   2823   IIK_Inherit
   2824 };
   2825 
   2826 static bool
   2827 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2828                              ImplicitInitializerKind ImplicitInitKind,
   2829                              CXXBaseSpecifier *BaseSpec,
   2830                              bool IsInheritedVirtualBase,
   2831                              CXXCtorInitializer *&CXXBaseInit) {
   2832   InitializedEntity InitEntity
   2833     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
   2834                                         IsInheritedVirtualBase);
   2835 
   2836   ExprResult BaseInit;
   2837 
   2838   switch (ImplicitInitKind) {
   2839   case IIK_Inherit: {
   2840     const CXXRecordDecl *Inherited =
   2841         Constructor->getInheritedConstructor()->getParent();
   2842     const CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
   2843     if (Base && Inherited->getCanonicalDecl() == Base->getCanonicalDecl()) {
   2844       // C++11 [class.inhctor]p8:
   2845       //   Each expression in the expression-list is of the form
   2846       //   static_cast<T&&>(p), where p is the name of the corresponding
   2847       //   constructor parameter and T is the declared type of p.
   2848       SmallVector<Expr*, 16> Args;
   2849       for (unsigned I = 0, E = Constructor->getNumParams(); I != E; ++I) {
   2850         ParmVarDecl *PD = Constructor->getParamDecl(I);
   2851         ExprResult ArgExpr =
   2852             SemaRef.BuildDeclRefExpr(PD, PD->getType().getNonReferenceType(),
   2853                                      VK_LValue, SourceLocation());
   2854         if (ArgExpr.isInvalid())
   2855           return true;
   2856         Args.push_back(CastForMoving(SemaRef, ArgExpr.take(), PD->getType()));
   2857       }
   2858 
   2859       InitializationKind InitKind = InitializationKind::CreateDirect(
   2860           Constructor->getLocation(), SourceLocation(), SourceLocation());
   2861       InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, Args);
   2862       BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, Args);
   2863       break;
   2864     }
   2865   }
   2866   // Fall through.
   2867   case IIK_Default: {
   2868     InitializationKind InitKind
   2869       = InitializationKind::CreateDefault(Constructor->getLocation());
   2870     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
   2871     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
   2872     break;
   2873   }
   2874 
   2875   case IIK_Move:
   2876   case IIK_Copy: {
   2877     bool Moving = ImplicitInitKind == IIK_Move;
   2878     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2879     QualType ParamType = Param->getType().getNonReferenceType();
   2880 
   2881     Expr *CopyCtorArg =
   2882       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
   2883                           SourceLocation(), Param, false,
   2884                           Constructor->getLocation(), ParamType,
   2885                           VK_LValue, 0);
   2886 
   2887     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
   2888 
   2889     // Cast to the base class to avoid ambiguities.
   2890     QualType ArgTy =
   2891       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
   2892                                        ParamType.getQualifiers());
   2893 
   2894     if (Moving) {
   2895       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
   2896     }
   2897 
   2898     CXXCastPath BasePath;
   2899     BasePath.push_back(BaseSpec);
   2900     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
   2901                                             CK_UncheckedDerivedToBase,
   2902                                             Moving ? VK_XValue : VK_LValue,
   2903                                             &BasePath).take();
   2904 
   2905     InitializationKind InitKind
   2906       = InitializationKind::CreateDirect(Constructor->getLocation(),
   2907                                          SourceLocation(), SourceLocation());
   2908     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
   2909     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
   2910     break;
   2911   }
   2912   }
   2913 
   2914   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
   2915   if (BaseInit.isInvalid())
   2916     return true;
   2917 
   2918   CXXBaseInit =
   2919     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2920                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
   2921                                                         SourceLocation()),
   2922                                              BaseSpec->isVirtual(),
   2923                                              SourceLocation(),
   2924                                              BaseInit.takeAs<Expr>(),
   2925                                              SourceLocation(),
   2926                                              SourceLocation());
   2927 
   2928   return false;
   2929 }
   2930 
   2931 static bool RefersToRValueRef(Expr *MemRef) {
   2932   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
   2933   return Referenced->getType()->isRValueReferenceType();
   2934 }
   2935 
   2936 static bool
   2937 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2938                                ImplicitInitializerKind ImplicitInitKind,
   2939                                FieldDecl *Field, IndirectFieldDecl *Indirect,
   2940                                CXXCtorInitializer *&CXXMemberInit) {
   2941   if (Field->isInvalidDecl())
   2942     return true;
   2943 
   2944   SourceLocation Loc = Constructor->getLocation();
   2945 
   2946   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
   2947     bool Moving = ImplicitInitKind == IIK_Move;
   2948     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2949     QualType ParamType = Param->getType().getNonReferenceType();
   2950 
   2951     // Suppress copying zero-width bitfields.
   2952     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
   2953       return false;
   2954 
   2955     Expr *MemberExprBase =
   2956       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
   2957                           SourceLocation(), Param, false,
   2958                           Loc, ParamType, VK_LValue, 0);
   2959 
   2960     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
   2961 
   2962     if (Moving) {
   2963       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
   2964     }
   2965 
   2966     // Build a reference to this field within the parameter.
   2967     CXXScopeSpec SS;
   2968     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
   2969                               Sema::LookupMemberName);
   2970     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
   2971                                   : cast<ValueDecl>(Field), AS_public);
   2972     MemberLookup.resolveKind();
   2973     ExprResult CtorArg
   2974       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
   2975                                          ParamType, Loc,
   2976                                          /*IsArrow=*/false,
   2977                                          SS,
   2978                                          /*TemplateKWLoc=*/SourceLocation(),
   2979                                          /*FirstQualifierInScope=*/0,
   2980                                          MemberLookup,
   2981                                          /*TemplateArgs=*/0);
   2982     if (CtorArg.isInvalid())
   2983       return true;
   2984 
   2985     // C++11 [class.copy]p15:
   2986     //   - if a member m has rvalue reference type T&&, it is direct-initialized
   2987     //     with static_cast<T&&>(x.m);
   2988     if (RefersToRValueRef(CtorArg.get())) {
   2989       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   2990     }
   2991 
   2992     // When the field we are copying is an array, create index variables for
   2993     // each dimension of the array. We use these index variables to subscript
   2994     // the source array, and other clients (e.g., CodeGen) will perform the
   2995     // necessary iteration with these index variables.
   2996     SmallVector<VarDecl *, 4> IndexVariables;
   2997     QualType BaseType = Field->getType();
   2998     QualType SizeType = SemaRef.Context.getSizeType();
   2999     bool InitializingArray = false;
   3000     while (const ConstantArrayType *Array
   3001                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
   3002       InitializingArray = true;
   3003       // Create the iteration variable for this array index.
   3004       IdentifierInfo *IterationVarName = 0;
   3005       {
   3006         SmallString<8> Str;
   3007         llvm::raw_svector_ostream OS(Str);
   3008         OS << "__i" << IndexVariables.size();
   3009         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
   3010       }
   3011       VarDecl *IterationVar
   3012         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
   3013                           IterationVarName, SizeType,
   3014                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   3015                           SC_None);
   3016       IndexVariables.push_back(IterationVar);
   3017 
   3018       // Create a reference to the iteration variable.
   3019       ExprResult IterationVarRef
   3020         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
   3021       assert(!IterationVarRef.isInvalid() &&
   3022              "Reference to invented variable cannot fail!");
   3023       IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
   3024       assert(!IterationVarRef.isInvalid() &&
   3025              "Conversion of invented variable cannot fail!");
   3026 
   3027       // Subscript the array with this iteration variable.
   3028       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
   3029                                                         IterationVarRef.take(),
   3030                                                         Loc);
   3031       if (CtorArg.isInvalid())
   3032         return true;
   3033 
   3034       BaseType = Array->getElementType();
   3035     }
   3036 
   3037     // The array subscript expression is an lvalue, which is wrong for moving.
   3038     if (Moving && InitializingArray)
   3039       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   3040 
   3041     // Construct the entity that we will be initializing. For an array, this
   3042     // will be first element in the array, which may require several levels
   3043     // of array-subscript entities.
   3044     SmallVector<InitializedEntity, 4> Entities;
   3045     Entities.reserve(1 + IndexVariables.size());
   3046     if (Indirect)
   3047       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
   3048     else
   3049       Entities.push_back(InitializedEntity::InitializeMember(Field));
   3050     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
   3051       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
   3052                                                               0,
   3053                                                               Entities.back()));
   3054 
   3055     // Direct-initialize to use the copy constructor.
   3056     InitializationKind InitKind =
   3057       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
   3058 
   3059     Expr *CtorArgE = CtorArg.takeAs<Expr>();
   3060     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind, CtorArgE);
   3061 
   3062     ExprResult MemberInit
   3063       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
   3064                         MultiExprArg(&CtorArgE, 1));
   3065     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   3066     if (MemberInit.isInvalid())
   3067       return true;
   3068 
   3069     if (Indirect) {
   3070       assert(IndexVariables.size() == 0 &&
   3071              "Indirect field improperly initialized");
   3072       CXXMemberInit
   3073         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   3074                                                    Loc, Loc,
   3075                                                    MemberInit.takeAs<Expr>(),
   3076                                                    Loc);
   3077     } else
   3078       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
   3079                                                  Loc, MemberInit.takeAs<Expr>(),
   3080                                                  Loc,
   3081                                                  IndexVariables.data(),
   3082                                                  IndexVariables.size());
   3083     return false;
   3084   }
   3085 
   3086   assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
   3087          "Unhandled implicit init kind!");
   3088 
   3089   QualType FieldBaseElementType =
   3090     SemaRef.Context.getBaseElementType(Field->getType());
   3091 
   3092   if (FieldBaseElementType->isRecordType()) {
   3093     InitializedEntity InitEntity
   3094       = Indirect? InitializedEntity::InitializeMember(Indirect)
   3095                 : InitializedEntity::InitializeMember(Field);
   3096     InitializationKind InitKind =
   3097       InitializationKind::CreateDefault(Loc);
   3098 
   3099     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
   3100     ExprResult MemberInit =
   3101       InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
   3102 
   3103     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   3104     if (MemberInit.isInvalid())
   3105       return true;
   3106 
   3107     if (Indirect)
   3108       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   3109                                                                Indirect, Loc,
   3110                                                                Loc,
   3111                                                                MemberInit.get(),
   3112                                                                Loc);
   3113     else
   3114       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   3115                                                                Field, Loc, Loc,
   3116                                                                MemberInit.get(),
   3117                                                                Loc);
   3118     return false;
   3119   }
   3120 
   3121   if (!Field->getParent()->isUnion()) {
   3122     if (FieldBaseElementType->isReferenceType()) {
   3123       SemaRef.Diag(Constructor->getLocation(),
   3124                    diag::err_uninitialized_member_in_ctor)
   3125       << (int)Constructor->isImplicit()
   3126       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   3127       << 0 << Field->getDeclName();
   3128       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   3129       return true;
   3130     }
   3131 
   3132     if (FieldBaseElementType.isConstQualified()) {
   3133       SemaRef.Diag(Constructor->getLocation(),
   3134                    diag::err_uninitialized_member_in_ctor)
   3135       << (int)Constructor->isImplicit()
   3136       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   3137       << 1 << Field->getDeclName();
   3138       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   3139       return true;
   3140     }
   3141   }
   3142 
   3143   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
   3144       FieldBaseElementType->isObjCRetainableType() &&
   3145       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
   3146       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
   3147     // ARC:
   3148     //   Default-initialize Objective-C pointers to NULL.
   3149     CXXMemberInit
   3150       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   3151                                                  Loc, Loc,
   3152                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
   3153                                                  Loc);
   3154     return false;
   3155   }
   3156 
   3157   // Nothing to initialize.
   3158   CXXMemberInit = 0;
   3159   return false;
   3160 }
   3161 
   3162 namespace {
   3163 struct BaseAndFieldInfo {
   3164   Sema &S;
   3165   CXXConstructorDecl *Ctor;
   3166   bool AnyErrorsInInits;
   3167   ImplicitInitializerKind IIK;
   3168   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
   3169   SmallVector<CXXCtorInitializer*, 8> AllToInit;
   3170 
   3171   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
   3172     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
   3173     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
   3174     if (Generated && Ctor->isCopyConstructor())
   3175       IIK = IIK_Copy;
   3176     else if (Generated && Ctor->isMoveConstructor())
   3177       IIK = IIK_Move;
   3178     else if (Ctor->getInheritedConstructor())
   3179       IIK = IIK_Inherit;
   3180     else
   3181       IIK = IIK_Default;
   3182   }
   3183 
   3184   bool isImplicitCopyOrMove() const {
   3185     switch (IIK) {
   3186     case IIK_Copy:
   3187     case IIK_Move:
   3188       return true;
   3189 
   3190     case IIK_Default:
   3191     case IIK_Inherit:
   3192       return false;
   3193     }
   3194 
   3195     llvm_unreachable("Invalid ImplicitInitializerKind!");
   3196   }
   3197 
   3198   bool addFieldInitializer(CXXCtorInitializer *Init) {
   3199     AllToInit.push_back(Init);
   3200 
   3201     // Check whether this initializer makes the field "used".
   3202     if (Init->getInit()->HasSideEffects(S.Context))
   3203       S.UnusedPrivateFields.remove(Init->getAnyMember());
   3204 
   3205     return false;
   3206   }
   3207 };
   3208 }
   3209 
   3210 /// \brief Determine whether the given indirect field declaration is somewhere
   3211 /// within an anonymous union.
   3212 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
   3213   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
   3214                                       CEnd = F->chain_end();
   3215        C != CEnd; ++C)
   3216     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
   3217       if (Record->isUnion())
   3218         return true;
   3219 
   3220   return false;
   3221 }
   3222 
   3223 /// \brief Determine whether the given type is an incomplete or zero-lenfgth
   3224 /// array type.
   3225 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
   3226   if (T->isIncompleteArrayType())
   3227     return true;
   3228 
   3229   while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
   3230     if (!ArrayT->getSize())
   3231       return true;
   3232 
   3233     T = ArrayT->getElementType();
   3234   }
   3235 
   3236   return false;
   3237 }
   3238 
   3239 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
   3240                                     FieldDecl *Field,
   3241                                     IndirectFieldDecl *Indirect = 0) {
   3242   if (Field->isInvalidDecl())
   3243     return false;
   3244 
   3245   // Overwhelmingly common case: we have a direct initializer for this field.
   3246   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
   3247     return Info.addFieldInitializer(Init);
   3248 
   3249   // C++11 [class.base.init]p8: if the entity is a non-static data member that
   3250   // has a brace-or-equal-initializer, the entity is initialized as specified
   3251   // in [dcl.init].
   3252   if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
   3253     Expr *DIE = CXXDefaultInitExpr::Create(SemaRef.Context,
   3254                                            Info.Ctor->getLocation(), Field);
   3255     CXXCtorInitializer *Init;
   3256     if (Indirect)
   3257       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   3258                                                       SourceLocation(),
   3259                                                       SourceLocation(), DIE,
   3260                                                       SourceLocation());
   3261     else
   3262       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   3263                                                       SourceLocation(),
   3264                                                       SourceLocation(), DIE,
   3265                                                       SourceLocation());
   3266     return Info.addFieldInitializer(Init);
   3267   }
   3268 
   3269   // Don't build an implicit initializer for union members if none was
   3270   // explicitly specified.
   3271   if (Field->getParent()->isUnion() ||
   3272       (Indirect && isWithinAnonymousUnion(Indirect)))
   3273     return false;
   3274 
   3275   // Don't initialize incomplete or zero-length arrays.
   3276   if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
   3277     return false;
   3278 
   3279   // Don't try to build an implicit initializer if there were semantic
   3280   // errors in any of the initializers (and therefore we might be
   3281   // missing some that the user actually wrote).
   3282   if (Info.AnyErrorsInInits)
   3283     return false;
   3284 
   3285   CXXCtorInitializer *Init = 0;
   3286   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
   3287                                      Indirect, Init))
   3288     return true;
   3289 
   3290   if (!Init)
   3291     return false;
   3292 
   3293   return Info.addFieldInitializer(Init);
   3294 }
   3295 
   3296 bool
   3297 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
   3298                                CXXCtorInitializer *Initializer) {
   3299   assert(Initializer->isDelegatingInitializer());
   3300   Constructor->setNumCtorInitializers(1);
   3301   CXXCtorInitializer **initializer =
   3302     new (Context) CXXCtorInitializer*[1];
   3303   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
   3304   Constructor->setCtorInitializers(initializer);
   3305 
   3306   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
   3307     MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
   3308     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
   3309   }
   3310 
   3311   DelegatingCtorDecls.push_back(Constructor);
   3312 
   3313   return false;
   3314 }
   3315 
   3316 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
   3317                                ArrayRef<CXXCtorInitializer *> Initializers) {
   3318   if (Constructor->isDependentContext()) {
   3319     // Just store the initializers as written, they will be checked during
   3320     // instantiation.
   3321     if (!Initializers.empty()) {
   3322       Constructor->setNumCtorInitializers(Initializers.size());
   3323       CXXCtorInitializer **baseOrMemberInitializers =
   3324         new (Context) CXXCtorInitializer*[Initializers.size()];
   3325       memcpy(baseOrMemberInitializers, Initializers.data(),
   3326              Initializers.size() * sizeof(CXXCtorInitializer*));
   3327       Constructor->setCtorInitializers(baseOrMemberInitializers);
   3328     }
   3329 
   3330     // Let template instantiation know whether we had errors.
   3331     if (AnyErrors)
   3332       Constructor->setInvalidDecl();
   3333 
   3334     return false;
   3335   }
   3336 
   3337   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
   3338 
   3339   // We need to build the initializer AST according to order of construction
   3340   // and not what user specified in the Initializers list.
   3341   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
   3342   if (!ClassDecl)
   3343     return true;
   3344 
   3345   bool HadError = false;
   3346 
   3347   for (unsigned i = 0; i < Initializers.size(); i++) {
   3348     CXXCtorInitializer *Member = Initializers[i];
   3349 
   3350     if (Member->isBaseInitializer())
   3351       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
   3352     else
   3353       Info.AllBaseFields[Member->getAnyMember()] = Member;
   3354   }
   3355 
   3356   // Keep track of the direct virtual bases.
   3357   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
   3358   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
   3359        E = ClassDecl->bases_end(); I != E; ++I) {
   3360     if (I->isVirtual())
   3361       DirectVBases.insert(I);
   3362   }
   3363 
   3364   // Push virtual bases before others.
   3365   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   3366        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   3367 
   3368     if (CXXCtorInitializer *Value
   3369         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
   3370       // [class.base.init]p7, per DR257:
   3371       //   A mem-initializer where the mem-initializer-id names a virtual base
   3372       //   class is ignored during execution of a constructor of any class that
   3373       //   is not the most derived class.
   3374       if (ClassDecl->isAbstract()) {
   3375         // FIXME: Provide a fixit to remove the base specifier. This requires
   3376         // tracking the location of the associated comma for a base specifier.
   3377         Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored)
   3378           << VBase->getType() << ClassDecl;
   3379         DiagnoseAbstractType(ClassDecl);
   3380       }
   3381 
   3382       Info.AllToInit.push_back(Value);
   3383     } else if (!AnyErrors && !ClassDecl->isAbstract()) {
   3384       // [class.base.init]p8, per DR257:
   3385       //   If a given [...] base class is not named by a mem-initializer-id
   3386       //   [...] and the entity is not a virtual base class of an abstract
   3387       //   class, then [...] the entity is default-initialized.
   3388       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
   3389       CXXCtorInitializer *CXXBaseInit;
   3390       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   3391                                        VBase, IsInheritedVirtualBase,
   3392                                        CXXBaseInit)) {
   3393         HadError = true;
   3394         continue;
   3395       }
   3396 
   3397       Info.AllToInit.push_back(CXXBaseInit);
   3398     }
   3399   }
   3400 
   3401   // Non-virtual bases.
   3402   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   3403        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3404     // Virtuals are in the virtual base list and already constructed.
   3405     if (Base->isVirtual())
   3406       continue;
   3407 
   3408     if (CXXCtorInitializer *Value
   3409           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
   3410       Info.AllToInit.push_back(Value);
   3411     } else if (!AnyErrors) {
   3412       CXXCtorInitializer *CXXBaseInit;
   3413       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   3414                                        Base, /*IsInheritedVirtualBase=*/false,
   3415                                        CXXBaseInit)) {
   3416         HadError = true;
   3417         continue;
   3418       }
   3419 
   3420       Info.AllToInit.push_back(CXXBaseInit);
   3421     }
   3422   }
   3423 
   3424   // Fields.
   3425   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
   3426                                MemEnd = ClassDecl->decls_end();
   3427        Mem != MemEnd; ++Mem) {
   3428     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
   3429       // C++ [class.bit]p2:
   3430       //   A declaration for a bit-field that omits the identifier declares an
   3431       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
   3432       //   initialized.
   3433       if (F->isUnnamedBitfield())
   3434         continue;
   3435 
   3436       // If we're not generating the implicit copy/move constructor, then we'll
   3437       // handle anonymous struct/union fields based on their individual
   3438       // indirect fields.
   3439       if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
   3440         continue;
   3441 
   3442       if (CollectFieldInitializer(*this, Info, F))
   3443         HadError = true;
   3444       continue;
   3445     }
   3446 
   3447     // Beyond this point, we only consider default initialization.
   3448     if (Info.isImplicitCopyOrMove())
   3449       continue;
   3450 
   3451     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
   3452       if (F->getType()->isIncompleteArrayType()) {
   3453         assert(ClassDecl->hasFlexibleArrayMember() &&
   3454                "Incomplete array type is not valid");
   3455         continue;
   3456       }
   3457 
   3458       // Initialize each field of an anonymous struct individually.
   3459       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
   3460         HadError = true;
   3461 
   3462       continue;
   3463     }
   3464   }
   3465 
   3466   unsigned NumInitializers = Info.AllToInit.size();
   3467   if (NumInitializers > 0) {
   3468     Constructor->setNumCtorInitializers(NumInitializers);
   3469     CXXCtorInitializer **baseOrMemberInitializers =
   3470       new (Context) CXXCtorInitializer*[NumInitializers];
   3471     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
   3472            NumInitializers * sizeof(CXXCtorInitializer*));
   3473     Constructor->setCtorInitializers(baseOrMemberInitializers);
   3474 
   3475     // Constructors implicitly reference the base and member
   3476     // destructors.
   3477     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
   3478                                            Constructor->getParent());
   3479   }
   3480 
   3481   return HadError;
   3482 }
   3483 
   3484 static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
   3485   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
   3486     const RecordDecl *RD = RT->getDecl();
   3487     if (RD->isAnonymousStructOrUnion()) {
   3488       for (RecordDecl::field_iterator Field = RD->field_begin(),
   3489           E = RD->field_end(); Field != E; ++Field)
   3490         PopulateKeysForFields(*Field, IdealInits);
   3491       return;
   3492     }
   3493   }
   3494   IdealInits.push_back(Field);
   3495 }
   3496 
   3497 static const void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
   3498   return Context.getCanonicalType(BaseType).getTypePtr();
   3499 }
   3500 
   3501 static const void *GetKeyForMember(ASTContext &Context,
   3502                                    CXXCtorInitializer *Member) {
   3503   if (!Member->isAnyMemberInitializer())
   3504     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
   3505 
   3506   return Member->getAnyMember();
   3507 }
   3508 
   3509 static void DiagnoseBaseOrMemInitializerOrder(
   3510     Sema &SemaRef, const CXXConstructorDecl *Constructor,
   3511     ArrayRef<CXXCtorInitializer *> Inits) {
   3512   if (Constructor->getDeclContext()->isDependentContext())
   3513     return;
   3514 
   3515   // Don't check initializers order unless the warning is enabled at the
   3516   // location of at least one initializer.
   3517   bool ShouldCheckOrder = false;
   3518   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
   3519     CXXCtorInitializer *Init = Inits[InitIndex];
   3520     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
   3521                                          Init->getSourceLocation())
   3522           != DiagnosticsEngine::Ignored) {
   3523       ShouldCheckOrder = true;
   3524       break;
   3525     }
   3526   }
   3527   if (!ShouldCheckOrder)
   3528     return;
   3529 
   3530   // Build the list of bases and members in the order that they'll
   3531   // actually be initialized.  The explicit initializers should be in
   3532   // this same order but may be missing things.
   3533   SmallVector<const void*, 32> IdealInitKeys;
   3534 
   3535   const CXXRecordDecl *ClassDecl = Constructor->getParent();
   3536 
   3537   // 1. Virtual bases.
   3538   for (CXXRecordDecl::base_class_const_iterator VBase =
   3539        ClassDecl->vbases_begin(),
   3540        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
   3541     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
   3542 
   3543   // 2. Non-virtual bases.
   3544   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
   3545        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3546     if (Base->isVirtual())
   3547       continue;
   3548     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
   3549   }
   3550 
   3551   // 3. Direct fields.
   3552   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   3553        E = ClassDecl->field_end(); Field != E; ++Field) {
   3554     if (Field->isUnnamedBitfield())
   3555       continue;
   3556 
   3557     PopulateKeysForFields(*Field, IdealInitKeys);
   3558   }
   3559 
   3560   unsigned NumIdealInits = IdealInitKeys.size();
   3561   unsigned IdealIndex = 0;
   3562 
   3563   CXXCtorInitializer *PrevInit = 0;
   3564   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
   3565     CXXCtorInitializer *Init = Inits[InitIndex];
   3566     const void *InitKey = GetKeyForMember(SemaRef.Context, Init);
   3567 
   3568     // Scan forward to try to find this initializer in the idealized
   3569     // initializers list.
   3570     for (; IdealIndex != NumIdealInits; ++IdealIndex)
   3571       if (InitKey == IdealInitKeys[IdealIndex])
   3572         break;
   3573 
   3574     // If we didn't find this initializer, it must be because we
   3575     // scanned past it on a previous iteration.  That can only
   3576     // happen if we're out of order;  emit a warning.
   3577     if (IdealIndex == NumIdealInits && PrevInit) {
   3578       Sema::SemaDiagnosticBuilder D =
   3579         SemaRef.Diag(PrevInit->getSourceLocation(),
   3580                      diag::warn_initializer_out_of_order);
   3581 
   3582       if (PrevInit->isAnyMemberInitializer())
   3583         D << 0 << PrevInit->getAnyMember()->getDeclName();
   3584       else
   3585         D << 1 << PrevInit->getTypeSourceInfo()->getType();
   3586 
   3587       if (Init->isAnyMemberInitializer())
   3588         D << 0 << Init->getAnyMember()->getDeclName();
   3589       else
   3590         D << 1 << Init->getTypeSourceInfo()->getType();
   3591 
   3592       // Move back to the initializer's location in the ideal list.
   3593       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
   3594         if (InitKey == IdealInitKeys[IdealIndex])
   3595           break;
   3596 
   3597       assert(IdealIndex != NumIdealInits &&
   3598              "initializer not found in initializer list");
   3599     }
   3600 
   3601     PrevInit = Init;
   3602   }
   3603 }
   3604 
   3605 namespace {
   3606 bool CheckRedundantInit(Sema &S,
   3607                         CXXCtorInitializer *Init,
   3608                         CXXCtorInitializer *&PrevInit) {
   3609   if (!PrevInit) {
   3610     PrevInit = Init;
   3611     return false;
   3612   }
   3613 
   3614   if (FieldDecl *Field = Init->getAnyMember())
   3615     S.Diag(Init->getSourceLocation(),
   3616            diag::err_multiple_mem_initialization)
   3617       << Field->getDeclName()
   3618       << Init->getSourceRange();
   3619   else {
   3620     const Type *BaseClass = Init->getBaseClass();
   3621     assert(BaseClass && "neither field nor base");
   3622     S.Diag(Init->getSourceLocation(),
   3623            diag::err_multiple_base_initialization)
   3624       << QualType(BaseClass, 0)
   3625       << Init->getSourceRange();
   3626   }
   3627   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
   3628     << 0 << PrevInit->getSourceRange();
   3629 
   3630   return true;
   3631 }
   3632 
   3633 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
   3634 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
   3635 
   3636 bool CheckRedundantUnionInit(Sema &S,
   3637                              CXXCtorInitializer *Init,
   3638                              RedundantUnionMap &Unions) {
   3639   FieldDecl *Field = Init->getAnyMember();
   3640   RecordDecl *Parent = Field->getParent();
   3641   NamedDecl *Child = Field;
   3642 
   3643   while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
   3644     if (Parent->isUnion()) {
   3645       UnionEntry &En = Unions[Parent];
   3646       if (En.first && En.first != Child) {
   3647         S.Diag(Init->getSourceLocation(),
   3648                diag::err_multiple_mem_union_initialization)
   3649           << Field->getDeclName()
   3650           << Init->getSourceRange();
   3651         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
   3652           << 0 << En.second->getSourceRange();
   3653         return true;
   3654       }
   3655       if (!En.first) {
   3656         En.first = Child;
   3657         En.second = Init;
   3658       }
   3659       if (!Parent->isAnonymousStructOrUnion())
   3660         return false;
   3661     }
   3662 
   3663     Child = Parent;
   3664     Parent = cast<RecordDecl>(Parent->getDeclContext());
   3665   }
   3666 
   3667   return false;
   3668 }
   3669 }
   3670 
   3671 /// ActOnMemInitializers - Handle the member initializers for a constructor.
   3672 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
   3673                                 SourceLocation ColonLoc,
   3674                                 ArrayRef<CXXCtorInitializer*> MemInits,
   3675                                 bool AnyErrors) {
   3676   if (!ConstructorDecl)
   3677     return;
   3678 
   3679   AdjustDeclIfTemplate(ConstructorDecl);
   3680 
   3681   CXXConstructorDecl *Constructor
   3682     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
   3683 
   3684   if (!Constructor) {
   3685     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
   3686     return;
   3687   }
   3688 
   3689   // Mapping for the duplicate initializers check.
   3690   // For member initializers, this is keyed with a FieldDecl*.
   3691   // For base initializers, this is keyed with a Type*.
   3692   llvm::DenseMap<const void *, CXXCtorInitializer *> Members;
   3693 
   3694   // Mapping for the inconsistent anonymous-union initializers check.
   3695   RedundantUnionMap MemberUnions;
   3696 
   3697   bool HadError = false;
   3698   for (unsigned i = 0; i < MemInits.size(); i++) {
   3699     CXXCtorInitializer *Init = MemInits[i];
   3700 
   3701     // Set the source order index.
   3702     Init->setSourceOrder(i);
   3703 
   3704     if (Init->isAnyMemberInitializer()) {
   3705       FieldDecl *Field = Init->getAnyMember();
   3706       if (CheckRedundantInit(*this, Init, Members[Field]) ||
   3707           CheckRedundantUnionInit(*this, Init, MemberUnions))
   3708         HadError = true;
   3709     } else if (Init->isBaseInitializer()) {
   3710       const void *Key =
   3711           GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
   3712       if (CheckRedundantInit(*this, Init, Members[Key]))
   3713         HadError = true;
   3714     } else {
   3715       assert(Init->isDelegatingInitializer());
   3716       // This must be the only initializer
   3717       if (MemInits.size() != 1) {
   3718         Diag(Init->getSourceLocation(),
   3719              diag::err_delegating_initializer_alone)
   3720           << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
   3721         // We will treat this as being the only initializer.
   3722       }
   3723       SetDelegatingInitializer(Constructor, MemInits[i]);
   3724       // Return immediately as the initializer is set.
   3725       return;
   3726     }
   3727   }
   3728 
   3729   if (HadError)
   3730     return;
   3731 
   3732   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
   3733 
   3734   SetCtorInitializers(Constructor, AnyErrors, MemInits);
   3735 }
   3736 
   3737 void
   3738 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
   3739                                              CXXRecordDecl *ClassDecl) {
   3740   // Ignore dependent contexts. Also ignore unions, since their members never
   3741   // have destructors implicitly called.
   3742   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
   3743     return;
   3744 
   3745   // FIXME: all the access-control diagnostics are positioned on the
   3746   // field/base declaration.  That's probably good; that said, the
   3747   // user might reasonably want to know why the destructor is being
   3748   // emitted, and we currently don't say.
   3749 
   3750   // Non-static data members.
   3751   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
   3752        E = ClassDecl->field_end(); I != E; ++I) {
   3753     FieldDecl *Field = *I;
   3754     if (Field->isInvalidDecl())
   3755       continue;
   3756 
   3757     // Don't destroy incomplete or zero-length arrays.
   3758     if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
   3759       continue;
   3760 
   3761     QualType FieldType = Context.getBaseElementType(Field->getType());
   3762 
   3763     const RecordType* RT = FieldType->getAs<RecordType>();
   3764     if (!RT)
   3765       continue;
   3766 
   3767     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3768     if (FieldClassDecl->isInvalidDecl())
   3769       continue;
   3770     if (FieldClassDecl->hasIrrelevantDestructor())
   3771       continue;
   3772     // The destructor for an implicit anonymous union member is never invoked.
   3773     if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
   3774       continue;
   3775 
   3776     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
   3777     assert(Dtor && "No dtor found for FieldClassDecl!");
   3778     CheckDestructorAccess(Field->getLocation(), Dtor,
   3779                           PDiag(diag::err_access_dtor_field)
   3780                             << Field->getDeclName()
   3781                             << FieldType);
   3782 
   3783     MarkFunctionReferenced(Location, Dtor);
   3784     DiagnoseUseOfDecl(Dtor, Location);
   3785   }
   3786 
   3787   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
   3788 
   3789   // Bases.
   3790   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   3791        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3792     // Bases are always records in a well-formed non-dependent class.
   3793     const RecordType *RT = Base->getType()->getAs<RecordType>();
   3794 
   3795     // Remember direct virtual bases.
   3796     if (Base->isVirtual())
   3797       DirectVirtualBases.insert(RT);
   3798 
   3799     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3800     // If our base class is invalid, we probably can't get its dtor anyway.
   3801     if (BaseClassDecl->isInvalidDecl())
   3802       continue;
   3803     if (BaseClassDecl->hasIrrelevantDestructor())
   3804       continue;
   3805 
   3806     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3807     assert(Dtor && "No dtor found for BaseClassDecl!");
   3808 
   3809     // FIXME: caret should be on the start of the class name
   3810     CheckDestructorAccess(Base->getLocStart(), Dtor,
   3811                           PDiag(diag::err_access_dtor_base)
   3812                             << Base->getType()
   3813                             << Base->getSourceRange(),
   3814                           Context.getTypeDeclType(ClassDecl));
   3815 
   3816     MarkFunctionReferenced(Location, Dtor);
   3817     DiagnoseUseOfDecl(Dtor, Location);
   3818   }
   3819 
   3820   // Virtual bases.
   3821   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   3822        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   3823 
   3824     // Bases are always records in a well-formed non-dependent class.
   3825     const RecordType *RT = VBase->getType()->castAs<RecordType>();
   3826 
   3827     // Ignore direct virtual bases.
   3828     if (DirectVirtualBases.count(RT))
   3829       continue;
   3830 
   3831     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3832     // If our base class is invalid, we probably can't get its dtor anyway.
   3833     if (BaseClassDecl->isInvalidDecl())
   3834       continue;
   3835     if (BaseClassDecl->hasIrrelevantDestructor())
   3836       continue;
   3837 
   3838     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3839     assert(Dtor && "No dtor found for BaseClassDecl!");
   3840     if (CheckDestructorAccess(
   3841             ClassDecl->getLocation(), Dtor,
   3842             PDiag(diag::err_access_dtor_vbase)
   3843                 << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
   3844             Context.getTypeDeclType(ClassDecl)) ==
   3845         AR_accessible) {
   3846       CheckDerivedToBaseConversion(
   3847           Context.getTypeDeclType(ClassDecl), VBase->getType(),
   3848           diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
   3849           SourceRange(), DeclarationName(), 0);
   3850     }
   3851 
   3852     MarkFunctionReferenced(Location, Dtor);
   3853     DiagnoseUseOfDecl(Dtor, Location);
   3854   }
   3855 }
   3856 
   3857 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
   3858   if (!CDtorDecl)
   3859     return;
   3860 
   3861   if (CXXConstructorDecl *Constructor
   3862       = dyn_cast<CXXConstructorDecl>(CDtorDecl))
   3863     SetCtorInitializers(Constructor, /*AnyErrors=*/false);
   3864 }
   3865 
   3866 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3867                                   unsigned DiagID, AbstractDiagSelID SelID) {
   3868   class NonAbstractTypeDiagnoser : public TypeDiagnoser {
   3869     unsigned DiagID;
   3870     AbstractDiagSelID SelID;
   3871 
   3872   public:
   3873     NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
   3874       : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
   3875 
   3876     void diagnose(Sema &S, SourceLocation Loc, QualType T) LLVM_OVERRIDE {
   3877       if (Suppressed) return;
   3878       if (SelID == -1)
   3879         S.Diag(Loc, DiagID) << T;
   3880       else
   3881         S.Diag(Loc, DiagID) << SelID << T;
   3882     }
   3883   } Diagnoser(DiagID, SelID);
   3884 
   3885   return RequireNonAbstractType(Loc, T, Diagnoser);
   3886 }
   3887 
   3888 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3889                                   TypeDiagnoser &Diagnoser) {
   3890   if (!getLangOpts().CPlusPlus)
   3891     return false;
   3892 
   3893   if (const ArrayType *AT = Context.getAsArrayType(T))
   3894     return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
   3895 
   3896   if (const PointerType *PT = T->getAs<PointerType>()) {
   3897     // Find the innermost pointer type.
   3898     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
   3899       PT = T;
   3900 
   3901     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
   3902       return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
   3903   }
   3904 
   3905   const RecordType *RT = T->getAs<RecordType>();
   3906   if (!RT)
   3907     return false;
   3908 
   3909   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   3910 
   3911   // We can't answer whether something is abstract until it has a
   3912   // definition.  If it's currently being defined, we'll walk back
   3913   // over all the declarations when we have a full definition.
   3914   const CXXRecordDecl *Def = RD->getDefinition();
   3915   if (!Def || Def->isBeingDefined())
   3916     return false;
   3917 
   3918   if (!RD->isAbstract())
   3919     return false;
   3920 
   3921   Diagnoser.diagnose(*this, Loc, T);
   3922   DiagnoseAbstractType(RD);
   3923 
   3924   return true;
   3925 }
   3926 
   3927 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
   3928   // Check if we've already emitted the list of pure virtual functions
   3929   // for this class.
   3930   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
   3931     return;
   3932 
   3933   // If the diagnostic is suppressed, don't emit the notes. We're only
   3934   // going to emit them once, so try to attach them to a diagnostic we're
   3935   // actually going to show.
   3936   if (Diags.isLastDiagnosticIgnored())
   3937     return;
   3938 
   3939   CXXFinalOverriderMap FinalOverriders;
   3940   RD->getFinalOverriders(FinalOverriders);
   3941 
   3942   // Keep a set of seen pure methods so we won't diagnose the same method
   3943   // more than once.
   3944   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
   3945 
   3946   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
   3947                                    MEnd = FinalOverriders.end();
   3948        M != MEnd;
   3949        ++M) {
   3950     for (OverridingMethods::iterator SO = M->second.begin(),
   3951                                   SOEnd = M->second.end();
   3952          SO != SOEnd; ++SO) {
   3953       // C++ [class.abstract]p4:
   3954       //   A class is abstract if it contains or inherits at least one
   3955       //   pure virtual function for which the final overrider is pure
   3956       //   virtual.
   3957 
   3958       //
   3959       if (SO->second.size() != 1)
   3960         continue;
   3961 
   3962       if (!SO->second.front().Method->isPure())
   3963         continue;
   3964 
   3965       if (!SeenPureMethods.insert(SO->second.front().Method))
   3966         continue;
   3967 
   3968       Diag(SO->second.front().Method->getLocation(),
   3969            diag::note_pure_virtual_function)
   3970         << SO->second.front().Method->getDeclName() << RD->getDeclName();
   3971     }
   3972   }
   3973 
   3974   if (!PureVirtualClassDiagSet)
   3975     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
   3976   PureVirtualClassDiagSet->insert(RD);
   3977 }
   3978 
   3979 namespace {
   3980 struct AbstractUsageInfo {
   3981   Sema &S;
   3982   CXXRecordDecl *Record;
   3983   CanQualType AbstractType;
   3984   bool Invalid;
   3985 
   3986   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
   3987     : S(S), Record(Record),
   3988       AbstractType(S.Context.getCanonicalType(
   3989                    S.Context.getTypeDeclType(Record))),
   3990       Invalid(false) {}
   3991 
   3992   void DiagnoseAbstractType() {
   3993     if (Invalid) return;
   3994     S.DiagnoseAbstractType(Record);
   3995     Invalid = true;
   3996   }
   3997 
   3998   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
   3999 };
   4000 
   4001 struct CheckAbstractUsage {
   4002   AbstractUsageInfo &Info;
   4003   const NamedDecl *Ctx;
   4004 
   4005   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
   4006     : Info(Info), Ctx(Ctx) {}
   4007 
   4008   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   4009     switch (TL.getTypeLocClass()) {
   4010 #define ABSTRACT_TYPELOC(CLASS, PARENT)
   4011 #define TYPELOC(CLASS, PARENT) \
   4012     case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
   4013 #include "clang/AST/TypeLocNodes.def"
   4014     }
   4015   }
   4016 
   4017   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   4018     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
   4019     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   4020       if (!TL.getArg(I))
   4021         continue;
   4022 
   4023       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
   4024       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
   4025     }
   4026   }
   4027 
   4028   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   4029     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
   4030   }
   4031 
   4032   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   4033     // Visit the type parameters from a permissive context.
   4034     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   4035       TemplateArgumentLoc TAL = TL.getArgLoc(I);
   4036       if (TAL.getArgument().getKind() == TemplateArgument::Type)
   4037         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
   4038           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
   4039       // TODO: other template argument types?
   4040     }
   4041   }
   4042 
   4043   // Visit pointee types from a permissive context.
   4044 #define CheckPolymorphic(Type) \
   4045   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
   4046     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
   4047   }
   4048   CheckPolymorphic(PointerTypeLoc)
   4049   CheckPolymorphic(ReferenceTypeLoc)
   4050   CheckPolymorphic(MemberPointerTypeLoc)
   4051   CheckPolymorphic(BlockPointerTypeLoc)
   4052   CheckPolymorphic(AtomicTypeLoc)
   4053 
   4054   /// Handle all the types we haven't given a more specific
   4055   /// implementation for above.
   4056   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   4057     // Every other kind of type that we haven't called out already
   4058     // that has an inner type is either (1) sugar or (2) contains that
   4059     // inner type in some way as a subobject.
   4060     if (TypeLoc Next = TL.getNextTypeLoc())
   4061       return Visit(Next, Sel);
   4062 
   4063     // If there's no inner type and we're in a permissive context,
   4064     // don't diagnose.
   4065     if (Sel == Sema::AbstractNone) return;
   4066 
   4067     // Check whether the type matches the abstract type.
   4068     QualType T = TL.getType();
   4069     if (T->isArrayType()) {
   4070       Sel = Sema::AbstractArrayType;
   4071       T = Info.S.Context.getBaseElementType(T);
   4072     }
   4073     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
   4074     if (CT != Info.AbstractType) return;
   4075 
   4076     // It matched; do some magic.
   4077     if (Sel == Sema::AbstractArrayType) {
   4078       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
   4079         << T << TL.getSourceRange();
   4080     } else {
   4081       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
   4082         << Sel << T << TL.getSourceRange();
   4083     }
   4084     Info.DiagnoseAbstractType();
   4085   }
   4086 };
   4087 
   4088 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
   4089                                   Sema::AbstractDiagSelID Sel) {
   4090   CheckAbstractUsage(*this, D).Visit(TL, Sel);
   4091 }
   4092 
   4093 }
   4094 
   4095 /// Check for invalid uses of an abstract type in a method declaration.
   4096 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   4097                                     CXXMethodDecl *MD) {
   4098   // No need to do the check on definitions, which require that
   4099   // the return/param types be complete.
   4100   if (MD->doesThisDeclarationHaveABody())
   4101     return;
   4102 
   4103   // For safety's sake, just ignore it if we don't have type source
   4104   // information.  This should never happen for non-implicit methods,
   4105   // but...
   4106   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
   4107     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
   4108 }
   4109 
   4110 /// Check for invalid uses of an abstract type within a class definition.
   4111 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   4112                                     CXXRecordDecl *RD) {
   4113   for (CXXRecordDecl::decl_iterator
   4114          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
   4115     Decl *D = *I;
   4116     if (D->isImplicit()) continue;
   4117 
   4118     // Methods and method templates.
   4119     if (isa<CXXMethodDecl>(D)) {
   4120       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
   4121     } else if (isa<FunctionTemplateDecl>(D)) {
   4122       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
   4123       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
   4124 
   4125     // Fields and static variables.
   4126     } else if (isa<FieldDecl>(D)) {
   4127       FieldDecl *FD = cast<FieldDecl>(D);
   4128       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
   4129         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
   4130     } else if (isa<VarDecl>(D)) {
   4131       VarDecl *VD = cast<VarDecl>(D);
   4132       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
   4133         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
   4134 
   4135     // Nested classes and class templates.
   4136     } else if (isa<CXXRecordDecl>(D)) {
   4137       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
   4138     } else if (isa<ClassTemplateDecl>(D)) {
   4139       CheckAbstractClassUsage(Info,
   4140                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
   4141     }
   4142   }
   4143 }
   4144 
   4145 /// \brief Perform semantic checks on a class definition that has been
   4146 /// completing, introducing implicitly-declared members, checking for
   4147 /// abstract types, etc.
   4148 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
   4149   if (!Record)
   4150     return;
   4151 
   4152   if (Record->isAbstract() && !Record->isInvalidDecl()) {
   4153     AbstractUsageInfo Info(*this, Record);
   4154     CheckAbstractClassUsage(Info, Record);
   4155   }
   4156 
   4157   // If this is not an aggregate type and has no user-declared constructor,
   4158   // complain about any non-static data members of reference or const scalar
   4159   // type, since they will never get initializers.
   4160   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
   4161       !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
   4162       !Record->isLambda()) {
   4163     bool Complained = false;
   4164     for (RecordDecl::field_iterator F = Record->field_begin(),
   4165                                  FEnd = Record->field_end();
   4166          F != FEnd; ++F) {
   4167       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
   4168         continue;
   4169 
   4170       if (F->getType()->isReferenceType() ||
   4171           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
   4172         if (!Complained) {
   4173           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
   4174             << Record->getTagKind() << Record;
   4175           Complained = true;
   4176         }
   4177 
   4178         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
   4179           << F->getType()->isReferenceType()
   4180           << F->getDeclName();
   4181       }
   4182     }
   4183   }
   4184 
   4185   if (Record->isDynamicClass() && !Record->isDependentType())
   4186     DynamicClasses.push_back(Record);
   4187 
   4188   if (Record->getIdentifier()) {
   4189     // C++ [class.mem]p13:
   4190     //   If T is the name of a class, then each of the following shall have a
   4191     //   name different from T:
   4192     //     - every member of every anonymous union that is a member of class T.
   4193     //
   4194     // C++ [class.mem]p14:
   4195     //   In addition, if class T has a user-declared constructor (12.1), every
   4196     //   non-static data member of class T shall have a name different from T.
   4197     DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
   4198     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
   4199          ++I) {
   4200       NamedDecl *D = *I;
   4201       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
   4202           isa<IndirectFieldDecl>(D)) {
   4203         Diag(D->getLocation(), diag::err_member_name_of_class)
   4204           << D->getDeclName();
   4205         break;
   4206       }
   4207     }
   4208   }
   4209 
   4210   // Warn if the class has virtual methods but non-virtual public destructor.
   4211   if (Record->isPolymorphic() && !Record->isDependentType()) {
   4212     CXXDestructorDecl *dtor = Record->getDestructor();
   4213     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
   4214       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
   4215            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
   4216   }
   4217 
   4218   if (Record->isAbstract() && Record->hasAttr<FinalAttr>()) {
   4219     Diag(Record->getLocation(), diag::warn_abstract_final_class);
   4220     DiagnoseAbstractType(Record);
   4221   }
   4222 
   4223   if (!Record->isDependentType()) {
   4224     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   4225                                      MEnd = Record->method_end();
   4226          M != MEnd; ++M) {
   4227       // See if a method overloads virtual methods in a base
   4228       // class without overriding any.
   4229       if (!M->isStatic())
   4230         DiagnoseHiddenVirtualMethods(Record, *M);
   4231 
   4232       // Check whether the explicitly-defaulted special members are valid.
   4233       if (!M->isInvalidDecl() && M->isExplicitlyDefaulted())
   4234         CheckExplicitlyDefaultedSpecialMember(*M);
   4235 
   4236       // For an explicitly defaulted or deleted special member, we defer
   4237       // determining triviality until the class is complete. That time is now!
   4238       if (!M->isImplicit() && !M->isUserProvided()) {
   4239         CXXSpecialMember CSM = getSpecialMember(*M);
   4240         if (CSM != CXXInvalid) {
   4241           M->setTrivial(SpecialMemberIsTrivial(*M, CSM));
   4242 
   4243           // Inform the class that we've finished declaring this member.
   4244           Record->finishedDefaultedOrDeletedMember(*M);
   4245         }
   4246       }
   4247     }
   4248   }
   4249 
   4250   // C++11 [dcl.constexpr]p8: A constexpr specifier for a non-static member
   4251   // function that is not a constructor declares that member function to be
   4252   // const. [...] The class of which that function is a member shall be
   4253   // a literal type.
   4254   //
   4255   // If the class has virtual bases, any constexpr members will already have
   4256   // been diagnosed by the checks performed on the member declaration, so
   4257   // suppress this (less useful) diagnostic.
   4258   //
   4259   // We delay this until we know whether an explicitly-defaulted (or deleted)
   4260   // destructor for the class is trivial.
   4261   if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
   4262       !Record->isLiteral() && !Record->getNumVBases()) {
   4263     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   4264                                      MEnd = Record->method_end();
   4265          M != MEnd; ++M) {
   4266       if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
   4267         switch (Record->getTemplateSpecializationKind()) {
   4268         case TSK_ImplicitInstantiation:
   4269         case TSK_ExplicitInstantiationDeclaration:
   4270         case TSK_ExplicitInstantiationDefinition:
   4271           // If a template instantiates to a non-literal type, but its members
   4272           // instantiate to constexpr functions, the template is technically
   4273           // ill-formed, but we allow it for sanity.
   4274           continue;
   4275 
   4276         case TSK_Undeclared:
   4277         case TSK_ExplicitSpecialization:
   4278           RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
   4279                              diag::err_constexpr_method_non_literal);
   4280           break;
   4281         }
   4282 
   4283         // Only produce one error per class.
   4284         break;
   4285       }
   4286     }
   4287   }
   4288 
   4289   // Declare inheriting constructors. We do this eagerly here because:
   4290   // - The standard requires an eager diagnostic for conflicting inheriting
   4291   //   constructors from different classes.
   4292   // - The lazy declaration of the other implicit constructors is so as to not
   4293   //   waste space and performance on classes that are not meant to be
   4294   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
   4295   //   have inheriting constructors.
   4296   DeclareInheritingConstructors(Record);
   4297 }
   4298 
   4299 /// Is the special member function which would be selected to perform the
   4300 /// specified operation on the specified class type a constexpr constructor?
   4301 static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
   4302                                      Sema::CXXSpecialMember CSM,
   4303                                      bool ConstArg) {
   4304   Sema::SpecialMemberOverloadResult *SMOR =
   4305       S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
   4306                             false, false, false, false);
   4307   if (!SMOR || !SMOR->getMethod())
   4308     // A constructor we wouldn't select can't be "involved in initializing"
   4309     // anything.
   4310     return true;
   4311   return SMOR->getMethod()->isConstexpr();
   4312 }
   4313 
   4314 /// Determine whether the specified special member function would be constexpr
   4315 /// if it were implicitly defined.
   4316 static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
   4317                                               Sema::CXXSpecialMember CSM,
   4318                                               bool ConstArg) {
   4319   if (!S.getLangOpts().CPlusPlus11)
   4320     return false;
   4321 
   4322   // C++11 [dcl.constexpr]p4:
   4323   // In the definition of a constexpr constructor [...]
   4324   bool Ctor = true;
   4325   switch (CSM) {
   4326   case Sema::CXXDefaultConstructor:
   4327     // Since default constructor lookup is essentially trivial (and cannot
   4328     // involve, for instance, template instantiation), we compute whether a
   4329     // defaulted default constructor is constexpr directly within CXXRecordDecl.
   4330     //
   4331     // This is important for performance; we need to know whether the default
   4332     // constructor is constexpr to determine whether the type is a literal type.
   4333     return ClassDecl->defaultedDefaultConstructorIsConstexpr();
   4334 
   4335   case Sema::CXXCopyConstructor:
   4336   case Sema::CXXMoveConstructor:
   4337     // For copy or move constructors, we need to perform overload resolution.
   4338     break;
   4339 
   4340   case Sema::CXXCopyAssignment:
   4341   case Sema::CXXMoveAssignment:
   4342     if (!S.getLangOpts().CPlusPlus1y)
   4343       return false;
   4344     // In C++1y, we need to perform overload resolution.
   4345     Ctor = false;
   4346     break;
   4347 
   4348   case Sema::CXXDestructor:
   4349   case Sema::CXXInvalid:
   4350     return false;
   4351   }
   4352 
   4353   //   -- if the class is a non-empty union, or for each non-empty anonymous
   4354   //      union member of a non-union class, exactly one non-static data member
   4355   //      shall be initialized; [DR1359]
   4356   //
   4357   // If we squint, this is guaranteed, since exactly one non-static data member
   4358   // will be initialized (if the constructor isn't deleted), we just don't know
   4359   // which one.
   4360   if (Ctor && ClassDecl->isUnion())
   4361     return true;
   4362 
   4363   //   -- the class shall not have any virtual base classes;
   4364   if (Ctor && ClassDecl->getNumVBases())
   4365     return false;
   4366 
   4367   // C++1y [class.copy]p26:
   4368   //   -- [the class] is a literal type, and
   4369   if (!Ctor && !ClassDecl->isLiteral())
   4370     return false;
   4371 
   4372   //   -- every constructor involved in initializing [...] base class
   4373   //      sub-objects shall be a constexpr constructor;
   4374   //   -- the assignment operator selected to copy/move each direct base
   4375   //      class is a constexpr function, and
   4376   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   4377                                        BEnd = ClassDecl->bases_end();
   4378        B != BEnd; ++B) {
   4379     const RecordType *BaseType = B->getType()->getAs<RecordType>();
   4380     if (!BaseType) continue;
   4381 
   4382     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   4383     if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, ConstArg))
   4384       return false;
   4385   }
   4386 
   4387   //   -- every constructor involved in initializing non-static data members
   4388   //      [...] shall be a constexpr constructor;
   4389   //   -- every non-static data member and base class sub-object shall be
   4390   //      initialized
   4391   //   -- for each non-stastic data member of X that is of class type (or array
   4392   //      thereof), the assignment operator selected to copy/move that member is
   4393   //      a constexpr function
   4394   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   4395                                FEnd = ClassDecl->field_end();
   4396        F != FEnd; ++F) {
   4397     if (F->isInvalidDecl())
   4398       continue;
   4399     if (const RecordType *RecordTy =
   4400             S.Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   4401       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   4402       if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, ConstArg))
   4403         return false;
   4404     }
   4405   }
   4406 
   4407   // All OK, it's constexpr!
   4408   return true;
   4409 }
   4410 
   4411 static Sema::ImplicitExceptionSpecification
   4412 computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
   4413   switch (S.getSpecialMember(MD)) {
   4414   case Sema::CXXDefaultConstructor:
   4415     return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
   4416   case Sema::CXXCopyConstructor:
   4417     return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
   4418   case Sema::CXXCopyAssignment:
   4419     return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
   4420   case Sema::CXXMoveConstructor:
   4421     return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
   4422   case Sema::CXXMoveAssignment:
   4423     return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
   4424   case Sema::CXXDestructor:
   4425     return S.ComputeDefaultedDtorExceptionSpec(MD);
   4426   case Sema::CXXInvalid:
   4427     break;
   4428   }
   4429   assert(cast<CXXConstructorDecl>(MD)->getInheritedConstructor() &&
   4430          "only special members have implicit exception specs");
   4431   return S.ComputeInheritingCtorExceptionSpec(cast<CXXConstructorDecl>(MD));
   4432 }
   4433 
   4434 static void
   4435 updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
   4436                     const Sema::ImplicitExceptionSpecification &ExceptSpec) {
   4437   FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
   4438   ExceptSpec.getEPI(EPI);
   4439   FD->setType(S.Context.getFunctionType(FPT->getResultType(),
   4440                                         FPT->getArgTypes(), EPI));
   4441 }
   4442 
   4443 void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
   4444   const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
   4445   if (FPT->getExceptionSpecType() != EST_Unevaluated)
   4446     return;
   4447 
   4448   // Evaluate the exception specification.
   4449   ImplicitExceptionSpecification ExceptSpec =
   4450       computeImplicitExceptionSpec(*this, Loc, MD);
   4451 
   4452   // Update the type of the special member to use it.
   4453   updateExceptionSpec(*this, MD, FPT, ExceptSpec);
   4454 
   4455   // A user-provided destructor can be defined outside the class. When that
   4456   // happens, be sure to update the exception specification on both
   4457   // declarations.
   4458   const FunctionProtoType *CanonicalFPT =
   4459     MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
   4460   if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
   4461     updateExceptionSpec(*this, MD->getCanonicalDecl(),
   4462                         CanonicalFPT, ExceptSpec);
   4463 }
   4464 
   4465 void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
   4466   CXXRecordDecl *RD = MD->getParent();
   4467   CXXSpecialMember CSM = getSpecialMember(MD);
   4468 
   4469   assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
   4470          "not an explicitly-defaulted special member");
   4471 
   4472   // Whether this was the first-declared instance of the constructor.
   4473   // This affects whether we implicitly add an exception spec and constexpr.
   4474   bool First = MD == MD->getCanonicalDecl();
   4475 
   4476   bool HadError = false;
   4477 
   4478   // C++11 [dcl.fct.def.default]p1:
   4479   //   A function that is explicitly defaulted shall
   4480   //     -- be a special member function (checked elsewhere),
   4481   //     -- have the same type (except for ref-qualifiers, and except that a
   4482   //        copy operation can take a non-const reference) as an implicit
   4483   //        declaration, and
   4484   //     -- not have default arguments.
   4485   unsigned ExpectedParams = 1;
   4486   if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
   4487     ExpectedParams = 0;
   4488   if (MD->getNumParams() != ExpectedParams) {
   4489     // This also checks for default arguments: a copy or move constructor with a
   4490     // default argument is classified as a default constructor, and assignment
   4491     // operations and destructors can't have default arguments.
   4492     Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
   4493       << CSM << MD->getSourceRange();
   4494     HadError = true;
   4495   } else if (MD->isVariadic()) {
   4496     Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
   4497       << CSM << MD->getSourceRange();
   4498     HadError = true;
   4499   }
   4500 
   4501   const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
   4502 
   4503   bool CanHaveConstParam = false;
   4504   if (CSM == CXXCopyConstructor)
   4505     CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
   4506   else if (CSM == CXXCopyAssignment)
   4507     CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
   4508 
   4509   QualType ReturnType = Context.VoidTy;
   4510   if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
   4511     // Check for return type matching.
   4512     ReturnType = Type->getResultType();
   4513     QualType ExpectedReturnType =
   4514         Context.getLValueReferenceType(Context.getTypeDeclType(RD));
   4515     if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
   4516       Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
   4517         << (CSM == CXXMoveAssignment) << ExpectedReturnType;
   4518       HadError = true;
   4519     }
   4520 
   4521     // A defaulted special member cannot have cv-qualifiers.
   4522     if (Type->getTypeQuals()) {
   4523       Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
   4524         << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus1y;
   4525       HadError = true;
   4526     }
   4527   }
   4528 
   4529   // Check for parameter type matching.
   4530   QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
   4531   bool HasConstParam = false;
   4532   if (ExpectedParams && ArgType->isReferenceType()) {
   4533     // Argument must be reference to possibly-const T.
   4534     QualType ReferentType = ArgType->getPointeeType();
   4535     HasConstParam = ReferentType.isConstQualified();
   4536 
   4537     if (ReferentType.isVolatileQualified()) {
   4538       Diag(MD->getLocation(),
   4539            diag::err_defaulted_special_member_volatile_param) << CSM;
   4540       HadError = true;
   4541     }
   4542 
   4543     if (HasConstParam && !CanHaveConstParam) {
   4544       if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
   4545         Diag(MD->getLocation(),
   4546              diag::err_defaulted_special_member_copy_const_param)
   4547           << (CSM == CXXCopyAssignment);
   4548         // FIXME: Explain why this special member can't be const.
   4549       } else {
   4550         Diag(MD->getLocation(),
   4551              diag::err_defaulted_special_member_move_const_param)
   4552           << (CSM == CXXMoveAssignment);
   4553       }
   4554       HadError = true;
   4555     }
   4556   } else if (ExpectedParams) {
   4557     // A copy assignment operator can take its argument by value, but a
   4558     // defaulted one cannot.
   4559     assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
   4560     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
   4561     HadError = true;
   4562   }
   4563 
   4564   // C++11 [dcl.fct.def.default]p2:
   4565   //   An explicitly-defaulted function may be declared constexpr only if it
   4566   //   would have been implicitly declared as constexpr,
   4567   // Do not apply this rule to members of class templates, since core issue 1358
   4568   // makes such functions always instantiate to constexpr functions. For
   4569   // functions which cannot be constexpr (for non-constructors in C++11 and for
   4570   // destructors in C++1y), this is checked elsewhere.
   4571   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
   4572                                                      HasConstParam);
   4573   if ((getLangOpts().CPlusPlus1y ? !isa<CXXDestructorDecl>(MD)
   4574                                  : isa<CXXConstructorDecl>(MD)) &&
   4575       MD->isConstexpr() && !Constexpr &&
   4576       MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
   4577     Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
   4578     // FIXME: Explain why the special member can't be constexpr.
   4579     HadError = true;
   4580   }
   4581 
   4582   //   and may have an explicit exception-specification only if it is compatible
   4583   //   with the exception-specification on the implicit declaration.
   4584   if (Type->hasExceptionSpec()) {
   4585     // Delay the check if this is the first declaration of the special member,
   4586     // since we may not have parsed some necessary in-class initializers yet.
   4587     if (First) {
   4588       // If the exception specification needs to be instantiated, do so now,
   4589       // before we clobber it with an EST_Unevaluated specification below.
   4590       if (Type->getExceptionSpecType() == EST_Uninstantiated) {
   4591         InstantiateExceptionSpec(MD->getLocStart(), MD);
   4592         Type = MD->getType()->getAs<FunctionProtoType>();
   4593       }
   4594       DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type));
   4595     } else
   4596       CheckExplicitlyDefaultedMemberExceptionSpec(MD, Type);
   4597   }
   4598 
   4599   //   If a function is explicitly defaulted on its first declaration,
   4600   if (First) {
   4601     //  -- it is implicitly considered to be constexpr if the implicit
   4602     //     definition would be,
   4603     MD->setConstexpr(Constexpr);
   4604 
   4605     //  -- it is implicitly considered to have the same exception-specification
   4606     //     as if it had been implicitly declared,
   4607     FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
   4608     EPI.ExceptionSpecType = EST_Unevaluated;
   4609     EPI.ExceptionSpecDecl = MD;
   4610     MD->setType(Context.getFunctionType(ReturnType,
   4611                                         ArrayRef<QualType>(&ArgType,
   4612                                                            ExpectedParams),
   4613                                         EPI));
   4614   }
   4615 
   4616   if (ShouldDeleteSpecialMember(MD, CSM)) {
   4617     if (First) {
   4618       SetDeclDeleted(MD, MD->getLocation());
   4619     } else {
   4620       // C++11 [dcl.fct.def.default]p4:
   4621       //   [For a] user-provided explicitly-defaulted function [...] if such a
   4622       //   function is implicitly defined as deleted, the program is ill-formed.
   4623       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
   4624       HadError = true;
   4625     }
   4626   }
   4627 
   4628   if (HadError)
   4629     MD->setInvalidDecl();
   4630 }
   4631 
   4632 /// Check whether the exception specification provided for an
   4633 /// explicitly-defaulted special member matches the exception specification
   4634 /// that would have been generated for an implicit special member, per
   4635 /// C++11 [dcl.fct.def.default]p2.
   4636 void Sema::CheckExplicitlyDefaultedMemberExceptionSpec(
   4637     CXXMethodDecl *MD, const FunctionProtoType *SpecifiedType) {
   4638   // Compute the implicit exception specification.
   4639   FunctionProtoType::ExtProtoInfo EPI;
   4640   computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
   4641   const FunctionProtoType *ImplicitType = cast<FunctionProtoType>(
   4642     Context.getFunctionType(Context.VoidTy, None, EPI));
   4643 
   4644   // Ensure that it matches.
   4645   CheckEquivalentExceptionSpec(
   4646     PDiag(diag::err_incorrect_defaulted_exception_spec)
   4647       << getSpecialMember(MD), PDiag(),
   4648     ImplicitType, SourceLocation(),
   4649     SpecifiedType, MD->getLocation());
   4650 }
   4651 
   4652 void Sema::CheckDelayedExplicitlyDefaultedMemberExceptionSpecs() {
   4653   for (unsigned I = 0, N = DelayedDefaultedMemberExceptionSpecs.size();
   4654        I != N; ++I)
   4655     CheckExplicitlyDefaultedMemberExceptionSpec(
   4656       DelayedDefaultedMemberExceptionSpecs[I].first,
   4657       DelayedDefaultedMemberExceptionSpecs[I].second);
   4658 
   4659   DelayedDefaultedMemberExceptionSpecs.clear();
   4660 }
   4661 
   4662 namespace {
   4663 struct SpecialMemberDeletionInfo {
   4664   Sema &S;
   4665   CXXMethodDecl *MD;
   4666   Sema::CXXSpecialMember CSM;
   4667   bool Diagnose;
   4668 
   4669   // Properties of the special member, computed for convenience.
   4670   bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
   4671   SourceLocation Loc;
   4672 
   4673   bool AllFieldsAreConst;
   4674 
   4675   SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
   4676                             Sema::CXXSpecialMember CSM, bool Diagnose)
   4677     : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
   4678       IsConstructor(false), IsAssignment(false), IsMove(false),
   4679       ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
   4680       AllFieldsAreConst(true) {
   4681     switch (CSM) {
   4682       case Sema::CXXDefaultConstructor:
   4683       case Sema::CXXCopyConstructor:
   4684         IsConstructor = true;
   4685         break;
   4686       case Sema::CXXMoveConstructor:
   4687         IsConstructor = true;
   4688         IsMove = true;
   4689         break;
   4690       case Sema::CXXCopyAssignment:
   4691         IsAssignment = true;
   4692         break;
   4693       case Sema::CXXMoveAssignment:
   4694         IsAssignment = true;
   4695         IsMove = true;
   4696         break;
   4697       case Sema::CXXDestructor:
   4698         break;
   4699       case Sema::CXXInvalid:
   4700         llvm_unreachable("invalid special member kind");
   4701     }
   4702 
   4703     if (MD->getNumParams()) {
   4704       ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
   4705       VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
   4706     }
   4707   }
   4708 
   4709   bool inUnion() const { return MD->getParent()->isUnion(); }
   4710 
   4711   /// Look up the corresponding special member in the given class.
   4712   Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
   4713                                               unsigned Quals) {
   4714     unsigned TQ = MD->getTypeQualifiers();
   4715     // cv-qualifiers on class members don't affect default ctor / dtor calls.
   4716     if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
   4717       Quals = 0;
   4718     return S.LookupSpecialMember(Class, CSM,
   4719                                  ConstArg || (Quals & Qualifiers::Const),
   4720                                  VolatileArg || (Quals & Qualifiers::Volatile),
   4721                                  MD->getRefQualifier() == RQ_RValue,
   4722                                  TQ & Qualifiers::Const,
   4723                                  TQ & Qualifiers::Volatile);
   4724   }
   4725 
   4726   typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
   4727 
   4728   bool shouldDeleteForBase(CXXBaseSpecifier *Base);
   4729   bool shouldDeleteForField(FieldDecl *FD);
   4730   bool shouldDeleteForAllConstMembers();
   4731 
   4732   bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
   4733                                      unsigned Quals);
   4734   bool shouldDeleteForSubobjectCall(Subobject Subobj,
   4735                                     Sema::SpecialMemberOverloadResult *SMOR,
   4736                                     bool IsDtorCallInCtor);
   4737 
   4738   bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
   4739 };
   4740 }
   4741 
   4742 /// Is the given special member inaccessible when used on the given
   4743 /// sub-object.
   4744 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
   4745                                              CXXMethodDecl *target) {
   4746   /// If we're operating on a base class, the object type is the
   4747   /// type of this special member.
   4748   QualType objectTy;
   4749   AccessSpecifier access = target->getAccess();
   4750   if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
   4751     objectTy = S.Context.getTypeDeclType(MD->getParent());
   4752     access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
   4753 
   4754   // If we're operating on a field, the object type is the type of the field.
   4755   } else {
   4756     objectTy = S.Context.getTypeDeclType(target->getParent());
   4757   }
   4758 
   4759   return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
   4760 }
   4761 
   4762 /// Check whether we should delete a special member due to the implicit
   4763 /// definition containing a call to a special member of a subobject.
   4764 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
   4765     Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
   4766     bool IsDtorCallInCtor) {
   4767   CXXMethodDecl *Decl = SMOR->getMethod();
   4768   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
   4769 
   4770   int DiagKind = -1;
   4771 
   4772   if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
   4773     DiagKind = !Decl ? 0 : 1;
   4774   else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
   4775     DiagKind = 2;
   4776   else if (!isAccessible(Subobj, Decl))
   4777     DiagKind = 3;
   4778   else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
   4779            !Decl->isTrivial()) {
   4780     // A member of a union must have a trivial corresponding special member.
   4781     // As a weird special case, a destructor call from a union's constructor
   4782     // must be accessible and non-deleted, but need not be trivial. Such a
   4783     // destructor is never actually called, but is semantically checked as
   4784     // if it were.
   4785     DiagKind = 4;
   4786   }
   4787 
   4788   if (DiagKind == -1)
   4789     return false;
   4790 
   4791   if (Diagnose) {
   4792     if (Field) {
   4793       S.Diag(Field->getLocation(),
   4794              diag::note_deleted_special_member_class_subobject)
   4795         << CSM << MD->getParent() << /*IsField*/true
   4796         << Field << DiagKind << IsDtorCallInCtor;
   4797     } else {
   4798       CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
   4799       S.Diag(Base->getLocStart(),
   4800              diag::note_deleted_special_member_class_subobject)
   4801         << CSM << MD->getParent() << /*IsField*/false
   4802         << Base->getType() << DiagKind << IsDtorCallInCtor;
   4803     }
   4804 
   4805     if (DiagKind == 1)
   4806       S.NoteDeletedFunction(Decl);
   4807     // FIXME: Explain inaccessibility if DiagKind == 3.
   4808   }
   4809 
   4810   return true;
   4811 }
   4812 
   4813 /// Check whether we should delete a special member function due to having a
   4814 /// direct or virtual base class or non-static data member of class type M.
   4815 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
   4816     CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
   4817   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
   4818 
   4819   // C++11 [class.ctor]p5:
   4820   // -- any direct or virtual base class, or non-static data member with no
   4821   //    brace-or-equal-initializer, has class type M (or array thereof) and
   4822   //    either M has no default constructor or overload resolution as applied
   4823   //    to M's default constructor results in an ambiguity or in a function
   4824   //    that is deleted or inaccessible
   4825   // C++11 [class.copy]p11, C++11 [class.copy]p23:
   4826   // -- a direct or virtual base class B that cannot be copied/moved because
   4827   //    overload resolution, as applied to B's corresponding special member,
   4828   //    results in an ambiguity or a function that is deleted or inaccessible
   4829   //    from the defaulted special member
   4830   // C++11 [class.dtor]p5:
   4831   // -- any direct or virtual base class [...] has a type with a destructor
   4832   //    that is deleted or inaccessible
   4833   if (!(CSM == Sema::CXXDefaultConstructor &&
   4834         Field && Field->hasInClassInitializer()) &&
   4835       shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals), false))
   4836     return true;
   4837 
   4838   // C++11 [class.ctor]p5, C++11 [class.copy]p11:
   4839   // -- any direct or virtual base class or non-static data member has a
   4840   //    type with a destructor that is deleted or inaccessible
   4841   if (IsConstructor) {
   4842     Sema::SpecialMemberOverloadResult *SMOR =
   4843         S.LookupSpecialMember(Class, Sema::CXXDestructor,
   4844                               false, false, false, false, false);
   4845     if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
   4846       return true;
   4847   }
   4848 
   4849   return false;
   4850 }
   4851 
   4852 /// Check whether we should delete a special member function due to the class
   4853 /// having a particular direct or virtual base class.
   4854 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
   4855   CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
   4856   return shouldDeleteForClassSubobject(BaseClass, Base, 0);
   4857 }
   4858 
   4859 /// Check whether we should delete a special member function due to the class
   4860 /// having a particular non-static data member.
   4861 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
   4862   QualType FieldType = S.Context.getBaseElementType(FD->getType());
   4863   CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4864 
   4865   if (CSM == Sema::CXXDefaultConstructor) {
   4866     // For a default constructor, all references must be initialized in-class
   4867     // and, if a union, it must have a non-const member.
   4868     if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
   4869       if (Diagnose)
   4870         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
   4871           << MD->getParent() << FD << FieldType << /*Reference*/0;
   4872       return true;
   4873     }
   4874     // C++11 [class.ctor]p5: any non-variant non-static data member of
   4875     // const-qualified type (or array thereof) with no
   4876     // brace-or-equal-initializer does not have a user-provided default
   4877     // constructor.
   4878     if (!inUnion() && FieldType.isConstQualified() &&
   4879         !FD->hasInClassInitializer() &&
   4880         (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
   4881       if (Diagnose)
   4882         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
   4883           << MD->getParent() << FD << FD->getType() << /*Const*/1;
   4884       return true;
   4885     }
   4886 
   4887     if (inUnion() && !FieldType.isConstQualified())
   4888       AllFieldsAreConst = false;
   4889   } else if (CSM == Sema::CXXCopyConstructor) {
   4890     // For a copy constructor, data members must not be of rvalue reference
   4891     // type.
   4892     if (FieldType->isRValueReferenceType()) {
   4893       if (Diagnose)
   4894         S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
   4895           << MD->getParent() << FD << FieldType;
   4896       return true;
   4897     }
   4898   } else if (IsAssignment) {
   4899     // For an assignment operator, data members must not be of reference type.
   4900     if (FieldType->isReferenceType()) {
   4901       if (Diagnose)
   4902         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
   4903           << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
   4904       return true;
   4905     }
   4906     if (!FieldRecord && FieldType.isConstQualified()) {
   4907       // C++11 [class.copy]p23:
   4908       // -- a non-static data member of const non-class type (or array thereof)
   4909       if (Diagnose)
   4910         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
   4911           << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
   4912       return true;
   4913     }
   4914   }
   4915 
   4916   if (FieldRecord) {
   4917     // Some additional restrictions exist on the variant members.
   4918     if (!inUnion() && FieldRecord->isUnion() &&
   4919         FieldRecord->isAnonymousStructOrUnion()) {
   4920       bool AllVariantFieldsAreConst = true;
   4921 
   4922       // FIXME: Handle anonymous unions declared within anonymous unions.
   4923       for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4924                                          UE = FieldRecord->field_end();
   4925            UI != UE; ++UI) {
   4926         QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
   4927 
   4928         if (!UnionFieldType.isConstQualified())
   4929           AllVariantFieldsAreConst = false;
   4930 
   4931         CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
   4932         if (UnionFieldRecord &&
   4933             shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
   4934                                           UnionFieldType.getCVRQualifiers()))
   4935           return true;
   4936       }
   4937 
   4938       // At least one member in each anonymous union must be non-const
   4939       if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
   4940           FieldRecord->field_begin() != FieldRecord->field_end()) {
   4941         if (Diagnose)
   4942           S.Diag(FieldRecord->getLocation(),
   4943                  diag::note_deleted_default_ctor_all_const)
   4944             << MD->getParent() << /*anonymous union*/1;
   4945         return true;
   4946       }
   4947 
   4948       // Don't check the implicit member of the anonymous union type.
   4949       // This is technically non-conformant, but sanity demands it.
   4950       return false;
   4951     }
   4952 
   4953     if (shouldDeleteForClassSubobject(FieldRecord, FD,
   4954                                       FieldType.getCVRQualifiers()))
   4955       return true;
   4956   }
   4957 
   4958   return false;
   4959 }
   4960 
   4961 /// C++11 [class.ctor] p5:
   4962 ///   A defaulted default constructor for a class X is defined as deleted if
   4963 /// X is a union and all of its variant members are of const-qualified type.
   4964 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
   4965   // This is a silly definition, because it gives an empty union a deleted
   4966   // default constructor. Don't do that.
   4967   if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
   4968       (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
   4969     if (Diagnose)
   4970       S.Diag(MD->getParent()->getLocation(),
   4971              diag::note_deleted_default_ctor_all_const)
   4972         << MD->getParent() << /*not anonymous union*/0;
   4973     return true;
   4974   }
   4975   return false;
   4976 }
   4977 
   4978 /// Determine whether a defaulted special member function should be defined as
   4979 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
   4980 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
   4981 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
   4982                                      bool Diagnose) {
   4983   if (MD->isInvalidDecl())
   4984     return false;
   4985   CXXRecordDecl *RD = MD->getParent();
   4986   assert(!RD->isDependentType() && "do deletion after instantiation");
   4987   if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
   4988     return false;
   4989 
   4990   // C++11 [expr.lambda.prim]p19:
   4991   //   The closure type associated with a lambda-expression has a
   4992   //   deleted (8.4.3) default constructor and a deleted copy
   4993   //   assignment operator.
   4994   if (RD->isLambda() &&
   4995       (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
   4996     if (Diagnose)
   4997       Diag(RD->getLocation(), diag::note_lambda_decl);
   4998     return true;
   4999   }
   5000 
   5001   // For an anonymous struct or union, the copy and assignment special members
   5002   // will never be used, so skip the check. For an anonymous union declared at
   5003   // namespace scope, the constructor and destructor are used.
   5004   if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
   5005       RD->isAnonymousStructOrUnion())
   5006     return false;
   5007 
   5008   // C++11 [class.copy]p7, p18:
   5009   //   If the class definition declares a move constructor or move assignment
   5010   //   operator, an implicitly declared copy constructor or copy assignment
   5011   //   operator is defined as deleted.
   5012   if (MD->isImplicit() &&
   5013       (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
   5014     CXXMethodDecl *UserDeclaredMove = 0;
   5015 
   5016     // In Microsoft mode, a user-declared move only causes the deletion of the
   5017     // corresponding copy operation, not both copy operations.
   5018     if (RD->hasUserDeclaredMoveConstructor() &&
   5019         (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
   5020       if (!Diagnose) return true;
   5021 
   5022       // Find any user-declared move constructor.
   5023       for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
   5024                                         E = RD->ctor_end(); I != E; ++I) {
   5025         if (I->isMoveConstructor()) {
   5026           UserDeclaredMove = *I;
   5027           break;
   5028         }
   5029       }
   5030       assert(UserDeclaredMove);
   5031     } else if (RD->hasUserDeclaredMoveAssignment() &&
   5032                (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
   5033       if (!Diagnose) return true;
   5034 
   5035       // Find any user-declared move assignment operator.
   5036       for (CXXRecordDecl::method_iterator I = RD->method_begin(),
   5037                                           E = RD->method_end(); I != E; ++I) {
   5038         if (I->isMoveAssignmentOperator()) {
   5039           UserDeclaredMove = *I;
   5040           break;
   5041         }
   5042       }
   5043       assert(UserDeclaredMove);
   5044     }
   5045 
   5046     if (UserDeclaredMove) {
   5047       Diag(UserDeclaredMove->getLocation(),
   5048            diag::note_deleted_copy_user_declared_move)
   5049         << (CSM == CXXCopyAssignment) << RD
   5050         << UserDeclaredMove->isMoveAssignmentOperator();
   5051       return true;
   5052     }
   5053   }
   5054 
   5055   // Do access control from the special member function
   5056   ContextRAII MethodContext(*this, MD);
   5057 
   5058   // C++11 [class.dtor]p5:
   5059   // -- for a virtual destructor, lookup of the non-array deallocation function
   5060   //    results in an ambiguity or in a function that is deleted or inaccessible
   5061   if (CSM == CXXDestructor && MD->isVirtual()) {
   5062     FunctionDecl *OperatorDelete = 0;
   5063     DeclarationName Name =
   5064       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   5065     if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
   5066                                  OperatorDelete, false)) {
   5067       if (Diagnose)
   5068         Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
   5069       return true;
   5070     }
   5071   }
   5072 
   5073   SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
   5074 
   5075   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   5076                                           BE = RD->bases_end(); BI != BE; ++BI)
   5077     if (!BI->isVirtual() &&
   5078         SMI.shouldDeleteForBase(BI))
   5079       return true;
   5080 
   5081   // Per DR1611, do not consider virtual bases of constructors of abstract
   5082   // classes, since we are not going to construct them.
   5083   if (!RD->isAbstract() || !SMI.IsConstructor) {
   5084     for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
   5085                                             BE = RD->vbases_end();
   5086          BI != BE; ++BI)
   5087       if (SMI.shouldDeleteForBase(BI))
   5088         return true;
   5089   }
   5090 
   5091   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   5092                                      FE = RD->field_end(); FI != FE; ++FI)
   5093     if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
   5094         SMI.shouldDeleteForField(*FI))
   5095       return true;
   5096 
   5097   if (SMI.shouldDeleteForAllConstMembers())
   5098     return true;
   5099 
   5100   return false;
   5101 }
   5102 
   5103 /// Perform lookup for a special member of the specified kind, and determine
   5104 /// whether it is trivial. If the triviality can be determined without the
   5105 /// lookup, skip it. This is intended for use when determining whether a
   5106 /// special member of a containing object is trivial, and thus does not ever
   5107 /// perform overload resolution for default constructors.
   5108 ///
   5109 /// If \p Selected is not \c NULL, \c *Selected will be filled in with the
   5110 /// member that was most likely to be intended to be trivial, if any.
   5111 static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
   5112                                      Sema::CXXSpecialMember CSM, unsigned Quals,
   5113                                      CXXMethodDecl **Selected) {
   5114   if (Selected)
   5115     *Selected = 0;
   5116 
   5117   switch (CSM) {
   5118   case Sema::CXXInvalid:
   5119     llvm_unreachable("not a special member");
   5120 
   5121   case Sema::CXXDefaultConstructor:
   5122     // C++11 [class.ctor]p5:
   5123     //   A default constructor is trivial if:
   5124     //    - all the [direct subobjects] have trivial default constructors
   5125     //
   5126     // Note, no overload resolution is performed in this case.
   5127     if (RD->hasTrivialDefaultConstructor())
   5128       return true;
   5129 
   5130     if (Selected) {
   5131       // If there's a default constructor which could have been trivial, dig it
   5132       // out. Otherwise, if there's any user-provided default constructor, point
   5133       // to that as an example of why there's not a trivial one.
   5134       CXXConstructorDecl *DefCtor = 0;
   5135       if (RD->needsImplicitDefaultConstructor())
   5136         S.DeclareImplicitDefaultConstructor(RD);
   5137       for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(),
   5138                                         CE = RD->ctor_end(); CI != CE; ++CI) {
   5139         if (!CI->isDefaultConstructor())
   5140           continue;
   5141         DefCtor = *CI;
   5142         if (!DefCtor->isUserProvided())
   5143           break;
   5144       }
   5145 
   5146       *Selected = DefCtor;
   5147     }
   5148 
   5149     return false;
   5150 
   5151   case Sema::CXXDestructor:
   5152     // C++11 [class.dtor]p5:
   5153     //   A destructor is trivial if:
   5154     //    - all the direct [subobjects] have trivial destructors
   5155     if (RD->hasTrivialDestructor())
   5156       return true;
   5157 
   5158     if (Selected) {
   5159       if (RD->needsImplicitDestructor())
   5160         S.DeclareImplicitDestructor(RD);
   5161       *Selected = RD->getDestructor();
   5162     }
   5163 
   5164     return false;
   5165 
   5166   case Sema::CXXCopyConstructor:
   5167     // C++11 [class.copy]p12:
   5168     //   A copy constructor is trivial if:
   5169     //    - the constructor selected to copy each direct [subobject] is trivial
   5170     if (RD->hasTrivialCopyConstructor()) {
   5171       if (Quals == Qualifiers::Const)
   5172         // We must either select the trivial copy constructor or reach an
   5173         // ambiguity; no need to actually perform overload resolution.
   5174         return true;
   5175     } else if (!Selected) {
   5176       return false;
   5177     }
   5178     // In C++98, we are not supposed to perform overload resolution here, but we
   5179     // treat that as a language defect, as suggested on cxx-abi-dev, to treat
   5180     // cases like B as having a non-trivial copy constructor:
   5181     //   struct A { template<typename T> A(T&); };
   5182     //   struct B { mutable A a; };
   5183     goto NeedOverloadResolution;
   5184 
   5185   case Sema::CXXCopyAssignment:
   5186     // C++11 [class.copy]p25:
   5187     //   A copy assignment operator is trivial if:
   5188     //    - the assignment operator selected to copy each direct [subobject] is
   5189     //      trivial
   5190     if (RD->hasTrivialCopyAssignment()) {
   5191       if (Quals == Qualifiers::Const)
   5192         return true;
   5193     } else if (!Selected) {
   5194       return false;
   5195     }
   5196     // In C++98, we are not supposed to perform overload resolution here, but we
   5197     // treat that as a language defect.
   5198     goto NeedOverloadResolution;
   5199 
   5200   case Sema::CXXMoveConstructor:
   5201   case Sema::CXXMoveAssignment:
   5202   NeedOverloadResolution:
   5203     Sema::SpecialMemberOverloadResult *SMOR =
   5204       S.LookupSpecialMember(RD, CSM,
   5205                             Quals & Qualifiers::Const,
   5206                             Quals & Qualifiers::Volatile,
   5207                             /*RValueThis*/false, /*ConstThis*/false,
   5208                             /*VolatileThis*/false);
   5209 
   5210     // The standard doesn't describe how to behave if the lookup is ambiguous.
   5211     // We treat it as not making the member non-trivial, just like the standard
   5212     // mandates for the default constructor. This should rarely matter, because
   5213     // the member will also be deleted.
   5214     if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
   5215       return true;
   5216 
   5217     if (!SMOR->getMethod()) {
   5218       assert(SMOR->getKind() ==
   5219              Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
   5220       return false;
   5221     }
   5222 
   5223     // We deliberately don't check if we found a deleted special member. We're
   5224     // not supposed to!
   5225     if (Selected)
   5226       *Selected = SMOR->getMethod();
   5227     return SMOR->getMethod()->isTrivial();
   5228   }
   5229 
   5230   llvm_unreachable("unknown special method kind");
   5231 }
   5232 
   5233 static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
   5234   for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end();
   5235        CI != CE; ++CI)
   5236     if (!CI->isImplicit())
   5237       return *CI;
   5238 
   5239   // Look for constructor templates.
   5240   typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
   5241   for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
   5242     if (CXXConstructorDecl *CD =
   5243           dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
   5244       return CD;
   5245   }
   5246 
   5247   return 0;
   5248 }
   5249 
   5250 /// The kind of subobject we are checking for triviality. The values of this
   5251 /// enumeration are used in diagnostics.
   5252 enum TrivialSubobjectKind {
   5253   /// The subobject is a base class.
   5254   TSK_BaseClass,
   5255   /// The subobject is a non-static data member.
   5256   TSK_Field,
   5257   /// The object is actually the complete object.
   5258   TSK_CompleteObject
   5259 };
   5260 
   5261 /// Check whether the special member selected for a given type would be trivial.
   5262 static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
   5263                                       QualType SubType,
   5264                                       Sema::CXXSpecialMember CSM,
   5265                                       TrivialSubobjectKind Kind,
   5266                                       bool Diagnose) {
   5267   CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
   5268   if (!SubRD)
   5269     return true;
   5270 
   5271   CXXMethodDecl *Selected;
   5272   if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
   5273                                Diagnose ? &Selected : 0))
   5274     return true;
   5275 
   5276   if (Diagnose) {
   5277     if (!Selected && CSM == Sema::CXXDefaultConstructor) {
   5278       S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
   5279         << Kind << SubType.getUnqualifiedType();
   5280       if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
   5281         S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
   5282     } else if (!Selected)
   5283       S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
   5284         << Kind << SubType.getUnqualifiedType() << CSM << SubType;
   5285     else if (Selected->isUserProvided()) {
   5286       if (Kind == TSK_CompleteObject)
   5287         S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
   5288           << Kind << SubType.getUnqualifiedType() << CSM;
   5289       else {
   5290         S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
   5291           << Kind << SubType.getUnqualifiedType() << CSM;
   5292         S.Diag(Selected->getLocation(), diag::note_declared_at);
   5293       }
   5294     } else {
   5295       if (Kind != TSK_CompleteObject)
   5296         S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
   5297           << Kind << SubType.getUnqualifiedType() << CSM;
   5298 
   5299       // Explain why the defaulted or deleted special member isn't trivial.
   5300       S.SpecialMemberIsTrivial(Selected, CSM, Diagnose);
   5301     }
   5302   }
   5303 
   5304   return false;
   5305 }
   5306 
   5307 /// Check whether the members of a class type allow a special member to be
   5308 /// trivial.
   5309 static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
   5310                                      Sema::CXXSpecialMember CSM,
   5311                                      bool ConstArg, bool Diagnose) {
   5312   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   5313                                      FE = RD->field_end(); FI != FE; ++FI) {
   5314     if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
   5315       continue;
   5316 
   5317     QualType FieldType = S.Context.getBaseElementType(FI->getType());
   5318 
   5319     // Pretend anonymous struct or union members are members of this class.
   5320     if (FI->isAnonymousStructOrUnion()) {
   5321       if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
   5322                                     CSM, ConstArg, Diagnose))
   5323         return false;
   5324       continue;
   5325     }
   5326 
   5327     // C++11 [class.ctor]p5:
   5328     //   A default constructor is trivial if [...]
   5329     //    -- no non-static data member of its class has a
   5330     //       brace-or-equal-initializer
   5331     if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
   5332       if (Diagnose)
   5333         S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI;
   5334       return false;
   5335     }
   5336 
   5337     // Objective C ARC 4.3.5:
   5338     //   [...] nontrivally ownership-qualified types are [...] not trivially
   5339     //   default constructible, copy constructible, move constructible, copy
   5340     //   assignable, move assignable, or destructible [...]
   5341     if (S.getLangOpts().ObjCAutoRefCount &&
   5342         FieldType.hasNonTrivialObjCLifetime()) {
   5343       if (Diagnose)
   5344         S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
   5345           << RD << FieldType.getObjCLifetime();
   5346       return false;
   5347     }
   5348 
   5349     if (ConstArg && !FI->isMutable())
   5350       FieldType.addConst();
   5351     if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, CSM,
   5352                                    TSK_Field, Diagnose))
   5353       return false;
   5354   }
   5355 
   5356   return true;
   5357 }
   5358 
   5359 /// Diagnose why the specified class does not have a trivial special member of
   5360 /// the given kind.
   5361 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
   5362   QualType Ty = Context.getRecordType(RD);
   5363   if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)
   5364     Ty.addConst();
   5365 
   5366   checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, CSM,
   5367                             TSK_CompleteObject, /*Diagnose*/true);
   5368 }
   5369 
   5370 /// Determine whether a defaulted or deleted special member function is trivial,
   5371 /// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
   5372 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
   5373 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
   5374                                   bool Diagnose) {
   5375   assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
   5376 
   5377   CXXRecordDecl *RD = MD->getParent();
   5378 
   5379   bool ConstArg = false;
   5380 
   5381   // C++11 [class.copy]p12, p25:
   5382   //   A [special member] is trivial if its declared parameter type is the same
   5383   //   as if it had been implicitly declared [...]
   5384   switch (CSM) {
   5385   case CXXDefaultConstructor:
   5386   case CXXDestructor:
   5387     // Trivial default constructors and destructors cannot have parameters.
   5388     break;
   5389 
   5390   case CXXCopyConstructor:
   5391   case CXXCopyAssignment: {
   5392     // Trivial copy operations always have const, non-volatile parameter types.
   5393     ConstArg = true;
   5394     const ParmVarDecl *Param0 = MD->getParamDecl(0);
   5395     const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
   5396     if (!RT || RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) {
   5397       if (Diagnose)
   5398         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
   5399           << Param0->getSourceRange() << Param0->getType()
   5400           << Context.getLValueReferenceType(
   5401                Context.getRecordType(RD).withConst());
   5402       return false;
   5403     }
   5404     break;
   5405   }
   5406 
   5407   case CXXMoveConstructor:
   5408   case CXXMoveAssignment: {
   5409     // Trivial move operations always have non-cv-qualified parameters.
   5410     const ParmVarDecl *Param0 = MD->getParamDecl(0);
   5411     const RValueReferenceType *RT =
   5412       Param0->getType()->getAs<RValueReferenceType>();
   5413     if (!RT || RT->getPointeeType().getCVRQualifiers()) {
   5414       if (Diagnose)
   5415         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
   5416           << Param0->getSourceRange() << Param0->getType()
   5417           << Context.getRValueReferenceType(Context.getRecordType(RD));
   5418       return false;
   5419     }
   5420     break;
   5421   }
   5422 
   5423   case CXXInvalid:
   5424     llvm_unreachable("not a special member");
   5425   }
   5426 
   5427   // FIXME: We require that the parameter-declaration-clause is equivalent to
   5428   // that of an implicit declaration, not just that the declared parameter type
   5429   // matches, in order to prevent absuridities like a function simultaneously
   5430   // being a trivial copy constructor and a non-trivial default constructor.
   5431   // This issue has not yet been assigned a core issue number.
   5432   if (MD->getMinRequiredArguments() < MD->getNumParams()) {
   5433     if (Diagnose)
   5434       Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
   5435            diag::note_nontrivial_default_arg)
   5436         << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
   5437     return false;
   5438   }
   5439   if (MD->isVariadic()) {
   5440     if (Diagnose)
   5441       Diag(MD->getLocation(), diag::note_nontrivial_variadic);
   5442     return false;
   5443   }
   5444 
   5445   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
   5446   //   A copy/move [constructor or assignment operator] is trivial if
   5447   //    -- the [member] selected to copy/move each direct base class subobject
   5448   //       is trivial
   5449   //
   5450   // C++11 [class.copy]p12, C++11 [class.copy]p25:
   5451   //   A [default constructor or destructor] is trivial if
   5452   //    -- all the direct base classes have trivial [default constructors or
   5453   //       destructors]
   5454   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   5455                                           BE = RD->bases_end(); BI != BE; ++BI)
   5456     if (!checkTrivialSubobjectCall(*this, BI->getLocStart(),
   5457                                    ConstArg ? BI->getType().withConst()
   5458                                             : BI->getType(),
   5459                                    CSM, TSK_BaseClass, Diagnose))
   5460       return false;
   5461 
   5462   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
   5463   //   A copy/move [constructor or assignment operator] for a class X is
   5464   //   trivial if
   5465   //    -- for each non-static data member of X that is of class type (or array
   5466   //       thereof), the constructor selected to copy/move that member is
   5467   //       trivial
   5468   //
   5469   // C++11 [class.copy]p12, C++11 [class.copy]p25:
   5470   //   A [default constructor or destructor] is trivial if
   5471   //    -- for all of the non-static data members of its class that are of class
   5472   //       type (or array thereof), each such class has a trivial [default
   5473   //       constructor or destructor]
   5474   if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, Diagnose))
   5475     return false;
   5476 
   5477   // C++11 [class.dtor]p5:
   5478   //   A destructor is trivial if [...]
   5479   //    -- the destructor is not virtual
   5480   if (CSM == CXXDestructor && MD->isVirtual()) {
   5481     if (Diagnose)
   5482       Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
   5483     return false;
   5484   }
   5485 
   5486   // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
   5487   //   A [special member] for class X is trivial if [...]
   5488   //    -- class X has no virtual functions and no virtual base classes
   5489   if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
   5490     if (!Diagnose)
   5491       return false;
   5492 
   5493     if (RD->getNumVBases()) {
   5494       // Check for virtual bases. We already know that the corresponding
   5495       // member in all bases is trivial, so vbases must all be direct.
   5496       CXXBaseSpecifier &BS = *RD->vbases_begin();
   5497       assert(BS.isVirtual());
   5498       Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1;
   5499       return false;
   5500     }
   5501 
   5502     // Must have a virtual method.
   5503     for (CXXRecordDecl::method_iterator MI = RD->method_begin(),
   5504                                         ME = RD->method_end(); MI != ME; ++MI) {
   5505       if (MI->isVirtual()) {
   5506         SourceLocation MLoc = MI->getLocStart();
   5507         Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
   5508         return false;
   5509       }
   5510     }
   5511 
   5512     llvm_unreachable("dynamic class with no vbases and no virtual functions");
   5513   }
   5514 
   5515   // Looks like it's trivial!
   5516   return true;
   5517 }
   5518 
   5519 /// \brief Data used with FindHiddenVirtualMethod
   5520 namespace {
   5521   struct FindHiddenVirtualMethodData {
   5522     Sema *S;
   5523     CXXMethodDecl *Method;
   5524     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
   5525     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
   5526   };
   5527 }
   5528 
   5529 /// \brief Check whether any most overriden method from MD in Methods
   5530 static bool CheckMostOverridenMethods(const CXXMethodDecl *MD,
   5531                    const llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
   5532   if (MD->size_overridden_methods() == 0)
   5533     return Methods.count(MD->getCanonicalDecl());
   5534   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
   5535                                       E = MD->end_overridden_methods();
   5536        I != E; ++I)
   5537     if (CheckMostOverridenMethods(*I, Methods))
   5538       return true;
   5539   return false;
   5540 }
   5541 
   5542 /// \brief Member lookup function that determines whether a given C++
   5543 /// method overloads virtual methods in a base class without overriding any,
   5544 /// to be used with CXXRecordDecl::lookupInBases().
   5545 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
   5546                                     CXXBasePath &Path,
   5547                                     void *UserData) {
   5548   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
   5549 
   5550   FindHiddenVirtualMethodData &Data
   5551     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
   5552 
   5553   DeclarationName Name = Data.Method->getDeclName();
   5554   assert(Name.getNameKind() == DeclarationName::Identifier);
   5555 
   5556   bool foundSameNameMethod = false;
   5557   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
   5558   for (Path.Decls = BaseRecord->lookup(Name);
   5559        !Path.Decls.empty();
   5560        Path.Decls = Path.Decls.slice(1)) {
   5561     NamedDecl *D = Path.Decls.front();
   5562     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
   5563       MD = MD->getCanonicalDecl();
   5564       foundSameNameMethod = true;
   5565       // Interested only in hidden virtual methods.
   5566       if (!MD->isVirtual())
   5567         continue;
   5568       // If the method we are checking overrides a method from its base
   5569       // don't warn about the other overloaded methods.
   5570       if (!Data.S->IsOverload(Data.Method, MD, false))
   5571         return true;
   5572       // Collect the overload only if its hidden.
   5573       if (!CheckMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods))
   5574         overloadedMethods.push_back(MD);
   5575     }
   5576   }
   5577 
   5578   if (foundSameNameMethod)
   5579     Data.OverloadedMethods.append(overloadedMethods.begin(),
   5580                                    overloadedMethods.end());
   5581   return foundSameNameMethod;
   5582 }
   5583 
   5584 /// \brief Add the most overriden methods from MD to Methods
   5585 static void AddMostOverridenMethods(const CXXMethodDecl *MD,
   5586                          llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
   5587   if (MD->size_overridden_methods() == 0)
   5588     Methods.insert(MD->getCanonicalDecl());
   5589   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
   5590                                       E = MD->end_overridden_methods();
   5591        I != E; ++I)
   5592     AddMostOverridenMethods(*I, Methods);
   5593 }
   5594 
   5595 /// \brief See if a method overloads virtual methods in a base class without
   5596 /// overriding any.
   5597 void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
   5598   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
   5599                                MD->getLocation()) == DiagnosticsEngine::Ignored)
   5600     return;
   5601   if (!MD->getDeclName().isIdentifier())
   5602     return;
   5603 
   5604   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
   5605                      /*bool RecordPaths=*/false,
   5606                      /*bool DetectVirtual=*/false);
   5607   FindHiddenVirtualMethodData Data;
   5608   Data.Method = MD;
   5609   Data.S = this;
   5610 
   5611   // Keep the base methods that were overriden or introduced in the subclass
   5612   // by 'using' in a set. A base method not in this set is hidden.
   5613   DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
   5614   for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
   5615     NamedDecl *ND = *I;
   5616     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
   5617       ND = shad->getTargetDecl();
   5618     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
   5619       AddMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods);
   5620   }
   5621 
   5622   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
   5623       !Data.OverloadedMethods.empty()) {
   5624     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
   5625       << MD << (Data.OverloadedMethods.size() > 1);
   5626 
   5627     for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
   5628       CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
   5629       PartialDiagnostic PD = PDiag(
   5630            diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
   5631       HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
   5632       Diag(overloadedMD->getLocation(), PD);
   5633     }
   5634   }
   5635 }
   5636 
   5637 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
   5638                                              Decl *TagDecl,
   5639                                              SourceLocation LBrac,
   5640                                              SourceLocation RBrac,
   5641                                              AttributeList *AttrList) {
   5642   if (!TagDecl)
   5643     return;
   5644 
   5645   AdjustDeclIfTemplate(TagDecl);
   5646 
   5647   for (const AttributeList* l = AttrList; l; l = l->getNext()) {
   5648     if (l->getKind() != AttributeList::AT_Visibility)
   5649       continue;
   5650     l->setInvalid();
   5651     Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
   5652       l->getName();
   5653   }
   5654 
   5655   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
   5656               // strict aliasing violation!
   5657               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
   5658               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
   5659 
   5660   CheckCompletedCXXClass(
   5661                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
   5662 }
   5663 
   5664 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
   5665 /// special functions, such as the default constructor, copy
   5666 /// constructor, or destructor, to the given C++ class (C++
   5667 /// [special]p1).  This routine can only be executed just before the
   5668 /// definition of the class is complete.
   5669 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
   5670   if (!ClassDecl->hasUserDeclaredConstructor())
   5671     ++ASTContext::NumImplicitDefaultConstructors;
   5672 
   5673   if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
   5674     ++ASTContext::NumImplicitCopyConstructors;
   5675 
   5676     // If the properties or semantics of the copy constructor couldn't be
   5677     // determined while the class was being declared, force a declaration
   5678     // of it now.
   5679     if (ClassDecl->needsOverloadResolutionForCopyConstructor())
   5680       DeclareImplicitCopyConstructor(ClassDecl);
   5681   }
   5682 
   5683   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
   5684     ++ASTContext::NumImplicitMoveConstructors;
   5685 
   5686     if (ClassDecl->needsOverloadResolutionForMoveConstructor())
   5687       DeclareImplicitMoveConstructor(ClassDecl);
   5688   }
   5689 
   5690   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
   5691     ++ASTContext::NumImplicitCopyAssignmentOperators;
   5692 
   5693     // If we have a dynamic class, then the copy assignment operator may be
   5694     // virtual, so we have to declare it immediately. This ensures that, e.g.,
   5695     // it shows up in the right place in the vtable and that we diagnose
   5696     // problems with the implicit exception specification.
   5697     if (ClassDecl->isDynamicClass() ||
   5698         ClassDecl->needsOverloadResolutionForCopyAssignment())
   5699       DeclareImplicitCopyAssignment(ClassDecl);
   5700   }
   5701 
   5702   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
   5703     ++ASTContext::NumImplicitMoveAssignmentOperators;
   5704 
   5705     // Likewise for the move assignment operator.
   5706     if (ClassDecl->isDynamicClass() ||
   5707         ClassDecl->needsOverloadResolutionForMoveAssignment())
   5708       DeclareImplicitMoveAssignment(ClassDecl);
   5709   }
   5710 
   5711   if (!ClassDecl->hasUserDeclaredDestructor()) {
   5712     ++ASTContext::NumImplicitDestructors;
   5713 
   5714     // If we have a dynamic class, then the destructor may be virtual, so we
   5715     // have to declare the destructor immediately. This ensures that, e.g., it
   5716     // shows up in the right place in the vtable and that we diagnose problems
   5717     // with the implicit exception specification.
   5718     if (ClassDecl->isDynamicClass() ||
   5719         ClassDecl->needsOverloadResolutionForDestructor())
   5720       DeclareImplicitDestructor(ClassDecl);
   5721   }
   5722 }
   5723 
   5724 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
   5725   if (!D)
   5726     return;
   5727 
   5728   int NumParamList = D->getNumTemplateParameterLists();
   5729   for (int i = 0; i < NumParamList; i++) {
   5730     TemplateParameterList* Params = D->getTemplateParameterList(i);
   5731     for (TemplateParameterList::iterator Param = Params->begin(),
   5732                                       ParamEnd = Params->end();
   5733           Param != ParamEnd; ++Param) {
   5734       NamedDecl *Named = cast<NamedDecl>(*Param);
   5735       if (Named->getDeclName()) {
   5736         S->AddDecl(Named);
   5737         IdResolver.AddDecl(Named);
   5738       }
   5739     }
   5740   }
   5741 }
   5742 
   5743 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
   5744   if (!D)
   5745     return;
   5746 
   5747   TemplateParameterList *Params = 0;
   5748   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
   5749     Params = Template->getTemplateParameters();
   5750   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
   5751            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
   5752     Params = PartialSpec->getTemplateParameters();
   5753   else
   5754     return;
   5755 
   5756   for (TemplateParameterList::iterator Param = Params->begin(),
   5757                                     ParamEnd = Params->end();
   5758        Param != ParamEnd; ++Param) {
   5759     NamedDecl *Named = cast<NamedDecl>(*Param);
   5760     if (Named->getDeclName()) {
   5761       S->AddDecl(Named);
   5762       IdResolver.AddDecl(Named);
   5763     }
   5764   }
   5765 }
   5766 
   5767 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   5768   if (!RecordD) return;
   5769   AdjustDeclIfTemplate(RecordD);
   5770   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
   5771   PushDeclContext(S, Record);
   5772 }
   5773 
   5774 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   5775   if (!RecordD) return;
   5776   PopDeclContext();
   5777 }
   5778 
   5779 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
   5780 /// parsing a top-level (non-nested) C++ class, and we are now
   5781 /// parsing those parts of the given Method declaration that could
   5782 /// not be parsed earlier (C++ [class.mem]p2), such as default
   5783 /// arguments. This action should enter the scope of the given
   5784 /// Method declaration as if we had just parsed the qualified method
   5785 /// name. However, it should not bring the parameters into scope;
   5786 /// that will be performed by ActOnDelayedCXXMethodParameter.
   5787 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   5788 }
   5789 
   5790 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
   5791 /// C++ method declaration. We're (re-)introducing the given
   5792 /// function parameter into scope for use in parsing later parts of
   5793 /// the method declaration. For example, we could see an
   5794 /// ActOnParamDefaultArgument event for this parameter.
   5795 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
   5796   if (!ParamD)
   5797     return;
   5798 
   5799   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
   5800 
   5801   // If this parameter has an unparsed default argument, clear it out
   5802   // to make way for the parsed default argument.
   5803   if (Param->hasUnparsedDefaultArg())
   5804     Param->setDefaultArg(0);
   5805 
   5806   S->AddDecl(Param);
   5807   if (Param->getDeclName())
   5808     IdResolver.AddDecl(Param);
   5809 }
   5810 
   5811 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
   5812 /// processing the delayed method declaration for Method. The method
   5813 /// declaration is now considered finished. There may be a separate
   5814 /// ActOnStartOfFunctionDef action later (not necessarily
   5815 /// immediately!) for this method, if it was also defined inside the
   5816 /// class body.
   5817 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   5818   if (!MethodD)
   5819     return;
   5820 
   5821   AdjustDeclIfTemplate(MethodD);
   5822 
   5823   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
   5824 
   5825   // Now that we have our default arguments, check the constructor
   5826   // again. It could produce additional diagnostics or affect whether
   5827   // the class has implicitly-declared destructors, among other
   5828   // things.
   5829   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
   5830     CheckConstructor(Constructor);
   5831 
   5832   // Check the default arguments, which we may have added.
   5833   if (!Method->isInvalidDecl())
   5834     CheckCXXDefaultArguments(Method);
   5835 }
   5836 
   5837 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
   5838 /// the well-formedness of the constructor declarator @p D with type @p
   5839 /// R. If there are any errors in the declarator, this routine will
   5840 /// emit diagnostics and set the invalid bit to true.  In any case, the type
   5841 /// will be updated to reflect a well-formed type for the constructor and
   5842 /// returned.
   5843 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
   5844                                           StorageClass &SC) {
   5845   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
   5846 
   5847   // C++ [class.ctor]p3:
   5848   //   A constructor shall not be virtual (10.3) or static (9.4). A
   5849   //   constructor can be invoked for a const, volatile or const
   5850   //   volatile object. A constructor shall not be declared const,
   5851   //   volatile, or const volatile (9.3.2).
   5852   if (isVirtual) {
   5853     if (!D.isInvalidType())
   5854       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5855         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
   5856         << SourceRange(D.getIdentifierLoc());
   5857     D.setInvalidType();
   5858   }
   5859   if (SC == SC_Static) {
   5860     if (!D.isInvalidType())
   5861       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5862         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5863         << SourceRange(D.getIdentifierLoc());
   5864     D.setInvalidType();
   5865     SC = SC_None;
   5866   }
   5867 
   5868   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5869   if (FTI.TypeQuals != 0) {
   5870     if (FTI.TypeQuals & Qualifiers::Const)
   5871       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5872         << "const" << SourceRange(D.getIdentifierLoc());
   5873     if (FTI.TypeQuals & Qualifiers::Volatile)
   5874       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5875         << "volatile" << SourceRange(D.getIdentifierLoc());
   5876     if (FTI.TypeQuals & Qualifiers::Restrict)
   5877       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5878         << "restrict" << SourceRange(D.getIdentifierLoc());
   5879     D.setInvalidType();
   5880   }
   5881 
   5882   // C++0x [class.ctor]p4:
   5883   //   A constructor shall not be declared with a ref-qualifier.
   5884   if (FTI.hasRefQualifier()) {
   5885     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
   5886       << FTI.RefQualifierIsLValueRef
   5887       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   5888     D.setInvalidType();
   5889   }
   5890 
   5891   // Rebuild the function type "R" without any type qualifiers (in
   5892   // case any of the errors above fired) and with "void" as the
   5893   // return type, since constructors don't have return types.
   5894   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5895   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
   5896     return R;
   5897 
   5898   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   5899   EPI.TypeQuals = 0;
   5900   EPI.RefQualifier = RQ_None;
   5901 
   5902   return Context.getFunctionType(Context.VoidTy, Proto->getArgTypes(), EPI);
   5903 }
   5904 
   5905 /// CheckConstructor - Checks a fully-formed constructor for
   5906 /// well-formedness, issuing any diagnostics required. Returns true if
   5907 /// the constructor declarator is invalid.
   5908 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
   5909   CXXRecordDecl *ClassDecl
   5910     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
   5911   if (!ClassDecl)
   5912     return Constructor->setInvalidDecl();
   5913 
   5914   // C++ [class.copy]p3:
   5915   //   A declaration of a constructor for a class X is ill-formed if
   5916   //   its first parameter is of type (optionally cv-qualified) X and
   5917   //   either there are no other parameters or else all other
   5918   //   parameters have default arguments.
   5919   if (!Constructor->isInvalidDecl() &&
   5920       ((Constructor->getNumParams() == 1) ||
   5921        (Constructor->getNumParams() > 1 &&
   5922         Constructor->getParamDecl(1)->hasDefaultArg())) &&
   5923       Constructor->getTemplateSpecializationKind()
   5924                                               != TSK_ImplicitInstantiation) {
   5925     QualType ParamType = Constructor->getParamDecl(0)->getType();
   5926     QualType ClassTy = Context.getTagDeclType(ClassDecl);
   5927     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
   5928       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
   5929       const char *ConstRef
   5930         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
   5931                                                         : " const &";
   5932       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
   5933         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
   5934 
   5935       // FIXME: Rather that making the constructor invalid, we should endeavor
   5936       // to fix the type.
   5937       Constructor->setInvalidDecl();
   5938     }
   5939   }
   5940 }
   5941 
   5942 /// CheckDestructor - Checks a fully-formed destructor definition for
   5943 /// well-formedness, issuing any diagnostics required.  Returns true
   5944 /// on error.
   5945 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
   5946   CXXRecordDecl *RD = Destructor->getParent();
   5947 
   5948   if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
   5949     SourceLocation Loc;
   5950 
   5951     if (!Destructor->isImplicit())
   5952       Loc = Destructor->getLocation();
   5953     else
   5954       Loc = RD->getLocation();
   5955 
   5956     // If we have a virtual destructor, look up the deallocation function
   5957     FunctionDecl *OperatorDelete = 0;
   5958     DeclarationName Name =
   5959     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   5960     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
   5961       return true;
   5962 
   5963     MarkFunctionReferenced(Loc, OperatorDelete);
   5964 
   5965     Destructor->setOperatorDelete(OperatorDelete);
   5966   }
   5967 
   5968   return false;
   5969 }
   5970 
   5971 static inline bool
   5972 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
   5973   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
   5974           FTI.ArgInfo[0].Param &&
   5975           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
   5976 }
   5977 
   5978 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
   5979 /// the well-formednes of the destructor declarator @p D with type @p
   5980 /// R. If there are any errors in the declarator, this routine will
   5981 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
   5982 /// will be updated to reflect a well-formed type for the destructor and
   5983 /// returned.
   5984 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
   5985                                          StorageClass& SC) {
   5986   // C++ [class.dtor]p1:
   5987   //   [...] A typedef-name that names a class is a class-name
   5988   //   (7.1.3); however, a typedef-name that names a class shall not
   5989   //   be used as the identifier in the declarator for a destructor
   5990   //   declaration.
   5991   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
   5992   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
   5993     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5994       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
   5995   else if (const TemplateSpecializationType *TST =
   5996              DeclaratorType->getAs<TemplateSpecializationType>())
   5997     if (TST->isTypeAlias())
   5998       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5999         << DeclaratorType << 1;
   6000 
   6001   // C++ [class.dtor]p2:
   6002   //   A destructor is used to destroy objects of its class type. A
   6003   //   destructor takes no parameters, and no return type can be
   6004   //   specified for it (not even void). The address of a destructor
   6005   //   shall not be taken. A destructor shall not be static. A
   6006   //   destructor can be invoked for a const, volatile or const
   6007   //   volatile object. A destructor shall not be declared const,
   6008   //   volatile or const volatile (9.3.2).
   6009   if (SC == SC_Static) {
   6010     if (!D.isInvalidType())
   6011       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
   6012         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   6013         << SourceRange(D.getIdentifierLoc())
   6014         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
   6015 
   6016     SC = SC_None;
   6017   }
   6018   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   6019     // Destructors don't have return types, but the parser will
   6020     // happily parse something like:
   6021     //
   6022     //   class X {
   6023     //     float ~X();
   6024     //   };
   6025     //
   6026     // The return type will be eliminated later.
   6027     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
   6028       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   6029       << SourceRange(D.getIdentifierLoc());
   6030   }
   6031 
   6032   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   6033   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
   6034     if (FTI.TypeQuals & Qualifiers::Const)
   6035       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   6036         << "const" << SourceRange(D.getIdentifierLoc());
   6037     if (FTI.TypeQuals & Qualifiers::Volatile)
   6038       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   6039         << "volatile" << SourceRange(D.getIdentifierLoc());
   6040     if (FTI.TypeQuals & Qualifiers::Restrict)
   6041       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   6042         << "restrict" << SourceRange(D.getIdentifierLoc());
   6043     D.setInvalidType();
   6044   }
   6045 
   6046   // C++0x [class.dtor]p2:
   6047   //   A destructor shall not be declared with a ref-qualifier.
   6048   if (FTI.hasRefQualifier()) {
   6049     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
   6050       << FTI.RefQualifierIsLValueRef
   6051       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   6052     D.setInvalidType();
   6053   }
   6054 
   6055   // Make sure we don't have any parameters.
   6056   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
   6057     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
   6058 
   6059     // Delete the parameters.
   6060     FTI.freeArgs();
   6061     D.setInvalidType();
   6062   }
   6063 
   6064   // Make sure the destructor isn't variadic.
   6065   if (FTI.isVariadic) {
   6066     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
   6067     D.setInvalidType();
   6068   }
   6069 
   6070   // Rebuild the function type "R" without any type qualifiers or
   6071   // parameters (in case any of the errors above fired) and with
   6072   // "void" as the return type, since destructors don't have return
   6073   // types.
   6074   if (!D.isInvalidType())
   6075     return R;
   6076 
   6077   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   6078   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   6079   EPI.Variadic = false;
   6080   EPI.TypeQuals = 0;
   6081   EPI.RefQualifier = RQ_None;
   6082   return Context.getFunctionType(Context.VoidTy, None, EPI);
   6083 }
   6084 
   6085 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
   6086 /// well-formednes of the conversion function declarator @p D with
   6087 /// type @p R. If there are any errors in the declarator, this routine
   6088 /// will emit diagnostics and return true. Otherwise, it will return
   6089 /// false. Either way, the type @p R will be updated to reflect a
   6090 /// well-formed type for the conversion operator.
   6091 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
   6092                                      StorageClass& SC) {
   6093   // C++ [class.conv.fct]p1:
   6094   //   Neither parameter types nor return type can be specified. The
   6095   //   type of a conversion function (8.3.5) is "function taking no
   6096   //   parameter returning conversion-type-id."
   6097   if (SC == SC_Static) {
   6098     if (!D.isInvalidType())
   6099       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
   6100         << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   6101         << D.getName().getSourceRange();
   6102     D.setInvalidType();
   6103     SC = SC_None;
   6104   }
   6105 
   6106   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
   6107 
   6108   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   6109     // Conversion functions don't have return types, but the parser will
   6110     // happily parse something like:
   6111     //
   6112     //   class X {
   6113     //     float operator bool();
   6114     //   };
   6115     //
   6116     // The return type will be changed later anyway.
   6117     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
   6118       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   6119       << SourceRange(D.getIdentifierLoc());
   6120     D.setInvalidType();
   6121   }
   6122 
   6123   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   6124 
   6125   // Make sure we don't have any parameters.
   6126   if (Proto->getNumArgs() > 0) {
   6127     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
   6128 
   6129     // Delete the parameters.
   6130     D.getFunctionTypeInfo().freeArgs();
   6131     D.setInvalidType();
   6132   } else if (Proto->isVariadic()) {
   6133     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
   6134     D.setInvalidType();
   6135   }
   6136 
   6137   // Diagnose "&operator bool()" and other such nonsense.  This
   6138   // is actually a gcc extension which we don't support.
   6139   if (Proto->getResultType() != ConvType) {
   6140     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
   6141       << Proto->getResultType();
   6142     D.setInvalidType();
   6143     ConvType = Proto->getResultType();
   6144   }
   6145 
   6146   // C++ [class.conv.fct]p4:
   6147   //   The conversion-type-id shall not represent a function type nor
   6148   //   an array type.
   6149   if (ConvType->isArrayType()) {
   6150     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
   6151     ConvType = Context.getPointerType(ConvType);
   6152     D.setInvalidType();
   6153   } else if (ConvType->isFunctionType()) {
   6154     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
   6155     ConvType = Context.getPointerType(ConvType);
   6156     D.setInvalidType();
   6157   }
   6158 
   6159   // Rebuild the function type "R" without any parameters (in case any
   6160   // of the errors above fired) and with the conversion type as the
   6161   // return type.
   6162   if (D.isInvalidType())
   6163     R = Context.getFunctionType(ConvType, None, Proto->getExtProtoInfo());
   6164 
   6165   // C++0x explicit conversion operators.
   6166   if (D.getDeclSpec().isExplicitSpecified())
   6167     Diag(D.getDeclSpec().getExplicitSpecLoc(),
   6168          getLangOpts().CPlusPlus11 ?
   6169            diag::warn_cxx98_compat_explicit_conversion_functions :
   6170            diag::ext_explicit_conversion_functions)
   6171       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
   6172 }
   6173 
   6174 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
   6175 /// the declaration of the given C++ conversion function. This routine
   6176 /// is responsible for recording the conversion function in the C++
   6177 /// class, if possible.
   6178 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
   6179   assert(Conversion && "Expected to receive a conversion function declaration");
   6180 
   6181   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
   6182 
   6183   // Make sure we aren't redeclaring the conversion function.
   6184   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
   6185 
   6186   // C++ [class.conv.fct]p1:
   6187   //   [...] A conversion function is never used to convert a
   6188   //   (possibly cv-qualified) object to the (possibly cv-qualified)
   6189   //   same object type (or a reference to it), to a (possibly
   6190   //   cv-qualified) base class of that type (or a reference to it),
   6191   //   or to (possibly cv-qualified) void.
   6192   // FIXME: Suppress this warning if the conversion function ends up being a
   6193   // virtual function that overrides a virtual function in a base class.
   6194   QualType ClassType
   6195     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   6196   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
   6197     ConvType = ConvTypeRef->getPointeeType();
   6198   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
   6199       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
   6200     /* Suppress diagnostics for instantiations. */;
   6201   else if (ConvType->isRecordType()) {
   6202     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
   6203     if (ConvType == ClassType)
   6204       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
   6205         << ClassType;
   6206     else if (IsDerivedFrom(ClassType, ConvType))
   6207       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
   6208         <<  ClassType << ConvType;
   6209   } else if (ConvType->isVoidType()) {
   6210     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
   6211       << ClassType << ConvType;
   6212   }
   6213 
   6214   if (FunctionTemplateDecl *ConversionTemplate
   6215                                 = Conversion->getDescribedFunctionTemplate())
   6216     return ConversionTemplate;
   6217 
   6218   return Conversion;
   6219 }
   6220 
   6221 //===----------------------------------------------------------------------===//
   6222 // Namespace Handling
   6223 //===----------------------------------------------------------------------===//
   6224 
   6225 /// \brief Diagnose a mismatch in 'inline' qualifiers when a namespace is
   6226 /// reopened.
   6227 static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
   6228                                             SourceLocation Loc,
   6229                                             IdentifierInfo *II, bool *IsInline,
   6230                                             NamespaceDecl *PrevNS) {
   6231   assert(*IsInline != PrevNS->isInline());
   6232 
   6233   // HACK: Work around a bug in libstdc++4.6's <atomic>, where
   6234   // std::__atomic[0,1,2] are defined as non-inline namespaces, then reopened as
   6235   // inline namespaces, with the intention of bringing names into namespace std.
   6236   //
   6237   // We support this just well enough to get that case working; this is not
   6238   // sufficient to support reopening namespaces as inline in general.
   6239   if (*IsInline && II && II->getName().startswith("__atomic") &&
   6240       S.getSourceManager().isInSystemHeader(Loc)) {
   6241     // Mark all prior declarations of the namespace as inline.
   6242     for (NamespaceDecl *NS = PrevNS->getMostRecentDecl(); NS;
   6243          NS = NS->getPreviousDecl())
   6244       NS->setInline(*IsInline);
   6245     // Patch up the lookup table for the containing namespace. This isn't really
   6246     // correct, but it's good enough for this particular case.
   6247     for (DeclContext::decl_iterator I = PrevNS->decls_begin(),
   6248                                     E = PrevNS->decls_end(); I != E; ++I)
   6249       if (NamedDecl *ND = dyn_cast<NamedDecl>(*I))
   6250         PrevNS->getParent()->makeDeclVisibleInContext(ND);
   6251     return;
   6252   }
   6253 
   6254   if (PrevNS->isInline())
   6255     // The user probably just forgot the 'inline', so suggest that it
   6256     // be added back.
   6257     S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
   6258       << FixItHint::CreateInsertion(KeywordLoc, "inline ");
   6259   else
   6260     S.Diag(Loc, diag::err_inline_namespace_mismatch)
   6261       << IsInline;
   6262 
   6263   S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
   6264   *IsInline = PrevNS->isInline();
   6265 }
   6266 
   6267 /// ActOnStartNamespaceDef - This is called at the start of a namespace
   6268 /// definition.
   6269 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
   6270                                    SourceLocation InlineLoc,
   6271                                    SourceLocation NamespaceLoc,
   6272                                    SourceLocation IdentLoc,
   6273                                    IdentifierInfo *II,
   6274                                    SourceLocation LBrace,
   6275                                    AttributeList *AttrList) {
   6276   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
   6277   // For anonymous namespace, take the location of the left brace.
   6278   SourceLocation Loc = II ? IdentLoc : LBrace;
   6279   bool IsInline = InlineLoc.isValid();
   6280   bool IsInvalid = false;
   6281   bool IsStd = false;
   6282   bool AddToKnown = false;
   6283   Scope *DeclRegionScope = NamespcScope->getParent();
   6284 
   6285   NamespaceDecl *PrevNS = 0;
   6286   if (II) {
   6287     // C++ [namespace.def]p2:
   6288     //   The identifier in an original-namespace-definition shall not
   6289     //   have been previously defined in the declarative region in
   6290     //   which the original-namespace-definition appears. The
   6291     //   identifier in an original-namespace-definition is the name of
   6292     //   the namespace. Subsequently in that declarative region, it is
   6293     //   treated as an original-namespace-name.
   6294     //
   6295     // Since namespace names are unique in their scope, and we don't
   6296     // look through using directives, just look for any ordinary names.
   6297 
   6298     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
   6299     Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
   6300     Decl::IDNS_Namespace;
   6301     NamedDecl *PrevDecl = 0;
   6302     DeclContext::lookup_result R = CurContext->getRedeclContext()->lookup(II);
   6303     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
   6304          ++I) {
   6305       if ((*I)->getIdentifierNamespace() & IDNS) {
   6306         PrevDecl = *I;
   6307         break;
   6308       }
   6309     }
   6310 
   6311     PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
   6312 
   6313     if (PrevNS) {
   6314       // This is an extended namespace definition.
   6315       if (IsInline != PrevNS->isInline())
   6316         DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
   6317                                         &IsInline, PrevNS);
   6318     } else if (PrevDecl) {
   6319       // This is an invalid name redefinition.
   6320       Diag(Loc, diag::err_redefinition_different_kind)
   6321         << II;
   6322       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   6323       IsInvalid = true;
   6324       // Continue on to push Namespc as current DeclContext and return it.
   6325     } else if (II->isStr("std") &&
   6326                CurContext->getRedeclContext()->isTranslationUnit()) {
   6327       // This is the first "real" definition of the namespace "std", so update
   6328       // our cache of the "std" namespace to point at this definition.
   6329       PrevNS = getStdNamespace();
   6330       IsStd = true;
   6331       AddToKnown = !IsInline;
   6332     } else {
   6333       // We've seen this namespace for the first time.
   6334       AddToKnown = !IsInline;
   6335     }
   6336   } else {
   6337     // Anonymous namespaces.
   6338 
   6339     // Determine whether the parent already has an anonymous namespace.
   6340     DeclContext *Parent = CurContext->getRedeclContext();
   6341     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
   6342       PrevNS = TU->getAnonymousNamespace();
   6343     } else {
   6344       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
   6345       PrevNS = ND->getAnonymousNamespace();
   6346     }
   6347 
   6348     if (PrevNS && IsInline != PrevNS->isInline())
   6349       DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
   6350                                       &IsInline, PrevNS);
   6351   }
   6352 
   6353   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
   6354                                                  StartLoc, Loc, II, PrevNS);
   6355   if (IsInvalid)
   6356     Namespc->setInvalidDecl();
   6357 
   6358   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
   6359 
   6360   // FIXME: Should we be merging attributes?
   6361   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
   6362     PushNamespaceVisibilityAttr(Attr, Loc);
   6363 
   6364   if (IsStd)
   6365     StdNamespace = Namespc;
   6366   if (AddToKnown)
   6367     KnownNamespaces[Namespc] = false;
   6368 
   6369   if (II) {
   6370     PushOnScopeChains(Namespc, DeclRegionScope);
   6371   } else {
   6372     // Link the anonymous namespace into its parent.
   6373     DeclContext *Parent = CurContext->getRedeclContext();
   6374     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
   6375       TU->setAnonymousNamespace(Namespc);
   6376     } else {
   6377       cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
   6378     }
   6379 
   6380     CurContext->addDecl(Namespc);
   6381 
   6382     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
   6383     //   behaves as if it were replaced by
   6384     //     namespace unique { /* empty body */ }
   6385     //     using namespace unique;
   6386     //     namespace unique { namespace-body }
   6387     //   where all occurrences of 'unique' in a translation unit are
   6388     //   replaced by the same identifier and this identifier differs
   6389     //   from all other identifiers in the entire program.
   6390 
   6391     // We just create the namespace with an empty name and then add an
   6392     // implicit using declaration, just like the standard suggests.
   6393     //
   6394     // CodeGen enforces the "universally unique" aspect by giving all
   6395     // declarations semantically contained within an anonymous
   6396     // namespace internal linkage.
   6397 
   6398     if (!PrevNS) {
   6399       UsingDirectiveDecl* UD
   6400         = UsingDirectiveDecl::Create(Context, Parent,
   6401                                      /* 'using' */ LBrace,
   6402                                      /* 'namespace' */ SourceLocation(),
   6403                                      /* qualifier */ NestedNameSpecifierLoc(),
   6404                                      /* identifier */ SourceLocation(),
   6405                                      Namespc,
   6406                                      /* Ancestor */ Parent);
   6407       UD->setImplicit();
   6408       Parent->addDecl(UD);
   6409     }
   6410   }
   6411 
   6412   ActOnDocumentableDecl(Namespc);
   6413 
   6414   // Although we could have an invalid decl (i.e. the namespace name is a
   6415   // redefinition), push it as current DeclContext and try to continue parsing.
   6416   // FIXME: We should be able to push Namespc here, so that the each DeclContext
   6417   // for the namespace has the declarations that showed up in that particular
   6418   // namespace definition.
   6419   PushDeclContext(NamespcScope, Namespc);
   6420   return Namespc;
   6421 }
   6422 
   6423 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
   6424 /// is a namespace alias, returns the namespace it points to.
   6425 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
   6426   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
   6427     return AD->getNamespace();
   6428   return dyn_cast_or_null<NamespaceDecl>(D);
   6429 }
   6430 
   6431 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
   6432 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
   6433 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
   6434   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
   6435   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
   6436   Namespc->setRBraceLoc(RBrace);
   6437   PopDeclContext();
   6438   if (Namespc->hasAttr<VisibilityAttr>())
   6439     PopPragmaVisibility(true, RBrace);
   6440 }
   6441 
   6442 CXXRecordDecl *Sema::getStdBadAlloc() const {
   6443   return cast_or_null<CXXRecordDecl>(
   6444                                   StdBadAlloc.get(Context.getExternalSource()));
   6445 }
   6446 
   6447 NamespaceDecl *Sema::getStdNamespace() const {
   6448   return cast_or_null<NamespaceDecl>(
   6449                                  StdNamespace.get(Context.getExternalSource()));
   6450 }
   6451 
   6452 /// \brief Retrieve the special "std" namespace, which may require us to
   6453 /// implicitly define the namespace.
   6454 NamespaceDecl *Sema::getOrCreateStdNamespace() {
   6455   if (!StdNamespace) {
   6456     // The "std" namespace has not yet been defined, so build one implicitly.
   6457     StdNamespace = NamespaceDecl::Create(Context,
   6458                                          Context.getTranslationUnitDecl(),
   6459                                          /*Inline=*/false,
   6460                                          SourceLocation(), SourceLocation(),
   6461                                          &PP.getIdentifierTable().get("std"),
   6462                                          /*PrevDecl=*/0);
   6463     getStdNamespace()->setImplicit(true);
   6464   }
   6465 
   6466   return getStdNamespace();
   6467 }
   6468 
   6469 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
   6470   assert(getLangOpts().CPlusPlus &&
   6471          "Looking for std::initializer_list outside of C++.");
   6472 
   6473   // We're looking for implicit instantiations of
   6474   // template <typename E> class std::initializer_list.
   6475 
   6476   if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
   6477     return false;
   6478 
   6479   ClassTemplateDecl *Template = 0;
   6480   const TemplateArgument *Arguments = 0;
   6481 
   6482   if (const RecordType *RT = Ty->getAs<RecordType>()) {
   6483 
   6484     ClassTemplateSpecializationDecl *Specialization =
   6485         dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
   6486     if (!Specialization)
   6487       return false;
   6488 
   6489     Template = Specialization->getSpecializedTemplate();
   6490     Arguments = Specialization->getTemplateArgs().data();
   6491   } else if (const TemplateSpecializationType *TST =
   6492                  Ty->getAs<TemplateSpecializationType>()) {
   6493     Template = dyn_cast_or_null<ClassTemplateDecl>(
   6494         TST->getTemplateName().getAsTemplateDecl());
   6495     Arguments = TST->getArgs();
   6496   }
   6497   if (!Template)
   6498     return false;
   6499 
   6500   if (!StdInitializerList) {
   6501     // Haven't recognized std::initializer_list yet, maybe this is it.
   6502     CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
   6503     if (TemplateClass->getIdentifier() !=
   6504             &PP.getIdentifierTable().get("initializer_list") ||
   6505         !getStdNamespace()->InEnclosingNamespaceSetOf(
   6506             TemplateClass->getDeclContext()))
   6507       return false;
   6508     // This is a template called std::initializer_list, but is it the right
   6509     // template?
   6510     TemplateParameterList *Params = Template->getTemplateParameters();
   6511     if (Params->getMinRequiredArguments() != 1)
   6512       return false;
   6513     if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
   6514       return false;
   6515 
   6516     // It's the right template.
   6517     StdInitializerList = Template;
   6518   }
   6519 
   6520   if (Template != StdInitializerList)
   6521     return false;
   6522 
   6523   // This is an instance of std::initializer_list. Find the argument type.
   6524   if (Element)
   6525     *Element = Arguments[0].getAsType();
   6526   return true;
   6527 }
   6528 
   6529 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
   6530   NamespaceDecl *Std = S.getStdNamespace();
   6531   if (!Std) {
   6532     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
   6533     return 0;
   6534   }
   6535 
   6536   LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
   6537                       Loc, Sema::LookupOrdinaryName);
   6538   if (!S.LookupQualifiedName(Result, Std)) {
   6539     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
   6540     return 0;
   6541   }
   6542   ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
   6543   if (!Template) {
   6544     Result.suppressDiagnostics();
   6545     // We found something weird. Complain about the first thing we found.
   6546     NamedDecl *Found = *Result.begin();
   6547     S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
   6548     return 0;
   6549   }
   6550 
   6551   // We found some template called std::initializer_list. Now verify that it's
   6552   // correct.
   6553   TemplateParameterList *Params = Template->getTemplateParameters();
   6554   if (Params->getMinRequiredArguments() != 1 ||
   6555       !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
   6556     S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
   6557     return 0;
   6558   }
   6559 
   6560   return Template;
   6561 }
   6562 
   6563 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
   6564   if (!StdInitializerList) {
   6565     StdInitializerList = LookupStdInitializerList(*this, Loc);
   6566     if (!StdInitializerList)
   6567       return QualType();
   6568   }
   6569 
   6570   TemplateArgumentListInfo Args(Loc, Loc);
   6571   Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
   6572                                        Context.getTrivialTypeSourceInfo(Element,
   6573                                                                         Loc)));
   6574   return Context.getCanonicalType(
   6575       CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
   6576 }
   6577 
   6578 bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
   6579   // C++ [dcl.init.list]p2:
   6580   //   A constructor is an initializer-list constructor if its first parameter
   6581   //   is of type std::initializer_list<E> or reference to possibly cv-qualified
   6582   //   std::initializer_list<E> for some type E, and either there are no other
   6583   //   parameters or else all other parameters have default arguments.
   6584   if (Ctor->getNumParams() < 1 ||
   6585       (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
   6586     return false;
   6587 
   6588   QualType ArgType = Ctor->getParamDecl(0)->getType();
   6589   if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
   6590     ArgType = RT->getPointeeType().getUnqualifiedType();
   6591 
   6592   return isStdInitializerList(ArgType, 0);
   6593 }
   6594 
   6595 /// \brief Determine whether a using statement is in a context where it will be
   6596 /// apply in all contexts.
   6597 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
   6598   switch (CurContext->getDeclKind()) {
   6599     case Decl::TranslationUnit:
   6600       return true;
   6601     case Decl::LinkageSpec:
   6602       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
   6603     default:
   6604       return false;
   6605   }
   6606 }
   6607 
   6608 namespace {
   6609 
   6610 // Callback to only accept typo corrections that are namespaces.
   6611 class NamespaceValidatorCCC : public CorrectionCandidateCallback {
   6612 public:
   6613   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
   6614     if (NamedDecl *ND = candidate.getCorrectionDecl())
   6615       return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
   6616     return false;
   6617   }
   6618 };
   6619 
   6620 }
   6621 
   6622 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
   6623                                        CXXScopeSpec &SS,
   6624                                        SourceLocation IdentLoc,
   6625                                        IdentifierInfo *Ident) {
   6626   NamespaceValidatorCCC Validator;
   6627   R.clear();
   6628   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
   6629                                                R.getLookupKind(), Sc, &SS,
   6630                                                Validator)) {
   6631     std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
   6632     std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
   6633     if (DeclContext *DC = S.computeDeclContext(SS, false)) {
   6634       bool droppedSpecifier = Corrected.WillReplaceSpecifier() &&
   6635                               Ident->getName().equals(CorrectedStr);
   6636       S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
   6637           << Ident << DC << droppedSpecifier << CorrectedQuotedStr
   6638           << SS.getRange() << FixItHint::CreateReplacement(
   6639                                   Corrected.getCorrectionRange(), CorrectedStr);
   6640     } else {
   6641       S.Diag(IdentLoc, diag::err_using_directive_suggest)
   6642         << Ident << CorrectedQuotedStr
   6643         << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
   6644     }
   6645 
   6646     S.Diag(Corrected.getCorrectionDecl()->getLocation(),
   6647          diag::note_namespace_defined_here) << CorrectedQuotedStr;
   6648 
   6649     R.addDecl(Corrected.getCorrectionDecl());
   6650     return true;
   6651   }
   6652   return false;
   6653 }
   6654 
   6655 Decl *Sema::ActOnUsingDirective(Scope *S,
   6656                                           SourceLocation UsingLoc,
   6657                                           SourceLocation NamespcLoc,
   6658                                           CXXScopeSpec &SS,
   6659                                           SourceLocation IdentLoc,
   6660                                           IdentifierInfo *NamespcName,
   6661                                           AttributeList *AttrList) {
   6662   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   6663   assert(NamespcName && "Invalid NamespcName.");
   6664   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
   6665 
   6666   // This can only happen along a recovery path.
   6667   while (S->getFlags() & Scope::TemplateParamScope)
   6668     S = S->getParent();
   6669   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   6670 
   6671   UsingDirectiveDecl *UDir = 0;
   6672   NestedNameSpecifier *Qualifier = 0;
   6673   if (SS.isSet())
   6674     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
   6675 
   6676   // Lookup namespace name.
   6677   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
   6678   LookupParsedName(R, S, &SS);
   6679   if (R.isAmbiguous())
   6680     return 0;
   6681 
   6682   if (R.empty()) {
   6683     R.clear();
   6684     // Allow "using namespace std;" or "using namespace ::std;" even if
   6685     // "std" hasn't been defined yet, for GCC compatibility.
   6686     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
   6687         NamespcName->isStr("std")) {
   6688       Diag(IdentLoc, diag::ext_using_undefined_std);
   6689       R.addDecl(getOrCreateStdNamespace());
   6690       R.resolveKind();
   6691     }
   6692     // Otherwise, attempt typo correction.
   6693     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
   6694   }
   6695 
   6696   if (!R.empty()) {
   6697     NamedDecl *Named = R.getFoundDecl();
   6698     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
   6699         && "expected namespace decl");
   6700     // C++ [namespace.udir]p1:
   6701     //   A using-directive specifies that the names in the nominated
   6702     //   namespace can be used in the scope in which the
   6703     //   using-directive appears after the using-directive. During
   6704     //   unqualified name lookup (3.4.1), the names appear as if they
   6705     //   were declared in the nearest enclosing namespace which
   6706     //   contains both the using-directive and the nominated
   6707     //   namespace. [Note: in this context, "contains" means "contains
   6708     //   directly or indirectly". ]
   6709 
   6710     // Find enclosing context containing both using-directive and
   6711     // nominated namespace.
   6712     NamespaceDecl *NS = getNamespaceDecl(Named);
   6713     DeclContext *CommonAncestor = cast<DeclContext>(NS);
   6714     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
   6715       CommonAncestor = CommonAncestor->getParent();
   6716 
   6717     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
   6718                                       SS.getWithLocInContext(Context),
   6719                                       IdentLoc, Named, CommonAncestor);
   6720 
   6721     if (IsUsingDirectiveInToplevelContext(CurContext) &&
   6722         !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
   6723       Diag(IdentLoc, diag::warn_using_directive_in_header);
   6724     }
   6725 
   6726     PushUsingDirective(S, UDir);
   6727   } else {
   6728     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
   6729   }
   6730 
   6731   if (UDir)
   6732     ProcessDeclAttributeList(S, UDir, AttrList);
   6733 
   6734   return UDir;
   6735 }
   6736 
   6737 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
   6738   // If the scope has an associated entity and the using directive is at
   6739   // namespace or translation unit scope, add the UsingDirectiveDecl into
   6740   // its lookup structure so qualified name lookup can find it.
   6741   DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
   6742   if (Ctx && !Ctx->isFunctionOrMethod())
   6743     Ctx->addDecl(UDir);
   6744   else
   6745     // Otherwise, it is at block sope. The using-directives will affect lookup
   6746     // only to the end of the scope.
   6747     S->PushUsingDirective(UDir);
   6748 }
   6749 
   6750 
   6751 Decl *Sema::ActOnUsingDeclaration(Scope *S,
   6752                                   AccessSpecifier AS,
   6753                                   bool HasUsingKeyword,
   6754                                   SourceLocation UsingLoc,
   6755                                   CXXScopeSpec &SS,
   6756                                   UnqualifiedId &Name,
   6757                                   AttributeList *AttrList,
   6758                                   bool HasTypenameKeyword,
   6759                                   SourceLocation TypenameLoc) {
   6760   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   6761 
   6762   switch (Name.getKind()) {
   6763   case UnqualifiedId::IK_ImplicitSelfParam:
   6764   case UnqualifiedId::IK_Identifier:
   6765   case UnqualifiedId::IK_OperatorFunctionId:
   6766   case UnqualifiedId::IK_LiteralOperatorId:
   6767   case UnqualifiedId::IK_ConversionFunctionId:
   6768     break;
   6769 
   6770   case UnqualifiedId::IK_ConstructorName:
   6771   case UnqualifiedId::IK_ConstructorTemplateId:
   6772     // C++11 inheriting constructors.
   6773     Diag(Name.getLocStart(),
   6774          getLangOpts().CPlusPlus11 ?
   6775            diag::warn_cxx98_compat_using_decl_constructor :
   6776            diag::err_using_decl_constructor)
   6777       << SS.getRange();
   6778 
   6779     if (getLangOpts().CPlusPlus11) break;
   6780 
   6781     return 0;
   6782 
   6783   case UnqualifiedId::IK_DestructorName:
   6784     Diag(Name.getLocStart(), diag::err_using_decl_destructor)
   6785       << SS.getRange();
   6786     return 0;
   6787 
   6788   case UnqualifiedId::IK_TemplateId:
   6789     Diag(Name.getLocStart(), diag::err_using_decl_template_id)
   6790       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
   6791     return 0;
   6792   }
   6793 
   6794   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
   6795   DeclarationName TargetName = TargetNameInfo.getName();
   6796   if (!TargetName)
   6797     return 0;
   6798 
   6799   // Warn about access declarations.
   6800   if (!HasUsingKeyword) {
   6801     Diag(Name.getLocStart(),
   6802          getLangOpts().CPlusPlus11 ? diag::err_access_decl
   6803                                    : diag::warn_access_decl_deprecated)
   6804       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
   6805   }
   6806 
   6807   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
   6808       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
   6809     return 0;
   6810 
   6811   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
   6812                                         TargetNameInfo, AttrList,
   6813                                         /* IsInstantiation */ false,
   6814                                         HasTypenameKeyword, TypenameLoc);
   6815   if (UD)
   6816     PushOnScopeChains(UD, S, /*AddToContext*/ false);
   6817 
   6818   return UD;
   6819 }
   6820 
   6821 /// \brief Determine whether a using declaration considers the given
   6822 /// declarations as "equivalent", e.g., if they are redeclarations of
   6823 /// the same entity or are both typedefs of the same type.
   6824 static bool
   6825 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
   6826                          bool &SuppressRedeclaration) {
   6827   if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
   6828     SuppressRedeclaration = false;
   6829     return true;
   6830   }
   6831 
   6832   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
   6833     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
   6834       SuppressRedeclaration = true;
   6835       return Context.hasSameType(TD1->getUnderlyingType(),
   6836                                  TD2->getUnderlyingType());
   6837     }
   6838 
   6839   return false;
   6840 }
   6841 
   6842 
   6843 /// Determines whether to create a using shadow decl for a particular
   6844 /// decl, given the set of decls existing prior to this using lookup.
   6845 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
   6846                                 const LookupResult &Previous) {
   6847   // Diagnose finding a decl which is not from a base class of the
   6848   // current class.  We do this now because there are cases where this
   6849   // function will silently decide not to build a shadow decl, which
   6850   // will pre-empt further diagnostics.
   6851   //
   6852   // We don't need to do this in C++0x because we do the check once on
   6853   // the qualifier.
   6854   //
   6855   // FIXME: diagnose the following if we care enough:
   6856   //   struct A { int foo; };
   6857   //   struct B : A { using A::foo; };
   6858   //   template <class T> struct C : A {};
   6859   //   template <class T> struct D : C<T> { using B::foo; } // <---
   6860   // This is invalid (during instantiation) in C++03 because B::foo
   6861   // resolves to the using decl in B, which is not a base class of D<T>.
   6862   // We can't diagnose it immediately because C<T> is an unknown
   6863   // specialization.  The UsingShadowDecl in D<T> then points directly
   6864   // to A::foo, which will look well-formed when we instantiate.
   6865   // The right solution is to not collapse the shadow-decl chain.
   6866   if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
   6867     DeclContext *OrigDC = Orig->getDeclContext();
   6868 
   6869     // Handle enums and anonymous structs.
   6870     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
   6871     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
   6872     while (OrigRec->isAnonymousStructOrUnion())
   6873       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
   6874 
   6875     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
   6876       if (OrigDC == CurContext) {
   6877         Diag(Using->getLocation(),
   6878              diag::err_using_decl_nested_name_specifier_is_current_class)
   6879           << Using->getQualifierLoc().getSourceRange();
   6880         Diag(Orig->getLocation(), diag::note_using_decl_target);
   6881         return true;
   6882       }
   6883 
   6884       Diag(Using->getQualifierLoc().getBeginLoc(),
   6885            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6886         << Using->getQualifier()
   6887         << cast<CXXRecordDecl>(CurContext)
   6888         << Using->getQualifierLoc().getSourceRange();
   6889       Diag(Orig->getLocation(), diag::note_using_decl_target);
   6890       return true;
   6891     }
   6892   }
   6893 
   6894   if (Previous.empty()) return false;
   6895 
   6896   NamedDecl *Target = Orig;
   6897   if (isa<UsingShadowDecl>(Target))
   6898     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   6899 
   6900   // If the target happens to be one of the previous declarations, we
   6901   // don't have a conflict.
   6902   //
   6903   // FIXME: but we might be increasing its access, in which case we
   6904   // should redeclare it.
   6905   NamedDecl *NonTag = 0, *Tag = 0;
   6906   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
   6907          I != E; ++I) {
   6908     NamedDecl *D = (*I)->getUnderlyingDecl();
   6909     bool Result;
   6910     if (IsEquivalentForUsingDecl(Context, D, Target, Result))
   6911       return Result;
   6912 
   6913     (isa<TagDecl>(D) ? Tag : NonTag) = D;
   6914   }
   6915 
   6916   if (Target->isFunctionOrFunctionTemplate()) {
   6917     FunctionDecl *FD;
   6918     if (isa<FunctionTemplateDecl>(Target))
   6919       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
   6920     else
   6921       FD = cast<FunctionDecl>(Target);
   6922 
   6923     NamedDecl *OldDecl = 0;
   6924     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
   6925     case Ovl_Overload:
   6926       return false;
   6927 
   6928     case Ovl_NonFunction:
   6929       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6930       break;
   6931 
   6932     // We found a decl with the exact signature.
   6933     case Ovl_Match:
   6934       // If we're in a record, we want to hide the target, so we
   6935       // return true (without a diagnostic) to tell the caller not to
   6936       // build a shadow decl.
   6937       if (CurContext->isRecord())
   6938         return true;
   6939 
   6940       // If we're not in a record, this is an error.
   6941       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6942       break;
   6943     }
   6944 
   6945     Diag(Target->getLocation(), diag::note_using_decl_target);
   6946     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
   6947     return true;
   6948   }
   6949 
   6950   // Target is not a function.
   6951 
   6952   if (isa<TagDecl>(Target)) {
   6953     // No conflict between a tag and a non-tag.
   6954     if (!Tag) return false;
   6955 
   6956     Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6957     Diag(Target->getLocation(), diag::note_using_decl_target);
   6958     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
   6959     return true;
   6960   }
   6961 
   6962   // No conflict between a tag and a non-tag.
   6963   if (!NonTag) return false;
   6964 
   6965   Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6966   Diag(Target->getLocation(), diag::note_using_decl_target);
   6967   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
   6968   return true;
   6969 }
   6970 
   6971 /// Builds a shadow declaration corresponding to a 'using' declaration.
   6972 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
   6973                                             UsingDecl *UD,
   6974                                             NamedDecl *Orig) {
   6975 
   6976   // If we resolved to another shadow declaration, just coalesce them.
   6977   NamedDecl *Target = Orig;
   6978   if (isa<UsingShadowDecl>(Target)) {
   6979     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   6980     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
   6981   }
   6982 
   6983   UsingShadowDecl *Shadow
   6984     = UsingShadowDecl::Create(Context, CurContext,
   6985                               UD->getLocation(), UD, Target);
   6986   UD->addShadowDecl(Shadow);
   6987 
   6988   Shadow->setAccess(UD->getAccess());
   6989   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
   6990     Shadow->setInvalidDecl();
   6991 
   6992   if (S)
   6993     PushOnScopeChains(Shadow, S);
   6994   else
   6995     CurContext->addDecl(Shadow);
   6996 
   6997 
   6998   return Shadow;
   6999 }
   7000 
   7001 /// Hides a using shadow declaration.  This is required by the current
   7002 /// using-decl implementation when a resolvable using declaration in a
   7003 /// class is followed by a declaration which would hide or override
   7004 /// one or more of the using decl's targets; for example:
   7005 ///
   7006 ///   struct Base { void foo(int); };
   7007 ///   struct Derived : Base {
   7008 ///     using Base::foo;
   7009 ///     void foo(int);
   7010 ///   };
   7011 ///
   7012 /// The governing language is C++03 [namespace.udecl]p12:
   7013 ///
   7014 ///   When a using-declaration brings names from a base class into a
   7015 ///   derived class scope, member functions in the derived class
   7016 ///   override and/or hide member functions with the same name and
   7017 ///   parameter types in a base class (rather than conflicting).
   7018 ///
   7019 /// There are two ways to implement this:
   7020 ///   (1) optimistically create shadow decls when they're not hidden
   7021 ///       by existing declarations, or
   7022 ///   (2) don't create any shadow decls (or at least don't make them
   7023 ///       visible) until we've fully parsed/instantiated the class.
   7024 /// The problem with (1) is that we might have to retroactively remove
   7025 /// a shadow decl, which requires several O(n) operations because the
   7026 /// decl structures are (very reasonably) not designed for removal.
   7027 /// (2) avoids this but is very fiddly and phase-dependent.
   7028 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
   7029   if (Shadow->getDeclName().getNameKind() ==
   7030         DeclarationName::CXXConversionFunctionName)
   7031     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
   7032 
   7033   // Remove it from the DeclContext...
   7034   Shadow->getDeclContext()->removeDecl(Shadow);
   7035 
   7036   // ...and the scope, if applicable...
   7037   if (S) {
   7038     S->RemoveDecl(Shadow);
   7039     IdResolver.RemoveDecl(Shadow);
   7040   }
   7041 
   7042   // ...and the using decl.
   7043   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
   7044 
   7045   // TODO: complain somehow if Shadow was used.  It shouldn't
   7046   // be possible for this to happen, because...?
   7047 }
   7048 
   7049 namespace {
   7050 class UsingValidatorCCC : public CorrectionCandidateCallback {
   7051 public:
   7052   UsingValidatorCCC(bool HasTypenameKeyword, bool IsInstantiation)
   7053       : HasTypenameKeyword(HasTypenameKeyword),
   7054         IsInstantiation(IsInstantiation) {}
   7055 
   7056   bool ValidateCandidate(const TypoCorrection &Candidate) LLVM_OVERRIDE {
   7057     NamedDecl *ND = Candidate.getCorrectionDecl();
   7058 
   7059     // Keywords are not valid here.
   7060     if (!ND || isa<NamespaceDecl>(ND))
   7061       return false;
   7062 
   7063     // Completely unqualified names are invalid for a 'using' declaration.
   7064     if (Candidate.WillReplaceSpecifier() && !Candidate.getCorrectionSpecifier())
   7065       return false;
   7066 
   7067     if (isa<TypeDecl>(ND))
   7068       return HasTypenameKeyword || !IsInstantiation;
   7069 
   7070     return !HasTypenameKeyword;
   7071   }
   7072 
   7073 private:
   7074   bool HasTypenameKeyword;
   7075   bool IsInstantiation;
   7076 };
   7077 } // end anonymous namespace
   7078 
   7079 /// Builds a using declaration.
   7080 ///
   7081 /// \param IsInstantiation - Whether this call arises from an
   7082 ///   instantiation of an unresolved using declaration.  We treat
   7083 ///   the lookup differently for these declarations.
   7084 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
   7085                                        SourceLocation UsingLoc,
   7086                                        CXXScopeSpec &SS,
   7087                                        const DeclarationNameInfo &NameInfo,
   7088                                        AttributeList *AttrList,
   7089                                        bool IsInstantiation,
   7090                                        bool HasTypenameKeyword,
   7091                                        SourceLocation TypenameLoc) {
   7092   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   7093   SourceLocation IdentLoc = NameInfo.getLoc();
   7094   assert(IdentLoc.isValid() && "Invalid TargetName location.");
   7095 
   7096   // FIXME: We ignore attributes for now.
   7097 
   7098   if (SS.isEmpty()) {
   7099     Diag(IdentLoc, diag::err_using_requires_qualname);
   7100     return 0;
   7101   }
   7102 
   7103   // Do the redeclaration lookup in the current scope.
   7104   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
   7105                         ForRedeclaration);
   7106   Previous.setHideTags(false);
   7107   if (S) {
   7108     LookupName(Previous, S);
   7109 
   7110     // It is really dumb that we have to do this.
   7111     LookupResult::Filter F = Previous.makeFilter();
   7112     while (F.hasNext()) {
   7113       NamedDecl *D = F.next();
   7114       if (!isDeclInScope(D, CurContext, S))
   7115         F.erase();
   7116     }
   7117     F.done();
   7118   } else {
   7119     assert(IsInstantiation && "no scope in non-instantiation");
   7120     assert(CurContext->isRecord() && "scope not record in instantiation");
   7121     LookupQualifiedName(Previous, CurContext);
   7122   }
   7123 
   7124   // Check for invalid redeclarations.
   7125   if (CheckUsingDeclRedeclaration(UsingLoc, HasTypenameKeyword,
   7126                                   SS, IdentLoc, Previous))
   7127     return 0;
   7128 
   7129   // Check for bad qualifiers.
   7130   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
   7131     return 0;
   7132 
   7133   DeclContext *LookupContext = computeDeclContext(SS);
   7134   NamedDecl *D;
   7135   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   7136   if (!LookupContext) {
   7137     if (HasTypenameKeyword) {
   7138       // FIXME: not all declaration name kinds are legal here
   7139       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
   7140                                               UsingLoc, TypenameLoc,
   7141                                               QualifierLoc,
   7142                                               IdentLoc, NameInfo.getName());
   7143     } else {
   7144       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
   7145                                            QualifierLoc, NameInfo);
   7146     }
   7147   } else {
   7148     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
   7149                           NameInfo, HasTypenameKeyword);
   7150   }
   7151   D->setAccess(AS);
   7152   CurContext->addDecl(D);
   7153 
   7154   if (!LookupContext) return D;
   7155   UsingDecl *UD = cast<UsingDecl>(D);
   7156 
   7157   if (RequireCompleteDeclContext(SS, LookupContext)) {
   7158     UD->setInvalidDecl();
   7159     return UD;
   7160   }
   7161 
   7162   // The normal rules do not apply to inheriting constructor declarations.
   7163   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
   7164     if (CheckInheritingConstructorUsingDecl(UD))
   7165       UD->setInvalidDecl();
   7166     return UD;
   7167   }
   7168 
   7169   // Otherwise, look up the target name.
   7170 
   7171   LookupResult R(*this, NameInfo, LookupOrdinaryName);
   7172 
   7173   // Unlike most lookups, we don't always want to hide tag
   7174   // declarations: tag names are visible through the using declaration
   7175   // even if hidden by ordinary names, *except* in a dependent context
   7176   // where it's important for the sanity of two-phase lookup.
   7177   if (!IsInstantiation)
   7178     R.setHideTags(false);
   7179 
   7180   // For the purposes of this lookup, we have a base object type
   7181   // equal to that of the current context.
   7182   if (CurContext->isRecord()) {
   7183     R.setBaseObjectType(
   7184                    Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
   7185   }
   7186 
   7187   LookupQualifiedName(R, LookupContext);
   7188 
   7189   // Try to correct typos if possible.
   7190   if (R.empty()) {
   7191     UsingValidatorCCC CCC(HasTypenameKeyword, IsInstantiation);
   7192     if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(),
   7193                                                R.getLookupKind(), S, &SS, CCC)){
   7194       // We reject any correction for which ND would be NULL.
   7195       NamedDecl *ND = Corrected.getCorrectionDecl();
   7196       std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
   7197       std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
   7198       R.setLookupName(Corrected.getCorrection());
   7199       R.addDecl(ND);
   7200       // We reject candidates where droppedSpecifier == true, hence the
   7201       // literal '0' below.
   7202       Diag(R.getNameLoc(), diag::err_no_member_suggest)
   7203         << NameInfo.getName() << LookupContext << 0
   7204         << CorrectedQuotedStr << SS.getRange()
   7205         << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
   7206                                         CorrectedStr);
   7207       Diag(ND->getLocation(), diag::note_previous_decl)
   7208         << CorrectedQuotedStr;
   7209     } else {
   7210       Diag(IdentLoc, diag::err_no_member)
   7211         << NameInfo.getName() << LookupContext << SS.getRange();
   7212       UD->setInvalidDecl();
   7213       return UD;
   7214     }
   7215   }
   7216 
   7217   if (R.isAmbiguous()) {
   7218     UD->setInvalidDecl();
   7219     return UD;
   7220   }
   7221 
   7222   if (HasTypenameKeyword) {
   7223     // If we asked for a typename and got a non-type decl, error out.
   7224     if (!R.getAsSingle<TypeDecl>()) {
   7225       Diag(IdentLoc, diag::err_using_typename_non_type);
   7226       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
   7227         Diag((*I)->getUnderlyingDecl()->getLocation(),
   7228              diag::note_using_decl_target);
   7229       UD->setInvalidDecl();
   7230       return UD;
   7231     }
   7232   } else {
   7233     // If we asked for a non-typename and we got a type, error out,
   7234     // but only if this is an instantiation of an unresolved using
   7235     // decl.  Otherwise just silently find the type name.
   7236     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
   7237       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
   7238       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
   7239       UD->setInvalidDecl();
   7240       return UD;
   7241     }
   7242   }
   7243 
   7244   // C++0x N2914 [namespace.udecl]p6:
   7245   // A using-declaration shall not name a namespace.
   7246   if (R.getAsSingle<NamespaceDecl>()) {
   7247     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
   7248       << SS.getRange();
   7249     UD->setInvalidDecl();
   7250     return UD;
   7251   }
   7252 
   7253   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
   7254     if (!CheckUsingShadowDecl(UD, *I, Previous))
   7255       BuildUsingShadowDecl(S, UD, *I);
   7256   }
   7257 
   7258   return UD;
   7259 }
   7260 
   7261 /// Additional checks for a using declaration referring to a constructor name.
   7262 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
   7263   assert(!UD->hasTypename() && "expecting a constructor name");
   7264 
   7265   const Type *SourceType = UD->getQualifier()->getAsType();
   7266   assert(SourceType &&
   7267          "Using decl naming constructor doesn't have type in scope spec.");
   7268   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
   7269 
   7270   // Check whether the named type is a direct base class.
   7271   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
   7272   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
   7273   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
   7274        BaseIt != BaseE; ++BaseIt) {
   7275     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
   7276     if (CanonicalSourceType == BaseType)
   7277       break;
   7278     if (BaseIt->getType()->isDependentType())
   7279       break;
   7280   }
   7281 
   7282   if (BaseIt == BaseE) {
   7283     // Did not find SourceType in the bases.
   7284     Diag(UD->getUsingLoc(),
   7285          diag::err_using_decl_constructor_not_in_direct_base)
   7286       << UD->getNameInfo().getSourceRange()
   7287       << QualType(SourceType, 0) << TargetClass;
   7288     return true;
   7289   }
   7290 
   7291   if (!CurContext->isDependentContext())
   7292     BaseIt->setInheritConstructors();
   7293 
   7294   return false;
   7295 }
   7296 
   7297 /// Checks that the given using declaration is not an invalid
   7298 /// redeclaration.  Note that this is checking only for the using decl
   7299 /// itself, not for any ill-formedness among the UsingShadowDecls.
   7300 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
   7301                                        bool HasTypenameKeyword,
   7302                                        const CXXScopeSpec &SS,
   7303                                        SourceLocation NameLoc,
   7304                                        const LookupResult &Prev) {
   7305   // C++03 [namespace.udecl]p8:
   7306   // C++0x [namespace.udecl]p10:
   7307   //   A using-declaration is a declaration and can therefore be used
   7308   //   repeatedly where (and only where) multiple declarations are
   7309   //   allowed.
   7310   //
   7311   // That's in non-member contexts.
   7312   if (!CurContext->getRedeclContext()->isRecord())
   7313     return false;
   7314 
   7315   NestedNameSpecifier *Qual
   7316     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   7317 
   7318   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
   7319     NamedDecl *D = *I;
   7320 
   7321     bool DTypename;
   7322     NestedNameSpecifier *DQual;
   7323     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
   7324       DTypename = UD->hasTypename();
   7325       DQual = UD->getQualifier();
   7326     } else if (UnresolvedUsingValueDecl *UD
   7327                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
   7328       DTypename = false;
   7329       DQual = UD->getQualifier();
   7330     } else if (UnresolvedUsingTypenameDecl *UD
   7331                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
   7332       DTypename = true;
   7333       DQual = UD->getQualifier();
   7334     } else continue;
   7335 
   7336     // using decls differ if one says 'typename' and the other doesn't.
   7337     // FIXME: non-dependent using decls?
   7338     if (HasTypenameKeyword != DTypename) continue;
   7339 
   7340     // using decls differ if they name different scopes (but note that
   7341     // template instantiation can cause this check to trigger when it
   7342     // didn't before instantiation).
   7343     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
   7344         Context.getCanonicalNestedNameSpecifier(DQual))
   7345       continue;
   7346 
   7347     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
   7348     Diag(D->getLocation(), diag::note_using_decl) << 1;
   7349     return true;
   7350   }
   7351 
   7352   return false;
   7353 }
   7354 
   7355 
   7356 /// Checks that the given nested-name qualifier used in a using decl
   7357 /// in the current context is appropriately related to the current
   7358 /// scope.  If an error is found, diagnoses it and returns true.
   7359 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
   7360                                    const CXXScopeSpec &SS,
   7361                                    SourceLocation NameLoc) {
   7362   DeclContext *NamedContext = computeDeclContext(SS);
   7363 
   7364   if (!CurContext->isRecord()) {
   7365     // C++03 [namespace.udecl]p3:
   7366     // C++0x [namespace.udecl]p8:
   7367     //   A using-declaration for a class member shall be a member-declaration.
   7368 
   7369     // If we weren't able to compute a valid scope, it must be a
   7370     // dependent class scope.
   7371     if (!NamedContext || NamedContext->isRecord()) {
   7372       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
   7373         << SS.getRange();
   7374       return true;
   7375     }
   7376 
   7377     // Otherwise, everything is known to be fine.
   7378     return false;
   7379   }
   7380 
   7381   // The current scope is a record.
   7382 
   7383   // If the named context is dependent, we can't decide much.
   7384   if (!NamedContext) {
   7385     // FIXME: in C++0x, we can diagnose if we can prove that the
   7386     // nested-name-specifier does not refer to a base class, which is
   7387     // still possible in some cases.
   7388 
   7389     // Otherwise we have to conservatively report that things might be
   7390     // okay.
   7391     return false;
   7392   }
   7393 
   7394   if (!NamedContext->isRecord()) {
   7395     // Ideally this would point at the last name in the specifier,
   7396     // but we don't have that level of source info.
   7397     Diag(SS.getRange().getBegin(),
   7398          diag::err_using_decl_nested_name_specifier_is_not_class)
   7399       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
   7400     return true;
   7401   }
   7402 
   7403   if (!NamedContext->isDependentContext() &&
   7404       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
   7405     return true;
   7406 
   7407   if (getLangOpts().CPlusPlus11) {
   7408     // C++0x [namespace.udecl]p3:
   7409     //   In a using-declaration used as a member-declaration, the
   7410     //   nested-name-specifier shall name a base class of the class
   7411     //   being defined.
   7412 
   7413     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
   7414                                  cast<CXXRecordDecl>(NamedContext))) {
   7415       if (CurContext == NamedContext) {
   7416         Diag(NameLoc,
   7417              diag::err_using_decl_nested_name_specifier_is_current_class)
   7418           << SS.getRange();
   7419         return true;
   7420       }
   7421 
   7422       Diag(SS.getRange().getBegin(),
   7423            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   7424         << (NestedNameSpecifier*) SS.getScopeRep()
   7425         << cast<CXXRecordDecl>(CurContext)
   7426         << SS.getRange();
   7427       return true;
   7428     }
   7429 
   7430     return false;
   7431   }
   7432 
   7433   // C++03 [namespace.udecl]p4:
   7434   //   A using-declaration used as a member-declaration shall refer
   7435   //   to a member of a base class of the class being defined [etc.].
   7436 
   7437   // Salient point: SS doesn't have to name a base class as long as
   7438   // lookup only finds members from base classes.  Therefore we can
   7439   // diagnose here only if we can prove that that can't happen,
   7440   // i.e. if the class hierarchies provably don't intersect.
   7441 
   7442   // TODO: it would be nice if "definitely valid" results were cached
   7443   // in the UsingDecl and UsingShadowDecl so that these checks didn't
   7444   // need to be repeated.
   7445 
   7446   struct UserData {
   7447     llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
   7448 
   7449     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
   7450       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   7451       Data->Bases.insert(Base);
   7452       return true;
   7453     }
   7454 
   7455     bool hasDependentBases(const CXXRecordDecl *Class) {
   7456       return !Class->forallBases(collect, this);
   7457     }
   7458 
   7459     /// Returns true if the base is dependent or is one of the
   7460     /// accumulated base classes.
   7461     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
   7462       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   7463       return !Data->Bases.count(Base);
   7464     }
   7465 
   7466     bool mightShareBases(const CXXRecordDecl *Class) {
   7467       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
   7468     }
   7469   };
   7470 
   7471   UserData Data;
   7472 
   7473   // Returns false if we find a dependent base.
   7474   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
   7475     return false;
   7476 
   7477   // Returns false if the class has a dependent base or if it or one
   7478   // of its bases is present in the base set of the current context.
   7479   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
   7480     return false;
   7481 
   7482   Diag(SS.getRange().getBegin(),
   7483        diag::err_using_decl_nested_name_specifier_is_not_base_class)
   7484     << (NestedNameSpecifier*) SS.getScopeRep()
   7485     << cast<CXXRecordDecl>(CurContext)
   7486     << SS.getRange();
   7487 
   7488   return true;
   7489 }
   7490 
   7491 Decl *Sema::ActOnAliasDeclaration(Scope *S,
   7492                                   AccessSpecifier AS,
   7493                                   MultiTemplateParamsArg TemplateParamLists,
   7494                                   SourceLocation UsingLoc,
   7495                                   UnqualifiedId &Name,
   7496                                   AttributeList *AttrList,
   7497                                   TypeResult Type) {
   7498   // Skip up to the relevant declaration scope.
   7499   while (S->getFlags() & Scope::TemplateParamScope)
   7500     S = S->getParent();
   7501   assert((S->getFlags() & Scope::DeclScope) &&
   7502          "got alias-declaration outside of declaration scope");
   7503 
   7504   if (Type.isInvalid())
   7505     return 0;
   7506 
   7507   bool Invalid = false;
   7508   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
   7509   TypeSourceInfo *TInfo = 0;
   7510   GetTypeFromParser(Type.get(), &TInfo);
   7511 
   7512   if (DiagnoseClassNameShadow(CurContext, NameInfo))
   7513     return 0;
   7514 
   7515   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
   7516                                       UPPC_DeclarationType)) {
   7517     Invalid = true;
   7518     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   7519                                              TInfo->getTypeLoc().getBeginLoc());
   7520   }
   7521 
   7522   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
   7523   LookupName(Previous, S);
   7524 
   7525   // Warn about shadowing the name of a template parameter.
   7526   if (Previous.isSingleResult() &&
   7527       Previous.getFoundDecl()->isTemplateParameter()) {
   7528     DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
   7529     Previous.clear();
   7530   }
   7531 
   7532   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
   7533          "name in alias declaration must be an identifier");
   7534   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
   7535                                                Name.StartLocation,
   7536                                                Name.Identifier, TInfo);
   7537 
   7538   NewTD->setAccess(AS);
   7539 
   7540   if (Invalid)
   7541     NewTD->setInvalidDecl();
   7542 
   7543   ProcessDeclAttributeList(S, NewTD, AttrList);
   7544 
   7545   CheckTypedefForVariablyModifiedType(S, NewTD);
   7546   Invalid |= NewTD->isInvalidDecl();
   7547 
   7548   bool Redeclaration = false;
   7549 
   7550   NamedDecl *NewND;
   7551   if (TemplateParamLists.size()) {
   7552     TypeAliasTemplateDecl *OldDecl = 0;
   7553     TemplateParameterList *OldTemplateParams = 0;
   7554 
   7555     if (TemplateParamLists.size() != 1) {
   7556       Diag(UsingLoc, diag::err_alias_template_extra_headers)
   7557         << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
   7558          TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
   7559     }
   7560     TemplateParameterList *TemplateParams = TemplateParamLists[0];
   7561 
   7562     // Only consider previous declarations in the same scope.
   7563     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
   7564                          /*ExplicitInstantiationOrSpecialization*/false);
   7565     if (!Previous.empty()) {
   7566       Redeclaration = true;
   7567 
   7568       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
   7569       if (!OldDecl && !Invalid) {
   7570         Diag(UsingLoc, diag::err_redefinition_different_kind)
   7571           << Name.Identifier;
   7572 
   7573         NamedDecl *OldD = Previous.getRepresentativeDecl();
   7574         if (OldD->getLocation().isValid())
   7575           Diag(OldD->getLocation(), diag::note_previous_definition);
   7576 
   7577         Invalid = true;
   7578       }
   7579 
   7580       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
   7581         if (TemplateParameterListsAreEqual(TemplateParams,
   7582                                            OldDecl->getTemplateParameters(),
   7583                                            /*Complain=*/true,
   7584                                            TPL_TemplateMatch))
   7585           OldTemplateParams = OldDecl->getTemplateParameters();
   7586         else
   7587           Invalid = true;
   7588 
   7589         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
   7590         if (!Invalid &&
   7591             !Context.hasSameType(OldTD->getUnderlyingType(),
   7592                                  NewTD->getUnderlyingType())) {
   7593           // FIXME: The C++0x standard does not clearly say this is ill-formed,
   7594           // but we can't reasonably accept it.
   7595           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
   7596             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
   7597           if (OldTD->getLocation().isValid())
   7598             Diag(OldTD->getLocation(), diag::note_previous_definition);
   7599           Invalid = true;
   7600         }
   7601       }
   7602     }
   7603 
   7604     // Merge any previous default template arguments into our parameters,
   7605     // and check the parameter list.
   7606     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
   7607                                    TPC_TypeAliasTemplate))
   7608       return 0;
   7609 
   7610     TypeAliasTemplateDecl *NewDecl =
   7611       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
   7612                                     Name.Identifier, TemplateParams,
   7613                                     NewTD);
   7614 
   7615     NewDecl->setAccess(AS);
   7616 
   7617     if (Invalid)
   7618       NewDecl->setInvalidDecl();
   7619     else if (OldDecl)
   7620       NewDecl->setPreviousDeclaration(OldDecl);
   7621 
   7622     NewND = NewDecl;
   7623   } else {
   7624     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
   7625     NewND = NewTD;
   7626   }
   7627 
   7628   if (!Redeclaration)
   7629     PushOnScopeChains(NewND, S);
   7630 
   7631   ActOnDocumentableDecl(NewND);
   7632   return NewND;
   7633 }
   7634 
   7635 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
   7636                                              SourceLocation NamespaceLoc,
   7637                                              SourceLocation AliasLoc,
   7638                                              IdentifierInfo *Alias,
   7639                                              CXXScopeSpec &SS,
   7640                                              SourceLocation IdentLoc,
   7641                                              IdentifierInfo *Ident) {
   7642 
   7643   // Lookup the namespace name.
   7644   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
   7645   LookupParsedName(R, S, &SS);
   7646 
   7647   // Check if we have a previous declaration with the same name.
   7648   NamedDecl *PrevDecl
   7649     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
   7650                        ForRedeclaration);
   7651   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
   7652     PrevDecl = 0;
   7653 
   7654   if (PrevDecl) {
   7655     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
   7656       // We already have an alias with the same name that points to the same
   7657       // namespace, so don't create a new one.
   7658       // FIXME: At some point, we'll want to create the (redundant)
   7659       // declaration to maintain better source information.
   7660       if (!R.isAmbiguous() && !R.empty() &&
   7661           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
   7662         return 0;
   7663     }
   7664 
   7665     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
   7666       diag::err_redefinition_different_kind;
   7667     Diag(AliasLoc, DiagID) << Alias;
   7668     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   7669     return 0;
   7670   }
   7671 
   7672   if (R.isAmbiguous())
   7673     return 0;
   7674 
   7675   if (R.empty()) {
   7676     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
   7677       Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
   7678       return 0;
   7679     }
   7680   }
   7681 
   7682   NamespaceAliasDecl *AliasDecl =
   7683     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
   7684                                Alias, SS.getWithLocInContext(Context),
   7685                                IdentLoc, R.getFoundDecl());
   7686 
   7687   PushOnScopeChains(AliasDecl, S);
   7688   return AliasDecl;
   7689 }
   7690 
   7691 Sema::ImplicitExceptionSpecification
   7692 Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
   7693                                                CXXMethodDecl *MD) {
   7694   CXXRecordDecl *ClassDecl = MD->getParent();
   7695 
   7696   // C++ [except.spec]p14:
   7697   //   An implicitly declared special member function (Clause 12) shall have an
   7698   //   exception-specification. [...]
   7699   ImplicitExceptionSpecification ExceptSpec(*this);
   7700   if (ClassDecl->isInvalidDecl())
   7701     return ExceptSpec;
   7702 
   7703   // Direct base-class constructors.
   7704   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   7705                                        BEnd = ClassDecl->bases_end();
   7706        B != BEnd; ++B) {
   7707     if (B->isVirtual()) // Handled below.
   7708       continue;
   7709 
   7710     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   7711       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   7712       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   7713       // If this is a deleted function, add it anyway. This might be conformant
   7714       // with the standard. This might not. I'm not sure. It might not matter.
   7715       if (Constructor)
   7716         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   7717     }
   7718   }
   7719 
   7720   // Virtual base-class constructors.
   7721   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   7722                                        BEnd = ClassDecl->vbases_end();
   7723        B != BEnd; ++B) {
   7724     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   7725       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   7726       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   7727       // If this is a deleted function, add it anyway. This might be conformant
   7728       // with the standard. This might not. I'm not sure. It might not matter.
   7729       if (Constructor)
   7730         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   7731     }
   7732   }
   7733 
   7734   // Field constructors.
   7735   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   7736                                FEnd = ClassDecl->field_end();
   7737        F != FEnd; ++F) {
   7738     if (F->hasInClassInitializer()) {
   7739       if (Expr *E = F->getInClassInitializer())
   7740         ExceptSpec.CalledExpr(E);
   7741       else if (!F->isInvalidDecl())
   7742         // DR1351:
   7743         //   If the brace-or-equal-initializer of a non-static data member
   7744         //   invokes a defaulted default constructor of its class or of an
   7745         //   enclosing class in a potentially evaluated subexpression, the
   7746         //   program is ill-formed.
   7747         //
   7748         // This resolution is unworkable: the exception specification of the
   7749         // default constructor can be needed in an unevaluated context, in
   7750         // particular, in the operand of a noexcept-expression, and we can be
   7751         // unable to compute an exception specification for an enclosed class.
   7752         //
   7753         // We do not allow an in-class initializer to require the evaluation
   7754         // of the exception specification for any in-class initializer whose
   7755         // definition is not lexically complete.
   7756         Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
   7757     } else if (const RecordType *RecordTy
   7758               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   7759       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   7760       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
   7761       // If this is a deleted function, add it anyway. This might be conformant
   7762       // with the standard. This might not. I'm not sure. It might not matter.
   7763       // In particular, the problem is that this function never gets called. It
   7764       // might just be ill-formed because this function attempts to refer to
   7765       // a deleted function here.
   7766       if (Constructor)
   7767         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
   7768     }
   7769   }
   7770 
   7771   return ExceptSpec;
   7772 }
   7773 
   7774 Sema::ImplicitExceptionSpecification
   7775 Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) {
   7776   CXXRecordDecl *ClassDecl = CD->getParent();
   7777 
   7778   // C++ [except.spec]p14:
   7779   //   An inheriting constructor [...] shall have an exception-specification. [...]
   7780   ImplicitExceptionSpecification ExceptSpec(*this);
   7781   if (ClassDecl->isInvalidDecl())
   7782     return ExceptSpec;
   7783 
   7784   // Inherited constructor.
   7785   const CXXConstructorDecl *InheritedCD = CD->getInheritedConstructor();
   7786   const CXXRecordDecl *InheritedDecl = InheritedCD->getParent();
   7787   // FIXME: Copying or moving the parameters could add extra exceptions to the
   7788   // set, as could the default arguments for the inherited constructor. This
   7789   // will be addressed when we implement the resolution of core issue 1351.
   7790   ExceptSpec.CalledDecl(CD->getLocStart(), InheritedCD);
   7791 
   7792   // Direct base-class constructors.
   7793   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   7794                                        BEnd = ClassDecl->bases_end();
   7795        B != BEnd; ++B) {
   7796     if (B->isVirtual()) // Handled below.
   7797       continue;
   7798 
   7799     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   7800       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   7801       if (BaseClassDecl == InheritedDecl)
   7802         continue;
   7803       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   7804       if (Constructor)
   7805         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   7806     }
   7807   }
   7808 
   7809   // Virtual base-class constructors.
   7810   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   7811                                        BEnd = ClassDecl->vbases_end();
   7812        B != BEnd; ++B) {
   7813     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   7814       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   7815       if (BaseClassDecl == InheritedDecl)
   7816         continue;
   7817       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   7818       if (Constructor)
   7819         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   7820     }
   7821   }
   7822 
   7823   // Field constructors.
   7824   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   7825                                FEnd = ClassDecl->field_end();
   7826        F != FEnd; ++F) {
   7827     if (F->hasInClassInitializer()) {
   7828       if (Expr *E = F->getInClassInitializer())
   7829         ExceptSpec.CalledExpr(E);
   7830       else if (!F->isInvalidDecl())
   7831         Diag(CD->getLocation(),
   7832              diag::err_in_class_initializer_references_def_ctor) << CD;
   7833     } else if (const RecordType *RecordTy
   7834               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   7835       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   7836       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
   7837       if (Constructor)
   7838         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
   7839     }
   7840   }
   7841 
   7842   return ExceptSpec;
   7843 }
   7844 
   7845 namespace {
   7846 /// RAII object to register a special member as being currently declared.
   7847 struct DeclaringSpecialMember {
   7848   Sema &S;
   7849   Sema::SpecialMemberDecl D;
   7850   bool WasAlreadyBeingDeclared;
   7851 
   7852   DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
   7853     : S(S), D(RD, CSM) {
   7854     WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D);
   7855     if (WasAlreadyBeingDeclared)
   7856       // This almost never happens, but if it does, ensure that our cache
   7857       // doesn't contain a stale result.
   7858       S.SpecialMemberCache.clear();
   7859 
   7860     // FIXME: Register a note to be produced if we encounter an error while
   7861     // declaring the special member.
   7862   }
   7863   ~DeclaringSpecialMember() {
   7864     if (!WasAlreadyBeingDeclared)
   7865       S.SpecialMembersBeingDeclared.erase(D);
   7866   }
   7867 
   7868   /// \brief Are we already trying to declare this special member?
   7869   bool isAlreadyBeingDeclared() const {
   7870     return WasAlreadyBeingDeclared;
   7871   }
   7872 };
   7873 }
   7874 
   7875 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
   7876                                                      CXXRecordDecl *ClassDecl) {
   7877   // C++ [class.ctor]p5:
   7878   //   A default constructor for a class X is a constructor of class X
   7879   //   that can be called without an argument. If there is no
   7880   //   user-declared constructor for class X, a default constructor is
   7881   //   implicitly declared. An implicitly-declared default constructor
   7882   //   is an inline public member of its class.
   7883   assert(ClassDecl->needsImplicitDefaultConstructor() &&
   7884          "Should not build implicit default constructor!");
   7885 
   7886   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
   7887   if (DSM.isAlreadyBeingDeclared())
   7888     return 0;
   7889 
   7890   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
   7891                                                      CXXDefaultConstructor,
   7892                                                      false);
   7893 
   7894   // Create the actual constructor declaration.
   7895   CanQualType ClassType
   7896     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   7897   SourceLocation ClassLoc = ClassDecl->getLocation();
   7898   DeclarationName Name
   7899     = Context.DeclarationNames.getCXXConstructorName(ClassType);
   7900   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7901   CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
   7902       Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
   7903       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   7904       Constexpr);
   7905   DefaultCon->setAccess(AS_public);
   7906   DefaultCon->setDefaulted();
   7907   DefaultCon->setImplicit();
   7908 
   7909   // Build an exception specification pointing back at this constructor.
   7910   FunctionProtoType::ExtProtoInfo EPI;
   7911   EPI.ExceptionSpecType = EST_Unevaluated;
   7912   EPI.ExceptionSpecDecl = DefaultCon;
   7913   DefaultCon->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
   7914 
   7915   // We don't need to use SpecialMemberIsTrivial here; triviality for default
   7916   // constructors is easy to compute.
   7917   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
   7918 
   7919   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
   7920     SetDeclDeleted(DefaultCon, ClassLoc);
   7921 
   7922   // Note that we have declared this constructor.
   7923   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
   7924 
   7925   if (Scope *S = getScopeForContext(ClassDecl))
   7926     PushOnScopeChains(DefaultCon, S, false);
   7927   ClassDecl->addDecl(DefaultCon);
   7928 
   7929   return DefaultCon;
   7930 }
   7931 
   7932 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
   7933                                             CXXConstructorDecl *Constructor) {
   7934   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
   7935           !Constructor->doesThisDeclarationHaveABody() &&
   7936           !Constructor->isDeleted()) &&
   7937     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
   7938 
   7939   CXXRecordDecl *ClassDecl = Constructor->getParent();
   7940   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
   7941 
   7942   SynthesizedFunctionScope Scope(*this, Constructor);
   7943   DiagnosticErrorTrap Trap(Diags);
   7944   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
   7945       Trap.hasErrorOccurred()) {
   7946     Diag(CurrentLocation, diag::note_member_synthesized_at)
   7947       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
   7948     Constructor->setInvalidDecl();
   7949     return;
   7950   }
   7951 
   7952   SourceLocation Loc = Constructor->getLocation();
   7953   Constructor->setBody(new (Context) CompoundStmt(Loc));
   7954 
   7955   Constructor->setUsed();
   7956   MarkVTableUsed(CurrentLocation, ClassDecl);
   7957 
   7958   if (ASTMutationListener *L = getASTMutationListener()) {
   7959     L->CompletedImplicitDefinition(Constructor);
   7960   }
   7961 }
   7962 
   7963 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
   7964   // Check that any explicitly-defaulted methods have exception specifications
   7965   // compatible with their implicit exception specifications.
   7966   CheckDelayedExplicitlyDefaultedMemberExceptionSpecs();
   7967 }
   7968 
   7969 namespace {
   7970 /// Information on inheriting constructors to declare.
   7971 class InheritingConstructorInfo {
   7972 public:
   7973   InheritingConstructorInfo(Sema &SemaRef, CXXRecordDecl *Derived)
   7974       : SemaRef(SemaRef), Derived(Derived) {
   7975     // Mark the constructors that we already have in the derived class.
   7976     //
   7977     // C++11 [class.inhctor]p3: [...] a constructor is implicitly declared [...]
   7978     //   unless there is a user-declared constructor with the same signature in
   7979     //   the class where the using-declaration appears.
   7980     visitAll(Derived, &InheritingConstructorInfo::noteDeclaredInDerived);
   7981   }
   7982 
   7983   void inheritAll(CXXRecordDecl *RD) {
   7984     visitAll(RD, &InheritingConstructorInfo::inherit);
   7985   }
   7986 
   7987 private:
   7988   /// Information about an inheriting constructor.
   7989   struct InheritingConstructor {
   7990     InheritingConstructor()
   7991       : DeclaredInDerived(false), BaseCtor(0), DerivedCtor(0) {}
   7992 
   7993     /// If \c true, a constructor with this signature is already declared
   7994     /// in the derived class.
   7995     bool DeclaredInDerived;
   7996 
   7997     /// The constructor which is inherited.
   7998     const CXXConstructorDecl *BaseCtor;
   7999 
   8000     /// The derived constructor we declared.
   8001     CXXConstructorDecl *DerivedCtor;
   8002   };
   8003 
   8004   /// Inheriting constructors with a given canonical type. There can be at
   8005   /// most one such non-template constructor, and any number of templated
   8006   /// constructors.
   8007   struct InheritingConstructorsForType {
   8008     InheritingConstructor NonTemplate;
   8009     llvm::SmallVector<
   8010       std::pair<TemplateParameterList*, InheritingConstructor>, 4> Templates;
   8011 
   8012     InheritingConstructor &getEntry(Sema &S, const CXXConstructorDecl *Ctor) {
   8013       if (FunctionTemplateDecl *FTD = Ctor->getDescribedFunctionTemplate()) {
   8014         TemplateParameterList *ParamList = FTD->getTemplateParameters();
   8015         for (unsigned I = 0, N = Templates.size(); I != N; ++I)
   8016           if (S.TemplateParameterListsAreEqual(ParamList, Templates[I].first,
   8017                                                false, S.TPL_TemplateMatch))
   8018             return Templates[I].second;
   8019         Templates.push_back(std::make_pair(ParamList, InheritingConstructor()));
   8020         return Templates.back().second;
   8021       }
   8022 
   8023       return NonTemplate;
   8024     }
   8025   };
   8026 
   8027   /// Get or create the inheriting constructor record for a constructor.
   8028   InheritingConstructor &getEntry(const CXXConstructorDecl *Ctor,
   8029                                   QualType CtorType) {
   8030     return Map[CtorType.getCanonicalType()->castAs<FunctionProtoType>()]
   8031         .getEntry(SemaRef, Ctor);
   8032   }
   8033 
   8034   typedef void (InheritingConstructorInfo::*VisitFn)(const CXXConstructorDecl*);
   8035 
   8036   /// Process all constructors for a class.
   8037   void visitAll(const CXXRecordDecl *RD, VisitFn Callback) {
   8038     for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(),
   8039                                       CtorE = RD->ctor_end();
   8040          CtorIt != CtorE; ++CtorIt)
   8041       (this->*Callback)(*CtorIt);
   8042     for (CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
   8043              I(RD->decls_begin()), E(RD->decls_end());
   8044          I != E; ++I) {
   8045       const FunctionDecl *FD = (*I)->getTemplatedDecl();
   8046       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
   8047         (this->*Callback)(CD);
   8048     }
   8049   }
   8050 
   8051   /// Note that a constructor (or constructor template) was declared in Derived.
   8052   void noteDeclaredInDerived(const CXXConstructorDecl *Ctor) {
   8053     getEntry(Ctor, Ctor->getType()).DeclaredInDerived = true;
   8054   }
   8055 
   8056   /// Inherit a single constructor.
   8057   void inherit(const CXXConstructorDecl *Ctor) {
   8058     const FunctionProtoType *CtorType =
   8059         Ctor->getType()->castAs<FunctionProtoType>();
   8060     ArrayRef<QualType> ArgTypes(CtorType->getArgTypes());
   8061     FunctionProtoType::ExtProtoInfo EPI = CtorType->getExtProtoInfo();
   8062 
   8063     SourceLocation UsingLoc = getUsingLoc(Ctor->getParent());
   8064 
   8065     // Core issue (no number yet): the ellipsis is always discarded.
   8066     if (EPI.Variadic) {
   8067       SemaRef.Diag(UsingLoc, diag::warn_using_decl_constructor_ellipsis);
   8068       SemaRef.Diag(Ctor->getLocation(),
   8069                    diag::note_using_decl_constructor_ellipsis);
   8070       EPI.Variadic = false;
   8071     }
   8072 
   8073     // Declare a constructor for each number of parameters.
   8074     //
   8075     // C++11 [class.inhctor]p1:
   8076     //   The candidate set of inherited constructors from the class X named in
   8077     //   the using-declaration consists of [... modulo defects ...] for each
   8078     //   constructor or constructor template of X, the set of constructors or
   8079     //   constructor templates that results from omitting any ellipsis parameter
   8080     //   specification and successively omitting parameters with a default
   8081     //   argument from the end of the parameter-type-list
   8082     unsigned MinParams = minParamsToInherit(Ctor);
   8083     unsigned Params = Ctor->getNumParams();
   8084     if (Params >= MinParams) {
   8085       do
   8086         declareCtor(UsingLoc, Ctor,
   8087                     SemaRef.Context.getFunctionType(
   8088                         Ctor->getResultType(), ArgTypes.slice(0, Params), EPI));
   8089       while (Params > MinParams &&
   8090              Ctor->getParamDecl(--Params)->hasDefaultArg());
   8091     }
   8092   }
   8093 
   8094   /// Find the using-declaration which specified that we should inherit the
   8095   /// constructors of \p Base.
   8096   SourceLocation getUsingLoc(const CXXRecordDecl *Base) {
   8097     // No fancy lookup required; just look for the base constructor name
   8098     // directly within the derived class.
   8099     ASTContext &Context = SemaRef.Context;
   8100     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
   8101         Context.getCanonicalType(Context.getRecordType(Base)));
   8102     DeclContext::lookup_const_result Decls = Derived->lookup(Name);
   8103     return Decls.empty() ? Derived->getLocation() : Decls[0]->getLocation();
   8104   }
   8105 
   8106   unsigned minParamsToInherit(const CXXConstructorDecl *Ctor) {
   8107     // C++11 [class.inhctor]p3:
   8108     //   [F]or each constructor template in the candidate set of inherited
   8109     //   constructors, a constructor template is implicitly declared
   8110     if (Ctor->getDescribedFunctionTemplate())
   8111       return 0;
   8112 
   8113     //   For each non-template constructor in the candidate set of inherited
   8114     //   constructors other than a constructor having no parameters or a
   8115     //   copy/move constructor having a single parameter, a constructor is
   8116     //   implicitly declared [...]
   8117     if (Ctor->getNumParams() == 0)
   8118       return 1;
   8119     if (Ctor->isCopyOrMoveConstructor())
   8120       return 2;
   8121 
   8122     // Per discussion on core reflector, never inherit a constructor which
   8123     // would become a default, copy, or move constructor of Derived either.
   8124     const ParmVarDecl *PD = Ctor->getParamDecl(0);
   8125     const ReferenceType *RT = PD->getType()->getAs<ReferenceType>();
   8126     return (RT && RT->getPointeeCXXRecordDecl() == Derived) ? 2 : 1;
   8127   }
   8128 
   8129   /// Declare a single inheriting constructor, inheriting the specified
   8130   /// constructor, with the given type.
   8131   void declareCtor(SourceLocation UsingLoc, const CXXConstructorDecl *BaseCtor,
   8132                    QualType DerivedType) {
   8133     InheritingConstructor &Entry = getEntry(BaseCtor, DerivedType);
   8134 
   8135     // C++11 [class.inhctor]p3:
   8136     //   ... a constructor is implicitly declared with the same constructor
   8137     //   characteristics unless there is a user-declared constructor with
   8138     //   the same signature in the class where the using-declaration appears
   8139     if (Entry.DeclaredInDerived)
   8140       return;
   8141 
   8142     // C++11 [class.inhctor]p7:
   8143     //   If two using-declarations declare inheriting constructors with the
   8144     //   same signature, the program is ill-formed
   8145     if (Entry.DerivedCtor) {
   8146       if (BaseCtor->getParent() != Entry.BaseCtor->getParent()) {
   8147         // Only diagnose this once per constructor.
   8148         if (Entry.DerivedCtor->isInvalidDecl())
   8149           return;
   8150         Entry.DerivedCtor->setInvalidDecl();
   8151 
   8152         SemaRef.Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
   8153         SemaRef.Diag(BaseCtor->getLocation(),
   8154                      diag::note_using_decl_constructor_conflict_current_ctor);
   8155         SemaRef.Diag(Entry.BaseCtor->getLocation(),
   8156                      diag::note_using_decl_constructor_conflict_previous_ctor);
   8157         SemaRef.Diag(Entry.DerivedCtor->getLocation(),
   8158                      diag::note_using_decl_constructor_conflict_previous_using);
   8159       } else {
   8160         // Core issue (no number): if the same inheriting constructor is
   8161         // produced by multiple base class constructors from the same base
   8162         // class, the inheriting constructor is defined as deleted.
   8163         SemaRef.SetDeclDeleted(Entry.DerivedCtor, UsingLoc);
   8164       }
   8165 
   8166       return;
   8167     }
   8168 
   8169     ASTContext &Context = SemaRef.Context;
   8170     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
   8171         Context.getCanonicalType(Context.getRecordType(Derived)));
   8172     DeclarationNameInfo NameInfo(Name, UsingLoc);
   8173 
   8174     TemplateParameterList *TemplateParams = 0;
   8175     if (const FunctionTemplateDecl *FTD =
   8176             BaseCtor->getDescribedFunctionTemplate()) {
   8177       TemplateParams = FTD->getTemplateParameters();
   8178       // We're reusing template parameters from a different DeclContext. This
   8179       // is questionable at best, but works out because the template depth in
   8180       // both places is guaranteed to be 0.
   8181       // FIXME: Rebuild the template parameters in the new context, and
   8182       // transform the function type to refer to them.
   8183     }
   8184 
   8185     // Build type source info pointing at the using-declaration. This is
   8186     // required by template instantiation.
   8187     TypeSourceInfo *TInfo =
   8188         Context.getTrivialTypeSourceInfo(DerivedType, UsingLoc);
   8189     FunctionProtoTypeLoc ProtoLoc =
   8190         TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
   8191 
   8192     CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
   8193         Context, Derived, UsingLoc, NameInfo, DerivedType,
   8194         TInfo, BaseCtor->isExplicit(), /*Inline=*/true,
   8195         /*ImplicitlyDeclared=*/true, /*Constexpr=*/BaseCtor->isConstexpr());
   8196 
   8197     // Build an unevaluated exception specification for this constructor.
   8198     const FunctionProtoType *FPT = DerivedType->castAs<FunctionProtoType>();
   8199     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
   8200     EPI.ExceptionSpecType = EST_Unevaluated;
   8201     EPI.ExceptionSpecDecl = DerivedCtor;
   8202     DerivedCtor->setType(Context.getFunctionType(FPT->getResultType(),
   8203                                                  FPT->getArgTypes(), EPI));
   8204 
   8205     // Build the parameter declarations.
   8206     SmallVector<ParmVarDecl *, 16> ParamDecls;
   8207     for (unsigned I = 0, N = FPT->getNumArgs(); I != N; ++I) {
   8208       TypeSourceInfo *TInfo =
   8209           Context.getTrivialTypeSourceInfo(FPT->getArgType(I), UsingLoc);
   8210       ParmVarDecl *PD = ParmVarDecl::Create(
   8211           Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/0,
   8212           FPT->getArgType(I), TInfo, SC_None, /*DefaultArg=*/0);
   8213       PD->setScopeInfo(0, I);
   8214       PD->setImplicit();
   8215       ParamDecls.push_back(PD);
   8216       ProtoLoc.setArg(I, PD);
   8217     }
   8218 
   8219     // Set up the new constructor.
   8220     DerivedCtor->setAccess(BaseCtor->getAccess());
   8221     DerivedCtor->setParams(ParamDecls);
   8222     DerivedCtor->setInheritedConstructor(BaseCtor);
   8223     if (BaseCtor->isDeleted())
   8224       SemaRef.SetDeclDeleted(DerivedCtor, UsingLoc);
   8225 
   8226     // If this is a constructor template, build the template declaration.
   8227     if (TemplateParams) {
   8228       FunctionTemplateDecl *DerivedTemplate =
   8229           FunctionTemplateDecl::Create(SemaRef.Context, Derived, UsingLoc, Name,
   8230                                        TemplateParams, DerivedCtor);
   8231       DerivedTemplate->setAccess(BaseCtor->getAccess());
   8232       DerivedCtor->setDescribedFunctionTemplate(DerivedTemplate);
   8233       Derived->addDecl(DerivedTemplate);
   8234     } else {
   8235       Derived->addDecl(DerivedCtor);
   8236     }
   8237 
   8238     Entry.BaseCtor = BaseCtor;
   8239     Entry.DerivedCtor = DerivedCtor;
   8240   }
   8241 
   8242   Sema &SemaRef;
   8243   CXXRecordDecl *Derived;
   8244   typedef llvm::DenseMap<const Type *, InheritingConstructorsForType> MapType;
   8245   MapType Map;
   8246 };
   8247 }
   8248 
   8249 void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
   8250   // Defer declaring the inheriting constructors until the class is
   8251   // instantiated.
   8252   if (ClassDecl->isDependentContext())
   8253     return;
   8254 
   8255   // Find base classes from which we might inherit constructors.
   8256   SmallVector<CXXRecordDecl*, 4> InheritedBases;
   8257   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
   8258                                           BaseE = ClassDecl->bases_end();
   8259        BaseIt != BaseE; ++BaseIt)
   8260     if (BaseIt->getInheritConstructors())
   8261       InheritedBases.push_back(BaseIt->getType()->getAsCXXRecordDecl());
   8262 
   8263   // Go no further if we're not inheriting any constructors.
   8264   if (InheritedBases.empty())
   8265     return;
   8266 
   8267   // Declare the inherited constructors.
   8268   InheritingConstructorInfo ICI(*this, ClassDecl);
   8269   for (unsigned I = 0, N = InheritedBases.size(); I != N; ++I)
   8270     ICI.inheritAll(InheritedBases[I]);
   8271 }
   8272 
   8273 void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
   8274                                        CXXConstructorDecl *Constructor) {
   8275   CXXRecordDecl *ClassDecl = Constructor->getParent();
   8276   assert(Constructor->getInheritedConstructor() &&
   8277          !Constructor->doesThisDeclarationHaveABody() &&
   8278          !Constructor->isDeleted());
   8279 
   8280   SynthesizedFunctionScope Scope(*this, Constructor);
   8281   DiagnosticErrorTrap Trap(Diags);
   8282   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
   8283       Trap.hasErrorOccurred()) {
   8284     Diag(CurrentLocation, diag::note_inhctor_synthesized_at)
   8285       << Context.getTagDeclType(ClassDecl);
   8286     Constructor->setInvalidDecl();
   8287     return;
   8288   }
   8289 
   8290   SourceLocation Loc = Constructor->getLocation();
   8291   Constructor->setBody(new (Context) CompoundStmt(Loc));
   8292 
   8293   Constructor->setUsed();
   8294   MarkVTableUsed(CurrentLocation, ClassDecl);
   8295 
   8296   if (ASTMutationListener *L = getASTMutationListener()) {
   8297     L->CompletedImplicitDefinition(Constructor);
   8298   }
   8299 }
   8300 
   8301 
   8302 Sema::ImplicitExceptionSpecification
   8303 Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
   8304   CXXRecordDecl *ClassDecl = MD->getParent();
   8305 
   8306   // C++ [except.spec]p14:
   8307   //   An implicitly declared special member function (Clause 12) shall have
   8308   //   an exception-specification.
   8309   ImplicitExceptionSpecification ExceptSpec(*this);
   8310   if (ClassDecl->isInvalidDecl())
   8311     return ExceptSpec;
   8312 
   8313   // Direct base-class destructors.
   8314   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   8315                                        BEnd = ClassDecl->bases_end();
   8316        B != BEnd; ++B) {
   8317     if (B->isVirtual()) // Handled below.
   8318       continue;
   8319 
   8320     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   8321       ExceptSpec.CalledDecl(B->getLocStart(),
   8322                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   8323   }
   8324 
   8325   // Virtual base-class destructors.
   8326   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   8327                                        BEnd = ClassDecl->vbases_end();
   8328        B != BEnd; ++B) {
   8329     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   8330       ExceptSpec.CalledDecl(B->getLocStart(),
   8331                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   8332   }
   8333 
   8334   // Field destructors.
   8335   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   8336                                FEnd = ClassDecl->field_end();
   8337        F != FEnd; ++F) {
   8338     if (const RecordType *RecordTy
   8339         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
   8340       ExceptSpec.CalledDecl(F->getLocation(),
   8341                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
   8342   }
   8343 
   8344   return ExceptSpec;
   8345 }
   8346 
   8347 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
   8348   // C++ [class.dtor]p2:
   8349   //   If a class has no user-declared destructor, a destructor is
   8350   //   declared implicitly. An implicitly-declared destructor is an
   8351   //   inline public member of its class.
   8352   assert(ClassDecl->needsImplicitDestructor());
   8353 
   8354   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
   8355   if (DSM.isAlreadyBeingDeclared())
   8356     return 0;
   8357 
   8358   // Create the actual destructor declaration.
   8359   CanQualType ClassType
   8360     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   8361   SourceLocation ClassLoc = ClassDecl->getLocation();
   8362   DeclarationName Name
   8363     = Context.DeclarationNames.getCXXDestructorName(ClassType);
   8364   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8365   CXXDestructorDecl *Destructor
   8366       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   8367                                   QualType(), 0, /*isInline=*/true,
   8368                                   /*isImplicitlyDeclared=*/true);
   8369   Destructor->setAccess(AS_public);
   8370   Destructor->setDefaulted();
   8371   Destructor->setImplicit();
   8372 
   8373   // Build an exception specification pointing back at this destructor.
   8374   FunctionProtoType::ExtProtoInfo EPI;
   8375   EPI.ExceptionSpecType = EST_Unevaluated;
   8376   EPI.ExceptionSpecDecl = Destructor;
   8377   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
   8378 
   8379   AddOverriddenMethods(ClassDecl, Destructor);
   8380 
   8381   // We don't need to use SpecialMemberIsTrivial here; triviality for
   8382   // destructors is easy to compute.
   8383   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
   8384 
   8385   if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
   8386     SetDeclDeleted(Destructor, ClassLoc);
   8387 
   8388   // Note that we have declared this destructor.
   8389   ++ASTContext::NumImplicitDestructorsDeclared;
   8390 
   8391   // Introduce this destructor into its scope.
   8392   if (Scope *S = getScopeForContext(ClassDecl))
   8393     PushOnScopeChains(Destructor, S, false);
   8394   ClassDecl->addDecl(Destructor);
   8395 
   8396   return Destructor;
   8397 }
   8398 
   8399 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
   8400                                     CXXDestructorDecl *Destructor) {
   8401   assert((Destructor->isDefaulted() &&
   8402           !Destructor->doesThisDeclarationHaveABody() &&
   8403           !Destructor->isDeleted()) &&
   8404          "DefineImplicitDestructor - call it for implicit default dtor");
   8405   CXXRecordDecl *ClassDecl = Destructor->getParent();
   8406   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
   8407 
   8408   if (Destructor->isInvalidDecl())
   8409     return;
   8410 
   8411   SynthesizedFunctionScope Scope(*this, Destructor);
   8412 
   8413   DiagnosticErrorTrap Trap(Diags);
   8414   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
   8415                                          Destructor->getParent());
   8416 
   8417   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
   8418     Diag(CurrentLocation, diag::note_member_synthesized_at)
   8419       << CXXDestructor << Context.getTagDeclType(ClassDecl);
   8420 
   8421     Destructor->setInvalidDecl();
   8422     return;
   8423   }
   8424 
   8425   SourceLocation Loc = Destructor->getLocation();
   8426   Destructor->setBody(new (Context) CompoundStmt(Loc));
   8427   Destructor->setUsed();
   8428   MarkVTableUsed(CurrentLocation, ClassDecl);
   8429 
   8430   if (ASTMutationListener *L = getASTMutationListener()) {
   8431     L->CompletedImplicitDefinition(Destructor);
   8432   }
   8433 }
   8434 
   8435 /// \brief Perform any semantic analysis which needs to be delayed until all
   8436 /// pending class member declarations have been parsed.
   8437 void Sema::ActOnFinishCXXMemberDecls() {
   8438   // If the context is an invalid C++ class, just suppress these checks.
   8439   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
   8440     if (Record->isInvalidDecl()) {
   8441       DelayedDestructorExceptionSpecChecks.clear();
   8442       return;
   8443     }
   8444   }
   8445 
   8446   // Perform any deferred checking of exception specifications for virtual
   8447   // destructors.
   8448   for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
   8449        i != e; ++i) {
   8450     const CXXDestructorDecl *Dtor =
   8451         DelayedDestructorExceptionSpecChecks[i].first;
   8452     assert(!Dtor->getParent()->isDependentType() &&
   8453            "Should not ever add destructors of templates into the list.");
   8454     CheckOverridingFunctionExceptionSpec(Dtor,
   8455         DelayedDestructorExceptionSpecChecks[i].second);
   8456   }
   8457   DelayedDestructorExceptionSpecChecks.clear();
   8458 }
   8459 
   8460 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
   8461                                          CXXDestructorDecl *Destructor) {
   8462   assert(getLangOpts().CPlusPlus11 &&
   8463          "adjusting dtor exception specs was introduced in c++11");
   8464 
   8465   // C++11 [class.dtor]p3:
   8466   //   A declaration of a destructor that does not have an exception-
   8467   //   specification is implicitly considered to have the same exception-
   8468   //   specification as an implicit declaration.
   8469   const FunctionProtoType *DtorType = Destructor->getType()->
   8470                                         getAs<FunctionProtoType>();
   8471   if (DtorType->hasExceptionSpec())
   8472     return;
   8473 
   8474   // Replace the destructor's type, building off the existing one. Fortunately,
   8475   // the only thing of interest in the destructor type is its extended info.
   8476   // The return and arguments are fixed.
   8477   FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
   8478   EPI.ExceptionSpecType = EST_Unevaluated;
   8479   EPI.ExceptionSpecDecl = Destructor;
   8480   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
   8481 
   8482   // FIXME: If the destructor has a body that could throw, and the newly created
   8483   // spec doesn't allow exceptions, we should emit a warning, because this
   8484   // change in behavior can break conforming C++03 programs at runtime.
   8485   // However, we don't have a body or an exception specification yet, so it
   8486   // needs to be done somewhere else.
   8487 }
   8488 
   8489 /// When generating a defaulted copy or move assignment operator, if a field
   8490 /// should be copied with __builtin_memcpy rather than via explicit assignments,
   8491 /// do so. This optimization only applies for arrays of scalars, and for arrays
   8492 /// of class type where the selected copy/move-assignment operator is trivial.
   8493 static StmtResult
   8494 buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
   8495                            Expr *To, Expr *From) {
   8496   // Compute the size of the memory buffer to be copied.
   8497   QualType SizeType = S.Context.getSizeType();
   8498   llvm::APInt Size(S.Context.getTypeSize(SizeType),
   8499                    S.Context.getTypeSizeInChars(T).getQuantity());
   8500 
   8501   // Take the address of the field references for "from" and "to". We
   8502   // directly construct UnaryOperators here because semantic analysis
   8503   // does not permit us to take the address of an xvalue.
   8504   From = new (S.Context) UnaryOperator(From, UO_AddrOf,
   8505                          S.Context.getPointerType(From->getType()),
   8506                          VK_RValue, OK_Ordinary, Loc);
   8507   To = new (S.Context) UnaryOperator(To, UO_AddrOf,
   8508                        S.Context.getPointerType(To->getType()),
   8509                        VK_RValue, OK_Ordinary, Loc);
   8510 
   8511   const Type *E = T->getBaseElementTypeUnsafe();
   8512   bool NeedsCollectableMemCpy =
   8513     E->isRecordType() && E->getAs<RecordType>()->getDecl()->hasObjectMember();
   8514 
   8515   // Create a reference to the __builtin_objc_memmove_collectable function
   8516   StringRef MemCpyName = NeedsCollectableMemCpy ?
   8517     "__builtin_objc_memmove_collectable" :
   8518     "__builtin_memcpy";
   8519   LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
   8520                  Sema::LookupOrdinaryName);
   8521   S.LookupName(R, S.TUScope, true);
   8522 
   8523   FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
   8524   if (!MemCpy)
   8525     // Something went horribly wrong earlier, and we will have complained
   8526     // about it.
   8527     return StmtError();
   8528 
   8529   ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
   8530                                             VK_RValue, Loc, 0);
   8531   assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
   8532 
   8533   Expr *CallArgs[] = {
   8534     To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
   8535   };
   8536   ExprResult Call = S.ActOnCallExpr(/*Scope=*/0, MemCpyRef.take(),
   8537                                     Loc, CallArgs, Loc);
   8538 
   8539   assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
   8540   return S.Owned(Call.takeAs<Stmt>());
   8541 }
   8542 
   8543 /// \brief Builds a statement that copies/moves the given entity from \p From to
   8544 /// \c To.
   8545 ///
   8546 /// This routine is used to copy/move the members of a class with an
   8547 /// implicitly-declared copy/move assignment operator. When the entities being
   8548 /// copied are arrays, this routine builds for loops to copy them.
   8549 ///
   8550 /// \param S The Sema object used for type-checking.
   8551 ///
   8552 /// \param Loc The location where the implicit copy/move is being generated.
   8553 ///
   8554 /// \param T The type of the expressions being copied/moved. Both expressions
   8555 /// must have this type.
   8556 ///
   8557 /// \param To The expression we are copying/moving to.
   8558 ///
   8559 /// \param From The expression we are copying/moving from.
   8560 ///
   8561 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
   8562 /// Otherwise, it's a non-static member subobject.
   8563 ///
   8564 /// \param Copying Whether we're copying or moving.
   8565 ///
   8566 /// \param Depth Internal parameter recording the depth of the recursion.
   8567 ///
   8568 /// \returns A statement or a loop that copies the expressions, or StmtResult(0)
   8569 /// if a memcpy should be used instead.
   8570 static StmtResult
   8571 buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
   8572                                  Expr *To, Expr *From,
   8573                                  bool CopyingBaseSubobject, bool Copying,
   8574                                  unsigned Depth = 0) {
   8575   // C++11 [class.copy]p28:
   8576   //   Each subobject is assigned in the manner appropriate to its type:
   8577   //
   8578   //     - if the subobject is of class type, as if by a call to operator= with
   8579   //       the subobject as the object expression and the corresponding
   8580   //       subobject of x as a single function argument (as if by explicit
   8581   //       qualification; that is, ignoring any possible virtual overriding
   8582   //       functions in more derived classes);
   8583   //
   8584   // C++03 [class.copy]p13:
   8585   //     - if the subobject is of class type, the copy assignment operator for
   8586   //       the class is used (as if by explicit qualification; that is,
   8587   //       ignoring any possible virtual overriding functions in more derived
   8588   //       classes);
   8589   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
   8590     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   8591 
   8592     // Look for operator=.
   8593     DeclarationName Name
   8594       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   8595     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
   8596     S.LookupQualifiedName(OpLookup, ClassDecl, false);
   8597 
   8598     // Prior to C++11, filter out any result that isn't a copy/move-assignment
   8599     // operator.
   8600     if (!S.getLangOpts().CPlusPlus11) {
   8601       LookupResult::Filter F = OpLookup.makeFilter();
   8602       while (F.hasNext()) {
   8603         NamedDecl *D = F.next();
   8604         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
   8605           if (Method->isCopyAssignmentOperator() ||
   8606               (!Copying && Method->isMoveAssignmentOperator()))
   8607             continue;
   8608 
   8609         F.erase();
   8610       }
   8611       F.done();
   8612     }
   8613 
   8614     // Suppress the protected check (C++ [class.protected]) for each of the
   8615     // assignment operators we found. This strange dance is required when
   8616     // we're assigning via a base classes's copy-assignment operator. To
   8617     // ensure that we're getting the right base class subobject (without
   8618     // ambiguities), we need to cast "this" to that subobject type; to
   8619     // ensure that we don't go through the virtual call mechanism, we need
   8620     // to qualify the operator= name with the base class (see below). However,
   8621     // this means that if the base class has a protected copy assignment
   8622     // operator, the protected member access check will fail. So, we
   8623     // rewrite "protected" access to "public" access in this case, since we
   8624     // know by construction that we're calling from a derived class.
   8625     if (CopyingBaseSubobject) {
   8626       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
   8627            L != LEnd; ++L) {
   8628         if (L.getAccess() == AS_protected)
   8629           L.setAccess(AS_public);
   8630       }
   8631     }
   8632 
   8633     // Create the nested-name-specifier that will be used to qualify the
   8634     // reference to operator=; this is required to suppress the virtual
   8635     // call mechanism.
   8636     CXXScopeSpec SS;
   8637     const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
   8638     SS.MakeTrivial(S.Context,
   8639                    NestedNameSpecifier::Create(S.Context, 0, false,
   8640                                                CanonicalT),
   8641                    Loc);
   8642 
   8643     // Create the reference to operator=.
   8644     ExprResult OpEqualRef
   8645       = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
   8646                                    /*TemplateKWLoc=*/SourceLocation(),
   8647                                    /*FirstQualifierInScope=*/0,
   8648                                    OpLookup,
   8649                                    /*TemplateArgs=*/0,
   8650                                    /*SuppressQualifierCheck=*/true);
   8651     if (OpEqualRef.isInvalid())
   8652       return StmtError();
   8653 
   8654     // Build the call to the assignment operator.
   8655 
   8656     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
   8657                                                   OpEqualRef.takeAs<Expr>(),
   8658                                                   Loc, From, Loc);
   8659     if (Call.isInvalid())
   8660       return StmtError();
   8661 
   8662     // If we built a call to a trivial 'operator=' while copying an array,
   8663     // bail out. We'll replace the whole shebang with a memcpy.
   8664     CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
   8665     if (CE && CE->getMethodDecl()->isTrivial() && Depth)
   8666       return StmtResult((Stmt*)0);
   8667 
   8668     // Convert to an expression-statement, and clean up any produced
   8669     // temporaries.
   8670     return S.ActOnExprStmt(Call);
   8671   }
   8672 
   8673   //     - if the subobject is of scalar type, the built-in assignment
   8674   //       operator is used.
   8675   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
   8676   if (!ArrayTy) {
   8677     ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
   8678     if (Assignment.isInvalid())
   8679       return StmtError();
   8680     return S.ActOnExprStmt(Assignment);
   8681   }
   8682 
   8683   //     - if the subobject is an array, each element is assigned, in the
   8684   //       manner appropriate to the element type;
   8685 
   8686   // Construct a loop over the array bounds, e.g.,
   8687   //
   8688   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
   8689   //
   8690   // that will copy each of the array elements.
   8691   QualType SizeType = S.Context.getSizeType();
   8692 
   8693   // Create the iteration variable.
   8694   IdentifierInfo *IterationVarName = 0;
   8695   {
   8696     SmallString<8> Str;
   8697     llvm::raw_svector_ostream OS(Str);
   8698     OS << "__i" << Depth;
   8699     IterationVarName = &S.Context.Idents.get(OS.str());
   8700   }
   8701   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
   8702                                           IterationVarName, SizeType,
   8703                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   8704                                           SC_None);
   8705 
   8706   // Initialize the iteration variable to zero.
   8707   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
   8708   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
   8709 
   8710   // Create a reference to the iteration variable; we'll use this several
   8711   // times throughout.
   8712   Expr *IterationVarRef
   8713     = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
   8714   assert(IterationVarRef && "Reference to invented variable cannot fail!");
   8715   Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
   8716   assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
   8717 
   8718   // Create the DeclStmt that holds the iteration variable.
   8719   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
   8720 
   8721   // Subscript the "from" and "to" expressions with the iteration variable.
   8722   From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
   8723                                                          IterationVarRefRVal,
   8724                                                          Loc));
   8725   To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
   8726                                                        IterationVarRefRVal,
   8727                                                        Loc));
   8728   if (!Copying) // Cast to rvalue
   8729     From = CastForMoving(S, From);
   8730 
   8731   // Build the copy/move for an individual element of the array.
   8732   StmtResult Copy =
   8733     buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
   8734                                      To, From, CopyingBaseSubobject,
   8735                                      Copying, Depth + 1);
   8736   // Bail out if copying fails or if we determined that we should use memcpy.
   8737   if (Copy.isInvalid() || !Copy.get())
   8738     return Copy;
   8739 
   8740   // Create the comparison against the array bound.
   8741   llvm::APInt Upper
   8742     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
   8743   Expr *Comparison
   8744     = new (S.Context) BinaryOperator(IterationVarRefRVal,
   8745                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
   8746                                      BO_NE, S.Context.BoolTy,
   8747                                      VK_RValue, OK_Ordinary, Loc, false);
   8748 
   8749   // Create the pre-increment of the iteration variable.
   8750   Expr *Increment
   8751     = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
   8752                                     VK_LValue, OK_Ordinary, Loc);
   8753 
   8754   // Construct the loop that copies all elements of this array.
   8755   return S.ActOnForStmt(Loc, Loc, InitStmt,
   8756                         S.MakeFullExpr(Comparison),
   8757                         0, S.MakeFullDiscardedValueExpr(Increment),
   8758                         Loc, Copy.take());
   8759 }
   8760 
   8761 static StmtResult
   8762 buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
   8763                       Expr *To, Expr *From,
   8764                       bool CopyingBaseSubobject, bool Copying) {
   8765   // Maybe we should use a memcpy?
   8766   if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
   8767       T.isTriviallyCopyableType(S.Context))
   8768     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
   8769 
   8770   StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
   8771                                                      CopyingBaseSubobject,
   8772                                                      Copying, 0));
   8773 
   8774   // If we ended up picking a trivial assignment operator for an array of a
   8775   // non-trivially-copyable class type, just emit a memcpy.
   8776   if (!Result.isInvalid() && !Result.get())
   8777     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
   8778 
   8779   return Result;
   8780 }
   8781 
   8782 Sema::ImplicitExceptionSpecification
   8783 Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
   8784   CXXRecordDecl *ClassDecl = MD->getParent();
   8785 
   8786   ImplicitExceptionSpecification ExceptSpec(*this);
   8787   if (ClassDecl->isInvalidDecl())
   8788     return ExceptSpec;
   8789 
   8790   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
   8791   assert(T->getNumArgs() == 1 && "not a copy assignment op");
   8792   unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
   8793 
   8794   // C++ [except.spec]p14:
   8795   //   An implicitly declared special member function (Clause 12) shall have an
   8796   //   exception-specification. [...]
   8797 
   8798   // It is unspecified whether or not an implicit copy assignment operator
   8799   // attempts to deduplicate calls to assignment operators of virtual bases are
   8800   // made. As such, this exception specification is effectively unspecified.
   8801   // Based on a similar decision made for constness in C++0x, we're erring on
   8802   // the side of assuming such calls to be made regardless of whether they
   8803   // actually happen.
   8804   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8805                                        BaseEnd = ClassDecl->bases_end();
   8806        Base != BaseEnd; ++Base) {
   8807     if (Base->isVirtual())
   8808       continue;
   8809 
   8810     CXXRecordDecl *BaseClassDecl
   8811       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8812     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   8813                                                             ArgQuals, false, 0))
   8814       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
   8815   }
   8816 
   8817   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8818                                        BaseEnd = ClassDecl->vbases_end();
   8819        Base != BaseEnd; ++Base) {
   8820     CXXRecordDecl *BaseClassDecl
   8821       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8822     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   8823                                                             ArgQuals, false, 0))
   8824       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
   8825   }
   8826 
   8827   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8828                                   FieldEnd = ClassDecl->field_end();
   8829        Field != FieldEnd;
   8830        ++Field) {
   8831     QualType FieldType = Context.getBaseElementType(Field->getType());
   8832     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8833       if (CXXMethodDecl *CopyAssign =
   8834           LookupCopyingAssignment(FieldClassDecl,
   8835                                   ArgQuals | FieldType.getCVRQualifiers(),
   8836                                   false, 0))
   8837         ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
   8838     }
   8839   }
   8840 
   8841   return ExceptSpec;
   8842 }
   8843 
   8844 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
   8845   // Note: The following rules are largely analoguous to the copy
   8846   // constructor rules. Note that virtual bases are not taken into account
   8847   // for determining the argument type of the operator. Note also that
   8848   // operators taking an object instead of a reference are allowed.
   8849   assert(ClassDecl->needsImplicitCopyAssignment());
   8850 
   8851   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
   8852   if (DSM.isAlreadyBeingDeclared())
   8853     return 0;
   8854 
   8855   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   8856   QualType RetType = Context.getLValueReferenceType(ArgType);
   8857   bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
   8858   if (Const)
   8859     ArgType = ArgType.withConst();
   8860   ArgType = Context.getLValueReferenceType(ArgType);
   8861 
   8862   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
   8863                                                      CXXCopyAssignment,
   8864                                                      Const);
   8865 
   8866   //   An implicitly-declared copy assignment operator is an inline public
   8867   //   member of its class.
   8868   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   8869   SourceLocation ClassLoc = ClassDecl->getLocation();
   8870   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8871   CXXMethodDecl *CopyAssignment =
   8872       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
   8873                             /*TInfo=*/ 0, /*StorageClass=*/ SC_None,
   8874                             /*isInline=*/ true, Constexpr, SourceLocation());
   8875   CopyAssignment->setAccess(AS_public);
   8876   CopyAssignment->setDefaulted();
   8877   CopyAssignment->setImplicit();
   8878 
   8879   // Build an exception specification pointing back at this member.
   8880   FunctionProtoType::ExtProtoInfo EPI;
   8881   EPI.ExceptionSpecType = EST_Unevaluated;
   8882   EPI.ExceptionSpecDecl = CopyAssignment;
   8883   CopyAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
   8884 
   8885   // Add the parameter to the operator.
   8886   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
   8887                                                ClassLoc, ClassLoc, /*Id=*/0,
   8888                                                ArgType, /*TInfo=*/0,
   8889                                                SC_None, 0);
   8890   CopyAssignment->setParams(FromParam);
   8891 
   8892   AddOverriddenMethods(ClassDecl, CopyAssignment);
   8893 
   8894   CopyAssignment->setTrivial(
   8895     ClassDecl->needsOverloadResolutionForCopyAssignment()
   8896       ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
   8897       : ClassDecl->hasTrivialCopyAssignment());
   8898 
   8899   // C++11 [class.copy]p19:
   8900   //   ....  If the class definition does not explicitly declare a copy
   8901   //   assignment operator, there is no user-declared move constructor, and
   8902   //   there is no user-declared move assignment operator, a copy assignment
   8903   //   operator is implicitly declared as defaulted.
   8904   if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
   8905     SetDeclDeleted(CopyAssignment, ClassLoc);
   8906 
   8907   // Note that we have added this copy-assignment operator.
   8908   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
   8909 
   8910   if (Scope *S = getScopeForContext(ClassDecl))
   8911     PushOnScopeChains(CopyAssignment, S, false);
   8912   ClassDecl->addDecl(CopyAssignment);
   8913 
   8914   return CopyAssignment;
   8915 }
   8916 
   8917 /// Diagnose an implicit copy operation for a class which is odr-used, but
   8918 /// which is deprecated because the class has a user-declared copy constructor,
   8919 /// copy assignment operator, or destructor.
   8920 static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp,
   8921                                             SourceLocation UseLoc) {
   8922   assert(CopyOp->isImplicit());
   8923 
   8924   CXXRecordDecl *RD = CopyOp->getParent();
   8925   CXXMethodDecl *UserDeclaredOperation = 0;
   8926 
   8927   // In Microsoft mode, assignment operations don't affect constructors and
   8928   // vice versa.
   8929   if (RD->hasUserDeclaredDestructor()) {
   8930     UserDeclaredOperation = RD->getDestructor();
   8931   } else if (!isa<CXXConstructorDecl>(CopyOp) &&
   8932              RD->hasUserDeclaredCopyConstructor() &&
   8933              !S.getLangOpts().MicrosoftMode) {
   8934     // Find any user-declared copy constructor.
   8935     for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
   8936                                       E = RD->ctor_end(); I != E; ++I) {
   8937       if (I->isCopyConstructor()) {
   8938         UserDeclaredOperation = *I;
   8939         break;
   8940       }
   8941     }
   8942     assert(UserDeclaredOperation);
   8943   } else if (isa<CXXConstructorDecl>(CopyOp) &&
   8944              RD->hasUserDeclaredCopyAssignment() &&
   8945              !S.getLangOpts().MicrosoftMode) {
   8946     // Find any user-declared move assignment operator.
   8947     for (CXXRecordDecl::method_iterator I = RD->method_begin(),
   8948                                         E = RD->method_end(); I != E; ++I) {
   8949       if (I->isCopyAssignmentOperator()) {
   8950         UserDeclaredOperation = *I;
   8951         break;
   8952       }
   8953     }
   8954     assert(UserDeclaredOperation);
   8955   }
   8956 
   8957   if (UserDeclaredOperation) {
   8958     S.Diag(UserDeclaredOperation->getLocation(),
   8959          diag::warn_deprecated_copy_operation)
   8960       << RD << /*copy assignment*/!isa<CXXConstructorDecl>(CopyOp)
   8961       << /*destructor*/isa<CXXDestructorDecl>(UserDeclaredOperation);
   8962     S.Diag(UseLoc, diag::note_member_synthesized_at)
   8963       << (isa<CXXConstructorDecl>(CopyOp) ? Sema::CXXCopyConstructor
   8964                                           : Sema::CXXCopyAssignment)
   8965       << RD;
   8966   }
   8967 }
   8968 
   8969 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
   8970                                         CXXMethodDecl *CopyAssignOperator) {
   8971   assert((CopyAssignOperator->isDefaulted() &&
   8972           CopyAssignOperator->isOverloadedOperator() &&
   8973           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
   8974           !CopyAssignOperator->doesThisDeclarationHaveABody() &&
   8975           !CopyAssignOperator->isDeleted()) &&
   8976          "DefineImplicitCopyAssignment called for wrong function");
   8977 
   8978   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
   8979 
   8980   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
   8981     CopyAssignOperator->setInvalidDecl();
   8982     return;
   8983   }
   8984 
   8985   // C++11 [class.copy]p18:
   8986   //   The [definition of an implicitly declared copy assignment operator] is
   8987   //   deprecated if the class has a user-declared copy constructor or a
   8988   //   user-declared destructor.
   8989   if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
   8990     diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator, CurrentLocation);
   8991 
   8992   CopyAssignOperator->setUsed();
   8993 
   8994   SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
   8995   DiagnosticErrorTrap Trap(Diags);
   8996 
   8997   // C++0x [class.copy]p30:
   8998   //   The implicitly-defined or explicitly-defaulted copy assignment operator
   8999   //   for a non-union class X performs memberwise copy assignment of its
   9000   //   subobjects. The direct base classes of X are assigned first, in the
   9001   //   order of their declaration in the base-specifier-list, and then the
   9002   //   immediate non-static data members of X are assigned, in the order in
   9003   //   which they were declared in the class definition.
   9004 
   9005   // The statements that form the synthesized function body.
   9006   SmallVector<Stmt*, 8> Statements;
   9007 
   9008   // The parameter for the "other" object, which we are copying from.
   9009   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
   9010   Qualifiers OtherQuals = Other->getType().getQualifiers();
   9011   QualType OtherRefType = Other->getType();
   9012   if (const LValueReferenceType *OtherRef
   9013                                 = OtherRefType->getAs<LValueReferenceType>()) {
   9014     OtherRefType = OtherRef->getPointeeType();
   9015     OtherQuals = OtherRefType.getQualifiers();
   9016   }
   9017 
   9018   // Our location for everything implicitly-generated.
   9019   SourceLocation Loc = CopyAssignOperator->getLocation();
   9020 
   9021   // Construct a reference to the "other" object. We'll be using this
   9022   // throughout the generated ASTs.
   9023   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   9024   assert(OtherRef && "Reference to parameter cannot fail!");
   9025 
   9026   // Construct the "this" pointer. We'll be using this throughout the generated
   9027   // ASTs.
   9028   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   9029   assert(This && "Reference to this cannot fail!");
   9030 
   9031   // Assign base classes.
   9032   bool Invalid = false;
   9033   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   9034        E = ClassDecl->bases_end(); Base != E; ++Base) {
   9035     // Form the assignment:
   9036     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
   9037     QualType BaseType = Base->getType().getUnqualifiedType();
   9038     if (!BaseType->isRecordType()) {
   9039       Invalid = true;
   9040       continue;
   9041     }
   9042 
   9043     CXXCastPath BasePath;
   9044     BasePath.push_back(Base);
   9045 
   9046     // Construct the "from" expression, which is an implicit cast to the
   9047     // appropriately-qualified base type.
   9048     Expr *From = OtherRef;
   9049     From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
   9050                              CK_UncheckedDerivedToBase,
   9051                              VK_LValue, &BasePath).take();
   9052 
   9053     // Dereference "this".
   9054     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   9055 
   9056     // Implicitly cast "this" to the appropriately-qualified base type.
   9057     To = ImpCastExprToType(To.take(),
   9058                            Context.getCVRQualifiedType(BaseType,
   9059                                      CopyAssignOperator->getTypeQualifiers()),
   9060                            CK_UncheckedDerivedToBase,
   9061                            VK_LValue, &BasePath);
   9062 
   9063     // Build the copy.
   9064     StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
   9065                                             To.get(), From,
   9066                                             /*CopyingBaseSubobject=*/true,
   9067                                             /*Copying=*/true);
   9068     if (Copy.isInvalid()) {
   9069       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9070         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   9071       CopyAssignOperator->setInvalidDecl();
   9072       return;
   9073     }
   9074 
   9075     // Success! Record the copy.
   9076     Statements.push_back(Copy.takeAs<Expr>());
   9077   }
   9078 
   9079   // Assign non-static members.
   9080   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   9081                                   FieldEnd = ClassDecl->field_end();
   9082        Field != FieldEnd; ++Field) {
   9083     if (Field->isUnnamedBitfield())
   9084       continue;
   9085 
   9086     if (Field->isInvalidDecl()) {
   9087       Invalid = true;
   9088       continue;
   9089     }
   9090 
   9091     // Check for members of reference type; we can't copy those.
   9092     if (Field->getType()->isReferenceType()) {
   9093       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   9094         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   9095       Diag(Field->getLocation(), diag::note_declared_at);
   9096       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9097         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   9098       Invalid = true;
   9099       continue;
   9100     }
   9101 
   9102     // Check for members of const-qualified, non-class type.
   9103     QualType BaseType = Context.getBaseElementType(Field->getType());
   9104     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   9105       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   9106         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   9107       Diag(Field->getLocation(), diag::note_declared_at);
   9108       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9109         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   9110       Invalid = true;
   9111       continue;
   9112     }
   9113 
   9114     // Suppress assigning zero-width bitfields.
   9115     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   9116       continue;
   9117 
   9118     QualType FieldType = Field->getType().getNonReferenceType();
   9119     if (FieldType->isIncompleteArrayType()) {
   9120       assert(ClassDecl->hasFlexibleArrayMember() &&
   9121              "Incomplete array type is not valid");
   9122       continue;
   9123     }
   9124 
   9125     // Build references to the field in the object we're copying from and to.
   9126     CXXScopeSpec SS; // Intentionally empty
   9127     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   9128                               LookupMemberName);
   9129     MemberLookup.addDecl(*Field);
   9130     MemberLookup.resolveKind();
   9131     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   9132                                                Loc, /*IsArrow=*/false,
   9133                                                SS, SourceLocation(), 0,
   9134                                                MemberLookup, 0);
   9135     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   9136                                              Loc, /*IsArrow=*/true,
   9137                                              SS, SourceLocation(), 0,
   9138                                              MemberLookup, 0);
   9139     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   9140     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   9141 
   9142     // Build the copy of this field.
   9143     StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
   9144                                             To.get(), From.get(),
   9145                                             /*CopyingBaseSubobject=*/false,
   9146                                             /*Copying=*/true);
   9147     if (Copy.isInvalid()) {
   9148       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9149         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   9150       CopyAssignOperator->setInvalidDecl();
   9151       return;
   9152     }
   9153 
   9154     // Success! Record the copy.
   9155     Statements.push_back(Copy.takeAs<Stmt>());
   9156   }
   9157 
   9158   if (!Invalid) {
   9159     // Add a "return *this;"
   9160     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   9161 
   9162     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   9163     if (Return.isInvalid())
   9164       Invalid = true;
   9165     else {
   9166       Statements.push_back(Return.takeAs<Stmt>());
   9167 
   9168       if (Trap.hasErrorOccurred()) {
   9169         Diag(CurrentLocation, diag::note_member_synthesized_at)
   9170           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   9171         Invalid = true;
   9172       }
   9173     }
   9174   }
   9175 
   9176   if (Invalid) {
   9177     CopyAssignOperator->setInvalidDecl();
   9178     return;
   9179   }
   9180 
   9181   StmtResult Body;
   9182   {
   9183     CompoundScopeRAII CompoundScope(*this);
   9184     Body = ActOnCompoundStmt(Loc, Loc, Statements,
   9185                              /*isStmtExpr=*/false);
   9186     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   9187   }
   9188   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
   9189 
   9190   if (ASTMutationListener *L = getASTMutationListener()) {
   9191     L->CompletedImplicitDefinition(CopyAssignOperator);
   9192   }
   9193 }
   9194 
   9195 Sema::ImplicitExceptionSpecification
   9196 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
   9197   CXXRecordDecl *ClassDecl = MD->getParent();
   9198 
   9199   ImplicitExceptionSpecification ExceptSpec(*this);
   9200   if (ClassDecl->isInvalidDecl())
   9201     return ExceptSpec;
   9202 
   9203   // C++0x [except.spec]p14:
   9204   //   An implicitly declared special member function (Clause 12) shall have an
   9205   //   exception-specification. [...]
   9206 
   9207   // It is unspecified whether or not an implicit move assignment operator
   9208   // attempts to deduplicate calls to assignment operators of virtual bases are
   9209   // made. As such, this exception specification is effectively unspecified.
   9210   // Based on a similar decision made for constness in C++0x, we're erring on
   9211   // the side of assuming such calls to be made regardless of whether they
   9212   // actually happen.
   9213   // Note that a move constructor is not implicitly declared when there are
   9214   // virtual bases, but it can still be user-declared and explicitly defaulted.
   9215   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   9216                                        BaseEnd = ClassDecl->bases_end();
   9217        Base != BaseEnd; ++Base) {
   9218     if (Base->isVirtual())
   9219       continue;
   9220 
   9221     CXXRecordDecl *BaseClassDecl
   9222       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   9223     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   9224                                                            0, false, 0))
   9225       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
   9226   }
   9227 
   9228   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   9229                                        BaseEnd = ClassDecl->vbases_end();
   9230        Base != BaseEnd; ++Base) {
   9231     CXXRecordDecl *BaseClassDecl
   9232       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   9233     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   9234                                                            0, false, 0))
   9235       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
   9236   }
   9237 
   9238   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   9239                                   FieldEnd = ClassDecl->field_end();
   9240        Field != FieldEnd;
   9241        ++Field) {
   9242     QualType FieldType = Context.getBaseElementType(Field->getType());
   9243     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   9244       if (CXXMethodDecl *MoveAssign =
   9245               LookupMovingAssignment(FieldClassDecl,
   9246                                      FieldType.getCVRQualifiers(),
   9247                                      false, 0))
   9248         ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
   9249     }
   9250   }
   9251 
   9252   return ExceptSpec;
   9253 }
   9254 
   9255 /// Determine whether the class type has any direct or indirect virtual base
   9256 /// classes which have a non-trivial move assignment operator.
   9257 static bool
   9258 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
   9259   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   9260                                           BaseEnd = ClassDecl->vbases_end();
   9261        Base != BaseEnd; ++Base) {
   9262     CXXRecordDecl *BaseClass =
   9263         cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   9264 
   9265     // Try to declare the move assignment. If it would be deleted, then the
   9266     // class does not have a non-trivial move assignment.
   9267     if (BaseClass->needsImplicitMoveAssignment())
   9268       S.DeclareImplicitMoveAssignment(BaseClass);
   9269 
   9270     if (BaseClass->hasNonTrivialMoveAssignment())
   9271       return true;
   9272   }
   9273 
   9274   return false;
   9275 }
   9276 
   9277 /// Determine whether the given type either has a move constructor or is
   9278 /// trivially copyable.
   9279 static bool
   9280 hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
   9281   Type = S.Context.getBaseElementType(Type);
   9282 
   9283   // FIXME: Technically, non-trivially-copyable non-class types, such as
   9284   // reference types, are supposed to return false here, but that appears
   9285   // to be a standard defect.
   9286   CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
   9287   if (!ClassDecl || !ClassDecl->getDefinition() || ClassDecl->isInvalidDecl())
   9288     return true;
   9289 
   9290   if (Type.isTriviallyCopyableType(S.Context))
   9291     return true;
   9292 
   9293   if (IsConstructor) {
   9294     // FIXME: Need this because otherwise hasMoveConstructor isn't guaranteed to
   9295     // give the right answer.
   9296     if (ClassDecl->needsImplicitMoveConstructor())
   9297       S.DeclareImplicitMoveConstructor(ClassDecl);
   9298     return ClassDecl->hasMoveConstructor();
   9299   }
   9300 
   9301   // FIXME: Need this because otherwise hasMoveAssignment isn't guaranteed to
   9302   // give the right answer.
   9303   if (ClassDecl->needsImplicitMoveAssignment())
   9304     S.DeclareImplicitMoveAssignment(ClassDecl);
   9305   return ClassDecl->hasMoveAssignment();
   9306 }
   9307 
   9308 /// Determine whether all non-static data members and direct or virtual bases
   9309 /// of class \p ClassDecl have either a move operation, or are trivially
   9310 /// copyable.
   9311 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
   9312                                             bool IsConstructor) {
   9313   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   9314                                           BaseEnd = ClassDecl->bases_end();
   9315        Base != BaseEnd; ++Base) {
   9316     if (Base->isVirtual())
   9317       continue;
   9318 
   9319     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
   9320       return false;
   9321   }
   9322 
   9323   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   9324                                           BaseEnd = ClassDecl->vbases_end();
   9325        Base != BaseEnd; ++Base) {
   9326     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
   9327       return false;
   9328   }
   9329 
   9330   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   9331                                      FieldEnd = ClassDecl->field_end();
   9332        Field != FieldEnd; ++Field) {
   9333     if (!hasMoveOrIsTriviallyCopyable(S, Field->getType(), IsConstructor))
   9334       return false;
   9335   }
   9336 
   9337   return true;
   9338 }
   9339 
   9340 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
   9341   // C++11 [class.copy]p20:
   9342   //   If the definition of a class X does not explicitly declare a move
   9343   //   assignment operator, one will be implicitly declared as defaulted
   9344   //   if and only if:
   9345   //
   9346   //   - [first 4 bullets]
   9347   assert(ClassDecl->needsImplicitMoveAssignment());
   9348 
   9349   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
   9350   if (DSM.isAlreadyBeingDeclared())
   9351     return 0;
   9352 
   9353   // [Checked after we build the declaration]
   9354   //   - the move assignment operator would not be implicitly defined as
   9355   //     deleted,
   9356 
   9357   // [DR1402]:
   9358   //   - X has no direct or indirect virtual base class with a non-trivial
   9359   //     move assignment operator, and
   9360   //   - each of X's non-static data members and direct or virtual base classes
   9361   //     has a type that either has a move assignment operator or is trivially
   9362   //     copyable.
   9363   if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
   9364       !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
   9365     ClassDecl->setFailedImplicitMoveAssignment();
   9366     return 0;
   9367   }
   9368 
   9369   // Note: The following rules are largely analoguous to the move
   9370   // constructor rules.
   9371 
   9372   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   9373   QualType RetType = Context.getLValueReferenceType(ArgType);
   9374   ArgType = Context.getRValueReferenceType(ArgType);
   9375 
   9376   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
   9377                                                      CXXMoveAssignment,
   9378                                                      false);
   9379 
   9380   //   An implicitly-declared move assignment operator is an inline public
   9381   //   member of its class.
   9382   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   9383   SourceLocation ClassLoc = ClassDecl->getLocation();
   9384   DeclarationNameInfo NameInfo(Name, ClassLoc);
   9385   CXXMethodDecl *MoveAssignment =
   9386       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
   9387                             /*TInfo=*/0, /*StorageClass=*/SC_None,
   9388                             /*isInline=*/true, Constexpr, SourceLocation());
   9389   MoveAssignment->setAccess(AS_public);
   9390   MoveAssignment->setDefaulted();
   9391   MoveAssignment->setImplicit();
   9392 
   9393   // Build an exception specification pointing back at this member.
   9394   FunctionProtoType::ExtProtoInfo EPI;
   9395   EPI.ExceptionSpecType = EST_Unevaluated;
   9396   EPI.ExceptionSpecDecl = MoveAssignment;
   9397   MoveAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
   9398 
   9399   // Add the parameter to the operator.
   9400   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
   9401                                                ClassLoc, ClassLoc, /*Id=*/0,
   9402                                                ArgType, /*TInfo=*/0,
   9403                                                SC_None, 0);
   9404   MoveAssignment->setParams(FromParam);
   9405 
   9406   AddOverriddenMethods(ClassDecl, MoveAssignment);
   9407 
   9408   MoveAssignment->setTrivial(
   9409     ClassDecl->needsOverloadResolutionForMoveAssignment()
   9410       ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
   9411       : ClassDecl->hasTrivialMoveAssignment());
   9412 
   9413   // C++0x [class.copy]p9:
   9414   //   If the definition of a class X does not explicitly declare a move
   9415   //   assignment operator, one will be implicitly declared as defaulted if and
   9416   //   only if:
   9417   //   [...]
   9418   //   - the move assignment operator would not be implicitly defined as
   9419   //     deleted.
   9420   if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
   9421     // Cache this result so that we don't try to generate this over and over
   9422     // on every lookup, leaking memory and wasting time.
   9423     ClassDecl->setFailedImplicitMoveAssignment();
   9424     return 0;
   9425   }
   9426 
   9427   // Note that we have added this copy-assignment operator.
   9428   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
   9429 
   9430   if (Scope *S = getScopeForContext(ClassDecl))
   9431     PushOnScopeChains(MoveAssignment, S, false);
   9432   ClassDecl->addDecl(MoveAssignment);
   9433 
   9434   return MoveAssignment;
   9435 }
   9436 
   9437 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
   9438                                         CXXMethodDecl *MoveAssignOperator) {
   9439   assert((MoveAssignOperator->isDefaulted() &&
   9440           MoveAssignOperator->isOverloadedOperator() &&
   9441           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
   9442           !MoveAssignOperator->doesThisDeclarationHaveABody() &&
   9443           !MoveAssignOperator->isDeleted()) &&
   9444          "DefineImplicitMoveAssignment called for wrong function");
   9445 
   9446   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
   9447 
   9448   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
   9449     MoveAssignOperator->setInvalidDecl();
   9450     return;
   9451   }
   9452 
   9453   MoveAssignOperator->setUsed();
   9454 
   9455   SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
   9456   DiagnosticErrorTrap Trap(Diags);
   9457 
   9458   // C++0x [class.copy]p28:
   9459   //   The implicitly-defined or move assignment operator for a non-union class
   9460   //   X performs memberwise move assignment of its subobjects. The direct base
   9461   //   classes of X are assigned first, in the order of their declaration in the
   9462   //   base-specifier-list, and then the immediate non-static data members of X
   9463   //   are assigned, in the order in which they were declared in the class
   9464   //   definition.
   9465 
   9466   // The statements that form the synthesized function body.
   9467   SmallVector<Stmt*, 8> Statements;
   9468 
   9469   // The parameter for the "other" object, which we are move from.
   9470   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
   9471   QualType OtherRefType = Other->getType()->
   9472       getAs<RValueReferenceType>()->getPointeeType();
   9473   assert(!OtherRefType.getQualifiers() &&
   9474          "Bad argument type of defaulted move assignment");
   9475 
   9476   // Our location for everything implicitly-generated.
   9477   SourceLocation Loc = MoveAssignOperator->getLocation();
   9478 
   9479   // Construct a reference to the "other" object. We'll be using this
   9480   // throughout the generated ASTs.
   9481   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   9482   assert(OtherRef && "Reference to parameter cannot fail!");
   9483   // Cast to rvalue.
   9484   OtherRef = CastForMoving(*this, OtherRef);
   9485 
   9486   // Construct the "this" pointer. We'll be using this throughout the generated
   9487   // ASTs.
   9488   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   9489   assert(This && "Reference to this cannot fail!");
   9490 
   9491   // Assign base classes.
   9492   bool Invalid = false;
   9493   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   9494        E = ClassDecl->bases_end(); Base != E; ++Base) {
   9495     // Form the assignment:
   9496     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
   9497     QualType BaseType = Base->getType().getUnqualifiedType();
   9498     if (!BaseType->isRecordType()) {
   9499       Invalid = true;
   9500       continue;
   9501     }
   9502 
   9503     CXXCastPath BasePath;
   9504     BasePath.push_back(Base);
   9505 
   9506     // Construct the "from" expression, which is an implicit cast to the
   9507     // appropriately-qualified base type.
   9508     Expr *From = OtherRef;
   9509     From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
   9510                              VK_XValue, &BasePath).take();
   9511 
   9512     // Dereference "this".
   9513     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   9514 
   9515     // Implicitly cast "this" to the appropriately-qualified base type.
   9516     To = ImpCastExprToType(To.take(),
   9517                            Context.getCVRQualifiedType(BaseType,
   9518                                      MoveAssignOperator->getTypeQualifiers()),
   9519                            CK_UncheckedDerivedToBase,
   9520                            VK_LValue, &BasePath);
   9521 
   9522     // Build the move.
   9523     StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
   9524                                             To.get(), From,
   9525                                             /*CopyingBaseSubobject=*/true,
   9526                                             /*Copying=*/false);
   9527     if (Move.isInvalid()) {
   9528       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9529         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   9530       MoveAssignOperator->setInvalidDecl();
   9531       return;
   9532     }
   9533 
   9534     // Success! Record the move.
   9535     Statements.push_back(Move.takeAs<Expr>());
   9536   }
   9537 
   9538   // Assign non-static members.
   9539   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   9540                                   FieldEnd = ClassDecl->field_end();
   9541        Field != FieldEnd; ++Field) {
   9542     if (Field->isUnnamedBitfield())
   9543       continue;
   9544 
   9545     if (Field->isInvalidDecl()) {
   9546       Invalid = true;
   9547       continue;
   9548     }
   9549 
   9550     // Check for members of reference type; we can't move those.
   9551     if (Field->getType()->isReferenceType()) {
   9552       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   9553         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   9554       Diag(Field->getLocation(), diag::note_declared_at);
   9555       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9556         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   9557       Invalid = true;
   9558       continue;
   9559     }
   9560 
   9561     // Check for members of const-qualified, non-class type.
   9562     QualType BaseType = Context.getBaseElementType(Field->getType());
   9563     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   9564       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   9565         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   9566       Diag(Field->getLocation(), diag::note_declared_at);
   9567       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9568         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   9569       Invalid = true;
   9570       continue;
   9571     }
   9572 
   9573     // Suppress assigning zero-width bitfields.
   9574     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   9575       continue;
   9576 
   9577     QualType FieldType = Field->getType().getNonReferenceType();
   9578     if (FieldType->isIncompleteArrayType()) {
   9579       assert(ClassDecl->hasFlexibleArrayMember() &&
   9580              "Incomplete array type is not valid");
   9581       continue;
   9582     }
   9583 
   9584     // Build references to the field in the object we're copying from and to.
   9585     CXXScopeSpec SS; // Intentionally empty
   9586     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   9587                               LookupMemberName);
   9588     MemberLookup.addDecl(*Field);
   9589     MemberLookup.resolveKind();
   9590     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   9591                                                Loc, /*IsArrow=*/false,
   9592                                                SS, SourceLocation(), 0,
   9593                                                MemberLookup, 0);
   9594     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   9595                                              Loc, /*IsArrow=*/true,
   9596                                              SS, SourceLocation(), 0,
   9597                                              MemberLookup, 0);
   9598     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   9599     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   9600 
   9601     assert(!From.get()->isLValue() && // could be xvalue or prvalue
   9602         "Member reference with rvalue base must be rvalue except for reference "
   9603         "members, which aren't allowed for move assignment.");
   9604 
   9605     // Build the move of this field.
   9606     StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
   9607                                             To.get(), From.get(),
   9608                                             /*CopyingBaseSubobject=*/false,
   9609                                             /*Copying=*/false);
   9610     if (Move.isInvalid()) {
   9611       Diag(CurrentLocation, diag::note_member_synthesized_at)
   9612         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   9613       MoveAssignOperator->setInvalidDecl();
   9614       return;
   9615     }
   9616 
   9617     // Success! Record the copy.
   9618     Statements.push_back(Move.takeAs<Stmt>());
   9619   }
   9620 
   9621   if (!Invalid) {
   9622     // Add a "return *this;"
   9623     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   9624 
   9625     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   9626     if (Return.isInvalid())
   9627       Invalid = true;
   9628     else {
   9629       Statements.push_back(Return.takeAs<Stmt>());
   9630 
   9631       if (Trap.hasErrorOccurred()) {
   9632         Diag(CurrentLocation, diag::note_member_synthesized_at)
   9633           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   9634         Invalid = true;
   9635       }
   9636     }
   9637   }
   9638 
   9639   if (Invalid) {
   9640     MoveAssignOperator->setInvalidDecl();
   9641     return;
   9642   }
   9643 
   9644   StmtResult Body;
   9645   {
   9646     CompoundScopeRAII CompoundScope(*this);
   9647     Body = ActOnCompoundStmt(Loc, Loc, Statements,
   9648                              /*isStmtExpr=*/false);
   9649     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   9650   }
   9651   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
   9652 
   9653   if (ASTMutationListener *L = getASTMutationListener()) {
   9654     L->CompletedImplicitDefinition(MoveAssignOperator);
   9655   }
   9656 }
   9657 
   9658 Sema::ImplicitExceptionSpecification
   9659 Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
   9660   CXXRecordDecl *ClassDecl = MD->getParent();
   9661 
   9662   ImplicitExceptionSpecification ExceptSpec(*this);
   9663   if (ClassDecl->isInvalidDecl())
   9664     return ExceptSpec;
   9665 
   9666   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
   9667   assert(T->getNumArgs() >= 1 && "not a copy ctor");
   9668   unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
   9669 
   9670   // C++ [except.spec]p14:
   9671   //   An implicitly declared special member function (Clause 12) shall have an
   9672   //   exception-specification. [...]
   9673   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   9674                                        BaseEnd = ClassDecl->bases_end();
   9675        Base != BaseEnd;
   9676        ++Base) {
   9677     // Virtual bases are handled below.
   9678     if (Base->isVirtual())
   9679       continue;
   9680 
   9681     CXXRecordDecl *BaseClassDecl
   9682       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   9683     if (CXXConstructorDecl *CopyConstructor =
   9684           LookupCopyingConstructor(BaseClassDecl, Quals))
   9685       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
   9686   }
   9687   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   9688                                        BaseEnd = ClassDecl->vbases_end();
   9689        Base != BaseEnd;
   9690        ++Base) {
   9691     CXXRecordDecl *BaseClassDecl
   9692       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   9693     if (CXXConstructorDecl *CopyConstructor =
   9694           LookupCopyingConstructor(BaseClassDecl, Quals))
   9695       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
   9696   }
   9697   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   9698                                   FieldEnd = ClassDecl->field_end();
   9699        Field != FieldEnd;
   9700        ++Field) {
   9701     QualType FieldType = Context.getBaseElementType(Field->getType());
   9702     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   9703       if (CXXConstructorDecl *CopyConstructor =
   9704               LookupCopyingConstructor(FieldClassDecl,
   9705                                        Quals | FieldType.getCVRQualifiers()))
   9706       ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
   9707     }
   9708   }
   9709 
   9710   return ExceptSpec;
   9711 }
   9712 
   9713 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
   9714                                                     CXXRecordDecl *ClassDecl) {
   9715   // C++ [class.copy]p4:
   9716   //   If the class definition does not explicitly declare a copy
   9717   //   constructor, one is declared implicitly.
   9718   assert(ClassDecl->needsImplicitCopyConstructor());
   9719 
   9720   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
   9721   if (DSM.isAlreadyBeingDeclared())
   9722     return 0;
   9723 
   9724   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   9725   QualType ArgType = ClassType;
   9726   bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
   9727   if (Const)
   9728     ArgType = ArgType.withConst();
   9729   ArgType = Context.getLValueReferenceType(ArgType);
   9730 
   9731   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
   9732                                                      CXXCopyConstructor,
   9733                                                      Const);
   9734 
   9735   DeclarationName Name
   9736     = Context.DeclarationNames.getCXXConstructorName(
   9737                                            Context.getCanonicalType(ClassType));
   9738   SourceLocation ClassLoc = ClassDecl->getLocation();
   9739   DeclarationNameInfo NameInfo(Name, ClassLoc);
   9740 
   9741   //   An implicitly-declared copy constructor is an inline public
   9742   //   member of its class.
   9743   CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
   9744       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
   9745       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   9746       Constexpr);
   9747   CopyConstructor->setAccess(AS_public);
   9748   CopyConstructor->setDefaulted();
   9749 
   9750   // Build an exception specification pointing back at this member.
   9751   FunctionProtoType::ExtProtoInfo EPI;
   9752   EPI.ExceptionSpecType = EST_Unevaluated;
   9753   EPI.ExceptionSpecDecl = CopyConstructor;
   9754   CopyConstructor->setType(
   9755       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
   9756 
   9757   // Add the parameter to the constructor.
   9758   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
   9759                                                ClassLoc, ClassLoc,
   9760                                                /*IdentifierInfo=*/0,
   9761                                                ArgType, /*TInfo=*/0,
   9762                                                SC_None, 0);
   9763   CopyConstructor->setParams(FromParam);
   9764 
   9765   CopyConstructor->setTrivial(
   9766     ClassDecl->needsOverloadResolutionForCopyConstructor()
   9767       ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
   9768       : ClassDecl->hasTrivialCopyConstructor());
   9769 
   9770   // C++11 [class.copy]p8:
   9771   //   ... If the class definition does not explicitly declare a copy
   9772   //   constructor, there is no user-declared move constructor, and there is no
   9773   //   user-declared move assignment operator, a copy constructor is implicitly
   9774   //   declared as defaulted.
   9775   if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
   9776     SetDeclDeleted(CopyConstructor, ClassLoc);
   9777 
   9778   // Note that we have declared this constructor.
   9779   ++ASTContext::NumImplicitCopyConstructorsDeclared;
   9780 
   9781   if (Scope *S = getScopeForContext(ClassDecl))
   9782     PushOnScopeChains(CopyConstructor, S, false);
   9783   ClassDecl->addDecl(CopyConstructor);
   9784 
   9785   return CopyConstructor;
   9786 }
   9787 
   9788 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
   9789                                    CXXConstructorDecl *CopyConstructor) {
   9790   assert((CopyConstructor->isDefaulted() &&
   9791           CopyConstructor->isCopyConstructor() &&
   9792           !CopyConstructor->doesThisDeclarationHaveABody() &&
   9793           !CopyConstructor->isDeleted()) &&
   9794          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
   9795 
   9796   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
   9797   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
   9798 
   9799   // C++11 [class.copy]p7:
   9800   //   The [definition of an implicitly declared copy constructro] is
   9801   //   deprecated if the class has a user-declared copy assignment operator
   9802   //   or a user-declared destructor.
   9803   if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
   9804     diagnoseDeprecatedCopyOperation(*this, CopyConstructor, CurrentLocation);
   9805 
   9806   SynthesizedFunctionScope Scope(*this, CopyConstructor);
   9807   DiagnosticErrorTrap Trap(Diags);
   9808 
   9809   if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) ||
   9810       Trap.hasErrorOccurred()) {
   9811     Diag(CurrentLocation, diag::note_member_synthesized_at)
   9812       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
   9813     CopyConstructor->setInvalidDecl();
   9814   }  else {
   9815     Sema::CompoundScopeRAII CompoundScope(*this);
   9816     CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
   9817                                                CopyConstructor->getLocation(),
   9818                                                MultiStmtArg(),
   9819                                                /*isStmtExpr=*/false)
   9820                                                               .takeAs<Stmt>());
   9821   }
   9822 
   9823   CopyConstructor->setUsed();
   9824   if (ASTMutationListener *L = getASTMutationListener()) {
   9825     L->CompletedImplicitDefinition(CopyConstructor);
   9826   }
   9827 }
   9828 
   9829 Sema::ImplicitExceptionSpecification
   9830 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
   9831   CXXRecordDecl *ClassDecl = MD->getParent();
   9832 
   9833   // C++ [except.spec]p14:
   9834   //   An implicitly declared special member function (Clause 12) shall have an
   9835   //   exception-specification. [...]
   9836   ImplicitExceptionSpecification ExceptSpec(*this);
   9837   if (ClassDecl->isInvalidDecl())
   9838     return ExceptSpec;
   9839 
   9840   // Direct base-class constructors.
   9841   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   9842                                        BEnd = ClassDecl->bases_end();
   9843        B != BEnd; ++B) {
   9844     if (B->isVirtual()) // Handled below.
   9845       continue;
   9846 
   9847     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   9848       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   9849       CXXConstructorDecl *Constructor =
   9850           LookupMovingConstructor(BaseClassDecl, 0);
   9851       // If this is a deleted function, add it anyway. This might be conformant
   9852       // with the standard. This might not. I'm not sure. It might not matter.
   9853       if (Constructor)
   9854         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   9855     }
   9856   }
   9857 
   9858   // Virtual base-class constructors.
   9859   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   9860                                        BEnd = ClassDecl->vbases_end();
   9861        B != BEnd; ++B) {
   9862     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   9863       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   9864       CXXConstructorDecl *Constructor =
   9865           LookupMovingConstructor(BaseClassDecl, 0);
   9866       // If this is a deleted function, add it anyway. This might be conformant
   9867       // with the standard. This might not. I'm not sure. It might not matter.
   9868       if (Constructor)
   9869         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   9870     }
   9871   }
   9872 
   9873   // Field constructors.
   9874   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   9875                                FEnd = ClassDecl->field_end();
   9876        F != FEnd; ++F) {
   9877     QualType FieldType = Context.getBaseElementType(F->getType());
   9878     if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
   9879       CXXConstructorDecl *Constructor =
   9880           LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
   9881       // If this is a deleted function, add it anyway. This might be conformant
   9882       // with the standard. This might not. I'm not sure. It might not matter.
   9883       // In particular, the problem is that this function never gets called. It
   9884       // might just be ill-formed because this function attempts to refer to
   9885       // a deleted function here.
   9886       if (Constructor)
   9887         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
   9888     }
   9889   }
   9890 
   9891   return ExceptSpec;
   9892 }
   9893 
   9894 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
   9895                                                     CXXRecordDecl *ClassDecl) {
   9896   // C++11 [class.copy]p9:
   9897   //   If the definition of a class X does not explicitly declare a move
   9898   //   constructor, one will be implicitly declared as defaulted if and only if:
   9899   //
   9900   //   - [first 4 bullets]
   9901   assert(ClassDecl->needsImplicitMoveConstructor());
   9902 
   9903   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
   9904   if (DSM.isAlreadyBeingDeclared())
   9905     return 0;
   9906 
   9907   // [Checked after we build the declaration]
   9908   //   - the move assignment operator would not be implicitly defined as
   9909   //     deleted,
   9910 
   9911   // [DR1402]:
   9912   //   - each of X's non-static data members and direct or virtual base classes
   9913   //     has a type that either has a move constructor or is trivially copyable.
   9914   if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
   9915     ClassDecl->setFailedImplicitMoveConstructor();
   9916     return 0;
   9917   }
   9918 
   9919   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   9920   QualType ArgType = Context.getRValueReferenceType(ClassType);
   9921 
   9922   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
   9923                                                      CXXMoveConstructor,
   9924                                                      false);
   9925 
   9926   DeclarationName Name
   9927     = Context.DeclarationNames.getCXXConstructorName(
   9928                                            Context.getCanonicalType(ClassType));
   9929   SourceLocation ClassLoc = ClassDecl->getLocation();
   9930   DeclarationNameInfo NameInfo(Name, ClassLoc);
   9931 
   9932   // C++11 [class.copy]p11:
   9933   //   An implicitly-declared copy/move constructor is an inline public
   9934   //   member of its class.
   9935   CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
   9936       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
   9937       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   9938       Constexpr);
   9939   MoveConstructor->setAccess(AS_public);
   9940   MoveConstructor->setDefaulted();
   9941 
   9942   // Build an exception specification pointing back at this member.
   9943   FunctionProtoType::ExtProtoInfo EPI;
   9944   EPI.ExceptionSpecType = EST_Unevaluated;
   9945   EPI.ExceptionSpecDecl = MoveConstructor;
   9946   MoveConstructor->setType(
   9947       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
   9948 
   9949   // Add the parameter to the constructor.
   9950   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
   9951                                                ClassLoc, ClassLoc,
   9952                                                /*IdentifierInfo=*/0,
   9953                                                ArgType, /*TInfo=*/0,
   9954                                                SC_None, 0);
   9955   MoveConstructor->setParams(FromParam);
   9956 
   9957   MoveConstructor->setTrivial(
   9958     ClassDecl->needsOverloadResolutionForMoveConstructor()
   9959       ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
   9960       : ClassDecl->hasTrivialMoveConstructor());
   9961 
   9962   // C++0x [class.copy]p9:
   9963   //   If the definition of a class X does not explicitly declare a move
   9964   //   constructor, one will be implicitly declared as defaulted if and only if:
   9965   //   [...]
   9966   //   - the move constructor would not be implicitly defined as deleted.
   9967   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
   9968     // Cache this result so that we don't try to generate this over and over
   9969     // on every lookup, leaking memory and wasting time.
   9970     ClassDecl->setFailedImplicitMoveConstructor();
   9971     return 0;
   9972   }
   9973 
   9974   // Note that we have declared this constructor.
   9975   ++ASTContext::NumImplicitMoveConstructorsDeclared;
   9976 
   9977   if (Scope *S = getScopeForContext(ClassDecl))
   9978     PushOnScopeChains(MoveConstructor, S, false);
   9979   ClassDecl->addDecl(MoveConstructor);
   9980 
   9981   return MoveConstructor;
   9982 }
   9983 
   9984 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
   9985                                    CXXConstructorDecl *MoveConstructor) {
   9986   assert((MoveConstructor->isDefaulted() &&
   9987           MoveConstructor->isMoveConstructor() &&
   9988           !MoveConstructor->doesThisDeclarationHaveABody() &&
   9989           !MoveConstructor->isDeleted()) &&
   9990          "DefineImplicitMoveConstructor - call it for implicit move ctor");
   9991 
   9992   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
   9993   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
   9994 
   9995   SynthesizedFunctionScope Scope(*this, MoveConstructor);
   9996   DiagnosticErrorTrap Trap(Diags);
   9997 
   9998   if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) ||
   9999       Trap.hasErrorOccurred()) {
   10000     Diag(CurrentLocation, diag::note_member_synthesized_at)
   10001       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
   10002     MoveConstructor->setInvalidDecl();
   10003   }  else {
   10004     Sema::CompoundScopeRAII CompoundScope(*this);
   10005     MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
   10006                                                MoveConstructor->getLocation(),
   10007                                                MultiStmtArg(),
   10008                                                /*isStmtExpr=*/false)
   10009                                                               .takeAs<Stmt>());
   10010   }
   10011 
   10012   MoveConstructor->setUsed();
   10013 
   10014   if (ASTMutationListener *L = getASTMutationListener()) {
   10015     L->CompletedImplicitDefinition(MoveConstructor);
   10016   }
   10017 }
   10018 
   10019 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
   10020   return FD->isDeleted() && FD->isDefaulted() && isa<CXXMethodDecl>(FD);
   10021 }
   10022 
   10023 /// \brief Mark the call operator of the given lambda closure type as "used".
   10024 static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
   10025   CXXMethodDecl *CallOperator
   10026     = cast<CXXMethodDecl>(
   10027         Lambda->lookup(
   10028           S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
   10029   CallOperator->setReferenced();
   10030   CallOperator->setUsed();
   10031 }
   10032 
   10033 void Sema::DefineImplicitLambdaToFunctionPointerConversion(
   10034        SourceLocation CurrentLocation,
   10035        CXXConversionDecl *Conv)
   10036 {
   10037   CXXRecordDecl *Lambda = Conv->getParent();
   10038 
   10039   // Make sure that the lambda call operator is marked used.
   10040   markLambdaCallOperatorUsed(*this, Lambda);
   10041 
   10042   Conv->setUsed();
   10043 
   10044   SynthesizedFunctionScope Scope(*this, Conv);
   10045   DiagnosticErrorTrap Trap(Diags);
   10046 
   10047   // Return the address of the __invoke function.
   10048   DeclarationName InvokeName = &Context.Idents.get("__invoke");
   10049   CXXMethodDecl *Invoke
   10050     = cast<CXXMethodDecl>(Lambda->lookup(InvokeName).front());
   10051   Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
   10052                                        VK_LValue, Conv->getLocation()).take();
   10053   assert(FunctionRef && "Can't refer to __invoke function?");
   10054   Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
   10055   Conv->setBody(new (Context) CompoundStmt(Context, Return,
   10056                                            Conv->getLocation(),
   10057                                            Conv->getLocation()));
   10058 
   10059   // Fill in the __invoke function with a dummy implementation. IR generation
   10060   // will fill in the actual details.
   10061   Invoke->setUsed();
   10062   Invoke->setReferenced();
   10063   Invoke->setBody(new (Context) CompoundStmt(Conv->getLocation()));
   10064 
   10065   if (ASTMutationListener *L = getASTMutationListener()) {
   10066     L->CompletedImplicitDefinition(Conv);
   10067     L->CompletedImplicitDefinition(Invoke);
   10068   }
   10069 }
   10070 
   10071 void Sema::DefineImplicitLambdaToBlockPointerConversion(
   10072        SourceLocation CurrentLocation,
   10073        CXXConversionDecl *Conv)
   10074 {
   10075   Conv->setUsed();
   10076 
   10077   SynthesizedFunctionScope Scope(*this, Conv);
   10078   DiagnosticErrorTrap Trap(Diags);
   10079 
   10080   // Copy-initialize the lambda object as needed to capture it.
   10081   Expr *This = ActOnCXXThis(CurrentLocation).take();
   10082   Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
   10083 
   10084   ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
   10085                                                         Conv->getLocation(),
   10086                                                         Conv, DerefThis);
   10087 
   10088   // If we're not under ARC, make sure we still get the _Block_copy/autorelease
   10089   // behavior.  Note that only the general conversion function does this
   10090   // (since it's unusable otherwise); in the case where we inline the
   10091   // block literal, it has block literal lifetime semantics.
   10092   if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
   10093     BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
   10094                                           CK_CopyAndAutoreleaseBlockObject,
   10095                                           BuildBlock.get(), 0, VK_RValue);
   10096 
   10097   if (BuildBlock.isInvalid()) {
   10098     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
   10099     Conv->setInvalidDecl();
   10100     return;
   10101   }
   10102 
   10103   // Create the return statement that returns the block from the conversion
   10104   // function.
   10105   StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
   10106   if (Return.isInvalid()) {
   10107     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
   10108     Conv->setInvalidDecl();
   10109     return;
   10110   }
   10111 
   10112   // Set the body of the conversion function.
   10113   Stmt *ReturnS = Return.take();
   10114   Conv->setBody(new (Context) CompoundStmt(Context, ReturnS,
   10115                                            Conv->getLocation(),
   10116                                            Conv->getLocation()));
   10117 
   10118   // We're done; notify the mutation listener, if any.
   10119   if (ASTMutationListener *L = getASTMutationListener()) {
   10120     L->CompletedImplicitDefinition(Conv);
   10121   }
   10122 }
   10123 
   10124 /// \brief Determine whether the given list arguments contains exactly one
   10125 /// "real" (non-default) argument.
   10126 static bool hasOneRealArgument(MultiExprArg Args) {
   10127   switch (Args.size()) {
   10128   case 0:
   10129     return false;
   10130 
   10131   default:
   10132     if (!Args[1]->isDefaultArgument())
   10133       return false;
   10134 
   10135     // fall through
   10136   case 1:
   10137     return !Args[0]->isDefaultArgument();
   10138   }
   10139 
   10140   return false;
   10141 }
   10142 
   10143 ExprResult
   10144 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   10145                             CXXConstructorDecl *Constructor,
   10146                             MultiExprArg ExprArgs,
   10147                             bool HadMultipleCandidates,
   10148                             bool IsListInitialization,
   10149                             bool RequiresZeroInit,
   10150                             unsigned ConstructKind,
   10151                             SourceRange ParenRange) {
   10152   bool Elidable = false;
   10153 
   10154   // C++0x [class.copy]p34:
   10155   //   When certain criteria are met, an implementation is allowed to
   10156   //   omit the copy/move construction of a class object, even if the
   10157   //   copy/move constructor and/or destructor for the object have
   10158   //   side effects. [...]
   10159   //     - when a temporary class object that has not been bound to a
   10160   //       reference (12.2) would be copied/moved to a class object
   10161   //       with the same cv-unqualified type, the copy/move operation
   10162   //       can be omitted by constructing the temporary object
   10163   //       directly into the target of the omitted copy/move
   10164   if (ConstructKind == CXXConstructExpr::CK_Complete &&
   10165       Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
   10166     Expr *SubExpr = ExprArgs[0];
   10167     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
   10168   }
   10169 
   10170   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
   10171                                Elidable, ExprArgs, HadMultipleCandidates,
   10172                                IsListInitialization, RequiresZeroInit,
   10173                                ConstructKind, ParenRange);
   10174 }
   10175 
   10176 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   10177 /// including handling of its default argument expressions.
   10178 ExprResult
   10179 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   10180                             CXXConstructorDecl *Constructor, bool Elidable,
   10181                             MultiExprArg ExprArgs,
   10182                             bool HadMultipleCandidates,
   10183                             bool IsListInitialization,
   10184                             bool RequiresZeroInit,
   10185                             unsigned ConstructKind,
   10186                             SourceRange ParenRange) {
   10187   MarkFunctionReferenced(ConstructLoc, Constructor);
   10188   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
   10189                                         Constructor, Elidable, ExprArgs,
   10190                                         HadMultipleCandidates,
   10191                                         IsListInitialization, RequiresZeroInit,
   10192               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
   10193                                         ParenRange));
   10194 }
   10195 
   10196 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
   10197   if (VD->isInvalidDecl()) return;
   10198 
   10199   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
   10200   if (ClassDecl->isInvalidDecl()) return;
   10201   if (ClassDecl->hasIrrelevantDestructor()) return;
   10202   if (ClassDecl->isDependentContext()) return;
   10203 
   10204   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
   10205   MarkFunctionReferenced(VD->getLocation(), Destructor);
   10206   CheckDestructorAccess(VD->getLocation(), Destructor,
   10207                         PDiag(diag::err_access_dtor_var)
   10208                         << VD->getDeclName()
   10209                         << VD->getType());
   10210   DiagnoseUseOfDecl(Destructor, VD->getLocation());
   10211 
   10212   if (!VD->hasGlobalStorage()) return;
   10213 
   10214   // Emit warning for non-trivial dtor in global scope (a real global,
   10215   // class-static, function-static).
   10216   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
   10217 
   10218   // TODO: this should be re-enabled for static locals by !CXAAtExit
   10219   if (!VD->isStaticLocal())
   10220     Diag(VD->getLocation(), diag::warn_global_destructor);
   10221 }
   10222 
   10223 /// \brief Given a constructor and the set of arguments provided for the
   10224 /// constructor, convert the arguments and add any required default arguments
   10225 /// to form a proper call to this constructor.
   10226 ///
   10227 /// \returns true if an error occurred, false otherwise.
   10228 bool
   10229 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
   10230                               MultiExprArg ArgsPtr,
   10231                               SourceLocation Loc,
   10232                               SmallVectorImpl<Expr*> &ConvertedArgs,
   10233                               bool AllowExplicit,
   10234                               bool IsListInitialization) {
   10235   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
   10236   unsigned NumArgs = ArgsPtr.size();
   10237   Expr **Args = ArgsPtr.data();
   10238 
   10239   const FunctionProtoType *Proto
   10240     = Constructor->getType()->getAs<FunctionProtoType>();
   10241   assert(Proto && "Constructor without a prototype?");
   10242   unsigned NumArgsInProto = Proto->getNumArgs();
   10243 
   10244   // If too few arguments are available, we'll fill in the rest with defaults.
   10245   if (NumArgs < NumArgsInProto)
   10246     ConvertedArgs.reserve(NumArgsInProto);
   10247   else
   10248     ConvertedArgs.reserve(NumArgs);
   10249 
   10250   VariadicCallType CallType =
   10251     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
   10252   SmallVector<Expr *, 8> AllArgs;
   10253   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
   10254                                         Proto, 0,
   10255                                         llvm::makeArrayRef(Args, NumArgs),
   10256                                         AllArgs,
   10257                                         CallType, AllowExplicit,
   10258                                         IsListInitialization);
   10259   ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
   10260 
   10261   DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
   10262 
   10263   CheckConstructorCall(Constructor,
   10264                        llvm::makeArrayRef<const Expr *>(AllArgs.data(),
   10265                                                         AllArgs.size()),
   10266                        Proto, Loc);
   10267 
   10268   return Invalid;
   10269 }
   10270 
   10271 static inline bool
   10272 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
   10273                                        const FunctionDecl *FnDecl) {
   10274   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
   10275   if (isa<NamespaceDecl>(DC)) {
   10276     return SemaRef.Diag(FnDecl->getLocation(),
   10277                         diag::err_operator_new_delete_declared_in_namespace)
   10278       << FnDecl->getDeclName();
   10279   }
   10280 
   10281   if (isa<TranslationUnitDecl>(DC) &&
   10282       FnDecl->getStorageClass() == SC_Static) {
   10283     return SemaRef.Diag(FnDecl->getLocation(),
   10284                         diag::err_operator_new_delete_declared_static)
   10285       << FnDecl->getDeclName();
   10286   }
   10287 
   10288   return false;
   10289 }
   10290 
   10291 static inline bool
   10292 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
   10293                             CanQualType ExpectedResultType,
   10294                             CanQualType ExpectedFirstParamType,
   10295                             unsigned DependentParamTypeDiag,
   10296                             unsigned InvalidParamTypeDiag) {
   10297   QualType ResultType =
   10298     FnDecl->getType()->getAs<FunctionType>()->getResultType();
   10299 
   10300   // Check that the result type is not dependent.
   10301   if (ResultType->isDependentType())
   10302     return SemaRef.Diag(FnDecl->getLocation(),
   10303                         diag::err_operator_new_delete_dependent_result_type)
   10304     << FnDecl->getDeclName() << ExpectedResultType;
   10305 
   10306   // Check that the result type is what we expect.
   10307   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
   10308     return SemaRef.Diag(FnDecl->getLocation(),
   10309                         diag::err_operator_new_delete_invalid_result_type)
   10310     << FnDecl->getDeclName() << ExpectedResultType;
   10311 
   10312   // A function template must have at least 2 parameters.
   10313   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
   10314     return SemaRef.Diag(FnDecl->getLocation(),
   10315                       diag::err_operator_new_delete_template_too_few_parameters)
   10316         << FnDecl->getDeclName();
   10317 
   10318   // The function decl must have at least 1 parameter.
   10319   if (FnDecl->getNumParams() == 0)
   10320     return SemaRef.Diag(FnDecl->getLocation(),
   10321                         diag::err_operator_new_delete_too_few_parameters)
   10322       << FnDecl->getDeclName();
   10323 
   10324   // Check the first parameter type is not dependent.
   10325   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
   10326   if (FirstParamType->isDependentType())
   10327     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
   10328       << FnDecl->getDeclName() << ExpectedFirstParamType;
   10329 
   10330   // Check that the first parameter type is what we expect.
   10331   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
   10332       ExpectedFirstParamType)
   10333     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
   10334     << FnDecl->getDeclName() << ExpectedFirstParamType;
   10335 
   10336   return false;
   10337 }
   10338 
   10339 static bool
   10340 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
   10341   // C++ [basic.stc.dynamic.allocation]p1:
   10342   //   A program is ill-formed if an allocation function is declared in a
   10343   //   namespace scope other than global scope or declared static in global
   10344   //   scope.
   10345   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   10346     return true;
   10347 
   10348   CanQualType SizeTy =
   10349     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
   10350 
   10351   // C++ [basic.stc.dynamic.allocation]p1:
   10352   //  The return type shall be void*. The first parameter shall have type
   10353   //  std::size_t.
   10354   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
   10355                                   SizeTy,
   10356                                   diag::err_operator_new_dependent_param_type,
   10357                                   diag::err_operator_new_param_type))
   10358     return true;
   10359 
   10360   // C++ [basic.stc.dynamic.allocation]p1:
   10361   //  The first parameter shall not have an associated default argument.
   10362   if (FnDecl->getParamDecl(0)->hasDefaultArg())
   10363     return SemaRef.Diag(FnDecl->getLocation(),
   10364                         diag::err_operator_new_default_arg)
   10365       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
   10366 
   10367   return false;
   10368 }
   10369 
   10370 static bool
   10371 CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
   10372   // C++ [basic.stc.dynamic.deallocation]p1:
   10373   //   A program is ill-formed if deallocation functions are declared in a
   10374   //   namespace scope other than global scope or declared static in global
   10375   //   scope.
   10376   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   10377     return true;
   10378 
   10379   // C++ [basic.stc.dynamic.deallocation]p2:
   10380   //   Each deallocation function shall return void and its first parameter
   10381   //   shall be void*.
   10382   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
   10383                                   SemaRef.Context.VoidPtrTy,
   10384                                  diag::err_operator_delete_dependent_param_type,
   10385                                  diag::err_operator_delete_param_type))
   10386     return true;
   10387 
   10388   return false;
   10389 }
   10390 
   10391 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
   10392 /// of this overloaded operator is well-formed. If so, returns false;
   10393 /// otherwise, emits appropriate diagnostics and returns true.
   10394 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
   10395   assert(FnDecl && FnDecl->isOverloadedOperator() &&
   10396          "Expected an overloaded operator declaration");
   10397 
   10398   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
   10399 
   10400   // C++ [over.oper]p5:
   10401   //   The allocation and deallocation functions, operator new,
   10402   //   operator new[], operator delete and operator delete[], are
   10403   //   described completely in 3.7.3. The attributes and restrictions
   10404   //   found in the rest of this subclause do not apply to them unless
   10405   //   explicitly stated in 3.7.3.
   10406   if (Op == OO_Delete || Op == OO_Array_Delete)
   10407     return CheckOperatorDeleteDeclaration(*this, FnDecl);
   10408 
   10409   if (Op == OO_New || Op == OO_Array_New)
   10410     return CheckOperatorNewDeclaration(*this, FnDecl);
   10411 
   10412   // C++ [over.oper]p6:
   10413   //   An operator function shall either be a non-static member
   10414   //   function or be a non-member function and have at least one
   10415   //   parameter whose type is a class, a reference to a class, an
   10416   //   enumeration, or a reference to an enumeration.
   10417   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
   10418     if (MethodDecl->isStatic())
   10419       return Diag(FnDecl->getLocation(),
   10420                   diag::err_operator_overload_static) << FnDecl->getDeclName();
   10421   } else {
   10422     bool ClassOrEnumParam = false;
   10423     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
   10424                                    ParamEnd = FnDecl->param_end();
   10425          Param != ParamEnd; ++Param) {
   10426       QualType ParamType = (*Param)->getType().getNonReferenceType();
   10427       if (ParamType->isDependentType() || ParamType->isRecordType() ||
   10428           ParamType->isEnumeralType()) {
   10429         ClassOrEnumParam = true;
   10430         break;
   10431       }
   10432     }
   10433 
   10434     if (!ClassOrEnumParam)
   10435       return Diag(FnDecl->getLocation(),
   10436                   diag::err_operator_overload_needs_class_or_enum)
   10437         << FnDecl->getDeclName();
   10438   }
   10439 
   10440   // C++ [over.oper]p8:
   10441   //   An operator function cannot have default arguments (8.3.6),
   10442   //   except where explicitly stated below.
   10443   //
   10444   // Only the function-call operator allows default arguments
   10445   // (C++ [over.call]p1).
   10446   if (Op != OO_Call) {
   10447     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
   10448          Param != FnDecl->param_end(); ++Param) {
   10449       if ((*Param)->hasDefaultArg())
   10450         return Diag((*Param)->getLocation(),
   10451                     diag::err_operator_overload_default_arg)
   10452           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
   10453     }
   10454   }
   10455 
   10456   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
   10457     { false, false, false }
   10458 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
   10459     , { Unary, Binary, MemberOnly }
   10460 #include "clang/Basic/OperatorKinds.def"
   10461   };
   10462 
   10463   bool CanBeUnaryOperator = OperatorUses[Op][0];
   10464   bool CanBeBinaryOperator = OperatorUses[Op][1];
   10465   bool MustBeMemberOperator = OperatorUses[Op][2];
   10466 
   10467   // C++ [over.oper]p8:
   10468   //   [...] Operator functions cannot have more or fewer parameters
   10469   //   than the number required for the corresponding operator, as
   10470   //   described in the rest of this subclause.
   10471   unsigned NumParams = FnDecl->getNumParams()
   10472                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
   10473   if (Op != OO_Call &&
   10474       ((NumParams == 1 && !CanBeUnaryOperator) ||
   10475        (NumParams == 2 && !CanBeBinaryOperator) ||
   10476        (NumParams < 1) || (NumParams > 2))) {
   10477     // We have the wrong number of parameters.
   10478     unsigned ErrorKind;
   10479     if (CanBeUnaryOperator && CanBeBinaryOperator) {
   10480       ErrorKind = 2;  // 2 -> unary or binary.
   10481     } else if (CanBeUnaryOperator) {
   10482       ErrorKind = 0;  // 0 -> unary
   10483     } else {
   10484       assert(CanBeBinaryOperator &&
   10485              "All non-call overloaded operators are unary or binary!");
   10486       ErrorKind = 1;  // 1 -> binary
   10487     }
   10488 
   10489     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
   10490       << FnDecl->getDeclName() << NumParams << ErrorKind;
   10491   }
   10492 
   10493   // Overloaded operators other than operator() cannot be variadic.
   10494   if (Op != OO_Call &&
   10495       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
   10496     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
   10497       << FnDecl->getDeclName();
   10498   }
   10499 
   10500   // Some operators must be non-static member functions.
   10501   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
   10502     return Diag(FnDecl->getLocation(),
   10503                 diag::err_operator_overload_must_be_member)
   10504       << FnDecl->getDeclName();
   10505   }
   10506 
   10507   // C++ [over.inc]p1:
   10508   //   The user-defined function called operator++ implements the
   10509   //   prefix and postfix ++ operator. If this function is a member
   10510   //   function with no parameters, or a non-member function with one
   10511   //   parameter of class or enumeration type, it defines the prefix
   10512   //   increment operator ++ for objects of that type. If the function
   10513   //   is a member function with one parameter (which shall be of type
   10514   //   int) or a non-member function with two parameters (the second
   10515   //   of which shall be of type int), it defines the postfix
   10516   //   increment operator ++ for objects of that type.
   10517   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
   10518     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
   10519     bool ParamIsInt = false;
   10520     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
   10521       ParamIsInt = BT->getKind() == BuiltinType::Int;
   10522 
   10523     if (!ParamIsInt)
   10524       return Diag(LastParam->getLocation(),
   10525                   diag::err_operator_overload_post_incdec_must_be_int)
   10526         << LastParam->getType() << (Op == OO_MinusMinus);
   10527   }
   10528 
   10529   return false;
   10530 }
   10531 
   10532 /// CheckLiteralOperatorDeclaration - Check whether the declaration
   10533 /// of this literal operator function is well-formed. If so, returns
   10534 /// false; otherwise, emits appropriate diagnostics and returns true.
   10535 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
   10536   if (isa<CXXMethodDecl>(FnDecl)) {
   10537     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
   10538       << FnDecl->getDeclName();
   10539     return true;
   10540   }
   10541 
   10542   if (FnDecl->isExternC()) {
   10543     Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
   10544     return true;
   10545   }
   10546 
   10547   bool Valid = false;
   10548 
   10549   // This might be the definition of a literal operator template.
   10550   FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
   10551   // This might be a specialization of a literal operator template.
   10552   if (!TpDecl)
   10553     TpDecl = FnDecl->getPrimaryTemplate();
   10554 
   10555   // template <char...> type operator "" name() is the only valid template
   10556   // signature, and the only valid signature with no parameters.
   10557   if (TpDecl) {
   10558     if (FnDecl->param_size() == 0) {
   10559       // Must have only one template parameter
   10560       TemplateParameterList *Params = TpDecl->getTemplateParameters();
   10561       if (Params->size() == 1) {
   10562         NonTypeTemplateParmDecl *PmDecl =
   10563           dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
   10564 
   10565         // The template parameter must be a char parameter pack.
   10566         if (PmDecl && PmDecl->isTemplateParameterPack() &&
   10567             Context.hasSameType(PmDecl->getType(), Context.CharTy))
   10568           Valid = true;
   10569       }
   10570     }
   10571   } else if (FnDecl->param_size()) {
   10572     // Check the first parameter
   10573     FunctionDecl::param_iterator Param = FnDecl->param_begin();
   10574 
   10575     QualType T = (*Param)->getType().getUnqualifiedType();
   10576 
   10577     // unsigned long long int, long double, and any character type are allowed
   10578     // as the only parameters.
   10579     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
   10580         Context.hasSameType(T, Context.LongDoubleTy) ||
   10581         Context.hasSameType(T, Context.CharTy) ||
   10582         Context.hasSameType(T, Context.WideCharTy) ||
   10583         Context.hasSameType(T, Context.Char16Ty) ||
   10584         Context.hasSameType(T, Context.Char32Ty)) {
   10585       if (++Param == FnDecl->param_end())
   10586         Valid = true;
   10587       goto FinishedParams;
   10588     }
   10589 
   10590     // Otherwise it must be a pointer to const; let's strip those qualifiers.
   10591     const PointerType *PT = T->getAs<PointerType>();
   10592     if (!PT)
   10593       goto FinishedParams;
   10594     T = PT->getPointeeType();
   10595     if (!T.isConstQualified() || T.isVolatileQualified())
   10596       goto FinishedParams;
   10597     T = T.getUnqualifiedType();
   10598 
   10599     // Move on to the second parameter;
   10600     ++Param;
   10601 
   10602     // If there is no second parameter, the first must be a const char *
   10603     if (Param == FnDecl->param_end()) {
   10604       if (Context.hasSameType(T, Context.CharTy))
   10605         Valid = true;
   10606       goto FinishedParams;
   10607     }
   10608 
   10609     // const char *, const wchar_t*, const char16_t*, and const char32_t*
   10610     // are allowed as the first parameter to a two-parameter function
   10611     if (!(Context.hasSameType(T, Context.CharTy) ||
   10612           Context.hasSameType(T, Context.WideCharTy) ||
   10613           Context.hasSameType(T, Context.Char16Ty) ||
   10614           Context.hasSameType(T, Context.Char32Ty)))
   10615       goto FinishedParams;
   10616 
   10617     // The second and final parameter must be an std::size_t
   10618     T = (*Param)->getType().getUnqualifiedType();
   10619     if (Context.hasSameType(T, Context.getSizeType()) &&
   10620         ++Param == FnDecl->param_end())
   10621       Valid = true;
   10622   }
   10623 
   10624   // FIXME: This diagnostic is absolutely terrible.
   10625 FinishedParams:
   10626   if (!Valid) {
   10627     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
   10628       << FnDecl->getDeclName();
   10629     return true;
   10630   }
   10631 
   10632   // A parameter-declaration-clause containing a default argument is not
   10633   // equivalent to any of the permitted forms.
   10634   for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
   10635                                     ParamEnd = FnDecl->param_end();
   10636        Param != ParamEnd; ++Param) {
   10637     if ((*Param)->hasDefaultArg()) {
   10638       Diag((*Param)->getDefaultArgRange().getBegin(),
   10639            diag::err_literal_operator_default_argument)
   10640         << (*Param)->getDefaultArgRange();
   10641       break;
   10642     }
   10643   }
   10644 
   10645   StringRef LiteralName
   10646     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
   10647   if (LiteralName[0] != '_') {
   10648     // C++11 [usrlit.suffix]p1:
   10649     //   Literal suffix identifiers that do not start with an underscore
   10650     //   are reserved for future standardization.
   10651     Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved)
   10652       << NumericLiteralParser::isValidUDSuffix(getLangOpts(), LiteralName);
   10653   }
   10654 
   10655   return false;
   10656 }
   10657 
   10658 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
   10659 /// linkage specification, including the language and (if present)
   10660 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
   10661 /// the location of the language string literal, which is provided
   10662 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
   10663 /// the '{' brace. Otherwise, this linkage specification does not
   10664 /// have any braces.
   10665 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
   10666                                            SourceLocation LangLoc,
   10667                                            StringRef Lang,
   10668                                            SourceLocation LBraceLoc) {
   10669   LinkageSpecDecl::LanguageIDs Language;
   10670   if (Lang == "\"C\"")
   10671     Language = LinkageSpecDecl::lang_c;
   10672   else if (Lang == "\"C++\"")
   10673     Language = LinkageSpecDecl::lang_cxx;
   10674   else {
   10675     Diag(LangLoc, diag::err_bad_language);
   10676     return 0;
   10677   }
   10678 
   10679   // FIXME: Add all the various semantics of linkage specifications
   10680 
   10681   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
   10682                                                ExternLoc, LangLoc, Language,
   10683                                                LBraceLoc.isValid());
   10684   CurContext->addDecl(D);
   10685   PushDeclContext(S, D);
   10686   return D;
   10687 }
   10688 
   10689 /// ActOnFinishLinkageSpecification - Complete the definition of
   10690 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
   10691 /// valid, it's the position of the closing '}' brace in a linkage
   10692 /// specification that uses braces.
   10693 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
   10694                                             Decl *LinkageSpec,
   10695                                             SourceLocation RBraceLoc) {
   10696   if (LinkageSpec) {
   10697     if (RBraceLoc.isValid()) {
   10698       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
   10699       LSDecl->setRBraceLoc(RBraceLoc);
   10700     }
   10701     PopDeclContext();
   10702   }
   10703   return LinkageSpec;
   10704 }
   10705 
   10706 Decl *Sema::ActOnEmptyDeclaration(Scope *S,
   10707                                   AttributeList *AttrList,
   10708                                   SourceLocation SemiLoc) {
   10709   Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
   10710   // Attribute declarations appertain to empty declaration so we handle
   10711   // them here.
   10712   if (AttrList)
   10713     ProcessDeclAttributeList(S, ED, AttrList);
   10714 
   10715   CurContext->addDecl(ED);
   10716   return ED;
   10717 }
   10718 
   10719 /// \brief Perform semantic analysis for the variable declaration that
   10720 /// occurs within a C++ catch clause, returning the newly-created
   10721 /// variable.
   10722 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
   10723                                          TypeSourceInfo *TInfo,
   10724                                          SourceLocation StartLoc,
   10725                                          SourceLocation Loc,
   10726                                          IdentifierInfo *Name) {
   10727   bool Invalid = false;
   10728   QualType ExDeclType = TInfo->getType();
   10729 
   10730   // Arrays and functions decay.
   10731   if (ExDeclType->isArrayType())
   10732     ExDeclType = Context.getArrayDecayedType(ExDeclType);
   10733   else if (ExDeclType->isFunctionType())
   10734     ExDeclType = Context.getPointerType(ExDeclType);
   10735 
   10736   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
   10737   // The exception-declaration shall not denote a pointer or reference to an
   10738   // incomplete type, other than [cv] void*.
   10739   // N2844 forbids rvalue references.
   10740   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
   10741     Diag(Loc, diag::err_catch_rvalue_ref);
   10742     Invalid = true;
   10743   }
   10744 
   10745   QualType BaseType = ExDeclType;
   10746   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
   10747   unsigned DK = diag::err_catch_incomplete;
   10748   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
   10749     BaseType = Ptr->getPointeeType();
   10750     Mode = 1;
   10751     DK = diag::err_catch_incomplete_ptr;
   10752   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
   10753     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
   10754     BaseType = Ref->getPointeeType();
   10755     Mode = 2;
   10756     DK = diag::err_catch_incomplete_ref;
   10757   }
   10758   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
   10759       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
   10760     Invalid = true;
   10761 
   10762   if (!Invalid && !ExDeclType->isDependentType() &&
   10763       RequireNonAbstractType(Loc, ExDeclType,
   10764                              diag::err_abstract_type_in_decl,
   10765                              AbstractVariableType))
   10766     Invalid = true;
   10767 
   10768   // Only the non-fragile NeXT runtime currently supports C++ catches
   10769   // of ObjC types, and no runtime supports catching ObjC types by value.
   10770   if (!Invalid && getLangOpts().ObjC1) {
   10771     QualType T = ExDeclType;
   10772     if (const ReferenceType *RT = T->getAs<ReferenceType>())
   10773       T = RT->getPointeeType();
   10774 
   10775     if (T->isObjCObjectType()) {
   10776       Diag(Loc, diag::err_objc_object_catch);
   10777       Invalid = true;
   10778     } else if (T->isObjCObjectPointerType()) {
   10779       // FIXME: should this be a test for macosx-fragile specifically?
   10780       if (getLangOpts().ObjCRuntime.isFragile())
   10781         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
   10782     }
   10783   }
   10784 
   10785   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
   10786                                     ExDeclType, TInfo, SC_None);
   10787   ExDecl->setExceptionVariable(true);
   10788 
   10789   // In ARC, infer 'retaining' for variables of retainable type.
   10790   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
   10791     Invalid = true;
   10792 
   10793   if (!Invalid && !ExDeclType->isDependentType()) {
   10794     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
   10795       // Insulate this from anything else we might currently be parsing.
   10796       EnterExpressionEvaluationContext scope(*this, PotentiallyEvaluated);
   10797 
   10798       // C++ [except.handle]p16:
   10799       //   The object declared in an exception-declaration or, if the
   10800       //   exception-declaration does not specify a name, a temporary (12.2) is
   10801       //   copy-initialized (8.5) from the exception object. [...]
   10802       //   The object is destroyed when the handler exits, after the destruction
   10803       //   of any automatic objects initialized within the handler.
   10804       //
   10805       // We just pretend to initialize the object with itself, then make sure
   10806       // it can be destroyed later.
   10807       QualType initType = ExDeclType;
   10808 
   10809       InitializedEntity entity =
   10810         InitializedEntity::InitializeVariable(ExDecl);
   10811       InitializationKind initKind =
   10812         InitializationKind::CreateCopy(Loc, SourceLocation());
   10813 
   10814       Expr *opaqueValue =
   10815         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
   10816       InitializationSequence sequence(*this, entity, initKind, opaqueValue);
   10817       ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
   10818       if (result.isInvalid())
   10819         Invalid = true;
   10820       else {
   10821         // If the constructor used was non-trivial, set this as the
   10822         // "initializer".
   10823         CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
   10824         if (!construct->getConstructor()->isTrivial()) {
   10825           Expr *init = MaybeCreateExprWithCleanups(construct);
   10826           ExDecl->setInit(init);
   10827         }
   10828 
   10829         // And make sure it's destructable.
   10830         FinalizeVarWithDestructor(ExDecl, recordType);
   10831       }
   10832     }
   10833   }
   10834 
   10835   if (Invalid)
   10836     ExDecl->setInvalidDecl();
   10837 
   10838   return ExDecl;
   10839 }
   10840 
   10841 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
   10842 /// handler.
   10843 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
   10844   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   10845   bool Invalid = D.isInvalidType();
   10846 
   10847   // Check for unexpanded parameter packs.
   10848   if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
   10849                                       UPPC_ExceptionType)) {
   10850     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   10851                                              D.getIdentifierLoc());
   10852     Invalid = true;
   10853   }
   10854 
   10855   IdentifierInfo *II = D.getIdentifier();
   10856   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
   10857                                              LookupOrdinaryName,
   10858                                              ForRedeclaration)) {
   10859     // The scope should be freshly made just for us. There is just no way
   10860     // it contains any previous declaration.
   10861     assert(!S->isDeclScope(PrevDecl));
   10862     if (PrevDecl->isTemplateParameter()) {
   10863       // Maybe we will complain about the shadowed template parameter.
   10864       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
   10865       PrevDecl = 0;
   10866     }
   10867   }
   10868 
   10869   if (D.getCXXScopeSpec().isSet() && !Invalid) {
   10870     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
   10871       << D.getCXXScopeSpec().getRange();
   10872     Invalid = true;
   10873   }
   10874 
   10875   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
   10876                                               D.getLocStart(),
   10877                                               D.getIdentifierLoc(),
   10878                                               D.getIdentifier());
   10879   if (Invalid)
   10880     ExDecl->setInvalidDecl();
   10881 
   10882   // Add the exception declaration into this scope.
   10883   if (II)
   10884     PushOnScopeChains(ExDecl, S);
   10885   else
   10886     CurContext->addDecl(ExDecl);
   10887 
   10888   ProcessDeclAttributes(S, ExDecl, D);
   10889   return ExDecl;
   10890 }
   10891 
   10892 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   10893                                          Expr *AssertExpr,
   10894                                          Expr *AssertMessageExpr,
   10895                                          SourceLocation RParenLoc) {
   10896   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
   10897 
   10898   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
   10899     return 0;
   10900 
   10901   return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
   10902                                       AssertMessage, RParenLoc, false);
   10903 }
   10904 
   10905 Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   10906                                          Expr *AssertExpr,
   10907                                          StringLiteral *AssertMessage,
   10908                                          SourceLocation RParenLoc,
   10909                                          bool Failed) {
   10910   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
   10911       !Failed) {
   10912     // In a static_assert-declaration, the constant-expression shall be a
   10913     // constant expression that can be contextually converted to bool.
   10914     ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
   10915     if (Converted.isInvalid())
   10916       Failed = true;
   10917 
   10918     llvm::APSInt Cond;
   10919     if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
   10920           diag::err_static_assert_expression_is_not_constant,
   10921           /*AllowFold=*/false).isInvalid())
   10922       Failed = true;
   10923 
   10924     if (!Failed && !Cond) {
   10925       SmallString<256> MsgBuffer;
   10926       llvm::raw_svector_ostream Msg(MsgBuffer);
   10927       AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
   10928       Diag(StaticAssertLoc, diag::err_static_assert_failed)
   10929         << Msg.str() << AssertExpr->getSourceRange();
   10930       Failed = true;
   10931     }
   10932   }
   10933 
   10934   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
   10935                                         AssertExpr, AssertMessage, RParenLoc,
   10936                                         Failed);
   10937 
   10938   CurContext->addDecl(Decl);
   10939   return Decl;
   10940 }
   10941 
   10942 /// \brief Perform semantic analysis of the given friend type declaration.
   10943 ///
   10944 /// \returns A friend declaration that.
   10945 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
   10946                                       SourceLocation FriendLoc,
   10947                                       TypeSourceInfo *TSInfo) {
   10948   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
   10949 
   10950   QualType T = TSInfo->getType();
   10951   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
   10952 
   10953   // C++03 [class.friend]p2:
   10954   //   An elaborated-type-specifier shall be used in a friend declaration
   10955   //   for a class.*
   10956   //
   10957   //   * The class-key of the elaborated-type-specifier is required.
   10958   if (!ActiveTemplateInstantiations.empty()) {
   10959     // Do not complain about the form of friend template types during
   10960     // template instantiation; we will already have complained when the
   10961     // template was declared.
   10962   } else {
   10963     if (!T->isElaboratedTypeSpecifier()) {
   10964       // If we evaluated the type to a record type, suggest putting
   10965       // a tag in front.
   10966       if (const RecordType *RT = T->getAs<RecordType>()) {
   10967         RecordDecl *RD = RT->getDecl();
   10968 
   10969         std::string InsertionText = std::string(" ") + RD->getKindName();
   10970 
   10971         Diag(TypeRange.getBegin(),
   10972              getLangOpts().CPlusPlus11 ?
   10973                diag::warn_cxx98_compat_unelaborated_friend_type :
   10974                diag::ext_unelaborated_friend_type)
   10975           << (unsigned) RD->getTagKind()
   10976           << T
   10977           << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
   10978                                         InsertionText);
   10979       } else {
   10980         Diag(FriendLoc,
   10981              getLangOpts().CPlusPlus11 ?
   10982                diag::warn_cxx98_compat_nonclass_type_friend :
   10983                diag::ext_nonclass_type_friend)
   10984           << T
   10985           << TypeRange;
   10986       }
   10987     } else if (T->getAs<EnumType>()) {
   10988       Diag(FriendLoc,
   10989            getLangOpts().CPlusPlus11 ?
   10990              diag::warn_cxx98_compat_enum_friend :
   10991              diag::ext_enum_friend)
   10992         << T
   10993         << TypeRange;
   10994     }
   10995 
   10996     // C++11 [class.friend]p3:
   10997     //   A friend declaration that does not declare a function shall have one
   10998     //   of the following forms:
   10999     //     friend elaborated-type-specifier ;
   11000     //     friend simple-type-specifier ;
   11001     //     friend typename-specifier ;
   11002     if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
   11003       Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
   11004   }
   11005 
   11006   //   If the type specifier in a friend declaration designates a (possibly
   11007   //   cv-qualified) class type, that class is declared as a friend; otherwise,
   11008   //   the friend declaration is ignored.
   11009   return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
   11010 }
   11011 
   11012 /// Handle a friend tag declaration where the scope specifier was
   11013 /// templated.
   11014 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
   11015                                     unsigned TagSpec, SourceLocation TagLoc,
   11016                                     CXXScopeSpec &SS,
   11017                                     IdentifierInfo *Name,
   11018                                     SourceLocation NameLoc,
   11019                                     AttributeList *Attr,
   11020                                     MultiTemplateParamsArg TempParamLists) {
   11021   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   11022 
   11023   bool isExplicitSpecialization = false;
   11024   bool Invalid = false;
   11025 
   11026   if (TemplateParameterList *TemplateParams =
   11027           MatchTemplateParametersToScopeSpecifier(
   11028               TagLoc, NameLoc, SS, TempParamLists, /*friend*/ true,
   11029               isExplicitSpecialization, Invalid)) {
   11030     if (TemplateParams->size() > 0) {
   11031       // This is a declaration of a class template.
   11032       if (Invalid)
   11033         return 0;
   11034 
   11035       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
   11036                                 SS, Name, NameLoc, Attr,
   11037                                 TemplateParams, AS_public,
   11038                                 /*ModulePrivateLoc=*/SourceLocation(),
   11039                                 TempParamLists.size() - 1,
   11040                                 TempParamLists.data()).take();
   11041     } else {
   11042       // The "template<>" header is extraneous.
   11043       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
   11044         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
   11045       isExplicitSpecialization = true;
   11046     }
   11047   }
   11048 
   11049   if (Invalid) return 0;
   11050 
   11051   bool isAllExplicitSpecializations = true;
   11052   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
   11053     if (TempParamLists[I]->size()) {
   11054       isAllExplicitSpecializations = false;
   11055       break;
   11056     }
   11057   }
   11058 
   11059   // FIXME: don't ignore attributes.
   11060 
   11061   // If it's explicit specializations all the way down, just forget
   11062   // about the template header and build an appropriate non-templated
   11063   // friend.  TODO: for source fidelity, remember the headers.
   11064   if (isAllExplicitSpecializations) {
   11065     if (SS.isEmpty()) {
   11066       bool Owned = false;
   11067       bool IsDependent = false;
   11068       return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
   11069                       Attr, AS_public,
   11070                       /*ModulePrivateLoc=*/SourceLocation(),
   11071                       MultiTemplateParamsArg(), Owned, IsDependent,
   11072                       /*ScopedEnumKWLoc=*/SourceLocation(),
   11073                       /*ScopedEnumUsesClassTag=*/false,
   11074                       /*UnderlyingType=*/TypeResult());
   11075     }
   11076 
   11077     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   11078     ElaboratedTypeKeyword Keyword
   11079       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   11080     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
   11081                                    *Name, NameLoc);
   11082     if (T.isNull())
   11083       return 0;
   11084 
   11085     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   11086     if (isa<DependentNameType>(T)) {
   11087       DependentNameTypeLoc TL =
   11088           TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
   11089       TL.setElaboratedKeywordLoc(TagLoc);
   11090       TL.setQualifierLoc(QualifierLoc);
   11091       TL.setNameLoc(NameLoc);
   11092     } else {
   11093       ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
   11094       TL.setElaboratedKeywordLoc(TagLoc);
   11095       TL.setQualifierLoc(QualifierLoc);
   11096       TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
   11097     }
   11098 
   11099     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   11100                                             TSI, FriendLoc, TempParamLists);
   11101     Friend->setAccess(AS_public);
   11102     CurContext->addDecl(Friend);
   11103     return Friend;
   11104   }
   11105 
   11106   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
   11107 
   11108 
   11109 
   11110   // Handle the case of a templated-scope friend class.  e.g.
   11111   //   template <class T> class A<T>::B;
   11112   // FIXME: we don't support these right now.
   11113   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   11114   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
   11115   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   11116   DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
   11117   TL.setElaboratedKeywordLoc(TagLoc);
   11118   TL.setQualifierLoc(SS.getWithLocInContext(Context));
   11119   TL.setNameLoc(NameLoc);
   11120 
   11121   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   11122                                           TSI, FriendLoc, TempParamLists);
   11123   Friend->setAccess(AS_public);
   11124   Friend->setUnsupportedFriend(true);
   11125   CurContext->addDecl(Friend);
   11126   return Friend;
   11127 }
   11128 
   11129 
   11130 /// Handle a friend type declaration.  This works in tandem with
   11131 /// ActOnTag.
   11132 ///
   11133 /// Notes on friend class templates:
   11134 ///
   11135 /// We generally treat friend class declarations as if they were
   11136 /// declaring a class.  So, for example, the elaborated type specifier
   11137 /// in a friend declaration is required to obey the restrictions of a
   11138 /// class-head (i.e. no typedefs in the scope chain), template
   11139 /// parameters are required to match up with simple template-ids, &c.
   11140 /// However, unlike when declaring a template specialization, it's
   11141 /// okay to refer to a template specialization without an empty
   11142 /// template parameter declaration, e.g.
   11143 ///   friend class A<T>::B<unsigned>;
   11144 /// We permit this as a special case; if there are any template
   11145 /// parameters present at all, require proper matching, i.e.
   11146 ///   template <> template \<class T> friend class A<int>::B;
   11147 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
   11148                                 MultiTemplateParamsArg TempParams) {
   11149   SourceLocation Loc = DS.getLocStart();
   11150 
   11151   assert(DS.isFriendSpecified());
   11152   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   11153 
   11154   // Try to convert the decl specifier to a type.  This works for
   11155   // friend templates because ActOnTag never produces a ClassTemplateDecl
   11156   // for a TUK_Friend.
   11157   Declarator TheDeclarator(DS, Declarator::MemberContext);
   11158   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
   11159   QualType T = TSI->getType();
   11160   if (TheDeclarator.isInvalidType())
   11161     return 0;
   11162 
   11163   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
   11164     return 0;
   11165 
   11166   // This is definitely an error in C++98.  It's probably meant to
   11167   // be forbidden in C++0x, too, but the specification is just
   11168   // poorly written.
   11169   //
   11170   // The problem is with declarations like the following:
   11171   //   template <T> friend A<T>::foo;
   11172   // where deciding whether a class C is a friend or not now hinges
   11173   // on whether there exists an instantiation of A that causes
   11174   // 'foo' to equal C.  There are restrictions on class-heads
   11175   // (which we declare (by fiat) elaborated friend declarations to
   11176   // be) that makes this tractable.
   11177   //
   11178   // FIXME: handle "template <> friend class A<T>;", which
   11179   // is possibly well-formed?  Who even knows?
   11180   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
   11181     Diag(Loc, diag::err_tagless_friend_type_template)
   11182       << DS.getSourceRange();
   11183     return 0;
   11184   }
   11185 
   11186   // C++98 [class.friend]p1: A friend of a class is a function
   11187   //   or class that is not a member of the class . . .
   11188   // This is fixed in DR77, which just barely didn't make the C++03
   11189   // deadline.  It's also a very silly restriction that seriously
   11190   // affects inner classes and which nobody else seems to implement;
   11191   // thus we never diagnose it, not even in -pedantic.
   11192   //
   11193   // But note that we could warn about it: it's always useless to
   11194   // friend one of your own members (it's not, however, worthless to
   11195   // friend a member of an arbitrary specialization of your template).
   11196 
   11197   Decl *D;
   11198   if (unsigned NumTempParamLists = TempParams.size())
   11199     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
   11200                                    NumTempParamLists,
   11201                                    TempParams.data(),
   11202                                    TSI,
   11203                                    DS.getFriendSpecLoc());
   11204   else
   11205     D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
   11206 
   11207   if (!D)
   11208     return 0;
   11209 
   11210   D->setAccess(AS_public);
   11211   CurContext->addDecl(D);
   11212 
   11213   return D;
   11214 }
   11215 
   11216 NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
   11217                                         MultiTemplateParamsArg TemplateParams) {
   11218   const DeclSpec &DS = D.getDeclSpec();
   11219 
   11220   assert(DS.isFriendSpecified());
   11221   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   11222 
   11223   SourceLocation Loc = D.getIdentifierLoc();
   11224   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   11225 
   11226   // C++ [class.friend]p1
   11227   //   A friend of a class is a function or class....
   11228   // Note that this sees through typedefs, which is intended.
   11229   // It *doesn't* see through dependent types, which is correct
   11230   // according to [temp.arg.type]p3:
   11231   //   If a declaration acquires a function type through a
   11232   //   type dependent on a template-parameter and this causes
   11233   //   a declaration that does not use the syntactic form of a
   11234   //   function declarator to have a function type, the program
   11235   //   is ill-formed.
   11236   if (!TInfo->getType()->isFunctionType()) {
   11237     Diag(Loc, diag::err_unexpected_friend);
   11238 
   11239     // It might be worthwhile to try to recover by creating an
   11240     // appropriate declaration.
   11241     return 0;
   11242   }
   11243 
   11244   // C++ [namespace.memdef]p3
   11245   //  - If a friend declaration in a non-local class first declares a
   11246   //    class or function, the friend class or function is a member
   11247   //    of the innermost enclosing namespace.
   11248   //  - The name of the friend is not found by simple name lookup
   11249   //    until a matching declaration is provided in that namespace
   11250   //    scope (either before or after the class declaration granting
   11251   //    friendship).
   11252   //  - If a friend function is called, its name may be found by the
   11253   //    name lookup that considers functions from namespaces and
   11254   //    classes associated with the types of the function arguments.
   11255   //  - When looking for a prior declaration of a class or a function
   11256   //    declared as a friend, scopes outside the innermost enclosing
   11257   //    namespace scope are not considered.
   11258 
   11259   CXXScopeSpec &SS = D.getCXXScopeSpec();
   11260   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   11261   DeclarationName Name = NameInfo.getName();
   11262   assert(Name);
   11263 
   11264   // Check for unexpanded parameter packs.
   11265   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
   11266       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
   11267       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
   11268     return 0;
   11269 
   11270   // The context we found the declaration in, or in which we should
   11271   // create the declaration.
   11272   DeclContext *DC;
   11273   Scope *DCScope = S;
   11274   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
   11275                         ForRedeclaration);
   11276 
   11277   // FIXME: there are different rules in local classes
   11278 
   11279   // There are four cases here.
   11280   //   - There's no scope specifier, in which case we just go to the
   11281   //     appropriate scope and look for a function or function template
   11282   //     there as appropriate.
   11283   // Recover from invalid scope qualifiers as if they just weren't there.
   11284   if (SS.isInvalid() || !SS.isSet()) {
   11285     // C++0x [namespace.memdef]p3:
   11286     //   If the name in a friend declaration is neither qualified nor
   11287     //   a template-id and the declaration is a function or an
   11288     //   elaborated-type-specifier, the lookup to determine whether
   11289     //   the entity has been previously declared shall not consider
   11290     //   any scopes outside the innermost enclosing namespace.
   11291     // C++0x [class.friend]p11:
   11292     //   If a friend declaration appears in a local class and the name
   11293     //   specified is an unqualified name, a prior declaration is
   11294     //   looked up without considering scopes that are outside the
   11295     //   innermost enclosing non-class scope. For a friend function
   11296     //   declaration, if there is no prior declaration, the program is
   11297     //   ill-formed.
   11298     bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
   11299     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
   11300 
   11301     // Find the appropriate context according to the above.
   11302     DC = CurContext;
   11303 
   11304     // Skip class contexts.  If someone can cite chapter and verse
   11305     // for this behavior, that would be nice --- it's what GCC and
   11306     // EDG do, and it seems like a reasonable intent, but the spec
   11307     // really only says that checks for unqualified existing
   11308     // declarations should stop at the nearest enclosing namespace,
   11309     // not that they should only consider the nearest enclosing
   11310     // namespace.
   11311     while (DC->isRecord())
   11312       DC = DC->getParent();
   11313 
   11314     DeclContext *LookupDC = DC;
   11315     while (LookupDC->isTransparentContext())
   11316       LookupDC = LookupDC->getParent();
   11317 
   11318     while (true) {
   11319       LookupQualifiedName(Previous, LookupDC);
   11320 
   11321       // TODO: decide what we think about using declarations.
   11322       if (isLocal)
   11323         break;
   11324 
   11325       if (!Previous.empty()) {
   11326         DC = LookupDC;
   11327         break;
   11328       }
   11329 
   11330       if (isTemplateId) {
   11331         if (isa<TranslationUnitDecl>(LookupDC)) break;
   11332       } else {
   11333         if (LookupDC->isFileContext()) break;
   11334       }
   11335       LookupDC = LookupDC->getParent();
   11336     }
   11337 
   11338     DCScope = getScopeForDeclContext(S, DC);
   11339 
   11340     // C++ [class.friend]p6:
   11341     //   A function can be defined in a friend declaration of a class if and
   11342     //   only if the class is a non-local class (9.8), the function name is
   11343     //   unqualified, and the function has namespace scope.
   11344     if (isLocal && D.isFunctionDefinition()) {
   11345       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
   11346     }
   11347 
   11348   //   - There's a non-dependent scope specifier, in which case we
   11349   //     compute it and do a previous lookup there for a function
   11350   //     or function template.
   11351   } else if (!SS.getScopeRep()->isDependent()) {
   11352     DC = computeDeclContext(SS);
   11353     if (!DC) return 0;
   11354 
   11355     if (RequireCompleteDeclContext(SS, DC)) return 0;
   11356 
   11357     LookupQualifiedName(Previous, DC);
   11358 
   11359     // Ignore things found implicitly in the wrong scope.
   11360     // TODO: better diagnostics for this case.  Suggesting the right
   11361     // qualified scope would be nice...
   11362     LookupResult::Filter F = Previous.makeFilter();
   11363     while (F.hasNext()) {
   11364       NamedDecl *D = F.next();
   11365       if (!DC->InEnclosingNamespaceSetOf(
   11366               D->getDeclContext()->getRedeclContext()))
   11367         F.erase();
   11368     }
   11369     F.done();
   11370 
   11371     if (Previous.empty()) {
   11372       D.setInvalidType();
   11373       Diag(Loc, diag::err_qualified_friend_not_found)
   11374           << Name << TInfo->getType();
   11375       return 0;
   11376     }
   11377 
   11378     // C++ [class.friend]p1: A friend of a class is a function or
   11379     //   class that is not a member of the class . . .
   11380     if (DC->Equals(CurContext))
   11381       Diag(DS.getFriendSpecLoc(),
   11382            getLangOpts().CPlusPlus11 ?
   11383              diag::warn_cxx98_compat_friend_is_member :
   11384              diag::err_friend_is_member);
   11385 
   11386     if (D.isFunctionDefinition()) {
   11387       // C++ [class.friend]p6:
   11388       //   A function can be defined in a friend declaration of a class if and
   11389       //   only if the class is a non-local class (9.8), the function name is
   11390       //   unqualified, and the function has namespace scope.
   11391       SemaDiagnosticBuilder DB
   11392         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
   11393 
   11394       DB << SS.getScopeRep();
   11395       if (DC->isFileContext())
   11396         DB << FixItHint::CreateRemoval(SS.getRange());
   11397       SS.clear();
   11398     }
   11399 
   11400   //   - There's a scope specifier that does not match any template
   11401   //     parameter lists, in which case we use some arbitrary context,
   11402   //     create a method or method template, and wait for instantiation.
   11403   //   - There's a scope specifier that does match some template
   11404   //     parameter lists, which we don't handle right now.
   11405   } else {
   11406     if (D.isFunctionDefinition()) {
   11407       // C++ [class.friend]p6:
   11408       //   A function can be defined in a friend declaration of a class if and
   11409       //   only if the class is a non-local class (9.8), the function name is
   11410       //   unqualified, and the function has namespace scope.
   11411       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
   11412         << SS.getScopeRep();
   11413     }
   11414 
   11415     DC = CurContext;
   11416     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
   11417   }
   11418 
   11419   if (!DC->isRecord()) {
   11420     // This implies that it has to be an operator or function.
   11421     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
   11422         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
   11423         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
   11424       Diag(Loc, diag::err_introducing_special_friend) <<
   11425         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
   11426          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
   11427       return 0;
   11428     }
   11429   }
   11430 
   11431   // FIXME: This is an egregious hack to cope with cases where the scope stack
   11432   // does not contain the declaration context, i.e., in an out-of-line
   11433   // definition of a class.
   11434   Scope FakeDCScope(S, Scope::DeclScope, Diags);
   11435   if (!DCScope) {
   11436     FakeDCScope.setEntity(DC);
   11437     DCScope = &FakeDCScope;
   11438   }
   11439 
   11440   bool AddToScope = true;
   11441   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
   11442                                           TemplateParams, AddToScope);
   11443   if (!ND) return 0;
   11444 
   11445   assert(ND->getDeclContext() == DC);
   11446   assert(ND->getLexicalDeclContext() == CurContext);
   11447 
   11448   // Add the function declaration to the appropriate lookup tables,
   11449   // adjusting the redeclarations list as necessary.  We don't
   11450   // want to do this yet if the friending class is dependent.
   11451   //
   11452   // Also update the scope-based lookup if the target context's
   11453   // lookup context is in lexical scope.
   11454   if (!CurContext->isDependentContext()) {
   11455     DC = DC->getRedeclContext();
   11456     DC->makeDeclVisibleInContext(ND);
   11457     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
   11458       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
   11459   }
   11460 
   11461   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
   11462                                        D.getIdentifierLoc(), ND,
   11463                                        DS.getFriendSpecLoc());
   11464   FrD->setAccess(AS_public);
   11465   CurContext->addDecl(FrD);
   11466 
   11467   if (ND->isInvalidDecl()) {
   11468     FrD->setInvalidDecl();
   11469   } else {
   11470     if (DC->isRecord()) CheckFriendAccess(ND);
   11471 
   11472     FunctionDecl *FD;
   11473     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
   11474       FD = FTD->getTemplatedDecl();
   11475     else
   11476       FD = cast<FunctionDecl>(ND);
   11477 
   11478     // C++11 [dcl.fct.default]p4: If a friend declaration specifies a
   11479     // default argument expression, that declaration shall be a definition
   11480     // and shall be the only declaration of the function or function
   11481     // template in the translation unit.
   11482     if (functionDeclHasDefaultArgument(FD)) {
   11483       if (FunctionDecl *OldFD = FD->getPreviousDecl()) {
   11484         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
   11485         Diag(OldFD->getLocation(), diag::note_previous_declaration);
   11486       } else if (!D.isFunctionDefinition())
   11487         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def);
   11488     }
   11489 
   11490     // Mark templated-scope function declarations as unsupported.
   11491     if (FD->getNumTemplateParameterLists())
   11492       FrD->setUnsupportedFriend(true);
   11493   }
   11494 
   11495   return ND;
   11496 }
   11497 
   11498 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
   11499   AdjustDeclIfTemplate(Dcl);
   11500 
   11501   FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
   11502   if (!Fn) {
   11503     Diag(DelLoc, diag::err_deleted_non_function);
   11504     return;
   11505   }
   11506 
   11507   if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
   11508     // Don't consider the implicit declaration we generate for explicit
   11509     // specializations. FIXME: Do not generate these implicit declarations.
   11510     if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
   11511         || Prev->getPreviousDecl()) && !Prev->isDefined()) {
   11512       Diag(DelLoc, diag::err_deleted_decl_not_first);
   11513       Diag(Prev->getLocation(), diag::note_previous_declaration);
   11514     }
   11515     // If the declaration wasn't the first, we delete the function anyway for
   11516     // recovery.
   11517     Fn = Fn->getCanonicalDecl();
   11518   }
   11519 
   11520   if (Fn->isDeleted())
   11521     return;
   11522 
   11523   // See if we're deleting a function which is already known to override a
   11524   // non-deleted virtual function.
   11525   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn)) {
   11526     bool IssuedDiagnostic = false;
   11527     for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
   11528                                         E = MD->end_overridden_methods();
   11529          I != E; ++I) {
   11530       if (!(*MD->begin_overridden_methods())->isDeleted()) {
   11531         if (!IssuedDiagnostic) {
   11532           Diag(DelLoc, diag::err_deleted_override) << MD->getDeclName();
   11533           IssuedDiagnostic = true;
   11534         }
   11535         Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
   11536       }
   11537     }
   11538   }
   11539 
   11540   Fn->setDeletedAsWritten();
   11541 }
   11542 
   11543 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
   11544   CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Dcl);
   11545 
   11546   if (MD) {
   11547     if (MD->getParent()->isDependentType()) {
   11548       MD->setDefaulted();
   11549       MD->setExplicitlyDefaulted();
   11550       return;
   11551     }
   11552 
   11553     CXXSpecialMember Member = getSpecialMember(MD);
   11554     if (Member == CXXInvalid) {
   11555       if (!MD->isInvalidDecl())
   11556         Diag(DefaultLoc, diag::err_default_special_members);
   11557       return;
   11558     }
   11559 
   11560     MD->setDefaulted();
   11561     MD->setExplicitlyDefaulted();
   11562 
   11563     // If this definition appears within the record, do the checking when
   11564     // the record is complete.
   11565     const FunctionDecl *Primary = MD;
   11566     if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
   11567       // Find the uninstantiated declaration that actually had the '= default'
   11568       // on it.
   11569       Pattern->isDefined(Primary);
   11570 
   11571     // If the method was defaulted on its first declaration, we will have
   11572     // already performed the checking in CheckCompletedCXXClass. Such a
   11573     // declaration doesn't trigger an implicit definition.
   11574     if (Primary == Primary->getCanonicalDecl())
   11575       return;
   11576 
   11577     CheckExplicitlyDefaultedSpecialMember(MD);
   11578 
   11579     // The exception specification is needed because we are defining the
   11580     // function.
   11581     ResolveExceptionSpec(DefaultLoc,
   11582                          MD->getType()->castAs<FunctionProtoType>());
   11583 
   11584     if (MD->isInvalidDecl())
   11585       return;
   11586 
   11587     switch (Member) {
   11588     case CXXDefaultConstructor:
   11589       DefineImplicitDefaultConstructor(DefaultLoc,
   11590                                        cast<CXXConstructorDecl>(MD));
   11591       break;
   11592     case CXXCopyConstructor:
   11593       DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
   11594       break;
   11595     case CXXCopyAssignment:
   11596       DefineImplicitCopyAssignment(DefaultLoc, MD);
   11597       break;
   11598     case CXXDestructor:
   11599       DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(MD));
   11600       break;
   11601     case CXXMoveConstructor:
   11602       DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
   11603       break;
   11604     case CXXMoveAssignment:
   11605       DefineImplicitMoveAssignment(DefaultLoc, MD);
   11606       break;
   11607     case CXXInvalid:
   11608       llvm_unreachable("Invalid special member.");
   11609     }
   11610   } else {
   11611     Diag(DefaultLoc, diag::err_default_special_members);
   11612   }
   11613 }
   11614 
   11615 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
   11616   for (Stmt::child_range CI = S->children(); CI; ++CI) {
   11617     Stmt *SubStmt = *CI;
   11618     if (!SubStmt)
   11619       continue;
   11620     if (isa<ReturnStmt>(SubStmt))
   11621       Self.Diag(SubStmt->getLocStart(),
   11622            diag::err_return_in_constructor_handler);
   11623     if (!isa<Expr>(SubStmt))
   11624       SearchForReturnInStmt(Self, SubStmt);
   11625   }
   11626 }
   11627 
   11628 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
   11629   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
   11630     CXXCatchStmt *Handler = TryBlock->getHandler(I);
   11631     SearchForReturnInStmt(*this, Handler);
   11632   }
   11633 }
   11634 
   11635 bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
   11636                                              const CXXMethodDecl *Old) {
   11637   const FunctionType *NewFT = New->getType()->getAs<FunctionType>();
   11638   const FunctionType *OldFT = Old->getType()->getAs<FunctionType>();
   11639 
   11640   CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
   11641 
   11642   // If the calling conventions match, everything is fine
   11643   if (NewCC == OldCC)
   11644     return false;
   11645 
   11646   // If either of the calling conventions are set to "default", we need to pick
   11647   // something more sensible based on the target. This supports code where the
   11648   // one method explicitly sets thiscall, and another has no explicit calling
   11649   // convention.
   11650   CallingConv Default =
   11651     Context.getTargetInfo().getDefaultCallingConv(TargetInfo::CCMT_Member);
   11652   if (NewCC == CC_Default)
   11653     NewCC = Default;
   11654   if (OldCC == CC_Default)
   11655     OldCC = Default;
   11656 
   11657   // If the calling conventions still don't match, then report the error
   11658   if (NewCC != OldCC) {
   11659     Diag(New->getLocation(),
   11660          diag::err_conflicting_overriding_cc_attributes)
   11661       << New->getDeclName() << New->getType() << Old->getType();
   11662     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11663     return true;
   11664   }
   11665 
   11666   return false;
   11667 }
   11668 
   11669 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
   11670                                              const CXXMethodDecl *Old) {
   11671   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
   11672   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
   11673 
   11674   if (Context.hasSameType(NewTy, OldTy) ||
   11675       NewTy->isDependentType() || OldTy->isDependentType())
   11676     return false;
   11677 
   11678   // Check if the return types are covariant
   11679   QualType NewClassTy, OldClassTy;
   11680 
   11681   /// Both types must be pointers or references to classes.
   11682   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
   11683     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
   11684       NewClassTy = NewPT->getPointeeType();
   11685       OldClassTy = OldPT->getPointeeType();
   11686     }
   11687   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
   11688     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
   11689       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
   11690         NewClassTy = NewRT->getPointeeType();
   11691         OldClassTy = OldRT->getPointeeType();
   11692       }
   11693     }
   11694   }
   11695 
   11696   // The return types aren't either both pointers or references to a class type.
   11697   if (NewClassTy.isNull()) {
   11698     Diag(New->getLocation(),
   11699          diag::err_different_return_type_for_overriding_virtual_function)
   11700       << New->getDeclName() << NewTy << OldTy;
   11701     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11702 
   11703     return true;
   11704   }
   11705 
   11706   // C++ [class.virtual]p6:
   11707   //   If the return type of D::f differs from the return type of B::f, the
   11708   //   class type in the return type of D::f shall be complete at the point of
   11709   //   declaration of D::f or shall be the class type D.
   11710   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
   11711     if (!RT->isBeingDefined() &&
   11712         RequireCompleteType(New->getLocation(), NewClassTy,
   11713                             diag::err_covariant_return_incomplete,
   11714                             New->getDeclName()))
   11715     return true;
   11716   }
   11717 
   11718   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
   11719     // Check if the new class derives from the old class.
   11720     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
   11721       Diag(New->getLocation(),
   11722            diag::err_covariant_return_not_derived)
   11723       << New->getDeclName() << NewTy << OldTy;
   11724       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11725       return true;
   11726     }
   11727 
   11728     // Check if we the conversion from derived to base is valid.
   11729     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
   11730                     diag::err_covariant_return_inaccessible_base,
   11731                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
   11732                     // FIXME: Should this point to the return type?
   11733                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
   11734       // FIXME: this note won't trigger for delayed access control
   11735       // diagnostics, and it's impossible to get an undelayed error
   11736       // here from access control during the original parse because
   11737       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
   11738       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11739       return true;
   11740     }
   11741   }
   11742 
   11743   // The qualifiers of the return types must be the same.
   11744   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
   11745     Diag(New->getLocation(),
   11746          diag::err_covariant_return_type_different_qualifications)
   11747     << New->getDeclName() << NewTy << OldTy;
   11748     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11749     return true;
   11750   };
   11751 
   11752 
   11753   // The new class type must have the same or less qualifiers as the old type.
   11754   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
   11755     Diag(New->getLocation(),
   11756          diag::err_covariant_return_type_class_type_more_qualified)
   11757     << New->getDeclName() << NewTy << OldTy;
   11758     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   11759     return true;
   11760   };
   11761 
   11762   return false;
   11763 }
   11764 
   11765 /// \brief Mark the given method pure.
   11766 ///
   11767 /// \param Method the method to be marked pure.
   11768 ///
   11769 /// \param InitRange the source range that covers the "0" initializer.
   11770 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
   11771   SourceLocation EndLoc = InitRange.getEnd();
   11772   if (EndLoc.isValid())
   11773     Method->setRangeEnd(EndLoc);
   11774 
   11775   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
   11776     Method->setPure();
   11777     return false;
   11778   }
   11779 
   11780   if (!Method->isInvalidDecl())
   11781     Diag(Method->getLocation(), diag::err_non_virtual_pure)
   11782       << Method->getDeclName() << InitRange;
   11783   return true;
   11784 }
   11785 
   11786 /// \brief Determine whether the given declaration is a static data member.
   11787 static bool isStaticDataMember(const Decl *D) {
   11788   if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D))
   11789     return Var->isStaticDataMember();
   11790 
   11791   return false;
   11792 }
   11793 
   11794 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
   11795 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
   11796 /// is a fresh scope pushed for just this purpose.
   11797 ///
   11798 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
   11799 /// static data member of class X, names should be looked up in the scope of
   11800 /// class X.
   11801 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
   11802   // If there is no declaration, there was an error parsing it.
   11803   if (D == 0 || D->isInvalidDecl()) return;
   11804 
   11805   // We should only get called for declarations with scope specifiers, like:
   11806   //   int foo::bar;
   11807   assert(D->isOutOfLine());
   11808   EnterDeclaratorContext(S, D->getDeclContext());
   11809 
   11810   // If we are parsing the initializer for a static data member, push a
   11811   // new expression evaluation context that is associated with this static
   11812   // data member.
   11813   if (isStaticDataMember(D))
   11814     PushExpressionEvaluationContext(PotentiallyEvaluated, D);
   11815 }
   11816 
   11817 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
   11818 /// initializer for the out-of-line declaration 'D'.
   11819 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
   11820   // If there is no declaration, there was an error parsing it.
   11821   if (D == 0 || D->isInvalidDecl()) return;
   11822 
   11823   if (isStaticDataMember(D))
   11824     PopExpressionEvaluationContext();
   11825 
   11826   assert(D->isOutOfLine());
   11827   ExitDeclaratorContext(S);
   11828 }
   11829 
   11830 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
   11831 /// C++ if/switch/while/for statement.
   11832 /// e.g: "if (int x = f()) {...}"
   11833 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
   11834   // C++ 6.4p2:
   11835   // The declarator shall not specify a function or an array.
   11836   // The type-specifier-seq shall not contain typedef and shall not declare a
   11837   // new class or enumeration.
   11838   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
   11839          "Parser allowed 'typedef' as storage class of condition decl.");
   11840 
   11841   Decl *Dcl = ActOnDeclarator(S, D);
   11842   if (!Dcl)
   11843     return true;
   11844 
   11845   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
   11846     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
   11847       << D.getSourceRange();
   11848     return true;
   11849   }
   11850 
   11851   return Dcl;
   11852 }
   11853 
   11854 void Sema::LoadExternalVTableUses() {
   11855   if (!ExternalSource)
   11856     return;
   11857 
   11858   SmallVector<ExternalVTableUse, 4> VTables;
   11859   ExternalSource->ReadUsedVTables(VTables);
   11860   SmallVector<VTableUse, 4> NewUses;
   11861   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
   11862     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
   11863       = VTablesUsed.find(VTables[I].Record);
   11864     // Even if a definition wasn't required before, it may be required now.
   11865     if (Pos != VTablesUsed.end()) {
   11866       if (!Pos->second && VTables[I].DefinitionRequired)
   11867         Pos->second = true;
   11868       continue;
   11869     }
   11870 
   11871     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
   11872     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
   11873   }
   11874 
   11875   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
   11876 }
   11877 
   11878 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
   11879                           bool DefinitionRequired) {
   11880   // Ignore any vtable uses in unevaluated operands or for classes that do
   11881   // not have a vtable.
   11882   if (!Class->isDynamicClass() || Class->isDependentContext() ||
   11883       CurContext->isDependentContext() || isUnevaluatedContext())
   11884     return;
   11885 
   11886   // Try to insert this class into the map.
   11887   LoadExternalVTableUses();
   11888   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   11889   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
   11890     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
   11891   if (!Pos.second) {
   11892     // If we already had an entry, check to see if we are promoting this vtable
   11893     // to required a definition. If so, we need to reappend to the VTableUses
   11894     // list, since we may have already processed the first entry.
   11895     if (DefinitionRequired && !Pos.first->second) {
   11896       Pos.first->second = true;
   11897     } else {
   11898       // Otherwise, we can early exit.
   11899       return;
   11900     }
   11901   }
   11902 
   11903   // Local classes need to have their virtual members marked
   11904   // immediately. For all other classes, we mark their virtual members
   11905   // at the end of the translation unit.
   11906   if (Class->isLocalClass())
   11907     MarkVirtualMembersReferenced(Loc, Class);
   11908   else
   11909     VTableUses.push_back(std::make_pair(Class, Loc));
   11910 }
   11911 
   11912 bool Sema::DefineUsedVTables() {
   11913   LoadExternalVTableUses();
   11914   if (VTableUses.empty())
   11915     return false;
   11916 
   11917   // Note: The VTableUses vector could grow as a result of marking
   11918   // the members of a class as "used", so we check the size each
   11919   // time through the loop and prefer indices (which are stable) to
   11920   // iterators (which are not).
   11921   bool DefinedAnything = false;
   11922   for (unsigned I = 0; I != VTableUses.size(); ++I) {
   11923     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
   11924     if (!Class)
   11925       continue;
   11926 
   11927     SourceLocation Loc = VTableUses[I].second;
   11928 
   11929     bool DefineVTable = true;
   11930 
   11931     // If this class has a key function, but that key function is
   11932     // defined in another translation unit, we don't need to emit the
   11933     // vtable even though we're using it.
   11934     const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
   11935     if (KeyFunction && !KeyFunction->hasBody()) {
   11936       switch (KeyFunction->getTemplateSpecializationKind()) {
   11937       case TSK_Undeclared:
   11938       case TSK_ExplicitSpecialization:
   11939       case TSK_ExplicitInstantiationDeclaration:
   11940         // The key function is in another translation unit.
   11941         DefineVTable = false;
   11942         break;
   11943 
   11944       case TSK_ExplicitInstantiationDefinition:
   11945       case TSK_ImplicitInstantiation:
   11946         // We will be instantiating the key function.
   11947         break;
   11948       }
   11949     } else if (!KeyFunction) {
   11950       // If we have a class with no key function that is the subject
   11951       // of an explicit instantiation declaration, suppress the
   11952       // vtable; it will live with the explicit instantiation
   11953       // definition.
   11954       bool IsExplicitInstantiationDeclaration
   11955         = Class->getTemplateSpecializationKind()
   11956                                       == TSK_ExplicitInstantiationDeclaration;
   11957       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
   11958                                  REnd = Class->redecls_end();
   11959            R != REnd; ++R) {
   11960         TemplateSpecializationKind TSK
   11961           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
   11962         if (TSK == TSK_ExplicitInstantiationDeclaration)
   11963           IsExplicitInstantiationDeclaration = true;
   11964         else if (TSK == TSK_ExplicitInstantiationDefinition) {
   11965           IsExplicitInstantiationDeclaration = false;
   11966           break;
   11967         }
   11968       }
   11969 
   11970       if (IsExplicitInstantiationDeclaration)
   11971         DefineVTable = false;
   11972     }
   11973 
   11974     // The exception specifications for all virtual members may be needed even
   11975     // if we are not providing an authoritative form of the vtable in this TU.
   11976     // We may choose to emit it available_externally anyway.
   11977     if (!DefineVTable) {
   11978       MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
   11979       continue;
   11980     }
   11981 
   11982     // Mark all of the virtual members of this class as referenced, so
   11983     // that we can build a vtable. Then, tell the AST consumer that a
   11984     // vtable for this class is required.
   11985     DefinedAnything = true;
   11986     MarkVirtualMembersReferenced(Loc, Class);
   11987     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   11988     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
   11989 
   11990     // Optionally warn if we're emitting a weak vtable.
   11991     if (Class->isExternallyVisible() &&
   11992         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
   11993       const FunctionDecl *KeyFunctionDef = 0;
   11994       if (!KeyFunction ||
   11995           (KeyFunction->hasBody(KeyFunctionDef) &&
   11996            KeyFunctionDef->isInlined()))
   11997         Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
   11998              TSK_ExplicitInstantiationDefinition
   11999              ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
   12000           << Class;
   12001     }
   12002   }
   12003   VTableUses.clear();
   12004 
   12005   return DefinedAnything;
   12006 }
   12007 
   12008 void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
   12009                                                  const CXXRecordDecl *RD) {
   12010   for (CXXRecordDecl::method_iterator I = RD->method_begin(),
   12011                                       E = RD->method_end(); I != E; ++I)
   12012     if ((*I)->isVirtual() && !(*I)->isPure())
   12013       ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
   12014 }
   12015 
   12016 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
   12017                                         const CXXRecordDecl *RD) {
   12018   // Mark all functions which will appear in RD's vtable as used.
   12019   CXXFinalOverriderMap FinalOverriders;
   12020   RD->getFinalOverriders(FinalOverriders);
   12021   for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
   12022                                             E = FinalOverriders.end();
   12023        I != E; ++I) {
   12024     for (OverridingMethods::const_iterator OI = I->second.begin(),
   12025                                            OE = I->second.end();
   12026          OI != OE; ++OI) {
   12027       assert(OI->second.size() > 0 && "no final overrider");
   12028       CXXMethodDecl *Overrider = OI->second.front().Method;
   12029 
   12030       // C++ [basic.def.odr]p2:
   12031       //   [...] A virtual member function is used if it is not pure. [...]
   12032       if (!Overrider->isPure())
   12033         MarkFunctionReferenced(Loc, Overrider);
   12034     }
   12035   }
   12036 
   12037   // Only classes that have virtual bases need a VTT.
   12038   if (RD->getNumVBases() == 0)
   12039     return;
   12040 
   12041   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
   12042            e = RD->bases_end(); i != e; ++i) {
   12043     const CXXRecordDecl *Base =
   12044         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
   12045     if (Base->getNumVBases() == 0)
   12046       continue;
   12047     MarkVirtualMembersReferenced(Loc, Base);
   12048   }
   12049 }
   12050 
   12051 /// SetIvarInitializers - This routine builds initialization ASTs for the
   12052 /// Objective-C implementation whose ivars need be initialized.
   12053 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
   12054   if (!getLangOpts().CPlusPlus)
   12055     return;
   12056   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
   12057     SmallVector<ObjCIvarDecl*, 8> ivars;
   12058     CollectIvarsToConstructOrDestruct(OID, ivars);
   12059     if (ivars.empty())
   12060       return;
   12061     SmallVector<CXXCtorInitializer*, 32> AllToInit;
   12062     for (unsigned i = 0; i < ivars.size(); i++) {
   12063       FieldDecl *Field = ivars[i];
   12064       if (Field->isInvalidDecl())
   12065         continue;
   12066 
   12067       CXXCtorInitializer *Member;
   12068       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
   12069       InitializationKind InitKind =
   12070         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
   12071 
   12072       InitializationSequence InitSeq(*this, InitEntity, InitKind, None);
   12073       ExprResult MemberInit =
   12074         InitSeq.Perform(*this, InitEntity, InitKind, None);
   12075       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
   12076       // Note, MemberInit could actually come back empty if no initialization
   12077       // is required (e.g., because it would call a trivial default constructor)
   12078       if (!MemberInit.get() || MemberInit.isInvalid())
   12079         continue;
   12080 
   12081       Member =
   12082         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
   12083                                          SourceLocation(),
   12084                                          MemberInit.takeAs<Expr>(),
   12085                                          SourceLocation());
   12086       AllToInit.push_back(Member);
   12087 
   12088       // Be sure that the destructor is accessible and is marked as referenced.
   12089       if (const RecordType *RecordTy
   12090                   = Context.getBaseElementType(Field->getType())
   12091                                                         ->getAs<RecordType>()) {
   12092                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
   12093         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
   12094           MarkFunctionReferenced(Field->getLocation(), Destructor);
   12095           CheckDestructorAccess(Field->getLocation(), Destructor,
   12096                             PDiag(diag::err_access_dtor_ivar)
   12097                               << Context.getBaseElementType(Field->getType()));
   12098         }
   12099       }
   12100     }
   12101     ObjCImplementation->setIvarInitializers(Context,
   12102                                             AllToInit.data(), AllToInit.size());
   12103   }
   12104 }
   12105 
   12106 static
   12107 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
   12108                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
   12109                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
   12110                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
   12111                            Sema &S) {
   12112   if (Ctor->isInvalidDecl())
   12113     return;
   12114 
   12115   CXXConstructorDecl *Target = Ctor->getTargetConstructor();
   12116 
   12117   // Target may not be determinable yet, for instance if this is a dependent
   12118   // call in an uninstantiated template.
   12119   if (Target) {
   12120     const FunctionDecl *FNTarget = 0;
   12121     (void)Target->hasBody(FNTarget);
   12122     Target = const_cast<CXXConstructorDecl*>(
   12123       cast_or_null<CXXConstructorDecl>(FNTarget));
   12124   }
   12125 
   12126   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
   12127                      // Avoid dereferencing a null pointer here.
   12128                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
   12129 
   12130   if (!Current.insert(Canonical))
   12131     return;
   12132 
   12133   // We know that beyond here, we aren't chaining into a cycle.
   12134   if (!Target || !Target->isDelegatingConstructor() ||
   12135       Target->isInvalidDecl() || Valid.count(TCanonical)) {
   12136     Valid.insert(Current.begin(), Current.end());
   12137     Current.clear();
   12138   // We've hit a cycle.
   12139   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
   12140              Current.count(TCanonical)) {
   12141     // If we haven't diagnosed this cycle yet, do so now.
   12142     if (!Invalid.count(TCanonical)) {
   12143       S.Diag((*Ctor->init_begin())->getSourceLocation(),
   12144              diag::warn_delegating_ctor_cycle)
   12145         << Ctor;
   12146 
   12147       // Don't add a note for a function delegating directly to itself.
   12148       if (TCanonical != Canonical)
   12149         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
   12150 
   12151       CXXConstructorDecl *C = Target;
   12152       while (C->getCanonicalDecl() != Canonical) {
   12153         const FunctionDecl *FNTarget = 0;
   12154         (void)C->getTargetConstructor()->hasBody(FNTarget);
   12155         assert(FNTarget && "Ctor cycle through bodiless function");
   12156 
   12157         C = const_cast<CXXConstructorDecl*>(
   12158           cast<CXXConstructorDecl>(FNTarget));
   12159         S.Diag(C->getLocation(), diag::note_which_delegates_to);
   12160       }
   12161     }
   12162 
   12163     Invalid.insert(Current.begin(), Current.end());
   12164     Current.clear();
   12165   } else {
   12166     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
   12167   }
   12168 }
   12169 
   12170 
   12171 void Sema::CheckDelegatingCtorCycles() {
   12172   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
   12173 
   12174   for (DelegatingCtorDeclsType::iterator
   12175          I = DelegatingCtorDecls.begin(ExternalSource),
   12176          E = DelegatingCtorDecls.end();
   12177        I != E; ++I)
   12178     DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
   12179 
   12180   for (llvm::SmallSet<CXXConstructorDecl *, 4>::iterator CI = Invalid.begin(),
   12181                                                          CE = Invalid.end();
   12182        CI != CE; ++CI)
   12183     (*CI)->setInvalidDecl();
   12184 }
   12185 
   12186 namespace {
   12187   /// \brief AST visitor that finds references to the 'this' expression.
   12188   class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
   12189     Sema &S;
   12190 
   12191   public:
   12192     explicit FindCXXThisExpr(Sema &S) : S(S) { }
   12193 
   12194     bool VisitCXXThisExpr(CXXThisExpr *E) {
   12195       S.Diag(E->getLocation(), diag::err_this_static_member_func)
   12196         << E->isImplicit();
   12197       return false;
   12198     }
   12199   };
   12200 }
   12201 
   12202 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
   12203   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
   12204   if (!TSInfo)
   12205     return false;
   12206 
   12207   TypeLoc TL = TSInfo->getTypeLoc();
   12208   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
   12209   if (!ProtoTL)
   12210     return false;
   12211 
   12212   // C++11 [expr.prim.general]p3:
   12213   //   [The expression this] shall not appear before the optional
   12214   //   cv-qualifier-seq and it shall not appear within the declaration of a
   12215   //   static member function (although its type and value category are defined
   12216   //   within a static member function as they are within a non-static member
   12217   //   function). [ Note: this is because declaration matching does not occur
   12218   //  until the complete declarator is known. - end note ]
   12219   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
   12220   FindCXXThisExpr Finder(*this);
   12221 
   12222   // If the return type came after the cv-qualifier-seq, check it now.
   12223   if (Proto->hasTrailingReturn() &&
   12224       !Finder.TraverseTypeLoc(ProtoTL.getResultLoc()))
   12225     return true;
   12226 
   12227   // Check the exception specification.
   12228   if (checkThisInStaticMemberFunctionExceptionSpec(Method))
   12229     return true;
   12230 
   12231   return checkThisInStaticMemberFunctionAttributes(Method);
   12232 }
   12233 
   12234 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
   12235   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
   12236   if (!TSInfo)
   12237     return false;
   12238 
   12239   TypeLoc TL = TSInfo->getTypeLoc();
   12240   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
   12241   if (!ProtoTL)
   12242     return false;
   12243 
   12244   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
   12245   FindCXXThisExpr Finder(*this);
   12246 
   12247   switch (Proto->getExceptionSpecType()) {
   12248   case EST_Uninstantiated:
   12249   case EST_Unevaluated:
   12250   case EST_BasicNoexcept:
   12251   case EST_DynamicNone:
   12252   case EST_MSAny:
   12253   case EST_None:
   12254     break;
   12255 
   12256   case EST_ComputedNoexcept:
   12257     if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
   12258       return true;
   12259 
   12260   case EST_Dynamic:
   12261     for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
   12262          EEnd = Proto->exception_end();
   12263          E != EEnd; ++E) {
   12264       if (!Finder.TraverseType(*E))
   12265         return true;
   12266     }
   12267     break;
   12268   }
   12269 
   12270   return false;
   12271 }
   12272 
   12273 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
   12274   FindCXXThisExpr Finder(*this);
   12275 
   12276   // Check attributes.
   12277   for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
   12278        A != AEnd; ++A) {
   12279     // FIXME: This should be emitted by tblgen.
   12280     Expr *Arg = 0;
   12281     ArrayRef<Expr *> Args;
   12282     if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
   12283       Arg = G->getArg();
   12284     else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
   12285       Arg = G->getArg();
   12286     else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
   12287       Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
   12288     else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
   12289       Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
   12290     else if (ExclusiveLockFunctionAttr *ELF
   12291                = dyn_cast<ExclusiveLockFunctionAttr>(*A))
   12292       Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
   12293     else if (SharedLockFunctionAttr *SLF
   12294                = dyn_cast<SharedLockFunctionAttr>(*A))
   12295       Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
   12296     else if (ExclusiveTrylockFunctionAttr *ETLF
   12297                = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
   12298       Arg = ETLF->getSuccessValue();
   12299       Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
   12300     } else if (SharedTrylockFunctionAttr *STLF
   12301                  = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
   12302       Arg = STLF->getSuccessValue();
   12303       Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
   12304     } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
   12305       Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
   12306     else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
   12307       Arg = LR->getArg();
   12308     else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
   12309       Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
   12310     else if (ExclusiveLocksRequiredAttr *ELR
   12311                = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
   12312       Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
   12313     else if (SharedLocksRequiredAttr *SLR
   12314                = dyn_cast<SharedLocksRequiredAttr>(*A))
   12315       Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
   12316 
   12317     if (Arg && !Finder.TraverseStmt(Arg))
   12318       return true;
   12319 
   12320     for (unsigned I = 0, N = Args.size(); I != N; ++I) {
   12321       if (!Finder.TraverseStmt(Args[I]))
   12322         return true;
   12323     }
   12324   }
   12325 
   12326   return false;
   12327 }
   12328 
   12329 void
   12330 Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
   12331                                   ArrayRef<ParsedType> DynamicExceptions,
   12332                                   ArrayRef<SourceRange> DynamicExceptionRanges,
   12333                                   Expr *NoexceptExpr,
   12334                                   SmallVectorImpl<QualType> &Exceptions,
   12335                                   FunctionProtoType::ExtProtoInfo &EPI) {
   12336   Exceptions.clear();
   12337   EPI.ExceptionSpecType = EST;
   12338   if (EST == EST_Dynamic) {
   12339     Exceptions.reserve(DynamicExceptions.size());
   12340     for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
   12341       // FIXME: Preserve type source info.
   12342       QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
   12343 
   12344       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
   12345       collectUnexpandedParameterPacks(ET, Unexpanded);
   12346       if (!Unexpanded.empty()) {
   12347         DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
   12348                                          UPPC_ExceptionType,
   12349                                          Unexpanded);
   12350         continue;
   12351       }
   12352 
   12353       // Check that the type is valid for an exception spec, and
   12354       // drop it if not.
   12355       if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
   12356         Exceptions.push_back(ET);
   12357     }
   12358     EPI.NumExceptions = Exceptions.size();
   12359     EPI.Exceptions = Exceptions.data();
   12360     return;
   12361   }
   12362 
   12363   if (EST == EST_ComputedNoexcept) {
   12364     // If an error occurred, there's no expression here.
   12365     if (NoexceptExpr) {
   12366       assert((NoexceptExpr->isTypeDependent() ||
   12367               NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
   12368               Context.BoolTy) &&
   12369              "Parser should have made sure that the expression is boolean");
   12370       if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
   12371         EPI.ExceptionSpecType = EST_BasicNoexcept;
   12372         return;
   12373       }
   12374 
   12375       if (!NoexceptExpr->isValueDependent())
   12376         NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
   12377                          diag::err_noexcept_needs_constant_expression,
   12378                          /*AllowFold*/ false).take();
   12379       EPI.NoexceptExpr = NoexceptExpr;
   12380     }
   12381     return;
   12382   }
   12383 }
   12384 
   12385 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
   12386 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
   12387   // Implicitly declared functions (e.g. copy constructors) are
   12388   // __host__ __device__
   12389   if (D->isImplicit())
   12390     return CFT_HostDevice;
   12391 
   12392   if (D->hasAttr<CUDAGlobalAttr>())
   12393     return CFT_Global;
   12394 
   12395   if (D->hasAttr<CUDADeviceAttr>()) {
   12396     if (D->hasAttr<CUDAHostAttr>())
   12397       return CFT_HostDevice;
   12398     return CFT_Device;
   12399   }
   12400 
   12401   return CFT_Host;
   12402 }
   12403 
   12404 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
   12405                            CUDAFunctionTarget CalleeTarget) {
   12406   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
   12407   // Callable from the device only."
   12408   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
   12409     return true;
   12410 
   12411   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
   12412   // Callable from the host only."
   12413   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
   12414   // Callable from the host only."
   12415   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
   12416       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
   12417     return true;
   12418 
   12419   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
   12420     return true;
   12421 
   12422   return false;
   12423 }
   12424 
   12425 /// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
   12426 ///
   12427 MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
   12428                                        SourceLocation DeclStart,
   12429                                        Declarator &D, Expr *BitWidth,
   12430                                        InClassInitStyle InitStyle,
   12431                                        AccessSpecifier AS,
   12432                                        AttributeList *MSPropertyAttr) {
   12433   IdentifierInfo *II = D.getIdentifier();
   12434   if (!II) {
   12435     Diag(DeclStart, diag::err_anonymous_property);
   12436     return NULL;
   12437   }
   12438   SourceLocation Loc = D.getIdentifierLoc();
   12439 
   12440   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   12441   QualType T = TInfo->getType();
   12442   if (getLangOpts().CPlusPlus) {
   12443     CheckExtraCXXDefaultArguments(D);
   12444 
   12445     if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
   12446                                         UPPC_DataMemberType)) {
   12447       D.setInvalidType();
   12448       T = Context.IntTy;
   12449       TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
   12450     }
   12451   }
   12452 
   12453   DiagnoseFunctionSpecifiers(D.getDeclSpec());
   12454 
   12455   if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
   12456     Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
   12457          diag::err_invalid_thread)
   12458       << DeclSpec::getSpecifierName(TSCS);
   12459 
   12460   // Check to see if this name was declared as a member previously
   12461   NamedDecl *PrevDecl = 0;
   12462   LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
   12463   LookupName(Previous, S);
   12464   switch (Previous.getResultKind()) {
   12465   case LookupResult::Found:
   12466   case LookupResult::FoundUnresolvedValue:
   12467     PrevDecl = Previous.getAsSingle<NamedDecl>();
   12468     break;
   12469 
   12470   case LookupResult::FoundOverloaded:
   12471     PrevDecl = Previous.getRepresentativeDecl();
   12472     break;
   12473 
   12474   case LookupResult::NotFound:
   12475   case LookupResult::NotFoundInCurrentInstantiation:
   12476   case LookupResult::Ambiguous:
   12477     break;
   12478   }
   12479 
   12480   if (PrevDecl && PrevDecl->isTemplateParameter()) {
   12481     // Maybe we will complain about the shadowed template parameter.
   12482     DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
   12483     // Just pretend that we didn't see the previous declaration.
   12484     PrevDecl = 0;
   12485   }
   12486 
   12487   if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
   12488     PrevDecl = 0;
   12489 
   12490   SourceLocation TSSL = D.getLocStart();
   12491   MSPropertyDecl *NewPD;
   12492   const AttributeList::PropertyData &Data = MSPropertyAttr->getPropertyData();
   12493   NewPD = new (Context) MSPropertyDecl(Record, Loc,
   12494                                        II, T, TInfo, TSSL,
   12495                                        Data.GetterId, Data.SetterId);
   12496   ProcessDeclAttributes(TUScope, NewPD, D);
   12497   NewPD->setAccess(AS);
   12498 
   12499   if (NewPD->isInvalidDecl())
   12500     Record->setInvalidDecl();
   12501 
   12502   if (D.getDeclSpec().isModulePrivateSpecified())
   12503     NewPD->setModulePrivate();
   12504 
   12505   if (NewPD->isInvalidDecl() && PrevDecl) {
   12506     // Don't introduce NewFD into scope; there's already something
   12507     // with the same name in the same scope.
   12508   } else if (II) {
   12509     PushOnScopeChains(NewPD, S);
   12510   } else
   12511     Record->addDecl(NewPD);
   12512 
   12513   return NewPD;
   12514 }
   12515