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/Sema/CXXFieldCollector.h"
     16 #include "clang/Sema/Scope.h"
     17 #include "clang/Sema/Initialization.h"
     18 #include "clang/Sema/Lookup.h"
     19 #include "clang/Sema/ScopeInfo.h"
     20 #include "clang/AST/ASTConsumer.h"
     21 #include "clang/AST/ASTContext.h"
     22 #include "clang/AST/ASTMutationListener.h"
     23 #include "clang/AST/CharUnits.h"
     24 #include "clang/AST/CXXInheritance.h"
     25 #include "clang/AST/DeclVisitor.h"
     26 #include "clang/AST/ExprCXX.h"
     27 #include "clang/AST/RecordLayout.h"
     28 #include "clang/AST/RecursiveASTVisitor.h"
     29 #include "clang/AST/StmtVisitor.h"
     30 #include "clang/AST/TypeLoc.h"
     31 #include "clang/AST/TypeOrdering.h"
     32 #include "clang/Sema/DeclSpec.h"
     33 #include "clang/Sema/ParsedTemplate.h"
     34 #include "clang/Basic/PartialDiagnostic.h"
     35 #include "clang/Lex/Preprocessor.h"
     36 #include "llvm/ADT/SmallString.h"
     37 #include "llvm/ADT/STLExtras.h"
     38 #include <map>
     39 #include <set>
     40 
     41 using namespace clang;
     42 
     43 //===----------------------------------------------------------------------===//
     44 // CheckDefaultArgumentVisitor
     45 //===----------------------------------------------------------------------===//
     46 
     47 namespace {
     48   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
     49   /// the default argument of a parameter to determine whether it
     50   /// contains any ill-formed subexpressions. For example, this will
     51   /// diagnose the use of local variables or parameters within the
     52   /// default argument expression.
     53   class CheckDefaultArgumentVisitor
     54     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
     55     Expr *DefaultArg;
     56     Sema *S;
     57 
     58   public:
     59     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
     60       : DefaultArg(defarg), S(s) {}
     61 
     62     bool VisitExpr(Expr *Node);
     63     bool VisitDeclRefExpr(DeclRefExpr *DRE);
     64     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
     65     bool VisitLambdaExpr(LambdaExpr *Lambda);
     66   };
     67 
     68   /// VisitExpr - Visit all of the children of this expression.
     69   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
     70     bool IsInvalid = false;
     71     for (Stmt::child_range I = Node->children(); I; ++I)
     72       IsInvalid |= Visit(*I);
     73     return IsInvalid;
     74   }
     75 
     76   /// VisitDeclRefExpr - Visit a reference to a declaration, to
     77   /// determine whether this declaration can be used in the default
     78   /// argument expression.
     79   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
     80     NamedDecl *Decl = DRE->getDecl();
     81     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
     82       // C++ [dcl.fct.default]p9
     83       //   Default arguments are evaluated each time the function is
     84       //   called. The order of evaluation of function arguments is
     85       //   unspecified. Consequently, parameters of a function shall not
     86       //   be used in default argument expressions, even if they are not
     87       //   evaluated. Parameters of a function declared before a default
     88       //   argument expression are in scope and can hide namespace and
     89       //   class member names.
     90       return S->Diag(DRE->getLocStart(),
     91                      diag::err_param_default_argument_references_param)
     92          << Param->getDeclName() << DefaultArg->getSourceRange();
     93     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
     94       // C++ [dcl.fct.default]p7
     95       //   Local variables shall not be used in default argument
     96       //   expressions.
     97       if (VDecl->isLocalVarDecl())
     98         return S->Diag(DRE->getLocStart(),
     99                        diag::err_param_default_argument_references_local)
    100           << VDecl->getDeclName() << DefaultArg->getSourceRange();
    101     }
    102 
    103     return false;
    104   }
    105 
    106   /// VisitCXXThisExpr - Visit a C++ "this" expression.
    107   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
    108     // C++ [dcl.fct.default]p8:
    109     //   The keyword this shall not be used in a default argument of a
    110     //   member function.
    111     return S->Diag(ThisE->getLocStart(),
    112                    diag::err_param_default_argument_references_this)
    113                << ThisE->getSourceRange();
    114   }
    115 
    116   bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
    117     // C++11 [expr.lambda.prim]p13:
    118     //   A lambda-expression appearing in a default argument shall not
    119     //   implicitly or explicitly capture any entity.
    120     if (Lambda->capture_begin() == Lambda->capture_end())
    121       return false;
    122 
    123     return S->Diag(Lambda->getLocStart(),
    124                    diag::err_lambda_capture_default_arg);
    125   }
    126 }
    127 
    128 void Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
    129                                                       CXXMethodDecl *Method) {
    130   // If we have an MSAny or unknown spec already, don't bother.
    131   if (!Method || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
    132     return;
    133 
    134   const FunctionProtoType *Proto
    135     = Method->getType()->getAs<FunctionProtoType>();
    136   Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
    137   if (!Proto)
    138     return;
    139 
    140   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
    141 
    142   // If this function can throw any exceptions, make a note of that.
    143   if (EST == EST_Delayed || EST == EST_MSAny || EST == EST_None) {
    144     ClearExceptions();
    145     ComputedEST = EST;
    146     return;
    147   }
    148 
    149   // FIXME: If the call to this decl is using any of its default arguments, we
    150   // need to search them for potentially-throwing calls.
    151 
    152   // If this function has a basic noexcept, it doesn't affect the outcome.
    153   if (EST == EST_BasicNoexcept)
    154     return;
    155 
    156   // If we have a throw-all spec at this point, ignore the function.
    157   if (ComputedEST == EST_None)
    158     return;
    159 
    160   // If we're still at noexcept(true) and there's a nothrow() callee,
    161   // change to that specification.
    162   if (EST == EST_DynamicNone) {
    163     if (ComputedEST == EST_BasicNoexcept)
    164       ComputedEST = EST_DynamicNone;
    165     return;
    166   }
    167 
    168   // Check out noexcept specs.
    169   if (EST == EST_ComputedNoexcept) {
    170     FunctionProtoType::NoexceptResult NR =
    171         Proto->getNoexceptSpec(Self->Context);
    172     assert(NR != FunctionProtoType::NR_NoNoexcept &&
    173            "Must have noexcept result for EST_ComputedNoexcept.");
    174     assert(NR != FunctionProtoType::NR_Dependent &&
    175            "Should not generate implicit declarations for dependent cases, "
    176            "and don't know how to handle them anyway.");
    177 
    178     // noexcept(false) -> no spec on the new function
    179     if (NR == FunctionProtoType::NR_Throw) {
    180       ClearExceptions();
    181       ComputedEST = EST_None;
    182     }
    183     // noexcept(true) won't change anything either.
    184     return;
    185   }
    186 
    187   assert(EST == EST_Dynamic && "EST case not considered earlier.");
    188   assert(ComputedEST != EST_None &&
    189          "Shouldn't collect exceptions when throw-all is guaranteed.");
    190   ComputedEST = EST_Dynamic;
    191   // Record the exceptions in this function's exception specification.
    192   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
    193                                           EEnd = Proto->exception_end();
    194        E != EEnd; ++E)
    195     if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
    196       Exceptions.push_back(*E);
    197 }
    198 
    199 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
    200   if (!E || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
    201     return;
    202 
    203   // FIXME:
    204   //
    205   // C++0x [except.spec]p14:
    206   //   [An] implicit exception-specification specifies the type-id T if and
    207   // only if T is allowed by the exception-specification of a function directly
    208   // invoked by f's implicit definition; f shall allow all exceptions if any
    209   // function it directly invokes allows all exceptions, and f shall allow no
    210   // exceptions if every function it directly invokes allows no exceptions.
    211   //
    212   // Note in particular that if an implicit exception-specification is generated
    213   // for a function containing a throw-expression, that specification can still
    214   // be noexcept(true).
    215   //
    216   // Note also that 'directly invoked' is not defined in the standard, and there
    217   // is no indication that we should only consider potentially-evaluated calls.
    218   //
    219   // Ultimately we should implement the intent of the standard: the exception
    220   // specification should be the set of exceptions which can be thrown by the
    221   // implicit definition. For now, we assume that any non-nothrow expression can
    222   // throw any exception.
    223 
    224   if (Self->canThrow(E))
    225     ComputedEST = EST_None;
    226 }
    227 
    228 bool
    229 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
    230                               SourceLocation EqualLoc) {
    231   if (RequireCompleteType(Param->getLocation(), Param->getType(),
    232                           diag::err_typecheck_decl_incomplete_type)) {
    233     Param->setInvalidDecl();
    234     return true;
    235   }
    236 
    237   // C++ [dcl.fct.default]p5
    238   //   A default argument expression is implicitly converted (clause
    239   //   4) to the parameter type. The default argument expression has
    240   //   the same semantic constraints as the initializer expression in
    241   //   a declaration of a variable of the parameter type, using the
    242   //   copy-initialization semantics (8.5).
    243   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
    244                                                                     Param);
    245   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
    246                                                            EqualLoc);
    247   InitializationSequence InitSeq(*this, Entity, Kind, &Arg, 1);
    248   ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
    249                                       MultiExprArg(*this, &Arg, 1));
    250   if (Result.isInvalid())
    251     return true;
    252   Arg = Result.takeAs<Expr>();
    253 
    254   CheckImplicitConversions(Arg, EqualLoc);
    255   Arg = MaybeCreateExprWithCleanups(Arg);
    256 
    257   // Okay: add the default argument to the parameter
    258   Param->setDefaultArg(Arg);
    259 
    260   // We have already instantiated this parameter; provide each of the
    261   // instantiations with the uninstantiated default argument.
    262   UnparsedDefaultArgInstantiationsMap::iterator InstPos
    263     = UnparsedDefaultArgInstantiations.find(Param);
    264   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
    265     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
    266       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
    267 
    268     // We're done tracking this parameter's instantiations.
    269     UnparsedDefaultArgInstantiations.erase(InstPos);
    270   }
    271 
    272   return false;
    273 }
    274 
    275 /// ActOnParamDefaultArgument - Check whether the default argument
    276 /// provided for a function parameter is well-formed. If so, attach it
    277 /// to the parameter declaration.
    278 void
    279 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
    280                                 Expr *DefaultArg) {
    281   if (!param || !DefaultArg)
    282     return;
    283 
    284   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    285   UnparsedDefaultArgLocs.erase(Param);
    286 
    287   // Default arguments are only permitted in C++
    288   if (!getLangOpts().CPlusPlus) {
    289     Diag(EqualLoc, diag::err_param_default_argument)
    290       << DefaultArg->getSourceRange();
    291     Param->setInvalidDecl();
    292     return;
    293   }
    294 
    295   // Check for unexpanded parameter packs.
    296   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
    297     Param->setInvalidDecl();
    298     return;
    299   }
    300 
    301   // Check that the default argument is well-formed
    302   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
    303   if (DefaultArgChecker.Visit(DefaultArg)) {
    304     Param->setInvalidDecl();
    305     return;
    306   }
    307 
    308   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
    309 }
    310 
    311 /// ActOnParamUnparsedDefaultArgument - We've seen a default
    312 /// argument for a function parameter, but we can't parse it yet
    313 /// because we're inside a class definition. Note that this default
    314 /// argument will be parsed later.
    315 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
    316                                              SourceLocation EqualLoc,
    317                                              SourceLocation ArgLoc) {
    318   if (!param)
    319     return;
    320 
    321   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    322   if (Param)
    323     Param->setUnparsedDefaultArg();
    324 
    325   UnparsedDefaultArgLocs[Param] = ArgLoc;
    326 }
    327 
    328 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
    329 /// the default argument for the parameter param failed.
    330 void Sema::ActOnParamDefaultArgumentError(Decl *param) {
    331   if (!param)
    332     return;
    333 
    334   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    335 
    336   Param->setInvalidDecl();
    337 
    338   UnparsedDefaultArgLocs.erase(Param);
    339 }
    340 
    341 /// CheckExtraCXXDefaultArguments - Check for any extra default
    342 /// arguments in the declarator, which is not a function declaration
    343 /// or definition and therefore is not permitted to have default
    344 /// arguments. This routine should be invoked for every declarator
    345 /// that is not a function declaration or definition.
    346 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
    347   // C++ [dcl.fct.default]p3
    348   //   A default argument expression shall be specified only in the
    349   //   parameter-declaration-clause of a function declaration or in a
    350   //   template-parameter (14.1). It shall not be specified for a
    351   //   parameter pack. If it is specified in a
    352   //   parameter-declaration-clause, it shall not occur within a
    353   //   declarator or abstract-declarator of a parameter-declaration.
    354   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
    355     DeclaratorChunk &chunk = D.getTypeObject(i);
    356     if (chunk.Kind == DeclaratorChunk::Function) {
    357       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
    358         ParmVarDecl *Param =
    359           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
    360         if (Param->hasUnparsedDefaultArg()) {
    361           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
    362           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    363             << SourceRange((*Toks)[1].getLocation(), Toks->back().getLocation());
    364           delete Toks;
    365           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
    366         } else if (Param->getDefaultArg()) {
    367           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    368             << Param->getDefaultArg()->getSourceRange();
    369           Param->setDefaultArg(0);
    370         }
    371       }
    372     }
    373   }
    374 }
    375 
    376 // MergeCXXFunctionDecl - Merge two declarations of the same C++
    377 // function, once we already know that they have the same
    378 // type. Subroutine of MergeFunctionDecl. Returns true if there was an
    379 // error, false otherwise.
    380 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
    381                                 Scope *S) {
    382   bool Invalid = false;
    383 
    384   // C++ [dcl.fct.default]p4:
    385   //   For non-template functions, default arguments can be added in
    386   //   later declarations of a function in the same
    387   //   scope. Declarations in different scopes have completely
    388   //   distinct sets of default arguments. That is, declarations in
    389   //   inner scopes do not acquire default arguments from
    390   //   declarations in outer scopes, and vice versa. In a given
    391   //   function declaration, all parameters subsequent to a
    392   //   parameter with a default argument shall have default
    393   //   arguments supplied in this or previous declarations. A
    394   //   default argument shall not be redefined by a later
    395   //   declaration (not even to the same value).
    396   //
    397   // C++ [dcl.fct.default]p6:
    398   //   Except for member functions of class templates, the default arguments
    399   //   in a member function definition that appears outside of the class
    400   //   definition are added to the set of default arguments provided by the
    401   //   member function declaration in the class definition.
    402   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
    403     ParmVarDecl *OldParam = Old->getParamDecl(p);
    404     ParmVarDecl *NewParam = New->getParamDecl(p);
    405 
    406     bool OldParamHasDfl = OldParam->hasDefaultArg();
    407     bool NewParamHasDfl = NewParam->hasDefaultArg();
    408 
    409     NamedDecl *ND = Old;
    410     if (S && !isDeclInScope(ND, New->getDeclContext(), S))
    411       // Ignore default parameters of old decl if they are not in
    412       // the same scope.
    413       OldParamHasDfl = false;
    414 
    415     if (OldParamHasDfl && NewParamHasDfl) {
    416 
    417       unsigned DiagDefaultParamID =
    418         diag::err_param_default_argument_redefinition;
    419 
    420       // MSVC accepts that default parameters be redefined for member functions
    421       // of template class. The new default parameter's value is ignored.
    422       Invalid = true;
    423       if (getLangOpts().MicrosoftExt) {
    424         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
    425         if (MD && MD->getParent()->getDescribedClassTemplate()) {
    426           // Merge the old default argument into the new parameter.
    427           NewParam->setHasInheritedDefaultArg();
    428           if (OldParam->hasUninstantiatedDefaultArg())
    429             NewParam->setUninstantiatedDefaultArg(
    430                                       OldParam->getUninstantiatedDefaultArg());
    431           else
    432             NewParam->setDefaultArg(OldParam->getInit());
    433           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
    434           Invalid = false;
    435         }
    436       }
    437 
    438       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
    439       // hint here. Alternatively, we could walk the type-source information
    440       // for NewParam to find the last source location in the type... but it
    441       // isn't worth the effort right now. This is the kind of test case that
    442       // is hard to get right:
    443       //   int f(int);
    444       //   void g(int (*fp)(int) = f);
    445       //   void g(int (*fp)(int) = &f);
    446       Diag(NewParam->getLocation(), DiagDefaultParamID)
    447         << NewParam->getDefaultArgRange();
    448 
    449       // Look for the function declaration where the default argument was
    450       // actually written, which may be a declaration prior to Old.
    451       for (FunctionDecl *Older = Old->getPreviousDecl();
    452            Older; Older = Older->getPreviousDecl()) {
    453         if (!Older->getParamDecl(p)->hasDefaultArg())
    454           break;
    455 
    456         OldParam = Older->getParamDecl(p);
    457       }
    458 
    459       Diag(OldParam->getLocation(), diag::note_previous_definition)
    460         << OldParam->getDefaultArgRange();
    461     } else if (OldParamHasDfl) {
    462       // Merge the old default argument into the new parameter.
    463       // It's important to use getInit() here;  getDefaultArg()
    464       // strips off any top-level ExprWithCleanups.
    465       NewParam->setHasInheritedDefaultArg();
    466       if (OldParam->hasUninstantiatedDefaultArg())
    467         NewParam->setUninstantiatedDefaultArg(
    468                                       OldParam->getUninstantiatedDefaultArg());
    469       else
    470         NewParam->setDefaultArg(OldParam->getInit());
    471     } else if (NewParamHasDfl) {
    472       if (New->getDescribedFunctionTemplate()) {
    473         // Paragraph 4, quoted above, only applies to non-template functions.
    474         Diag(NewParam->getLocation(),
    475              diag::err_param_default_argument_template_redecl)
    476           << NewParam->getDefaultArgRange();
    477         Diag(Old->getLocation(), diag::note_template_prev_declaration)
    478           << false;
    479       } else if (New->getTemplateSpecializationKind()
    480                    != TSK_ImplicitInstantiation &&
    481                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
    482         // C++ [temp.expr.spec]p21:
    483         //   Default function arguments shall not be specified in a declaration
    484         //   or a definition for one of the following explicit specializations:
    485         //     - the explicit specialization of a function template;
    486         //     - the explicit specialization of a member function template;
    487         //     - the explicit specialization of a member function of a class
    488         //       template where the class template specialization to which the
    489         //       member function specialization belongs is implicitly
    490         //       instantiated.
    491         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
    492           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
    493           << New->getDeclName()
    494           << NewParam->getDefaultArgRange();
    495       } else if (New->getDeclContext()->isDependentContext()) {
    496         // C++ [dcl.fct.default]p6 (DR217):
    497         //   Default arguments for a member function of a class template shall
    498         //   be specified on the initial declaration of the member function
    499         //   within the class template.
    500         //
    501         // Reading the tea leaves a bit in DR217 and its reference to DR205
    502         // leads me to the conclusion that one cannot add default function
    503         // arguments for an out-of-line definition of a member function of a
    504         // dependent type.
    505         int WhichKind = 2;
    506         if (CXXRecordDecl *Record
    507               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
    508           if (Record->getDescribedClassTemplate())
    509             WhichKind = 0;
    510           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
    511             WhichKind = 1;
    512           else
    513             WhichKind = 2;
    514         }
    515 
    516         Diag(NewParam->getLocation(),
    517              diag::err_param_default_argument_member_template_redecl)
    518           << WhichKind
    519           << NewParam->getDefaultArgRange();
    520       } else if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(New)) {
    521         CXXSpecialMember NewSM = getSpecialMember(Ctor),
    522                          OldSM = getSpecialMember(cast<CXXConstructorDecl>(Old));
    523         if (NewSM != OldSM) {
    524           Diag(NewParam->getLocation(),diag::warn_default_arg_makes_ctor_special)
    525             << NewParam->getDefaultArgRange() << NewSM;
    526           Diag(Old->getLocation(), diag::note_previous_declaration_special)
    527             << OldSM;
    528         }
    529       }
    530     }
    531   }
    532 
    533   // C++11 [dcl.constexpr]p1: If any declaration of a function or function
    534   // template has a constexpr specifier then all its declarations shall
    535   // contain the constexpr specifier.
    536   if (New->isConstexpr() != Old->isConstexpr()) {
    537     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
    538       << New << New->isConstexpr();
    539     Diag(Old->getLocation(), diag::note_previous_declaration);
    540     Invalid = true;
    541   }
    542 
    543   if (CheckEquivalentExceptionSpec(Old, New))
    544     Invalid = true;
    545 
    546   return Invalid;
    547 }
    548 
    549 /// \brief Merge the exception specifications of two variable declarations.
    550 ///
    551 /// This is called when there's a redeclaration of a VarDecl. The function
    552 /// checks if the redeclaration might have an exception specification and
    553 /// validates compatibility and merges the specs if necessary.
    554 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
    555   // Shortcut if exceptions are disabled.
    556   if (!getLangOpts().CXXExceptions)
    557     return;
    558 
    559   assert(Context.hasSameType(New->getType(), Old->getType()) &&
    560          "Should only be called if types are otherwise the same.");
    561 
    562   QualType NewType = New->getType();
    563   QualType OldType = Old->getType();
    564 
    565   // We're only interested in pointers and references to functions, as well
    566   // as pointers to member functions.
    567   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
    568     NewType = R->getPointeeType();
    569     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
    570   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
    571     NewType = P->getPointeeType();
    572     OldType = OldType->getAs<PointerType>()->getPointeeType();
    573   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
    574     NewType = M->getPointeeType();
    575     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
    576   }
    577 
    578   if (!NewType->isFunctionProtoType())
    579     return;
    580 
    581   // There's lots of special cases for functions. For function pointers, system
    582   // libraries are hopefully not as broken so that we don't need these
    583   // workarounds.
    584   if (CheckEquivalentExceptionSpec(
    585         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
    586         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
    587     New->setInvalidDecl();
    588   }
    589 }
    590 
    591 /// CheckCXXDefaultArguments - Verify that the default arguments for a
    592 /// function declaration are well-formed according to C++
    593 /// [dcl.fct.default].
    594 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
    595   unsigned NumParams = FD->getNumParams();
    596   unsigned p;
    597 
    598   bool IsLambda = FD->getOverloadedOperator() == OO_Call &&
    599                   isa<CXXMethodDecl>(FD) &&
    600                   cast<CXXMethodDecl>(FD)->getParent()->isLambda();
    601 
    602   // Find first parameter with a default argument
    603   for (p = 0; p < NumParams; ++p) {
    604     ParmVarDecl *Param = FD->getParamDecl(p);
    605     if (Param->hasDefaultArg()) {
    606       // C++11 [expr.prim.lambda]p5:
    607       //   [...] Default arguments (8.3.6) shall not be specified in the
    608       //   parameter-declaration-clause of a lambda-declarator.
    609       //
    610       // FIXME: Core issue 974 strikes this sentence, we only provide an
    611       // extension warning.
    612       if (IsLambda)
    613         Diag(Param->getLocation(), diag::ext_lambda_default_arguments)
    614           << Param->getDefaultArgRange();
    615       break;
    616     }
    617   }
    618 
    619   // C++ [dcl.fct.default]p4:
    620   //   In a given function declaration, all parameters
    621   //   subsequent to a parameter with a default argument shall
    622   //   have default arguments supplied in this or previous
    623   //   declarations. A default argument shall not be redefined
    624   //   by a later declaration (not even to the same value).
    625   unsigned LastMissingDefaultArg = 0;
    626   for (; p < NumParams; ++p) {
    627     ParmVarDecl *Param = FD->getParamDecl(p);
    628     if (!Param->hasDefaultArg()) {
    629       if (Param->isInvalidDecl())
    630         /* We already complained about this parameter. */;
    631       else if (Param->getIdentifier())
    632         Diag(Param->getLocation(),
    633              diag::err_param_default_argument_missing_name)
    634           << Param->getIdentifier();
    635       else
    636         Diag(Param->getLocation(),
    637              diag::err_param_default_argument_missing);
    638 
    639       LastMissingDefaultArg = p;
    640     }
    641   }
    642 
    643   if (LastMissingDefaultArg > 0) {
    644     // Some default arguments were missing. Clear out all of the
    645     // default arguments up to (and including) the last missing
    646     // default argument, so that we leave the function parameters
    647     // in a semantically valid state.
    648     for (p = 0; p <= LastMissingDefaultArg; ++p) {
    649       ParmVarDecl *Param = FD->getParamDecl(p);
    650       if (Param->hasDefaultArg()) {
    651         Param->setDefaultArg(0);
    652       }
    653     }
    654   }
    655 }
    656 
    657 // CheckConstexprParameterTypes - Check whether a function's parameter types
    658 // are all literal types. If so, return true. If not, produce a suitable
    659 // diagnostic and return false.
    660 static bool CheckConstexprParameterTypes(Sema &SemaRef,
    661                                          const FunctionDecl *FD) {
    662   unsigned ArgIndex = 0;
    663   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
    664   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
    665        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
    666     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
    667     SourceLocation ParamLoc = PD->getLocation();
    668     if (!(*i)->isDependentType() &&
    669         SemaRef.RequireLiteralType(ParamLoc, *i,
    670                             SemaRef.PDiag(diag::err_constexpr_non_literal_param)
    671                                      << ArgIndex+1 << PD->getSourceRange()
    672                                      << isa<CXXConstructorDecl>(FD)))
    673       return false;
    674   }
    675   return true;
    676 }
    677 
    678 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
    679 // the requirements of a constexpr function definition or a constexpr
    680 // constructor definition. If so, return true. If not, produce appropriate
    681 // diagnostics and return false.
    682 //
    683 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
    684 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
    685   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
    686   if (MD && MD->isInstance()) {
    687     // C++11 [dcl.constexpr]p4:
    688     //  The definition of a constexpr constructor shall satisfy the following
    689     //  constraints:
    690     //  - the class shall not have any virtual base classes;
    691     const CXXRecordDecl *RD = MD->getParent();
    692     if (RD->getNumVBases()) {
    693       Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
    694         << isa<CXXConstructorDecl>(NewFD) << RD->isStruct()
    695         << RD->getNumVBases();
    696       for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
    697              E = RD->vbases_end(); I != E; ++I)
    698         Diag(I->getLocStart(),
    699              diag::note_constexpr_virtual_base_here) << I->getSourceRange();
    700       return false;
    701     }
    702   }
    703 
    704   if (!isa<CXXConstructorDecl>(NewFD)) {
    705     // C++11 [dcl.constexpr]p3:
    706     //  The definition of a constexpr function shall satisfy the following
    707     //  constraints:
    708     // - it shall not be virtual;
    709     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
    710     if (Method && Method->isVirtual()) {
    711       Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
    712 
    713       // If it's not obvious why this function is virtual, find an overridden
    714       // function which uses the 'virtual' keyword.
    715       const CXXMethodDecl *WrittenVirtual = Method;
    716       while (!WrittenVirtual->isVirtualAsWritten())
    717         WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
    718       if (WrittenVirtual != Method)
    719         Diag(WrittenVirtual->getLocation(),
    720              diag::note_overridden_virtual_function);
    721       return false;
    722     }
    723 
    724     // - its return type shall be a literal type;
    725     QualType RT = NewFD->getResultType();
    726     if (!RT->isDependentType() &&
    727         RequireLiteralType(NewFD->getLocation(), RT,
    728                            PDiag(diag::err_constexpr_non_literal_return)))
    729       return false;
    730   }
    731 
    732   // - each of its parameter types shall be a literal type;
    733   if (!CheckConstexprParameterTypes(*this, NewFD))
    734     return false;
    735 
    736   return true;
    737 }
    738 
    739 /// Check the given declaration statement is legal within a constexpr function
    740 /// body. C++0x [dcl.constexpr]p3,p4.
    741 ///
    742 /// \return true if the body is OK, false if we have diagnosed a problem.
    743 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
    744                                    DeclStmt *DS) {
    745   // C++0x [dcl.constexpr]p3 and p4:
    746   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
    747   //  contain only
    748   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
    749          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
    750     switch ((*DclIt)->getKind()) {
    751     case Decl::StaticAssert:
    752     case Decl::Using:
    753     case Decl::UsingShadow:
    754     case Decl::UsingDirective:
    755     case Decl::UnresolvedUsingTypename:
    756       //   - static_assert-declarations
    757       //   - using-declarations,
    758       //   - using-directives,
    759       continue;
    760 
    761     case Decl::Typedef:
    762     case Decl::TypeAlias: {
    763       //   - typedef declarations and alias-declarations that do not define
    764       //     classes or enumerations,
    765       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
    766       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
    767         // Don't allow variably-modified types in constexpr functions.
    768         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
    769         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
    770           << TL.getSourceRange() << TL.getType()
    771           << isa<CXXConstructorDecl>(Dcl);
    772         return false;
    773       }
    774       continue;
    775     }
    776 
    777     case Decl::Enum:
    778     case Decl::CXXRecord:
    779       // As an extension, we allow the declaration (but not the definition) of
    780       // classes and enumerations in all declarations, not just in typedef and
    781       // alias declarations.
    782       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition()) {
    783         SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_type_definition)
    784           << isa<CXXConstructorDecl>(Dcl);
    785         return false;
    786       }
    787       continue;
    788 
    789     case Decl::Var:
    790       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_var_declaration)
    791         << isa<CXXConstructorDecl>(Dcl);
    792       return false;
    793 
    794     default:
    795       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
    796         << isa<CXXConstructorDecl>(Dcl);
    797       return false;
    798     }
    799   }
    800 
    801   return true;
    802 }
    803 
    804 /// Check that the given field is initialized within a constexpr constructor.
    805 ///
    806 /// \param Dcl The constexpr constructor being checked.
    807 /// \param Field The field being checked. This may be a member of an anonymous
    808 ///        struct or union nested within the class being checked.
    809 /// \param Inits All declarations, including anonymous struct/union members and
    810 ///        indirect members, for which any initialization was provided.
    811 /// \param Diagnosed Set to true if an error is produced.
    812 static void CheckConstexprCtorInitializer(Sema &SemaRef,
    813                                           const FunctionDecl *Dcl,
    814                                           FieldDecl *Field,
    815                                           llvm::SmallSet<Decl*, 16> &Inits,
    816                                           bool &Diagnosed) {
    817   if (Field->isUnnamedBitfield())
    818     return;
    819 
    820   if (Field->isAnonymousStructOrUnion() &&
    821       Field->getType()->getAsCXXRecordDecl()->isEmpty())
    822     return;
    823 
    824   if (!Inits.count(Field)) {
    825     if (!Diagnosed) {
    826       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
    827       Diagnosed = true;
    828     }
    829     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
    830   } else if (Field->isAnonymousStructOrUnion()) {
    831     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
    832     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
    833          I != E; ++I)
    834       // If an anonymous union contains an anonymous struct of which any member
    835       // is initialized, all members must be initialized.
    836       if (!RD->isUnion() || Inits.count(*I))
    837         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
    838   }
    839 }
    840 
    841 /// Check the body for the given constexpr function declaration only contains
    842 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
    843 ///
    844 /// \return true if the body is OK, false if we have diagnosed a problem.
    845 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
    846   if (isa<CXXTryStmt>(Body)) {
    847     // C++11 [dcl.constexpr]p3:
    848     //  The definition of a constexpr function shall satisfy the following
    849     //  constraints: [...]
    850     // - its function-body shall be = delete, = default, or a
    851     //   compound-statement
    852     //
    853     // C++11 [dcl.constexpr]p4:
    854     //  In the definition of a constexpr constructor, [...]
    855     // - its function-body shall not be a function-try-block;
    856     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
    857       << isa<CXXConstructorDecl>(Dcl);
    858     return false;
    859   }
    860 
    861   // - its function-body shall be [...] a compound-statement that contains only
    862   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
    863 
    864   llvm::SmallVector<SourceLocation, 4> ReturnStmts;
    865   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
    866          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
    867     switch ((*BodyIt)->getStmtClass()) {
    868     case Stmt::NullStmtClass:
    869       //   - null statements,
    870       continue;
    871 
    872     case Stmt::DeclStmtClass:
    873       //   - static_assert-declarations
    874       //   - using-declarations,
    875       //   - using-directives,
    876       //   - typedef declarations and alias-declarations that do not define
    877       //     classes or enumerations,
    878       if (!CheckConstexprDeclStmt(*this, Dcl, cast<DeclStmt>(*BodyIt)))
    879         return false;
    880       continue;
    881 
    882     case Stmt::ReturnStmtClass:
    883       //   - and exactly one return statement;
    884       if (isa<CXXConstructorDecl>(Dcl))
    885         break;
    886 
    887       ReturnStmts.push_back((*BodyIt)->getLocStart());
    888       continue;
    889 
    890     default:
    891       break;
    892     }
    893 
    894     Diag((*BodyIt)->getLocStart(), diag::err_constexpr_body_invalid_stmt)
    895       << isa<CXXConstructorDecl>(Dcl);
    896     return false;
    897   }
    898 
    899   if (const CXXConstructorDecl *Constructor
    900         = dyn_cast<CXXConstructorDecl>(Dcl)) {
    901     const CXXRecordDecl *RD = Constructor->getParent();
    902     // DR1359:
    903     // - every non-variant non-static data member and base class sub-object
    904     //   shall be initialized;
    905     // - if the class is a non-empty union, or for each non-empty anonymous
    906     //   union member of a non-union class, exactly one non-static data member
    907     //   shall be initialized;
    908     if (RD->isUnion()) {
    909       if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
    910         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
    911         return false;
    912       }
    913     } else if (!Constructor->isDependentContext() &&
    914                !Constructor->isDelegatingConstructor()) {
    915       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
    916 
    917       // Skip detailed checking if we have enough initializers, and we would
    918       // allow at most one initializer per member.
    919       bool AnyAnonStructUnionMembers = false;
    920       unsigned Fields = 0;
    921       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
    922            E = RD->field_end(); I != E; ++I, ++Fields) {
    923         if ((*I)->isAnonymousStructOrUnion()) {
    924           AnyAnonStructUnionMembers = true;
    925           break;
    926         }
    927       }
    928       if (AnyAnonStructUnionMembers ||
    929           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
    930         // Check initialization of non-static data members. Base classes are
    931         // always initialized so do not need to be checked. Dependent bases
    932         // might not have initializers in the member initializer list.
    933         llvm::SmallSet<Decl*, 16> Inits;
    934         for (CXXConstructorDecl::init_const_iterator
    935                I = Constructor->init_begin(), E = Constructor->init_end();
    936              I != E; ++I) {
    937           if (FieldDecl *FD = (*I)->getMember())
    938             Inits.insert(FD);
    939           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
    940             Inits.insert(ID->chain_begin(), ID->chain_end());
    941         }
    942 
    943         bool Diagnosed = false;
    944         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
    945              E = RD->field_end(); I != E; ++I)
    946           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
    947         if (Diagnosed)
    948           return false;
    949       }
    950     }
    951   } else {
    952     if (ReturnStmts.empty()) {
    953       Diag(Dcl->getLocation(), diag::err_constexpr_body_no_return);
    954       return false;
    955     }
    956     if (ReturnStmts.size() > 1) {
    957       Diag(ReturnStmts.back(), diag::err_constexpr_body_multiple_return);
    958       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
    959         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
    960       return false;
    961     }
    962   }
    963 
    964   // C++11 [dcl.constexpr]p5:
    965   //   if no function argument values exist such that the function invocation
    966   //   substitution would produce a constant expression, the program is
    967   //   ill-formed; no diagnostic required.
    968   // C++11 [dcl.constexpr]p3:
    969   //   - every constructor call and implicit conversion used in initializing the
    970   //     return value shall be one of those allowed in a constant expression.
    971   // C++11 [dcl.constexpr]p4:
    972   //   - every constructor involved in initializing non-static data members and
    973   //     base class sub-objects shall be a constexpr constructor.
    974   llvm::SmallVector<PartialDiagnosticAt, 8> Diags;
    975   if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
    976     Diag(Dcl->getLocation(), diag::err_constexpr_function_never_constant_expr)
    977       << isa<CXXConstructorDecl>(Dcl);
    978     for (size_t I = 0, N = Diags.size(); I != N; ++I)
    979       Diag(Diags[I].first, Diags[I].second);
    980     return false;
    981   }
    982 
    983   return true;
    984 }
    985 
    986 /// isCurrentClassName - Determine whether the identifier II is the
    987 /// name of the class type currently being defined. In the case of
    988 /// nested classes, this will only return true if II is the name of
    989 /// the innermost class.
    990 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
    991                               const CXXScopeSpec *SS) {
    992   assert(getLangOpts().CPlusPlus && "No class names in C!");
    993 
    994   CXXRecordDecl *CurDecl;
    995   if (SS && SS->isSet() && !SS->isInvalid()) {
    996     DeclContext *DC = computeDeclContext(*SS, true);
    997     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
    998   } else
    999     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
   1000 
   1001   if (CurDecl && CurDecl->getIdentifier())
   1002     return &II == CurDecl->getIdentifier();
   1003   else
   1004     return false;
   1005 }
   1006 
   1007 /// \brief Check the validity of a C++ base class specifier.
   1008 ///
   1009 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
   1010 /// and returns NULL otherwise.
   1011 CXXBaseSpecifier *
   1012 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
   1013                          SourceRange SpecifierRange,
   1014                          bool Virtual, AccessSpecifier Access,
   1015                          TypeSourceInfo *TInfo,
   1016                          SourceLocation EllipsisLoc) {
   1017   QualType BaseType = TInfo->getType();
   1018 
   1019   // C++ [class.union]p1:
   1020   //   A union shall not have base classes.
   1021   if (Class->isUnion()) {
   1022     Diag(Class->getLocation(), diag::err_base_clause_on_union)
   1023       << SpecifierRange;
   1024     return 0;
   1025   }
   1026 
   1027   if (EllipsisLoc.isValid() &&
   1028       !TInfo->getType()->containsUnexpandedParameterPack()) {
   1029     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   1030       << TInfo->getTypeLoc().getSourceRange();
   1031     EllipsisLoc = SourceLocation();
   1032   }
   1033 
   1034   if (BaseType->isDependentType())
   1035     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1036                                           Class->getTagKind() == TTK_Class,
   1037                                           Access, TInfo, EllipsisLoc);
   1038 
   1039   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
   1040 
   1041   // Base specifiers must be record types.
   1042   if (!BaseType->isRecordType()) {
   1043     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
   1044     return 0;
   1045   }
   1046 
   1047   // C++ [class.union]p1:
   1048   //   A union shall not be used as a base class.
   1049   if (BaseType->isUnionType()) {
   1050     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
   1051     return 0;
   1052   }
   1053 
   1054   // C++ [class.derived]p2:
   1055   //   The class-name in a base-specifier shall not be an incompletely
   1056   //   defined class.
   1057   if (RequireCompleteType(BaseLoc, BaseType,
   1058                           PDiag(diag::err_incomplete_base_class)
   1059                             << SpecifierRange)) {
   1060     Class->setInvalidDecl();
   1061     return 0;
   1062   }
   1063 
   1064   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
   1065   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
   1066   assert(BaseDecl && "Record type has no declaration");
   1067   BaseDecl = BaseDecl->getDefinition();
   1068   assert(BaseDecl && "Base type is not incomplete, but has no definition");
   1069   CXXRecordDecl * CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
   1070   assert(CXXBaseDecl && "Base type is not a C++ type");
   1071 
   1072   // C++ [class]p3:
   1073   //   If a class is marked final and it appears as a base-type-specifier in
   1074   //   base-clause, the program is ill-formed.
   1075   if (CXXBaseDecl->hasAttr<FinalAttr>()) {
   1076     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
   1077       << CXXBaseDecl->getDeclName();
   1078     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
   1079       << CXXBaseDecl->getDeclName();
   1080     return 0;
   1081   }
   1082 
   1083   if (BaseDecl->isInvalidDecl())
   1084     Class->setInvalidDecl();
   1085 
   1086   // Create the base specifier.
   1087   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1088                                         Class->getTagKind() == TTK_Class,
   1089                                         Access, TInfo, EllipsisLoc);
   1090 }
   1091 
   1092 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
   1093 /// one entry in the base class list of a class specifier, for
   1094 /// example:
   1095 ///    class foo : public bar, virtual private baz {
   1096 /// 'public bar' and 'virtual private baz' are each base-specifiers.
   1097 BaseResult
   1098 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
   1099                          bool Virtual, AccessSpecifier Access,
   1100                          ParsedType basetype, SourceLocation BaseLoc,
   1101                          SourceLocation EllipsisLoc) {
   1102   if (!classdecl)
   1103     return true;
   1104 
   1105   AdjustDeclIfTemplate(classdecl);
   1106   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
   1107   if (!Class)
   1108     return true;
   1109 
   1110   TypeSourceInfo *TInfo = 0;
   1111   GetTypeFromParser(basetype, &TInfo);
   1112 
   1113   if (EllipsisLoc.isInvalid() &&
   1114       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
   1115                                       UPPC_BaseType))
   1116     return true;
   1117 
   1118   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
   1119                                                       Virtual, Access, TInfo,
   1120                                                       EllipsisLoc))
   1121     return BaseSpec;
   1122 
   1123   return true;
   1124 }
   1125 
   1126 /// \brief Performs the actual work of attaching the given base class
   1127 /// specifiers to a C++ class.
   1128 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
   1129                                 unsigned NumBases) {
   1130  if (NumBases == 0)
   1131     return false;
   1132 
   1133   // Used to keep track of which base types we have already seen, so
   1134   // that we can properly diagnose redundant direct base types. Note
   1135   // that the key is always the unqualified canonical type of the base
   1136   // class.
   1137   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
   1138 
   1139   // Copy non-redundant base specifiers into permanent storage.
   1140   unsigned NumGoodBases = 0;
   1141   bool Invalid = false;
   1142   for (unsigned idx = 0; idx < NumBases; ++idx) {
   1143     QualType NewBaseType
   1144       = Context.getCanonicalType(Bases[idx]->getType());
   1145     NewBaseType = NewBaseType.getLocalUnqualifiedType();
   1146 
   1147     CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
   1148     if (KnownBase) {
   1149       // C++ [class.mi]p3:
   1150       //   A class shall not be specified as a direct base class of a
   1151       //   derived class more than once.
   1152       Diag(Bases[idx]->getLocStart(),
   1153            diag::err_duplicate_base_class)
   1154         << KnownBase->getType()
   1155         << Bases[idx]->getSourceRange();
   1156 
   1157       // Delete the duplicate base class specifier; we're going to
   1158       // overwrite its pointer later.
   1159       Context.Deallocate(Bases[idx]);
   1160 
   1161       Invalid = true;
   1162     } else {
   1163       // Okay, add this new base class.
   1164       KnownBase = Bases[idx];
   1165       Bases[NumGoodBases++] = Bases[idx];
   1166       if (const RecordType *Record = NewBaseType->getAs<RecordType>())
   1167         if (const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl()))
   1168           if (RD->hasAttr<WeakAttr>())
   1169             Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
   1170     }
   1171   }
   1172 
   1173   // Attach the remaining base class specifiers to the derived class.
   1174   Class->setBases(Bases, NumGoodBases);
   1175 
   1176   // Delete the remaining (good) base class specifiers, since their
   1177   // data has been copied into the CXXRecordDecl.
   1178   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
   1179     Context.Deallocate(Bases[idx]);
   1180 
   1181   return Invalid;
   1182 }
   1183 
   1184 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
   1185 /// class, after checking whether there are any duplicate base
   1186 /// classes.
   1187 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
   1188                                unsigned NumBases) {
   1189   if (!ClassDecl || !Bases || !NumBases)
   1190     return;
   1191 
   1192   AdjustDeclIfTemplate(ClassDecl);
   1193   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
   1194                        (CXXBaseSpecifier**)(Bases), NumBases);
   1195 }
   1196 
   1197 static CXXRecordDecl *GetClassForType(QualType T) {
   1198   if (const RecordType *RT = T->getAs<RecordType>())
   1199     return cast<CXXRecordDecl>(RT->getDecl());
   1200   else if (const InjectedClassNameType *ICT = T->getAs<InjectedClassNameType>())
   1201     return ICT->getDecl();
   1202   else
   1203     return 0;
   1204 }
   1205 
   1206 /// \brief Determine whether the type \p Derived is a C++ class that is
   1207 /// derived from the type \p Base.
   1208 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
   1209   if (!getLangOpts().CPlusPlus)
   1210     return false;
   1211 
   1212   CXXRecordDecl *DerivedRD = GetClassForType(Derived);
   1213   if (!DerivedRD)
   1214     return false;
   1215 
   1216   CXXRecordDecl *BaseRD = GetClassForType(Base);
   1217   if (!BaseRD)
   1218     return false;
   1219 
   1220   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
   1221   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
   1222 }
   1223 
   1224 /// \brief Determine whether the type \p Derived is a C++ class that is
   1225 /// derived from the type \p Base.
   1226 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
   1227   if (!getLangOpts().CPlusPlus)
   1228     return false;
   1229 
   1230   CXXRecordDecl *DerivedRD = GetClassForType(Derived);
   1231   if (!DerivedRD)
   1232     return false;
   1233 
   1234   CXXRecordDecl *BaseRD = GetClassForType(Base);
   1235   if (!BaseRD)
   1236     return false;
   1237 
   1238   return DerivedRD->isDerivedFrom(BaseRD, Paths);
   1239 }
   1240 
   1241 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
   1242                               CXXCastPath &BasePathArray) {
   1243   assert(BasePathArray.empty() && "Base path array must be empty!");
   1244   assert(Paths.isRecordingPaths() && "Must record paths!");
   1245 
   1246   const CXXBasePath &Path = Paths.front();
   1247 
   1248   // We first go backward and check if we have a virtual base.
   1249   // FIXME: It would be better if CXXBasePath had the base specifier for
   1250   // the nearest virtual base.
   1251   unsigned Start = 0;
   1252   for (unsigned I = Path.size(); I != 0; --I) {
   1253     if (Path[I - 1].Base->isVirtual()) {
   1254       Start = I - 1;
   1255       break;
   1256     }
   1257   }
   1258 
   1259   // Now add all bases.
   1260   for (unsigned I = Start, E = Path.size(); I != E; ++I)
   1261     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
   1262 }
   1263 
   1264 /// \brief Determine whether the given base path includes a virtual
   1265 /// base class.
   1266 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
   1267   for (CXXCastPath::const_iterator B = BasePath.begin(),
   1268                                 BEnd = BasePath.end();
   1269        B != BEnd; ++B)
   1270     if ((*B)->isVirtual())
   1271       return true;
   1272 
   1273   return false;
   1274 }
   1275 
   1276 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
   1277 /// conversion (where Derived and Base are class types) is
   1278 /// well-formed, meaning that the conversion is unambiguous (and
   1279 /// that all of the base classes are accessible). Returns true
   1280 /// and emits a diagnostic if the code is ill-formed, returns false
   1281 /// otherwise. Loc is the location where this routine should point to
   1282 /// if there is an error, and Range is the source range to highlight
   1283 /// if there is an error.
   1284 bool
   1285 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1286                                    unsigned InaccessibleBaseID,
   1287                                    unsigned AmbigiousBaseConvID,
   1288                                    SourceLocation Loc, SourceRange Range,
   1289                                    DeclarationName Name,
   1290                                    CXXCastPath *BasePath) {
   1291   // First, determine whether the path from Derived to Base is
   1292   // ambiguous. This is slightly more expensive than checking whether
   1293   // the Derived to Base conversion exists, because here we need to
   1294   // explore multiple paths to determine if there is an ambiguity.
   1295   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   1296                      /*DetectVirtual=*/false);
   1297   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
   1298   assert(DerivationOkay &&
   1299          "Can only be used with a derived-to-base conversion");
   1300   (void)DerivationOkay;
   1301 
   1302   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
   1303     if (InaccessibleBaseID) {
   1304       // Check that the base class can be accessed.
   1305       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
   1306                                    InaccessibleBaseID)) {
   1307         case AR_inaccessible:
   1308           return true;
   1309         case AR_accessible:
   1310         case AR_dependent:
   1311         case AR_delayed:
   1312           break;
   1313       }
   1314     }
   1315 
   1316     // Build a base path if necessary.
   1317     if (BasePath)
   1318       BuildBasePathArray(Paths, *BasePath);
   1319     return false;
   1320   }
   1321 
   1322   // We know that the derived-to-base conversion is ambiguous, and
   1323   // we're going to produce a diagnostic. Perform the derived-to-base
   1324   // search just one more time to compute all of the possible paths so
   1325   // that we can print them out. This is more expensive than any of
   1326   // the previous derived-to-base checks we've done, but at this point
   1327   // performance isn't as much of an issue.
   1328   Paths.clear();
   1329   Paths.setRecordingPaths(true);
   1330   bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
   1331   assert(StillOkay && "Can only be used with a derived-to-base conversion");
   1332   (void)StillOkay;
   1333 
   1334   // Build up a textual representation of the ambiguous paths, e.g.,
   1335   // D -> B -> A, that will be used to illustrate the ambiguous
   1336   // conversions in the diagnostic. We only print one of the paths
   1337   // to each base class subobject.
   1338   std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
   1339 
   1340   Diag(Loc, AmbigiousBaseConvID)
   1341   << Derived << Base << PathDisplayStr << Range << Name;
   1342   return true;
   1343 }
   1344 
   1345 bool
   1346 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1347                                    SourceLocation Loc, SourceRange Range,
   1348                                    CXXCastPath *BasePath,
   1349                                    bool IgnoreAccess) {
   1350   return CheckDerivedToBaseConversion(Derived, Base,
   1351                                       IgnoreAccess ? 0
   1352                                        : diag::err_upcast_to_inaccessible_base,
   1353                                       diag::err_ambiguous_derived_to_base_conv,
   1354                                       Loc, Range, DeclarationName(),
   1355                                       BasePath);
   1356 }
   1357 
   1358 
   1359 /// @brief Builds a string representing ambiguous paths from a
   1360 /// specific derived class to different subobjects of the same base
   1361 /// class.
   1362 ///
   1363 /// This function builds a string that can be used in error messages
   1364 /// to show the different paths that one can take through the
   1365 /// inheritance hierarchy to go from the derived class to different
   1366 /// subobjects of a base class. The result looks something like this:
   1367 /// @code
   1368 /// struct D -> struct B -> struct A
   1369 /// struct D -> struct C -> struct A
   1370 /// @endcode
   1371 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
   1372   std::string PathDisplayStr;
   1373   std::set<unsigned> DisplayedPaths;
   1374   for (CXXBasePaths::paths_iterator Path = Paths.begin();
   1375        Path != Paths.end(); ++Path) {
   1376     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
   1377       // We haven't displayed a path to this particular base
   1378       // class subobject yet.
   1379       PathDisplayStr += "\n    ";
   1380       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
   1381       for (CXXBasePath::const_iterator Element = Path->begin();
   1382            Element != Path->end(); ++Element)
   1383         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
   1384     }
   1385   }
   1386 
   1387   return PathDisplayStr;
   1388 }
   1389 
   1390 //===----------------------------------------------------------------------===//
   1391 // C++ class member Handling
   1392 //===----------------------------------------------------------------------===//
   1393 
   1394 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
   1395 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
   1396                                 SourceLocation ASLoc,
   1397                                 SourceLocation ColonLoc,
   1398                                 AttributeList *Attrs) {
   1399   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
   1400   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
   1401                                                   ASLoc, ColonLoc);
   1402   CurContext->addHiddenDecl(ASDecl);
   1403   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
   1404 }
   1405 
   1406 /// CheckOverrideControl - Check C++0x override control semantics.
   1407 void Sema::CheckOverrideControl(const Decl *D) {
   1408   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
   1409   if (!MD || !MD->isVirtual())
   1410     return;
   1411 
   1412   if (MD->isDependentContext())
   1413     return;
   1414 
   1415   // C++0x [class.virtual]p3:
   1416   //   If a virtual function is marked with the virt-specifier override and does
   1417   //   not override a member function of a base class,
   1418   //   the program is ill-formed.
   1419   bool HasOverriddenMethods =
   1420     MD->begin_overridden_methods() != MD->end_overridden_methods();
   1421   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods) {
   1422     Diag(MD->getLocation(),
   1423                  diag::err_function_marked_override_not_overriding)
   1424       << MD->getDeclName();
   1425     return;
   1426   }
   1427 }
   1428 
   1429 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
   1430 /// function overrides a virtual member function marked 'final', according to
   1431 /// C++0x [class.virtual]p3.
   1432 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
   1433                                                   const CXXMethodDecl *Old) {
   1434   if (!Old->hasAttr<FinalAttr>())
   1435     return false;
   1436 
   1437   Diag(New->getLocation(), diag::err_final_function_overridden)
   1438     << New->getDeclName();
   1439   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   1440   return true;
   1441 }
   1442 
   1443 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
   1444 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
   1445 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
   1446 /// one has been parsed, and 'HasDeferredInit' is true if an initializer is
   1447 /// present but parsing it has been deferred.
   1448 Decl *
   1449 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
   1450                                MultiTemplateParamsArg TemplateParameterLists,
   1451                                Expr *BW, const VirtSpecifiers &VS,
   1452                                bool HasDeferredInit) {
   1453   const DeclSpec &DS = D.getDeclSpec();
   1454   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   1455   DeclarationName Name = NameInfo.getName();
   1456   SourceLocation Loc = NameInfo.getLoc();
   1457 
   1458   // For anonymous bitfields, the location should point to the type.
   1459   if (Loc.isInvalid())
   1460     Loc = D.getLocStart();
   1461 
   1462   Expr *BitWidth = static_cast<Expr*>(BW);
   1463 
   1464   assert(isa<CXXRecordDecl>(CurContext));
   1465   assert(!DS.isFriendSpecified());
   1466 
   1467   bool isFunc = D.isDeclarationOfFunction();
   1468 
   1469   // C++ 9.2p6: A member shall not be declared to have automatic storage
   1470   // duration (auto, register) or with the extern storage-class-specifier.
   1471   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
   1472   // data members and cannot be applied to names declared const or static,
   1473   // and cannot be applied to reference members.
   1474   switch (DS.getStorageClassSpec()) {
   1475     case DeclSpec::SCS_unspecified:
   1476     case DeclSpec::SCS_typedef:
   1477     case DeclSpec::SCS_static:
   1478       // FALL THROUGH.
   1479       break;
   1480     case DeclSpec::SCS_mutable:
   1481       if (isFunc) {
   1482         if (DS.getStorageClassSpecLoc().isValid())
   1483           Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
   1484         else
   1485           Diag(DS.getThreadSpecLoc(), diag::err_mutable_function);
   1486 
   1487         // FIXME: It would be nicer if the keyword was ignored only for this
   1488         // declarator. Otherwise we could get follow-up errors.
   1489         D.getMutableDeclSpec().ClearStorageClassSpecs();
   1490       }
   1491       break;
   1492     default:
   1493       if (DS.getStorageClassSpecLoc().isValid())
   1494         Diag(DS.getStorageClassSpecLoc(),
   1495              diag::err_storageclass_invalid_for_member);
   1496       else
   1497         Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
   1498       D.getMutableDeclSpec().ClearStorageClassSpecs();
   1499   }
   1500 
   1501   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
   1502                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
   1503                       !isFunc);
   1504 
   1505   Decl *Member;
   1506   if (isInstField) {
   1507     CXXScopeSpec &SS = D.getCXXScopeSpec();
   1508 
   1509     // Data members must have identifiers for names.
   1510     if (Name.getNameKind() != DeclarationName::Identifier) {
   1511       Diag(Loc, diag::err_bad_variable_name)
   1512         << Name;
   1513       return 0;
   1514     }
   1515 
   1516     IdentifierInfo *II = Name.getAsIdentifierInfo();
   1517 
   1518     // Member field could not be with "template" keyword.
   1519     // So TemplateParameterLists should be empty in this case.
   1520     if (TemplateParameterLists.size()) {
   1521       TemplateParameterList* TemplateParams = TemplateParameterLists.get()[0];
   1522       if (TemplateParams->size()) {
   1523         // There is no such thing as a member field template.
   1524         Diag(D.getIdentifierLoc(), diag::err_template_member)
   1525             << II
   1526             << SourceRange(TemplateParams->getTemplateLoc(),
   1527                 TemplateParams->getRAngleLoc());
   1528       } else {
   1529         // There is an extraneous 'template<>' for this member.
   1530         Diag(TemplateParams->getTemplateLoc(),
   1531             diag::err_template_member_noparams)
   1532             << II
   1533             << SourceRange(TemplateParams->getTemplateLoc(),
   1534                 TemplateParams->getRAngleLoc());
   1535       }
   1536       return 0;
   1537     }
   1538 
   1539     if (SS.isSet() && !SS.isInvalid()) {
   1540       // The user provided a superfluous scope specifier inside a class
   1541       // definition:
   1542       //
   1543       // class X {
   1544       //   int X::member;
   1545       // };
   1546       if (DeclContext *DC = computeDeclContext(SS, false))
   1547         diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
   1548       else
   1549         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
   1550           << Name << SS.getRange();
   1551 
   1552       SS.clear();
   1553     }
   1554 
   1555     Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth,
   1556                          HasDeferredInit, AS);
   1557     assert(Member && "HandleField never returns null");
   1558   } else {
   1559     assert(!HasDeferredInit);
   1560 
   1561     Member = HandleDeclarator(S, D, move(TemplateParameterLists));
   1562     if (!Member) {
   1563       return 0;
   1564     }
   1565 
   1566     // Non-instance-fields can't have a bitfield.
   1567     if (BitWidth) {
   1568       if (Member->isInvalidDecl()) {
   1569         // don't emit another diagnostic.
   1570       } else if (isa<VarDecl>(Member)) {
   1571         // C++ 9.6p3: A bit-field shall not be a static member.
   1572         // "static member 'A' cannot be a bit-field"
   1573         Diag(Loc, diag::err_static_not_bitfield)
   1574           << Name << BitWidth->getSourceRange();
   1575       } else if (isa<TypedefDecl>(Member)) {
   1576         // "typedef member 'x' cannot be a bit-field"
   1577         Diag(Loc, diag::err_typedef_not_bitfield)
   1578           << Name << BitWidth->getSourceRange();
   1579       } else {
   1580         // A function typedef ("typedef int f(); f a;").
   1581         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
   1582         Diag(Loc, diag::err_not_integral_type_bitfield)
   1583           << Name << cast<ValueDecl>(Member)->getType()
   1584           << BitWidth->getSourceRange();
   1585       }
   1586 
   1587       BitWidth = 0;
   1588       Member->setInvalidDecl();
   1589     }
   1590 
   1591     Member->setAccess(AS);
   1592 
   1593     // If we have declared a member function template, set the access of the
   1594     // templated declaration as well.
   1595     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
   1596       FunTmpl->getTemplatedDecl()->setAccess(AS);
   1597   }
   1598 
   1599   if (VS.isOverrideSpecified()) {
   1600     CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
   1601     if (!MD || !MD->isVirtual()) {
   1602       Diag(Member->getLocStart(),
   1603            diag::override_keyword_only_allowed_on_virtual_member_functions)
   1604         << "override" << FixItHint::CreateRemoval(VS.getOverrideLoc());
   1605     } else
   1606       MD->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
   1607   }
   1608   if (VS.isFinalSpecified()) {
   1609     CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
   1610     if (!MD || !MD->isVirtual()) {
   1611       Diag(Member->getLocStart(),
   1612            diag::override_keyword_only_allowed_on_virtual_member_functions)
   1613       << "final" << FixItHint::CreateRemoval(VS.getFinalLoc());
   1614     } else
   1615       MD->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
   1616   }
   1617 
   1618   if (VS.getLastLocation().isValid()) {
   1619     // Update the end location of a method that has a virt-specifiers.
   1620     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
   1621       MD->setRangeEnd(VS.getLastLocation());
   1622   }
   1623 
   1624   CheckOverrideControl(Member);
   1625 
   1626   assert((Name || isInstField) && "No identifier for non-field ?");
   1627 
   1628   if (isInstField)
   1629     FieldCollector->Add(cast<FieldDecl>(Member));
   1630   return Member;
   1631 }
   1632 
   1633 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
   1634 /// in-class initializer for a non-static C++ class member, and after
   1635 /// instantiating an in-class initializer in a class template. Such actions
   1636 /// are deferred until the class is complete.
   1637 void
   1638 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation EqualLoc,
   1639                                        Expr *InitExpr) {
   1640   FieldDecl *FD = cast<FieldDecl>(D);
   1641 
   1642   if (!InitExpr) {
   1643     FD->setInvalidDecl();
   1644     FD->removeInClassInitializer();
   1645     return;
   1646   }
   1647 
   1648   if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
   1649     FD->setInvalidDecl();
   1650     FD->removeInClassInitializer();
   1651     return;
   1652   }
   1653 
   1654   ExprResult Init = InitExpr;
   1655   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
   1656     if (isa<InitListExpr>(InitExpr) && isStdInitializerList(FD->getType(), 0)) {
   1657       Diag(FD->getLocation(), diag::warn_dangling_std_initializer_list)
   1658         << /*at end of ctor*/1 << InitExpr->getSourceRange();
   1659     }
   1660     Expr **Inits = &InitExpr;
   1661     unsigned NumInits = 1;
   1662     InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
   1663     InitializationKind Kind = EqualLoc.isInvalid()
   1664         ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
   1665         : InitializationKind::CreateCopy(InitExpr->getLocStart(), EqualLoc);
   1666     InitializationSequence Seq(*this, Entity, Kind, Inits, NumInits);
   1667     Init = Seq.Perform(*this, Entity, Kind, MultiExprArg(Inits, NumInits));
   1668     if (Init.isInvalid()) {
   1669       FD->setInvalidDecl();
   1670       return;
   1671     }
   1672 
   1673     CheckImplicitConversions(Init.get(), EqualLoc);
   1674   }
   1675 
   1676   // C++0x [class.base.init]p7:
   1677   //   The initialization of each base and member constitutes a
   1678   //   full-expression.
   1679   Init = MaybeCreateExprWithCleanups(Init);
   1680   if (Init.isInvalid()) {
   1681     FD->setInvalidDecl();
   1682     return;
   1683   }
   1684 
   1685   InitExpr = Init.release();
   1686 
   1687   FD->setInClassInitializer(InitExpr);
   1688 }
   1689 
   1690 /// \brief Find the direct and/or virtual base specifiers that
   1691 /// correspond to the given base type, for use in base initialization
   1692 /// within a constructor.
   1693 static bool FindBaseInitializer(Sema &SemaRef,
   1694                                 CXXRecordDecl *ClassDecl,
   1695                                 QualType BaseType,
   1696                                 const CXXBaseSpecifier *&DirectBaseSpec,
   1697                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
   1698   // First, check for a direct base class.
   1699   DirectBaseSpec = 0;
   1700   for (CXXRecordDecl::base_class_const_iterator Base
   1701          = ClassDecl->bases_begin();
   1702        Base != ClassDecl->bases_end(); ++Base) {
   1703     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
   1704       // We found a direct base of this type. That's what we're
   1705       // initializing.
   1706       DirectBaseSpec = &*Base;
   1707       break;
   1708     }
   1709   }
   1710 
   1711   // Check for a virtual base class.
   1712   // FIXME: We might be able to short-circuit this if we know in advance that
   1713   // there are no virtual bases.
   1714   VirtualBaseSpec = 0;
   1715   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
   1716     // We haven't found a base yet; search the class hierarchy for a
   1717     // virtual base class.
   1718     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   1719                        /*DetectVirtual=*/false);
   1720     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
   1721                               BaseType, Paths)) {
   1722       for (CXXBasePaths::paths_iterator Path = Paths.begin();
   1723            Path != Paths.end(); ++Path) {
   1724         if (Path->back().Base->isVirtual()) {
   1725           VirtualBaseSpec = Path->back().Base;
   1726           break;
   1727         }
   1728       }
   1729     }
   1730   }
   1731 
   1732   return DirectBaseSpec || VirtualBaseSpec;
   1733 }
   1734 
   1735 /// \brief Handle a C++ member initializer using braced-init-list syntax.
   1736 MemInitResult
   1737 Sema::ActOnMemInitializer(Decl *ConstructorD,
   1738                           Scope *S,
   1739                           CXXScopeSpec &SS,
   1740                           IdentifierInfo *MemberOrBase,
   1741                           ParsedType TemplateTypeTy,
   1742                           const DeclSpec &DS,
   1743                           SourceLocation IdLoc,
   1744                           Expr *InitList,
   1745                           SourceLocation EllipsisLoc) {
   1746   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   1747                              DS, IdLoc, InitList,
   1748                              EllipsisLoc);
   1749 }
   1750 
   1751 /// \brief Handle a C++ member initializer using parentheses syntax.
   1752 MemInitResult
   1753 Sema::ActOnMemInitializer(Decl *ConstructorD,
   1754                           Scope *S,
   1755                           CXXScopeSpec &SS,
   1756                           IdentifierInfo *MemberOrBase,
   1757                           ParsedType TemplateTypeTy,
   1758                           const DeclSpec &DS,
   1759                           SourceLocation IdLoc,
   1760                           SourceLocation LParenLoc,
   1761                           Expr **Args, unsigned NumArgs,
   1762                           SourceLocation RParenLoc,
   1763                           SourceLocation EllipsisLoc) {
   1764   Expr *List = new (Context) ParenListExpr(Context, LParenLoc, Args, NumArgs,
   1765                                            RParenLoc);
   1766   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   1767                              DS, IdLoc, List, EllipsisLoc);
   1768 }
   1769 
   1770 namespace {
   1771 
   1772 // Callback to only accept typo corrections that can be a valid C++ member
   1773 // intializer: either a non-static field member or a base class.
   1774 class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
   1775  public:
   1776   explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
   1777       : ClassDecl(ClassDecl) {}
   1778 
   1779   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
   1780     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
   1781       if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
   1782         return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
   1783       else
   1784         return isa<TypeDecl>(ND);
   1785     }
   1786     return false;
   1787   }
   1788 
   1789  private:
   1790   CXXRecordDecl *ClassDecl;
   1791 };
   1792 
   1793 }
   1794 
   1795 /// \brief Handle a C++ member initializer.
   1796 MemInitResult
   1797 Sema::BuildMemInitializer(Decl *ConstructorD,
   1798                           Scope *S,
   1799                           CXXScopeSpec &SS,
   1800                           IdentifierInfo *MemberOrBase,
   1801                           ParsedType TemplateTypeTy,
   1802                           const DeclSpec &DS,
   1803                           SourceLocation IdLoc,
   1804                           Expr *Init,
   1805                           SourceLocation EllipsisLoc) {
   1806   if (!ConstructorD)
   1807     return true;
   1808 
   1809   AdjustDeclIfTemplate(ConstructorD);
   1810 
   1811   CXXConstructorDecl *Constructor
   1812     = dyn_cast<CXXConstructorDecl>(ConstructorD);
   1813   if (!Constructor) {
   1814     // The user wrote a constructor initializer on a function that is
   1815     // not a C++ constructor. Ignore the error for now, because we may
   1816     // have more member initializers coming; we'll diagnose it just
   1817     // once in ActOnMemInitializers.
   1818     return true;
   1819   }
   1820 
   1821   CXXRecordDecl *ClassDecl = Constructor->getParent();
   1822 
   1823   // C++ [class.base.init]p2:
   1824   //   Names in a mem-initializer-id are looked up in the scope of the
   1825   //   constructor's class and, if not found in that scope, are looked
   1826   //   up in the scope containing the constructor's definition.
   1827   //   [Note: if the constructor's class contains a member with the
   1828   //   same name as a direct or virtual base class of the class, a
   1829   //   mem-initializer-id naming the member or base class and composed
   1830   //   of a single identifier refers to the class member. A
   1831   //   mem-initializer-id for the hidden base class may be specified
   1832   //   using a qualified name. ]
   1833   if (!SS.getScopeRep() && !TemplateTypeTy) {
   1834     // Look for a member, first.
   1835     DeclContext::lookup_result Result
   1836       = ClassDecl->lookup(MemberOrBase);
   1837     if (Result.first != Result.second) {
   1838       ValueDecl *Member;
   1839       if ((Member = dyn_cast<FieldDecl>(*Result.first)) ||
   1840           (Member = dyn_cast<IndirectFieldDecl>(*Result.first))) {
   1841         if (EllipsisLoc.isValid())
   1842           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
   1843             << MemberOrBase
   1844             << SourceRange(IdLoc, Init->getSourceRange().getEnd());
   1845 
   1846         return BuildMemberInitializer(Member, Init, IdLoc);
   1847       }
   1848     }
   1849   }
   1850   // It didn't name a member, so see if it names a class.
   1851   QualType BaseType;
   1852   TypeSourceInfo *TInfo = 0;
   1853 
   1854   if (TemplateTypeTy) {
   1855     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
   1856   } else if (DS.getTypeSpecType() == TST_decltype) {
   1857     BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
   1858   } else {
   1859     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
   1860     LookupParsedName(R, S, &SS);
   1861 
   1862     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
   1863     if (!TyD) {
   1864       if (R.isAmbiguous()) return true;
   1865 
   1866       // We don't want access-control diagnostics here.
   1867       R.suppressDiagnostics();
   1868 
   1869       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
   1870         bool NotUnknownSpecialization = false;
   1871         DeclContext *DC = computeDeclContext(SS, false);
   1872         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
   1873           NotUnknownSpecialization = !Record->hasAnyDependentBases();
   1874 
   1875         if (!NotUnknownSpecialization) {
   1876           // When the scope specifier can refer to a member of an unknown
   1877           // specialization, we take it as a type name.
   1878           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
   1879                                        SS.getWithLocInContext(Context),
   1880                                        *MemberOrBase, IdLoc);
   1881           if (BaseType.isNull())
   1882             return true;
   1883 
   1884           R.clear();
   1885           R.setLookupName(MemberOrBase);
   1886         }
   1887       }
   1888 
   1889       // If no results were found, try to correct typos.
   1890       TypoCorrection Corr;
   1891       MemInitializerValidatorCCC Validator(ClassDecl);
   1892       if (R.empty() && BaseType.isNull() &&
   1893           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
   1894                               Validator, ClassDecl))) {
   1895         std::string CorrectedStr(Corr.getAsString(getLangOpts()));
   1896         std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
   1897         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
   1898           // We have found a non-static data member with a similar
   1899           // name to what was typed; complain and initialize that
   1900           // member.
   1901           Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   1902             << MemberOrBase << true << CorrectedQuotedStr
   1903             << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   1904           Diag(Member->getLocation(), diag::note_previous_decl)
   1905             << CorrectedQuotedStr;
   1906 
   1907           return BuildMemberInitializer(Member, Init, IdLoc);
   1908         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
   1909           const CXXBaseSpecifier *DirectBaseSpec;
   1910           const CXXBaseSpecifier *VirtualBaseSpec;
   1911           if (FindBaseInitializer(*this, ClassDecl,
   1912                                   Context.getTypeDeclType(Type),
   1913                                   DirectBaseSpec, VirtualBaseSpec)) {
   1914             // We have found a direct or virtual base class with a
   1915             // similar name to what was typed; complain and initialize
   1916             // that base class.
   1917             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   1918               << MemberOrBase << false << CorrectedQuotedStr
   1919               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   1920 
   1921             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
   1922                                                              : VirtualBaseSpec;
   1923             Diag(BaseSpec->getLocStart(),
   1924                  diag::note_base_class_specified_here)
   1925               << BaseSpec->getType()
   1926               << BaseSpec->getSourceRange();
   1927 
   1928             TyD = Type;
   1929           }
   1930         }
   1931       }
   1932 
   1933       if (!TyD && BaseType.isNull()) {
   1934         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
   1935           << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
   1936         return true;
   1937       }
   1938     }
   1939 
   1940     if (BaseType.isNull()) {
   1941       BaseType = Context.getTypeDeclType(TyD);
   1942       if (SS.isSet()) {
   1943         NestedNameSpecifier *Qualifier =
   1944           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   1945 
   1946         // FIXME: preserve source range information
   1947         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
   1948       }
   1949     }
   1950   }
   1951 
   1952   if (!TInfo)
   1953     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
   1954 
   1955   return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
   1956 }
   1957 
   1958 /// Checks a member initializer expression for cases where reference (or
   1959 /// pointer) members are bound to by-value parameters (or their addresses).
   1960 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
   1961                                                Expr *Init,
   1962                                                SourceLocation IdLoc) {
   1963   QualType MemberTy = Member->getType();
   1964 
   1965   // We only handle pointers and references currently.
   1966   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
   1967   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
   1968     return;
   1969 
   1970   const bool IsPointer = MemberTy->isPointerType();
   1971   if (IsPointer) {
   1972     if (const UnaryOperator *Op
   1973           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
   1974       // The only case we're worried about with pointers requires taking the
   1975       // address.
   1976       if (Op->getOpcode() != UO_AddrOf)
   1977         return;
   1978 
   1979       Init = Op->getSubExpr();
   1980     } else {
   1981       // We only handle address-of expression initializers for pointers.
   1982       return;
   1983     }
   1984   }
   1985 
   1986   if (isa<MaterializeTemporaryExpr>(Init->IgnoreParens())) {
   1987     // Taking the address of a temporary will be diagnosed as a hard error.
   1988     if (IsPointer)
   1989       return;
   1990 
   1991     S.Diag(Init->getExprLoc(), diag::warn_bind_ref_member_to_temporary)
   1992       << Member << Init->getSourceRange();
   1993   } else if (const DeclRefExpr *DRE
   1994                = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
   1995     // We only warn when referring to a non-reference parameter declaration.
   1996     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
   1997     if (!Parameter || Parameter->getType()->isReferenceType())
   1998       return;
   1999 
   2000     S.Diag(Init->getExprLoc(),
   2001            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
   2002                      : diag::warn_bind_ref_member_to_parameter)
   2003       << Member << Parameter << Init->getSourceRange();
   2004   } else {
   2005     // Other initializers are fine.
   2006     return;
   2007   }
   2008 
   2009   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
   2010     << (unsigned)IsPointer;
   2011 }
   2012 
   2013 /// Checks an initializer expression for use of uninitialized fields, such as
   2014 /// containing the field that is being initialized. Returns true if there is an
   2015 /// uninitialized field was used an updates the SourceLocation parameter; false
   2016 /// otherwise.
   2017 static bool InitExprContainsUninitializedFields(const Stmt *S,
   2018                                                 const ValueDecl *LhsField,
   2019                                                 SourceLocation *L) {
   2020   assert(isa<FieldDecl>(LhsField) || isa<IndirectFieldDecl>(LhsField));
   2021 
   2022   if (isa<CallExpr>(S)) {
   2023     // Do not descend into function calls or constructors, as the use
   2024     // of an uninitialized field may be valid. One would have to inspect
   2025     // the contents of the function/ctor to determine if it is safe or not.
   2026     // i.e. Pass-by-value is never safe, but pass-by-reference and pointers
   2027     // may be safe, depending on what the function/ctor does.
   2028     return false;
   2029   }
   2030   if (const MemberExpr *ME = dyn_cast<MemberExpr>(S)) {
   2031     const NamedDecl *RhsField = ME->getMemberDecl();
   2032 
   2033     if (const VarDecl *VD = dyn_cast<VarDecl>(RhsField)) {
   2034       // The member expression points to a static data member.
   2035       assert(VD->isStaticDataMember() &&
   2036              "Member points to non-static data member!");
   2037       (void)VD;
   2038       return false;
   2039     }
   2040 
   2041     if (isa<EnumConstantDecl>(RhsField)) {
   2042       // The member expression points to an enum.
   2043       return false;
   2044     }
   2045 
   2046     if (RhsField == LhsField) {
   2047       // Initializing a field with itself. Throw a warning.
   2048       // But wait; there are exceptions!
   2049       // Exception #1:  The field may not belong to this record.
   2050       // e.g. Foo(const Foo& rhs) : A(rhs.A) {}
   2051       const Expr *base = ME->getBase();
   2052       if (base != NULL && !isa<CXXThisExpr>(base->IgnoreParenCasts())) {
   2053         // Even though the field matches, it does not belong to this record.
   2054         return false;
   2055       }
   2056       // None of the exceptions triggered; return true to indicate an
   2057       // uninitialized field was used.
   2058       *L = ME->getMemberLoc();
   2059       return true;
   2060     }
   2061   } else if (isa<UnaryExprOrTypeTraitExpr>(S)) {
   2062     // sizeof/alignof doesn't reference contents, do not warn.
   2063     return false;
   2064   } else if (const UnaryOperator *UOE = dyn_cast<UnaryOperator>(S)) {
   2065     // address-of doesn't reference contents (the pointer may be dereferenced
   2066     // in the same expression but it would be rare; and weird).
   2067     if (UOE->getOpcode() == UO_AddrOf)
   2068       return false;
   2069   }
   2070   for (Stmt::const_child_range it = S->children(); it; ++it) {
   2071     if (!*it) {
   2072       // An expression such as 'member(arg ?: "")' may trigger this.
   2073       continue;
   2074     }
   2075     if (InitExprContainsUninitializedFields(*it, LhsField, L))
   2076       return true;
   2077   }
   2078   return false;
   2079 }
   2080 
   2081 MemInitResult
   2082 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
   2083                              SourceLocation IdLoc) {
   2084   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
   2085   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
   2086   assert((DirectMember || IndirectMember) &&
   2087          "Member must be a FieldDecl or IndirectFieldDecl");
   2088 
   2089   if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
   2090     return true;
   2091 
   2092   if (Member->isInvalidDecl())
   2093     return true;
   2094 
   2095   // Diagnose value-uses of fields to initialize themselves, e.g.
   2096   //   foo(foo)
   2097   // where foo is not also a parameter to the constructor.
   2098   // TODO: implement -Wuninitialized and fold this into that framework.
   2099   Expr **Args;
   2100   unsigned NumArgs;
   2101   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2102     Args = ParenList->getExprs();
   2103     NumArgs = ParenList->getNumExprs();
   2104   } else {
   2105     InitListExpr *InitList = cast<InitListExpr>(Init);
   2106     Args = InitList->getInits();
   2107     NumArgs = InitList->getNumInits();
   2108   }
   2109   for (unsigned i = 0; i < NumArgs; ++i) {
   2110     SourceLocation L;
   2111     if (InitExprContainsUninitializedFields(Args[i], Member, &L)) {
   2112       // FIXME: Return true in the case when other fields are used before being
   2113       // uninitialized. For example, let this field be the i'th field. When
   2114       // initializing the i'th field, throw a warning if any of the >= i'th
   2115       // fields are used, as they are not yet initialized.
   2116       // Right now we are only handling the case where the i'th field uses
   2117       // itself in its initializer.
   2118       Diag(L, diag::warn_field_is_uninit);
   2119     }
   2120   }
   2121 
   2122   SourceRange InitRange = Init->getSourceRange();
   2123 
   2124   if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
   2125     // Can't check initialization for a member of dependent type or when
   2126     // any of the arguments are type-dependent expressions.
   2127     DiscardCleanupsInEvaluationContext();
   2128   } else {
   2129     bool InitList = false;
   2130     if (isa<InitListExpr>(Init)) {
   2131       InitList = true;
   2132       Args = &Init;
   2133       NumArgs = 1;
   2134 
   2135       if (isStdInitializerList(Member->getType(), 0)) {
   2136         Diag(IdLoc, diag::warn_dangling_std_initializer_list)
   2137             << /*at end of ctor*/1 << InitRange;
   2138       }
   2139     }
   2140 
   2141     // Initialize the member.
   2142     InitializedEntity MemberEntity =
   2143       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
   2144                    : InitializedEntity::InitializeMember(IndirectMember, 0);
   2145     InitializationKind Kind =
   2146       InitList ? InitializationKind::CreateDirectList(IdLoc)
   2147                : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
   2148                                                   InitRange.getEnd());
   2149 
   2150     InitializationSequence InitSeq(*this, MemberEntity, Kind, Args, NumArgs);
   2151     ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind,
   2152                                             MultiExprArg(*this, Args, NumArgs),
   2153                                             0);
   2154     if (MemberInit.isInvalid())
   2155       return true;
   2156 
   2157     CheckImplicitConversions(MemberInit.get(),
   2158                              InitRange.getBegin());
   2159 
   2160     // C++0x [class.base.init]p7:
   2161     //   The initialization of each base and member constitutes a
   2162     //   full-expression.
   2163     MemberInit = MaybeCreateExprWithCleanups(MemberInit);
   2164     if (MemberInit.isInvalid())
   2165       return true;
   2166 
   2167     // If we are in a dependent context, template instantiation will
   2168     // perform this type-checking again. Just save the arguments that we
   2169     // received.
   2170     // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2171     // of the information that we have about the member
   2172     // initializer. However, deconstructing the ASTs is a dicey process,
   2173     // and this approach is far more likely to get the corner cases right.
   2174     if (CurContext->isDependentContext()) {
   2175       // The existing Init will do fine.
   2176     } else {
   2177       Init = MemberInit.get();
   2178       CheckForDanglingReferenceOrPointer(*this, Member, Init, IdLoc);
   2179     }
   2180   }
   2181 
   2182   if (DirectMember) {
   2183     return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
   2184                                             InitRange.getBegin(), Init,
   2185                                             InitRange.getEnd());
   2186   } else {
   2187     return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
   2188                                             InitRange.getBegin(), Init,
   2189                                             InitRange.getEnd());
   2190   }
   2191 }
   2192 
   2193 MemInitResult
   2194 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
   2195                                  CXXRecordDecl *ClassDecl) {
   2196   SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2197   if (!LangOpts.CPlusPlus0x)
   2198     return Diag(NameLoc, diag::err_delegating_ctor)
   2199       << TInfo->getTypeLoc().getLocalSourceRange();
   2200   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
   2201 
   2202   bool InitList = true;
   2203   Expr **Args = &Init;
   2204   unsigned NumArgs = 1;
   2205   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2206     InitList = false;
   2207     Args = ParenList->getExprs();
   2208     NumArgs = ParenList->getNumExprs();
   2209   }
   2210 
   2211   SourceRange InitRange = Init->getSourceRange();
   2212   // Initialize the object.
   2213   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
   2214                                      QualType(ClassDecl->getTypeForDecl(), 0));
   2215   InitializationKind Kind =
   2216     InitList ? InitializationKind::CreateDirectList(NameLoc)
   2217              : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
   2218                                                 InitRange.getEnd());
   2219   InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args, NumArgs);
   2220   ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
   2221                                               MultiExprArg(*this, Args,NumArgs),
   2222                                               0);
   2223   if (DelegationInit.isInvalid())
   2224     return true;
   2225 
   2226   assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
   2227          "Delegating constructor with no target?");
   2228 
   2229   CheckImplicitConversions(DelegationInit.get(), InitRange.getBegin());
   2230 
   2231   // C++0x [class.base.init]p7:
   2232   //   The initialization of each base and member constitutes a
   2233   //   full-expression.
   2234   DelegationInit = MaybeCreateExprWithCleanups(DelegationInit);
   2235   if (DelegationInit.isInvalid())
   2236     return true;
   2237 
   2238   return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
   2239                                           DelegationInit.takeAs<Expr>(),
   2240                                           InitRange.getEnd());
   2241 }
   2242 
   2243 MemInitResult
   2244 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
   2245                            Expr *Init, CXXRecordDecl *ClassDecl,
   2246                            SourceLocation EllipsisLoc) {
   2247   SourceLocation BaseLoc
   2248     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2249 
   2250   if (!BaseType->isDependentType() && !BaseType->isRecordType())
   2251     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
   2252              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2253 
   2254   // C++ [class.base.init]p2:
   2255   //   [...] Unless the mem-initializer-id names a nonstatic data
   2256   //   member of the constructor's class or a direct or virtual base
   2257   //   of that class, the mem-initializer is ill-formed. A
   2258   //   mem-initializer-list can initialize a base class using any
   2259   //   name that denotes that base class type.
   2260   bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
   2261 
   2262   SourceRange InitRange = Init->getSourceRange();
   2263   if (EllipsisLoc.isValid()) {
   2264     // This is a pack expansion.
   2265     if (!BaseType->containsUnexpandedParameterPack())  {
   2266       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   2267         << SourceRange(BaseLoc, InitRange.getEnd());
   2268 
   2269       EllipsisLoc = SourceLocation();
   2270     }
   2271   } else {
   2272     // Check for any unexpanded parameter packs.
   2273     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
   2274       return true;
   2275 
   2276     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
   2277       return true;
   2278   }
   2279 
   2280   // Check for direct and virtual base classes.
   2281   const CXXBaseSpecifier *DirectBaseSpec = 0;
   2282   const CXXBaseSpecifier *VirtualBaseSpec = 0;
   2283   if (!Dependent) {
   2284     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
   2285                                        BaseType))
   2286       return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
   2287 
   2288     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
   2289                         VirtualBaseSpec);
   2290 
   2291     // C++ [base.class.init]p2:
   2292     // Unless the mem-initializer-id names a nonstatic data member of the
   2293     // constructor's class or a direct or virtual base of that class, the
   2294     // mem-initializer is ill-formed.
   2295     if (!DirectBaseSpec && !VirtualBaseSpec) {
   2296       // If the class has any dependent bases, then it's possible that
   2297       // one of those types will resolve to the same type as
   2298       // BaseType. Therefore, just treat this as a dependent base
   2299       // class initialization.  FIXME: Should we try to check the
   2300       // initialization anyway? It seems odd.
   2301       if (ClassDecl->hasAnyDependentBases())
   2302         Dependent = true;
   2303       else
   2304         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
   2305           << BaseType << Context.getTypeDeclType(ClassDecl)
   2306           << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2307     }
   2308   }
   2309 
   2310   if (Dependent) {
   2311     DiscardCleanupsInEvaluationContext();
   2312 
   2313     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2314                                             /*IsVirtual=*/false,
   2315                                             InitRange.getBegin(), Init,
   2316                                             InitRange.getEnd(), EllipsisLoc);
   2317   }
   2318 
   2319   // C++ [base.class.init]p2:
   2320   //   If a mem-initializer-id is ambiguous because it designates both
   2321   //   a direct non-virtual base class and an inherited virtual base
   2322   //   class, the mem-initializer is ill-formed.
   2323   if (DirectBaseSpec && VirtualBaseSpec)
   2324     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
   2325       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2326 
   2327   CXXBaseSpecifier *BaseSpec = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
   2328   if (!BaseSpec)
   2329     BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
   2330 
   2331   // Initialize the base.
   2332   bool InitList = true;
   2333   Expr **Args = &Init;
   2334   unsigned NumArgs = 1;
   2335   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
   2336     InitList = false;
   2337     Args = ParenList->getExprs();
   2338     NumArgs = ParenList->getNumExprs();
   2339   }
   2340 
   2341   InitializedEntity BaseEntity =
   2342     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
   2343   InitializationKind Kind =
   2344     InitList ? InitializationKind::CreateDirectList(BaseLoc)
   2345              : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
   2346                                                 InitRange.getEnd());
   2347   InitializationSequence InitSeq(*this, BaseEntity, Kind, Args, NumArgs);
   2348   ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind,
   2349                                           MultiExprArg(*this, Args, NumArgs),
   2350                                           0);
   2351   if (BaseInit.isInvalid())
   2352     return true;
   2353 
   2354   CheckImplicitConversions(BaseInit.get(), InitRange.getBegin());
   2355 
   2356   // C++0x [class.base.init]p7:
   2357   //   The initialization of each base and member constitutes a
   2358   //   full-expression.
   2359   BaseInit = MaybeCreateExprWithCleanups(BaseInit);
   2360   if (BaseInit.isInvalid())
   2361     return true;
   2362 
   2363   // If we are in a dependent context, template instantiation will
   2364   // perform this type-checking again. Just save the arguments that we
   2365   // received in a ParenListExpr.
   2366   // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2367   // of the information that we have about the base
   2368   // initializer. However, deconstructing the ASTs is a dicey process,
   2369   // and this approach is far more likely to get the corner cases right.
   2370   if (CurContext->isDependentContext())
   2371     BaseInit = Owned(Init);
   2372 
   2373   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2374                                           BaseSpec->isVirtual(),
   2375                                           InitRange.getBegin(),
   2376                                           BaseInit.takeAs<Expr>(),
   2377                                           InitRange.getEnd(), EllipsisLoc);
   2378 }
   2379 
   2380 // Create a static_cast\<T&&>(expr).
   2381 static Expr *CastForMoving(Sema &SemaRef, Expr *E) {
   2382   QualType ExprType = E->getType();
   2383   QualType TargetType = SemaRef.Context.getRValueReferenceType(ExprType);
   2384   SourceLocation ExprLoc = E->getLocStart();
   2385   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
   2386       TargetType, ExprLoc);
   2387 
   2388   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
   2389                                    SourceRange(ExprLoc, ExprLoc),
   2390                                    E->getSourceRange()).take();
   2391 }
   2392 
   2393 /// ImplicitInitializerKind - How an implicit base or member initializer should
   2394 /// initialize its base or member.
   2395 enum ImplicitInitializerKind {
   2396   IIK_Default,
   2397   IIK_Copy,
   2398   IIK_Move
   2399 };
   2400 
   2401 static bool
   2402 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2403                              ImplicitInitializerKind ImplicitInitKind,
   2404                              CXXBaseSpecifier *BaseSpec,
   2405                              bool IsInheritedVirtualBase,
   2406                              CXXCtorInitializer *&CXXBaseInit) {
   2407   InitializedEntity InitEntity
   2408     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
   2409                                         IsInheritedVirtualBase);
   2410 
   2411   ExprResult BaseInit;
   2412 
   2413   switch (ImplicitInitKind) {
   2414   case IIK_Default: {
   2415     InitializationKind InitKind
   2416       = InitializationKind::CreateDefault(Constructor->getLocation());
   2417     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
   2418     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
   2419                                MultiExprArg(SemaRef, 0, 0));
   2420     break;
   2421   }
   2422 
   2423   case IIK_Move:
   2424   case IIK_Copy: {
   2425     bool Moving = ImplicitInitKind == IIK_Move;
   2426     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2427     QualType ParamType = Param->getType().getNonReferenceType();
   2428 
   2429     Expr *CopyCtorArg =
   2430       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
   2431                           SourceLocation(), Param, false,
   2432                           Constructor->getLocation(), ParamType,
   2433                           VK_LValue, 0);
   2434 
   2435     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
   2436 
   2437     // Cast to the base class to avoid ambiguities.
   2438     QualType ArgTy =
   2439       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
   2440                                        ParamType.getQualifiers());
   2441 
   2442     if (Moving) {
   2443       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
   2444     }
   2445 
   2446     CXXCastPath BasePath;
   2447     BasePath.push_back(BaseSpec);
   2448     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
   2449                                             CK_UncheckedDerivedToBase,
   2450                                             Moving ? VK_XValue : VK_LValue,
   2451                                             &BasePath).take();
   2452 
   2453     InitializationKind InitKind
   2454       = InitializationKind::CreateDirect(Constructor->getLocation(),
   2455                                          SourceLocation(), SourceLocation());
   2456     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind,
   2457                                    &CopyCtorArg, 1);
   2458     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
   2459                                MultiExprArg(&CopyCtorArg, 1));
   2460     break;
   2461   }
   2462   }
   2463 
   2464   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
   2465   if (BaseInit.isInvalid())
   2466     return true;
   2467 
   2468   CXXBaseInit =
   2469     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2470                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
   2471                                                         SourceLocation()),
   2472                                              BaseSpec->isVirtual(),
   2473                                              SourceLocation(),
   2474                                              BaseInit.takeAs<Expr>(),
   2475                                              SourceLocation(),
   2476                                              SourceLocation());
   2477 
   2478   return false;
   2479 }
   2480 
   2481 static bool RefersToRValueRef(Expr *MemRef) {
   2482   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
   2483   return Referenced->getType()->isRValueReferenceType();
   2484 }
   2485 
   2486 static bool
   2487 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2488                                ImplicitInitializerKind ImplicitInitKind,
   2489                                FieldDecl *Field, IndirectFieldDecl *Indirect,
   2490                                CXXCtorInitializer *&CXXMemberInit) {
   2491   if (Field->isInvalidDecl())
   2492     return true;
   2493 
   2494   SourceLocation Loc = Constructor->getLocation();
   2495 
   2496   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
   2497     bool Moving = ImplicitInitKind == IIK_Move;
   2498     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2499     QualType ParamType = Param->getType().getNonReferenceType();
   2500 
   2501     // Suppress copying zero-width bitfields.
   2502     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
   2503       return false;
   2504 
   2505     Expr *MemberExprBase =
   2506       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
   2507                           SourceLocation(), Param, false,
   2508                           Loc, ParamType, VK_LValue, 0);
   2509 
   2510     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
   2511 
   2512     if (Moving) {
   2513       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
   2514     }
   2515 
   2516     // Build a reference to this field within the parameter.
   2517     CXXScopeSpec SS;
   2518     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
   2519                               Sema::LookupMemberName);
   2520     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
   2521                                   : cast<ValueDecl>(Field), AS_public);
   2522     MemberLookup.resolveKind();
   2523     ExprResult CtorArg
   2524       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
   2525                                          ParamType, Loc,
   2526                                          /*IsArrow=*/false,
   2527                                          SS,
   2528                                          /*TemplateKWLoc=*/SourceLocation(),
   2529                                          /*FirstQualifierInScope=*/0,
   2530                                          MemberLookup,
   2531                                          /*TemplateArgs=*/0);
   2532     if (CtorArg.isInvalid())
   2533       return true;
   2534 
   2535     // C++11 [class.copy]p15:
   2536     //   - if a member m has rvalue reference type T&&, it is direct-initialized
   2537     //     with static_cast<T&&>(x.m);
   2538     if (RefersToRValueRef(CtorArg.get())) {
   2539       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   2540     }
   2541 
   2542     // When the field we are copying is an array, create index variables for
   2543     // each dimension of the array. We use these index variables to subscript
   2544     // the source array, and other clients (e.g., CodeGen) will perform the
   2545     // necessary iteration with these index variables.
   2546     SmallVector<VarDecl *, 4> IndexVariables;
   2547     QualType BaseType = Field->getType();
   2548     QualType SizeType = SemaRef.Context.getSizeType();
   2549     bool InitializingArray = false;
   2550     while (const ConstantArrayType *Array
   2551                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
   2552       InitializingArray = true;
   2553       // Create the iteration variable for this array index.
   2554       IdentifierInfo *IterationVarName = 0;
   2555       {
   2556         SmallString<8> Str;
   2557         llvm::raw_svector_ostream OS(Str);
   2558         OS << "__i" << IndexVariables.size();
   2559         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
   2560       }
   2561       VarDecl *IterationVar
   2562         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
   2563                           IterationVarName, SizeType,
   2564                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   2565                           SC_None, SC_None);
   2566       IndexVariables.push_back(IterationVar);
   2567 
   2568       // Create a reference to the iteration variable.
   2569       ExprResult IterationVarRef
   2570         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
   2571       assert(!IterationVarRef.isInvalid() &&
   2572              "Reference to invented variable cannot fail!");
   2573       IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
   2574       assert(!IterationVarRef.isInvalid() &&
   2575              "Conversion of invented variable cannot fail!");
   2576 
   2577       // Subscript the array with this iteration variable.
   2578       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
   2579                                                         IterationVarRef.take(),
   2580                                                         Loc);
   2581       if (CtorArg.isInvalid())
   2582         return true;
   2583 
   2584       BaseType = Array->getElementType();
   2585     }
   2586 
   2587     // The array subscript expression is an lvalue, which is wrong for moving.
   2588     if (Moving && InitializingArray)
   2589       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   2590 
   2591     // Construct the entity that we will be initializing. For an array, this
   2592     // will be first element in the array, which may require several levels
   2593     // of array-subscript entities.
   2594     SmallVector<InitializedEntity, 4> Entities;
   2595     Entities.reserve(1 + IndexVariables.size());
   2596     if (Indirect)
   2597       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
   2598     else
   2599       Entities.push_back(InitializedEntity::InitializeMember(Field));
   2600     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
   2601       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
   2602                                                               0,
   2603                                                               Entities.back()));
   2604 
   2605     // Direct-initialize to use the copy constructor.
   2606     InitializationKind InitKind =
   2607       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
   2608 
   2609     Expr *CtorArgE = CtorArg.takeAs<Expr>();
   2610     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind,
   2611                                    &CtorArgE, 1);
   2612 
   2613     ExprResult MemberInit
   2614       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
   2615                         MultiExprArg(&CtorArgE, 1));
   2616     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   2617     if (MemberInit.isInvalid())
   2618       return true;
   2619 
   2620     if (Indirect) {
   2621       assert(IndexVariables.size() == 0 &&
   2622              "Indirect field improperly initialized");
   2623       CXXMemberInit
   2624         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   2625                                                    Loc, Loc,
   2626                                                    MemberInit.takeAs<Expr>(),
   2627                                                    Loc);
   2628     } else
   2629       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
   2630                                                  Loc, MemberInit.takeAs<Expr>(),
   2631                                                  Loc,
   2632                                                  IndexVariables.data(),
   2633                                                  IndexVariables.size());
   2634     return false;
   2635   }
   2636 
   2637   assert(ImplicitInitKind == IIK_Default && "Unhandled implicit init kind!");
   2638 
   2639   QualType FieldBaseElementType =
   2640     SemaRef.Context.getBaseElementType(Field->getType());
   2641 
   2642   if (FieldBaseElementType->isRecordType()) {
   2643     InitializedEntity InitEntity
   2644       = Indirect? InitializedEntity::InitializeMember(Indirect)
   2645                 : InitializedEntity::InitializeMember(Field);
   2646     InitializationKind InitKind =
   2647       InitializationKind::CreateDefault(Loc);
   2648 
   2649     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
   2650     ExprResult MemberInit =
   2651       InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg());
   2652 
   2653     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   2654     if (MemberInit.isInvalid())
   2655       return true;
   2656 
   2657     if (Indirect)
   2658       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2659                                                                Indirect, Loc,
   2660                                                                Loc,
   2661                                                                MemberInit.get(),
   2662                                                                Loc);
   2663     else
   2664       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2665                                                                Field, Loc, Loc,
   2666                                                                MemberInit.get(),
   2667                                                                Loc);
   2668     return false;
   2669   }
   2670 
   2671   if (!Field->getParent()->isUnion()) {
   2672     if (FieldBaseElementType->isReferenceType()) {
   2673       SemaRef.Diag(Constructor->getLocation(),
   2674                    diag::err_uninitialized_member_in_ctor)
   2675       << (int)Constructor->isImplicit()
   2676       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   2677       << 0 << Field->getDeclName();
   2678       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   2679       return true;
   2680     }
   2681 
   2682     if (FieldBaseElementType.isConstQualified()) {
   2683       SemaRef.Diag(Constructor->getLocation(),
   2684                    diag::err_uninitialized_member_in_ctor)
   2685       << (int)Constructor->isImplicit()
   2686       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   2687       << 1 << Field->getDeclName();
   2688       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   2689       return true;
   2690     }
   2691   }
   2692 
   2693   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
   2694       FieldBaseElementType->isObjCRetainableType() &&
   2695       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
   2696       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
   2697     // Instant objects:
   2698     //   Default-initialize Objective-C pointers to NULL.
   2699     CXXMemberInit
   2700       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   2701                                                  Loc, Loc,
   2702                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
   2703                                                  Loc);
   2704     return false;
   2705   }
   2706 
   2707   // Nothing to initialize.
   2708   CXXMemberInit = 0;
   2709   return false;
   2710 }
   2711 
   2712 namespace {
   2713 struct BaseAndFieldInfo {
   2714   Sema &S;
   2715   CXXConstructorDecl *Ctor;
   2716   bool AnyErrorsInInits;
   2717   ImplicitInitializerKind IIK;
   2718   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
   2719   SmallVector<CXXCtorInitializer*, 8> AllToInit;
   2720 
   2721   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
   2722     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
   2723     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
   2724     if (Generated && Ctor->isCopyConstructor())
   2725       IIK = IIK_Copy;
   2726     else if (Generated && Ctor->isMoveConstructor())
   2727       IIK = IIK_Move;
   2728     else
   2729       IIK = IIK_Default;
   2730   }
   2731 
   2732   bool isImplicitCopyOrMove() const {
   2733     switch (IIK) {
   2734     case IIK_Copy:
   2735     case IIK_Move:
   2736       return true;
   2737 
   2738     case IIK_Default:
   2739       return false;
   2740     }
   2741 
   2742     llvm_unreachable("Invalid ImplicitInitializerKind!");
   2743   }
   2744 };
   2745 }
   2746 
   2747 /// \brief Determine whether the given indirect field declaration is somewhere
   2748 /// within an anonymous union.
   2749 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
   2750   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
   2751                                       CEnd = F->chain_end();
   2752        C != CEnd; ++C)
   2753     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
   2754       if (Record->isUnion())
   2755         return true;
   2756 
   2757   return false;
   2758 }
   2759 
   2760 /// \brief Determine whether the given type is an incomplete or zero-lenfgth
   2761 /// array type.
   2762 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
   2763   if (T->isIncompleteArrayType())
   2764     return true;
   2765 
   2766   while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
   2767     if (!ArrayT->getSize())
   2768       return true;
   2769 
   2770     T = ArrayT->getElementType();
   2771   }
   2772 
   2773   return false;
   2774 }
   2775 
   2776 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
   2777                                     FieldDecl *Field,
   2778                                     IndirectFieldDecl *Indirect = 0) {
   2779 
   2780   // Overwhelmingly common case: we have a direct initializer for this field.
   2781   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field)) {
   2782     Info.AllToInit.push_back(Init);
   2783     return false;
   2784   }
   2785 
   2786   // C++0x [class.base.init]p8: if the entity is a non-static data member that
   2787   // has a brace-or-equal-initializer, the entity is initialized as specified
   2788   // in [dcl.init].
   2789   if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
   2790     CXXCtorInitializer *Init;
   2791     if (Indirect)
   2792       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   2793                                                       SourceLocation(),
   2794                                                       SourceLocation(), 0,
   2795                                                       SourceLocation());
   2796     else
   2797       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   2798                                                       SourceLocation(),
   2799                                                       SourceLocation(), 0,
   2800                                                       SourceLocation());
   2801     Info.AllToInit.push_back(Init);
   2802     return false;
   2803   }
   2804 
   2805   // Don't build an implicit initializer for union members if none was
   2806   // explicitly specified.
   2807   if (Field->getParent()->isUnion() ||
   2808       (Indirect && isWithinAnonymousUnion(Indirect)))
   2809     return false;
   2810 
   2811   // Don't initialize incomplete or zero-length arrays.
   2812   if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
   2813     return false;
   2814 
   2815   // Don't try to build an implicit initializer if there were semantic
   2816   // errors in any of the initializers (and therefore we might be
   2817   // missing some that the user actually wrote).
   2818   if (Info.AnyErrorsInInits || Field->isInvalidDecl())
   2819     return false;
   2820 
   2821   CXXCtorInitializer *Init = 0;
   2822   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
   2823                                      Indirect, Init))
   2824     return true;
   2825 
   2826   if (Init)
   2827     Info.AllToInit.push_back(Init);
   2828 
   2829   return false;
   2830 }
   2831 
   2832 bool
   2833 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
   2834                                CXXCtorInitializer *Initializer) {
   2835   assert(Initializer->isDelegatingInitializer());
   2836   Constructor->setNumCtorInitializers(1);
   2837   CXXCtorInitializer **initializer =
   2838     new (Context) CXXCtorInitializer*[1];
   2839   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
   2840   Constructor->setCtorInitializers(initializer);
   2841 
   2842   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
   2843     MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
   2844     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
   2845   }
   2846 
   2847   DelegatingCtorDecls.push_back(Constructor);
   2848 
   2849   return false;
   2850 }
   2851 
   2852 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor,
   2853                                CXXCtorInitializer **Initializers,
   2854                                unsigned NumInitializers,
   2855                                bool AnyErrors) {
   2856   if (Constructor->isDependentContext()) {
   2857     // Just store the initializers as written, they will be checked during
   2858     // instantiation.
   2859     if (NumInitializers > 0) {
   2860       Constructor->setNumCtorInitializers(NumInitializers);
   2861       CXXCtorInitializer **baseOrMemberInitializers =
   2862         new (Context) CXXCtorInitializer*[NumInitializers];
   2863       memcpy(baseOrMemberInitializers, Initializers,
   2864              NumInitializers * sizeof(CXXCtorInitializer*));
   2865       Constructor->setCtorInitializers(baseOrMemberInitializers);
   2866     }
   2867 
   2868     return false;
   2869   }
   2870 
   2871   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
   2872 
   2873   // We need to build the initializer AST according to order of construction
   2874   // and not what user specified in the Initializers list.
   2875   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
   2876   if (!ClassDecl)
   2877     return true;
   2878 
   2879   bool HadError = false;
   2880 
   2881   for (unsigned i = 0; i < NumInitializers; i++) {
   2882     CXXCtorInitializer *Member = Initializers[i];
   2883 
   2884     if (Member->isBaseInitializer())
   2885       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
   2886     else
   2887       Info.AllBaseFields[Member->getAnyMember()] = Member;
   2888   }
   2889 
   2890   // Keep track of the direct virtual bases.
   2891   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
   2892   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
   2893        E = ClassDecl->bases_end(); I != E; ++I) {
   2894     if (I->isVirtual())
   2895       DirectVBases.insert(I);
   2896   }
   2897 
   2898   // Push virtual bases before others.
   2899   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   2900        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   2901 
   2902     if (CXXCtorInitializer *Value
   2903         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
   2904       Info.AllToInit.push_back(Value);
   2905     } else if (!AnyErrors) {
   2906       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
   2907       CXXCtorInitializer *CXXBaseInit;
   2908       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   2909                                        VBase, IsInheritedVirtualBase,
   2910                                        CXXBaseInit)) {
   2911         HadError = true;
   2912         continue;
   2913       }
   2914 
   2915       Info.AllToInit.push_back(CXXBaseInit);
   2916     }
   2917   }
   2918 
   2919   // Non-virtual bases.
   2920   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   2921        E = ClassDecl->bases_end(); Base != E; ++Base) {
   2922     // Virtuals are in the virtual base list and already constructed.
   2923     if (Base->isVirtual())
   2924       continue;
   2925 
   2926     if (CXXCtorInitializer *Value
   2927           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
   2928       Info.AllToInit.push_back(Value);
   2929     } else if (!AnyErrors) {
   2930       CXXCtorInitializer *CXXBaseInit;
   2931       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   2932                                        Base, /*IsInheritedVirtualBase=*/false,
   2933                                        CXXBaseInit)) {
   2934         HadError = true;
   2935         continue;
   2936       }
   2937 
   2938       Info.AllToInit.push_back(CXXBaseInit);
   2939     }
   2940   }
   2941 
   2942   // Fields.
   2943   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
   2944                                MemEnd = ClassDecl->decls_end();
   2945        Mem != MemEnd; ++Mem) {
   2946     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
   2947       // C++ [class.bit]p2:
   2948       //   A declaration for a bit-field that omits the identifier declares an
   2949       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
   2950       //   initialized.
   2951       if (F->isUnnamedBitfield())
   2952         continue;
   2953 
   2954       // If we're not generating the implicit copy/move constructor, then we'll
   2955       // handle anonymous struct/union fields based on their individual
   2956       // indirect fields.
   2957       if (F->isAnonymousStructOrUnion() && Info.IIK == IIK_Default)
   2958         continue;
   2959 
   2960       if (CollectFieldInitializer(*this, Info, F))
   2961         HadError = true;
   2962       continue;
   2963     }
   2964 
   2965     // Beyond this point, we only consider default initialization.
   2966     if (Info.IIK != IIK_Default)
   2967       continue;
   2968 
   2969     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
   2970       if (F->getType()->isIncompleteArrayType()) {
   2971         assert(ClassDecl->hasFlexibleArrayMember() &&
   2972                "Incomplete array type is not valid");
   2973         continue;
   2974       }
   2975 
   2976       // Initialize each field of an anonymous struct individually.
   2977       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
   2978         HadError = true;
   2979 
   2980       continue;
   2981     }
   2982   }
   2983 
   2984   NumInitializers = Info.AllToInit.size();
   2985   if (NumInitializers > 0) {
   2986     Constructor->setNumCtorInitializers(NumInitializers);
   2987     CXXCtorInitializer **baseOrMemberInitializers =
   2988       new (Context) CXXCtorInitializer*[NumInitializers];
   2989     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
   2990            NumInitializers * sizeof(CXXCtorInitializer*));
   2991     Constructor->setCtorInitializers(baseOrMemberInitializers);
   2992 
   2993     // Constructors implicitly reference the base and member
   2994     // destructors.
   2995     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
   2996                                            Constructor->getParent());
   2997   }
   2998 
   2999   return HadError;
   3000 }
   3001 
   3002 static void *GetKeyForTopLevelField(FieldDecl *Field) {
   3003   // For anonymous unions, use the class declaration as the key.
   3004   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
   3005     if (RT->getDecl()->isAnonymousStructOrUnion())
   3006       return static_cast<void *>(RT->getDecl());
   3007   }
   3008   return static_cast<void *>(Field);
   3009 }
   3010 
   3011 static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
   3012   return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
   3013 }
   3014 
   3015 static void *GetKeyForMember(ASTContext &Context,
   3016                              CXXCtorInitializer *Member) {
   3017   if (!Member->isAnyMemberInitializer())
   3018     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
   3019 
   3020   // For fields injected into the class via declaration of an anonymous union,
   3021   // use its anonymous union class declaration as the unique key.
   3022   FieldDecl *Field = Member->getAnyMember();
   3023 
   3024   // If the field is a member of an anonymous struct or union, our key
   3025   // is the anonymous record decl that's a direct child of the class.
   3026   RecordDecl *RD = Field->getParent();
   3027   if (RD->isAnonymousStructOrUnion()) {
   3028     while (true) {
   3029       RecordDecl *Parent = cast<RecordDecl>(RD->getDeclContext());
   3030       if (Parent->isAnonymousStructOrUnion())
   3031         RD = Parent;
   3032       else
   3033         break;
   3034     }
   3035 
   3036     return static_cast<void *>(RD);
   3037   }
   3038 
   3039   return static_cast<void *>(Field);
   3040 }
   3041 
   3042 static void
   3043 DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef,
   3044                                   const CXXConstructorDecl *Constructor,
   3045                                   CXXCtorInitializer **Inits,
   3046                                   unsigned NumInits) {
   3047   if (Constructor->getDeclContext()->isDependentContext())
   3048     return;
   3049 
   3050   // Don't check initializers order unless the warning is enabled at the
   3051   // location of at least one initializer.
   3052   bool ShouldCheckOrder = false;
   3053   for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
   3054     CXXCtorInitializer *Init = Inits[InitIndex];
   3055     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
   3056                                          Init->getSourceLocation())
   3057           != DiagnosticsEngine::Ignored) {
   3058       ShouldCheckOrder = true;
   3059       break;
   3060     }
   3061   }
   3062   if (!ShouldCheckOrder)
   3063     return;
   3064 
   3065   // Build the list of bases and members in the order that they'll
   3066   // actually be initialized.  The explicit initializers should be in
   3067   // this same order but may be missing things.
   3068   SmallVector<const void*, 32> IdealInitKeys;
   3069 
   3070   const CXXRecordDecl *ClassDecl = Constructor->getParent();
   3071 
   3072   // 1. Virtual bases.
   3073   for (CXXRecordDecl::base_class_const_iterator VBase =
   3074        ClassDecl->vbases_begin(),
   3075        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
   3076     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
   3077 
   3078   // 2. Non-virtual bases.
   3079   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
   3080        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3081     if (Base->isVirtual())
   3082       continue;
   3083     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
   3084   }
   3085 
   3086   // 3. Direct fields.
   3087   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   3088        E = ClassDecl->field_end(); Field != E; ++Field) {
   3089     if (Field->isUnnamedBitfield())
   3090       continue;
   3091 
   3092     IdealInitKeys.push_back(GetKeyForTopLevelField(*Field));
   3093   }
   3094 
   3095   unsigned NumIdealInits = IdealInitKeys.size();
   3096   unsigned IdealIndex = 0;
   3097 
   3098   CXXCtorInitializer *PrevInit = 0;
   3099   for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
   3100     CXXCtorInitializer *Init = Inits[InitIndex];
   3101     void *InitKey = GetKeyForMember(SemaRef.Context, Init);
   3102 
   3103     // Scan forward to try to find this initializer in the idealized
   3104     // initializers list.
   3105     for (; IdealIndex != NumIdealInits; ++IdealIndex)
   3106       if (InitKey == IdealInitKeys[IdealIndex])
   3107         break;
   3108 
   3109     // If we didn't find this initializer, it must be because we
   3110     // scanned past it on a previous iteration.  That can only
   3111     // happen if we're out of order;  emit a warning.
   3112     if (IdealIndex == NumIdealInits && PrevInit) {
   3113       Sema::SemaDiagnosticBuilder D =
   3114         SemaRef.Diag(PrevInit->getSourceLocation(),
   3115                      diag::warn_initializer_out_of_order);
   3116 
   3117       if (PrevInit->isAnyMemberInitializer())
   3118         D << 0 << PrevInit->getAnyMember()->getDeclName();
   3119       else
   3120         D << 1 << PrevInit->getTypeSourceInfo()->getType();
   3121 
   3122       if (Init->isAnyMemberInitializer())
   3123         D << 0 << Init->getAnyMember()->getDeclName();
   3124       else
   3125         D << 1 << Init->getTypeSourceInfo()->getType();
   3126 
   3127       // Move back to the initializer's location in the ideal list.
   3128       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
   3129         if (InitKey == IdealInitKeys[IdealIndex])
   3130           break;
   3131 
   3132       assert(IdealIndex != NumIdealInits &&
   3133              "initializer not found in initializer list");
   3134     }
   3135 
   3136     PrevInit = Init;
   3137   }
   3138 }
   3139 
   3140 namespace {
   3141 bool CheckRedundantInit(Sema &S,
   3142                         CXXCtorInitializer *Init,
   3143                         CXXCtorInitializer *&PrevInit) {
   3144   if (!PrevInit) {
   3145     PrevInit = Init;
   3146     return false;
   3147   }
   3148 
   3149   if (FieldDecl *Field = Init->getMember())
   3150     S.Diag(Init->getSourceLocation(),
   3151            diag::err_multiple_mem_initialization)
   3152       << Field->getDeclName()
   3153       << Init->getSourceRange();
   3154   else {
   3155     const Type *BaseClass = Init->getBaseClass();
   3156     assert(BaseClass && "neither field nor base");
   3157     S.Diag(Init->getSourceLocation(),
   3158            diag::err_multiple_base_initialization)
   3159       << QualType(BaseClass, 0)
   3160       << Init->getSourceRange();
   3161   }
   3162   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
   3163     << 0 << PrevInit->getSourceRange();
   3164 
   3165   return true;
   3166 }
   3167 
   3168 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
   3169 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
   3170 
   3171 bool CheckRedundantUnionInit(Sema &S,
   3172                              CXXCtorInitializer *Init,
   3173                              RedundantUnionMap &Unions) {
   3174   FieldDecl *Field = Init->getAnyMember();
   3175   RecordDecl *Parent = Field->getParent();
   3176   NamedDecl *Child = Field;
   3177 
   3178   while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
   3179     if (Parent->isUnion()) {
   3180       UnionEntry &En = Unions[Parent];
   3181       if (En.first && En.first != Child) {
   3182         S.Diag(Init->getSourceLocation(),
   3183                diag::err_multiple_mem_union_initialization)
   3184           << Field->getDeclName()
   3185           << Init->getSourceRange();
   3186         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
   3187           << 0 << En.second->getSourceRange();
   3188         return true;
   3189       }
   3190       if (!En.first) {
   3191         En.first = Child;
   3192         En.second = Init;
   3193       }
   3194       if (!Parent->isAnonymousStructOrUnion())
   3195         return false;
   3196     }
   3197 
   3198     Child = Parent;
   3199     Parent = cast<RecordDecl>(Parent->getDeclContext());
   3200   }
   3201 
   3202   return false;
   3203 }
   3204 }
   3205 
   3206 /// ActOnMemInitializers - Handle the member initializers for a constructor.
   3207 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
   3208                                 SourceLocation ColonLoc,
   3209                                 CXXCtorInitializer **meminits,
   3210                                 unsigned NumMemInits,
   3211                                 bool AnyErrors) {
   3212   if (!ConstructorDecl)
   3213     return;
   3214 
   3215   AdjustDeclIfTemplate(ConstructorDecl);
   3216 
   3217   CXXConstructorDecl *Constructor
   3218     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
   3219 
   3220   if (!Constructor) {
   3221     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
   3222     return;
   3223   }
   3224 
   3225   CXXCtorInitializer **MemInits =
   3226     reinterpret_cast<CXXCtorInitializer **>(meminits);
   3227 
   3228   // Mapping for the duplicate initializers check.
   3229   // For member initializers, this is keyed with a FieldDecl*.
   3230   // For base initializers, this is keyed with a Type*.
   3231   llvm::DenseMap<void*, CXXCtorInitializer *> Members;
   3232 
   3233   // Mapping for the inconsistent anonymous-union initializers check.
   3234   RedundantUnionMap MemberUnions;
   3235 
   3236   bool HadError = false;
   3237   for (unsigned i = 0; i < NumMemInits; i++) {
   3238     CXXCtorInitializer *Init = MemInits[i];
   3239 
   3240     // Set the source order index.
   3241     Init->setSourceOrder(i);
   3242 
   3243     if (Init->isAnyMemberInitializer()) {
   3244       FieldDecl *Field = Init->getAnyMember();
   3245       if (CheckRedundantInit(*this, Init, Members[Field]) ||
   3246           CheckRedundantUnionInit(*this, Init, MemberUnions))
   3247         HadError = true;
   3248     } else if (Init->isBaseInitializer()) {
   3249       void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
   3250       if (CheckRedundantInit(*this, Init, Members[Key]))
   3251         HadError = true;
   3252     } else {
   3253       assert(Init->isDelegatingInitializer());
   3254       // This must be the only initializer
   3255       if (i != 0 || NumMemInits > 1) {
   3256         Diag(MemInits[0]->getSourceLocation(),
   3257              diag::err_delegating_initializer_alone)
   3258           << MemInits[0]->getSourceRange();
   3259         HadError = true;
   3260         // We will treat this as being the only initializer.
   3261       }
   3262       SetDelegatingInitializer(Constructor, MemInits[i]);
   3263       // Return immediately as the initializer is set.
   3264       return;
   3265     }
   3266   }
   3267 
   3268   if (HadError)
   3269     return;
   3270 
   3271   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
   3272 
   3273   SetCtorInitializers(Constructor, MemInits, NumMemInits, AnyErrors);
   3274 }
   3275 
   3276 void
   3277 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
   3278                                              CXXRecordDecl *ClassDecl) {
   3279   // Ignore dependent contexts. Also ignore unions, since their members never
   3280   // have destructors implicitly called.
   3281   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
   3282     return;
   3283 
   3284   // FIXME: all the access-control diagnostics are positioned on the
   3285   // field/base declaration.  That's probably good; that said, the
   3286   // user might reasonably want to know why the destructor is being
   3287   // emitted, and we currently don't say.
   3288 
   3289   // Non-static data members.
   3290   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
   3291        E = ClassDecl->field_end(); I != E; ++I) {
   3292     FieldDecl *Field = *I;
   3293     if (Field->isInvalidDecl())
   3294       continue;
   3295 
   3296     // Don't destroy incomplete or zero-length arrays.
   3297     if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
   3298       continue;
   3299 
   3300     QualType FieldType = Context.getBaseElementType(Field->getType());
   3301 
   3302     const RecordType* RT = FieldType->getAs<RecordType>();
   3303     if (!RT)
   3304       continue;
   3305 
   3306     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3307     if (FieldClassDecl->isInvalidDecl())
   3308       continue;
   3309     if (FieldClassDecl->hasIrrelevantDestructor())
   3310       continue;
   3311     // The destructor for an implicit anonymous union member is never invoked.
   3312     if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
   3313       continue;
   3314 
   3315     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
   3316     assert(Dtor && "No dtor found for FieldClassDecl!");
   3317     CheckDestructorAccess(Field->getLocation(), Dtor,
   3318                           PDiag(diag::err_access_dtor_field)
   3319                             << Field->getDeclName()
   3320                             << FieldType);
   3321 
   3322     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3323     DiagnoseUseOfDecl(Dtor, Location);
   3324   }
   3325 
   3326   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
   3327 
   3328   // Bases.
   3329   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   3330        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3331     // Bases are always records in a well-formed non-dependent class.
   3332     const RecordType *RT = Base->getType()->getAs<RecordType>();
   3333 
   3334     // Remember direct virtual bases.
   3335     if (Base->isVirtual())
   3336       DirectVirtualBases.insert(RT);
   3337 
   3338     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3339     // If our base class is invalid, we probably can't get its dtor anyway.
   3340     if (BaseClassDecl->isInvalidDecl())
   3341       continue;
   3342     if (BaseClassDecl->hasIrrelevantDestructor())
   3343       continue;
   3344 
   3345     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3346     assert(Dtor && "No dtor found for BaseClassDecl!");
   3347 
   3348     // FIXME: caret should be on the start of the class name
   3349     CheckDestructorAccess(Base->getLocStart(), Dtor,
   3350                           PDiag(diag::err_access_dtor_base)
   3351                             << Base->getType()
   3352                             << Base->getSourceRange(),
   3353                           Context.getTypeDeclType(ClassDecl));
   3354 
   3355     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3356     DiagnoseUseOfDecl(Dtor, Location);
   3357   }
   3358 
   3359   // Virtual bases.
   3360   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   3361        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   3362 
   3363     // Bases are always records in a well-formed non-dependent class.
   3364     const RecordType *RT = VBase->getType()->castAs<RecordType>();
   3365 
   3366     // Ignore direct virtual bases.
   3367     if (DirectVirtualBases.count(RT))
   3368       continue;
   3369 
   3370     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3371     // If our base class is invalid, we probably can't get its dtor anyway.
   3372     if (BaseClassDecl->isInvalidDecl())
   3373       continue;
   3374     if (BaseClassDecl->hasIrrelevantDestructor())
   3375       continue;
   3376 
   3377     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3378     assert(Dtor && "No dtor found for BaseClassDecl!");
   3379     CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
   3380                           PDiag(diag::err_access_dtor_vbase)
   3381                             << VBase->getType(),
   3382                           Context.getTypeDeclType(ClassDecl));
   3383 
   3384     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3385     DiagnoseUseOfDecl(Dtor, Location);
   3386   }
   3387 }
   3388 
   3389 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
   3390   if (!CDtorDecl)
   3391     return;
   3392 
   3393   if (CXXConstructorDecl *Constructor
   3394       = dyn_cast<CXXConstructorDecl>(CDtorDecl))
   3395     SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false);
   3396 }
   3397 
   3398 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3399                                   unsigned DiagID, AbstractDiagSelID SelID) {
   3400   if (SelID == -1)
   3401     return RequireNonAbstractType(Loc, T, PDiag(DiagID));
   3402   else
   3403     return RequireNonAbstractType(Loc, T, PDiag(DiagID) << SelID);
   3404 }
   3405 
   3406 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3407                                   const PartialDiagnostic &PD) {
   3408   if (!getLangOpts().CPlusPlus)
   3409     return false;
   3410 
   3411   if (const ArrayType *AT = Context.getAsArrayType(T))
   3412     return RequireNonAbstractType(Loc, AT->getElementType(), PD);
   3413 
   3414   if (const PointerType *PT = T->getAs<PointerType>()) {
   3415     // Find the innermost pointer type.
   3416     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
   3417       PT = T;
   3418 
   3419     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
   3420       return RequireNonAbstractType(Loc, AT->getElementType(), PD);
   3421   }
   3422 
   3423   const RecordType *RT = T->getAs<RecordType>();
   3424   if (!RT)
   3425     return false;
   3426 
   3427   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   3428 
   3429   // We can't answer whether something is abstract until it has a
   3430   // definition.  If it's currently being defined, we'll walk back
   3431   // over all the declarations when we have a full definition.
   3432   const CXXRecordDecl *Def = RD->getDefinition();
   3433   if (!Def || Def->isBeingDefined())
   3434     return false;
   3435 
   3436   if (!RD->isAbstract())
   3437     return false;
   3438 
   3439   Diag(Loc, PD) << RD->getDeclName();
   3440   DiagnoseAbstractType(RD);
   3441 
   3442   return true;
   3443 }
   3444 
   3445 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
   3446   // Check if we've already emitted the list of pure virtual functions
   3447   // for this class.
   3448   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
   3449     return;
   3450 
   3451   CXXFinalOverriderMap FinalOverriders;
   3452   RD->getFinalOverriders(FinalOverriders);
   3453 
   3454   // Keep a set of seen pure methods so we won't diagnose the same method
   3455   // more than once.
   3456   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
   3457 
   3458   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
   3459                                    MEnd = FinalOverriders.end();
   3460        M != MEnd;
   3461        ++M) {
   3462     for (OverridingMethods::iterator SO = M->second.begin(),
   3463                                   SOEnd = M->second.end();
   3464          SO != SOEnd; ++SO) {
   3465       // C++ [class.abstract]p4:
   3466       //   A class is abstract if it contains or inherits at least one
   3467       //   pure virtual function for which the final overrider is pure
   3468       //   virtual.
   3469 
   3470       //
   3471       if (SO->second.size() != 1)
   3472         continue;
   3473 
   3474       if (!SO->second.front().Method->isPure())
   3475         continue;
   3476 
   3477       if (!SeenPureMethods.insert(SO->second.front().Method))
   3478         continue;
   3479 
   3480       Diag(SO->second.front().Method->getLocation(),
   3481            diag::note_pure_virtual_function)
   3482         << SO->second.front().Method->getDeclName() << RD->getDeclName();
   3483     }
   3484   }
   3485 
   3486   if (!PureVirtualClassDiagSet)
   3487     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
   3488   PureVirtualClassDiagSet->insert(RD);
   3489 }
   3490 
   3491 namespace {
   3492 struct AbstractUsageInfo {
   3493   Sema &S;
   3494   CXXRecordDecl *Record;
   3495   CanQualType AbstractType;
   3496   bool Invalid;
   3497 
   3498   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
   3499     : S(S), Record(Record),
   3500       AbstractType(S.Context.getCanonicalType(
   3501                    S.Context.getTypeDeclType(Record))),
   3502       Invalid(false) {}
   3503 
   3504   void DiagnoseAbstractType() {
   3505     if (Invalid) return;
   3506     S.DiagnoseAbstractType(Record);
   3507     Invalid = true;
   3508   }
   3509 
   3510   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
   3511 };
   3512 
   3513 struct CheckAbstractUsage {
   3514   AbstractUsageInfo &Info;
   3515   const NamedDecl *Ctx;
   3516 
   3517   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
   3518     : Info(Info), Ctx(Ctx) {}
   3519 
   3520   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3521     switch (TL.getTypeLocClass()) {
   3522 #define ABSTRACT_TYPELOC(CLASS, PARENT)
   3523 #define TYPELOC(CLASS, PARENT) \
   3524     case TypeLoc::CLASS: Check(cast<CLASS##TypeLoc>(TL), Sel); break;
   3525 #include "clang/AST/TypeLocNodes.def"
   3526     }
   3527   }
   3528 
   3529   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3530     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
   3531     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   3532       if (!TL.getArg(I))
   3533         continue;
   3534 
   3535       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
   3536       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
   3537     }
   3538   }
   3539 
   3540   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3541     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
   3542   }
   3543 
   3544   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3545     // Visit the type parameters from a permissive context.
   3546     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   3547       TemplateArgumentLoc TAL = TL.getArgLoc(I);
   3548       if (TAL.getArgument().getKind() == TemplateArgument::Type)
   3549         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
   3550           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
   3551       // TODO: other template argument types?
   3552     }
   3553   }
   3554 
   3555   // Visit pointee types from a permissive context.
   3556 #define CheckPolymorphic(Type) \
   3557   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
   3558     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
   3559   }
   3560   CheckPolymorphic(PointerTypeLoc)
   3561   CheckPolymorphic(ReferenceTypeLoc)
   3562   CheckPolymorphic(MemberPointerTypeLoc)
   3563   CheckPolymorphic(BlockPointerTypeLoc)
   3564   CheckPolymorphic(AtomicTypeLoc)
   3565 
   3566   /// Handle all the types we haven't given a more specific
   3567   /// implementation for above.
   3568   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3569     // Every other kind of type that we haven't called out already
   3570     // that has an inner type is either (1) sugar or (2) contains that
   3571     // inner type in some way as a subobject.
   3572     if (TypeLoc Next = TL.getNextTypeLoc())
   3573       return Visit(Next, Sel);
   3574 
   3575     // If there's no inner type and we're in a permissive context,
   3576     // don't diagnose.
   3577     if (Sel == Sema::AbstractNone) return;
   3578 
   3579     // Check whether the type matches the abstract type.
   3580     QualType T = TL.getType();
   3581     if (T->isArrayType()) {
   3582       Sel = Sema::AbstractArrayType;
   3583       T = Info.S.Context.getBaseElementType(T);
   3584     }
   3585     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
   3586     if (CT != Info.AbstractType) return;
   3587 
   3588     // It matched; do some magic.
   3589     if (Sel == Sema::AbstractArrayType) {
   3590       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
   3591         << T << TL.getSourceRange();
   3592     } else {
   3593       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
   3594         << Sel << T << TL.getSourceRange();
   3595     }
   3596     Info.DiagnoseAbstractType();
   3597   }
   3598 };
   3599 
   3600 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
   3601                                   Sema::AbstractDiagSelID Sel) {
   3602   CheckAbstractUsage(*this, D).Visit(TL, Sel);
   3603 }
   3604 
   3605 }
   3606 
   3607 /// Check for invalid uses of an abstract type in a method declaration.
   3608 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   3609                                     CXXMethodDecl *MD) {
   3610   // No need to do the check on definitions, which require that
   3611   // the return/param types be complete.
   3612   if (MD->doesThisDeclarationHaveABody())
   3613     return;
   3614 
   3615   // For safety's sake, just ignore it if we don't have type source
   3616   // information.  This should never happen for non-implicit methods,
   3617   // but...
   3618   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
   3619     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
   3620 }
   3621 
   3622 /// Check for invalid uses of an abstract type within a class definition.
   3623 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   3624                                     CXXRecordDecl *RD) {
   3625   for (CXXRecordDecl::decl_iterator
   3626          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
   3627     Decl *D = *I;
   3628     if (D->isImplicit()) continue;
   3629 
   3630     // Methods and method templates.
   3631     if (isa<CXXMethodDecl>(D)) {
   3632       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
   3633     } else if (isa<FunctionTemplateDecl>(D)) {
   3634       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
   3635       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
   3636 
   3637     // Fields and static variables.
   3638     } else if (isa<FieldDecl>(D)) {
   3639       FieldDecl *FD = cast<FieldDecl>(D);
   3640       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
   3641         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
   3642     } else if (isa<VarDecl>(D)) {
   3643       VarDecl *VD = cast<VarDecl>(D);
   3644       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
   3645         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
   3646 
   3647     // Nested classes and class templates.
   3648     } else if (isa<CXXRecordDecl>(D)) {
   3649       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
   3650     } else if (isa<ClassTemplateDecl>(D)) {
   3651       CheckAbstractClassUsage(Info,
   3652                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
   3653     }
   3654   }
   3655 }
   3656 
   3657 /// \brief Perform semantic checks on a class definition that has been
   3658 /// completing, introducing implicitly-declared members, checking for
   3659 /// abstract types, etc.
   3660 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
   3661   if (!Record)
   3662     return;
   3663 
   3664   if (Record->isAbstract() && !Record->isInvalidDecl()) {
   3665     AbstractUsageInfo Info(*this, Record);
   3666     CheckAbstractClassUsage(Info, Record);
   3667   }
   3668 
   3669   // If this is not an aggregate type and has no user-declared constructor,
   3670   // complain about any non-static data members of reference or const scalar
   3671   // type, since they will never get initializers.
   3672   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
   3673       !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
   3674       !Record->isLambda()) {
   3675     bool Complained = false;
   3676     for (RecordDecl::field_iterator F = Record->field_begin(),
   3677                                  FEnd = Record->field_end();
   3678          F != FEnd; ++F) {
   3679       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
   3680         continue;
   3681 
   3682       if (F->getType()->isReferenceType() ||
   3683           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
   3684         if (!Complained) {
   3685           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
   3686             << Record->getTagKind() << Record;
   3687           Complained = true;
   3688         }
   3689 
   3690         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
   3691           << F->getType()->isReferenceType()
   3692           << F->getDeclName();
   3693       }
   3694     }
   3695   }
   3696 
   3697   if (Record->isDynamicClass() && !Record->isDependentType())
   3698     DynamicClasses.push_back(Record);
   3699 
   3700   if (Record->getIdentifier()) {
   3701     // C++ [class.mem]p13:
   3702     //   If T is the name of a class, then each of the following shall have a
   3703     //   name different from T:
   3704     //     - every member of every anonymous union that is a member of class T.
   3705     //
   3706     // C++ [class.mem]p14:
   3707     //   In addition, if class T has a user-declared constructor (12.1), every
   3708     //   non-static data member of class T shall have a name different from T.
   3709     for (DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
   3710          R.first != R.second; ++R.first) {
   3711       NamedDecl *D = *R.first;
   3712       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
   3713           isa<IndirectFieldDecl>(D)) {
   3714         Diag(D->getLocation(), diag::err_member_name_of_class)
   3715           << D->getDeclName();
   3716         break;
   3717       }
   3718     }
   3719   }
   3720 
   3721   // Warn if the class has virtual methods but non-virtual public destructor.
   3722   if (Record->isPolymorphic() && !Record->isDependentType()) {
   3723     CXXDestructorDecl *dtor = Record->getDestructor();
   3724     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
   3725       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
   3726            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
   3727   }
   3728 
   3729   // See if a method overloads virtual methods in a base
   3730   /// class without overriding any.
   3731   if (!Record->isDependentType()) {
   3732     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   3733                                      MEnd = Record->method_end();
   3734          M != MEnd; ++M) {
   3735       if (!(*M)->isStatic())
   3736         DiagnoseHiddenVirtualMethods(Record, *M);
   3737     }
   3738   }
   3739 
   3740   // C++0x [dcl.constexpr]p8: A constexpr specifier for a non-static member
   3741   // function that is not a constructor declares that member function to be
   3742   // const. [...] The class of which that function is a member shall be
   3743   // a literal type.
   3744   //
   3745   // If the class has virtual bases, any constexpr members will already have
   3746   // been diagnosed by the checks performed on the member declaration, so
   3747   // suppress this (less useful) diagnostic.
   3748   if (LangOpts.CPlusPlus0x && !Record->isDependentType() &&
   3749       !Record->isLiteral() && !Record->getNumVBases()) {
   3750     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   3751                                      MEnd = Record->method_end();
   3752          M != MEnd; ++M) {
   3753       if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
   3754         switch (Record->getTemplateSpecializationKind()) {
   3755         case TSK_ImplicitInstantiation:
   3756         case TSK_ExplicitInstantiationDeclaration:
   3757         case TSK_ExplicitInstantiationDefinition:
   3758           // If a template instantiates to a non-literal type, but its members
   3759           // instantiate to constexpr functions, the template is technically
   3760           // ill-formed, but we allow it for sanity.
   3761           continue;
   3762 
   3763         case TSK_Undeclared:
   3764         case TSK_ExplicitSpecialization:
   3765           RequireLiteralType((*M)->getLocation(), Context.getRecordType(Record),
   3766                              PDiag(diag::err_constexpr_method_non_literal));
   3767           break;
   3768         }
   3769 
   3770         // Only produce one error per class.
   3771         break;
   3772       }
   3773     }
   3774   }
   3775 
   3776   // Declare inherited constructors. We do this eagerly here because:
   3777   // - The standard requires an eager diagnostic for conflicting inherited
   3778   //   constructors from different classes.
   3779   // - The lazy declaration of the other implicit constructors is so as to not
   3780   //   waste space and performance on classes that are not meant to be
   3781   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
   3782   //   have inherited constructors.
   3783   DeclareInheritedConstructors(Record);
   3784 
   3785   if (!Record->isDependentType())
   3786     CheckExplicitlyDefaultedMethods(Record);
   3787 }
   3788 
   3789 void Sema::CheckExplicitlyDefaultedMethods(CXXRecordDecl *Record) {
   3790   for (CXXRecordDecl::method_iterator MI = Record->method_begin(),
   3791                                       ME = Record->method_end();
   3792        MI != ME; ++MI) {
   3793     if (!MI->isInvalidDecl() && MI->isExplicitlyDefaulted()) {
   3794       switch (getSpecialMember(*MI)) {
   3795       case CXXDefaultConstructor:
   3796         CheckExplicitlyDefaultedDefaultConstructor(
   3797                                                   cast<CXXConstructorDecl>(*MI));
   3798         break;
   3799 
   3800       case CXXDestructor:
   3801         CheckExplicitlyDefaultedDestructor(cast<CXXDestructorDecl>(*MI));
   3802         break;
   3803 
   3804       case CXXCopyConstructor:
   3805         CheckExplicitlyDefaultedCopyConstructor(cast<CXXConstructorDecl>(*MI));
   3806         break;
   3807 
   3808       case CXXCopyAssignment:
   3809         CheckExplicitlyDefaultedCopyAssignment(*MI);
   3810         break;
   3811 
   3812       case CXXMoveConstructor:
   3813         CheckExplicitlyDefaultedMoveConstructor(cast<CXXConstructorDecl>(*MI));
   3814         break;
   3815 
   3816       case CXXMoveAssignment:
   3817         CheckExplicitlyDefaultedMoveAssignment(*MI);
   3818         break;
   3819 
   3820       case CXXInvalid:
   3821         llvm_unreachable("non-special member explicitly defaulted!");
   3822       }
   3823     }
   3824   }
   3825 
   3826 }
   3827 
   3828 void Sema::CheckExplicitlyDefaultedDefaultConstructor(CXXConstructorDecl *CD) {
   3829   assert(CD->isExplicitlyDefaulted() && CD->isDefaultConstructor());
   3830 
   3831   // Whether this was the first-declared instance of the constructor.
   3832   // This affects whether we implicitly add an exception spec (and, eventually,
   3833   // constexpr). It is also ill-formed to explicitly default a constructor such
   3834   // that it would be deleted. (C++0x [decl.fct.def.default])
   3835   bool First = CD == CD->getCanonicalDecl();
   3836 
   3837   bool HadError = false;
   3838   if (CD->getNumParams() != 0) {
   3839     Diag(CD->getLocation(), diag::err_defaulted_default_ctor_params)
   3840       << CD->getSourceRange();
   3841     HadError = true;
   3842   }
   3843 
   3844   ImplicitExceptionSpecification Spec
   3845     = ComputeDefaultedDefaultCtorExceptionSpec(CD->getParent());
   3846   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3847   if (EPI.ExceptionSpecType == EST_Delayed) {
   3848     // Exception specification depends on some deferred part of the class. We'll
   3849     // try again when the class's definition has been fully processed.
   3850     return;
   3851   }
   3852   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   3853                           *ExceptionType = Context.getFunctionType(
   3854                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3855 
   3856   // C++11 [dcl.fct.def.default]p2:
   3857   //   An explicitly-defaulted function may be declared constexpr only if it
   3858   //   would have been implicitly declared as constexpr,
   3859   // Do not apply this rule to templates, since core issue 1358 makes such
   3860   // functions always instantiate to constexpr functions.
   3861   if (CD->isConstexpr() &&
   3862       CD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
   3863     if (!CD->getParent()->defaultedDefaultConstructorIsConstexpr()) {
   3864       Diag(CD->getLocStart(), diag::err_incorrect_defaulted_constexpr)
   3865         << CXXDefaultConstructor;
   3866       HadError = true;
   3867     }
   3868   }
   3869   //   and may have an explicit exception-specification only if it is compatible
   3870   //   with the exception-specification on the implicit declaration.
   3871   if (CtorType->hasExceptionSpec()) {
   3872     if (CheckEquivalentExceptionSpec(
   3873           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3874             << CXXDefaultConstructor,
   3875           PDiag(),
   3876           ExceptionType, SourceLocation(),
   3877           CtorType, CD->getLocation())) {
   3878       HadError = true;
   3879     }
   3880   }
   3881 
   3882   //   If a function is explicitly defaulted on its first declaration,
   3883   if (First) {
   3884     //  -- it is implicitly considered to be constexpr if the implicit
   3885     //     definition would be,
   3886     CD->setConstexpr(CD->getParent()->defaultedDefaultConstructorIsConstexpr());
   3887 
   3888     //  -- it is implicitly considered to have the same
   3889     //     exception-specification as if it had been implicitly declared
   3890     //
   3891     // FIXME: a compatible, but different, explicit exception specification
   3892     // will be silently overridden. We should issue a warning if this happens.
   3893     EPI.ExtInfo = CtorType->getExtInfo();
   3894 
   3895     // Such a function is also trivial if the implicitly-declared function
   3896     // would have been.
   3897     CD->setTrivial(CD->getParent()->hasTrivialDefaultConstructor());
   3898   }
   3899 
   3900   if (HadError) {
   3901     CD->setInvalidDecl();
   3902     return;
   3903   }
   3904 
   3905   if (ShouldDeleteSpecialMember(CD, CXXDefaultConstructor)) {
   3906     if (First) {
   3907       CD->setDeletedAsWritten();
   3908     } else {
   3909       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   3910         << CXXDefaultConstructor;
   3911       CD->setInvalidDecl();
   3912     }
   3913   }
   3914 }
   3915 
   3916 void Sema::CheckExplicitlyDefaultedCopyConstructor(CXXConstructorDecl *CD) {
   3917   assert(CD->isExplicitlyDefaulted() && CD->isCopyConstructor());
   3918 
   3919   // Whether this was the first-declared instance of the constructor.
   3920   bool First = CD == CD->getCanonicalDecl();
   3921 
   3922   bool HadError = false;
   3923   if (CD->getNumParams() != 1) {
   3924     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_params)
   3925       << CD->getSourceRange();
   3926     HadError = true;
   3927   }
   3928 
   3929   ImplicitExceptionSpecification Spec(*this);
   3930   bool Const;
   3931   llvm::tie(Spec, Const) =
   3932     ComputeDefaultedCopyCtorExceptionSpecAndConst(CD->getParent());
   3933 
   3934   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3935   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   3936                           *ExceptionType = Context.getFunctionType(
   3937                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3938 
   3939   // Check for parameter type matching.
   3940   // This is a copy ctor so we know it's a cv-qualified reference to T.
   3941   QualType ArgType = CtorType->getArgType(0);
   3942   if (ArgType->getPointeeType().isVolatileQualified()) {
   3943     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_volatile_param);
   3944     HadError = true;
   3945   }
   3946   if (ArgType->getPointeeType().isConstQualified() && !Const) {
   3947     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_const_param);
   3948     HadError = true;
   3949   }
   3950 
   3951   // C++11 [dcl.fct.def.default]p2:
   3952   //   An explicitly-defaulted function may be declared constexpr only if it
   3953   //   would have been implicitly declared as constexpr,
   3954   // Do not apply this rule to templates, since core issue 1358 makes such
   3955   // functions always instantiate to constexpr functions.
   3956   if (CD->isConstexpr() &&
   3957       CD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
   3958     if (!CD->getParent()->defaultedCopyConstructorIsConstexpr()) {
   3959       Diag(CD->getLocStart(), diag::err_incorrect_defaulted_constexpr)
   3960         << CXXCopyConstructor;
   3961       HadError = true;
   3962     }
   3963   }
   3964   //   and may have an explicit exception-specification only if it is compatible
   3965   //   with the exception-specification on the implicit declaration.
   3966   if (CtorType->hasExceptionSpec()) {
   3967     if (CheckEquivalentExceptionSpec(
   3968           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3969             << CXXCopyConstructor,
   3970           PDiag(),
   3971           ExceptionType, SourceLocation(),
   3972           CtorType, CD->getLocation())) {
   3973       HadError = true;
   3974     }
   3975   }
   3976 
   3977   //   If a function is explicitly defaulted on its first declaration,
   3978   if (First) {
   3979     //  -- it is implicitly considered to be constexpr if the implicit
   3980     //     definition would be,
   3981     CD->setConstexpr(CD->getParent()->defaultedCopyConstructorIsConstexpr());
   3982 
   3983     //  -- it is implicitly considered to have the same
   3984     //     exception-specification as if it had been implicitly declared, and
   3985     //
   3986     // FIXME: a compatible, but different, explicit exception specification
   3987     // will be silently overridden. We should issue a warning if this happens.
   3988     EPI.ExtInfo = CtorType->getExtInfo();
   3989 
   3990     //  -- [...] it shall have the same parameter type as if it had been
   3991     //     implicitly declared.
   3992     CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
   3993 
   3994     // Such a function is also trivial if the implicitly-declared function
   3995     // would have been.
   3996     CD->setTrivial(CD->getParent()->hasTrivialCopyConstructor());
   3997   }
   3998 
   3999   if (HadError) {
   4000     CD->setInvalidDecl();
   4001     return;
   4002   }
   4003 
   4004   if (ShouldDeleteSpecialMember(CD, CXXCopyConstructor)) {
   4005     if (First) {
   4006       CD->setDeletedAsWritten();
   4007     } else {
   4008       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   4009         << CXXCopyConstructor;
   4010       CD->setInvalidDecl();
   4011     }
   4012   }
   4013 }
   4014 
   4015 void Sema::CheckExplicitlyDefaultedCopyAssignment(CXXMethodDecl *MD) {
   4016   assert(MD->isExplicitlyDefaulted());
   4017 
   4018   // Whether this was the first-declared instance of the operator
   4019   bool First = MD == MD->getCanonicalDecl();
   4020 
   4021   bool HadError = false;
   4022   if (MD->getNumParams() != 1) {
   4023     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_params)
   4024       << MD->getSourceRange();
   4025     HadError = true;
   4026   }
   4027 
   4028   QualType ReturnType =
   4029     MD->getType()->getAs<FunctionType>()->getResultType();
   4030   if (!ReturnType->isLValueReferenceType() ||
   4031       !Context.hasSameType(
   4032         Context.getCanonicalType(ReturnType->getPointeeType()),
   4033         Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
   4034     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_return_type);
   4035     HadError = true;
   4036   }
   4037 
   4038   ImplicitExceptionSpecification Spec(*this);
   4039   bool Const;
   4040   llvm::tie(Spec, Const) =
   4041     ComputeDefaultedCopyCtorExceptionSpecAndConst(MD->getParent());
   4042 
   4043   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4044   const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
   4045                           *ExceptionType = Context.getFunctionType(
   4046                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4047 
   4048   QualType ArgType = OperType->getArgType(0);
   4049   if (!ArgType->isLValueReferenceType()) {
   4050     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
   4051     HadError = true;
   4052   } else {
   4053     if (ArgType->getPointeeType().isVolatileQualified()) {
   4054       Diag(MD->getLocation(), diag::err_defaulted_copy_assign_volatile_param);
   4055       HadError = true;
   4056     }
   4057     if (ArgType->getPointeeType().isConstQualified() && !Const) {
   4058       Diag(MD->getLocation(), diag::err_defaulted_copy_assign_const_param);
   4059       HadError = true;
   4060     }
   4061   }
   4062 
   4063   if (OperType->getTypeQuals()) {
   4064     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_quals);
   4065     HadError = true;
   4066   }
   4067 
   4068   if (OperType->hasExceptionSpec()) {
   4069     if (CheckEquivalentExceptionSpec(
   4070           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4071             << CXXCopyAssignment,
   4072           PDiag(),
   4073           ExceptionType, SourceLocation(),
   4074           OperType, MD->getLocation())) {
   4075       HadError = true;
   4076     }
   4077   }
   4078   if (First) {
   4079     // We set the declaration to have the computed exception spec here.
   4080     // We duplicate the one parameter type.
   4081     EPI.RefQualifier = OperType->getRefQualifier();
   4082     EPI.ExtInfo = OperType->getExtInfo();
   4083     MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
   4084 
   4085     // Such a function is also trivial if the implicitly-declared function
   4086     // would have been.
   4087     MD->setTrivial(MD->getParent()->hasTrivialCopyAssignment());
   4088   }
   4089 
   4090   if (HadError) {
   4091     MD->setInvalidDecl();
   4092     return;
   4093   }
   4094 
   4095   if (ShouldDeleteSpecialMember(MD, CXXCopyAssignment)) {
   4096     if (First) {
   4097       MD->setDeletedAsWritten();
   4098     } else {
   4099       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
   4100         << CXXCopyAssignment;
   4101       MD->setInvalidDecl();
   4102     }
   4103   }
   4104 }
   4105 
   4106 void Sema::CheckExplicitlyDefaultedMoveConstructor(CXXConstructorDecl *CD) {
   4107   assert(CD->isExplicitlyDefaulted() && CD->isMoveConstructor());
   4108 
   4109   // Whether this was the first-declared instance of the constructor.
   4110   bool First = CD == CD->getCanonicalDecl();
   4111 
   4112   bool HadError = false;
   4113   if (CD->getNumParams() != 1) {
   4114     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_params)
   4115       << CD->getSourceRange();
   4116     HadError = true;
   4117   }
   4118 
   4119   ImplicitExceptionSpecification Spec(
   4120       ComputeDefaultedMoveCtorExceptionSpec(CD->getParent()));
   4121 
   4122   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4123   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   4124                           *ExceptionType = Context.getFunctionType(
   4125                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4126 
   4127   // Check for parameter type matching.
   4128   // This is a move ctor so we know it's a cv-qualified rvalue reference to T.
   4129   QualType ArgType = CtorType->getArgType(0);
   4130   if (ArgType->getPointeeType().isVolatileQualified()) {
   4131     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_volatile_param);
   4132     HadError = true;
   4133   }
   4134   if (ArgType->getPointeeType().isConstQualified()) {
   4135     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_const_param);
   4136     HadError = true;
   4137   }
   4138 
   4139   // C++11 [dcl.fct.def.default]p2:
   4140   //   An explicitly-defaulted function may be declared constexpr only if it
   4141   //   would have been implicitly declared as constexpr,
   4142   // Do not apply this rule to templates, since core issue 1358 makes such
   4143   // functions always instantiate to constexpr functions.
   4144   if (CD->isConstexpr() &&
   4145       CD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
   4146     if (!CD->getParent()->defaultedMoveConstructorIsConstexpr()) {
   4147       Diag(CD->getLocStart(), diag::err_incorrect_defaulted_constexpr)
   4148         << CXXMoveConstructor;
   4149       HadError = true;
   4150     }
   4151   }
   4152   //   and may have an explicit exception-specification only if it is compatible
   4153   //   with the exception-specification on the implicit declaration.
   4154   if (CtorType->hasExceptionSpec()) {
   4155     if (CheckEquivalentExceptionSpec(
   4156           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4157             << CXXMoveConstructor,
   4158           PDiag(),
   4159           ExceptionType, SourceLocation(),
   4160           CtorType, CD->getLocation())) {
   4161       HadError = true;
   4162     }
   4163   }
   4164 
   4165   //   If a function is explicitly defaulted on its first declaration,
   4166   if (First) {
   4167     //  -- it is implicitly considered to be constexpr if the implicit
   4168     //     definition would be,
   4169     CD->setConstexpr(CD->getParent()->defaultedMoveConstructorIsConstexpr());
   4170 
   4171     //  -- it is implicitly considered to have the same
   4172     //     exception-specification as if it had been implicitly declared, and
   4173     //
   4174     // FIXME: a compatible, but different, explicit exception specification
   4175     // will be silently overridden. We should issue a warning if this happens.
   4176     EPI.ExtInfo = CtorType->getExtInfo();
   4177 
   4178     //  -- [...] it shall have the same parameter type as if it had been
   4179     //     implicitly declared.
   4180     CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
   4181 
   4182     // Such a function is also trivial if the implicitly-declared function
   4183     // would have been.
   4184     CD->setTrivial(CD->getParent()->hasTrivialMoveConstructor());
   4185   }
   4186 
   4187   if (HadError) {
   4188     CD->setInvalidDecl();
   4189     return;
   4190   }
   4191 
   4192   if (ShouldDeleteSpecialMember(CD, CXXMoveConstructor)) {
   4193     if (First) {
   4194       CD->setDeletedAsWritten();
   4195     } else {
   4196       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   4197         << CXXMoveConstructor;
   4198       CD->setInvalidDecl();
   4199     }
   4200   }
   4201 }
   4202 
   4203 void Sema::CheckExplicitlyDefaultedMoveAssignment(CXXMethodDecl *MD) {
   4204   assert(MD->isExplicitlyDefaulted());
   4205 
   4206   // Whether this was the first-declared instance of the operator
   4207   bool First = MD == MD->getCanonicalDecl();
   4208 
   4209   bool HadError = false;
   4210   if (MD->getNumParams() != 1) {
   4211     Diag(MD->getLocation(), diag::err_defaulted_move_assign_params)
   4212       << MD->getSourceRange();
   4213     HadError = true;
   4214   }
   4215 
   4216   QualType ReturnType =
   4217     MD->getType()->getAs<FunctionType>()->getResultType();
   4218   if (!ReturnType->isLValueReferenceType() ||
   4219       !Context.hasSameType(
   4220         Context.getCanonicalType(ReturnType->getPointeeType()),
   4221         Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
   4222     Diag(MD->getLocation(), diag::err_defaulted_move_assign_return_type);
   4223     HadError = true;
   4224   }
   4225 
   4226   ImplicitExceptionSpecification Spec(
   4227       ComputeDefaultedMoveCtorExceptionSpec(MD->getParent()));
   4228 
   4229   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4230   const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
   4231                           *ExceptionType = Context.getFunctionType(
   4232                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4233 
   4234   QualType ArgType = OperType->getArgType(0);
   4235   if (!ArgType->isRValueReferenceType()) {
   4236     Diag(MD->getLocation(), diag::err_defaulted_move_assign_not_ref);
   4237     HadError = true;
   4238   } else {
   4239     if (ArgType->getPointeeType().isVolatileQualified()) {
   4240       Diag(MD->getLocation(), diag::err_defaulted_move_assign_volatile_param);
   4241       HadError = true;
   4242     }
   4243     if (ArgType->getPointeeType().isConstQualified()) {
   4244       Diag(MD->getLocation(), diag::err_defaulted_move_assign_const_param);
   4245       HadError = true;
   4246     }
   4247   }
   4248 
   4249   if (OperType->getTypeQuals()) {
   4250     Diag(MD->getLocation(), diag::err_defaulted_move_assign_quals);
   4251     HadError = true;
   4252   }
   4253 
   4254   if (OperType->hasExceptionSpec()) {
   4255     if (CheckEquivalentExceptionSpec(
   4256           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4257             << CXXMoveAssignment,
   4258           PDiag(),
   4259           ExceptionType, SourceLocation(),
   4260           OperType, MD->getLocation())) {
   4261       HadError = true;
   4262     }
   4263   }
   4264   if (First) {
   4265     // We set the declaration to have the computed exception spec here.
   4266     // We duplicate the one parameter type.
   4267     EPI.RefQualifier = OperType->getRefQualifier();
   4268     EPI.ExtInfo = OperType->getExtInfo();
   4269     MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
   4270 
   4271     // Such a function is also trivial if the implicitly-declared function
   4272     // would have been.
   4273     MD->setTrivial(MD->getParent()->hasTrivialMoveAssignment());
   4274   }
   4275 
   4276   if (HadError) {
   4277     MD->setInvalidDecl();
   4278     return;
   4279   }
   4280 
   4281   if (ShouldDeleteSpecialMember(MD, CXXMoveAssignment)) {
   4282     if (First) {
   4283       MD->setDeletedAsWritten();
   4284     } else {
   4285       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
   4286         << CXXMoveAssignment;
   4287       MD->setInvalidDecl();
   4288     }
   4289   }
   4290 }
   4291 
   4292 void Sema::CheckExplicitlyDefaultedDestructor(CXXDestructorDecl *DD) {
   4293   assert(DD->isExplicitlyDefaulted());
   4294 
   4295   // Whether this was the first-declared instance of the destructor.
   4296   bool First = DD == DD->getCanonicalDecl();
   4297 
   4298   ImplicitExceptionSpecification Spec
   4299     = ComputeDefaultedDtorExceptionSpec(DD->getParent());
   4300   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4301   const FunctionProtoType *DtorType = DD->getType()->getAs<FunctionProtoType>(),
   4302                           *ExceptionType = Context.getFunctionType(
   4303                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4304 
   4305   if (DtorType->hasExceptionSpec()) {
   4306     if (CheckEquivalentExceptionSpec(
   4307           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4308             << CXXDestructor,
   4309           PDiag(),
   4310           ExceptionType, SourceLocation(),
   4311           DtorType, DD->getLocation())) {
   4312       DD->setInvalidDecl();
   4313       return;
   4314     }
   4315   }
   4316   if (First) {
   4317     // We set the declaration to have the computed exception spec here.
   4318     // There are no parameters.
   4319     EPI.ExtInfo = DtorType->getExtInfo();
   4320     DD->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
   4321 
   4322     // Such a function is also trivial if the implicitly-declared function
   4323     // would have been.
   4324     DD->setTrivial(DD->getParent()->hasTrivialDestructor());
   4325   }
   4326 
   4327   if (ShouldDeleteSpecialMember(DD, CXXDestructor)) {
   4328     if (First) {
   4329       DD->setDeletedAsWritten();
   4330     } else {
   4331       Diag(DD->getLocation(), diag::err_out_of_line_default_deletes)
   4332         << CXXDestructor;
   4333       DD->setInvalidDecl();
   4334     }
   4335   }
   4336 }
   4337 
   4338 namespace {
   4339 struct SpecialMemberDeletionInfo {
   4340   Sema &S;
   4341   CXXMethodDecl *MD;
   4342   Sema::CXXSpecialMember CSM;
   4343   bool Diagnose;
   4344 
   4345   // Properties of the special member, computed for convenience.
   4346   bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
   4347   SourceLocation Loc;
   4348 
   4349   bool AllFieldsAreConst;
   4350 
   4351   SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
   4352                             Sema::CXXSpecialMember CSM, bool Diagnose)
   4353     : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
   4354       IsConstructor(false), IsAssignment(false), IsMove(false),
   4355       ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
   4356       AllFieldsAreConst(true) {
   4357     switch (CSM) {
   4358       case Sema::CXXDefaultConstructor:
   4359       case Sema::CXXCopyConstructor:
   4360         IsConstructor = true;
   4361         break;
   4362       case Sema::CXXMoveConstructor:
   4363         IsConstructor = true;
   4364         IsMove = true;
   4365         break;
   4366       case Sema::CXXCopyAssignment:
   4367         IsAssignment = true;
   4368         break;
   4369       case Sema::CXXMoveAssignment:
   4370         IsAssignment = true;
   4371         IsMove = true;
   4372         break;
   4373       case Sema::CXXDestructor:
   4374         break;
   4375       case Sema::CXXInvalid:
   4376         llvm_unreachable("invalid special member kind");
   4377     }
   4378 
   4379     if (MD->getNumParams()) {
   4380       ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
   4381       VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
   4382     }
   4383   }
   4384 
   4385   bool inUnion() const { return MD->getParent()->isUnion(); }
   4386 
   4387   /// Look up the corresponding special member in the given class.
   4388   Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class) {
   4389     unsigned TQ = MD->getTypeQualifiers();
   4390     return S.LookupSpecialMember(Class, CSM, ConstArg, VolatileArg,
   4391                                  MD->getRefQualifier() == RQ_RValue,
   4392                                  TQ & Qualifiers::Const,
   4393                                  TQ & Qualifiers::Volatile);
   4394   }
   4395 
   4396   typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
   4397 
   4398   bool shouldDeleteForBase(CXXBaseSpecifier *Base);
   4399   bool shouldDeleteForField(FieldDecl *FD);
   4400   bool shouldDeleteForAllConstMembers();
   4401 
   4402   bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj);
   4403   bool shouldDeleteForSubobjectCall(Subobject Subobj,
   4404                                     Sema::SpecialMemberOverloadResult *SMOR,
   4405                                     bool IsDtorCallInCtor);
   4406 
   4407   bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
   4408 };
   4409 }
   4410 
   4411 /// Is the given special member inaccessible when used on the given
   4412 /// sub-object.
   4413 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
   4414                                              CXXMethodDecl *target) {
   4415   /// If we're operating on a base class, the object type is the
   4416   /// type of this special member.
   4417   QualType objectTy;
   4418   AccessSpecifier access = target->getAccess();;
   4419   if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
   4420     objectTy = S.Context.getTypeDeclType(MD->getParent());
   4421     access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
   4422 
   4423   // If we're operating on a field, the object type is the type of the field.
   4424   } else {
   4425     objectTy = S.Context.getTypeDeclType(target->getParent());
   4426   }
   4427 
   4428   return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
   4429 }
   4430 
   4431 /// Check whether we should delete a special member due to the implicit
   4432 /// definition containing a call to a special member of a subobject.
   4433 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
   4434     Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
   4435     bool IsDtorCallInCtor) {
   4436   CXXMethodDecl *Decl = SMOR->getMethod();
   4437   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
   4438 
   4439   int DiagKind = -1;
   4440 
   4441   if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
   4442     DiagKind = !Decl ? 0 : 1;
   4443   else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
   4444     DiagKind = 2;
   4445   else if (!isAccessible(Subobj, Decl))
   4446     DiagKind = 3;
   4447   else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
   4448            !Decl->isTrivial()) {
   4449     // A member of a union must have a trivial corresponding special member.
   4450     // As a weird special case, a destructor call from a union's constructor
   4451     // must be accessible and non-deleted, but need not be trivial. Such a
   4452     // destructor is never actually called, but is semantically checked as
   4453     // if it were.
   4454     DiagKind = 4;
   4455   }
   4456 
   4457   if (DiagKind == -1)
   4458     return false;
   4459 
   4460   if (Diagnose) {
   4461     if (Field) {
   4462       S.Diag(Field->getLocation(),
   4463              diag::note_deleted_special_member_class_subobject)
   4464         << CSM << MD->getParent() << /*IsField*/true
   4465         << Field << DiagKind << IsDtorCallInCtor;
   4466     } else {
   4467       CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
   4468       S.Diag(Base->getLocStart(),
   4469              diag::note_deleted_special_member_class_subobject)
   4470         << CSM << MD->getParent() << /*IsField*/false
   4471         << Base->getType() << DiagKind << IsDtorCallInCtor;
   4472     }
   4473 
   4474     if (DiagKind == 1)
   4475       S.NoteDeletedFunction(Decl);
   4476     // FIXME: Explain inaccessibility if DiagKind == 3.
   4477   }
   4478 
   4479   return true;
   4480 }
   4481 
   4482 /// Check whether we should delete a special member function due to having a
   4483 /// direct or virtual base class or static data member of class type M.
   4484 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
   4485     CXXRecordDecl *Class, Subobject Subobj) {
   4486   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
   4487 
   4488   // C++11 [class.ctor]p5:
   4489   // -- any direct or virtual base class, or non-static data member with no
   4490   //    brace-or-equal-initializer, has class type M (or array thereof) and
   4491   //    either M has no default constructor or overload resolution as applied
   4492   //    to M's default constructor results in an ambiguity or in a function
   4493   //    that is deleted or inaccessible
   4494   // C++11 [class.copy]p11, C++11 [class.copy]p23:
   4495   // -- a direct or virtual base class B that cannot be copied/moved because
   4496   //    overload resolution, as applied to B's corresponding special member,
   4497   //    results in an ambiguity or a function that is deleted or inaccessible
   4498   //    from the defaulted special member
   4499   // C++11 [class.dtor]p5:
   4500   // -- any direct or virtual base class [...] has a type with a destructor
   4501   //    that is deleted or inaccessible
   4502   if (!(CSM == Sema::CXXDefaultConstructor &&
   4503         Field && Field->hasInClassInitializer()) &&
   4504       shouldDeleteForSubobjectCall(Subobj, lookupIn(Class), false))
   4505     return true;
   4506 
   4507   // C++11 [class.ctor]p5, C++11 [class.copy]p11:
   4508   // -- any direct or virtual base class or non-static data member has a
   4509   //    type with a destructor that is deleted or inaccessible
   4510   if (IsConstructor) {
   4511     Sema::SpecialMemberOverloadResult *SMOR =
   4512         S.LookupSpecialMember(Class, Sema::CXXDestructor,
   4513                               false, false, false, false, false);
   4514     if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
   4515       return true;
   4516   }
   4517 
   4518   return false;
   4519 }
   4520 
   4521 /// Check whether we should delete a special member function due to the class
   4522 /// having a particular direct or virtual base class.
   4523 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
   4524   CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
   4525   return shouldDeleteForClassSubobject(BaseClass, Base);
   4526 }
   4527 
   4528 /// Check whether we should delete a special member function due to the class
   4529 /// having a particular non-static data member.
   4530 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
   4531   QualType FieldType = S.Context.getBaseElementType(FD->getType());
   4532   CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4533 
   4534   if (CSM == Sema::CXXDefaultConstructor) {
   4535     // For a default constructor, all references must be initialized in-class
   4536     // and, if a union, it must have a non-const member.
   4537     if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
   4538       if (Diagnose)
   4539         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
   4540           << MD->getParent() << FD << FieldType << /*Reference*/0;
   4541       return true;
   4542     }
   4543     // C++11 [class.ctor]p5: any non-variant non-static data member of
   4544     // const-qualified type (or array thereof) with no
   4545     // brace-or-equal-initializer does not have a user-provided default
   4546     // constructor.
   4547     if (!inUnion() && FieldType.isConstQualified() &&
   4548         !FD->hasInClassInitializer() &&
   4549         (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
   4550       if (Diagnose)
   4551         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
   4552           << MD->getParent() << FD << FieldType << /*Const*/1;
   4553       return true;
   4554     }
   4555 
   4556     if (inUnion() && !FieldType.isConstQualified())
   4557       AllFieldsAreConst = false;
   4558   } else if (CSM == Sema::CXXCopyConstructor) {
   4559     // For a copy constructor, data members must not be of rvalue reference
   4560     // type.
   4561     if (FieldType->isRValueReferenceType()) {
   4562       if (Diagnose)
   4563         S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
   4564           << MD->getParent() << FD << FieldType;
   4565       return true;
   4566     }
   4567   } else if (IsAssignment) {
   4568     // For an assignment operator, data members must not be of reference type.
   4569     if (FieldType->isReferenceType()) {
   4570       if (Diagnose)
   4571         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
   4572           << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
   4573       return true;
   4574     }
   4575     if (!FieldRecord && FieldType.isConstQualified()) {
   4576       // C++11 [class.copy]p23:
   4577       // -- a non-static data member of const non-class type (or array thereof)
   4578       if (Diagnose)
   4579         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
   4580           << IsMove << MD->getParent() << FD << FieldType << /*Const*/1;
   4581       return true;
   4582     }
   4583   }
   4584 
   4585   if (FieldRecord) {
   4586     // Some additional restrictions exist on the variant members.
   4587     if (!inUnion() && FieldRecord->isUnion() &&
   4588         FieldRecord->isAnonymousStructOrUnion()) {
   4589       bool AllVariantFieldsAreConst = true;
   4590 
   4591       // FIXME: Handle anonymous unions declared within anonymous unions.
   4592       for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4593                                          UE = FieldRecord->field_end();
   4594            UI != UE; ++UI) {
   4595         QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
   4596 
   4597         if (!UnionFieldType.isConstQualified())
   4598           AllVariantFieldsAreConst = false;
   4599 
   4600         CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
   4601         if (UnionFieldRecord &&
   4602             shouldDeleteForClassSubobject(UnionFieldRecord, *UI))
   4603           return true;
   4604       }
   4605 
   4606       // At least one member in each anonymous union must be non-const
   4607       if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
   4608           FieldRecord->field_begin() != FieldRecord->field_end()) {
   4609         if (Diagnose)
   4610           S.Diag(FieldRecord->getLocation(),
   4611                  diag::note_deleted_default_ctor_all_const)
   4612             << MD->getParent() << /*anonymous union*/1;
   4613         return true;
   4614       }
   4615 
   4616       // Don't check the implicit member of the anonymous union type.
   4617       // This is technically non-conformant, but sanity demands it.
   4618       return false;
   4619     }
   4620 
   4621     if (shouldDeleteForClassSubobject(FieldRecord, FD))
   4622       return true;
   4623   }
   4624 
   4625   return false;
   4626 }
   4627 
   4628 /// C++11 [class.ctor] p5:
   4629 ///   A defaulted default constructor for a class X is defined as deleted if
   4630 /// X is a union and all of its variant members are of const-qualified type.
   4631 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
   4632   // This is a silly definition, because it gives an empty union a deleted
   4633   // default constructor. Don't do that.
   4634   if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
   4635       (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
   4636     if (Diagnose)
   4637       S.Diag(MD->getParent()->getLocation(),
   4638              diag::note_deleted_default_ctor_all_const)
   4639         << MD->getParent() << /*not anonymous union*/0;
   4640     return true;
   4641   }
   4642   return false;
   4643 }
   4644 
   4645 /// Determine whether a defaulted special member function should be defined as
   4646 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
   4647 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
   4648 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
   4649                                      bool Diagnose) {
   4650   assert(!MD->isInvalidDecl());
   4651   CXXRecordDecl *RD = MD->getParent();
   4652   assert(!RD->isDependentType() && "do deletion after instantiation");
   4653   if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
   4654     return false;
   4655 
   4656   // C++11 [expr.lambda.prim]p19:
   4657   //   The closure type associated with a lambda-expression has a
   4658   //   deleted (8.4.3) default constructor and a deleted copy
   4659   //   assignment operator.
   4660   if (RD->isLambda() &&
   4661       (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
   4662     if (Diagnose)
   4663       Diag(RD->getLocation(), diag::note_lambda_decl);
   4664     return true;
   4665   }
   4666 
   4667   // For an anonymous struct or union, the copy and assignment special members
   4668   // will never be used, so skip the check. For an anonymous union declared at
   4669   // namespace scope, the constructor and destructor are used.
   4670   if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
   4671       RD->isAnonymousStructOrUnion())
   4672     return false;
   4673 
   4674   // C++11 [class.copy]p7, p18:
   4675   //   If the class definition declares a move constructor or move assignment
   4676   //   operator, an implicitly declared copy constructor or copy assignment
   4677   //   operator is defined as deleted.
   4678   if (MD->isImplicit() &&
   4679       (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
   4680     CXXMethodDecl *UserDeclaredMove = 0;
   4681 
   4682     // In Microsoft mode, a user-declared move only causes the deletion of the
   4683     // corresponding copy operation, not both copy operations.
   4684     if (RD->hasUserDeclaredMoveConstructor() &&
   4685         (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
   4686       if (!Diagnose) return true;
   4687       UserDeclaredMove = RD->getMoveConstructor();
   4688       assert(UserDeclaredMove);
   4689     } else if (RD->hasUserDeclaredMoveAssignment() &&
   4690                (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
   4691       if (!Diagnose) return true;
   4692       UserDeclaredMove = RD->getMoveAssignmentOperator();
   4693       assert(UserDeclaredMove);
   4694     }
   4695 
   4696     if (UserDeclaredMove) {
   4697       Diag(UserDeclaredMove->getLocation(),
   4698            diag::note_deleted_copy_user_declared_move)
   4699         << (CSM == CXXCopyAssignment) << RD
   4700         << UserDeclaredMove->isMoveAssignmentOperator();
   4701       return true;
   4702     }
   4703   }
   4704 
   4705   // Do access control from the special member function
   4706   ContextRAII MethodContext(*this, MD);
   4707 
   4708   // C++11 [class.dtor]p5:
   4709   // -- for a virtual destructor, lookup of the non-array deallocation function
   4710   //    results in an ambiguity or in a function that is deleted or inaccessible
   4711   if (CSM == CXXDestructor && MD->isVirtual()) {
   4712     FunctionDecl *OperatorDelete = 0;
   4713     DeclarationName Name =
   4714       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   4715     if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
   4716                                  OperatorDelete, false)) {
   4717       if (Diagnose)
   4718         Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
   4719       return true;
   4720     }
   4721   }
   4722 
   4723   SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
   4724 
   4725   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   4726                                           BE = RD->bases_end(); BI != BE; ++BI)
   4727     if (!BI->isVirtual() &&
   4728         SMI.shouldDeleteForBase(BI))
   4729       return true;
   4730 
   4731   for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
   4732                                           BE = RD->vbases_end(); BI != BE; ++BI)
   4733     if (SMI.shouldDeleteForBase(BI))
   4734       return true;
   4735 
   4736   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   4737                                      FE = RD->field_end(); FI != FE; ++FI)
   4738     if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
   4739         SMI.shouldDeleteForField(*FI))
   4740       return true;
   4741 
   4742   if (SMI.shouldDeleteForAllConstMembers())
   4743     return true;
   4744 
   4745   return false;
   4746 }
   4747 
   4748 /// \brief Data used with FindHiddenVirtualMethod
   4749 namespace {
   4750   struct FindHiddenVirtualMethodData {
   4751     Sema *S;
   4752     CXXMethodDecl *Method;
   4753     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
   4754     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
   4755   };
   4756 }
   4757 
   4758 /// \brief Member lookup function that determines whether a given C++
   4759 /// method overloads virtual methods in a base class without overriding any,
   4760 /// to be used with CXXRecordDecl::lookupInBases().
   4761 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
   4762                                     CXXBasePath &Path,
   4763                                     void *UserData) {
   4764   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
   4765 
   4766   FindHiddenVirtualMethodData &Data
   4767     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
   4768 
   4769   DeclarationName Name = Data.Method->getDeclName();
   4770   assert(Name.getNameKind() == DeclarationName::Identifier);
   4771 
   4772   bool foundSameNameMethod = false;
   4773   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
   4774   for (Path.Decls = BaseRecord->lookup(Name);
   4775        Path.Decls.first != Path.Decls.second;
   4776        ++Path.Decls.first) {
   4777     NamedDecl *D = *Path.Decls.first;
   4778     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
   4779       MD = MD->getCanonicalDecl();
   4780       foundSameNameMethod = true;
   4781       // Interested only in hidden virtual methods.
   4782       if (!MD->isVirtual())
   4783         continue;
   4784       // If the method we are checking overrides a method from its base
   4785       // don't warn about the other overloaded methods.
   4786       if (!Data.S->IsOverload(Data.Method, MD, false))
   4787         return true;
   4788       // Collect the overload only if its hidden.
   4789       if (!Data.OverridenAndUsingBaseMethods.count(MD))
   4790         overloadedMethods.push_back(MD);
   4791     }
   4792   }
   4793 
   4794   if (foundSameNameMethod)
   4795     Data.OverloadedMethods.append(overloadedMethods.begin(),
   4796                                    overloadedMethods.end());
   4797   return foundSameNameMethod;
   4798 }
   4799 
   4800 /// \brief See if a method overloads virtual methods in a base class without
   4801 /// overriding any.
   4802 void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
   4803   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
   4804                                MD->getLocation()) == DiagnosticsEngine::Ignored)
   4805     return;
   4806   if (MD->getDeclName().getNameKind() != DeclarationName::Identifier)
   4807     return;
   4808 
   4809   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
   4810                      /*bool RecordPaths=*/false,
   4811                      /*bool DetectVirtual=*/false);
   4812   FindHiddenVirtualMethodData Data;
   4813   Data.Method = MD;
   4814   Data.S = this;
   4815 
   4816   // Keep the base methods that were overriden or introduced in the subclass
   4817   // by 'using' in a set. A base method not in this set is hidden.
   4818   for (DeclContext::lookup_result res = DC->lookup(MD->getDeclName());
   4819        res.first != res.second; ++res.first) {
   4820     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*res.first))
   4821       for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
   4822                                           E = MD->end_overridden_methods();
   4823            I != E; ++I)
   4824         Data.OverridenAndUsingBaseMethods.insert((*I)->getCanonicalDecl());
   4825     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*res.first))
   4826       if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(shad->getTargetDecl()))
   4827         Data.OverridenAndUsingBaseMethods.insert(MD->getCanonicalDecl());
   4828   }
   4829 
   4830   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
   4831       !Data.OverloadedMethods.empty()) {
   4832     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
   4833       << MD << (Data.OverloadedMethods.size() > 1);
   4834 
   4835     for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
   4836       CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
   4837       Diag(overloadedMD->getLocation(),
   4838            diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
   4839     }
   4840   }
   4841 }
   4842 
   4843 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
   4844                                              Decl *TagDecl,
   4845                                              SourceLocation LBrac,
   4846                                              SourceLocation RBrac,
   4847                                              AttributeList *AttrList) {
   4848   if (!TagDecl)
   4849     return;
   4850 
   4851   AdjustDeclIfTemplate(TagDecl);
   4852 
   4853   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
   4854               // strict aliasing violation!
   4855               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
   4856               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
   4857 
   4858   CheckCompletedCXXClass(
   4859                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
   4860 }
   4861 
   4862 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
   4863 /// special functions, such as the default constructor, copy
   4864 /// constructor, or destructor, to the given C++ class (C++
   4865 /// [special]p1).  This routine can only be executed just before the
   4866 /// definition of the class is complete.
   4867 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
   4868   if (!ClassDecl->hasUserDeclaredConstructor())
   4869     ++ASTContext::NumImplicitDefaultConstructors;
   4870 
   4871   if (!ClassDecl->hasUserDeclaredCopyConstructor())
   4872     ++ASTContext::NumImplicitCopyConstructors;
   4873 
   4874   if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveConstructor())
   4875     ++ASTContext::NumImplicitMoveConstructors;
   4876 
   4877   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
   4878     ++ASTContext::NumImplicitCopyAssignmentOperators;
   4879 
   4880     // If we have a dynamic class, then the copy assignment operator may be
   4881     // virtual, so we have to declare it immediately. This ensures that, e.g.,
   4882     // it shows up in the right place in the vtable and that we diagnose
   4883     // problems with the implicit exception specification.
   4884     if (ClassDecl->isDynamicClass())
   4885       DeclareImplicitCopyAssignment(ClassDecl);
   4886   }
   4887 
   4888   if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveAssignment()) {
   4889     ++ASTContext::NumImplicitMoveAssignmentOperators;
   4890 
   4891     // Likewise for the move assignment operator.
   4892     if (ClassDecl->isDynamicClass())
   4893       DeclareImplicitMoveAssignment(ClassDecl);
   4894   }
   4895 
   4896   if (!ClassDecl->hasUserDeclaredDestructor()) {
   4897     ++ASTContext::NumImplicitDestructors;
   4898 
   4899     // If we have a dynamic class, then the destructor may be virtual, so we
   4900     // have to declare the destructor immediately. This ensures that, e.g., it
   4901     // shows up in the right place in the vtable and that we diagnose problems
   4902     // with the implicit exception specification.
   4903     if (ClassDecl->isDynamicClass())
   4904       DeclareImplicitDestructor(ClassDecl);
   4905   }
   4906 }
   4907 
   4908 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
   4909   if (!D)
   4910     return;
   4911 
   4912   int NumParamList = D->getNumTemplateParameterLists();
   4913   for (int i = 0; i < NumParamList; i++) {
   4914     TemplateParameterList* Params = D->getTemplateParameterList(i);
   4915     for (TemplateParameterList::iterator Param = Params->begin(),
   4916                                       ParamEnd = Params->end();
   4917           Param != ParamEnd; ++Param) {
   4918       NamedDecl *Named = cast<NamedDecl>(*Param);
   4919       if (Named->getDeclName()) {
   4920         S->AddDecl(Named);
   4921         IdResolver.AddDecl(Named);
   4922       }
   4923     }
   4924   }
   4925 }
   4926 
   4927 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
   4928   if (!D)
   4929     return;
   4930 
   4931   TemplateParameterList *Params = 0;
   4932   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
   4933     Params = Template->getTemplateParameters();
   4934   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
   4935            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
   4936     Params = PartialSpec->getTemplateParameters();
   4937   else
   4938     return;
   4939 
   4940   for (TemplateParameterList::iterator Param = Params->begin(),
   4941                                     ParamEnd = Params->end();
   4942        Param != ParamEnd; ++Param) {
   4943     NamedDecl *Named = cast<NamedDecl>(*Param);
   4944     if (Named->getDeclName()) {
   4945       S->AddDecl(Named);
   4946       IdResolver.AddDecl(Named);
   4947     }
   4948   }
   4949 }
   4950 
   4951 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   4952   if (!RecordD) return;
   4953   AdjustDeclIfTemplate(RecordD);
   4954   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
   4955   PushDeclContext(S, Record);
   4956 }
   4957 
   4958 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   4959   if (!RecordD) return;
   4960   PopDeclContext();
   4961 }
   4962 
   4963 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
   4964 /// parsing a top-level (non-nested) C++ class, and we are now
   4965 /// parsing those parts of the given Method declaration that could
   4966 /// not be parsed earlier (C++ [class.mem]p2), such as default
   4967 /// arguments. This action should enter the scope of the given
   4968 /// Method declaration as if we had just parsed the qualified method
   4969 /// name. However, it should not bring the parameters into scope;
   4970 /// that will be performed by ActOnDelayedCXXMethodParameter.
   4971 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   4972 }
   4973 
   4974 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
   4975 /// C++ method declaration. We're (re-)introducing the given
   4976 /// function parameter into scope for use in parsing later parts of
   4977 /// the method declaration. For example, we could see an
   4978 /// ActOnParamDefaultArgument event for this parameter.
   4979 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
   4980   if (!ParamD)
   4981     return;
   4982 
   4983   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
   4984 
   4985   // If this parameter has an unparsed default argument, clear it out
   4986   // to make way for the parsed default argument.
   4987   if (Param->hasUnparsedDefaultArg())
   4988     Param->setDefaultArg(0);
   4989 
   4990   S->AddDecl(Param);
   4991   if (Param->getDeclName())
   4992     IdResolver.AddDecl(Param);
   4993 }
   4994 
   4995 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
   4996 /// processing the delayed method declaration for Method. The method
   4997 /// declaration is now considered finished. There may be a separate
   4998 /// ActOnStartOfFunctionDef action later (not necessarily
   4999 /// immediately!) for this method, if it was also defined inside the
   5000 /// class body.
   5001 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   5002   if (!MethodD)
   5003     return;
   5004 
   5005   AdjustDeclIfTemplate(MethodD);
   5006 
   5007   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
   5008 
   5009   // Now that we have our default arguments, check the constructor
   5010   // again. It could produce additional diagnostics or affect whether
   5011   // the class has implicitly-declared destructors, among other
   5012   // things.
   5013   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
   5014     CheckConstructor(Constructor);
   5015 
   5016   // Check the default arguments, which we may have added.
   5017   if (!Method->isInvalidDecl())
   5018     CheckCXXDefaultArguments(Method);
   5019 }
   5020 
   5021 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
   5022 /// the well-formedness of the constructor declarator @p D with type @p
   5023 /// R. If there are any errors in the declarator, this routine will
   5024 /// emit diagnostics and set the invalid bit to true.  In any case, the type
   5025 /// will be updated to reflect a well-formed type for the constructor and
   5026 /// returned.
   5027 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
   5028                                           StorageClass &SC) {
   5029   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
   5030 
   5031   // C++ [class.ctor]p3:
   5032   //   A constructor shall not be virtual (10.3) or static (9.4). A
   5033   //   constructor can be invoked for a const, volatile or const
   5034   //   volatile object. A constructor shall not be declared const,
   5035   //   volatile, or const volatile (9.3.2).
   5036   if (isVirtual) {
   5037     if (!D.isInvalidType())
   5038       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5039         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
   5040         << SourceRange(D.getIdentifierLoc());
   5041     D.setInvalidType();
   5042   }
   5043   if (SC == SC_Static) {
   5044     if (!D.isInvalidType())
   5045       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5046         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5047         << SourceRange(D.getIdentifierLoc());
   5048     D.setInvalidType();
   5049     SC = SC_None;
   5050   }
   5051 
   5052   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5053   if (FTI.TypeQuals != 0) {
   5054     if (FTI.TypeQuals & Qualifiers::Const)
   5055       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5056         << "const" << SourceRange(D.getIdentifierLoc());
   5057     if (FTI.TypeQuals & Qualifiers::Volatile)
   5058       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5059         << "volatile" << SourceRange(D.getIdentifierLoc());
   5060     if (FTI.TypeQuals & Qualifiers::Restrict)
   5061       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5062         << "restrict" << SourceRange(D.getIdentifierLoc());
   5063     D.setInvalidType();
   5064   }
   5065 
   5066   // C++0x [class.ctor]p4:
   5067   //   A constructor shall not be declared with a ref-qualifier.
   5068   if (FTI.hasRefQualifier()) {
   5069     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
   5070       << FTI.RefQualifierIsLValueRef
   5071       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   5072     D.setInvalidType();
   5073   }
   5074 
   5075   // Rebuild the function type "R" without any type qualifiers (in
   5076   // case any of the errors above fired) and with "void" as the
   5077   // return type, since constructors don't have return types.
   5078   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5079   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
   5080     return R;
   5081 
   5082   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   5083   EPI.TypeQuals = 0;
   5084   EPI.RefQualifier = RQ_None;
   5085 
   5086   return Context.getFunctionType(Context.VoidTy, Proto->arg_type_begin(),
   5087                                  Proto->getNumArgs(), EPI);
   5088 }
   5089 
   5090 /// CheckConstructor - Checks a fully-formed constructor for
   5091 /// well-formedness, issuing any diagnostics required. Returns true if
   5092 /// the constructor declarator is invalid.
   5093 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
   5094   CXXRecordDecl *ClassDecl
   5095     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
   5096   if (!ClassDecl)
   5097     return Constructor->setInvalidDecl();
   5098 
   5099   // C++ [class.copy]p3:
   5100   //   A declaration of a constructor for a class X is ill-formed if
   5101   //   its first parameter is of type (optionally cv-qualified) X and
   5102   //   either there are no other parameters or else all other
   5103   //   parameters have default arguments.
   5104   if (!Constructor->isInvalidDecl() &&
   5105       ((Constructor->getNumParams() == 1) ||
   5106        (Constructor->getNumParams() > 1 &&
   5107         Constructor->getParamDecl(1)->hasDefaultArg())) &&
   5108       Constructor->getTemplateSpecializationKind()
   5109                                               != TSK_ImplicitInstantiation) {
   5110     QualType ParamType = Constructor->getParamDecl(0)->getType();
   5111     QualType ClassTy = Context.getTagDeclType(ClassDecl);
   5112     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
   5113       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
   5114       const char *ConstRef
   5115         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
   5116                                                         : " const &";
   5117       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
   5118         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
   5119 
   5120       // FIXME: Rather that making the constructor invalid, we should endeavor
   5121       // to fix the type.
   5122       Constructor->setInvalidDecl();
   5123     }
   5124   }
   5125 }
   5126 
   5127 /// CheckDestructor - Checks a fully-formed destructor definition for
   5128 /// well-formedness, issuing any diagnostics required.  Returns true
   5129 /// on error.
   5130 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
   5131   CXXRecordDecl *RD = Destructor->getParent();
   5132 
   5133   if (Destructor->isVirtual()) {
   5134     SourceLocation Loc;
   5135 
   5136     if (!Destructor->isImplicit())
   5137       Loc = Destructor->getLocation();
   5138     else
   5139       Loc = RD->getLocation();
   5140 
   5141     // If we have a virtual destructor, look up the deallocation function
   5142     FunctionDecl *OperatorDelete = 0;
   5143     DeclarationName Name =
   5144     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   5145     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
   5146       return true;
   5147 
   5148     MarkFunctionReferenced(Loc, OperatorDelete);
   5149 
   5150     Destructor->setOperatorDelete(OperatorDelete);
   5151   }
   5152 
   5153   return false;
   5154 }
   5155 
   5156 static inline bool
   5157 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
   5158   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
   5159           FTI.ArgInfo[0].Param &&
   5160           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
   5161 }
   5162 
   5163 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
   5164 /// the well-formednes of the destructor declarator @p D with type @p
   5165 /// R. If there are any errors in the declarator, this routine will
   5166 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
   5167 /// will be updated to reflect a well-formed type for the destructor and
   5168 /// returned.
   5169 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
   5170                                          StorageClass& SC) {
   5171   // C++ [class.dtor]p1:
   5172   //   [...] A typedef-name that names a class is a class-name
   5173   //   (7.1.3); however, a typedef-name that names a class shall not
   5174   //   be used as the identifier in the declarator for a destructor
   5175   //   declaration.
   5176   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
   5177   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
   5178     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5179       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
   5180   else if (const TemplateSpecializationType *TST =
   5181              DeclaratorType->getAs<TemplateSpecializationType>())
   5182     if (TST->isTypeAlias())
   5183       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5184         << DeclaratorType << 1;
   5185 
   5186   // C++ [class.dtor]p2:
   5187   //   A destructor is used to destroy objects of its class type. A
   5188   //   destructor takes no parameters, and no return type can be
   5189   //   specified for it (not even void). The address of a destructor
   5190   //   shall not be taken. A destructor shall not be static. A
   5191   //   destructor can be invoked for a const, volatile or const
   5192   //   volatile object. A destructor shall not be declared const,
   5193   //   volatile or const volatile (9.3.2).
   5194   if (SC == SC_Static) {
   5195     if (!D.isInvalidType())
   5196       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
   5197         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5198         << SourceRange(D.getIdentifierLoc())
   5199         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
   5200 
   5201     SC = SC_None;
   5202   }
   5203   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   5204     // Destructors don't have return types, but the parser will
   5205     // happily parse something like:
   5206     //
   5207     //   class X {
   5208     //     float ~X();
   5209     //   };
   5210     //
   5211     // The return type will be eliminated later.
   5212     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
   5213       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   5214       << SourceRange(D.getIdentifierLoc());
   5215   }
   5216 
   5217   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5218   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
   5219     if (FTI.TypeQuals & Qualifiers::Const)
   5220       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5221         << "const" << SourceRange(D.getIdentifierLoc());
   5222     if (FTI.TypeQuals & Qualifiers::Volatile)
   5223       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5224         << "volatile" << SourceRange(D.getIdentifierLoc());
   5225     if (FTI.TypeQuals & Qualifiers::Restrict)
   5226       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5227         << "restrict" << SourceRange(D.getIdentifierLoc());
   5228     D.setInvalidType();
   5229   }
   5230 
   5231   // C++0x [class.dtor]p2:
   5232   //   A destructor shall not be declared with a ref-qualifier.
   5233   if (FTI.hasRefQualifier()) {
   5234     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
   5235       << FTI.RefQualifierIsLValueRef
   5236       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   5237     D.setInvalidType();
   5238   }
   5239 
   5240   // Make sure we don't have any parameters.
   5241   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
   5242     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
   5243 
   5244     // Delete the parameters.
   5245     FTI.freeArgs();
   5246     D.setInvalidType();
   5247   }
   5248 
   5249   // Make sure the destructor isn't variadic.
   5250   if (FTI.isVariadic) {
   5251     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
   5252     D.setInvalidType();
   5253   }
   5254 
   5255   // Rebuild the function type "R" without any type qualifiers or
   5256   // parameters (in case any of the errors above fired) and with
   5257   // "void" as the return type, since destructors don't have return
   5258   // types.
   5259   if (!D.isInvalidType())
   5260     return R;
   5261 
   5262   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5263   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   5264   EPI.Variadic = false;
   5265   EPI.TypeQuals = 0;
   5266   EPI.RefQualifier = RQ_None;
   5267   return Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
   5268 }
   5269 
   5270 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
   5271 /// well-formednes of the conversion function declarator @p D with
   5272 /// type @p R. If there are any errors in the declarator, this routine
   5273 /// will emit diagnostics and return true. Otherwise, it will return
   5274 /// false. Either way, the type @p R will be updated to reflect a
   5275 /// well-formed type for the conversion operator.
   5276 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
   5277                                      StorageClass& SC) {
   5278   // C++ [class.conv.fct]p1:
   5279   //   Neither parameter types nor return type can be specified. The
   5280   //   type of a conversion function (8.3.5) is "function taking no
   5281   //   parameter returning conversion-type-id."
   5282   if (SC == SC_Static) {
   5283     if (!D.isInvalidType())
   5284       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
   5285         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5286         << SourceRange(D.getIdentifierLoc());
   5287     D.setInvalidType();
   5288     SC = SC_None;
   5289   }
   5290 
   5291   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
   5292 
   5293   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   5294     // Conversion functions don't have return types, but the parser will
   5295     // happily parse something like:
   5296     //
   5297     //   class X {
   5298     //     float operator bool();
   5299     //   };
   5300     //
   5301     // The return type will be changed later anyway.
   5302     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
   5303       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   5304       << SourceRange(D.getIdentifierLoc());
   5305     D.setInvalidType();
   5306   }
   5307 
   5308   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5309 
   5310   // Make sure we don't have any parameters.
   5311   if (Proto->getNumArgs() > 0) {
   5312     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
   5313 
   5314     // Delete the parameters.
   5315     D.getFunctionTypeInfo().freeArgs();
   5316     D.setInvalidType();
   5317   } else if (Proto->isVariadic()) {
   5318     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
   5319     D.setInvalidType();
   5320   }
   5321 
   5322   // Diagnose "&operator bool()" and other such nonsense.  This
   5323   // is actually a gcc extension which we don't support.
   5324   if (Proto->getResultType() != ConvType) {
   5325     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
   5326       << Proto->getResultType();
   5327     D.setInvalidType();
   5328     ConvType = Proto->getResultType();
   5329   }
   5330 
   5331   // C++ [class.conv.fct]p4:
   5332   //   The conversion-type-id shall not represent a function type nor
   5333   //   an array type.
   5334   if (ConvType->isArrayType()) {
   5335     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
   5336     ConvType = Context.getPointerType(ConvType);
   5337     D.setInvalidType();
   5338   } else if (ConvType->isFunctionType()) {
   5339     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
   5340     ConvType = Context.getPointerType(ConvType);
   5341     D.setInvalidType();
   5342   }
   5343 
   5344   // Rebuild the function type "R" without any parameters (in case any
   5345   // of the errors above fired) and with the conversion type as the
   5346   // return type.
   5347   if (D.isInvalidType())
   5348     R = Context.getFunctionType(ConvType, 0, 0, Proto->getExtProtoInfo());
   5349 
   5350   // C++0x explicit conversion operators.
   5351   if (D.getDeclSpec().isExplicitSpecified())
   5352     Diag(D.getDeclSpec().getExplicitSpecLoc(),
   5353          getLangOpts().CPlusPlus0x ?
   5354            diag::warn_cxx98_compat_explicit_conversion_functions :
   5355            diag::ext_explicit_conversion_functions)
   5356       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
   5357 }
   5358 
   5359 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
   5360 /// the declaration of the given C++ conversion function. This routine
   5361 /// is responsible for recording the conversion function in the C++
   5362 /// class, if possible.
   5363 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
   5364   assert(Conversion && "Expected to receive a conversion function declaration");
   5365 
   5366   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
   5367 
   5368   // Make sure we aren't redeclaring the conversion function.
   5369   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
   5370 
   5371   // C++ [class.conv.fct]p1:
   5372   //   [...] A conversion function is never used to convert a
   5373   //   (possibly cv-qualified) object to the (possibly cv-qualified)
   5374   //   same object type (or a reference to it), to a (possibly
   5375   //   cv-qualified) base class of that type (or a reference to it),
   5376   //   or to (possibly cv-qualified) void.
   5377   // FIXME: Suppress this warning if the conversion function ends up being a
   5378   // virtual function that overrides a virtual function in a base class.
   5379   QualType ClassType
   5380     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   5381   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
   5382     ConvType = ConvTypeRef->getPointeeType();
   5383   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
   5384       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
   5385     /* Suppress diagnostics for instantiations. */;
   5386   else if (ConvType->isRecordType()) {
   5387     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
   5388     if (ConvType == ClassType)
   5389       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
   5390         << ClassType;
   5391     else if (IsDerivedFrom(ClassType, ConvType))
   5392       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
   5393         <<  ClassType << ConvType;
   5394   } else if (ConvType->isVoidType()) {
   5395     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
   5396       << ClassType << ConvType;
   5397   }
   5398 
   5399   if (FunctionTemplateDecl *ConversionTemplate
   5400                                 = Conversion->getDescribedFunctionTemplate())
   5401     return ConversionTemplate;
   5402 
   5403   return Conversion;
   5404 }
   5405 
   5406 //===----------------------------------------------------------------------===//
   5407 // Namespace Handling
   5408 //===----------------------------------------------------------------------===//
   5409 
   5410 
   5411 
   5412 /// ActOnStartNamespaceDef - This is called at the start of a namespace
   5413 /// definition.
   5414 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
   5415                                    SourceLocation InlineLoc,
   5416                                    SourceLocation NamespaceLoc,
   5417                                    SourceLocation IdentLoc,
   5418                                    IdentifierInfo *II,
   5419                                    SourceLocation LBrace,
   5420                                    AttributeList *AttrList) {
   5421   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
   5422   // For anonymous namespace, take the location of the left brace.
   5423   SourceLocation Loc = II ? IdentLoc : LBrace;
   5424   bool IsInline = InlineLoc.isValid();
   5425   bool IsInvalid = false;
   5426   bool IsStd = false;
   5427   bool AddToKnown = false;
   5428   Scope *DeclRegionScope = NamespcScope->getParent();
   5429 
   5430   NamespaceDecl *PrevNS = 0;
   5431   if (II) {
   5432     // C++ [namespace.def]p2:
   5433     //   The identifier in an original-namespace-definition shall not
   5434     //   have been previously defined in the declarative region in
   5435     //   which the original-namespace-definition appears. The
   5436     //   identifier in an original-namespace-definition is the name of
   5437     //   the namespace. Subsequently in that declarative region, it is
   5438     //   treated as an original-namespace-name.
   5439     //
   5440     // Since namespace names are unique in their scope, and we don't
   5441     // look through using directives, just look for any ordinary names.
   5442 
   5443     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
   5444     Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
   5445     Decl::IDNS_Namespace;
   5446     NamedDecl *PrevDecl = 0;
   5447     for (DeclContext::lookup_result R
   5448          = CurContext->getRedeclContext()->lookup(II);
   5449          R.first != R.second; ++R.first) {
   5450       if ((*R.first)->getIdentifierNamespace() & IDNS) {
   5451         PrevDecl = *R.first;
   5452         break;
   5453       }
   5454     }
   5455 
   5456     PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
   5457 
   5458     if (PrevNS) {
   5459       // This is an extended namespace definition.
   5460       if (IsInline != PrevNS->isInline()) {
   5461         // inline-ness must match
   5462         if (PrevNS->isInline()) {
   5463           // The user probably just forgot the 'inline', so suggest that it
   5464           // be added back.
   5465           Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
   5466             << FixItHint::CreateInsertion(NamespaceLoc, "inline ");
   5467         } else {
   5468           Diag(Loc, diag::err_inline_namespace_mismatch)
   5469             << IsInline;
   5470         }
   5471         Diag(PrevNS->getLocation(), diag::note_previous_definition);
   5472 
   5473         IsInline = PrevNS->isInline();
   5474       }
   5475     } else if (PrevDecl) {
   5476       // This is an invalid name redefinition.
   5477       Diag(Loc, diag::err_redefinition_different_kind)
   5478         << II;
   5479       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   5480       IsInvalid = true;
   5481       // Continue on to push Namespc as current DeclContext and return it.
   5482     } else if (II->isStr("std") &&
   5483                CurContext->getRedeclContext()->isTranslationUnit()) {
   5484       // This is the first "real" definition of the namespace "std", so update
   5485       // our cache of the "std" namespace to point at this definition.
   5486       PrevNS = getStdNamespace();
   5487       IsStd = true;
   5488       AddToKnown = !IsInline;
   5489     } else {
   5490       // We've seen this namespace for the first time.
   5491       AddToKnown = !IsInline;
   5492     }
   5493   } else {
   5494     // Anonymous namespaces.
   5495 
   5496     // Determine whether the parent already has an anonymous namespace.
   5497     DeclContext *Parent = CurContext->getRedeclContext();
   5498     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
   5499       PrevNS = TU->getAnonymousNamespace();
   5500     } else {
   5501       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
   5502       PrevNS = ND->getAnonymousNamespace();
   5503     }
   5504 
   5505     if (PrevNS && IsInline != PrevNS->isInline()) {
   5506       // inline-ness must match
   5507       Diag(Loc, diag::err_inline_namespace_mismatch)
   5508         << IsInline;
   5509       Diag(PrevNS->getLocation(), diag::note_previous_definition);
   5510 
   5511       // Recover by ignoring the new namespace's inline status.
   5512       IsInline = PrevNS->isInline();
   5513     }
   5514   }
   5515 
   5516   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
   5517                                                  StartLoc, Loc, II, PrevNS);
   5518   if (IsInvalid)
   5519     Namespc->setInvalidDecl();
   5520 
   5521   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
   5522 
   5523   // FIXME: Should we be merging attributes?
   5524   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
   5525     PushNamespaceVisibilityAttr(Attr, Loc);
   5526 
   5527   if (IsStd)
   5528     StdNamespace = Namespc;
   5529   if (AddToKnown)
   5530     KnownNamespaces[Namespc] = false;
   5531 
   5532   if (II) {
   5533     PushOnScopeChains(Namespc, DeclRegionScope);
   5534   } else {
   5535     // Link the anonymous namespace into its parent.
   5536     DeclContext *Parent = CurContext->getRedeclContext();
   5537     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
   5538       TU->setAnonymousNamespace(Namespc);
   5539     } else {
   5540       cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
   5541     }
   5542 
   5543     CurContext->addDecl(Namespc);
   5544 
   5545     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
   5546     //   behaves as if it were replaced by
   5547     //     namespace unique { /* empty body */ }
   5548     //     using namespace unique;
   5549     //     namespace unique { namespace-body }
   5550     //   where all occurrences of 'unique' in a translation unit are
   5551     //   replaced by the same identifier and this identifier differs
   5552     //   from all other identifiers in the entire program.
   5553 
   5554     // We just create the namespace with an empty name and then add an
   5555     // implicit using declaration, just like the standard suggests.
   5556     //
   5557     // CodeGen enforces the "universally unique" aspect by giving all
   5558     // declarations semantically contained within an anonymous
   5559     // namespace internal linkage.
   5560 
   5561     if (!PrevNS) {
   5562       UsingDirectiveDecl* UD
   5563         = UsingDirectiveDecl::Create(Context, CurContext,
   5564                                      /* 'using' */ LBrace,
   5565                                      /* 'namespace' */ SourceLocation(),
   5566                                      /* qualifier */ NestedNameSpecifierLoc(),
   5567                                      /* identifier */ SourceLocation(),
   5568                                      Namespc,
   5569                                      /* Ancestor */ CurContext);
   5570       UD->setImplicit();
   5571       CurContext->addDecl(UD);
   5572     }
   5573   }
   5574 
   5575   // Although we could have an invalid decl (i.e. the namespace name is a
   5576   // redefinition), push it as current DeclContext and try to continue parsing.
   5577   // FIXME: We should be able to push Namespc here, so that the each DeclContext
   5578   // for the namespace has the declarations that showed up in that particular
   5579   // namespace definition.
   5580   PushDeclContext(NamespcScope, Namespc);
   5581   return Namespc;
   5582 }
   5583 
   5584 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
   5585 /// is a namespace alias, returns the namespace it points to.
   5586 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
   5587   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
   5588     return AD->getNamespace();
   5589   return dyn_cast_or_null<NamespaceDecl>(D);
   5590 }
   5591 
   5592 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
   5593 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
   5594 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
   5595   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
   5596   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
   5597   Namespc->setRBraceLoc(RBrace);
   5598   PopDeclContext();
   5599   if (Namespc->hasAttr<VisibilityAttr>())
   5600     PopPragmaVisibility(true, RBrace);
   5601 }
   5602 
   5603 CXXRecordDecl *Sema::getStdBadAlloc() const {
   5604   return cast_or_null<CXXRecordDecl>(
   5605                                   StdBadAlloc.get(Context.getExternalSource()));
   5606 }
   5607 
   5608 NamespaceDecl *Sema::getStdNamespace() const {
   5609   return cast_or_null<NamespaceDecl>(
   5610                                  StdNamespace.get(Context.getExternalSource()));
   5611 }
   5612 
   5613 /// \brief Retrieve the special "std" namespace, which may require us to
   5614 /// implicitly define the namespace.
   5615 NamespaceDecl *Sema::getOrCreateStdNamespace() {
   5616   if (!StdNamespace) {
   5617     // The "std" namespace has not yet been defined, so build one implicitly.
   5618     StdNamespace = NamespaceDecl::Create(Context,
   5619                                          Context.getTranslationUnitDecl(),
   5620                                          /*Inline=*/false,
   5621                                          SourceLocation(), SourceLocation(),
   5622                                          &PP.getIdentifierTable().get("std"),
   5623                                          /*PrevDecl=*/0);
   5624     getStdNamespace()->setImplicit(true);
   5625   }
   5626 
   5627   return getStdNamespace();
   5628 }
   5629 
   5630 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
   5631   assert(getLangOpts().CPlusPlus &&
   5632          "Looking for std::initializer_list outside of C++.");
   5633 
   5634   // We're looking for implicit instantiations of
   5635   // template <typename E> class std::initializer_list.
   5636 
   5637   if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
   5638     return false;
   5639 
   5640   ClassTemplateDecl *Template = 0;
   5641   const TemplateArgument *Arguments = 0;
   5642 
   5643   if (const RecordType *RT = Ty->getAs<RecordType>()) {
   5644 
   5645     ClassTemplateSpecializationDecl *Specialization =
   5646         dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
   5647     if (!Specialization)
   5648       return false;
   5649 
   5650     Template = Specialization->getSpecializedTemplate();
   5651     Arguments = Specialization->getTemplateArgs().data();
   5652   } else if (const TemplateSpecializationType *TST =
   5653                  Ty->getAs<TemplateSpecializationType>()) {
   5654     Template = dyn_cast_or_null<ClassTemplateDecl>(
   5655         TST->getTemplateName().getAsTemplateDecl());
   5656     Arguments = TST->getArgs();
   5657   }
   5658   if (!Template)
   5659     return false;
   5660 
   5661   if (!StdInitializerList) {
   5662     // Haven't recognized std::initializer_list yet, maybe this is it.
   5663     CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
   5664     if (TemplateClass->getIdentifier() !=
   5665             &PP.getIdentifierTable().get("initializer_list") ||
   5666         !getStdNamespace()->InEnclosingNamespaceSetOf(
   5667             TemplateClass->getDeclContext()))
   5668       return false;
   5669     // This is a template called std::initializer_list, but is it the right
   5670     // template?
   5671     TemplateParameterList *Params = Template->getTemplateParameters();
   5672     if (Params->getMinRequiredArguments() != 1)
   5673       return false;
   5674     if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
   5675       return false;
   5676 
   5677     // It's the right template.
   5678     StdInitializerList = Template;
   5679   }
   5680 
   5681   if (Template != StdInitializerList)
   5682     return false;
   5683 
   5684   // This is an instance of std::initializer_list. Find the argument type.
   5685   if (Element)
   5686     *Element = Arguments[0].getAsType();
   5687   return true;
   5688 }
   5689 
   5690 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
   5691   NamespaceDecl *Std = S.getStdNamespace();
   5692   if (!Std) {
   5693     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
   5694     return 0;
   5695   }
   5696 
   5697   LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
   5698                       Loc, Sema::LookupOrdinaryName);
   5699   if (!S.LookupQualifiedName(Result, Std)) {
   5700     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
   5701     return 0;
   5702   }
   5703   ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
   5704   if (!Template) {
   5705     Result.suppressDiagnostics();
   5706     // We found something weird. Complain about the first thing we found.
   5707     NamedDecl *Found = *Result.begin();
   5708     S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
   5709     return 0;
   5710   }
   5711 
   5712   // We found some template called std::initializer_list. Now verify that it's
   5713   // correct.
   5714   TemplateParameterList *Params = Template->getTemplateParameters();
   5715   if (Params->getMinRequiredArguments() != 1 ||
   5716       !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
   5717     S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
   5718     return 0;
   5719   }
   5720 
   5721   return Template;
   5722 }
   5723 
   5724 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
   5725   if (!StdInitializerList) {
   5726     StdInitializerList = LookupStdInitializerList(*this, Loc);
   5727     if (!StdInitializerList)
   5728       return QualType();
   5729   }
   5730 
   5731   TemplateArgumentListInfo Args(Loc, Loc);
   5732   Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
   5733                                        Context.getTrivialTypeSourceInfo(Element,
   5734                                                                         Loc)));
   5735   return Context.getCanonicalType(
   5736       CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
   5737 }
   5738 
   5739 bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
   5740   // C++ [dcl.init.list]p2:
   5741   //   A constructor is an initializer-list constructor if its first parameter
   5742   //   is of type std::initializer_list<E> or reference to possibly cv-qualified
   5743   //   std::initializer_list<E> for some type E, and either there are no other
   5744   //   parameters or else all other parameters have default arguments.
   5745   if (Ctor->getNumParams() < 1 ||
   5746       (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
   5747     return false;
   5748 
   5749   QualType ArgType = Ctor->getParamDecl(0)->getType();
   5750   if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
   5751     ArgType = RT->getPointeeType().getUnqualifiedType();
   5752 
   5753   return isStdInitializerList(ArgType, 0);
   5754 }
   5755 
   5756 /// \brief Determine whether a using statement is in a context where it will be
   5757 /// apply in all contexts.
   5758 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
   5759   switch (CurContext->getDeclKind()) {
   5760     case Decl::TranslationUnit:
   5761       return true;
   5762     case Decl::LinkageSpec:
   5763       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
   5764     default:
   5765       return false;
   5766   }
   5767 }
   5768 
   5769 namespace {
   5770 
   5771 // Callback to only accept typo corrections that are namespaces.
   5772 class NamespaceValidatorCCC : public CorrectionCandidateCallback {
   5773  public:
   5774   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
   5775     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
   5776       return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
   5777     }
   5778     return false;
   5779   }
   5780 };
   5781 
   5782 }
   5783 
   5784 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
   5785                                        CXXScopeSpec &SS,
   5786                                        SourceLocation IdentLoc,
   5787                                        IdentifierInfo *Ident) {
   5788   NamespaceValidatorCCC Validator;
   5789   R.clear();
   5790   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
   5791                                                R.getLookupKind(), Sc, &SS,
   5792                                                Validator)) {
   5793     std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
   5794     std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
   5795     if (DeclContext *DC = S.computeDeclContext(SS, false))
   5796       S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
   5797         << Ident << DC << CorrectedQuotedStr << SS.getRange()
   5798         << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
   5799     else
   5800       S.Diag(IdentLoc, diag::err_using_directive_suggest)
   5801         << Ident << CorrectedQuotedStr
   5802         << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
   5803 
   5804     S.Diag(Corrected.getCorrectionDecl()->getLocation(),
   5805          diag::note_namespace_defined_here) << CorrectedQuotedStr;
   5806 
   5807     R.addDecl(Corrected.getCorrectionDecl());
   5808     return true;
   5809   }
   5810   return false;
   5811 }
   5812 
   5813 Decl *Sema::ActOnUsingDirective(Scope *S,
   5814                                           SourceLocation UsingLoc,
   5815                                           SourceLocation NamespcLoc,
   5816                                           CXXScopeSpec &SS,
   5817                                           SourceLocation IdentLoc,
   5818                                           IdentifierInfo *NamespcName,
   5819                                           AttributeList *AttrList) {
   5820   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   5821   assert(NamespcName && "Invalid NamespcName.");
   5822   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
   5823 
   5824   // This can only happen along a recovery path.
   5825   while (S->getFlags() & Scope::TemplateParamScope)
   5826     S = S->getParent();
   5827   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   5828 
   5829   UsingDirectiveDecl *UDir = 0;
   5830   NestedNameSpecifier *Qualifier = 0;
   5831   if (SS.isSet())
   5832     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
   5833 
   5834   // Lookup namespace name.
   5835   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
   5836   LookupParsedName(R, S, &SS);
   5837   if (R.isAmbiguous())
   5838     return 0;
   5839 
   5840   if (R.empty()) {
   5841     R.clear();
   5842     // Allow "using namespace std;" or "using namespace ::std;" even if
   5843     // "std" hasn't been defined yet, for GCC compatibility.
   5844     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
   5845         NamespcName->isStr("std")) {
   5846       Diag(IdentLoc, diag::ext_using_undefined_std);
   5847       R.addDecl(getOrCreateStdNamespace());
   5848       R.resolveKind();
   5849     }
   5850     // Otherwise, attempt typo correction.
   5851     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
   5852   }
   5853 
   5854   if (!R.empty()) {
   5855     NamedDecl *Named = R.getFoundDecl();
   5856     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
   5857         && "expected namespace decl");
   5858     // C++ [namespace.udir]p1:
   5859     //   A using-directive specifies that the names in the nominated
   5860     //   namespace can be used in the scope in which the
   5861     //   using-directive appears after the using-directive. During
   5862     //   unqualified name lookup (3.4.1), the names appear as if they
   5863     //   were declared in the nearest enclosing namespace which
   5864     //   contains both the using-directive and the nominated
   5865     //   namespace. [Note: in this context, "contains" means "contains
   5866     //   directly or indirectly". ]
   5867 
   5868     // Find enclosing context containing both using-directive and
   5869     // nominated namespace.
   5870     NamespaceDecl *NS = getNamespaceDecl(Named);
   5871     DeclContext *CommonAncestor = cast<DeclContext>(NS);
   5872     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
   5873       CommonAncestor = CommonAncestor->getParent();
   5874 
   5875     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
   5876                                       SS.getWithLocInContext(Context),
   5877                                       IdentLoc, Named, CommonAncestor);
   5878 
   5879     if (IsUsingDirectiveInToplevelContext(CurContext) &&
   5880         !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
   5881       Diag(IdentLoc, diag::warn_using_directive_in_header);
   5882     }
   5883 
   5884     PushUsingDirective(S, UDir);
   5885   } else {
   5886     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
   5887   }
   5888 
   5889   // FIXME: We ignore attributes for now.
   5890   return UDir;
   5891 }
   5892 
   5893 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
   5894   // If the scope has an associated entity and the using directive is at
   5895   // namespace or translation unit scope, add the UsingDirectiveDecl into
   5896   // its lookup structure so qualified name lookup can find it.
   5897   DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
   5898   if (Ctx && !Ctx->isFunctionOrMethod())
   5899     Ctx->addDecl(UDir);
   5900   else
   5901     // Otherwise, it is at block sope. The using-directives will affect lookup
   5902     // only to the end of the scope.
   5903     S->PushUsingDirective(UDir);
   5904 }
   5905 
   5906 
   5907 Decl *Sema::ActOnUsingDeclaration(Scope *S,
   5908                                   AccessSpecifier AS,
   5909                                   bool HasUsingKeyword,
   5910                                   SourceLocation UsingLoc,
   5911                                   CXXScopeSpec &SS,
   5912                                   UnqualifiedId &Name,
   5913                                   AttributeList *AttrList,
   5914                                   bool IsTypeName,
   5915                                   SourceLocation TypenameLoc) {
   5916   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   5917 
   5918   switch (Name.getKind()) {
   5919   case UnqualifiedId::IK_ImplicitSelfParam:
   5920   case UnqualifiedId::IK_Identifier:
   5921   case UnqualifiedId::IK_OperatorFunctionId:
   5922   case UnqualifiedId::IK_LiteralOperatorId:
   5923   case UnqualifiedId::IK_ConversionFunctionId:
   5924     break;
   5925 
   5926   case UnqualifiedId::IK_ConstructorName:
   5927   case UnqualifiedId::IK_ConstructorTemplateId:
   5928     // C++0x inherited constructors.
   5929     Diag(Name.getLocStart(),
   5930          getLangOpts().CPlusPlus0x ?
   5931            diag::warn_cxx98_compat_using_decl_constructor :
   5932            diag::err_using_decl_constructor)
   5933       << SS.getRange();
   5934 
   5935     if (getLangOpts().CPlusPlus0x) break;
   5936 
   5937     return 0;
   5938 
   5939   case UnqualifiedId::IK_DestructorName:
   5940     Diag(Name.getLocStart(), diag::err_using_decl_destructor)
   5941       << SS.getRange();
   5942     return 0;
   5943 
   5944   case UnqualifiedId::IK_TemplateId:
   5945     Diag(Name.getLocStart(), diag::err_using_decl_template_id)
   5946       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
   5947     return 0;
   5948   }
   5949 
   5950   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
   5951   DeclarationName TargetName = TargetNameInfo.getName();
   5952   if (!TargetName)
   5953     return 0;
   5954 
   5955   // Warn about using declarations.
   5956   // TODO: store that the declaration was written without 'using' and
   5957   // talk about access decls instead of using decls in the
   5958   // diagnostics.
   5959   if (!HasUsingKeyword) {
   5960     UsingLoc = Name.getLocStart();
   5961 
   5962     Diag(UsingLoc, diag::warn_access_decl_deprecated)
   5963       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
   5964   }
   5965 
   5966   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
   5967       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
   5968     return 0;
   5969 
   5970   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
   5971                                         TargetNameInfo, AttrList,
   5972                                         /* IsInstantiation */ false,
   5973                                         IsTypeName, TypenameLoc);
   5974   if (UD)
   5975     PushOnScopeChains(UD, S, /*AddToContext*/ false);
   5976 
   5977   return UD;
   5978 }
   5979 
   5980 /// \brief Determine whether a using declaration considers the given
   5981 /// declarations as "equivalent", e.g., if they are redeclarations of
   5982 /// the same entity or are both typedefs of the same type.
   5983 static bool
   5984 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
   5985                          bool &SuppressRedeclaration) {
   5986   if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
   5987     SuppressRedeclaration = false;
   5988     return true;
   5989   }
   5990 
   5991   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
   5992     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
   5993       SuppressRedeclaration = true;
   5994       return Context.hasSameType(TD1->getUnderlyingType(),
   5995                                  TD2->getUnderlyingType());
   5996     }
   5997 
   5998   return false;
   5999 }
   6000 
   6001 
   6002 /// Determines whether to create a using shadow decl for a particular
   6003 /// decl, given the set of decls existing prior to this using lookup.
   6004 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
   6005                                 const LookupResult &Previous) {
   6006   // Diagnose finding a decl which is not from a base class of the
   6007   // current class.  We do this now because there are cases where this
   6008   // function will silently decide not to build a shadow decl, which
   6009   // will pre-empt further diagnostics.
   6010   //
   6011   // We don't need to do this in C++0x because we do the check once on
   6012   // the qualifier.
   6013   //
   6014   // FIXME: diagnose the following if we care enough:
   6015   //   struct A { int foo; };
   6016   //   struct B : A { using A::foo; };
   6017   //   template <class T> struct C : A {};
   6018   //   template <class T> struct D : C<T> { using B::foo; } // <---
   6019   // This is invalid (during instantiation) in C++03 because B::foo
   6020   // resolves to the using decl in B, which is not a base class of D<T>.
   6021   // We can't diagnose it immediately because C<T> is an unknown
   6022   // specialization.  The UsingShadowDecl in D<T> then points directly
   6023   // to A::foo, which will look well-formed when we instantiate.
   6024   // The right solution is to not collapse the shadow-decl chain.
   6025   if (!getLangOpts().CPlusPlus0x && CurContext->isRecord()) {
   6026     DeclContext *OrigDC = Orig->getDeclContext();
   6027 
   6028     // Handle enums and anonymous structs.
   6029     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
   6030     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
   6031     while (OrigRec->isAnonymousStructOrUnion())
   6032       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
   6033 
   6034     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
   6035       if (OrigDC == CurContext) {
   6036         Diag(Using->getLocation(),
   6037              diag::err_using_decl_nested_name_specifier_is_current_class)
   6038           << Using->getQualifierLoc().getSourceRange();
   6039         Diag(Orig->getLocation(), diag::note_using_decl_target);
   6040         return true;
   6041       }
   6042 
   6043       Diag(Using->getQualifierLoc().getBeginLoc(),
   6044            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6045         << Using->getQualifier()
   6046         << cast<CXXRecordDecl>(CurContext)
   6047         << Using->getQualifierLoc().getSourceRange();
   6048       Diag(Orig->getLocation(), diag::note_using_decl_target);
   6049       return true;
   6050     }
   6051   }
   6052 
   6053   if (Previous.empty()) return false;
   6054 
   6055   NamedDecl *Target = Orig;
   6056   if (isa<UsingShadowDecl>(Target))
   6057     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   6058 
   6059   // If the target happens to be one of the previous declarations, we
   6060   // don't have a conflict.
   6061   //
   6062   // FIXME: but we might be increasing its access, in which case we
   6063   // should redeclare it.
   6064   NamedDecl *NonTag = 0, *Tag = 0;
   6065   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
   6066          I != E; ++I) {
   6067     NamedDecl *D = (*I)->getUnderlyingDecl();
   6068     bool Result;
   6069     if (IsEquivalentForUsingDecl(Context, D, Target, Result))
   6070       return Result;
   6071 
   6072     (isa<TagDecl>(D) ? Tag : NonTag) = D;
   6073   }
   6074 
   6075   if (Target->isFunctionOrFunctionTemplate()) {
   6076     FunctionDecl *FD;
   6077     if (isa<FunctionTemplateDecl>(Target))
   6078       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
   6079     else
   6080       FD = cast<FunctionDecl>(Target);
   6081 
   6082     NamedDecl *OldDecl = 0;
   6083     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
   6084     case Ovl_Overload:
   6085       return false;
   6086 
   6087     case Ovl_NonFunction:
   6088       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6089       break;
   6090 
   6091     // We found a decl with the exact signature.
   6092     case Ovl_Match:
   6093       // If we're in a record, we want to hide the target, so we
   6094       // return true (without a diagnostic) to tell the caller not to
   6095       // build a shadow decl.
   6096       if (CurContext->isRecord())
   6097         return true;
   6098 
   6099       // If we're not in a record, this is an error.
   6100       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6101       break;
   6102     }
   6103 
   6104     Diag(Target->getLocation(), diag::note_using_decl_target);
   6105     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
   6106     return true;
   6107   }
   6108 
   6109   // Target is not a function.
   6110 
   6111   if (isa<TagDecl>(Target)) {
   6112     // No conflict between a tag and a non-tag.
   6113     if (!Tag) return false;
   6114 
   6115     Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6116     Diag(Target->getLocation(), diag::note_using_decl_target);
   6117     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
   6118     return true;
   6119   }
   6120 
   6121   // No conflict between a tag and a non-tag.
   6122   if (!NonTag) return false;
   6123 
   6124   Diag(Using->getLocation(), diag::err_using_decl_conflict);
   6125   Diag(Target->getLocation(), diag::note_using_decl_target);
   6126   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
   6127   return true;
   6128 }
   6129 
   6130 /// Builds a shadow declaration corresponding to a 'using' declaration.
   6131 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
   6132                                             UsingDecl *UD,
   6133                                             NamedDecl *Orig) {
   6134 
   6135   // If we resolved to another shadow declaration, just coalesce them.
   6136   NamedDecl *Target = Orig;
   6137   if (isa<UsingShadowDecl>(Target)) {
   6138     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   6139     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
   6140   }
   6141 
   6142   UsingShadowDecl *Shadow
   6143     = UsingShadowDecl::Create(Context, CurContext,
   6144                               UD->getLocation(), UD, Target);
   6145   UD->addShadowDecl(Shadow);
   6146 
   6147   Shadow->setAccess(UD->getAccess());
   6148   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
   6149     Shadow->setInvalidDecl();
   6150 
   6151   if (S)
   6152     PushOnScopeChains(Shadow, S);
   6153   else
   6154     CurContext->addDecl(Shadow);
   6155 
   6156 
   6157   return Shadow;
   6158 }
   6159 
   6160 /// Hides a using shadow declaration.  This is required by the current
   6161 /// using-decl implementation when a resolvable using declaration in a
   6162 /// class is followed by a declaration which would hide or override
   6163 /// one or more of the using decl's targets; for example:
   6164 ///
   6165 ///   struct Base { void foo(int); };
   6166 ///   struct Derived : Base {
   6167 ///     using Base::foo;
   6168 ///     void foo(int);
   6169 ///   };
   6170 ///
   6171 /// The governing language is C++03 [namespace.udecl]p12:
   6172 ///
   6173 ///   When a using-declaration brings names from a base class into a
   6174 ///   derived class scope, member functions in the derived class
   6175 ///   override and/or hide member functions with the same name and
   6176 ///   parameter types in a base class (rather than conflicting).
   6177 ///
   6178 /// There are two ways to implement this:
   6179 ///   (1) optimistically create shadow decls when they're not hidden
   6180 ///       by existing declarations, or
   6181 ///   (2) don't create any shadow decls (or at least don't make them
   6182 ///       visible) until we've fully parsed/instantiated the class.
   6183 /// The problem with (1) is that we might have to retroactively remove
   6184 /// a shadow decl, which requires several O(n) operations because the
   6185 /// decl structures are (very reasonably) not designed for removal.
   6186 /// (2) avoids this but is very fiddly and phase-dependent.
   6187 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
   6188   if (Shadow->getDeclName().getNameKind() ==
   6189         DeclarationName::CXXConversionFunctionName)
   6190     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
   6191 
   6192   // Remove it from the DeclContext...
   6193   Shadow->getDeclContext()->removeDecl(Shadow);
   6194 
   6195   // ...and the scope, if applicable...
   6196   if (S) {
   6197     S->RemoveDecl(Shadow);
   6198     IdResolver.RemoveDecl(Shadow);
   6199   }
   6200 
   6201   // ...and the using decl.
   6202   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
   6203 
   6204   // TODO: complain somehow if Shadow was used.  It shouldn't
   6205   // be possible for this to happen, because...?
   6206 }
   6207 
   6208 /// Builds a using declaration.
   6209 ///
   6210 /// \param IsInstantiation - Whether this call arises from an
   6211 ///   instantiation of an unresolved using declaration.  We treat
   6212 ///   the lookup differently for these declarations.
   6213 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
   6214                                        SourceLocation UsingLoc,
   6215                                        CXXScopeSpec &SS,
   6216                                        const DeclarationNameInfo &NameInfo,
   6217                                        AttributeList *AttrList,
   6218                                        bool IsInstantiation,
   6219                                        bool IsTypeName,
   6220                                        SourceLocation TypenameLoc) {
   6221   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   6222   SourceLocation IdentLoc = NameInfo.getLoc();
   6223   assert(IdentLoc.isValid() && "Invalid TargetName location.");
   6224 
   6225   // FIXME: We ignore attributes for now.
   6226 
   6227   if (SS.isEmpty()) {
   6228     Diag(IdentLoc, diag::err_using_requires_qualname);
   6229     return 0;
   6230   }
   6231 
   6232   // Do the redeclaration lookup in the current scope.
   6233   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
   6234                         ForRedeclaration);
   6235   Previous.setHideTags(false);
   6236   if (S) {
   6237     LookupName(Previous, S);
   6238 
   6239     // It is really dumb that we have to do this.
   6240     LookupResult::Filter F = Previous.makeFilter();
   6241     while (F.hasNext()) {
   6242       NamedDecl *D = F.next();
   6243       if (!isDeclInScope(D, CurContext, S))
   6244         F.erase();
   6245     }
   6246     F.done();
   6247   } else {
   6248     assert(IsInstantiation && "no scope in non-instantiation");
   6249     assert(CurContext->isRecord() && "scope not record in instantiation");
   6250     LookupQualifiedName(Previous, CurContext);
   6251   }
   6252 
   6253   // Check for invalid redeclarations.
   6254   if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
   6255     return 0;
   6256 
   6257   // Check for bad qualifiers.
   6258   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
   6259     return 0;
   6260 
   6261   DeclContext *LookupContext = computeDeclContext(SS);
   6262   NamedDecl *D;
   6263   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   6264   if (!LookupContext) {
   6265     if (IsTypeName) {
   6266       // FIXME: not all declaration name kinds are legal here
   6267       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
   6268                                               UsingLoc, TypenameLoc,
   6269                                               QualifierLoc,
   6270                                               IdentLoc, NameInfo.getName());
   6271     } else {
   6272       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
   6273                                            QualifierLoc, NameInfo);
   6274     }
   6275   } else {
   6276     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
   6277                           NameInfo, IsTypeName);
   6278   }
   6279   D->setAccess(AS);
   6280   CurContext->addDecl(D);
   6281 
   6282   if (!LookupContext) return D;
   6283   UsingDecl *UD = cast<UsingDecl>(D);
   6284 
   6285   if (RequireCompleteDeclContext(SS, LookupContext)) {
   6286     UD->setInvalidDecl();
   6287     return UD;
   6288   }
   6289 
   6290   // The normal rules do not apply to inheriting constructor declarations.
   6291   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
   6292     if (CheckInheritingConstructorUsingDecl(UD))
   6293       UD->setInvalidDecl();
   6294     return UD;
   6295   }
   6296 
   6297   // Otherwise, look up the target name.
   6298 
   6299   LookupResult R(*this, NameInfo, LookupOrdinaryName);
   6300 
   6301   // Unlike most lookups, we don't always want to hide tag
   6302   // declarations: tag names are visible through the using declaration
   6303   // even if hidden by ordinary names, *except* in a dependent context
   6304   // where it's important for the sanity of two-phase lookup.
   6305   if (!IsInstantiation)
   6306     R.setHideTags(false);
   6307 
   6308   // For the purposes of this lookup, we have a base object type
   6309   // equal to that of the current context.
   6310   if (CurContext->isRecord()) {
   6311     R.setBaseObjectType(
   6312                    Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
   6313   }
   6314 
   6315   LookupQualifiedName(R, LookupContext);
   6316 
   6317   if (R.empty()) {
   6318     Diag(IdentLoc, diag::err_no_member)
   6319       << NameInfo.getName() << LookupContext << SS.getRange();
   6320     UD->setInvalidDecl();
   6321     return UD;
   6322   }
   6323 
   6324   if (R.isAmbiguous()) {
   6325     UD->setInvalidDecl();
   6326     return UD;
   6327   }
   6328 
   6329   if (IsTypeName) {
   6330     // If we asked for a typename and got a non-type decl, error out.
   6331     if (!R.getAsSingle<TypeDecl>()) {
   6332       Diag(IdentLoc, diag::err_using_typename_non_type);
   6333       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
   6334         Diag((*I)->getUnderlyingDecl()->getLocation(),
   6335              diag::note_using_decl_target);
   6336       UD->setInvalidDecl();
   6337       return UD;
   6338     }
   6339   } else {
   6340     // If we asked for a non-typename and we got a type, error out,
   6341     // but only if this is an instantiation of an unresolved using
   6342     // decl.  Otherwise just silently find the type name.
   6343     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
   6344       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
   6345       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
   6346       UD->setInvalidDecl();
   6347       return UD;
   6348     }
   6349   }
   6350 
   6351   // C++0x N2914 [namespace.udecl]p6:
   6352   // A using-declaration shall not name a namespace.
   6353   if (R.getAsSingle<NamespaceDecl>()) {
   6354     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
   6355       << SS.getRange();
   6356     UD->setInvalidDecl();
   6357     return UD;
   6358   }
   6359 
   6360   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
   6361     if (!CheckUsingShadowDecl(UD, *I, Previous))
   6362       BuildUsingShadowDecl(S, UD, *I);
   6363   }
   6364 
   6365   return UD;
   6366 }
   6367 
   6368 /// Additional checks for a using declaration referring to a constructor name.
   6369 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
   6370   assert(!UD->isTypeName() && "expecting a constructor name");
   6371 
   6372   const Type *SourceType = UD->getQualifier()->getAsType();
   6373   assert(SourceType &&
   6374          "Using decl naming constructor doesn't have type in scope spec.");
   6375   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
   6376 
   6377   // Check whether the named type is a direct base class.
   6378   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
   6379   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
   6380   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
   6381        BaseIt != BaseE; ++BaseIt) {
   6382     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
   6383     if (CanonicalSourceType == BaseType)
   6384       break;
   6385     if (BaseIt->getType()->isDependentType())
   6386       break;
   6387   }
   6388 
   6389   if (BaseIt == BaseE) {
   6390     // Did not find SourceType in the bases.
   6391     Diag(UD->getUsingLocation(),
   6392          diag::err_using_decl_constructor_not_in_direct_base)
   6393       << UD->getNameInfo().getSourceRange()
   6394       << QualType(SourceType, 0) << TargetClass;
   6395     return true;
   6396   }
   6397 
   6398   if (!CurContext->isDependentContext())
   6399     BaseIt->setInheritConstructors();
   6400 
   6401   return false;
   6402 }
   6403 
   6404 /// Checks that the given using declaration is not an invalid
   6405 /// redeclaration.  Note that this is checking only for the using decl
   6406 /// itself, not for any ill-formedness among the UsingShadowDecls.
   6407 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
   6408                                        bool isTypeName,
   6409                                        const CXXScopeSpec &SS,
   6410                                        SourceLocation NameLoc,
   6411                                        const LookupResult &Prev) {
   6412   // C++03 [namespace.udecl]p8:
   6413   // C++0x [namespace.udecl]p10:
   6414   //   A using-declaration is a declaration and can therefore be used
   6415   //   repeatedly where (and only where) multiple declarations are
   6416   //   allowed.
   6417   //
   6418   // That's in non-member contexts.
   6419   if (!CurContext->getRedeclContext()->isRecord())
   6420     return false;
   6421 
   6422   NestedNameSpecifier *Qual
   6423     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   6424 
   6425   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
   6426     NamedDecl *D = *I;
   6427 
   6428     bool DTypename;
   6429     NestedNameSpecifier *DQual;
   6430     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
   6431       DTypename = UD->isTypeName();
   6432       DQual = UD->getQualifier();
   6433     } else if (UnresolvedUsingValueDecl *UD
   6434                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
   6435       DTypename = false;
   6436       DQual = UD->getQualifier();
   6437     } else if (UnresolvedUsingTypenameDecl *UD
   6438                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
   6439       DTypename = true;
   6440       DQual = UD->getQualifier();
   6441     } else continue;
   6442 
   6443     // using decls differ if one says 'typename' and the other doesn't.
   6444     // FIXME: non-dependent using decls?
   6445     if (isTypeName != DTypename) continue;
   6446 
   6447     // using decls differ if they name different scopes (but note that
   6448     // template instantiation can cause this check to trigger when it
   6449     // didn't before instantiation).
   6450     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
   6451         Context.getCanonicalNestedNameSpecifier(DQual))
   6452       continue;
   6453 
   6454     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
   6455     Diag(D->getLocation(), diag::note_using_decl) << 1;
   6456     return true;
   6457   }
   6458 
   6459   return false;
   6460 }
   6461 
   6462 
   6463 /// Checks that the given nested-name qualifier used in a using decl
   6464 /// in the current context is appropriately related to the current
   6465 /// scope.  If an error is found, diagnoses it and returns true.
   6466 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
   6467                                    const CXXScopeSpec &SS,
   6468                                    SourceLocation NameLoc) {
   6469   DeclContext *NamedContext = computeDeclContext(SS);
   6470 
   6471   if (!CurContext->isRecord()) {
   6472     // C++03 [namespace.udecl]p3:
   6473     // C++0x [namespace.udecl]p8:
   6474     //   A using-declaration for a class member shall be a member-declaration.
   6475 
   6476     // If we weren't able to compute a valid scope, it must be a
   6477     // dependent class scope.
   6478     if (!NamedContext || NamedContext->isRecord()) {
   6479       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
   6480         << SS.getRange();
   6481       return true;
   6482     }
   6483 
   6484     // Otherwise, everything is known to be fine.
   6485     return false;
   6486   }
   6487 
   6488   // The current scope is a record.
   6489 
   6490   // If the named context is dependent, we can't decide much.
   6491   if (!NamedContext) {
   6492     // FIXME: in C++0x, we can diagnose if we can prove that the
   6493     // nested-name-specifier does not refer to a base class, which is
   6494     // still possible in some cases.
   6495 
   6496     // Otherwise we have to conservatively report that things might be
   6497     // okay.
   6498     return false;
   6499   }
   6500 
   6501   if (!NamedContext->isRecord()) {
   6502     // Ideally this would point at the last name in the specifier,
   6503     // but we don't have that level of source info.
   6504     Diag(SS.getRange().getBegin(),
   6505          diag::err_using_decl_nested_name_specifier_is_not_class)
   6506       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
   6507     return true;
   6508   }
   6509 
   6510   if (!NamedContext->isDependentContext() &&
   6511       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
   6512     return true;
   6513 
   6514   if (getLangOpts().CPlusPlus0x) {
   6515     // C++0x [namespace.udecl]p3:
   6516     //   In a using-declaration used as a member-declaration, the
   6517     //   nested-name-specifier shall name a base class of the class
   6518     //   being defined.
   6519 
   6520     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
   6521                                  cast<CXXRecordDecl>(NamedContext))) {
   6522       if (CurContext == NamedContext) {
   6523         Diag(NameLoc,
   6524              diag::err_using_decl_nested_name_specifier_is_current_class)
   6525           << SS.getRange();
   6526         return true;
   6527       }
   6528 
   6529       Diag(SS.getRange().getBegin(),
   6530            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6531         << (NestedNameSpecifier*) SS.getScopeRep()
   6532         << cast<CXXRecordDecl>(CurContext)
   6533         << SS.getRange();
   6534       return true;
   6535     }
   6536 
   6537     return false;
   6538   }
   6539 
   6540   // C++03 [namespace.udecl]p4:
   6541   //   A using-declaration used as a member-declaration shall refer
   6542   //   to a member of a base class of the class being defined [etc.].
   6543 
   6544   // Salient point: SS doesn't have to name a base class as long as
   6545   // lookup only finds members from base classes.  Therefore we can
   6546   // diagnose here only if we can prove that that can't happen,
   6547   // i.e. if the class hierarchies provably don't intersect.
   6548 
   6549   // TODO: it would be nice if "definitely valid" results were cached
   6550   // in the UsingDecl and UsingShadowDecl so that these checks didn't
   6551   // need to be repeated.
   6552 
   6553   struct UserData {
   6554     llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
   6555 
   6556     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
   6557       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   6558       Data->Bases.insert(Base);
   6559       return true;
   6560     }
   6561 
   6562     bool hasDependentBases(const CXXRecordDecl *Class) {
   6563       return !Class->forallBases(collect, this);
   6564     }
   6565 
   6566     /// Returns true if the base is dependent or is one of the
   6567     /// accumulated base classes.
   6568     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
   6569       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   6570       return !Data->Bases.count(Base);
   6571     }
   6572 
   6573     bool mightShareBases(const CXXRecordDecl *Class) {
   6574       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
   6575     }
   6576   };
   6577 
   6578   UserData Data;
   6579 
   6580   // Returns false if we find a dependent base.
   6581   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
   6582     return false;
   6583 
   6584   // Returns false if the class has a dependent base or if it or one
   6585   // of its bases is present in the base set of the current context.
   6586   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
   6587     return false;
   6588 
   6589   Diag(SS.getRange().getBegin(),
   6590        diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6591     << (NestedNameSpecifier*) SS.getScopeRep()
   6592     << cast<CXXRecordDecl>(CurContext)
   6593     << SS.getRange();
   6594 
   6595   return true;
   6596 }
   6597 
   6598 Decl *Sema::ActOnAliasDeclaration(Scope *S,
   6599                                   AccessSpecifier AS,
   6600                                   MultiTemplateParamsArg TemplateParamLists,
   6601                                   SourceLocation UsingLoc,
   6602                                   UnqualifiedId &Name,
   6603                                   TypeResult Type) {
   6604   // Skip up to the relevant declaration scope.
   6605   while (S->getFlags() & Scope::TemplateParamScope)
   6606     S = S->getParent();
   6607   assert((S->getFlags() & Scope::DeclScope) &&
   6608          "got alias-declaration outside of declaration scope");
   6609 
   6610   if (Type.isInvalid())
   6611     return 0;
   6612 
   6613   bool Invalid = false;
   6614   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
   6615   TypeSourceInfo *TInfo = 0;
   6616   GetTypeFromParser(Type.get(), &TInfo);
   6617 
   6618   if (DiagnoseClassNameShadow(CurContext, NameInfo))
   6619     return 0;
   6620 
   6621   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
   6622                                       UPPC_DeclarationType)) {
   6623     Invalid = true;
   6624     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   6625                                              TInfo->getTypeLoc().getBeginLoc());
   6626   }
   6627 
   6628   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
   6629   LookupName(Previous, S);
   6630 
   6631   // Warn about shadowing the name of a template parameter.
   6632   if (Previous.isSingleResult() &&
   6633       Previous.getFoundDecl()->isTemplateParameter()) {
   6634     DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
   6635     Previous.clear();
   6636   }
   6637 
   6638   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
   6639          "name in alias declaration must be an identifier");
   6640   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
   6641                                                Name.StartLocation,
   6642                                                Name.Identifier, TInfo);
   6643 
   6644   NewTD->setAccess(AS);
   6645 
   6646   if (Invalid)
   6647     NewTD->setInvalidDecl();
   6648 
   6649   CheckTypedefForVariablyModifiedType(S, NewTD);
   6650   Invalid |= NewTD->isInvalidDecl();
   6651 
   6652   bool Redeclaration = false;
   6653 
   6654   NamedDecl *NewND;
   6655   if (TemplateParamLists.size()) {
   6656     TypeAliasTemplateDecl *OldDecl = 0;
   6657     TemplateParameterList *OldTemplateParams = 0;
   6658 
   6659     if (TemplateParamLists.size() != 1) {
   6660       Diag(UsingLoc, diag::err_alias_template_extra_headers)
   6661         << SourceRange(TemplateParamLists.get()[1]->getTemplateLoc(),
   6662          TemplateParamLists.get()[TemplateParamLists.size()-1]->getRAngleLoc());
   6663     }
   6664     TemplateParameterList *TemplateParams = TemplateParamLists.get()[0];
   6665 
   6666     // Only consider previous declarations in the same scope.
   6667     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
   6668                          /*ExplicitInstantiationOrSpecialization*/false);
   6669     if (!Previous.empty()) {
   6670       Redeclaration = true;
   6671 
   6672       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
   6673       if (!OldDecl && !Invalid) {
   6674         Diag(UsingLoc, diag::err_redefinition_different_kind)
   6675           << Name.Identifier;
   6676 
   6677         NamedDecl *OldD = Previous.getRepresentativeDecl();
   6678         if (OldD->getLocation().isValid())
   6679           Diag(OldD->getLocation(), diag::note_previous_definition);
   6680 
   6681         Invalid = true;
   6682       }
   6683 
   6684       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
   6685         if (TemplateParameterListsAreEqual(TemplateParams,
   6686                                            OldDecl->getTemplateParameters(),
   6687                                            /*Complain=*/true,
   6688                                            TPL_TemplateMatch))
   6689           OldTemplateParams = OldDecl->getTemplateParameters();
   6690         else
   6691           Invalid = true;
   6692 
   6693         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
   6694         if (!Invalid &&
   6695             !Context.hasSameType(OldTD->getUnderlyingType(),
   6696                                  NewTD->getUnderlyingType())) {
   6697           // FIXME: The C++0x standard does not clearly say this is ill-formed,
   6698           // but we can't reasonably accept it.
   6699           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
   6700             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
   6701           if (OldTD->getLocation().isValid())
   6702             Diag(OldTD->getLocation(), diag::note_previous_definition);
   6703           Invalid = true;
   6704         }
   6705       }
   6706     }
   6707 
   6708     // Merge any previous default template arguments into our parameters,
   6709     // and check the parameter list.
   6710     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
   6711                                    TPC_TypeAliasTemplate))
   6712       return 0;
   6713 
   6714     TypeAliasTemplateDecl *NewDecl =
   6715       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
   6716                                     Name.Identifier, TemplateParams,
   6717                                     NewTD);
   6718 
   6719     NewDecl->setAccess(AS);
   6720 
   6721     if (Invalid)
   6722       NewDecl->setInvalidDecl();
   6723     else if (OldDecl)
   6724       NewDecl->setPreviousDeclaration(OldDecl);
   6725 
   6726     NewND = NewDecl;
   6727   } else {
   6728     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
   6729     NewND = NewTD;
   6730   }
   6731 
   6732   if (!Redeclaration)
   6733     PushOnScopeChains(NewND, S);
   6734 
   6735   return NewND;
   6736 }
   6737 
   6738 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
   6739                                              SourceLocation NamespaceLoc,
   6740                                              SourceLocation AliasLoc,
   6741                                              IdentifierInfo *Alias,
   6742                                              CXXScopeSpec &SS,
   6743                                              SourceLocation IdentLoc,
   6744                                              IdentifierInfo *Ident) {
   6745 
   6746   // Lookup the namespace name.
   6747   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
   6748   LookupParsedName(R, S, &SS);
   6749 
   6750   // Check if we have a previous declaration with the same name.
   6751   NamedDecl *PrevDecl
   6752     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
   6753                        ForRedeclaration);
   6754   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
   6755     PrevDecl = 0;
   6756 
   6757   if (PrevDecl) {
   6758     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
   6759       // We already have an alias with the same name that points to the same
   6760       // namespace, so don't create a new one.
   6761       // FIXME: At some point, we'll want to create the (redundant)
   6762       // declaration to maintain better source information.
   6763       if (!R.isAmbiguous() && !R.empty() &&
   6764           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
   6765         return 0;
   6766     }
   6767 
   6768     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
   6769       diag::err_redefinition_different_kind;
   6770     Diag(AliasLoc, DiagID) << Alias;
   6771     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   6772     return 0;
   6773   }
   6774 
   6775   if (R.isAmbiguous())
   6776     return 0;
   6777 
   6778   if (R.empty()) {
   6779     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
   6780       Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
   6781       return 0;
   6782     }
   6783   }
   6784 
   6785   NamespaceAliasDecl *AliasDecl =
   6786     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
   6787                                Alias, SS.getWithLocInContext(Context),
   6788                                IdentLoc, R.getFoundDecl());
   6789 
   6790   PushOnScopeChains(AliasDecl, S);
   6791   return AliasDecl;
   6792 }
   6793 
   6794 namespace {
   6795   /// \brief Scoped object used to handle the state changes required in Sema
   6796   /// to implicitly define the body of a C++ member function;
   6797   class ImplicitlyDefinedFunctionScope {
   6798     Sema &S;
   6799     Sema::ContextRAII SavedContext;
   6800 
   6801   public:
   6802     ImplicitlyDefinedFunctionScope(Sema &S, CXXMethodDecl *Method)
   6803       : S(S), SavedContext(S, Method)
   6804     {
   6805       S.PushFunctionScope();
   6806       S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated);
   6807     }
   6808 
   6809     ~ImplicitlyDefinedFunctionScope() {
   6810       S.PopExpressionEvaluationContext();
   6811       S.PopFunctionScopeInfo();
   6812     }
   6813   };
   6814 }
   6815 
   6816 Sema::ImplicitExceptionSpecification
   6817 Sema::ComputeDefaultedDefaultCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   6818   // C++ [except.spec]p14:
   6819   //   An implicitly declared special member function (Clause 12) shall have an
   6820   //   exception-specification. [...]
   6821   ImplicitExceptionSpecification ExceptSpec(*this);
   6822   if (ClassDecl->isInvalidDecl())
   6823     return ExceptSpec;
   6824 
   6825   // Direct base-class constructors.
   6826   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   6827                                        BEnd = ClassDecl->bases_end();
   6828        B != BEnd; ++B) {
   6829     if (B->isVirtual()) // Handled below.
   6830       continue;
   6831 
   6832     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   6833       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   6834       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   6835       // If this is a deleted function, add it anyway. This might be conformant
   6836       // with the standard. This might not. I'm not sure. It might not matter.
   6837       if (Constructor)
   6838         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   6839     }
   6840   }
   6841 
   6842   // Virtual base-class constructors.
   6843   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   6844                                        BEnd = ClassDecl->vbases_end();
   6845        B != BEnd; ++B) {
   6846     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   6847       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   6848       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   6849       // If this is a deleted function, add it anyway. This might be conformant
   6850       // with the standard. This might not. I'm not sure. It might not matter.
   6851       if (Constructor)
   6852         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   6853     }
   6854   }
   6855 
   6856   // Field constructors.
   6857   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   6858                                FEnd = ClassDecl->field_end();
   6859        F != FEnd; ++F) {
   6860     if (F->hasInClassInitializer()) {
   6861       if (Expr *E = F->getInClassInitializer())
   6862         ExceptSpec.CalledExpr(E);
   6863       else if (!F->isInvalidDecl())
   6864         ExceptSpec.SetDelayed();
   6865     } else if (const RecordType *RecordTy
   6866               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   6867       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   6868       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
   6869       // If this is a deleted function, add it anyway. This might be conformant
   6870       // with the standard. This might not. I'm not sure. It might not matter.
   6871       // In particular, the problem is that this function never gets called. It
   6872       // might just be ill-formed because this function attempts to refer to
   6873       // a deleted function here.
   6874       if (Constructor)
   6875         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
   6876     }
   6877   }
   6878 
   6879   return ExceptSpec;
   6880 }
   6881 
   6882 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
   6883                                                      CXXRecordDecl *ClassDecl) {
   6884   // C++ [class.ctor]p5:
   6885   //   A default constructor for a class X is a constructor of class X
   6886   //   that can be called without an argument. If there is no
   6887   //   user-declared constructor for class X, a default constructor is
   6888   //   implicitly declared. An implicitly-declared default constructor
   6889   //   is an inline public member of its class.
   6890   assert(!ClassDecl->hasUserDeclaredConstructor() &&
   6891          "Should not build implicit default constructor!");
   6892 
   6893   ImplicitExceptionSpecification Spec =
   6894     ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
   6895   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   6896 
   6897   // Create the actual constructor declaration.
   6898   CanQualType ClassType
   6899     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   6900   SourceLocation ClassLoc = ClassDecl->getLocation();
   6901   DeclarationName Name
   6902     = Context.DeclarationNames.getCXXConstructorName(ClassType);
   6903   DeclarationNameInfo NameInfo(Name, ClassLoc);
   6904   CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
   6905       Context, ClassDecl, ClassLoc, NameInfo,
   6906       Context.getFunctionType(Context.VoidTy, 0, 0, EPI), /*TInfo=*/0,
   6907       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   6908       /*isConstexpr=*/ClassDecl->defaultedDefaultConstructorIsConstexpr() &&
   6909         getLangOpts().CPlusPlus0x);
   6910   DefaultCon->setAccess(AS_public);
   6911   DefaultCon->setDefaulted();
   6912   DefaultCon->setImplicit();
   6913   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
   6914 
   6915   // Note that we have declared this constructor.
   6916   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
   6917 
   6918   if (Scope *S = getScopeForContext(ClassDecl))
   6919     PushOnScopeChains(DefaultCon, S, false);
   6920   ClassDecl->addDecl(DefaultCon);
   6921 
   6922   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
   6923     DefaultCon->setDeletedAsWritten();
   6924 
   6925   return DefaultCon;
   6926 }
   6927 
   6928 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
   6929                                             CXXConstructorDecl *Constructor) {
   6930   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
   6931           !Constructor->doesThisDeclarationHaveABody() &&
   6932           !Constructor->isDeleted()) &&
   6933     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
   6934 
   6935   CXXRecordDecl *ClassDecl = Constructor->getParent();
   6936   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
   6937 
   6938   ImplicitlyDefinedFunctionScope Scope(*this, Constructor);
   6939   DiagnosticErrorTrap Trap(Diags);
   6940   if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) ||
   6941       Trap.hasErrorOccurred()) {
   6942     Diag(CurrentLocation, diag::note_member_synthesized_at)
   6943       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
   6944     Constructor->setInvalidDecl();
   6945     return;
   6946   }
   6947 
   6948   SourceLocation Loc = Constructor->getLocation();
   6949   Constructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
   6950 
   6951   Constructor->setUsed();
   6952   MarkVTableUsed(CurrentLocation, ClassDecl);
   6953 
   6954   if (ASTMutationListener *L = getASTMutationListener()) {
   6955     L->CompletedImplicitDefinition(Constructor);
   6956   }
   6957 }
   6958 
   6959 /// Get any existing defaulted default constructor for the given class. Do not
   6960 /// implicitly define one if it does not exist.
   6961 static CXXConstructorDecl *getDefaultedDefaultConstructorUnsafe(Sema &Self,
   6962                                                              CXXRecordDecl *D) {
   6963   ASTContext &Context = Self.Context;
   6964   QualType ClassType = Context.getTypeDeclType(D);
   6965   DeclarationName ConstructorName
   6966     = Context.DeclarationNames.getCXXConstructorName(
   6967                       Context.getCanonicalType(ClassType.getUnqualifiedType()));
   6968 
   6969   DeclContext::lookup_const_iterator Con, ConEnd;
   6970   for (llvm::tie(Con, ConEnd) = D->lookup(ConstructorName);
   6971        Con != ConEnd; ++Con) {
   6972     // A function template cannot be defaulted.
   6973     if (isa<FunctionTemplateDecl>(*Con))
   6974       continue;
   6975 
   6976     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
   6977     if (Constructor->isDefaultConstructor())
   6978       return Constructor->isDefaulted() ? Constructor : 0;
   6979   }
   6980   return 0;
   6981 }
   6982 
   6983 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
   6984   if (!D) return;
   6985   AdjustDeclIfTemplate(D);
   6986 
   6987   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D);
   6988   CXXConstructorDecl *CtorDecl
   6989     = getDefaultedDefaultConstructorUnsafe(*this, ClassDecl);
   6990 
   6991   if (!CtorDecl) return;
   6992 
   6993   // Compute the exception specification for the default constructor.
   6994   const FunctionProtoType *CtorTy =
   6995     CtorDecl->getType()->castAs<FunctionProtoType>();
   6996   if (CtorTy->getExceptionSpecType() == EST_Delayed) {
   6997     // FIXME: Don't do this unless the exception spec is needed.
   6998     ImplicitExceptionSpecification Spec =
   6999       ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
   7000     FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7001     assert(EPI.ExceptionSpecType != EST_Delayed);
   7002 
   7003     CtorDecl->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
   7004   }
   7005 
   7006   // If the default constructor is explicitly defaulted, checking the exception
   7007   // specification is deferred until now.
   7008   if (!CtorDecl->isInvalidDecl() && CtorDecl->isExplicitlyDefaulted() &&
   7009       !ClassDecl->isDependentType())
   7010     CheckExplicitlyDefaultedDefaultConstructor(CtorDecl);
   7011 }
   7012 
   7013 void Sema::DeclareInheritedConstructors(CXXRecordDecl *ClassDecl) {
   7014   // We start with an initial pass over the base classes to collect those that
   7015   // inherit constructors from. If there are none, we can forgo all further
   7016   // processing.
   7017   typedef SmallVector<const RecordType *, 4> BasesVector;
   7018   BasesVector BasesToInheritFrom;
   7019   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
   7020                                           BaseE = ClassDecl->bases_end();
   7021          BaseIt != BaseE; ++BaseIt) {
   7022     if (BaseIt->getInheritConstructors()) {
   7023       QualType Base = BaseIt->getType();
   7024       if (Base->isDependentType()) {
   7025         // If we inherit constructors from anything that is dependent, just
   7026         // abort processing altogether. We'll get another chance for the
   7027         // instantiations.
   7028         return;
   7029       }
   7030       BasesToInheritFrom.push_back(Base->castAs<RecordType>());
   7031     }
   7032   }
   7033   if (BasesToInheritFrom.empty())
   7034     return;
   7035 
   7036   // Now collect the constructors that we already have in the current class.
   7037   // Those take precedence over inherited constructors.
   7038   // C++0x [class.inhctor]p3: [...] a constructor is implicitly declared [...]
   7039   //   unless there is a user-declared constructor with the same signature in
   7040   //   the class where the using-declaration appears.
   7041   llvm::SmallSet<const Type *, 8> ExistingConstructors;
   7042   for (CXXRecordDecl::ctor_iterator CtorIt = ClassDecl->ctor_begin(),
   7043                                     CtorE = ClassDecl->ctor_end();
   7044        CtorIt != CtorE; ++CtorIt) {
   7045     ExistingConstructors.insert(
   7046         Context.getCanonicalType(CtorIt->getType()).getTypePtr());
   7047   }
   7048 
   7049   DeclarationName CreatedCtorName =
   7050       Context.DeclarationNames.getCXXConstructorName(
   7051           ClassDecl->getTypeForDecl()->getCanonicalTypeUnqualified());
   7052 
   7053   // Now comes the true work.
   7054   // First, we keep a map from constructor types to the base that introduced
   7055   // them. Needed for finding conflicting constructors. We also keep the
   7056   // actually inserted declarations in there, for pretty diagnostics.
   7057   typedef std::pair<CanQualType, CXXConstructorDecl *> ConstructorInfo;
   7058   typedef llvm::DenseMap<const Type *, ConstructorInfo> ConstructorToSourceMap;
   7059   ConstructorToSourceMap InheritedConstructors;
   7060   for (BasesVector::iterator BaseIt = BasesToInheritFrom.begin(),
   7061                              BaseE = BasesToInheritFrom.end();
   7062        BaseIt != BaseE; ++BaseIt) {
   7063     const RecordType *Base = *BaseIt;
   7064     CanQualType CanonicalBase = Base->getCanonicalTypeUnqualified();
   7065     CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(Base->getDecl());
   7066     for (CXXRecordDecl::ctor_iterator CtorIt = BaseDecl->ctor_begin(),
   7067                                       CtorE = BaseDecl->ctor_end();
   7068          CtorIt != CtorE; ++CtorIt) {
   7069       // Find the using declaration for inheriting this base's constructors.
   7070       // FIXME: Don't perform name lookup just to obtain a source location!
   7071       DeclarationName Name =
   7072           Context.DeclarationNames.getCXXConstructorName(CanonicalBase);
   7073       LookupResult Result(*this, Name, SourceLocation(), LookupUsingDeclName);
   7074       LookupQualifiedName(Result, CurContext);
   7075       UsingDecl *UD = Result.getAsSingle<UsingDecl>();
   7076       SourceLocation UsingLoc = UD ? UD->getLocation() :
   7077                                      ClassDecl->getLocation();
   7078 
   7079       // C++0x [class.inhctor]p1: The candidate set of inherited constructors
   7080       //   from the class X named in the using-declaration consists of actual
   7081       //   constructors and notional constructors that result from the
   7082       //   transformation of defaulted parameters as follows:
   7083       //   - all non-template default constructors of X, and
   7084       //   - for each non-template constructor of X that has at least one
   7085       //     parameter with a default argument, the set of constructors that
   7086       //     results from omitting any ellipsis parameter specification and
   7087       //     successively omitting parameters with a default argument from the
   7088       //     end of the parameter-type-list.
   7089       CXXConstructorDecl *BaseCtor = *CtorIt;
   7090       bool CanBeCopyOrMove = BaseCtor->isCopyOrMoveConstructor();
   7091       const FunctionProtoType *BaseCtorType =
   7092           BaseCtor->getType()->getAs<FunctionProtoType>();
   7093 
   7094       for (unsigned params = BaseCtor->getMinRequiredArguments(),
   7095                     maxParams = BaseCtor->getNumParams();
   7096            params <= maxParams; ++params) {
   7097         // Skip default constructors. They're never inherited.
   7098         if (params == 0)
   7099           continue;
   7100         // Skip copy and move constructors for the same reason.
   7101         if (CanBeCopyOrMove && params == 1)
   7102           continue;
   7103 
   7104         // Build up a function type for this particular constructor.
   7105         // FIXME: The working paper does not consider that the exception spec
   7106         // for the inheriting constructor might be larger than that of the
   7107         // source. This code doesn't yet, either. When it does, this code will
   7108         // need to be delayed until after exception specifications and in-class
   7109         // member initializers are attached.
   7110         const Type *NewCtorType;
   7111         if (params == maxParams)
   7112           NewCtorType = BaseCtorType;
   7113         else {
   7114           SmallVector<QualType, 16> Args;
   7115           for (unsigned i = 0; i < params; ++i) {
   7116             Args.push_back(BaseCtorType->getArgType(i));
   7117           }
   7118           FunctionProtoType::ExtProtoInfo ExtInfo =
   7119               BaseCtorType->getExtProtoInfo();
   7120           ExtInfo.Variadic = false;
   7121           NewCtorType = Context.getFunctionType(BaseCtorType->getResultType(),
   7122                                                 Args.data(), params, ExtInfo)
   7123                        .getTypePtr();
   7124         }
   7125         const Type *CanonicalNewCtorType =
   7126             Context.getCanonicalType(NewCtorType);
   7127 
   7128         // Now that we have the type, first check if the class already has a
   7129         // constructor with this signature.
   7130         if (ExistingConstructors.count(CanonicalNewCtorType))
   7131           continue;
   7132 
   7133         // Then we check if we have already declared an inherited constructor
   7134         // with this signature.
   7135         std::pair<ConstructorToSourceMap::iterator, bool> result =
   7136             InheritedConstructors.insert(std::make_pair(
   7137                 CanonicalNewCtorType,
   7138                 std::make_pair(CanonicalBase, (CXXConstructorDecl*)0)));
   7139         if (!result.second) {
   7140           // Already in the map. If it came from a different class, that's an
   7141           // error. Not if it's from the same.
   7142           CanQualType PreviousBase = result.first->second.first;
   7143           if (CanonicalBase != PreviousBase) {
   7144             const CXXConstructorDecl *PrevCtor = result.first->second.second;
   7145             const CXXConstructorDecl *PrevBaseCtor =
   7146                 PrevCtor->getInheritedConstructor();
   7147             assert(PrevBaseCtor && "Conflicting constructor was not inherited");
   7148 
   7149             Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
   7150             Diag(BaseCtor->getLocation(),
   7151                  diag::note_using_decl_constructor_conflict_current_ctor);
   7152             Diag(PrevBaseCtor->getLocation(),
   7153                  diag::note_using_decl_constructor_conflict_previous_ctor);
   7154             Diag(PrevCtor->getLocation(),
   7155                  diag::note_using_decl_constructor_conflict_previous_using);
   7156           }
   7157           continue;
   7158         }
   7159 
   7160         // OK, we're there, now add the constructor.
   7161         // C++0x [class.inhctor]p8: [...] that would be performed by a
   7162         //   user-written inline constructor [...]
   7163         DeclarationNameInfo DNI(CreatedCtorName, UsingLoc);
   7164         CXXConstructorDecl *NewCtor = CXXConstructorDecl::Create(
   7165             Context, ClassDecl, UsingLoc, DNI, QualType(NewCtorType, 0),
   7166             /*TInfo=*/0, BaseCtor->isExplicit(), /*Inline=*/true,
   7167             /*ImplicitlyDeclared=*/true,
   7168             // FIXME: Due to a defect in the standard, we treat inherited
   7169             // constructors as constexpr even if that makes them ill-formed.
   7170             /*Constexpr=*/BaseCtor->isConstexpr());
   7171         NewCtor->setAccess(BaseCtor->getAccess());
   7172 
   7173         // Build up the parameter decls and add them.
   7174         SmallVector<ParmVarDecl *, 16> ParamDecls;
   7175         for (unsigned i = 0; i < params; ++i) {
   7176           ParamDecls.push_back(ParmVarDecl::Create(Context, NewCtor,
   7177                                                    UsingLoc, UsingLoc,
   7178                                                    /*IdentifierInfo=*/0,
   7179                                                    BaseCtorType->getArgType(i),
   7180                                                    /*TInfo=*/0, SC_None,
   7181                                                    SC_None, /*DefaultArg=*/0));
   7182         }
   7183         NewCtor->setParams(ParamDecls);
   7184         NewCtor->setInheritedConstructor(BaseCtor);
   7185 
   7186         ClassDecl->addDecl(NewCtor);
   7187         result.first->second.second = NewCtor;
   7188       }
   7189     }
   7190   }
   7191 }
   7192 
   7193 Sema::ImplicitExceptionSpecification
   7194 Sema::ComputeDefaultedDtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   7195   // C++ [except.spec]p14:
   7196   //   An implicitly declared special member function (Clause 12) shall have
   7197   //   an exception-specification.
   7198   ImplicitExceptionSpecification ExceptSpec(*this);
   7199   if (ClassDecl->isInvalidDecl())
   7200     return ExceptSpec;
   7201 
   7202   // Direct base-class destructors.
   7203   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   7204                                        BEnd = ClassDecl->bases_end();
   7205        B != BEnd; ++B) {
   7206     if (B->isVirtual()) // Handled below.
   7207       continue;
   7208 
   7209     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   7210       ExceptSpec.CalledDecl(B->getLocStart(),
   7211                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   7212   }
   7213 
   7214   // Virtual base-class destructors.
   7215   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   7216                                        BEnd = ClassDecl->vbases_end();
   7217        B != BEnd; ++B) {
   7218     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   7219       ExceptSpec.CalledDecl(B->getLocStart(),
   7220                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   7221   }
   7222 
   7223   // Field destructors.
   7224   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   7225                                FEnd = ClassDecl->field_end();
   7226        F != FEnd; ++F) {
   7227     if (const RecordType *RecordTy
   7228         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
   7229       ExceptSpec.CalledDecl(F->getLocation(),
   7230                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
   7231   }
   7232 
   7233   return ExceptSpec;
   7234 }
   7235 
   7236 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
   7237   // C++ [class.dtor]p2:
   7238   //   If a class has no user-declared destructor, a destructor is
   7239   //   declared implicitly. An implicitly-declared destructor is an
   7240   //   inline public member of its class.
   7241 
   7242   ImplicitExceptionSpecification Spec =
   7243       ComputeDefaultedDtorExceptionSpec(ClassDecl);
   7244   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7245 
   7246   // Create the actual destructor declaration.
   7247   QualType Ty = Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
   7248 
   7249   CanQualType ClassType
   7250     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   7251   SourceLocation ClassLoc = ClassDecl->getLocation();
   7252   DeclarationName Name
   7253     = Context.DeclarationNames.getCXXDestructorName(ClassType);
   7254   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7255   CXXDestructorDecl *Destructor
   7256       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, Ty, 0,
   7257                                   /*isInline=*/true,
   7258                                   /*isImplicitlyDeclared=*/true);
   7259   Destructor->setAccess(AS_public);
   7260   Destructor->setDefaulted();
   7261   Destructor->setImplicit();
   7262   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
   7263 
   7264   // Note that we have declared this destructor.
   7265   ++ASTContext::NumImplicitDestructorsDeclared;
   7266 
   7267   // Introduce this destructor into its scope.
   7268   if (Scope *S = getScopeForContext(ClassDecl))
   7269     PushOnScopeChains(Destructor, S, false);
   7270   ClassDecl->addDecl(Destructor);
   7271 
   7272   // This could be uniqued if it ever proves significant.
   7273   Destructor->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(Ty));
   7274 
   7275   AddOverriddenMethods(ClassDecl, Destructor);
   7276 
   7277   if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
   7278     Destructor->setDeletedAsWritten();
   7279 
   7280   return Destructor;
   7281 }
   7282 
   7283 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
   7284                                     CXXDestructorDecl *Destructor) {
   7285   assert((Destructor->isDefaulted() &&
   7286           !Destructor->doesThisDeclarationHaveABody() &&
   7287           !Destructor->isDeleted()) &&
   7288          "DefineImplicitDestructor - call it for implicit default dtor");
   7289   CXXRecordDecl *ClassDecl = Destructor->getParent();
   7290   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
   7291 
   7292   if (Destructor->isInvalidDecl())
   7293     return;
   7294 
   7295   ImplicitlyDefinedFunctionScope Scope(*this, Destructor);
   7296 
   7297   DiagnosticErrorTrap Trap(Diags);
   7298   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
   7299                                          Destructor->getParent());
   7300 
   7301   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
   7302     Diag(CurrentLocation, diag::note_member_synthesized_at)
   7303       << CXXDestructor << Context.getTagDeclType(ClassDecl);
   7304 
   7305     Destructor->setInvalidDecl();
   7306     return;
   7307   }
   7308 
   7309   SourceLocation Loc = Destructor->getLocation();
   7310   Destructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
   7311   Destructor->setImplicitlyDefined(true);
   7312   Destructor->setUsed();
   7313   MarkVTableUsed(CurrentLocation, ClassDecl);
   7314 
   7315   if (ASTMutationListener *L = getASTMutationListener()) {
   7316     L->CompletedImplicitDefinition(Destructor);
   7317   }
   7318 }
   7319 
   7320 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
   7321                                          CXXDestructorDecl *destructor) {
   7322   // C++11 [class.dtor]p3:
   7323   //   A declaration of a destructor that does not have an exception-
   7324   //   specification is implicitly considered to have the same exception-
   7325   //   specification as an implicit declaration.
   7326   const FunctionProtoType *dtorType = destructor->getType()->
   7327                                         getAs<FunctionProtoType>();
   7328   if (dtorType->hasExceptionSpec())
   7329     return;
   7330 
   7331   ImplicitExceptionSpecification exceptSpec =
   7332       ComputeDefaultedDtorExceptionSpec(classDecl);
   7333 
   7334   // Replace the destructor's type, building off the existing one. Fortunately,
   7335   // the only thing of interest in the destructor type is its extended info.
   7336   // The return and arguments are fixed.
   7337   FunctionProtoType::ExtProtoInfo epi = dtorType->getExtProtoInfo();
   7338   epi.ExceptionSpecType = exceptSpec.getExceptionSpecType();
   7339   epi.NumExceptions = exceptSpec.size();
   7340   epi.Exceptions = exceptSpec.data();
   7341   QualType ty = Context.getFunctionType(Context.VoidTy, 0, 0, epi);
   7342 
   7343   destructor->setType(ty);
   7344 
   7345   // FIXME: If the destructor has a body that could throw, and the newly created
   7346   // spec doesn't allow exceptions, we should emit a warning, because this
   7347   // change in behavior can break conforming C++03 programs at runtime.
   7348   // However, we don't have a body yet, so it needs to be done somewhere else.
   7349 }
   7350 
   7351 /// \brief Builds a statement that copies/moves the given entity from \p From to
   7352 /// \c To.
   7353 ///
   7354 /// This routine is used to copy/move the members of a class with an
   7355 /// implicitly-declared copy/move assignment operator. When the entities being
   7356 /// copied are arrays, this routine builds for loops to copy them.
   7357 ///
   7358 /// \param S The Sema object used for type-checking.
   7359 ///
   7360 /// \param Loc The location where the implicit copy/move is being generated.
   7361 ///
   7362 /// \param T The type of the expressions being copied/moved. Both expressions
   7363 /// must have this type.
   7364 ///
   7365 /// \param To The expression we are copying/moving to.
   7366 ///
   7367 /// \param From The expression we are copying/moving from.
   7368 ///
   7369 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
   7370 /// Otherwise, it's a non-static member subobject.
   7371 ///
   7372 /// \param Copying Whether we're copying or moving.
   7373 ///
   7374 /// \param Depth Internal parameter recording the depth of the recursion.
   7375 ///
   7376 /// \returns A statement or a loop that copies the expressions.
   7377 static StmtResult
   7378 BuildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
   7379                       Expr *To, Expr *From,
   7380                       bool CopyingBaseSubobject, bool Copying,
   7381                       unsigned Depth = 0) {
   7382   // C++0x [class.copy]p28:
   7383   //   Each subobject is assigned in the manner appropriate to its type:
   7384   //
   7385   //     - if the subobject is of class type, as if by a call to operator= with
   7386   //       the subobject as the object expression and the corresponding
   7387   //       subobject of x as a single function argument (as if by explicit
   7388   //       qualification; that is, ignoring any possible virtual overriding
   7389   //       functions in more derived classes);
   7390   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
   7391     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   7392 
   7393     // Look for operator=.
   7394     DeclarationName Name
   7395       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   7396     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
   7397     S.LookupQualifiedName(OpLookup, ClassDecl, false);
   7398 
   7399     // Filter out any result that isn't a copy/move-assignment operator.
   7400     LookupResult::Filter F = OpLookup.makeFilter();
   7401     while (F.hasNext()) {
   7402       NamedDecl *D = F.next();
   7403       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
   7404         if (Method->isCopyAssignmentOperator() ||
   7405             (!Copying && Method->isMoveAssignmentOperator()))
   7406           continue;
   7407 
   7408       F.erase();
   7409     }
   7410     F.done();
   7411 
   7412     // Suppress the protected check (C++ [class.protected]) for each of the
   7413     // assignment operators we found. This strange dance is required when
   7414     // we're assigning via a base classes's copy-assignment operator. To
   7415     // ensure that we're getting the right base class subobject (without
   7416     // ambiguities), we need to cast "this" to that subobject type; to
   7417     // ensure that we don't go through the virtual call mechanism, we need
   7418     // to qualify the operator= name with the base class (see below). However,
   7419     // this means that if the base class has a protected copy assignment
   7420     // operator, the protected member access check will fail. So, we
   7421     // rewrite "protected" access to "public" access in this case, since we
   7422     // know by construction that we're calling from a derived class.
   7423     if (CopyingBaseSubobject) {
   7424       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
   7425            L != LEnd; ++L) {
   7426         if (L.getAccess() == AS_protected)
   7427           L.setAccess(AS_public);
   7428       }
   7429     }
   7430 
   7431     // Create the nested-name-specifier that will be used to qualify the
   7432     // reference to operator=; this is required to suppress the virtual
   7433     // call mechanism.
   7434     CXXScopeSpec SS;
   7435     const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
   7436     SS.MakeTrivial(S.Context,
   7437                    NestedNameSpecifier::Create(S.Context, 0, false,
   7438                                                CanonicalT),
   7439                    Loc);
   7440 
   7441     // Create the reference to operator=.
   7442     ExprResult OpEqualRef
   7443       = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
   7444                                    /*TemplateKWLoc=*/SourceLocation(),
   7445                                    /*FirstQualifierInScope=*/0,
   7446                                    OpLookup,
   7447                                    /*TemplateArgs=*/0,
   7448                                    /*SuppressQualifierCheck=*/true);
   7449     if (OpEqualRef.isInvalid())
   7450       return StmtError();
   7451 
   7452     // Build the call to the assignment operator.
   7453 
   7454     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
   7455                                                   OpEqualRef.takeAs<Expr>(),
   7456                                                   Loc, &From, 1, Loc);
   7457     if (Call.isInvalid())
   7458       return StmtError();
   7459 
   7460     return S.Owned(Call.takeAs<Stmt>());
   7461   }
   7462 
   7463   //     - if the subobject is of scalar type, the built-in assignment
   7464   //       operator is used.
   7465   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
   7466   if (!ArrayTy) {
   7467     ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
   7468     if (Assignment.isInvalid())
   7469       return StmtError();
   7470 
   7471     return S.Owned(Assignment.takeAs<Stmt>());
   7472   }
   7473 
   7474   //     - if the subobject is an array, each element is assigned, in the
   7475   //       manner appropriate to the element type;
   7476 
   7477   // Construct a loop over the array bounds, e.g.,
   7478   //
   7479   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
   7480   //
   7481   // that will copy each of the array elements.
   7482   QualType SizeType = S.Context.getSizeType();
   7483 
   7484   // Create the iteration variable.
   7485   IdentifierInfo *IterationVarName = 0;
   7486   {
   7487     SmallString<8> Str;
   7488     llvm::raw_svector_ostream OS(Str);
   7489     OS << "__i" << Depth;
   7490     IterationVarName = &S.Context.Idents.get(OS.str());
   7491   }
   7492   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
   7493                                           IterationVarName, SizeType,
   7494                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   7495                                           SC_None, SC_None);
   7496 
   7497   // Initialize the iteration variable to zero.
   7498   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
   7499   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
   7500 
   7501   // Create a reference to the iteration variable; we'll use this several
   7502   // times throughout.
   7503   Expr *IterationVarRef
   7504     = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
   7505   assert(IterationVarRef && "Reference to invented variable cannot fail!");
   7506   Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
   7507   assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
   7508 
   7509   // Create the DeclStmt that holds the iteration variable.
   7510   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
   7511 
   7512   // Create the comparison against the array bound.
   7513   llvm::APInt Upper
   7514     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
   7515   Expr *Comparison
   7516     = new (S.Context) BinaryOperator(IterationVarRefRVal,
   7517                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
   7518                                      BO_NE, S.Context.BoolTy,
   7519                                      VK_RValue, OK_Ordinary, Loc);
   7520 
   7521   // Create the pre-increment of the iteration variable.
   7522   Expr *Increment
   7523     = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
   7524                                     VK_LValue, OK_Ordinary, Loc);
   7525 
   7526   // Subscript the "from" and "to" expressions with the iteration variable.
   7527   From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
   7528                                                          IterationVarRefRVal,
   7529                                                          Loc));
   7530   To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
   7531                                                        IterationVarRefRVal,
   7532                                                        Loc));
   7533   if (!Copying) // Cast to rvalue
   7534     From = CastForMoving(S, From);
   7535 
   7536   // Build the copy/move for an individual element of the array.
   7537   StmtResult Copy = BuildSingleCopyAssign(S, Loc, ArrayTy->getElementType(),
   7538                                           To, From, CopyingBaseSubobject,
   7539                                           Copying, Depth + 1);
   7540   if (Copy.isInvalid())
   7541     return StmtError();
   7542 
   7543   // Construct the loop that copies all elements of this array.
   7544   return S.ActOnForStmt(Loc, Loc, InitStmt,
   7545                         S.MakeFullExpr(Comparison),
   7546                         0, S.MakeFullExpr(Increment),
   7547                         Loc, Copy.take());
   7548 }
   7549 
   7550 std::pair<Sema::ImplicitExceptionSpecification, bool>
   7551 Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
   7552                                                    CXXRecordDecl *ClassDecl) {
   7553   if (ClassDecl->isInvalidDecl())
   7554     return std::make_pair(ImplicitExceptionSpecification(*this), false);
   7555 
   7556   // C++ [class.copy]p10:
   7557   //   If the class definition does not explicitly declare a copy
   7558   //   assignment operator, one is declared implicitly.
   7559   //   The implicitly-defined copy assignment operator for a class X
   7560   //   will have the form
   7561   //
   7562   //       X& X::operator=(const X&)
   7563   //
   7564   //   if
   7565   bool HasConstCopyAssignment = true;
   7566 
   7567   //       -- each direct base class B of X has a copy assignment operator
   7568   //          whose parameter is of type const B&, const volatile B& or B,
   7569   //          and
   7570   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7571                                        BaseEnd = ClassDecl->bases_end();
   7572        HasConstCopyAssignment && Base != BaseEnd; ++Base) {
   7573     // We'll handle this below
   7574     if (LangOpts.CPlusPlus0x && Base->isVirtual())
   7575       continue;
   7576 
   7577     assert(!Base->getType()->isDependentType() &&
   7578            "Cannot generate implicit members for class with dependent bases.");
   7579     CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
   7580     LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
   7581                             &HasConstCopyAssignment);
   7582   }
   7583 
   7584   // In C++11, the above citation has "or virtual" added
   7585   if (LangOpts.CPlusPlus0x) {
   7586     for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   7587                                          BaseEnd = ClassDecl->vbases_end();
   7588          HasConstCopyAssignment && Base != BaseEnd; ++Base) {
   7589       assert(!Base->getType()->isDependentType() &&
   7590              "Cannot generate implicit members for class with dependent bases.");
   7591       CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
   7592       LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
   7593                               &HasConstCopyAssignment);
   7594     }
   7595   }
   7596 
   7597   //       -- for all the nonstatic data members of X that are of a class
   7598   //          type M (or array thereof), each such class type has a copy
   7599   //          assignment operator whose parameter is of type const M&,
   7600   //          const volatile M& or M.
   7601   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7602                                   FieldEnd = ClassDecl->field_end();
   7603        HasConstCopyAssignment && Field != FieldEnd;
   7604        ++Field) {
   7605     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   7606     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   7607       LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const, false, 0,
   7608                               &HasConstCopyAssignment);
   7609     }
   7610   }
   7611 
   7612   //   Otherwise, the implicitly declared copy assignment operator will
   7613   //   have the form
   7614   //
   7615   //       X& X::operator=(X&)
   7616 
   7617   // C++ [except.spec]p14:
   7618   //   An implicitly declared special member function (Clause 12) shall have an
   7619   //   exception-specification. [...]
   7620 
   7621   // It is unspecified whether or not an implicit copy assignment operator
   7622   // attempts to deduplicate calls to assignment operators of virtual bases are
   7623   // made. As such, this exception specification is effectively unspecified.
   7624   // Based on a similar decision made for constness in C++0x, we're erring on
   7625   // the side of assuming such calls to be made regardless of whether they
   7626   // actually happen.
   7627   ImplicitExceptionSpecification ExceptSpec(*this);
   7628   unsigned ArgQuals = HasConstCopyAssignment ? Qualifiers::Const : 0;
   7629   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7630                                        BaseEnd = ClassDecl->bases_end();
   7631        Base != BaseEnd; ++Base) {
   7632     if (Base->isVirtual())
   7633       continue;
   7634 
   7635     CXXRecordDecl *BaseClassDecl
   7636       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7637     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   7638                                                             ArgQuals, false, 0))
   7639       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
   7640   }
   7641 
   7642   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   7643                                        BaseEnd = ClassDecl->vbases_end();
   7644        Base != BaseEnd; ++Base) {
   7645     CXXRecordDecl *BaseClassDecl
   7646       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7647     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   7648                                                             ArgQuals, false, 0))
   7649       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
   7650   }
   7651 
   7652   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7653                                   FieldEnd = ClassDecl->field_end();
   7654        Field != FieldEnd;
   7655        ++Field) {
   7656     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   7657     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   7658       if (CXXMethodDecl *CopyAssign =
   7659           LookupCopyingAssignment(FieldClassDecl, ArgQuals, false, 0))
   7660         ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
   7661     }
   7662   }
   7663 
   7664   return std::make_pair(ExceptSpec, HasConstCopyAssignment);
   7665 }
   7666 
   7667 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
   7668   // Note: The following rules are largely analoguous to the copy
   7669   // constructor rules. Note that virtual bases are not taken into account
   7670   // for determining the argument type of the operator. Note also that
   7671   // operators taking an object instead of a reference are allowed.
   7672 
   7673   ImplicitExceptionSpecification Spec(*this);
   7674   bool Const;
   7675   llvm::tie(Spec, Const) =
   7676     ComputeDefaultedCopyAssignmentExceptionSpecAndConst(ClassDecl);
   7677 
   7678   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   7679   QualType RetType = Context.getLValueReferenceType(ArgType);
   7680   if (Const)
   7681     ArgType = ArgType.withConst();
   7682   ArgType = Context.getLValueReferenceType(ArgType);
   7683 
   7684   //   An implicitly-declared copy assignment operator is an inline public
   7685   //   member of its class.
   7686   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7687   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   7688   SourceLocation ClassLoc = ClassDecl->getLocation();
   7689   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7690   CXXMethodDecl *CopyAssignment
   7691     = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   7692                             Context.getFunctionType(RetType, &ArgType, 1, EPI),
   7693                             /*TInfo=*/0, /*isStatic=*/false,
   7694                             /*StorageClassAsWritten=*/SC_None,
   7695                             /*isInline=*/true, /*isConstexpr=*/false,
   7696                             SourceLocation());
   7697   CopyAssignment->setAccess(AS_public);
   7698   CopyAssignment->setDefaulted();
   7699   CopyAssignment->setImplicit();
   7700   CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
   7701 
   7702   // Add the parameter to the operator.
   7703   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
   7704                                                ClassLoc, ClassLoc, /*Id=*/0,
   7705                                                ArgType, /*TInfo=*/0,
   7706                                                SC_None,
   7707                                                SC_None, 0);
   7708   CopyAssignment->setParams(FromParam);
   7709 
   7710   // Note that we have added this copy-assignment operator.
   7711   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
   7712 
   7713   if (Scope *S = getScopeForContext(ClassDecl))
   7714     PushOnScopeChains(CopyAssignment, S, false);
   7715   ClassDecl->addDecl(CopyAssignment);
   7716 
   7717   // C++0x [class.copy]p19:
   7718   //   ....  If the class definition does not explicitly declare a copy
   7719   //   assignment operator, there is no user-declared move constructor, and
   7720   //   there is no user-declared move assignment operator, a copy assignment
   7721   //   operator is implicitly declared as defaulted.
   7722   if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
   7723     CopyAssignment->setDeletedAsWritten();
   7724 
   7725   AddOverriddenMethods(ClassDecl, CopyAssignment);
   7726   return CopyAssignment;
   7727 }
   7728 
   7729 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
   7730                                         CXXMethodDecl *CopyAssignOperator) {
   7731   assert((CopyAssignOperator->isDefaulted() &&
   7732           CopyAssignOperator->isOverloadedOperator() &&
   7733           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
   7734           !CopyAssignOperator->doesThisDeclarationHaveABody() &&
   7735           !CopyAssignOperator->isDeleted()) &&
   7736          "DefineImplicitCopyAssignment called for wrong function");
   7737 
   7738   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
   7739 
   7740   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
   7741     CopyAssignOperator->setInvalidDecl();
   7742     return;
   7743   }
   7744 
   7745   CopyAssignOperator->setUsed();
   7746 
   7747   ImplicitlyDefinedFunctionScope Scope(*this, CopyAssignOperator);
   7748   DiagnosticErrorTrap Trap(Diags);
   7749 
   7750   // C++0x [class.copy]p30:
   7751   //   The implicitly-defined or explicitly-defaulted copy assignment operator
   7752   //   for a non-union class X performs memberwise copy assignment of its
   7753   //   subobjects. The direct base classes of X are assigned first, in the
   7754   //   order of their declaration in the base-specifier-list, and then the
   7755   //   immediate non-static data members of X are assigned, in the order in
   7756   //   which they were declared in the class definition.
   7757 
   7758   // The statements that form the synthesized function body.
   7759   ASTOwningVector<Stmt*> Statements(*this);
   7760 
   7761   // The parameter for the "other" object, which we are copying from.
   7762   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
   7763   Qualifiers OtherQuals = Other->getType().getQualifiers();
   7764   QualType OtherRefType = Other->getType();
   7765   if (const LValueReferenceType *OtherRef
   7766                                 = OtherRefType->getAs<LValueReferenceType>()) {
   7767     OtherRefType = OtherRef->getPointeeType();
   7768     OtherQuals = OtherRefType.getQualifiers();
   7769   }
   7770 
   7771   // Our location for everything implicitly-generated.
   7772   SourceLocation Loc = CopyAssignOperator->getLocation();
   7773 
   7774   // Construct a reference to the "other" object. We'll be using this
   7775   // throughout the generated ASTs.
   7776   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   7777   assert(OtherRef && "Reference to parameter cannot fail!");
   7778 
   7779   // Construct the "this" pointer. We'll be using this throughout the generated
   7780   // ASTs.
   7781   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   7782   assert(This && "Reference to this cannot fail!");
   7783 
   7784   // Assign base classes.
   7785   bool Invalid = false;
   7786   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7787        E = ClassDecl->bases_end(); Base != E; ++Base) {
   7788     // Form the assignment:
   7789     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
   7790     QualType BaseType = Base->getType().getUnqualifiedType();
   7791     if (!BaseType->isRecordType()) {
   7792       Invalid = true;
   7793       continue;
   7794     }
   7795 
   7796     CXXCastPath BasePath;
   7797     BasePath.push_back(Base);
   7798 
   7799     // Construct the "from" expression, which is an implicit cast to the
   7800     // appropriately-qualified base type.
   7801     Expr *From = OtherRef;
   7802     From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
   7803                              CK_UncheckedDerivedToBase,
   7804                              VK_LValue, &BasePath).take();
   7805 
   7806     // Dereference "this".
   7807     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   7808 
   7809     // Implicitly cast "this" to the appropriately-qualified base type.
   7810     To = ImpCastExprToType(To.take(),
   7811                            Context.getCVRQualifiedType(BaseType,
   7812                                      CopyAssignOperator->getTypeQualifiers()),
   7813                            CK_UncheckedDerivedToBase,
   7814                            VK_LValue, &BasePath);
   7815 
   7816     // Build the copy.
   7817     StmtResult Copy = BuildSingleCopyAssign(*this, Loc, BaseType,
   7818                                             To.get(), From,
   7819                                             /*CopyingBaseSubobject=*/true,
   7820                                             /*Copying=*/true);
   7821     if (Copy.isInvalid()) {
   7822       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7823         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7824       CopyAssignOperator->setInvalidDecl();
   7825       return;
   7826     }
   7827 
   7828     // Success! Record the copy.
   7829     Statements.push_back(Copy.takeAs<Expr>());
   7830   }
   7831 
   7832   // \brief Reference to the __builtin_memcpy function.
   7833   Expr *BuiltinMemCpyRef = 0;
   7834   // \brief Reference to the __builtin_objc_memmove_collectable function.
   7835   Expr *CollectableMemCpyRef = 0;
   7836 
   7837   // Assign non-static members.
   7838   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7839                                   FieldEnd = ClassDecl->field_end();
   7840        Field != FieldEnd; ++Field) {
   7841     if (Field->isUnnamedBitfield())
   7842       continue;
   7843 
   7844     // Check for members of reference type; we can't copy those.
   7845     if (Field->getType()->isReferenceType()) {
   7846       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   7847         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   7848       Diag(Field->getLocation(), diag::note_declared_at);
   7849       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7850         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7851       Invalid = true;
   7852       continue;
   7853     }
   7854 
   7855     // Check for members of const-qualified, non-class type.
   7856     QualType BaseType = Context.getBaseElementType(Field->getType());
   7857     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   7858       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   7859         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   7860       Diag(Field->getLocation(), diag::note_declared_at);
   7861       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7862         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7863       Invalid = true;
   7864       continue;
   7865     }
   7866 
   7867     // Suppress assigning zero-width bitfields.
   7868     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   7869       continue;
   7870 
   7871     QualType FieldType = Field->getType().getNonReferenceType();
   7872     if (FieldType->isIncompleteArrayType()) {
   7873       assert(ClassDecl->hasFlexibleArrayMember() &&
   7874              "Incomplete array type is not valid");
   7875       continue;
   7876     }
   7877 
   7878     // Build references to the field in the object we're copying from and to.
   7879     CXXScopeSpec SS; // Intentionally empty
   7880     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   7881                               LookupMemberName);
   7882     MemberLookup.addDecl(*Field);
   7883     MemberLookup.resolveKind();
   7884     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   7885                                                Loc, /*IsArrow=*/false,
   7886                                                SS, SourceLocation(), 0,
   7887                                                MemberLookup, 0);
   7888     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   7889                                              Loc, /*IsArrow=*/true,
   7890                                              SS, SourceLocation(), 0,
   7891                                              MemberLookup, 0);
   7892     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   7893     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   7894 
   7895     // If the field should be copied with __builtin_memcpy rather than via
   7896     // explicit assignments, do so. This optimization only applies for arrays
   7897     // of scalars and arrays of class type with trivial copy-assignment
   7898     // operators.
   7899     if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
   7900         && BaseType.hasTrivialAssignment(Context, /*Copying=*/true)) {
   7901       // Compute the size of the memory buffer to be copied.
   7902       QualType SizeType = Context.getSizeType();
   7903       llvm::APInt Size(Context.getTypeSize(SizeType),
   7904                        Context.getTypeSizeInChars(BaseType).getQuantity());
   7905       for (const ConstantArrayType *Array
   7906               = Context.getAsConstantArrayType(FieldType);
   7907            Array;
   7908            Array = Context.getAsConstantArrayType(Array->getElementType())) {
   7909         llvm::APInt ArraySize
   7910           = Array->getSize().zextOrTrunc(Size.getBitWidth());
   7911         Size *= ArraySize;
   7912       }
   7913 
   7914       // Take the address of the field references for "from" and "to".
   7915       From = CreateBuiltinUnaryOp(Loc, UO_AddrOf, From.get());
   7916       To = CreateBuiltinUnaryOp(Loc, UO_AddrOf, To.get());
   7917 
   7918       bool NeedsCollectableMemCpy =
   7919           (BaseType->isRecordType() &&
   7920            BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
   7921 
   7922       if (NeedsCollectableMemCpy) {
   7923         if (!CollectableMemCpyRef) {
   7924           // Create a reference to the __builtin_objc_memmove_collectable function.
   7925           LookupResult R(*this,
   7926                          &Context.Idents.get("__builtin_objc_memmove_collectable"),
   7927                          Loc, LookupOrdinaryName);
   7928           LookupName(R, TUScope, true);
   7929 
   7930           FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
   7931           if (!CollectableMemCpy) {
   7932             // Something went horribly wrong earlier, and we will have
   7933             // complained about it.
   7934             Invalid = true;
   7935             continue;
   7936           }
   7937 
   7938           CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
   7939                                                   CollectableMemCpy->getType(),
   7940                                                   VK_LValue, Loc, 0).take();
   7941           assert(CollectableMemCpyRef && "Builtin reference cannot fail");
   7942         }
   7943       }
   7944       // Create a reference to the __builtin_memcpy builtin function.
   7945       else if (!BuiltinMemCpyRef) {
   7946         LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
   7947                        LookupOrdinaryName);
   7948         LookupName(R, TUScope, true);
   7949 
   7950         FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
   7951         if (!BuiltinMemCpy) {
   7952           // Something went horribly wrong earlier, and we will have complained
   7953           // about it.
   7954           Invalid = true;
   7955           continue;
   7956         }
   7957 
   7958         BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
   7959                                             BuiltinMemCpy->getType(),
   7960                                             VK_LValue, Loc, 0).take();
   7961         assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
   7962       }
   7963 
   7964       ASTOwningVector<Expr*> CallArgs(*this);
   7965       CallArgs.push_back(To.takeAs<Expr>());
   7966       CallArgs.push_back(From.takeAs<Expr>());
   7967       CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
   7968       ExprResult Call = ExprError();
   7969       if (NeedsCollectableMemCpy)
   7970         Call = ActOnCallExpr(/*Scope=*/0,
   7971                              CollectableMemCpyRef,
   7972                              Loc, move_arg(CallArgs),
   7973                              Loc);
   7974       else
   7975         Call = ActOnCallExpr(/*Scope=*/0,
   7976                              BuiltinMemCpyRef,
   7977                              Loc, move_arg(CallArgs),
   7978                              Loc);
   7979 
   7980       assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
   7981       Statements.push_back(Call.takeAs<Expr>());
   7982       continue;
   7983     }
   7984 
   7985     // Build the copy of this field.
   7986     StmtResult Copy = BuildSingleCopyAssign(*this, Loc, FieldType,
   7987                                             To.get(), From.get(),
   7988                                             /*CopyingBaseSubobject=*/false,
   7989                                             /*Copying=*/true);
   7990     if (Copy.isInvalid()) {
   7991       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7992         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7993       CopyAssignOperator->setInvalidDecl();
   7994       return;
   7995     }
   7996 
   7997     // Success! Record the copy.
   7998     Statements.push_back(Copy.takeAs<Stmt>());
   7999   }
   8000 
   8001   if (!Invalid) {
   8002     // Add a "return *this;"
   8003     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   8004 
   8005     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   8006     if (Return.isInvalid())
   8007       Invalid = true;
   8008     else {
   8009       Statements.push_back(Return.takeAs<Stmt>());
   8010 
   8011       if (Trap.hasErrorOccurred()) {
   8012         Diag(CurrentLocation, diag::note_member_synthesized_at)
   8013           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   8014         Invalid = true;
   8015       }
   8016     }
   8017   }
   8018 
   8019   if (Invalid) {
   8020     CopyAssignOperator->setInvalidDecl();
   8021     return;
   8022   }
   8023 
   8024   StmtResult Body;
   8025   {
   8026     CompoundScopeRAII CompoundScope(*this);
   8027     Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
   8028                              /*isStmtExpr=*/false);
   8029     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   8030   }
   8031   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
   8032 
   8033   if (ASTMutationListener *L = getASTMutationListener()) {
   8034     L->CompletedImplicitDefinition(CopyAssignOperator);
   8035   }
   8036 }
   8037 
   8038 Sema::ImplicitExceptionSpecification
   8039 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXRecordDecl *ClassDecl) {
   8040   ImplicitExceptionSpecification ExceptSpec(*this);
   8041 
   8042   if (ClassDecl->isInvalidDecl())
   8043     return ExceptSpec;
   8044 
   8045   // C++0x [except.spec]p14:
   8046   //   An implicitly declared special member function (Clause 12) shall have an
   8047   //   exception-specification. [...]
   8048 
   8049   // It is unspecified whether or not an implicit move assignment operator
   8050   // attempts to deduplicate calls to assignment operators of virtual bases are
   8051   // made. As such, this exception specification is effectively unspecified.
   8052   // Based on a similar decision made for constness in C++0x, we're erring on
   8053   // the side of assuming such calls to be made regardless of whether they
   8054   // actually happen.
   8055   // Note that a move constructor is not implicitly declared when there are
   8056   // virtual bases, but it can still be user-declared and explicitly defaulted.
   8057   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8058                                        BaseEnd = ClassDecl->bases_end();
   8059        Base != BaseEnd; ++Base) {
   8060     if (Base->isVirtual())
   8061       continue;
   8062 
   8063     CXXRecordDecl *BaseClassDecl
   8064       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8065     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   8066                                                            false, 0))
   8067       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
   8068   }
   8069 
   8070   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8071                                        BaseEnd = ClassDecl->vbases_end();
   8072        Base != BaseEnd; ++Base) {
   8073     CXXRecordDecl *BaseClassDecl
   8074       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8075     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   8076                                                            false, 0))
   8077       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
   8078   }
   8079 
   8080   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8081                                   FieldEnd = ClassDecl->field_end();
   8082        Field != FieldEnd;
   8083        ++Field) {
   8084     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   8085     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8086       if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(FieldClassDecl,
   8087                                                              false, 0))
   8088         ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
   8089     }
   8090   }
   8091 
   8092   return ExceptSpec;
   8093 }
   8094 
   8095 /// Determine whether the class type has any direct or indirect virtual base
   8096 /// classes which have a non-trivial move assignment operator.
   8097 static bool
   8098 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
   8099   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8100                                           BaseEnd = ClassDecl->vbases_end();
   8101        Base != BaseEnd; ++Base) {
   8102     CXXRecordDecl *BaseClass =
   8103         cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8104 
   8105     // Try to declare the move assignment. If it would be deleted, then the
   8106     // class does not have a non-trivial move assignment.
   8107     if (BaseClass->needsImplicitMoveAssignment())
   8108       S.DeclareImplicitMoveAssignment(BaseClass);
   8109 
   8110     // If the class has both a trivial move assignment and a non-trivial move
   8111     // assignment, hasTrivialMoveAssignment() is false.
   8112     if (BaseClass->hasDeclaredMoveAssignment() &&
   8113         !BaseClass->hasTrivialMoveAssignment())
   8114       return true;
   8115   }
   8116 
   8117   return false;
   8118 }
   8119 
   8120 /// Determine whether the given type either has a move constructor or is
   8121 /// trivially copyable.
   8122 static bool
   8123 hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
   8124   Type = S.Context.getBaseElementType(Type);
   8125 
   8126   // FIXME: Technically, non-trivially-copyable non-class types, such as
   8127   // reference types, are supposed to return false here, but that appears
   8128   // to be a standard defect.
   8129   CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
   8130   if (!ClassDecl)
   8131     return true;
   8132 
   8133   if (Type.isTriviallyCopyableType(S.Context))
   8134     return true;
   8135 
   8136   if (IsConstructor) {
   8137     if (ClassDecl->needsImplicitMoveConstructor())
   8138       S.DeclareImplicitMoveConstructor(ClassDecl);
   8139     return ClassDecl->hasDeclaredMoveConstructor();
   8140   }
   8141 
   8142   if (ClassDecl->needsImplicitMoveAssignment())
   8143     S.DeclareImplicitMoveAssignment(ClassDecl);
   8144   return ClassDecl->hasDeclaredMoveAssignment();
   8145 }
   8146 
   8147 /// Determine whether all non-static data members and direct or virtual bases
   8148 /// of class \p ClassDecl have either a move operation, or are trivially
   8149 /// copyable.
   8150 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
   8151                                             bool IsConstructor) {
   8152   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8153                                           BaseEnd = ClassDecl->bases_end();
   8154        Base != BaseEnd; ++Base) {
   8155     if (Base->isVirtual())
   8156       continue;
   8157 
   8158     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
   8159       return false;
   8160   }
   8161 
   8162   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8163                                           BaseEnd = ClassDecl->vbases_end();
   8164        Base != BaseEnd; ++Base) {
   8165     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
   8166       return false;
   8167   }
   8168 
   8169   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8170                                      FieldEnd = ClassDecl->field_end();
   8171        Field != FieldEnd; ++Field) {
   8172     if (!hasMoveOrIsTriviallyCopyable(S, (*Field)->getType(), IsConstructor))
   8173       return false;
   8174   }
   8175 
   8176   return true;
   8177 }
   8178 
   8179 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
   8180   // C++11 [class.copy]p20:
   8181   //   If the definition of a class X does not explicitly declare a move
   8182   //   assignment operator, one will be implicitly declared as defaulted
   8183   //   if and only if:
   8184   //
   8185   //   - [first 4 bullets]
   8186   assert(ClassDecl->needsImplicitMoveAssignment());
   8187 
   8188   // [Checked after we build the declaration]
   8189   //   - the move assignment operator would not be implicitly defined as
   8190   //     deleted,
   8191 
   8192   // [DR1402]:
   8193   //   - X has no direct or indirect virtual base class with a non-trivial
   8194   //     move assignment operator, and
   8195   //   - each of X's non-static data members and direct or virtual base classes
   8196   //     has a type that either has a move assignment operator or is trivially
   8197   //     copyable.
   8198   if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
   8199       !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
   8200     ClassDecl->setFailedImplicitMoveAssignment();
   8201     return 0;
   8202   }
   8203 
   8204   // Note: The following rules are largely analoguous to the move
   8205   // constructor rules.
   8206 
   8207   ImplicitExceptionSpecification Spec(
   8208       ComputeDefaultedMoveAssignmentExceptionSpec(ClassDecl));
   8209 
   8210   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   8211   QualType RetType = Context.getLValueReferenceType(ArgType);
   8212   ArgType = Context.getRValueReferenceType(ArgType);
   8213 
   8214   //   An implicitly-declared move assignment operator is an inline public
   8215   //   member of its class.
   8216   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   8217   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   8218   SourceLocation ClassLoc = ClassDecl->getLocation();
   8219   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8220   CXXMethodDecl *MoveAssignment
   8221     = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   8222                             Context.getFunctionType(RetType, &ArgType, 1, EPI),
   8223                             /*TInfo=*/0, /*isStatic=*/false,
   8224                             /*StorageClassAsWritten=*/SC_None,
   8225                             /*isInline=*/true,
   8226                             /*isConstexpr=*/false,
   8227                             SourceLocation());
   8228   MoveAssignment->setAccess(AS_public);
   8229   MoveAssignment->setDefaulted();
   8230   MoveAssignment->setImplicit();
   8231   MoveAssignment->setTrivial(ClassDecl->hasTrivialMoveAssignment());
   8232 
   8233   // Add the parameter to the operator.
   8234   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
   8235                                                ClassLoc, ClassLoc, /*Id=*/0,
   8236                                                ArgType, /*TInfo=*/0,
   8237                                                SC_None,
   8238                                                SC_None, 0);
   8239   MoveAssignment->setParams(FromParam);
   8240 
   8241   // Note that we have added this copy-assignment operator.
   8242   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
   8243 
   8244   // C++0x [class.copy]p9:
   8245   //   If the definition of a class X does not explicitly declare a move
   8246   //   assignment operator, one will be implicitly declared as defaulted if and
   8247   //   only if:
   8248   //   [...]
   8249   //   - the move assignment operator would not be implicitly defined as
   8250   //     deleted.
   8251   if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
   8252     // Cache this result so that we don't try to generate this over and over
   8253     // on every lookup, leaking memory and wasting time.
   8254     ClassDecl->setFailedImplicitMoveAssignment();
   8255     return 0;
   8256   }
   8257 
   8258   if (Scope *S = getScopeForContext(ClassDecl))
   8259     PushOnScopeChains(MoveAssignment, S, false);
   8260   ClassDecl->addDecl(MoveAssignment);
   8261 
   8262   AddOverriddenMethods(ClassDecl, MoveAssignment);
   8263   return MoveAssignment;
   8264 }
   8265 
   8266 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
   8267                                         CXXMethodDecl *MoveAssignOperator) {
   8268   assert((MoveAssignOperator->isDefaulted() &&
   8269           MoveAssignOperator->isOverloadedOperator() &&
   8270           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
   8271           !MoveAssignOperator->doesThisDeclarationHaveABody() &&
   8272           !MoveAssignOperator->isDeleted()) &&
   8273          "DefineImplicitMoveAssignment called for wrong function");
   8274 
   8275   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
   8276 
   8277   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
   8278     MoveAssignOperator->setInvalidDecl();
   8279     return;
   8280   }
   8281 
   8282   MoveAssignOperator->setUsed();
   8283 
   8284   ImplicitlyDefinedFunctionScope Scope(*this, MoveAssignOperator);
   8285   DiagnosticErrorTrap Trap(Diags);
   8286 
   8287   // C++0x [class.copy]p28:
   8288   //   The implicitly-defined or move assignment operator for a non-union class
   8289   //   X performs memberwise move assignment of its subobjects. The direct base
   8290   //   classes of X are assigned first, in the order of their declaration in the
   8291   //   base-specifier-list, and then the immediate non-static data members of X
   8292   //   are assigned, in the order in which they were declared in the class
   8293   //   definition.
   8294 
   8295   // The statements that form the synthesized function body.
   8296   ASTOwningVector<Stmt*> Statements(*this);
   8297 
   8298   // The parameter for the "other" object, which we are move from.
   8299   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
   8300   QualType OtherRefType = Other->getType()->
   8301       getAs<RValueReferenceType>()->getPointeeType();
   8302   assert(OtherRefType.getQualifiers() == 0 &&
   8303          "Bad argument type of defaulted move assignment");
   8304 
   8305   // Our location for everything implicitly-generated.
   8306   SourceLocation Loc = MoveAssignOperator->getLocation();
   8307 
   8308   // Construct a reference to the "other" object. We'll be using this
   8309   // throughout the generated ASTs.
   8310   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   8311   assert(OtherRef && "Reference to parameter cannot fail!");
   8312   // Cast to rvalue.
   8313   OtherRef = CastForMoving(*this, OtherRef);
   8314 
   8315   // Construct the "this" pointer. We'll be using this throughout the generated
   8316   // ASTs.
   8317   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   8318   assert(This && "Reference to this cannot fail!");
   8319 
   8320   // Assign base classes.
   8321   bool Invalid = false;
   8322   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8323        E = ClassDecl->bases_end(); Base != E; ++Base) {
   8324     // Form the assignment:
   8325     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
   8326     QualType BaseType = Base->getType().getUnqualifiedType();
   8327     if (!BaseType->isRecordType()) {
   8328       Invalid = true;
   8329       continue;
   8330     }
   8331 
   8332     CXXCastPath BasePath;
   8333     BasePath.push_back(Base);
   8334 
   8335     // Construct the "from" expression, which is an implicit cast to the
   8336     // appropriately-qualified base type.
   8337     Expr *From = OtherRef;
   8338     From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
   8339                              VK_XValue, &BasePath).take();
   8340 
   8341     // Dereference "this".
   8342     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   8343 
   8344     // Implicitly cast "this" to the appropriately-qualified base type.
   8345     To = ImpCastExprToType(To.take(),
   8346                            Context.getCVRQualifiedType(BaseType,
   8347                                      MoveAssignOperator->getTypeQualifiers()),
   8348                            CK_UncheckedDerivedToBase,
   8349                            VK_LValue, &BasePath);
   8350 
   8351     // Build the move.
   8352     StmtResult Move = BuildSingleCopyAssign(*this, Loc, BaseType,
   8353                                             To.get(), From,
   8354                                             /*CopyingBaseSubobject=*/true,
   8355                                             /*Copying=*/false);
   8356     if (Move.isInvalid()) {
   8357       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8358         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8359       MoveAssignOperator->setInvalidDecl();
   8360       return;
   8361     }
   8362 
   8363     // Success! Record the move.
   8364     Statements.push_back(Move.takeAs<Expr>());
   8365   }
   8366 
   8367   // \brief Reference to the __builtin_memcpy function.
   8368   Expr *BuiltinMemCpyRef = 0;
   8369   // \brief Reference to the __builtin_objc_memmove_collectable function.
   8370   Expr *CollectableMemCpyRef = 0;
   8371 
   8372   // Assign non-static members.
   8373   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8374                                   FieldEnd = ClassDecl->field_end();
   8375        Field != FieldEnd; ++Field) {
   8376     if (Field->isUnnamedBitfield())
   8377       continue;
   8378 
   8379     // Check for members of reference type; we can't move those.
   8380     if (Field->getType()->isReferenceType()) {
   8381       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   8382         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   8383       Diag(Field->getLocation(), diag::note_declared_at);
   8384       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8385         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8386       Invalid = true;
   8387       continue;
   8388     }
   8389 
   8390     // Check for members of const-qualified, non-class type.
   8391     QualType BaseType = Context.getBaseElementType(Field->getType());
   8392     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   8393       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   8394         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   8395       Diag(Field->getLocation(), diag::note_declared_at);
   8396       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8397         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8398       Invalid = true;
   8399       continue;
   8400     }
   8401 
   8402     // Suppress assigning zero-width bitfields.
   8403     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   8404       continue;
   8405 
   8406     QualType FieldType = Field->getType().getNonReferenceType();
   8407     if (FieldType->isIncompleteArrayType()) {
   8408       assert(ClassDecl->hasFlexibleArrayMember() &&
   8409              "Incomplete array type is not valid");
   8410       continue;
   8411     }
   8412 
   8413     // Build references to the field in the object we're copying from and to.
   8414     CXXScopeSpec SS; // Intentionally empty
   8415     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   8416                               LookupMemberName);
   8417     MemberLookup.addDecl(*Field);
   8418     MemberLookup.resolveKind();
   8419     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   8420                                                Loc, /*IsArrow=*/false,
   8421                                                SS, SourceLocation(), 0,
   8422                                                MemberLookup, 0);
   8423     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   8424                                              Loc, /*IsArrow=*/true,
   8425                                              SS, SourceLocation(), 0,
   8426                                              MemberLookup, 0);
   8427     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   8428     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   8429 
   8430     assert(!From.get()->isLValue() && // could be xvalue or prvalue
   8431         "Member reference with rvalue base must be rvalue except for reference "
   8432         "members, which aren't allowed for move assignment.");
   8433 
   8434     // If the field should be copied with __builtin_memcpy rather than via
   8435     // explicit assignments, do so. This optimization only applies for arrays
   8436     // of scalars and arrays of class type with trivial move-assignment
   8437     // operators.
   8438     if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
   8439         && BaseType.hasTrivialAssignment(Context, /*Copying=*/false)) {
   8440       // Compute the size of the memory buffer to be copied.
   8441       QualType SizeType = Context.getSizeType();
   8442       llvm::APInt Size(Context.getTypeSize(SizeType),
   8443                        Context.getTypeSizeInChars(BaseType).getQuantity());
   8444       for (const ConstantArrayType *Array
   8445               = Context.getAsConstantArrayType(FieldType);
   8446            Array;
   8447            Array = Context.getAsConstantArrayType(Array->getElementType())) {
   8448         llvm::APInt ArraySize
   8449           = Array->getSize().zextOrTrunc(Size.getBitWidth());
   8450         Size *= ArraySize;
   8451       }
   8452 
   8453       // Take the address of the field references for "from" and "to". We
   8454       // directly construct UnaryOperators here because semantic analysis
   8455       // does not permit us to take the address of an xvalue.
   8456       From = new (Context) UnaryOperator(From.get(), UO_AddrOf,
   8457                              Context.getPointerType(From.get()->getType()),
   8458                              VK_RValue, OK_Ordinary, Loc);
   8459       To = new (Context) UnaryOperator(To.get(), UO_AddrOf,
   8460                            Context.getPointerType(To.get()->getType()),
   8461                            VK_RValue, OK_Ordinary, Loc);
   8462 
   8463       bool NeedsCollectableMemCpy =
   8464           (BaseType->isRecordType() &&
   8465            BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
   8466 
   8467       if (NeedsCollectableMemCpy) {
   8468         if (!CollectableMemCpyRef) {
   8469           // Create a reference to the __builtin_objc_memmove_collectable function.
   8470           LookupResult R(*this,
   8471                          &Context.Idents.get("__builtin_objc_memmove_collectable"),
   8472                          Loc, LookupOrdinaryName);
   8473           LookupName(R, TUScope, true);
   8474 
   8475           FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
   8476           if (!CollectableMemCpy) {
   8477             // Something went horribly wrong earlier, and we will have
   8478             // complained about it.
   8479             Invalid = true;
   8480             continue;
   8481           }
   8482 
   8483           CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
   8484                                                   CollectableMemCpy->getType(),
   8485                                                   VK_LValue, Loc, 0).take();
   8486           assert(CollectableMemCpyRef && "Builtin reference cannot fail");
   8487         }
   8488       }
   8489       // Create a reference to the __builtin_memcpy builtin function.
   8490       else if (!BuiltinMemCpyRef) {
   8491         LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
   8492                        LookupOrdinaryName);
   8493         LookupName(R, TUScope, true);
   8494 
   8495         FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
   8496         if (!BuiltinMemCpy) {
   8497           // Something went horribly wrong earlier, and we will have complained
   8498           // about it.
   8499           Invalid = true;
   8500           continue;
   8501         }
   8502 
   8503         BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
   8504                                             BuiltinMemCpy->getType(),
   8505                                             VK_LValue, Loc, 0).take();
   8506         assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
   8507       }
   8508 
   8509       ASTOwningVector<Expr*> CallArgs(*this);
   8510       CallArgs.push_back(To.takeAs<Expr>());
   8511       CallArgs.push_back(From.takeAs<Expr>());
   8512       CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
   8513       ExprResult Call = ExprError();
   8514       if (NeedsCollectableMemCpy)
   8515         Call = ActOnCallExpr(/*Scope=*/0,
   8516                              CollectableMemCpyRef,
   8517                              Loc, move_arg(CallArgs),
   8518                              Loc);
   8519       else
   8520         Call = ActOnCallExpr(/*Scope=*/0,
   8521                              BuiltinMemCpyRef,
   8522                              Loc, move_arg(CallArgs),
   8523                              Loc);
   8524 
   8525       assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
   8526       Statements.push_back(Call.takeAs<Expr>());
   8527       continue;
   8528     }
   8529 
   8530     // Build the move of this field.
   8531     StmtResult Move = BuildSingleCopyAssign(*this, Loc, FieldType,
   8532                                             To.get(), From.get(),
   8533                                             /*CopyingBaseSubobject=*/false,
   8534                                             /*Copying=*/false);
   8535     if (Move.isInvalid()) {
   8536       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8537         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8538       MoveAssignOperator->setInvalidDecl();
   8539       return;
   8540     }
   8541 
   8542     // Success! Record the copy.
   8543     Statements.push_back(Move.takeAs<Stmt>());
   8544   }
   8545 
   8546   if (!Invalid) {
   8547     // Add a "return *this;"
   8548     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   8549 
   8550     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   8551     if (Return.isInvalid())
   8552       Invalid = true;
   8553     else {
   8554       Statements.push_back(Return.takeAs<Stmt>());
   8555 
   8556       if (Trap.hasErrorOccurred()) {
   8557         Diag(CurrentLocation, diag::note_member_synthesized_at)
   8558           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8559         Invalid = true;
   8560       }
   8561     }
   8562   }
   8563 
   8564   if (Invalid) {
   8565     MoveAssignOperator->setInvalidDecl();
   8566     return;
   8567   }
   8568 
   8569   StmtResult Body;
   8570   {
   8571     CompoundScopeRAII CompoundScope(*this);
   8572     Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
   8573                              /*isStmtExpr=*/false);
   8574     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   8575   }
   8576   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
   8577 
   8578   if (ASTMutationListener *L = getASTMutationListener()) {
   8579     L->CompletedImplicitDefinition(MoveAssignOperator);
   8580   }
   8581 }
   8582 
   8583 std::pair<Sema::ImplicitExceptionSpecification, bool>
   8584 Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
   8585   if (ClassDecl->isInvalidDecl())
   8586     return std::make_pair(ImplicitExceptionSpecification(*this), false);
   8587 
   8588   // C++ [class.copy]p5:
   8589   //   The implicitly-declared copy constructor for a class X will
   8590   //   have the form
   8591   //
   8592   //       X::X(const X&)
   8593   //
   8594   //   if
   8595   // FIXME: It ought to be possible to store this on the record.
   8596   bool HasConstCopyConstructor = true;
   8597 
   8598   //     -- each direct or virtual base class B of X has a copy
   8599   //        constructor whose first parameter is of type const B& or
   8600   //        const volatile B&, and
   8601   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8602                                        BaseEnd = ClassDecl->bases_end();
   8603        HasConstCopyConstructor && Base != BaseEnd;
   8604        ++Base) {
   8605     // Virtual bases are handled below.
   8606     if (Base->isVirtual())
   8607       continue;
   8608 
   8609     CXXRecordDecl *BaseClassDecl
   8610       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8611     LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
   8612                              &HasConstCopyConstructor);
   8613   }
   8614 
   8615   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8616                                        BaseEnd = ClassDecl->vbases_end();
   8617        HasConstCopyConstructor && Base != BaseEnd;
   8618        ++Base) {
   8619     CXXRecordDecl *BaseClassDecl
   8620       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8621     LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
   8622                              &HasConstCopyConstructor);
   8623   }
   8624 
   8625   //     -- for all the nonstatic data members of X that are of a
   8626   //        class type M (or array thereof), each such class type
   8627   //        has a copy constructor whose first parameter is of type
   8628   //        const M& or const volatile M&.
   8629   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8630                                   FieldEnd = ClassDecl->field_end();
   8631        HasConstCopyConstructor && Field != FieldEnd;
   8632        ++Field) {
   8633     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   8634     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8635       LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const,
   8636                                &HasConstCopyConstructor);
   8637     }
   8638   }
   8639   //   Otherwise, the implicitly declared copy constructor will have
   8640   //   the form
   8641   //
   8642   //       X::X(X&)
   8643 
   8644   // C++ [except.spec]p14:
   8645   //   An implicitly declared special member function (Clause 12) shall have an
   8646   //   exception-specification. [...]
   8647   ImplicitExceptionSpecification ExceptSpec(*this);
   8648   unsigned Quals = HasConstCopyConstructor? Qualifiers::Const : 0;
   8649   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8650                                        BaseEnd = ClassDecl->bases_end();
   8651        Base != BaseEnd;
   8652        ++Base) {
   8653     // Virtual bases are handled below.
   8654     if (Base->isVirtual())
   8655       continue;
   8656 
   8657     CXXRecordDecl *BaseClassDecl
   8658       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8659     if (CXXConstructorDecl *CopyConstructor =
   8660           LookupCopyingConstructor(BaseClassDecl, Quals))
   8661       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
   8662   }
   8663   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8664                                        BaseEnd = ClassDecl->vbases_end();
   8665        Base != BaseEnd;
   8666        ++Base) {
   8667     CXXRecordDecl *BaseClassDecl
   8668       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8669     if (CXXConstructorDecl *CopyConstructor =
   8670           LookupCopyingConstructor(BaseClassDecl, Quals))
   8671       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
   8672   }
   8673   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8674                                   FieldEnd = ClassDecl->field_end();
   8675        Field != FieldEnd;
   8676        ++Field) {
   8677     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   8678     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8679       if (CXXConstructorDecl *CopyConstructor =
   8680         LookupCopyingConstructor(FieldClassDecl, Quals))
   8681       ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
   8682     }
   8683   }
   8684 
   8685   return std::make_pair(ExceptSpec, HasConstCopyConstructor);
   8686 }
   8687 
   8688 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
   8689                                                     CXXRecordDecl *ClassDecl) {
   8690   // C++ [class.copy]p4:
   8691   //   If the class definition does not explicitly declare a copy
   8692   //   constructor, one is declared implicitly.
   8693 
   8694   ImplicitExceptionSpecification Spec(*this);
   8695   bool Const;
   8696   llvm::tie(Spec, Const) =
   8697     ComputeDefaultedCopyCtorExceptionSpecAndConst(ClassDecl);
   8698 
   8699   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   8700   QualType ArgType = ClassType;
   8701   if (Const)
   8702     ArgType = ArgType.withConst();
   8703   ArgType = Context.getLValueReferenceType(ArgType);
   8704 
   8705   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   8706 
   8707   DeclarationName Name
   8708     = Context.DeclarationNames.getCXXConstructorName(
   8709                                            Context.getCanonicalType(ClassType));
   8710   SourceLocation ClassLoc = ClassDecl->getLocation();
   8711   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8712 
   8713   //   An implicitly-declared copy constructor is an inline public
   8714   //   member of its class.
   8715   CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
   8716       Context, ClassDecl, ClassLoc, NameInfo,
   8717       Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI), /*TInfo=*/0,
   8718       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   8719       /*isConstexpr=*/ClassDecl->defaultedCopyConstructorIsConstexpr() &&
   8720         getLangOpts().CPlusPlus0x);
   8721   CopyConstructor->setAccess(AS_public);
   8722   CopyConstructor->setDefaulted();
   8723   CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
   8724 
   8725   // Note that we have declared this constructor.
   8726   ++ASTContext::NumImplicitCopyConstructorsDeclared;
   8727 
   8728   // Add the parameter to the constructor.
   8729   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
   8730                                                ClassLoc, ClassLoc,
   8731                                                /*IdentifierInfo=*/0,
   8732                                                ArgType, /*TInfo=*/0,
   8733                                                SC_None,
   8734                                                SC_None, 0);
   8735   CopyConstructor->setParams(FromParam);
   8736 
   8737   if (Scope *S = getScopeForContext(ClassDecl))
   8738     PushOnScopeChains(CopyConstructor, S, false);
   8739   ClassDecl->addDecl(CopyConstructor);
   8740 
   8741   // C++11 [class.copy]p8:
   8742   //   ... If the class definition does not explicitly declare a copy
   8743   //   constructor, there is no user-declared move constructor, and there is no
   8744   //   user-declared move assignment operator, a copy constructor is implicitly
   8745   //   declared as defaulted.
   8746   if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
   8747     CopyConstructor->setDeletedAsWritten();
   8748 
   8749   return CopyConstructor;
   8750 }
   8751 
   8752 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
   8753                                    CXXConstructorDecl *CopyConstructor) {
   8754   assert((CopyConstructor->isDefaulted() &&
   8755           CopyConstructor->isCopyConstructor() &&
   8756           !CopyConstructor->doesThisDeclarationHaveABody() &&
   8757           !CopyConstructor->isDeleted()) &&
   8758          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
   8759 
   8760   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
   8761   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
   8762 
   8763   ImplicitlyDefinedFunctionScope Scope(*this, CopyConstructor);
   8764   DiagnosticErrorTrap Trap(Diags);
   8765 
   8766   if (SetCtorInitializers(CopyConstructor, 0, 0, /*AnyErrors=*/false) ||
   8767       Trap.hasErrorOccurred()) {
   8768     Diag(CurrentLocation, diag::note_member_synthesized_at)
   8769       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
   8770     CopyConstructor->setInvalidDecl();
   8771   }  else {
   8772     Sema::CompoundScopeRAII CompoundScope(*this);
   8773     CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
   8774                                                CopyConstructor->getLocation(),
   8775                                                MultiStmtArg(*this, 0, 0),
   8776                                                /*isStmtExpr=*/false)
   8777                                                               .takeAs<Stmt>());
   8778     CopyConstructor->setImplicitlyDefined(true);
   8779   }
   8780 
   8781   CopyConstructor->setUsed();
   8782   if (ASTMutationListener *L = getASTMutationListener()) {
   8783     L->CompletedImplicitDefinition(CopyConstructor);
   8784   }
   8785 }
   8786 
   8787 Sema::ImplicitExceptionSpecification
   8788 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   8789   // C++ [except.spec]p14:
   8790   //   An implicitly declared special member function (Clause 12) shall have an
   8791   //   exception-specification. [...]
   8792   ImplicitExceptionSpecification ExceptSpec(*this);
   8793   if (ClassDecl->isInvalidDecl())
   8794     return ExceptSpec;
   8795 
   8796   // Direct base-class constructors.
   8797   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   8798                                        BEnd = ClassDecl->bases_end();
   8799        B != BEnd; ++B) {
   8800     if (B->isVirtual()) // Handled below.
   8801       continue;
   8802 
   8803     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   8804       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   8805       CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
   8806       // If this is a deleted function, add it anyway. This might be conformant
   8807       // with the standard. This might not. I'm not sure. It might not matter.
   8808       if (Constructor)
   8809         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   8810     }
   8811   }
   8812 
   8813   // Virtual base-class constructors.
   8814   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   8815                                        BEnd = ClassDecl->vbases_end();
   8816        B != BEnd; ++B) {
   8817     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   8818       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   8819       CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
   8820       // If this is a deleted function, add it anyway. This might be conformant
   8821       // with the standard. This might not. I'm not sure. It might not matter.
   8822       if (Constructor)
   8823         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
   8824     }
   8825   }
   8826 
   8827   // Field constructors.
   8828   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   8829                                FEnd = ClassDecl->field_end();
   8830        F != FEnd; ++F) {
   8831     if (const RecordType *RecordTy
   8832               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   8833       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   8834       CXXConstructorDecl *Constructor = LookupMovingConstructor(FieldRecDecl);
   8835       // If this is a deleted function, add it anyway. This might be conformant
   8836       // with the standard. This might not. I'm not sure. It might not matter.
   8837       // In particular, the problem is that this function never gets called. It
   8838       // might just be ill-formed because this function attempts to refer to
   8839       // a deleted function here.
   8840       if (Constructor)
   8841         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
   8842     }
   8843   }
   8844 
   8845   return ExceptSpec;
   8846 }
   8847 
   8848 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
   8849                                                     CXXRecordDecl *ClassDecl) {
   8850   // C++11 [class.copy]p9:
   8851   //   If the definition of a class X does not explicitly declare a move
   8852   //   constructor, one will be implicitly declared as defaulted if and only if:
   8853   //
   8854   //   - [first 4 bullets]
   8855   assert(ClassDecl->needsImplicitMoveConstructor());
   8856 
   8857   // [Checked after we build the declaration]
   8858   //   - the move assignment operator would not be implicitly defined as
   8859   //     deleted,
   8860 
   8861   // [DR1402]:
   8862   //   - each of X's non-static data members and direct or virtual base classes
   8863   //     has a type that either has a move constructor or is trivially copyable.
   8864   if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
   8865     ClassDecl->setFailedImplicitMoveConstructor();
   8866     return 0;
   8867   }
   8868 
   8869   ImplicitExceptionSpecification Spec(
   8870       ComputeDefaultedMoveCtorExceptionSpec(ClassDecl));
   8871 
   8872   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   8873   QualType ArgType = Context.getRValueReferenceType(ClassType);
   8874 
   8875   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   8876 
   8877   DeclarationName Name
   8878     = Context.DeclarationNames.getCXXConstructorName(
   8879                                            Context.getCanonicalType(ClassType));
   8880   SourceLocation ClassLoc = ClassDecl->getLocation();
   8881   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8882 
   8883   // C++0x [class.copy]p11:
   8884   //   An implicitly-declared copy/move constructor is an inline public
   8885   //   member of its class.
   8886   CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
   8887       Context, ClassDecl, ClassLoc, NameInfo,
   8888       Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI), /*TInfo=*/0,
   8889       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
   8890       /*isConstexpr=*/ClassDecl->defaultedMoveConstructorIsConstexpr() &&
   8891         getLangOpts().CPlusPlus0x);
   8892   MoveConstructor->setAccess(AS_public);
   8893   MoveConstructor->setDefaulted();
   8894   MoveConstructor->setTrivial(ClassDecl->hasTrivialMoveConstructor());
   8895 
   8896   // Add the parameter to the constructor.
   8897   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
   8898                                                ClassLoc, ClassLoc,
   8899                                                /*IdentifierInfo=*/0,
   8900                                                ArgType, /*TInfo=*/0,
   8901                                                SC_None,
   8902                                                SC_None, 0);
   8903   MoveConstructor->setParams(FromParam);
   8904 
   8905   // C++0x [class.copy]p9:
   8906   //   If the definition of a class X does not explicitly declare a move
   8907   //   constructor, one will be implicitly declared as defaulted if and only if:
   8908   //   [...]
   8909   //   - the move constructor would not be implicitly defined as deleted.
   8910   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
   8911     // Cache this result so that we don't try to generate this over and over
   8912     // on every lookup, leaking memory and wasting time.
   8913     ClassDecl->setFailedImplicitMoveConstructor();
   8914     return 0;
   8915   }
   8916 
   8917   // Note that we have declared this constructor.
   8918   ++ASTContext::NumImplicitMoveConstructorsDeclared;
   8919 
   8920   if (Scope *S = getScopeForContext(ClassDecl))
   8921     PushOnScopeChains(MoveConstructor, S, false);
   8922   ClassDecl->addDecl(MoveConstructor);
   8923 
   8924   return MoveConstructor;
   8925 }
   8926 
   8927 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
   8928                                    CXXConstructorDecl *MoveConstructor) {
   8929   assert((MoveConstructor->isDefaulted() &&
   8930           MoveConstructor->isMoveConstructor() &&
   8931           !MoveConstructor->doesThisDeclarationHaveABody() &&
   8932           !MoveConstructor->isDeleted()) &&
   8933          "DefineImplicitMoveConstructor - call it for implicit move ctor");
   8934 
   8935   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
   8936   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
   8937 
   8938   ImplicitlyDefinedFunctionScope Scope(*this, MoveConstructor);
   8939   DiagnosticErrorTrap Trap(Diags);
   8940 
   8941   if (SetCtorInitializers(MoveConstructor, 0, 0, /*AnyErrors=*/false) ||
   8942       Trap.hasErrorOccurred()) {
   8943     Diag(CurrentLocation, diag::note_member_synthesized_at)
   8944       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
   8945     MoveConstructor->setInvalidDecl();
   8946   }  else {
   8947     Sema::CompoundScopeRAII CompoundScope(*this);
   8948     MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
   8949                                                MoveConstructor->getLocation(),
   8950                                                MultiStmtArg(*this, 0, 0),
   8951                                                /*isStmtExpr=*/false)
   8952                                                               .takeAs<Stmt>());
   8953     MoveConstructor->setImplicitlyDefined(true);
   8954   }
   8955 
   8956   MoveConstructor->setUsed();
   8957 
   8958   if (ASTMutationListener *L = getASTMutationListener()) {
   8959     L->CompletedImplicitDefinition(MoveConstructor);
   8960   }
   8961 }
   8962 
   8963 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
   8964   return FD->isDeleted() &&
   8965          (FD->isDefaulted() || FD->isImplicit()) &&
   8966          isa<CXXMethodDecl>(FD);
   8967 }
   8968 
   8969 /// \brief Mark the call operator of the given lambda closure type as "used".
   8970 static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
   8971   CXXMethodDecl *CallOperator
   8972     = cast<CXXMethodDecl>(
   8973         *Lambda->lookup(
   8974           S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).first);
   8975   CallOperator->setReferenced();
   8976   CallOperator->setUsed();
   8977 }
   8978 
   8979 void Sema::DefineImplicitLambdaToFunctionPointerConversion(
   8980        SourceLocation CurrentLocation,
   8981        CXXConversionDecl *Conv)
   8982 {
   8983   CXXRecordDecl *Lambda = Conv->getParent();
   8984 
   8985   // Make sure that the lambda call operator is marked used.
   8986   markLambdaCallOperatorUsed(*this, Lambda);
   8987 
   8988   Conv->setUsed();
   8989 
   8990   ImplicitlyDefinedFunctionScope Scope(*this, Conv);
   8991   DiagnosticErrorTrap Trap(Diags);
   8992 
   8993   // Return the address of the __invoke function.
   8994   DeclarationName InvokeName = &Context.Idents.get("__invoke");
   8995   CXXMethodDecl *Invoke
   8996     = cast<CXXMethodDecl>(*Lambda->lookup(InvokeName).first);
   8997   Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
   8998                                        VK_LValue, Conv->getLocation()).take();
   8999   assert(FunctionRef && "Can't refer to __invoke function?");
   9000   Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
   9001   Conv->setBody(new (Context) CompoundStmt(Context, &Return, 1,
   9002                                            Conv->getLocation(),
   9003                                            Conv->getLocation()));
   9004 
   9005   // Fill in the __invoke function with a dummy implementation. IR generation
   9006   // will fill in the actual details.
   9007   Invoke->setUsed();
   9008   Invoke->setReferenced();
   9009   Invoke->setBody(new (Context) CompoundStmt(Context, 0, 0, Conv->getLocation(),
   9010                                              Conv->getLocation()));
   9011 
   9012   if (ASTMutationListener *L = getASTMutationListener()) {
   9013     L->CompletedImplicitDefinition(Conv);
   9014     L->CompletedImplicitDefinition(Invoke);
   9015   }
   9016 }
   9017 
   9018 void Sema::DefineImplicitLambdaToBlockPointerConversion(
   9019        SourceLocation CurrentLocation,
   9020        CXXConversionDecl *Conv)
   9021 {
   9022   Conv->setUsed();
   9023 
   9024   ImplicitlyDefinedFunctionScope Scope(*this, Conv);
   9025   DiagnosticErrorTrap Trap(Diags);
   9026 
   9027   // Copy-initialize the lambda object as needed to capture it.
   9028   Expr *This = ActOnCXXThis(CurrentLocation).take();
   9029   Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
   9030 
   9031   ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
   9032                                                         Conv->getLocation(),
   9033                                                         Conv, DerefThis);
   9034 
   9035   // If we're not under ARC, make sure we still get the _Block_copy/autorelease
   9036   // behavior.  Note that only the general conversion function does this
   9037   // (since it's unusable otherwise); in the case where we inline the
   9038   // block literal, it has block literal lifetime semantics.
   9039   if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
   9040     BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
   9041                                           CK_CopyAndAutoreleaseBlockObject,
   9042                                           BuildBlock.get(), 0, VK_RValue);
   9043 
   9044   if (BuildBlock.isInvalid()) {
   9045     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
   9046     Conv->setInvalidDecl();
   9047     return;
   9048   }
   9049 
   9050   // Create the return statement that returns the block from the conversion
   9051   // function.
   9052   StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
   9053   if (Return.isInvalid()) {
   9054     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
   9055     Conv->setInvalidDecl();
   9056     return;
   9057   }
   9058 
   9059   // Set the body of the conversion function.
   9060   Stmt *ReturnS = Return.take();
   9061   Conv->setBody(new (Context) CompoundStmt(Context, &ReturnS, 1,
   9062                                            Conv->getLocation(),
   9063                                            Conv->getLocation()));
   9064 
   9065   // We're done; notify the mutation listener, if any.
   9066   if (ASTMutationListener *L = getASTMutationListener()) {
   9067     L->CompletedImplicitDefinition(Conv);
   9068   }
   9069 }
   9070 
   9071 /// \brief Determine whether the given list arguments contains exactly one
   9072 /// "real" (non-default) argument.
   9073 static bool hasOneRealArgument(MultiExprArg Args) {
   9074   switch (Args.size()) {
   9075   case 0:
   9076     return false;
   9077 
   9078   default:
   9079     if (!Args.get()[1]->isDefaultArgument())
   9080       return false;
   9081 
   9082     // fall through
   9083   case 1:
   9084     return !Args.get()[0]->isDefaultArgument();
   9085   }
   9086 
   9087   return false;
   9088 }
   9089 
   9090 ExprResult
   9091 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   9092                             CXXConstructorDecl *Constructor,
   9093                             MultiExprArg ExprArgs,
   9094                             bool HadMultipleCandidates,
   9095                             bool RequiresZeroInit,
   9096                             unsigned ConstructKind,
   9097                             SourceRange ParenRange) {
   9098   bool Elidable = false;
   9099 
   9100   // C++0x [class.copy]p34:
   9101   //   When certain criteria are met, an implementation is allowed to
   9102   //   omit the copy/move construction of a class object, even if the
   9103   //   copy/move constructor and/or destructor for the object have
   9104   //   side effects. [...]
   9105   //     - when a temporary class object that has not been bound to a
   9106   //       reference (12.2) would be copied/moved to a class object
   9107   //       with the same cv-unqualified type, the copy/move operation
   9108   //       can be omitted by constructing the temporary object
   9109   //       directly into the target of the omitted copy/move
   9110   if (ConstructKind == CXXConstructExpr::CK_Complete &&
   9111       Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
   9112     Expr *SubExpr = ((Expr **)ExprArgs.get())[0];
   9113     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
   9114   }
   9115 
   9116   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
   9117                                Elidable, move(ExprArgs), HadMultipleCandidates,
   9118                                RequiresZeroInit, ConstructKind, ParenRange);
   9119 }
   9120 
   9121 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   9122 /// including handling of its default argument expressions.
   9123 ExprResult
   9124 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   9125                             CXXConstructorDecl *Constructor, bool Elidable,
   9126                             MultiExprArg ExprArgs,
   9127                             bool HadMultipleCandidates,
   9128                             bool RequiresZeroInit,
   9129                             unsigned ConstructKind,
   9130                             SourceRange ParenRange) {
   9131   unsigned NumExprs = ExprArgs.size();
   9132   Expr **Exprs = (Expr **)ExprArgs.release();
   9133 
   9134   for (specific_attr_iterator<NonNullAttr>
   9135            i = Constructor->specific_attr_begin<NonNullAttr>(),
   9136            e = Constructor->specific_attr_end<NonNullAttr>(); i != e; ++i) {
   9137     const NonNullAttr *NonNull = *i;
   9138     CheckNonNullArguments(NonNull, ExprArgs.get(), ConstructLoc);
   9139   }
   9140 
   9141   MarkFunctionReferenced(ConstructLoc, Constructor);
   9142   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
   9143                                         Constructor, Elidable, Exprs, NumExprs,
   9144                                         HadMultipleCandidates, /*FIXME*/false,
   9145                                         RequiresZeroInit,
   9146               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
   9147                                         ParenRange));
   9148 }
   9149 
   9150 bool Sema::InitializeVarWithConstructor(VarDecl *VD,
   9151                                         CXXConstructorDecl *Constructor,
   9152                                         MultiExprArg Exprs,
   9153                                         bool HadMultipleCandidates) {
   9154   // FIXME: Provide the correct paren SourceRange when available.
   9155   ExprResult TempResult =
   9156     BuildCXXConstructExpr(VD->getLocation(), VD->getType(), Constructor,
   9157                           move(Exprs), HadMultipleCandidates, false,
   9158                           CXXConstructExpr::CK_Complete, SourceRange());
   9159   if (TempResult.isInvalid())
   9160     return true;
   9161 
   9162   Expr *Temp = TempResult.takeAs<Expr>();
   9163   CheckImplicitConversions(Temp, VD->getLocation());
   9164   MarkFunctionReferenced(VD->getLocation(), Constructor);
   9165   Temp = MaybeCreateExprWithCleanups(Temp);
   9166   VD->setInit(Temp);
   9167 
   9168   return false;
   9169 }
   9170 
   9171 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
   9172   if (VD->isInvalidDecl()) return;
   9173 
   9174   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
   9175   if (ClassDecl->isInvalidDecl()) return;
   9176   if (ClassDecl->hasIrrelevantDestructor()) return;
   9177   if (ClassDecl->isDependentContext()) return;
   9178 
   9179   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
   9180   MarkFunctionReferenced(VD->getLocation(), Destructor);
   9181   CheckDestructorAccess(VD->getLocation(), Destructor,
   9182                         PDiag(diag::err_access_dtor_var)
   9183                         << VD->getDeclName()
   9184                         << VD->getType());
   9185   DiagnoseUseOfDecl(Destructor, VD->getLocation());
   9186 
   9187   if (!VD->hasGlobalStorage()) return;
   9188 
   9189   // Emit warning for non-trivial dtor in global scope (a real global,
   9190   // class-static, function-static).
   9191   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
   9192 
   9193   // TODO: this should be re-enabled for static locals by !CXAAtExit
   9194   if (!VD->isStaticLocal())
   9195     Diag(VD->getLocation(), diag::warn_global_destructor);
   9196 }
   9197 
   9198 /// \brief Given a constructor and the set of arguments provided for the
   9199 /// constructor, convert the arguments and add any required default arguments
   9200 /// to form a proper call to this constructor.
   9201 ///
   9202 /// \returns true if an error occurred, false otherwise.
   9203 bool
   9204 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
   9205                               MultiExprArg ArgsPtr,
   9206                               SourceLocation Loc,
   9207                               ASTOwningVector<Expr*> &ConvertedArgs,
   9208                               bool AllowExplicit) {
   9209   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
   9210   unsigned NumArgs = ArgsPtr.size();
   9211   Expr **Args = (Expr **)ArgsPtr.get();
   9212 
   9213   const FunctionProtoType *Proto
   9214     = Constructor->getType()->getAs<FunctionProtoType>();
   9215   assert(Proto && "Constructor without a prototype?");
   9216   unsigned NumArgsInProto = Proto->getNumArgs();
   9217 
   9218   // If too few arguments are available, we'll fill in the rest with defaults.
   9219   if (NumArgs < NumArgsInProto)
   9220     ConvertedArgs.reserve(NumArgsInProto);
   9221   else
   9222     ConvertedArgs.reserve(NumArgs);
   9223 
   9224   VariadicCallType CallType =
   9225     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
   9226   SmallVector<Expr *, 8> AllArgs;
   9227   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
   9228                                         Proto, 0, Args, NumArgs, AllArgs,
   9229                                         CallType, AllowExplicit);
   9230   ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
   9231 
   9232   DiagnoseSentinelCalls(Constructor, Loc, AllArgs.data(), AllArgs.size());
   9233 
   9234   // FIXME: Missing call to CheckFunctionCall or equivalent
   9235 
   9236   return Invalid;
   9237 }
   9238 
   9239 static inline bool
   9240 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
   9241                                        const FunctionDecl *FnDecl) {
   9242   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
   9243   if (isa<NamespaceDecl>(DC)) {
   9244     return SemaRef.Diag(FnDecl->getLocation(),
   9245                         diag::err_operator_new_delete_declared_in_namespace)
   9246       << FnDecl->getDeclName();
   9247   }
   9248 
   9249   if (isa<TranslationUnitDecl>(DC) &&
   9250       FnDecl->getStorageClass() == SC_Static) {
   9251     return SemaRef.Diag(FnDecl->getLocation(),
   9252                         diag::err_operator_new_delete_declared_static)
   9253       << FnDecl->getDeclName();
   9254   }
   9255 
   9256   return false;
   9257 }
   9258 
   9259 static inline bool
   9260 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
   9261                             CanQualType ExpectedResultType,
   9262                             CanQualType ExpectedFirstParamType,
   9263                             unsigned DependentParamTypeDiag,
   9264                             unsigned InvalidParamTypeDiag) {
   9265   QualType ResultType =
   9266     FnDecl->getType()->getAs<FunctionType>()->getResultType();
   9267 
   9268   // Check that the result type is not dependent.
   9269   if (ResultType->isDependentType())
   9270     return SemaRef.Diag(FnDecl->getLocation(),
   9271                         diag::err_operator_new_delete_dependent_result_type)
   9272     << FnDecl->getDeclName() << ExpectedResultType;
   9273 
   9274   // Check that the result type is what we expect.
   9275   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
   9276     return SemaRef.Diag(FnDecl->getLocation(),
   9277                         diag::err_operator_new_delete_invalid_result_type)
   9278     << FnDecl->getDeclName() << ExpectedResultType;
   9279 
   9280   // A function template must have at least 2 parameters.
   9281   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
   9282     return SemaRef.Diag(FnDecl->getLocation(),
   9283                       diag::err_operator_new_delete_template_too_few_parameters)
   9284         << FnDecl->getDeclName();
   9285 
   9286   // The function decl must have at least 1 parameter.
   9287   if (FnDecl->getNumParams() == 0)
   9288     return SemaRef.Diag(FnDecl->getLocation(),
   9289                         diag::err_operator_new_delete_too_few_parameters)
   9290       << FnDecl->getDeclName();
   9291 
   9292   // Check the the first parameter type is not dependent.
   9293   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
   9294   if (FirstParamType->isDependentType())
   9295     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
   9296       << FnDecl->getDeclName() << ExpectedFirstParamType;
   9297 
   9298   // Check that the first parameter type is what we expect.
   9299   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
   9300       ExpectedFirstParamType)
   9301     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
   9302     << FnDecl->getDeclName() << ExpectedFirstParamType;
   9303 
   9304   return false;
   9305 }
   9306 
   9307 static bool
   9308 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
   9309   // C++ [basic.stc.dynamic.allocation]p1:
   9310   //   A program is ill-formed if an allocation function is declared in a
   9311   //   namespace scope other than global scope or declared static in global
   9312   //   scope.
   9313   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   9314     return true;
   9315 
   9316   CanQualType SizeTy =
   9317     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
   9318 
   9319   // C++ [basic.stc.dynamic.allocation]p1:
   9320   //  The return type shall be void*. The first parameter shall have type
   9321   //  std::size_t.
   9322   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
   9323                                   SizeTy,
   9324                                   diag::err_operator_new_dependent_param_type,
   9325                                   diag::err_operator_new_param_type))
   9326     return true;
   9327 
   9328   // C++ [basic.stc.dynamic.allocation]p1:
   9329   //  The first parameter shall not have an associated default argument.
   9330   if (FnDecl->getParamDecl(0)->hasDefaultArg())
   9331     return SemaRef.Diag(FnDecl->getLocation(),
   9332                         diag::err_operator_new_default_arg)
   9333       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
   9334 
   9335   return false;
   9336 }
   9337 
   9338 static bool
   9339 CheckOperatorDeleteDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
   9340   // C++ [basic.stc.dynamic.deallocation]p1:
   9341   //   A program is ill-formed if deallocation functions are declared in a
   9342   //   namespace scope other than global scope or declared static in global
   9343   //   scope.
   9344   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   9345     return true;
   9346 
   9347   // C++ [basic.stc.dynamic.deallocation]p2:
   9348   //   Each deallocation function shall return void and its first parameter
   9349   //   shall be void*.
   9350   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
   9351                                   SemaRef.Context.VoidPtrTy,
   9352                                  diag::err_operator_delete_dependent_param_type,
   9353                                  diag::err_operator_delete_param_type))
   9354     return true;
   9355 
   9356   return false;
   9357 }
   9358 
   9359 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
   9360 /// of this overloaded operator is well-formed. If so, returns false;
   9361 /// otherwise, emits appropriate diagnostics and returns true.
   9362 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
   9363   assert(FnDecl && FnDecl->isOverloadedOperator() &&
   9364          "Expected an overloaded operator declaration");
   9365 
   9366   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
   9367 
   9368   // C++ [over.oper]p5:
   9369   //   The allocation and deallocation functions, operator new,
   9370   //   operator new[], operator delete and operator delete[], are
   9371   //   described completely in 3.7.3. The attributes and restrictions
   9372   //   found in the rest of this subclause do not apply to them unless
   9373   //   explicitly stated in 3.7.3.
   9374   if (Op == OO_Delete || Op == OO_Array_Delete)
   9375     return CheckOperatorDeleteDeclaration(*this, FnDecl);
   9376 
   9377   if (Op == OO_New || Op == OO_Array_New)
   9378     return CheckOperatorNewDeclaration(*this, FnDecl);
   9379 
   9380   // C++ [over.oper]p6:
   9381   //   An operator function shall either be a non-static member
   9382   //   function or be a non-member function and have at least one
   9383   //   parameter whose type is a class, a reference to a class, an
   9384   //   enumeration, or a reference to an enumeration.
   9385   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
   9386     if (MethodDecl->isStatic())
   9387       return Diag(FnDecl->getLocation(),
   9388                   diag::err_operator_overload_static) << FnDecl->getDeclName();
   9389   } else {
   9390     bool ClassOrEnumParam = false;
   9391     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
   9392                                    ParamEnd = FnDecl->param_end();
   9393          Param != ParamEnd; ++Param) {
   9394       QualType ParamType = (*Param)->getType().getNonReferenceType();
   9395       if (ParamType->isDependentType() || ParamType->isRecordType() ||
   9396           ParamType->isEnumeralType()) {
   9397         ClassOrEnumParam = true;
   9398         break;
   9399       }
   9400     }
   9401 
   9402     if (!ClassOrEnumParam)
   9403       return Diag(FnDecl->getLocation(),
   9404                   diag::err_operator_overload_needs_class_or_enum)
   9405         << FnDecl->getDeclName();
   9406   }
   9407 
   9408   // C++ [over.oper]p8:
   9409   //   An operator function cannot have default arguments (8.3.6),
   9410   //   except where explicitly stated below.
   9411   //
   9412   // Only the function-call operator allows default arguments
   9413   // (C++ [over.call]p1).
   9414   if (Op != OO_Call) {
   9415     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
   9416          Param != FnDecl->param_end(); ++Param) {
   9417       if ((*Param)->hasDefaultArg())
   9418         return Diag((*Param)->getLocation(),
   9419                     diag::err_operator_overload_default_arg)
   9420           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
   9421     }
   9422   }
   9423 
   9424   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
   9425     { false, false, false }
   9426 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
   9427     , { Unary, Binary, MemberOnly }
   9428 #include "clang/Basic/OperatorKinds.def"
   9429   };
   9430 
   9431   bool CanBeUnaryOperator = OperatorUses[Op][0];
   9432   bool CanBeBinaryOperator = OperatorUses[Op][1];
   9433   bool MustBeMemberOperator = OperatorUses[Op][2];
   9434 
   9435   // C++ [over.oper]p8:
   9436   //   [...] Operator functions cannot have more or fewer parameters
   9437   //   than the number required for the corresponding operator, as
   9438   //   described in the rest of this subclause.
   9439   unsigned NumParams = FnDecl->getNumParams()
   9440                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
   9441   if (Op != OO_Call &&
   9442       ((NumParams == 1 && !CanBeUnaryOperator) ||
   9443        (NumParams == 2 && !CanBeBinaryOperator) ||
   9444        (NumParams < 1) || (NumParams > 2))) {
   9445     // We have the wrong number of parameters.
   9446     unsigned ErrorKind;
   9447     if (CanBeUnaryOperator && CanBeBinaryOperator) {
   9448       ErrorKind = 2;  // 2 -> unary or binary.
   9449     } else if (CanBeUnaryOperator) {
   9450       ErrorKind = 0;  // 0 -> unary
   9451     } else {
   9452       assert(CanBeBinaryOperator &&
   9453              "All non-call overloaded operators are unary or binary!");
   9454       ErrorKind = 1;  // 1 -> binary
   9455     }
   9456 
   9457     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
   9458       << FnDecl->getDeclName() << NumParams << ErrorKind;
   9459   }
   9460 
   9461   // Overloaded operators other than operator() cannot be variadic.
   9462   if (Op != OO_Call &&
   9463       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
   9464     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
   9465       << FnDecl->getDeclName();
   9466   }
   9467 
   9468   // Some operators must be non-static member functions.
   9469   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
   9470     return Diag(FnDecl->getLocation(),
   9471                 diag::err_operator_overload_must_be_member)
   9472       << FnDecl->getDeclName();
   9473   }
   9474 
   9475   // C++ [over.inc]p1:
   9476   //   The user-defined function called operator++ implements the
   9477   //   prefix and postfix ++ operator. If this function is a member
   9478   //   function with no parameters, or a non-member function with one
   9479   //   parameter of class or enumeration type, it defines the prefix
   9480   //   increment operator ++ for objects of that type. If the function
   9481   //   is a member function with one parameter (which shall be of type
   9482   //   int) or a non-member function with two parameters (the second
   9483   //   of which shall be of type int), it defines the postfix
   9484   //   increment operator ++ for objects of that type.
   9485   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
   9486     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
   9487     bool ParamIsInt = false;
   9488     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
   9489       ParamIsInt = BT->getKind() == BuiltinType::Int;
   9490 
   9491     if (!ParamIsInt)
   9492       return Diag(LastParam->getLocation(),
   9493                   diag::err_operator_overload_post_incdec_must_be_int)
   9494         << LastParam->getType() << (Op == OO_MinusMinus);
   9495   }
   9496 
   9497   return false;
   9498 }
   9499 
   9500 /// CheckLiteralOperatorDeclaration - Check whether the declaration
   9501 /// of this literal operator function is well-formed. If so, returns
   9502 /// false; otherwise, emits appropriate diagnostics and returns true.
   9503 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
   9504   if (isa<CXXMethodDecl>(FnDecl)) {
   9505     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
   9506       << FnDecl->getDeclName();
   9507     return true;
   9508   }
   9509 
   9510   if (FnDecl->isExternC()) {
   9511     Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
   9512     return true;
   9513   }
   9514 
   9515   bool Valid = false;
   9516 
   9517   // This might be the definition of a literal operator template.
   9518   FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
   9519   // This might be a specialization of a literal operator template.
   9520   if (!TpDecl)
   9521     TpDecl = FnDecl->getPrimaryTemplate();
   9522 
   9523   // template <char...> type operator "" name() is the only valid template
   9524   // signature, and the only valid signature with no parameters.
   9525   if (TpDecl) {
   9526     if (FnDecl->param_size() == 0) {
   9527       // Must have only one template parameter
   9528       TemplateParameterList *Params = TpDecl->getTemplateParameters();
   9529       if (Params->size() == 1) {
   9530         NonTypeTemplateParmDecl *PmDecl =
   9531           cast<NonTypeTemplateParmDecl>(Params->getParam(0));
   9532 
   9533         // The template parameter must be a char parameter pack.
   9534         if (PmDecl && PmDecl->isTemplateParameterPack() &&
   9535             Context.hasSameType(PmDecl->getType(), Context.CharTy))
   9536           Valid = true;
   9537       }
   9538     }
   9539   } else if (FnDecl->param_size()) {
   9540     // Check the first parameter
   9541     FunctionDecl::param_iterator Param = FnDecl->param_begin();
   9542 
   9543     QualType T = (*Param)->getType().getUnqualifiedType();
   9544 
   9545     // unsigned long long int, long double, and any character type are allowed
   9546     // as the only parameters.
   9547     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
   9548         Context.hasSameType(T, Context.LongDoubleTy) ||
   9549         Context.hasSameType(T, Context.CharTy) ||
   9550         Context.hasSameType(T, Context.WCharTy) ||
   9551         Context.hasSameType(T, Context.Char16Ty) ||
   9552         Context.hasSameType(T, Context.Char32Ty)) {
   9553       if (++Param == FnDecl->param_end())
   9554         Valid = true;
   9555       goto FinishedParams;
   9556     }
   9557 
   9558     // Otherwise it must be a pointer to const; let's strip those qualifiers.
   9559     const PointerType *PT = T->getAs<PointerType>();
   9560     if (!PT)
   9561       goto FinishedParams;
   9562     T = PT->getPointeeType();
   9563     if (!T.isConstQualified() || T.isVolatileQualified())
   9564       goto FinishedParams;
   9565     T = T.getUnqualifiedType();
   9566 
   9567     // Move on to the second parameter;
   9568     ++Param;
   9569 
   9570     // If there is no second parameter, the first must be a const char *
   9571     if (Param == FnDecl->param_end()) {
   9572       if (Context.hasSameType(T, Context.CharTy))
   9573         Valid = true;
   9574       goto FinishedParams;
   9575     }
   9576 
   9577     // const char *, const wchar_t*, const char16_t*, and const char32_t*
   9578     // are allowed as the first parameter to a two-parameter function
   9579     if (!(Context.hasSameType(T, Context.CharTy) ||
   9580           Context.hasSameType(T, Context.WCharTy) ||
   9581           Context.hasSameType(T, Context.Char16Ty) ||
   9582           Context.hasSameType(T, Context.Char32Ty)))
   9583       goto FinishedParams;
   9584 
   9585     // The second and final parameter must be an std::size_t
   9586     T = (*Param)->getType().getUnqualifiedType();
   9587     if (Context.hasSameType(T, Context.getSizeType()) &&
   9588         ++Param == FnDecl->param_end())
   9589       Valid = true;
   9590   }
   9591 
   9592   // FIXME: This diagnostic is absolutely terrible.
   9593 FinishedParams:
   9594   if (!Valid) {
   9595     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
   9596       << FnDecl->getDeclName();
   9597     return true;
   9598   }
   9599 
   9600   // A parameter-declaration-clause containing a default argument is not
   9601   // equivalent to any of the permitted forms.
   9602   for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
   9603                                     ParamEnd = FnDecl->param_end();
   9604        Param != ParamEnd; ++Param) {
   9605     if ((*Param)->hasDefaultArg()) {
   9606       Diag((*Param)->getDefaultArgRange().getBegin(),
   9607            diag::err_literal_operator_default_argument)
   9608         << (*Param)->getDefaultArgRange();
   9609       break;
   9610     }
   9611   }
   9612 
   9613   StringRef LiteralName
   9614     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
   9615   if (LiteralName[0] != '_') {
   9616     // C++11 [usrlit.suffix]p1:
   9617     //   Literal suffix identifiers that do not start with an underscore
   9618     //   are reserved for future standardization.
   9619     Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
   9620   }
   9621 
   9622   return false;
   9623 }
   9624 
   9625 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
   9626 /// linkage specification, including the language and (if present)
   9627 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
   9628 /// the location of the language string literal, which is provided
   9629 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
   9630 /// the '{' brace. Otherwise, this linkage specification does not
   9631 /// have any braces.
   9632 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
   9633                                            SourceLocation LangLoc,
   9634                                            StringRef Lang,
   9635                                            SourceLocation LBraceLoc) {
   9636   LinkageSpecDecl::LanguageIDs Language;
   9637   if (Lang == "\"C\"")
   9638     Language = LinkageSpecDecl::lang_c;
   9639   else if (Lang == "\"C++\"")
   9640     Language = LinkageSpecDecl::lang_cxx;
   9641   else {
   9642     Diag(LangLoc, diag::err_bad_language);
   9643     return 0;
   9644   }
   9645 
   9646   // FIXME: Add all the various semantics of linkage specifications
   9647 
   9648   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
   9649                                                ExternLoc, LangLoc, Language);
   9650   CurContext->addDecl(D);
   9651   PushDeclContext(S, D);
   9652   return D;
   9653 }
   9654 
   9655 /// ActOnFinishLinkageSpecification - Complete the definition of
   9656 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
   9657 /// valid, it's the position of the closing '}' brace in a linkage
   9658 /// specification that uses braces.
   9659 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
   9660                                             Decl *LinkageSpec,
   9661                                             SourceLocation RBraceLoc) {
   9662   if (LinkageSpec) {
   9663     if (RBraceLoc.isValid()) {
   9664       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
   9665       LSDecl->setRBraceLoc(RBraceLoc);
   9666     }
   9667     PopDeclContext();
   9668   }
   9669   return LinkageSpec;
   9670 }
   9671 
   9672 /// \brief Perform semantic analysis for the variable declaration that
   9673 /// occurs within a C++ catch clause, returning the newly-created
   9674 /// variable.
   9675 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
   9676                                          TypeSourceInfo *TInfo,
   9677                                          SourceLocation StartLoc,
   9678                                          SourceLocation Loc,
   9679                                          IdentifierInfo *Name) {
   9680   bool Invalid = false;
   9681   QualType ExDeclType = TInfo->getType();
   9682 
   9683   // Arrays and functions decay.
   9684   if (ExDeclType->isArrayType())
   9685     ExDeclType = Context.getArrayDecayedType(ExDeclType);
   9686   else if (ExDeclType->isFunctionType())
   9687     ExDeclType = Context.getPointerType(ExDeclType);
   9688 
   9689   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
   9690   // The exception-declaration shall not denote a pointer or reference to an
   9691   // incomplete type, other than [cv] void*.
   9692   // N2844 forbids rvalue references.
   9693   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
   9694     Diag(Loc, diag::err_catch_rvalue_ref);
   9695     Invalid = true;
   9696   }
   9697 
   9698   QualType BaseType = ExDeclType;
   9699   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
   9700   unsigned DK = diag::err_catch_incomplete;
   9701   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
   9702     BaseType = Ptr->getPointeeType();
   9703     Mode = 1;
   9704     DK = diag::err_catch_incomplete_ptr;
   9705   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
   9706     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
   9707     BaseType = Ref->getPointeeType();
   9708     Mode = 2;
   9709     DK = diag::err_catch_incomplete_ref;
   9710   }
   9711   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
   9712       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
   9713     Invalid = true;
   9714 
   9715   if (!Invalid && !ExDeclType->isDependentType() &&
   9716       RequireNonAbstractType(Loc, ExDeclType,
   9717                              diag::err_abstract_type_in_decl,
   9718                              AbstractVariableType))
   9719     Invalid = true;
   9720 
   9721   // Only the non-fragile NeXT runtime currently supports C++ catches
   9722   // of ObjC types, and no runtime supports catching ObjC types by value.
   9723   if (!Invalid && getLangOpts().ObjC1) {
   9724     QualType T = ExDeclType;
   9725     if (const ReferenceType *RT = T->getAs<ReferenceType>())
   9726       T = RT->getPointeeType();
   9727 
   9728     if (T->isObjCObjectType()) {
   9729       Diag(Loc, diag::err_objc_object_catch);
   9730       Invalid = true;
   9731     } else if (T->isObjCObjectPointerType()) {
   9732       if (!getLangOpts().ObjCNonFragileABI)
   9733         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
   9734     }
   9735   }
   9736 
   9737   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
   9738                                     ExDeclType, TInfo, SC_None, SC_None);
   9739   ExDecl->setExceptionVariable(true);
   9740 
   9741   // In ARC, infer 'retaining' for variables of retainable type.
   9742   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
   9743     Invalid = true;
   9744 
   9745   if (!Invalid && !ExDeclType->isDependentType()) {
   9746     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
   9747       // C++ [except.handle]p16:
   9748       //   The object declared in an exception-declaration or, if the
   9749       //   exception-declaration does not specify a name, a temporary (12.2) is
   9750       //   copy-initialized (8.5) from the exception object. [...]
   9751       //   The object is destroyed when the handler exits, after the destruction
   9752       //   of any automatic objects initialized within the handler.
   9753       //
   9754       // We just pretend to initialize the object with itself, then make sure
   9755       // it can be destroyed later.
   9756       QualType initType = ExDeclType;
   9757 
   9758       InitializedEntity entity =
   9759         InitializedEntity::InitializeVariable(ExDecl);
   9760       InitializationKind initKind =
   9761         InitializationKind::CreateCopy(Loc, SourceLocation());
   9762 
   9763       Expr *opaqueValue =
   9764         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
   9765       InitializationSequence sequence(*this, entity, initKind, &opaqueValue, 1);
   9766       ExprResult result = sequence.Perform(*this, entity, initKind,
   9767                                            MultiExprArg(&opaqueValue, 1));
   9768       if (result.isInvalid())
   9769         Invalid = true;
   9770       else {
   9771         // If the constructor used was non-trivial, set this as the
   9772         // "initializer".
   9773         CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
   9774         if (!construct->getConstructor()->isTrivial()) {
   9775           Expr *init = MaybeCreateExprWithCleanups(construct);
   9776           ExDecl->setInit(init);
   9777         }
   9778 
   9779         // And make sure it's destructable.
   9780         FinalizeVarWithDestructor(ExDecl, recordType);
   9781       }
   9782     }
   9783   }
   9784 
   9785   if (Invalid)
   9786     ExDecl->setInvalidDecl();
   9787 
   9788   return ExDecl;
   9789 }
   9790 
   9791 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
   9792 /// handler.
   9793 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
   9794   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   9795   bool Invalid = D.isInvalidType();
   9796 
   9797   // Check for unexpanded parameter packs.
   9798   if (TInfo && DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
   9799                                                UPPC_ExceptionType)) {
   9800     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   9801                                              D.getIdentifierLoc());
   9802     Invalid = true;
   9803   }
   9804 
   9805   IdentifierInfo *II = D.getIdentifier();
   9806   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
   9807                                              LookupOrdinaryName,
   9808                                              ForRedeclaration)) {
   9809     // The scope should be freshly made just for us. There is just no way
   9810     // it contains any previous declaration.
   9811     assert(!S->isDeclScope(PrevDecl));
   9812     if (PrevDecl->isTemplateParameter()) {
   9813       // Maybe we will complain about the shadowed template parameter.
   9814       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
   9815       PrevDecl = 0;
   9816     }
   9817   }
   9818 
   9819   if (D.getCXXScopeSpec().isSet() && !Invalid) {
   9820     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
   9821       << D.getCXXScopeSpec().getRange();
   9822     Invalid = true;
   9823   }
   9824 
   9825   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
   9826                                               D.getLocStart(),
   9827                                               D.getIdentifierLoc(),
   9828                                               D.getIdentifier());
   9829   if (Invalid)
   9830     ExDecl->setInvalidDecl();
   9831 
   9832   // Add the exception declaration into this scope.
   9833   if (II)
   9834     PushOnScopeChains(ExDecl, S);
   9835   else
   9836     CurContext->addDecl(ExDecl);
   9837 
   9838   ProcessDeclAttributes(S, ExDecl, D);
   9839   return ExDecl;
   9840 }
   9841 
   9842 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   9843                                          Expr *AssertExpr,
   9844                                          Expr *AssertMessageExpr_,
   9845                                          SourceLocation RParenLoc) {
   9846   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr_);
   9847 
   9848   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) {
   9849     // In a static_assert-declaration, the constant-expression shall be a
   9850     // constant expression that can be contextually converted to bool.
   9851     ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
   9852     if (Converted.isInvalid())
   9853       return 0;
   9854 
   9855     llvm::APSInt Cond;
   9856     if (VerifyIntegerConstantExpression(Converted.get(), &Cond,
   9857           PDiag(diag::err_static_assert_expression_is_not_constant),
   9858           /*AllowFold=*/false).isInvalid())
   9859       return 0;
   9860 
   9861     if (!Cond) {
   9862       llvm::SmallString<256> MsgBuffer;
   9863       llvm::raw_svector_ostream Msg(MsgBuffer);
   9864       AssertMessage->printPretty(Msg, Context, 0, getPrintingPolicy());
   9865       Diag(StaticAssertLoc, diag::err_static_assert_failed)
   9866         << Msg.str() << AssertExpr->getSourceRange();
   9867     }
   9868   }
   9869 
   9870   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
   9871     return 0;
   9872 
   9873   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
   9874                                         AssertExpr, AssertMessage, RParenLoc);
   9875 
   9876   CurContext->addDecl(Decl);
   9877   return Decl;
   9878 }
   9879 
   9880 /// \brief Perform semantic analysis of the given friend type declaration.
   9881 ///
   9882 /// \returns A friend declaration that.
   9883 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation Loc,
   9884                                       SourceLocation FriendLoc,
   9885                                       TypeSourceInfo *TSInfo) {
   9886   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
   9887 
   9888   QualType T = TSInfo->getType();
   9889   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
   9890 
   9891   // C++03 [class.friend]p2:
   9892   //   An elaborated-type-specifier shall be used in a friend declaration
   9893   //   for a class.*
   9894   //
   9895   //   * The class-key of the elaborated-type-specifier is required.
   9896   if (!ActiveTemplateInstantiations.empty()) {
   9897     // Do not complain about the form of friend template types during
   9898     // template instantiation; we will already have complained when the
   9899     // template was declared.
   9900   } else if (!T->isElaboratedTypeSpecifier()) {
   9901     // If we evaluated the type to a record type, suggest putting
   9902     // a tag in front.
   9903     if (const RecordType *RT = T->getAs<RecordType>()) {
   9904       RecordDecl *RD = RT->getDecl();
   9905 
   9906       std::string InsertionText = std::string(" ") + RD->getKindName();
   9907 
   9908       Diag(TypeRange.getBegin(),
   9909            getLangOpts().CPlusPlus0x ?
   9910              diag::warn_cxx98_compat_unelaborated_friend_type :
   9911              diag::ext_unelaborated_friend_type)
   9912         << (unsigned) RD->getTagKind()
   9913         << T
   9914         << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
   9915                                       InsertionText);
   9916     } else {
   9917       Diag(FriendLoc,
   9918            getLangOpts().CPlusPlus0x ?
   9919              diag::warn_cxx98_compat_nonclass_type_friend :
   9920              diag::ext_nonclass_type_friend)
   9921         << T
   9922         << SourceRange(FriendLoc, TypeRange.getEnd());
   9923     }
   9924   } else if (T->getAs<EnumType>()) {
   9925     Diag(FriendLoc,
   9926          getLangOpts().CPlusPlus0x ?
   9927            diag::warn_cxx98_compat_enum_friend :
   9928            diag::ext_enum_friend)
   9929       << T
   9930       << SourceRange(FriendLoc, TypeRange.getEnd());
   9931   }
   9932 
   9933   // C++0x [class.friend]p3:
   9934   //   If the type specifier in a friend declaration designates a (possibly
   9935   //   cv-qualified) class type, that class is declared as a friend; otherwise,
   9936   //   the friend declaration is ignored.
   9937 
   9938   // FIXME: C++0x has some syntactic restrictions on friend type declarations
   9939   // in [class.friend]p3 that we do not implement.
   9940 
   9941   return FriendDecl::Create(Context, CurContext, Loc, TSInfo, FriendLoc);
   9942 }
   9943 
   9944 /// Handle a friend tag declaration where the scope specifier was
   9945 /// templated.
   9946 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
   9947                                     unsigned TagSpec, SourceLocation TagLoc,
   9948                                     CXXScopeSpec &SS,
   9949                                     IdentifierInfo *Name, SourceLocation NameLoc,
   9950                                     AttributeList *Attr,
   9951                                     MultiTemplateParamsArg TempParamLists) {
   9952   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   9953 
   9954   bool isExplicitSpecialization = false;
   9955   bool Invalid = false;
   9956 
   9957   if (TemplateParameterList *TemplateParams
   9958         = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
   9959                                                   TempParamLists.get(),
   9960                                                   TempParamLists.size(),
   9961                                                   /*friend*/ true,
   9962                                                   isExplicitSpecialization,
   9963                                                   Invalid)) {
   9964     if (TemplateParams->size() > 0) {
   9965       // This is a declaration of a class template.
   9966       if (Invalid)
   9967         return 0;
   9968 
   9969       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
   9970                                 SS, Name, NameLoc, Attr,
   9971                                 TemplateParams, AS_public,
   9972                                 /*ModulePrivateLoc=*/SourceLocation(),
   9973                                 TempParamLists.size() - 1,
   9974                    (TemplateParameterList**) TempParamLists.release()).take();
   9975     } else {
   9976       // The "template<>" header is extraneous.
   9977       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
   9978         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
   9979       isExplicitSpecialization = true;
   9980     }
   9981   }
   9982 
   9983   if (Invalid) return 0;
   9984 
   9985   bool isAllExplicitSpecializations = true;
   9986   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
   9987     if (TempParamLists.get()[I]->size()) {
   9988       isAllExplicitSpecializations = false;
   9989       break;
   9990     }
   9991   }
   9992 
   9993   // FIXME: don't ignore attributes.
   9994 
   9995   // If it's explicit specializations all the way down, just forget
   9996   // about the template header and build an appropriate non-templated
   9997   // friend.  TODO: for source fidelity, remember the headers.
   9998   if (isAllExplicitSpecializations) {
   9999     if (SS.isEmpty()) {
   10000       bool Owned = false;
   10001       bool IsDependent = false;
   10002       return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
   10003                       Attr, AS_public,
   10004                       /*ModulePrivateLoc=*/SourceLocation(),
   10005                       MultiTemplateParamsArg(), Owned, IsDependent,
   10006                       /*ScopedEnumKWLoc=*/SourceLocation(),
   10007                       /*ScopedEnumUsesClassTag=*/false,
   10008                       /*UnderlyingType=*/TypeResult());
   10009     }
   10010 
   10011     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   10012     ElaboratedTypeKeyword Keyword
   10013       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   10014     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
   10015                                    *Name, NameLoc);
   10016     if (T.isNull())
   10017       return 0;
   10018 
   10019     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   10020     if (isa<DependentNameType>(T)) {
   10021       DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
   10022       TL.setElaboratedKeywordLoc(TagLoc);
   10023       TL.setQualifierLoc(QualifierLoc);
   10024       TL.setNameLoc(NameLoc);
   10025     } else {
   10026       ElaboratedTypeLoc TL = cast<ElaboratedTypeLoc>(TSI->getTypeLoc());
   10027       TL.setElaboratedKeywordLoc(TagLoc);
   10028       TL.setQualifierLoc(QualifierLoc);
   10029       cast<TypeSpecTypeLoc>(TL.getNamedTypeLoc()).setNameLoc(NameLoc);
   10030     }
   10031 
   10032     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   10033                                             TSI, FriendLoc);
   10034     Friend->setAccess(AS_public);
   10035     CurContext->addDecl(Friend);
   10036     return Friend;
   10037   }
   10038 
   10039   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
   10040 
   10041 
   10042 
   10043   // Handle the case of a templated-scope friend class.  e.g.
   10044   //   template <class T> class A<T>::B;
   10045   // FIXME: we don't support these right now.
   10046   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   10047   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
   10048   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   10049   DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
   10050   TL.setElaboratedKeywordLoc(TagLoc);
   10051   TL.setQualifierLoc(SS.getWithLocInContext(Context));
   10052   TL.setNameLoc(NameLoc);
   10053 
   10054   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   10055                                           TSI, FriendLoc);
   10056   Friend->setAccess(AS_public);
   10057   Friend->setUnsupportedFriend(true);
   10058   CurContext->addDecl(Friend);
   10059   return Friend;
   10060 }
   10061 
   10062 
   10063 /// Handle a friend type declaration.  This works in tandem with
   10064 /// ActOnTag.
   10065 ///
   10066 /// Notes on friend class templates:
   10067 ///
   10068 /// We generally treat friend class declarations as if they were
   10069 /// declaring a class.  So, for example, the elaborated type specifier
   10070 /// in a friend declaration is required to obey the restrictions of a
   10071 /// class-head (i.e. no typedefs in the scope chain), template
   10072 /// parameters are required to match up with simple template-ids, &c.
   10073 /// However, unlike when declaring a template specialization, it's
   10074 /// okay to refer to a template specialization without an empty
   10075 /// template parameter declaration, e.g.
   10076 ///   friend class A<T>::B<unsigned>;
   10077 /// We permit this as a special case; if there are any template
   10078 /// parameters present at all, require proper matching, i.e.
   10079 ///   template <> template <class T> friend class A<int>::B;
   10080 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
   10081                                 MultiTemplateParamsArg TempParams) {
   10082   SourceLocation Loc = DS.getLocStart();
   10083 
   10084   assert(DS.isFriendSpecified());
   10085   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   10086 
   10087   // Try to convert the decl specifier to a type.  This works for
   10088   // friend templates because ActOnTag never produces a ClassTemplateDecl
   10089   // for a TUK_Friend.
   10090   Declarator TheDeclarator(DS, Declarator::MemberContext);
   10091   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
   10092   QualType T = TSI->getType();
   10093   if (TheDeclarator.isInvalidType())
   10094     return 0;
   10095 
   10096   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
   10097     return 0;
   10098 
   10099   // This is definitely an error in C++98.  It's probably meant to
   10100   // be forbidden in C++0x, too, but the specification is just
   10101   // poorly written.
   10102   //
   10103   // The problem is with declarations like the following:
   10104   //   template <T> friend A<T>::foo;
   10105   // where deciding whether a class C is a friend or not now hinges
   10106   // on whether there exists an instantiation of A that causes
   10107   // 'foo' to equal C.  There are restrictions on class-heads
   10108   // (which we declare (by fiat) elaborated friend declarations to
   10109   // be) that makes this tractable.
   10110   //
   10111   // FIXME: handle "template <> friend class A<T>;", which
   10112   // is possibly well-formed?  Who even knows?
   10113   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
   10114     Diag(Loc, diag::err_tagless_friend_type_template)
   10115       << DS.getSourceRange();
   10116     return 0;
   10117   }
   10118 
   10119   // C++98 [class.friend]p1: A friend of a class is a function
   10120   //   or class that is not a member of the class . . .
   10121   // This is fixed in DR77, which just barely didn't make the C++03
   10122   // deadline.  It's also a very silly restriction that seriously
   10123   // affects inner classes and which nobody else seems to implement;
   10124   // thus we never diagnose it, not even in -pedantic.
   10125   //
   10126   // But note that we could warn about it: it's always useless to
   10127   // friend one of your own members (it's not, however, worthless to
   10128   // friend a member of an arbitrary specialization of your template).
   10129 
   10130   Decl *D;
   10131   if (unsigned NumTempParamLists = TempParams.size())
   10132     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
   10133                                    NumTempParamLists,
   10134                                    TempParams.release(),
   10135                                    TSI,
   10136                                    DS.getFriendSpecLoc());
   10137   else
   10138     D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
   10139 
   10140   if (!D)
   10141     return 0;
   10142 
   10143   D->setAccess(AS_public);
   10144   CurContext->addDecl(D);
   10145 
   10146   return D;
   10147 }
   10148 
   10149 Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
   10150                                     MultiTemplateParamsArg TemplateParams) {
   10151   const DeclSpec &DS = D.getDeclSpec();
   10152 
   10153   assert(DS.isFriendSpecified());
   10154   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   10155 
   10156   SourceLocation Loc = D.getIdentifierLoc();
   10157   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   10158 
   10159   // C++ [class.friend]p1
   10160   //   A friend of a class is a function or class....
   10161   // Note that this sees through typedefs, which is intended.
   10162   // It *doesn't* see through dependent types, which is correct
   10163   // according to [temp.arg.type]p3:
   10164   //   If a declaration acquires a function type through a
   10165   //   type dependent on a template-parameter and this causes
   10166   //   a declaration that does not use the syntactic form of a
   10167   //   function declarator to have a function type, the program
   10168   //   is ill-formed.
   10169   if (!TInfo->getType()->isFunctionType()) {
   10170     Diag(Loc, diag::err_unexpected_friend);
   10171 
   10172     // It might be worthwhile to try to recover by creating an
   10173     // appropriate declaration.
   10174     return 0;
   10175   }
   10176 
   10177   // C++ [namespace.memdef]p3
   10178   //  - If a friend declaration in a non-local class first declares a
   10179   //    class or function, the friend class or function is a member
   10180   //    of the innermost enclosing namespace.
   10181   //  - The name of the friend is not found by simple name lookup
   10182   //    until a matching declaration is provided in that namespace
   10183   //    scope (either before or after the class declaration granting
   10184   //    friendship).
   10185   //  - If a friend function is called, its name may be found by the
   10186   //    name lookup that considers functions from namespaces and
   10187   //    classes associated with the types of the function arguments.
   10188   //  - When looking for a prior declaration of a class or a function
   10189   //    declared as a friend, scopes outside the innermost enclosing
   10190   //    namespace scope are not considered.
   10191 
   10192   CXXScopeSpec &SS = D.getCXXScopeSpec();
   10193   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   10194   DeclarationName Name = NameInfo.getName();
   10195   assert(Name);
   10196 
   10197   // Check for unexpanded parameter packs.
   10198   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
   10199       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
   10200       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
   10201     return 0;
   10202 
   10203   // The context we found the declaration in, or in which we should
   10204   // create the declaration.
   10205   DeclContext *DC;
   10206   Scope *DCScope = S;
   10207   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
   10208                         ForRedeclaration);
   10209 
   10210   // FIXME: there are different rules in local classes
   10211 
   10212   // There are four cases here.
   10213   //   - There's no scope specifier, in which case we just go to the
   10214   //     appropriate scope and look for a function or function template
   10215   //     there as appropriate.
   10216   // Recover from invalid scope qualifiers as if they just weren't there.
   10217   if (SS.isInvalid() || !SS.isSet()) {
   10218     // C++0x [namespace.memdef]p3:
   10219     //   If the name in a friend declaration is neither qualified nor
   10220     //   a template-id and the declaration is a function or an
   10221     //   elaborated-type-specifier, the lookup to determine whether
   10222     //   the entity has been previously declared shall not consider
   10223     //   any scopes outside the innermost enclosing namespace.
   10224     // C++0x [class.friend]p11:
   10225     //   If a friend declaration appears in a local class and the name
   10226     //   specified is an unqualified name, a prior declaration is
   10227     //   looked up without considering scopes that are outside the
   10228     //   innermost enclosing non-class scope. For a friend function
   10229     //   declaration, if there is no prior declaration, the program is
   10230     //   ill-formed.
   10231     bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
   10232     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
   10233 
   10234     // Find the appropriate context according to the above.
   10235     DC = CurContext;
   10236     while (true) {
   10237       // Skip class contexts.  If someone can cite chapter and verse
   10238       // for this behavior, that would be nice --- it's what GCC and
   10239       // EDG do, and it seems like a reasonable intent, but the spec
   10240       // really only says that checks for unqualified existing
   10241       // declarations should stop at the nearest enclosing namespace,
   10242       // not that they should only consider the nearest enclosing
   10243       // namespace.
   10244       while (DC->isRecord() || DC->isTransparentContext())
   10245         DC = DC->getParent();
   10246 
   10247       LookupQualifiedName(Previous, DC);
   10248 
   10249       // TODO: decide what we think about using declarations.
   10250       if (isLocal || !Previous.empty())
   10251         break;
   10252 
   10253       if (isTemplateId) {
   10254         if (isa<TranslationUnitDecl>(DC)) break;
   10255       } else {
   10256         if (DC->isFileContext()) break;
   10257       }
   10258       DC = DC->getParent();
   10259     }
   10260 
   10261     // C++ [class.friend]p1: A friend of a class is a function or
   10262     //   class that is not a member of the class . . .
   10263     // C++11 changes this for both friend types and functions.
   10264     // Most C++ 98 compilers do seem to give an error here, so
   10265     // we do, too.
   10266     if (!Previous.empty() && DC->Equals(CurContext))
   10267       Diag(DS.getFriendSpecLoc(),
   10268            getLangOpts().CPlusPlus0x ?
   10269              diag::warn_cxx98_compat_friend_is_member :
   10270              diag::err_friend_is_member);
   10271 
   10272     DCScope = getScopeForDeclContext(S, DC);
   10273 
   10274     // C++ [class.friend]p6:
   10275     //   A function can be defined in a friend declaration of a class if and
   10276     //   only if the class is a non-local class (9.8), the function name is
   10277     //   unqualified, and the function has namespace scope.
   10278     if (isLocal && D.isFunctionDefinition()) {
   10279       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
   10280     }
   10281 
   10282   //   - There's a non-dependent scope specifier, in which case we
   10283   //     compute it and do a previous lookup there for a function
   10284   //     or function template.
   10285   } else if (!SS.getScopeRep()->isDependent()) {
   10286     DC = computeDeclContext(SS);
   10287     if (!DC) return 0;
   10288 
   10289     if (RequireCompleteDeclContext(SS, DC)) return 0;
   10290 
   10291     LookupQualifiedName(Previous, DC);
   10292 
   10293     // Ignore things found implicitly in the wrong scope.
   10294     // TODO: better diagnostics for this case.  Suggesting the right
   10295     // qualified scope would be nice...
   10296     LookupResult::Filter F = Previous.makeFilter();
   10297     while (F.hasNext()) {
   10298       NamedDecl *D = F.next();
   10299       if (!DC->InEnclosingNamespaceSetOf(
   10300               D->getDeclContext()->getRedeclContext()))
   10301         F.erase();
   10302     }
   10303     F.done();
   10304 
   10305     if (Previous.empty()) {
   10306       D.setInvalidType();
   10307       Diag(Loc, diag::err_qualified_friend_not_found)
   10308           << Name << TInfo->getType();
   10309       return 0;
   10310     }
   10311 
   10312     // C++ [class.friend]p1: A friend of a class is a function or
   10313     //   class that is not a member of the class . . .
   10314     if (DC->Equals(CurContext))
   10315       Diag(DS.getFriendSpecLoc(),
   10316            getLangOpts().CPlusPlus0x ?
   10317              diag::warn_cxx98_compat_friend_is_member :
   10318              diag::err_friend_is_member);
   10319 
   10320     if (D.isFunctionDefinition()) {
   10321       // C++ [class.friend]p6:
   10322       //   A function can be defined in a friend declaration of a class if and
   10323       //   only if the class is a non-local class (9.8), the function name is
   10324       //   unqualified, and the function has namespace scope.
   10325       SemaDiagnosticBuilder DB
   10326         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
   10327 
   10328       DB << SS.getScopeRep();
   10329       if (DC->isFileContext())
   10330         DB << FixItHint::CreateRemoval(SS.getRange());
   10331       SS.clear();
   10332     }
   10333 
   10334   //   - There's a scope specifier that does not match any template
   10335   //     parameter lists, in which case we use some arbitrary context,
   10336   //     create a method or method template, and wait for instantiation.
   10337   //   - There's a scope specifier that does match some template
   10338   //     parameter lists, which we don't handle right now.
   10339   } else {
   10340     if (D.isFunctionDefinition()) {
   10341       // C++ [class.friend]p6:
   10342       //   A function can be defined in a friend declaration of a class if and
   10343       //   only if the class is a non-local class (9.8), the function name is
   10344       //   unqualified, and the function has namespace scope.
   10345       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
   10346         << SS.getScopeRep();
   10347     }
   10348 
   10349     DC = CurContext;
   10350     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
   10351   }
   10352 
   10353   if (!DC->isRecord()) {
   10354     // This implies that it has to be an operator or function.
   10355     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
   10356         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
   10357         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
   10358       Diag(Loc, diag::err_introducing_special_friend) <<
   10359         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
   10360          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
   10361       return 0;
   10362     }
   10363   }
   10364 
   10365   // FIXME: This is an egregious hack to cope with cases where the scope stack
   10366   // does not contain the declaration context, i.e., in an out-of-line
   10367   // definition of a class.
   10368   Scope FakeDCScope(S, Scope::DeclScope, Diags);
   10369   if (!DCScope) {
   10370     FakeDCScope.setEntity(DC);
   10371     DCScope = &FakeDCScope;
   10372   }
   10373 
   10374   bool AddToScope = true;
   10375   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
   10376                                           move(TemplateParams), AddToScope);
   10377   if (!ND) return 0;
   10378 
   10379   assert(ND->getDeclContext() == DC);
   10380   assert(ND->getLexicalDeclContext() == CurContext);
   10381 
   10382   // Add the function declaration to the appropriate lookup tables,
   10383   // adjusting the redeclarations list as necessary.  We don't
   10384   // want to do this yet if the friending class is dependent.
   10385   //
   10386   // Also update the scope-based lookup if the target context's
   10387   // lookup context is in lexical scope.
   10388   if (!CurContext->isDependentContext()) {
   10389     DC = DC->getRedeclContext();
   10390     DC->makeDeclVisibleInContext(ND);
   10391     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
   10392       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
   10393   }
   10394 
   10395   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
   10396                                        D.getIdentifierLoc(), ND,
   10397                                        DS.getFriendSpecLoc());
   10398   FrD->setAccess(AS_public);
   10399   CurContext->addDecl(FrD);
   10400 
   10401   if (ND->isInvalidDecl())
   10402     FrD->setInvalidDecl();
   10403   else {
   10404     FunctionDecl *FD;
   10405     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
   10406       FD = FTD->getTemplatedDecl();
   10407     else
   10408       FD = cast<FunctionDecl>(ND);
   10409 
   10410     // Mark templated-scope function declarations as unsupported.
   10411     if (FD->getNumTemplateParameterLists())
   10412       FrD->setUnsupportedFriend(true);
   10413   }
   10414 
   10415   return ND;
   10416 }
   10417 
   10418 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
   10419   AdjustDeclIfTemplate(Dcl);
   10420 
   10421   FunctionDecl *Fn = dyn_cast<FunctionDecl>(Dcl);
   10422   if (!Fn) {
   10423     Diag(DelLoc, diag::err_deleted_non_function);
   10424     return;
   10425   }
   10426   if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
   10427     Diag(DelLoc, diag::err_deleted_decl_not_first);
   10428     Diag(Prev->getLocation(), diag::note_previous_declaration);
   10429     // If the declaration wasn't the first, we delete the function anyway for
   10430     // recovery.
   10431   }
   10432   Fn->setDeletedAsWritten();
   10433 
   10434   CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
   10435   if (!MD)
   10436     return;
   10437 
   10438   // A deleted special member function is trivial if the corresponding
   10439   // implicitly-declared function would have been.
   10440   switch (getSpecialMember(MD)) {
   10441   case CXXInvalid:
   10442     break;
   10443   case CXXDefaultConstructor:
   10444     MD->setTrivial(MD->getParent()->hasTrivialDefaultConstructor());
   10445     break;
   10446   case CXXCopyConstructor:
   10447     MD->setTrivial(MD->getParent()->hasTrivialCopyConstructor());
   10448     break;
   10449   case CXXMoveConstructor:
   10450     MD->setTrivial(MD->getParent()->hasTrivialMoveConstructor());
   10451     break;
   10452   case CXXCopyAssignment:
   10453     MD->setTrivial(MD->getParent()->hasTrivialCopyAssignment());
   10454     break;
   10455   case CXXMoveAssignment:
   10456     MD->setTrivial(MD->getParent()->hasTrivialMoveAssignment());
   10457     break;
   10458   case CXXDestructor:
   10459     MD->setTrivial(MD->getParent()->hasTrivialDestructor());
   10460     break;
   10461   }
   10462 }
   10463 
   10464 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
   10465   CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
   10466 
   10467   if (MD) {
   10468     if (MD->getParent()->isDependentType()) {
   10469       MD->setDefaulted();
   10470       MD->setExplicitlyDefaulted();
   10471       return;
   10472     }
   10473 
   10474     CXXSpecialMember Member = getSpecialMember(MD);
   10475     if (Member == CXXInvalid) {
   10476       Diag(DefaultLoc, diag::err_default_special_members);
   10477       return;
   10478     }
   10479 
   10480     MD->setDefaulted();
   10481     MD->setExplicitlyDefaulted();
   10482 
   10483     // If this definition appears within the record, do the checking when
   10484     // the record is complete.
   10485     const FunctionDecl *Primary = MD;
   10486     if (MD->getTemplatedKind() != FunctionDecl::TK_NonTemplate)
   10487       // Find the uninstantiated declaration that actually had the '= default'
   10488       // on it.
   10489       MD->getTemplateInstantiationPattern()->isDefined(Primary);
   10490 
   10491     if (Primary == Primary->getCanonicalDecl())
   10492       return;
   10493 
   10494     switch (Member) {
   10495     case CXXDefaultConstructor: {
   10496       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10497       CheckExplicitlyDefaultedDefaultConstructor(CD);
   10498       if (!CD->isInvalidDecl())
   10499         DefineImplicitDefaultConstructor(DefaultLoc, CD);
   10500       break;
   10501     }
   10502 
   10503     case CXXCopyConstructor: {
   10504       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10505       CheckExplicitlyDefaultedCopyConstructor(CD);
   10506       if (!CD->isInvalidDecl())
   10507         DefineImplicitCopyConstructor(DefaultLoc, CD);
   10508       break;
   10509     }
   10510 
   10511     case CXXCopyAssignment: {
   10512       CheckExplicitlyDefaultedCopyAssignment(MD);
   10513       if (!MD->isInvalidDecl())
   10514         DefineImplicitCopyAssignment(DefaultLoc, MD);
   10515       break;
   10516     }
   10517 
   10518     case CXXDestructor: {
   10519       CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
   10520       CheckExplicitlyDefaultedDestructor(DD);
   10521       if (!DD->isInvalidDecl())
   10522         DefineImplicitDestructor(DefaultLoc, DD);
   10523       break;
   10524     }
   10525 
   10526     case CXXMoveConstructor: {
   10527       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10528       CheckExplicitlyDefaultedMoveConstructor(CD);
   10529       if (!CD->isInvalidDecl())
   10530         DefineImplicitMoveConstructor(DefaultLoc, CD);
   10531       break;
   10532     }
   10533 
   10534     case CXXMoveAssignment: {
   10535       CheckExplicitlyDefaultedMoveAssignment(MD);
   10536       if (!MD->isInvalidDecl())
   10537         DefineImplicitMoveAssignment(DefaultLoc, MD);
   10538       break;
   10539     }
   10540 
   10541     case CXXInvalid:
   10542       llvm_unreachable("Invalid special member.");
   10543     }
   10544   } else {
   10545     Diag(DefaultLoc, diag::err_default_special_members);
   10546   }
   10547 }
   10548 
   10549 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
   10550   for (Stmt::child_range CI = S->children(); CI; ++CI) {
   10551     Stmt *SubStmt = *CI;
   10552     if (!SubStmt)
   10553       continue;
   10554     if (isa<ReturnStmt>(SubStmt))
   10555       Self.Diag(SubStmt->getLocStart(),
   10556            diag::err_return_in_constructor_handler);
   10557     if (!isa<Expr>(SubStmt))
   10558       SearchForReturnInStmt(Self, SubStmt);
   10559   }
   10560 }
   10561 
   10562 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
   10563   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
   10564     CXXCatchStmt *Handler = TryBlock->getHandler(I);
   10565     SearchForReturnInStmt(*this, Handler);
   10566   }
   10567 }
   10568 
   10569 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
   10570                                              const CXXMethodDecl *Old) {
   10571   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
   10572   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
   10573 
   10574   if (Context.hasSameType(NewTy, OldTy) ||
   10575       NewTy->isDependentType() || OldTy->isDependentType())
   10576     return false;
   10577 
   10578   // Check if the return types are covariant
   10579   QualType NewClassTy, OldClassTy;
   10580 
   10581   /// Both types must be pointers or references to classes.
   10582   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
   10583     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
   10584       NewClassTy = NewPT->getPointeeType();
   10585       OldClassTy = OldPT->getPointeeType();
   10586     }
   10587   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
   10588     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
   10589       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
   10590         NewClassTy = NewRT->getPointeeType();
   10591         OldClassTy = OldRT->getPointeeType();
   10592       }
   10593     }
   10594   }
   10595 
   10596   // The return types aren't either both pointers or references to a class type.
   10597   if (NewClassTy.isNull()) {
   10598     Diag(New->getLocation(),
   10599          diag::err_different_return_type_for_overriding_virtual_function)
   10600       << New->getDeclName() << NewTy << OldTy;
   10601     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10602 
   10603     return true;
   10604   }
   10605 
   10606   // C++ [class.virtual]p6:
   10607   //   If the return type of D::f differs from the return type of B::f, the
   10608   //   class type in the return type of D::f shall be complete at the point of
   10609   //   declaration of D::f or shall be the class type D.
   10610   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
   10611     if (!RT->isBeingDefined() &&
   10612         RequireCompleteType(New->getLocation(), NewClassTy,
   10613                             PDiag(diag::err_covariant_return_incomplete)
   10614                               << New->getDeclName()))
   10615     return true;
   10616   }
   10617 
   10618   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
   10619     // Check if the new class derives from the old class.
   10620     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
   10621       Diag(New->getLocation(),
   10622            diag::err_covariant_return_not_derived)
   10623       << New->getDeclName() << NewTy << OldTy;
   10624       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10625       return true;
   10626     }
   10627 
   10628     // Check if we the conversion from derived to base is valid.
   10629     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
   10630                     diag::err_covariant_return_inaccessible_base,
   10631                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
   10632                     // FIXME: Should this point to the return type?
   10633                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
   10634       // FIXME: this note won't trigger for delayed access control
   10635       // diagnostics, and it's impossible to get an undelayed error
   10636       // here from access control during the original parse because
   10637       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
   10638       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10639       return true;
   10640     }
   10641   }
   10642 
   10643   // The qualifiers of the return types must be the same.
   10644   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
   10645     Diag(New->getLocation(),
   10646          diag::err_covariant_return_type_different_qualifications)
   10647     << New->getDeclName() << NewTy << OldTy;
   10648     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10649     return true;
   10650   };
   10651 
   10652 
   10653   // The new class type must have the same or less qualifiers as the old type.
   10654   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
   10655     Diag(New->getLocation(),
   10656          diag::err_covariant_return_type_class_type_more_qualified)
   10657     << New->getDeclName() << NewTy << OldTy;
   10658     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10659     return true;
   10660   };
   10661 
   10662   return false;
   10663 }
   10664 
   10665 /// \brief Mark the given method pure.
   10666 ///
   10667 /// \param Method the method to be marked pure.
   10668 ///
   10669 /// \param InitRange the source range that covers the "0" initializer.
   10670 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
   10671   SourceLocation EndLoc = InitRange.getEnd();
   10672   if (EndLoc.isValid())
   10673     Method->setRangeEnd(EndLoc);
   10674 
   10675   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
   10676     Method->setPure();
   10677     return false;
   10678   }
   10679 
   10680   if (!Method->isInvalidDecl())
   10681     Diag(Method->getLocation(), diag::err_non_virtual_pure)
   10682       << Method->getDeclName() << InitRange;
   10683   return true;
   10684 }
   10685 
   10686 /// \brief Determine whether the given declaration is a static data member.
   10687 static bool isStaticDataMember(Decl *D) {
   10688   VarDecl *Var = dyn_cast_or_null<VarDecl>(D);
   10689   if (!Var)
   10690     return false;
   10691 
   10692   return Var->isStaticDataMember();
   10693 }
   10694 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
   10695 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
   10696 /// is a fresh scope pushed for just this purpose.
   10697 ///
   10698 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
   10699 /// static data member of class X, names should be looked up in the scope of
   10700 /// class X.
   10701 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
   10702   // If there is no declaration, there was an error parsing it.
   10703   if (D == 0 || D->isInvalidDecl()) return;
   10704 
   10705   // We should only get called for declarations with scope specifiers, like:
   10706   //   int foo::bar;
   10707   assert(D->isOutOfLine());
   10708   EnterDeclaratorContext(S, D->getDeclContext());
   10709 
   10710   // If we are parsing the initializer for a static data member, push a
   10711   // new expression evaluation context that is associated with this static
   10712   // data member.
   10713   if (isStaticDataMember(D))
   10714     PushExpressionEvaluationContext(PotentiallyEvaluated, D);
   10715 }
   10716 
   10717 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
   10718 /// initializer for the out-of-line declaration 'D'.
   10719 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
   10720   // If there is no declaration, there was an error parsing it.
   10721   if (D == 0 || D->isInvalidDecl()) return;
   10722 
   10723   if (isStaticDataMember(D))
   10724     PopExpressionEvaluationContext();
   10725 
   10726   assert(D->isOutOfLine());
   10727   ExitDeclaratorContext(S);
   10728 }
   10729 
   10730 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
   10731 /// C++ if/switch/while/for statement.
   10732 /// e.g: "if (int x = f()) {...}"
   10733 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
   10734   // C++ 6.4p2:
   10735   // The declarator shall not specify a function or an array.
   10736   // The type-specifier-seq shall not contain typedef and shall not declare a
   10737   // new class or enumeration.
   10738   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
   10739          "Parser allowed 'typedef' as storage class of condition decl.");
   10740 
   10741   Decl *Dcl = ActOnDeclarator(S, D);
   10742   if (!Dcl)
   10743     return true;
   10744 
   10745   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
   10746     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
   10747       << D.getSourceRange();
   10748     return true;
   10749   }
   10750 
   10751   return Dcl;
   10752 }
   10753 
   10754 void Sema::LoadExternalVTableUses() {
   10755   if (!ExternalSource)
   10756     return;
   10757 
   10758   SmallVector<ExternalVTableUse, 4> VTables;
   10759   ExternalSource->ReadUsedVTables(VTables);
   10760   SmallVector<VTableUse, 4> NewUses;
   10761   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
   10762     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
   10763       = VTablesUsed.find(VTables[I].Record);
   10764     // Even if a definition wasn't required before, it may be required now.
   10765     if (Pos != VTablesUsed.end()) {
   10766       if (!Pos->second && VTables[I].DefinitionRequired)
   10767         Pos->second = true;
   10768       continue;
   10769     }
   10770 
   10771     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
   10772     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
   10773   }
   10774 
   10775   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
   10776 }
   10777 
   10778 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
   10779                           bool DefinitionRequired) {
   10780   // Ignore any vtable uses in unevaluated operands or for classes that do
   10781   // not have a vtable.
   10782   if (!Class->isDynamicClass() || Class->isDependentContext() ||
   10783       CurContext->isDependentContext() ||
   10784       ExprEvalContexts.back().Context == Unevaluated)
   10785     return;
   10786 
   10787   // Try to insert this class into the map.
   10788   LoadExternalVTableUses();
   10789   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   10790   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
   10791     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
   10792   if (!Pos.second) {
   10793     // If we already had an entry, check to see if we are promoting this vtable
   10794     // to required a definition. If so, we need to reappend to the VTableUses
   10795     // list, since we may have already processed the first entry.
   10796     if (DefinitionRequired && !Pos.first->second) {
   10797       Pos.first->second = true;
   10798     } else {
   10799       // Otherwise, we can early exit.
   10800       return;
   10801     }
   10802   }
   10803 
   10804   // Local classes need to have their virtual members marked
   10805   // immediately. For all other classes, we mark their virtual members
   10806   // at the end of the translation unit.
   10807   if (Class->isLocalClass())
   10808     MarkVirtualMembersReferenced(Loc, Class);
   10809   else
   10810     VTableUses.push_back(std::make_pair(Class, Loc));
   10811 }
   10812 
   10813 bool Sema::DefineUsedVTables() {
   10814   LoadExternalVTableUses();
   10815   if (VTableUses.empty())
   10816     return false;
   10817 
   10818   // Note: The VTableUses vector could grow as a result of marking
   10819   // the members of a class as "used", so we check the size each
   10820   // time through the loop and prefer indices (with are stable) to
   10821   // iterators (which are not).
   10822   bool DefinedAnything = false;
   10823   for (unsigned I = 0; I != VTableUses.size(); ++I) {
   10824     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
   10825     if (!Class)
   10826       continue;
   10827 
   10828     SourceLocation Loc = VTableUses[I].second;
   10829 
   10830     // If this class has a key function, but that key function is
   10831     // defined in another translation unit, we don't need to emit the
   10832     // vtable even though we're using it.
   10833     const CXXMethodDecl *KeyFunction = Context.getKeyFunction(Class);
   10834     if (KeyFunction && !KeyFunction->hasBody()) {
   10835       switch (KeyFunction->getTemplateSpecializationKind()) {
   10836       case TSK_Undeclared:
   10837       case TSK_ExplicitSpecialization:
   10838       case TSK_ExplicitInstantiationDeclaration:
   10839         // The key function is in another translation unit.
   10840         continue;
   10841 
   10842       case TSK_ExplicitInstantiationDefinition:
   10843       case TSK_ImplicitInstantiation:
   10844         // We will be instantiating the key function.
   10845         break;
   10846       }
   10847     } else if (!KeyFunction) {
   10848       // If we have a class with no key function that is the subject
   10849       // of an explicit instantiation declaration, suppress the
   10850       // vtable; it will live with the explicit instantiation
   10851       // definition.
   10852       bool IsExplicitInstantiationDeclaration
   10853         = Class->getTemplateSpecializationKind()
   10854                                       == TSK_ExplicitInstantiationDeclaration;
   10855       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
   10856                                  REnd = Class->redecls_end();
   10857            R != REnd; ++R) {
   10858         TemplateSpecializationKind TSK
   10859           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
   10860         if (TSK == TSK_ExplicitInstantiationDeclaration)
   10861           IsExplicitInstantiationDeclaration = true;
   10862         else if (TSK == TSK_ExplicitInstantiationDefinition) {
   10863           IsExplicitInstantiationDeclaration = false;
   10864           break;
   10865         }
   10866       }
   10867 
   10868       if (IsExplicitInstantiationDeclaration)
   10869         continue;
   10870     }
   10871 
   10872     // Mark all of the virtual members of this class as referenced, so
   10873     // that we can build a vtable. Then, tell the AST consumer that a
   10874     // vtable for this class is required.
   10875     DefinedAnything = true;
   10876     MarkVirtualMembersReferenced(Loc, Class);
   10877     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   10878     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
   10879 
   10880     // Optionally warn if we're emitting a weak vtable.
   10881     if (Class->getLinkage() == ExternalLinkage &&
   10882         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
   10883       const FunctionDecl *KeyFunctionDef = 0;
   10884       if (!KeyFunction ||
   10885           (KeyFunction->hasBody(KeyFunctionDef) &&
   10886            KeyFunctionDef->isInlined()))
   10887         Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
   10888              TSK_ExplicitInstantiationDefinition
   10889              ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
   10890           << Class;
   10891     }
   10892   }
   10893   VTableUses.clear();
   10894 
   10895   return DefinedAnything;
   10896 }
   10897 
   10898 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
   10899                                         const CXXRecordDecl *RD) {
   10900   for (CXXRecordDecl::method_iterator i = RD->method_begin(),
   10901        e = RD->method_end(); i != e; ++i) {
   10902     CXXMethodDecl *MD = *i;
   10903 
   10904     // C++ [basic.def.odr]p2:
   10905     //   [...] A virtual member function is used if it is not pure. [...]
   10906     if (MD->isVirtual() && !MD->isPure())
   10907       MarkFunctionReferenced(Loc, MD);
   10908   }
   10909 
   10910   // Only classes that have virtual bases need a VTT.
   10911   if (RD->getNumVBases() == 0)
   10912     return;
   10913 
   10914   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
   10915            e = RD->bases_end(); i != e; ++i) {
   10916     const CXXRecordDecl *Base =
   10917         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
   10918     if (Base->getNumVBases() == 0)
   10919       continue;
   10920     MarkVirtualMembersReferenced(Loc, Base);
   10921   }
   10922 }
   10923 
   10924 /// SetIvarInitializers - This routine builds initialization ASTs for the
   10925 /// Objective-C implementation whose ivars need be initialized.
   10926 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
   10927   if (!getLangOpts().CPlusPlus)
   10928     return;
   10929   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
   10930     SmallVector<ObjCIvarDecl*, 8> ivars;
   10931     CollectIvarsToConstructOrDestruct(OID, ivars);
   10932     if (ivars.empty())
   10933       return;
   10934     SmallVector<CXXCtorInitializer*, 32> AllToInit;
   10935     for (unsigned i = 0; i < ivars.size(); i++) {
   10936       FieldDecl *Field = ivars[i];
   10937       if (Field->isInvalidDecl())
   10938         continue;
   10939 
   10940       CXXCtorInitializer *Member;
   10941       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
   10942       InitializationKind InitKind =
   10943         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
   10944 
   10945       InitializationSequence InitSeq(*this, InitEntity, InitKind, 0, 0);
   10946       ExprResult MemberInit =
   10947         InitSeq.Perform(*this, InitEntity, InitKind, MultiExprArg());
   10948       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
   10949       // Note, MemberInit could actually come back empty if no initialization
   10950       // is required (e.g., because it would call a trivial default constructor)
   10951       if (!MemberInit.get() || MemberInit.isInvalid())
   10952         continue;
   10953 
   10954       Member =
   10955         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
   10956                                          SourceLocation(),
   10957                                          MemberInit.takeAs<Expr>(),
   10958                                          SourceLocation());
   10959       AllToInit.push_back(Member);
   10960 
   10961       // Be sure that the destructor is accessible and is marked as referenced.
   10962       if (const RecordType *RecordTy
   10963                   = Context.getBaseElementType(Field->getType())
   10964                                                         ->getAs<RecordType>()) {
   10965                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
   10966         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
   10967           MarkFunctionReferenced(Field->getLocation(), Destructor);
   10968           CheckDestructorAccess(Field->getLocation(), Destructor,
   10969                             PDiag(diag::err_access_dtor_ivar)
   10970                               << Context.getBaseElementType(Field->getType()));
   10971         }
   10972       }
   10973     }
   10974     ObjCImplementation->setIvarInitializers(Context,
   10975                                             AllToInit.data(), AllToInit.size());
   10976   }
   10977 }
   10978 
   10979 static
   10980 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
   10981                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
   10982                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
   10983                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
   10984                            Sema &S) {
   10985   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
   10986                                                    CE = Current.end();
   10987   if (Ctor->isInvalidDecl())
   10988     return;
   10989 
   10990   const FunctionDecl *FNTarget = 0;
   10991   CXXConstructorDecl *Target;
   10992 
   10993   // We ignore the result here since if we don't have a body, Target will be
   10994   // null below.
   10995   (void)Ctor->getTargetConstructor()->hasBody(FNTarget);
   10996   Target
   10997 = const_cast<CXXConstructorDecl*>(cast_or_null<CXXConstructorDecl>(FNTarget));
   10998 
   10999   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
   11000                      // Avoid dereferencing a null pointer here.
   11001                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
   11002 
   11003   if (!Current.insert(Canonical))
   11004     return;
   11005 
   11006   // We know that beyond here, we aren't chaining into a cycle.
   11007   if (!Target || !Target->isDelegatingConstructor() ||
   11008       Target->isInvalidDecl() || Valid.count(TCanonical)) {
   11009     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
   11010       Valid.insert(*CI);
   11011     Current.clear();
   11012   // We've hit a cycle.
   11013   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
   11014              Current.count(TCanonical)) {
   11015     // If we haven't diagnosed this cycle yet, do so now.
   11016     if (!Invalid.count(TCanonical)) {
   11017       S.Diag((*Ctor->init_begin())->getSourceLocation(),
   11018              diag::warn_delegating_ctor_cycle)
   11019         << Ctor;
   11020 
   11021       // Don't add a note for a function delegating directo to itself.
   11022       if (TCanonical != Canonical)
   11023         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
   11024 
   11025       CXXConstructorDecl *C = Target;
   11026       while (C->getCanonicalDecl() != Canonical) {
   11027         (void)C->getTargetConstructor()->hasBody(FNTarget);
   11028         assert(FNTarget && "Ctor cycle through bodiless function");
   11029 
   11030         C
   11031        = const_cast<CXXConstructorDecl*>(cast<CXXConstructorDecl>(FNTarget));
   11032         S.Diag(C->getLocation(), diag::note_which_delegates_to);
   11033       }
   11034     }
   11035 
   11036     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
   11037       Invalid.insert(*CI);
   11038     Current.clear();
   11039   } else {
   11040     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
   11041   }
   11042 }
   11043 
   11044 
   11045 void Sema::CheckDelegatingCtorCycles() {
   11046   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
   11047 
   11048   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
   11049                                                    CE = Current.end();
   11050 
   11051   for (DelegatingCtorDeclsType::iterator
   11052          I = DelegatingCtorDecls.begin(ExternalSource),
   11053          E = DelegatingCtorDecls.end();
   11054        I != E; ++I) {
   11055    DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
   11056   }
   11057 
   11058   for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
   11059     (*CI)->setInvalidDecl();
   11060 }
   11061 
   11062 namespace {
   11063   /// \brief AST visitor that finds references to the 'this' expression.
   11064   class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
   11065     Sema &S;
   11066 
   11067   public:
   11068     explicit FindCXXThisExpr(Sema &S) : S(S) { }
   11069 
   11070     bool VisitCXXThisExpr(CXXThisExpr *E) {
   11071       S.Diag(E->getLocation(), diag::err_this_static_member_func)
   11072         << E->isImplicit();
   11073       return false;
   11074     }
   11075   };
   11076 }
   11077 
   11078 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
   11079   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
   11080   if (!TSInfo)
   11081     return false;
   11082 
   11083   TypeLoc TL = TSInfo->getTypeLoc();
   11084   FunctionProtoTypeLoc *ProtoTL = dyn_cast<FunctionProtoTypeLoc>(&TL);
   11085   if (!ProtoTL)
   11086     return false;
   11087 
   11088   // C++11 [expr.prim.general]p3:
   11089   //   [The expression this] shall not appear before the optional
   11090   //   cv-qualifier-seq and it shall not appear within the declaration of a
   11091   //   static member function (although its type and value category are defined
   11092   //   within a static member function as they are within a non-static member
   11093   //   function). [ Note: this is because declaration matching does not occur
   11094   //  until the complete declarator is known.  end note ]
   11095   const FunctionProtoType *Proto = ProtoTL->getTypePtr();
   11096   FindCXXThisExpr Finder(*this);
   11097 
   11098   // If the return type came after the cv-qualifier-seq, check it now.
   11099   if (Proto->hasTrailingReturn() &&
   11100       !Finder.TraverseTypeLoc(ProtoTL->getResultLoc()))
   11101     return true;
   11102 
   11103   // Check the exception specification.
   11104   if (checkThisInStaticMemberFunctionExceptionSpec(Method))
   11105     return true;
   11106 
   11107   return checkThisInStaticMemberFunctionAttributes(Method);
   11108 }
   11109 
   11110 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
   11111   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
   11112   if (!TSInfo)
   11113     return false;
   11114 
   11115   TypeLoc TL = TSInfo->getTypeLoc();
   11116   FunctionProtoTypeLoc *ProtoTL = dyn_cast<FunctionProtoTypeLoc>(&TL);
   11117   if (!ProtoTL)
   11118     return false;
   11119 
   11120   const FunctionProtoType *Proto = ProtoTL->getTypePtr();
   11121   FindCXXThisExpr Finder(*this);
   11122 
   11123   switch (Proto->getExceptionSpecType()) {
   11124   case EST_Uninstantiated:
   11125   case EST_BasicNoexcept:
   11126   case EST_Delayed:
   11127   case EST_DynamicNone:
   11128   case EST_MSAny:
   11129   case EST_None:
   11130     break;
   11131 
   11132   case EST_ComputedNoexcept:
   11133     if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
   11134       return true;
   11135 
   11136   case EST_Dynamic:
   11137     for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
   11138          EEnd = Proto->exception_end();
   11139          E != EEnd; ++E) {
   11140       if (!Finder.TraverseType(*E))
   11141         return true;
   11142     }
   11143     break;
   11144   }
   11145 
   11146   return false;
   11147 }
   11148 
   11149 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
   11150   FindCXXThisExpr Finder(*this);
   11151 
   11152   // Check attributes.
   11153   for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
   11154        A != AEnd; ++A) {
   11155     // FIXME: This should be emitted by tblgen.
   11156     Expr *Arg = 0;
   11157     ArrayRef<Expr *> Args;
   11158     if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
   11159       Arg = G->getArg();
   11160     else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
   11161       Arg = G->getArg();
   11162     else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
   11163       Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
   11164     else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
   11165       Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
   11166     else if (ExclusiveLockFunctionAttr *ELF
   11167                = dyn_cast<ExclusiveLockFunctionAttr>(*A))
   11168       Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
   11169     else if (SharedLockFunctionAttr *SLF
   11170                = dyn_cast<SharedLockFunctionAttr>(*A))
   11171       Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
   11172     else if (ExclusiveTrylockFunctionAttr *ETLF
   11173                = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
   11174       Arg = ETLF->getSuccessValue();
   11175       Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
   11176     } else if (SharedTrylockFunctionAttr *STLF
   11177                  = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
   11178       Arg = STLF->getSuccessValue();
   11179       Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
   11180     } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
   11181       Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
   11182     else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
   11183       Arg = LR->getArg();
   11184     else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
   11185       Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
   11186     else if (ExclusiveLocksRequiredAttr *ELR
   11187                = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
   11188       Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
   11189     else if (SharedLocksRequiredAttr *SLR
   11190                = dyn_cast<SharedLocksRequiredAttr>(*A))
   11191       Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
   11192 
   11193     if (Arg && !Finder.TraverseStmt(Arg))
   11194       return true;
   11195 
   11196     for (unsigned I = 0, N = Args.size(); I != N; ++I) {
   11197       if (!Finder.TraverseStmt(Args[I]))
   11198         return true;
   11199     }
   11200   }
   11201 
   11202   return false;
   11203 }
   11204 
   11205 void
   11206 Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
   11207                                   ArrayRef<ParsedType> DynamicExceptions,
   11208                                   ArrayRef<SourceRange> DynamicExceptionRanges,
   11209                                   Expr *NoexceptExpr,
   11210                                   llvm::SmallVectorImpl<QualType> &Exceptions,
   11211                                   FunctionProtoType::ExtProtoInfo &EPI) {
   11212   Exceptions.clear();
   11213   EPI.ExceptionSpecType = EST;
   11214   if (EST == EST_Dynamic) {
   11215     Exceptions.reserve(DynamicExceptions.size());
   11216     for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
   11217       // FIXME: Preserve type source info.
   11218       QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
   11219 
   11220       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
   11221       collectUnexpandedParameterPacks(ET, Unexpanded);
   11222       if (!Unexpanded.empty()) {
   11223         DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
   11224                                          UPPC_ExceptionType,
   11225                                          Unexpanded);
   11226         continue;
   11227       }
   11228 
   11229       // Check that the type is valid for an exception spec, and
   11230       // drop it if not.
   11231       if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
   11232         Exceptions.push_back(ET);
   11233     }
   11234     EPI.NumExceptions = Exceptions.size();
   11235     EPI.Exceptions = Exceptions.data();
   11236     return;
   11237   }
   11238 
   11239   if (EST == EST_ComputedNoexcept) {
   11240     // If an error occurred, there's no expression here.
   11241     if (NoexceptExpr) {
   11242       assert((NoexceptExpr->isTypeDependent() ||
   11243               NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
   11244               Context.BoolTy) &&
   11245              "Parser should have made sure that the expression is boolean");
   11246       if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
   11247         EPI.ExceptionSpecType = EST_BasicNoexcept;
   11248         return;
   11249       }
   11250 
   11251       if (!NoexceptExpr->isValueDependent())
   11252         NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
   11253                          PDiag(diag::err_noexcept_needs_constant_expression),
   11254                          /*AllowFold*/ false).take();
   11255       EPI.NoexceptExpr = NoexceptExpr;
   11256     }
   11257     return;
   11258   }
   11259 }
   11260 
   11261 void Sema::actOnDelayedExceptionSpecification(Decl *MethodD,
   11262              ExceptionSpecificationType EST,
   11263              SourceRange SpecificationRange,
   11264              ArrayRef<ParsedType> DynamicExceptions,
   11265              ArrayRef<SourceRange> DynamicExceptionRanges,
   11266              Expr *NoexceptExpr) {
   11267   if (!MethodD)
   11268     return;
   11269 
   11270   // Dig out the method we're referring to.
   11271   CXXMethodDecl *Method = 0;
   11272   if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(MethodD))
   11273     Method = dyn_cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
   11274   else
   11275     Method = dyn_cast<CXXMethodDecl>(MethodD);
   11276 
   11277   if (!Method)
   11278     return;
   11279 
   11280   // Dig out the prototype. This should never fail.
   11281   const FunctionProtoType *Proto
   11282     = dyn_cast<FunctionProtoType>(Method->getType());
   11283   if (!Proto)
   11284     return;
   11285 
   11286   // Check the exception specification.
   11287   llvm::SmallVector<QualType, 4> Exceptions;
   11288   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   11289   checkExceptionSpecification(EST, DynamicExceptions, DynamicExceptionRanges,
   11290                               NoexceptExpr, Exceptions, EPI);
   11291 
   11292   // Rebuild the function type.
   11293   QualType T = Context.getFunctionType(Proto->getResultType(),
   11294                                        Proto->arg_type_begin(),
   11295                                        Proto->getNumArgs(),
   11296                                        EPI);
   11297   if (TypeSourceInfo *TSInfo = Method->getTypeSourceInfo()) {
   11298     // FIXME: When we get proper type location information for exceptions,
   11299     // we'll also have to rebuild the TypeSourceInfo. For now, we just patch
   11300     // up the TypeSourceInfo;
   11301     assert(TypeLoc::getFullDataSizeForType(T)
   11302              == TypeLoc::getFullDataSizeForType(Method->getType()) &&
   11303            "TypeLoc size mismatch with delayed exception specification");
   11304     TSInfo->overrideType(T);
   11305   }
   11306 
   11307   Method->setType(T);
   11308 
   11309   if (Method->isStatic())
   11310     checkThisInStaticMemberFunctionExceptionSpec(Method);
   11311 
   11312   if (Method->isVirtual()) {
   11313     // Check overrides, which we previously had to delay.
   11314     for (CXXMethodDecl::method_iterator O = Method->begin_overridden_methods(),
   11315                                      OEnd = Method->end_overridden_methods();
   11316          O != OEnd; ++O)
   11317       CheckOverridingFunctionExceptionSpec(Method, *O);
   11318   }
   11319 }
   11320 
   11321 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
   11322 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
   11323   // Implicitly declared functions (e.g. copy constructors) are
   11324   // __host__ __device__
   11325   if (D->isImplicit())
   11326     return CFT_HostDevice;
   11327 
   11328   if (D->hasAttr<CUDAGlobalAttr>())
   11329     return CFT_Global;
   11330 
   11331   if (D->hasAttr<CUDADeviceAttr>()) {
   11332     if (D->hasAttr<CUDAHostAttr>())
   11333       return CFT_HostDevice;
   11334     else
   11335       return CFT_Device;
   11336   }
   11337 
   11338   return CFT_Host;
   11339 }
   11340 
   11341 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
   11342                            CUDAFunctionTarget CalleeTarget) {
   11343   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
   11344   // Callable from the device only."
   11345   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
   11346     return true;
   11347 
   11348   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
   11349   // Callable from the host only."
   11350   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
   11351   // Callable from the host only."
   11352   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
   11353       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
   11354     return true;
   11355 
   11356   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
   11357     return true;
   11358 
   11359   return false;
   11360 }
   11361