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