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