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/AST/ASTConsumer.h"
     20 #include "clang/AST/ASTContext.h"
     21 #include "clang/AST/ASTMutationListener.h"
     22 #include "clang/AST/CharUnits.h"
     23 #include "clang/AST/CXXInheritance.h"
     24 #include "clang/AST/DeclVisitor.h"
     25 #include "clang/AST/ExprCXX.h"
     26 #include "clang/AST/RecordLayout.h"
     27 #include "clang/AST/StmtVisitor.h"
     28 #include "clang/AST/TypeLoc.h"
     29 #include "clang/AST/TypeOrdering.h"
     30 #include "clang/Sema/DeclSpec.h"
     31 #include "clang/Sema/ParsedTemplate.h"
     32 #include "clang/Basic/PartialDiagnostic.h"
     33 #include "clang/Lex/Preprocessor.h"
     34 #include "llvm/ADT/DenseSet.h"
     35 #include "llvm/ADT/STLExtras.h"
     36 #include <map>
     37 #include <set>
     38 
     39 using namespace clang;
     40 
     41 //===----------------------------------------------------------------------===//
     42 // CheckDefaultArgumentVisitor
     43 //===----------------------------------------------------------------------===//
     44 
     45 namespace {
     46   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
     47   /// the default argument of a parameter to determine whether it
     48   /// contains any ill-formed subexpressions. For example, this will
     49   /// diagnose the use of local variables or parameters within the
     50   /// default argument expression.
     51   class CheckDefaultArgumentVisitor
     52     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
     53     Expr *DefaultArg;
     54     Sema *S;
     55 
     56   public:
     57     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
     58       : DefaultArg(defarg), S(s) {}
     59 
     60     bool VisitExpr(Expr *Node);
     61     bool VisitDeclRefExpr(DeclRefExpr *DRE);
     62     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
     63   };
     64 
     65   /// VisitExpr - Visit all of the children of this expression.
     66   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
     67     bool IsInvalid = false;
     68     for (Stmt::child_range I = Node->children(); I; ++I)
     69       IsInvalid |= Visit(*I);
     70     return IsInvalid;
     71   }
     72 
     73   /// VisitDeclRefExpr - Visit a reference to a declaration, to
     74   /// determine whether this declaration can be used in the default
     75   /// argument expression.
     76   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
     77     NamedDecl *Decl = DRE->getDecl();
     78     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
     79       // C++ [dcl.fct.default]p9
     80       //   Default arguments are evaluated each time the function is
     81       //   called. The order of evaluation of function arguments is
     82       //   unspecified. Consequently, parameters of a function shall not
     83       //   be used in default argument expressions, even if they are not
     84       //   evaluated. Parameters of a function declared before a default
     85       //   argument expression are in scope and can hide namespace and
     86       //   class member names.
     87       return S->Diag(DRE->getSourceRange().getBegin(),
     88                      diag::err_param_default_argument_references_param)
     89          << Param->getDeclName() << DefaultArg->getSourceRange();
     90     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
     91       // C++ [dcl.fct.default]p7
     92       //   Local variables shall not be used in default argument
     93       //   expressions.
     94       if (VDecl->isLocalVarDecl())
     95         return S->Diag(DRE->getSourceRange().getBegin(),
     96                        diag::err_param_default_argument_references_local)
     97           << VDecl->getDeclName() << DefaultArg->getSourceRange();
     98     }
     99 
    100     return false;
    101   }
    102 
    103   /// VisitCXXThisExpr - Visit a C++ "this" expression.
    104   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
    105     // C++ [dcl.fct.default]p8:
    106     //   The keyword this shall not be used in a default argument of a
    107     //   member function.
    108     return S->Diag(ThisE->getSourceRange().getBegin(),
    109                    diag::err_param_default_argument_references_this)
    110                << ThisE->getSourceRange();
    111   }
    112 }
    113 
    114 void Sema::ImplicitExceptionSpecification::CalledDecl(CXXMethodDecl *Method) {
    115   assert(Context && "ImplicitExceptionSpecification without an ASTContext");
    116   // If we have an MSAny or unknown spec already, don't bother.
    117   if (!Method || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
    118     return;
    119 
    120   const FunctionProtoType *Proto
    121     = Method->getType()->getAs<FunctionProtoType>();
    122 
    123   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
    124 
    125   // If this function can throw any exceptions, make a note of that.
    126   if (EST == EST_Delayed || EST == EST_MSAny || EST == EST_None) {
    127     ClearExceptions();
    128     ComputedEST = EST;
    129     return;
    130   }
    131 
    132   // FIXME: If the call to this decl is using any of its default arguments, we
    133   // need to search them for potentially-throwing calls.
    134 
    135   // If this function has a basic noexcept, it doesn't affect the outcome.
    136   if (EST == EST_BasicNoexcept)
    137     return;
    138 
    139   // If we have a throw-all spec at this point, ignore the function.
    140   if (ComputedEST == EST_None)
    141     return;
    142 
    143   // If we're still at noexcept(true) and there's a nothrow() callee,
    144   // change to that specification.
    145   if (EST == EST_DynamicNone) {
    146     if (ComputedEST == EST_BasicNoexcept)
    147       ComputedEST = EST_DynamicNone;
    148     return;
    149   }
    150 
    151   // Check out noexcept specs.
    152   if (EST == EST_ComputedNoexcept) {
    153     FunctionProtoType::NoexceptResult NR = Proto->getNoexceptSpec(*Context);
    154     assert(NR != FunctionProtoType::NR_NoNoexcept &&
    155            "Must have noexcept result for EST_ComputedNoexcept.");
    156     assert(NR != FunctionProtoType::NR_Dependent &&
    157            "Should not generate implicit declarations for dependent cases, "
    158            "and don't know how to handle them anyway.");
    159 
    160     // noexcept(false) -> no spec on the new function
    161     if (NR == FunctionProtoType::NR_Throw) {
    162       ClearExceptions();
    163       ComputedEST = EST_None;
    164     }
    165     // noexcept(true) won't change anything either.
    166     return;
    167   }
    168 
    169   assert(EST == EST_Dynamic && "EST case not considered earlier.");
    170   assert(ComputedEST != EST_None &&
    171          "Shouldn't collect exceptions when throw-all is guaranteed.");
    172   ComputedEST = EST_Dynamic;
    173   // Record the exceptions in this function's exception specification.
    174   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
    175                                           EEnd = Proto->exception_end();
    176        E != EEnd; ++E)
    177     if (ExceptionsSeen.insert(Context->getCanonicalType(*E)))
    178       Exceptions.push_back(*E);
    179 }
    180 
    181 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
    182   if (!E || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
    183     return;
    184 
    185   // FIXME:
    186   //
    187   // C++0x [except.spec]p14:
    188   //   [An] implicit exception-specification specifies the type-id T if and
    189   // only if T is allowed by the exception-specification of a function directly
    190   // invoked by f's implicit definition; f shall allow all exceptions if any
    191   // function it directly invokes allows all exceptions, and f shall allow no
    192   // exceptions if every function it directly invokes allows no exceptions.
    193   //
    194   // Note in particular that if an implicit exception-specification is generated
    195   // for a function containing a throw-expression, that specification can still
    196   // be noexcept(true).
    197   //
    198   // Note also that 'directly invoked' is not defined in the standard, and there
    199   // is no indication that we should only consider potentially-evaluated calls.
    200   //
    201   // Ultimately we should implement the intent of the standard: the exception
    202   // specification should be the set of exceptions which can be thrown by the
    203   // implicit definition. For now, we assume that any non-nothrow expression can
    204   // throw any exception.
    205 
    206   if (E->CanThrow(*Context))
    207     ComputedEST = EST_None;
    208 }
    209 
    210 bool
    211 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
    212                               SourceLocation EqualLoc) {
    213   if (RequireCompleteType(Param->getLocation(), Param->getType(),
    214                           diag::err_typecheck_decl_incomplete_type)) {
    215     Param->setInvalidDecl();
    216     return true;
    217   }
    218 
    219   // C++ [dcl.fct.default]p5
    220   //   A default argument expression is implicitly converted (clause
    221   //   4) to the parameter type. The default argument expression has
    222   //   the same semantic constraints as the initializer expression in
    223   //   a declaration of a variable of the parameter type, using the
    224   //   copy-initialization semantics (8.5).
    225   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
    226                                                                     Param);
    227   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
    228                                                            EqualLoc);
    229   InitializationSequence InitSeq(*this, Entity, Kind, &Arg, 1);
    230   ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
    231                                       MultiExprArg(*this, &Arg, 1));
    232   if (Result.isInvalid())
    233     return true;
    234   Arg = Result.takeAs<Expr>();
    235 
    236   CheckImplicitConversions(Arg, EqualLoc);
    237   Arg = MaybeCreateExprWithCleanups(Arg);
    238 
    239   // Okay: add the default argument to the parameter
    240   Param->setDefaultArg(Arg);
    241 
    242   // We have already instantiated this parameter; provide each of the
    243   // instantiations with the uninstantiated default argument.
    244   UnparsedDefaultArgInstantiationsMap::iterator InstPos
    245     = UnparsedDefaultArgInstantiations.find(Param);
    246   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
    247     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
    248       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
    249 
    250     // We're done tracking this parameter's instantiations.
    251     UnparsedDefaultArgInstantiations.erase(InstPos);
    252   }
    253 
    254   return false;
    255 }
    256 
    257 /// ActOnParamDefaultArgument - Check whether the default argument
    258 /// provided for a function parameter is well-formed. If so, attach it
    259 /// to the parameter declaration.
    260 void
    261 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
    262                                 Expr *DefaultArg) {
    263   if (!param || !DefaultArg)
    264     return;
    265 
    266   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    267   UnparsedDefaultArgLocs.erase(Param);
    268 
    269   // Default arguments are only permitted in C++
    270   if (!getLangOptions().CPlusPlus) {
    271     Diag(EqualLoc, diag::err_param_default_argument)
    272       << DefaultArg->getSourceRange();
    273     Param->setInvalidDecl();
    274     return;
    275   }
    276 
    277   // Check for unexpanded parameter packs.
    278   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
    279     Param->setInvalidDecl();
    280     return;
    281   }
    282 
    283   // Check that the default argument is well-formed
    284   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
    285   if (DefaultArgChecker.Visit(DefaultArg)) {
    286     Param->setInvalidDecl();
    287     return;
    288   }
    289 
    290   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
    291 }
    292 
    293 /// ActOnParamUnparsedDefaultArgument - We've seen a default
    294 /// argument for a function parameter, but we can't parse it yet
    295 /// because we're inside a class definition. Note that this default
    296 /// argument will be parsed later.
    297 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
    298                                              SourceLocation EqualLoc,
    299                                              SourceLocation ArgLoc) {
    300   if (!param)
    301     return;
    302 
    303   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    304   if (Param)
    305     Param->setUnparsedDefaultArg();
    306 
    307   UnparsedDefaultArgLocs[Param] = ArgLoc;
    308 }
    309 
    310 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
    311 /// the default argument for the parameter param failed.
    312 void Sema::ActOnParamDefaultArgumentError(Decl *param) {
    313   if (!param)
    314     return;
    315 
    316   ParmVarDecl *Param = cast<ParmVarDecl>(param);
    317 
    318   Param->setInvalidDecl();
    319 
    320   UnparsedDefaultArgLocs.erase(Param);
    321 }
    322 
    323 /// CheckExtraCXXDefaultArguments - Check for any extra default
    324 /// arguments in the declarator, which is not a function declaration
    325 /// or definition and therefore is not permitted to have default
    326 /// arguments. This routine should be invoked for every declarator
    327 /// that is not a function declaration or definition.
    328 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
    329   // C++ [dcl.fct.default]p3
    330   //   A default argument expression shall be specified only in the
    331   //   parameter-declaration-clause of a function declaration or in a
    332   //   template-parameter (14.1). It shall not be specified for a
    333   //   parameter pack. If it is specified in a
    334   //   parameter-declaration-clause, it shall not occur within a
    335   //   declarator or abstract-declarator of a parameter-declaration.
    336   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
    337     DeclaratorChunk &chunk = D.getTypeObject(i);
    338     if (chunk.Kind == DeclaratorChunk::Function) {
    339       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
    340         ParmVarDecl *Param =
    341           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
    342         if (Param->hasUnparsedDefaultArg()) {
    343           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
    344           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    345             << SourceRange((*Toks)[1].getLocation(), Toks->back().getLocation());
    346           delete Toks;
    347           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
    348         } else if (Param->getDefaultArg()) {
    349           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
    350             << Param->getDefaultArg()->getSourceRange();
    351           Param->setDefaultArg(0);
    352         }
    353       }
    354     }
    355   }
    356 }
    357 
    358 // MergeCXXFunctionDecl - Merge two declarations of the same C++
    359 // function, once we already know that they have the same
    360 // type. Subroutine of MergeFunctionDecl. Returns true if there was an
    361 // error, false otherwise.
    362 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
    363   bool Invalid = false;
    364 
    365   // C++ [dcl.fct.default]p4:
    366   //   For non-template functions, default arguments can be added in
    367   //   later declarations of a function in the same
    368   //   scope. Declarations in different scopes have completely
    369   //   distinct sets of default arguments. That is, declarations in
    370   //   inner scopes do not acquire default arguments from
    371   //   declarations in outer scopes, and vice versa. In a given
    372   //   function declaration, all parameters subsequent to a
    373   //   parameter with a default argument shall have default
    374   //   arguments supplied in this or previous declarations. A
    375   //   default argument shall not be redefined by a later
    376   //   declaration (not even to the same value).
    377   //
    378   // C++ [dcl.fct.default]p6:
    379   //   Except for member functions of class templates, the default arguments
    380   //   in a member function definition that appears outside of the class
    381   //   definition are added to the set of default arguments provided by the
    382   //   member function declaration in the class definition.
    383   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
    384     ParmVarDecl *OldParam = Old->getParamDecl(p);
    385     ParmVarDecl *NewParam = New->getParamDecl(p);
    386 
    387     if (OldParam->hasDefaultArg() && NewParam->hasDefaultArg()) {
    388 
    389       unsigned DiagDefaultParamID =
    390         diag::err_param_default_argument_redefinition;
    391 
    392       // MSVC accepts that default parameters be redefined for member functions
    393       // of template class. The new default parameter's value is ignored.
    394       Invalid = true;
    395       if (getLangOptions().MicrosoftExt) {
    396         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
    397         if (MD && MD->getParent()->getDescribedClassTemplate()) {
    398           // Merge the old default argument into the new parameter.
    399           NewParam->setHasInheritedDefaultArg();
    400           if (OldParam->hasUninstantiatedDefaultArg())
    401             NewParam->setUninstantiatedDefaultArg(
    402                                       OldParam->getUninstantiatedDefaultArg());
    403           else
    404             NewParam->setDefaultArg(OldParam->getInit());
    405           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
    406           Invalid = false;
    407         }
    408       }
    409 
    410       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
    411       // hint here. Alternatively, we could walk the type-source information
    412       // for NewParam to find the last source location in the type... but it
    413       // isn't worth the effort right now. This is the kind of test case that
    414       // is hard to get right:
    415       //   int f(int);
    416       //   void g(int (*fp)(int) = f);
    417       //   void g(int (*fp)(int) = &f);
    418       Diag(NewParam->getLocation(), DiagDefaultParamID)
    419         << NewParam->getDefaultArgRange();
    420 
    421       // Look for the function declaration where the default argument was
    422       // actually written, which may be a declaration prior to Old.
    423       for (FunctionDecl *Older = Old->getPreviousDeclaration();
    424            Older; Older = Older->getPreviousDeclaration()) {
    425         if (!Older->getParamDecl(p)->hasDefaultArg())
    426           break;
    427 
    428         OldParam = Older->getParamDecl(p);
    429       }
    430 
    431       Diag(OldParam->getLocation(), diag::note_previous_definition)
    432         << OldParam->getDefaultArgRange();
    433     } else if (OldParam->hasDefaultArg()) {
    434       // Merge the old default argument into the new parameter.
    435       // It's important to use getInit() here;  getDefaultArg()
    436       // strips off any top-level ExprWithCleanups.
    437       NewParam->setHasInheritedDefaultArg();
    438       if (OldParam->hasUninstantiatedDefaultArg())
    439         NewParam->setUninstantiatedDefaultArg(
    440                                       OldParam->getUninstantiatedDefaultArg());
    441       else
    442         NewParam->setDefaultArg(OldParam->getInit());
    443     } else if (NewParam->hasDefaultArg()) {
    444       if (New->getDescribedFunctionTemplate()) {
    445         // Paragraph 4, quoted above, only applies to non-template functions.
    446         Diag(NewParam->getLocation(),
    447              diag::err_param_default_argument_template_redecl)
    448           << NewParam->getDefaultArgRange();
    449         Diag(Old->getLocation(), diag::note_template_prev_declaration)
    450           << false;
    451       } else if (New->getTemplateSpecializationKind()
    452                    != TSK_ImplicitInstantiation &&
    453                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
    454         // C++ [temp.expr.spec]p21:
    455         //   Default function arguments shall not be specified in a declaration
    456         //   or a definition for one of the following explicit specializations:
    457         //     - the explicit specialization of a function template;
    458         //     - the explicit specialization of a member function template;
    459         //     - the explicit specialization of a member function of a class
    460         //       template where the class template specialization to which the
    461         //       member function specialization belongs is implicitly
    462         //       instantiated.
    463         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
    464           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
    465           << New->getDeclName()
    466           << NewParam->getDefaultArgRange();
    467       } else if (New->getDeclContext()->isDependentContext()) {
    468         // C++ [dcl.fct.default]p6 (DR217):
    469         //   Default arguments for a member function of a class template shall
    470         //   be specified on the initial declaration of the member function
    471         //   within the class template.
    472         //
    473         // Reading the tea leaves a bit in DR217 and its reference to DR205
    474         // leads me to the conclusion that one cannot add default function
    475         // arguments for an out-of-line definition of a member function of a
    476         // dependent type.
    477         int WhichKind = 2;
    478         if (CXXRecordDecl *Record
    479               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
    480           if (Record->getDescribedClassTemplate())
    481             WhichKind = 0;
    482           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
    483             WhichKind = 1;
    484           else
    485             WhichKind = 2;
    486         }
    487 
    488         Diag(NewParam->getLocation(),
    489              diag::err_param_default_argument_member_template_redecl)
    490           << WhichKind
    491           << NewParam->getDefaultArgRange();
    492       } else if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(New)) {
    493         CXXSpecialMember NewSM = getSpecialMember(Ctor),
    494                          OldSM = getSpecialMember(cast<CXXConstructorDecl>(Old));
    495         if (NewSM != OldSM) {
    496           Diag(NewParam->getLocation(),diag::warn_default_arg_makes_ctor_special)
    497             << NewParam->getDefaultArgRange() << NewSM;
    498           Diag(Old->getLocation(), diag::note_previous_declaration_special)
    499             << OldSM;
    500         }
    501       }
    502     }
    503   }
    504 
    505   // C++0x [dcl.constexpr]p1: If any declaration of a function or function
    506   // template has a constexpr specifier then all its declarations shall
    507   // contain the constexpr specifier. [Note: An explicit specialization can
    508   // differ from the template declaration with respect to the constexpr
    509   // specifier. -- end note]
    510   //
    511   // FIXME: Don't reject changes in constexpr in explicit specializations.
    512   if (New->isConstexpr() != Old->isConstexpr()) {
    513     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
    514       << New << New->isConstexpr();
    515     Diag(Old->getLocation(), diag::note_previous_declaration);
    516     Invalid = true;
    517   }
    518 
    519   if (CheckEquivalentExceptionSpec(Old, New))
    520     Invalid = true;
    521 
    522   return Invalid;
    523 }
    524 
    525 /// \brief Merge the exception specifications of two variable declarations.
    526 ///
    527 /// This is called when there's a redeclaration of a VarDecl. The function
    528 /// checks if the redeclaration might have an exception specification and
    529 /// validates compatibility and merges the specs if necessary.
    530 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
    531   // Shortcut if exceptions are disabled.
    532   if (!getLangOptions().CXXExceptions)
    533     return;
    534 
    535   assert(Context.hasSameType(New->getType(), Old->getType()) &&
    536          "Should only be called if types are otherwise the same.");
    537 
    538   QualType NewType = New->getType();
    539   QualType OldType = Old->getType();
    540 
    541   // We're only interested in pointers and references to functions, as well
    542   // as pointers to member functions.
    543   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
    544     NewType = R->getPointeeType();
    545     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
    546   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
    547     NewType = P->getPointeeType();
    548     OldType = OldType->getAs<PointerType>()->getPointeeType();
    549   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
    550     NewType = M->getPointeeType();
    551     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
    552   }
    553 
    554   if (!NewType->isFunctionProtoType())
    555     return;
    556 
    557   // There's lots of special cases for functions. For function pointers, system
    558   // libraries are hopefully not as broken so that we don't need these
    559   // workarounds.
    560   if (CheckEquivalentExceptionSpec(
    561         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
    562         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
    563     New->setInvalidDecl();
    564   }
    565 }
    566 
    567 /// CheckCXXDefaultArguments - Verify that the default arguments for a
    568 /// function declaration are well-formed according to C++
    569 /// [dcl.fct.default].
    570 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
    571   unsigned NumParams = FD->getNumParams();
    572   unsigned p;
    573 
    574   // Find first parameter with a default argument
    575   for (p = 0; p < NumParams; ++p) {
    576     ParmVarDecl *Param = FD->getParamDecl(p);
    577     if (Param->hasDefaultArg())
    578       break;
    579   }
    580 
    581   // C++ [dcl.fct.default]p4:
    582   //   In a given function declaration, all parameters
    583   //   subsequent to a parameter with a default argument shall
    584   //   have default arguments supplied in this or previous
    585   //   declarations. A default argument shall not be redefined
    586   //   by a later declaration (not even to the same value).
    587   unsigned LastMissingDefaultArg = 0;
    588   for (; p < NumParams; ++p) {
    589     ParmVarDecl *Param = FD->getParamDecl(p);
    590     if (!Param->hasDefaultArg()) {
    591       if (Param->isInvalidDecl())
    592         /* We already complained about this parameter. */;
    593       else if (Param->getIdentifier())
    594         Diag(Param->getLocation(),
    595              diag::err_param_default_argument_missing_name)
    596           << Param->getIdentifier();
    597       else
    598         Diag(Param->getLocation(),
    599              diag::err_param_default_argument_missing);
    600 
    601       LastMissingDefaultArg = p;
    602     }
    603   }
    604 
    605   if (LastMissingDefaultArg > 0) {
    606     // Some default arguments were missing. Clear out all of the
    607     // default arguments up to (and including) the last missing
    608     // default argument, so that we leave the function parameters
    609     // in a semantically valid state.
    610     for (p = 0; p <= LastMissingDefaultArg; ++p) {
    611       ParmVarDecl *Param = FD->getParamDecl(p);
    612       if (Param->hasDefaultArg()) {
    613         Param->setDefaultArg(0);
    614       }
    615     }
    616   }
    617 }
    618 
    619 // CheckConstexprParameterTypes - Check whether a function's parameter types
    620 // are all literal types. If so, return true. If not, produce a suitable
    621 // diagnostic depending on @p CCK and return false.
    622 static bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD,
    623                                          Sema::CheckConstexprKind CCK) {
    624   unsigned ArgIndex = 0;
    625   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
    626   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
    627        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
    628     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
    629     SourceLocation ParamLoc = PD->getLocation();
    630     if (!(*i)->isDependentType() &&
    631         SemaRef.RequireLiteralType(ParamLoc, *i, CCK == Sema::CCK_Declaration ?
    632                             SemaRef.PDiag(diag::err_constexpr_non_literal_param)
    633                                      << ArgIndex+1 << PD->getSourceRange()
    634                                      << isa<CXXConstructorDecl>(FD) :
    635                                    SemaRef.PDiag(),
    636                                    /*AllowIncompleteType*/ true)) {
    637       if (CCK == Sema::CCK_NoteNonConstexprInstantiation)
    638         SemaRef.Diag(ParamLoc, diag::note_constexpr_tmpl_non_literal_param)
    639           << ArgIndex+1 << PD->getSourceRange()
    640           << isa<CXXConstructorDecl>(FD) << *i;
    641       return false;
    642     }
    643   }
    644   return true;
    645 }
    646 
    647 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
    648 // the requirements of a constexpr function declaration or a constexpr
    649 // constructor declaration. Return true if it does, false if not.
    650 //
    651 // This implements C++0x [dcl.constexpr]p3,4, as amended by N3308.
    652 //
    653 // \param CCK Specifies whether to produce diagnostics if the function does not
    654 // satisfy the requirements.
    655 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD,
    656                                       CheckConstexprKind CCK) {
    657   assert((CCK != CCK_NoteNonConstexprInstantiation ||
    658           (NewFD->getTemplateInstantiationPattern() &&
    659            NewFD->getTemplateInstantiationPattern()->isConstexpr())) &&
    660          "only constexpr templates can be instantiated non-constexpr");
    661 
    662   if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(NewFD)) {
    663     // C++0x [dcl.constexpr]p4:
    664     //  In the definition of a constexpr constructor, each of the parameter
    665     //  types shall be a literal type.
    666     if (!CheckConstexprParameterTypes(*this, NewFD, CCK))
    667       return false;
    668 
    669     //  In addition, either its function-body shall be = delete or = default or
    670     //  it shall satisfy the following constraints:
    671     //  - the class shall not have any virtual base classes;
    672     const CXXRecordDecl *RD = CD->getParent();
    673     if (RD->getNumVBases()) {
    674       // Note, this is still illegal if the body is = default, since the
    675       // implicit body does not satisfy the requirements of a constexpr
    676       // constructor. We also reject cases where the body is = delete, as
    677       // required by N3308.
    678       if (CCK != CCK_Instantiation) {
    679         Diag(NewFD->getLocation(),
    680              CCK == CCK_Declaration ? diag::err_constexpr_virtual_base
    681                                     : diag::note_constexpr_tmpl_virtual_base)
    682           << RD->isStruct() << RD->getNumVBases();
    683         for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
    684                E = RD->vbases_end(); I != E; ++I)
    685           Diag(I->getSourceRange().getBegin(),
    686                diag::note_constexpr_virtual_base_here) << I->getSourceRange();
    687       }
    688       return false;
    689     }
    690   } else {
    691     // C++0x [dcl.constexpr]p3:
    692     //  The definition of a constexpr function shall satisfy the following
    693     //  constraints:
    694     // - it shall not be virtual;
    695     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
    696     if (Method && Method->isVirtual()) {
    697       if (CCK != CCK_Instantiation) {
    698         Diag(NewFD->getLocation(),
    699              CCK == CCK_Declaration ? diag::err_constexpr_virtual
    700                                     : diag::note_constexpr_tmpl_virtual);
    701 
    702         // If it's not obvious why this function is virtual, find an overridden
    703         // function which uses the 'virtual' keyword.
    704         const CXXMethodDecl *WrittenVirtual = Method;
    705         while (!WrittenVirtual->isVirtualAsWritten())
    706           WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
    707         if (WrittenVirtual != Method)
    708           Diag(WrittenVirtual->getLocation(),
    709                diag::note_overridden_virtual_function);
    710       }
    711       return false;
    712     }
    713 
    714     // - its return type shall be a literal type;
    715     QualType RT = NewFD->getResultType();
    716     if (!RT->isDependentType() &&
    717         RequireLiteralType(NewFD->getLocation(), RT, CCK == CCK_Declaration ?
    718                            PDiag(diag::err_constexpr_non_literal_return) :
    719                            PDiag(),
    720                            /*AllowIncompleteType*/ true)) {
    721       if (CCK == CCK_NoteNonConstexprInstantiation)
    722         Diag(NewFD->getLocation(),
    723              diag::note_constexpr_tmpl_non_literal_return) << RT;
    724       return false;
    725     }
    726 
    727     // - each of its parameter types shall be a literal type;
    728     if (!CheckConstexprParameterTypes(*this, NewFD, CCK))
    729       return false;
    730   }
    731 
    732   return true;
    733 }
    734 
    735 /// Check the given declaration statement is legal within a constexpr function
    736 /// body. C++0x [dcl.constexpr]p3,p4.
    737 ///
    738 /// \return true if the body is OK, false if we have diagnosed a problem.
    739 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
    740                                    DeclStmt *DS) {
    741   // C++0x [dcl.constexpr]p3 and p4:
    742   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
    743   //  contain only
    744   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
    745          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
    746     switch ((*DclIt)->getKind()) {
    747     case Decl::StaticAssert:
    748     case Decl::Using:
    749     case Decl::UsingShadow:
    750     case Decl::UsingDirective:
    751     case Decl::UnresolvedUsingTypename:
    752       //   - static_assert-declarations
    753       //   - using-declarations,
    754       //   - using-directives,
    755       continue;
    756 
    757     case Decl::Typedef:
    758     case Decl::TypeAlias: {
    759       //   - typedef declarations and alias-declarations that do not define
    760       //     classes or enumerations,
    761       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
    762       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
    763         // Don't allow variably-modified types in constexpr functions.
    764         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
    765         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
    766           << TL.getSourceRange() << TL.getType()
    767           << isa<CXXConstructorDecl>(Dcl);
    768         return false;
    769       }
    770       continue;
    771     }
    772 
    773     case Decl::Enum:
    774     case Decl::CXXRecord:
    775       // As an extension, we allow the declaration (but not the definition) of
    776       // classes and enumerations in all declarations, not just in typedef and
    777       // alias declarations.
    778       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition()) {
    779         SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_type_definition)
    780           << isa<CXXConstructorDecl>(Dcl);
    781         return false;
    782       }
    783       continue;
    784 
    785     case Decl::Var:
    786       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_var_declaration)
    787         << isa<CXXConstructorDecl>(Dcl);
    788       return false;
    789 
    790     default:
    791       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
    792         << isa<CXXConstructorDecl>(Dcl);
    793       return false;
    794     }
    795   }
    796 
    797   return true;
    798 }
    799 
    800 /// Check that the given field is initialized within a constexpr constructor.
    801 ///
    802 /// \param Dcl The constexpr constructor being checked.
    803 /// \param Field The field being checked. This may be a member of an anonymous
    804 ///        struct or union nested within the class being checked.
    805 /// \param Inits All declarations, including anonymous struct/union members and
    806 ///        indirect members, for which any initialization was provided.
    807 /// \param Diagnosed Set to true if an error is produced.
    808 static void CheckConstexprCtorInitializer(Sema &SemaRef,
    809                                           const FunctionDecl *Dcl,
    810                                           FieldDecl *Field,
    811                                           llvm::SmallSet<Decl*, 16> &Inits,
    812                                           bool &Diagnosed) {
    813   if (Field->isUnnamedBitfield())
    814     return;
    815 
    816   if (!Inits.count(Field)) {
    817     if (!Diagnosed) {
    818       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
    819       Diagnosed = true;
    820     }
    821     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
    822   } else if (Field->isAnonymousStructOrUnion()) {
    823     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
    824     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
    825          I != E; ++I)
    826       // If an anonymous union contains an anonymous struct of which any member
    827       // is initialized, all members must be initialized.
    828       if (!RD->isUnion() || Inits.count(*I))
    829         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
    830   }
    831 }
    832 
    833 /// Check the body for the given constexpr function declaration only contains
    834 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
    835 ///
    836 /// \return true if the body is OK, false if we have diagnosed a problem.
    837 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
    838   if (isa<CXXTryStmt>(Body)) {
    839     // C++0x [dcl.constexpr]p3:
    840     //  The definition of a constexpr function shall satisfy the following
    841     //  constraints: [...]
    842     // - its function-body shall be = delete, = default, or a
    843     //   compound-statement
    844     //
    845     // C++0x [dcl.constexpr]p4:
    846     //  In the definition of a constexpr constructor, [...]
    847     // - its function-body shall not be a function-try-block;
    848     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
    849       << isa<CXXConstructorDecl>(Dcl);
    850     return false;
    851   }
    852 
    853   // - its function-body shall be [...] a compound-statement that contains only
    854   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
    855 
    856   llvm::SmallVector<SourceLocation, 4> ReturnStmts;
    857   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
    858          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
    859     switch ((*BodyIt)->getStmtClass()) {
    860     case Stmt::NullStmtClass:
    861       //   - null statements,
    862       continue;
    863 
    864     case Stmt::DeclStmtClass:
    865       //   - static_assert-declarations
    866       //   - using-declarations,
    867       //   - using-directives,
    868       //   - typedef declarations and alias-declarations that do not define
    869       //     classes or enumerations,
    870       if (!CheckConstexprDeclStmt(*this, Dcl, cast<DeclStmt>(*BodyIt)))
    871         return false;
    872       continue;
    873 
    874     case Stmt::ReturnStmtClass:
    875       //   - and exactly one return statement;
    876       if (isa<CXXConstructorDecl>(Dcl))
    877         break;
    878 
    879       ReturnStmts.push_back((*BodyIt)->getLocStart());
    880       // FIXME
    881       // - every constructor call and implicit conversion used in initializing
    882       //   the return value shall be one of those allowed in a constant
    883       //   expression.
    884       // Deal with this as part of a general check that the function can produce
    885       // a constant expression (for [dcl.constexpr]p5).
    886       continue;
    887 
    888     default:
    889       break;
    890     }
    891 
    892     Diag((*BodyIt)->getLocStart(), diag::err_constexpr_body_invalid_stmt)
    893       << isa<CXXConstructorDecl>(Dcl);
    894     return false;
    895   }
    896 
    897   if (const CXXConstructorDecl *Constructor
    898         = dyn_cast<CXXConstructorDecl>(Dcl)) {
    899     const CXXRecordDecl *RD = Constructor->getParent();
    900     // - every non-static data member and base class sub-object shall be
    901     //   initialized;
    902     if (RD->isUnion()) {
    903       // DR1359: Exactly one member of a union shall be initialized.
    904       if (Constructor->getNumCtorInitializers() == 0) {
    905         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
    906         return false;
    907       }
    908     } else if (!Constructor->isDependentContext() &&
    909                !Constructor->isDelegatingConstructor()) {
    910       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
    911 
    912       // Skip detailed checking if we have enough initializers, and we would
    913       // allow at most one initializer per member.
    914       bool AnyAnonStructUnionMembers = false;
    915       unsigned Fields = 0;
    916       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
    917            E = RD->field_end(); I != E; ++I, ++Fields) {
    918         if ((*I)->isAnonymousStructOrUnion()) {
    919           AnyAnonStructUnionMembers = true;
    920           break;
    921         }
    922       }
    923       if (AnyAnonStructUnionMembers ||
    924           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
    925         // Check initialization of non-static data members. Base classes are
    926         // always initialized so do not need to be checked. Dependent bases
    927         // might not have initializers in the member initializer list.
    928         llvm::SmallSet<Decl*, 16> Inits;
    929         for (CXXConstructorDecl::init_const_iterator
    930                I = Constructor->init_begin(), E = Constructor->init_end();
    931              I != E; ++I) {
    932           if (FieldDecl *FD = (*I)->getMember())
    933             Inits.insert(FD);
    934           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
    935             Inits.insert(ID->chain_begin(), ID->chain_end());
    936         }
    937 
    938         bool Diagnosed = false;
    939         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
    940              E = RD->field_end(); I != E; ++I)
    941           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
    942         if (Diagnosed)
    943           return false;
    944       }
    945     }
    946 
    947     // FIXME
    948     // - every constructor involved in initializing non-static data members
    949     //   and base class sub-objects shall be a constexpr constructor;
    950     // - every assignment-expression that is an initializer-clause appearing
    951     //   directly or indirectly within a brace-or-equal-initializer for
    952     //   a non-static data member that is not named by a mem-initializer-id
    953     //   shall be a constant expression; and
    954     // - every implicit conversion used in converting a constructor argument
    955     //   to the corresponding parameter type and converting
    956     //   a full-expression to the corresponding member type shall be one of
    957     //   those allowed in a constant expression.
    958     // Deal with these as part of a general check that the function can produce
    959     // a constant expression (for [dcl.constexpr]p5).
    960   } else {
    961     if (ReturnStmts.empty()) {
    962       Diag(Dcl->getLocation(), diag::err_constexpr_body_no_return);
    963       return false;
    964     }
    965     if (ReturnStmts.size() > 1) {
    966       Diag(ReturnStmts.back(), diag::err_constexpr_body_multiple_return);
    967       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
    968         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
    969       return false;
    970     }
    971   }
    972 
    973   return true;
    974 }
    975 
    976 /// isCurrentClassName - Determine whether the identifier II is the
    977 /// name of the class type currently being defined. In the case of
    978 /// nested classes, this will only return true if II is the name of
    979 /// the innermost class.
    980 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
    981                               const CXXScopeSpec *SS) {
    982   assert(getLangOptions().CPlusPlus && "No class names in C!");
    983 
    984   CXXRecordDecl *CurDecl;
    985   if (SS && SS->isSet() && !SS->isInvalid()) {
    986     DeclContext *DC = computeDeclContext(*SS, true);
    987     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
    988   } else
    989     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
    990 
    991   if (CurDecl && CurDecl->getIdentifier())
    992     return &II == CurDecl->getIdentifier();
    993   else
    994     return false;
    995 }
    996 
    997 /// \brief Check the validity of a C++ base class specifier.
    998 ///
    999 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
   1000 /// and returns NULL otherwise.
   1001 CXXBaseSpecifier *
   1002 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
   1003                          SourceRange SpecifierRange,
   1004                          bool Virtual, AccessSpecifier Access,
   1005                          TypeSourceInfo *TInfo,
   1006                          SourceLocation EllipsisLoc) {
   1007   QualType BaseType = TInfo->getType();
   1008 
   1009   // C++ [class.union]p1:
   1010   //   A union shall not have base classes.
   1011   if (Class->isUnion()) {
   1012     Diag(Class->getLocation(), diag::err_base_clause_on_union)
   1013       << SpecifierRange;
   1014     return 0;
   1015   }
   1016 
   1017   if (EllipsisLoc.isValid() &&
   1018       !TInfo->getType()->containsUnexpandedParameterPack()) {
   1019     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   1020       << TInfo->getTypeLoc().getSourceRange();
   1021     EllipsisLoc = SourceLocation();
   1022   }
   1023 
   1024   if (BaseType->isDependentType())
   1025     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1026                                           Class->getTagKind() == TTK_Class,
   1027                                           Access, TInfo, EllipsisLoc);
   1028 
   1029   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
   1030 
   1031   // Base specifiers must be record types.
   1032   if (!BaseType->isRecordType()) {
   1033     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
   1034     return 0;
   1035   }
   1036 
   1037   // C++ [class.union]p1:
   1038   //   A union shall not be used as a base class.
   1039   if (BaseType->isUnionType()) {
   1040     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
   1041     return 0;
   1042   }
   1043 
   1044   // C++ [class.derived]p2:
   1045   //   The class-name in a base-specifier shall not be an incompletely
   1046   //   defined class.
   1047   if (RequireCompleteType(BaseLoc, BaseType,
   1048                           PDiag(diag::err_incomplete_base_class)
   1049                             << SpecifierRange)) {
   1050     Class->setInvalidDecl();
   1051     return 0;
   1052   }
   1053 
   1054   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
   1055   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
   1056   assert(BaseDecl && "Record type has no declaration");
   1057   BaseDecl = BaseDecl->getDefinition();
   1058   assert(BaseDecl && "Base type is not incomplete, but has no definition");
   1059   CXXRecordDecl * CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
   1060   assert(CXXBaseDecl && "Base type is not a C++ type");
   1061 
   1062   // C++ [class]p3:
   1063   //   If a class is marked final and it appears as a base-type-specifier in
   1064   //   base-clause, the program is ill-formed.
   1065   if (CXXBaseDecl->hasAttr<FinalAttr>()) {
   1066     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
   1067       << CXXBaseDecl->getDeclName();
   1068     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
   1069       << CXXBaseDecl->getDeclName();
   1070     return 0;
   1071   }
   1072 
   1073   if (BaseDecl->isInvalidDecl())
   1074     Class->setInvalidDecl();
   1075 
   1076   // Create the base specifier.
   1077   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
   1078                                         Class->getTagKind() == TTK_Class,
   1079                                         Access, TInfo, EllipsisLoc);
   1080 }
   1081 
   1082 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
   1083 /// one entry in the base class list of a class specifier, for
   1084 /// example:
   1085 ///    class foo : public bar, virtual private baz {
   1086 /// 'public bar' and 'virtual private baz' are each base-specifiers.
   1087 BaseResult
   1088 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
   1089                          bool Virtual, AccessSpecifier Access,
   1090                          ParsedType basetype, SourceLocation BaseLoc,
   1091                          SourceLocation EllipsisLoc) {
   1092   if (!classdecl)
   1093     return true;
   1094 
   1095   AdjustDeclIfTemplate(classdecl);
   1096   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
   1097   if (!Class)
   1098     return true;
   1099 
   1100   TypeSourceInfo *TInfo = 0;
   1101   GetTypeFromParser(basetype, &TInfo);
   1102 
   1103   if (EllipsisLoc.isInvalid() &&
   1104       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
   1105                                       UPPC_BaseType))
   1106     return true;
   1107 
   1108   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
   1109                                                       Virtual, Access, TInfo,
   1110                                                       EllipsisLoc))
   1111     return BaseSpec;
   1112 
   1113   return true;
   1114 }
   1115 
   1116 /// \brief Performs the actual work of attaching the given base class
   1117 /// specifiers to a C++ class.
   1118 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
   1119                                 unsigned NumBases) {
   1120  if (NumBases == 0)
   1121     return false;
   1122 
   1123   // Used to keep track of which base types we have already seen, so
   1124   // that we can properly diagnose redundant direct base types. Note
   1125   // that the key is always the unqualified canonical type of the base
   1126   // class.
   1127   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
   1128 
   1129   // Copy non-redundant base specifiers into permanent storage.
   1130   unsigned NumGoodBases = 0;
   1131   bool Invalid = false;
   1132   for (unsigned idx = 0; idx < NumBases; ++idx) {
   1133     QualType NewBaseType
   1134       = Context.getCanonicalType(Bases[idx]->getType());
   1135     NewBaseType = NewBaseType.getLocalUnqualifiedType();
   1136     if (KnownBaseTypes[NewBaseType]) {
   1137       // C++ [class.mi]p3:
   1138       //   A class shall not be specified as a direct base class of a
   1139       //   derived class more than once.
   1140       Diag(Bases[idx]->getSourceRange().getBegin(),
   1141            diag::err_duplicate_base_class)
   1142         << KnownBaseTypes[NewBaseType]->getType()
   1143         << Bases[idx]->getSourceRange();
   1144 
   1145       // Delete the duplicate base class specifier; we're going to
   1146       // overwrite its pointer later.
   1147       Context.Deallocate(Bases[idx]);
   1148 
   1149       Invalid = true;
   1150     } else {
   1151       // Okay, add this new base class.
   1152       KnownBaseTypes[NewBaseType] = Bases[idx];
   1153       Bases[NumGoodBases++] = Bases[idx];
   1154     }
   1155   }
   1156 
   1157   // Attach the remaining base class specifiers to the derived class.
   1158   Class->setBases(Bases, NumGoodBases);
   1159 
   1160   // Delete the remaining (good) base class specifiers, since their
   1161   // data has been copied into the CXXRecordDecl.
   1162   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
   1163     Context.Deallocate(Bases[idx]);
   1164 
   1165   return Invalid;
   1166 }
   1167 
   1168 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
   1169 /// class, after checking whether there are any duplicate base
   1170 /// classes.
   1171 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
   1172                                unsigned NumBases) {
   1173   if (!ClassDecl || !Bases || !NumBases)
   1174     return;
   1175 
   1176   AdjustDeclIfTemplate(ClassDecl);
   1177   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
   1178                        (CXXBaseSpecifier**)(Bases), NumBases);
   1179 }
   1180 
   1181 static CXXRecordDecl *GetClassForType(QualType T) {
   1182   if (const RecordType *RT = T->getAs<RecordType>())
   1183     return cast<CXXRecordDecl>(RT->getDecl());
   1184   else if (const InjectedClassNameType *ICT = T->getAs<InjectedClassNameType>())
   1185     return ICT->getDecl();
   1186   else
   1187     return 0;
   1188 }
   1189 
   1190 /// \brief Determine whether the type \p Derived is a C++ class that is
   1191 /// derived from the type \p Base.
   1192 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
   1193   if (!getLangOptions().CPlusPlus)
   1194     return false;
   1195 
   1196   CXXRecordDecl *DerivedRD = GetClassForType(Derived);
   1197   if (!DerivedRD)
   1198     return false;
   1199 
   1200   CXXRecordDecl *BaseRD = GetClassForType(Base);
   1201   if (!BaseRD)
   1202     return false;
   1203 
   1204   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
   1205   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
   1206 }
   1207 
   1208 /// \brief Determine whether the type \p Derived is a C++ class that is
   1209 /// derived from the type \p Base.
   1210 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
   1211   if (!getLangOptions().CPlusPlus)
   1212     return false;
   1213 
   1214   CXXRecordDecl *DerivedRD = GetClassForType(Derived);
   1215   if (!DerivedRD)
   1216     return false;
   1217 
   1218   CXXRecordDecl *BaseRD = GetClassForType(Base);
   1219   if (!BaseRD)
   1220     return false;
   1221 
   1222   return DerivedRD->isDerivedFrom(BaseRD, Paths);
   1223 }
   1224 
   1225 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
   1226                               CXXCastPath &BasePathArray) {
   1227   assert(BasePathArray.empty() && "Base path array must be empty!");
   1228   assert(Paths.isRecordingPaths() && "Must record paths!");
   1229 
   1230   const CXXBasePath &Path = Paths.front();
   1231 
   1232   // We first go backward and check if we have a virtual base.
   1233   // FIXME: It would be better if CXXBasePath had the base specifier for
   1234   // the nearest virtual base.
   1235   unsigned Start = 0;
   1236   for (unsigned I = Path.size(); I != 0; --I) {
   1237     if (Path[I - 1].Base->isVirtual()) {
   1238       Start = I - 1;
   1239       break;
   1240     }
   1241   }
   1242 
   1243   // Now add all bases.
   1244   for (unsigned I = Start, E = Path.size(); I != E; ++I)
   1245     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
   1246 }
   1247 
   1248 /// \brief Determine whether the given base path includes a virtual
   1249 /// base class.
   1250 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
   1251   for (CXXCastPath::const_iterator B = BasePath.begin(),
   1252                                 BEnd = BasePath.end();
   1253        B != BEnd; ++B)
   1254     if ((*B)->isVirtual())
   1255       return true;
   1256 
   1257   return false;
   1258 }
   1259 
   1260 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
   1261 /// conversion (where Derived and Base are class types) is
   1262 /// well-formed, meaning that the conversion is unambiguous (and
   1263 /// that all of the base classes are accessible). Returns true
   1264 /// and emits a diagnostic if the code is ill-formed, returns false
   1265 /// otherwise. Loc is the location where this routine should point to
   1266 /// if there is an error, and Range is the source range to highlight
   1267 /// if there is an error.
   1268 bool
   1269 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1270                                    unsigned InaccessibleBaseID,
   1271                                    unsigned AmbigiousBaseConvID,
   1272                                    SourceLocation Loc, SourceRange Range,
   1273                                    DeclarationName Name,
   1274                                    CXXCastPath *BasePath) {
   1275   // First, determine whether the path from Derived to Base is
   1276   // ambiguous. This is slightly more expensive than checking whether
   1277   // the Derived to Base conversion exists, because here we need to
   1278   // explore multiple paths to determine if there is an ambiguity.
   1279   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   1280                      /*DetectVirtual=*/false);
   1281   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
   1282   assert(DerivationOkay &&
   1283          "Can only be used with a derived-to-base conversion");
   1284   (void)DerivationOkay;
   1285 
   1286   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
   1287     if (InaccessibleBaseID) {
   1288       // Check that the base class can be accessed.
   1289       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
   1290                                    InaccessibleBaseID)) {
   1291         case AR_inaccessible:
   1292           return true;
   1293         case AR_accessible:
   1294         case AR_dependent:
   1295         case AR_delayed:
   1296           break;
   1297       }
   1298     }
   1299 
   1300     // Build a base path if necessary.
   1301     if (BasePath)
   1302       BuildBasePathArray(Paths, *BasePath);
   1303     return false;
   1304   }
   1305 
   1306   // We know that the derived-to-base conversion is ambiguous, and
   1307   // we're going to produce a diagnostic. Perform the derived-to-base
   1308   // search just one more time to compute all of the possible paths so
   1309   // that we can print them out. This is more expensive than any of
   1310   // the previous derived-to-base checks we've done, but at this point
   1311   // performance isn't as much of an issue.
   1312   Paths.clear();
   1313   Paths.setRecordingPaths(true);
   1314   bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
   1315   assert(StillOkay && "Can only be used with a derived-to-base conversion");
   1316   (void)StillOkay;
   1317 
   1318   // Build up a textual representation of the ambiguous paths, e.g.,
   1319   // D -> B -> A, that will be used to illustrate the ambiguous
   1320   // conversions in the diagnostic. We only print one of the paths
   1321   // to each base class subobject.
   1322   std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
   1323 
   1324   Diag(Loc, AmbigiousBaseConvID)
   1325   << Derived << Base << PathDisplayStr << Range << Name;
   1326   return true;
   1327 }
   1328 
   1329 bool
   1330 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
   1331                                    SourceLocation Loc, SourceRange Range,
   1332                                    CXXCastPath *BasePath,
   1333                                    bool IgnoreAccess) {
   1334   return CheckDerivedToBaseConversion(Derived, Base,
   1335                                       IgnoreAccess ? 0
   1336                                        : diag::err_upcast_to_inaccessible_base,
   1337                                       diag::err_ambiguous_derived_to_base_conv,
   1338                                       Loc, Range, DeclarationName(),
   1339                                       BasePath);
   1340 }
   1341 
   1342 
   1343 /// @brief Builds a string representing ambiguous paths from a
   1344 /// specific derived class to different subobjects of the same base
   1345 /// class.
   1346 ///
   1347 /// This function builds a string that can be used in error messages
   1348 /// to show the different paths that one can take through the
   1349 /// inheritance hierarchy to go from the derived class to different
   1350 /// subobjects of a base class. The result looks something like this:
   1351 /// @code
   1352 /// struct D -> struct B -> struct A
   1353 /// struct D -> struct C -> struct A
   1354 /// @endcode
   1355 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
   1356   std::string PathDisplayStr;
   1357   std::set<unsigned> DisplayedPaths;
   1358   for (CXXBasePaths::paths_iterator Path = Paths.begin();
   1359        Path != Paths.end(); ++Path) {
   1360     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
   1361       // We haven't displayed a path to this particular base
   1362       // class subobject yet.
   1363       PathDisplayStr += "\n    ";
   1364       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
   1365       for (CXXBasePath::const_iterator Element = Path->begin();
   1366            Element != Path->end(); ++Element)
   1367         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
   1368     }
   1369   }
   1370 
   1371   return PathDisplayStr;
   1372 }
   1373 
   1374 //===----------------------------------------------------------------------===//
   1375 // C++ class member Handling
   1376 //===----------------------------------------------------------------------===//
   1377 
   1378 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
   1379 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
   1380                                 SourceLocation ASLoc,
   1381                                 SourceLocation ColonLoc,
   1382                                 AttributeList *Attrs) {
   1383   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
   1384   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
   1385                                                   ASLoc, ColonLoc);
   1386   CurContext->addHiddenDecl(ASDecl);
   1387   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
   1388 }
   1389 
   1390 /// CheckOverrideControl - Check C++0x override control semantics.
   1391 void Sema::CheckOverrideControl(const Decl *D) {
   1392   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
   1393   if (!MD || !MD->isVirtual())
   1394     return;
   1395 
   1396   if (MD->isDependentContext())
   1397     return;
   1398 
   1399   // C++0x [class.virtual]p3:
   1400   //   If a virtual function is marked with the virt-specifier override and does
   1401   //   not override a member function of a base class,
   1402   //   the program is ill-formed.
   1403   bool HasOverriddenMethods =
   1404     MD->begin_overridden_methods() != MD->end_overridden_methods();
   1405   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods) {
   1406     Diag(MD->getLocation(),
   1407                  diag::err_function_marked_override_not_overriding)
   1408       << MD->getDeclName();
   1409     return;
   1410   }
   1411 }
   1412 
   1413 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
   1414 /// function overrides a virtual member function marked 'final', according to
   1415 /// C++0x [class.virtual]p3.
   1416 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
   1417                                                   const CXXMethodDecl *Old) {
   1418   if (!Old->hasAttr<FinalAttr>())
   1419     return false;
   1420 
   1421   Diag(New->getLocation(), diag::err_final_function_overridden)
   1422     << New->getDeclName();
   1423   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   1424   return true;
   1425 }
   1426 
   1427 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
   1428 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
   1429 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
   1430 /// one has been parsed, and 'HasDeferredInit' is true if an initializer is
   1431 /// present but parsing it has been deferred.
   1432 Decl *
   1433 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
   1434                                MultiTemplateParamsArg TemplateParameterLists,
   1435                                Expr *BW, const VirtSpecifiers &VS,
   1436                                bool HasDeferredInit) {
   1437   const DeclSpec &DS = D.getDeclSpec();
   1438   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   1439   DeclarationName Name = NameInfo.getName();
   1440   SourceLocation Loc = NameInfo.getLoc();
   1441 
   1442   // For anonymous bitfields, the location should point to the type.
   1443   if (Loc.isInvalid())
   1444     Loc = D.getSourceRange().getBegin();
   1445 
   1446   Expr *BitWidth = static_cast<Expr*>(BW);
   1447 
   1448   assert(isa<CXXRecordDecl>(CurContext));
   1449   assert(!DS.isFriendSpecified());
   1450 
   1451   bool isFunc = D.isDeclarationOfFunction();
   1452 
   1453   // C++ 9.2p6: A member shall not be declared to have automatic storage
   1454   // duration (auto, register) or with the extern storage-class-specifier.
   1455   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
   1456   // data members and cannot be applied to names declared const or static,
   1457   // and cannot be applied to reference members.
   1458   switch (DS.getStorageClassSpec()) {
   1459     case DeclSpec::SCS_unspecified:
   1460     case DeclSpec::SCS_typedef:
   1461     case DeclSpec::SCS_static:
   1462       // FALL THROUGH.
   1463       break;
   1464     case DeclSpec::SCS_mutable:
   1465       if (isFunc) {
   1466         if (DS.getStorageClassSpecLoc().isValid())
   1467           Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
   1468         else
   1469           Diag(DS.getThreadSpecLoc(), diag::err_mutable_function);
   1470 
   1471         // FIXME: It would be nicer if the keyword was ignored only for this
   1472         // declarator. Otherwise we could get follow-up errors.
   1473         D.getMutableDeclSpec().ClearStorageClassSpecs();
   1474       }
   1475       break;
   1476     default:
   1477       if (DS.getStorageClassSpecLoc().isValid())
   1478         Diag(DS.getStorageClassSpecLoc(),
   1479              diag::err_storageclass_invalid_for_member);
   1480       else
   1481         Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
   1482       D.getMutableDeclSpec().ClearStorageClassSpecs();
   1483   }
   1484 
   1485   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
   1486                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
   1487                       !isFunc);
   1488 
   1489   Decl *Member;
   1490   if (isInstField) {
   1491     CXXScopeSpec &SS = D.getCXXScopeSpec();
   1492 
   1493     // Data members must have identifiers for names.
   1494     if (Name.getNameKind() != DeclarationName::Identifier) {
   1495       Diag(Loc, diag::err_bad_variable_name)
   1496         << Name;
   1497       return 0;
   1498     }
   1499 
   1500     IdentifierInfo *II = Name.getAsIdentifierInfo();
   1501 
   1502     // Member field could not be with "template" keyword.
   1503     // So TemplateParameterLists should be empty in this case.
   1504     if (TemplateParameterLists.size()) {
   1505       TemplateParameterList* TemplateParams = TemplateParameterLists.get()[0];
   1506       if (TemplateParams->size()) {
   1507         // There is no such thing as a member field template.
   1508         Diag(D.getIdentifierLoc(), diag::err_template_member)
   1509             << II
   1510             << SourceRange(TemplateParams->getTemplateLoc(),
   1511                 TemplateParams->getRAngleLoc());
   1512       } else {
   1513         // There is an extraneous 'template<>' for this member.
   1514         Diag(TemplateParams->getTemplateLoc(),
   1515             diag::err_template_member_noparams)
   1516             << II
   1517             << SourceRange(TemplateParams->getTemplateLoc(),
   1518                 TemplateParams->getRAngleLoc());
   1519       }
   1520       return 0;
   1521     }
   1522 
   1523     if (SS.isSet() && !SS.isInvalid()) {
   1524       // The user provided a superfluous scope specifier inside a class
   1525       // definition:
   1526       //
   1527       // class X {
   1528       //   int X::member;
   1529       // };
   1530       DeclContext *DC = 0;
   1531       if ((DC = computeDeclContext(SS, false)) && DC->Equals(CurContext))
   1532         Diag(D.getIdentifierLoc(), diag::warn_member_extra_qualification)
   1533         << Name << FixItHint::CreateRemoval(SS.getRange());
   1534       else
   1535         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
   1536           << Name << SS.getRange();
   1537 
   1538       SS.clear();
   1539     }
   1540 
   1541     Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth,
   1542                          HasDeferredInit, AS);
   1543     assert(Member && "HandleField never returns null");
   1544   } else {
   1545     assert(!HasDeferredInit);
   1546 
   1547     Member = HandleDeclarator(S, D, move(TemplateParameterLists));
   1548     if (!Member) {
   1549       return 0;
   1550     }
   1551 
   1552     // Non-instance-fields can't have a bitfield.
   1553     if (BitWidth) {
   1554       if (Member->isInvalidDecl()) {
   1555         // don't emit another diagnostic.
   1556       } else if (isa<VarDecl>(Member)) {
   1557         // C++ 9.6p3: A bit-field shall not be a static member.
   1558         // "static member 'A' cannot be a bit-field"
   1559         Diag(Loc, diag::err_static_not_bitfield)
   1560           << Name << BitWidth->getSourceRange();
   1561       } else if (isa<TypedefDecl>(Member)) {
   1562         // "typedef member 'x' cannot be a bit-field"
   1563         Diag(Loc, diag::err_typedef_not_bitfield)
   1564           << Name << BitWidth->getSourceRange();
   1565       } else {
   1566         // A function typedef ("typedef int f(); f a;").
   1567         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
   1568         Diag(Loc, diag::err_not_integral_type_bitfield)
   1569           << Name << cast<ValueDecl>(Member)->getType()
   1570           << BitWidth->getSourceRange();
   1571       }
   1572 
   1573       BitWidth = 0;
   1574       Member->setInvalidDecl();
   1575     }
   1576 
   1577     Member->setAccess(AS);
   1578 
   1579     // If we have declared a member function template, set the access of the
   1580     // templated declaration as well.
   1581     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
   1582       FunTmpl->getTemplatedDecl()->setAccess(AS);
   1583   }
   1584 
   1585   if (VS.isOverrideSpecified()) {
   1586     CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
   1587     if (!MD || !MD->isVirtual()) {
   1588       Diag(Member->getLocStart(),
   1589            diag::override_keyword_only_allowed_on_virtual_member_functions)
   1590         << "override" << FixItHint::CreateRemoval(VS.getOverrideLoc());
   1591     } else
   1592       MD->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
   1593   }
   1594   if (VS.isFinalSpecified()) {
   1595     CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
   1596     if (!MD || !MD->isVirtual()) {
   1597       Diag(Member->getLocStart(),
   1598            diag::override_keyword_only_allowed_on_virtual_member_functions)
   1599       << "final" << FixItHint::CreateRemoval(VS.getFinalLoc());
   1600     } else
   1601       MD->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
   1602   }
   1603 
   1604   if (VS.getLastLocation().isValid()) {
   1605     // Update the end location of a method that has a virt-specifiers.
   1606     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
   1607       MD->setRangeEnd(VS.getLastLocation());
   1608   }
   1609 
   1610   CheckOverrideControl(Member);
   1611 
   1612   assert((Name || isInstField) && "No identifier for non-field ?");
   1613 
   1614   if (isInstField)
   1615     FieldCollector->Add(cast<FieldDecl>(Member));
   1616   return Member;
   1617 }
   1618 
   1619 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
   1620 /// in-class initializer for a non-static C++ class member, and after
   1621 /// instantiating an in-class initializer in a class template. Such actions
   1622 /// are deferred until the class is complete.
   1623 void
   1624 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation EqualLoc,
   1625                                        Expr *InitExpr) {
   1626   FieldDecl *FD = cast<FieldDecl>(D);
   1627 
   1628   if (!InitExpr) {
   1629     FD->setInvalidDecl();
   1630     FD->removeInClassInitializer();
   1631     return;
   1632   }
   1633 
   1634   ExprResult Init = InitExpr;
   1635   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
   1636     // FIXME: if there is no EqualLoc, this is list-initialization.
   1637     Init = PerformCopyInitialization(
   1638       InitializedEntity::InitializeMember(FD), EqualLoc, InitExpr);
   1639     if (Init.isInvalid()) {
   1640       FD->setInvalidDecl();
   1641       return;
   1642     }
   1643 
   1644     CheckImplicitConversions(Init.get(), EqualLoc);
   1645   }
   1646 
   1647   // C++0x [class.base.init]p7:
   1648   //   The initialization of each base and member constitutes a
   1649   //   full-expression.
   1650   Init = MaybeCreateExprWithCleanups(Init);
   1651   if (Init.isInvalid()) {
   1652     FD->setInvalidDecl();
   1653     return;
   1654   }
   1655 
   1656   InitExpr = Init.release();
   1657 
   1658   FD->setInClassInitializer(InitExpr);
   1659 }
   1660 
   1661 /// \brief Find the direct and/or virtual base specifiers that
   1662 /// correspond to the given base type, for use in base initialization
   1663 /// within a constructor.
   1664 static bool FindBaseInitializer(Sema &SemaRef,
   1665                                 CXXRecordDecl *ClassDecl,
   1666                                 QualType BaseType,
   1667                                 const CXXBaseSpecifier *&DirectBaseSpec,
   1668                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
   1669   // First, check for a direct base class.
   1670   DirectBaseSpec = 0;
   1671   for (CXXRecordDecl::base_class_const_iterator Base
   1672          = ClassDecl->bases_begin();
   1673        Base != ClassDecl->bases_end(); ++Base) {
   1674     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
   1675       // We found a direct base of this type. That's what we're
   1676       // initializing.
   1677       DirectBaseSpec = &*Base;
   1678       break;
   1679     }
   1680   }
   1681 
   1682   // Check for a virtual base class.
   1683   // FIXME: We might be able to short-circuit this if we know in advance that
   1684   // there are no virtual bases.
   1685   VirtualBaseSpec = 0;
   1686   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
   1687     // We haven't found a base yet; search the class hierarchy for a
   1688     // virtual base class.
   1689     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   1690                        /*DetectVirtual=*/false);
   1691     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
   1692                               BaseType, Paths)) {
   1693       for (CXXBasePaths::paths_iterator Path = Paths.begin();
   1694            Path != Paths.end(); ++Path) {
   1695         if (Path->back().Base->isVirtual()) {
   1696           VirtualBaseSpec = Path->back().Base;
   1697           break;
   1698         }
   1699       }
   1700     }
   1701   }
   1702 
   1703   return DirectBaseSpec || VirtualBaseSpec;
   1704 }
   1705 
   1706 /// \brief Handle a C++ member initializer using braced-init-list syntax.
   1707 MemInitResult
   1708 Sema::ActOnMemInitializer(Decl *ConstructorD,
   1709                           Scope *S,
   1710                           CXXScopeSpec &SS,
   1711                           IdentifierInfo *MemberOrBase,
   1712                           ParsedType TemplateTypeTy,
   1713                           SourceLocation IdLoc,
   1714                           Expr *InitList,
   1715                           SourceLocation EllipsisLoc) {
   1716   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   1717                              IdLoc, MultiInitializer(InitList), EllipsisLoc);
   1718 }
   1719 
   1720 /// \brief Handle a C++ member initializer using parentheses syntax.
   1721 MemInitResult
   1722 Sema::ActOnMemInitializer(Decl *ConstructorD,
   1723                           Scope *S,
   1724                           CXXScopeSpec &SS,
   1725                           IdentifierInfo *MemberOrBase,
   1726                           ParsedType TemplateTypeTy,
   1727                           SourceLocation IdLoc,
   1728                           SourceLocation LParenLoc,
   1729                           Expr **Args, unsigned NumArgs,
   1730                           SourceLocation RParenLoc,
   1731                           SourceLocation EllipsisLoc) {
   1732   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
   1733                              IdLoc, MultiInitializer(LParenLoc, Args, NumArgs,
   1734                                                      RParenLoc),
   1735                              EllipsisLoc);
   1736 }
   1737 
   1738 /// \brief Handle a C++ member initializer.
   1739 MemInitResult
   1740 Sema::BuildMemInitializer(Decl *ConstructorD,
   1741                           Scope *S,
   1742                           CXXScopeSpec &SS,
   1743                           IdentifierInfo *MemberOrBase,
   1744                           ParsedType TemplateTypeTy,
   1745                           SourceLocation IdLoc,
   1746                           const MultiInitializer &Args,
   1747                           SourceLocation EllipsisLoc) {
   1748   if (!ConstructorD)
   1749     return true;
   1750 
   1751   AdjustDeclIfTemplate(ConstructorD);
   1752 
   1753   CXXConstructorDecl *Constructor
   1754     = dyn_cast<CXXConstructorDecl>(ConstructorD);
   1755   if (!Constructor) {
   1756     // The user wrote a constructor initializer on a function that is
   1757     // not a C++ constructor. Ignore the error for now, because we may
   1758     // have more member initializers coming; we'll diagnose it just
   1759     // once in ActOnMemInitializers.
   1760     return true;
   1761   }
   1762 
   1763   CXXRecordDecl *ClassDecl = Constructor->getParent();
   1764 
   1765   // C++ [class.base.init]p2:
   1766   //   Names in a mem-initializer-id are looked up in the scope of the
   1767   //   constructor's class and, if not found in that scope, are looked
   1768   //   up in the scope containing the constructor's definition.
   1769   //   [Note: if the constructor's class contains a member with the
   1770   //   same name as a direct or virtual base class of the class, a
   1771   //   mem-initializer-id naming the member or base class and composed
   1772   //   of a single identifier refers to the class member. A
   1773   //   mem-initializer-id for the hidden base class may be specified
   1774   //   using a qualified name. ]
   1775   if (!SS.getScopeRep() && !TemplateTypeTy) {
   1776     // Look for a member, first.
   1777     FieldDecl *Member = 0;
   1778     DeclContext::lookup_result Result
   1779       = ClassDecl->lookup(MemberOrBase);
   1780     if (Result.first != Result.second) {
   1781       Member = dyn_cast<FieldDecl>(*Result.first);
   1782 
   1783       if (Member) {
   1784         if (EllipsisLoc.isValid())
   1785           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
   1786             << MemberOrBase << SourceRange(IdLoc, Args.getEndLoc());
   1787 
   1788         return BuildMemberInitializer(Member, Args, IdLoc);
   1789       }
   1790 
   1791       // Handle anonymous union case.
   1792       if (IndirectFieldDecl* IndirectField
   1793             = dyn_cast<IndirectFieldDecl>(*Result.first)) {
   1794         if (EllipsisLoc.isValid())
   1795           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
   1796             << MemberOrBase << SourceRange(IdLoc, Args.getEndLoc());
   1797 
   1798          return BuildMemberInitializer(IndirectField, Args, IdLoc);
   1799       }
   1800     }
   1801   }
   1802   // It didn't name a member, so see if it names a class.
   1803   QualType BaseType;
   1804   TypeSourceInfo *TInfo = 0;
   1805 
   1806   if (TemplateTypeTy) {
   1807     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
   1808   } else {
   1809     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
   1810     LookupParsedName(R, S, &SS);
   1811 
   1812     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
   1813     if (!TyD) {
   1814       if (R.isAmbiguous()) return true;
   1815 
   1816       // We don't want access-control diagnostics here.
   1817       R.suppressDiagnostics();
   1818 
   1819       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
   1820         bool NotUnknownSpecialization = false;
   1821         DeclContext *DC = computeDeclContext(SS, false);
   1822         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
   1823           NotUnknownSpecialization = !Record->hasAnyDependentBases();
   1824 
   1825         if (!NotUnknownSpecialization) {
   1826           // When the scope specifier can refer to a member of an unknown
   1827           // specialization, we take it as a type name.
   1828           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
   1829                                        SS.getWithLocInContext(Context),
   1830                                        *MemberOrBase, IdLoc);
   1831           if (BaseType.isNull())
   1832             return true;
   1833 
   1834           R.clear();
   1835           R.setLookupName(MemberOrBase);
   1836         }
   1837       }
   1838 
   1839       // If no results were found, try to correct typos.
   1840       TypoCorrection Corr;
   1841       if (R.empty() && BaseType.isNull() &&
   1842           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
   1843                               ClassDecl, false, CTC_NoKeywords))) {
   1844         std::string CorrectedStr(Corr.getAsString(getLangOptions()));
   1845         std::string CorrectedQuotedStr(Corr.getQuoted(getLangOptions()));
   1846         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
   1847           if (Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl)) {
   1848             // We have found a non-static data member with a similar
   1849             // name to what was typed; complain and initialize that
   1850             // member.
   1851             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   1852               << MemberOrBase << true << CorrectedQuotedStr
   1853               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   1854             Diag(Member->getLocation(), diag::note_previous_decl)
   1855               << CorrectedQuotedStr;
   1856 
   1857             return BuildMemberInitializer(Member, Args, IdLoc);
   1858           }
   1859         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
   1860           const CXXBaseSpecifier *DirectBaseSpec;
   1861           const CXXBaseSpecifier *VirtualBaseSpec;
   1862           if (FindBaseInitializer(*this, ClassDecl,
   1863                                   Context.getTypeDeclType(Type),
   1864                                   DirectBaseSpec, VirtualBaseSpec)) {
   1865             // We have found a direct or virtual base class with a
   1866             // similar name to what was typed; complain and initialize
   1867             // that base class.
   1868             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
   1869               << MemberOrBase << false << CorrectedQuotedStr
   1870               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
   1871 
   1872             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
   1873                                                              : VirtualBaseSpec;
   1874             Diag(BaseSpec->getSourceRange().getBegin(),
   1875                  diag::note_base_class_specified_here)
   1876               << BaseSpec->getType()
   1877               << BaseSpec->getSourceRange();
   1878 
   1879             TyD = Type;
   1880           }
   1881         }
   1882       }
   1883 
   1884       if (!TyD && BaseType.isNull()) {
   1885         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
   1886           << MemberOrBase << SourceRange(IdLoc, Args.getEndLoc());
   1887         return true;
   1888       }
   1889     }
   1890 
   1891     if (BaseType.isNull()) {
   1892       BaseType = Context.getTypeDeclType(TyD);
   1893       if (SS.isSet()) {
   1894         NestedNameSpecifier *Qualifier =
   1895           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   1896 
   1897         // FIXME: preserve source range information
   1898         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
   1899       }
   1900     }
   1901   }
   1902 
   1903   if (!TInfo)
   1904     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
   1905 
   1906   return BuildBaseInitializer(BaseType, TInfo, Args, ClassDecl, EllipsisLoc);
   1907 }
   1908 
   1909 /// Checks a member initializer expression for cases where reference (or
   1910 /// pointer) members are bound to by-value parameters (or their addresses).
   1911 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
   1912                                                Expr *Init,
   1913                                                SourceLocation IdLoc) {
   1914   QualType MemberTy = Member->getType();
   1915 
   1916   // We only handle pointers and references currently.
   1917   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
   1918   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
   1919     return;
   1920 
   1921   const bool IsPointer = MemberTy->isPointerType();
   1922   if (IsPointer) {
   1923     if (const UnaryOperator *Op
   1924           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
   1925       // The only case we're worried about with pointers requires taking the
   1926       // address.
   1927       if (Op->getOpcode() != UO_AddrOf)
   1928         return;
   1929 
   1930       Init = Op->getSubExpr();
   1931     } else {
   1932       // We only handle address-of expression initializers for pointers.
   1933       return;
   1934     }
   1935   }
   1936 
   1937   if (isa<MaterializeTemporaryExpr>(Init->IgnoreParens())) {
   1938     // Taking the address of a temporary will be diagnosed as a hard error.
   1939     if (IsPointer)
   1940       return;
   1941 
   1942     S.Diag(Init->getExprLoc(), diag::warn_bind_ref_member_to_temporary)
   1943       << Member << Init->getSourceRange();
   1944   } else if (const DeclRefExpr *DRE
   1945                = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
   1946     // We only warn when referring to a non-reference parameter declaration.
   1947     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
   1948     if (!Parameter || Parameter->getType()->isReferenceType())
   1949       return;
   1950 
   1951     S.Diag(Init->getExprLoc(),
   1952            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
   1953                      : diag::warn_bind_ref_member_to_parameter)
   1954       << Member << Parameter << Init->getSourceRange();
   1955   } else {
   1956     // Other initializers are fine.
   1957     return;
   1958   }
   1959 
   1960   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
   1961     << (unsigned)IsPointer;
   1962 }
   1963 
   1964 /// Checks an initializer expression for use of uninitialized fields, such as
   1965 /// containing the field that is being initialized. Returns true if there is an
   1966 /// uninitialized field was used an updates the SourceLocation parameter; false
   1967 /// otherwise.
   1968 static bool InitExprContainsUninitializedFields(const Stmt *S,
   1969                                                 const ValueDecl *LhsField,
   1970                                                 SourceLocation *L) {
   1971   assert(isa<FieldDecl>(LhsField) || isa<IndirectFieldDecl>(LhsField));
   1972 
   1973   if (isa<CallExpr>(S)) {
   1974     // Do not descend into function calls or constructors, as the use
   1975     // of an uninitialized field may be valid. One would have to inspect
   1976     // the contents of the function/ctor to determine if it is safe or not.
   1977     // i.e. Pass-by-value is never safe, but pass-by-reference and pointers
   1978     // may be safe, depending on what the function/ctor does.
   1979     return false;
   1980   }
   1981   if (const MemberExpr *ME = dyn_cast<MemberExpr>(S)) {
   1982     const NamedDecl *RhsField = ME->getMemberDecl();
   1983 
   1984     if (const VarDecl *VD = dyn_cast<VarDecl>(RhsField)) {
   1985       // The member expression points to a static data member.
   1986       assert(VD->isStaticDataMember() &&
   1987              "Member points to non-static data member!");
   1988       (void)VD;
   1989       return false;
   1990     }
   1991 
   1992     if (isa<EnumConstantDecl>(RhsField)) {
   1993       // The member expression points to an enum.
   1994       return false;
   1995     }
   1996 
   1997     if (RhsField == LhsField) {
   1998       // Initializing a field with itself. Throw a warning.
   1999       // But wait; there are exceptions!
   2000       // Exception #1:  The field may not belong to this record.
   2001       // e.g. Foo(const Foo& rhs) : A(rhs.A) {}
   2002       const Expr *base = ME->getBase();
   2003       if (base != NULL && !isa<CXXThisExpr>(base->IgnoreParenCasts())) {
   2004         // Even though the field matches, it does not belong to this record.
   2005         return false;
   2006       }
   2007       // None of the exceptions triggered; return true to indicate an
   2008       // uninitialized field was used.
   2009       *L = ME->getMemberLoc();
   2010       return true;
   2011     }
   2012   } else if (isa<UnaryExprOrTypeTraitExpr>(S)) {
   2013     // sizeof/alignof doesn't reference contents, do not warn.
   2014     return false;
   2015   } else if (const UnaryOperator *UOE = dyn_cast<UnaryOperator>(S)) {
   2016     // address-of doesn't reference contents (the pointer may be dereferenced
   2017     // in the same expression but it would be rare; and weird).
   2018     if (UOE->getOpcode() == UO_AddrOf)
   2019       return false;
   2020   }
   2021   for (Stmt::const_child_range it = S->children(); it; ++it) {
   2022     if (!*it) {
   2023       // An expression such as 'member(arg ?: "")' may trigger this.
   2024       continue;
   2025     }
   2026     if (InitExprContainsUninitializedFields(*it, LhsField, L))
   2027       return true;
   2028   }
   2029   return false;
   2030 }
   2031 
   2032 MemInitResult
   2033 Sema::BuildMemberInitializer(ValueDecl *Member,
   2034                              const MultiInitializer &Args,
   2035                              SourceLocation IdLoc) {
   2036   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
   2037   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
   2038   assert((DirectMember || IndirectMember) &&
   2039          "Member must be a FieldDecl or IndirectFieldDecl");
   2040 
   2041   if (Member->isInvalidDecl())
   2042     return true;
   2043 
   2044   // Diagnose value-uses of fields to initialize themselves, e.g.
   2045   //   foo(foo)
   2046   // where foo is not also a parameter to the constructor.
   2047   // TODO: implement -Wuninitialized and fold this into that framework.
   2048   for (MultiInitializer::iterator I = Args.begin(), E = Args.end();
   2049        I != E; ++I) {
   2050     SourceLocation L;
   2051     Expr *Arg = *I;
   2052     if (DesignatedInitExpr *DIE = dyn_cast<DesignatedInitExpr>(Arg))
   2053       Arg = DIE->getInit();
   2054     if (InitExprContainsUninitializedFields(Arg, Member, &L)) {
   2055       // FIXME: Return true in the case when other fields are used before being
   2056       // uninitialized. For example, let this field be the i'th field. When
   2057       // initializing the i'th field, throw a warning if any of the >= i'th
   2058       // fields are used, as they are not yet initialized.
   2059       // Right now we are only handling the case where the i'th field uses
   2060       // itself in its initializer.
   2061       Diag(L, diag::warn_field_is_uninit);
   2062     }
   2063   }
   2064 
   2065   bool HasDependentArg = Args.isTypeDependent();
   2066 
   2067   Expr *Init;
   2068   if (Member->getType()->isDependentType() || HasDependentArg) {
   2069     // Can't check initialization for a member of dependent type or when
   2070     // any of the arguments are type-dependent expressions.
   2071     Init = Args.CreateInitExpr(Context,Member->getType().getNonReferenceType());
   2072 
   2073     DiscardCleanupsInEvaluationContext();
   2074   } else {
   2075     // Initialize the member.
   2076     InitializedEntity MemberEntity =
   2077       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
   2078                    : InitializedEntity::InitializeMember(IndirectMember, 0);
   2079     InitializationKind Kind =
   2080       InitializationKind::CreateDirect(IdLoc, Args.getStartLoc(),
   2081                                        Args.getEndLoc());
   2082 
   2083     ExprResult MemberInit = Args.PerformInit(*this, MemberEntity, Kind);
   2084     if (MemberInit.isInvalid())
   2085       return true;
   2086 
   2087     CheckImplicitConversions(MemberInit.get(), Args.getStartLoc());
   2088 
   2089     // C++0x [class.base.init]p7:
   2090     //   The initialization of each base and member constitutes a
   2091     //   full-expression.
   2092     MemberInit = MaybeCreateExprWithCleanups(MemberInit);
   2093     if (MemberInit.isInvalid())
   2094       return true;
   2095 
   2096     // If we are in a dependent context, template instantiation will
   2097     // perform this type-checking again. Just save the arguments that we
   2098     // received in a ParenListExpr.
   2099     // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2100     // of the information that we have about the member
   2101     // initializer. However, deconstructing the ASTs is a dicey process,
   2102     // and this approach is far more likely to get the corner cases right.
   2103     if (CurContext->isDependentContext()) {
   2104       Init = Args.CreateInitExpr(Context,
   2105                                  Member->getType().getNonReferenceType());
   2106     } else {
   2107       Init = MemberInit.get();
   2108       CheckForDanglingReferenceOrPointer(*this, Member, Init, IdLoc);
   2109     }
   2110   }
   2111 
   2112   if (DirectMember) {
   2113     return new (Context) CXXCtorInitializer(Context, DirectMember,
   2114                                                     IdLoc, Args.getStartLoc(),
   2115                                                     Init, Args.getEndLoc());
   2116   } else {
   2117     return new (Context) CXXCtorInitializer(Context, IndirectMember,
   2118                                                     IdLoc, Args.getStartLoc(),
   2119                                                     Init, Args.getEndLoc());
   2120   }
   2121 }
   2122 
   2123 MemInitResult
   2124 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo,
   2125                                  const MultiInitializer &Args,
   2126                                  SourceLocation NameLoc,
   2127                                  CXXRecordDecl *ClassDecl) {
   2128   SourceLocation Loc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2129   if (!LangOpts.CPlusPlus0x)
   2130     return Diag(Loc, diag::err_delegating_ctor)
   2131       << TInfo->getTypeLoc().getLocalSourceRange();
   2132   Diag(Loc, diag::warn_cxx98_compat_delegating_ctor);
   2133 
   2134   // Initialize the object.
   2135   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
   2136                                      QualType(ClassDecl->getTypeForDecl(), 0));
   2137   InitializationKind Kind =
   2138     InitializationKind::CreateDirect(NameLoc, Args.getStartLoc(),
   2139                                      Args.getEndLoc());
   2140 
   2141   ExprResult DelegationInit = Args.PerformInit(*this, DelegationEntity, Kind);
   2142   if (DelegationInit.isInvalid())
   2143     return true;
   2144 
   2145   CXXConstructExpr *ConExpr = cast<CXXConstructExpr>(DelegationInit.get());
   2146   CXXConstructorDecl *Constructor
   2147     = ConExpr->getConstructor();
   2148   assert(Constructor && "Delegating constructor with no target?");
   2149 
   2150   CheckImplicitConversions(DelegationInit.get(), Args.getStartLoc());
   2151 
   2152   // C++0x [class.base.init]p7:
   2153   //   The initialization of each base and member constitutes a
   2154   //   full-expression.
   2155   DelegationInit = MaybeCreateExprWithCleanups(DelegationInit);
   2156   if (DelegationInit.isInvalid())
   2157     return true;
   2158 
   2159   assert(!CurContext->isDependentContext());
   2160   return new (Context) CXXCtorInitializer(Context, Loc, Args.getStartLoc(),
   2161                                           Constructor,
   2162                                           DelegationInit.takeAs<Expr>(),
   2163                                           Args.getEndLoc());
   2164 }
   2165 
   2166 MemInitResult
   2167 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
   2168                            const MultiInitializer &Args,
   2169                            CXXRecordDecl *ClassDecl,
   2170                            SourceLocation EllipsisLoc) {
   2171   bool HasDependentArg = Args.isTypeDependent();
   2172 
   2173   SourceLocation BaseLoc
   2174     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
   2175 
   2176   if (!BaseType->isDependentType() && !BaseType->isRecordType())
   2177     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
   2178              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2179 
   2180   // C++ [class.base.init]p2:
   2181   //   [...] Unless the mem-initializer-id names a nonstatic data
   2182   //   member of the constructor's class or a direct or virtual base
   2183   //   of that class, the mem-initializer is ill-formed. A
   2184   //   mem-initializer-list can initialize a base class using any
   2185   //   name that denotes that base class type.
   2186   bool Dependent = BaseType->isDependentType() || HasDependentArg;
   2187 
   2188   if (EllipsisLoc.isValid()) {
   2189     // This is a pack expansion.
   2190     if (!BaseType->containsUnexpandedParameterPack())  {
   2191       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
   2192         << SourceRange(BaseLoc, Args.getEndLoc());
   2193 
   2194       EllipsisLoc = SourceLocation();
   2195     }
   2196   } else {
   2197     // Check for any unexpanded parameter packs.
   2198     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
   2199       return true;
   2200 
   2201     if (Args.DiagnoseUnexpandedParameterPack(*this))
   2202       return true;
   2203   }
   2204 
   2205   // Check for direct and virtual base classes.
   2206   const CXXBaseSpecifier *DirectBaseSpec = 0;
   2207   const CXXBaseSpecifier *VirtualBaseSpec = 0;
   2208   if (!Dependent) {
   2209     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
   2210                                        BaseType))
   2211       return BuildDelegatingInitializer(BaseTInfo, Args, BaseLoc, ClassDecl);
   2212 
   2213     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
   2214                         VirtualBaseSpec);
   2215 
   2216     // C++ [base.class.init]p2:
   2217     // Unless the mem-initializer-id names a nonstatic data member of the
   2218     // constructor's class or a direct or virtual base of that class, the
   2219     // mem-initializer is ill-formed.
   2220     if (!DirectBaseSpec && !VirtualBaseSpec) {
   2221       // If the class has any dependent bases, then it's possible that
   2222       // one of those types will resolve to the same type as
   2223       // BaseType. Therefore, just treat this as a dependent base
   2224       // class initialization.  FIXME: Should we try to check the
   2225       // initialization anyway? It seems odd.
   2226       if (ClassDecl->hasAnyDependentBases())
   2227         Dependent = true;
   2228       else
   2229         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
   2230           << BaseType << Context.getTypeDeclType(ClassDecl)
   2231           << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2232     }
   2233   }
   2234 
   2235   if (Dependent) {
   2236     // Can't check initialization for a base of dependent type or when
   2237     // any of the arguments are type-dependent expressions.
   2238     Expr *BaseInit = Args.CreateInitExpr(Context, BaseType);
   2239 
   2240     DiscardCleanupsInEvaluationContext();
   2241 
   2242     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2243                                             /*IsVirtual=*/false,
   2244                                             Args.getStartLoc(), BaseInit,
   2245                                             Args.getEndLoc(), EllipsisLoc);
   2246   }
   2247 
   2248   // C++ [base.class.init]p2:
   2249   //   If a mem-initializer-id is ambiguous because it designates both
   2250   //   a direct non-virtual base class and an inherited virtual base
   2251   //   class, the mem-initializer is ill-formed.
   2252   if (DirectBaseSpec && VirtualBaseSpec)
   2253     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
   2254       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
   2255 
   2256   CXXBaseSpecifier *BaseSpec
   2257     = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
   2258   if (!BaseSpec)
   2259     BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
   2260 
   2261   // Initialize the base.
   2262   InitializedEntity BaseEntity =
   2263     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
   2264   InitializationKind Kind =
   2265     InitializationKind::CreateDirect(BaseLoc, Args.getStartLoc(),
   2266                                      Args.getEndLoc());
   2267 
   2268   ExprResult BaseInit = Args.PerformInit(*this, BaseEntity, Kind);
   2269   if (BaseInit.isInvalid())
   2270     return true;
   2271 
   2272   CheckImplicitConversions(BaseInit.get(), Args.getStartLoc());
   2273 
   2274   // C++0x [class.base.init]p7:
   2275   //   The initialization of each base and member constitutes a
   2276   //   full-expression.
   2277   BaseInit = MaybeCreateExprWithCleanups(BaseInit);
   2278   if (BaseInit.isInvalid())
   2279     return true;
   2280 
   2281   // If we are in a dependent context, template instantiation will
   2282   // perform this type-checking again. Just save the arguments that we
   2283   // received in a ParenListExpr.
   2284   // FIXME: This isn't quite ideal, since our ASTs don't capture all
   2285   // of the information that we have about the base
   2286   // initializer. However, deconstructing the ASTs is a dicey process,
   2287   // and this approach is far more likely to get the corner cases right.
   2288   if (CurContext->isDependentContext())
   2289     BaseInit = Owned(Args.CreateInitExpr(Context, BaseType));
   2290 
   2291   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
   2292                                           BaseSpec->isVirtual(),
   2293                                           Args.getStartLoc(),
   2294                                           BaseInit.takeAs<Expr>(),
   2295                                           Args.getEndLoc(), EllipsisLoc);
   2296 }
   2297 
   2298 // Create a static_cast\<T&&>(expr).
   2299 static Expr *CastForMoving(Sema &SemaRef, Expr *E) {
   2300   QualType ExprType = E->getType();
   2301   QualType TargetType = SemaRef.Context.getRValueReferenceType(ExprType);
   2302   SourceLocation ExprLoc = E->getLocStart();
   2303   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
   2304       TargetType, ExprLoc);
   2305 
   2306   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
   2307                                    SourceRange(ExprLoc, ExprLoc),
   2308                                    E->getSourceRange()).take();
   2309 }
   2310 
   2311 /// ImplicitInitializerKind - How an implicit base or member initializer should
   2312 /// initialize its base or member.
   2313 enum ImplicitInitializerKind {
   2314   IIK_Default,
   2315   IIK_Copy,
   2316   IIK_Move
   2317 };
   2318 
   2319 static bool
   2320 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2321                              ImplicitInitializerKind ImplicitInitKind,
   2322                              CXXBaseSpecifier *BaseSpec,
   2323                              bool IsInheritedVirtualBase,
   2324                              CXXCtorInitializer *&CXXBaseInit) {
   2325   InitializedEntity InitEntity
   2326     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
   2327                                         IsInheritedVirtualBase);
   2328 
   2329   ExprResult BaseInit;
   2330 
   2331   switch (ImplicitInitKind) {
   2332   case IIK_Default: {
   2333     InitializationKind InitKind
   2334       = InitializationKind::CreateDefault(Constructor->getLocation());
   2335     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
   2336     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
   2337                                MultiExprArg(SemaRef, 0, 0));
   2338     break;
   2339   }
   2340 
   2341   case IIK_Move:
   2342   case IIK_Copy: {
   2343     bool Moving = ImplicitInitKind == IIK_Move;
   2344     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2345     QualType ParamType = Param->getType().getNonReferenceType();
   2346 
   2347     Expr *CopyCtorArg =
   2348       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), Param,
   2349                           Constructor->getLocation(), ParamType,
   2350                           VK_LValue, 0);
   2351 
   2352     // Cast to the base class to avoid ambiguities.
   2353     QualType ArgTy =
   2354       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
   2355                                        ParamType.getQualifiers());
   2356 
   2357     if (Moving) {
   2358       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
   2359     }
   2360 
   2361     CXXCastPath BasePath;
   2362     BasePath.push_back(BaseSpec);
   2363     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
   2364                                             CK_UncheckedDerivedToBase,
   2365                                             Moving ? VK_XValue : VK_LValue,
   2366                                             &BasePath).take();
   2367 
   2368     InitializationKind InitKind
   2369       = InitializationKind::CreateDirect(Constructor->getLocation(),
   2370                                          SourceLocation(), SourceLocation());
   2371     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind,
   2372                                    &CopyCtorArg, 1);
   2373     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
   2374                                MultiExprArg(&CopyCtorArg, 1));
   2375     break;
   2376   }
   2377   }
   2378 
   2379   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
   2380   if (BaseInit.isInvalid())
   2381     return true;
   2382 
   2383   CXXBaseInit =
   2384     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2385                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
   2386                                                         SourceLocation()),
   2387                                              BaseSpec->isVirtual(),
   2388                                              SourceLocation(),
   2389                                              BaseInit.takeAs<Expr>(),
   2390                                              SourceLocation(),
   2391                                              SourceLocation());
   2392 
   2393   return false;
   2394 }
   2395 
   2396 static bool RefersToRValueRef(Expr *MemRef) {
   2397   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
   2398   return Referenced->getType()->isRValueReferenceType();
   2399 }
   2400 
   2401 static bool
   2402 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
   2403                                ImplicitInitializerKind ImplicitInitKind,
   2404                                FieldDecl *Field, IndirectFieldDecl *Indirect,
   2405                                CXXCtorInitializer *&CXXMemberInit) {
   2406   if (Field->isInvalidDecl())
   2407     return true;
   2408 
   2409   SourceLocation Loc = Constructor->getLocation();
   2410 
   2411   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
   2412     bool Moving = ImplicitInitKind == IIK_Move;
   2413     ParmVarDecl *Param = Constructor->getParamDecl(0);
   2414     QualType ParamType = Param->getType().getNonReferenceType();
   2415 
   2416     // Suppress copying zero-width bitfields.
   2417     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
   2418       return false;
   2419 
   2420     Expr *MemberExprBase =
   2421       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), Param,
   2422                           Loc, ParamType, VK_LValue, 0);
   2423 
   2424     if (Moving) {
   2425       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
   2426     }
   2427 
   2428     // Build a reference to this field within the parameter.
   2429     CXXScopeSpec SS;
   2430     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
   2431                               Sema::LookupMemberName);
   2432     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
   2433                                   : cast<ValueDecl>(Field), AS_public);
   2434     MemberLookup.resolveKind();
   2435     ExprResult CtorArg
   2436       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
   2437                                          ParamType, Loc,
   2438                                          /*IsArrow=*/false,
   2439                                          SS,
   2440                                          /*FirstQualifierInScope=*/0,
   2441                                          MemberLookup,
   2442                                          /*TemplateArgs=*/0);
   2443     if (CtorArg.isInvalid())
   2444       return true;
   2445 
   2446     // C++11 [class.copy]p15:
   2447     //   - if a member m has rvalue reference type T&&, it is direct-initialized
   2448     //     with static_cast<T&&>(x.m);
   2449     if (RefersToRValueRef(CtorArg.get())) {
   2450       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   2451     }
   2452 
   2453     // When the field we are copying is an array, create index variables for
   2454     // each dimension of the array. We use these index variables to subscript
   2455     // the source array, and other clients (e.g., CodeGen) will perform the
   2456     // necessary iteration with these index variables.
   2457     SmallVector<VarDecl *, 4> IndexVariables;
   2458     QualType BaseType = Field->getType();
   2459     QualType SizeType = SemaRef.Context.getSizeType();
   2460     bool InitializingArray = false;
   2461     while (const ConstantArrayType *Array
   2462                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
   2463       InitializingArray = true;
   2464       // Create the iteration variable for this array index.
   2465       IdentifierInfo *IterationVarName = 0;
   2466       {
   2467         llvm::SmallString<8> Str;
   2468         llvm::raw_svector_ostream OS(Str);
   2469         OS << "__i" << IndexVariables.size();
   2470         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
   2471       }
   2472       VarDecl *IterationVar
   2473         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
   2474                           IterationVarName, SizeType,
   2475                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   2476                           SC_None, SC_None);
   2477       IndexVariables.push_back(IterationVar);
   2478 
   2479       // Create a reference to the iteration variable.
   2480       ExprResult IterationVarRef
   2481         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_RValue, Loc);
   2482       assert(!IterationVarRef.isInvalid() &&
   2483              "Reference to invented variable cannot fail!");
   2484 
   2485       // Subscript the array with this iteration variable.
   2486       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
   2487                                                         IterationVarRef.take(),
   2488                                                         Loc);
   2489       if (CtorArg.isInvalid())
   2490         return true;
   2491 
   2492       BaseType = Array->getElementType();
   2493     }
   2494 
   2495     // The array subscript expression is an lvalue, which is wrong for moving.
   2496     if (Moving && InitializingArray)
   2497       CtorArg = CastForMoving(SemaRef, CtorArg.take());
   2498 
   2499     // Construct the entity that we will be initializing. For an array, this
   2500     // will be first element in the array, which may require several levels
   2501     // of array-subscript entities.
   2502     SmallVector<InitializedEntity, 4> Entities;
   2503     Entities.reserve(1 + IndexVariables.size());
   2504     if (Indirect)
   2505       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
   2506     else
   2507       Entities.push_back(InitializedEntity::InitializeMember(Field));
   2508     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
   2509       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
   2510                                                               0,
   2511                                                               Entities.back()));
   2512 
   2513     // Direct-initialize to use the copy constructor.
   2514     InitializationKind InitKind =
   2515       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
   2516 
   2517     Expr *CtorArgE = CtorArg.takeAs<Expr>();
   2518     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind,
   2519                                    &CtorArgE, 1);
   2520 
   2521     ExprResult MemberInit
   2522       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
   2523                         MultiExprArg(&CtorArgE, 1));
   2524     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   2525     if (MemberInit.isInvalid())
   2526       return true;
   2527 
   2528     if (Indirect) {
   2529       assert(IndexVariables.size() == 0 &&
   2530              "Indirect field improperly initialized");
   2531       CXXMemberInit
   2532         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   2533                                                    Loc, Loc,
   2534                                                    MemberInit.takeAs<Expr>(),
   2535                                                    Loc);
   2536     } else
   2537       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
   2538                                                  Loc, MemberInit.takeAs<Expr>(),
   2539                                                  Loc,
   2540                                                  IndexVariables.data(),
   2541                                                  IndexVariables.size());
   2542     return false;
   2543   }
   2544 
   2545   assert(ImplicitInitKind == IIK_Default && "Unhandled implicit init kind!");
   2546 
   2547   QualType FieldBaseElementType =
   2548     SemaRef.Context.getBaseElementType(Field->getType());
   2549 
   2550   if (FieldBaseElementType->isRecordType()) {
   2551     InitializedEntity InitEntity
   2552       = Indirect? InitializedEntity::InitializeMember(Indirect)
   2553                 : InitializedEntity::InitializeMember(Field);
   2554     InitializationKind InitKind =
   2555       InitializationKind::CreateDefault(Loc);
   2556 
   2557     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
   2558     ExprResult MemberInit =
   2559       InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg());
   2560 
   2561     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
   2562     if (MemberInit.isInvalid())
   2563       return true;
   2564 
   2565     if (Indirect)
   2566       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2567                                                                Indirect, Loc,
   2568                                                                Loc,
   2569                                                                MemberInit.get(),
   2570                                                                Loc);
   2571     else
   2572       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
   2573                                                                Field, Loc, Loc,
   2574                                                                MemberInit.get(),
   2575                                                                Loc);
   2576     return false;
   2577   }
   2578 
   2579   if (!Field->getParent()->isUnion()) {
   2580     if (FieldBaseElementType->isReferenceType()) {
   2581       SemaRef.Diag(Constructor->getLocation(),
   2582                    diag::err_uninitialized_member_in_ctor)
   2583       << (int)Constructor->isImplicit()
   2584       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   2585       << 0 << Field->getDeclName();
   2586       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   2587       return true;
   2588     }
   2589 
   2590     if (FieldBaseElementType.isConstQualified()) {
   2591       SemaRef.Diag(Constructor->getLocation(),
   2592                    diag::err_uninitialized_member_in_ctor)
   2593       << (int)Constructor->isImplicit()
   2594       << SemaRef.Context.getTagDeclType(Constructor->getParent())
   2595       << 1 << Field->getDeclName();
   2596       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
   2597       return true;
   2598     }
   2599   }
   2600 
   2601   if (SemaRef.getLangOptions().ObjCAutoRefCount &&
   2602       FieldBaseElementType->isObjCRetainableType() &&
   2603       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
   2604       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
   2605     // Instant objects:
   2606     //   Default-initialize Objective-C pointers to NULL.
   2607     CXXMemberInit
   2608       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   2609                                                  Loc, Loc,
   2610                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
   2611                                                  Loc);
   2612     return false;
   2613   }
   2614 
   2615   // Nothing to initialize.
   2616   CXXMemberInit = 0;
   2617   return false;
   2618 }
   2619 
   2620 namespace {
   2621 struct BaseAndFieldInfo {
   2622   Sema &S;
   2623   CXXConstructorDecl *Ctor;
   2624   bool AnyErrorsInInits;
   2625   ImplicitInitializerKind IIK;
   2626   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
   2627   SmallVector<CXXCtorInitializer*, 8> AllToInit;
   2628 
   2629   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
   2630     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
   2631     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
   2632     if (Generated && Ctor->isCopyConstructor())
   2633       IIK = IIK_Copy;
   2634     else if (Generated && Ctor->isMoveConstructor())
   2635       IIK = IIK_Move;
   2636     else
   2637       IIK = IIK_Default;
   2638   }
   2639 };
   2640 }
   2641 
   2642 /// \brief Determine whether the given indirect field declaration is somewhere
   2643 /// within an anonymous union.
   2644 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
   2645   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
   2646                                       CEnd = F->chain_end();
   2647        C != CEnd; ++C)
   2648     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
   2649       if (Record->isUnion())
   2650         return true;
   2651 
   2652   return false;
   2653 }
   2654 
   2655 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
   2656                                     FieldDecl *Field,
   2657                                     IndirectFieldDecl *Indirect = 0) {
   2658 
   2659   // Overwhelmingly common case: we have a direct initializer for this field.
   2660   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field)) {
   2661     Info.AllToInit.push_back(Init);
   2662     return false;
   2663   }
   2664 
   2665   // C++0x [class.base.init]p8: if the entity is a non-static data member that
   2666   // has a brace-or-equal-initializer, the entity is initialized as specified
   2667   // in [dcl.init].
   2668   if (Field->hasInClassInitializer()) {
   2669     CXXCtorInitializer *Init;
   2670     if (Indirect)
   2671       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
   2672                                                       SourceLocation(),
   2673                                                       SourceLocation(), 0,
   2674                                                       SourceLocation());
   2675     else
   2676       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
   2677                                                       SourceLocation(),
   2678                                                       SourceLocation(), 0,
   2679                                                       SourceLocation());
   2680     Info.AllToInit.push_back(Init);
   2681     return false;
   2682   }
   2683 
   2684   // Don't build an implicit initializer for union members if none was
   2685   // explicitly specified.
   2686   if (Field->getParent()->isUnion() ||
   2687       (Indirect && isWithinAnonymousUnion(Indirect)))
   2688     return false;
   2689 
   2690   // Don't try to build an implicit initializer if there were semantic
   2691   // errors in any of the initializers (and therefore we might be
   2692   // missing some that the user actually wrote).
   2693   if (Info.AnyErrorsInInits || Field->isInvalidDecl())
   2694     return false;
   2695 
   2696   CXXCtorInitializer *Init = 0;
   2697   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
   2698                                      Indirect, Init))
   2699     return true;
   2700 
   2701   if (Init)
   2702     Info.AllToInit.push_back(Init);
   2703 
   2704   return false;
   2705 }
   2706 
   2707 bool
   2708 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
   2709                                CXXCtorInitializer *Initializer) {
   2710   assert(Initializer->isDelegatingInitializer());
   2711   Constructor->setNumCtorInitializers(1);
   2712   CXXCtorInitializer **initializer =
   2713     new (Context) CXXCtorInitializer*[1];
   2714   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
   2715   Constructor->setCtorInitializers(initializer);
   2716 
   2717   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
   2718     MarkDeclarationReferenced(Initializer->getSourceLocation(), Dtor);
   2719     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
   2720   }
   2721 
   2722   DelegatingCtorDecls.push_back(Constructor);
   2723 
   2724   return false;
   2725 }
   2726 
   2727 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor,
   2728                                CXXCtorInitializer **Initializers,
   2729                                unsigned NumInitializers,
   2730                                bool AnyErrors) {
   2731   if (Constructor->isDependentContext()) {
   2732     // Just store the initializers as written, they will be checked during
   2733     // instantiation.
   2734     if (NumInitializers > 0) {
   2735       Constructor->setNumCtorInitializers(NumInitializers);
   2736       CXXCtorInitializer **baseOrMemberInitializers =
   2737         new (Context) CXXCtorInitializer*[NumInitializers];
   2738       memcpy(baseOrMemberInitializers, Initializers,
   2739              NumInitializers * sizeof(CXXCtorInitializer*));
   2740       Constructor->setCtorInitializers(baseOrMemberInitializers);
   2741     }
   2742 
   2743     return false;
   2744   }
   2745 
   2746   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
   2747 
   2748   // We need to build the initializer AST according to order of construction
   2749   // and not what user specified in the Initializers list.
   2750   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
   2751   if (!ClassDecl)
   2752     return true;
   2753 
   2754   bool HadError = false;
   2755 
   2756   for (unsigned i = 0; i < NumInitializers; i++) {
   2757     CXXCtorInitializer *Member = Initializers[i];
   2758 
   2759     if (Member->isBaseInitializer())
   2760       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
   2761     else
   2762       Info.AllBaseFields[Member->getAnyMember()] = Member;
   2763   }
   2764 
   2765   // Keep track of the direct virtual bases.
   2766   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
   2767   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
   2768        E = ClassDecl->bases_end(); I != E; ++I) {
   2769     if (I->isVirtual())
   2770       DirectVBases.insert(I);
   2771   }
   2772 
   2773   // Push virtual bases before others.
   2774   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   2775        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   2776 
   2777     if (CXXCtorInitializer *Value
   2778         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
   2779       Info.AllToInit.push_back(Value);
   2780     } else if (!AnyErrors) {
   2781       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
   2782       CXXCtorInitializer *CXXBaseInit;
   2783       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   2784                                        VBase, IsInheritedVirtualBase,
   2785                                        CXXBaseInit)) {
   2786         HadError = true;
   2787         continue;
   2788       }
   2789 
   2790       Info.AllToInit.push_back(CXXBaseInit);
   2791     }
   2792   }
   2793 
   2794   // Non-virtual bases.
   2795   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   2796        E = ClassDecl->bases_end(); Base != E; ++Base) {
   2797     // Virtuals are in the virtual base list and already constructed.
   2798     if (Base->isVirtual())
   2799       continue;
   2800 
   2801     if (CXXCtorInitializer *Value
   2802           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
   2803       Info.AllToInit.push_back(Value);
   2804     } else if (!AnyErrors) {
   2805       CXXCtorInitializer *CXXBaseInit;
   2806       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
   2807                                        Base, /*IsInheritedVirtualBase=*/false,
   2808                                        CXXBaseInit)) {
   2809         HadError = true;
   2810         continue;
   2811       }
   2812 
   2813       Info.AllToInit.push_back(CXXBaseInit);
   2814     }
   2815   }
   2816 
   2817   // Fields.
   2818   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
   2819                                MemEnd = ClassDecl->decls_end();
   2820        Mem != MemEnd; ++Mem) {
   2821     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
   2822       // C++ [class.bit]p2:
   2823       //   A declaration for a bit-field that omits the identifier declares an
   2824       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
   2825       //   initialized.
   2826       if (F->isUnnamedBitfield())
   2827         continue;
   2828 
   2829       if (F->getType()->isIncompleteArrayType()) {
   2830         assert(ClassDecl->hasFlexibleArrayMember() &&
   2831                "Incomplete array type is not valid");
   2832         continue;
   2833       }
   2834 
   2835       // If we're not generating the implicit copy/move constructor, then we'll
   2836       // handle anonymous struct/union fields based on their individual
   2837       // indirect fields.
   2838       if (F->isAnonymousStructOrUnion() && Info.IIK == IIK_Default)
   2839         continue;
   2840 
   2841       if (CollectFieldInitializer(*this, Info, F))
   2842         HadError = true;
   2843       continue;
   2844     }
   2845 
   2846     // Beyond this point, we only consider default initialization.
   2847     if (Info.IIK != IIK_Default)
   2848       continue;
   2849 
   2850     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
   2851       if (F->getType()->isIncompleteArrayType()) {
   2852         assert(ClassDecl->hasFlexibleArrayMember() &&
   2853                "Incomplete array type is not valid");
   2854         continue;
   2855       }
   2856 
   2857       // Initialize each field of an anonymous struct individually.
   2858       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
   2859         HadError = true;
   2860 
   2861       continue;
   2862     }
   2863   }
   2864 
   2865   NumInitializers = Info.AllToInit.size();
   2866   if (NumInitializers > 0) {
   2867     Constructor->setNumCtorInitializers(NumInitializers);
   2868     CXXCtorInitializer **baseOrMemberInitializers =
   2869       new (Context) CXXCtorInitializer*[NumInitializers];
   2870     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
   2871            NumInitializers * sizeof(CXXCtorInitializer*));
   2872     Constructor->setCtorInitializers(baseOrMemberInitializers);
   2873 
   2874     // Constructors implicitly reference the base and member
   2875     // destructors.
   2876     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
   2877                                            Constructor->getParent());
   2878   }
   2879 
   2880   return HadError;
   2881 }
   2882 
   2883 static void *GetKeyForTopLevelField(FieldDecl *Field) {
   2884   // For anonymous unions, use the class declaration as the key.
   2885   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
   2886     if (RT->getDecl()->isAnonymousStructOrUnion())
   2887       return static_cast<void *>(RT->getDecl());
   2888   }
   2889   return static_cast<void *>(Field);
   2890 }
   2891 
   2892 static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
   2893   return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
   2894 }
   2895 
   2896 static void *GetKeyForMember(ASTContext &Context,
   2897                              CXXCtorInitializer *Member) {
   2898   if (!Member->isAnyMemberInitializer())
   2899     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
   2900 
   2901   // For fields injected into the class via declaration of an anonymous union,
   2902   // use its anonymous union class declaration as the unique key.
   2903   FieldDecl *Field = Member->getAnyMember();
   2904 
   2905   // If the field is a member of an anonymous struct or union, our key
   2906   // is the anonymous record decl that's a direct child of the class.
   2907   RecordDecl *RD = Field->getParent();
   2908   if (RD->isAnonymousStructOrUnion()) {
   2909     while (true) {
   2910       RecordDecl *Parent = cast<RecordDecl>(RD->getDeclContext());
   2911       if (Parent->isAnonymousStructOrUnion())
   2912         RD = Parent;
   2913       else
   2914         break;
   2915     }
   2916 
   2917     return static_cast<void *>(RD);
   2918   }
   2919 
   2920   return static_cast<void *>(Field);
   2921 }
   2922 
   2923 static void
   2924 DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef,
   2925                                   const CXXConstructorDecl *Constructor,
   2926                                   CXXCtorInitializer **Inits,
   2927                                   unsigned NumInits) {
   2928   if (Constructor->getDeclContext()->isDependentContext())
   2929     return;
   2930 
   2931   // Don't check initializers order unless the warning is enabled at the
   2932   // location of at least one initializer.
   2933   bool ShouldCheckOrder = false;
   2934   for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
   2935     CXXCtorInitializer *Init = Inits[InitIndex];
   2936     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
   2937                                          Init->getSourceLocation())
   2938           != DiagnosticsEngine::Ignored) {
   2939       ShouldCheckOrder = true;
   2940       break;
   2941     }
   2942   }
   2943   if (!ShouldCheckOrder)
   2944     return;
   2945 
   2946   // Build the list of bases and members in the order that they'll
   2947   // actually be initialized.  The explicit initializers should be in
   2948   // this same order but may be missing things.
   2949   SmallVector<const void*, 32> IdealInitKeys;
   2950 
   2951   const CXXRecordDecl *ClassDecl = Constructor->getParent();
   2952 
   2953   // 1. Virtual bases.
   2954   for (CXXRecordDecl::base_class_const_iterator VBase =
   2955        ClassDecl->vbases_begin(),
   2956        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
   2957     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
   2958 
   2959   // 2. Non-virtual bases.
   2960   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
   2961        E = ClassDecl->bases_end(); Base != E; ++Base) {
   2962     if (Base->isVirtual())
   2963       continue;
   2964     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
   2965   }
   2966 
   2967   // 3. Direct fields.
   2968   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   2969        E = ClassDecl->field_end(); Field != E; ++Field) {
   2970     if (Field->isUnnamedBitfield())
   2971       continue;
   2972 
   2973     IdealInitKeys.push_back(GetKeyForTopLevelField(*Field));
   2974   }
   2975 
   2976   unsigned NumIdealInits = IdealInitKeys.size();
   2977   unsigned IdealIndex = 0;
   2978 
   2979   CXXCtorInitializer *PrevInit = 0;
   2980   for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
   2981     CXXCtorInitializer *Init = Inits[InitIndex];
   2982     void *InitKey = GetKeyForMember(SemaRef.Context, Init);
   2983 
   2984     // Scan forward to try to find this initializer in the idealized
   2985     // initializers list.
   2986     for (; IdealIndex != NumIdealInits; ++IdealIndex)
   2987       if (InitKey == IdealInitKeys[IdealIndex])
   2988         break;
   2989 
   2990     // If we didn't find this initializer, it must be because we
   2991     // scanned past it on a previous iteration.  That can only
   2992     // happen if we're out of order;  emit a warning.
   2993     if (IdealIndex == NumIdealInits && PrevInit) {
   2994       Sema::SemaDiagnosticBuilder D =
   2995         SemaRef.Diag(PrevInit->getSourceLocation(),
   2996                      diag::warn_initializer_out_of_order);
   2997 
   2998       if (PrevInit->isAnyMemberInitializer())
   2999         D << 0 << PrevInit->getAnyMember()->getDeclName();
   3000       else
   3001         D << 1 << PrevInit->getBaseClassInfo()->getType();
   3002 
   3003       if (Init->isAnyMemberInitializer())
   3004         D << 0 << Init->getAnyMember()->getDeclName();
   3005       else
   3006         D << 1 << Init->getBaseClassInfo()->getType();
   3007 
   3008       // Move back to the initializer's location in the ideal list.
   3009       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
   3010         if (InitKey == IdealInitKeys[IdealIndex])
   3011           break;
   3012 
   3013       assert(IdealIndex != NumIdealInits &&
   3014              "initializer not found in initializer list");
   3015     }
   3016 
   3017     PrevInit = Init;
   3018   }
   3019 }
   3020 
   3021 namespace {
   3022 bool CheckRedundantInit(Sema &S,
   3023                         CXXCtorInitializer *Init,
   3024                         CXXCtorInitializer *&PrevInit) {
   3025   if (!PrevInit) {
   3026     PrevInit = Init;
   3027     return false;
   3028   }
   3029 
   3030   if (FieldDecl *Field = Init->getMember())
   3031     S.Diag(Init->getSourceLocation(),
   3032            diag::err_multiple_mem_initialization)
   3033       << Field->getDeclName()
   3034       << Init->getSourceRange();
   3035   else {
   3036     const Type *BaseClass = Init->getBaseClass();
   3037     assert(BaseClass && "neither field nor base");
   3038     S.Diag(Init->getSourceLocation(),
   3039            diag::err_multiple_base_initialization)
   3040       << QualType(BaseClass, 0)
   3041       << Init->getSourceRange();
   3042   }
   3043   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
   3044     << 0 << PrevInit->getSourceRange();
   3045 
   3046   return true;
   3047 }
   3048 
   3049 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
   3050 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
   3051 
   3052 bool CheckRedundantUnionInit(Sema &S,
   3053                              CXXCtorInitializer *Init,
   3054                              RedundantUnionMap &Unions) {
   3055   FieldDecl *Field = Init->getAnyMember();
   3056   RecordDecl *Parent = Field->getParent();
   3057   if (!Parent->isAnonymousStructOrUnion())
   3058     return false;
   3059 
   3060   NamedDecl *Child = Field;
   3061   do {
   3062     if (Parent->isUnion()) {
   3063       UnionEntry &En = Unions[Parent];
   3064       if (En.first && En.first != Child) {
   3065         S.Diag(Init->getSourceLocation(),
   3066                diag::err_multiple_mem_union_initialization)
   3067           << Field->getDeclName()
   3068           << Init->getSourceRange();
   3069         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
   3070           << 0 << En.second->getSourceRange();
   3071         return true;
   3072       } else if (!En.first) {
   3073         En.first = Child;
   3074         En.second = Init;
   3075       }
   3076     }
   3077 
   3078     Child = Parent;
   3079     Parent = cast<RecordDecl>(Parent->getDeclContext());
   3080   } while (Parent->isAnonymousStructOrUnion());
   3081 
   3082   return false;
   3083 }
   3084 }
   3085 
   3086 /// ActOnMemInitializers - Handle the member initializers for a constructor.
   3087 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
   3088                                 SourceLocation ColonLoc,
   3089                                 CXXCtorInitializer **meminits,
   3090                                 unsigned NumMemInits,
   3091                                 bool AnyErrors) {
   3092   if (!ConstructorDecl)
   3093     return;
   3094 
   3095   AdjustDeclIfTemplate(ConstructorDecl);
   3096 
   3097   CXXConstructorDecl *Constructor
   3098     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
   3099 
   3100   if (!Constructor) {
   3101     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
   3102     return;
   3103   }
   3104 
   3105   CXXCtorInitializer **MemInits =
   3106     reinterpret_cast<CXXCtorInitializer **>(meminits);
   3107 
   3108   // Mapping for the duplicate initializers check.
   3109   // For member initializers, this is keyed with a FieldDecl*.
   3110   // For base initializers, this is keyed with a Type*.
   3111   llvm::DenseMap<void*, CXXCtorInitializer *> Members;
   3112 
   3113   // Mapping for the inconsistent anonymous-union initializers check.
   3114   RedundantUnionMap MemberUnions;
   3115 
   3116   bool HadError = false;
   3117   for (unsigned i = 0; i < NumMemInits; i++) {
   3118     CXXCtorInitializer *Init = MemInits[i];
   3119 
   3120     // Set the source order index.
   3121     Init->setSourceOrder(i);
   3122 
   3123     if (Init->isAnyMemberInitializer()) {
   3124       FieldDecl *Field = Init->getAnyMember();
   3125       if (CheckRedundantInit(*this, Init, Members[Field]) ||
   3126           CheckRedundantUnionInit(*this, Init, MemberUnions))
   3127         HadError = true;
   3128     } else if (Init->isBaseInitializer()) {
   3129       void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
   3130       if (CheckRedundantInit(*this, Init, Members[Key]))
   3131         HadError = true;
   3132     } else {
   3133       assert(Init->isDelegatingInitializer());
   3134       // This must be the only initializer
   3135       if (i != 0 || NumMemInits > 1) {
   3136         Diag(MemInits[0]->getSourceLocation(),
   3137              diag::err_delegating_initializer_alone)
   3138           << MemInits[0]->getSourceRange();
   3139         HadError = true;
   3140         // We will treat this as being the only initializer.
   3141       }
   3142       SetDelegatingInitializer(Constructor, MemInits[i]);
   3143       // Return immediately as the initializer is set.
   3144       return;
   3145     }
   3146   }
   3147 
   3148   if (HadError)
   3149     return;
   3150 
   3151   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
   3152 
   3153   SetCtorInitializers(Constructor, MemInits, NumMemInits, AnyErrors);
   3154 }
   3155 
   3156 void
   3157 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
   3158                                              CXXRecordDecl *ClassDecl) {
   3159   // Ignore dependent contexts. Also ignore unions, since their members never
   3160   // have destructors implicitly called.
   3161   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
   3162     return;
   3163 
   3164   // FIXME: all the access-control diagnostics are positioned on the
   3165   // field/base declaration.  That's probably good; that said, the
   3166   // user might reasonably want to know why the destructor is being
   3167   // emitted, and we currently don't say.
   3168 
   3169   // Non-static data members.
   3170   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
   3171        E = ClassDecl->field_end(); I != E; ++I) {
   3172     FieldDecl *Field = *I;
   3173     if (Field->isInvalidDecl())
   3174       continue;
   3175     QualType FieldType = Context.getBaseElementType(Field->getType());
   3176 
   3177     const RecordType* RT = FieldType->getAs<RecordType>();
   3178     if (!RT)
   3179       continue;
   3180 
   3181     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3182     if (FieldClassDecl->isInvalidDecl())
   3183       continue;
   3184     if (FieldClassDecl->hasTrivialDestructor())
   3185       continue;
   3186 
   3187     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
   3188     assert(Dtor && "No dtor found for FieldClassDecl!");
   3189     CheckDestructorAccess(Field->getLocation(), Dtor,
   3190                           PDiag(diag::err_access_dtor_field)
   3191                             << Field->getDeclName()
   3192                             << FieldType);
   3193 
   3194     MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3195   }
   3196 
   3197   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
   3198 
   3199   // Bases.
   3200   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   3201        E = ClassDecl->bases_end(); Base != E; ++Base) {
   3202     // Bases are always records in a well-formed non-dependent class.
   3203     const RecordType *RT = Base->getType()->getAs<RecordType>();
   3204 
   3205     // Remember direct virtual bases.
   3206     if (Base->isVirtual())
   3207       DirectVirtualBases.insert(RT);
   3208 
   3209     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3210     // If our base class is invalid, we probably can't get its dtor anyway.
   3211     if (BaseClassDecl->isInvalidDecl())
   3212       continue;
   3213     // Ignore trivial destructors.
   3214     if (BaseClassDecl->hasTrivialDestructor())
   3215       continue;
   3216 
   3217     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3218     assert(Dtor && "No dtor found for BaseClassDecl!");
   3219 
   3220     // FIXME: caret should be on the start of the class name
   3221     CheckDestructorAccess(Base->getSourceRange().getBegin(), Dtor,
   3222                           PDiag(diag::err_access_dtor_base)
   3223                             << Base->getType()
   3224                             << Base->getSourceRange());
   3225 
   3226     MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3227   }
   3228 
   3229   // Virtual bases.
   3230   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
   3231        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
   3232 
   3233     // Bases are always records in a well-formed non-dependent class.
   3234     const RecordType *RT = VBase->getType()->getAs<RecordType>();
   3235 
   3236     // Ignore direct virtual bases.
   3237     if (DirectVirtualBases.count(RT))
   3238       continue;
   3239 
   3240     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   3241     // If our base class is invalid, we probably can't get its dtor anyway.
   3242     if (BaseClassDecl->isInvalidDecl())
   3243       continue;
   3244     // Ignore trivial destructors.
   3245     if (BaseClassDecl->hasTrivialDestructor())
   3246       continue;
   3247 
   3248     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
   3249     assert(Dtor && "No dtor found for BaseClassDecl!");
   3250     CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
   3251                           PDiag(diag::err_access_dtor_vbase)
   3252                             << VBase->getType());
   3253 
   3254     MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
   3255   }
   3256 }
   3257 
   3258 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
   3259   if (!CDtorDecl)
   3260     return;
   3261 
   3262   if (CXXConstructorDecl *Constructor
   3263       = dyn_cast<CXXConstructorDecl>(CDtorDecl))
   3264     SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false);
   3265 }
   3266 
   3267 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3268                                   unsigned DiagID, AbstractDiagSelID SelID) {
   3269   if (SelID == -1)
   3270     return RequireNonAbstractType(Loc, T, PDiag(DiagID));
   3271   else
   3272     return RequireNonAbstractType(Loc, T, PDiag(DiagID) << SelID);
   3273 }
   3274 
   3275 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
   3276                                   const PartialDiagnostic &PD) {
   3277   if (!getLangOptions().CPlusPlus)
   3278     return false;
   3279 
   3280   if (const ArrayType *AT = Context.getAsArrayType(T))
   3281     return RequireNonAbstractType(Loc, AT->getElementType(), PD);
   3282 
   3283   if (const PointerType *PT = T->getAs<PointerType>()) {
   3284     // Find the innermost pointer type.
   3285     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
   3286       PT = T;
   3287 
   3288     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
   3289       return RequireNonAbstractType(Loc, AT->getElementType(), PD);
   3290   }
   3291 
   3292   const RecordType *RT = T->getAs<RecordType>();
   3293   if (!RT)
   3294     return false;
   3295 
   3296   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
   3297 
   3298   // We can't answer whether something is abstract until it has a
   3299   // definition.  If it's currently being defined, we'll walk back
   3300   // over all the declarations when we have a full definition.
   3301   const CXXRecordDecl *Def = RD->getDefinition();
   3302   if (!Def || Def->isBeingDefined())
   3303     return false;
   3304 
   3305   if (!RD->isAbstract())
   3306     return false;
   3307 
   3308   Diag(Loc, PD) << RD->getDeclName();
   3309   DiagnoseAbstractType(RD);
   3310 
   3311   return true;
   3312 }
   3313 
   3314 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
   3315   // Check if we've already emitted the list of pure virtual functions
   3316   // for this class.
   3317   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
   3318     return;
   3319 
   3320   CXXFinalOverriderMap FinalOverriders;
   3321   RD->getFinalOverriders(FinalOverriders);
   3322 
   3323   // Keep a set of seen pure methods so we won't diagnose the same method
   3324   // more than once.
   3325   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
   3326 
   3327   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
   3328                                    MEnd = FinalOverriders.end();
   3329        M != MEnd;
   3330        ++M) {
   3331     for (OverridingMethods::iterator SO = M->second.begin(),
   3332                                   SOEnd = M->second.end();
   3333          SO != SOEnd; ++SO) {
   3334       // C++ [class.abstract]p4:
   3335       //   A class is abstract if it contains or inherits at least one
   3336       //   pure virtual function for which the final overrider is pure
   3337       //   virtual.
   3338 
   3339       //
   3340       if (SO->second.size() != 1)
   3341         continue;
   3342 
   3343       if (!SO->second.front().Method->isPure())
   3344         continue;
   3345 
   3346       if (!SeenPureMethods.insert(SO->second.front().Method))
   3347         continue;
   3348 
   3349       Diag(SO->second.front().Method->getLocation(),
   3350            diag::note_pure_virtual_function)
   3351         << SO->second.front().Method->getDeclName() << RD->getDeclName();
   3352     }
   3353   }
   3354 
   3355   if (!PureVirtualClassDiagSet)
   3356     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
   3357   PureVirtualClassDiagSet->insert(RD);
   3358 }
   3359 
   3360 namespace {
   3361 struct AbstractUsageInfo {
   3362   Sema &S;
   3363   CXXRecordDecl *Record;
   3364   CanQualType AbstractType;
   3365   bool Invalid;
   3366 
   3367   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
   3368     : S(S), Record(Record),
   3369       AbstractType(S.Context.getCanonicalType(
   3370                    S.Context.getTypeDeclType(Record))),
   3371       Invalid(false) {}
   3372 
   3373   void DiagnoseAbstractType() {
   3374     if (Invalid) return;
   3375     S.DiagnoseAbstractType(Record);
   3376     Invalid = true;
   3377   }
   3378 
   3379   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
   3380 };
   3381 
   3382 struct CheckAbstractUsage {
   3383   AbstractUsageInfo &Info;
   3384   const NamedDecl *Ctx;
   3385 
   3386   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
   3387     : Info(Info), Ctx(Ctx) {}
   3388 
   3389   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3390     switch (TL.getTypeLocClass()) {
   3391 #define ABSTRACT_TYPELOC(CLASS, PARENT)
   3392 #define TYPELOC(CLASS, PARENT) \
   3393     case TypeLoc::CLASS: Check(cast<CLASS##TypeLoc>(TL), Sel); break;
   3394 #include "clang/AST/TypeLocNodes.def"
   3395     }
   3396   }
   3397 
   3398   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3399     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
   3400     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   3401       if (!TL.getArg(I))
   3402         continue;
   3403 
   3404       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
   3405       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
   3406     }
   3407   }
   3408 
   3409   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3410     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
   3411   }
   3412 
   3413   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3414     // Visit the type parameters from a permissive context.
   3415     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
   3416       TemplateArgumentLoc TAL = TL.getArgLoc(I);
   3417       if (TAL.getArgument().getKind() == TemplateArgument::Type)
   3418         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
   3419           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
   3420       // TODO: other template argument types?
   3421     }
   3422   }
   3423 
   3424   // Visit pointee types from a permissive context.
   3425 #define CheckPolymorphic(Type) \
   3426   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
   3427     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
   3428   }
   3429   CheckPolymorphic(PointerTypeLoc)
   3430   CheckPolymorphic(ReferenceTypeLoc)
   3431   CheckPolymorphic(MemberPointerTypeLoc)
   3432   CheckPolymorphic(BlockPointerTypeLoc)
   3433   CheckPolymorphic(AtomicTypeLoc)
   3434 
   3435   /// Handle all the types we haven't given a more specific
   3436   /// implementation for above.
   3437   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
   3438     // Every other kind of type that we haven't called out already
   3439     // that has an inner type is either (1) sugar or (2) contains that
   3440     // inner type in some way as a subobject.
   3441     if (TypeLoc Next = TL.getNextTypeLoc())
   3442       return Visit(Next, Sel);
   3443 
   3444     // If there's no inner type and we're in a permissive context,
   3445     // don't diagnose.
   3446     if (Sel == Sema::AbstractNone) return;
   3447 
   3448     // Check whether the type matches the abstract type.
   3449     QualType T = TL.getType();
   3450     if (T->isArrayType()) {
   3451       Sel = Sema::AbstractArrayType;
   3452       T = Info.S.Context.getBaseElementType(T);
   3453     }
   3454     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
   3455     if (CT != Info.AbstractType) return;
   3456 
   3457     // It matched; do some magic.
   3458     if (Sel == Sema::AbstractArrayType) {
   3459       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
   3460         << T << TL.getSourceRange();
   3461     } else {
   3462       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
   3463         << Sel << T << TL.getSourceRange();
   3464     }
   3465     Info.DiagnoseAbstractType();
   3466   }
   3467 };
   3468 
   3469 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
   3470                                   Sema::AbstractDiagSelID Sel) {
   3471   CheckAbstractUsage(*this, D).Visit(TL, Sel);
   3472 }
   3473 
   3474 }
   3475 
   3476 /// Check for invalid uses of an abstract type in a method declaration.
   3477 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   3478                                     CXXMethodDecl *MD) {
   3479   // No need to do the check on definitions, which require that
   3480   // the return/param types be complete.
   3481   if (MD->doesThisDeclarationHaveABody())
   3482     return;
   3483 
   3484   // For safety's sake, just ignore it if we don't have type source
   3485   // information.  This should never happen for non-implicit methods,
   3486   // but...
   3487   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
   3488     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
   3489 }
   3490 
   3491 /// Check for invalid uses of an abstract type within a class definition.
   3492 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
   3493                                     CXXRecordDecl *RD) {
   3494   for (CXXRecordDecl::decl_iterator
   3495          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
   3496     Decl *D = *I;
   3497     if (D->isImplicit()) continue;
   3498 
   3499     // Methods and method templates.
   3500     if (isa<CXXMethodDecl>(D)) {
   3501       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
   3502     } else if (isa<FunctionTemplateDecl>(D)) {
   3503       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
   3504       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
   3505 
   3506     // Fields and static variables.
   3507     } else if (isa<FieldDecl>(D)) {
   3508       FieldDecl *FD = cast<FieldDecl>(D);
   3509       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
   3510         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
   3511     } else if (isa<VarDecl>(D)) {
   3512       VarDecl *VD = cast<VarDecl>(D);
   3513       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
   3514         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
   3515 
   3516     // Nested classes and class templates.
   3517     } else if (isa<CXXRecordDecl>(D)) {
   3518       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
   3519     } else if (isa<ClassTemplateDecl>(D)) {
   3520       CheckAbstractClassUsage(Info,
   3521                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
   3522     }
   3523   }
   3524 }
   3525 
   3526 /// \brief Perform semantic checks on a class definition that has been
   3527 /// completing, introducing implicitly-declared members, checking for
   3528 /// abstract types, etc.
   3529 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
   3530   if (!Record)
   3531     return;
   3532 
   3533   if (Record->isAbstract() && !Record->isInvalidDecl()) {
   3534     AbstractUsageInfo Info(*this, Record);
   3535     CheckAbstractClassUsage(Info, Record);
   3536   }
   3537 
   3538   // If this is not an aggregate type and has no user-declared constructor,
   3539   // complain about any non-static data members of reference or const scalar
   3540   // type, since they will never get initializers.
   3541   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
   3542       !Record->isAggregate() && !Record->hasUserDeclaredConstructor()) {
   3543     bool Complained = false;
   3544     for (RecordDecl::field_iterator F = Record->field_begin(),
   3545                                  FEnd = Record->field_end();
   3546          F != FEnd; ++F) {
   3547       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
   3548         continue;
   3549 
   3550       if (F->getType()->isReferenceType() ||
   3551           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
   3552         if (!Complained) {
   3553           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
   3554             << Record->getTagKind() << Record;
   3555           Complained = true;
   3556         }
   3557 
   3558         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
   3559           << F->getType()->isReferenceType()
   3560           << F->getDeclName();
   3561       }
   3562     }
   3563   }
   3564 
   3565   if (Record->isDynamicClass() && !Record->isDependentType())
   3566     DynamicClasses.push_back(Record);
   3567 
   3568   if (Record->getIdentifier()) {
   3569     // C++ [class.mem]p13:
   3570     //   If T is the name of a class, then each of the following shall have a
   3571     //   name different from T:
   3572     //     - every member of every anonymous union that is a member of class T.
   3573     //
   3574     // C++ [class.mem]p14:
   3575     //   In addition, if class T has a user-declared constructor (12.1), every
   3576     //   non-static data member of class T shall have a name different from T.
   3577     for (DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
   3578          R.first != R.second; ++R.first) {
   3579       NamedDecl *D = *R.first;
   3580       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
   3581           isa<IndirectFieldDecl>(D)) {
   3582         Diag(D->getLocation(), diag::err_member_name_of_class)
   3583           << D->getDeclName();
   3584         break;
   3585       }
   3586     }
   3587   }
   3588 
   3589   // Warn if the class has virtual methods but non-virtual public destructor.
   3590   if (Record->isPolymorphic() && !Record->isDependentType()) {
   3591     CXXDestructorDecl *dtor = Record->getDestructor();
   3592     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
   3593       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
   3594            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
   3595   }
   3596 
   3597   // See if a method overloads virtual methods in a base
   3598   /// class without overriding any.
   3599   if (!Record->isDependentType()) {
   3600     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   3601                                      MEnd = Record->method_end();
   3602          M != MEnd; ++M) {
   3603       if (!(*M)->isStatic())
   3604         DiagnoseHiddenVirtualMethods(Record, *M);
   3605     }
   3606   }
   3607 
   3608   // C++0x [dcl.constexpr]p8: A constexpr specifier for a non-static member
   3609   // function that is not a constructor declares that member function to be
   3610   // const. [...] The class of which that function is a member shall be
   3611   // a literal type.
   3612   //
   3613   // It's fine to diagnose constructors here too: such constructors cannot
   3614   // produce a constant expression, so are ill-formed (no diagnostic required).
   3615   //
   3616   // If the class has virtual bases, any constexpr members will already have
   3617   // been diagnosed by the checks performed on the member declaration, so
   3618   // suppress this (less useful) diagnostic.
   3619   if (LangOpts.CPlusPlus0x && !Record->isDependentType() &&
   3620       !Record->isLiteral() && !Record->getNumVBases()) {
   3621     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
   3622                                      MEnd = Record->method_end();
   3623          M != MEnd; ++M) {
   3624       if ((*M)->isConstexpr()) {
   3625         switch (Record->getTemplateSpecializationKind()) {
   3626         case TSK_ImplicitInstantiation:
   3627         case TSK_ExplicitInstantiationDeclaration:
   3628         case TSK_ExplicitInstantiationDefinition:
   3629           // If a template instantiates to a non-literal type, but its members
   3630           // instantiate to constexpr functions, the template is technically
   3631           // ill-formed, but we allow it for sanity. Such members are treated as
   3632           // non-constexpr.
   3633           (*M)->setConstexpr(false);
   3634           continue;
   3635 
   3636         case TSK_Undeclared:
   3637         case TSK_ExplicitSpecialization:
   3638           RequireLiteralType((*M)->getLocation(), Context.getRecordType(Record),
   3639                              PDiag(diag::err_constexpr_method_non_literal));
   3640           break;
   3641         }
   3642 
   3643         // Only produce one error per class.
   3644         break;
   3645       }
   3646     }
   3647   }
   3648 
   3649   // Declare inherited constructors. We do this eagerly here because:
   3650   // - The standard requires an eager diagnostic for conflicting inherited
   3651   //   constructors from different classes.
   3652   // - The lazy declaration of the other implicit constructors is so as to not
   3653   //   waste space and performance on classes that are not meant to be
   3654   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
   3655   //   have inherited constructors.
   3656   DeclareInheritedConstructors(Record);
   3657 
   3658   if (!Record->isDependentType())
   3659     CheckExplicitlyDefaultedMethods(Record);
   3660 }
   3661 
   3662 void Sema::CheckExplicitlyDefaultedMethods(CXXRecordDecl *Record) {
   3663   for (CXXRecordDecl::method_iterator MI = Record->method_begin(),
   3664                                       ME = Record->method_end();
   3665        MI != ME; ++MI) {
   3666     if (!MI->isInvalidDecl() && MI->isExplicitlyDefaulted()) {
   3667       switch (getSpecialMember(*MI)) {
   3668       case CXXDefaultConstructor:
   3669         CheckExplicitlyDefaultedDefaultConstructor(
   3670                                                   cast<CXXConstructorDecl>(*MI));
   3671         break;
   3672 
   3673       case CXXDestructor:
   3674         CheckExplicitlyDefaultedDestructor(cast<CXXDestructorDecl>(*MI));
   3675         break;
   3676 
   3677       case CXXCopyConstructor:
   3678         CheckExplicitlyDefaultedCopyConstructor(cast<CXXConstructorDecl>(*MI));
   3679         break;
   3680 
   3681       case CXXCopyAssignment:
   3682         CheckExplicitlyDefaultedCopyAssignment(*MI);
   3683         break;
   3684 
   3685       case CXXMoveConstructor:
   3686         CheckExplicitlyDefaultedMoveConstructor(cast<CXXConstructorDecl>(*MI));
   3687         break;
   3688 
   3689       case CXXMoveAssignment:
   3690         CheckExplicitlyDefaultedMoveAssignment(*MI);
   3691         break;
   3692 
   3693       case CXXInvalid:
   3694         llvm_unreachable("non-special member explicitly defaulted!");
   3695       }
   3696     }
   3697   }
   3698 
   3699 }
   3700 
   3701 void Sema::CheckExplicitlyDefaultedDefaultConstructor(CXXConstructorDecl *CD) {
   3702   assert(CD->isExplicitlyDefaulted() && CD->isDefaultConstructor());
   3703 
   3704   // Whether this was the first-declared instance of the constructor.
   3705   // This affects whether we implicitly add an exception spec (and, eventually,
   3706   // constexpr). It is also ill-formed to explicitly default a constructor such
   3707   // that it would be deleted. (C++0x [decl.fct.def.default])
   3708   bool First = CD == CD->getCanonicalDecl();
   3709 
   3710   bool HadError = false;
   3711   if (CD->getNumParams() != 0) {
   3712     Diag(CD->getLocation(), diag::err_defaulted_default_ctor_params)
   3713       << CD->getSourceRange();
   3714     HadError = true;
   3715   }
   3716 
   3717   ImplicitExceptionSpecification Spec
   3718     = ComputeDefaultedDefaultCtorExceptionSpec(CD->getParent());
   3719   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3720   if (EPI.ExceptionSpecType == EST_Delayed) {
   3721     // Exception specification depends on some deferred part of the class. We'll
   3722     // try again when the class's definition has been fully processed.
   3723     return;
   3724   }
   3725   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   3726                           *ExceptionType = Context.getFunctionType(
   3727                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3728 
   3729   if (CtorType->hasExceptionSpec()) {
   3730     if (CheckEquivalentExceptionSpec(
   3731           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3732             << CXXDefaultConstructor,
   3733           PDiag(),
   3734           ExceptionType, SourceLocation(),
   3735           CtorType, CD->getLocation())) {
   3736       HadError = true;
   3737     }
   3738   } else if (First) {
   3739     // We set the declaration to have the computed exception spec here.
   3740     // We know there are no parameters.
   3741     EPI.ExtInfo = CtorType->getExtInfo();
   3742     CD->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
   3743   }
   3744 
   3745   if (HadError) {
   3746     CD->setInvalidDecl();
   3747     return;
   3748   }
   3749 
   3750   if (ShouldDeleteSpecialMember(CD, CXXDefaultConstructor)) {
   3751     if (First) {
   3752       CD->setDeletedAsWritten();
   3753     } else {
   3754       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   3755         << CXXDefaultConstructor;
   3756       CD->setInvalidDecl();
   3757     }
   3758   }
   3759 }
   3760 
   3761 void Sema::CheckExplicitlyDefaultedCopyConstructor(CXXConstructorDecl *CD) {
   3762   assert(CD->isExplicitlyDefaulted() && CD->isCopyConstructor());
   3763 
   3764   // Whether this was the first-declared instance of the constructor.
   3765   bool First = CD == CD->getCanonicalDecl();
   3766 
   3767   bool HadError = false;
   3768   if (CD->getNumParams() != 1) {
   3769     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_params)
   3770       << CD->getSourceRange();
   3771     HadError = true;
   3772   }
   3773 
   3774   ImplicitExceptionSpecification Spec(Context);
   3775   bool Const;
   3776   llvm::tie(Spec, Const) =
   3777     ComputeDefaultedCopyCtorExceptionSpecAndConst(CD->getParent());
   3778 
   3779   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3780   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   3781                           *ExceptionType = Context.getFunctionType(
   3782                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3783 
   3784   // Check for parameter type matching.
   3785   // This is a copy ctor so we know it's a cv-qualified reference to T.
   3786   QualType ArgType = CtorType->getArgType(0);
   3787   if (ArgType->getPointeeType().isVolatileQualified()) {
   3788     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_volatile_param);
   3789     HadError = true;
   3790   }
   3791   if (ArgType->getPointeeType().isConstQualified() && !Const) {
   3792     Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_const_param);
   3793     HadError = true;
   3794   }
   3795 
   3796   if (CtorType->hasExceptionSpec()) {
   3797     if (CheckEquivalentExceptionSpec(
   3798           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3799             << CXXCopyConstructor,
   3800           PDiag(),
   3801           ExceptionType, SourceLocation(),
   3802           CtorType, CD->getLocation())) {
   3803       HadError = true;
   3804     }
   3805   } else if (First) {
   3806     // We set the declaration to have the computed exception spec here.
   3807     // We duplicate the one parameter type.
   3808     EPI.ExtInfo = CtorType->getExtInfo();
   3809     CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
   3810   }
   3811 
   3812   if (HadError) {
   3813     CD->setInvalidDecl();
   3814     return;
   3815   }
   3816 
   3817   if (ShouldDeleteSpecialMember(CD, CXXCopyConstructor)) {
   3818     if (First) {
   3819       CD->setDeletedAsWritten();
   3820     } else {
   3821       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   3822         << CXXCopyConstructor;
   3823       CD->setInvalidDecl();
   3824     }
   3825   }
   3826 }
   3827 
   3828 void Sema::CheckExplicitlyDefaultedCopyAssignment(CXXMethodDecl *MD) {
   3829   assert(MD->isExplicitlyDefaulted());
   3830 
   3831   // Whether this was the first-declared instance of the operator
   3832   bool First = MD == MD->getCanonicalDecl();
   3833 
   3834   bool HadError = false;
   3835   if (MD->getNumParams() != 1) {
   3836     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_params)
   3837       << MD->getSourceRange();
   3838     HadError = true;
   3839   }
   3840 
   3841   QualType ReturnType =
   3842     MD->getType()->getAs<FunctionType>()->getResultType();
   3843   if (!ReturnType->isLValueReferenceType() ||
   3844       !Context.hasSameType(
   3845         Context.getCanonicalType(ReturnType->getPointeeType()),
   3846         Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
   3847     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_return_type);
   3848     HadError = true;
   3849   }
   3850 
   3851   ImplicitExceptionSpecification Spec(Context);
   3852   bool Const;
   3853   llvm::tie(Spec, Const) =
   3854     ComputeDefaultedCopyCtorExceptionSpecAndConst(MD->getParent());
   3855 
   3856   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3857   const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
   3858                           *ExceptionType = Context.getFunctionType(
   3859                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3860 
   3861   QualType ArgType = OperType->getArgType(0);
   3862   if (!ArgType->isLValueReferenceType()) {
   3863     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
   3864     HadError = true;
   3865   } else {
   3866     if (ArgType->getPointeeType().isVolatileQualified()) {
   3867       Diag(MD->getLocation(), diag::err_defaulted_copy_assign_volatile_param);
   3868       HadError = true;
   3869     }
   3870     if (ArgType->getPointeeType().isConstQualified() && !Const) {
   3871       Diag(MD->getLocation(), diag::err_defaulted_copy_assign_const_param);
   3872       HadError = true;
   3873     }
   3874   }
   3875 
   3876   if (OperType->getTypeQuals()) {
   3877     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_quals);
   3878     HadError = true;
   3879   }
   3880 
   3881   if (OperType->hasExceptionSpec()) {
   3882     if (CheckEquivalentExceptionSpec(
   3883           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3884             << CXXCopyAssignment,
   3885           PDiag(),
   3886           ExceptionType, SourceLocation(),
   3887           OperType, MD->getLocation())) {
   3888       HadError = true;
   3889     }
   3890   } else if (First) {
   3891     // We set the declaration to have the computed exception spec here.
   3892     // We duplicate the one parameter type.
   3893     EPI.RefQualifier = OperType->getRefQualifier();
   3894     EPI.ExtInfo = OperType->getExtInfo();
   3895     MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
   3896   }
   3897 
   3898   if (HadError) {
   3899     MD->setInvalidDecl();
   3900     return;
   3901   }
   3902 
   3903   if (ShouldDeleteCopyAssignmentOperator(MD)) {
   3904     if (First) {
   3905       MD->setDeletedAsWritten();
   3906     } else {
   3907       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
   3908         << CXXCopyAssignment;
   3909       MD->setInvalidDecl();
   3910     }
   3911   }
   3912 }
   3913 
   3914 void Sema::CheckExplicitlyDefaultedMoveConstructor(CXXConstructorDecl *CD) {
   3915   assert(CD->isExplicitlyDefaulted() && CD->isMoveConstructor());
   3916 
   3917   // Whether this was the first-declared instance of the constructor.
   3918   bool First = CD == CD->getCanonicalDecl();
   3919 
   3920   bool HadError = false;
   3921   if (CD->getNumParams() != 1) {
   3922     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_params)
   3923       << CD->getSourceRange();
   3924     HadError = true;
   3925   }
   3926 
   3927   ImplicitExceptionSpecification Spec(
   3928       ComputeDefaultedMoveCtorExceptionSpec(CD->getParent()));
   3929 
   3930   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   3931   const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
   3932                           *ExceptionType = Context.getFunctionType(
   3933                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   3934 
   3935   // Check for parameter type matching.
   3936   // This is a move ctor so we know it's a cv-qualified rvalue reference to T.
   3937   QualType ArgType = CtorType->getArgType(0);
   3938   if (ArgType->getPointeeType().isVolatileQualified()) {
   3939     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_volatile_param);
   3940     HadError = true;
   3941   }
   3942   if (ArgType->getPointeeType().isConstQualified()) {
   3943     Diag(CD->getLocation(), diag::err_defaulted_move_ctor_const_param);
   3944     HadError = true;
   3945   }
   3946 
   3947   if (CtorType->hasExceptionSpec()) {
   3948     if (CheckEquivalentExceptionSpec(
   3949           PDiag(diag::err_incorrect_defaulted_exception_spec)
   3950             << CXXMoveConstructor,
   3951           PDiag(),
   3952           ExceptionType, SourceLocation(),
   3953           CtorType, CD->getLocation())) {
   3954       HadError = true;
   3955     }
   3956   } else if (First) {
   3957     // We set the declaration to have the computed exception spec here.
   3958     // We duplicate the one parameter type.
   3959     EPI.ExtInfo = CtorType->getExtInfo();
   3960     CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
   3961   }
   3962 
   3963   if (HadError) {
   3964     CD->setInvalidDecl();
   3965     return;
   3966   }
   3967 
   3968   if (ShouldDeleteSpecialMember(CD, CXXMoveConstructor)) {
   3969     if (First) {
   3970       CD->setDeletedAsWritten();
   3971     } else {
   3972       Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
   3973         << CXXMoveConstructor;
   3974       CD->setInvalidDecl();
   3975     }
   3976   }
   3977 }
   3978 
   3979 void Sema::CheckExplicitlyDefaultedMoveAssignment(CXXMethodDecl *MD) {
   3980   assert(MD->isExplicitlyDefaulted());
   3981 
   3982   // Whether this was the first-declared instance of the operator
   3983   bool First = MD == MD->getCanonicalDecl();
   3984 
   3985   bool HadError = false;
   3986   if (MD->getNumParams() != 1) {
   3987     Diag(MD->getLocation(), diag::err_defaulted_move_assign_params)
   3988       << MD->getSourceRange();
   3989     HadError = true;
   3990   }
   3991 
   3992   QualType ReturnType =
   3993     MD->getType()->getAs<FunctionType>()->getResultType();
   3994   if (!ReturnType->isLValueReferenceType() ||
   3995       !Context.hasSameType(
   3996         Context.getCanonicalType(ReturnType->getPointeeType()),
   3997         Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
   3998     Diag(MD->getLocation(), diag::err_defaulted_move_assign_return_type);
   3999     HadError = true;
   4000   }
   4001 
   4002   ImplicitExceptionSpecification Spec(
   4003       ComputeDefaultedMoveCtorExceptionSpec(MD->getParent()));
   4004 
   4005   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4006   const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
   4007                           *ExceptionType = Context.getFunctionType(
   4008                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4009 
   4010   QualType ArgType = OperType->getArgType(0);
   4011   if (!ArgType->isRValueReferenceType()) {
   4012     Diag(MD->getLocation(), diag::err_defaulted_move_assign_not_ref);
   4013     HadError = true;
   4014   } else {
   4015     if (ArgType->getPointeeType().isVolatileQualified()) {
   4016       Diag(MD->getLocation(), diag::err_defaulted_move_assign_volatile_param);
   4017       HadError = true;
   4018     }
   4019     if (ArgType->getPointeeType().isConstQualified()) {
   4020       Diag(MD->getLocation(), diag::err_defaulted_move_assign_const_param);
   4021       HadError = true;
   4022     }
   4023   }
   4024 
   4025   if (OperType->getTypeQuals()) {
   4026     Diag(MD->getLocation(), diag::err_defaulted_move_assign_quals);
   4027     HadError = true;
   4028   }
   4029 
   4030   if (OperType->hasExceptionSpec()) {
   4031     if (CheckEquivalentExceptionSpec(
   4032           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4033             << CXXMoveAssignment,
   4034           PDiag(),
   4035           ExceptionType, SourceLocation(),
   4036           OperType, MD->getLocation())) {
   4037       HadError = true;
   4038     }
   4039   } else if (First) {
   4040     // We set the declaration to have the computed exception spec here.
   4041     // We duplicate the one parameter type.
   4042     EPI.RefQualifier = OperType->getRefQualifier();
   4043     EPI.ExtInfo = OperType->getExtInfo();
   4044     MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
   4045   }
   4046 
   4047   if (HadError) {
   4048     MD->setInvalidDecl();
   4049     return;
   4050   }
   4051 
   4052   if (ShouldDeleteMoveAssignmentOperator(MD)) {
   4053     if (First) {
   4054       MD->setDeletedAsWritten();
   4055     } else {
   4056       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
   4057         << CXXMoveAssignment;
   4058       MD->setInvalidDecl();
   4059     }
   4060   }
   4061 }
   4062 
   4063 void Sema::CheckExplicitlyDefaultedDestructor(CXXDestructorDecl *DD) {
   4064   assert(DD->isExplicitlyDefaulted());
   4065 
   4066   // Whether this was the first-declared instance of the destructor.
   4067   bool First = DD == DD->getCanonicalDecl();
   4068 
   4069   ImplicitExceptionSpecification Spec
   4070     = ComputeDefaultedDtorExceptionSpec(DD->getParent());
   4071   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   4072   const FunctionProtoType *DtorType = DD->getType()->getAs<FunctionProtoType>(),
   4073                           *ExceptionType = Context.getFunctionType(
   4074                          Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
   4075 
   4076   if (DtorType->hasExceptionSpec()) {
   4077     if (CheckEquivalentExceptionSpec(
   4078           PDiag(diag::err_incorrect_defaulted_exception_spec)
   4079             << CXXDestructor,
   4080           PDiag(),
   4081           ExceptionType, SourceLocation(),
   4082           DtorType, DD->getLocation())) {
   4083       DD->setInvalidDecl();
   4084       return;
   4085     }
   4086   } else if (First) {
   4087     // We set the declaration to have the computed exception spec here.
   4088     // There are no parameters.
   4089     EPI.ExtInfo = DtorType->getExtInfo();
   4090     DD->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
   4091   }
   4092 
   4093   if (ShouldDeleteDestructor(DD)) {
   4094     if (First) {
   4095       DD->setDeletedAsWritten();
   4096     } else {
   4097       Diag(DD->getLocation(), diag::err_out_of_line_default_deletes)
   4098         << CXXDestructor;
   4099       DD->setInvalidDecl();
   4100     }
   4101   }
   4102 }
   4103 
   4104 /// This function implements the following C++0x paragraphs:
   4105 ///  - [class.ctor]/5
   4106 ///  - [class.copy]/11
   4107 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM) {
   4108   assert(!MD->isInvalidDecl());
   4109   CXXRecordDecl *RD = MD->getParent();
   4110   assert(!RD->isDependentType() && "do deletion after instantiation");
   4111   if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
   4112     return false;
   4113 
   4114   bool IsUnion = RD->isUnion();
   4115   bool IsConstructor = false;
   4116   bool IsAssignment = false;
   4117   bool IsMove = false;
   4118 
   4119   bool ConstArg = false;
   4120 
   4121   switch (CSM) {
   4122   case CXXDefaultConstructor:
   4123     IsConstructor = true;
   4124     break;
   4125   case CXXCopyConstructor:
   4126     IsConstructor = true;
   4127     ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
   4128     break;
   4129   case CXXMoveConstructor:
   4130     IsConstructor = true;
   4131     IsMove = true;
   4132     break;
   4133   default:
   4134     llvm_unreachable("function only currently implemented for default ctors");
   4135   }
   4136 
   4137   SourceLocation Loc = MD->getLocation();
   4138 
   4139   // Do access control from the special member function
   4140   ContextRAII MethodContext(*this, MD);
   4141 
   4142   bool AllConst = true;
   4143 
   4144   // We do this because we should never actually use an anonymous
   4145   // union's constructor.
   4146   if (IsUnion && RD->isAnonymousStructOrUnion())
   4147     return false;
   4148 
   4149   // FIXME: We should put some diagnostic logic right into this function.
   4150 
   4151   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   4152                                           BE = RD->bases_end();
   4153        BI != BE; ++BI) {
   4154     // We'll handle this one later
   4155     if (BI->isVirtual())
   4156       continue;
   4157 
   4158     CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
   4159     assert(BaseDecl && "base isn't a CXXRecordDecl");
   4160 
   4161     // Unless we have an assignment operator, the base's destructor must
   4162     // be accessible and not deleted.
   4163     if (!IsAssignment) {
   4164       CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
   4165       if (BaseDtor->isDeleted())
   4166         return true;
   4167       if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
   4168           AR_accessible)
   4169         return true;
   4170     }
   4171 
   4172     // Finding the corresponding member in the base should lead to a
   4173     // unique, accessible, non-deleted function. If we are doing
   4174     // a destructor, we have already checked this case.
   4175     if (CSM != CXXDestructor) {
   4176       SpecialMemberOverloadResult *SMOR =
   4177         LookupSpecialMember(BaseDecl, CSM, ConstArg, false, false, false,
   4178                             false);
   4179       if (!SMOR->hasSuccess())
   4180         return true;
   4181       CXXMethodDecl *BaseMember = SMOR->getMethod();
   4182       if (IsConstructor) {
   4183         CXXConstructorDecl *BaseCtor = cast<CXXConstructorDecl>(BaseMember);
   4184         if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(),
   4185                                    PDiag()) != AR_accessible)
   4186           return true;
   4187 
   4188         // For a move operation, the corresponding operation must actually
   4189         // be a move operation (and not a copy selected by overload
   4190         // resolution) unless we are working on a trivially copyable class.
   4191         if (IsMove && !BaseCtor->isMoveConstructor() &&
   4192             !BaseDecl->isTriviallyCopyable())
   4193           return true;
   4194       }
   4195     }
   4196   }
   4197 
   4198   for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
   4199                                           BE = RD->vbases_end();
   4200        BI != BE; ++BI) {
   4201     CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
   4202     assert(BaseDecl && "base isn't a CXXRecordDecl");
   4203 
   4204     // Unless we have an assignment operator, the base's destructor must
   4205     // be accessible and not deleted.
   4206     if (!IsAssignment) {
   4207       CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
   4208       if (BaseDtor->isDeleted())
   4209         return true;
   4210       if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
   4211           AR_accessible)
   4212         return true;
   4213     }
   4214 
   4215     // Finding the corresponding member in the base should lead to a
   4216     // unique, accessible, non-deleted function.
   4217     if (CSM != CXXDestructor) {
   4218       SpecialMemberOverloadResult *SMOR =
   4219         LookupSpecialMember(BaseDecl, CSM, ConstArg, false, false, false,
   4220                             false);
   4221       if (!SMOR->hasSuccess())
   4222         return true;
   4223       CXXMethodDecl *BaseMember = SMOR->getMethod();
   4224       if (IsConstructor) {
   4225         CXXConstructorDecl *BaseCtor = cast<CXXConstructorDecl>(BaseMember);
   4226         if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(),
   4227                                    PDiag()) != AR_accessible)
   4228           return true;
   4229 
   4230         // For a move operation, the corresponding operation must actually
   4231         // be a move operation (and not a copy selected by overload
   4232         // resolution) unless we are working on a trivially copyable class.
   4233         if (IsMove && !BaseCtor->isMoveConstructor() &&
   4234             !BaseDecl->isTriviallyCopyable())
   4235           return true;
   4236       }
   4237     }
   4238   }
   4239 
   4240   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   4241                                      FE = RD->field_end();
   4242        FI != FE; ++FI) {
   4243     if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
   4244       continue;
   4245 
   4246     QualType FieldType = Context.getBaseElementType(FI->getType());
   4247     CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4248 
   4249     // For a default constructor, all references must be initialized in-class
   4250     // and, if a union, it must have a non-const member.
   4251     if (CSM == CXXDefaultConstructor) {
   4252       if (FieldType->isReferenceType() && !FI->hasInClassInitializer())
   4253         return true;
   4254 
   4255       if (IsUnion && !FieldType.isConstQualified())
   4256         AllConst = false;
   4257     // For a copy constructor, data members must not be of rvalue reference
   4258     // type.
   4259     } else if (CSM == CXXCopyConstructor) {
   4260       if (FieldType->isRValueReferenceType())
   4261         return true;
   4262     }
   4263 
   4264     if (FieldRecord) {
   4265       // For a default constructor, a const member must have a user-provided
   4266       // default constructor or else be explicitly initialized.
   4267       if (CSM == CXXDefaultConstructor && FieldType.isConstQualified() &&
   4268           !FI->hasInClassInitializer() &&
   4269           !FieldRecord->hasUserProvidedDefaultConstructor())
   4270         return true;
   4271 
   4272       // Some additional restrictions exist on the variant members.
   4273       if (!IsUnion && FieldRecord->isUnion() &&
   4274           FieldRecord->isAnonymousStructOrUnion()) {
   4275         // We're okay to reuse AllConst here since we only care about the
   4276         // value otherwise if we're in a union.
   4277         AllConst = true;
   4278 
   4279         for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4280                                            UE = FieldRecord->field_end();
   4281              UI != UE; ++UI) {
   4282           QualType UnionFieldType = Context.getBaseElementType(UI->getType());
   4283           CXXRecordDecl *UnionFieldRecord =
   4284             UnionFieldType->getAsCXXRecordDecl();
   4285 
   4286           if (!UnionFieldType.isConstQualified())
   4287             AllConst = false;
   4288 
   4289           if (UnionFieldRecord) {
   4290             // FIXME: Checking for accessibility and validity of this
   4291             //        destructor is technically going beyond the
   4292             //        standard, but this is believed to be a defect.
   4293             if (!IsAssignment) {
   4294               CXXDestructorDecl *FieldDtor = LookupDestructor(UnionFieldRecord);
   4295               if (FieldDtor->isDeleted())
   4296                 return true;
   4297               if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
   4298                   AR_accessible)
   4299                 return true;
   4300               if (!FieldDtor->isTrivial())
   4301                 return true;
   4302             }
   4303 
   4304             if (CSM != CXXDestructor) {
   4305               SpecialMemberOverloadResult *SMOR =
   4306                 LookupSpecialMember(UnionFieldRecord, CSM, ConstArg, false,
   4307                                     false, false, false);
   4308               // FIXME: Checking for accessibility and validity of this
   4309               //        corresponding member is technically going beyond the
   4310               //        standard, but this is believed to be a defect.
   4311               if (!SMOR->hasSuccess())
   4312                 return true;
   4313 
   4314               CXXMethodDecl *FieldMember = SMOR->getMethod();
   4315               // A member of a union must have a trivial corresponding
   4316               // constructor.
   4317               if (!FieldMember->isTrivial())
   4318                 return true;
   4319 
   4320               if (IsConstructor) {
   4321                 CXXConstructorDecl *FieldCtor = cast<CXXConstructorDecl>(FieldMember);
   4322                 if (CheckConstructorAccess(Loc, FieldCtor, FieldCtor->getAccess(),
   4323                                            PDiag()) != AR_accessible)
   4324                 return true;
   4325               }
   4326             }
   4327           }
   4328         }
   4329 
   4330         // At least one member in each anonymous union must be non-const
   4331         if (CSM == CXXDefaultConstructor && AllConst)
   4332           return true;
   4333 
   4334         // Don't try to initialize the anonymous union
   4335         // This is technically non-conformant, but sanity demands it.
   4336         continue;
   4337       }
   4338 
   4339       // Unless we're doing assignment, the field's destructor must be
   4340       // accessible and not deleted.
   4341       if (!IsAssignment) {
   4342         CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
   4343         if (FieldDtor->isDeleted())
   4344           return true;
   4345         if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
   4346             AR_accessible)
   4347           return true;
   4348       }
   4349 
   4350       // Check that the corresponding member of the field is accessible,
   4351       // unique, and non-deleted. We don't do this if it has an explicit
   4352       // initialization when default-constructing.
   4353       if (CSM != CXXDestructor &&
   4354           (CSM != CXXDefaultConstructor || !FI->hasInClassInitializer())) {
   4355         SpecialMemberOverloadResult *SMOR =
   4356           LookupSpecialMember(FieldRecord, CSM, ConstArg, false, false, false,
   4357                               false);
   4358         if (!SMOR->hasSuccess())
   4359           return true;
   4360 
   4361         CXXMethodDecl *FieldMember = SMOR->getMethod();
   4362         if (IsConstructor) {
   4363           CXXConstructorDecl *FieldCtor = cast<CXXConstructorDecl>(FieldMember);
   4364           if (CheckConstructorAccess(Loc, FieldCtor, FieldCtor->getAccess(),
   4365                                      PDiag()) != AR_accessible)
   4366           return true;
   4367 
   4368           // For a move operation, the corresponding operation must actually
   4369           // be a move operation (and not a copy selected by overload
   4370           // resolution) unless we are working on a trivially copyable class.
   4371           if (IsMove && !FieldCtor->isMoveConstructor() &&
   4372               !FieldRecord->isTriviallyCopyable())
   4373             return true;
   4374         }
   4375 
   4376         // We need the corresponding member of a union to be trivial so that
   4377         // we can safely copy them all simultaneously.
   4378         // FIXME: Note that performing the check here (where we rely on the lack
   4379         // of an in-class initializer) is technically ill-formed. However, this
   4380         // seems most obviously to be a bug in the standard.
   4381         if (IsUnion && !FieldMember->isTrivial())
   4382           return true;
   4383       }
   4384     } else if (CSM == CXXDefaultConstructor && !IsUnion &&
   4385                FieldType.isConstQualified() && !FI->hasInClassInitializer()) {
   4386       // We can't initialize a const member of non-class type to any value.
   4387       return true;
   4388     }
   4389   }
   4390 
   4391   // We can't have all const members in a union when default-constructing,
   4392   // or else they're all nonsensical garbage values that can't be changed.
   4393   if (CSM == CXXDefaultConstructor && IsUnion && AllConst)
   4394     return true;
   4395 
   4396   return false;
   4397 }
   4398 
   4399 bool Sema::ShouldDeleteCopyAssignmentOperator(CXXMethodDecl *MD) {
   4400   CXXRecordDecl *RD = MD->getParent();
   4401   assert(!RD->isDependentType() && "do deletion after instantiation");
   4402   if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
   4403     return false;
   4404 
   4405   SourceLocation Loc = MD->getLocation();
   4406 
   4407   // Do access control from the constructor
   4408   ContextRAII MethodContext(*this, MD);
   4409 
   4410   bool Union = RD->isUnion();
   4411 
   4412   unsigned ArgQuals =
   4413     MD->getParamDecl(0)->getType()->getPointeeType().isConstQualified() ?
   4414       Qualifiers::Const : 0;
   4415 
   4416   // We do this because we should never actually use an anonymous
   4417   // union's constructor.
   4418   if (Union && RD->isAnonymousStructOrUnion())
   4419     return false;
   4420 
   4421   // FIXME: We should put some diagnostic logic right into this function.
   4422 
   4423   // C++0x [class.copy]/20
   4424   //    A defaulted [copy] assignment operator for class X is defined as deleted
   4425   //    if X has:
   4426 
   4427   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   4428                                           BE = RD->bases_end();
   4429        BI != BE; ++BI) {
   4430     // We'll handle this one later
   4431     if (BI->isVirtual())
   4432       continue;
   4433 
   4434     QualType BaseType = BI->getType();
   4435     CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
   4436     assert(BaseDecl && "base isn't a CXXRecordDecl");
   4437 
   4438     // -- a [direct base class] B that cannot be [copied] because overload
   4439     //    resolution, as applied to B's [copy] assignment operator, results in
   4440     //    an ambiguity or a function that is deleted or inaccessible from the
   4441     //    assignment operator
   4442     CXXMethodDecl *CopyOper = LookupCopyingAssignment(BaseDecl, ArgQuals, false,
   4443                                                       0);
   4444     if (!CopyOper || CopyOper->isDeleted())
   4445       return true;
   4446     if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
   4447       return true;
   4448   }
   4449 
   4450   for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
   4451                                           BE = RD->vbases_end();
   4452        BI != BE; ++BI) {
   4453     QualType BaseType = BI->getType();
   4454     CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
   4455     assert(BaseDecl && "base isn't a CXXRecordDecl");
   4456 
   4457     // -- a [virtual base class] B that cannot be [copied] because overload
   4458     //    resolution, as applied to B's [copy] assignment operator, results in
   4459     //    an ambiguity or a function that is deleted or inaccessible from the
   4460     //    assignment operator
   4461     CXXMethodDecl *CopyOper = LookupCopyingAssignment(BaseDecl, ArgQuals, false,
   4462                                                       0);
   4463     if (!CopyOper || CopyOper->isDeleted())
   4464       return true;
   4465     if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
   4466       return true;
   4467   }
   4468 
   4469   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   4470                                      FE = RD->field_end();
   4471        FI != FE; ++FI) {
   4472     if (FI->isUnnamedBitfield())
   4473       continue;
   4474 
   4475     QualType FieldType = Context.getBaseElementType(FI->getType());
   4476 
   4477     // -- a non-static data member of reference type
   4478     if (FieldType->isReferenceType())
   4479       return true;
   4480 
   4481     // -- a non-static data member of const non-class type (or array thereof)
   4482     if (FieldType.isConstQualified() && !FieldType->isRecordType())
   4483       return true;
   4484 
   4485     CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4486 
   4487     if (FieldRecord) {
   4488       // This is an anonymous union
   4489       if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
   4490         // Anonymous unions inside unions do not variant members create
   4491         if (!Union) {
   4492           for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4493                                              UE = FieldRecord->field_end();
   4494                UI != UE; ++UI) {
   4495             QualType UnionFieldType = Context.getBaseElementType(UI->getType());
   4496             CXXRecordDecl *UnionFieldRecord =
   4497               UnionFieldType->getAsCXXRecordDecl();
   4498 
   4499             // -- a variant member with a non-trivial [copy] assignment operator
   4500             //    and X is a union-like class
   4501             if (UnionFieldRecord &&
   4502                 !UnionFieldRecord->hasTrivialCopyAssignment())
   4503               return true;
   4504           }
   4505         }
   4506 
   4507         // Don't try to initalize an anonymous union
   4508         continue;
   4509       // -- a variant member with a non-trivial [copy] assignment operator
   4510       //    and X is a union-like class
   4511       } else if (Union && !FieldRecord->hasTrivialCopyAssignment()) {
   4512           return true;
   4513       }
   4514 
   4515       CXXMethodDecl *CopyOper = LookupCopyingAssignment(FieldRecord, ArgQuals,
   4516                                                         false, 0);
   4517       if (!CopyOper || CopyOper->isDeleted())
   4518         return true;
   4519       if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
   4520         return true;
   4521     }
   4522   }
   4523 
   4524   return false;
   4525 }
   4526 
   4527 bool Sema::ShouldDeleteMoveAssignmentOperator(CXXMethodDecl *MD) {
   4528   CXXRecordDecl *RD = MD->getParent();
   4529   assert(!RD->isDependentType() && "do deletion after instantiation");
   4530   if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
   4531     return false;
   4532 
   4533   SourceLocation Loc = MD->getLocation();
   4534 
   4535   // Do access control from the constructor
   4536   ContextRAII MethodContext(*this, MD);
   4537 
   4538   bool Union = RD->isUnion();
   4539 
   4540   // We do this because we should never actually use an anonymous
   4541   // union's constructor.
   4542   if (Union && RD->isAnonymousStructOrUnion())
   4543     return false;
   4544 
   4545   // C++0x [class.copy]/20
   4546   //    A defaulted [move] assignment operator for class X is defined as deleted
   4547   //    if X has:
   4548 
   4549   //    -- for the move constructor, [...] any direct or indirect virtual base
   4550   //       class.
   4551   if (RD->getNumVBases() != 0)
   4552     return true;
   4553 
   4554   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   4555                                           BE = RD->bases_end();
   4556        BI != BE; ++BI) {
   4557 
   4558     QualType BaseType = BI->getType();
   4559     CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
   4560     assert(BaseDecl && "base isn't a CXXRecordDecl");
   4561 
   4562     // -- a [direct base class] B that cannot be [moved] because overload
   4563     //    resolution, as applied to B's [move] assignment operator, results in
   4564     //    an ambiguity or a function that is deleted or inaccessible from the
   4565     //    assignment operator
   4566     CXXMethodDecl *MoveOper = LookupMovingAssignment(BaseDecl, false, 0);
   4567     if (!MoveOper || MoveOper->isDeleted())
   4568       return true;
   4569     if (CheckDirectMemberAccess(Loc, MoveOper, PDiag()) != AR_accessible)
   4570       return true;
   4571 
   4572     // -- for the move assignment operator, a [direct base class] with a type
   4573     //    that does not have a move assignment operator and is not trivially
   4574     //    copyable.
   4575     if (!MoveOper->isMoveAssignmentOperator() &&
   4576         !BaseDecl->isTriviallyCopyable())
   4577       return true;
   4578   }
   4579 
   4580   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   4581                                      FE = RD->field_end();
   4582        FI != FE; ++FI) {
   4583     if (FI->isUnnamedBitfield())
   4584       continue;
   4585 
   4586     QualType FieldType = Context.getBaseElementType(FI->getType());
   4587 
   4588     // -- a non-static data member of reference type
   4589     if (FieldType->isReferenceType())
   4590       return true;
   4591 
   4592     // -- a non-static data member of const non-class type (or array thereof)
   4593     if (FieldType.isConstQualified() && !FieldType->isRecordType())
   4594       return true;
   4595 
   4596     CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4597 
   4598     if (FieldRecord) {
   4599       // This is an anonymous union
   4600       if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
   4601         // Anonymous unions inside unions do not variant members create
   4602         if (!Union) {
   4603           for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4604                                              UE = FieldRecord->field_end();
   4605                UI != UE; ++UI) {
   4606             QualType UnionFieldType = Context.getBaseElementType(UI->getType());
   4607             CXXRecordDecl *UnionFieldRecord =
   4608               UnionFieldType->getAsCXXRecordDecl();
   4609 
   4610             // -- a variant member with a non-trivial [move] assignment operator
   4611             //    and X is a union-like class
   4612             if (UnionFieldRecord &&
   4613                 !UnionFieldRecord->hasTrivialMoveAssignment())
   4614               return true;
   4615           }
   4616         }
   4617 
   4618         // Don't try to initalize an anonymous union
   4619         continue;
   4620       // -- a variant member with a non-trivial [move] assignment operator
   4621       //    and X is a union-like class
   4622       } else if (Union && !FieldRecord->hasTrivialMoveAssignment()) {
   4623           return true;
   4624       }
   4625 
   4626       CXXMethodDecl *MoveOper = LookupMovingAssignment(FieldRecord, false, 0);
   4627       if (!MoveOper || MoveOper->isDeleted())
   4628         return true;
   4629       if (CheckDirectMemberAccess(Loc, MoveOper, PDiag()) != AR_accessible)
   4630         return true;
   4631 
   4632       // -- for the move assignment operator, a [non-static data member] with a
   4633       //    type that does not have a move assignment operator and is not
   4634       //    trivially copyable.
   4635       if (!MoveOper->isMoveAssignmentOperator() &&
   4636           !FieldRecord->isTriviallyCopyable())
   4637         return true;
   4638     }
   4639   }
   4640 
   4641   return false;
   4642 }
   4643 
   4644 bool Sema::ShouldDeleteDestructor(CXXDestructorDecl *DD) {
   4645   CXXRecordDecl *RD = DD->getParent();
   4646   assert(!RD->isDependentType() && "do deletion after instantiation");
   4647   if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
   4648     return false;
   4649 
   4650   SourceLocation Loc = DD->getLocation();
   4651 
   4652   // Do access control from the destructor
   4653   ContextRAII CtorContext(*this, DD);
   4654 
   4655   bool Union = RD->isUnion();
   4656 
   4657   // We do this because we should never actually use an anonymous
   4658   // union's destructor.
   4659   if (Union && RD->isAnonymousStructOrUnion())
   4660     return false;
   4661 
   4662   // C++0x [class.dtor]p5
   4663   //    A defaulted destructor for a class X is defined as deleted if:
   4664   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
   4665                                           BE = RD->bases_end();
   4666        BI != BE; ++BI) {
   4667     // We'll handle this one later
   4668     if (BI->isVirtual())
   4669       continue;
   4670 
   4671     CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
   4672     CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
   4673     assert(BaseDtor && "base has no destructor");
   4674 
   4675     // -- any direct or virtual base class has a deleted destructor or
   4676     //    a destructor that is inaccessible from the defaulted destructor
   4677     if (BaseDtor->isDeleted())
   4678       return true;
   4679     if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
   4680         AR_accessible)
   4681       return true;
   4682   }
   4683 
   4684   for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
   4685                                           BE = RD->vbases_end();
   4686        BI != BE; ++BI) {
   4687     CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
   4688     CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
   4689     assert(BaseDtor && "base has no destructor");
   4690 
   4691     // -- any direct or virtual base class has a deleted destructor or
   4692     //    a destructor that is inaccessible from the defaulted destructor
   4693     if (BaseDtor->isDeleted())
   4694       return true;
   4695     if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
   4696         AR_accessible)
   4697       return true;
   4698   }
   4699 
   4700   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
   4701                                      FE = RD->field_end();
   4702        FI != FE; ++FI) {
   4703     QualType FieldType = Context.getBaseElementType(FI->getType());
   4704     CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
   4705     if (FieldRecord) {
   4706       if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
   4707          for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
   4708                                             UE = FieldRecord->field_end();
   4709               UI != UE; ++UI) {
   4710            QualType UnionFieldType = Context.getBaseElementType(FI->getType());
   4711            CXXRecordDecl *UnionFieldRecord =
   4712              UnionFieldType->getAsCXXRecordDecl();
   4713 
   4714            // -- X is a union-like class that has a variant member with a non-
   4715            //    trivial destructor.
   4716            if (UnionFieldRecord && !UnionFieldRecord->hasTrivialDestructor())
   4717              return true;
   4718          }
   4719       // Technically we are supposed to do this next check unconditionally.
   4720       // But that makes absolutely no sense.
   4721       } else {
   4722         CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
   4723 
   4724         // -- any of the non-static data members has class type M (or array
   4725         //    thereof) and M has a deleted destructor or a destructor that is
   4726         //    inaccessible from the defaulted destructor
   4727         if (FieldDtor->isDeleted())
   4728           return true;
   4729         if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
   4730           AR_accessible)
   4731         return true;
   4732 
   4733         // -- X is a union-like class that has a variant member with a non-
   4734         //    trivial destructor.
   4735         if (Union && !FieldDtor->isTrivial())
   4736           return true;
   4737       }
   4738     }
   4739   }
   4740 
   4741   if (DD->isVirtual()) {
   4742     FunctionDecl *OperatorDelete = 0;
   4743     DeclarationName Name =
   4744       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   4745     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete,
   4746           false))
   4747       return true;
   4748   }
   4749 
   4750 
   4751   return false;
   4752 }
   4753 
   4754 /// \brief Data used with FindHiddenVirtualMethod
   4755 namespace {
   4756   struct FindHiddenVirtualMethodData {
   4757     Sema *S;
   4758     CXXMethodDecl *Method;
   4759     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
   4760     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
   4761   };
   4762 }
   4763 
   4764 /// \brief Member lookup function that determines whether a given C++
   4765 /// method overloads virtual methods in a base class without overriding any,
   4766 /// to be used with CXXRecordDecl::lookupInBases().
   4767 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
   4768                                     CXXBasePath &Path,
   4769                                     void *UserData) {
   4770   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
   4771 
   4772   FindHiddenVirtualMethodData &Data
   4773     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
   4774 
   4775   DeclarationName Name = Data.Method->getDeclName();
   4776   assert(Name.getNameKind() == DeclarationName::Identifier);
   4777 
   4778   bool foundSameNameMethod = false;
   4779   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
   4780   for (Path.Decls = BaseRecord->lookup(Name);
   4781        Path.Decls.first != Path.Decls.second;
   4782        ++Path.Decls.first) {
   4783     NamedDecl *D = *Path.Decls.first;
   4784     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
   4785       MD = MD->getCanonicalDecl();
   4786       foundSameNameMethod = true;
   4787       // Interested only in hidden virtual methods.
   4788       if (!MD->isVirtual())
   4789         continue;
   4790       // If the method we are checking overrides a method from its base
   4791       // don't warn about the other overloaded methods.
   4792       if (!Data.S->IsOverload(Data.Method, MD, false))
   4793         return true;
   4794       // Collect the overload only if its hidden.
   4795       if (!Data.OverridenAndUsingBaseMethods.count(MD))
   4796         overloadedMethods.push_back(MD);
   4797     }
   4798   }
   4799 
   4800   if (foundSameNameMethod)
   4801     Data.OverloadedMethods.append(overloadedMethods.begin(),
   4802                                    overloadedMethods.end());
   4803   return foundSameNameMethod;
   4804 }
   4805 
   4806 /// \brief See if a method overloads virtual methods in a base class without
   4807 /// overriding any.
   4808 void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
   4809   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
   4810                                MD->getLocation()) == DiagnosticsEngine::Ignored)
   4811     return;
   4812   if (MD->getDeclName().getNameKind() != DeclarationName::Identifier)
   4813     return;
   4814 
   4815   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
   4816                      /*bool RecordPaths=*/false,
   4817                      /*bool DetectVirtual=*/false);
   4818   FindHiddenVirtualMethodData Data;
   4819   Data.Method = MD;
   4820   Data.S = this;
   4821 
   4822   // Keep the base methods that were overriden or introduced in the subclass
   4823   // by 'using' in a set. A base method not in this set is hidden.
   4824   for (DeclContext::lookup_result res = DC->lookup(MD->getDeclName());
   4825        res.first != res.second; ++res.first) {
   4826     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*res.first))
   4827       for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
   4828                                           E = MD->end_overridden_methods();
   4829            I != E; ++I)
   4830         Data.OverridenAndUsingBaseMethods.insert((*I)->getCanonicalDecl());
   4831     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*res.first))
   4832       if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(shad->getTargetDecl()))
   4833         Data.OverridenAndUsingBaseMethods.insert(MD->getCanonicalDecl());
   4834   }
   4835 
   4836   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
   4837       !Data.OverloadedMethods.empty()) {
   4838     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
   4839       << MD << (Data.OverloadedMethods.size() > 1);
   4840 
   4841     for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
   4842       CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
   4843       Diag(overloadedMD->getLocation(),
   4844            diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
   4845     }
   4846   }
   4847 }
   4848 
   4849 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
   4850                                              Decl *TagDecl,
   4851                                              SourceLocation LBrac,
   4852                                              SourceLocation RBrac,
   4853                                              AttributeList *AttrList) {
   4854   if (!TagDecl)
   4855     return;
   4856 
   4857   AdjustDeclIfTemplate(TagDecl);
   4858 
   4859   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
   4860               // strict aliasing violation!
   4861               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
   4862               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
   4863 
   4864   CheckCompletedCXXClass(
   4865                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
   4866 }
   4867 
   4868 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
   4869 /// special functions, such as the default constructor, copy
   4870 /// constructor, or destructor, to the given C++ class (C++
   4871 /// [special]p1).  This routine can only be executed just before the
   4872 /// definition of the class is complete.
   4873 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
   4874   if (!ClassDecl->hasUserDeclaredConstructor())
   4875     ++ASTContext::NumImplicitDefaultConstructors;
   4876 
   4877   if (!ClassDecl->hasUserDeclaredCopyConstructor())
   4878     ++ASTContext::NumImplicitCopyConstructors;
   4879 
   4880   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
   4881     ++ASTContext::NumImplicitCopyAssignmentOperators;
   4882 
   4883     // If we have a dynamic class, then the copy assignment operator may be
   4884     // virtual, so we have to declare it immediately. This ensures that, e.g.,
   4885     // it shows up in the right place in the vtable and that we diagnose
   4886     // problems with the implicit exception specification.
   4887     if (ClassDecl->isDynamicClass())
   4888       DeclareImplicitCopyAssignment(ClassDecl);
   4889   }
   4890 
   4891   if (!ClassDecl->hasUserDeclaredDestructor()) {
   4892     ++ASTContext::NumImplicitDestructors;
   4893 
   4894     // If we have a dynamic class, then the destructor may be virtual, so we
   4895     // have to declare the destructor immediately. This ensures that, e.g., it
   4896     // shows up in the right place in the vtable and that we diagnose problems
   4897     // with the implicit exception specification.
   4898     if (ClassDecl->isDynamicClass())
   4899       DeclareImplicitDestructor(ClassDecl);
   4900   }
   4901 }
   4902 
   4903 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
   4904   if (!D)
   4905     return;
   4906 
   4907   int NumParamList = D->getNumTemplateParameterLists();
   4908   for (int i = 0; i < NumParamList; i++) {
   4909     TemplateParameterList* Params = D->getTemplateParameterList(i);
   4910     for (TemplateParameterList::iterator Param = Params->begin(),
   4911                                       ParamEnd = Params->end();
   4912           Param != ParamEnd; ++Param) {
   4913       NamedDecl *Named = cast<NamedDecl>(*Param);
   4914       if (Named->getDeclName()) {
   4915         S->AddDecl(Named);
   4916         IdResolver.AddDecl(Named);
   4917       }
   4918     }
   4919   }
   4920 }
   4921 
   4922 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
   4923   if (!D)
   4924     return;
   4925 
   4926   TemplateParameterList *Params = 0;
   4927   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
   4928     Params = Template->getTemplateParameters();
   4929   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
   4930            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
   4931     Params = PartialSpec->getTemplateParameters();
   4932   else
   4933     return;
   4934 
   4935   for (TemplateParameterList::iterator Param = Params->begin(),
   4936                                     ParamEnd = Params->end();
   4937        Param != ParamEnd; ++Param) {
   4938     NamedDecl *Named = cast<NamedDecl>(*Param);
   4939     if (Named->getDeclName()) {
   4940       S->AddDecl(Named);
   4941       IdResolver.AddDecl(Named);
   4942     }
   4943   }
   4944 }
   4945 
   4946 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   4947   if (!RecordD) return;
   4948   AdjustDeclIfTemplate(RecordD);
   4949   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
   4950   PushDeclContext(S, Record);
   4951 }
   4952 
   4953 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
   4954   if (!RecordD) return;
   4955   PopDeclContext();
   4956 }
   4957 
   4958 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
   4959 /// parsing a top-level (non-nested) C++ class, and we are now
   4960 /// parsing those parts of the given Method declaration that could
   4961 /// not be parsed earlier (C++ [class.mem]p2), such as default
   4962 /// arguments. This action should enter the scope of the given
   4963 /// Method declaration as if we had just parsed the qualified method
   4964 /// name. However, it should not bring the parameters into scope;
   4965 /// that will be performed by ActOnDelayedCXXMethodParameter.
   4966 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   4967 }
   4968 
   4969 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
   4970 /// C++ method declaration. We're (re-)introducing the given
   4971 /// function parameter into scope for use in parsing later parts of
   4972 /// the method declaration. For example, we could see an
   4973 /// ActOnParamDefaultArgument event for this parameter.
   4974 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
   4975   if (!ParamD)
   4976     return;
   4977 
   4978   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
   4979 
   4980   // If this parameter has an unparsed default argument, clear it out
   4981   // to make way for the parsed default argument.
   4982   if (Param->hasUnparsedDefaultArg())
   4983     Param->setDefaultArg(0);
   4984 
   4985   S->AddDecl(Param);
   4986   if (Param->getDeclName())
   4987     IdResolver.AddDecl(Param);
   4988 }
   4989 
   4990 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
   4991 /// processing the delayed method declaration for Method. The method
   4992 /// declaration is now considered finished. There may be a separate
   4993 /// ActOnStartOfFunctionDef action later (not necessarily
   4994 /// immediately!) for this method, if it was also defined inside the
   4995 /// class body.
   4996 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
   4997   if (!MethodD)
   4998     return;
   4999 
   5000   AdjustDeclIfTemplate(MethodD);
   5001 
   5002   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
   5003 
   5004   // Now that we have our default arguments, check the constructor
   5005   // again. It could produce additional diagnostics or affect whether
   5006   // the class has implicitly-declared destructors, among other
   5007   // things.
   5008   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
   5009     CheckConstructor(Constructor);
   5010 
   5011   // Check the default arguments, which we may have added.
   5012   if (!Method->isInvalidDecl())
   5013     CheckCXXDefaultArguments(Method);
   5014 }
   5015 
   5016 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
   5017 /// the well-formedness of the constructor declarator @p D with type @p
   5018 /// R. If there are any errors in the declarator, this routine will
   5019 /// emit diagnostics and set the invalid bit to true.  In any case, the type
   5020 /// will be updated to reflect a well-formed type for the constructor and
   5021 /// returned.
   5022 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
   5023                                           StorageClass &SC) {
   5024   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
   5025 
   5026   // C++ [class.ctor]p3:
   5027   //   A constructor shall not be virtual (10.3) or static (9.4). A
   5028   //   constructor can be invoked for a const, volatile or const
   5029   //   volatile object. A constructor shall not be declared const,
   5030   //   volatile, or const volatile (9.3.2).
   5031   if (isVirtual) {
   5032     if (!D.isInvalidType())
   5033       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5034         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
   5035         << SourceRange(D.getIdentifierLoc());
   5036     D.setInvalidType();
   5037   }
   5038   if (SC == SC_Static) {
   5039     if (!D.isInvalidType())
   5040       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
   5041         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5042         << SourceRange(D.getIdentifierLoc());
   5043     D.setInvalidType();
   5044     SC = SC_None;
   5045   }
   5046 
   5047   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5048   if (FTI.TypeQuals != 0) {
   5049     if (FTI.TypeQuals & Qualifiers::Const)
   5050       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5051         << "const" << SourceRange(D.getIdentifierLoc());
   5052     if (FTI.TypeQuals & Qualifiers::Volatile)
   5053       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5054         << "volatile" << SourceRange(D.getIdentifierLoc());
   5055     if (FTI.TypeQuals & Qualifiers::Restrict)
   5056       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
   5057         << "restrict" << SourceRange(D.getIdentifierLoc());
   5058     D.setInvalidType();
   5059   }
   5060 
   5061   // C++0x [class.ctor]p4:
   5062   //   A constructor shall not be declared with a ref-qualifier.
   5063   if (FTI.hasRefQualifier()) {
   5064     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
   5065       << FTI.RefQualifierIsLValueRef
   5066       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   5067     D.setInvalidType();
   5068   }
   5069 
   5070   // Rebuild the function type "R" without any type qualifiers (in
   5071   // case any of the errors above fired) and with "void" as the
   5072   // return type, since constructors don't have return types.
   5073   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5074   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
   5075     return R;
   5076 
   5077   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   5078   EPI.TypeQuals = 0;
   5079   EPI.RefQualifier = RQ_None;
   5080 
   5081   return Context.getFunctionType(Context.VoidTy, Proto->arg_type_begin(),
   5082                                  Proto->getNumArgs(), EPI);
   5083 }
   5084 
   5085 /// CheckConstructor - Checks a fully-formed constructor for
   5086 /// well-formedness, issuing any diagnostics required. Returns true if
   5087 /// the constructor declarator is invalid.
   5088 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
   5089   CXXRecordDecl *ClassDecl
   5090     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
   5091   if (!ClassDecl)
   5092     return Constructor->setInvalidDecl();
   5093 
   5094   // C++ [class.copy]p3:
   5095   //   A declaration of a constructor for a class X is ill-formed if
   5096   //   its first parameter is of type (optionally cv-qualified) X and
   5097   //   either there are no other parameters or else all other
   5098   //   parameters have default arguments.
   5099   if (!Constructor->isInvalidDecl() &&
   5100       ((Constructor->getNumParams() == 1) ||
   5101        (Constructor->getNumParams() > 1 &&
   5102         Constructor->getParamDecl(1)->hasDefaultArg())) &&
   5103       Constructor->getTemplateSpecializationKind()
   5104                                               != TSK_ImplicitInstantiation) {
   5105     QualType ParamType = Constructor->getParamDecl(0)->getType();
   5106     QualType ClassTy = Context.getTagDeclType(ClassDecl);
   5107     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
   5108       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
   5109       const char *ConstRef
   5110         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
   5111                                                         : " const &";
   5112       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
   5113         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
   5114 
   5115       // FIXME: Rather that making the constructor invalid, we should endeavor
   5116       // to fix the type.
   5117       Constructor->setInvalidDecl();
   5118     }
   5119   }
   5120 }
   5121 
   5122 /// CheckDestructor - Checks a fully-formed destructor definition for
   5123 /// well-formedness, issuing any diagnostics required.  Returns true
   5124 /// on error.
   5125 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
   5126   CXXRecordDecl *RD = Destructor->getParent();
   5127 
   5128   if (Destructor->isVirtual()) {
   5129     SourceLocation Loc;
   5130 
   5131     if (!Destructor->isImplicit())
   5132       Loc = Destructor->getLocation();
   5133     else
   5134       Loc = RD->getLocation();
   5135 
   5136     // If we have a virtual destructor, look up the deallocation function
   5137     FunctionDecl *OperatorDelete = 0;
   5138     DeclarationName Name =
   5139     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
   5140     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
   5141       return true;
   5142 
   5143     MarkDeclarationReferenced(Loc, OperatorDelete);
   5144 
   5145     Destructor->setOperatorDelete(OperatorDelete);
   5146   }
   5147 
   5148   return false;
   5149 }
   5150 
   5151 static inline bool
   5152 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
   5153   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
   5154           FTI.ArgInfo[0].Param &&
   5155           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
   5156 }
   5157 
   5158 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
   5159 /// the well-formednes of the destructor declarator @p D with type @p
   5160 /// R. If there are any errors in the declarator, this routine will
   5161 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
   5162 /// will be updated to reflect a well-formed type for the destructor and
   5163 /// returned.
   5164 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
   5165                                          StorageClass& SC) {
   5166   // C++ [class.dtor]p1:
   5167   //   [...] A typedef-name that names a class is a class-name
   5168   //   (7.1.3); however, a typedef-name that names a class shall not
   5169   //   be used as the identifier in the declarator for a destructor
   5170   //   declaration.
   5171   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
   5172   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
   5173     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5174       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
   5175   else if (const TemplateSpecializationType *TST =
   5176              DeclaratorType->getAs<TemplateSpecializationType>())
   5177     if (TST->isTypeAlias())
   5178       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
   5179         << DeclaratorType << 1;
   5180 
   5181   // C++ [class.dtor]p2:
   5182   //   A destructor is used to destroy objects of its class type. A
   5183   //   destructor takes no parameters, and no return type can be
   5184   //   specified for it (not even void). The address of a destructor
   5185   //   shall not be taken. A destructor shall not be static. A
   5186   //   destructor can be invoked for a const, volatile or const
   5187   //   volatile object. A destructor shall not be declared const,
   5188   //   volatile or const volatile (9.3.2).
   5189   if (SC == SC_Static) {
   5190     if (!D.isInvalidType())
   5191       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
   5192         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5193         << SourceRange(D.getIdentifierLoc())
   5194         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
   5195 
   5196     SC = SC_None;
   5197   }
   5198   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   5199     // Destructors don't have return types, but the parser will
   5200     // happily parse something like:
   5201     //
   5202     //   class X {
   5203     //     float ~X();
   5204     //   };
   5205     //
   5206     // The return type will be eliminated later.
   5207     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
   5208       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   5209       << SourceRange(D.getIdentifierLoc());
   5210   }
   5211 
   5212   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5213   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
   5214     if (FTI.TypeQuals & Qualifiers::Const)
   5215       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5216         << "const" << SourceRange(D.getIdentifierLoc());
   5217     if (FTI.TypeQuals & Qualifiers::Volatile)
   5218       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5219         << "volatile" << SourceRange(D.getIdentifierLoc());
   5220     if (FTI.TypeQuals & Qualifiers::Restrict)
   5221       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
   5222         << "restrict" << SourceRange(D.getIdentifierLoc());
   5223     D.setInvalidType();
   5224   }
   5225 
   5226   // C++0x [class.dtor]p2:
   5227   //   A destructor shall not be declared with a ref-qualifier.
   5228   if (FTI.hasRefQualifier()) {
   5229     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
   5230       << FTI.RefQualifierIsLValueRef
   5231       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
   5232     D.setInvalidType();
   5233   }
   5234 
   5235   // Make sure we don't have any parameters.
   5236   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
   5237     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
   5238 
   5239     // Delete the parameters.
   5240     FTI.freeArgs();
   5241     D.setInvalidType();
   5242   }
   5243 
   5244   // Make sure the destructor isn't variadic.
   5245   if (FTI.isVariadic) {
   5246     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
   5247     D.setInvalidType();
   5248   }
   5249 
   5250   // Rebuild the function type "R" without any type qualifiers or
   5251   // parameters (in case any of the errors above fired) and with
   5252   // "void" as the return type, since destructors don't have return
   5253   // types.
   5254   if (!D.isInvalidType())
   5255     return R;
   5256 
   5257   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5258   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   5259   EPI.Variadic = false;
   5260   EPI.TypeQuals = 0;
   5261   EPI.RefQualifier = RQ_None;
   5262   return Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
   5263 }
   5264 
   5265 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
   5266 /// well-formednes of the conversion function declarator @p D with
   5267 /// type @p R. If there are any errors in the declarator, this routine
   5268 /// will emit diagnostics and return true. Otherwise, it will return
   5269 /// false. Either way, the type @p R will be updated to reflect a
   5270 /// well-formed type for the conversion operator.
   5271 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
   5272                                      StorageClass& SC) {
   5273   // C++ [class.conv.fct]p1:
   5274   //   Neither parameter types nor return type can be specified. The
   5275   //   type of a conversion function (8.3.5) is "function taking no
   5276   //   parameter returning conversion-type-id."
   5277   if (SC == SC_Static) {
   5278     if (!D.isInvalidType())
   5279       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
   5280         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
   5281         << SourceRange(D.getIdentifierLoc());
   5282     D.setInvalidType();
   5283     SC = SC_None;
   5284   }
   5285 
   5286   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
   5287 
   5288   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
   5289     // Conversion functions don't have return types, but the parser will
   5290     // happily parse something like:
   5291     //
   5292     //   class X {
   5293     //     float operator bool();
   5294     //   };
   5295     //
   5296     // The return type will be changed later anyway.
   5297     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
   5298       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
   5299       << SourceRange(D.getIdentifierLoc());
   5300     D.setInvalidType();
   5301   }
   5302 
   5303   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
   5304 
   5305   // Make sure we don't have any parameters.
   5306   if (Proto->getNumArgs() > 0) {
   5307     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
   5308 
   5309     // Delete the parameters.
   5310     D.getFunctionTypeInfo().freeArgs();
   5311     D.setInvalidType();
   5312   } else if (Proto->isVariadic()) {
   5313     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
   5314     D.setInvalidType();
   5315   }
   5316 
   5317   // Diagnose "&operator bool()" and other such nonsense.  This
   5318   // is actually a gcc extension which we don't support.
   5319   if (Proto->getResultType() != ConvType) {
   5320     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
   5321       << Proto->getResultType();
   5322     D.setInvalidType();
   5323     ConvType = Proto->getResultType();
   5324   }
   5325 
   5326   // C++ [class.conv.fct]p4:
   5327   //   The conversion-type-id shall not represent a function type nor
   5328   //   an array type.
   5329   if (ConvType->isArrayType()) {
   5330     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
   5331     ConvType = Context.getPointerType(ConvType);
   5332     D.setInvalidType();
   5333   } else if (ConvType->isFunctionType()) {
   5334     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
   5335     ConvType = Context.getPointerType(ConvType);
   5336     D.setInvalidType();
   5337   }
   5338 
   5339   // Rebuild the function type "R" without any parameters (in case any
   5340   // of the errors above fired) and with the conversion type as the
   5341   // return type.
   5342   if (D.isInvalidType())
   5343     R = Context.getFunctionType(ConvType, 0, 0, Proto->getExtProtoInfo());
   5344 
   5345   // C++0x explicit conversion operators.
   5346   if (D.getDeclSpec().isExplicitSpecified())
   5347     Diag(D.getDeclSpec().getExplicitSpecLoc(),
   5348          getLangOptions().CPlusPlus0x ?
   5349            diag::warn_cxx98_compat_explicit_conversion_functions :
   5350            diag::ext_explicit_conversion_functions)
   5351       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
   5352 }
   5353 
   5354 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
   5355 /// the declaration of the given C++ conversion function. This routine
   5356 /// is responsible for recording the conversion function in the C++
   5357 /// class, if possible.
   5358 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
   5359   assert(Conversion && "Expected to receive a conversion function declaration");
   5360 
   5361   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
   5362 
   5363   // Make sure we aren't redeclaring the conversion function.
   5364   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
   5365 
   5366   // C++ [class.conv.fct]p1:
   5367   //   [...] A conversion function is never used to convert a
   5368   //   (possibly cv-qualified) object to the (possibly cv-qualified)
   5369   //   same object type (or a reference to it), to a (possibly
   5370   //   cv-qualified) base class of that type (or a reference to it),
   5371   //   or to (possibly cv-qualified) void.
   5372   // FIXME: Suppress this warning if the conversion function ends up being a
   5373   // virtual function that overrides a virtual function in a base class.
   5374   QualType ClassType
   5375     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   5376   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
   5377     ConvType = ConvTypeRef->getPointeeType();
   5378   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
   5379       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
   5380     /* Suppress diagnostics for instantiations. */;
   5381   else if (ConvType->isRecordType()) {
   5382     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
   5383     if (ConvType == ClassType)
   5384       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
   5385         << ClassType;
   5386     else if (IsDerivedFrom(ClassType, ConvType))
   5387       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
   5388         <<  ClassType << ConvType;
   5389   } else if (ConvType->isVoidType()) {
   5390     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
   5391       << ClassType << ConvType;
   5392   }
   5393 
   5394   if (FunctionTemplateDecl *ConversionTemplate
   5395                                 = Conversion->getDescribedFunctionTemplate())
   5396     return ConversionTemplate;
   5397 
   5398   return Conversion;
   5399 }
   5400 
   5401 //===----------------------------------------------------------------------===//
   5402 // Namespace Handling
   5403 //===----------------------------------------------------------------------===//
   5404 
   5405 
   5406 
   5407 /// ActOnStartNamespaceDef - This is called at the start of a namespace
   5408 /// definition.
   5409 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
   5410                                    SourceLocation InlineLoc,
   5411                                    SourceLocation NamespaceLoc,
   5412                                    SourceLocation IdentLoc,
   5413                                    IdentifierInfo *II,
   5414                                    SourceLocation LBrace,
   5415                                    AttributeList *AttrList) {
   5416   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
   5417   // For anonymous namespace, take the location of the left brace.
   5418   SourceLocation Loc = II ? IdentLoc : LBrace;
   5419   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext,
   5420                                                  StartLoc, Loc, II);
   5421   Namespc->setInline(InlineLoc.isValid());
   5422 
   5423   Scope *DeclRegionScope = NamespcScope->getParent();
   5424 
   5425   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
   5426 
   5427   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
   5428     PushNamespaceVisibilityAttr(Attr);
   5429 
   5430   if (II) {
   5431     // C++ [namespace.def]p2:
   5432     //   The identifier in an original-namespace-definition shall not
   5433     //   have been previously defined in the declarative region in
   5434     //   which the original-namespace-definition appears. The
   5435     //   identifier in an original-namespace-definition is the name of
   5436     //   the namespace. Subsequently in that declarative region, it is
   5437     //   treated as an original-namespace-name.
   5438     //
   5439     // Since namespace names are unique in their scope, and we don't
   5440     // look through using directives, just look for any ordinary names.
   5441 
   5442     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
   5443       Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
   5444       Decl::IDNS_Namespace;
   5445     NamedDecl *PrevDecl = 0;
   5446     for (DeclContext::lookup_result R
   5447             = CurContext->getRedeclContext()->lookup(II);
   5448          R.first != R.second; ++R.first) {
   5449       if ((*R.first)->getIdentifierNamespace() & IDNS) {
   5450         PrevDecl = *R.first;
   5451         break;
   5452       }
   5453     }
   5454 
   5455     if (NamespaceDecl *OrigNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl)) {
   5456       // This is an extended namespace definition.
   5457       if (Namespc->isInline() != OrigNS->isInline()) {
   5458         // inline-ness must match
   5459         if (OrigNS->isInline()) {
   5460           // The user probably just forgot the 'inline', so suggest that it
   5461           // be added back.
   5462           Diag(Namespc->getLocation(),
   5463                diag::warn_inline_namespace_reopened_noninline)
   5464             << FixItHint::CreateInsertion(NamespaceLoc, "inline ");
   5465         } else {
   5466           Diag(Namespc->getLocation(), diag::err_inline_namespace_mismatch)
   5467             << Namespc->isInline();
   5468         }
   5469         Diag(OrigNS->getLocation(), diag::note_previous_definition);
   5470 
   5471         // Recover by ignoring the new namespace's inline status.
   5472         Namespc->setInline(OrigNS->isInline());
   5473       }
   5474 
   5475       // Attach this namespace decl to the chain of extended namespace
   5476       // definitions.
   5477       OrigNS->setNextNamespace(Namespc);
   5478       Namespc->setOriginalNamespace(OrigNS->getOriginalNamespace());
   5479 
   5480       // Remove the previous declaration from the scope.
   5481       if (DeclRegionScope->isDeclScope(OrigNS)) {
   5482         IdResolver.RemoveDecl(OrigNS);
   5483         DeclRegionScope->RemoveDecl(OrigNS);
   5484       }
   5485     } else if (PrevDecl) {
   5486       // This is an invalid name redefinition.
   5487       Diag(Namespc->getLocation(), diag::err_redefinition_different_kind)
   5488        << Namespc->getDeclName();
   5489       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   5490       Namespc->setInvalidDecl();
   5491       // Continue on to push Namespc as current DeclContext and return it.
   5492     } else if (II->isStr("std") &&
   5493                CurContext->getRedeclContext()->isTranslationUnit()) {
   5494       // This is the first "real" definition of the namespace "std", so update
   5495       // our cache of the "std" namespace to point at this definition.
   5496       if (NamespaceDecl *StdNS = getStdNamespace()) {
   5497         // We had already defined a dummy namespace "std". Link this new
   5498         // namespace definition to the dummy namespace "std".
   5499         StdNS->setNextNamespace(Namespc);
   5500         StdNS->setLocation(IdentLoc);
   5501         Namespc->setOriginalNamespace(StdNS->getOriginalNamespace());
   5502       }
   5503 
   5504       // Make our StdNamespace cache point at the first real definition of the
   5505       // "std" namespace.
   5506       StdNamespace = Namespc;
   5507 
   5508       // Add this instance of "std" to the set of known namespaces
   5509       KnownNamespaces[Namespc] = false;
   5510     } else if (!Namespc->isInline()) {
   5511       // Since this is an "original" namespace, add it to the known set of
   5512       // namespaces if it is not an inline namespace.
   5513       KnownNamespaces[Namespc] = false;
   5514     }
   5515 
   5516     PushOnScopeChains(Namespc, DeclRegionScope);
   5517   } else {
   5518     // Anonymous namespaces.
   5519     assert(Namespc->isAnonymousNamespace());
   5520 
   5521     // Link the anonymous namespace into its parent.
   5522     NamespaceDecl *PrevDecl;
   5523     DeclContext *Parent = CurContext->getRedeclContext();
   5524     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
   5525       PrevDecl = TU->getAnonymousNamespace();
   5526       TU->setAnonymousNamespace(Namespc);
   5527     } else {
   5528       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
   5529       PrevDecl = ND->getAnonymousNamespace();
   5530       ND->setAnonymousNamespace(Namespc);
   5531     }
   5532 
   5533     // Link the anonymous namespace with its previous declaration.
   5534     if (PrevDecl) {
   5535       assert(PrevDecl->isAnonymousNamespace());
   5536       assert(!PrevDecl->getNextNamespace());
   5537       Namespc->setOriginalNamespace(PrevDecl->getOriginalNamespace());
   5538       PrevDecl->setNextNamespace(Namespc);
   5539 
   5540       if (Namespc->isInline() != PrevDecl->isInline()) {
   5541         // inline-ness must match
   5542         Diag(Namespc->getLocation(), diag::err_inline_namespace_mismatch)
   5543           << Namespc->isInline();
   5544         Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   5545         Namespc->setInvalidDecl();
   5546         // Recover by ignoring the new namespace's inline status.
   5547         Namespc->setInline(PrevDecl->isInline());
   5548       }
   5549     }
   5550 
   5551     CurContext->addDecl(Namespc);
   5552 
   5553     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
   5554     //   behaves as if it were replaced by
   5555     //     namespace unique { /* empty body */ }
   5556     //     using namespace unique;
   5557     //     namespace unique { namespace-body }
   5558     //   where all occurrences of 'unique' in a translation unit are
   5559     //   replaced by the same identifier and this identifier differs
   5560     //   from all other identifiers in the entire program.
   5561 
   5562     // We just create the namespace with an empty name and then add an
   5563     // implicit using declaration, just like the standard suggests.
   5564     //
   5565     // CodeGen enforces the "universally unique" aspect by giving all
   5566     // declarations semantically contained within an anonymous
   5567     // namespace internal linkage.
   5568 
   5569     if (!PrevDecl) {
   5570       UsingDirectiveDecl* UD
   5571         = UsingDirectiveDecl::Create(Context, CurContext,
   5572                                      /* 'using' */ LBrace,
   5573                                      /* 'namespace' */ SourceLocation(),
   5574                                      /* qualifier */ NestedNameSpecifierLoc(),
   5575                                      /* identifier */ SourceLocation(),
   5576                                      Namespc,
   5577                                      /* Ancestor */ CurContext);
   5578       UD->setImplicit();
   5579       CurContext->addDecl(UD);
   5580     }
   5581   }
   5582 
   5583   // Although we could have an invalid decl (i.e. the namespace name is a
   5584   // redefinition), push it as current DeclContext and try to continue parsing.
   5585   // FIXME: We should be able to push Namespc here, so that the each DeclContext
   5586   // for the namespace has the declarations that showed up in that particular
   5587   // namespace definition.
   5588   PushDeclContext(NamespcScope, Namespc);
   5589   return Namespc;
   5590 }
   5591 
   5592 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
   5593 /// is a namespace alias, returns the namespace it points to.
   5594 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
   5595   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
   5596     return AD->getNamespace();
   5597   return dyn_cast_or_null<NamespaceDecl>(D);
   5598 }
   5599 
   5600 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
   5601 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
   5602 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
   5603   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
   5604   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
   5605   Namespc->setRBraceLoc(RBrace);
   5606   PopDeclContext();
   5607   if (Namespc->hasAttr<VisibilityAttr>())
   5608     PopPragmaVisibility();
   5609 }
   5610 
   5611 CXXRecordDecl *Sema::getStdBadAlloc() const {
   5612   return cast_or_null<CXXRecordDecl>(
   5613                                   StdBadAlloc.get(Context.getExternalSource()));
   5614 }
   5615 
   5616 NamespaceDecl *Sema::getStdNamespace() const {
   5617   return cast_or_null<NamespaceDecl>(
   5618                                  StdNamespace.get(Context.getExternalSource()));
   5619 }
   5620 
   5621 /// \brief Retrieve the special "std" namespace, which may require us to
   5622 /// implicitly define the namespace.
   5623 NamespaceDecl *Sema::getOrCreateStdNamespace() {
   5624   if (!StdNamespace) {
   5625     // The "std" namespace has not yet been defined, so build one implicitly.
   5626     StdNamespace = NamespaceDecl::Create(Context,
   5627                                          Context.getTranslationUnitDecl(),
   5628                                          SourceLocation(), SourceLocation(),
   5629                                          &PP.getIdentifierTable().get("std"));
   5630     getStdNamespace()->setImplicit(true);
   5631   }
   5632 
   5633   return getStdNamespace();
   5634 }
   5635 
   5636 /// \brief Determine whether a using statement is in a context where it will be
   5637 /// apply in all contexts.
   5638 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
   5639   switch (CurContext->getDeclKind()) {
   5640     case Decl::TranslationUnit:
   5641       return true;
   5642     case Decl::LinkageSpec:
   5643       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
   5644     default:
   5645       return false;
   5646   }
   5647 }
   5648 
   5649 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
   5650                                        CXXScopeSpec &SS,
   5651                                        SourceLocation IdentLoc,
   5652                                        IdentifierInfo *Ident) {
   5653   R.clear();
   5654   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
   5655                                                R.getLookupKind(), Sc, &SS, NULL,
   5656                                                false, S.CTC_NoKeywords, NULL)) {
   5657     if (Corrected.getCorrectionDeclAs<NamespaceDecl>() ||
   5658         Corrected.getCorrectionDeclAs<NamespaceAliasDecl>()) {
   5659       std::string CorrectedStr(Corrected.getAsString(S.getLangOptions()));
   5660       std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOptions()));
   5661       if (DeclContext *DC = S.computeDeclContext(SS, false))
   5662         S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
   5663           << Ident << DC << CorrectedQuotedStr << SS.getRange()
   5664           << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
   5665       else
   5666         S.Diag(IdentLoc, diag::err_using_directive_suggest)
   5667           << Ident << CorrectedQuotedStr
   5668           << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
   5669 
   5670       S.Diag(Corrected.getCorrectionDecl()->getLocation(),
   5671            diag::note_namespace_defined_here) << CorrectedQuotedStr;
   5672 
   5673       Ident = Corrected.getCorrectionAsIdentifierInfo();
   5674       R.addDecl(Corrected.getCorrectionDecl());
   5675       return true;
   5676     }
   5677     R.setLookupName(Ident);
   5678   }
   5679   return false;
   5680 }
   5681 
   5682 Decl *Sema::ActOnUsingDirective(Scope *S,
   5683                                           SourceLocation UsingLoc,
   5684                                           SourceLocation NamespcLoc,
   5685                                           CXXScopeSpec &SS,
   5686                                           SourceLocation IdentLoc,
   5687                                           IdentifierInfo *NamespcName,
   5688                                           AttributeList *AttrList) {
   5689   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   5690   assert(NamespcName && "Invalid NamespcName.");
   5691   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
   5692 
   5693   // This can only happen along a recovery path.
   5694   while (S->getFlags() & Scope::TemplateParamScope)
   5695     S = S->getParent();
   5696   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   5697 
   5698   UsingDirectiveDecl *UDir = 0;
   5699   NestedNameSpecifier *Qualifier = 0;
   5700   if (SS.isSet())
   5701     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
   5702 
   5703   // Lookup namespace name.
   5704   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
   5705   LookupParsedName(R, S, &SS);
   5706   if (R.isAmbiguous())
   5707     return 0;
   5708 
   5709   if (R.empty()) {
   5710     R.clear();
   5711     // Allow "using namespace std;" or "using namespace ::std;" even if
   5712     // "std" hasn't been defined yet, for GCC compatibility.
   5713     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
   5714         NamespcName->isStr("std")) {
   5715       Diag(IdentLoc, diag::ext_using_undefined_std);
   5716       R.addDecl(getOrCreateStdNamespace());
   5717       R.resolveKind();
   5718     }
   5719     // Otherwise, attempt typo correction.
   5720     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
   5721   }
   5722 
   5723   if (!R.empty()) {
   5724     NamedDecl *Named = R.getFoundDecl();
   5725     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
   5726         && "expected namespace decl");
   5727     // C++ [namespace.udir]p1:
   5728     //   A using-directive specifies that the names in the nominated
   5729     //   namespace can be used in the scope in which the
   5730     //   using-directive appears after the using-directive. During
   5731     //   unqualified name lookup (3.4.1), the names appear as if they
   5732     //   were declared in the nearest enclosing namespace which
   5733     //   contains both the using-directive and the nominated
   5734     //   namespace. [Note: in this context, "contains" means "contains
   5735     //   directly or indirectly". ]
   5736 
   5737     // Find enclosing context containing both using-directive and
   5738     // nominated namespace.
   5739     NamespaceDecl *NS = getNamespaceDecl(Named);
   5740     DeclContext *CommonAncestor = cast<DeclContext>(NS);
   5741     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
   5742       CommonAncestor = CommonAncestor->getParent();
   5743 
   5744     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
   5745                                       SS.getWithLocInContext(Context),
   5746                                       IdentLoc, Named, CommonAncestor);
   5747 
   5748     if (IsUsingDirectiveInToplevelContext(CurContext) &&
   5749         !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
   5750       Diag(IdentLoc, diag::warn_using_directive_in_header);
   5751     }
   5752 
   5753     PushUsingDirective(S, UDir);
   5754   } else {
   5755     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
   5756   }
   5757 
   5758   // FIXME: We ignore attributes for now.
   5759   return UDir;
   5760 }
   5761 
   5762 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
   5763   // If scope has associated entity, then using directive is at namespace
   5764   // or translation unit scope. We add UsingDirectiveDecls, into
   5765   // it's lookup structure.
   5766   if (DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity()))
   5767     Ctx->addDecl(UDir);
   5768   else
   5769     // Otherwise it is block-sope. using-directives will affect lookup
   5770     // only to the end of scope.
   5771     S->PushUsingDirective(UDir);
   5772 }
   5773 
   5774 
   5775 Decl *Sema::ActOnUsingDeclaration(Scope *S,
   5776                                   AccessSpecifier AS,
   5777                                   bool HasUsingKeyword,
   5778                                   SourceLocation UsingLoc,
   5779                                   CXXScopeSpec &SS,
   5780                                   UnqualifiedId &Name,
   5781                                   AttributeList *AttrList,
   5782                                   bool IsTypeName,
   5783                                   SourceLocation TypenameLoc) {
   5784   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
   5785 
   5786   switch (Name.getKind()) {
   5787   case UnqualifiedId::IK_ImplicitSelfParam:
   5788   case UnqualifiedId::IK_Identifier:
   5789   case UnqualifiedId::IK_OperatorFunctionId:
   5790   case UnqualifiedId::IK_LiteralOperatorId:
   5791   case UnqualifiedId::IK_ConversionFunctionId:
   5792     break;
   5793 
   5794   case UnqualifiedId::IK_ConstructorName:
   5795   case UnqualifiedId::IK_ConstructorTemplateId:
   5796     // C++0x inherited constructors.
   5797     Diag(Name.getSourceRange().getBegin(),
   5798          getLangOptions().CPlusPlus0x ?
   5799            diag::warn_cxx98_compat_using_decl_constructor :
   5800            diag::err_using_decl_constructor)
   5801       << SS.getRange();
   5802 
   5803     if (getLangOptions().CPlusPlus0x) break;
   5804 
   5805     return 0;
   5806 
   5807   case UnqualifiedId::IK_DestructorName:
   5808     Diag(Name.getSourceRange().getBegin(), diag::err_using_decl_destructor)
   5809       << SS.getRange();
   5810     return 0;
   5811 
   5812   case UnqualifiedId::IK_TemplateId:
   5813     Diag(Name.getSourceRange().getBegin(), diag::err_using_decl_template_id)
   5814       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
   5815     return 0;
   5816   }
   5817 
   5818   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
   5819   DeclarationName TargetName = TargetNameInfo.getName();
   5820   if (!TargetName)
   5821     return 0;
   5822 
   5823   // Warn about using declarations.
   5824   // TODO: store that the declaration was written without 'using' and
   5825   // talk about access decls instead of using decls in the
   5826   // diagnostics.
   5827   if (!HasUsingKeyword) {
   5828     UsingLoc = Name.getSourceRange().getBegin();
   5829 
   5830     Diag(UsingLoc, diag::warn_access_decl_deprecated)
   5831       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
   5832   }
   5833 
   5834   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
   5835       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
   5836     return 0;
   5837 
   5838   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
   5839                                         TargetNameInfo, AttrList,
   5840                                         /* IsInstantiation */ false,
   5841                                         IsTypeName, TypenameLoc);
   5842   if (UD)
   5843     PushOnScopeChains(UD, S, /*AddToContext*/ false);
   5844 
   5845   return UD;
   5846 }
   5847 
   5848 /// \brief Determine whether a using declaration considers the given
   5849 /// declarations as "equivalent", e.g., if they are redeclarations of
   5850 /// the same entity or are both typedefs of the same type.
   5851 static bool
   5852 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
   5853                          bool &SuppressRedeclaration) {
   5854   if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
   5855     SuppressRedeclaration = false;
   5856     return true;
   5857   }
   5858 
   5859   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
   5860     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
   5861       SuppressRedeclaration = true;
   5862       return Context.hasSameType(TD1->getUnderlyingType(),
   5863                                  TD2->getUnderlyingType());
   5864     }
   5865 
   5866   return false;
   5867 }
   5868 
   5869 
   5870 /// Determines whether to create a using shadow decl for a particular
   5871 /// decl, given the set of decls existing prior to this using lookup.
   5872 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
   5873                                 const LookupResult &Previous) {
   5874   // Diagnose finding a decl which is not from a base class of the
   5875   // current class.  We do this now because there are cases where this
   5876   // function will silently decide not to build a shadow decl, which
   5877   // will pre-empt further diagnostics.
   5878   //
   5879   // We don't need to do this in C++0x because we do the check once on
   5880   // the qualifier.
   5881   //
   5882   // FIXME: diagnose the following if we care enough:
   5883   //   struct A { int foo; };
   5884   //   struct B : A { using A::foo; };
   5885   //   template <class T> struct C : A {};
   5886   //   template <class T> struct D : C<T> { using B::foo; } // <---
   5887   // This is invalid (during instantiation) in C++03 because B::foo
   5888   // resolves to the using decl in B, which is not a base class of D<T>.
   5889   // We can't diagnose it immediately because C<T> is an unknown
   5890   // specialization.  The UsingShadowDecl in D<T> then points directly
   5891   // to A::foo, which will look well-formed when we instantiate.
   5892   // The right solution is to not collapse the shadow-decl chain.
   5893   if (!getLangOptions().CPlusPlus0x && CurContext->isRecord()) {
   5894     DeclContext *OrigDC = Orig->getDeclContext();
   5895 
   5896     // Handle enums and anonymous structs.
   5897     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
   5898     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
   5899     while (OrigRec->isAnonymousStructOrUnion())
   5900       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
   5901 
   5902     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
   5903       if (OrigDC == CurContext) {
   5904         Diag(Using->getLocation(),
   5905              diag::err_using_decl_nested_name_specifier_is_current_class)
   5906           << Using->getQualifierLoc().getSourceRange();
   5907         Diag(Orig->getLocation(), diag::note_using_decl_target);
   5908         return true;
   5909       }
   5910 
   5911       Diag(Using->getQualifierLoc().getBeginLoc(),
   5912            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   5913         << Using->getQualifier()
   5914         << cast<CXXRecordDecl>(CurContext)
   5915         << Using->getQualifierLoc().getSourceRange();
   5916       Diag(Orig->getLocation(), diag::note_using_decl_target);
   5917       return true;
   5918     }
   5919   }
   5920 
   5921   if (Previous.empty()) return false;
   5922 
   5923   NamedDecl *Target = Orig;
   5924   if (isa<UsingShadowDecl>(Target))
   5925     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   5926 
   5927   // If the target happens to be one of the previous declarations, we
   5928   // don't have a conflict.
   5929   //
   5930   // FIXME: but we might be increasing its access, in which case we
   5931   // should redeclare it.
   5932   NamedDecl *NonTag = 0, *Tag = 0;
   5933   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
   5934          I != E; ++I) {
   5935     NamedDecl *D = (*I)->getUnderlyingDecl();
   5936     bool Result;
   5937     if (IsEquivalentForUsingDecl(Context, D, Target, Result))
   5938       return Result;
   5939 
   5940     (isa<TagDecl>(D) ? Tag : NonTag) = D;
   5941   }
   5942 
   5943   if (Target->isFunctionOrFunctionTemplate()) {
   5944     FunctionDecl *FD;
   5945     if (isa<FunctionTemplateDecl>(Target))
   5946       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
   5947     else
   5948       FD = cast<FunctionDecl>(Target);
   5949 
   5950     NamedDecl *OldDecl = 0;
   5951     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
   5952     case Ovl_Overload:
   5953       return false;
   5954 
   5955     case Ovl_NonFunction:
   5956       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   5957       break;
   5958 
   5959     // We found a decl with the exact signature.
   5960     case Ovl_Match:
   5961       // If we're in a record, we want to hide the target, so we
   5962       // return true (without a diagnostic) to tell the caller not to
   5963       // build a shadow decl.
   5964       if (CurContext->isRecord())
   5965         return true;
   5966 
   5967       // If we're not in a record, this is an error.
   5968       Diag(Using->getLocation(), diag::err_using_decl_conflict);
   5969       break;
   5970     }
   5971 
   5972     Diag(Target->getLocation(), diag::note_using_decl_target);
   5973     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
   5974     return true;
   5975   }
   5976 
   5977   // Target is not a function.
   5978 
   5979   if (isa<TagDecl>(Target)) {
   5980     // No conflict between a tag and a non-tag.
   5981     if (!Tag) return false;
   5982 
   5983     Diag(Using->getLocation(), diag::err_using_decl_conflict);
   5984     Diag(Target->getLocation(), diag::note_using_decl_target);
   5985     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
   5986     return true;
   5987   }
   5988 
   5989   // No conflict between a tag and a non-tag.
   5990   if (!NonTag) return false;
   5991 
   5992   Diag(Using->getLocation(), diag::err_using_decl_conflict);
   5993   Diag(Target->getLocation(), diag::note_using_decl_target);
   5994   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
   5995   return true;
   5996 }
   5997 
   5998 /// Builds a shadow declaration corresponding to a 'using' declaration.
   5999 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
   6000                                             UsingDecl *UD,
   6001                                             NamedDecl *Orig) {
   6002 
   6003   // If we resolved to another shadow declaration, just coalesce them.
   6004   NamedDecl *Target = Orig;
   6005   if (isa<UsingShadowDecl>(Target)) {
   6006     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
   6007     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
   6008   }
   6009 
   6010   UsingShadowDecl *Shadow
   6011     = UsingShadowDecl::Create(Context, CurContext,
   6012                               UD->getLocation(), UD, Target);
   6013   UD->addShadowDecl(Shadow);
   6014 
   6015   Shadow->setAccess(UD->getAccess());
   6016   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
   6017     Shadow->setInvalidDecl();
   6018 
   6019   if (S)
   6020     PushOnScopeChains(Shadow, S);
   6021   else
   6022     CurContext->addDecl(Shadow);
   6023 
   6024 
   6025   return Shadow;
   6026 }
   6027 
   6028 /// Hides a using shadow declaration.  This is required by the current
   6029 /// using-decl implementation when a resolvable using declaration in a
   6030 /// class is followed by a declaration which would hide or override
   6031 /// one or more of the using decl's targets; for example:
   6032 ///
   6033 ///   struct Base { void foo(int); };
   6034 ///   struct Derived : Base {
   6035 ///     using Base::foo;
   6036 ///     void foo(int);
   6037 ///   };
   6038 ///
   6039 /// The governing language is C++03 [namespace.udecl]p12:
   6040 ///
   6041 ///   When a using-declaration brings names from a base class into a
   6042 ///   derived class scope, member functions in the derived class
   6043 ///   override and/or hide member functions with the same name and
   6044 ///   parameter types in a base class (rather than conflicting).
   6045 ///
   6046 /// There are two ways to implement this:
   6047 ///   (1) optimistically create shadow decls when they're not hidden
   6048 ///       by existing declarations, or
   6049 ///   (2) don't create any shadow decls (or at least don't make them
   6050 ///       visible) until we've fully parsed/instantiated the class.
   6051 /// The problem with (1) is that we might have to retroactively remove
   6052 /// a shadow decl, which requires several O(n) operations because the
   6053 /// decl structures are (very reasonably) not designed for removal.
   6054 /// (2) avoids this but is very fiddly and phase-dependent.
   6055 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
   6056   if (Shadow->getDeclName().getNameKind() ==
   6057         DeclarationName::CXXConversionFunctionName)
   6058     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
   6059 
   6060   // Remove it from the DeclContext...
   6061   Shadow->getDeclContext()->removeDecl(Shadow);
   6062 
   6063   // ...and the scope, if applicable...
   6064   if (S) {
   6065     S->RemoveDecl(Shadow);
   6066     IdResolver.RemoveDecl(Shadow);
   6067   }
   6068 
   6069   // ...and the using decl.
   6070   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
   6071 
   6072   // TODO: complain somehow if Shadow was used.  It shouldn't
   6073   // be possible for this to happen, because...?
   6074 }
   6075 
   6076 /// Builds a using declaration.
   6077 ///
   6078 /// \param IsInstantiation - Whether this call arises from an
   6079 ///   instantiation of an unresolved using declaration.  We treat
   6080 ///   the lookup differently for these declarations.
   6081 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
   6082                                        SourceLocation UsingLoc,
   6083                                        CXXScopeSpec &SS,
   6084                                        const DeclarationNameInfo &NameInfo,
   6085                                        AttributeList *AttrList,
   6086                                        bool IsInstantiation,
   6087                                        bool IsTypeName,
   6088                                        SourceLocation TypenameLoc) {
   6089   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
   6090   SourceLocation IdentLoc = NameInfo.getLoc();
   6091   assert(IdentLoc.isValid() && "Invalid TargetName location.");
   6092 
   6093   // FIXME: We ignore attributes for now.
   6094 
   6095   if (SS.isEmpty()) {
   6096     Diag(IdentLoc, diag::err_using_requires_qualname);
   6097     return 0;
   6098   }
   6099 
   6100   // Do the redeclaration lookup in the current scope.
   6101   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
   6102                         ForRedeclaration);
   6103   Previous.setHideTags(false);
   6104   if (S) {
   6105     LookupName(Previous, S);
   6106 
   6107     // It is really dumb that we have to do this.
   6108     LookupResult::Filter F = Previous.makeFilter();
   6109     while (F.hasNext()) {
   6110       NamedDecl *D = F.next();
   6111       if (!isDeclInScope(D, CurContext, S))
   6112         F.erase();
   6113     }
   6114     F.done();
   6115   } else {
   6116     assert(IsInstantiation && "no scope in non-instantiation");
   6117     assert(CurContext->isRecord() && "scope not record in instantiation");
   6118     LookupQualifiedName(Previous, CurContext);
   6119   }
   6120 
   6121   // Check for invalid redeclarations.
   6122   if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
   6123     return 0;
   6124 
   6125   // Check for bad qualifiers.
   6126   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
   6127     return 0;
   6128 
   6129   DeclContext *LookupContext = computeDeclContext(SS);
   6130   NamedDecl *D;
   6131   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   6132   if (!LookupContext) {
   6133     if (IsTypeName) {
   6134       // FIXME: not all declaration name kinds are legal here
   6135       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
   6136                                               UsingLoc, TypenameLoc,
   6137                                               QualifierLoc,
   6138                                               IdentLoc, NameInfo.getName());
   6139     } else {
   6140       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
   6141                                            QualifierLoc, NameInfo);
   6142     }
   6143   } else {
   6144     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
   6145                           NameInfo, IsTypeName);
   6146   }
   6147   D->setAccess(AS);
   6148   CurContext->addDecl(D);
   6149 
   6150   if (!LookupContext) return D;
   6151   UsingDecl *UD = cast<UsingDecl>(D);
   6152 
   6153   if (RequireCompleteDeclContext(SS, LookupContext)) {
   6154     UD->setInvalidDecl();
   6155     return UD;
   6156   }
   6157 
   6158   // Constructor inheriting using decls get special treatment.
   6159   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
   6160     if (CheckInheritedConstructorUsingDecl(UD))
   6161       UD->setInvalidDecl();
   6162     return UD;
   6163   }
   6164 
   6165   // Otherwise, look up the target name.
   6166 
   6167   LookupResult R(*this, NameInfo, LookupOrdinaryName);
   6168 
   6169   // Unlike most lookups, we don't always want to hide tag
   6170   // declarations: tag names are visible through the using declaration
   6171   // even if hidden by ordinary names, *except* in a dependent context
   6172   // where it's important for the sanity of two-phase lookup.
   6173   if (!IsInstantiation)
   6174     R.setHideTags(false);
   6175 
   6176   LookupQualifiedName(R, LookupContext);
   6177 
   6178   if (R.empty()) {
   6179     Diag(IdentLoc, diag::err_no_member)
   6180       << NameInfo.getName() << LookupContext << SS.getRange();
   6181     UD->setInvalidDecl();
   6182     return UD;
   6183   }
   6184 
   6185   if (R.isAmbiguous()) {
   6186     UD->setInvalidDecl();
   6187     return UD;
   6188   }
   6189 
   6190   if (IsTypeName) {
   6191     // If we asked for a typename and got a non-type decl, error out.
   6192     if (!R.getAsSingle<TypeDecl>()) {
   6193       Diag(IdentLoc, diag::err_using_typename_non_type);
   6194       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
   6195         Diag((*I)->getUnderlyingDecl()->getLocation(),
   6196              diag::note_using_decl_target);
   6197       UD->setInvalidDecl();
   6198       return UD;
   6199     }
   6200   } else {
   6201     // If we asked for a non-typename and we got a type, error out,
   6202     // but only if this is an instantiation of an unresolved using
   6203     // decl.  Otherwise just silently find the type name.
   6204     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
   6205       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
   6206       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
   6207       UD->setInvalidDecl();
   6208       return UD;
   6209     }
   6210   }
   6211 
   6212   // C++0x N2914 [namespace.udecl]p6:
   6213   // A using-declaration shall not name a namespace.
   6214   if (R.getAsSingle<NamespaceDecl>()) {
   6215     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
   6216       << SS.getRange();
   6217     UD->setInvalidDecl();
   6218     return UD;
   6219   }
   6220 
   6221   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
   6222     if (!CheckUsingShadowDecl(UD, *I, Previous))
   6223       BuildUsingShadowDecl(S, UD, *I);
   6224   }
   6225 
   6226   return UD;
   6227 }
   6228 
   6229 /// Additional checks for a using declaration referring to a constructor name.
   6230 bool Sema::CheckInheritedConstructorUsingDecl(UsingDecl *UD) {
   6231   if (UD->isTypeName()) {
   6232     // FIXME: Cannot specify typename when specifying constructor
   6233     return true;
   6234   }
   6235 
   6236   const Type *SourceType = UD->getQualifier()->getAsType();
   6237   assert(SourceType &&
   6238          "Using decl naming constructor doesn't have type in scope spec.");
   6239   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
   6240 
   6241   // Check whether the named type is a direct base class.
   6242   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
   6243   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
   6244   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
   6245        BaseIt != BaseE; ++BaseIt) {
   6246     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
   6247     if (CanonicalSourceType == BaseType)
   6248       break;
   6249   }
   6250 
   6251   if (BaseIt == BaseE) {
   6252     // Did not find SourceType in the bases.
   6253     Diag(UD->getUsingLocation(),
   6254          diag::err_using_decl_constructor_not_in_direct_base)
   6255       << UD->getNameInfo().getSourceRange()
   6256       << QualType(SourceType, 0) << TargetClass;
   6257     return true;
   6258   }
   6259 
   6260   BaseIt->setInheritConstructors();
   6261 
   6262   return false;
   6263 }
   6264 
   6265 /// Checks that the given using declaration is not an invalid
   6266 /// redeclaration.  Note that this is checking only for the using decl
   6267 /// itself, not for any ill-formedness among the UsingShadowDecls.
   6268 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
   6269                                        bool isTypeName,
   6270                                        const CXXScopeSpec &SS,
   6271                                        SourceLocation NameLoc,
   6272                                        const LookupResult &Prev) {
   6273   // C++03 [namespace.udecl]p8:
   6274   // C++0x [namespace.udecl]p10:
   6275   //   A using-declaration is a declaration and can therefore be used
   6276   //   repeatedly where (and only where) multiple declarations are
   6277   //   allowed.
   6278   //
   6279   // That's in non-member contexts.
   6280   if (!CurContext->getRedeclContext()->isRecord())
   6281     return false;
   6282 
   6283   NestedNameSpecifier *Qual
   6284     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
   6285 
   6286   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
   6287     NamedDecl *D = *I;
   6288 
   6289     bool DTypename;
   6290     NestedNameSpecifier *DQual;
   6291     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
   6292       DTypename = UD->isTypeName();
   6293       DQual = UD->getQualifier();
   6294     } else if (UnresolvedUsingValueDecl *UD
   6295                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
   6296       DTypename = false;
   6297       DQual = UD->getQualifier();
   6298     } else if (UnresolvedUsingTypenameDecl *UD
   6299                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
   6300       DTypename = true;
   6301       DQual = UD->getQualifier();
   6302     } else continue;
   6303 
   6304     // using decls differ if one says 'typename' and the other doesn't.
   6305     // FIXME: non-dependent using decls?
   6306     if (isTypeName != DTypename) continue;
   6307 
   6308     // using decls differ if they name different scopes (but note that
   6309     // template instantiation can cause this check to trigger when it
   6310     // didn't before instantiation).
   6311     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
   6312         Context.getCanonicalNestedNameSpecifier(DQual))
   6313       continue;
   6314 
   6315     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
   6316     Diag(D->getLocation(), diag::note_using_decl) << 1;
   6317     return true;
   6318   }
   6319 
   6320   return false;
   6321 }
   6322 
   6323 
   6324 /// Checks that the given nested-name qualifier used in a using decl
   6325 /// in the current context is appropriately related to the current
   6326 /// scope.  If an error is found, diagnoses it and returns true.
   6327 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
   6328                                    const CXXScopeSpec &SS,
   6329                                    SourceLocation NameLoc) {
   6330   DeclContext *NamedContext = computeDeclContext(SS);
   6331 
   6332   if (!CurContext->isRecord()) {
   6333     // C++03 [namespace.udecl]p3:
   6334     // C++0x [namespace.udecl]p8:
   6335     //   A using-declaration for a class member shall be a member-declaration.
   6336 
   6337     // If we weren't able to compute a valid scope, it must be a
   6338     // dependent class scope.
   6339     if (!NamedContext || NamedContext->isRecord()) {
   6340       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
   6341         << SS.getRange();
   6342       return true;
   6343     }
   6344 
   6345     // Otherwise, everything is known to be fine.
   6346     return false;
   6347   }
   6348 
   6349   // The current scope is a record.
   6350 
   6351   // If the named context is dependent, we can't decide much.
   6352   if (!NamedContext) {
   6353     // FIXME: in C++0x, we can diagnose if we can prove that the
   6354     // nested-name-specifier does not refer to a base class, which is
   6355     // still possible in some cases.
   6356 
   6357     // Otherwise we have to conservatively report that things might be
   6358     // okay.
   6359     return false;
   6360   }
   6361 
   6362   if (!NamedContext->isRecord()) {
   6363     // Ideally this would point at the last name in the specifier,
   6364     // but we don't have that level of source info.
   6365     Diag(SS.getRange().getBegin(),
   6366          diag::err_using_decl_nested_name_specifier_is_not_class)
   6367       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
   6368     return true;
   6369   }
   6370 
   6371   if (!NamedContext->isDependentContext() &&
   6372       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
   6373     return true;
   6374 
   6375   if (getLangOptions().CPlusPlus0x) {
   6376     // C++0x [namespace.udecl]p3:
   6377     //   In a using-declaration used as a member-declaration, the
   6378     //   nested-name-specifier shall name a base class of the class
   6379     //   being defined.
   6380 
   6381     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
   6382                                  cast<CXXRecordDecl>(NamedContext))) {
   6383       if (CurContext == NamedContext) {
   6384         Diag(NameLoc,
   6385              diag::err_using_decl_nested_name_specifier_is_current_class)
   6386           << SS.getRange();
   6387         return true;
   6388       }
   6389 
   6390       Diag(SS.getRange().getBegin(),
   6391            diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6392         << (NestedNameSpecifier*) SS.getScopeRep()
   6393         << cast<CXXRecordDecl>(CurContext)
   6394         << SS.getRange();
   6395       return true;
   6396     }
   6397 
   6398     return false;
   6399   }
   6400 
   6401   // C++03 [namespace.udecl]p4:
   6402   //   A using-declaration used as a member-declaration shall refer
   6403   //   to a member of a base class of the class being defined [etc.].
   6404 
   6405   // Salient point: SS doesn't have to name a base class as long as
   6406   // lookup only finds members from base classes.  Therefore we can
   6407   // diagnose here only if we can prove that that can't happen,
   6408   // i.e. if the class hierarchies provably don't intersect.
   6409 
   6410   // TODO: it would be nice if "definitely valid" results were cached
   6411   // in the UsingDecl and UsingShadowDecl so that these checks didn't
   6412   // need to be repeated.
   6413 
   6414   struct UserData {
   6415     llvm::DenseSet<const CXXRecordDecl*> Bases;
   6416 
   6417     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
   6418       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   6419       Data->Bases.insert(Base);
   6420       return true;
   6421     }
   6422 
   6423     bool hasDependentBases(const CXXRecordDecl *Class) {
   6424       return !Class->forallBases(collect, this);
   6425     }
   6426 
   6427     /// Returns true if the base is dependent or is one of the
   6428     /// accumulated base classes.
   6429     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
   6430       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
   6431       return !Data->Bases.count(Base);
   6432     }
   6433 
   6434     bool mightShareBases(const CXXRecordDecl *Class) {
   6435       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
   6436     }
   6437   };
   6438 
   6439   UserData Data;
   6440 
   6441   // Returns false if we find a dependent base.
   6442   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
   6443     return false;
   6444 
   6445   // Returns false if the class has a dependent base or if it or one
   6446   // of its bases is present in the base set of the current context.
   6447   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
   6448     return false;
   6449 
   6450   Diag(SS.getRange().getBegin(),
   6451        diag::err_using_decl_nested_name_specifier_is_not_base_class)
   6452     << (NestedNameSpecifier*) SS.getScopeRep()
   6453     << cast<CXXRecordDecl>(CurContext)
   6454     << SS.getRange();
   6455 
   6456   return true;
   6457 }
   6458 
   6459 Decl *Sema::ActOnAliasDeclaration(Scope *S,
   6460                                   AccessSpecifier AS,
   6461                                   MultiTemplateParamsArg TemplateParamLists,
   6462                                   SourceLocation UsingLoc,
   6463                                   UnqualifiedId &Name,
   6464                                   TypeResult Type) {
   6465   // Skip up to the relevant declaration scope.
   6466   while (S->getFlags() & Scope::TemplateParamScope)
   6467     S = S->getParent();
   6468   assert((S->getFlags() & Scope::DeclScope) &&
   6469          "got alias-declaration outside of declaration scope");
   6470 
   6471   if (Type.isInvalid())
   6472     return 0;
   6473 
   6474   bool Invalid = false;
   6475   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
   6476   TypeSourceInfo *TInfo = 0;
   6477   GetTypeFromParser(Type.get(), &TInfo);
   6478 
   6479   if (DiagnoseClassNameShadow(CurContext, NameInfo))
   6480     return 0;
   6481 
   6482   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
   6483                                       UPPC_DeclarationType)) {
   6484     Invalid = true;
   6485     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   6486                                              TInfo->getTypeLoc().getBeginLoc());
   6487   }
   6488 
   6489   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
   6490   LookupName(Previous, S);
   6491 
   6492   // Warn about shadowing the name of a template parameter.
   6493   if (Previous.isSingleResult() &&
   6494       Previous.getFoundDecl()->isTemplateParameter()) {
   6495     if (DiagnoseTemplateParameterShadow(Name.StartLocation,
   6496                                         Previous.getFoundDecl()))
   6497       Invalid = true;
   6498     Previous.clear();
   6499   }
   6500 
   6501   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
   6502          "name in alias declaration must be an identifier");
   6503   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
   6504                                                Name.StartLocation,
   6505                                                Name.Identifier, TInfo);
   6506 
   6507   NewTD->setAccess(AS);
   6508 
   6509   if (Invalid)
   6510     NewTD->setInvalidDecl();
   6511 
   6512   CheckTypedefForVariablyModifiedType(S, NewTD);
   6513   Invalid |= NewTD->isInvalidDecl();
   6514 
   6515   bool Redeclaration = false;
   6516 
   6517   NamedDecl *NewND;
   6518   if (TemplateParamLists.size()) {
   6519     TypeAliasTemplateDecl *OldDecl = 0;
   6520     TemplateParameterList *OldTemplateParams = 0;
   6521 
   6522     if (TemplateParamLists.size() != 1) {
   6523       Diag(UsingLoc, diag::err_alias_template_extra_headers)
   6524         << SourceRange(TemplateParamLists.get()[1]->getTemplateLoc(),
   6525          TemplateParamLists.get()[TemplateParamLists.size()-1]->getRAngleLoc());
   6526     }
   6527     TemplateParameterList *TemplateParams = TemplateParamLists.get()[0];
   6528 
   6529     // Only consider previous declarations in the same scope.
   6530     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
   6531                          /*ExplicitInstantiationOrSpecialization*/false);
   6532     if (!Previous.empty()) {
   6533       Redeclaration = true;
   6534 
   6535       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
   6536       if (!OldDecl && !Invalid) {
   6537         Diag(UsingLoc, diag::err_redefinition_different_kind)
   6538           << Name.Identifier;
   6539 
   6540         NamedDecl *OldD = Previous.getRepresentativeDecl();
   6541         if (OldD->getLocation().isValid())
   6542           Diag(OldD->getLocation(), diag::note_previous_definition);
   6543 
   6544         Invalid = true;
   6545       }
   6546 
   6547       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
   6548         if (TemplateParameterListsAreEqual(TemplateParams,
   6549                                            OldDecl->getTemplateParameters(),
   6550                                            /*Complain=*/true,
   6551                                            TPL_TemplateMatch))
   6552           OldTemplateParams = OldDecl->getTemplateParameters();
   6553         else
   6554           Invalid = true;
   6555 
   6556         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
   6557         if (!Invalid &&
   6558             !Context.hasSameType(OldTD->getUnderlyingType(),
   6559                                  NewTD->getUnderlyingType())) {
   6560           // FIXME: The C++0x standard does not clearly say this is ill-formed,
   6561           // but we can't reasonably accept it.
   6562           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
   6563             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
   6564           if (OldTD->getLocation().isValid())
   6565             Diag(OldTD->getLocation(), diag::note_previous_definition);
   6566           Invalid = true;
   6567         }
   6568       }
   6569     }
   6570 
   6571     // Merge any previous default template arguments into our parameters,
   6572     // and check the parameter list.
   6573     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
   6574                                    TPC_TypeAliasTemplate))
   6575       return 0;
   6576 
   6577     TypeAliasTemplateDecl *NewDecl =
   6578       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
   6579                                     Name.Identifier, TemplateParams,
   6580                                     NewTD);
   6581 
   6582     NewDecl->setAccess(AS);
   6583 
   6584     if (Invalid)
   6585       NewDecl->setInvalidDecl();
   6586     else if (OldDecl)
   6587       NewDecl->setPreviousDeclaration(OldDecl);
   6588 
   6589     NewND = NewDecl;
   6590   } else {
   6591     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
   6592     NewND = NewTD;
   6593   }
   6594 
   6595   if (!Redeclaration)
   6596     PushOnScopeChains(NewND, S);
   6597 
   6598   return NewND;
   6599 }
   6600 
   6601 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
   6602                                              SourceLocation NamespaceLoc,
   6603                                              SourceLocation AliasLoc,
   6604                                              IdentifierInfo *Alias,
   6605                                              CXXScopeSpec &SS,
   6606                                              SourceLocation IdentLoc,
   6607                                              IdentifierInfo *Ident) {
   6608 
   6609   // Lookup the namespace name.
   6610   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
   6611   LookupParsedName(R, S, &SS);
   6612 
   6613   // Check if we have a previous declaration with the same name.
   6614   NamedDecl *PrevDecl
   6615     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
   6616                        ForRedeclaration);
   6617   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
   6618     PrevDecl = 0;
   6619 
   6620   if (PrevDecl) {
   6621     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
   6622       // We already have an alias with the same name that points to the same
   6623       // namespace, so don't create a new one.
   6624       // FIXME: At some point, we'll want to create the (redundant)
   6625       // declaration to maintain better source information.
   6626       if (!R.isAmbiguous() && !R.empty() &&
   6627           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
   6628         return 0;
   6629     }
   6630 
   6631     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
   6632       diag::err_redefinition_different_kind;
   6633     Diag(AliasLoc, DiagID) << Alias;
   6634     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   6635     return 0;
   6636   }
   6637 
   6638   if (R.isAmbiguous())
   6639     return 0;
   6640 
   6641   if (R.empty()) {
   6642     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
   6643       Diag(NamespaceLoc, diag::err_expected_namespace_name) << SS.getRange();
   6644       return 0;
   6645     }
   6646   }
   6647 
   6648   NamespaceAliasDecl *AliasDecl =
   6649     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
   6650                                Alias, SS.getWithLocInContext(Context),
   6651                                IdentLoc, R.getFoundDecl());
   6652 
   6653   PushOnScopeChains(AliasDecl, S);
   6654   return AliasDecl;
   6655 }
   6656 
   6657 namespace {
   6658   /// \brief Scoped object used to handle the state changes required in Sema
   6659   /// to implicitly define the body of a C++ member function;
   6660   class ImplicitlyDefinedFunctionScope {
   6661     Sema &S;
   6662     Sema::ContextRAII SavedContext;
   6663 
   6664   public:
   6665     ImplicitlyDefinedFunctionScope(Sema &S, CXXMethodDecl *Method)
   6666       : S(S), SavedContext(S, Method)
   6667     {
   6668       S.PushFunctionScope();
   6669       S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated);
   6670     }
   6671 
   6672     ~ImplicitlyDefinedFunctionScope() {
   6673       S.PopExpressionEvaluationContext();
   6674       S.PopFunctionOrBlockScope();
   6675     }
   6676   };
   6677 }
   6678 
   6679 Sema::ImplicitExceptionSpecification
   6680 Sema::ComputeDefaultedDefaultCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   6681   // C++ [except.spec]p14:
   6682   //   An implicitly declared special member function (Clause 12) shall have an
   6683   //   exception-specification. [...]
   6684   ImplicitExceptionSpecification ExceptSpec(Context);
   6685   if (ClassDecl->isInvalidDecl())
   6686     return ExceptSpec;
   6687 
   6688   // Direct base-class constructors.
   6689   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   6690                                        BEnd = ClassDecl->bases_end();
   6691        B != BEnd; ++B) {
   6692     if (B->isVirtual()) // Handled below.
   6693       continue;
   6694 
   6695     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   6696       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   6697       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   6698       // If this is a deleted function, add it anyway. This might be conformant
   6699       // with the standard. This might not. I'm not sure. It might not matter.
   6700       if (Constructor)
   6701         ExceptSpec.CalledDecl(Constructor);
   6702     }
   6703   }
   6704 
   6705   // Virtual base-class constructors.
   6706   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   6707                                        BEnd = ClassDecl->vbases_end();
   6708        B != BEnd; ++B) {
   6709     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   6710       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   6711       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
   6712       // If this is a deleted function, add it anyway. This might be conformant
   6713       // with the standard. This might not. I'm not sure. It might not matter.
   6714       if (Constructor)
   6715         ExceptSpec.CalledDecl(Constructor);
   6716     }
   6717   }
   6718 
   6719   // Field constructors.
   6720   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   6721                                FEnd = ClassDecl->field_end();
   6722        F != FEnd; ++F) {
   6723     if (F->hasInClassInitializer()) {
   6724       if (Expr *E = F->getInClassInitializer())
   6725         ExceptSpec.CalledExpr(E);
   6726       else if (!F->isInvalidDecl())
   6727         ExceptSpec.SetDelayed();
   6728     } else if (const RecordType *RecordTy
   6729               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   6730       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   6731       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
   6732       // If this is a deleted function, add it anyway. This might be conformant
   6733       // with the standard. This might not. I'm not sure. It might not matter.
   6734       // In particular, the problem is that this function never gets called. It
   6735       // might just be ill-formed because this function attempts to refer to
   6736       // a deleted function here.
   6737       if (Constructor)
   6738         ExceptSpec.CalledDecl(Constructor);
   6739     }
   6740   }
   6741 
   6742   return ExceptSpec;
   6743 }
   6744 
   6745 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
   6746                                                      CXXRecordDecl *ClassDecl) {
   6747   // C++ [class.ctor]p5:
   6748   //   A default constructor for a class X is a constructor of class X
   6749   //   that can be called without an argument. If there is no
   6750   //   user-declared constructor for class X, a default constructor is
   6751   //   implicitly declared. An implicitly-declared default constructor
   6752   //   is an inline public member of its class.
   6753   assert(!ClassDecl->hasUserDeclaredConstructor() &&
   6754          "Should not build implicit default constructor!");
   6755 
   6756   ImplicitExceptionSpecification Spec =
   6757     ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
   6758   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   6759 
   6760   // Create the actual constructor declaration.
   6761   CanQualType ClassType
   6762     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   6763   SourceLocation ClassLoc = ClassDecl->getLocation();
   6764   DeclarationName Name
   6765     = Context.DeclarationNames.getCXXConstructorName(ClassType);
   6766   DeclarationNameInfo NameInfo(Name, ClassLoc);
   6767   CXXConstructorDecl *DefaultCon
   6768     = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   6769                                  Context.getFunctionType(Context.VoidTy,
   6770                                                          0, 0, EPI),
   6771                                  /*TInfo=*/0,
   6772                                  /*isExplicit=*/false,
   6773                                  /*isInline=*/true,
   6774                                  /*isImplicitlyDeclared=*/true,
   6775                                  // FIXME: apply the rules for definitions here
   6776                                  /*isConstexpr=*/false);
   6777   DefaultCon->setAccess(AS_public);
   6778   DefaultCon->setDefaulted();
   6779   DefaultCon->setImplicit();
   6780   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
   6781 
   6782   // Note that we have declared this constructor.
   6783   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
   6784 
   6785   if (Scope *S = getScopeForContext(ClassDecl))
   6786     PushOnScopeChains(DefaultCon, S, false);
   6787   ClassDecl->addDecl(DefaultCon);
   6788 
   6789   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
   6790     DefaultCon->setDeletedAsWritten();
   6791 
   6792   return DefaultCon;
   6793 }
   6794 
   6795 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
   6796                                             CXXConstructorDecl *Constructor) {
   6797   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
   6798           !Constructor->doesThisDeclarationHaveABody() &&
   6799           !Constructor->isDeleted()) &&
   6800     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
   6801 
   6802   CXXRecordDecl *ClassDecl = Constructor->getParent();
   6803   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
   6804 
   6805   ImplicitlyDefinedFunctionScope Scope(*this, Constructor);
   6806   DiagnosticErrorTrap Trap(Diags);
   6807   if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) ||
   6808       Trap.hasErrorOccurred()) {
   6809     Diag(CurrentLocation, diag::note_member_synthesized_at)
   6810       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
   6811     Constructor->setInvalidDecl();
   6812     return;
   6813   }
   6814 
   6815   SourceLocation Loc = Constructor->getLocation();
   6816   Constructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
   6817 
   6818   Constructor->setUsed();
   6819   MarkVTableUsed(CurrentLocation, ClassDecl);
   6820 
   6821   if (ASTMutationListener *L = getASTMutationListener()) {
   6822     L->CompletedImplicitDefinition(Constructor);
   6823   }
   6824 }
   6825 
   6826 /// Get any existing defaulted default constructor for the given class. Do not
   6827 /// implicitly define one if it does not exist.
   6828 static CXXConstructorDecl *getDefaultedDefaultConstructorUnsafe(Sema &Self,
   6829                                                              CXXRecordDecl *D) {
   6830   ASTContext &Context = Self.Context;
   6831   QualType ClassType = Context.getTypeDeclType(D);
   6832   DeclarationName ConstructorName
   6833     = Context.DeclarationNames.getCXXConstructorName(
   6834                       Context.getCanonicalType(ClassType.getUnqualifiedType()));
   6835 
   6836   DeclContext::lookup_const_iterator Con, ConEnd;
   6837   for (llvm::tie(Con, ConEnd) = D->lookup(ConstructorName);
   6838        Con != ConEnd; ++Con) {
   6839     // A function template cannot be defaulted.
   6840     if (isa<FunctionTemplateDecl>(*Con))
   6841       continue;
   6842 
   6843     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
   6844     if (Constructor->isDefaultConstructor())
   6845       return Constructor->isDefaulted() ? Constructor : 0;
   6846   }
   6847   return 0;
   6848 }
   6849 
   6850 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
   6851   if (!D) return;
   6852   AdjustDeclIfTemplate(D);
   6853 
   6854   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D);
   6855   CXXConstructorDecl *CtorDecl
   6856     = getDefaultedDefaultConstructorUnsafe(*this, ClassDecl);
   6857 
   6858   if (!CtorDecl) return;
   6859 
   6860   // Compute the exception specification for the default constructor.
   6861   const FunctionProtoType *CtorTy =
   6862     CtorDecl->getType()->castAs<FunctionProtoType>();
   6863   if (CtorTy->getExceptionSpecType() == EST_Delayed) {
   6864     ImplicitExceptionSpecification Spec =
   6865       ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
   6866     FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   6867     assert(EPI.ExceptionSpecType != EST_Delayed);
   6868 
   6869     CtorDecl->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
   6870   }
   6871 
   6872   // If the default constructor is explicitly defaulted, checking the exception
   6873   // specification is deferred until now.
   6874   if (!CtorDecl->isInvalidDecl() && CtorDecl->isExplicitlyDefaulted() &&
   6875       !ClassDecl->isDependentType())
   6876     CheckExplicitlyDefaultedDefaultConstructor(CtorDecl);
   6877 }
   6878 
   6879 void Sema::DeclareInheritedConstructors(CXXRecordDecl *ClassDecl) {
   6880   // We start with an initial pass over the base classes to collect those that
   6881   // inherit constructors from. If there are none, we can forgo all further
   6882   // processing.
   6883   typedef SmallVector<const RecordType *, 4> BasesVector;
   6884   BasesVector BasesToInheritFrom;
   6885   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
   6886                                           BaseE = ClassDecl->bases_end();
   6887          BaseIt != BaseE; ++BaseIt) {
   6888     if (BaseIt->getInheritConstructors()) {
   6889       QualType Base = BaseIt->getType();
   6890       if (Base->isDependentType()) {
   6891         // If we inherit constructors from anything that is dependent, just
   6892         // abort processing altogether. We'll get another chance for the
   6893         // instantiations.
   6894         return;
   6895       }
   6896       BasesToInheritFrom.push_back(Base->castAs<RecordType>());
   6897     }
   6898   }
   6899   if (BasesToInheritFrom.empty())
   6900     return;
   6901 
   6902   // Now collect the constructors that we already have in the current class.
   6903   // Those take precedence over inherited constructors.
   6904   // C++0x [class.inhctor]p3: [...] a constructor is implicitly declared [...]
   6905   //   unless there is a user-declared constructor with the same signature in
   6906   //   the class where the using-declaration appears.
   6907   llvm::SmallSet<const Type *, 8> ExistingConstructors;
   6908   for (CXXRecordDecl::ctor_iterator CtorIt = ClassDecl->ctor_begin(),
   6909                                     CtorE = ClassDecl->ctor_end();
   6910        CtorIt != CtorE; ++CtorIt) {
   6911     ExistingConstructors.insert(
   6912         Context.getCanonicalType(CtorIt->getType()).getTypePtr());
   6913   }
   6914 
   6915   Scope *S = getScopeForContext(ClassDecl);
   6916   DeclarationName CreatedCtorName =
   6917       Context.DeclarationNames.getCXXConstructorName(
   6918           ClassDecl->getTypeForDecl()->getCanonicalTypeUnqualified());
   6919 
   6920   // Now comes the true work.
   6921   // First, we keep a map from constructor types to the base that introduced
   6922   // them. Needed for finding conflicting constructors. We also keep the
   6923   // actually inserted declarations in there, for pretty diagnostics.
   6924   typedef std::pair<CanQualType, CXXConstructorDecl *> ConstructorInfo;
   6925   typedef llvm::DenseMap<const Type *, ConstructorInfo> ConstructorToSourceMap;
   6926   ConstructorToSourceMap InheritedConstructors;
   6927   for (BasesVector::iterator BaseIt = BasesToInheritFrom.begin(),
   6928                              BaseE = BasesToInheritFrom.end();
   6929        BaseIt != BaseE; ++BaseIt) {
   6930     const RecordType *Base = *BaseIt;
   6931     CanQualType CanonicalBase = Base->getCanonicalTypeUnqualified();
   6932     CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(Base->getDecl());
   6933     for (CXXRecordDecl::ctor_iterator CtorIt = BaseDecl->ctor_begin(),
   6934                                       CtorE = BaseDecl->ctor_end();
   6935          CtorIt != CtorE; ++CtorIt) {
   6936       // Find the using declaration for inheriting this base's constructors.
   6937       DeclarationName Name =
   6938           Context.DeclarationNames.getCXXConstructorName(CanonicalBase);
   6939       UsingDecl *UD = dyn_cast_or_null<UsingDecl>(
   6940           LookupSingleName(S, Name,SourceLocation(), LookupUsingDeclName));
   6941       SourceLocation UsingLoc = UD ? UD->getLocation() :
   6942                                      ClassDecl->getLocation();
   6943 
   6944       // C++0x [class.inhctor]p1: The candidate set of inherited constructors
   6945       //   from the class X named in the using-declaration consists of actual
   6946       //   constructors and notional constructors that result from the
   6947       //   transformation of defaulted parameters as follows:
   6948       //   - all non-template default constructors of X, and
   6949       //   - for each non-template constructor of X that has at least one
   6950       //     parameter with a default argument, the set of constructors that
   6951       //     results from omitting any ellipsis parameter specification and
   6952       //     successively omitting parameters with a default argument from the
   6953       //     end of the parameter-type-list.
   6954       CXXConstructorDecl *BaseCtor = *CtorIt;
   6955       bool CanBeCopyOrMove = BaseCtor->isCopyOrMoveConstructor();
   6956       const FunctionProtoType *BaseCtorType =
   6957           BaseCtor->getType()->getAs<FunctionProtoType>();
   6958 
   6959       for (unsigned params = BaseCtor->getMinRequiredArguments(),
   6960                     maxParams = BaseCtor->getNumParams();
   6961            params <= maxParams; ++params) {
   6962         // Skip default constructors. They're never inherited.
   6963         if (params == 0)
   6964           continue;
   6965         // Skip copy and move constructors for the same reason.
   6966         if (CanBeCopyOrMove && params == 1)
   6967           continue;
   6968 
   6969         // Build up a function type for this particular constructor.
   6970         // FIXME: The working paper does not consider that the exception spec
   6971         // for the inheriting constructor might be larger than that of the
   6972         // source. This code doesn't yet, either. When it does, this code will
   6973         // need to be delayed until after exception specifications and in-class
   6974         // member initializers are attached.
   6975         const Type *NewCtorType;
   6976         if (params == maxParams)
   6977           NewCtorType = BaseCtorType;
   6978         else {
   6979           SmallVector<QualType, 16> Args;
   6980           for (unsigned i = 0; i < params; ++i) {
   6981             Args.push_back(BaseCtorType->getArgType(i));
   6982           }
   6983           FunctionProtoType::ExtProtoInfo ExtInfo =
   6984               BaseCtorType->getExtProtoInfo();
   6985           ExtInfo.Variadic = false;
   6986           NewCtorType = Context.getFunctionType(BaseCtorType->getResultType(),
   6987                                                 Args.data(), params, ExtInfo)
   6988                        .getTypePtr();
   6989         }
   6990         const Type *CanonicalNewCtorType =
   6991             Context.getCanonicalType(NewCtorType);
   6992 
   6993         // Now that we have the type, first check if the class already has a
   6994         // constructor with this signature.
   6995         if (ExistingConstructors.count(CanonicalNewCtorType))
   6996           continue;
   6997 
   6998         // Then we check if we have already declared an inherited constructor
   6999         // with this signature.
   7000         std::pair<ConstructorToSourceMap::iterator, bool> result =
   7001             InheritedConstructors.insert(std::make_pair(
   7002                 CanonicalNewCtorType,
   7003                 std::make_pair(CanonicalBase, (CXXConstructorDecl*)0)));
   7004         if (!result.second) {
   7005           // Already in the map. If it came from a different class, that's an
   7006           // error. Not if it's from the same.
   7007           CanQualType PreviousBase = result.first->second.first;
   7008           if (CanonicalBase != PreviousBase) {
   7009             const CXXConstructorDecl *PrevCtor = result.first->second.second;
   7010             const CXXConstructorDecl *PrevBaseCtor =
   7011                 PrevCtor->getInheritedConstructor();
   7012             assert(PrevBaseCtor && "Conflicting constructor was not inherited");
   7013 
   7014             Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
   7015             Diag(BaseCtor->getLocation(),
   7016                  diag::note_using_decl_constructor_conflict_current_ctor);
   7017             Diag(PrevBaseCtor->getLocation(),
   7018                  diag::note_using_decl_constructor_conflict_previous_ctor);
   7019             Diag(PrevCtor->getLocation(),
   7020                  diag::note_using_decl_constructor_conflict_previous_using);
   7021           }
   7022           continue;
   7023         }
   7024 
   7025         // OK, we're there, now add the constructor.
   7026         // C++0x [class.inhctor]p8: [...] that would be performed by a
   7027         //   user-written inline constructor [...]
   7028         DeclarationNameInfo DNI(CreatedCtorName, UsingLoc);
   7029         CXXConstructorDecl *NewCtor = CXXConstructorDecl::Create(
   7030             Context, ClassDecl, UsingLoc, DNI, QualType(NewCtorType, 0),
   7031             /*TInfo=*/0, BaseCtor->isExplicit(), /*Inline=*/true,
   7032             /*ImplicitlyDeclared=*/true,
   7033             // FIXME: Due to a defect in the standard, we treat inherited
   7034             // constructors as constexpr even if that makes them ill-formed.
   7035             /*Constexpr=*/BaseCtor->isConstexpr());
   7036         NewCtor->setAccess(BaseCtor->getAccess());
   7037 
   7038         // Build up the parameter decls and add them.
   7039         SmallVector<ParmVarDecl *, 16> ParamDecls;
   7040         for (unsigned i = 0; i < params; ++i) {
   7041           ParamDecls.push_back(ParmVarDecl::Create(Context, NewCtor,
   7042                                                    UsingLoc, UsingLoc,
   7043                                                    /*IdentifierInfo=*/0,
   7044                                                    BaseCtorType->getArgType(i),
   7045                                                    /*TInfo=*/0, SC_None,
   7046                                                    SC_None, /*DefaultArg=*/0));
   7047         }
   7048         NewCtor->setParams(ParamDecls);
   7049         NewCtor->setInheritedConstructor(BaseCtor);
   7050 
   7051         PushOnScopeChains(NewCtor, S, false);
   7052         ClassDecl->addDecl(NewCtor);
   7053         result.first->second.second = NewCtor;
   7054       }
   7055     }
   7056   }
   7057 }
   7058 
   7059 Sema::ImplicitExceptionSpecification
   7060 Sema::ComputeDefaultedDtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   7061   // C++ [except.spec]p14:
   7062   //   An implicitly declared special member function (Clause 12) shall have
   7063   //   an exception-specification.
   7064   ImplicitExceptionSpecification ExceptSpec(Context);
   7065   if (ClassDecl->isInvalidDecl())
   7066     return ExceptSpec;
   7067 
   7068   // Direct base-class destructors.
   7069   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   7070                                        BEnd = ClassDecl->bases_end();
   7071        B != BEnd; ++B) {
   7072     if (B->isVirtual()) // Handled below.
   7073       continue;
   7074 
   7075     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   7076       ExceptSpec.CalledDecl(
   7077                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   7078   }
   7079 
   7080   // Virtual base-class destructors.
   7081   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   7082                                        BEnd = ClassDecl->vbases_end();
   7083        B != BEnd; ++B) {
   7084     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
   7085       ExceptSpec.CalledDecl(
   7086                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
   7087   }
   7088 
   7089   // Field destructors.
   7090   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   7091                                FEnd = ClassDecl->field_end();
   7092        F != FEnd; ++F) {
   7093     if (const RecordType *RecordTy
   7094         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
   7095       ExceptSpec.CalledDecl(
   7096                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
   7097   }
   7098 
   7099   return ExceptSpec;
   7100 }
   7101 
   7102 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
   7103   // C++ [class.dtor]p2:
   7104   //   If a class has no user-declared destructor, a destructor is
   7105   //   declared implicitly. An implicitly-declared destructor is an
   7106   //   inline public member of its class.
   7107 
   7108   ImplicitExceptionSpecification Spec =
   7109       ComputeDefaultedDtorExceptionSpec(ClassDecl);
   7110   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7111 
   7112   // Create the actual destructor declaration.
   7113   QualType Ty = Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
   7114 
   7115   CanQualType ClassType
   7116     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
   7117   SourceLocation ClassLoc = ClassDecl->getLocation();
   7118   DeclarationName Name
   7119     = Context.DeclarationNames.getCXXDestructorName(ClassType);
   7120   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7121   CXXDestructorDecl *Destructor
   7122       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, Ty, 0,
   7123                                   /*isInline=*/true,
   7124                                   /*isImplicitlyDeclared=*/true);
   7125   Destructor->setAccess(AS_public);
   7126   Destructor->setDefaulted();
   7127   Destructor->setImplicit();
   7128   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
   7129 
   7130   // Note that we have declared this destructor.
   7131   ++ASTContext::NumImplicitDestructorsDeclared;
   7132 
   7133   // Introduce this destructor into its scope.
   7134   if (Scope *S = getScopeForContext(ClassDecl))
   7135     PushOnScopeChains(Destructor, S, false);
   7136   ClassDecl->addDecl(Destructor);
   7137 
   7138   // This could be uniqued if it ever proves significant.
   7139   Destructor->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(Ty));
   7140 
   7141   if (ShouldDeleteDestructor(Destructor))
   7142     Destructor->setDeletedAsWritten();
   7143 
   7144   AddOverriddenMethods(ClassDecl, Destructor);
   7145 
   7146   return Destructor;
   7147 }
   7148 
   7149 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
   7150                                     CXXDestructorDecl *Destructor) {
   7151   assert((Destructor->isDefaulted() &&
   7152           !Destructor->doesThisDeclarationHaveABody()) &&
   7153          "DefineImplicitDestructor - call it for implicit default dtor");
   7154   CXXRecordDecl *ClassDecl = Destructor->getParent();
   7155   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
   7156 
   7157   if (Destructor->isInvalidDecl())
   7158     return;
   7159 
   7160   ImplicitlyDefinedFunctionScope Scope(*this, Destructor);
   7161 
   7162   DiagnosticErrorTrap Trap(Diags);
   7163   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
   7164                                          Destructor->getParent());
   7165 
   7166   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
   7167     Diag(CurrentLocation, diag::note_member_synthesized_at)
   7168       << CXXDestructor << Context.getTagDeclType(ClassDecl);
   7169 
   7170     Destructor->setInvalidDecl();
   7171     return;
   7172   }
   7173 
   7174   SourceLocation Loc = Destructor->getLocation();
   7175   Destructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
   7176   Destructor->setImplicitlyDefined(true);
   7177   Destructor->setUsed();
   7178   MarkVTableUsed(CurrentLocation, ClassDecl);
   7179 
   7180   if (ASTMutationListener *L = getASTMutationListener()) {
   7181     L->CompletedImplicitDefinition(Destructor);
   7182   }
   7183 }
   7184 
   7185 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
   7186                                          CXXDestructorDecl *destructor) {
   7187   // C++11 [class.dtor]p3:
   7188   //   A declaration of a destructor that does not have an exception-
   7189   //   specification is implicitly considered to have the same exception-
   7190   //   specification as an implicit declaration.
   7191   const FunctionProtoType *dtorType = destructor->getType()->
   7192                                         getAs<FunctionProtoType>();
   7193   if (dtorType->hasExceptionSpec())
   7194     return;
   7195 
   7196   ImplicitExceptionSpecification exceptSpec =
   7197       ComputeDefaultedDtorExceptionSpec(classDecl);
   7198 
   7199   // Replace the destructor's type, building off the existing one. Fortunately,
   7200   // the only thing of interest in the destructor type is its extended info.
   7201   // The return and arguments are fixed.
   7202   FunctionProtoType::ExtProtoInfo epi = dtorType->getExtProtoInfo();
   7203   epi.ExceptionSpecType = exceptSpec.getExceptionSpecType();
   7204   epi.NumExceptions = exceptSpec.size();
   7205   epi.Exceptions = exceptSpec.data();
   7206   QualType ty = Context.getFunctionType(Context.VoidTy, 0, 0, epi);
   7207 
   7208   destructor->setType(ty);
   7209 
   7210   // FIXME: If the destructor has a body that could throw, and the newly created
   7211   // spec doesn't allow exceptions, we should emit a warning, because this
   7212   // change in behavior can break conforming C++03 programs at runtime.
   7213   // However, we don't have a body yet, so it needs to be done somewhere else.
   7214 }
   7215 
   7216 /// \brief Builds a statement that copies/moves the given entity from \p From to
   7217 /// \c To.
   7218 ///
   7219 /// This routine is used to copy/move the members of a class with an
   7220 /// implicitly-declared copy/move assignment operator. When the entities being
   7221 /// copied are arrays, this routine builds for loops to copy them.
   7222 ///
   7223 /// \param S The Sema object used for type-checking.
   7224 ///
   7225 /// \param Loc The location where the implicit copy/move is being generated.
   7226 ///
   7227 /// \param T The type of the expressions being copied/moved. Both expressions
   7228 /// must have this type.
   7229 ///
   7230 /// \param To The expression we are copying/moving to.
   7231 ///
   7232 /// \param From The expression we are copying/moving from.
   7233 ///
   7234 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
   7235 /// Otherwise, it's a non-static member subobject.
   7236 ///
   7237 /// \param Copying Whether we're copying or moving.
   7238 ///
   7239 /// \param Depth Internal parameter recording the depth of the recursion.
   7240 ///
   7241 /// \returns A statement or a loop that copies the expressions.
   7242 static StmtResult
   7243 BuildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
   7244                       Expr *To, Expr *From,
   7245                       bool CopyingBaseSubobject, bool Copying,
   7246                       unsigned Depth = 0) {
   7247   // C++0x [class.copy]p28:
   7248   //   Each subobject is assigned in the manner appropriate to its type:
   7249   //
   7250   //     - if the subobject is of class type, as if by a call to operator= with
   7251   //       the subobject as the object expression and the corresponding
   7252   //       subobject of x as a single function argument (as if by explicit
   7253   //       qualification; that is, ignoring any possible virtual overriding
   7254   //       functions in more derived classes);
   7255   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
   7256     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   7257 
   7258     // Look for operator=.
   7259     DeclarationName Name
   7260       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   7261     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
   7262     S.LookupQualifiedName(OpLookup, ClassDecl, false);
   7263 
   7264     // Filter out any result that isn't a copy/move-assignment operator.
   7265     LookupResult::Filter F = OpLookup.makeFilter();
   7266     while (F.hasNext()) {
   7267       NamedDecl *D = F.next();
   7268       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
   7269         if (Copying ? Method->isCopyAssignmentOperator() :
   7270                       Method->isMoveAssignmentOperator())
   7271           continue;
   7272 
   7273       F.erase();
   7274     }
   7275     F.done();
   7276 
   7277     // Suppress the protected check (C++ [class.protected]) for each of the
   7278     // assignment operators we found. This strange dance is required when
   7279     // we're assigning via a base classes's copy-assignment operator. To
   7280     // ensure that we're getting the right base class subobject (without
   7281     // ambiguities), we need to cast "this" to that subobject type; to
   7282     // ensure that we don't go through the virtual call mechanism, we need
   7283     // to qualify the operator= name with the base class (see below). However,
   7284     // this means that if the base class has a protected copy assignment
   7285     // operator, the protected member access check will fail. So, we
   7286     // rewrite "protected" access to "public" access in this case, since we
   7287     // know by construction that we're calling from a derived class.
   7288     if (CopyingBaseSubobject) {
   7289       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
   7290            L != LEnd; ++L) {
   7291         if (L.getAccess() == AS_protected)
   7292           L.setAccess(AS_public);
   7293       }
   7294     }
   7295 
   7296     // Create the nested-name-specifier that will be used to qualify the
   7297     // reference to operator=; this is required to suppress the virtual
   7298     // call mechanism.
   7299     CXXScopeSpec SS;
   7300     SS.MakeTrivial(S.Context,
   7301                    NestedNameSpecifier::Create(S.Context, 0, false,
   7302                                                T.getTypePtr()),
   7303                    Loc);
   7304 
   7305     // Create the reference to operator=.
   7306     ExprResult OpEqualRef
   7307       = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
   7308                                    /*FirstQualifierInScope=*/0, OpLookup,
   7309                                    /*TemplateArgs=*/0,
   7310                                    /*SuppressQualifierCheck=*/true);
   7311     if (OpEqualRef.isInvalid())
   7312       return StmtError();
   7313 
   7314     // Build the call to the assignment operator.
   7315 
   7316     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
   7317                                                   OpEqualRef.takeAs<Expr>(),
   7318                                                   Loc, &From, 1, Loc);
   7319     if (Call.isInvalid())
   7320       return StmtError();
   7321 
   7322     return S.Owned(Call.takeAs<Stmt>());
   7323   }
   7324 
   7325   //     - if the subobject is of scalar type, the built-in assignment
   7326   //       operator is used.
   7327   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
   7328   if (!ArrayTy) {
   7329     ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
   7330     if (Assignment.isInvalid())
   7331       return StmtError();
   7332 
   7333     return S.Owned(Assignment.takeAs<Stmt>());
   7334   }
   7335 
   7336   //     - if the subobject is an array, each element is assigned, in the
   7337   //       manner appropriate to the element type;
   7338 
   7339   // Construct a loop over the array bounds, e.g.,
   7340   //
   7341   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
   7342   //
   7343   // that will copy each of the array elements.
   7344   QualType SizeType = S.Context.getSizeType();
   7345 
   7346   // Create the iteration variable.
   7347   IdentifierInfo *IterationVarName = 0;
   7348   {
   7349     llvm::SmallString<8> Str;
   7350     llvm::raw_svector_ostream OS(Str);
   7351     OS << "__i" << Depth;
   7352     IterationVarName = &S.Context.Idents.get(OS.str());
   7353   }
   7354   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
   7355                                           IterationVarName, SizeType,
   7356                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
   7357                                           SC_None, SC_None);
   7358 
   7359   // Initialize the iteration variable to zero.
   7360   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
   7361   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
   7362 
   7363   // Create a reference to the iteration variable; we'll use this several
   7364   // times throughout.
   7365   Expr *IterationVarRef
   7366     = S.BuildDeclRefExpr(IterationVar, SizeType, VK_RValue, Loc).take();
   7367   assert(IterationVarRef && "Reference to invented variable cannot fail!");
   7368 
   7369   // Create the DeclStmt that holds the iteration variable.
   7370   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
   7371 
   7372   // Create the comparison against the array bound.
   7373   llvm::APInt Upper
   7374     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
   7375   Expr *Comparison
   7376     = new (S.Context) BinaryOperator(IterationVarRef,
   7377                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
   7378                                      BO_NE, S.Context.BoolTy,
   7379                                      VK_RValue, OK_Ordinary, Loc);
   7380 
   7381   // Create the pre-increment of the iteration variable.
   7382   Expr *Increment
   7383     = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
   7384                                     VK_LValue, OK_Ordinary, Loc);
   7385 
   7386   // Subscript the "from" and "to" expressions with the iteration variable.
   7387   From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
   7388                                                          IterationVarRef, Loc));
   7389   To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
   7390                                                        IterationVarRef, Loc));
   7391   if (!Copying) // Cast to rvalue
   7392     From = CastForMoving(S, From);
   7393 
   7394   // Build the copy/move for an individual element of the array.
   7395   StmtResult Copy = BuildSingleCopyAssign(S, Loc, ArrayTy->getElementType(),
   7396                                           To, From, CopyingBaseSubobject,
   7397                                           Copying, Depth + 1);
   7398   if (Copy.isInvalid())
   7399     return StmtError();
   7400 
   7401   // Construct the loop that copies all elements of this array.
   7402   return S.ActOnForStmt(Loc, Loc, InitStmt,
   7403                         S.MakeFullExpr(Comparison),
   7404                         0, S.MakeFullExpr(Increment),
   7405                         Loc, Copy.take());
   7406 }
   7407 
   7408 std::pair<Sema::ImplicitExceptionSpecification, bool>
   7409 Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
   7410                                                    CXXRecordDecl *ClassDecl) {
   7411   if (ClassDecl->isInvalidDecl())
   7412     return std::make_pair(ImplicitExceptionSpecification(Context), false);
   7413 
   7414   // C++ [class.copy]p10:
   7415   //   If the class definition does not explicitly declare a copy
   7416   //   assignment operator, one is declared implicitly.
   7417   //   The implicitly-defined copy assignment operator for a class X
   7418   //   will have the form
   7419   //
   7420   //       X& X::operator=(const X&)
   7421   //
   7422   //   if
   7423   bool HasConstCopyAssignment = true;
   7424 
   7425   //       -- each direct base class B of X has a copy assignment operator
   7426   //          whose parameter is of type const B&, const volatile B& or B,
   7427   //          and
   7428   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7429                                        BaseEnd = ClassDecl->bases_end();
   7430        HasConstCopyAssignment && Base != BaseEnd; ++Base) {
   7431     // We'll handle this below
   7432     if (LangOpts.CPlusPlus0x && Base->isVirtual())
   7433       continue;
   7434 
   7435     assert(!Base->getType()->isDependentType() &&
   7436            "Cannot generate implicit members for class with dependent bases.");
   7437     CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
   7438     LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
   7439                             &HasConstCopyAssignment);
   7440   }
   7441 
   7442   // In C++11, the above citation has "or virtual" added
   7443   if (LangOpts.CPlusPlus0x) {
   7444     for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   7445                                          BaseEnd = ClassDecl->vbases_end();
   7446          HasConstCopyAssignment && Base != BaseEnd; ++Base) {
   7447       assert(!Base->getType()->isDependentType() &&
   7448              "Cannot generate implicit members for class with dependent bases.");
   7449       CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
   7450       LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
   7451                               &HasConstCopyAssignment);
   7452     }
   7453   }
   7454 
   7455   //       -- for all the nonstatic data members of X that are of a class
   7456   //          type M (or array thereof), each such class type has a copy
   7457   //          assignment operator whose parameter is of type const M&,
   7458   //          const volatile M& or M.
   7459   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7460                                   FieldEnd = ClassDecl->field_end();
   7461        HasConstCopyAssignment && Field != FieldEnd;
   7462        ++Field) {
   7463     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   7464     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   7465       LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const, false, 0,
   7466                               &HasConstCopyAssignment);
   7467     }
   7468   }
   7469 
   7470   //   Otherwise, the implicitly declared copy assignment operator will
   7471   //   have the form
   7472   //
   7473   //       X& X::operator=(X&)
   7474 
   7475   // C++ [except.spec]p14:
   7476   //   An implicitly declared special member function (Clause 12) shall have an
   7477   //   exception-specification. [...]
   7478 
   7479   // It is unspecified whether or not an implicit copy assignment operator
   7480   // attempts to deduplicate calls to assignment operators of virtual bases are
   7481   // made. As such, this exception specification is effectively unspecified.
   7482   // Based on a similar decision made for constness in C++0x, we're erring on
   7483   // the side of assuming such calls to be made regardless of whether they
   7484   // actually happen.
   7485   ImplicitExceptionSpecification ExceptSpec(Context);
   7486   unsigned ArgQuals = HasConstCopyAssignment ? Qualifiers::Const : 0;
   7487   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7488                                        BaseEnd = ClassDecl->bases_end();
   7489        Base != BaseEnd; ++Base) {
   7490     if (Base->isVirtual())
   7491       continue;
   7492 
   7493     CXXRecordDecl *BaseClassDecl
   7494       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7495     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   7496                                                             ArgQuals, false, 0))
   7497       ExceptSpec.CalledDecl(CopyAssign);
   7498   }
   7499 
   7500   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   7501                                        BaseEnd = ClassDecl->vbases_end();
   7502        Base != BaseEnd; ++Base) {
   7503     CXXRecordDecl *BaseClassDecl
   7504       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7505     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
   7506                                                             ArgQuals, false, 0))
   7507       ExceptSpec.CalledDecl(CopyAssign);
   7508   }
   7509 
   7510   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7511                                   FieldEnd = ClassDecl->field_end();
   7512        Field != FieldEnd;
   7513        ++Field) {
   7514     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   7515     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   7516       if (CXXMethodDecl *CopyAssign =
   7517           LookupCopyingAssignment(FieldClassDecl, ArgQuals, false, 0))
   7518         ExceptSpec.CalledDecl(CopyAssign);
   7519     }
   7520   }
   7521 
   7522   return std::make_pair(ExceptSpec, HasConstCopyAssignment);
   7523 }
   7524 
   7525 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
   7526   // Note: The following rules are largely analoguous to the copy
   7527   // constructor rules. Note that virtual bases are not taken into account
   7528   // for determining the argument type of the operator. Note also that
   7529   // operators taking an object instead of a reference are allowed.
   7530 
   7531   ImplicitExceptionSpecification Spec(Context);
   7532   bool Const;
   7533   llvm::tie(Spec, Const) =
   7534     ComputeDefaultedCopyAssignmentExceptionSpecAndConst(ClassDecl);
   7535 
   7536   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   7537   QualType RetType = Context.getLValueReferenceType(ArgType);
   7538   if (Const)
   7539     ArgType = ArgType.withConst();
   7540   ArgType = Context.getLValueReferenceType(ArgType);
   7541 
   7542   //   An implicitly-declared copy assignment operator is an inline public
   7543   //   member of its class.
   7544   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7545   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   7546   SourceLocation ClassLoc = ClassDecl->getLocation();
   7547   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7548   CXXMethodDecl *CopyAssignment
   7549     = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   7550                             Context.getFunctionType(RetType, &ArgType, 1, EPI),
   7551                             /*TInfo=*/0, /*isStatic=*/false,
   7552                             /*StorageClassAsWritten=*/SC_None,
   7553                             /*isInline=*/true, /*isConstexpr=*/false,
   7554                             SourceLocation());
   7555   CopyAssignment->setAccess(AS_public);
   7556   CopyAssignment->setDefaulted();
   7557   CopyAssignment->setImplicit();
   7558   CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
   7559 
   7560   // Add the parameter to the operator.
   7561   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
   7562                                                ClassLoc, ClassLoc, /*Id=*/0,
   7563                                                ArgType, /*TInfo=*/0,
   7564                                                SC_None,
   7565                                                SC_None, 0);
   7566   CopyAssignment->setParams(FromParam);
   7567 
   7568   // Note that we have added this copy-assignment operator.
   7569   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
   7570 
   7571   if (Scope *S = getScopeForContext(ClassDecl))
   7572     PushOnScopeChains(CopyAssignment, S, false);
   7573   ClassDecl->addDecl(CopyAssignment);
   7574 
   7575   // C++0x [class.copy]p18:
   7576   //   ... If the class definition declares a move constructor or move
   7577   //   assignment operator, the implicitly declared copy assignment operator is
   7578   //   defined as deleted; ...
   7579   if (ClassDecl->hasUserDeclaredMoveConstructor() ||
   7580       ClassDecl->hasUserDeclaredMoveAssignment() ||
   7581       ShouldDeleteCopyAssignmentOperator(CopyAssignment))
   7582     CopyAssignment->setDeletedAsWritten();
   7583 
   7584   AddOverriddenMethods(ClassDecl, CopyAssignment);
   7585   return CopyAssignment;
   7586 }
   7587 
   7588 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
   7589                                         CXXMethodDecl *CopyAssignOperator) {
   7590   assert((CopyAssignOperator->isDefaulted() &&
   7591           CopyAssignOperator->isOverloadedOperator() &&
   7592           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
   7593           !CopyAssignOperator->doesThisDeclarationHaveABody()) &&
   7594          "DefineImplicitCopyAssignment called for wrong function");
   7595 
   7596   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
   7597 
   7598   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
   7599     CopyAssignOperator->setInvalidDecl();
   7600     return;
   7601   }
   7602 
   7603   CopyAssignOperator->setUsed();
   7604 
   7605   ImplicitlyDefinedFunctionScope Scope(*this, CopyAssignOperator);
   7606   DiagnosticErrorTrap Trap(Diags);
   7607 
   7608   // C++0x [class.copy]p30:
   7609   //   The implicitly-defined or explicitly-defaulted copy assignment operator
   7610   //   for a non-union class X performs memberwise copy assignment of its
   7611   //   subobjects. The direct base classes of X are assigned first, in the
   7612   //   order of their declaration in the base-specifier-list, and then the
   7613   //   immediate non-static data members of X are assigned, in the order in
   7614   //   which they were declared in the class definition.
   7615 
   7616   // The statements that form the synthesized function body.
   7617   ASTOwningVector<Stmt*> Statements(*this);
   7618 
   7619   // The parameter for the "other" object, which we are copying from.
   7620   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
   7621   Qualifiers OtherQuals = Other->getType().getQualifiers();
   7622   QualType OtherRefType = Other->getType();
   7623   if (const LValueReferenceType *OtherRef
   7624                                 = OtherRefType->getAs<LValueReferenceType>()) {
   7625     OtherRefType = OtherRef->getPointeeType();
   7626     OtherQuals = OtherRefType.getQualifiers();
   7627   }
   7628 
   7629   // Our location for everything implicitly-generated.
   7630   SourceLocation Loc = CopyAssignOperator->getLocation();
   7631 
   7632   // Construct a reference to the "other" object. We'll be using this
   7633   // throughout the generated ASTs.
   7634   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   7635   assert(OtherRef && "Reference to parameter cannot fail!");
   7636 
   7637   // Construct the "this" pointer. We'll be using this throughout the generated
   7638   // ASTs.
   7639   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   7640   assert(This && "Reference to this cannot fail!");
   7641 
   7642   // Assign base classes.
   7643   bool Invalid = false;
   7644   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7645        E = ClassDecl->bases_end(); Base != E; ++Base) {
   7646     // Form the assignment:
   7647     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
   7648     QualType BaseType = Base->getType().getUnqualifiedType();
   7649     if (!BaseType->isRecordType()) {
   7650       Invalid = true;
   7651       continue;
   7652     }
   7653 
   7654     CXXCastPath BasePath;
   7655     BasePath.push_back(Base);
   7656 
   7657     // Construct the "from" expression, which is an implicit cast to the
   7658     // appropriately-qualified base type.
   7659     Expr *From = OtherRef;
   7660     From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
   7661                              CK_UncheckedDerivedToBase,
   7662                              VK_LValue, &BasePath).take();
   7663 
   7664     // Dereference "this".
   7665     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   7666 
   7667     // Implicitly cast "this" to the appropriately-qualified base type.
   7668     To = ImpCastExprToType(To.take(),
   7669                            Context.getCVRQualifiedType(BaseType,
   7670                                      CopyAssignOperator->getTypeQualifiers()),
   7671                            CK_UncheckedDerivedToBase,
   7672                            VK_LValue, &BasePath);
   7673 
   7674     // Build the copy.
   7675     StmtResult Copy = BuildSingleCopyAssign(*this, Loc, BaseType,
   7676                                             To.get(), From,
   7677                                             /*CopyingBaseSubobject=*/true,
   7678                                             /*Copying=*/true);
   7679     if (Copy.isInvalid()) {
   7680       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7681         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7682       CopyAssignOperator->setInvalidDecl();
   7683       return;
   7684     }
   7685 
   7686     // Success! Record the copy.
   7687     Statements.push_back(Copy.takeAs<Expr>());
   7688   }
   7689 
   7690   // \brief Reference to the __builtin_memcpy function.
   7691   Expr *BuiltinMemCpyRef = 0;
   7692   // \brief Reference to the __builtin_objc_memmove_collectable function.
   7693   Expr *CollectableMemCpyRef = 0;
   7694 
   7695   // Assign non-static members.
   7696   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7697                                   FieldEnd = ClassDecl->field_end();
   7698        Field != FieldEnd; ++Field) {
   7699     if (Field->isUnnamedBitfield())
   7700       continue;
   7701 
   7702     // Check for members of reference type; we can't copy those.
   7703     if (Field->getType()->isReferenceType()) {
   7704       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   7705         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   7706       Diag(Field->getLocation(), diag::note_declared_at);
   7707       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7708         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7709       Invalid = true;
   7710       continue;
   7711     }
   7712 
   7713     // Check for members of const-qualified, non-class type.
   7714     QualType BaseType = Context.getBaseElementType(Field->getType());
   7715     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   7716       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   7717         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   7718       Diag(Field->getLocation(), diag::note_declared_at);
   7719       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7720         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7721       Invalid = true;
   7722       continue;
   7723     }
   7724 
   7725     // Suppress assigning zero-width bitfields.
   7726     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   7727       continue;
   7728 
   7729     QualType FieldType = Field->getType().getNonReferenceType();
   7730     if (FieldType->isIncompleteArrayType()) {
   7731       assert(ClassDecl->hasFlexibleArrayMember() &&
   7732              "Incomplete array type is not valid");
   7733       continue;
   7734     }
   7735 
   7736     // Build references to the field in the object we're copying from and to.
   7737     CXXScopeSpec SS; // Intentionally empty
   7738     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   7739                               LookupMemberName);
   7740     MemberLookup.addDecl(*Field);
   7741     MemberLookup.resolveKind();
   7742     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   7743                                                Loc, /*IsArrow=*/false,
   7744                                                SS, 0, MemberLookup, 0);
   7745     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   7746                                              Loc, /*IsArrow=*/true,
   7747                                              SS, 0, MemberLookup, 0);
   7748     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   7749     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   7750 
   7751     // If the field should be copied with __builtin_memcpy rather than via
   7752     // explicit assignments, do so. This optimization only applies for arrays
   7753     // of scalars and arrays of class type with trivial copy-assignment
   7754     // operators.
   7755     if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
   7756         && BaseType.hasTrivialAssignment(Context, /*Copying=*/true)) {
   7757       // Compute the size of the memory buffer to be copied.
   7758       QualType SizeType = Context.getSizeType();
   7759       llvm::APInt Size(Context.getTypeSize(SizeType),
   7760                        Context.getTypeSizeInChars(BaseType).getQuantity());
   7761       for (const ConstantArrayType *Array
   7762               = Context.getAsConstantArrayType(FieldType);
   7763            Array;
   7764            Array = Context.getAsConstantArrayType(Array->getElementType())) {
   7765         llvm::APInt ArraySize
   7766           = Array->getSize().zextOrTrunc(Size.getBitWidth());
   7767         Size *= ArraySize;
   7768       }
   7769 
   7770       // Take the address of the field references for "from" and "to".
   7771       From = CreateBuiltinUnaryOp(Loc, UO_AddrOf, From.get());
   7772       To = CreateBuiltinUnaryOp(Loc, UO_AddrOf, To.get());
   7773 
   7774       bool NeedsCollectableMemCpy =
   7775           (BaseType->isRecordType() &&
   7776            BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
   7777 
   7778       if (NeedsCollectableMemCpy) {
   7779         if (!CollectableMemCpyRef) {
   7780           // Create a reference to the __builtin_objc_memmove_collectable function.
   7781           LookupResult R(*this,
   7782                          &Context.Idents.get("__builtin_objc_memmove_collectable"),
   7783                          Loc, LookupOrdinaryName);
   7784           LookupName(R, TUScope, true);
   7785 
   7786           FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
   7787           if (!CollectableMemCpy) {
   7788             // Something went horribly wrong earlier, and we will have
   7789             // complained about it.
   7790             Invalid = true;
   7791             continue;
   7792           }
   7793 
   7794           CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
   7795                                                   CollectableMemCpy->getType(),
   7796                                                   VK_LValue, Loc, 0).take();
   7797           assert(CollectableMemCpyRef && "Builtin reference cannot fail");
   7798         }
   7799       }
   7800       // Create a reference to the __builtin_memcpy builtin function.
   7801       else if (!BuiltinMemCpyRef) {
   7802         LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
   7803                        LookupOrdinaryName);
   7804         LookupName(R, TUScope, true);
   7805 
   7806         FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
   7807         if (!BuiltinMemCpy) {
   7808           // Something went horribly wrong earlier, and we will have complained
   7809           // about it.
   7810           Invalid = true;
   7811           continue;
   7812         }
   7813 
   7814         BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
   7815                                             BuiltinMemCpy->getType(),
   7816                                             VK_LValue, Loc, 0).take();
   7817         assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
   7818       }
   7819 
   7820       ASTOwningVector<Expr*> CallArgs(*this);
   7821       CallArgs.push_back(To.takeAs<Expr>());
   7822       CallArgs.push_back(From.takeAs<Expr>());
   7823       CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
   7824       ExprResult Call = ExprError();
   7825       if (NeedsCollectableMemCpy)
   7826         Call = ActOnCallExpr(/*Scope=*/0,
   7827                              CollectableMemCpyRef,
   7828                              Loc, move_arg(CallArgs),
   7829                              Loc);
   7830       else
   7831         Call = ActOnCallExpr(/*Scope=*/0,
   7832                              BuiltinMemCpyRef,
   7833                              Loc, move_arg(CallArgs),
   7834                              Loc);
   7835 
   7836       assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
   7837       Statements.push_back(Call.takeAs<Expr>());
   7838       continue;
   7839     }
   7840 
   7841     // Build the copy of this field.
   7842     StmtResult Copy = BuildSingleCopyAssign(*this, Loc, FieldType,
   7843                                             To.get(), From.get(),
   7844                                             /*CopyingBaseSubobject=*/false,
   7845                                             /*Copying=*/true);
   7846     if (Copy.isInvalid()) {
   7847       Diag(CurrentLocation, diag::note_member_synthesized_at)
   7848         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7849       CopyAssignOperator->setInvalidDecl();
   7850       return;
   7851     }
   7852 
   7853     // Success! Record the copy.
   7854     Statements.push_back(Copy.takeAs<Stmt>());
   7855   }
   7856 
   7857   if (!Invalid) {
   7858     // Add a "return *this;"
   7859     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   7860 
   7861     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   7862     if (Return.isInvalid())
   7863       Invalid = true;
   7864     else {
   7865       Statements.push_back(Return.takeAs<Stmt>());
   7866 
   7867       if (Trap.hasErrorOccurred()) {
   7868         Diag(CurrentLocation, diag::note_member_synthesized_at)
   7869           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
   7870         Invalid = true;
   7871       }
   7872     }
   7873   }
   7874 
   7875   if (Invalid) {
   7876     CopyAssignOperator->setInvalidDecl();
   7877     return;
   7878   }
   7879 
   7880   StmtResult Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
   7881                                             /*isStmtExpr=*/false);
   7882   assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   7883   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
   7884 
   7885   if (ASTMutationListener *L = getASTMutationListener()) {
   7886     L->CompletedImplicitDefinition(CopyAssignOperator);
   7887   }
   7888 }
   7889 
   7890 Sema::ImplicitExceptionSpecification
   7891 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXRecordDecl *ClassDecl) {
   7892   ImplicitExceptionSpecification ExceptSpec(Context);
   7893 
   7894   if (ClassDecl->isInvalidDecl())
   7895     return ExceptSpec;
   7896 
   7897   // C++0x [except.spec]p14:
   7898   //   An implicitly declared special member function (Clause 12) shall have an
   7899   //   exception-specification. [...]
   7900 
   7901   // It is unspecified whether or not an implicit move assignment operator
   7902   // attempts to deduplicate calls to assignment operators of virtual bases are
   7903   // made. As such, this exception specification is effectively unspecified.
   7904   // Based on a similar decision made for constness in C++0x, we're erring on
   7905   // the side of assuming such calls to be made regardless of whether they
   7906   // actually happen.
   7907   // Note that a move constructor is not implicitly declared when there are
   7908   // virtual bases, but it can still be user-declared and explicitly defaulted.
   7909   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   7910                                        BaseEnd = ClassDecl->bases_end();
   7911        Base != BaseEnd; ++Base) {
   7912     if (Base->isVirtual())
   7913       continue;
   7914 
   7915     CXXRecordDecl *BaseClassDecl
   7916       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7917     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   7918                                                            false, 0))
   7919       ExceptSpec.CalledDecl(MoveAssign);
   7920   }
   7921 
   7922   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   7923                                        BaseEnd = ClassDecl->vbases_end();
   7924        Base != BaseEnd; ++Base) {
   7925     CXXRecordDecl *BaseClassDecl
   7926       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   7927     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
   7928                                                            false, 0))
   7929       ExceptSpec.CalledDecl(MoveAssign);
   7930   }
   7931 
   7932   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   7933                                   FieldEnd = ClassDecl->field_end();
   7934        Field != FieldEnd;
   7935        ++Field) {
   7936     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   7937     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   7938       if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(FieldClassDecl,
   7939                                                              false, 0))
   7940         ExceptSpec.CalledDecl(MoveAssign);
   7941     }
   7942   }
   7943 
   7944   return ExceptSpec;
   7945 }
   7946 
   7947 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
   7948   // Note: The following rules are largely analoguous to the move
   7949   // constructor rules.
   7950 
   7951   ImplicitExceptionSpecification Spec(
   7952       ComputeDefaultedMoveAssignmentExceptionSpec(ClassDecl));
   7953 
   7954   QualType ArgType = Context.getTypeDeclType(ClassDecl);
   7955   QualType RetType = Context.getLValueReferenceType(ArgType);
   7956   ArgType = Context.getRValueReferenceType(ArgType);
   7957 
   7958   //   An implicitly-declared move assignment operator is an inline public
   7959   //   member of its class.
   7960   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   7961   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
   7962   SourceLocation ClassLoc = ClassDecl->getLocation();
   7963   DeclarationNameInfo NameInfo(Name, ClassLoc);
   7964   CXXMethodDecl *MoveAssignment
   7965     = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   7966                             Context.getFunctionType(RetType, &ArgType, 1, EPI),
   7967                             /*TInfo=*/0, /*isStatic=*/false,
   7968                             /*StorageClassAsWritten=*/SC_None,
   7969                             /*isInline=*/true,
   7970                             /*isConstexpr=*/false,
   7971                             SourceLocation());
   7972   MoveAssignment->setAccess(AS_public);
   7973   MoveAssignment->setDefaulted();
   7974   MoveAssignment->setImplicit();
   7975   MoveAssignment->setTrivial(ClassDecl->hasTrivialMoveAssignment());
   7976 
   7977   // Add the parameter to the operator.
   7978   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
   7979                                                ClassLoc, ClassLoc, /*Id=*/0,
   7980                                                ArgType, /*TInfo=*/0,
   7981                                                SC_None,
   7982                                                SC_None, 0);
   7983   MoveAssignment->setParams(FromParam);
   7984 
   7985   // Note that we have added this copy-assignment operator.
   7986   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
   7987 
   7988   // C++0x [class.copy]p9:
   7989   //   If the definition of a class X does not explicitly declare a move
   7990   //   assignment operator, one will be implicitly declared as defaulted if and
   7991   //   only if:
   7992   //   [...]
   7993   //   - the move assignment operator would not be implicitly defined as
   7994   //     deleted.
   7995   if (ShouldDeleteMoveAssignmentOperator(MoveAssignment)) {
   7996     // Cache this result so that we don't try to generate this over and over
   7997     // on every lookup, leaking memory and wasting time.
   7998     ClassDecl->setFailedImplicitMoveAssignment();
   7999     return 0;
   8000   }
   8001 
   8002   if (Scope *S = getScopeForContext(ClassDecl))
   8003     PushOnScopeChains(MoveAssignment, S, false);
   8004   ClassDecl->addDecl(MoveAssignment);
   8005 
   8006   AddOverriddenMethods(ClassDecl, MoveAssignment);
   8007   return MoveAssignment;
   8008 }
   8009 
   8010 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
   8011                                         CXXMethodDecl *MoveAssignOperator) {
   8012   assert((MoveAssignOperator->isDefaulted() &&
   8013           MoveAssignOperator->isOverloadedOperator() &&
   8014           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
   8015           !MoveAssignOperator->doesThisDeclarationHaveABody()) &&
   8016          "DefineImplicitMoveAssignment called for wrong function");
   8017 
   8018   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
   8019 
   8020   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
   8021     MoveAssignOperator->setInvalidDecl();
   8022     return;
   8023   }
   8024 
   8025   MoveAssignOperator->setUsed();
   8026 
   8027   ImplicitlyDefinedFunctionScope Scope(*this, MoveAssignOperator);
   8028   DiagnosticErrorTrap Trap(Diags);
   8029 
   8030   // C++0x [class.copy]p28:
   8031   //   The implicitly-defined or move assignment operator for a non-union class
   8032   //   X performs memberwise move assignment of its subobjects. The direct base
   8033   //   classes of X are assigned first, in the order of their declaration in the
   8034   //   base-specifier-list, and then the immediate non-static data members of X
   8035   //   are assigned, in the order in which they were declared in the class
   8036   //   definition.
   8037 
   8038   // The statements that form the synthesized function body.
   8039   ASTOwningVector<Stmt*> Statements(*this);
   8040 
   8041   // The parameter for the "other" object, which we are move from.
   8042   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
   8043   QualType OtherRefType = Other->getType()->
   8044       getAs<RValueReferenceType>()->getPointeeType();
   8045   assert(OtherRefType.getQualifiers() == 0 &&
   8046          "Bad argument type of defaulted move assignment");
   8047 
   8048   // Our location for everything implicitly-generated.
   8049   SourceLocation Loc = MoveAssignOperator->getLocation();
   8050 
   8051   // Construct a reference to the "other" object. We'll be using this
   8052   // throughout the generated ASTs.
   8053   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
   8054   assert(OtherRef && "Reference to parameter cannot fail!");
   8055   // Cast to rvalue.
   8056   OtherRef = CastForMoving(*this, OtherRef);
   8057 
   8058   // Construct the "this" pointer. We'll be using this throughout the generated
   8059   // ASTs.
   8060   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
   8061   assert(This && "Reference to this cannot fail!");
   8062 
   8063   // Assign base classes.
   8064   bool Invalid = false;
   8065   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8066        E = ClassDecl->bases_end(); Base != E; ++Base) {
   8067     // Form the assignment:
   8068     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
   8069     QualType BaseType = Base->getType().getUnqualifiedType();
   8070     if (!BaseType->isRecordType()) {
   8071       Invalid = true;
   8072       continue;
   8073     }
   8074 
   8075     CXXCastPath BasePath;
   8076     BasePath.push_back(Base);
   8077 
   8078     // Construct the "from" expression, which is an implicit cast to the
   8079     // appropriately-qualified base type.
   8080     Expr *From = OtherRef;
   8081     From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
   8082                              VK_XValue, &BasePath).take();
   8083 
   8084     // Dereference "this".
   8085     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   8086 
   8087     // Implicitly cast "this" to the appropriately-qualified base type.
   8088     To = ImpCastExprToType(To.take(),
   8089                            Context.getCVRQualifiedType(BaseType,
   8090                                      MoveAssignOperator->getTypeQualifiers()),
   8091                            CK_UncheckedDerivedToBase,
   8092                            VK_LValue, &BasePath);
   8093 
   8094     // Build the move.
   8095     StmtResult Move = BuildSingleCopyAssign(*this, Loc, BaseType,
   8096                                             To.get(), From,
   8097                                             /*CopyingBaseSubobject=*/true,
   8098                                             /*Copying=*/false);
   8099     if (Move.isInvalid()) {
   8100       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8101         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8102       MoveAssignOperator->setInvalidDecl();
   8103       return;
   8104     }
   8105 
   8106     // Success! Record the move.
   8107     Statements.push_back(Move.takeAs<Expr>());
   8108   }
   8109 
   8110   // \brief Reference to the __builtin_memcpy function.
   8111   Expr *BuiltinMemCpyRef = 0;
   8112   // \brief Reference to the __builtin_objc_memmove_collectable function.
   8113   Expr *CollectableMemCpyRef = 0;
   8114 
   8115   // Assign non-static members.
   8116   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8117                                   FieldEnd = ClassDecl->field_end();
   8118        Field != FieldEnd; ++Field) {
   8119     if (Field->isUnnamedBitfield())
   8120       continue;
   8121 
   8122     // Check for members of reference type; we can't move those.
   8123     if (Field->getType()->isReferenceType()) {
   8124       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   8125         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
   8126       Diag(Field->getLocation(), diag::note_declared_at);
   8127       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8128         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8129       Invalid = true;
   8130       continue;
   8131     }
   8132 
   8133     // Check for members of const-qualified, non-class type.
   8134     QualType BaseType = Context.getBaseElementType(Field->getType());
   8135     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
   8136       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
   8137         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
   8138       Diag(Field->getLocation(), diag::note_declared_at);
   8139       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8140         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8141       Invalid = true;
   8142       continue;
   8143     }
   8144 
   8145     // Suppress assigning zero-width bitfields.
   8146     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
   8147       continue;
   8148 
   8149     QualType FieldType = Field->getType().getNonReferenceType();
   8150     if (FieldType->isIncompleteArrayType()) {
   8151       assert(ClassDecl->hasFlexibleArrayMember() &&
   8152              "Incomplete array type is not valid");
   8153       continue;
   8154     }
   8155 
   8156     // Build references to the field in the object we're copying from and to.
   8157     CXXScopeSpec SS; // Intentionally empty
   8158     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
   8159                               LookupMemberName);
   8160     MemberLookup.addDecl(*Field);
   8161     MemberLookup.resolveKind();
   8162     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
   8163                                                Loc, /*IsArrow=*/false,
   8164                                                SS, 0, MemberLookup, 0);
   8165     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
   8166                                              Loc, /*IsArrow=*/true,
   8167                                              SS, 0, MemberLookup, 0);
   8168     assert(!From.isInvalid() && "Implicit field reference cannot fail");
   8169     assert(!To.isInvalid() && "Implicit field reference cannot fail");
   8170 
   8171     assert(!From.get()->isLValue() && // could be xvalue or prvalue
   8172         "Member reference with rvalue base must be rvalue except for reference "
   8173         "members, which aren't allowed for move assignment.");
   8174 
   8175     // If the field should be copied with __builtin_memcpy rather than via
   8176     // explicit assignments, do so. This optimization only applies for arrays
   8177     // of scalars and arrays of class type with trivial move-assignment
   8178     // operators.
   8179     if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
   8180         && BaseType.hasTrivialAssignment(Context, /*Copying=*/false)) {
   8181       // Compute the size of the memory buffer to be copied.
   8182       QualType SizeType = Context.getSizeType();
   8183       llvm::APInt Size(Context.getTypeSize(SizeType),
   8184                        Context.getTypeSizeInChars(BaseType).getQuantity());
   8185       for (const ConstantArrayType *Array
   8186               = Context.getAsConstantArrayType(FieldType);
   8187            Array;
   8188            Array = Context.getAsConstantArrayType(Array->getElementType())) {
   8189         llvm::APInt ArraySize
   8190           = Array->getSize().zextOrTrunc(Size.getBitWidth());
   8191         Size *= ArraySize;
   8192       }
   8193 
   8194       // Take the address of the field references for "from" and "to". We
   8195       // directly construct UnaryOperators here because semantic analysis
   8196       // does not permit us to take the address of an xvalue.
   8197       From = new (Context) UnaryOperator(From.get(), UO_AddrOf,
   8198                              Context.getPointerType(From.get()->getType()),
   8199                              VK_RValue, OK_Ordinary, Loc);
   8200       To = new (Context) UnaryOperator(To.get(), UO_AddrOf,
   8201                            Context.getPointerType(To.get()->getType()),
   8202                            VK_RValue, OK_Ordinary, Loc);
   8203 
   8204       bool NeedsCollectableMemCpy =
   8205           (BaseType->isRecordType() &&
   8206            BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
   8207 
   8208       if (NeedsCollectableMemCpy) {
   8209         if (!CollectableMemCpyRef) {
   8210           // Create a reference to the __builtin_objc_memmove_collectable function.
   8211           LookupResult R(*this,
   8212                          &Context.Idents.get("__builtin_objc_memmove_collectable"),
   8213                          Loc, LookupOrdinaryName);
   8214           LookupName(R, TUScope, true);
   8215 
   8216           FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
   8217           if (!CollectableMemCpy) {
   8218             // Something went horribly wrong earlier, and we will have
   8219             // complained about it.
   8220             Invalid = true;
   8221             continue;
   8222           }
   8223 
   8224           CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
   8225                                                   CollectableMemCpy->getType(),
   8226                                                   VK_LValue, Loc, 0).take();
   8227           assert(CollectableMemCpyRef && "Builtin reference cannot fail");
   8228         }
   8229       }
   8230       // Create a reference to the __builtin_memcpy builtin function.
   8231       else if (!BuiltinMemCpyRef) {
   8232         LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
   8233                        LookupOrdinaryName);
   8234         LookupName(R, TUScope, true);
   8235 
   8236         FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
   8237         if (!BuiltinMemCpy) {
   8238           // Something went horribly wrong earlier, and we will have complained
   8239           // about it.
   8240           Invalid = true;
   8241           continue;
   8242         }
   8243 
   8244         BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
   8245                                             BuiltinMemCpy->getType(),
   8246                                             VK_LValue, Loc, 0).take();
   8247         assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
   8248       }
   8249 
   8250       ASTOwningVector<Expr*> CallArgs(*this);
   8251       CallArgs.push_back(To.takeAs<Expr>());
   8252       CallArgs.push_back(From.takeAs<Expr>());
   8253       CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
   8254       ExprResult Call = ExprError();
   8255       if (NeedsCollectableMemCpy)
   8256         Call = ActOnCallExpr(/*Scope=*/0,
   8257                              CollectableMemCpyRef,
   8258                              Loc, move_arg(CallArgs),
   8259                              Loc);
   8260       else
   8261         Call = ActOnCallExpr(/*Scope=*/0,
   8262                              BuiltinMemCpyRef,
   8263                              Loc, move_arg(CallArgs),
   8264                              Loc);
   8265 
   8266       assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
   8267       Statements.push_back(Call.takeAs<Expr>());
   8268       continue;
   8269     }
   8270 
   8271     // Build the move of this field.
   8272     StmtResult Move = BuildSingleCopyAssign(*this, Loc, FieldType,
   8273                                             To.get(), From.get(),
   8274                                             /*CopyingBaseSubobject=*/false,
   8275                                             /*Copying=*/false);
   8276     if (Move.isInvalid()) {
   8277       Diag(CurrentLocation, diag::note_member_synthesized_at)
   8278         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8279       MoveAssignOperator->setInvalidDecl();
   8280       return;
   8281     }
   8282 
   8283     // Success! Record the copy.
   8284     Statements.push_back(Move.takeAs<Stmt>());
   8285   }
   8286 
   8287   if (!Invalid) {
   8288     // Add a "return *this;"
   8289     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
   8290 
   8291     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
   8292     if (Return.isInvalid())
   8293       Invalid = true;
   8294     else {
   8295       Statements.push_back(Return.takeAs<Stmt>());
   8296 
   8297       if (Trap.hasErrorOccurred()) {
   8298         Diag(CurrentLocation, diag::note_member_synthesized_at)
   8299           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
   8300         Invalid = true;
   8301       }
   8302     }
   8303   }
   8304 
   8305   if (Invalid) {
   8306     MoveAssignOperator->setInvalidDecl();
   8307     return;
   8308   }
   8309 
   8310   StmtResult Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
   8311                                             /*isStmtExpr=*/false);
   8312   assert(!Body.isInvalid() && "Compound statement creation cannot fail");
   8313   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
   8314 
   8315   if (ASTMutationListener *L = getASTMutationListener()) {
   8316     L->CompletedImplicitDefinition(MoveAssignOperator);
   8317   }
   8318 }
   8319 
   8320 std::pair<Sema::ImplicitExceptionSpecification, bool>
   8321 Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
   8322   if (ClassDecl->isInvalidDecl())
   8323     return std::make_pair(ImplicitExceptionSpecification(Context), false);
   8324 
   8325   // C++ [class.copy]p5:
   8326   //   The implicitly-declared copy constructor for a class X will
   8327   //   have the form
   8328   //
   8329   //       X::X(const X&)
   8330   //
   8331   //   if
   8332   // FIXME: It ought to be possible to store this on the record.
   8333   bool HasConstCopyConstructor = true;
   8334 
   8335   //     -- each direct or virtual base class B of X has a copy
   8336   //        constructor whose first parameter is of type const B& or
   8337   //        const volatile B&, and
   8338   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8339                                        BaseEnd = ClassDecl->bases_end();
   8340        HasConstCopyConstructor && Base != BaseEnd;
   8341        ++Base) {
   8342     // Virtual bases are handled below.
   8343     if (Base->isVirtual())
   8344       continue;
   8345 
   8346     CXXRecordDecl *BaseClassDecl
   8347       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8348     LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
   8349                              &HasConstCopyConstructor);
   8350   }
   8351 
   8352   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8353                                        BaseEnd = ClassDecl->vbases_end();
   8354        HasConstCopyConstructor && Base != BaseEnd;
   8355        ++Base) {
   8356     CXXRecordDecl *BaseClassDecl
   8357       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8358     LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
   8359                              &HasConstCopyConstructor);
   8360   }
   8361 
   8362   //     -- for all the nonstatic data members of X that are of a
   8363   //        class type M (or array thereof), each such class type
   8364   //        has a copy constructor whose first parameter is of type
   8365   //        const M& or const volatile M&.
   8366   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8367                                   FieldEnd = ClassDecl->field_end();
   8368        HasConstCopyConstructor && Field != FieldEnd;
   8369        ++Field) {
   8370     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   8371     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8372       LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const,
   8373                                &HasConstCopyConstructor);
   8374     }
   8375   }
   8376   //   Otherwise, the implicitly declared copy constructor will have
   8377   //   the form
   8378   //
   8379   //       X::X(X&)
   8380 
   8381   // C++ [except.spec]p14:
   8382   //   An implicitly declared special member function (Clause 12) shall have an
   8383   //   exception-specification. [...]
   8384   ImplicitExceptionSpecification ExceptSpec(Context);
   8385   unsigned Quals = HasConstCopyConstructor? Qualifiers::Const : 0;
   8386   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
   8387                                        BaseEnd = ClassDecl->bases_end();
   8388        Base != BaseEnd;
   8389        ++Base) {
   8390     // Virtual bases are handled below.
   8391     if (Base->isVirtual())
   8392       continue;
   8393 
   8394     CXXRecordDecl *BaseClassDecl
   8395       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8396     if (CXXConstructorDecl *CopyConstructor =
   8397           LookupCopyingConstructor(BaseClassDecl, Quals))
   8398       ExceptSpec.CalledDecl(CopyConstructor);
   8399   }
   8400   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
   8401                                        BaseEnd = ClassDecl->vbases_end();
   8402        Base != BaseEnd;
   8403        ++Base) {
   8404     CXXRecordDecl *BaseClassDecl
   8405       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   8406     if (CXXConstructorDecl *CopyConstructor =
   8407           LookupCopyingConstructor(BaseClassDecl, Quals))
   8408       ExceptSpec.CalledDecl(CopyConstructor);
   8409   }
   8410   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
   8411                                   FieldEnd = ClassDecl->field_end();
   8412        Field != FieldEnd;
   8413        ++Field) {
   8414     QualType FieldType = Context.getBaseElementType((*Field)->getType());
   8415     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
   8416       if (CXXConstructorDecl *CopyConstructor =
   8417         LookupCopyingConstructor(FieldClassDecl, Quals))
   8418       ExceptSpec.CalledDecl(CopyConstructor);
   8419     }
   8420   }
   8421 
   8422   return std::make_pair(ExceptSpec, HasConstCopyConstructor);
   8423 }
   8424 
   8425 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
   8426                                                     CXXRecordDecl *ClassDecl) {
   8427   // C++ [class.copy]p4:
   8428   //   If the class definition does not explicitly declare a copy
   8429   //   constructor, one is declared implicitly.
   8430 
   8431   ImplicitExceptionSpecification Spec(Context);
   8432   bool Const;
   8433   llvm::tie(Spec, Const) =
   8434     ComputeDefaultedCopyCtorExceptionSpecAndConst(ClassDecl);
   8435 
   8436   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   8437   QualType ArgType = ClassType;
   8438   if (Const)
   8439     ArgType = ArgType.withConst();
   8440   ArgType = Context.getLValueReferenceType(ArgType);
   8441 
   8442   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   8443 
   8444   DeclarationName Name
   8445     = Context.DeclarationNames.getCXXConstructorName(
   8446                                            Context.getCanonicalType(ClassType));
   8447   SourceLocation ClassLoc = ClassDecl->getLocation();
   8448   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8449 
   8450   //   An implicitly-declared copy constructor is an inline public
   8451   //   member of its class.
   8452   CXXConstructorDecl *CopyConstructor
   8453     = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   8454                                  Context.getFunctionType(Context.VoidTy,
   8455                                                          &ArgType, 1, EPI),
   8456                                  /*TInfo=*/0,
   8457                                  /*isExplicit=*/false,
   8458                                  /*isInline=*/true,
   8459                                  /*isImplicitlyDeclared=*/true,
   8460                                  // FIXME: apply the rules for definitions here
   8461                                  /*isConstexpr=*/false);
   8462   CopyConstructor->setAccess(AS_public);
   8463   CopyConstructor->setDefaulted();
   8464   CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
   8465 
   8466   // Note that we have declared this constructor.
   8467   ++ASTContext::NumImplicitCopyConstructorsDeclared;
   8468 
   8469   // Add the parameter to the constructor.
   8470   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
   8471                                                ClassLoc, ClassLoc,
   8472                                                /*IdentifierInfo=*/0,
   8473                                                ArgType, /*TInfo=*/0,
   8474                                                SC_None,
   8475                                                SC_None, 0);
   8476   CopyConstructor->setParams(FromParam);
   8477 
   8478   if (Scope *S = getScopeForContext(ClassDecl))
   8479     PushOnScopeChains(CopyConstructor, S, false);
   8480   ClassDecl->addDecl(CopyConstructor);
   8481 
   8482   // C++0x [class.copy]p7:
   8483   //   ... If the class definition declares a move constructor or move
   8484   //   assignment operator, the implicitly declared constructor is defined as
   8485   //   deleted; ...
   8486   if (ClassDecl->hasUserDeclaredMoveConstructor() ||
   8487       ClassDecl->hasUserDeclaredMoveAssignment() ||
   8488       ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
   8489     CopyConstructor->setDeletedAsWritten();
   8490 
   8491   return CopyConstructor;
   8492 }
   8493 
   8494 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
   8495                                    CXXConstructorDecl *CopyConstructor) {
   8496   assert((CopyConstructor->isDefaulted() &&
   8497           CopyConstructor->isCopyConstructor() &&
   8498           !CopyConstructor->doesThisDeclarationHaveABody()) &&
   8499          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
   8500 
   8501   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
   8502   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
   8503 
   8504   ImplicitlyDefinedFunctionScope Scope(*this, CopyConstructor);
   8505   DiagnosticErrorTrap Trap(Diags);
   8506 
   8507   if (SetCtorInitializers(CopyConstructor, 0, 0, /*AnyErrors=*/false) ||
   8508       Trap.hasErrorOccurred()) {
   8509     Diag(CurrentLocation, diag::note_member_synthesized_at)
   8510       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
   8511     CopyConstructor->setInvalidDecl();
   8512   }  else {
   8513     CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
   8514                                                CopyConstructor->getLocation(),
   8515                                                MultiStmtArg(*this, 0, 0),
   8516                                                /*isStmtExpr=*/false)
   8517                                                               .takeAs<Stmt>());
   8518     CopyConstructor->setImplicitlyDefined(true);
   8519   }
   8520 
   8521   CopyConstructor->setUsed();
   8522   if (ASTMutationListener *L = getASTMutationListener()) {
   8523     L->CompletedImplicitDefinition(CopyConstructor);
   8524   }
   8525 }
   8526 
   8527 Sema::ImplicitExceptionSpecification
   8528 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
   8529   // C++ [except.spec]p14:
   8530   //   An implicitly declared special member function (Clause 12) shall have an
   8531   //   exception-specification. [...]
   8532   ImplicitExceptionSpecification ExceptSpec(Context);
   8533   if (ClassDecl->isInvalidDecl())
   8534     return ExceptSpec;
   8535 
   8536   // Direct base-class constructors.
   8537   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
   8538                                        BEnd = ClassDecl->bases_end();
   8539        B != BEnd; ++B) {
   8540     if (B->isVirtual()) // Handled below.
   8541       continue;
   8542 
   8543     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   8544       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   8545       CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
   8546       // If this is a deleted function, add it anyway. This might be conformant
   8547       // with the standard. This might not. I'm not sure. It might not matter.
   8548       if (Constructor)
   8549         ExceptSpec.CalledDecl(Constructor);
   8550     }
   8551   }
   8552 
   8553   // Virtual base-class constructors.
   8554   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
   8555                                        BEnd = ClassDecl->vbases_end();
   8556        B != BEnd; ++B) {
   8557     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
   8558       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
   8559       CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
   8560       // If this is a deleted function, add it anyway. This might be conformant
   8561       // with the standard. This might not. I'm not sure. It might not matter.
   8562       if (Constructor)
   8563         ExceptSpec.CalledDecl(Constructor);
   8564     }
   8565   }
   8566 
   8567   // Field constructors.
   8568   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
   8569                                FEnd = ClassDecl->field_end();
   8570        F != FEnd; ++F) {
   8571     if (F->hasInClassInitializer()) {
   8572       if (Expr *E = F->getInClassInitializer())
   8573         ExceptSpec.CalledExpr(E);
   8574       else if (!F->isInvalidDecl())
   8575         ExceptSpec.SetDelayed();
   8576     } else if (const RecordType *RecordTy
   8577               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
   8578       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
   8579       CXXConstructorDecl *Constructor = LookupMovingConstructor(FieldRecDecl);
   8580       // If this is a deleted function, add it anyway. This might be conformant
   8581       // with the standard. This might not. I'm not sure. It might not matter.
   8582       // In particular, the problem is that this function never gets called. It
   8583       // might just be ill-formed because this function attempts to refer to
   8584       // a deleted function here.
   8585       if (Constructor)
   8586         ExceptSpec.CalledDecl(Constructor);
   8587     }
   8588   }
   8589 
   8590   return ExceptSpec;
   8591 }
   8592 
   8593 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
   8594                                                     CXXRecordDecl *ClassDecl) {
   8595   ImplicitExceptionSpecification Spec(
   8596       ComputeDefaultedMoveCtorExceptionSpec(ClassDecl));
   8597 
   8598   QualType ClassType = Context.getTypeDeclType(ClassDecl);
   8599   QualType ArgType = Context.getRValueReferenceType(ClassType);
   8600 
   8601   FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
   8602 
   8603   DeclarationName Name
   8604     = Context.DeclarationNames.getCXXConstructorName(
   8605                                            Context.getCanonicalType(ClassType));
   8606   SourceLocation ClassLoc = ClassDecl->getLocation();
   8607   DeclarationNameInfo NameInfo(Name, ClassLoc);
   8608 
   8609   // C++0x [class.copy]p11:
   8610   //   An implicitly-declared copy/move constructor is an inline public
   8611   //   member of its class.
   8612   CXXConstructorDecl *MoveConstructor
   8613     = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
   8614                                  Context.getFunctionType(Context.VoidTy,
   8615                                                          &ArgType, 1, EPI),
   8616                                  /*TInfo=*/0,
   8617                                  /*isExplicit=*/false,
   8618                                  /*isInline=*/true,
   8619                                  /*isImplicitlyDeclared=*/true,
   8620                                  // FIXME: apply the rules for definitions here
   8621                                  /*isConstexpr=*/false);
   8622   MoveConstructor->setAccess(AS_public);
   8623   MoveConstructor->setDefaulted();
   8624   MoveConstructor->setTrivial(ClassDecl->hasTrivialMoveConstructor());
   8625 
   8626   // Add the parameter to the constructor.
   8627   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
   8628                                                ClassLoc, ClassLoc,
   8629                                                /*IdentifierInfo=*/0,
   8630                                                ArgType, /*TInfo=*/0,
   8631                                                SC_None,
   8632                                                SC_None, 0);
   8633   MoveConstructor->setParams(FromParam);
   8634 
   8635   // C++0x [class.copy]p9:
   8636   //   If the definition of a class X does not explicitly declare a move
   8637   //   constructor, one will be implicitly declared as defaulted if and only if:
   8638   //   [...]
   8639   //   - the move constructor would not be implicitly defined as deleted.
   8640   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
   8641     // Cache this result so that we don't try to generate this over and over
   8642     // on every lookup, leaking memory and wasting time.
   8643     ClassDecl->setFailedImplicitMoveConstructor();
   8644     return 0;
   8645   }
   8646 
   8647   // Note that we have declared this constructor.
   8648   ++ASTContext::NumImplicitMoveConstructorsDeclared;
   8649 
   8650   if (Scope *S = getScopeForContext(ClassDecl))
   8651     PushOnScopeChains(MoveConstructor, S, false);
   8652   ClassDecl->addDecl(MoveConstructor);
   8653 
   8654   return MoveConstructor;
   8655 }
   8656 
   8657 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
   8658                                    CXXConstructorDecl *MoveConstructor) {
   8659   assert((MoveConstructor->isDefaulted() &&
   8660           MoveConstructor->isMoveConstructor() &&
   8661           !MoveConstructor->doesThisDeclarationHaveABody()) &&
   8662          "DefineImplicitMoveConstructor - call it for implicit move ctor");
   8663 
   8664   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
   8665   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
   8666 
   8667   ImplicitlyDefinedFunctionScope Scope(*this, MoveConstructor);
   8668   DiagnosticErrorTrap Trap(Diags);
   8669 
   8670   if (SetCtorInitializers(MoveConstructor, 0, 0, /*AnyErrors=*/false) ||
   8671       Trap.hasErrorOccurred()) {
   8672     Diag(CurrentLocation, diag::note_member_synthesized_at)
   8673       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
   8674     MoveConstructor->setInvalidDecl();
   8675   }  else {
   8676     MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
   8677                                                MoveConstructor->getLocation(),
   8678                                                MultiStmtArg(*this, 0, 0),
   8679                                                /*isStmtExpr=*/false)
   8680                                                               .takeAs<Stmt>());
   8681     MoveConstructor->setImplicitlyDefined(true);
   8682   }
   8683 
   8684   MoveConstructor->setUsed();
   8685 
   8686   if (ASTMutationListener *L = getASTMutationListener()) {
   8687     L->CompletedImplicitDefinition(MoveConstructor);
   8688   }
   8689 }
   8690 
   8691 ExprResult
   8692 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   8693                             CXXConstructorDecl *Constructor,
   8694                             MultiExprArg ExprArgs,
   8695                             bool HadMultipleCandidates,
   8696                             bool RequiresZeroInit,
   8697                             unsigned ConstructKind,
   8698                             SourceRange ParenRange) {
   8699   bool Elidable = false;
   8700 
   8701   // C++0x [class.copy]p34:
   8702   //   When certain criteria are met, an implementation is allowed to
   8703   //   omit the copy/move construction of a class object, even if the
   8704   //   copy/move constructor and/or destructor for the object have
   8705   //   side effects. [...]
   8706   //     - when a temporary class object that has not been bound to a
   8707   //       reference (12.2) would be copied/moved to a class object
   8708   //       with the same cv-unqualified type, the copy/move operation
   8709   //       can be omitted by constructing the temporary object
   8710   //       directly into the target of the omitted copy/move
   8711   if (ConstructKind == CXXConstructExpr::CK_Complete &&
   8712       Constructor->isCopyOrMoveConstructor() && ExprArgs.size() >= 1) {
   8713     Expr *SubExpr = ((Expr **)ExprArgs.get())[0];
   8714     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
   8715   }
   8716 
   8717   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
   8718                                Elidable, move(ExprArgs), HadMultipleCandidates,
   8719                                RequiresZeroInit, ConstructKind, ParenRange);
   8720 }
   8721 
   8722 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   8723 /// including handling of its default argument expressions.
   8724 ExprResult
   8725 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
   8726                             CXXConstructorDecl *Constructor, bool Elidable,
   8727                             MultiExprArg ExprArgs,
   8728                             bool HadMultipleCandidates,
   8729                             bool RequiresZeroInit,
   8730                             unsigned ConstructKind,
   8731                             SourceRange ParenRange) {
   8732   unsigned NumExprs = ExprArgs.size();
   8733   Expr **Exprs = (Expr **)ExprArgs.release();
   8734 
   8735   for (specific_attr_iterator<NonNullAttr>
   8736            i = Constructor->specific_attr_begin<NonNullAttr>(),
   8737            e = Constructor->specific_attr_end<NonNullAttr>(); i != e; ++i) {
   8738     const NonNullAttr *NonNull = *i;
   8739     CheckNonNullArguments(NonNull, ExprArgs.get(), ConstructLoc);
   8740   }
   8741 
   8742   MarkDeclarationReferenced(ConstructLoc, Constructor);
   8743   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
   8744                                         Constructor, Elidable, Exprs, NumExprs,
   8745                                         HadMultipleCandidates, RequiresZeroInit,
   8746               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
   8747                                         ParenRange));
   8748 }
   8749 
   8750 bool Sema::InitializeVarWithConstructor(VarDecl *VD,
   8751                                         CXXConstructorDecl *Constructor,
   8752                                         MultiExprArg Exprs,
   8753                                         bool HadMultipleCandidates) {
   8754   // FIXME: Provide the correct paren SourceRange when available.
   8755   ExprResult TempResult =
   8756     BuildCXXConstructExpr(VD->getLocation(), VD->getType(), Constructor,
   8757                           move(Exprs), HadMultipleCandidates, false,
   8758                           CXXConstructExpr::CK_Complete, SourceRange());
   8759   if (TempResult.isInvalid())
   8760     return true;
   8761 
   8762   Expr *Temp = TempResult.takeAs<Expr>();
   8763   CheckImplicitConversions(Temp, VD->getLocation());
   8764   MarkDeclarationReferenced(VD->getLocation(), Constructor);
   8765   Temp = MaybeCreateExprWithCleanups(Temp);
   8766   VD->setInit(Temp);
   8767 
   8768   return false;
   8769 }
   8770 
   8771 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
   8772   if (VD->isInvalidDecl()) return;
   8773 
   8774   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
   8775   if (ClassDecl->isInvalidDecl()) return;
   8776   if (ClassDecl->hasTrivialDestructor()) return;
   8777   if (ClassDecl->isDependentContext()) return;
   8778 
   8779   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
   8780   MarkDeclarationReferenced(VD->getLocation(), Destructor);
   8781   CheckDestructorAccess(VD->getLocation(), Destructor,
   8782                         PDiag(diag::err_access_dtor_var)
   8783                         << VD->getDeclName()
   8784                         << VD->getType());
   8785 
   8786   if (!VD->hasGlobalStorage()) return;
   8787 
   8788   // Emit warning for non-trivial dtor in global scope (a real global,
   8789   // class-static, function-static).
   8790   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
   8791 
   8792   // TODO: this should be re-enabled for static locals by !CXAAtExit
   8793   if (!VD->isStaticLocal())
   8794     Diag(VD->getLocation(), diag::warn_global_destructor);
   8795 }
   8796 
   8797 /// AddCXXDirectInitializerToDecl - This action is called immediately after
   8798 /// ActOnDeclarator, when a C++ direct initializer is present.
   8799 /// e.g: "int x(1);"
   8800 void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl,
   8801                                          SourceLocation LParenLoc,
   8802                                          MultiExprArg Exprs,
   8803                                          SourceLocation RParenLoc,
   8804                                          bool TypeMayContainAuto) {
   8805   assert(Exprs.size() != 0 && Exprs.get() && "missing expressions");
   8806 
   8807   // If there is no declaration, there was an error parsing it.  Just ignore
   8808   // the initializer.
   8809   if (RealDecl == 0)
   8810     return;
   8811 
   8812   VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
   8813   if (!VDecl) {
   8814     Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
   8815     RealDecl->setInvalidDecl();
   8816     return;
   8817   }
   8818 
   8819   // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
   8820   if (TypeMayContainAuto && VDecl->getType()->getContainedAutoType()) {
   8821     // FIXME: n3225 doesn't actually seem to indicate this is ill-formed
   8822     if (Exprs.size() > 1) {
   8823       Diag(Exprs.get()[1]->getSourceRange().getBegin(),
   8824            diag::err_auto_var_init_multiple_expressions)
   8825         << VDecl->getDeclName() << VDecl->getType()
   8826         << VDecl->getSourceRange();
   8827       RealDecl->setInvalidDecl();
   8828       return;
   8829     }
   8830 
   8831     Expr *Init = Exprs.get()[0];
   8832     TypeSourceInfo *DeducedType = 0;
   8833     if (!DeduceAutoType(VDecl->getTypeSourceInfo(), Init, DeducedType))
   8834       Diag(VDecl->getLocation(), diag::err_auto_var_deduction_failure)
   8835         << VDecl->getDeclName() << VDecl->getType() << Init->getType()
   8836         << Init->getSourceRange();
   8837     if (!DeducedType) {
   8838       RealDecl->setInvalidDecl();
   8839       return;
   8840     }
   8841     VDecl->setTypeSourceInfo(DeducedType);
   8842     VDecl->setType(DeducedType->getType());
   8843 
   8844     // In ARC, infer lifetime.
   8845     if (getLangOptions().ObjCAutoRefCount && inferObjCARCLifetime(VDecl))
   8846       VDecl->setInvalidDecl();
   8847 
   8848     // If this is a redeclaration, check that the type we just deduced matches
   8849     // the previously declared type.
   8850     if (VarDecl *Old = VDecl->getPreviousDeclaration())
   8851       MergeVarDeclTypes(VDecl, Old);
   8852   }
   8853 
   8854   // We will represent direct-initialization similarly to copy-initialization:
   8855   //    int x(1);  -as-> int x = 1;
   8856   //    ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
   8857   //
   8858   // Clients that want to distinguish between the two forms, can check for
   8859   // direct initializer using VarDecl::hasCXXDirectInitializer().
   8860   // A major benefit is that clients that don't particularly care about which
   8861   // exactly form was it (like the CodeGen) can handle both cases without
   8862   // special case code.
   8863 
   8864   // C++ 8.5p11:
   8865   // The form of initialization (using parentheses or '=') is generally
   8866   // insignificant, but does matter when the entity being initialized has a
   8867   // class type.
   8868 
   8869   if (!VDecl->getType()->isDependentType() &&
   8870       !VDecl->getType()->isIncompleteArrayType() &&
   8871       RequireCompleteType(VDecl->getLocation(), VDecl->getType(),
   8872                           diag::err_typecheck_decl_incomplete_type)) {
   8873     VDecl->setInvalidDecl();
   8874     return;
   8875   }
   8876 
   8877   // The variable can not have an abstract class type.
   8878   if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
   8879                              diag::err_abstract_type_in_decl,
   8880                              AbstractVariableType))
   8881     VDecl->setInvalidDecl();
   8882 
   8883   const VarDecl *Def;
   8884   if ((Def = VDecl->getDefinition()) && Def != VDecl) {
   8885     Diag(VDecl->getLocation(), diag::err_redefinition)
   8886     << VDecl->getDeclName();
   8887     Diag(Def->getLocation(), diag::note_previous_definition);
   8888     VDecl->setInvalidDecl();
   8889     return;
   8890   }
   8891 
   8892   // C++ [class.static.data]p4
   8893   //   If a static data member is of const integral or const
   8894   //   enumeration type, its declaration in the class definition can
   8895   //   specify a constant-initializer which shall be an integral
   8896   //   constant expression (5.19). In that case, the member can appear
   8897   //   in integral constant expressions. The member shall still be
   8898   //   defined in a namespace scope if it is used in the program and the
   8899   //   namespace scope definition shall not contain an initializer.
   8900   //
   8901   // We already performed a redefinition check above, but for static
   8902   // data members we also need to check whether there was an in-class
   8903   // declaration with an initializer.
   8904   const VarDecl* PrevInit = 0;
   8905   if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) {
   8906     Diag(VDecl->getLocation(), diag::err_redefinition) << VDecl->getDeclName();
   8907     Diag(PrevInit->getLocation(), diag::note_previous_definition);
   8908     return;
   8909   }
   8910 
   8911   bool IsDependent = false;
   8912   for (unsigned I = 0, N = Exprs.size(); I != N; ++I) {
   8913     if (DiagnoseUnexpandedParameterPack(Exprs.get()[I], UPPC_Expression)) {
   8914       VDecl->setInvalidDecl();
   8915       return;
   8916     }
   8917 
   8918     if (Exprs.get()[I]->isTypeDependent())
   8919       IsDependent = true;
   8920   }
   8921 
   8922   // If either the declaration has a dependent type or if any of the
   8923   // expressions is type-dependent, we represent the initialization
   8924   // via a ParenListExpr for later use during template instantiation.
   8925   if (VDecl->getType()->isDependentType() || IsDependent) {
   8926     // Let clients know that initialization was done with a direct initializer.
   8927     VDecl->setCXXDirectInitializer(true);
   8928 
   8929     // Store the initialization expressions as a ParenListExpr.
   8930     unsigned NumExprs = Exprs.size();
   8931     VDecl->setInit(new (Context) ParenListExpr(
   8932         Context, LParenLoc, (Expr **)Exprs.release(), NumExprs, RParenLoc,
   8933         VDecl->getType().getNonReferenceType()));
   8934     return;
   8935   }
   8936 
   8937   // Capture the variable that is being initialized and the style of
   8938   // initialization.
   8939   InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
   8940 
   8941   // FIXME: Poor source location information.
   8942   InitializationKind Kind
   8943     = InitializationKind::CreateDirect(VDecl->getLocation(),
   8944                                        LParenLoc, RParenLoc);
   8945 
   8946   QualType T = VDecl->getType();
   8947   InitializationSequence InitSeq(*this, Entity, Kind,
   8948                                  Exprs.get(), Exprs.size());
   8949   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, move(Exprs), &T);
   8950   if (Result.isInvalid()) {
   8951     VDecl->setInvalidDecl();
   8952     return;
   8953   } else if (T != VDecl->getType()) {
   8954     VDecl->setType(T);
   8955     Result.get()->setType(T);
   8956   }
   8957 
   8958 
   8959   Expr *Init = Result.get();
   8960   CheckImplicitConversions(Init, LParenLoc);
   8961 
   8962   if (VDecl->isConstexpr() && !VDecl->isInvalidDecl() &&
   8963       !Init->isValueDependent() &&
   8964       !Init->isConstantInitializer(Context,
   8965                                    VDecl->getType()->isReferenceType())) {
   8966     // FIXME: Improve this diagnostic to explain why the initializer is not
   8967     // a constant expression.
   8968     Diag(VDecl->getLocation(), diag::err_constexpr_var_requires_const_init)
   8969       << VDecl << Init->getSourceRange();
   8970   }
   8971 
   8972   Init = MaybeCreateExprWithCleanups(Init);
   8973   VDecl->setInit(Init);
   8974   VDecl->setCXXDirectInitializer(true);
   8975 
   8976   CheckCompleteVariableDeclaration(VDecl);
   8977 }
   8978 
   8979 /// \brief Given a constructor and the set of arguments provided for the
   8980 /// constructor, convert the arguments and add any required default arguments
   8981 /// to form a proper call to this constructor.
   8982 ///
   8983 /// \returns true if an error occurred, false otherwise.
   8984 bool
   8985 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
   8986                               MultiExprArg ArgsPtr,
   8987                               SourceLocation Loc,
   8988                               ASTOwningVector<Expr*> &ConvertedArgs) {
   8989   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
   8990   unsigned NumArgs = ArgsPtr.size();
   8991   Expr **Args = (Expr **)ArgsPtr.get();
   8992 
   8993   const FunctionProtoType *Proto
   8994     = Constructor->getType()->getAs<FunctionProtoType>();
   8995   assert(Proto && "Constructor without a prototype?");
   8996   unsigned NumArgsInProto = Proto->getNumArgs();
   8997 
   8998   // If too few arguments are available, we'll fill in the rest with defaults.
   8999   if (NumArgs < NumArgsInProto)
   9000     ConvertedArgs.reserve(NumArgsInProto);
   9001   else
   9002     ConvertedArgs.reserve(NumArgs);
   9003 
   9004   VariadicCallType CallType =
   9005     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
   9006   SmallVector<Expr *, 8> AllArgs;
   9007   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
   9008                                         Proto, 0, Args, NumArgs, AllArgs,
   9009                                         CallType);
   9010   for (unsigned i =0, size = AllArgs.size(); i < size; i++)
   9011     ConvertedArgs.push_back(AllArgs[i]);
   9012   return Invalid;
   9013 }
   9014 
   9015 static inline bool
   9016 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
   9017                                        const FunctionDecl *FnDecl) {
   9018   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
   9019   if (isa<NamespaceDecl>(DC)) {
   9020     return SemaRef.Diag(FnDecl->getLocation(),
   9021                         diag::err_operator_new_delete_declared_in_namespace)
   9022       << FnDecl->getDeclName();
   9023   }
   9024 
   9025   if (isa<TranslationUnitDecl>(DC) &&
   9026       FnDecl->getStorageClass() == SC_Static) {
   9027     return SemaRef.Diag(FnDecl->getLocation(),
   9028                         diag::err_operator_new_delete_declared_static)
   9029       << FnDecl->getDeclName();
   9030   }
   9031 
   9032   return false;
   9033 }
   9034 
   9035 static inline bool
   9036 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
   9037                             CanQualType ExpectedResultType,
   9038                             CanQualType ExpectedFirstParamType,
   9039                             unsigned DependentParamTypeDiag,
   9040                             unsigned InvalidParamTypeDiag) {
   9041   QualType ResultType =
   9042     FnDecl->getType()->getAs<FunctionType>()->getResultType();
   9043 
   9044   // Check that the result type is not dependent.
   9045   if (ResultType->isDependentType())
   9046     return SemaRef.Diag(FnDecl->getLocation(),
   9047                         diag::err_operator_new_delete_dependent_result_type)
   9048     << FnDecl->getDeclName() << ExpectedResultType;
   9049 
   9050   // Check that the result type is what we expect.
   9051   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
   9052     return SemaRef.Diag(FnDecl->getLocation(),
   9053                         diag::err_operator_new_delete_invalid_result_type)
   9054     << FnDecl->getDeclName() << ExpectedResultType;
   9055 
   9056   // A function template must have at least 2 parameters.
   9057   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
   9058     return SemaRef.Diag(FnDecl->getLocation(),
   9059                       diag::err_operator_new_delete_template_too_few_parameters)
   9060         << FnDecl->getDeclName();
   9061 
   9062   // The function decl must have at least 1 parameter.
   9063   if (FnDecl->getNumParams() == 0)
   9064     return SemaRef.Diag(FnDecl->getLocation(),
   9065                         diag::err_operator_new_delete_too_few_parameters)
   9066       << FnDecl->getDeclName();
   9067 
   9068   // Check the the first parameter type is not dependent.
   9069   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
   9070   if (FirstParamType->isDependentType())
   9071     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
   9072       << FnDecl->getDeclName() << ExpectedFirstParamType;
   9073 
   9074   // Check that the first parameter type is what we expect.
   9075   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
   9076       ExpectedFirstParamType)
   9077     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
   9078     << FnDecl->getDeclName() << ExpectedFirstParamType;
   9079 
   9080   return false;
   9081 }
   9082 
   9083 static bool
   9084 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
   9085   // C++ [basic.stc.dynamic.allocation]p1:
   9086   //   A program is ill-formed if an allocation function is declared in a
   9087   //   namespace scope other than global scope or declared static in global
   9088   //   scope.
   9089   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   9090     return true;
   9091 
   9092   CanQualType SizeTy =
   9093     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
   9094 
   9095   // C++ [basic.stc.dynamic.allocation]p1:
   9096   //  The return type shall be void*. The first parameter shall have type
   9097   //  std::size_t.
   9098   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
   9099                                   SizeTy,
   9100                                   diag::err_operator_new_dependent_param_type,
   9101                                   diag::err_operator_new_param_type))
   9102     return true;
   9103 
   9104   // C++ [basic.stc.dynamic.allocation]p1:
   9105   //  The first parameter shall not have an associated default argument.
   9106   if (FnDecl->getParamDecl(0)->hasDefaultArg())
   9107     return SemaRef.Diag(FnDecl->getLocation(),
   9108                         diag::err_operator_new_default_arg)
   9109       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
   9110 
   9111   return false;
   9112 }
   9113 
   9114 static bool
   9115 CheckOperatorDeleteDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
   9116   // C++ [basic.stc.dynamic.deallocation]p1:
   9117   //   A program is ill-formed if deallocation functions are declared in a
   9118   //   namespace scope other than global scope or declared static in global
   9119   //   scope.
   9120   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
   9121     return true;
   9122 
   9123   // C++ [basic.stc.dynamic.deallocation]p2:
   9124   //   Each deallocation function shall return void and its first parameter
   9125   //   shall be void*.
   9126   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
   9127                                   SemaRef.Context.VoidPtrTy,
   9128                                  diag::err_operator_delete_dependent_param_type,
   9129                                  diag::err_operator_delete_param_type))
   9130     return true;
   9131 
   9132   return false;
   9133 }
   9134 
   9135 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
   9136 /// of this overloaded operator is well-formed. If so, returns false;
   9137 /// otherwise, emits appropriate diagnostics and returns true.
   9138 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
   9139   assert(FnDecl && FnDecl->isOverloadedOperator() &&
   9140          "Expected an overloaded operator declaration");
   9141 
   9142   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
   9143 
   9144   // C++ [over.oper]p5:
   9145   //   The allocation and deallocation functions, operator new,
   9146   //   operator new[], operator delete and operator delete[], are
   9147   //   described completely in 3.7.3. The attributes and restrictions
   9148   //   found in the rest of this subclause do not apply to them unless
   9149   //   explicitly stated in 3.7.3.
   9150   if (Op == OO_Delete || Op == OO_Array_Delete)
   9151     return CheckOperatorDeleteDeclaration(*this, FnDecl);
   9152 
   9153   if (Op == OO_New || Op == OO_Array_New)
   9154     return CheckOperatorNewDeclaration(*this, FnDecl);
   9155 
   9156   // C++ [over.oper]p6:
   9157   //   An operator function shall either be a non-static member
   9158   //   function or be a non-member function and have at least one
   9159   //   parameter whose type is a class, a reference to a class, an
   9160   //   enumeration, or a reference to an enumeration.
   9161   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
   9162     if (MethodDecl->isStatic())
   9163       return Diag(FnDecl->getLocation(),
   9164                   diag::err_operator_overload_static) << FnDecl->getDeclName();
   9165   } else {
   9166     bool ClassOrEnumParam = false;
   9167     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
   9168                                    ParamEnd = FnDecl->param_end();
   9169          Param != ParamEnd; ++Param) {
   9170       QualType ParamType = (*Param)->getType().getNonReferenceType();
   9171       if (ParamType->isDependentType() || ParamType->isRecordType() ||
   9172           ParamType->isEnumeralType()) {
   9173         ClassOrEnumParam = true;
   9174         break;
   9175       }
   9176     }
   9177 
   9178     if (!ClassOrEnumParam)
   9179       return Diag(FnDecl->getLocation(),
   9180                   diag::err_operator_overload_needs_class_or_enum)
   9181         << FnDecl->getDeclName();
   9182   }
   9183 
   9184   // C++ [over.oper]p8:
   9185   //   An operator function cannot have default arguments (8.3.6),
   9186   //   except where explicitly stated below.
   9187   //
   9188   // Only the function-call operator allows default arguments
   9189   // (C++ [over.call]p1).
   9190   if (Op != OO_Call) {
   9191     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
   9192          Param != FnDecl->param_end(); ++Param) {
   9193       if ((*Param)->hasDefaultArg())
   9194         return Diag((*Param)->getLocation(),
   9195                     diag::err_operator_overload_default_arg)
   9196           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
   9197     }
   9198   }
   9199 
   9200   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
   9201     { false, false, false }
   9202 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
   9203     , { Unary, Binary, MemberOnly }
   9204 #include "clang/Basic/OperatorKinds.def"
   9205   };
   9206 
   9207   bool CanBeUnaryOperator = OperatorUses[Op][0];
   9208   bool CanBeBinaryOperator = OperatorUses[Op][1];
   9209   bool MustBeMemberOperator = OperatorUses[Op][2];
   9210 
   9211   // C++ [over.oper]p8:
   9212   //   [...] Operator functions cannot have more or fewer parameters
   9213   //   than the number required for the corresponding operator, as
   9214   //   described in the rest of this subclause.
   9215   unsigned NumParams = FnDecl->getNumParams()
   9216                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
   9217   if (Op != OO_Call &&
   9218       ((NumParams == 1 && !CanBeUnaryOperator) ||
   9219        (NumParams == 2 && !CanBeBinaryOperator) ||
   9220        (NumParams < 1) || (NumParams > 2))) {
   9221     // We have the wrong number of parameters.
   9222     unsigned ErrorKind;
   9223     if (CanBeUnaryOperator && CanBeBinaryOperator) {
   9224       ErrorKind = 2;  // 2 -> unary or binary.
   9225     } else if (CanBeUnaryOperator) {
   9226       ErrorKind = 0;  // 0 -> unary
   9227     } else {
   9228       assert(CanBeBinaryOperator &&
   9229              "All non-call overloaded operators are unary or binary!");
   9230       ErrorKind = 1;  // 1 -> binary
   9231     }
   9232 
   9233     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
   9234       << FnDecl->getDeclName() << NumParams << ErrorKind;
   9235   }
   9236 
   9237   // Overloaded operators other than operator() cannot be variadic.
   9238   if (Op != OO_Call &&
   9239       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
   9240     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
   9241       << FnDecl->getDeclName();
   9242   }
   9243 
   9244   // Some operators must be non-static member functions.
   9245   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
   9246     return Diag(FnDecl->getLocation(),
   9247                 diag::err_operator_overload_must_be_member)
   9248       << FnDecl->getDeclName();
   9249   }
   9250 
   9251   // C++ [over.inc]p1:
   9252   //   The user-defined function called operator++ implements the
   9253   //   prefix and postfix ++ operator. If this function is a member
   9254   //   function with no parameters, or a non-member function with one
   9255   //   parameter of class or enumeration type, it defines the prefix
   9256   //   increment operator ++ for objects of that type. If the function
   9257   //   is a member function with one parameter (which shall be of type
   9258   //   int) or a non-member function with two parameters (the second
   9259   //   of which shall be of type int), it defines the postfix
   9260   //   increment operator ++ for objects of that type.
   9261   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
   9262     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
   9263     bool ParamIsInt = false;
   9264     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
   9265       ParamIsInt = BT->getKind() == BuiltinType::Int;
   9266 
   9267     if (!ParamIsInt)
   9268       return Diag(LastParam->getLocation(),
   9269                   diag::err_operator_overload_post_incdec_must_be_int)
   9270         << LastParam->getType() << (Op == OO_MinusMinus);
   9271   }
   9272 
   9273   return false;
   9274 }
   9275 
   9276 /// CheckLiteralOperatorDeclaration - Check whether the declaration
   9277 /// of this literal operator function is well-formed. If so, returns
   9278 /// false; otherwise, emits appropriate diagnostics and returns true.
   9279 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
   9280   DeclContext *DC = FnDecl->getDeclContext();
   9281   Decl::Kind Kind = DC->getDeclKind();
   9282   if (Kind != Decl::TranslationUnit && Kind != Decl::Namespace &&
   9283       Kind != Decl::LinkageSpec) {
   9284     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
   9285       << FnDecl->getDeclName();
   9286     return true;
   9287   }
   9288 
   9289   bool Valid = false;
   9290 
   9291   // template <char...> type operator "" name() is the only valid template
   9292   // signature, and the only valid signature with no parameters.
   9293   if (FnDecl->param_size() == 0) {
   9294     if (FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate()) {
   9295       // Must have only one template parameter
   9296       TemplateParameterList *Params = TpDecl->getTemplateParameters();
   9297       if (Params->size() == 1) {
   9298         NonTypeTemplateParmDecl *PmDecl =
   9299           cast<NonTypeTemplateParmDecl>(Params->getParam(0));
   9300 
   9301         // The template parameter must be a char parameter pack.
   9302         if (PmDecl && PmDecl->isTemplateParameterPack() &&
   9303             Context.hasSameType(PmDecl->getType(), Context.CharTy))
   9304           Valid = true;
   9305       }
   9306     }
   9307   } else {
   9308     // Check the first parameter
   9309     FunctionDecl::param_iterator Param = FnDecl->param_begin();
   9310 
   9311     QualType T = (*Param)->getType();
   9312 
   9313     // unsigned long long int, long double, and any character type are allowed
   9314     // as the only parameters.
   9315     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
   9316         Context.hasSameType(T, Context.LongDoubleTy) ||
   9317         Context.hasSameType(T, Context.CharTy) ||
   9318         Context.hasSameType(T, Context.WCharTy) ||
   9319         Context.hasSameType(T, Context.Char16Ty) ||
   9320         Context.hasSameType(T, Context.Char32Ty)) {
   9321       if (++Param == FnDecl->param_end())
   9322         Valid = true;
   9323       goto FinishedParams;
   9324     }
   9325 
   9326     // Otherwise it must be a pointer to const; let's strip those qualifiers.
   9327     const PointerType *PT = T->getAs<PointerType>();
   9328     if (!PT)
   9329       goto FinishedParams;
   9330     T = PT->getPointeeType();
   9331     if (!T.isConstQualified())
   9332       goto FinishedParams;
   9333     T = T.getUnqualifiedType();
   9334 
   9335     // Move on to the second parameter;
   9336     ++Param;
   9337 
   9338     // If there is no second parameter, the first must be a const char *
   9339     if (Param == FnDecl->param_end()) {
   9340       if (Context.hasSameType(T, Context.CharTy))
   9341         Valid = true;
   9342       goto FinishedParams;
   9343     }
   9344 
   9345     // const char *, const wchar_t*, const char16_t*, and const char32_t*
   9346     // are allowed as the first parameter to a two-parameter function
   9347     if (!(Context.hasSameType(T, Context.CharTy) ||
   9348           Context.hasSameType(T, Context.WCharTy) ||
   9349           Context.hasSameType(T, Context.Char16Ty) ||
   9350           Context.hasSameType(T, Context.Char32Ty)))
   9351       goto FinishedParams;
   9352 
   9353     // The second and final parameter must be an std::size_t
   9354     T = (*Param)->getType().getUnqualifiedType();
   9355     if (Context.hasSameType(T, Context.getSizeType()) &&
   9356         ++Param == FnDecl->param_end())
   9357       Valid = true;
   9358   }
   9359 
   9360   // FIXME: This diagnostic is absolutely terrible.
   9361 FinishedParams:
   9362   if (!Valid) {
   9363     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
   9364       << FnDecl->getDeclName();
   9365     return true;
   9366   }
   9367 
   9368   StringRef LiteralName
   9369     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
   9370   if (LiteralName[0] != '_') {
   9371     // C++0x [usrlit.suffix]p1:
   9372     //   Literal suffix identifiers that do not start with an underscore are
   9373     //   reserved for future standardization.
   9374     bool IsHexFloat = true;
   9375     if (LiteralName.size() > 1 &&
   9376         (LiteralName[0] == 'P' || LiteralName[0] == 'p')) {
   9377       for (unsigned I = 1, N = LiteralName.size(); I < N; ++I) {
   9378         if (!isdigit(LiteralName[I])) {
   9379           IsHexFloat = false;
   9380           break;
   9381         }
   9382       }
   9383     }
   9384 
   9385     if (IsHexFloat)
   9386       Diag(FnDecl->getLocation(), diag::warn_user_literal_hexfloat)
   9387         << LiteralName;
   9388     else
   9389       Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
   9390   }
   9391 
   9392   return false;
   9393 }
   9394 
   9395 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
   9396 /// linkage specification, including the language and (if present)
   9397 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
   9398 /// the location of the language string literal, which is provided
   9399 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
   9400 /// the '{' brace. Otherwise, this linkage specification does not
   9401 /// have any braces.
   9402 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
   9403                                            SourceLocation LangLoc,
   9404                                            StringRef Lang,
   9405                                            SourceLocation LBraceLoc) {
   9406   LinkageSpecDecl::LanguageIDs Language;
   9407   if (Lang == "\"C\"")
   9408     Language = LinkageSpecDecl::lang_c;
   9409   else if (Lang == "\"C++\"")
   9410     Language = LinkageSpecDecl::lang_cxx;
   9411   else {
   9412     Diag(LangLoc, diag::err_bad_language);
   9413     return 0;
   9414   }
   9415 
   9416   // FIXME: Add all the various semantics of linkage specifications
   9417 
   9418   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
   9419                                                ExternLoc, LangLoc, Language);
   9420   CurContext->addDecl(D);
   9421   PushDeclContext(S, D);
   9422   return D;
   9423 }
   9424 
   9425 /// ActOnFinishLinkageSpecification - Complete the definition of
   9426 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
   9427 /// valid, it's the position of the closing '}' brace in a linkage
   9428 /// specification that uses braces.
   9429 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
   9430                                             Decl *LinkageSpec,
   9431                                             SourceLocation RBraceLoc) {
   9432   if (LinkageSpec) {
   9433     if (RBraceLoc.isValid()) {
   9434       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
   9435       LSDecl->setRBraceLoc(RBraceLoc);
   9436     }
   9437     PopDeclContext();
   9438   }
   9439   return LinkageSpec;
   9440 }
   9441 
   9442 /// \brief Perform semantic analysis for the variable declaration that
   9443 /// occurs within a C++ catch clause, returning the newly-created
   9444 /// variable.
   9445 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
   9446                                          TypeSourceInfo *TInfo,
   9447                                          SourceLocation StartLoc,
   9448                                          SourceLocation Loc,
   9449                                          IdentifierInfo *Name) {
   9450   bool Invalid = false;
   9451   QualType ExDeclType = TInfo->getType();
   9452 
   9453   // Arrays and functions decay.
   9454   if (ExDeclType->isArrayType())
   9455     ExDeclType = Context.getArrayDecayedType(ExDeclType);
   9456   else if (ExDeclType->isFunctionType())
   9457     ExDeclType = Context.getPointerType(ExDeclType);
   9458 
   9459   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
   9460   // The exception-declaration shall not denote a pointer or reference to an
   9461   // incomplete type, other than [cv] void*.
   9462   // N2844 forbids rvalue references.
   9463   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
   9464     Diag(Loc, diag::err_catch_rvalue_ref);
   9465     Invalid = true;
   9466   }
   9467 
   9468   // GCC allows catching pointers and references to incomplete types
   9469   // as an extension; so do we, but we warn by default.
   9470 
   9471   QualType BaseType = ExDeclType;
   9472   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
   9473   unsigned DK = diag::err_catch_incomplete;
   9474   bool IncompleteCatchIsInvalid = true;
   9475   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
   9476     BaseType = Ptr->getPointeeType();
   9477     Mode = 1;
   9478     DK = diag::ext_catch_incomplete_ptr;
   9479     IncompleteCatchIsInvalid = false;
   9480   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
   9481     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
   9482     BaseType = Ref->getPointeeType();
   9483     Mode = 2;
   9484     DK = diag::ext_catch_incomplete_ref;
   9485     IncompleteCatchIsInvalid = false;
   9486   }
   9487   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
   9488       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK) &&
   9489       IncompleteCatchIsInvalid)
   9490     Invalid = true;
   9491 
   9492   if (!Invalid && !ExDeclType->isDependentType() &&
   9493       RequireNonAbstractType(Loc, ExDeclType,
   9494                              diag::err_abstract_type_in_decl,
   9495                              AbstractVariableType))
   9496     Invalid = true;
   9497 
   9498   // Only the non-fragile NeXT runtime currently supports C++ catches
   9499   // of ObjC types, and no runtime supports catching ObjC types by value.
   9500   if (!Invalid && getLangOptions().ObjC1) {
   9501     QualType T = ExDeclType;
   9502     if (const ReferenceType *RT = T->getAs<ReferenceType>())
   9503       T = RT->getPointeeType();
   9504 
   9505     if (T->isObjCObjectType()) {
   9506       Diag(Loc, diag::err_objc_object_catch);
   9507       Invalid = true;
   9508     } else if (T->isObjCObjectPointerType()) {
   9509       if (!getLangOptions().ObjCNonFragileABI)
   9510         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
   9511     }
   9512   }
   9513 
   9514   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
   9515                                     ExDeclType, TInfo, SC_None, SC_None);
   9516   ExDecl->setExceptionVariable(true);
   9517 
   9518   if (!Invalid && !ExDeclType->isDependentType()) {
   9519     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
   9520       // C++ [except.handle]p16:
   9521       //   The object declared in an exception-declaration or, if the
   9522       //   exception-declaration does not specify a name, a temporary (12.2) is
   9523       //   copy-initialized (8.5) from the exception object. [...]
   9524       //   The object is destroyed when the handler exits, after the destruction
   9525       //   of any automatic objects initialized within the handler.
   9526       //
   9527       // We just pretend to initialize the object with itself, then make sure
   9528       // it can be destroyed later.
   9529       QualType initType = ExDeclType;
   9530 
   9531       InitializedEntity entity =
   9532         InitializedEntity::InitializeVariable(ExDecl);
   9533       InitializationKind initKind =
   9534         InitializationKind::CreateCopy(Loc, SourceLocation());
   9535 
   9536       Expr *opaqueValue =
   9537         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
   9538       InitializationSequence sequence(*this, entity, initKind, &opaqueValue, 1);
   9539       ExprResult result = sequence.Perform(*this, entity, initKind,
   9540                                            MultiExprArg(&opaqueValue, 1));
   9541       if (result.isInvalid())
   9542         Invalid = true;
   9543       else {
   9544         // If the constructor used was non-trivial, set this as the
   9545         // "initializer".
   9546         CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
   9547         if (!construct->getConstructor()->isTrivial()) {
   9548           Expr *init = MaybeCreateExprWithCleanups(construct);
   9549           ExDecl->setInit(init);
   9550         }
   9551 
   9552         // And make sure it's destructable.
   9553         FinalizeVarWithDestructor(ExDecl, recordType);
   9554       }
   9555     }
   9556   }
   9557 
   9558   if (Invalid)
   9559     ExDecl->setInvalidDecl();
   9560 
   9561   return ExDecl;
   9562 }
   9563 
   9564 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
   9565 /// handler.
   9566 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
   9567   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   9568   bool Invalid = D.isInvalidType();
   9569 
   9570   // Check for unexpanded parameter packs.
   9571   if (TInfo && DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
   9572                                                UPPC_ExceptionType)) {
   9573     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
   9574                                              D.getIdentifierLoc());
   9575     Invalid = true;
   9576   }
   9577 
   9578   IdentifierInfo *II = D.getIdentifier();
   9579   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
   9580                                              LookupOrdinaryName,
   9581                                              ForRedeclaration)) {
   9582     // The scope should be freshly made just for us. There is just no way
   9583     // it contains any previous declaration.
   9584     assert(!S->isDeclScope(PrevDecl));
   9585     if (PrevDecl->isTemplateParameter()) {
   9586       // Maybe we will complain about the shadowed template parameter.
   9587       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
   9588     }
   9589   }
   9590 
   9591   if (D.getCXXScopeSpec().isSet() && !Invalid) {
   9592     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
   9593       << D.getCXXScopeSpec().getRange();
   9594     Invalid = true;
   9595   }
   9596 
   9597   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
   9598                                               D.getSourceRange().getBegin(),
   9599                                               D.getIdentifierLoc(),
   9600                                               D.getIdentifier());
   9601   if (Invalid)
   9602     ExDecl->setInvalidDecl();
   9603 
   9604   // Add the exception declaration into this scope.
   9605   if (II)
   9606     PushOnScopeChains(ExDecl, S);
   9607   else
   9608     CurContext->addDecl(ExDecl);
   9609 
   9610   ProcessDeclAttributes(S, ExDecl, D);
   9611   return ExDecl;
   9612 }
   9613 
   9614 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
   9615                                          Expr *AssertExpr,
   9616                                          Expr *AssertMessageExpr_,
   9617                                          SourceLocation RParenLoc) {
   9618   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr_);
   9619 
   9620   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) {
   9621     llvm::APSInt Value(32);
   9622     if (!AssertExpr->isIntegerConstantExpr(Value, Context)) {
   9623       Diag(StaticAssertLoc,
   9624            diag::err_static_assert_expression_is_not_constant) <<
   9625         AssertExpr->getSourceRange();
   9626       return 0;
   9627     }
   9628 
   9629     if (Value == 0) {
   9630       Diag(StaticAssertLoc, diag::err_static_assert_failed)
   9631         << AssertMessage->getString() << AssertExpr->getSourceRange();
   9632     }
   9633   }
   9634 
   9635   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
   9636     return 0;
   9637 
   9638   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
   9639                                         AssertExpr, AssertMessage, RParenLoc);
   9640 
   9641   CurContext->addDecl(Decl);
   9642   return Decl;
   9643 }
   9644 
   9645 /// \brief Perform semantic analysis of the given friend type declaration.
   9646 ///
   9647 /// \returns A friend declaration that.
   9648 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation FriendLoc,
   9649                                       TypeSourceInfo *TSInfo) {
   9650   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
   9651 
   9652   QualType T = TSInfo->getType();
   9653   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
   9654 
   9655   // C++03 [class.friend]p2:
   9656   //   An elaborated-type-specifier shall be used in a friend declaration
   9657   //   for a class.*
   9658   //
   9659   //   * The class-key of the elaborated-type-specifier is required.
   9660   if (!ActiveTemplateInstantiations.empty()) {
   9661     // Do not complain about the form of friend template types during
   9662     // template instantiation; we will already have complained when the
   9663     // template was declared.
   9664   } else if (!T->isElaboratedTypeSpecifier()) {
   9665     // If we evaluated the type to a record type, suggest putting
   9666     // a tag in front.
   9667     if (const RecordType *RT = T->getAs<RecordType>()) {
   9668       RecordDecl *RD = RT->getDecl();
   9669 
   9670       std::string InsertionText = std::string(" ") + RD->getKindName();
   9671 
   9672       Diag(TypeRange.getBegin(),
   9673            getLangOptions().CPlusPlus0x ?
   9674              diag::warn_cxx98_compat_unelaborated_friend_type :
   9675              diag::ext_unelaborated_friend_type)
   9676         << (unsigned) RD->getTagKind()
   9677         << T
   9678         << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
   9679                                       InsertionText);
   9680     } else {
   9681       Diag(FriendLoc,
   9682            getLangOptions().CPlusPlus0x ?
   9683              diag::warn_cxx98_compat_nonclass_type_friend :
   9684              diag::ext_nonclass_type_friend)
   9685         << T
   9686         << SourceRange(FriendLoc, TypeRange.getEnd());
   9687     }
   9688   } else if (T->getAs<EnumType>()) {
   9689     Diag(FriendLoc,
   9690          getLangOptions().CPlusPlus0x ?
   9691            diag::warn_cxx98_compat_enum_friend :
   9692            diag::ext_enum_friend)
   9693       << T
   9694       << SourceRange(FriendLoc, TypeRange.getEnd());
   9695   }
   9696 
   9697   // C++0x [class.friend]p3:
   9698   //   If the type specifier in a friend declaration designates a (possibly
   9699   //   cv-qualified) class type, that class is declared as a friend; otherwise,
   9700   //   the friend declaration is ignored.
   9701 
   9702   // FIXME: C++0x has some syntactic restrictions on friend type declarations
   9703   // in [class.friend]p3 that we do not implement.
   9704 
   9705   return FriendDecl::Create(Context, CurContext, FriendLoc, TSInfo, FriendLoc);
   9706 }
   9707 
   9708 /// Handle a friend tag declaration where the scope specifier was
   9709 /// templated.
   9710 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
   9711                                     unsigned TagSpec, SourceLocation TagLoc,
   9712                                     CXXScopeSpec &SS,
   9713                                     IdentifierInfo *Name, SourceLocation NameLoc,
   9714                                     AttributeList *Attr,
   9715                                     MultiTemplateParamsArg TempParamLists) {
   9716   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   9717 
   9718   bool isExplicitSpecialization = false;
   9719   bool Invalid = false;
   9720 
   9721   if (TemplateParameterList *TemplateParams
   9722         = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
   9723                                                   TempParamLists.get(),
   9724                                                   TempParamLists.size(),
   9725                                                   /*friend*/ true,
   9726                                                   isExplicitSpecialization,
   9727                                                   Invalid)) {
   9728     if (TemplateParams->size() > 0) {
   9729       // This is a declaration of a class template.
   9730       if (Invalid)
   9731         return 0;
   9732 
   9733       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
   9734                                 SS, Name, NameLoc, Attr,
   9735                                 TemplateParams, AS_public,
   9736                                 /*ModulePrivateLoc=*/SourceLocation(),
   9737                                 TempParamLists.size() - 1,
   9738                    (TemplateParameterList**) TempParamLists.release()).take();
   9739     } else {
   9740       // The "template<>" header is extraneous.
   9741       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
   9742         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
   9743       isExplicitSpecialization = true;
   9744     }
   9745   }
   9746 
   9747   if (Invalid) return 0;
   9748 
   9749   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
   9750 
   9751   bool isAllExplicitSpecializations = true;
   9752   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
   9753     if (TempParamLists.get()[I]->size()) {
   9754       isAllExplicitSpecializations = false;
   9755       break;
   9756     }
   9757   }
   9758 
   9759   // FIXME: don't ignore attributes.
   9760 
   9761   // If it's explicit specializations all the way down, just forget
   9762   // about the template header and build an appropriate non-templated
   9763   // friend.  TODO: for source fidelity, remember the headers.
   9764   if (isAllExplicitSpecializations) {
   9765     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   9766     ElaboratedTypeKeyword Keyword
   9767       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   9768     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
   9769                                    *Name, NameLoc);
   9770     if (T.isNull())
   9771       return 0;
   9772 
   9773     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   9774     if (isa<DependentNameType>(T)) {
   9775       DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
   9776       TL.setKeywordLoc(TagLoc);
   9777       TL.setQualifierLoc(QualifierLoc);
   9778       TL.setNameLoc(NameLoc);
   9779     } else {
   9780       ElaboratedTypeLoc TL = cast<ElaboratedTypeLoc>(TSI->getTypeLoc());
   9781       TL.setKeywordLoc(TagLoc);
   9782       TL.setQualifierLoc(QualifierLoc);
   9783       cast<TypeSpecTypeLoc>(TL.getNamedTypeLoc()).setNameLoc(NameLoc);
   9784     }
   9785 
   9786     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   9787                                             TSI, FriendLoc);
   9788     Friend->setAccess(AS_public);
   9789     CurContext->addDecl(Friend);
   9790     return Friend;
   9791   }
   9792 
   9793   // Handle the case of a templated-scope friend class.  e.g.
   9794   //   template <class T> class A<T>::B;
   9795   // FIXME: we don't support these right now.
   9796   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   9797   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
   9798   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   9799   DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
   9800   TL.setKeywordLoc(TagLoc);
   9801   TL.setQualifierLoc(SS.getWithLocInContext(Context));
   9802   TL.setNameLoc(NameLoc);
   9803 
   9804   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
   9805                                           TSI, FriendLoc);
   9806   Friend->setAccess(AS_public);
   9807   Friend->setUnsupportedFriend(true);
   9808   CurContext->addDecl(Friend);
   9809   return Friend;
   9810 }
   9811 
   9812 
   9813 /// Handle a friend type declaration.  This works in tandem with
   9814 /// ActOnTag.
   9815 ///
   9816 /// Notes on friend class templates:
   9817 ///
   9818 /// We generally treat friend class declarations as if they were
   9819 /// declaring a class.  So, for example, the elaborated type specifier
   9820 /// in a friend declaration is required to obey the restrictions of a
   9821 /// class-head (i.e. no typedefs in the scope chain), template
   9822 /// parameters are required to match up with simple template-ids, &c.
   9823 /// However, unlike when declaring a template specialization, it's
   9824 /// okay to refer to a template specialization without an empty
   9825 /// template parameter declaration, e.g.
   9826 ///   friend class A<T>::B<unsigned>;
   9827 /// We permit this as a special case; if there are any template
   9828 /// parameters present at all, require proper matching, i.e.
   9829 ///   template <> template <class T> friend class A<int>::B;
   9830 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
   9831                                 MultiTemplateParamsArg TempParams) {
   9832   SourceLocation Loc = DS.getSourceRange().getBegin();
   9833 
   9834   assert(DS.isFriendSpecified());
   9835   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   9836 
   9837   // Try to convert the decl specifier to a type.  This works for
   9838   // friend templates because ActOnTag never produces a ClassTemplateDecl
   9839   // for a TUK_Friend.
   9840   Declarator TheDeclarator(DS, Declarator::MemberContext);
   9841   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
   9842   QualType T = TSI->getType();
   9843   if (TheDeclarator.isInvalidType())
   9844     return 0;
   9845 
   9846   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
   9847     return 0;
   9848 
   9849   // This is definitely an error in C++98.  It's probably meant to
   9850   // be forbidden in C++0x, too, but the specification is just
   9851   // poorly written.
   9852   //
   9853   // The problem is with declarations like the following:
   9854   //   template <T> friend A<T>::foo;
   9855   // where deciding whether a class C is a friend or not now hinges
   9856   // on whether there exists an instantiation of A that causes
   9857   // 'foo' to equal C.  There are restrictions on class-heads
   9858   // (which we declare (by fiat) elaborated friend declarations to
   9859   // be) that makes this tractable.
   9860   //
   9861   // FIXME: handle "template <> friend class A<T>;", which
   9862   // is possibly well-formed?  Who even knows?
   9863   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
   9864     Diag(Loc, diag::err_tagless_friend_type_template)
   9865       << DS.getSourceRange();
   9866     return 0;
   9867   }
   9868 
   9869   // C++98 [class.friend]p1: A friend of a class is a function
   9870   //   or class that is not a member of the class . . .
   9871   // This is fixed in DR77, which just barely didn't make the C++03
   9872   // deadline.  It's also a very silly restriction that seriously
   9873   // affects inner classes and which nobody else seems to implement;
   9874   // thus we never diagnose it, not even in -pedantic.
   9875   //
   9876   // But note that we could warn about it: it's always useless to
   9877   // friend one of your own members (it's not, however, worthless to
   9878   // friend a member of an arbitrary specialization of your template).
   9879 
   9880   Decl *D;
   9881   if (unsigned NumTempParamLists = TempParams.size())
   9882     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
   9883                                    NumTempParamLists,
   9884                                    TempParams.release(),
   9885                                    TSI,
   9886                                    DS.getFriendSpecLoc());
   9887   else
   9888     D = CheckFriendTypeDecl(DS.getFriendSpecLoc(), TSI);
   9889 
   9890   if (!D)
   9891     return 0;
   9892 
   9893   D->setAccess(AS_public);
   9894   CurContext->addDecl(D);
   9895 
   9896   return D;
   9897 }
   9898 
   9899 Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
   9900                                     MultiTemplateParamsArg TemplateParams) {
   9901   const DeclSpec &DS = D.getDeclSpec();
   9902 
   9903   assert(DS.isFriendSpecified());
   9904   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
   9905 
   9906   SourceLocation Loc = D.getIdentifierLoc();
   9907   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
   9908 
   9909   // C++ [class.friend]p1
   9910   //   A friend of a class is a function or class....
   9911   // Note that this sees through typedefs, which is intended.
   9912   // It *doesn't* see through dependent types, which is correct
   9913   // according to [temp.arg.type]p3:
   9914   //   If a declaration acquires a function type through a
   9915   //   type dependent on a template-parameter and this causes
   9916   //   a declaration that does not use the syntactic form of a
   9917   //   function declarator to have a function type, the program
   9918   //   is ill-formed.
   9919   if (!TInfo->getType()->isFunctionType()) {
   9920     Diag(Loc, diag::err_unexpected_friend);
   9921 
   9922     // It might be worthwhile to try to recover by creating an
   9923     // appropriate declaration.
   9924     return 0;
   9925   }
   9926 
   9927   // C++ [namespace.memdef]p3
   9928   //  - If a friend declaration in a non-local class first declares a
   9929   //    class or function, the friend class or function is a member
   9930   //    of the innermost enclosing namespace.
   9931   //  - The name of the friend is not found by simple name lookup
   9932   //    until a matching declaration is provided in that namespace
   9933   //    scope (either before or after the class declaration granting
   9934   //    friendship).
   9935   //  - If a friend function is called, its name may be found by the
   9936   //    name lookup that considers functions from namespaces and
   9937   //    classes associated with the types of the function arguments.
   9938   //  - When looking for a prior declaration of a class or a function
   9939   //    declared as a friend, scopes outside the innermost enclosing
   9940   //    namespace scope are not considered.
   9941 
   9942   CXXScopeSpec &SS = D.getCXXScopeSpec();
   9943   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   9944   DeclarationName Name = NameInfo.getName();
   9945   assert(Name);
   9946 
   9947   // Check for unexpanded parameter packs.
   9948   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
   9949       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
   9950       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
   9951     return 0;
   9952 
   9953   // The context we found the declaration in, or in which we should
   9954   // create the declaration.
   9955   DeclContext *DC;
   9956   Scope *DCScope = S;
   9957   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
   9958                         ForRedeclaration);
   9959 
   9960   // FIXME: there are different rules in local classes
   9961 
   9962   // There are four cases here.
   9963   //   - There's no scope specifier, in which case we just go to the
   9964   //     appropriate scope and look for a function or function template
   9965   //     there as appropriate.
   9966   // Recover from invalid scope qualifiers as if they just weren't there.
   9967   if (SS.isInvalid() || !SS.isSet()) {
   9968     // C++0x [namespace.memdef]p3:
   9969     //   If the name in a friend declaration is neither qualified nor
   9970     //   a template-id and the declaration is a function or an
   9971     //   elaborated-type-specifier, the lookup to determine whether
   9972     //   the entity has been previously declared shall not consider
   9973     //   any scopes outside the innermost enclosing namespace.
   9974     // C++0x [class.friend]p11:
   9975     //   If a friend declaration appears in a local class and the name
   9976     //   specified is an unqualified name, a prior declaration is
   9977     //   looked up without considering scopes that are outside the
   9978     //   innermost enclosing non-class scope. For a friend function
   9979     //   declaration, if there is no prior declaration, the program is
   9980     //   ill-formed.
   9981     bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
   9982     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
   9983 
   9984     // Find the appropriate context according to the above.
   9985     DC = CurContext;
   9986     while (true) {
   9987       // Skip class contexts.  If someone can cite chapter and verse
   9988       // for this behavior, that would be nice --- it's what GCC and
   9989       // EDG do, and it seems like a reasonable intent, but the spec
   9990       // really only says that checks for unqualified existing
   9991       // declarations should stop at the nearest enclosing namespace,
   9992       // not that they should only consider the nearest enclosing
   9993       // namespace.
   9994       while (DC->isRecord())
   9995         DC = DC->getParent();
   9996 
   9997       LookupQualifiedName(Previous, DC);
   9998 
   9999       // TODO: decide what we think about using declarations.
   10000       if (isLocal || !Previous.empty())
   10001         break;
   10002 
   10003       if (isTemplateId) {
   10004         if (isa<TranslationUnitDecl>(DC)) break;
   10005       } else {
   10006         if (DC->isFileContext()) break;
   10007       }
   10008       DC = DC->getParent();
   10009     }
   10010 
   10011     // C++ [class.friend]p1: A friend of a class is a function or
   10012     //   class that is not a member of the class . . .
   10013     // C++11 changes this for both friend types and functions.
   10014     // Most C++ 98 compilers do seem to give an error here, so
   10015     // we do, too.
   10016     if (!Previous.empty() && DC->Equals(CurContext))
   10017       Diag(DS.getFriendSpecLoc(),
   10018            getLangOptions().CPlusPlus0x ?
   10019              diag::warn_cxx98_compat_friend_is_member :
   10020              diag::err_friend_is_member);
   10021 
   10022     DCScope = getScopeForDeclContext(S, DC);
   10023 
   10024     // C++ [class.friend]p6:
   10025     //   A function can be defined in a friend declaration of a class if and
   10026     //   only if the class is a non-local class (9.8), the function name is
   10027     //   unqualified, and the function has namespace scope.
   10028     if (isLocal && D.isFunctionDefinition()) {
   10029       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
   10030     }
   10031 
   10032   //   - There's a non-dependent scope specifier, in which case we
   10033   //     compute it and do a previous lookup there for a function
   10034   //     or function template.
   10035   } else if (!SS.getScopeRep()->isDependent()) {
   10036     DC = computeDeclContext(SS);
   10037     if (!DC) return 0;
   10038 
   10039     if (RequireCompleteDeclContext(SS, DC)) return 0;
   10040 
   10041     LookupQualifiedName(Previous, DC);
   10042 
   10043     // Ignore things found implicitly in the wrong scope.
   10044     // TODO: better diagnostics for this case.  Suggesting the right
   10045     // qualified scope would be nice...
   10046     LookupResult::Filter F = Previous.makeFilter();
   10047     while (F.hasNext()) {
   10048       NamedDecl *D = F.next();
   10049       if (!DC->InEnclosingNamespaceSetOf(
   10050               D->getDeclContext()->getRedeclContext()))
   10051         F.erase();
   10052     }
   10053     F.done();
   10054 
   10055     if (Previous.empty()) {
   10056       D.setInvalidType();
   10057       Diag(Loc, diag::err_qualified_friend_not_found)
   10058           << Name << TInfo->getType();
   10059       return 0;
   10060     }
   10061 
   10062     // C++ [class.friend]p1: A friend of a class is a function or
   10063     //   class that is not a member of the class . . .
   10064     if (DC->Equals(CurContext))
   10065       Diag(DS.getFriendSpecLoc(),
   10066            getLangOptions().CPlusPlus0x ?
   10067              diag::warn_cxx98_compat_friend_is_member :
   10068              diag::err_friend_is_member);
   10069 
   10070     if (D.isFunctionDefinition()) {
   10071       // C++ [class.friend]p6:
   10072       //   A function can be defined in a friend declaration of a class if and
   10073       //   only if the class is a non-local class (9.8), the function name is
   10074       //   unqualified, and the function has namespace scope.
   10075       SemaDiagnosticBuilder DB
   10076         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
   10077 
   10078       DB << SS.getScopeRep();
   10079       if (DC->isFileContext())
   10080         DB << FixItHint::CreateRemoval(SS.getRange());
   10081       SS.clear();
   10082     }
   10083 
   10084   //   - There's a scope specifier that does not match any template
   10085   //     parameter lists, in which case we use some arbitrary context,
   10086   //     create a method or method template, and wait for instantiation.
   10087   //   - There's a scope specifier that does match some template
   10088   //     parameter lists, which we don't handle right now.
   10089   } else {
   10090     if (D.isFunctionDefinition()) {
   10091       // C++ [class.friend]p6:
   10092       //   A function can be defined in a friend declaration of a class if and
   10093       //   only if the class is a non-local class (9.8), the function name is
   10094       //   unqualified, and the function has namespace scope.
   10095       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
   10096         << SS.getScopeRep();
   10097     }
   10098 
   10099     DC = CurContext;
   10100     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
   10101   }
   10102 
   10103   if (!DC->isRecord()) {
   10104     // This implies that it has to be an operator or function.
   10105     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
   10106         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
   10107         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
   10108       Diag(Loc, diag::err_introducing_special_friend) <<
   10109         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
   10110          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
   10111       return 0;
   10112     }
   10113   }
   10114 
   10115   bool AddToScope = true;
   10116   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
   10117                                           move(TemplateParams), AddToScope);
   10118   if (!ND) return 0;
   10119 
   10120   assert(ND->getDeclContext() == DC);
   10121   assert(ND->getLexicalDeclContext() == CurContext);
   10122 
   10123   // Add the function declaration to the appropriate lookup tables,
   10124   // adjusting the redeclarations list as necessary.  We don't
   10125   // want to do this yet if the friending class is dependent.
   10126   //
   10127   // Also update the scope-based lookup if the target context's
   10128   // lookup context is in lexical scope.
   10129   if (!CurContext->isDependentContext()) {
   10130     DC = DC->getRedeclContext();
   10131     DC->makeDeclVisibleInContext(ND, /* Recoverable=*/ false);
   10132     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
   10133       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
   10134   }
   10135 
   10136   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
   10137                                        D.getIdentifierLoc(), ND,
   10138                                        DS.getFriendSpecLoc());
   10139   FrD->setAccess(AS_public);
   10140   CurContext->addDecl(FrD);
   10141 
   10142   if (ND->isInvalidDecl())
   10143     FrD->setInvalidDecl();
   10144   else {
   10145     FunctionDecl *FD;
   10146     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
   10147       FD = FTD->getTemplatedDecl();
   10148     else
   10149       FD = cast<FunctionDecl>(ND);
   10150 
   10151     // Mark templated-scope function declarations as unsupported.
   10152     if (FD->getNumTemplateParameterLists())
   10153       FrD->setUnsupportedFriend(true);
   10154   }
   10155 
   10156   return ND;
   10157 }
   10158 
   10159 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
   10160   AdjustDeclIfTemplate(Dcl);
   10161 
   10162   FunctionDecl *Fn = dyn_cast<FunctionDecl>(Dcl);
   10163   if (!Fn) {
   10164     Diag(DelLoc, diag::err_deleted_non_function);
   10165     return;
   10166   }
   10167   if (const FunctionDecl *Prev = Fn->getPreviousDeclaration()) {
   10168     Diag(DelLoc, diag::err_deleted_decl_not_first);
   10169     Diag(Prev->getLocation(), diag::note_previous_declaration);
   10170     // If the declaration wasn't the first, we delete the function anyway for
   10171     // recovery.
   10172   }
   10173   Fn->setDeletedAsWritten();
   10174 }
   10175 
   10176 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
   10177   CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
   10178 
   10179   if (MD) {
   10180     if (MD->getParent()->isDependentType()) {
   10181       MD->setDefaulted();
   10182       MD->setExplicitlyDefaulted();
   10183       return;
   10184     }
   10185 
   10186     CXXSpecialMember Member = getSpecialMember(MD);
   10187     if (Member == CXXInvalid) {
   10188       Diag(DefaultLoc, diag::err_default_special_members);
   10189       return;
   10190     }
   10191 
   10192     MD->setDefaulted();
   10193     MD->setExplicitlyDefaulted();
   10194 
   10195     // If this definition appears within the record, do the checking when
   10196     // the record is complete.
   10197     const FunctionDecl *Primary = MD;
   10198     if (MD->getTemplatedKind() != FunctionDecl::TK_NonTemplate)
   10199       // Find the uninstantiated declaration that actually had the '= default'
   10200       // on it.
   10201       MD->getTemplateInstantiationPattern()->isDefined(Primary);
   10202 
   10203     if (Primary == Primary->getCanonicalDecl())
   10204       return;
   10205 
   10206     switch (Member) {
   10207     case CXXDefaultConstructor: {
   10208       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10209       CheckExplicitlyDefaultedDefaultConstructor(CD);
   10210       if (!CD->isInvalidDecl())
   10211         DefineImplicitDefaultConstructor(DefaultLoc, CD);
   10212       break;
   10213     }
   10214 
   10215     case CXXCopyConstructor: {
   10216       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10217       CheckExplicitlyDefaultedCopyConstructor(CD);
   10218       if (!CD->isInvalidDecl())
   10219         DefineImplicitCopyConstructor(DefaultLoc, CD);
   10220       break;
   10221     }
   10222 
   10223     case CXXCopyAssignment: {
   10224       CheckExplicitlyDefaultedCopyAssignment(MD);
   10225       if (!MD->isInvalidDecl())
   10226         DefineImplicitCopyAssignment(DefaultLoc, MD);
   10227       break;
   10228     }
   10229 
   10230     case CXXDestructor: {
   10231       CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
   10232       CheckExplicitlyDefaultedDestructor(DD);
   10233       if (!DD->isInvalidDecl())
   10234         DefineImplicitDestructor(DefaultLoc, DD);
   10235       break;
   10236     }
   10237 
   10238     case CXXMoveConstructor: {
   10239       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
   10240       CheckExplicitlyDefaultedMoveConstructor(CD);
   10241       if (!CD->isInvalidDecl())
   10242         DefineImplicitMoveConstructor(DefaultLoc, CD);
   10243       break;
   10244     }
   10245 
   10246     case CXXMoveAssignment: {
   10247       CheckExplicitlyDefaultedMoveAssignment(MD);
   10248       if (!MD->isInvalidDecl())
   10249         DefineImplicitMoveAssignment(DefaultLoc, MD);
   10250       break;
   10251     }
   10252 
   10253     case CXXInvalid:
   10254       llvm_unreachable("Invalid special member.");
   10255     }
   10256   } else {
   10257     Diag(DefaultLoc, diag::err_default_special_members);
   10258   }
   10259 }
   10260 
   10261 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
   10262   for (Stmt::child_range CI = S->children(); CI; ++CI) {
   10263     Stmt *SubStmt = *CI;
   10264     if (!SubStmt)
   10265       continue;
   10266     if (isa<ReturnStmt>(SubStmt))
   10267       Self.Diag(SubStmt->getSourceRange().getBegin(),
   10268            diag::err_return_in_constructor_handler);
   10269     if (!isa<Expr>(SubStmt))
   10270       SearchForReturnInStmt(Self, SubStmt);
   10271   }
   10272 }
   10273 
   10274 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
   10275   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
   10276     CXXCatchStmt *Handler = TryBlock->getHandler(I);
   10277     SearchForReturnInStmt(*this, Handler);
   10278   }
   10279 }
   10280 
   10281 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
   10282                                              const CXXMethodDecl *Old) {
   10283   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
   10284   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
   10285 
   10286   if (Context.hasSameType(NewTy, OldTy) ||
   10287       NewTy->isDependentType() || OldTy->isDependentType())
   10288     return false;
   10289 
   10290   // Check if the return types are covariant
   10291   QualType NewClassTy, OldClassTy;
   10292 
   10293   /// Both types must be pointers or references to classes.
   10294   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
   10295     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
   10296       NewClassTy = NewPT->getPointeeType();
   10297       OldClassTy = OldPT->getPointeeType();
   10298     }
   10299   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
   10300     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
   10301       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
   10302         NewClassTy = NewRT->getPointeeType();
   10303         OldClassTy = OldRT->getPointeeType();
   10304       }
   10305     }
   10306   }
   10307 
   10308   // The return types aren't either both pointers or references to a class type.
   10309   if (NewClassTy.isNull()) {
   10310     Diag(New->getLocation(),
   10311          diag::err_different_return_type_for_overriding_virtual_function)
   10312       << New->getDeclName() << NewTy << OldTy;
   10313     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10314 
   10315     return true;
   10316   }
   10317 
   10318   // C++ [class.virtual]p6:
   10319   //   If the return type of D::f differs from the return type of B::f, the
   10320   //   class type in the return type of D::f shall be complete at the point of
   10321   //   declaration of D::f or shall be the class type D.
   10322   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
   10323     if (!RT->isBeingDefined() &&
   10324         RequireCompleteType(New->getLocation(), NewClassTy,
   10325                             PDiag(diag::err_covariant_return_incomplete)
   10326                               << New->getDeclName()))
   10327     return true;
   10328   }
   10329 
   10330   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
   10331     // Check if the new class derives from the old class.
   10332     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
   10333       Diag(New->getLocation(),
   10334            diag::err_covariant_return_not_derived)
   10335       << New->getDeclName() << NewTy << OldTy;
   10336       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10337       return true;
   10338     }
   10339 
   10340     // Check if we the conversion from derived to base is valid.
   10341     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
   10342                     diag::err_covariant_return_inaccessible_base,
   10343                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
   10344                     // FIXME: Should this point to the return type?
   10345                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
   10346       // FIXME: this note won't trigger for delayed access control
   10347       // diagnostics, and it's impossible to get an undelayed error
   10348       // here from access control during the original parse because
   10349       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
   10350       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10351       return true;
   10352     }
   10353   }
   10354 
   10355   // The qualifiers of the return types must be the same.
   10356   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
   10357     Diag(New->getLocation(),
   10358          diag::err_covariant_return_type_different_qualifications)
   10359     << New->getDeclName() << NewTy << OldTy;
   10360     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10361     return true;
   10362   };
   10363 
   10364 
   10365   // The new class type must have the same or less qualifiers as the old type.
   10366   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
   10367     Diag(New->getLocation(),
   10368          diag::err_covariant_return_type_class_type_more_qualified)
   10369     << New->getDeclName() << NewTy << OldTy;
   10370     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
   10371     return true;
   10372   };
   10373 
   10374   return false;
   10375 }
   10376 
   10377 /// \brief Mark the given method pure.
   10378 ///
   10379 /// \param Method the method to be marked pure.
   10380 ///
   10381 /// \param InitRange the source range that covers the "0" initializer.
   10382 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
   10383   SourceLocation EndLoc = InitRange.getEnd();
   10384   if (EndLoc.isValid())
   10385     Method->setRangeEnd(EndLoc);
   10386 
   10387   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
   10388     Method->setPure();
   10389     return false;
   10390   }
   10391 
   10392   if (!Method->isInvalidDecl())
   10393     Diag(Method->getLocation(), diag::err_non_virtual_pure)
   10394       << Method->getDeclName() << InitRange;
   10395   return true;
   10396 }
   10397 
   10398 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
   10399 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
   10400 /// is a fresh scope pushed for just this purpose.
   10401 ///
   10402 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
   10403 /// static data member of class X, names should be looked up in the scope of
   10404 /// class X.
   10405 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
   10406   // If there is no declaration, there was an error parsing it.
   10407   if (D == 0 || D->isInvalidDecl()) return;
   10408 
   10409   // We should only get called for declarations with scope specifiers, like:
   10410   //   int foo::bar;
   10411   assert(D->isOutOfLine());
   10412   EnterDeclaratorContext(S, D->getDeclContext());
   10413 }
   10414 
   10415 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
   10416 /// initializer for the out-of-line declaration 'D'.
   10417 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
   10418   // If there is no declaration, there was an error parsing it.
   10419   if (D == 0 || D->isInvalidDecl()) return;
   10420 
   10421   assert(D->isOutOfLine());
   10422   ExitDeclaratorContext(S);
   10423 }
   10424 
   10425 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
   10426 /// C++ if/switch/while/for statement.
   10427 /// e.g: "if (int x = f()) {...}"
   10428 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
   10429   // C++ 6.4p2:
   10430   // The declarator shall not specify a function or an array.
   10431   // The type-specifier-seq shall not contain typedef and shall not declare a
   10432   // new class or enumeration.
   10433   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
   10434          "Parser allowed 'typedef' as storage class of condition decl.");
   10435 
   10436   Decl *Dcl = ActOnDeclarator(S, D);
   10437   if (!Dcl)
   10438     return true;
   10439 
   10440   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
   10441     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
   10442       << D.getSourceRange();
   10443     return true;
   10444   }
   10445 
   10446   return Dcl;
   10447 }
   10448 
   10449 void Sema::LoadExternalVTableUses() {
   10450   if (!ExternalSource)
   10451     return;
   10452 
   10453   SmallVector<ExternalVTableUse, 4> VTables;
   10454   ExternalSource->ReadUsedVTables(VTables);
   10455   SmallVector<VTableUse, 4> NewUses;
   10456   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
   10457     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
   10458       = VTablesUsed.find(VTables[I].Record);
   10459     // Even if a definition wasn't required before, it may be required now.
   10460     if (Pos != VTablesUsed.end()) {
   10461       if (!Pos->second && VTables[I].DefinitionRequired)
   10462         Pos->second = true;
   10463       continue;
   10464     }
   10465 
   10466     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
   10467     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
   10468   }
   10469 
   10470   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
   10471 }
   10472 
   10473 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
   10474                           bool DefinitionRequired) {
   10475   // Ignore any vtable uses in unevaluated operands or for classes that do
   10476   // not have a vtable.
   10477   if (!Class->isDynamicClass() || Class->isDependentContext() ||
   10478       CurContext->isDependentContext() ||
   10479       ExprEvalContexts.back().Context == Unevaluated)
   10480     return;
   10481 
   10482   // Try to insert this class into the map.
   10483   LoadExternalVTableUses();
   10484   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   10485   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
   10486     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
   10487   if (!Pos.second) {
   10488     // If we already had an entry, check to see if we are promoting this vtable
   10489     // to required a definition. If so, we need to reappend to the VTableUses
   10490     // list, since we may have already processed the first entry.
   10491     if (DefinitionRequired && !Pos.first->second) {
   10492       Pos.first->second = true;
   10493     } else {
   10494       // Otherwise, we can early exit.
   10495       return;
   10496     }
   10497   }
   10498 
   10499   // Local classes need to have their virtual members marked
   10500   // immediately. For all other classes, we mark their virtual members
   10501   // at the end of the translation unit.
   10502   if (Class->isLocalClass())
   10503     MarkVirtualMembersReferenced(Loc, Class);
   10504   else
   10505     VTableUses.push_back(std::make_pair(Class, Loc));
   10506 }
   10507 
   10508 bool Sema::DefineUsedVTables() {
   10509   LoadExternalVTableUses();
   10510   if (VTableUses.empty())
   10511     return false;
   10512 
   10513   // Note: The VTableUses vector could grow as a result of marking
   10514   // the members of a class as "used", so we check the size each
   10515   // time through the loop and prefer indices (with are stable) to
   10516   // iterators (which are not).
   10517   bool DefinedAnything = false;
   10518   for (unsigned I = 0; I != VTableUses.size(); ++I) {
   10519     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
   10520     if (!Class)
   10521       continue;
   10522 
   10523     SourceLocation Loc = VTableUses[I].second;
   10524 
   10525     // If this class has a key function, but that key function is
   10526     // defined in another translation unit, we don't need to emit the
   10527     // vtable even though we're using it.
   10528     const CXXMethodDecl *KeyFunction = Context.getKeyFunction(Class);
   10529     if (KeyFunction && !KeyFunction->hasBody()) {
   10530       switch (KeyFunction->getTemplateSpecializationKind()) {
   10531       case TSK_Undeclared:
   10532       case TSK_ExplicitSpecialization:
   10533       case TSK_ExplicitInstantiationDeclaration:
   10534         // The key function is in another translation unit.
   10535         continue;
   10536 
   10537       case TSK_ExplicitInstantiationDefinition:
   10538       case TSK_ImplicitInstantiation:
   10539         // We will be instantiating the key function.
   10540         break;
   10541       }
   10542     } else if (!KeyFunction) {
   10543       // If we have a class with no key function that is the subject
   10544       // of an explicit instantiation declaration, suppress the
   10545       // vtable; it will live with the explicit instantiation
   10546       // definition.
   10547       bool IsExplicitInstantiationDeclaration
   10548         = Class->getTemplateSpecializationKind()
   10549                                       == TSK_ExplicitInstantiationDeclaration;
   10550       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
   10551                                  REnd = Class->redecls_end();
   10552            R != REnd; ++R) {
   10553         TemplateSpecializationKind TSK
   10554           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
   10555         if (TSK == TSK_ExplicitInstantiationDeclaration)
   10556           IsExplicitInstantiationDeclaration = true;
   10557         else if (TSK == TSK_ExplicitInstantiationDefinition) {
   10558           IsExplicitInstantiationDeclaration = false;
   10559           break;
   10560         }
   10561       }
   10562 
   10563       if (IsExplicitInstantiationDeclaration)
   10564         continue;
   10565     }
   10566 
   10567     // Mark all of the virtual members of this class as referenced, so
   10568     // that we can build a vtable. Then, tell the AST consumer that a
   10569     // vtable for this class is required.
   10570     DefinedAnything = true;
   10571     MarkVirtualMembersReferenced(Loc, Class);
   10572     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
   10573     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
   10574 
   10575     // Optionally warn if we're emitting a weak vtable.
   10576     if (Class->getLinkage() == ExternalLinkage &&
   10577         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
   10578       const FunctionDecl *KeyFunctionDef = 0;
   10579       if (!KeyFunction ||
   10580           (KeyFunction->hasBody(KeyFunctionDef) &&
   10581            KeyFunctionDef->isInlined()))
   10582         Diag(Class->getLocation(), diag::warn_weak_vtable) << Class;
   10583     }
   10584   }
   10585   VTableUses.clear();
   10586 
   10587   return DefinedAnything;
   10588 }
   10589 
   10590 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
   10591                                         const CXXRecordDecl *RD) {
   10592   for (CXXRecordDecl::method_iterator i = RD->method_begin(),
   10593        e = RD->method_end(); i != e; ++i) {
   10594     CXXMethodDecl *MD = *i;
   10595 
   10596     // C++ [basic.def.odr]p2:
   10597     //   [...] A virtual member function is used if it is not pure. [...]
   10598     if (MD->isVirtual() && !MD->isPure())
   10599       MarkDeclarationReferenced(Loc, MD);
   10600   }
   10601 
   10602   // Only classes that have virtual bases need a VTT.
   10603   if (RD->getNumVBases() == 0)
   10604     return;
   10605 
   10606   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
   10607            e = RD->bases_end(); i != e; ++i) {
   10608     const CXXRecordDecl *Base =
   10609         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
   10610     if (Base->getNumVBases() == 0)
   10611       continue;
   10612     MarkVirtualMembersReferenced(Loc, Base);
   10613   }
   10614 }
   10615 
   10616 /// SetIvarInitializers - This routine builds initialization ASTs for the
   10617 /// Objective-C implementation whose ivars need be initialized.
   10618 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
   10619   if (!getLangOptions().CPlusPlus)
   10620     return;
   10621   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
   10622     SmallVector<ObjCIvarDecl*, 8> ivars;
   10623     CollectIvarsToConstructOrDestruct(OID, ivars);
   10624     if (ivars.empty())
   10625       return;
   10626     SmallVector<CXXCtorInitializer*, 32> AllToInit;
   10627     for (unsigned i = 0; i < ivars.size(); i++) {
   10628       FieldDecl *Field = ivars[i];
   10629       if (Field->isInvalidDecl())
   10630         continue;
   10631 
   10632       CXXCtorInitializer *Member;
   10633       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
   10634       InitializationKind InitKind =
   10635         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
   10636 
   10637       InitializationSequence InitSeq(*this, InitEntity, InitKind, 0, 0);
   10638       ExprResult MemberInit =
   10639         InitSeq.Perform(*this, InitEntity, InitKind, MultiExprArg());
   10640       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
   10641       // Note, MemberInit could actually come back empty if no initialization
   10642       // is required (e.g., because it would call a trivial default constructor)
   10643       if (!MemberInit.get() || MemberInit.isInvalid())
   10644         continue;
   10645 
   10646       Member =
   10647         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
   10648                                          SourceLocation(),
   10649                                          MemberInit.takeAs<Expr>(),
   10650                                          SourceLocation());
   10651       AllToInit.push_back(Member);
   10652 
   10653       // Be sure that the destructor is accessible and is marked as referenced.
   10654       if (const RecordType *RecordTy
   10655                   = Context.getBaseElementType(Field->getType())
   10656                                                         ->getAs<RecordType>()) {
   10657                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
   10658         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
   10659           MarkDeclarationReferenced(Field->getLocation(), Destructor);
   10660           CheckDestructorAccess(Field->getLocation(), Destructor,
   10661                             PDiag(diag::err_access_dtor_ivar)
   10662                               << Context.getBaseElementType(Field->getType()));
   10663         }
   10664       }
   10665     }
   10666     ObjCImplementation->setIvarInitializers(Context,
   10667                                             AllToInit.data(), AllToInit.size());
   10668   }
   10669 }
   10670 
   10671 static
   10672 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
   10673                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
   10674                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
   10675                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
   10676                            Sema &S) {
   10677   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
   10678                                                    CE = Current.end();
   10679   if (Ctor->isInvalidDecl())
   10680     return;
   10681 
   10682   const FunctionDecl *FNTarget = 0;
   10683   CXXConstructorDecl *Target;
   10684 
   10685   // We ignore the result here since if we don't have a body, Target will be
   10686   // null below.
   10687   (void)Ctor->getTargetConstructor()->hasBody(FNTarget);
   10688   Target
   10689 = const_cast<CXXConstructorDecl*>(cast_or_null<CXXConstructorDecl>(FNTarget));
   10690 
   10691   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
   10692                      // Avoid dereferencing a null pointer here.
   10693                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
   10694 
   10695   if (!Current.insert(Canonical))
   10696     return;
   10697 
   10698   // We know that beyond here, we aren't chaining into a cycle.
   10699   if (!Target || !Target->isDelegatingConstructor() ||
   10700       Target->isInvalidDecl() || Valid.count(TCanonical)) {
   10701     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
   10702       Valid.insert(*CI);
   10703     Current.clear();
   10704   // We've hit a cycle.
   10705   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
   10706              Current.count(TCanonical)) {
   10707     // If we haven't diagnosed this cycle yet, do so now.
   10708     if (!Invalid.count(TCanonical)) {
   10709       S.Diag((*Ctor->init_begin())->getSourceLocation(),
   10710              diag::warn_delegating_ctor_cycle)
   10711         << Ctor;
   10712 
   10713       // Don't add a note for a function delegating directo to itself.
   10714       if (TCanonical != Canonical)
   10715         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
   10716 
   10717       CXXConstructorDecl *C = Target;
   10718       while (C->getCanonicalDecl() != Canonical) {
   10719         (void)C->getTargetConstructor()->hasBody(FNTarget);
   10720         assert(FNTarget && "Ctor cycle through bodiless function");
   10721 
   10722         C
   10723        = const_cast<CXXConstructorDecl*>(cast<CXXConstructorDecl>(FNTarget));
   10724         S.Diag(C->getLocation(), diag::note_which_delegates_to);
   10725       }
   10726     }
   10727 
   10728     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
   10729       Invalid.insert(*CI);
   10730     Current.clear();
   10731   } else {
   10732     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
   10733   }
   10734 }
   10735 
   10736 
   10737 void Sema::CheckDelegatingCtorCycles() {
   10738   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
   10739 
   10740   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
   10741                                                    CE = Current.end();
   10742 
   10743   for (DelegatingCtorDeclsType::iterator
   10744          I = DelegatingCtorDecls.begin(ExternalSource),
   10745          E = DelegatingCtorDecls.end();
   10746        I != E; ++I) {
   10747    DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
   10748   }
   10749 
   10750   for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
   10751     (*CI)->setInvalidDecl();
   10752 }
   10753 
   10754 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
   10755 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
   10756   // Implicitly declared functions (e.g. copy constructors) are
   10757   // __host__ __device__
   10758   if (D->isImplicit())
   10759     return CFT_HostDevice;
   10760 
   10761   if (D->hasAttr<CUDAGlobalAttr>())
   10762     return CFT_Global;
   10763 
   10764   if (D->hasAttr<CUDADeviceAttr>()) {
   10765     if (D->hasAttr<CUDAHostAttr>())
   10766       return CFT_HostDevice;
   10767     else
   10768       return CFT_Device;
   10769   }
   10770 
   10771   return CFT_Host;
   10772 }
   10773 
   10774 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
   10775                            CUDAFunctionTarget CalleeTarget) {
   10776   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
   10777   // Callable from the device only."
   10778   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
   10779     return true;
   10780 
   10781   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
   10782   // Callable from the host only."
   10783   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
   10784   // Callable from the host only."
   10785   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
   10786       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
   10787     return true;
   10788 
   10789   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
   10790     return true;
   10791 
   10792   return false;
   10793 }
   10794