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