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