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