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/AST/ASTConsumer.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTLambda.h"
18 #include "clang/AST/ASTMutationListener.h"
19 #include "clang/AST/CXXInheritance.h"
20 #include "clang/AST/CharUnits.h"
21 #include "clang/AST/DeclVisitor.h"
22 #include "clang/AST/EvaluatedExprVisitor.h"
23 #include "clang/AST/ExprCXX.h"
24 #include "clang/AST/RecordLayout.h"
25 #include "clang/AST/RecursiveASTVisitor.h"
26 #include "clang/AST/StmtVisitor.h"
27 #include "clang/AST/TypeLoc.h"
28 #include "clang/AST/TypeOrdering.h"
29 #include "clang/Basic/PartialDiagnostic.h"
30 #include "clang/Basic/TargetInfo.h"
31 #include "clang/Lex/LiteralSupport.h"
32 #include "clang/Lex/Preprocessor.h"
33 #include "clang/Sema/CXXFieldCollector.h"
34 #include "clang/Sema/DeclSpec.h"
35 #include "clang/Sema/Initialization.h"
36 #include "clang/Sema/Lookup.h"
37 #include "clang/Sema/ParsedTemplate.h"
38 #include "clang/Sema/Scope.h"
39 #include "clang/Sema/ScopeInfo.h"
40 #include "llvm/ADT/STLExtras.h"
41 #include "llvm/ADT/SmallString.h"
42 #include <map>
43 #include <set>
44 
45 using namespace clang;
46 
47 //===----------------------------------------------------------------------===//
48 // CheckDefaultArgumentVisitor
49 //===----------------------------------------------------------------------===//
50 
51 namespace {
52   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
53   /// the default argument of a parameter to determine whether it
54   /// contains any ill-formed subexpressions. For example, this will
55   /// diagnose the use of local variables or parameters within the
56   /// default argument expression.
57   class CheckDefaultArgumentVisitor
58     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
59     Expr *DefaultArg;
60     Sema *S;
61 
62   public:
63     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
64       : DefaultArg(defarg), S(s) {}
65 
66     bool VisitExpr(Expr *Node);
67     bool VisitDeclRefExpr(DeclRefExpr *DRE);
68     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
69     bool VisitLambdaExpr(LambdaExpr *Lambda);
70     bool VisitPseudoObjectExpr(PseudoObjectExpr *POE);
71   };
72 
73   /// VisitExpr - Visit all of the children of this expression.
74   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
75     bool IsInvalid = false;
76     for (Stmt::child_range I = Node->children(); I; ++I)
77       IsInvalid |= Visit(*I);
78     return IsInvalid;
79   }
80 
81   /// VisitDeclRefExpr - Visit a reference to a declaration, to
82   /// determine whether this declaration can be used in the default
83   /// argument expression.
84   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
85     NamedDecl *Decl = DRE->getDecl();
86     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
87       // C++ [dcl.fct.default]p9
88       //   Default arguments are evaluated each time the function is
89       //   called. The order of evaluation of function arguments is
90       //   unspecified. Consequently, parameters of a function shall not
91       //   be used in default argument expressions, even if they are not
92       //   evaluated. Parameters of a function declared before a default
93       //   argument expression are in scope and can hide namespace and
94       //   class member names.
95       return S->Diag(DRE->getLocStart(),
96                      diag::err_param_default_argument_references_param)
97          << Param->getDeclName() << DefaultArg->getSourceRange();
98     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
99       // C++ [dcl.fct.default]p7
100       //   Local variables shall not be used in default argument
101       //   expressions.
102       if (VDecl->isLocalVarDecl())
103         return S->Diag(DRE->getLocStart(),
104                        diag::err_param_default_argument_references_local)
105           << VDecl->getDeclName() << DefaultArg->getSourceRange();
106     }
107 
108     return false;
109   }
110 
111   /// VisitCXXThisExpr - Visit a C++ "this" expression.
112   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
113     // C++ [dcl.fct.default]p8:
114     //   The keyword this shall not be used in a default argument of a
115     //   member function.
116     return S->Diag(ThisE->getLocStart(),
117                    diag::err_param_default_argument_references_this)
118                << ThisE->getSourceRange();
119   }
120 
121   bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) {
122     bool Invalid = false;
123     for (PseudoObjectExpr::semantics_iterator
124            i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
125       Expr *E = *i;
126 
127       // Look through bindings.
128       if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
129         E = OVE->getSourceExpr();
130         assert(E && "pseudo-object binding without source expression?");
131       }
132 
133       Invalid |= Visit(E);
134     }
135     return Invalid;
136   }
137 
138   bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
139     // C++11 [expr.lambda.prim]p13:
140     //   A lambda-expression appearing in a default argument shall not
141     //   implicitly or explicitly capture any entity.
142     if (Lambda->capture_begin() == Lambda->capture_end())
143       return false;
144 
145     return S->Diag(Lambda->getLocStart(),
146                    diag::err_lambda_capture_default_arg);
147   }
148 }
149 
150 void
151 Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
152                                                  const CXXMethodDecl *Method) {
153   // If we have an MSAny spec already, don't bother.
154   if (!Method || ComputedEST == EST_MSAny)
155     return;
156 
157   const FunctionProtoType *Proto
158     = Method->getType()->getAs<FunctionProtoType>();
159   Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
160   if (!Proto)
161     return;
162 
163   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
164 
165   // If this function can throw any exceptions, make a note of that.
166   if (EST == EST_MSAny || EST == EST_None) {
167     ClearExceptions();
168     ComputedEST = EST;
169     return;
170   }
171 
172   // FIXME: If the call to this decl is using any of its default arguments, we
173   // need to search them for potentially-throwing calls.
174 
175   // If this function has a basic noexcept, it doesn't affect the outcome.
176   if (EST == EST_BasicNoexcept)
177     return;
178 
179   // If we have a throw-all spec at this point, ignore the function.
180   if (ComputedEST == EST_None)
181     return;
182 
183   // If we're still at noexcept(true) and there's a nothrow() callee,
184   // change to that specification.
185   if (EST == EST_DynamicNone) {
186     if (ComputedEST == EST_BasicNoexcept)
187       ComputedEST = EST_DynamicNone;
188     return;
189   }
190 
191   // Check out noexcept specs.
192   if (EST == EST_ComputedNoexcept) {
193     FunctionProtoType::NoexceptResult NR =
194         Proto->getNoexceptSpec(Self->Context);
195     assert(NR != FunctionProtoType::NR_NoNoexcept &&
196            "Must have noexcept result for EST_ComputedNoexcept.");
197     assert(NR != FunctionProtoType::NR_Dependent &&
198            "Should not generate implicit declarations for dependent cases, "
199            "and don't know how to handle them anyway.");
200 
201     // noexcept(false) -> no spec on the new function
202     if (NR == FunctionProtoType::NR_Throw) {
203       ClearExceptions();
204       ComputedEST = EST_None;
205     }
206     // noexcept(true) won't change anything either.
207     return;
208   }
209 
210   assert(EST == EST_Dynamic && "EST case not considered earlier.");
211   assert(ComputedEST != EST_None &&
212          "Shouldn't collect exceptions when throw-all is guaranteed.");
213   ComputedEST = EST_Dynamic;
214   // Record the exceptions in this function's exception specification.
215   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
216                                           EEnd = Proto->exception_end();
217        E != EEnd; ++E)
218     if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
219       Exceptions.push_back(*E);
220 }
221 
222 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
223   if (!E || ComputedEST == EST_MSAny)
224     return;
225 
226   // FIXME:
227   //
228   // C++0x [except.spec]p14:
229   //   [An] implicit exception-specification specifies the type-id T if and
230   // only if T is allowed by the exception-specification of a function directly
231   // invoked by f's implicit definition; f shall allow all exceptions if any
232   // function it directly invokes allows all exceptions, and f shall allow no
233   // exceptions if every function it directly invokes allows no exceptions.
234   //
235   // Note in particular that if an implicit exception-specification is generated
236   // for a function containing a throw-expression, that specification can still
237   // be noexcept(true).
238   //
239   // Note also that 'directly invoked' is not defined in the standard, and there
240   // is no indication that we should only consider potentially-evaluated calls.
241   //
242   // Ultimately we should implement the intent of the standard: the exception
243   // specification should be the set of exceptions which can be thrown by the
244   // implicit definition. For now, we assume that any non-nothrow expression can
245   // throw any exception.
246 
247   if (Self->canThrow(E))
248     ComputedEST = EST_None;
249 }
250 
251 bool
252 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
253                               SourceLocation EqualLoc) {
254   if (RequireCompleteType(Param->getLocation(), Param->getType(),
255                           diag::err_typecheck_decl_incomplete_type)) {
256     Param->setInvalidDecl();
257     return true;
258   }
259 
260   // C++ [dcl.fct.default]p5
261   //   A default argument expression is implicitly converted (clause
262   //   4) to the parameter type. The default argument expression has
263   //   the same semantic constraints as the initializer expression in
264   //   a declaration of a variable of the parameter type, using the
265   //   copy-initialization semantics (8.5).
266   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
267                                                                     Param);
268   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
269                                                            EqualLoc);
270   InitializationSequence InitSeq(*this, Entity, Kind, Arg);
271   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
272   if (Result.isInvalid())
273     return true;
274   Arg = Result.takeAs<Expr>();
275 
276   CheckCompletedExpr(Arg, EqualLoc);
277   Arg = MaybeCreateExprWithCleanups(Arg);
278 
279   // Okay: add the default argument to the parameter
280   Param->setDefaultArg(Arg);
281 
282   // We have already instantiated this parameter; provide each of the
283   // instantiations with the uninstantiated default argument.
284   UnparsedDefaultArgInstantiationsMap::iterator InstPos
285     = UnparsedDefaultArgInstantiations.find(Param);
286   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
287     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
288       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
289 
290     // We're done tracking this parameter's instantiations.
291     UnparsedDefaultArgInstantiations.erase(InstPos);
292   }
293 
294   return false;
295 }
296 
297 /// ActOnParamDefaultArgument - Check whether the default argument
298 /// provided for a function parameter is well-formed. If so, attach it
299 /// to the parameter declaration.
300 void
301 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
302                                 Expr *DefaultArg) {
303   if (!param || !DefaultArg)
304     return;
305 
306   ParmVarDecl *Param = cast<ParmVarDecl>(param);
307   UnparsedDefaultArgLocs.erase(Param);
308 
309   // Default arguments are only permitted in C++
310   if (!getLangOpts().CPlusPlus) {
311     Diag(EqualLoc, diag::err_param_default_argument)
312       << DefaultArg->getSourceRange();
313     Param->setInvalidDecl();
314     return;
315   }
316 
317   // Check for unexpanded parameter packs.
318   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
319     Param->setInvalidDecl();
320     return;
321   }
322 
323   // Check that the default argument is well-formed
324   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
325   if (DefaultArgChecker.Visit(DefaultArg)) {
326     Param->setInvalidDecl();
327     return;
328   }
329 
330   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
331 }
332 
333 /// ActOnParamUnparsedDefaultArgument - We've seen a default
334 /// argument for a function parameter, but we can't parse it yet
335 /// because we're inside a class definition. Note that this default
336 /// argument will be parsed later.
337 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
338                                              SourceLocation EqualLoc,
339                                              SourceLocation ArgLoc) {
340   if (!param)
341     return;
342 
343   ParmVarDecl *Param = cast<ParmVarDecl>(param);
344   Param->setUnparsedDefaultArg();
345   UnparsedDefaultArgLocs[Param] = ArgLoc;
346 }
347 
348 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
349 /// the default argument for the parameter param failed.
350 void Sema::ActOnParamDefaultArgumentError(Decl *param) {
351   if (!param)
352     return;
353 
354   ParmVarDecl *Param = cast<ParmVarDecl>(param);
355   Param->setInvalidDecl();
356   UnparsedDefaultArgLocs.erase(Param);
357 }
358 
359 /// CheckExtraCXXDefaultArguments - Check for any extra default
360 /// arguments in the declarator, which is not a function declaration
361 /// or definition and therefore is not permitted to have default
362 /// arguments. This routine should be invoked for every declarator
363 /// that is not a function declaration or definition.
364 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
365   // C++ [dcl.fct.default]p3
366   //   A default argument expression shall be specified only in the
367   //   parameter-declaration-clause of a function declaration or in a
368   //   template-parameter (14.1). It shall not be specified for a
369   //   parameter pack. If it is specified in a
370   //   parameter-declaration-clause, it shall not occur within a
371   //   declarator or abstract-declarator of a parameter-declaration.
372   bool MightBeFunction = D.isFunctionDeclarationContext();
373   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
374     DeclaratorChunk &chunk = D.getTypeObject(i);
375     if (chunk.Kind == DeclaratorChunk::Function) {
376       if (MightBeFunction) {
377         // This is a function declaration. It can have default arguments, but
378         // keep looking in case its return type is a function type with default
379         // arguments.
380         MightBeFunction = false;
381         continue;
382       }
383       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
384         ParmVarDecl *Param =
385           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
386         if (Param->hasUnparsedDefaultArg()) {
387           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
388           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
389             << SourceRange((*Toks)[1].getLocation(),
390                            Toks->back().getLocation());
391           delete Toks;
392           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
393         } else if (Param->getDefaultArg()) {
394           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
395             << Param->getDefaultArg()->getSourceRange();
396           Param->setDefaultArg(0);
397         }
398       }
399     } else if (chunk.Kind != DeclaratorChunk::Paren) {
400       MightBeFunction = false;
401     }
402   }
403 }
404 
405 static bool functionDeclHasDefaultArgument(const FunctionDecl *FD) {
406   for (unsigned NumParams = FD->getNumParams(); NumParams > 0; --NumParams) {
407     const ParmVarDecl *PVD = FD->getParamDecl(NumParams-1);
408     if (!PVD->hasDefaultArg())
409       return false;
410     if (!PVD->hasInheritedDefaultArg())
411       return true;
412   }
413   return false;
414 }
415 
416 /// MergeCXXFunctionDecl - Merge two declarations of the same C++
417 /// function, once we already know that they have the same
418 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
419 /// error, false otherwise.
420 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
421                                 Scope *S) {
422   bool Invalid = false;
423 
424   // C++ [dcl.fct.default]p4:
425   //   For non-template functions, default arguments can be added in
426   //   later declarations of a function in the same
427   //   scope. Declarations in different scopes have completely
428   //   distinct sets of default arguments. That is, declarations in
429   //   inner scopes do not acquire default arguments from
430   //   declarations in outer scopes, and vice versa. In a given
431   //   function declaration, all parameters subsequent to a
432   //   parameter with a default argument shall have default
433   //   arguments supplied in this or previous declarations. A
434   //   default argument shall not be redefined by a later
435   //   declaration (not even to the same value).
436   //
437   // C++ [dcl.fct.default]p6:
438   //   Except for member functions of class templates, the default arguments
439   //   in a member function definition that appears outside of the class
440   //   definition are added to the set of default arguments provided by the
441   //   member function declaration in the class definition.
442   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
443     ParmVarDecl *OldParam = Old->getParamDecl(p);
444     ParmVarDecl *NewParam = New->getParamDecl(p);
445 
446     bool OldParamHasDfl = OldParam->hasDefaultArg();
447     bool NewParamHasDfl = NewParam->hasDefaultArg();
448 
449     NamedDecl *ND = Old;
450 
451     // The declaration context corresponding to the scope is the semantic
452     // parent, unless this is a local function declaration, in which case
453     // it is that surrounding function.
454     DeclContext *ScopeDC = New->getLexicalDeclContext();
455     if (!ScopeDC->isFunctionOrMethod())
456       ScopeDC = New->getDeclContext();
457     if (S && !isDeclInScope(ND, ScopeDC, S) &&
458         !New->getDeclContext()->isRecord())
459       // Ignore default parameters of old decl if they are not in
460       // the same scope and this is not an out-of-line definition of
461       // a member function.
462       OldParamHasDfl = false;
463 
464     if (OldParamHasDfl && NewParamHasDfl) {
465 
466       unsigned DiagDefaultParamID =
467         diag::err_param_default_argument_redefinition;
468 
469       // MSVC accepts that default parameters be redefined for member functions
470       // of template class. The new default parameter's value is ignored.
471       Invalid = true;
472       if (getLangOpts().MicrosoftExt) {
473         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
474         if (MD && MD->getParent()->getDescribedClassTemplate()) {
475           // Merge the old default argument into the new parameter.
476           NewParam->setHasInheritedDefaultArg();
477           if (OldParam->hasUninstantiatedDefaultArg())
478             NewParam->setUninstantiatedDefaultArg(
479                                       OldParam->getUninstantiatedDefaultArg());
480           else
481             NewParam->setDefaultArg(OldParam->getInit());
482           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
483           Invalid = false;
484         }
485       }
486 
487       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
488       // hint here. Alternatively, we could walk the type-source information
489       // for NewParam to find the last source location in the type... but it
490       // isn't worth the effort right now. This is the kind of test case that
491       // is hard to get right:
492       //   int f(int);
493       //   void g(int (*fp)(int) = f);
494       //   void g(int (*fp)(int) = &f);
495       Diag(NewParam->getLocation(), DiagDefaultParamID)
496         << NewParam->getDefaultArgRange();
497 
498       // Look for the function declaration where the default argument was
499       // actually written, which may be a declaration prior to Old.
500       for (FunctionDecl *Older = Old->getPreviousDecl();
501            Older; Older = Older->getPreviousDecl()) {
502         if (!Older->getParamDecl(p)->hasDefaultArg())
503           break;
504 
505         OldParam = Older->getParamDecl(p);
506       }
507 
508       Diag(OldParam->getLocation(), diag::note_previous_definition)
509         << OldParam->getDefaultArgRange();
510     } else if (OldParamHasDfl) {
511       // Merge the old default argument into the new parameter.
512       // It's important to use getInit() here;  getDefaultArg()
513       // strips off any top-level ExprWithCleanups.
514       NewParam->setHasInheritedDefaultArg();
515       if (OldParam->hasUninstantiatedDefaultArg())
516         NewParam->setUninstantiatedDefaultArg(
517                                       OldParam->getUninstantiatedDefaultArg());
518       else
519         NewParam->setDefaultArg(OldParam->getInit());
520     } else if (NewParamHasDfl) {
521       if (New->getDescribedFunctionTemplate()) {
522         // Paragraph 4, quoted above, only applies to non-template functions.
523         Diag(NewParam->getLocation(),
524              diag::err_param_default_argument_template_redecl)
525           << NewParam->getDefaultArgRange();
526         Diag(Old->getLocation(), diag::note_template_prev_declaration)
527           << false;
528       } else if (New->getTemplateSpecializationKind()
529                    != TSK_ImplicitInstantiation &&
530                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
531         // C++ [temp.expr.spec]p21:
532         //   Default function arguments shall not be specified in a declaration
533         //   or a definition for one of the following explicit specializations:
534         //     - the explicit specialization of a function template;
535         //     - the explicit specialization of a member function template;
536         //     - the explicit specialization of a member function of a class
537         //       template where the class template specialization to which the
538         //       member function specialization belongs is implicitly
539         //       instantiated.
540         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
541           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
542           << New->getDeclName()
543           << NewParam->getDefaultArgRange();
544       } else if (New->getDeclContext()->isDependentContext()) {
545         // C++ [dcl.fct.default]p6 (DR217):
546         //   Default arguments for a member function of a class template shall
547         //   be specified on the initial declaration of the member function
548         //   within the class template.
549         //
550         // Reading the tea leaves a bit in DR217 and its reference to DR205
551         // leads me to the conclusion that one cannot add default function
552         // arguments for an out-of-line definition of a member function of a
553         // dependent type.
554         int WhichKind = 2;
555         if (CXXRecordDecl *Record
556               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
557           if (Record->getDescribedClassTemplate())
558             WhichKind = 0;
559           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
560             WhichKind = 1;
561           else
562             WhichKind = 2;
563         }
564 
565         Diag(NewParam->getLocation(),
566              diag::err_param_default_argument_member_template_redecl)
567           << WhichKind
568           << NewParam->getDefaultArgRange();
569       }
570     }
571   }
572 
573   // DR1344: If a default argument is added outside a class definition and that
574   // default argument makes the function a special member function, the program
575   // is ill-formed. This can only happen for constructors.
576   if (isa<CXXConstructorDecl>(New) &&
577       New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
578     CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
579                      OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
580     if (NewSM != OldSM) {
581       ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
582       assert(NewParam->hasDefaultArg());
583       Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
584         << NewParam->getDefaultArgRange() << NewSM;
585       Diag(Old->getLocation(), diag::note_previous_declaration);
586     }
587   }
588 
589   // C++11 [dcl.constexpr]p1: If any declaration of a function or function
590   // template has a constexpr specifier then all its declarations shall
591   // contain the constexpr specifier.
592   if (New->isConstexpr() != Old->isConstexpr()) {
593     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
594       << New << New->isConstexpr();
595     Diag(Old->getLocation(), diag::note_previous_declaration);
596     Invalid = true;
597   }
598 
599   // C++11 [dcl.fct.default]p4: If a friend declaration specifies a default
600   // argument expression, that declaration shall be a definition and shall be
601   // the only declaration of the function or function template in the
602   // translation unit.
603   if (Old->getFriendObjectKind() == Decl::FOK_Undeclared &&
604       functionDeclHasDefaultArgument(Old)) {
605     Diag(New->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
606     Diag(Old->getLocation(), diag::note_previous_declaration);
607     Invalid = true;
608   }
609 
610   if (CheckEquivalentExceptionSpec(Old, New))
611     Invalid = true;
612 
613   return Invalid;
614 }
615 
616 /// \brief Merge the exception specifications of two variable declarations.
617 ///
618 /// This is called when there's a redeclaration of a VarDecl. The function
619 /// checks if the redeclaration might have an exception specification and
620 /// validates compatibility and merges the specs if necessary.
621 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
622   // Shortcut if exceptions are disabled.
623   if (!getLangOpts().CXXExceptions)
624     return;
625 
626   assert(Context.hasSameType(New->getType(), Old->getType()) &&
627          "Should only be called if types are otherwise the same.");
628 
629   QualType NewType = New->getType();
630   QualType OldType = Old->getType();
631 
632   // We're only interested in pointers and references to functions, as well
633   // as pointers to member functions.
634   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
635     NewType = R->getPointeeType();
636     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
637   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
638     NewType = P->getPointeeType();
639     OldType = OldType->getAs<PointerType>()->getPointeeType();
640   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
641     NewType = M->getPointeeType();
642     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
643   }
644 
645   if (!NewType->isFunctionProtoType())
646     return;
647 
648   // There's lots of special cases for functions. For function pointers, system
649   // libraries are hopefully not as broken so that we don't need these
650   // workarounds.
651   if (CheckEquivalentExceptionSpec(
652         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
653         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
654     New->setInvalidDecl();
655   }
656 }
657 
658 /// CheckCXXDefaultArguments - Verify that the default arguments for a
659 /// function declaration are well-formed according to C++
660 /// [dcl.fct.default].
661 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
662   unsigned NumParams = FD->getNumParams();
663   unsigned p;
664 
665   // Find first parameter with a default argument
666   for (p = 0; p < NumParams; ++p) {
667     ParmVarDecl *Param = FD->getParamDecl(p);
668     if (Param->hasDefaultArg())
669       break;
670   }
671 
672   // C++ [dcl.fct.default]p4:
673   //   In a given function declaration, all parameters
674   //   subsequent to a parameter with a default argument shall
675   //   have default arguments supplied in this or previous
676   //   declarations. A default argument shall not be redefined
677   //   by a later declaration (not even to the same value).
678   unsigned LastMissingDefaultArg = 0;
679   for (; p < NumParams; ++p) {
680     ParmVarDecl *Param = FD->getParamDecl(p);
681     if (!Param->hasDefaultArg()) {
682       if (Param->isInvalidDecl())
683         /* We already complained about this parameter. */;
684       else if (Param->getIdentifier())
685         Diag(Param->getLocation(),
686              diag::err_param_default_argument_missing_name)
687           << Param->getIdentifier();
688       else
689         Diag(Param->getLocation(),
690              diag::err_param_default_argument_missing);
691 
692       LastMissingDefaultArg = p;
693     }
694   }
695 
696   if (LastMissingDefaultArg > 0) {
697     // Some default arguments were missing. Clear out all of the
698     // default arguments up to (and including) the last missing
699     // default argument, so that we leave the function parameters
700     // in a semantically valid state.
701     for (p = 0; p <= LastMissingDefaultArg; ++p) {
702       ParmVarDecl *Param = FD->getParamDecl(p);
703       if (Param->hasDefaultArg()) {
704         Param->setDefaultArg(0);
705       }
706     }
707   }
708 }
709 
710 // CheckConstexprParameterTypes - Check whether a function's parameter types
711 // are all literal types. If so, return true. If not, produce a suitable
712 // diagnostic and return false.
713 static bool CheckConstexprParameterTypes(Sema &SemaRef,
714                                          const FunctionDecl *FD) {
715   unsigned ArgIndex = 0;
716   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
717   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
718        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
719     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
720     SourceLocation ParamLoc = PD->getLocation();
721     if (!(*i)->isDependentType() &&
722         SemaRef.RequireLiteralType(ParamLoc, *i,
723                                    diag::err_constexpr_non_literal_param,
724                                    ArgIndex+1, PD->getSourceRange(),
725                                    isa<CXXConstructorDecl>(FD)))
726       return false;
727   }
728   return true;
729 }
730 
731 /// \brief Get diagnostic %select index for tag kind for
732 /// record diagnostic message.
733 /// WARNING: Indexes apply to particular diagnostics only!
734 ///
735 /// \returns diagnostic %select index.
736 static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
737   switch (Tag) {
738   case TTK_Struct: return 0;
739   case TTK_Interface: return 1;
740   case TTK_Class:  return 2;
741   default: llvm_unreachable("Invalid tag kind for record diagnostic!");
742   }
743 }
744 
745 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
746 // the requirements of a constexpr function definition or a constexpr
747 // constructor definition. If so, return true. If not, produce appropriate
748 // diagnostics and return false.
749 //
750 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
751 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
752   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
753   if (MD && MD->isInstance()) {
754     // C++11 [dcl.constexpr]p4:
755     //  The definition of a constexpr constructor shall satisfy the following
756     //  constraints:
757     //  - the class shall not have any virtual base classes;
758     const CXXRecordDecl *RD = MD->getParent();
759     if (RD->getNumVBases()) {
760       Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
761         << isa<CXXConstructorDecl>(NewFD)
762         << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
763       for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
764              E = RD->vbases_end(); I != E; ++I)
765         Diag(I->getLocStart(),
766              diag::note_constexpr_virtual_base_here) << I->getSourceRange();
767       return false;
768     }
769   }
770 
771   if (!isa<CXXConstructorDecl>(NewFD)) {
772     // C++11 [dcl.constexpr]p3:
773     //  The definition of a constexpr function shall satisfy the following
774     //  constraints:
775     // - it shall not be virtual;
776     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
777     if (Method && Method->isVirtual()) {
778       Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
779 
780       // If it's not obvious why this function is virtual, find an overridden
781       // function which uses the 'virtual' keyword.
782       const CXXMethodDecl *WrittenVirtual = Method;
783       while (!WrittenVirtual->isVirtualAsWritten())
784         WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
785       if (WrittenVirtual != Method)
786         Diag(WrittenVirtual->getLocation(),
787              diag::note_overridden_virtual_function);
788       return false;
789     }
790 
791     // - its return type shall be a literal type;
792     QualType RT = NewFD->getResultType();
793     if (!RT->isDependentType() &&
794         RequireLiteralType(NewFD->getLocation(), RT,
795                            diag::err_constexpr_non_literal_return))
796       return false;
797   }
798 
799   // - each of its parameter types shall be a literal type;
800   if (!CheckConstexprParameterTypes(*this, NewFD))
801     return false;
802 
803   return true;
804 }
805 
806 /// Check the given declaration statement is legal within a constexpr function
807 /// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
808 ///
809 /// \return true if the body is OK (maybe only as an extension), false if we
810 ///         have diagnosed a problem.
811 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
812                                    DeclStmt *DS, SourceLocation &Cxx1yLoc) {
813   // C++11 [dcl.constexpr]p3 and p4:
814   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
815   //  contain only
816   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
817          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
818     switch ((*DclIt)->getKind()) {
819     case Decl::StaticAssert:
820     case Decl::Using:
821     case Decl::UsingShadow:
822     case Decl::UsingDirective:
823     case Decl::UnresolvedUsingTypename:
824     case Decl::UnresolvedUsingValue:
825       //   - static_assert-declarations
826       //   - using-declarations,
827       //   - using-directives,
828       continue;
829 
830     case Decl::Typedef:
831     case Decl::TypeAlias: {
832       //   - typedef declarations and alias-declarations that do not define
833       //     classes or enumerations,
834       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
835       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
836         // Don't allow variably-modified types in constexpr functions.
837         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
838         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
839           << TL.getSourceRange() << TL.getType()
840           << isa<CXXConstructorDecl>(Dcl);
841         return false;
842       }
843       continue;
844     }
845 
846     case Decl::Enum:
847     case Decl::CXXRecord:
848       // C++1y allows types to be defined, not just declared.
849       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition())
850         SemaRef.Diag(DS->getLocStart(),
851                      SemaRef.getLangOpts().CPlusPlus1y
852                        ? diag::warn_cxx11_compat_constexpr_type_definition
853                        : diag::ext_constexpr_type_definition)
854           << isa<CXXConstructorDecl>(Dcl);
855       continue;
856 
857     case Decl::EnumConstant:
858     case Decl::IndirectField:
859     case Decl::ParmVar:
860       // These can only appear with other declarations which are banned in
861       // C++11 and permitted in C++1y, so ignore them.
862       continue;
863 
864     case Decl::Var: {
865       // C++1y [dcl.constexpr]p3 allows anything except:
866       //   a definition of a variable of non-literal type or of static or
867       //   thread storage duration or for which no initialization is performed.
868       VarDecl *VD = cast<VarDecl>(*DclIt);
869       if (VD->isThisDeclarationADefinition()) {
870         if (VD->isStaticLocal()) {
871           SemaRef.Diag(VD->getLocation(),
872                        diag::err_constexpr_local_var_static)
873             << isa<CXXConstructorDecl>(Dcl)
874             << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
875           return false;
876         }
877         if (!VD->getType()->isDependentType() &&
878             SemaRef.RequireLiteralType(
879               VD->getLocation(), VD->getType(),
880               diag::err_constexpr_local_var_non_literal_type,
881               isa<CXXConstructorDecl>(Dcl)))
882           return false;
883         if (!VD->hasInit() && !VD->isCXXForRangeDecl()) {
884           SemaRef.Diag(VD->getLocation(),
885                        diag::err_constexpr_local_var_no_init)
886             << isa<CXXConstructorDecl>(Dcl);
887           return false;
888         }
889       }
890       SemaRef.Diag(VD->getLocation(),
891                    SemaRef.getLangOpts().CPlusPlus1y
892                     ? diag::warn_cxx11_compat_constexpr_local_var
893                     : diag::ext_constexpr_local_var)
894         << isa<CXXConstructorDecl>(Dcl);
895       continue;
896     }
897 
898     case Decl::NamespaceAlias:
899     case Decl::Function:
900       // These are disallowed in C++11 and permitted in C++1y. Allow them
901       // everywhere as an extension.
902       if (!Cxx1yLoc.isValid())
903         Cxx1yLoc = DS->getLocStart();
904       continue;
905 
906     default:
907       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
908         << isa<CXXConstructorDecl>(Dcl);
909       return false;
910     }
911   }
912 
913   return true;
914 }
915 
916 /// Check that the given field is initialized within a constexpr constructor.
917 ///
918 /// \param Dcl The constexpr constructor being checked.
919 /// \param Field The field being checked. This may be a member of an anonymous
920 ///        struct or union nested within the class being checked.
921 /// \param Inits All declarations, including anonymous struct/union members and
922 ///        indirect members, for which any initialization was provided.
923 /// \param Diagnosed Set to true if an error is produced.
924 static void CheckConstexprCtorInitializer(Sema &SemaRef,
925                                           const FunctionDecl *Dcl,
926                                           FieldDecl *Field,
927                                           llvm::SmallSet<Decl*, 16> &Inits,
928                                           bool &Diagnosed) {
929   if (Field->isInvalidDecl())
930     return;
931 
932   if (Field->isUnnamedBitfield())
933     return;
934 
935   if (Field->isAnonymousStructOrUnion() &&
936       Field->getType()->getAsCXXRecordDecl()->isEmpty())
937     return;
938 
939   if (!Inits.count(Field)) {
940     if (!Diagnosed) {
941       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
942       Diagnosed = true;
943     }
944     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
945   } else if (Field->isAnonymousStructOrUnion()) {
946     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
947     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
948          I != E; ++I)
949       // If an anonymous union contains an anonymous struct of which any member
950       // is initialized, all members must be initialized.
951       if (!RD->isUnion() || Inits.count(*I))
952         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
953   }
954 }
955 
956 /// Check the provided statement is allowed in a constexpr function
957 /// definition.
958 static bool
959 CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
960                            SmallVectorImpl<SourceLocation> &ReturnStmts,
961                            SourceLocation &Cxx1yLoc) {
962   // - its function-body shall be [...] a compound-statement that contains only
963   switch (S->getStmtClass()) {
964   case Stmt::NullStmtClass:
965     //   - null statements,
966     return true;
967 
968   case Stmt::DeclStmtClass:
969     //   - static_assert-declarations
970     //   - using-declarations,
971     //   - using-directives,
972     //   - typedef declarations and alias-declarations that do not define
973     //     classes or enumerations,
974     if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc))
975       return false;
976     return true;
977 
978   case Stmt::ReturnStmtClass:
979     //   - and exactly one return statement;
980     if (isa<CXXConstructorDecl>(Dcl)) {
981       // C++1y allows return statements in constexpr constructors.
982       if (!Cxx1yLoc.isValid())
983         Cxx1yLoc = S->getLocStart();
984       return true;
985     }
986 
987     ReturnStmts.push_back(S->getLocStart());
988     return true;
989 
990   case Stmt::CompoundStmtClass: {
991     // C++1y allows compound-statements.
992     if (!Cxx1yLoc.isValid())
993       Cxx1yLoc = S->getLocStart();
994 
995     CompoundStmt *CompStmt = cast<CompoundStmt>(S);
996     for (CompoundStmt::body_iterator BodyIt = CompStmt->body_begin(),
997            BodyEnd = CompStmt->body_end(); BodyIt != BodyEnd; ++BodyIt) {
998       if (!CheckConstexprFunctionStmt(SemaRef, Dcl, *BodyIt, ReturnStmts,
999                                       Cxx1yLoc))
1000         return false;
1001     }
1002     return true;
1003   }
1004 
1005   case Stmt::AttributedStmtClass:
1006     if (!Cxx1yLoc.isValid())
1007       Cxx1yLoc = S->getLocStart();
1008     return true;
1009 
1010   case Stmt::IfStmtClass: {
1011     // C++1y allows if-statements.
1012     if (!Cxx1yLoc.isValid())
1013       Cxx1yLoc = S->getLocStart();
1014 
1015     IfStmt *If = cast<IfStmt>(S);
1016     if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
1017                                     Cxx1yLoc))
1018       return false;
1019     if (If->getElse() &&
1020         !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
1021                                     Cxx1yLoc))
1022       return false;
1023     return true;
1024   }
1025 
1026   case Stmt::WhileStmtClass:
1027   case Stmt::DoStmtClass:
1028   case Stmt::ForStmtClass:
1029   case Stmt::CXXForRangeStmtClass:
1030   case Stmt::ContinueStmtClass:
1031     // C++1y allows all of these. We don't allow them as extensions in C++11,
1032     // because they don't make sense without variable mutation.
1033     if (!SemaRef.getLangOpts().CPlusPlus1y)
1034       break;
1035     if (!Cxx1yLoc.isValid())
1036       Cxx1yLoc = S->getLocStart();
1037     for (Stmt::child_range Children = S->children(); Children; ++Children)
1038       if (*Children &&
1039           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1040                                       Cxx1yLoc))
1041         return false;
1042     return true;
1043 
1044   case Stmt::SwitchStmtClass:
1045   case Stmt::CaseStmtClass:
1046   case Stmt::DefaultStmtClass:
1047   case Stmt::BreakStmtClass:
1048     // C++1y allows switch-statements, and since they don't need variable
1049     // mutation, we can reasonably allow them in C++11 as an extension.
1050     if (!Cxx1yLoc.isValid())
1051       Cxx1yLoc = S->getLocStart();
1052     for (Stmt::child_range Children = S->children(); Children; ++Children)
1053       if (*Children &&
1054           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1055                                       Cxx1yLoc))
1056         return false;
1057     return true;
1058 
1059   default:
1060     if (!isa<Expr>(S))
1061       break;
1062 
1063     // C++1y allows expression-statements.
1064     if (!Cxx1yLoc.isValid())
1065       Cxx1yLoc = S->getLocStart();
1066     return true;
1067   }
1068 
1069   SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt)
1070     << isa<CXXConstructorDecl>(Dcl);
1071   return false;
1072 }
1073 
1074 /// Check the body for the given constexpr function declaration only contains
1075 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
1076 ///
1077 /// \return true if the body is OK, false if we have diagnosed a problem.
1078 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
1079   if (isa<CXXTryStmt>(Body)) {
1080     // C++11 [dcl.constexpr]p3:
1081     //  The definition of a constexpr function shall satisfy the following
1082     //  constraints: [...]
1083     // - its function-body shall be = delete, = default, or a
1084     //   compound-statement
1085     //
1086     // C++11 [dcl.constexpr]p4:
1087     //  In the definition of a constexpr constructor, [...]
1088     // - its function-body shall not be a function-try-block;
1089     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
1090       << isa<CXXConstructorDecl>(Dcl);
1091     return false;
1092   }
1093 
1094   SmallVector<SourceLocation, 4> ReturnStmts;
1095 
1096   // - its function-body shall be [...] a compound-statement that contains only
1097   //   [... list of cases ...]
1098   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
1099   SourceLocation Cxx1yLoc;
1100   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
1101          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
1102     if (!CheckConstexprFunctionStmt(*this, Dcl, *BodyIt, ReturnStmts, Cxx1yLoc))
1103       return false;
1104   }
1105 
1106   if (Cxx1yLoc.isValid())
1107     Diag(Cxx1yLoc,
1108          getLangOpts().CPlusPlus1y
1109            ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
1110            : diag::ext_constexpr_body_invalid_stmt)
1111       << isa<CXXConstructorDecl>(Dcl);
1112 
1113   if (const CXXConstructorDecl *Constructor
1114         = dyn_cast<CXXConstructorDecl>(Dcl)) {
1115     const CXXRecordDecl *RD = Constructor->getParent();
1116     // DR1359:
1117     // - every non-variant non-static data member and base class sub-object
1118     //   shall be initialized;
1119     // - if the class is a non-empty union, or for each non-empty anonymous
1120     //   union member of a non-union class, exactly one non-static data member
1121     //   shall be initialized;
1122     if (RD->isUnion()) {
1123       if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
1124         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
1125         return false;
1126       }
1127     } else if (!Constructor->isDependentContext() &&
1128                !Constructor->isDelegatingConstructor()) {
1129       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
1130 
1131       // Skip detailed checking if we have enough initializers, and we would
1132       // allow at most one initializer per member.
1133       bool AnyAnonStructUnionMembers = false;
1134       unsigned Fields = 0;
1135       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1136            E = RD->field_end(); I != E; ++I, ++Fields) {
1137         if (I->isAnonymousStructOrUnion()) {
1138           AnyAnonStructUnionMembers = true;
1139           break;
1140         }
1141       }
1142       if (AnyAnonStructUnionMembers ||
1143           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
1144         // Check initialization of non-static data members. Base classes are
1145         // always initialized so do not need to be checked. Dependent bases
1146         // might not have initializers in the member initializer list.
1147         llvm::SmallSet<Decl*, 16> Inits;
1148         for (CXXConstructorDecl::init_const_iterator
1149                I = Constructor->init_begin(), E = Constructor->init_end();
1150              I != E; ++I) {
1151           if (FieldDecl *FD = (*I)->getMember())
1152             Inits.insert(FD);
1153           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
1154             Inits.insert(ID->chain_begin(), ID->chain_end());
1155         }
1156 
1157         bool Diagnosed = false;
1158         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1159              E = RD->field_end(); I != E; ++I)
1160           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
1161         if (Diagnosed)
1162           return false;
1163       }
1164     }
1165   } else {
1166     if (ReturnStmts.empty()) {
1167       // C++1y doesn't require constexpr functions to contain a 'return'
1168       // statement. We still do, unless the return type is void, because
1169       // otherwise if there's no return statement, the function cannot
1170       // be used in a core constant expression.
1171       bool OK = getLangOpts().CPlusPlus1y && Dcl->getResultType()->isVoidType();
1172       Diag(Dcl->getLocation(),
1173            OK ? diag::warn_cxx11_compat_constexpr_body_no_return
1174               : diag::err_constexpr_body_no_return);
1175       return OK;
1176     }
1177     if (ReturnStmts.size() > 1) {
1178       Diag(ReturnStmts.back(),
1179            getLangOpts().CPlusPlus1y
1180              ? diag::warn_cxx11_compat_constexpr_body_multiple_return
1181              : diag::ext_constexpr_body_multiple_return);
1182       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
1183         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
1184     }
1185   }
1186 
1187   // C++11 [dcl.constexpr]p5:
1188   //   if no function argument values exist such that the function invocation
1189   //   substitution would produce a constant expression, the program is
1190   //   ill-formed; no diagnostic required.
1191   // C++11 [dcl.constexpr]p3:
1192   //   - every constructor call and implicit conversion used in initializing the
1193   //     return value shall be one of those allowed in a constant expression.
1194   // C++11 [dcl.constexpr]p4:
1195   //   - every constructor involved in initializing non-static data members and
1196   //     base class sub-objects shall be a constexpr constructor.
1197   SmallVector<PartialDiagnosticAt, 8> Diags;
1198   if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
1199     Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr)
1200       << isa<CXXConstructorDecl>(Dcl);
1201     for (size_t I = 0, N = Diags.size(); I != N; ++I)
1202       Diag(Diags[I].first, Diags[I].second);
1203     // Don't return false here: we allow this for compatibility in
1204     // system headers.
1205   }
1206 
1207   return true;
1208 }
1209 
1210 /// isCurrentClassName - Determine whether the identifier II is the
1211 /// name of the class type currently being defined. In the case of
1212 /// nested classes, this will only return true if II is the name of
1213 /// the innermost class.
1214 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
1215                               const CXXScopeSpec *SS) {
1216   assert(getLangOpts().CPlusPlus && "No class names in C!");
1217 
1218   CXXRecordDecl *CurDecl;
1219   if (SS && SS->isSet() && !SS->isInvalid()) {
1220     DeclContext *DC = computeDeclContext(*SS, true);
1221     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1222   } else
1223     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1224 
1225   if (CurDecl && CurDecl->getIdentifier())
1226     return &II == CurDecl->getIdentifier();
1227   return false;
1228 }
1229 
1230 /// \brief Determine whether the identifier II is a typo for the name of
1231 /// the class type currently being defined. If so, update it to the identifier
1232 /// that should have been used.
1233 bool Sema::isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS) {
1234   assert(getLangOpts().CPlusPlus && "No class names in C!");
1235 
1236   if (!getLangOpts().SpellChecking)
1237     return false;
1238 
1239   CXXRecordDecl *CurDecl;
1240   if (SS && SS->isSet() && !SS->isInvalid()) {
1241     DeclContext *DC = computeDeclContext(*SS, true);
1242     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1243   } else
1244     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1245 
1246   if (CurDecl && CurDecl->getIdentifier() && II != CurDecl->getIdentifier() &&
1247       3 * II->getName().edit_distance(CurDecl->getIdentifier()->getName())
1248           < II->getLength()) {
1249     II = CurDecl->getIdentifier();
1250     return true;
1251   }
1252 
1253   return false;
1254 }
1255 
1256 /// \brief Determine whether the given class is a base class of the given
1257 /// class, including looking at dependent bases.
1258 static bool findCircularInheritance(const CXXRecordDecl *Class,
1259                                     const CXXRecordDecl *Current) {
1260   SmallVector<const CXXRecordDecl*, 8> Queue;
1261 
1262   Class = Class->getCanonicalDecl();
1263   while (true) {
1264     for (CXXRecordDecl::base_class_const_iterator I = Current->bases_begin(),
1265                                                   E = Current->bases_end();
1266          I != E; ++I) {
1267       CXXRecordDecl *Base = I->getType()->getAsCXXRecordDecl();
1268       if (!Base)
1269         continue;
1270 
1271       Base = Base->getDefinition();
1272       if (!Base)
1273         continue;
1274 
1275       if (Base->getCanonicalDecl() == Class)
1276         return true;
1277 
1278       Queue.push_back(Base);
1279     }
1280 
1281     if (Queue.empty())
1282       return false;
1283 
1284     Current = Queue.pop_back_val();
1285   }
1286 
1287   return false;
1288 }
1289 
1290 /// \brief Check the validity of a C++ base class specifier.
1291 ///
1292 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
1293 /// and returns NULL otherwise.
1294 CXXBaseSpecifier *
1295 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
1296                          SourceRange SpecifierRange,
1297                          bool Virtual, AccessSpecifier Access,
1298                          TypeSourceInfo *TInfo,
1299                          SourceLocation EllipsisLoc) {
1300   QualType BaseType = TInfo->getType();
1301 
1302   // C++ [class.union]p1:
1303   //   A union shall not have base classes.
1304   if (Class->isUnion()) {
1305     Diag(Class->getLocation(), diag::err_base_clause_on_union)
1306       << SpecifierRange;
1307     return 0;
1308   }
1309 
1310   if (EllipsisLoc.isValid() &&
1311       !TInfo->getType()->containsUnexpandedParameterPack()) {
1312     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1313       << TInfo->getTypeLoc().getSourceRange();
1314     EllipsisLoc = SourceLocation();
1315   }
1316 
1317   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
1318 
1319   if (BaseType->isDependentType()) {
1320     // Make sure that we don't have circular inheritance among our dependent
1321     // bases. For non-dependent bases, the check for completeness below handles
1322     // this.
1323     if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
1324       if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
1325           ((BaseDecl = BaseDecl->getDefinition()) &&
1326            findCircularInheritance(Class, BaseDecl))) {
1327         Diag(BaseLoc, diag::err_circular_inheritance)
1328           << BaseType << Context.getTypeDeclType(Class);
1329 
1330         if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
1331           Diag(BaseDecl->getLocation(), diag::note_previous_decl)
1332             << BaseType;
1333 
1334         return 0;
1335       }
1336     }
1337 
1338     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1339                                           Class->getTagKind() == TTK_Class,
1340                                           Access, TInfo, EllipsisLoc);
1341   }
1342 
1343   // Base specifiers must be record types.
1344   if (!BaseType->isRecordType()) {
1345     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
1346     return 0;
1347   }
1348 
1349   // C++ [class.union]p1:
1350   //   A union shall not be used as a base class.
1351   if (BaseType->isUnionType()) {
1352     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
1353     return 0;
1354   }
1355 
1356   // C++ [class.derived]p2:
1357   //   The class-name in a base-specifier shall not be an incompletely
1358   //   defined class.
1359   if (RequireCompleteType(BaseLoc, BaseType,
1360                           diag::err_incomplete_base_class, SpecifierRange)) {
1361     Class->setInvalidDecl();
1362     return 0;
1363   }
1364 
1365   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
1366   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
1367   assert(BaseDecl && "Record type has no declaration");
1368   BaseDecl = BaseDecl->getDefinition();
1369   assert(BaseDecl && "Base type is not incomplete, but has no definition");
1370   CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
1371   assert(CXXBaseDecl && "Base type is not a C++ type");
1372 
1373   // A class which contains a flexible array member is not suitable for use as a
1374   // base class:
1375   //   - If the layout determines that a base comes before another base,
1376   //     the flexible array member would index into the subsequent base.
1377   //   - If the layout determines that base comes before the derived class,
1378   //     the flexible array member would index into the derived class.
1379   if (CXXBaseDecl->hasFlexibleArrayMember()) {
1380     Diag(BaseLoc, diag::err_base_class_has_flexible_array_member)
1381       << CXXBaseDecl->getDeclName();
1382     return 0;
1383   }
1384 
1385   // C++ [class]p3:
1386   //   If a class is marked final and it appears as a base-type-specifier in
1387   //   base-clause, the program is ill-formed.
1388   if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {
1389     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
1390       << CXXBaseDecl->getDeclName()
1391       << FA->isSpelledAsSealed();
1392     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
1393       << CXXBaseDecl->getDeclName();
1394     return 0;
1395   }
1396 
1397   if (BaseDecl->isInvalidDecl())
1398     Class->setInvalidDecl();
1399 
1400   // Create the base specifier.
1401   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1402                                         Class->getTagKind() == TTK_Class,
1403                                         Access, TInfo, EllipsisLoc);
1404 }
1405 
1406 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
1407 /// one entry in the base class list of a class specifier, for
1408 /// example:
1409 ///    class foo : public bar, virtual private baz {
1410 /// 'public bar' and 'virtual private baz' are each base-specifiers.
1411 BaseResult
1412 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1413                          ParsedAttributes &Attributes,
1414                          bool Virtual, AccessSpecifier Access,
1415                          ParsedType basetype, SourceLocation BaseLoc,
1416                          SourceLocation EllipsisLoc) {
1417   if (!classdecl)
1418     return true;
1419 
1420   AdjustDeclIfTemplate(classdecl);
1421   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1422   if (!Class)
1423     return true;
1424 
1425   // We do not support any C++11 attributes on base-specifiers yet.
1426   // Diagnose any attributes we see.
1427   if (!Attributes.empty()) {
1428     for (AttributeList *Attr = Attributes.getList(); Attr;
1429          Attr = Attr->getNext()) {
1430       if (Attr->isInvalid() ||
1431           Attr->getKind() == AttributeList::IgnoredAttribute)
1432         continue;
1433       Diag(Attr->getLoc(),
1434            Attr->getKind() == AttributeList::UnknownAttribute
1435              ? diag::warn_unknown_attribute_ignored
1436              : diag::err_base_specifier_attribute)
1437         << Attr->getName();
1438     }
1439   }
1440 
1441   TypeSourceInfo *TInfo = 0;
1442   GetTypeFromParser(basetype, &TInfo);
1443 
1444   if (EllipsisLoc.isInvalid() &&
1445       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
1446                                       UPPC_BaseType))
1447     return true;
1448 
1449   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
1450                                                       Virtual, Access, TInfo,
1451                                                       EllipsisLoc))
1452     return BaseSpec;
1453   else
1454     Class->setInvalidDecl();
1455 
1456   return true;
1457 }
1458 
1459 /// \brief Performs the actual work of attaching the given base class
1460 /// specifiers to a C++ class.
1461 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
1462                                 unsigned NumBases) {
1463  if (NumBases == 0)
1464     return false;
1465 
1466   // Used to keep track of which base types we have already seen, so
1467   // that we can properly diagnose redundant direct base types. Note
1468   // that the key is always the unqualified canonical type of the base
1469   // class.
1470   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
1471 
1472   // Copy non-redundant base specifiers into permanent storage.
1473   unsigned NumGoodBases = 0;
1474   bool Invalid = false;
1475   for (unsigned idx = 0; idx < NumBases; ++idx) {
1476     QualType NewBaseType
1477       = Context.getCanonicalType(Bases[idx]->getType());
1478     NewBaseType = NewBaseType.getLocalUnqualifiedType();
1479 
1480     CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
1481     if (KnownBase) {
1482       // C++ [class.mi]p3:
1483       //   A class shall not be specified as a direct base class of a
1484       //   derived class more than once.
1485       Diag(Bases[idx]->getLocStart(),
1486            diag::err_duplicate_base_class)
1487         << KnownBase->getType()
1488         << Bases[idx]->getSourceRange();
1489 
1490       // Delete the duplicate base class specifier; we're going to
1491       // overwrite its pointer later.
1492       Context.Deallocate(Bases[idx]);
1493 
1494       Invalid = true;
1495     } else {
1496       // Okay, add this new base class.
1497       KnownBase = Bases[idx];
1498       Bases[NumGoodBases++] = Bases[idx];
1499       if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
1500         const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
1501         if (Class->isInterface() &&
1502               (!RD->isInterface() ||
1503                KnownBase->getAccessSpecifier() != AS_public)) {
1504           // The Microsoft extension __interface does not permit bases that
1505           // are not themselves public interfaces.
1506           Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
1507             << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getName()
1508             << RD->getSourceRange();
1509           Invalid = true;
1510         }
1511         if (RD->hasAttr<WeakAttr>())
1512           Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
1513       }
1514     }
1515   }
1516 
1517   // Attach the remaining base class specifiers to the derived class.
1518   Class->setBases(Bases, NumGoodBases);
1519 
1520   // Delete the remaining (good) base class specifiers, since their
1521   // data has been copied into the CXXRecordDecl.
1522   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
1523     Context.Deallocate(Bases[idx]);
1524 
1525   return Invalid;
1526 }
1527 
1528 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
1529 /// class, after checking whether there are any duplicate base
1530 /// classes.
1531 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1532                                unsigned NumBases) {
1533   if (!ClassDecl || !Bases || !NumBases)
1534     return;
1535 
1536   AdjustDeclIfTemplate(ClassDecl);
1537   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases, NumBases);
1538 }
1539 
1540 /// \brief Determine whether the type \p Derived is a C++ class that is
1541 /// derived from the type \p Base.
1542 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
1543   if (!getLangOpts().CPlusPlus)
1544     return false;
1545 
1546   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1547   if (!DerivedRD)
1548     return false;
1549 
1550   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1551   if (!BaseRD)
1552     return false;
1553 
1554   // If either the base or the derived type is invalid, don't try to
1555   // check whether one is derived from the other.
1556   if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
1557     return false;
1558 
1559   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
1560   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
1561 }
1562 
1563 /// \brief Determine whether the type \p Derived is a C++ class that is
1564 /// derived from the type \p Base.
1565 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
1566   if (!getLangOpts().CPlusPlus)
1567     return false;
1568 
1569   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1570   if (!DerivedRD)
1571     return false;
1572 
1573   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1574   if (!BaseRD)
1575     return false;
1576 
1577   return DerivedRD->isDerivedFrom(BaseRD, Paths);
1578 }
1579 
1580 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
1581                               CXXCastPath &BasePathArray) {
1582   assert(BasePathArray.empty() && "Base path array must be empty!");
1583   assert(Paths.isRecordingPaths() && "Must record paths!");
1584 
1585   const CXXBasePath &Path = Paths.front();
1586 
1587   // We first go backward and check if we have a virtual base.
1588   // FIXME: It would be better if CXXBasePath had the base specifier for
1589   // the nearest virtual base.
1590   unsigned Start = 0;
1591   for (unsigned I = Path.size(); I != 0; --I) {
1592     if (Path[I - 1].Base->isVirtual()) {
1593       Start = I - 1;
1594       break;
1595     }
1596   }
1597 
1598   // Now add all bases.
1599   for (unsigned I = Start, E = Path.size(); I != E; ++I)
1600     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
1601 }
1602 
1603 /// \brief Determine whether the given base path includes a virtual
1604 /// base class.
1605 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
1606   for (CXXCastPath::const_iterator B = BasePath.begin(),
1607                                 BEnd = BasePath.end();
1608        B != BEnd; ++B)
1609     if ((*B)->isVirtual())
1610       return true;
1611 
1612   return false;
1613 }
1614 
1615 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
1616 /// conversion (where Derived and Base are class types) is
1617 /// well-formed, meaning that the conversion is unambiguous (and
1618 /// that all of the base classes are accessible). Returns true
1619 /// and emits a diagnostic if the code is ill-formed, returns false
1620 /// otherwise. Loc is the location where this routine should point to
1621 /// if there is an error, and Range is the source range to highlight
1622 /// if there is an error.
1623 bool
1624 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1625                                    unsigned InaccessibleBaseID,
1626                                    unsigned AmbigiousBaseConvID,
1627                                    SourceLocation Loc, SourceRange Range,
1628                                    DeclarationName Name,
1629                                    CXXCastPath *BasePath) {
1630   // First, determine whether the path from Derived to Base is
1631   // ambiguous. This is slightly more expensive than checking whether
1632   // the Derived to Base conversion exists, because here we need to
1633   // explore multiple paths to determine if there is an ambiguity.
1634   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1635                      /*DetectVirtual=*/false);
1636   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
1637   assert(DerivationOkay &&
1638          "Can only be used with a derived-to-base conversion");
1639   (void)DerivationOkay;
1640 
1641   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
1642     if (InaccessibleBaseID) {
1643       // Check that the base class can be accessed.
1644       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
1645                                    InaccessibleBaseID)) {
1646         case AR_inaccessible:
1647           return true;
1648         case AR_accessible:
1649         case AR_dependent:
1650         case AR_delayed:
1651           break;
1652       }
1653     }
1654 
1655     // Build a base path if necessary.
1656     if (BasePath)
1657       BuildBasePathArray(Paths, *BasePath);
1658     return false;
1659   }
1660 
1661   if (AmbigiousBaseConvID) {
1662     // We know that the derived-to-base conversion is ambiguous, and
1663     // we're going to produce a diagnostic. Perform the derived-to-base
1664     // search just one more time to compute all of the possible paths so
1665     // that we can print them out. This is more expensive than any of
1666     // the previous derived-to-base checks we've done, but at this point
1667     // performance isn't as much of an issue.
1668     Paths.clear();
1669     Paths.setRecordingPaths(true);
1670     bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
1671     assert(StillOkay && "Can only be used with a derived-to-base conversion");
1672     (void)StillOkay;
1673 
1674     // Build up a textual representation of the ambiguous paths, e.g.,
1675     // D -> B -> A, that will be used to illustrate the ambiguous
1676     // conversions in the diagnostic. We only print one of the paths
1677     // to each base class subobject.
1678     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1679 
1680     Diag(Loc, AmbigiousBaseConvID)
1681     << Derived << Base << PathDisplayStr << Range << Name;
1682   }
1683   return true;
1684 }
1685 
1686 bool
1687 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1688                                    SourceLocation Loc, SourceRange Range,
1689                                    CXXCastPath *BasePath,
1690                                    bool IgnoreAccess) {
1691   return CheckDerivedToBaseConversion(Derived, Base,
1692                                       IgnoreAccess ? 0
1693                                        : diag::err_upcast_to_inaccessible_base,
1694                                       diag::err_ambiguous_derived_to_base_conv,
1695                                       Loc, Range, DeclarationName(),
1696                                       BasePath);
1697 }
1698 
1699 
1700 /// @brief Builds a string representing ambiguous paths from a
1701 /// specific derived class to different subobjects of the same base
1702 /// class.
1703 ///
1704 /// This function builds a string that can be used in error messages
1705 /// to show the different paths that one can take through the
1706 /// inheritance hierarchy to go from the derived class to different
1707 /// subobjects of a base class. The result looks something like this:
1708 /// @code
1709 /// struct D -> struct B -> struct A
1710 /// struct D -> struct C -> struct A
1711 /// @endcode
1712 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
1713   std::string PathDisplayStr;
1714   std::set<unsigned> DisplayedPaths;
1715   for (CXXBasePaths::paths_iterator Path = Paths.begin();
1716        Path != Paths.end(); ++Path) {
1717     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
1718       // We haven't displayed a path to this particular base
1719       // class subobject yet.
1720       PathDisplayStr += "\n    ";
1721       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
1722       for (CXXBasePath::const_iterator Element = Path->begin();
1723            Element != Path->end(); ++Element)
1724         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
1725     }
1726   }
1727 
1728   return PathDisplayStr;
1729 }
1730 
1731 //===----------------------------------------------------------------------===//
1732 // C++ class member Handling
1733 //===----------------------------------------------------------------------===//
1734 
1735 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
1736 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1737                                 SourceLocation ASLoc,
1738                                 SourceLocation ColonLoc,
1739                                 AttributeList *Attrs) {
1740   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1741   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1742                                                   ASLoc, ColonLoc);
1743   CurContext->addHiddenDecl(ASDecl);
1744   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
1745 }
1746 
1747 /// CheckOverrideControl - Check C++11 override control semantics.
1748 void Sema::CheckOverrideControl(NamedDecl *D) {
1749   if (D->isInvalidDecl())
1750     return;
1751 
1752   // We only care about "override" and "final" declarations.
1753   if (!D->hasAttr<OverrideAttr>() && !D->hasAttr<FinalAttr>())
1754     return;
1755 
1756   CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1757 
1758   // We can't check dependent instance methods.
1759   if (MD && MD->isInstance() &&
1760       (MD->getParent()->hasAnyDependentBases() ||
1761        MD->getType()->isDependentType()))
1762     return;
1763 
1764   if (MD && !MD->isVirtual()) {
1765     // If we have a non-virtual method, check if if hides a virtual method.
1766     // (In that case, it's most likely the method has the wrong type.)
1767     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
1768     FindHiddenVirtualMethods(MD, OverloadedMethods);
1769 
1770     if (!OverloadedMethods.empty()) {
1771       if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1772         Diag(OA->getLocation(),
1773              diag::override_keyword_hides_virtual_member_function)
1774           << "override" << (OverloadedMethods.size() > 1);
1775       } else if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1776         Diag(FA->getLocation(),
1777              diag::override_keyword_hides_virtual_member_function)
1778           << (FA->isSpelledAsSealed() ? "sealed" : "final")
1779           << (OverloadedMethods.size() > 1);
1780       }
1781       NoteHiddenVirtualMethods(MD, OverloadedMethods);
1782       MD->setInvalidDecl();
1783       return;
1784     }
1785     // Fall through into the general case diagnostic.
1786     // FIXME: We might want to attempt typo correction here.
1787   }
1788 
1789   if (!MD || !MD->isVirtual()) {
1790     if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1791       Diag(OA->getLocation(),
1792            diag::override_keyword_only_allowed_on_virtual_member_functions)
1793         << "override" << FixItHint::CreateRemoval(OA->getLocation());
1794       D->dropAttr<OverrideAttr>();
1795     }
1796     if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1797       Diag(FA->getLocation(),
1798            diag::override_keyword_only_allowed_on_virtual_member_functions)
1799         << (FA->isSpelledAsSealed() ? "sealed" : "final")
1800         << FixItHint::CreateRemoval(FA->getLocation());
1801       D->dropAttr<FinalAttr>();
1802     }
1803     return;
1804   }
1805 
1806   // C++11 [class.virtual]p5:
1807   //   If a virtual function is marked with the virt-specifier override and
1808   //   does not override a member function of a base class, the program is
1809   //   ill-formed.
1810   bool HasOverriddenMethods =
1811     MD->begin_overridden_methods() != MD->end_overridden_methods();
1812   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
1813     Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
1814       << MD->getDeclName();
1815 }
1816 
1817 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1818 /// function overrides a virtual member function marked 'final', according to
1819 /// C++11 [class.virtual]p4.
1820 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1821                                                   const CXXMethodDecl *Old) {
1822   FinalAttr *FA = Old->getAttr<FinalAttr>();
1823   if (!FA)
1824     return false;
1825 
1826   Diag(New->getLocation(), diag::err_final_function_overridden)
1827     << New->getDeclName()
1828     << FA->isSpelledAsSealed();
1829   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1830   return true;
1831 }
1832 
1833 static bool InitializationHasSideEffects(const FieldDecl &FD) {
1834   const Type *T = FD.getType()->getBaseElementTypeUnsafe();
1835   // FIXME: Destruction of ObjC lifetime types has side-effects.
1836   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1837     return !RD->isCompleteDefinition() ||
1838            !RD->hasTrivialDefaultConstructor() ||
1839            !RD->hasTrivialDestructor();
1840   return false;
1841 }
1842 
1843 static AttributeList *getMSPropertyAttr(AttributeList *list) {
1844   for (AttributeList* it = list; it != 0; it = it->getNext())
1845     if (it->isDeclspecPropertyAttribute())
1846       return it;
1847   return 0;
1848 }
1849 
1850 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1851 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1852 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
1853 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
1854 /// present (but parsing it has been deferred).
1855 NamedDecl *
1856 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1857                                MultiTemplateParamsArg TemplateParameterLists,
1858                                Expr *BW, const VirtSpecifiers &VS,
1859                                InClassInitStyle InitStyle) {
1860   const DeclSpec &DS = D.getDeclSpec();
1861   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1862   DeclarationName Name = NameInfo.getName();
1863   SourceLocation Loc = NameInfo.getLoc();
1864 
1865   // For anonymous bitfields, the location should point to the type.
1866   if (Loc.isInvalid())
1867     Loc = D.getLocStart();
1868 
1869   Expr *BitWidth = static_cast<Expr*>(BW);
1870 
1871   assert(isa<CXXRecordDecl>(CurContext));
1872   assert(!DS.isFriendSpecified());
1873 
1874   bool isFunc = D.isDeclarationOfFunction();
1875 
1876   if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
1877     // The Microsoft extension __interface only permits public member functions
1878     // and prohibits constructors, destructors, operators, non-public member
1879     // functions, static methods and data members.
1880     unsigned InvalidDecl;
1881     bool ShowDeclName = true;
1882     if (!isFunc)
1883       InvalidDecl = (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) ? 0 : 1;
1884     else if (AS != AS_public)
1885       InvalidDecl = 2;
1886     else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
1887       InvalidDecl = 3;
1888     else switch (Name.getNameKind()) {
1889       case DeclarationName::CXXConstructorName:
1890         InvalidDecl = 4;
1891         ShowDeclName = false;
1892         break;
1893 
1894       case DeclarationName::CXXDestructorName:
1895         InvalidDecl = 5;
1896         ShowDeclName = false;
1897         break;
1898 
1899       case DeclarationName::CXXOperatorName:
1900       case DeclarationName::CXXConversionFunctionName:
1901         InvalidDecl = 6;
1902         break;
1903 
1904       default:
1905         InvalidDecl = 0;
1906         break;
1907     }
1908 
1909     if (InvalidDecl) {
1910       if (ShowDeclName)
1911         Diag(Loc, diag::err_invalid_member_in_interface)
1912           << (InvalidDecl-1) << Name;
1913       else
1914         Diag(Loc, diag::err_invalid_member_in_interface)
1915           << (InvalidDecl-1) << "";
1916       return 0;
1917     }
1918   }
1919 
1920   // C++ 9.2p6: A member shall not be declared to have automatic storage
1921   // duration (auto, register) or with the extern storage-class-specifier.
1922   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1923   // data members and cannot be applied to names declared const or static,
1924   // and cannot be applied to reference members.
1925   switch (DS.getStorageClassSpec()) {
1926   case DeclSpec::SCS_unspecified:
1927   case DeclSpec::SCS_typedef:
1928   case DeclSpec::SCS_static:
1929     break;
1930   case DeclSpec::SCS_mutable:
1931     if (isFunc) {
1932       Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1933 
1934       // FIXME: It would be nicer if the keyword was ignored only for this
1935       // declarator. Otherwise we could get follow-up errors.
1936       D.getMutableDeclSpec().ClearStorageClassSpecs();
1937     }
1938     break;
1939   default:
1940     Diag(DS.getStorageClassSpecLoc(),
1941          diag::err_storageclass_invalid_for_member);
1942     D.getMutableDeclSpec().ClearStorageClassSpecs();
1943     break;
1944   }
1945 
1946   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1947                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1948                       !isFunc);
1949 
1950   if (DS.isConstexprSpecified() && isInstField) {
1951     SemaDiagnosticBuilder B =
1952         Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
1953     SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
1954     if (InitStyle == ICIS_NoInit) {
1955       B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const");
1956       D.getMutableDeclSpec().ClearConstexprSpec();
1957       const char *PrevSpec;
1958       unsigned DiagID;
1959       bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc,
1960                                          PrevSpec, DiagID, getLangOpts());
1961       (void)Failed;
1962       assert(!Failed && "Making a constexpr member const shouldn't fail");
1963     } else {
1964       B << 1;
1965       const char *PrevSpec;
1966       unsigned DiagID;
1967       if (D.getMutableDeclSpec().SetStorageClassSpec(
1968           *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID)) {
1969         assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
1970                "This is the only DeclSpec that should fail to be applied");
1971         B << 1;
1972       } else {
1973         B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
1974         isInstField = false;
1975       }
1976     }
1977   }
1978 
1979   NamedDecl *Member;
1980   if (isInstField) {
1981     CXXScopeSpec &SS = D.getCXXScopeSpec();
1982 
1983     // Data members must have identifiers for names.
1984     if (!Name.isIdentifier()) {
1985       Diag(Loc, diag::err_bad_variable_name)
1986         << Name;
1987       return 0;
1988     }
1989 
1990     IdentifierInfo *II = Name.getAsIdentifierInfo();
1991 
1992     // Member field could not be with "template" keyword.
1993     // So TemplateParameterLists should be empty in this case.
1994     if (TemplateParameterLists.size()) {
1995       TemplateParameterList* TemplateParams = TemplateParameterLists[0];
1996       if (TemplateParams->size()) {
1997         // There is no such thing as a member field template.
1998         Diag(D.getIdentifierLoc(), diag::err_template_member)
1999             << II
2000             << SourceRange(TemplateParams->getTemplateLoc(),
2001                 TemplateParams->getRAngleLoc());
2002       } else {
2003         // There is an extraneous 'template<>' for this member.
2004         Diag(TemplateParams->getTemplateLoc(),
2005             diag::err_template_member_noparams)
2006             << II
2007             << SourceRange(TemplateParams->getTemplateLoc(),
2008                 TemplateParams->getRAngleLoc());
2009       }
2010       return 0;
2011     }
2012 
2013     if (SS.isSet() && !SS.isInvalid()) {
2014       // The user provided a superfluous scope specifier inside a class
2015       // definition:
2016       //
2017       // class X {
2018       //   int X::member;
2019       // };
2020       if (DeclContext *DC = computeDeclContext(SS, false))
2021         diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
2022       else
2023         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
2024           << Name << SS.getRange();
2025 
2026       SS.clear();
2027     }
2028 
2029     AttributeList *MSPropertyAttr =
2030       getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
2031     if (MSPropertyAttr) {
2032       Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
2033                                 BitWidth, InitStyle, AS, MSPropertyAttr);
2034       if (!Member)
2035         return 0;
2036       isInstField = false;
2037     } else {
2038       Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
2039                                 BitWidth, InitStyle, AS);
2040       assert(Member && "HandleField never returns null");
2041     }
2042   } else {
2043     assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
2044 
2045     Member = HandleDeclarator(S, D, TemplateParameterLists);
2046     if (!Member)
2047       return 0;
2048 
2049     // Non-instance-fields can't have a bitfield.
2050     if (BitWidth) {
2051       if (Member->isInvalidDecl()) {
2052         // don't emit another diagnostic.
2053       } else if (isa<VarDecl>(Member)) {
2054         // C++ 9.6p3: A bit-field shall not be a static member.
2055         // "static member 'A' cannot be a bit-field"
2056         Diag(Loc, diag::err_static_not_bitfield)
2057           << Name << BitWidth->getSourceRange();
2058       } else if (isa<TypedefDecl>(Member)) {
2059         // "typedef member 'x' cannot be a bit-field"
2060         Diag(Loc, diag::err_typedef_not_bitfield)
2061           << Name << BitWidth->getSourceRange();
2062       } else {
2063         // A function typedef ("typedef int f(); f a;").
2064         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
2065         Diag(Loc, diag::err_not_integral_type_bitfield)
2066           << Name << cast<ValueDecl>(Member)->getType()
2067           << BitWidth->getSourceRange();
2068       }
2069 
2070       BitWidth = 0;
2071       Member->setInvalidDecl();
2072     }
2073 
2074     Member->setAccess(AS);
2075 
2076     // If we have declared a member function template or static data member
2077     // template, set the access of the templated declaration as well.
2078     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
2079       FunTmpl->getTemplatedDecl()->setAccess(AS);
2080     else if (VarTemplateDecl *VarTmpl = dyn_cast<VarTemplateDecl>(Member))
2081       VarTmpl->getTemplatedDecl()->setAccess(AS);
2082   }
2083 
2084   if (VS.isOverrideSpecified())
2085     Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
2086   if (VS.isFinalSpecified())
2087     Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context,
2088                                             VS.isFinalSpelledSealed()));
2089 
2090   if (VS.getLastLocation().isValid()) {
2091     // Update the end location of a method that has a virt-specifiers.
2092     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
2093       MD->setRangeEnd(VS.getLastLocation());
2094   }
2095 
2096   CheckOverrideControl(Member);
2097 
2098   assert((Name || isInstField) && "No identifier for non-field ?");
2099 
2100   if (isInstField) {
2101     FieldDecl *FD = cast<FieldDecl>(Member);
2102     FieldCollector->Add(FD);
2103 
2104     if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
2105                                  FD->getLocation())
2106           != DiagnosticsEngine::Ignored) {
2107       // Remember all explicit private FieldDecls that have a name, no side
2108       // effects and are not part of a dependent type declaration.
2109       if (!FD->isImplicit() && FD->getDeclName() &&
2110           FD->getAccess() == AS_private &&
2111           !FD->hasAttr<UnusedAttr>() &&
2112           !FD->getParent()->isDependentContext() &&
2113           !InitializationHasSideEffects(*FD))
2114         UnusedPrivateFields.insert(FD);
2115     }
2116   }
2117 
2118   return Member;
2119 }
2120 
2121 namespace {
2122   class UninitializedFieldVisitor
2123       : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
2124     Sema &S;
2125     // List of Decls to generate a warning on.  Also remove Decls that become
2126     // initialized.
2127     llvm::SmallPtrSet<ValueDecl*, 4> &Decls;
2128     // If non-null, add a note to the warning pointing back to the constructor.
2129     const CXXConstructorDecl *Constructor;
2130   public:
2131     typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
2132     UninitializedFieldVisitor(Sema &S,
2133                               llvm::SmallPtrSet<ValueDecl*, 4> &Decls,
2134                               const CXXConstructorDecl *Constructor)
2135       : Inherited(S.Context), S(S), Decls(Decls),
2136         Constructor(Constructor) { }
2137 
2138     void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly) {
2139       if (isa<EnumConstantDecl>(ME->getMemberDecl()))
2140         return;
2141 
2142       // FieldME is the inner-most MemberExpr that is not an anonymous struct
2143       // or union.
2144       MemberExpr *FieldME = ME;
2145 
2146       Expr *Base = ME;
2147       while (isa<MemberExpr>(Base)) {
2148         ME = cast<MemberExpr>(Base);
2149 
2150         if (isa<VarDecl>(ME->getMemberDecl()))
2151           return;
2152 
2153         if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2154           if (!FD->isAnonymousStructOrUnion())
2155             FieldME = ME;
2156 
2157         Base = ME->getBase();
2158       }
2159 
2160       if (!isa<CXXThisExpr>(Base))
2161         return;
2162 
2163       ValueDecl* FoundVD = FieldME->getMemberDecl();
2164 
2165       if (!Decls.count(FoundVD))
2166         return;
2167 
2168       const bool IsReference = FoundVD->getType()->isReferenceType();
2169 
2170       // Prevent double warnings on use of unbounded references.
2171       if (IsReference != CheckReferenceOnly)
2172         return;
2173 
2174       unsigned diag = IsReference
2175           ? diag::warn_reference_field_is_uninit
2176           : diag::warn_field_is_uninit;
2177       S.Diag(FieldME->getExprLoc(), diag) << FoundVD;
2178       if (Constructor)
2179         S.Diag(Constructor->getLocation(),
2180                diag::note_uninit_in_this_constructor)
2181           << (Constructor->isDefaultConstructor() && Constructor->isImplicit());
2182 
2183     }
2184 
2185     void HandleValue(Expr *E) {
2186       E = E->IgnoreParens();
2187 
2188       if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
2189         HandleMemberExpr(ME, false /*CheckReferenceOnly*/);
2190         return;
2191       }
2192 
2193       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
2194         HandleValue(CO->getTrueExpr());
2195         HandleValue(CO->getFalseExpr());
2196         return;
2197       }
2198 
2199       if (BinaryConditionalOperator *BCO =
2200               dyn_cast<BinaryConditionalOperator>(E)) {
2201         HandleValue(BCO->getCommon());
2202         HandleValue(BCO->getFalseExpr());
2203         return;
2204       }
2205 
2206       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
2207         switch (BO->getOpcode()) {
2208         default:
2209           return;
2210         case(BO_PtrMemD):
2211         case(BO_PtrMemI):
2212           HandleValue(BO->getLHS());
2213           return;
2214         case(BO_Comma):
2215           HandleValue(BO->getRHS());
2216           return;
2217         }
2218       }
2219     }
2220 
2221     void VisitMemberExpr(MemberExpr *ME) {
2222       // All uses of unbounded reference fields will warn.
2223       HandleMemberExpr(ME, true /*CheckReferenceOnly*/);
2224 
2225       Inherited::VisitMemberExpr(ME);
2226     }
2227 
2228     void VisitImplicitCastExpr(ImplicitCastExpr *E) {
2229       if (E->getCastKind() == CK_LValueToRValue)
2230         HandleValue(E->getSubExpr());
2231 
2232       Inherited::VisitImplicitCastExpr(E);
2233     }
2234 
2235     void VisitCXXConstructExpr(CXXConstructExpr *E) {
2236       if (E->getConstructor()->isCopyConstructor())
2237         if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(E->getArg(0)))
2238           if (ICE->getCastKind() == CK_NoOp)
2239             if (MemberExpr *ME = dyn_cast<MemberExpr>(ICE->getSubExpr()))
2240               HandleMemberExpr(ME, false /*CheckReferenceOnly*/);
2241 
2242       Inherited::VisitCXXConstructExpr(E);
2243     }
2244 
2245     void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
2246       Expr *Callee = E->getCallee();
2247       if (isa<MemberExpr>(Callee))
2248         HandleValue(Callee);
2249 
2250       Inherited::VisitCXXMemberCallExpr(E);
2251     }
2252 
2253     void VisitBinaryOperator(BinaryOperator *E) {
2254       // If a field assignment is detected, remove the field from the
2255       // uninitiailized field set.
2256       if (E->getOpcode() == BO_Assign)
2257         if (MemberExpr *ME = dyn_cast<MemberExpr>(E->getLHS()))
2258           if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2259             if (!FD->getType()->isReferenceType())
2260               Decls.erase(FD);
2261 
2262       Inherited::VisitBinaryOperator(E);
2263     }
2264   };
2265   static void CheckInitExprContainsUninitializedFields(
2266       Sema &S, Expr *E, llvm::SmallPtrSet<ValueDecl*, 4> &Decls,
2267       const CXXConstructorDecl *Constructor) {
2268     if (Decls.size() == 0)
2269       return;
2270 
2271     if (!E)
2272       return;
2273 
2274     if (CXXDefaultInitExpr *Default = dyn_cast<CXXDefaultInitExpr>(E)) {
2275       E = Default->getExpr();
2276       if (!E)
2277         return;
2278       // In class initializers will point to the constructor.
2279       UninitializedFieldVisitor(S, Decls, Constructor).Visit(E);
2280     } else {
2281       UninitializedFieldVisitor(S, Decls, 0).Visit(E);
2282     }
2283   }
2284 
2285   // Diagnose value-uses of fields to initialize themselves, e.g.
2286   //   foo(foo)
2287   // where foo is not also a parameter to the constructor.
2288   // Also diagnose across field uninitialized use such as
2289   //   x(y), y(x)
2290   // TODO: implement -Wuninitialized and fold this into that framework.
2291   static void DiagnoseUninitializedFields(
2292       Sema &SemaRef, const CXXConstructorDecl *Constructor) {
2293 
2294     if (SemaRef.getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit,
2295                                                     Constructor->getLocation())
2296         == DiagnosticsEngine::Ignored) {
2297       return;
2298     }
2299 
2300     if (Constructor->isInvalidDecl())
2301       return;
2302 
2303     const CXXRecordDecl *RD = Constructor->getParent();
2304 
2305     // Holds fields that are uninitialized.
2306     llvm::SmallPtrSet<ValueDecl*, 4> UninitializedFields;
2307 
2308     // At the beginning, all fields are uninitialized.
2309     for (DeclContext::decl_iterator I = RD->decls_begin(), E = RD->decls_end();
2310          I != E; ++I) {
2311       if (FieldDecl *FD = dyn_cast<FieldDecl>(*I)) {
2312         UninitializedFields.insert(FD);
2313       } else if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(*I)) {
2314         UninitializedFields.insert(IFD->getAnonField());
2315       }
2316     }
2317 
2318     for (CXXConstructorDecl::init_const_iterator FieldInit =
2319              Constructor->init_begin(),
2320              FieldInitEnd = Constructor->init_end();
2321          FieldInit != FieldInitEnd; ++FieldInit) {
2322 
2323       Expr *InitExpr = (*FieldInit)->getInit();
2324 
2325       CheckInitExprContainsUninitializedFields(
2326           SemaRef, InitExpr, UninitializedFields, Constructor);
2327 
2328       if (FieldDecl *Field = (*FieldInit)->getAnyMember())
2329         UninitializedFields.erase(Field);
2330     }
2331   }
2332 } // namespace
2333 
2334 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
2335 /// in-class initializer for a non-static C++ class member, and after
2336 /// instantiating an in-class initializer in a class template. Such actions
2337 /// are deferred until the class is complete.
2338 void
2339 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
2340                                        Expr *InitExpr) {
2341   FieldDecl *FD = cast<FieldDecl>(D);
2342   assert(FD->getInClassInitStyle() != ICIS_NoInit &&
2343          "must set init style when field is created");
2344 
2345   if (!InitExpr) {
2346     FD->setInvalidDecl();
2347     FD->removeInClassInitializer();
2348     return;
2349   }
2350 
2351   if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
2352     FD->setInvalidDecl();
2353     FD->removeInClassInitializer();
2354     return;
2355   }
2356 
2357   ExprResult Init = InitExpr;
2358   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
2359     InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
2360     InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
2361         ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
2362         : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
2363     InitializationSequence Seq(*this, Entity, Kind, InitExpr);
2364     Init = Seq.Perform(*this, Entity, Kind, InitExpr);
2365     if (Init.isInvalid()) {
2366       FD->setInvalidDecl();
2367       return;
2368     }
2369   }
2370 
2371   // C++11 [class.base.init]p7:
2372   //   The initialization of each base and member constitutes a
2373   //   full-expression.
2374   Init = ActOnFinishFullExpr(Init.take(), InitLoc);
2375   if (Init.isInvalid()) {
2376     FD->setInvalidDecl();
2377     return;
2378   }
2379 
2380   InitExpr = Init.release();
2381 
2382   FD->setInClassInitializer(InitExpr);
2383 }
2384 
2385 /// \brief Find the direct and/or virtual base specifiers that
2386 /// correspond to the given base type, for use in base initialization
2387 /// within a constructor.
2388 static bool FindBaseInitializer(Sema &SemaRef,
2389                                 CXXRecordDecl *ClassDecl,
2390                                 QualType BaseType,
2391                                 const CXXBaseSpecifier *&DirectBaseSpec,
2392                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
2393   // First, check for a direct base class.
2394   DirectBaseSpec = 0;
2395   for (CXXRecordDecl::base_class_const_iterator Base
2396          = ClassDecl->bases_begin();
2397        Base != ClassDecl->bases_end(); ++Base) {
2398     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
2399       // We found a direct base of this type. That's what we're
2400       // initializing.
2401       DirectBaseSpec = &*Base;
2402       break;
2403     }
2404   }
2405 
2406   // Check for a virtual base class.
2407   // FIXME: We might be able to short-circuit this if we know in advance that
2408   // there are no virtual bases.
2409   VirtualBaseSpec = 0;
2410   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
2411     // We haven't found a base yet; search the class hierarchy for a
2412     // virtual base class.
2413     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2414                        /*DetectVirtual=*/false);
2415     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
2416                               BaseType, Paths)) {
2417       for (CXXBasePaths::paths_iterator Path = Paths.begin();
2418            Path != Paths.end(); ++Path) {
2419         if (Path->back().Base->isVirtual()) {
2420           VirtualBaseSpec = Path->back().Base;
2421           break;
2422         }
2423       }
2424     }
2425   }
2426 
2427   return DirectBaseSpec || VirtualBaseSpec;
2428 }
2429 
2430 /// \brief Handle a C++ member initializer using braced-init-list syntax.
2431 MemInitResult
2432 Sema::ActOnMemInitializer(Decl *ConstructorD,
2433                           Scope *S,
2434                           CXXScopeSpec &SS,
2435                           IdentifierInfo *MemberOrBase,
2436                           ParsedType TemplateTypeTy,
2437                           const DeclSpec &DS,
2438                           SourceLocation IdLoc,
2439                           Expr *InitList,
2440                           SourceLocation EllipsisLoc) {
2441   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2442                              DS, IdLoc, InitList,
2443                              EllipsisLoc);
2444 }
2445 
2446 /// \brief Handle a C++ member initializer using parentheses syntax.
2447 MemInitResult
2448 Sema::ActOnMemInitializer(Decl *ConstructorD,
2449                           Scope *S,
2450                           CXXScopeSpec &SS,
2451                           IdentifierInfo *MemberOrBase,
2452                           ParsedType TemplateTypeTy,
2453                           const DeclSpec &DS,
2454                           SourceLocation IdLoc,
2455                           SourceLocation LParenLoc,
2456                           ArrayRef<Expr *> Args,
2457                           SourceLocation RParenLoc,
2458                           SourceLocation EllipsisLoc) {
2459   Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
2460                                            Args, RParenLoc);
2461   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2462                              DS, IdLoc, List, EllipsisLoc);
2463 }
2464 
2465 namespace {
2466 
2467 // Callback to only accept typo corrections that can be a valid C++ member
2468 // intializer: either a non-static field member or a base class.
2469 class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
2470 public:
2471   explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
2472       : ClassDecl(ClassDecl) {}
2473 
2474   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
2475     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
2476       if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
2477         return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
2478       return isa<TypeDecl>(ND);
2479     }
2480     return false;
2481   }
2482 
2483 private:
2484   CXXRecordDecl *ClassDecl;
2485 };
2486 
2487 }
2488 
2489 /// \brief Handle a C++ member initializer.
2490 MemInitResult
2491 Sema::BuildMemInitializer(Decl *ConstructorD,
2492                           Scope *S,
2493                           CXXScopeSpec &SS,
2494                           IdentifierInfo *MemberOrBase,
2495                           ParsedType TemplateTypeTy,
2496                           const DeclSpec &DS,
2497                           SourceLocation IdLoc,
2498                           Expr *Init,
2499                           SourceLocation EllipsisLoc) {
2500   if (!ConstructorD)
2501     return true;
2502 
2503   AdjustDeclIfTemplate(ConstructorD);
2504 
2505   CXXConstructorDecl *Constructor
2506     = dyn_cast<CXXConstructorDecl>(ConstructorD);
2507   if (!Constructor) {
2508     // The user wrote a constructor initializer on a function that is
2509     // not a C++ constructor. Ignore the error for now, because we may
2510     // have more member initializers coming; we'll diagnose it just
2511     // once in ActOnMemInitializers.
2512     return true;
2513   }
2514 
2515   CXXRecordDecl *ClassDecl = Constructor->getParent();
2516 
2517   // C++ [class.base.init]p2:
2518   //   Names in a mem-initializer-id are looked up in the scope of the
2519   //   constructor's class and, if not found in that scope, are looked
2520   //   up in the scope containing the constructor's definition.
2521   //   [Note: if the constructor's class contains a member with the
2522   //   same name as a direct or virtual base class of the class, a
2523   //   mem-initializer-id naming the member or base class and composed
2524   //   of a single identifier refers to the class member. A
2525   //   mem-initializer-id for the hidden base class may be specified
2526   //   using a qualified name. ]
2527   if (!SS.getScopeRep() && !TemplateTypeTy) {
2528     // Look for a member, first.
2529     DeclContext::lookup_result Result
2530       = ClassDecl->lookup(MemberOrBase);
2531     if (!Result.empty()) {
2532       ValueDecl *Member;
2533       if ((Member = dyn_cast<FieldDecl>(Result.front())) ||
2534           (Member = dyn_cast<IndirectFieldDecl>(Result.front()))) {
2535         if (EllipsisLoc.isValid())
2536           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
2537             << MemberOrBase
2538             << SourceRange(IdLoc, Init->getSourceRange().getEnd());
2539 
2540         return BuildMemberInitializer(Member, Init, IdLoc);
2541       }
2542     }
2543   }
2544   // It didn't name a member, so see if it names a class.
2545   QualType BaseType;
2546   TypeSourceInfo *TInfo = 0;
2547 
2548   if (TemplateTypeTy) {
2549     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
2550   } else if (DS.getTypeSpecType() == TST_decltype) {
2551     BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
2552   } else {
2553     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
2554     LookupParsedName(R, S, &SS);
2555 
2556     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
2557     if (!TyD) {
2558       if (R.isAmbiguous()) return true;
2559 
2560       // We don't want access-control diagnostics here.
2561       R.suppressDiagnostics();
2562 
2563       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
2564         bool NotUnknownSpecialization = false;
2565         DeclContext *DC = computeDeclContext(SS, false);
2566         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
2567           NotUnknownSpecialization = !Record->hasAnyDependentBases();
2568 
2569         if (!NotUnknownSpecialization) {
2570           // When the scope specifier can refer to a member of an unknown
2571           // specialization, we take it as a type name.
2572           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
2573                                        SS.getWithLocInContext(Context),
2574                                        *MemberOrBase, IdLoc);
2575           if (BaseType.isNull())
2576             return true;
2577 
2578           R.clear();
2579           R.setLookupName(MemberOrBase);
2580         }
2581       }
2582 
2583       // If no results were found, try to correct typos.
2584       TypoCorrection Corr;
2585       MemInitializerValidatorCCC Validator(ClassDecl);
2586       if (R.empty() && BaseType.isNull() &&
2587           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
2588                               Validator, ClassDecl))) {
2589         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
2590           // We have found a non-static data member with a similar
2591           // name to what was typed; complain and initialize that
2592           // member.
2593           diagnoseTypo(Corr,
2594                        PDiag(diag::err_mem_init_not_member_or_class_suggest)
2595                          << MemberOrBase << true);
2596           return BuildMemberInitializer(Member, Init, IdLoc);
2597         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
2598           const CXXBaseSpecifier *DirectBaseSpec;
2599           const CXXBaseSpecifier *VirtualBaseSpec;
2600           if (FindBaseInitializer(*this, ClassDecl,
2601                                   Context.getTypeDeclType(Type),
2602                                   DirectBaseSpec, VirtualBaseSpec)) {
2603             // We have found a direct or virtual base class with a
2604             // similar name to what was typed; complain and initialize
2605             // that base class.
2606             diagnoseTypo(Corr,
2607                          PDiag(diag::err_mem_init_not_member_or_class_suggest)
2608                            << MemberOrBase << false,
2609                          PDiag() /*Suppress note, we provide our own.*/);
2610 
2611             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec ? DirectBaseSpec
2612                                                               : VirtualBaseSpec;
2613             Diag(BaseSpec->getLocStart(),
2614                  diag::note_base_class_specified_here)
2615               << BaseSpec->getType()
2616               << BaseSpec->getSourceRange();
2617 
2618             TyD = Type;
2619           }
2620         }
2621       }
2622 
2623       if (!TyD && BaseType.isNull()) {
2624         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
2625           << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
2626         return true;
2627       }
2628     }
2629 
2630     if (BaseType.isNull()) {
2631       BaseType = Context.getTypeDeclType(TyD);
2632       if (SS.isSet()) {
2633         NestedNameSpecifier *Qualifier =
2634           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2635 
2636         // FIXME: preserve source range information
2637         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
2638       }
2639     }
2640   }
2641 
2642   if (!TInfo)
2643     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
2644 
2645   return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2646 }
2647 
2648 /// Checks a member initializer expression for cases where reference (or
2649 /// pointer) members are bound to by-value parameters (or their addresses).
2650 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
2651                                                Expr *Init,
2652                                                SourceLocation IdLoc) {
2653   QualType MemberTy = Member->getType();
2654 
2655   // We only handle pointers and references currently.
2656   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
2657   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
2658     return;
2659 
2660   const bool IsPointer = MemberTy->isPointerType();
2661   if (IsPointer) {
2662     if (const UnaryOperator *Op
2663           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
2664       // The only case we're worried about with pointers requires taking the
2665       // address.
2666       if (Op->getOpcode() != UO_AddrOf)
2667         return;
2668 
2669       Init = Op->getSubExpr();
2670     } else {
2671       // We only handle address-of expression initializers for pointers.
2672       return;
2673     }
2674   }
2675 
2676   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
2677     // We only warn when referring to a non-reference parameter declaration.
2678     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
2679     if (!Parameter || Parameter->getType()->isReferenceType())
2680       return;
2681 
2682     S.Diag(Init->getExprLoc(),
2683            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
2684                      : diag::warn_bind_ref_member_to_parameter)
2685       << Member << Parameter << Init->getSourceRange();
2686   } else {
2687     // Other initializers are fine.
2688     return;
2689   }
2690 
2691   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
2692     << (unsigned)IsPointer;
2693 }
2694 
2695 MemInitResult
2696 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
2697                              SourceLocation IdLoc) {
2698   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
2699   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
2700   assert((DirectMember || IndirectMember) &&
2701          "Member must be a FieldDecl or IndirectFieldDecl");
2702 
2703   if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2704     return true;
2705 
2706   if (Member->isInvalidDecl())
2707     return true;
2708 
2709   MultiExprArg Args;
2710   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2711     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2712   } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
2713     Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
2714   } else {
2715     // Template instantiation doesn't reconstruct ParenListExprs for us.
2716     Args = Init;
2717   }
2718 
2719   SourceRange InitRange = Init->getSourceRange();
2720 
2721   if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
2722     // Can't check initialization for a member of dependent type or when
2723     // any of the arguments are type-dependent expressions.
2724     DiscardCleanupsInEvaluationContext();
2725   } else {
2726     bool InitList = false;
2727     if (isa<InitListExpr>(Init)) {
2728       InitList = true;
2729       Args = Init;
2730     }
2731 
2732     // Initialize the member.
2733     InitializedEntity MemberEntity =
2734       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
2735                    : InitializedEntity::InitializeMember(IndirectMember, 0);
2736     InitializationKind Kind =
2737       InitList ? InitializationKind::CreateDirectList(IdLoc)
2738                : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
2739                                                   InitRange.getEnd());
2740 
2741     InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
2742     ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 0);
2743     if (MemberInit.isInvalid())
2744       return true;
2745 
2746     CheckForDanglingReferenceOrPointer(*this, Member, MemberInit.get(), IdLoc);
2747 
2748     // C++11 [class.base.init]p7:
2749     //   The initialization of each base and member constitutes a
2750     //   full-expression.
2751     MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin());
2752     if (MemberInit.isInvalid())
2753       return true;
2754 
2755     Init = MemberInit.get();
2756   }
2757 
2758   if (DirectMember) {
2759     return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
2760                                             InitRange.getBegin(), Init,
2761                                             InitRange.getEnd());
2762   } else {
2763     return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
2764                                             InitRange.getBegin(), Init,
2765                                             InitRange.getEnd());
2766   }
2767 }
2768 
2769 MemInitResult
2770 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
2771                                  CXXRecordDecl *ClassDecl) {
2772   SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
2773   if (!LangOpts.CPlusPlus11)
2774     return Diag(NameLoc, diag::err_delegating_ctor)
2775       << TInfo->getTypeLoc().getLocalSourceRange();
2776   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
2777 
2778   bool InitList = true;
2779   MultiExprArg Args = Init;
2780   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2781     InitList = false;
2782     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2783   }
2784 
2785   SourceRange InitRange = Init->getSourceRange();
2786   // Initialize the object.
2787   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
2788                                      QualType(ClassDecl->getTypeForDecl(), 0));
2789   InitializationKind Kind =
2790     InitList ? InitializationKind::CreateDirectList(NameLoc)
2791              : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
2792                                                 InitRange.getEnd());
2793   InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
2794   ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
2795                                               Args, 0);
2796   if (DelegationInit.isInvalid())
2797     return true;
2798 
2799   assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
2800          "Delegating constructor with no target?");
2801 
2802   // C++11 [class.base.init]p7:
2803   //   The initialization of each base and member constitutes a
2804   //   full-expression.
2805   DelegationInit = ActOnFinishFullExpr(DelegationInit.get(),
2806                                        InitRange.getBegin());
2807   if (DelegationInit.isInvalid())
2808     return true;
2809 
2810   // If we are in a dependent context, template instantiation will
2811   // perform this type-checking again. Just save the arguments that we
2812   // received in a ParenListExpr.
2813   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2814   // of the information that we have about the base
2815   // initializer. However, deconstructing the ASTs is a dicey process,
2816   // and this approach is far more likely to get the corner cases right.
2817   if (CurContext->isDependentContext())
2818     DelegationInit = Owned(Init);
2819 
2820   return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
2821                                           DelegationInit.takeAs<Expr>(),
2822                                           InitRange.getEnd());
2823 }
2824 
2825 MemInitResult
2826 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
2827                            Expr *Init, CXXRecordDecl *ClassDecl,
2828                            SourceLocation EllipsisLoc) {
2829   SourceLocation BaseLoc
2830     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
2831 
2832   if (!BaseType->isDependentType() && !BaseType->isRecordType())
2833     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
2834              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2835 
2836   // C++ [class.base.init]p2:
2837   //   [...] Unless the mem-initializer-id names a nonstatic data
2838   //   member of the constructor's class or a direct or virtual base
2839   //   of that class, the mem-initializer is ill-formed. A
2840   //   mem-initializer-list can initialize a base class using any
2841   //   name that denotes that base class type.
2842   bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
2843 
2844   SourceRange InitRange = Init->getSourceRange();
2845   if (EllipsisLoc.isValid()) {
2846     // This is a pack expansion.
2847     if (!BaseType->containsUnexpandedParameterPack())  {
2848       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2849         << SourceRange(BaseLoc, InitRange.getEnd());
2850 
2851       EllipsisLoc = SourceLocation();
2852     }
2853   } else {
2854     // Check for any unexpanded parameter packs.
2855     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
2856       return true;
2857 
2858     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2859       return true;
2860   }
2861 
2862   // Check for direct and virtual base classes.
2863   const CXXBaseSpecifier *DirectBaseSpec = 0;
2864   const CXXBaseSpecifier *VirtualBaseSpec = 0;
2865   if (!Dependent) {
2866     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2867                                        BaseType))
2868       return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2869 
2870     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2871                         VirtualBaseSpec);
2872 
2873     // C++ [base.class.init]p2:
2874     // Unless the mem-initializer-id names a nonstatic data member of the
2875     // constructor's class or a direct or virtual base of that class, the
2876     // mem-initializer is ill-formed.
2877     if (!DirectBaseSpec && !VirtualBaseSpec) {
2878       // If the class has any dependent bases, then it's possible that
2879       // one of those types will resolve to the same type as
2880       // BaseType. Therefore, just treat this as a dependent base
2881       // class initialization.  FIXME: Should we try to check the
2882       // initialization anyway? It seems odd.
2883       if (ClassDecl->hasAnyDependentBases())
2884         Dependent = true;
2885       else
2886         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
2887           << BaseType << Context.getTypeDeclType(ClassDecl)
2888           << BaseTInfo->getTypeLoc().getLocalSourceRange();
2889     }
2890   }
2891 
2892   if (Dependent) {
2893     DiscardCleanupsInEvaluationContext();
2894 
2895     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2896                                             /*IsVirtual=*/false,
2897                                             InitRange.getBegin(), Init,
2898                                             InitRange.getEnd(), EllipsisLoc);
2899   }
2900 
2901   // C++ [base.class.init]p2:
2902   //   If a mem-initializer-id is ambiguous because it designates both
2903   //   a direct non-virtual base class and an inherited virtual base
2904   //   class, the mem-initializer is ill-formed.
2905   if (DirectBaseSpec && VirtualBaseSpec)
2906     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
2907       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2908 
2909   const CXXBaseSpecifier *BaseSpec = DirectBaseSpec;
2910   if (!BaseSpec)
2911     BaseSpec = VirtualBaseSpec;
2912 
2913   // Initialize the base.
2914   bool InitList = true;
2915   MultiExprArg Args = Init;
2916   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2917     InitList = false;
2918     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2919   }
2920 
2921   InitializedEntity BaseEntity =
2922     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
2923   InitializationKind Kind =
2924     InitList ? InitializationKind::CreateDirectList(BaseLoc)
2925              : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
2926                                                 InitRange.getEnd());
2927   InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
2928   ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, 0);
2929   if (BaseInit.isInvalid())
2930     return true;
2931 
2932   // C++11 [class.base.init]p7:
2933   //   The initialization of each base and member constitutes a
2934   //   full-expression.
2935   BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin());
2936   if (BaseInit.isInvalid())
2937     return true;
2938 
2939   // If we are in a dependent context, template instantiation will
2940   // perform this type-checking again. Just save the arguments that we
2941   // received in a ParenListExpr.
2942   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2943   // of the information that we have about the base
2944   // initializer. However, deconstructing the ASTs is a dicey process,
2945   // and this approach is far more likely to get the corner cases right.
2946   if (CurContext->isDependentContext())
2947     BaseInit = Owned(Init);
2948 
2949   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2950                                           BaseSpec->isVirtual(),
2951                                           InitRange.getBegin(),
2952                                           BaseInit.takeAs<Expr>(),
2953                                           InitRange.getEnd(), EllipsisLoc);
2954 }
2955 
2956 // Create a static_cast\<T&&>(expr).
2957 static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) {
2958   if (T.isNull()) T = E->getType();
2959   QualType TargetType = SemaRef.BuildReferenceType(
2960       T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName());
2961   SourceLocation ExprLoc = E->getLocStart();
2962   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
2963       TargetType, ExprLoc);
2964 
2965   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
2966                                    SourceRange(ExprLoc, ExprLoc),
2967                                    E->getSourceRange()).take();
2968 }
2969 
2970 /// ImplicitInitializerKind - How an implicit base or member initializer should
2971 /// initialize its base or member.
2972 enum ImplicitInitializerKind {
2973   IIK_Default,
2974   IIK_Copy,
2975   IIK_Move,
2976   IIK_Inherit
2977 };
2978 
2979 static bool
2980 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2981                              ImplicitInitializerKind ImplicitInitKind,
2982                              CXXBaseSpecifier *BaseSpec,
2983                              bool IsInheritedVirtualBase,
2984                              CXXCtorInitializer *&CXXBaseInit) {
2985   InitializedEntity InitEntity
2986     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
2987                                         IsInheritedVirtualBase);
2988 
2989   ExprResult BaseInit;
2990 
2991   switch (ImplicitInitKind) {
2992   case IIK_Inherit: {
2993     const CXXRecordDecl *Inherited =
2994         Constructor->getInheritedConstructor()->getParent();
2995     const CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
2996     if (Base && Inherited->getCanonicalDecl() == Base->getCanonicalDecl()) {
2997       // C++11 [class.inhctor]p8:
2998       //   Each expression in the expression-list is of the form
2999       //   static_cast<T&&>(p), where p is the name of the corresponding
3000       //   constructor parameter and T is the declared type of p.
3001       SmallVector<Expr*, 16> Args;
3002       for (unsigned I = 0, E = Constructor->getNumParams(); I != E; ++I) {
3003         ParmVarDecl *PD = Constructor->getParamDecl(I);
3004         ExprResult ArgExpr =
3005             SemaRef.BuildDeclRefExpr(PD, PD->getType().getNonReferenceType(),
3006                                      VK_LValue, SourceLocation());
3007         if (ArgExpr.isInvalid())
3008           return true;
3009         Args.push_back(CastForMoving(SemaRef, ArgExpr.take(), PD->getType()));
3010       }
3011 
3012       InitializationKind InitKind = InitializationKind::CreateDirect(
3013           Constructor->getLocation(), SourceLocation(), SourceLocation());
3014       InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, Args);
3015       BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, Args);
3016       break;
3017     }
3018   }
3019   // Fall through.
3020   case IIK_Default: {
3021     InitializationKind InitKind
3022       = InitializationKind::CreateDefault(Constructor->getLocation());
3023     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
3024     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
3025     break;
3026   }
3027 
3028   case IIK_Move:
3029   case IIK_Copy: {
3030     bool Moving = ImplicitInitKind == IIK_Move;
3031     ParmVarDecl *Param = Constructor->getParamDecl(0);
3032     QualType ParamType = Param->getType().getNonReferenceType();
3033 
3034     Expr *CopyCtorArg =
3035       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
3036                           SourceLocation(), Param, false,
3037                           Constructor->getLocation(), ParamType,
3038                           VK_LValue, 0);
3039 
3040     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
3041 
3042     // Cast to the base class to avoid ambiguities.
3043     QualType ArgTy =
3044       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
3045                                        ParamType.getQualifiers());
3046 
3047     if (Moving) {
3048       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
3049     }
3050 
3051     CXXCastPath BasePath;
3052     BasePath.push_back(BaseSpec);
3053     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
3054                                             CK_UncheckedDerivedToBase,
3055                                             Moving ? VK_XValue : VK_LValue,
3056                                             &BasePath).take();
3057 
3058     InitializationKind InitKind
3059       = InitializationKind::CreateDirect(Constructor->getLocation(),
3060                                          SourceLocation(), SourceLocation());
3061     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
3062     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
3063     break;
3064   }
3065   }
3066 
3067   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
3068   if (BaseInit.isInvalid())
3069     return true;
3070 
3071   CXXBaseInit =
3072     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3073                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
3074                                                         SourceLocation()),
3075                                              BaseSpec->isVirtual(),
3076                                              SourceLocation(),
3077                                              BaseInit.takeAs<Expr>(),
3078                                              SourceLocation(),
3079                                              SourceLocation());
3080 
3081   return false;
3082 }
3083 
3084 static bool RefersToRValueRef(Expr *MemRef) {
3085   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
3086   return Referenced->getType()->isRValueReferenceType();
3087 }
3088 
3089 static bool
3090 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
3091                                ImplicitInitializerKind ImplicitInitKind,
3092                                FieldDecl *Field, IndirectFieldDecl *Indirect,
3093                                CXXCtorInitializer *&CXXMemberInit) {
3094   if (Field->isInvalidDecl())
3095     return true;
3096 
3097   SourceLocation Loc = Constructor->getLocation();
3098 
3099   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
3100     bool Moving = ImplicitInitKind == IIK_Move;
3101     ParmVarDecl *Param = Constructor->getParamDecl(0);
3102     QualType ParamType = Param->getType().getNonReferenceType();
3103 
3104     // Suppress copying zero-width bitfields.
3105     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
3106       return false;
3107 
3108     Expr *MemberExprBase =
3109       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
3110                           SourceLocation(), Param, false,
3111                           Loc, ParamType, VK_LValue, 0);
3112 
3113     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
3114 
3115     if (Moving) {
3116       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
3117     }
3118 
3119     // Build a reference to this field within the parameter.
3120     CXXScopeSpec SS;
3121     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
3122                               Sema::LookupMemberName);
3123     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
3124                                   : cast<ValueDecl>(Field), AS_public);
3125     MemberLookup.resolveKind();
3126     ExprResult CtorArg
3127       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
3128                                          ParamType, Loc,
3129                                          /*IsArrow=*/false,
3130                                          SS,
3131                                          /*TemplateKWLoc=*/SourceLocation(),
3132                                          /*FirstQualifierInScope=*/0,
3133                                          MemberLookup,
3134                                          /*TemplateArgs=*/0);
3135     if (CtorArg.isInvalid())
3136       return true;
3137 
3138     // C++11 [class.copy]p15:
3139     //   - if a member m has rvalue reference type T&&, it is direct-initialized
3140     //     with static_cast<T&&>(x.m);
3141     if (RefersToRValueRef(CtorArg.get())) {
3142       CtorArg = CastForMoving(SemaRef, CtorArg.take());
3143     }
3144 
3145     // When the field we are copying is an array, create index variables for
3146     // each dimension of the array. We use these index variables to subscript
3147     // the source array, and other clients (e.g., CodeGen) will perform the
3148     // necessary iteration with these index variables.
3149     SmallVector<VarDecl *, 4> IndexVariables;
3150     QualType BaseType = Field->getType();
3151     QualType SizeType = SemaRef.Context.getSizeType();
3152     bool InitializingArray = false;
3153     while (const ConstantArrayType *Array
3154                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
3155       InitializingArray = true;
3156       // Create the iteration variable for this array index.
3157       IdentifierInfo *IterationVarName = 0;
3158       {
3159         SmallString<8> Str;
3160         llvm::raw_svector_ostream OS(Str);
3161         OS << "__i" << IndexVariables.size();
3162         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
3163       }
3164       VarDecl *IterationVar
3165         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
3166                           IterationVarName, SizeType,
3167                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
3168                           SC_None);
3169       IndexVariables.push_back(IterationVar);
3170 
3171       // Create a reference to the iteration variable.
3172       ExprResult IterationVarRef
3173         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
3174       assert(!IterationVarRef.isInvalid() &&
3175              "Reference to invented variable cannot fail!");
3176       IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
3177       assert(!IterationVarRef.isInvalid() &&
3178              "Conversion of invented variable cannot fail!");
3179 
3180       // Subscript the array with this iteration variable.
3181       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
3182                                                         IterationVarRef.take(),
3183                                                         Loc);
3184       if (CtorArg.isInvalid())
3185         return true;
3186 
3187       BaseType = Array->getElementType();
3188     }
3189 
3190     // The array subscript expression is an lvalue, which is wrong for moving.
3191     if (Moving && InitializingArray)
3192       CtorArg = CastForMoving(SemaRef, CtorArg.take());
3193 
3194     // Construct the entity that we will be initializing. For an array, this
3195     // will be first element in the array, which may require several levels
3196     // of array-subscript entities.
3197     SmallVector<InitializedEntity, 4> Entities;
3198     Entities.reserve(1 + IndexVariables.size());
3199     if (Indirect)
3200       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
3201     else
3202       Entities.push_back(InitializedEntity::InitializeMember(Field));
3203     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
3204       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
3205                                                               0,
3206                                                               Entities.back()));
3207 
3208     // Direct-initialize to use the copy constructor.
3209     InitializationKind InitKind =
3210       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
3211 
3212     Expr *CtorArgE = CtorArg.takeAs<Expr>();
3213     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind, CtorArgE);
3214 
3215     ExprResult MemberInit
3216       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
3217                         MultiExprArg(&CtorArgE, 1));
3218     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3219     if (MemberInit.isInvalid())
3220       return true;
3221 
3222     if (Indirect) {
3223       assert(IndexVariables.size() == 0 &&
3224              "Indirect field improperly initialized");
3225       CXXMemberInit
3226         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3227                                                    Loc, Loc,
3228                                                    MemberInit.takeAs<Expr>(),
3229                                                    Loc);
3230     } else
3231       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
3232                                                  Loc, MemberInit.takeAs<Expr>(),
3233                                                  Loc,
3234                                                  IndexVariables.data(),
3235                                                  IndexVariables.size());
3236     return false;
3237   }
3238 
3239   assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
3240          "Unhandled implicit init kind!");
3241 
3242   QualType FieldBaseElementType =
3243     SemaRef.Context.getBaseElementType(Field->getType());
3244 
3245   if (FieldBaseElementType->isRecordType()) {
3246     InitializedEntity InitEntity
3247       = Indirect? InitializedEntity::InitializeMember(Indirect)
3248                 : InitializedEntity::InitializeMember(Field);
3249     InitializationKind InitKind =
3250       InitializationKind::CreateDefault(Loc);
3251 
3252     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
3253     ExprResult MemberInit =
3254       InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
3255 
3256     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3257     if (MemberInit.isInvalid())
3258       return true;
3259 
3260     if (Indirect)
3261       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3262                                                                Indirect, Loc,
3263                                                                Loc,
3264                                                                MemberInit.get(),
3265                                                                Loc);
3266     else
3267       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3268                                                                Field, Loc, Loc,
3269                                                                MemberInit.get(),
3270                                                                Loc);
3271     return false;
3272   }
3273 
3274   if (!Field->getParent()->isUnion()) {
3275     if (FieldBaseElementType->isReferenceType()) {
3276       SemaRef.Diag(Constructor->getLocation(),
3277                    diag::err_uninitialized_member_in_ctor)
3278       << (int)Constructor->isImplicit()
3279       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3280       << 0 << Field->getDeclName();
3281       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3282       return true;
3283     }
3284 
3285     if (FieldBaseElementType.isConstQualified()) {
3286       SemaRef.Diag(Constructor->getLocation(),
3287                    diag::err_uninitialized_member_in_ctor)
3288       << (int)Constructor->isImplicit()
3289       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3290       << 1 << Field->getDeclName();
3291       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3292       return true;
3293     }
3294   }
3295 
3296   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
3297       FieldBaseElementType->isObjCRetainableType() &&
3298       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
3299       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
3300     // ARC:
3301     //   Default-initialize Objective-C pointers to NULL.
3302     CXXMemberInit
3303       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3304                                                  Loc, Loc,
3305                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
3306                                                  Loc);
3307     return false;
3308   }
3309 
3310   // Nothing to initialize.
3311   CXXMemberInit = 0;
3312   return false;
3313 }
3314 
3315 namespace {
3316 struct BaseAndFieldInfo {
3317   Sema &S;
3318   CXXConstructorDecl *Ctor;
3319   bool AnyErrorsInInits;
3320   ImplicitInitializerKind IIK;
3321   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
3322   SmallVector<CXXCtorInitializer*, 8> AllToInit;
3323 
3324   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
3325     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
3326     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
3327     if (Generated && Ctor->isCopyConstructor())
3328       IIK = IIK_Copy;
3329     else if (Generated && Ctor->isMoveConstructor())
3330       IIK = IIK_Move;
3331     else if (Ctor->getInheritedConstructor())
3332       IIK = IIK_Inherit;
3333     else
3334       IIK = IIK_Default;
3335   }
3336 
3337   bool isImplicitCopyOrMove() const {
3338     switch (IIK) {
3339     case IIK_Copy:
3340     case IIK_Move:
3341       return true;
3342 
3343     case IIK_Default:
3344     case IIK_Inherit:
3345       return false;
3346     }
3347 
3348     llvm_unreachable("Invalid ImplicitInitializerKind!");
3349   }
3350 
3351   bool addFieldInitializer(CXXCtorInitializer *Init) {
3352     AllToInit.push_back(Init);
3353 
3354     // Check whether this initializer makes the field "used".
3355     if (Init->getInit()->HasSideEffects(S.Context))
3356       S.UnusedPrivateFields.remove(Init->getAnyMember());
3357 
3358     return false;
3359   }
3360 };
3361 }
3362 
3363 /// \brief Determine whether the given indirect field declaration is somewhere
3364 /// within an anonymous union.
3365 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
3366   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
3367                                       CEnd = F->chain_end();
3368        C != CEnd; ++C)
3369     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
3370       if (Record->isUnion())
3371         return true;
3372 
3373   return false;
3374 }
3375 
3376 /// \brief Determine whether the given type is an incomplete or zero-lenfgth
3377 /// array type.
3378 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
3379   if (T->isIncompleteArrayType())
3380     return true;
3381 
3382   while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
3383     if (!ArrayT->getSize())
3384       return true;
3385 
3386     T = ArrayT->getElementType();
3387   }
3388 
3389   return false;
3390 }
3391 
3392 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
3393                                     FieldDecl *Field,
3394                                     IndirectFieldDecl *Indirect = 0) {
3395   if (Field->isInvalidDecl())
3396     return false;
3397 
3398   // Overwhelmingly common case: we have a direct initializer for this field.
3399   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
3400     return Info.addFieldInitializer(Init);
3401 
3402   // C++11 [class.base.init]p8: if the entity is a non-static data member that
3403   // has a brace-or-equal-initializer, the entity is initialized as specified
3404   // in [dcl.init].
3405   if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
3406     Expr *DIE = CXXDefaultInitExpr::Create(SemaRef.Context,
3407                                            Info.Ctor->getLocation(), Field);
3408     CXXCtorInitializer *Init;
3409     if (Indirect)
3410       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3411                                                       SourceLocation(),
3412                                                       SourceLocation(), DIE,
3413                                                       SourceLocation());
3414     else
3415       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3416                                                       SourceLocation(),
3417                                                       SourceLocation(), DIE,
3418                                                       SourceLocation());
3419     return Info.addFieldInitializer(Init);
3420   }
3421 
3422   // Don't build an implicit initializer for union members if none was
3423   // explicitly specified.
3424   if (Field->getParent()->isUnion() ||
3425       (Indirect && isWithinAnonymousUnion(Indirect)))
3426     return false;
3427 
3428   // Don't initialize incomplete or zero-length arrays.
3429   if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
3430     return false;
3431 
3432   // Don't try to build an implicit initializer if there were semantic
3433   // errors in any of the initializers (and therefore we might be
3434   // missing some that the user actually wrote).
3435   if (Info.AnyErrorsInInits)
3436     return false;
3437 
3438   CXXCtorInitializer *Init = 0;
3439   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
3440                                      Indirect, Init))
3441     return true;
3442 
3443   if (!Init)
3444     return false;
3445 
3446   return Info.addFieldInitializer(Init);
3447 }
3448 
3449 bool
3450 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
3451                                CXXCtorInitializer *Initializer) {
3452   assert(Initializer->isDelegatingInitializer());
3453   Constructor->setNumCtorInitializers(1);
3454   CXXCtorInitializer **initializer =
3455     new (Context) CXXCtorInitializer*[1];
3456   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
3457   Constructor->setCtorInitializers(initializer);
3458 
3459   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
3460     MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
3461     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
3462   }
3463 
3464   DelegatingCtorDecls.push_back(Constructor);
3465 
3466   return false;
3467 }
3468 
3469 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
3470                                ArrayRef<CXXCtorInitializer *> Initializers) {
3471   if (Constructor->isDependentContext()) {
3472     // Just store the initializers as written, they will be checked during
3473     // instantiation.
3474     if (!Initializers.empty()) {
3475       Constructor->setNumCtorInitializers(Initializers.size());
3476       CXXCtorInitializer **baseOrMemberInitializers =
3477         new (Context) CXXCtorInitializer*[Initializers.size()];
3478       memcpy(baseOrMemberInitializers, Initializers.data(),
3479              Initializers.size() * sizeof(CXXCtorInitializer*));
3480       Constructor->setCtorInitializers(baseOrMemberInitializers);
3481     }
3482 
3483     // Let template instantiation know whether we had errors.
3484     if (AnyErrors)
3485       Constructor->setInvalidDecl();
3486 
3487     return false;
3488   }
3489 
3490   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
3491 
3492   // We need to build the initializer AST according to order of construction
3493   // and not what user specified in the Initializers list.
3494   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
3495   if (!ClassDecl)
3496     return true;
3497 
3498   bool HadError = false;
3499 
3500   for (unsigned i = 0; i < Initializers.size(); i++) {
3501     CXXCtorInitializer *Member = Initializers[i];
3502 
3503     if (Member->isBaseInitializer())
3504       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
3505     else
3506       Info.AllBaseFields[Member->getAnyMember()] = Member;
3507   }
3508 
3509   // Keep track of the direct virtual bases.
3510   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
3511   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
3512        E = ClassDecl->bases_end(); I != E; ++I) {
3513     if (I->isVirtual())
3514       DirectVBases.insert(I);
3515   }
3516 
3517   // Push virtual bases before others.
3518   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3519        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3520 
3521     if (CXXCtorInitializer *Value
3522         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
3523       // [class.base.init]p7, per DR257:
3524       //   A mem-initializer where the mem-initializer-id names a virtual base
3525       //   class is ignored during execution of a constructor of any class that
3526       //   is not the most derived class.
3527       if (ClassDecl->isAbstract()) {
3528         // FIXME: Provide a fixit to remove the base specifier. This requires
3529         // tracking the location of the associated comma for a base specifier.
3530         Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored)
3531           << VBase->getType() << ClassDecl;
3532         DiagnoseAbstractType(ClassDecl);
3533       }
3534 
3535       Info.AllToInit.push_back(Value);
3536     } else if (!AnyErrors && !ClassDecl->isAbstract()) {
3537       // [class.base.init]p8, per DR257:
3538       //   If a given [...] base class is not named by a mem-initializer-id
3539       //   [...] and the entity is not a virtual base class of an abstract
3540       //   class, then [...] the entity is default-initialized.
3541       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
3542       CXXCtorInitializer *CXXBaseInit;
3543       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3544                                        VBase, IsInheritedVirtualBase,
3545                                        CXXBaseInit)) {
3546         HadError = true;
3547         continue;
3548       }
3549 
3550       Info.AllToInit.push_back(CXXBaseInit);
3551     }
3552   }
3553 
3554   // Non-virtual bases.
3555   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3556        E = ClassDecl->bases_end(); Base != E; ++Base) {
3557     // Virtuals are in the virtual base list and already constructed.
3558     if (Base->isVirtual())
3559       continue;
3560 
3561     if (CXXCtorInitializer *Value
3562           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
3563       Info.AllToInit.push_back(Value);
3564     } else if (!AnyErrors) {
3565       CXXCtorInitializer *CXXBaseInit;
3566       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3567                                        Base, /*IsInheritedVirtualBase=*/false,
3568                                        CXXBaseInit)) {
3569         HadError = true;
3570         continue;
3571       }
3572 
3573       Info.AllToInit.push_back(CXXBaseInit);
3574     }
3575   }
3576 
3577   // Fields.
3578   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3579                                MemEnd = ClassDecl->decls_end();
3580        Mem != MemEnd; ++Mem) {
3581     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
3582       // C++ [class.bit]p2:
3583       //   A declaration for a bit-field that omits the identifier declares an
3584       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
3585       //   initialized.
3586       if (F->isUnnamedBitfield())
3587         continue;
3588 
3589       // If we're not generating the implicit copy/move constructor, then we'll
3590       // handle anonymous struct/union fields based on their individual
3591       // indirect fields.
3592       if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
3593         continue;
3594 
3595       if (CollectFieldInitializer(*this, Info, F))
3596         HadError = true;
3597       continue;
3598     }
3599 
3600     // Beyond this point, we only consider default initialization.
3601     if (Info.isImplicitCopyOrMove())
3602       continue;
3603 
3604     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
3605       if (F->getType()->isIncompleteArrayType()) {
3606         assert(ClassDecl->hasFlexibleArrayMember() &&
3607                "Incomplete array type is not valid");
3608         continue;
3609       }
3610 
3611       // Initialize each field of an anonymous struct individually.
3612       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
3613         HadError = true;
3614 
3615       continue;
3616     }
3617   }
3618 
3619   unsigned NumInitializers = Info.AllToInit.size();
3620   if (NumInitializers > 0) {
3621     Constructor->setNumCtorInitializers(NumInitializers);
3622     CXXCtorInitializer **baseOrMemberInitializers =
3623       new (Context) CXXCtorInitializer*[NumInitializers];
3624     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
3625            NumInitializers * sizeof(CXXCtorInitializer*));
3626     Constructor->setCtorInitializers(baseOrMemberInitializers);
3627 
3628     // Constructors implicitly reference the base and member
3629     // destructors.
3630     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
3631                                            Constructor->getParent());
3632   }
3633 
3634   return HadError;
3635 }
3636 
3637 static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
3638   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
3639     const RecordDecl *RD = RT->getDecl();
3640     if (RD->isAnonymousStructOrUnion()) {
3641       for (RecordDecl::field_iterator Field = RD->field_begin(),
3642           E = RD->field_end(); Field != E; ++Field)
3643         PopulateKeysForFields(*Field, IdealInits);
3644       return;
3645     }
3646   }
3647   IdealInits.push_back(Field);
3648 }
3649 
3650 static const void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
3651   return Context.getCanonicalType(BaseType).getTypePtr();
3652 }
3653 
3654 static const void *GetKeyForMember(ASTContext &Context,
3655                                    CXXCtorInitializer *Member) {
3656   if (!Member->isAnyMemberInitializer())
3657     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
3658 
3659   return Member->getAnyMember();
3660 }
3661 
3662 static void DiagnoseBaseOrMemInitializerOrder(
3663     Sema &SemaRef, const CXXConstructorDecl *Constructor,
3664     ArrayRef<CXXCtorInitializer *> Inits) {
3665   if (Constructor->getDeclContext()->isDependentContext())
3666     return;
3667 
3668   // Don't check initializers order unless the warning is enabled at the
3669   // location of at least one initializer.
3670   bool ShouldCheckOrder = false;
3671   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3672     CXXCtorInitializer *Init = Inits[InitIndex];
3673     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
3674                                          Init->getSourceLocation())
3675           != DiagnosticsEngine::Ignored) {
3676       ShouldCheckOrder = true;
3677       break;
3678     }
3679   }
3680   if (!ShouldCheckOrder)
3681     return;
3682 
3683   // Build the list of bases and members in the order that they'll
3684   // actually be initialized.  The explicit initializers should be in
3685   // this same order but may be missing things.
3686   SmallVector<const void*, 32> IdealInitKeys;
3687 
3688   const CXXRecordDecl *ClassDecl = Constructor->getParent();
3689 
3690   // 1. Virtual bases.
3691   for (CXXRecordDecl::base_class_const_iterator VBase =
3692        ClassDecl->vbases_begin(),
3693        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3694     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
3695 
3696   // 2. Non-virtual bases.
3697   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3698        E = ClassDecl->bases_end(); Base != E; ++Base) {
3699     if (Base->isVirtual())
3700       continue;
3701     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
3702   }
3703 
3704   // 3. Direct fields.
3705   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3706        E = ClassDecl->field_end(); Field != E; ++Field) {
3707     if (Field->isUnnamedBitfield())
3708       continue;
3709 
3710     PopulateKeysForFields(*Field, IdealInitKeys);
3711   }
3712 
3713   unsigned NumIdealInits = IdealInitKeys.size();
3714   unsigned IdealIndex = 0;
3715 
3716   CXXCtorInitializer *PrevInit = 0;
3717   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3718     CXXCtorInitializer *Init = Inits[InitIndex];
3719     const void *InitKey = GetKeyForMember(SemaRef.Context, Init);
3720 
3721     // Scan forward to try to find this initializer in the idealized
3722     // initializers list.
3723     for (; IdealIndex != NumIdealInits; ++IdealIndex)
3724       if (InitKey == IdealInitKeys[IdealIndex])
3725         break;
3726 
3727     // If we didn't find this initializer, it must be because we
3728     // scanned past it on a previous iteration.  That can only
3729     // happen if we're out of order;  emit a warning.
3730     if (IdealIndex == NumIdealInits && PrevInit) {
3731       Sema::SemaDiagnosticBuilder D =
3732         SemaRef.Diag(PrevInit->getSourceLocation(),
3733                      diag::warn_initializer_out_of_order);
3734 
3735       if (PrevInit->isAnyMemberInitializer())
3736         D << 0 << PrevInit->getAnyMember()->getDeclName();
3737       else
3738         D << 1 << PrevInit->getTypeSourceInfo()->getType();
3739 
3740       if (Init->isAnyMemberInitializer())
3741         D << 0 << Init->getAnyMember()->getDeclName();
3742       else
3743         D << 1 << Init->getTypeSourceInfo()->getType();
3744 
3745       // Move back to the initializer's location in the ideal list.
3746       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
3747         if (InitKey == IdealInitKeys[IdealIndex])
3748           break;
3749 
3750       assert(IdealIndex != NumIdealInits &&
3751              "initializer not found in initializer list");
3752     }
3753 
3754     PrevInit = Init;
3755   }
3756 }
3757 
3758 namespace {
3759 bool CheckRedundantInit(Sema &S,
3760                         CXXCtorInitializer *Init,
3761                         CXXCtorInitializer *&PrevInit) {
3762   if (!PrevInit) {
3763     PrevInit = Init;
3764     return false;
3765   }
3766 
3767   if (FieldDecl *Field = Init->getAnyMember())
3768     S.Diag(Init->getSourceLocation(),
3769            diag::err_multiple_mem_initialization)
3770       << Field->getDeclName()
3771       << Init->getSourceRange();
3772   else {
3773     const Type *BaseClass = Init->getBaseClass();
3774     assert(BaseClass && "neither field nor base");
3775     S.Diag(Init->getSourceLocation(),
3776            diag::err_multiple_base_initialization)
3777       << QualType(BaseClass, 0)
3778       << Init->getSourceRange();
3779   }
3780   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
3781     << 0 << PrevInit->getSourceRange();
3782 
3783   return true;
3784 }
3785 
3786 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
3787 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
3788 
3789 bool CheckRedundantUnionInit(Sema &S,
3790                              CXXCtorInitializer *Init,
3791                              RedundantUnionMap &Unions) {
3792   FieldDecl *Field = Init->getAnyMember();
3793   RecordDecl *Parent = Field->getParent();
3794   NamedDecl *Child = Field;
3795 
3796   while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
3797     if (Parent->isUnion()) {
3798       UnionEntry &En = Unions[Parent];
3799       if (En.first && En.first != Child) {
3800         S.Diag(Init->getSourceLocation(),
3801                diag::err_multiple_mem_union_initialization)
3802           << Field->getDeclName()
3803           << Init->getSourceRange();
3804         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
3805           << 0 << En.second->getSourceRange();
3806         return true;
3807       }
3808       if (!En.first) {
3809         En.first = Child;
3810         En.second = Init;
3811       }
3812       if (!Parent->isAnonymousStructOrUnion())
3813         return false;
3814     }
3815 
3816     Child = Parent;
3817     Parent = cast<RecordDecl>(Parent->getDeclContext());
3818   }
3819 
3820   return false;
3821 }
3822 }
3823 
3824 /// ActOnMemInitializers - Handle the member initializers for a constructor.
3825 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
3826                                 SourceLocation ColonLoc,
3827                                 ArrayRef<CXXCtorInitializer*> MemInits,
3828                                 bool AnyErrors) {
3829   if (!ConstructorDecl)
3830     return;
3831 
3832   AdjustDeclIfTemplate(ConstructorDecl);
3833 
3834   CXXConstructorDecl *Constructor
3835     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
3836 
3837   if (!Constructor) {
3838     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
3839     return;
3840   }
3841 
3842   // Mapping for the duplicate initializers check.
3843   // For member initializers, this is keyed with a FieldDecl*.
3844   // For base initializers, this is keyed with a Type*.
3845   llvm::DenseMap<const void *, CXXCtorInitializer *> Members;
3846 
3847   // Mapping for the inconsistent anonymous-union initializers check.
3848   RedundantUnionMap MemberUnions;
3849 
3850   bool HadError = false;
3851   for (unsigned i = 0; i < MemInits.size(); i++) {
3852     CXXCtorInitializer *Init = MemInits[i];
3853 
3854     // Set the source order index.
3855     Init->setSourceOrder(i);
3856 
3857     if (Init->isAnyMemberInitializer()) {
3858       FieldDecl *Field = Init->getAnyMember();
3859       if (CheckRedundantInit(*this, Init, Members[Field]) ||
3860           CheckRedundantUnionInit(*this, Init, MemberUnions))
3861         HadError = true;
3862     } else if (Init->isBaseInitializer()) {
3863       const void *Key =
3864           GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
3865       if (CheckRedundantInit(*this, Init, Members[Key]))
3866         HadError = true;
3867     } else {
3868       assert(Init->isDelegatingInitializer());
3869       // This must be the only initializer
3870       if (MemInits.size() != 1) {
3871         Diag(Init->getSourceLocation(),
3872              diag::err_delegating_initializer_alone)
3873           << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
3874         // We will treat this as being the only initializer.
3875       }
3876       SetDelegatingInitializer(Constructor, MemInits[i]);
3877       // Return immediately as the initializer is set.
3878       return;
3879     }
3880   }
3881 
3882   if (HadError)
3883     return;
3884 
3885   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
3886 
3887   SetCtorInitializers(Constructor, AnyErrors, MemInits);
3888 
3889   DiagnoseUninitializedFields(*this, Constructor);
3890 }
3891 
3892 void
3893 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
3894                                              CXXRecordDecl *ClassDecl) {
3895   // Ignore dependent contexts. Also ignore unions, since their members never
3896   // have destructors implicitly called.
3897   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3898     return;
3899 
3900   // FIXME: all the access-control diagnostics are positioned on the
3901   // field/base declaration.  That's probably good; that said, the
3902   // user might reasonably want to know why the destructor is being
3903   // emitted, and we currently don't say.
3904 
3905   // Non-static data members.
3906   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3907        E = ClassDecl->field_end(); I != E; ++I) {
3908     FieldDecl *Field = *I;
3909     if (Field->isInvalidDecl())
3910       continue;
3911 
3912     // Don't destroy incomplete or zero-length arrays.
3913     if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
3914       continue;
3915 
3916     QualType FieldType = Context.getBaseElementType(Field->getType());
3917 
3918     const RecordType* RT = FieldType->getAs<RecordType>();
3919     if (!RT)
3920       continue;
3921 
3922     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3923     if (FieldClassDecl->isInvalidDecl())
3924       continue;
3925     if (FieldClassDecl->hasIrrelevantDestructor())
3926       continue;
3927     // The destructor for an implicit anonymous union member is never invoked.
3928     if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
3929       continue;
3930 
3931     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
3932     assert(Dtor && "No dtor found for FieldClassDecl!");
3933     CheckDestructorAccess(Field->getLocation(), Dtor,
3934                           PDiag(diag::err_access_dtor_field)
3935                             << Field->getDeclName()
3936                             << FieldType);
3937 
3938     MarkFunctionReferenced(Location, Dtor);
3939     DiagnoseUseOfDecl(Dtor, Location);
3940   }
3941 
3942   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
3943 
3944   // Bases.
3945   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3946        E = ClassDecl->bases_end(); Base != E; ++Base) {
3947     // Bases are always records in a well-formed non-dependent class.
3948     const RecordType *RT = Base->getType()->getAs<RecordType>();
3949 
3950     // Remember direct virtual bases.
3951     if (Base->isVirtual())
3952       DirectVirtualBases.insert(RT);
3953 
3954     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3955     // If our base class is invalid, we probably can't get its dtor anyway.
3956     if (BaseClassDecl->isInvalidDecl())
3957       continue;
3958     if (BaseClassDecl->hasIrrelevantDestructor())
3959       continue;
3960 
3961     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3962     assert(Dtor && "No dtor found for BaseClassDecl!");
3963 
3964     // FIXME: caret should be on the start of the class name
3965     CheckDestructorAccess(Base->getLocStart(), Dtor,
3966                           PDiag(diag::err_access_dtor_base)
3967                             << Base->getType()
3968                             << Base->getSourceRange(),
3969                           Context.getTypeDeclType(ClassDecl));
3970 
3971     MarkFunctionReferenced(Location, Dtor);
3972     DiagnoseUseOfDecl(Dtor, Location);
3973   }
3974 
3975   // Virtual bases.
3976   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3977        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3978 
3979     // Bases are always records in a well-formed non-dependent class.
3980     const RecordType *RT = VBase->getType()->castAs<RecordType>();
3981 
3982     // Ignore direct virtual bases.
3983     if (DirectVirtualBases.count(RT))
3984       continue;
3985 
3986     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3987     // If our base class is invalid, we probably can't get its dtor anyway.
3988     if (BaseClassDecl->isInvalidDecl())
3989       continue;
3990     if (BaseClassDecl->hasIrrelevantDestructor())
3991       continue;
3992 
3993     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3994     assert(Dtor && "No dtor found for BaseClassDecl!");
3995     if (CheckDestructorAccess(
3996             ClassDecl->getLocation(), Dtor,
3997             PDiag(diag::err_access_dtor_vbase)
3998                 << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
3999             Context.getTypeDeclType(ClassDecl)) ==
4000         AR_accessible) {
4001       CheckDerivedToBaseConversion(
4002           Context.getTypeDeclType(ClassDecl), VBase->getType(),
4003           diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
4004           SourceRange(), DeclarationName(), 0);
4005     }
4006 
4007     MarkFunctionReferenced(Location, Dtor);
4008     DiagnoseUseOfDecl(Dtor, Location);
4009   }
4010 }
4011 
4012 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
4013   if (!CDtorDecl)
4014     return;
4015 
4016   if (CXXConstructorDecl *Constructor
4017       = dyn_cast<CXXConstructorDecl>(CDtorDecl)) {
4018     SetCtorInitializers(Constructor, /*AnyErrors=*/false);
4019     DiagnoseUninitializedFields(*this, Constructor);
4020   }
4021 }
4022 
4023 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
4024                                   unsigned DiagID, AbstractDiagSelID SelID) {
4025   class NonAbstractTypeDiagnoser : public TypeDiagnoser {
4026     unsigned DiagID;
4027     AbstractDiagSelID SelID;
4028 
4029   public:
4030     NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
4031       : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
4032 
4033     void diagnose(Sema &S, SourceLocation Loc, QualType T) LLVM_OVERRIDE {
4034       if (Suppressed) return;
4035       if (SelID == -1)
4036         S.Diag(Loc, DiagID) << T;
4037       else
4038         S.Diag(Loc, DiagID) << SelID << T;
4039     }
4040   } Diagnoser(DiagID, SelID);
4041 
4042   return RequireNonAbstractType(Loc, T, Diagnoser);
4043 }
4044 
4045 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
4046                                   TypeDiagnoser &Diagnoser) {
4047   if (!getLangOpts().CPlusPlus)
4048     return false;
4049 
4050   if (const ArrayType *AT = Context.getAsArrayType(T))
4051     return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
4052 
4053   if (const PointerType *PT = T->getAs<PointerType>()) {
4054     // Find the innermost pointer type.
4055     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
4056       PT = T;
4057 
4058     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
4059       return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
4060   }
4061 
4062   const RecordType *RT = T->getAs<RecordType>();
4063   if (!RT)
4064     return false;
4065 
4066   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
4067 
4068   // We can't answer whether something is abstract until it has a
4069   // definition.  If it's currently being defined, we'll walk back
4070   // over all the declarations when we have a full definition.
4071   const CXXRecordDecl *Def = RD->getDefinition();
4072   if (!Def || Def->isBeingDefined())
4073     return false;
4074 
4075   if (!RD->isAbstract())
4076     return false;
4077 
4078   Diagnoser.diagnose(*this, Loc, T);
4079   DiagnoseAbstractType(RD);
4080 
4081   return true;
4082 }
4083 
4084 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
4085   // Check if we've already emitted the list of pure virtual functions
4086   // for this class.
4087   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
4088     return;
4089 
4090   // If the diagnostic is suppressed, don't emit the notes. We're only
4091   // going to emit them once, so try to attach them to a diagnostic we're
4092   // actually going to show.
4093   if (Diags.isLastDiagnosticIgnored())
4094     return;
4095 
4096   CXXFinalOverriderMap FinalOverriders;
4097   RD->getFinalOverriders(FinalOverriders);
4098 
4099   // Keep a set of seen pure methods so we won't diagnose the same method
4100   // more than once.
4101   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
4102 
4103   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
4104                                    MEnd = FinalOverriders.end();
4105        M != MEnd;
4106        ++M) {
4107     for (OverridingMethods::iterator SO = M->second.begin(),
4108                                   SOEnd = M->second.end();
4109          SO != SOEnd; ++SO) {
4110       // C++ [class.abstract]p4:
4111       //   A class is abstract if it contains or inherits at least one
4112       //   pure virtual function for which the final overrider is pure
4113       //   virtual.
4114 
4115       //
4116       if (SO->second.size() != 1)
4117         continue;
4118 
4119       if (!SO->second.front().Method->isPure())
4120         continue;
4121 
4122       if (!SeenPureMethods.insert(SO->second.front().Method))
4123         continue;
4124 
4125       Diag(SO->second.front().Method->getLocation(),
4126            diag::note_pure_virtual_function)
4127         << SO->second.front().Method->getDeclName() << RD->getDeclName();
4128     }
4129   }
4130 
4131   if (!PureVirtualClassDiagSet)
4132     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
4133   PureVirtualClassDiagSet->insert(RD);
4134 }
4135 
4136 namespace {
4137 struct AbstractUsageInfo {
4138   Sema &S;
4139   CXXRecordDecl *Record;
4140   CanQualType AbstractType;
4141   bool Invalid;
4142 
4143   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
4144     : S(S), Record(Record),
4145       AbstractType(S.Context.getCanonicalType(
4146                    S.Context.getTypeDeclType(Record))),
4147       Invalid(false) {}
4148 
4149   void DiagnoseAbstractType() {
4150     if (Invalid) return;
4151     S.DiagnoseAbstractType(Record);
4152     Invalid = true;
4153   }
4154 
4155   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
4156 };
4157 
4158 struct CheckAbstractUsage {
4159   AbstractUsageInfo &Info;
4160   const NamedDecl *Ctx;
4161 
4162   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
4163     : Info(Info), Ctx(Ctx) {}
4164 
4165   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4166     switch (TL.getTypeLocClass()) {
4167 #define ABSTRACT_TYPELOC(CLASS, PARENT)
4168 #define TYPELOC(CLASS, PARENT) \
4169     case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
4170 #include "clang/AST/TypeLocNodes.def"
4171     }
4172   }
4173 
4174   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4175     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
4176     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
4177       if (!TL.getArg(I))
4178         continue;
4179 
4180       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
4181       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
4182     }
4183   }
4184 
4185   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4186     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
4187   }
4188 
4189   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4190     // Visit the type parameters from a permissive context.
4191     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
4192       TemplateArgumentLoc TAL = TL.getArgLoc(I);
4193       if (TAL.getArgument().getKind() == TemplateArgument::Type)
4194         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
4195           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
4196       // TODO: other template argument types?
4197     }
4198   }
4199 
4200   // Visit pointee types from a permissive context.
4201 #define CheckPolymorphic(Type) \
4202   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
4203     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
4204   }
4205   CheckPolymorphic(PointerTypeLoc)
4206   CheckPolymorphic(ReferenceTypeLoc)
4207   CheckPolymorphic(MemberPointerTypeLoc)
4208   CheckPolymorphic(BlockPointerTypeLoc)
4209   CheckPolymorphic(AtomicTypeLoc)
4210 
4211   /// Handle all the types we haven't given a more specific
4212   /// implementation for above.
4213   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4214     // Every other kind of type that we haven't called out already
4215     // that has an inner type is either (1) sugar or (2) contains that
4216     // inner type in some way as a subobject.
4217     if (TypeLoc Next = TL.getNextTypeLoc())
4218       return Visit(Next, Sel);
4219 
4220     // If there's no inner type and we're in a permissive context,
4221     // don't diagnose.
4222     if (Sel == Sema::AbstractNone) return;
4223 
4224     // Check whether the type matches the abstract type.
4225     QualType T = TL.getType();
4226     if (T->isArrayType()) {
4227       Sel = Sema::AbstractArrayType;
4228       T = Info.S.Context.getBaseElementType(T);
4229     }
4230     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
4231     if (CT != Info.AbstractType) return;
4232 
4233     // It matched; do some magic.
4234     if (Sel == Sema::AbstractArrayType) {
4235       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
4236         << T << TL.getSourceRange();
4237     } else {
4238       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
4239         << Sel << T << TL.getSourceRange();
4240     }
4241     Info.DiagnoseAbstractType();
4242   }
4243 };
4244 
4245 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
4246                                   Sema::AbstractDiagSelID Sel) {
4247   CheckAbstractUsage(*this, D).Visit(TL, Sel);
4248 }
4249 
4250 }
4251 
4252 /// Check for invalid uses of an abstract type in a method declaration.
4253 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4254                                     CXXMethodDecl *MD) {
4255   // No need to do the check on definitions, which require that
4256   // the return/param types be complete.
4257   if (MD->doesThisDeclarationHaveABody())
4258     return;
4259 
4260   // For safety's sake, just ignore it if we don't have type source
4261   // information.  This should never happen for non-implicit methods,
4262   // but...
4263   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
4264     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
4265 }
4266 
4267 /// Check for invalid uses of an abstract type within a class definition.
4268 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4269                                     CXXRecordDecl *RD) {
4270   for (CXXRecordDecl::decl_iterator
4271          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
4272     Decl *D = *I;
4273     if (D->isImplicit()) continue;
4274 
4275     // Methods and method templates.
4276     if (isa<CXXMethodDecl>(D)) {
4277       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
4278     } else if (isa<FunctionTemplateDecl>(D)) {
4279       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
4280       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
4281 
4282     // Fields and static variables.
4283     } else if (isa<FieldDecl>(D)) {
4284       FieldDecl *FD = cast<FieldDecl>(D);
4285       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
4286         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
4287     } else if (isa<VarDecl>(D)) {
4288       VarDecl *VD = cast<VarDecl>(D);
4289       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
4290         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
4291 
4292     // Nested classes and class templates.
4293     } else if (isa<CXXRecordDecl>(D)) {
4294       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
4295     } else if (isa<ClassTemplateDecl>(D)) {
4296       CheckAbstractClassUsage(Info,
4297                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
4298     }
4299   }
4300 }
4301 
4302 /// \brief Perform semantic checks on a class definition that has been
4303 /// completing, introducing implicitly-declared members, checking for
4304 /// abstract types, etc.
4305 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
4306   if (!Record)
4307     return;
4308 
4309   if (Record->isAbstract() && !Record->isInvalidDecl()) {
4310     AbstractUsageInfo Info(*this, Record);
4311     CheckAbstractClassUsage(Info, Record);
4312   }
4313 
4314   // If this is not an aggregate type and has no user-declared constructor,
4315   // complain about any non-static data members of reference or const scalar
4316   // type, since they will never get initializers.
4317   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
4318       !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
4319       !Record->isLambda()) {
4320     bool Complained = false;
4321     for (RecordDecl::field_iterator F = Record->field_begin(),
4322                                  FEnd = Record->field_end();
4323          F != FEnd; ++F) {
4324       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
4325         continue;
4326 
4327       if (F->getType()->isReferenceType() ||
4328           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
4329         if (!Complained) {
4330           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
4331             << Record->getTagKind() << Record;
4332           Complained = true;
4333         }
4334 
4335         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
4336           << F->getType()->isReferenceType()
4337           << F->getDeclName();
4338       }
4339     }
4340   }
4341 
4342   if (Record->isDynamicClass() && !Record->isDependentType())
4343     DynamicClasses.push_back(Record);
4344 
4345   if (Record->getIdentifier()) {
4346     // C++ [class.mem]p13:
4347     //   If T is the name of a class, then each of the following shall have a
4348     //   name different from T:
4349     //     - every member of every anonymous union that is a member of class T.
4350     //
4351     // C++ [class.mem]p14:
4352     //   In addition, if class T has a user-declared constructor (12.1), every
4353     //   non-static data member of class T shall have a name different from T.
4354     DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
4355     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
4356          ++I) {
4357       NamedDecl *D = *I;
4358       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
4359           isa<IndirectFieldDecl>(D)) {
4360         Diag(D->getLocation(), diag::err_member_name_of_class)
4361           << D->getDeclName();
4362         break;
4363       }
4364     }
4365   }
4366 
4367   // Warn if the class has virtual methods but non-virtual public destructor.
4368   if (Record->isPolymorphic() && !Record->isDependentType()) {
4369     CXXDestructorDecl *dtor = Record->getDestructor();
4370     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
4371       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
4372            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
4373   }
4374 
4375   if (Record->isAbstract()) {
4376     if (FinalAttr *FA = Record->getAttr<FinalAttr>()) {
4377       Diag(Record->getLocation(), diag::warn_abstract_final_class)
4378         << FA->isSpelledAsSealed();
4379       DiagnoseAbstractType(Record);
4380     }
4381   }
4382 
4383   if (!Record->isDependentType()) {
4384     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4385                                      MEnd = Record->method_end();
4386          M != MEnd; ++M) {
4387       // See if a method overloads virtual methods in a base
4388       // class without overriding any.
4389       if (!M->isStatic())
4390         DiagnoseHiddenVirtualMethods(*M);
4391 
4392       // Check whether the explicitly-defaulted special members are valid.
4393       if (!M->isInvalidDecl() && M->isExplicitlyDefaulted())
4394         CheckExplicitlyDefaultedSpecialMember(*M);
4395 
4396       // For an explicitly defaulted or deleted special member, we defer
4397       // determining triviality until the class is complete. That time is now!
4398       if (!M->isImplicit() && !M->isUserProvided()) {
4399         CXXSpecialMember CSM = getSpecialMember(*M);
4400         if (CSM != CXXInvalid) {
4401           M->setTrivial(SpecialMemberIsTrivial(*M, CSM));
4402 
4403           // Inform the class that we've finished declaring this member.
4404           Record->finishedDefaultedOrDeletedMember(*M);
4405         }
4406       }
4407     }
4408   }
4409 
4410   // C++11 [dcl.constexpr]p8: A constexpr specifier for a non-static member
4411   // function that is not a constructor declares that member function to be
4412   // const. [...] The class of which that function is a member shall be
4413   // a literal type.
4414   //
4415   // If the class has virtual bases, any constexpr members will already have
4416   // been diagnosed by the checks performed on the member declaration, so
4417   // suppress this (less useful) diagnostic.
4418   //
4419   // We delay this until we know whether an explicitly-defaulted (or deleted)
4420   // destructor for the class is trivial.
4421   if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
4422       !Record->isLiteral() && !Record->getNumVBases()) {
4423     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4424                                      MEnd = Record->method_end();
4425          M != MEnd; ++M) {
4426       if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
4427         switch (Record->getTemplateSpecializationKind()) {
4428         case TSK_ImplicitInstantiation:
4429         case TSK_ExplicitInstantiationDeclaration:
4430         case TSK_ExplicitInstantiationDefinition:
4431           // If a template instantiates to a non-literal type, but its members
4432           // instantiate to constexpr functions, the template is technically
4433           // ill-formed, but we allow it for sanity.
4434           continue;
4435 
4436         case TSK_Undeclared:
4437         case TSK_ExplicitSpecialization:
4438           RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
4439                              diag::err_constexpr_method_non_literal);
4440           break;
4441         }
4442 
4443         // Only produce one error per class.
4444         break;
4445       }
4446     }
4447   }
4448 
4449   // Check to see if we're trying to lay out a struct using the ms_struct
4450   // attribute that is dynamic.
4451   if (Record->isMsStruct(Context) && Record->isDynamicClass()) {
4452     Diag(Record->getLocation(), diag::warn_pragma_ms_struct_failed);
4453     Record->dropAttr<MsStructAttr>();
4454   }
4455 
4456   // Declare inheriting constructors. We do this eagerly here because:
4457   // - The standard requires an eager diagnostic for conflicting inheriting
4458   //   constructors from different classes.
4459   // - The lazy declaration of the other implicit constructors is so as to not
4460   //   waste space and performance on classes that are not meant to be
4461   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
4462   //   have inheriting constructors.
4463   DeclareInheritingConstructors(Record);
4464 }
4465 
4466 /// Look up the special member function that would be called by a special
4467 /// member function for a subobject of class type.
4468 ///
4469 /// \param Class The class type of the subobject.
4470 /// \param CSM The kind of special member function.
4471 /// \param FieldQuals If the subobject is a field, its cv-qualifiers.
4472 /// \param ConstRHS True if this is a copy operation with a const object
4473 ///        on its RHS, that is, if the argument to the outer special member
4474 ///        function is 'const' and this is not a field marked 'mutable'.
4475 static Sema::SpecialMemberOverloadResult *lookupCallFromSpecialMember(
4476     Sema &S, CXXRecordDecl *Class, Sema::CXXSpecialMember CSM,
4477     unsigned FieldQuals, bool ConstRHS) {
4478   unsigned LHSQuals = 0;
4479   if (CSM == Sema::CXXCopyAssignment || CSM == Sema::CXXMoveAssignment)
4480     LHSQuals = FieldQuals;
4481 
4482   unsigned RHSQuals = FieldQuals;
4483   if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
4484     RHSQuals = 0;
4485   else if (ConstRHS)
4486     RHSQuals |= Qualifiers::Const;
4487 
4488   return S.LookupSpecialMember(Class, CSM,
4489                                RHSQuals & Qualifiers::Const,
4490                                RHSQuals & Qualifiers::Volatile,
4491                                false,
4492                                LHSQuals & Qualifiers::Const,
4493                                LHSQuals & Qualifiers::Volatile);
4494 }
4495 
4496 /// Is the special member function which would be selected to perform the
4497 /// specified operation on the specified class type a constexpr constructor?
4498 static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4499                                      Sema::CXXSpecialMember CSM,
4500                                      unsigned Quals, bool ConstRHS) {
4501   Sema::SpecialMemberOverloadResult *SMOR =
4502       lookupCallFromSpecialMember(S, ClassDecl, CSM, Quals, ConstRHS);
4503   if (!SMOR || !SMOR->getMethod())
4504     // A constructor we wouldn't select can't be "involved in initializing"
4505     // anything.
4506     return true;
4507   return SMOR->getMethod()->isConstexpr();
4508 }
4509 
4510 /// Determine whether the specified special member function would be constexpr
4511 /// if it were implicitly defined.
4512 static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4513                                               Sema::CXXSpecialMember CSM,
4514                                               bool ConstArg) {
4515   if (!S.getLangOpts().CPlusPlus11)
4516     return false;
4517 
4518   // C++11 [dcl.constexpr]p4:
4519   // In the definition of a constexpr constructor [...]
4520   bool Ctor = true;
4521   switch (CSM) {
4522   case Sema::CXXDefaultConstructor:
4523     // Since default constructor lookup is essentially trivial (and cannot
4524     // involve, for instance, template instantiation), we compute whether a
4525     // defaulted default constructor is constexpr directly within CXXRecordDecl.
4526     //
4527     // This is important for performance; we need to know whether the default
4528     // constructor is constexpr to determine whether the type is a literal type.
4529     return ClassDecl->defaultedDefaultConstructorIsConstexpr();
4530 
4531   case Sema::CXXCopyConstructor:
4532   case Sema::CXXMoveConstructor:
4533     // For copy or move constructors, we need to perform overload resolution.
4534     break;
4535 
4536   case Sema::CXXCopyAssignment:
4537   case Sema::CXXMoveAssignment:
4538     if (!S.getLangOpts().CPlusPlus1y)
4539       return false;
4540     // In C++1y, we need to perform overload resolution.
4541     Ctor = false;
4542     break;
4543 
4544   case Sema::CXXDestructor:
4545   case Sema::CXXInvalid:
4546     return false;
4547   }
4548 
4549   //   -- if the class is a non-empty union, or for each non-empty anonymous
4550   //      union member of a non-union class, exactly one non-static data member
4551   //      shall be initialized; [DR1359]
4552   //
4553   // If we squint, this is guaranteed, since exactly one non-static data member
4554   // will be initialized (if the constructor isn't deleted), we just don't know
4555   // which one.
4556   if (Ctor && ClassDecl->isUnion())
4557     return true;
4558 
4559   //   -- the class shall not have any virtual base classes;
4560   if (Ctor && ClassDecl->getNumVBases())
4561     return false;
4562 
4563   // C++1y [class.copy]p26:
4564   //   -- [the class] is a literal type, and
4565   if (!Ctor && !ClassDecl->isLiteral())
4566     return false;
4567 
4568   //   -- every constructor involved in initializing [...] base class
4569   //      sub-objects shall be a constexpr constructor;
4570   //   -- the assignment operator selected to copy/move each direct base
4571   //      class is a constexpr function, and
4572   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
4573                                        BEnd = ClassDecl->bases_end();
4574        B != BEnd; ++B) {
4575     const RecordType *BaseType = B->getType()->getAs<RecordType>();
4576     if (!BaseType) continue;
4577 
4578     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
4579     if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, 0, ConstArg))
4580       return false;
4581   }
4582 
4583   //   -- every constructor involved in initializing non-static data members
4584   //      [...] shall be a constexpr constructor;
4585   //   -- every non-static data member and base class sub-object shall be
4586   //      initialized
4587   //   -- for each non-static data member of X that is of class type (or array
4588   //      thereof), the assignment operator selected to copy/move that member is
4589   //      a constexpr function
4590   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
4591                                FEnd = ClassDecl->field_end();
4592        F != FEnd; ++F) {
4593     if (F->isInvalidDecl())
4594       continue;
4595     QualType BaseType = S.Context.getBaseElementType(F->getType());
4596     if (const RecordType *RecordTy = BaseType->getAs<RecordType>()) {
4597       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
4598       if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM,
4599                                     BaseType.getCVRQualifiers(),
4600                                     ConstArg && !F->isMutable()))
4601         return false;
4602     }
4603   }
4604 
4605   // All OK, it's constexpr!
4606   return true;
4607 }
4608 
4609 static Sema::ImplicitExceptionSpecification
4610 computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
4611   switch (S.getSpecialMember(MD)) {
4612   case Sema::CXXDefaultConstructor:
4613     return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
4614   case Sema::CXXCopyConstructor:
4615     return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
4616   case Sema::CXXCopyAssignment:
4617     return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
4618   case Sema::CXXMoveConstructor:
4619     return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
4620   case Sema::CXXMoveAssignment:
4621     return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
4622   case Sema::CXXDestructor:
4623     return S.ComputeDefaultedDtorExceptionSpec(MD);
4624   case Sema::CXXInvalid:
4625     break;
4626   }
4627   assert(cast<CXXConstructorDecl>(MD)->getInheritedConstructor() &&
4628          "only special members have implicit exception specs");
4629   return S.ComputeInheritingCtorExceptionSpec(cast<CXXConstructorDecl>(MD));
4630 }
4631 
4632 static void
4633 updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
4634                     const Sema::ImplicitExceptionSpecification &ExceptSpec) {
4635   FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
4636   ExceptSpec.getEPI(EPI);
4637   FD->setType(S.Context.getFunctionType(FPT->getResultType(),
4638                                         FPT->getArgTypes(), EPI));
4639 }
4640 
4641 static FunctionProtoType::ExtProtoInfo getImplicitMethodEPI(Sema &S,
4642                                                             CXXMethodDecl *MD) {
4643   FunctionProtoType::ExtProtoInfo EPI;
4644 
4645   // Build an exception specification pointing back at this member.
4646   EPI.ExceptionSpecType = EST_Unevaluated;
4647   EPI.ExceptionSpecDecl = MD;
4648 
4649   // Set the calling convention to the default for C++ instance methods.
4650   EPI.ExtInfo = EPI.ExtInfo.withCallingConv(
4651       S.Context.getDefaultCallingConvention(/*IsVariadic=*/false,
4652                                             /*IsCXXMethod=*/true));
4653   return EPI;
4654 }
4655 
4656 void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
4657   const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
4658   if (FPT->getExceptionSpecType() != EST_Unevaluated)
4659     return;
4660 
4661   // Evaluate the exception specification.
4662   ImplicitExceptionSpecification ExceptSpec =
4663       computeImplicitExceptionSpec(*this, Loc, MD);
4664 
4665   // Update the type of the special member to use it.
4666   updateExceptionSpec(*this, MD, FPT, ExceptSpec);
4667 
4668   // A user-provided destructor can be defined outside the class. When that
4669   // happens, be sure to update the exception specification on both
4670   // declarations.
4671   const FunctionProtoType *CanonicalFPT =
4672     MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
4673   if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
4674     updateExceptionSpec(*this, MD->getCanonicalDecl(),
4675                         CanonicalFPT, ExceptSpec);
4676 }
4677 
4678 void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
4679   CXXRecordDecl *RD = MD->getParent();
4680   CXXSpecialMember CSM = getSpecialMember(MD);
4681 
4682   assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
4683          "not an explicitly-defaulted special member");
4684 
4685   // Whether this was the first-declared instance of the constructor.
4686   // This affects whether we implicitly add an exception spec and constexpr.
4687   bool First = MD == MD->getCanonicalDecl();
4688 
4689   bool HadError = false;
4690 
4691   // C++11 [dcl.fct.def.default]p1:
4692   //   A function that is explicitly defaulted shall
4693   //     -- be a special member function (checked elsewhere),
4694   //     -- have the same type (except for ref-qualifiers, and except that a
4695   //        copy operation can take a non-const reference) as an implicit
4696   //        declaration, and
4697   //     -- not have default arguments.
4698   unsigned ExpectedParams = 1;
4699   if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
4700     ExpectedParams = 0;
4701   if (MD->getNumParams() != ExpectedParams) {
4702     // This also checks for default arguments: a copy or move constructor with a
4703     // default argument is classified as a default constructor, and assignment
4704     // operations and destructors can't have default arguments.
4705     Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
4706       << CSM << MD->getSourceRange();
4707     HadError = true;
4708   } else if (MD->isVariadic()) {
4709     Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
4710       << CSM << MD->getSourceRange();
4711     HadError = true;
4712   }
4713 
4714   const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
4715 
4716   bool CanHaveConstParam = false;
4717   if (CSM == CXXCopyConstructor)
4718     CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
4719   else if (CSM == CXXCopyAssignment)
4720     CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
4721 
4722   QualType ReturnType = Context.VoidTy;
4723   if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
4724     // Check for return type matching.
4725     ReturnType = Type->getResultType();
4726     QualType ExpectedReturnType =
4727         Context.getLValueReferenceType(Context.getTypeDeclType(RD));
4728     if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
4729       Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
4730         << (CSM == CXXMoveAssignment) << ExpectedReturnType;
4731       HadError = true;
4732     }
4733 
4734     // A defaulted special member cannot have cv-qualifiers.
4735     if (Type->getTypeQuals()) {
4736       Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
4737         << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus1y;
4738       HadError = true;
4739     }
4740   }
4741 
4742   // Check for parameter type matching.
4743   QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
4744   bool HasConstParam = false;
4745   if (ExpectedParams && ArgType->isReferenceType()) {
4746     // Argument must be reference to possibly-const T.
4747     QualType ReferentType = ArgType->getPointeeType();
4748     HasConstParam = ReferentType.isConstQualified();
4749 
4750     if (ReferentType.isVolatileQualified()) {
4751       Diag(MD->getLocation(),
4752            diag::err_defaulted_special_member_volatile_param) << CSM;
4753       HadError = true;
4754     }
4755 
4756     if (HasConstParam && !CanHaveConstParam) {
4757       if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
4758         Diag(MD->getLocation(),
4759              diag::err_defaulted_special_member_copy_const_param)
4760           << (CSM == CXXCopyAssignment);
4761         // FIXME: Explain why this special member can't be const.
4762       } else {
4763         Diag(MD->getLocation(),
4764              diag::err_defaulted_special_member_move_const_param)
4765           << (CSM == CXXMoveAssignment);
4766       }
4767       HadError = true;
4768     }
4769   } else if (ExpectedParams) {
4770     // A copy assignment operator can take its argument by value, but a
4771     // defaulted one cannot.
4772     assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
4773     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
4774     HadError = true;
4775   }
4776 
4777   // C++11 [dcl.fct.def.default]p2:
4778   //   An explicitly-defaulted function may be declared constexpr only if it
4779   //   would have been implicitly declared as constexpr,
4780   // Do not apply this rule to members of class templates, since core issue 1358
4781   // makes such functions always instantiate to constexpr functions. For
4782   // functions which cannot be constexpr (for non-constructors in C++11 and for
4783   // destructors in C++1y), this is checked elsewhere.
4784   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
4785                                                      HasConstParam);
4786   if ((getLangOpts().CPlusPlus1y ? !isa<CXXDestructorDecl>(MD)
4787                                  : isa<CXXConstructorDecl>(MD)) &&
4788       MD->isConstexpr() && !Constexpr &&
4789       MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
4790     Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
4791     // FIXME: Explain why the special member can't be constexpr.
4792     HadError = true;
4793   }
4794 
4795   //   and may have an explicit exception-specification only if it is compatible
4796   //   with the exception-specification on the implicit declaration.
4797   if (Type->hasExceptionSpec()) {
4798     // Delay the check if this is the first declaration of the special member,
4799     // since we may not have parsed some necessary in-class initializers yet.
4800     if (First) {
4801       // If the exception specification needs to be instantiated, do so now,
4802       // before we clobber it with an EST_Unevaluated specification below.
4803       if (Type->getExceptionSpecType() == EST_Uninstantiated) {
4804         InstantiateExceptionSpec(MD->getLocStart(), MD);
4805         Type = MD->getType()->getAs<FunctionProtoType>();
4806       }
4807       DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type));
4808     } else
4809       CheckExplicitlyDefaultedMemberExceptionSpec(MD, Type);
4810   }
4811 
4812   //   If a function is explicitly defaulted on its first declaration,
4813   if (First) {
4814     //  -- it is implicitly considered to be constexpr if the implicit
4815     //     definition would be,
4816     MD->setConstexpr(Constexpr);
4817 
4818     //  -- it is implicitly considered to have the same exception-specification
4819     //     as if it had been implicitly declared,
4820     FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
4821     EPI.ExceptionSpecType = EST_Unevaluated;
4822     EPI.ExceptionSpecDecl = MD;
4823     MD->setType(Context.getFunctionType(ReturnType,
4824                                         ArrayRef<QualType>(&ArgType,
4825                                                            ExpectedParams),
4826                                         EPI));
4827   }
4828 
4829   if (ShouldDeleteSpecialMember(MD, CSM)) {
4830     if (First) {
4831       SetDeclDeleted(MD, MD->getLocation());
4832     } else {
4833       // C++11 [dcl.fct.def.default]p4:
4834       //   [For a] user-provided explicitly-defaulted function [...] if such a
4835       //   function is implicitly defined as deleted, the program is ill-formed.
4836       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
4837       HadError = true;
4838     }
4839   }
4840 
4841   if (HadError)
4842     MD->setInvalidDecl();
4843 }
4844 
4845 /// Check whether the exception specification provided for an
4846 /// explicitly-defaulted special member matches the exception specification
4847 /// that would have been generated for an implicit special member, per
4848 /// C++11 [dcl.fct.def.default]p2.
4849 void Sema::CheckExplicitlyDefaultedMemberExceptionSpec(
4850     CXXMethodDecl *MD, const FunctionProtoType *SpecifiedType) {
4851   // Compute the implicit exception specification.
4852   CallingConv CC = Context.getDefaultCallingConvention(/*IsVariadic=*/false,
4853                                                        /*IsCXXMethod=*/true);
4854   FunctionProtoType::ExtProtoInfo EPI(CC);
4855   computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
4856   const FunctionProtoType *ImplicitType = cast<FunctionProtoType>(
4857     Context.getFunctionType(Context.VoidTy, None, EPI));
4858 
4859   // Ensure that it matches.
4860   CheckEquivalentExceptionSpec(
4861     PDiag(diag::err_incorrect_defaulted_exception_spec)
4862       << getSpecialMember(MD), PDiag(),
4863     ImplicitType, SourceLocation(),
4864     SpecifiedType, MD->getLocation());
4865 }
4866 
4867 void Sema::CheckDelayedMemberExceptionSpecs() {
4868   SmallVector<std::pair<const CXXDestructorDecl *, const CXXDestructorDecl *>,
4869               2> Checks;
4870   SmallVector<std::pair<CXXMethodDecl *, const FunctionProtoType *>, 2> Specs;
4871 
4872   std::swap(Checks, DelayedDestructorExceptionSpecChecks);
4873   std::swap(Specs, DelayedDefaultedMemberExceptionSpecs);
4874 
4875   // Perform any deferred checking of exception specifications for virtual
4876   // destructors.
4877   for (unsigned i = 0, e = Checks.size(); i != e; ++i) {
4878     const CXXDestructorDecl *Dtor = Checks[i].first;
4879     assert(!Dtor->getParent()->isDependentType() &&
4880            "Should not ever add destructors of templates into the list.");
4881     CheckOverridingFunctionExceptionSpec(Dtor, Checks[i].second);
4882   }
4883 
4884   // Check that any explicitly-defaulted methods have exception specifications
4885   // compatible with their implicit exception specifications.
4886   for (unsigned I = 0, N = Specs.size(); I != N; ++I)
4887     CheckExplicitlyDefaultedMemberExceptionSpec(Specs[I].first,
4888                                                 Specs[I].second);
4889 }
4890 
4891 namespace {
4892 struct SpecialMemberDeletionInfo {
4893   Sema &S;
4894   CXXMethodDecl *MD;
4895   Sema::CXXSpecialMember CSM;
4896   bool Diagnose;
4897 
4898   // Properties of the special member, computed for convenience.
4899   bool IsConstructor, IsAssignment, IsMove, ConstArg;
4900   SourceLocation Loc;
4901 
4902   bool AllFieldsAreConst;
4903 
4904   SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
4905                             Sema::CXXSpecialMember CSM, bool Diagnose)
4906     : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
4907       IsConstructor(false), IsAssignment(false), IsMove(false),
4908       ConstArg(false), Loc(MD->getLocation()),
4909       AllFieldsAreConst(true) {
4910     switch (CSM) {
4911       case Sema::CXXDefaultConstructor:
4912       case Sema::CXXCopyConstructor:
4913         IsConstructor = true;
4914         break;
4915       case Sema::CXXMoveConstructor:
4916         IsConstructor = true;
4917         IsMove = true;
4918         break;
4919       case Sema::CXXCopyAssignment:
4920         IsAssignment = true;
4921         break;
4922       case Sema::CXXMoveAssignment:
4923         IsAssignment = true;
4924         IsMove = true;
4925         break;
4926       case Sema::CXXDestructor:
4927         break;
4928       case Sema::CXXInvalid:
4929         llvm_unreachable("invalid special member kind");
4930     }
4931 
4932     if (MD->getNumParams()) {
4933       if (const ReferenceType *RT =
4934               MD->getParamDecl(0)->getType()->getAs<ReferenceType>())
4935         ConstArg = RT->getPointeeType().isConstQualified();
4936     }
4937   }
4938 
4939   bool inUnion() const { return MD->getParent()->isUnion(); }
4940 
4941   /// Look up the corresponding special member in the given class.
4942   Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
4943                                               unsigned Quals, bool IsMutable) {
4944     return lookupCallFromSpecialMember(S, Class, CSM, Quals,
4945                                        ConstArg && !IsMutable);
4946   }
4947 
4948   typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
4949 
4950   bool shouldDeleteForBase(CXXBaseSpecifier *Base);
4951   bool shouldDeleteForField(FieldDecl *FD);
4952   bool shouldDeleteForAllConstMembers();
4953 
4954   bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
4955                                      unsigned Quals);
4956   bool shouldDeleteForSubobjectCall(Subobject Subobj,
4957                                     Sema::SpecialMemberOverloadResult *SMOR,
4958                                     bool IsDtorCallInCtor);
4959 
4960   bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
4961 };
4962 }
4963 
4964 /// Is the given special member inaccessible when used on the given
4965 /// sub-object.
4966 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
4967                                              CXXMethodDecl *target) {
4968   /// If we're operating on a base class, the object type is the
4969   /// type of this special member.
4970   QualType objectTy;
4971   AccessSpecifier access = target->getAccess();
4972   if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
4973     objectTy = S.Context.getTypeDeclType(MD->getParent());
4974     access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
4975 
4976   // If we're operating on a field, the object type is the type of the field.
4977   } else {
4978     objectTy = S.Context.getTypeDeclType(target->getParent());
4979   }
4980 
4981   return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
4982 }
4983 
4984 /// Check whether we should delete a special member due to the implicit
4985 /// definition containing a call to a special member of a subobject.
4986 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
4987     Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
4988     bool IsDtorCallInCtor) {
4989   CXXMethodDecl *Decl = SMOR->getMethod();
4990   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4991 
4992   int DiagKind = -1;
4993 
4994   if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
4995     DiagKind = !Decl ? 0 : 1;
4996   else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
4997     DiagKind = 2;
4998   else if (!isAccessible(Subobj, Decl))
4999     DiagKind = 3;
5000   else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
5001            !Decl->isTrivial()) {
5002     // A member of a union must have a trivial corresponding special member.
5003     // As a weird special case, a destructor call from a union's constructor
5004     // must be accessible and non-deleted, but need not be trivial. Such a
5005     // destructor is never actually called, but is semantically checked as
5006     // if it were.
5007     DiagKind = 4;
5008   }
5009 
5010   if (DiagKind == -1)
5011     return false;
5012 
5013   if (Diagnose) {
5014     if (Field) {
5015       S.Diag(Field->getLocation(),
5016              diag::note_deleted_special_member_class_subobject)
5017         << CSM << MD->getParent() << /*IsField*/true
5018         << Field << DiagKind << IsDtorCallInCtor;
5019     } else {
5020       CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
5021       S.Diag(Base->getLocStart(),
5022              diag::note_deleted_special_member_class_subobject)
5023         << CSM << MD->getParent() << /*IsField*/false
5024         << Base->getType() << DiagKind << IsDtorCallInCtor;
5025     }
5026 
5027     if (DiagKind == 1)
5028       S.NoteDeletedFunction(Decl);
5029     // FIXME: Explain inaccessibility if DiagKind == 3.
5030   }
5031 
5032   return true;
5033 }
5034 
5035 /// Check whether we should delete a special member function due to having a
5036 /// direct or virtual base class or non-static data member of class type M.
5037 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
5038     CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
5039   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
5040   bool IsMutable = Field && Field->isMutable();
5041 
5042   // C++11 [class.ctor]p5:
5043   // -- any direct or virtual base class, or non-static data member with no
5044   //    brace-or-equal-initializer, has class type M (or array thereof) and
5045   //    either M has no default constructor or overload resolution as applied
5046   //    to M's default constructor results in an ambiguity or in a function
5047   //    that is deleted or inaccessible
5048   // C++11 [class.copy]p11, C++11 [class.copy]p23:
5049   // -- a direct or virtual base class B that cannot be copied/moved because
5050   //    overload resolution, as applied to B's corresponding special member,
5051   //    results in an ambiguity or a function that is deleted or inaccessible
5052   //    from the defaulted special member
5053   // C++11 [class.dtor]p5:
5054   // -- any direct or virtual base class [...] has a type with a destructor
5055   //    that is deleted or inaccessible
5056   if (!(CSM == Sema::CXXDefaultConstructor &&
5057         Field && Field->hasInClassInitializer()) &&
5058       shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals, IsMutable),
5059                                    false))
5060     return true;
5061 
5062   // C++11 [class.ctor]p5, C++11 [class.copy]p11:
5063   // -- any direct or virtual base class or non-static data member has a
5064   //    type with a destructor that is deleted or inaccessible
5065   if (IsConstructor) {
5066     Sema::SpecialMemberOverloadResult *SMOR =
5067         S.LookupSpecialMember(Class, Sema::CXXDestructor,
5068                               false, false, false, false, false);
5069     if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
5070       return true;
5071   }
5072 
5073   return false;
5074 }
5075 
5076 /// Check whether we should delete a special member function due to the class
5077 /// having a particular direct or virtual base class.
5078 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
5079   CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
5080   return shouldDeleteForClassSubobject(BaseClass, Base, 0);
5081 }
5082 
5083 /// Check whether we should delete a special member function due to the class
5084 /// having a particular non-static data member.
5085 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
5086   QualType FieldType = S.Context.getBaseElementType(FD->getType());
5087   CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
5088 
5089   if (CSM == Sema::CXXDefaultConstructor) {
5090     // For a default constructor, all references must be initialized in-class
5091     // and, if a union, it must have a non-const member.
5092     if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
5093       if (Diagnose)
5094         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
5095           << MD->getParent() << FD << FieldType << /*Reference*/0;
5096       return true;
5097     }
5098     // C++11 [class.ctor]p5: any non-variant non-static data member of
5099     // const-qualified type (or array thereof) with no
5100     // brace-or-equal-initializer does not have a user-provided default
5101     // constructor.
5102     if (!inUnion() && FieldType.isConstQualified() &&
5103         !FD->hasInClassInitializer() &&
5104         (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
5105       if (Diagnose)
5106         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
5107           << MD->getParent() << FD << FD->getType() << /*Const*/1;
5108       return true;
5109     }
5110 
5111     if (inUnion() && !FieldType.isConstQualified())
5112       AllFieldsAreConst = false;
5113   } else if (CSM == Sema::CXXCopyConstructor) {
5114     // For a copy constructor, data members must not be of rvalue reference
5115     // type.
5116     if (FieldType->isRValueReferenceType()) {
5117       if (Diagnose)
5118         S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
5119           << MD->getParent() << FD << FieldType;
5120       return true;
5121     }
5122   } else if (IsAssignment) {
5123     // For an assignment operator, data members must not be of reference type.
5124     if (FieldType->isReferenceType()) {
5125       if (Diagnose)
5126         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
5127           << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
5128       return true;
5129     }
5130     if (!FieldRecord && FieldType.isConstQualified()) {
5131       // C++11 [class.copy]p23:
5132       // -- a non-static data member of const non-class type (or array thereof)
5133       if (Diagnose)
5134         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
5135           << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
5136       return true;
5137     }
5138   }
5139 
5140   if (FieldRecord) {
5141     // Some additional restrictions exist on the variant members.
5142     if (!inUnion() && FieldRecord->isUnion() &&
5143         FieldRecord->isAnonymousStructOrUnion()) {
5144       bool AllVariantFieldsAreConst = true;
5145 
5146       // FIXME: Handle anonymous unions declared within anonymous unions.
5147       for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
5148                                          UE = FieldRecord->field_end();
5149            UI != UE; ++UI) {
5150         QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
5151 
5152         if (!UnionFieldType.isConstQualified())
5153           AllVariantFieldsAreConst = false;
5154 
5155         CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
5156         if (UnionFieldRecord &&
5157             shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
5158                                           UnionFieldType.getCVRQualifiers()))
5159           return true;
5160       }
5161 
5162       // At least one member in each anonymous union must be non-const
5163       if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
5164           FieldRecord->field_begin() != FieldRecord->field_end()) {
5165         if (Diagnose)
5166           S.Diag(FieldRecord->getLocation(),
5167                  diag::note_deleted_default_ctor_all_const)
5168             << MD->getParent() << /*anonymous union*/1;
5169         return true;
5170       }
5171 
5172       // Don't check the implicit member of the anonymous union type.
5173       // This is technically non-conformant, but sanity demands it.
5174       return false;
5175     }
5176 
5177     if (shouldDeleteForClassSubobject(FieldRecord, FD,
5178                                       FieldType.getCVRQualifiers()))
5179       return true;
5180   }
5181 
5182   return false;
5183 }
5184 
5185 /// C++11 [class.ctor] p5:
5186 ///   A defaulted default constructor for a class X is defined as deleted if
5187 /// X is a union and all of its variant members are of const-qualified type.
5188 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
5189   // This is a silly definition, because it gives an empty union a deleted
5190   // default constructor. Don't do that.
5191   if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
5192       (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
5193     if (Diagnose)
5194       S.Diag(MD->getParent()->getLocation(),
5195              diag::note_deleted_default_ctor_all_const)
5196         << MD->getParent() << /*not anonymous union*/0;
5197     return true;
5198   }
5199   return false;
5200 }
5201 
5202 /// Determine whether a defaulted special member function should be defined as
5203 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
5204 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
5205 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
5206                                      bool Diagnose) {
5207   if (MD->isInvalidDecl())
5208     return false;
5209   CXXRecordDecl *RD = MD->getParent();
5210   assert(!RD->isDependentType() && "do deletion after instantiation");
5211   if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
5212     return false;
5213 
5214   // C++11 [expr.lambda.prim]p19:
5215   //   The closure type associated with a lambda-expression has a
5216   //   deleted (8.4.3) default constructor and a deleted copy
5217   //   assignment operator.
5218   if (RD->isLambda() &&
5219       (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
5220     if (Diagnose)
5221       Diag(RD->getLocation(), diag::note_lambda_decl);
5222     return true;
5223   }
5224 
5225   // For an anonymous struct or union, the copy and assignment special members
5226   // will never be used, so skip the check. For an anonymous union declared at
5227   // namespace scope, the constructor and destructor are used.
5228   if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
5229       RD->isAnonymousStructOrUnion())
5230     return false;
5231 
5232   // C++11 [class.copy]p7, p18:
5233   //   If the class definition declares a move constructor or move assignment
5234   //   operator, an implicitly declared copy constructor or copy assignment
5235   //   operator is defined as deleted.
5236   if (MD->isImplicit() &&
5237       (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
5238     CXXMethodDecl *UserDeclaredMove = 0;
5239 
5240     // In Microsoft mode, a user-declared move only causes the deletion of the
5241     // corresponding copy operation, not both copy operations.
5242     if (RD->hasUserDeclaredMoveConstructor() &&
5243         (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
5244       if (!Diagnose) return true;
5245 
5246       // Find any user-declared move constructor.
5247       for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
5248                                         E = RD->ctor_end(); I != E; ++I) {
5249         if (I->isMoveConstructor()) {
5250           UserDeclaredMove = *I;
5251           break;
5252         }
5253       }
5254       assert(UserDeclaredMove);
5255     } else if (RD->hasUserDeclaredMoveAssignment() &&
5256                (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
5257       if (!Diagnose) return true;
5258 
5259       // Find any user-declared move assignment operator.
5260       for (CXXRecordDecl::method_iterator I = RD->method_begin(),
5261                                           E = RD->method_end(); I != E; ++I) {
5262         if (I->isMoveAssignmentOperator()) {
5263           UserDeclaredMove = *I;
5264           break;
5265         }
5266       }
5267       assert(UserDeclaredMove);
5268     }
5269 
5270     if (UserDeclaredMove) {
5271       Diag(UserDeclaredMove->getLocation(),
5272            diag::note_deleted_copy_user_declared_move)
5273         << (CSM == CXXCopyAssignment) << RD
5274         << UserDeclaredMove->isMoveAssignmentOperator();
5275       return true;
5276     }
5277   }
5278 
5279   // Do access control from the special member function
5280   ContextRAII MethodContext(*this, MD);
5281 
5282   // C++11 [class.dtor]p5:
5283   // -- for a virtual destructor, lookup of the non-array deallocation function
5284   //    results in an ambiguity or in a function that is deleted or inaccessible
5285   if (CSM == CXXDestructor && MD->isVirtual()) {
5286     FunctionDecl *OperatorDelete = 0;
5287     DeclarationName Name =
5288       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5289     if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
5290                                  OperatorDelete, false)) {
5291       if (Diagnose)
5292         Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
5293       return true;
5294     }
5295   }
5296 
5297   SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
5298 
5299   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5300                                           BE = RD->bases_end(); BI != BE; ++BI)
5301     if (!BI->isVirtual() &&
5302         SMI.shouldDeleteForBase(BI))
5303       return true;
5304 
5305   // Per DR1611, do not consider virtual bases of constructors of abstract
5306   // classes, since we are not going to construct them.
5307   if (!RD->isAbstract() || !SMI.IsConstructor) {
5308     for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
5309                                             BE = RD->vbases_end();
5310          BI != BE; ++BI)
5311       if (SMI.shouldDeleteForBase(BI))
5312         return true;
5313   }
5314 
5315   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5316                                      FE = RD->field_end(); FI != FE; ++FI)
5317     if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
5318         SMI.shouldDeleteForField(*FI))
5319       return true;
5320 
5321   if (SMI.shouldDeleteForAllConstMembers())
5322     return true;
5323 
5324   return false;
5325 }
5326 
5327 /// Perform lookup for a special member of the specified kind, and determine
5328 /// whether it is trivial. If the triviality can be determined without the
5329 /// lookup, skip it. This is intended for use when determining whether a
5330 /// special member of a containing object is trivial, and thus does not ever
5331 /// perform overload resolution for default constructors.
5332 ///
5333 /// If \p Selected is not \c NULL, \c *Selected will be filled in with the
5334 /// member that was most likely to be intended to be trivial, if any.
5335 static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
5336                                      Sema::CXXSpecialMember CSM, unsigned Quals,
5337                                      bool ConstRHS, CXXMethodDecl **Selected) {
5338   if (Selected)
5339     *Selected = 0;
5340 
5341   switch (CSM) {
5342   case Sema::CXXInvalid:
5343     llvm_unreachable("not a special member");
5344 
5345   case Sema::CXXDefaultConstructor:
5346     // C++11 [class.ctor]p5:
5347     //   A default constructor is trivial if:
5348     //    - all the [direct subobjects] have trivial default constructors
5349     //
5350     // Note, no overload resolution is performed in this case.
5351     if (RD->hasTrivialDefaultConstructor())
5352       return true;
5353 
5354     if (Selected) {
5355       // If there's a default constructor which could have been trivial, dig it
5356       // out. Otherwise, if there's any user-provided default constructor, point
5357       // to that as an example of why there's not a trivial one.
5358       CXXConstructorDecl *DefCtor = 0;
5359       if (RD->needsImplicitDefaultConstructor())
5360         S.DeclareImplicitDefaultConstructor(RD);
5361       for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(),
5362                                         CE = RD->ctor_end(); CI != CE; ++CI) {
5363         if (!CI->isDefaultConstructor())
5364           continue;
5365         DefCtor = *CI;
5366         if (!DefCtor->isUserProvided())
5367           break;
5368       }
5369 
5370       *Selected = DefCtor;
5371     }
5372 
5373     return false;
5374 
5375   case Sema::CXXDestructor:
5376     // C++11 [class.dtor]p5:
5377     //   A destructor is trivial if:
5378     //    - all the direct [subobjects] have trivial destructors
5379     if (RD->hasTrivialDestructor())
5380       return true;
5381 
5382     if (Selected) {
5383       if (RD->needsImplicitDestructor())
5384         S.DeclareImplicitDestructor(RD);
5385       *Selected = RD->getDestructor();
5386     }
5387 
5388     return false;
5389 
5390   case Sema::CXXCopyConstructor:
5391     // C++11 [class.copy]p12:
5392     //   A copy constructor is trivial if:
5393     //    - the constructor selected to copy each direct [subobject] is trivial
5394     if (RD->hasTrivialCopyConstructor()) {
5395       if (Quals == Qualifiers::Const)
5396         // We must either select the trivial copy constructor or reach an
5397         // ambiguity; no need to actually perform overload resolution.
5398         return true;
5399     } else if (!Selected) {
5400       return false;
5401     }
5402     // In C++98, we are not supposed to perform overload resolution here, but we
5403     // treat that as a language defect, as suggested on cxx-abi-dev, to treat
5404     // cases like B as having a non-trivial copy constructor:
5405     //   struct A { template<typename T> A(T&); };
5406     //   struct B { mutable A a; };
5407     goto NeedOverloadResolution;
5408 
5409   case Sema::CXXCopyAssignment:
5410     // C++11 [class.copy]p25:
5411     //   A copy assignment operator is trivial if:
5412     //    - the assignment operator selected to copy each direct [subobject] is
5413     //      trivial
5414     if (RD->hasTrivialCopyAssignment()) {
5415       if (Quals == Qualifiers::Const)
5416         return true;
5417     } else if (!Selected) {
5418       return false;
5419     }
5420     // In C++98, we are not supposed to perform overload resolution here, but we
5421     // treat that as a language defect.
5422     goto NeedOverloadResolution;
5423 
5424   case Sema::CXXMoveConstructor:
5425   case Sema::CXXMoveAssignment:
5426   NeedOverloadResolution:
5427     Sema::SpecialMemberOverloadResult *SMOR =
5428         lookupCallFromSpecialMember(S, RD, CSM, Quals, ConstRHS);
5429 
5430     // The standard doesn't describe how to behave if the lookup is ambiguous.
5431     // We treat it as not making the member non-trivial, just like the standard
5432     // mandates for the default constructor. This should rarely matter, because
5433     // the member will also be deleted.
5434     if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
5435       return true;
5436 
5437     if (!SMOR->getMethod()) {
5438       assert(SMOR->getKind() ==
5439              Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
5440       return false;
5441     }
5442 
5443     // We deliberately don't check if we found a deleted special member. We're
5444     // not supposed to!
5445     if (Selected)
5446       *Selected = SMOR->getMethod();
5447     return SMOR->getMethod()->isTrivial();
5448   }
5449 
5450   llvm_unreachable("unknown special method kind");
5451 }
5452 
5453 static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
5454   for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end();
5455        CI != CE; ++CI)
5456     if (!CI->isImplicit())
5457       return *CI;
5458 
5459   // Look for constructor templates.
5460   typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
5461   for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
5462     if (CXXConstructorDecl *CD =
5463           dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
5464       return CD;
5465   }
5466 
5467   return 0;
5468 }
5469 
5470 /// The kind of subobject we are checking for triviality. The values of this
5471 /// enumeration are used in diagnostics.
5472 enum TrivialSubobjectKind {
5473   /// The subobject is a base class.
5474   TSK_BaseClass,
5475   /// The subobject is a non-static data member.
5476   TSK_Field,
5477   /// The object is actually the complete object.
5478   TSK_CompleteObject
5479 };
5480 
5481 /// Check whether the special member selected for a given type would be trivial.
5482 static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
5483                                       QualType SubType, bool ConstRHS,
5484                                       Sema::CXXSpecialMember CSM,
5485                                       TrivialSubobjectKind Kind,
5486                                       bool Diagnose) {
5487   CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
5488   if (!SubRD)
5489     return true;
5490 
5491   CXXMethodDecl *Selected;
5492   if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
5493                                ConstRHS, Diagnose ? &Selected : 0))
5494     return true;
5495 
5496   if (Diagnose) {
5497     if (ConstRHS)
5498       SubType.addConst();
5499 
5500     if (!Selected && CSM == Sema::CXXDefaultConstructor) {
5501       S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
5502         << Kind << SubType.getUnqualifiedType();
5503       if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
5504         S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
5505     } else if (!Selected)
5506       S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
5507         << Kind << SubType.getUnqualifiedType() << CSM << SubType;
5508     else if (Selected->isUserProvided()) {
5509       if (Kind == TSK_CompleteObject)
5510         S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
5511           << Kind << SubType.getUnqualifiedType() << CSM;
5512       else {
5513         S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
5514           << Kind << SubType.getUnqualifiedType() << CSM;
5515         S.Diag(Selected->getLocation(), diag::note_declared_at);
5516       }
5517     } else {
5518       if (Kind != TSK_CompleteObject)
5519         S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
5520           << Kind << SubType.getUnqualifiedType() << CSM;
5521 
5522       // Explain why the defaulted or deleted special member isn't trivial.
5523       S.SpecialMemberIsTrivial(Selected, CSM, Diagnose);
5524     }
5525   }
5526 
5527   return false;
5528 }
5529 
5530 /// Check whether the members of a class type allow a special member to be
5531 /// trivial.
5532 static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
5533                                      Sema::CXXSpecialMember CSM,
5534                                      bool ConstArg, bool Diagnose) {
5535   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5536                                      FE = RD->field_end(); FI != FE; ++FI) {
5537     if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
5538       continue;
5539 
5540     QualType FieldType = S.Context.getBaseElementType(FI->getType());
5541 
5542     // Pretend anonymous struct or union members are members of this class.
5543     if (FI->isAnonymousStructOrUnion()) {
5544       if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
5545                                     CSM, ConstArg, Diagnose))
5546         return false;
5547       continue;
5548     }
5549 
5550     // C++11 [class.ctor]p5:
5551     //   A default constructor is trivial if [...]
5552     //    -- no non-static data member of its class has a
5553     //       brace-or-equal-initializer
5554     if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
5555       if (Diagnose)
5556         S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI;
5557       return false;
5558     }
5559 
5560     // Objective C ARC 4.3.5:
5561     //   [...] nontrivally ownership-qualified types are [...] not trivially
5562     //   default constructible, copy constructible, move constructible, copy
5563     //   assignable, move assignable, or destructible [...]
5564     if (S.getLangOpts().ObjCAutoRefCount &&
5565         FieldType.hasNonTrivialObjCLifetime()) {
5566       if (Diagnose)
5567         S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
5568           << RD << FieldType.getObjCLifetime();
5569       return false;
5570     }
5571 
5572     bool ConstRHS = ConstArg && !FI->isMutable();
5573     if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, ConstRHS,
5574                                    CSM, TSK_Field, Diagnose))
5575       return false;
5576   }
5577 
5578   return true;
5579 }
5580 
5581 /// Diagnose why the specified class does not have a trivial special member of
5582 /// the given kind.
5583 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
5584   QualType Ty = Context.getRecordType(RD);
5585 
5586   bool ConstArg = (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment);
5587   checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM,
5588                             TSK_CompleteObject, /*Diagnose*/true);
5589 }
5590 
5591 /// Determine whether a defaulted or deleted special member function is trivial,
5592 /// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5593 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
5594 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
5595                                   bool Diagnose) {
5596   assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
5597 
5598   CXXRecordDecl *RD = MD->getParent();
5599 
5600   bool ConstArg = false;
5601 
5602   // C++11 [class.copy]p12, p25: [DR1593]
5603   //   A [special member] is trivial if [...] its parameter-type-list is
5604   //   equivalent to the parameter-type-list of an implicit declaration [...]
5605   switch (CSM) {
5606   case CXXDefaultConstructor:
5607   case CXXDestructor:
5608     // Trivial default constructors and destructors cannot have parameters.
5609     break;
5610 
5611   case CXXCopyConstructor:
5612   case CXXCopyAssignment: {
5613     // Trivial copy operations always have const, non-volatile parameter types.
5614     ConstArg = true;
5615     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5616     const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
5617     if (!RT || RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) {
5618       if (Diagnose)
5619         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5620           << Param0->getSourceRange() << Param0->getType()
5621           << Context.getLValueReferenceType(
5622                Context.getRecordType(RD).withConst());
5623       return false;
5624     }
5625     break;
5626   }
5627 
5628   case CXXMoveConstructor:
5629   case CXXMoveAssignment: {
5630     // Trivial move operations always have non-cv-qualified parameters.
5631     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5632     const RValueReferenceType *RT =
5633       Param0->getType()->getAs<RValueReferenceType>();
5634     if (!RT || RT->getPointeeType().getCVRQualifiers()) {
5635       if (Diagnose)
5636         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5637           << Param0->getSourceRange() << Param0->getType()
5638           << Context.getRValueReferenceType(Context.getRecordType(RD));
5639       return false;
5640     }
5641     break;
5642   }
5643 
5644   case CXXInvalid:
5645     llvm_unreachable("not a special member");
5646   }
5647 
5648   if (MD->getMinRequiredArguments() < MD->getNumParams()) {
5649     if (Diagnose)
5650       Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
5651            diag::note_nontrivial_default_arg)
5652         << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
5653     return false;
5654   }
5655   if (MD->isVariadic()) {
5656     if (Diagnose)
5657       Diag(MD->getLocation(), diag::note_nontrivial_variadic);
5658     return false;
5659   }
5660 
5661   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5662   //   A copy/move [constructor or assignment operator] is trivial if
5663   //    -- the [member] selected to copy/move each direct base class subobject
5664   //       is trivial
5665   //
5666   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5667   //   A [default constructor or destructor] is trivial if
5668   //    -- all the direct base classes have trivial [default constructors or
5669   //       destructors]
5670   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5671                                           BE = RD->bases_end(); BI != BE; ++BI)
5672     if (!checkTrivialSubobjectCall(*this, BI->getLocStart(), BI->getType(),
5673                                    ConstArg, CSM, TSK_BaseClass, Diagnose))
5674       return false;
5675 
5676   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5677   //   A copy/move [constructor or assignment operator] for a class X is
5678   //   trivial if
5679   //    -- for each non-static data member of X that is of class type (or array
5680   //       thereof), the constructor selected to copy/move that member is
5681   //       trivial
5682   //
5683   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5684   //   A [default constructor or destructor] is trivial if
5685   //    -- for all of the non-static data members of its class that are of class
5686   //       type (or array thereof), each such class has a trivial [default
5687   //       constructor or destructor]
5688   if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, Diagnose))
5689     return false;
5690 
5691   // C++11 [class.dtor]p5:
5692   //   A destructor is trivial if [...]
5693   //    -- the destructor is not virtual
5694   if (CSM == CXXDestructor && MD->isVirtual()) {
5695     if (Diagnose)
5696       Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
5697     return false;
5698   }
5699 
5700   // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
5701   //   A [special member] for class X is trivial if [...]
5702   //    -- class X has no virtual functions and no virtual base classes
5703   if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
5704     if (!Diagnose)
5705       return false;
5706 
5707     if (RD->getNumVBases()) {
5708       // Check for virtual bases. We already know that the corresponding
5709       // member in all bases is trivial, so vbases must all be direct.
5710       CXXBaseSpecifier &BS = *RD->vbases_begin();
5711       assert(BS.isVirtual());
5712       Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1;
5713       return false;
5714     }
5715 
5716     // Must have a virtual method.
5717     for (CXXRecordDecl::method_iterator MI = RD->method_begin(),
5718                                         ME = RD->method_end(); MI != ME; ++MI) {
5719       if (MI->isVirtual()) {
5720         SourceLocation MLoc = MI->getLocStart();
5721         Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
5722         return false;
5723       }
5724     }
5725 
5726     llvm_unreachable("dynamic class with no vbases and no virtual functions");
5727   }
5728 
5729   // Looks like it's trivial!
5730   return true;
5731 }
5732 
5733 /// \brief Data used with FindHiddenVirtualMethod
5734 namespace {
5735   struct FindHiddenVirtualMethodData {
5736     Sema *S;
5737     CXXMethodDecl *Method;
5738     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
5739     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
5740   };
5741 }
5742 
5743 /// \brief Check whether any most overriden method from MD in Methods
5744 static bool CheckMostOverridenMethods(const CXXMethodDecl *MD,
5745                    const llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5746   if (MD->size_overridden_methods() == 0)
5747     return Methods.count(MD->getCanonicalDecl());
5748   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5749                                       E = MD->end_overridden_methods();
5750        I != E; ++I)
5751     if (CheckMostOverridenMethods(*I, Methods))
5752       return true;
5753   return false;
5754 }
5755 
5756 /// \brief Member lookup function that determines whether a given C++
5757 /// method overloads virtual methods in a base class without overriding any,
5758 /// to be used with CXXRecordDecl::lookupInBases().
5759 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
5760                                     CXXBasePath &Path,
5761                                     void *UserData) {
5762   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
5763 
5764   FindHiddenVirtualMethodData &Data
5765     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
5766 
5767   DeclarationName Name = Data.Method->getDeclName();
5768   assert(Name.getNameKind() == DeclarationName::Identifier);
5769 
5770   bool foundSameNameMethod = false;
5771   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
5772   for (Path.Decls = BaseRecord->lookup(Name);
5773        !Path.Decls.empty();
5774        Path.Decls = Path.Decls.slice(1)) {
5775     NamedDecl *D = Path.Decls.front();
5776     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
5777       MD = MD->getCanonicalDecl();
5778       foundSameNameMethod = true;
5779       // Interested only in hidden virtual methods.
5780       if (!MD->isVirtual())
5781         continue;
5782       // If the method we are checking overrides a method from its base
5783       // don't warn about the other overloaded methods.
5784       if (!Data.S->IsOverload(Data.Method, MD, false))
5785         return true;
5786       // Collect the overload only if its hidden.
5787       if (!CheckMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods))
5788         overloadedMethods.push_back(MD);
5789     }
5790   }
5791 
5792   if (foundSameNameMethod)
5793     Data.OverloadedMethods.append(overloadedMethods.begin(),
5794                                    overloadedMethods.end());
5795   return foundSameNameMethod;
5796 }
5797 
5798 /// \brief Add the most overriden methods from MD to Methods
5799 static void AddMostOverridenMethods(const CXXMethodDecl *MD,
5800                          llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5801   if (MD->size_overridden_methods() == 0)
5802     Methods.insert(MD->getCanonicalDecl());
5803   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5804                                       E = MD->end_overridden_methods();
5805        I != E; ++I)
5806     AddMostOverridenMethods(*I, Methods);
5807 }
5808 
5809 /// \brief Check if a method overloads virtual methods in a base class without
5810 /// overriding any.
5811 void Sema::FindHiddenVirtualMethods(CXXMethodDecl *MD,
5812                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) {
5813   if (!MD->getDeclName().isIdentifier())
5814     return;
5815 
5816   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
5817                      /*bool RecordPaths=*/false,
5818                      /*bool DetectVirtual=*/false);
5819   FindHiddenVirtualMethodData Data;
5820   Data.Method = MD;
5821   Data.S = this;
5822 
5823   // Keep the base methods that were overriden or introduced in the subclass
5824   // by 'using' in a set. A base method not in this set is hidden.
5825   CXXRecordDecl *DC = MD->getParent();
5826   DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
5827   for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
5828     NamedDecl *ND = *I;
5829     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
5830       ND = shad->getTargetDecl();
5831     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
5832       AddMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods);
5833   }
5834 
5835   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths))
5836     OverloadedMethods = Data.OverloadedMethods;
5837 }
5838 
5839 void Sema::NoteHiddenVirtualMethods(CXXMethodDecl *MD,
5840                           SmallVectorImpl<CXXMethodDecl*> &OverloadedMethods) {
5841   for (unsigned i = 0, e = OverloadedMethods.size(); i != e; ++i) {
5842     CXXMethodDecl *overloadedMD = OverloadedMethods[i];
5843     PartialDiagnostic PD = PDiag(
5844          diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
5845     HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
5846     Diag(overloadedMD->getLocation(), PD);
5847   }
5848 }
5849 
5850 /// \brief Diagnose methods which overload virtual methods in a base class
5851 /// without overriding any.
5852 void Sema::DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD) {
5853   if (MD->isInvalidDecl())
5854     return;
5855 
5856   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
5857                                MD->getLocation()) == DiagnosticsEngine::Ignored)
5858     return;
5859 
5860   SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
5861   FindHiddenVirtualMethods(MD, OverloadedMethods);
5862   if (!OverloadedMethods.empty()) {
5863     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
5864       << MD << (OverloadedMethods.size() > 1);
5865 
5866     NoteHiddenVirtualMethods(MD, OverloadedMethods);
5867   }
5868 }
5869 
5870 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5871                                              Decl *TagDecl,
5872                                              SourceLocation LBrac,
5873                                              SourceLocation RBrac,
5874                                              AttributeList *AttrList) {
5875   if (!TagDecl)
5876     return;
5877 
5878   AdjustDeclIfTemplate(TagDecl);
5879 
5880   for (const AttributeList* l = AttrList; l; l = l->getNext()) {
5881     if (l->getKind() != AttributeList::AT_Visibility)
5882       continue;
5883     l->setInvalid();
5884     Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
5885       l->getName();
5886   }
5887 
5888   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
5889               // strict aliasing violation!
5890               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
5891               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
5892 
5893   CheckCompletedCXXClass(
5894                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
5895 }
5896 
5897 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5898 /// special functions, such as the default constructor, copy
5899 /// constructor, or destructor, to the given C++ class (C++
5900 /// [special]p1).  This routine can only be executed just before the
5901 /// definition of the class is complete.
5902 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
5903   if (!ClassDecl->hasUserDeclaredConstructor())
5904     ++ASTContext::NumImplicitDefaultConstructors;
5905 
5906   if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
5907     ++ASTContext::NumImplicitCopyConstructors;
5908 
5909     // If the properties or semantics of the copy constructor couldn't be
5910     // determined while the class was being declared, force a declaration
5911     // of it now.
5912     if (ClassDecl->needsOverloadResolutionForCopyConstructor())
5913       DeclareImplicitCopyConstructor(ClassDecl);
5914   }
5915 
5916   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
5917     ++ASTContext::NumImplicitMoveConstructors;
5918 
5919     if (ClassDecl->needsOverloadResolutionForMoveConstructor())
5920       DeclareImplicitMoveConstructor(ClassDecl);
5921   }
5922 
5923   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
5924     ++ASTContext::NumImplicitCopyAssignmentOperators;
5925 
5926     // If we have a dynamic class, then the copy assignment operator may be
5927     // virtual, so we have to declare it immediately. This ensures that, e.g.,
5928     // it shows up in the right place in the vtable and that we diagnose
5929     // problems with the implicit exception specification.
5930     if (ClassDecl->isDynamicClass() ||
5931         ClassDecl->needsOverloadResolutionForCopyAssignment())
5932       DeclareImplicitCopyAssignment(ClassDecl);
5933   }
5934 
5935   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
5936     ++ASTContext::NumImplicitMoveAssignmentOperators;
5937 
5938     // Likewise for the move assignment operator.
5939     if (ClassDecl->isDynamicClass() ||
5940         ClassDecl->needsOverloadResolutionForMoveAssignment())
5941       DeclareImplicitMoveAssignment(ClassDecl);
5942   }
5943 
5944   if (!ClassDecl->hasUserDeclaredDestructor()) {
5945     ++ASTContext::NumImplicitDestructors;
5946 
5947     // If we have a dynamic class, then the destructor may be virtual, so we
5948     // have to declare the destructor immediately. This ensures that, e.g., it
5949     // shows up in the right place in the vtable and that we diagnose problems
5950     // with the implicit exception specification.
5951     if (ClassDecl->isDynamicClass() ||
5952         ClassDecl->needsOverloadResolutionForDestructor())
5953       DeclareImplicitDestructor(ClassDecl);
5954   }
5955 }
5956 
5957 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
5958   if (!D)
5959     return;
5960 
5961   int NumParamList = D->getNumTemplateParameterLists();
5962   for (int i = 0; i < NumParamList; i++) {
5963     TemplateParameterList* Params = D->getTemplateParameterList(i);
5964     for (TemplateParameterList::iterator Param = Params->begin(),
5965                                       ParamEnd = Params->end();
5966           Param != ParamEnd; ++Param) {
5967       NamedDecl *Named = cast<NamedDecl>(*Param);
5968       if (Named->getDeclName()) {
5969         S->AddDecl(Named);
5970         IdResolver.AddDecl(Named);
5971       }
5972     }
5973   }
5974 }
5975 
5976 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
5977   if (!D)
5978     return;
5979 
5980   TemplateParameterList *Params = 0;
5981   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
5982     Params = Template->getTemplateParameters();
5983   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
5984            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
5985     Params = PartialSpec->getTemplateParameters();
5986   else
5987     return;
5988 
5989   for (TemplateParameterList::iterator Param = Params->begin(),
5990                                     ParamEnd = Params->end();
5991        Param != ParamEnd; ++Param) {
5992     NamedDecl *Named = cast<NamedDecl>(*Param);
5993     if (Named->getDeclName()) {
5994       S->AddDecl(Named);
5995       IdResolver.AddDecl(Named);
5996     }
5997   }
5998 }
5999 
6000 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
6001   if (!RecordD) return;
6002   AdjustDeclIfTemplate(RecordD);
6003   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
6004   PushDeclContext(S, Record);
6005 }
6006 
6007 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
6008   if (!RecordD) return;
6009   PopDeclContext();
6010 }
6011 
6012 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
6013 /// parsing a top-level (non-nested) C++ class, and we are now
6014 /// parsing those parts of the given Method declaration that could
6015 /// not be parsed earlier (C++ [class.mem]p2), such as default
6016 /// arguments. This action should enter the scope of the given
6017 /// Method declaration as if we had just parsed the qualified method
6018 /// name. However, it should not bring the parameters into scope;
6019 /// that will be performed by ActOnDelayedCXXMethodParameter.
6020 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
6021 }
6022 
6023 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
6024 /// C++ method declaration. We're (re-)introducing the given
6025 /// function parameter into scope for use in parsing later parts of
6026 /// the method declaration. For example, we could see an
6027 /// ActOnParamDefaultArgument event for this parameter.
6028 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
6029   if (!ParamD)
6030     return;
6031 
6032   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
6033 
6034   // If this parameter has an unparsed default argument, clear it out
6035   // to make way for the parsed default argument.
6036   if (Param->hasUnparsedDefaultArg())
6037     Param->setDefaultArg(0);
6038 
6039   S->AddDecl(Param);
6040   if (Param->getDeclName())
6041     IdResolver.AddDecl(Param);
6042 }
6043 
6044 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
6045 /// processing the delayed method declaration for Method. The method
6046 /// declaration is now considered finished. There may be a separate
6047 /// ActOnStartOfFunctionDef action later (not necessarily
6048 /// immediately!) for this method, if it was also defined inside the
6049 /// class body.
6050 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
6051   if (!MethodD)
6052     return;
6053 
6054   AdjustDeclIfTemplate(MethodD);
6055 
6056   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
6057 
6058   // Now that we have our default arguments, check the constructor
6059   // again. It could produce additional diagnostics or affect whether
6060   // the class has implicitly-declared destructors, among other
6061   // things.
6062   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
6063     CheckConstructor(Constructor);
6064 
6065   // Check the default arguments, which we may have added.
6066   if (!Method->isInvalidDecl())
6067     CheckCXXDefaultArguments(Method);
6068 }
6069 
6070 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
6071 /// the well-formedness of the constructor declarator @p D with type @p
6072 /// R. If there are any errors in the declarator, this routine will
6073 /// emit diagnostics and set the invalid bit to true.  In any case, the type
6074 /// will be updated to reflect a well-formed type for the constructor and
6075 /// returned.
6076 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
6077                                           StorageClass &SC) {
6078   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
6079 
6080   // C++ [class.ctor]p3:
6081   //   A constructor shall not be virtual (10.3) or static (9.4). A
6082   //   constructor can be invoked for a const, volatile or const
6083   //   volatile object. A constructor shall not be declared const,
6084   //   volatile, or const volatile (9.3.2).
6085   if (isVirtual) {
6086     if (!D.isInvalidType())
6087       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
6088         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
6089         << SourceRange(D.getIdentifierLoc());
6090     D.setInvalidType();
6091   }
6092   if (SC == SC_Static) {
6093     if (!D.isInvalidType())
6094       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
6095         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6096         << SourceRange(D.getIdentifierLoc());
6097     D.setInvalidType();
6098     SC = SC_None;
6099   }
6100 
6101   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
6102   if (FTI.TypeQuals != 0) {
6103     if (FTI.TypeQuals & Qualifiers::Const)
6104       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
6105         << "const" << SourceRange(D.getIdentifierLoc());
6106     if (FTI.TypeQuals & Qualifiers::Volatile)
6107       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
6108         << "volatile" << SourceRange(D.getIdentifierLoc());
6109     if (FTI.TypeQuals & Qualifiers::Restrict)
6110       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
6111         << "restrict" << SourceRange(D.getIdentifierLoc());
6112     D.setInvalidType();
6113   }
6114 
6115   // C++0x [class.ctor]p4:
6116   //   A constructor shall not be declared with a ref-qualifier.
6117   if (FTI.hasRefQualifier()) {
6118     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
6119       << FTI.RefQualifierIsLValueRef
6120       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
6121     D.setInvalidType();
6122   }
6123 
6124   // Rebuild the function type "R" without any type qualifiers (in
6125   // case any of the errors above fired) and with "void" as the
6126   // return type, since constructors don't have return types.
6127   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6128   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
6129     return R;
6130 
6131   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
6132   EPI.TypeQuals = 0;
6133   EPI.RefQualifier = RQ_None;
6134 
6135   return Context.getFunctionType(Context.VoidTy, Proto->getArgTypes(), EPI);
6136 }
6137 
6138 /// CheckConstructor - Checks a fully-formed constructor for
6139 /// well-formedness, issuing any diagnostics required. Returns true if
6140 /// the constructor declarator is invalid.
6141 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
6142   CXXRecordDecl *ClassDecl
6143     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
6144   if (!ClassDecl)
6145     return Constructor->setInvalidDecl();
6146 
6147   // C++ [class.copy]p3:
6148   //   A declaration of a constructor for a class X is ill-formed if
6149   //   its first parameter is of type (optionally cv-qualified) X and
6150   //   either there are no other parameters or else all other
6151   //   parameters have default arguments.
6152   if (!Constructor->isInvalidDecl() &&
6153       ((Constructor->getNumParams() == 1) ||
6154        (Constructor->getNumParams() > 1 &&
6155         Constructor->getParamDecl(1)->hasDefaultArg())) &&
6156       Constructor->getTemplateSpecializationKind()
6157                                               != TSK_ImplicitInstantiation) {
6158     QualType ParamType = Constructor->getParamDecl(0)->getType();
6159     QualType ClassTy = Context.getTagDeclType(ClassDecl);
6160     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
6161       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
6162       const char *ConstRef
6163         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
6164                                                         : " const &";
6165       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
6166         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
6167 
6168       // FIXME: Rather that making the constructor invalid, we should endeavor
6169       // to fix the type.
6170       Constructor->setInvalidDecl();
6171     }
6172   }
6173 }
6174 
6175 /// CheckDestructor - Checks a fully-formed destructor definition for
6176 /// well-formedness, issuing any diagnostics required.  Returns true
6177 /// on error.
6178 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
6179   CXXRecordDecl *RD = Destructor->getParent();
6180 
6181   if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
6182     SourceLocation Loc;
6183 
6184     if (!Destructor->isImplicit())
6185       Loc = Destructor->getLocation();
6186     else
6187       Loc = RD->getLocation();
6188 
6189     // If we have a virtual destructor, look up the deallocation function
6190     FunctionDecl *OperatorDelete = 0;
6191     DeclarationName Name =
6192     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
6193     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
6194       return true;
6195     // If there's no class-specific operator delete, look up the global
6196     // non-array delete.
6197     if (!OperatorDelete)
6198       OperatorDelete = FindUsualDeallocationFunction(Loc, true, Name);
6199 
6200     MarkFunctionReferenced(Loc, OperatorDelete);
6201 
6202     Destructor->setOperatorDelete(OperatorDelete);
6203   }
6204 
6205   return false;
6206 }
6207 
6208 static inline bool
6209 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
6210   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
6211           FTI.ArgInfo[0].Param &&
6212           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
6213 }
6214 
6215 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
6216 /// the well-formednes of the destructor declarator @p D with type @p
6217 /// R. If there are any errors in the declarator, this routine will
6218 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
6219 /// will be updated to reflect a well-formed type for the destructor and
6220 /// returned.
6221 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
6222                                          StorageClass& SC) {
6223   // C++ [class.dtor]p1:
6224   //   [...] A typedef-name that names a class is a class-name
6225   //   (7.1.3); however, a typedef-name that names a class shall not
6226   //   be used as the identifier in the declarator for a destructor
6227   //   declaration.
6228   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
6229   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
6230     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
6231       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
6232   else if (const TemplateSpecializationType *TST =
6233              DeclaratorType->getAs<TemplateSpecializationType>())
6234     if (TST->isTypeAlias())
6235       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
6236         << DeclaratorType << 1;
6237 
6238   // C++ [class.dtor]p2:
6239   //   A destructor is used to destroy objects of its class type. A
6240   //   destructor takes no parameters, and no return type can be
6241   //   specified for it (not even void). The address of a destructor
6242   //   shall not be taken. A destructor shall not be static. A
6243   //   destructor can be invoked for a const, volatile or const
6244   //   volatile object. A destructor shall not be declared const,
6245   //   volatile or const volatile (9.3.2).
6246   if (SC == SC_Static) {
6247     if (!D.isInvalidType())
6248       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
6249         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6250         << SourceRange(D.getIdentifierLoc())
6251         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
6252 
6253     SC = SC_None;
6254   }
6255   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6256     // Destructors don't have return types, but the parser will
6257     // happily parse something like:
6258     //
6259     //   class X {
6260     //     float ~X();
6261     //   };
6262     //
6263     // The return type will be eliminated later.
6264     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
6265       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6266       << SourceRange(D.getIdentifierLoc());
6267   }
6268 
6269   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
6270   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
6271     if (FTI.TypeQuals & Qualifiers::Const)
6272       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6273         << "const" << SourceRange(D.getIdentifierLoc());
6274     if (FTI.TypeQuals & Qualifiers::Volatile)
6275       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6276         << "volatile" << SourceRange(D.getIdentifierLoc());
6277     if (FTI.TypeQuals & Qualifiers::Restrict)
6278       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6279         << "restrict" << SourceRange(D.getIdentifierLoc());
6280     D.setInvalidType();
6281   }
6282 
6283   // C++0x [class.dtor]p2:
6284   //   A destructor shall not be declared with a ref-qualifier.
6285   if (FTI.hasRefQualifier()) {
6286     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
6287       << FTI.RefQualifierIsLValueRef
6288       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
6289     D.setInvalidType();
6290   }
6291 
6292   // Make sure we don't have any parameters.
6293   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
6294     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
6295 
6296     // Delete the parameters.
6297     FTI.freeArgs();
6298     D.setInvalidType();
6299   }
6300 
6301   // Make sure the destructor isn't variadic.
6302   if (FTI.isVariadic) {
6303     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
6304     D.setInvalidType();
6305   }
6306 
6307   // Rebuild the function type "R" without any type qualifiers or
6308   // parameters (in case any of the errors above fired) and with
6309   // "void" as the return type, since destructors don't have return
6310   // types.
6311   if (!D.isInvalidType())
6312     return R;
6313 
6314   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6315   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
6316   EPI.Variadic = false;
6317   EPI.TypeQuals = 0;
6318   EPI.RefQualifier = RQ_None;
6319   return Context.getFunctionType(Context.VoidTy, None, EPI);
6320 }
6321 
6322 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
6323 /// well-formednes of the conversion function declarator @p D with
6324 /// type @p R. If there are any errors in the declarator, this routine
6325 /// will emit diagnostics and return true. Otherwise, it will return
6326 /// false. Either way, the type @p R will be updated to reflect a
6327 /// well-formed type for the conversion operator.
6328 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
6329                                      StorageClass& SC) {
6330   // C++ [class.conv.fct]p1:
6331   //   Neither parameter types nor return type can be specified. The
6332   //   type of a conversion function (8.3.5) is "function taking no
6333   //   parameter returning conversion-type-id."
6334   if (SC == SC_Static) {
6335     if (!D.isInvalidType())
6336       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
6337         << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6338         << D.getName().getSourceRange();
6339     D.setInvalidType();
6340     SC = SC_None;
6341   }
6342 
6343   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
6344 
6345   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6346     // Conversion functions don't have return types, but the parser will
6347     // happily parse something like:
6348     //
6349     //   class X {
6350     //     float operator bool();
6351     //   };
6352     //
6353     // The return type will be changed later anyway.
6354     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
6355       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6356       << SourceRange(D.getIdentifierLoc());
6357     D.setInvalidType();
6358   }
6359 
6360   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6361 
6362   // Make sure we don't have any parameters.
6363   if (Proto->getNumArgs() > 0) {
6364     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
6365 
6366     // Delete the parameters.
6367     D.getFunctionTypeInfo().freeArgs();
6368     D.setInvalidType();
6369   } else if (Proto->isVariadic()) {
6370     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
6371     D.setInvalidType();
6372   }
6373 
6374   // Diagnose "&operator bool()" and other such nonsense.  This
6375   // is actually a gcc extension which we don't support.
6376   if (Proto->getResultType() != ConvType) {
6377     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
6378       << Proto->getResultType();
6379     D.setInvalidType();
6380     ConvType = Proto->getResultType();
6381   }
6382 
6383   // C++ [class.conv.fct]p4:
6384   //   The conversion-type-id shall not represent a function type nor
6385   //   an array type.
6386   if (ConvType->isArrayType()) {
6387     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
6388     ConvType = Context.getPointerType(ConvType);
6389     D.setInvalidType();
6390   } else if (ConvType->isFunctionType()) {
6391     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
6392     ConvType = Context.getPointerType(ConvType);
6393     D.setInvalidType();
6394   }
6395 
6396   // Rebuild the function type "R" without any parameters (in case any
6397   // of the errors above fired) and with the conversion type as the
6398   // return type.
6399   if (D.isInvalidType())
6400     R = Context.getFunctionType(ConvType, None, Proto->getExtProtoInfo());
6401 
6402   // C++0x explicit conversion operators.
6403   if (D.getDeclSpec().isExplicitSpecified())
6404     Diag(D.getDeclSpec().getExplicitSpecLoc(),
6405          getLangOpts().CPlusPlus11 ?
6406            diag::warn_cxx98_compat_explicit_conversion_functions :
6407            diag::ext_explicit_conversion_functions)
6408       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
6409 }
6410 
6411 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
6412 /// the declaration of the given C++ conversion function. This routine
6413 /// is responsible for recording the conversion function in the C++
6414 /// class, if possible.
6415 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
6416   assert(Conversion && "Expected to receive a conversion function declaration");
6417 
6418   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
6419 
6420   // Make sure we aren't redeclaring the conversion function.
6421   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
6422 
6423   // C++ [class.conv.fct]p1:
6424   //   [...] A conversion function is never used to convert a
6425   //   (possibly cv-qualified) object to the (possibly cv-qualified)
6426   //   same object type (or a reference to it), to a (possibly
6427   //   cv-qualified) base class of that type (or a reference to it),
6428   //   or to (possibly cv-qualified) void.
6429   // FIXME: Suppress this warning if the conversion function ends up being a
6430   // virtual function that overrides a virtual function in a base class.
6431   QualType ClassType
6432     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6433   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
6434     ConvType = ConvTypeRef->getPointeeType();
6435   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
6436       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
6437     /* Suppress diagnostics for instantiations. */;
6438   else if (ConvType->isRecordType()) {
6439     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
6440     if (ConvType == ClassType)
6441       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
6442         << ClassType;
6443     else if (IsDerivedFrom(ClassType, ConvType))
6444       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
6445         <<  ClassType << ConvType;
6446   } else if (ConvType->isVoidType()) {
6447     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
6448       << ClassType << ConvType;
6449   }
6450 
6451   if (FunctionTemplateDecl *ConversionTemplate
6452                                 = Conversion->getDescribedFunctionTemplate())
6453     return ConversionTemplate;
6454 
6455   return Conversion;
6456 }
6457 
6458 //===----------------------------------------------------------------------===//
6459 // Namespace Handling
6460 //===----------------------------------------------------------------------===//
6461 
6462 /// \brief Diagnose a mismatch in 'inline' qualifiers when a namespace is
6463 /// reopened.
6464 static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
6465                                             SourceLocation Loc,
6466                                             IdentifierInfo *II, bool *IsInline,
6467                                             NamespaceDecl *PrevNS) {
6468   assert(*IsInline != PrevNS->isInline());
6469 
6470   // HACK: Work around a bug in libstdc++4.6's <atomic>, where
6471   // std::__atomic[0,1,2] are defined as non-inline namespaces, then reopened as
6472   // inline namespaces, with the intention of bringing names into namespace std.
6473   //
6474   // We support this just well enough to get that case working; this is not
6475   // sufficient to support reopening namespaces as inline in general.
6476   if (*IsInline && II && II->getName().startswith("__atomic") &&
6477       S.getSourceManager().isInSystemHeader(Loc)) {
6478     // Mark all prior declarations of the namespace as inline.
6479     for (NamespaceDecl *NS = PrevNS->getMostRecentDecl(); NS;
6480          NS = NS->getPreviousDecl())
6481       NS->setInline(*IsInline);
6482     // Patch up the lookup table for the containing namespace. This isn't really
6483     // correct, but it's good enough for this particular case.
6484     for (DeclContext::decl_iterator I = PrevNS->decls_begin(),
6485                                     E = PrevNS->decls_end(); I != E; ++I)
6486       if (NamedDecl *ND = dyn_cast<NamedDecl>(*I))
6487         PrevNS->getParent()->makeDeclVisibleInContext(ND);
6488     return;
6489   }
6490 
6491   if (PrevNS->isInline())
6492     // The user probably just forgot the 'inline', so suggest that it
6493     // be added back.
6494     S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
6495       << FixItHint::CreateInsertion(KeywordLoc, "inline ");
6496   else
6497     S.Diag(Loc, diag::err_inline_namespace_mismatch)
6498       << IsInline;
6499 
6500   S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
6501   *IsInline = PrevNS->isInline();
6502 }
6503 
6504 /// ActOnStartNamespaceDef - This is called at the start of a namespace
6505 /// definition.
6506 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
6507                                    SourceLocation InlineLoc,
6508                                    SourceLocation NamespaceLoc,
6509                                    SourceLocation IdentLoc,
6510                                    IdentifierInfo *II,
6511                                    SourceLocation LBrace,
6512                                    AttributeList *AttrList) {
6513   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
6514   // For anonymous namespace, take the location of the left brace.
6515   SourceLocation Loc = II ? IdentLoc : LBrace;
6516   bool IsInline = InlineLoc.isValid();
6517   bool IsInvalid = false;
6518   bool IsStd = false;
6519   bool AddToKnown = false;
6520   Scope *DeclRegionScope = NamespcScope->getParent();
6521 
6522   NamespaceDecl *PrevNS = 0;
6523   if (II) {
6524     // C++ [namespace.def]p2:
6525     //   The identifier in an original-namespace-definition shall not
6526     //   have been previously defined in the declarative region in
6527     //   which the original-namespace-definition appears. The
6528     //   identifier in an original-namespace-definition is the name of
6529     //   the namespace. Subsequently in that declarative region, it is
6530     //   treated as an original-namespace-name.
6531     //
6532     // Since namespace names are unique in their scope, and we don't
6533     // look through using directives, just look for any ordinary names.
6534 
6535     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
6536     Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
6537     Decl::IDNS_Namespace;
6538     NamedDecl *PrevDecl = 0;
6539     DeclContext::lookup_result R = CurContext->getRedeclContext()->lookup(II);
6540     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
6541          ++I) {
6542       if ((*I)->getIdentifierNamespace() & IDNS) {
6543         PrevDecl = *I;
6544         break;
6545       }
6546     }
6547 
6548     PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
6549 
6550     if (PrevNS) {
6551       // This is an extended namespace definition.
6552       if (IsInline != PrevNS->isInline())
6553         DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
6554                                         &IsInline, PrevNS);
6555     } else if (PrevDecl) {
6556       // This is an invalid name redefinition.
6557       Diag(Loc, diag::err_redefinition_different_kind)
6558         << II;
6559       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6560       IsInvalid = true;
6561       // Continue on to push Namespc as current DeclContext and return it.
6562     } else if (II->isStr("std") &&
6563                CurContext->getRedeclContext()->isTranslationUnit()) {
6564       // This is the first "real" definition of the namespace "std", so update
6565       // our cache of the "std" namespace to point at this definition.
6566       PrevNS = getStdNamespace();
6567       IsStd = true;
6568       AddToKnown = !IsInline;
6569     } else {
6570       // We've seen this namespace for the first time.
6571       AddToKnown = !IsInline;
6572     }
6573   } else {
6574     // Anonymous namespaces.
6575 
6576     // Determine whether the parent already has an anonymous namespace.
6577     DeclContext *Parent = CurContext->getRedeclContext();
6578     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6579       PrevNS = TU->getAnonymousNamespace();
6580     } else {
6581       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
6582       PrevNS = ND->getAnonymousNamespace();
6583     }
6584 
6585     if (PrevNS && IsInline != PrevNS->isInline())
6586       DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
6587                                       &IsInline, PrevNS);
6588   }
6589 
6590   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
6591                                                  StartLoc, Loc, II, PrevNS);
6592   if (IsInvalid)
6593     Namespc->setInvalidDecl();
6594 
6595   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
6596 
6597   // FIXME: Should we be merging attributes?
6598   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
6599     PushNamespaceVisibilityAttr(Attr, Loc);
6600 
6601   if (IsStd)
6602     StdNamespace = Namespc;
6603   if (AddToKnown)
6604     KnownNamespaces[Namespc] = false;
6605 
6606   if (II) {
6607     PushOnScopeChains(Namespc, DeclRegionScope);
6608   } else {
6609     // Link the anonymous namespace into its parent.
6610     DeclContext *Parent = CurContext->getRedeclContext();
6611     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6612       TU->setAnonymousNamespace(Namespc);
6613     } else {
6614       cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
6615     }
6616 
6617     CurContext->addDecl(Namespc);
6618 
6619     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
6620     //   behaves as if it were replaced by
6621     //     namespace unique { /* empty body */ }
6622     //     using namespace unique;
6623     //     namespace unique { namespace-body }
6624     //   where all occurrences of 'unique' in a translation unit are
6625     //   replaced by the same identifier and this identifier differs
6626     //   from all other identifiers in the entire program.
6627 
6628     // We just create the namespace with an empty name and then add an
6629     // implicit using declaration, just like the standard suggests.
6630     //
6631     // CodeGen enforces the "universally unique" aspect by giving all
6632     // declarations semantically contained within an anonymous
6633     // namespace internal linkage.
6634 
6635     if (!PrevNS) {
6636       UsingDirectiveDecl* UD
6637         = UsingDirectiveDecl::Create(Context, Parent,
6638                                      /* 'using' */ LBrace,
6639                                      /* 'namespace' */ SourceLocation(),
6640                                      /* qualifier */ NestedNameSpecifierLoc(),
6641                                      /* identifier */ SourceLocation(),
6642                                      Namespc,
6643                                      /* Ancestor */ Parent);
6644       UD->setImplicit();
6645       Parent->addDecl(UD);
6646     }
6647   }
6648 
6649   ActOnDocumentableDecl(Namespc);
6650 
6651   // Although we could have an invalid decl (i.e. the namespace name is a
6652   // redefinition), push it as current DeclContext and try to continue parsing.
6653   // FIXME: We should be able to push Namespc here, so that the each DeclContext
6654   // for the namespace has the declarations that showed up in that particular
6655   // namespace definition.
6656   PushDeclContext(NamespcScope, Namespc);
6657   return Namespc;
6658 }
6659 
6660 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
6661 /// is a namespace alias, returns the namespace it points to.
6662 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
6663   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
6664     return AD->getNamespace();
6665   return dyn_cast_or_null<NamespaceDecl>(D);
6666 }
6667 
6668 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
6669 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
6670 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
6671   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
6672   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
6673   Namespc->setRBraceLoc(RBrace);
6674   PopDeclContext();
6675   if (Namespc->hasAttr<VisibilityAttr>())
6676     PopPragmaVisibility(true, RBrace);
6677 }
6678 
6679 CXXRecordDecl *Sema::getStdBadAlloc() const {
6680   return cast_or_null<CXXRecordDecl>(
6681                                   StdBadAlloc.get(Context.getExternalSource()));
6682 }
6683 
6684 NamespaceDecl *Sema::getStdNamespace() const {
6685   return cast_or_null<NamespaceDecl>(
6686                                  StdNamespace.get(Context.getExternalSource()));
6687 }
6688 
6689 /// \brief Retrieve the special "std" namespace, which may require us to
6690 /// implicitly define the namespace.
6691 NamespaceDecl *Sema::getOrCreateStdNamespace() {
6692   if (!StdNamespace) {
6693     // The "std" namespace has not yet been defined, so build one implicitly.
6694     StdNamespace = NamespaceDecl::Create(Context,
6695                                          Context.getTranslationUnitDecl(),
6696                                          /*Inline=*/false,
6697                                          SourceLocation(), SourceLocation(),
6698                                          &PP.getIdentifierTable().get("std"),
6699                                          /*PrevDecl=*/0);
6700     getStdNamespace()->setImplicit(true);
6701   }
6702 
6703   return getStdNamespace();
6704 }
6705 
6706 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
6707   assert(getLangOpts().CPlusPlus &&
6708          "Looking for std::initializer_list outside of C++.");
6709 
6710   // We're looking for implicit instantiations of
6711   // template <typename E> class std::initializer_list.
6712 
6713   if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
6714     return false;
6715 
6716   ClassTemplateDecl *Template = 0;
6717   const TemplateArgument *Arguments = 0;
6718 
6719   if (const RecordType *RT = Ty->getAs<RecordType>()) {
6720 
6721     ClassTemplateSpecializationDecl *Specialization =
6722         dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
6723     if (!Specialization)
6724       return false;
6725 
6726     Template = Specialization->getSpecializedTemplate();
6727     Arguments = Specialization->getTemplateArgs().data();
6728   } else if (const TemplateSpecializationType *TST =
6729                  Ty->getAs<TemplateSpecializationType>()) {
6730     Template = dyn_cast_or_null<ClassTemplateDecl>(
6731         TST->getTemplateName().getAsTemplateDecl());
6732     Arguments = TST->getArgs();
6733   }
6734   if (!Template)
6735     return false;
6736 
6737   if (!StdInitializerList) {
6738     // Haven't recognized std::initializer_list yet, maybe this is it.
6739     CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
6740     if (TemplateClass->getIdentifier() !=
6741             &PP.getIdentifierTable().get("initializer_list") ||
6742         !getStdNamespace()->InEnclosingNamespaceSetOf(
6743             TemplateClass->getDeclContext()))
6744       return false;
6745     // This is a template called std::initializer_list, but is it the right
6746     // template?
6747     TemplateParameterList *Params = Template->getTemplateParameters();
6748     if (Params->getMinRequiredArguments() != 1)
6749       return false;
6750     if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
6751       return false;
6752 
6753     // It's the right template.
6754     StdInitializerList = Template;
6755   }
6756 
6757   if (Template != StdInitializerList)
6758     return false;
6759 
6760   // This is an instance of std::initializer_list. Find the argument type.
6761   if (Element)
6762     *Element = Arguments[0].getAsType();
6763   return true;
6764 }
6765 
6766 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
6767   NamespaceDecl *Std = S.getStdNamespace();
6768   if (!Std) {
6769     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6770     return 0;
6771   }
6772 
6773   LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
6774                       Loc, Sema::LookupOrdinaryName);
6775   if (!S.LookupQualifiedName(Result, Std)) {
6776     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6777     return 0;
6778   }
6779   ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
6780   if (!Template) {
6781     Result.suppressDiagnostics();
6782     // We found something weird. Complain about the first thing we found.
6783     NamedDecl *Found = *Result.begin();
6784     S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
6785     return 0;
6786   }
6787 
6788   // We found some template called std::initializer_list. Now verify that it's
6789   // correct.
6790   TemplateParameterList *Params = Template->getTemplateParameters();
6791   if (Params->getMinRequiredArguments() != 1 ||
6792       !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6793     S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
6794     return 0;
6795   }
6796 
6797   return Template;
6798 }
6799 
6800 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
6801   if (!StdInitializerList) {
6802     StdInitializerList = LookupStdInitializerList(*this, Loc);
6803     if (!StdInitializerList)
6804       return QualType();
6805   }
6806 
6807   TemplateArgumentListInfo Args(Loc, Loc);
6808   Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
6809                                        Context.getTrivialTypeSourceInfo(Element,
6810                                                                         Loc)));
6811   return Context.getCanonicalType(
6812       CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
6813 }
6814 
6815 bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
6816   // C++ [dcl.init.list]p2:
6817   //   A constructor is an initializer-list constructor if its first parameter
6818   //   is of type std::initializer_list<E> or reference to possibly cv-qualified
6819   //   std::initializer_list<E> for some type E, and either there are no other
6820   //   parameters or else all other parameters have default arguments.
6821   if (Ctor->getNumParams() < 1 ||
6822       (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
6823     return false;
6824 
6825   QualType ArgType = Ctor->getParamDecl(0)->getType();
6826   if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
6827     ArgType = RT->getPointeeType().getUnqualifiedType();
6828 
6829   return isStdInitializerList(ArgType, 0);
6830 }
6831 
6832 /// \brief Determine whether a using statement is in a context where it will be
6833 /// apply in all contexts.
6834 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
6835   switch (CurContext->getDeclKind()) {
6836     case Decl::TranslationUnit:
6837       return true;
6838     case Decl::LinkageSpec:
6839       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
6840     default:
6841       return false;
6842   }
6843 }
6844 
6845 namespace {
6846 
6847 // Callback to only accept typo corrections that are namespaces.
6848 class NamespaceValidatorCCC : public CorrectionCandidateCallback {
6849 public:
6850   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
6851     if (NamedDecl *ND = candidate.getCorrectionDecl())
6852       return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
6853     return false;
6854   }
6855 };
6856 
6857 }
6858 
6859 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
6860                                        CXXScopeSpec &SS,
6861                                        SourceLocation IdentLoc,
6862                                        IdentifierInfo *Ident) {
6863   NamespaceValidatorCCC Validator;
6864   R.clear();
6865   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
6866                                                R.getLookupKind(), Sc, &SS,
6867                                                Validator)) {
6868     if (DeclContext *DC = S.computeDeclContext(SS, false)) {
6869       std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
6870       bool DroppedSpecifier = Corrected.WillReplaceSpecifier() &&
6871                               Ident->getName().equals(CorrectedStr);
6872       S.diagnoseTypo(Corrected,
6873                      S.PDiag(diag::err_using_directive_member_suggest)
6874                        << Ident << DC << DroppedSpecifier << SS.getRange(),
6875                      S.PDiag(diag::note_namespace_defined_here));
6876     } else {
6877       S.diagnoseTypo(Corrected,
6878                      S.PDiag(diag::err_using_directive_suggest) << Ident,
6879                      S.PDiag(diag::note_namespace_defined_here));
6880     }
6881     R.addDecl(Corrected.getCorrectionDecl());
6882     return true;
6883   }
6884   return false;
6885 }
6886 
6887 Decl *Sema::ActOnUsingDirective(Scope *S,
6888                                           SourceLocation UsingLoc,
6889                                           SourceLocation NamespcLoc,
6890                                           CXXScopeSpec &SS,
6891                                           SourceLocation IdentLoc,
6892                                           IdentifierInfo *NamespcName,
6893                                           AttributeList *AttrList) {
6894   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
6895   assert(NamespcName && "Invalid NamespcName.");
6896   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
6897 
6898   // This can only happen along a recovery path.
6899   while (S->getFlags() & Scope::TemplateParamScope)
6900     S = S->getParent();
6901   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6902 
6903   UsingDirectiveDecl *UDir = 0;
6904   NestedNameSpecifier *Qualifier = 0;
6905   if (SS.isSet())
6906     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
6907 
6908   // Lookup namespace name.
6909   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
6910   LookupParsedName(R, S, &SS);
6911   if (R.isAmbiguous())
6912     return 0;
6913 
6914   if (R.empty()) {
6915     R.clear();
6916     // Allow "using namespace std;" or "using namespace ::std;" even if
6917     // "std" hasn't been defined yet, for GCC compatibility.
6918     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
6919         NamespcName->isStr("std")) {
6920       Diag(IdentLoc, diag::ext_using_undefined_std);
6921       R.addDecl(getOrCreateStdNamespace());
6922       R.resolveKind();
6923     }
6924     // Otherwise, attempt typo correction.
6925     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
6926   }
6927 
6928   if (!R.empty()) {
6929     NamedDecl *Named = R.getFoundDecl();
6930     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
6931         && "expected namespace decl");
6932     // C++ [namespace.udir]p1:
6933     //   A using-directive specifies that the names in the nominated
6934     //   namespace can be used in the scope in which the
6935     //   using-directive appears after the using-directive. During
6936     //   unqualified name lookup (3.4.1), the names appear as if they
6937     //   were declared in the nearest enclosing namespace which
6938     //   contains both the using-directive and the nominated
6939     //   namespace. [Note: in this context, "contains" means "contains
6940     //   directly or indirectly". ]
6941 
6942     // Find enclosing context containing both using-directive and
6943     // nominated namespace.
6944     NamespaceDecl *NS = getNamespaceDecl(Named);
6945     DeclContext *CommonAncestor = cast<DeclContext>(NS);
6946     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
6947       CommonAncestor = CommonAncestor->getParent();
6948 
6949     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
6950                                       SS.getWithLocInContext(Context),
6951                                       IdentLoc, Named, CommonAncestor);
6952 
6953     if (IsUsingDirectiveInToplevelContext(CurContext) &&
6954         !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
6955       Diag(IdentLoc, diag::warn_using_directive_in_header);
6956     }
6957 
6958     PushUsingDirective(S, UDir);
6959   } else {
6960     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
6961   }
6962 
6963   if (UDir)
6964     ProcessDeclAttributeList(S, UDir, AttrList);
6965 
6966   return UDir;
6967 }
6968 
6969 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
6970   // If the scope has an associated entity and the using directive is at
6971   // namespace or translation unit scope, add the UsingDirectiveDecl into
6972   // its lookup structure so qualified name lookup can find it.
6973   DeclContext *Ctx = S->getEntity();
6974   if (Ctx && !Ctx->isFunctionOrMethod())
6975     Ctx->addDecl(UDir);
6976   else
6977     // Otherwise, it is at block sope. The using-directives will affect lookup
6978     // only to the end of the scope.
6979     S->PushUsingDirective(UDir);
6980 }
6981 
6982 
6983 Decl *Sema::ActOnUsingDeclaration(Scope *S,
6984                                   AccessSpecifier AS,
6985                                   bool HasUsingKeyword,
6986                                   SourceLocation UsingLoc,
6987                                   CXXScopeSpec &SS,
6988                                   UnqualifiedId &Name,
6989                                   AttributeList *AttrList,
6990                                   bool HasTypenameKeyword,
6991                                   SourceLocation TypenameLoc) {
6992   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6993 
6994   switch (Name.getKind()) {
6995   case UnqualifiedId::IK_ImplicitSelfParam:
6996   case UnqualifiedId::IK_Identifier:
6997   case UnqualifiedId::IK_OperatorFunctionId:
6998   case UnqualifiedId::IK_LiteralOperatorId:
6999   case UnqualifiedId::IK_ConversionFunctionId:
7000     break;
7001 
7002   case UnqualifiedId::IK_ConstructorName:
7003   case UnqualifiedId::IK_ConstructorTemplateId:
7004     // C++11 inheriting constructors.
7005     Diag(Name.getLocStart(),
7006          getLangOpts().CPlusPlus11 ?
7007            diag::warn_cxx98_compat_using_decl_constructor :
7008            diag::err_using_decl_constructor)
7009       << SS.getRange();
7010 
7011     if (getLangOpts().CPlusPlus11) break;
7012 
7013     return 0;
7014 
7015   case UnqualifiedId::IK_DestructorName:
7016     Diag(Name.getLocStart(), diag::err_using_decl_destructor)
7017       << SS.getRange();
7018     return 0;
7019 
7020   case UnqualifiedId::IK_TemplateId:
7021     Diag(Name.getLocStart(), diag::err_using_decl_template_id)
7022       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
7023     return 0;
7024   }
7025 
7026   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
7027   DeclarationName TargetName = TargetNameInfo.getName();
7028   if (!TargetName)
7029     return 0;
7030 
7031   // Warn about access declarations.
7032   if (!HasUsingKeyword) {
7033     Diag(Name.getLocStart(),
7034          getLangOpts().CPlusPlus11 ? diag::err_access_decl
7035                                    : diag::warn_access_decl_deprecated)
7036       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
7037   }
7038 
7039   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
7040       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
7041     return 0;
7042 
7043   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
7044                                         TargetNameInfo, AttrList,
7045                                         /* IsInstantiation */ false,
7046                                         HasTypenameKeyword, TypenameLoc);
7047   if (UD)
7048     PushOnScopeChains(UD, S, /*AddToContext*/ false);
7049 
7050   return UD;
7051 }
7052 
7053 /// \brief Determine whether a using declaration considers the given
7054 /// declarations as "equivalent", e.g., if they are redeclarations of
7055 /// the same entity or are both typedefs of the same type.
7056 static bool
7057 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2) {
7058   if (D1->getCanonicalDecl() == D2->getCanonicalDecl())
7059     return true;
7060 
7061   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
7062     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2))
7063       return Context.hasSameType(TD1->getUnderlyingType(),
7064                                  TD2->getUnderlyingType());
7065 
7066   return false;
7067 }
7068 
7069 
7070 /// Determines whether to create a using shadow decl for a particular
7071 /// decl, given the set of decls existing prior to this using lookup.
7072 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
7073                                 const LookupResult &Previous,
7074                                 UsingShadowDecl *&PrevShadow) {
7075   // Diagnose finding a decl which is not from a base class of the
7076   // current class.  We do this now because there are cases where this
7077   // function will silently decide not to build a shadow decl, which
7078   // will pre-empt further diagnostics.
7079   //
7080   // We don't need to do this in C++0x because we do the check once on
7081   // the qualifier.
7082   //
7083   // FIXME: diagnose the following if we care enough:
7084   //   struct A { int foo; };
7085   //   struct B : A { using A::foo; };
7086   //   template <class T> struct C : A {};
7087   //   template <class T> struct D : C<T> { using B::foo; } // <---
7088   // This is invalid (during instantiation) in C++03 because B::foo
7089   // resolves to the using decl in B, which is not a base class of D<T>.
7090   // We can't diagnose it immediately because C<T> is an unknown
7091   // specialization.  The UsingShadowDecl in D<T> then points directly
7092   // to A::foo, which will look well-formed when we instantiate.
7093   // The right solution is to not collapse the shadow-decl chain.
7094   if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
7095     DeclContext *OrigDC = Orig->getDeclContext();
7096 
7097     // Handle enums and anonymous structs.
7098     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
7099     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
7100     while (OrigRec->isAnonymousStructOrUnion())
7101       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
7102 
7103     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
7104       if (OrigDC == CurContext) {
7105         Diag(Using->getLocation(),
7106              diag::err_using_decl_nested_name_specifier_is_current_class)
7107           << Using->getQualifierLoc().getSourceRange();
7108         Diag(Orig->getLocation(), diag::note_using_decl_target);
7109         return true;
7110       }
7111 
7112       Diag(Using->getQualifierLoc().getBeginLoc(),
7113            diag::err_using_decl_nested_name_specifier_is_not_base_class)
7114         << Using->getQualifier()
7115         << cast<CXXRecordDecl>(CurContext)
7116         << Using->getQualifierLoc().getSourceRange();
7117       Diag(Orig->getLocation(), diag::note_using_decl_target);
7118       return true;
7119     }
7120   }
7121 
7122   if (Previous.empty()) return false;
7123 
7124   NamedDecl *Target = Orig;
7125   if (isa<UsingShadowDecl>(Target))
7126     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
7127 
7128   // If the target happens to be one of the previous declarations, we
7129   // don't have a conflict.
7130   //
7131   // FIXME: but we might be increasing its access, in which case we
7132   // should redeclare it.
7133   NamedDecl *NonTag = 0, *Tag = 0;
7134   bool FoundEquivalentDecl = false;
7135   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
7136          I != E; ++I) {
7137     NamedDecl *D = (*I)->getUnderlyingDecl();
7138     if (IsEquivalentForUsingDecl(Context, D, Target)) {
7139       if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(*I))
7140         PrevShadow = Shadow;
7141       FoundEquivalentDecl = true;
7142     }
7143 
7144     (isa<TagDecl>(D) ? Tag : NonTag) = D;
7145   }
7146 
7147   if (FoundEquivalentDecl)
7148     return false;
7149 
7150   if (Target->isFunctionOrFunctionTemplate()) {
7151     FunctionDecl *FD;
7152     if (isa<FunctionTemplateDecl>(Target))
7153       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
7154     else
7155       FD = cast<FunctionDecl>(Target);
7156 
7157     NamedDecl *OldDecl = 0;
7158     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
7159     case Ovl_Overload:
7160       return false;
7161 
7162     case Ovl_NonFunction:
7163       Diag(Using->getLocation(), diag::err_using_decl_conflict);
7164       break;
7165 
7166     // We found a decl with the exact signature.
7167     case Ovl_Match:
7168       // If we're in a record, we want to hide the target, so we
7169       // return true (without a diagnostic) to tell the caller not to
7170       // build a shadow decl.
7171       if (CurContext->isRecord())
7172         return true;
7173 
7174       // If we're not in a record, this is an error.
7175       Diag(Using->getLocation(), diag::err_using_decl_conflict);
7176       break;
7177     }
7178 
7179     Diag(Target->getLocation(), diag::note_using_decl_target);
7180     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
7181     return true;
7182   }
7183 
7184   // Target is not a function.
7185 
7186   if (isa<TagDecl>(Target)) {
7187     // No conflict between a tag and a non-tag.
7188     if (!Tag) return false;
7189 
7190     Diag(Using->getLocation(), diag::err_using_decl_conflict);
7191     Diag(Target->getLocation(), diag::note_using_decl_target);
7192     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
7193     return true;
7194   }
7195 
7196   // No conflict between a tag and a non-tag.
7197   if (!NonTag) return false;
7198 
7199   Diag(Using->getLocation(), diag::err_using_decl_conflict);
7200   Diag(Target->getLocation(), diag::note_using_decl_target);
7201   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
7202   return true;
7203 }
7204 
7205 /// Builds a shadow declaration corresponding to a 'using' declaration.
7206 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
7207                                             UsingDecl *UD,
7208                                             NamedDecl *Orig,
7209                                             UsingShadowDecl *PrevDecl) {
7210 
7211   // If we resolved to another shadow declaration, just coalesce them.
7212   NamedDecl *Target = Orig;
7213   if (isa<UsingShadowDecl>(Target)) {
7214     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
7215     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
7216   }
7217 
7218   UsingShadowDecl *Shadow
7219     = UsingShadowDecl::Create(Context, CurContext,
7220                               UD->getLocation(), UD, Target);
7221   UD->addShadowDecl(Shadow);
7222 
7223   Shadow->setAccess(UD->getAccess());
7224   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
7225     Shadow->setInvalidDecl();
7226 
7227   Shadow->setPreviousDecl(PrevDecl);
7228 
7229   if (S)
7230     PushOnScopeChains(Shadow, S);
7231   else
7232     CurContext->addDecl(Shadow);
7233 
7234 
7235   return Shadow;
7236 }
7237 
7238 /// Hides a using shadow declaration.  This is required by the current
7239 /// using-decl implementation when a resolvable using declaration in a
7240 /// class is followed by a declaration which would hide or override
7241 /// one or more of the using decl's targets; for example:
7242 ///
7243 ///   struct Base { void foo(int); };
7244 ///   struct Derived : Base {
7245 ///     using Base::foo;
7246 ///     void foo(int);
7247 ///   };
7248 ///
7249 /// The governing language is C++03 [namespace.udecl]p12:
7250 ///
7251 ///   When a using-declaration brings names from a base class into a
7252 ///   derived class scope, member functions in the derived class
7253 ///   override and/or hide member functions with the same name and
7254 ///   parameter types in a base class (rather than conflicting).
7255 ///
7256 /// There are two ways to implement this:
7257 ///   (1) optimistically create shadow decls when they're not hidden
7258 ///       by existing declarations, or
7259 ///   (2) don't create any shadow decls (or at least don't make them
7260 ///       visible) until we've fully parsed/instantiated the class.
7261 /// The problem with (1) is that we might have to retroactively remove
7262 /// a shadow decl, which requires several O(n) operations because the
7263 /// decl structures are (very reasonably) not designed for removal.
7264 /// (2) avoids this but is very fiddly and phase-dependent.
7265 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
7266   if (Shadow->getDeclName().getNameKind() ==
7267         DeclarationName::CXXConversionFunctionName)
7268     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
7269 
7270   // Remove it from the DeclContext...
7271   Shadow->getDeclContext()->removeDecl(Shadow);
7272 
7273   // ...and the scope, if applicable...
7274   if (S) {
7275     S->RemoveDecl(Shadow);
7276     IdResolver.RemoveDecl(Shadow);
7277   }
7278 
7279   // ...and the using decl.
7280   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
7281 
7282   // TODO: complain somehow if Shadow was used.  It shouldn't
7283   // be possible for this to happen, because...?
7284 }
7285 
7286 namespace {
7287 class UsingValidatorCCC : public CorrectionCandidateCallback {
7288 public:
7289   UsingValidatorCCC(bool HasTypenameKeyword, bool IsInstantiation,
7290                     bool RequireMember)
7291       : HasTypenameKeyword(HasTypenameKeyword),
7292         IsInstantiation(IsInstantiation), RequireMember(RequireMember) {}
7293 
7294   bool ValidateCandidate(const TypoCorrection &Candidate) LLVM_OVERRIDE {
7295     NamedDecl *ND = Candidate.getCorrectionDecl();
7296 
7297     // Keywords are not valid here.
7298     if (!ND || isa<NamespaceDecl>(ND))
7299       return false;
7300 
7301     if (RequireMember && !isa<FieldDecl>(ND) && !isa<CXXMethodDecl>(ND) &&
7302         !isa<TypeDecl>(ND))
7303       return false;
7304 
7305     // Completely unqualified names are invalid for a 'using' declaration.
7306     if (Candidate.WillReplaceSpecifier() && !Candidate.getCorrectionSpecifier())
7307       return false;
7308 
7309     if (isa<TypeDecl>(ND))
7310       return HasTypenameKeyword || !IsInstantiation;
7311 
7312     return !HasTypenameKeyword;
7313   }
7314 
7315 private:
7316   bool HasTypenameKeyword;
7317   bool IsInstantiation;
7318   bool RequireMember;
7319 };
7320 } // end anonymous namespace
7321 
7322 /// Builds a using declaration.
7323 ///
7324 /// \param IsInstantiation - Whether this call arises from an
7325 ///   instantiation of an unresolved using declaration.  We treat
7326 ///   the lookup differently for these declarations.
7327 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
7328                                        SourceLocation UsingLoc,
7329                                        CXXScopeSpec &SS,
7330                                        const DeclarationNameInfo &NameInfo,
7331                                        AttributeList *AttrList,
7332                                        bool IsInstantiation,
7333                                        bool HasTypenameKeyword,
7334                                        SourceLocation TypenameLoc) {
7335   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
7336   SourceLocation IdentLoc = NameInfo.getLoc();
7337   assert(IdentLoc.isValid() && "Invalid TargetName location.");
7338 
7339   // FIXME: We ignore attributes for now.
7340 
7341   if (SS.isEmpty()) {
7342     Diag(IdentLoc, diag::err_using_requires_qualname);
7343     return 0;
7344   }
7345 
7346   // Do the redeclaration lookup in the current scope.
7347   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
7348                         ForRedeclaration);
7349   Previous.setHideTags(false);
7350   if (S) {
7351     LookupName(Previous, S);
7352 
7353     // It is really dumb that we have to do this.
7354     LookupResult::Filter F = Previous.makeFilter();
7355     while (F.hasNext()) {
7356       NamedDecl *D = F.next();
7357       if (!isDeclInScope(D, CurContext, S))
7358         F.erase();
7359     }
7360     F.done();
7361   } else {
7362     assert(IsInstantiation && "no scope in non-instantiation");
7363     assert(CurContext->isRecord() && "scope not record in instantiation");
7364     LookupQualifiedName(Previous, CurContext);
7365   }
7366 
7367   // Check for invalid redeclarations.
7368   if (CheckUsingDeclRedeclaration(UsingLoc, HasTypenameKeyword,
7369                                   SS, IdentLoc, Previous))
7370     return 0;
7371 
7372   // Check for bad qualifiers.
7373   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
7374     return 0;
7375 
7376   DeclContext *LookupContext = computeDeclContext(SS);
7377   NamedDecl *D;
7378   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
7379   if (!LookupContext) {
7380     if (HasTypenameKeyword) {
7381       // FIXME: not all declaration name kinds are legal here
7382       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
7383                                               UsingLoc, TypenameLoc,
7384                                               QualifierLoc,
7385                                               IdentLoc, NameInfo.getName());
7386     } else {
7387       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
7388                                            QualifierLoc, NameInfo);
7389     }
7390   } else {
7391     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
7392                           NameInfo, HasTypenameKeyword);
7393   }
7394   D->setAccess(AS);
7395   CurContext->addDecl(D);
7396 
7397   if (!LookupContext) return D;
7398   UsingDecl *UD = cast<UsingDecl>(D);
7399 
7400   if (RequireCompleteDeclContext(SS, LookupContext)) {
7401     UD->setInvalidDecl();
7402     return UD;
7403   }
7404 
7405   // The normal rules do not apply to inheriting constructor declarations.
7406   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
7407     if (CheckInheritingConstructorUsingDecl(UD))
7408       UD->setInvalidDecl();
7409     return UD;
7410   }
7411 
7412   // Otherwise, look up the target name.
7413 
7414   LookupResult R(*this, NameInfo, LookupOrdinaryName);
7415 
7416   // Unlike most lookups, we don't always want to hide tag
7417   // declarations: tag names are visible through the using declaration
7418   // even if hidden by ordinary names, *except* in a dependent context
7419   // where it's important for the sanity of two-phase lookup.
7420   if (!IsInstantiation)
7421     R.setHideTags(false);
7422 
7423   // For the purposes of this lookup, we have a base object type
7424   // equal to that of the current context.
7425   if (CurContext->isRecord()) {
7426     R.setBaseObjectType(
7427                    Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
7428   }
7429 
7430   LookupQualifiedName(R, LookupContext);
7431 
7432   // Try to correct typos if possible.
7433   if (R.empty()) {
7434     UsingValidatorCCC CCC(HasTypenameKeyword, IsInstantiation,
7435                           CurContext->isRecord());
7436     if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(),
7437                                                R.getLookupKind(), S, &SS, CCC)){
7438       // We reject any correction for which ND would be NULL.
7439       NamedDecl *ND = Corrected.getCorrectionDecl();
7440       R.setLookupName(Corrected.getCorrection());
7441       R.addDecl(ND);
7442       // We reject candidates where DroppedSpecifier == true, hence the
7443       // literal '0' below.
7444       diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest)
7445                                 << NameInfo.getName() << LookupContext << 0
7446                                 << SS.getRange());
7447     } else {
7448       Diag(IdentLoc, diag::err_no_member)
7449         << NameInfo.getName() << LookupContext << SS.getRange();
7450       UD->setInvalidDecl();
7451       return UD;
7452     }
7453   }
7454 
7455   if (R.isAmbiguous()) {
7456     UD->setInvalidDecl();
7457     return UD;
7458   }
7459 
7460   if (HasTypenameKeyword) {
7461     // If we asked for a typename and got a non-type decl, error out.
7462     if (!R.getAsSingle<TypeDecl>()) {
7463       Diag(IdentLoc, diag::err_using_typename_non_type);
7464       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
7465         Diag((*I)->getUnderlyingDecl()->getLocation(),
7466              diag::note_using_decl_target);
7467       UD->setInvalidDecl();
7468       return UD;
7469     }
7470   } else {
7471     // If we asked for a non-typename and we got a type, error out,
7472     // but only if this is an instantiation of an unresolved using
7473     // decl.  Otherwise just silently find the type name.
7474     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
7475       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
7476       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
7477       UD->setInvalidDecl();
7478       return UD;
7479     }
7480   }
7481 
7482   // C++0x N2914 [namespace.udecl]p6:
7483   // A using-declaration shall not name a namespace.
7484   if (R.getAsSingle<NamespaceDecl>()) {
7485     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
7486       << SS.getRange();
7487     UD->setInvalidDecl();
7488     return UD;
7489   }
7490 
7491   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
7492     UsingShadowDecl *PrevDecl = 0;
7493     if (!CheckUsingShadowDecl(UD, *I, Previous, PrevDecl))
7494       BuildUsingShadowDecl(S, UD, *I, PrevDecl);
7495   }
7496 
7497   return UD;
7498 }
7499 
7500 /// Additional checks for a using declaration referring to a constructor name.
7501 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
7502   assert(!UD->hasTypename() && "expecting a constructor name");
7503 
7504   const Type *SourceType = UD->getQualifier()->getAsType();
7505   assert(SourceType &&
7506          "Using decl naming constructor doesn't have type in scope spec.");
7507   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
7508 
7509   // Check whether the named type is a direct base class.
7510   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
7511   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
7512   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
7513        BaseIt != BaseE; ++BaseIt) {
7514     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
7515     if (CanonicalSourceType == BaseType)
7516       break;
7517     if (BaseIt->getType()->isDependentType())
7518       break;
7519   }
7520 
7521   if (BaseIt == BaseE) {
7522     // Did not find SourceType in the bases.
7523     Diag(UD->getUsingLoc(),
7524          diag::err_using_decl_constructor_not_in_direct_base)
7525       << UD->getNameInfo().getSourceRange()
7526       << QualType(SourceType, 0) << TargetClass;
7527     return true;
7528   }
7529 
7530   if (!CurContext->isDependentContext())
7531     BaseIt->setInheritConstructors();
7532 
7533   return false;
7534 }
7535 
7536 /// Checks that the given using declaration is not an invalid
7537 /// redeclaration.  Note that this is checking only for the using decl
7538 /// itself, not for any ill-formedness among the UsingShadowDecls.
7539 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
7540                                        bool HasTypenameKeyword,
7541                                        const CXXScopeSpec &SS,
7542                                        SourceLocation NameLoc,
7543                                        const LookupResult &Prev) {
7544   // C++03 [namespace.udecl]p8:
7545   // C++0x [namespace.udecl]p10:
7546   //   A using-declaration is a declaration and can therefore be used
7547   //   repeatedly where (and only where) multiple declarations are
7548   //   allowed.
7549   //
7550   // That's in non-member contexts.
7551   if (!CurContext->getRedeclContext()->isRecord())
7552     return false;
7553 
7554   NestedNameSpecifier *Qual
7555     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
7556 
7557   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
7558     NamedDecl *D = *I;
7559 
7560     bool DTypename;
7561     NestedNameSpecifier *DQual;
7562     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
7563       DTypename = UD->hasTypename();
7564       DQual = UD->getQualifier();
7565     } else if (UnresolvedUsingValueDecl *UD
7566                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
7567       DTypename = false;
7568       DQual = UD->getQualifier();
7569     } else if (UnresolvedUsingTypenameDecl *UD
7570                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
7571       DTypename = true;
7572       DQual = UD->getQualifier();
7573     } else continue;
7574 
7575     // using decls differ if one says 'typename' and the other doesn't.
7576     // FIXME: non-dependent using decls?
7577     if (HasTypenameKeyword != DTypename) continue;
7578 
7579     // using decls differ if they name different scopes (but note that
7580     // template instantiation can cause this check to trigger when it
7581     // didn't before instantiation).
7582     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
7583         Context.getCanonicalNestedNameSpecifier(DQual))
7584       continue;
7585 
7586     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
7587     Diag(D->getLocation(), diag::note_using_decl) << 1;
7588     return true;
7589   }
7590 
7591   return false;
7592 }
7593 
7594 
7595 /// Checks that the given nested-name qualifier used in a using decl
7596 /// in the current context is appropriately related to the current
7597 /// scope.  If an error is found, diagnoses it and returns true.
7598 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
7599                                    const CXXScopeSpec &SS,
7600                                    SourceLocation NameLoc) {
7601   DeclContext *NamedContext = computeDeclContext(SS);
7602 
7603   if (!CurContext->isRecord()) {
7604     // C++03 [namespace.udecl]p3:
7605     // C++0x [namespace.udecl]p8:
7606     //   A using-declaration for a class member shall be a member-declaration.
7607 
7608     // If we weren't able to compute a valid scope, it must be a
7609     // dependent class scope.
7610     if (!NamedContext || NamedContext->isRecord()) {
7611       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
7612         << SS.getRange();
7613       return true;
7614     }
7615 
7616     // Otherwise, everything is known to be fine.
7617     return false;
7618   }
7619 
7620   // The current scope is a record.
7621 
7622   // If the named context is dependent, we can't decide much.
7623   if (!NamedContext) {
7624     // FIXME: in C++0x, we can diagnose if we can prove that the
7625     // nested-name-specifier does not refer to a base class, which is
7626     // still possible in some cases.
7627 
7628     // Otherwise we have to conservatively report that things might be
7629     // okay.
7630     return false;
7631   }
7632 
7633   if (!NamedContext->isRecord()) {
7634     // Ideally this would point at the last name in the specifier,
7635     // but we don't have that level of source info.
7636     Diag(SS.getRange().getBegin(),
7637          diag::err_using_decl_nested_name_specifier_is_not_class)
7638       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
7639     return true;
7640   }
7641 
7642   if (!NamedContext->isDependentContext() &&
7643       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
7644     return true;
7645 
7646   if (getLangOpts().CPlusPlus11) {
7647     // C++0x [namespace.udecl]p3:
7648     //   In a using-declaration used as a member-declaration, the
7649     //   nested-name-specifier shall name a base class of the class
7650     //   being defined.
7651 
7652     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
7653                                  cast<CXXRecordDecl>(NamedContext))) {
7654       if (CurContext == NamedContext) {
7655         Diag(NameLoc,
7656              diag::err_using_decl_nested_name_specifier_is_current_class)
7657           << SS.getRange();
7658         return true;
7659       }
7660 
7661       Diag(SS.getRange().getBegin(),
7662            diag::err_using_decl_nested_name_specifier_is_not_base_class)
7663         << (NestedNameSpecifier*) SS.getScopeRep()
7664         << cast<CXXRecordDecl>(CurContext)
7665         << SS.getRange();
7666       return true;
7667     }
7668 
7669     return false;
7670   }
7671 
7672   // C++03 [namespace.udecl]p4:
7673   //   A using-declaration used as a member-declaration shall refer
7674   //   to a member of a base class of the class being defined [etc.].
7675 
7676   // Salient point: SS doesn't have to name a base class as long as
7677   // lookup only finds members from base classes.  Therefore we can
7678   // diagnose here only if we can prove that that can't happen,
7679   // i.e. if the class hierarchies provably don't intersect.
7680 
7681   // TODO: it would be nice if "definitely valid" results were cached
7682   // in the UsingDecl and UsingShadowDecl so that these checks didn't
7683   // need to be repeated.
7684 
7685   struct UserData {
7686     llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
7687 
7688     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
7689       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7690       Data->Bases.insert(Base);
7691       return true;
7692     }
7693 
7694     bool hasDependentBases(const CXXRecordDecl *Class) {
7695       return !Class->forallBases(collect, this);
7696     }
7697 
7698     /// Returns true if the base is dependent or is one of the
7699     /// accumulated base classes.
7700     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
7701       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7702       return !Data->Bases.count(Base);
7703     }
7704 
7705     bool mightShareBases(const CXXRecordDecl *Class) {
7706       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
7707     }
7708   };
7709 
7710   UserData Data;
7711 
7712   // Returns false if we find a dependent base.
7713   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
7714     return false;
7715 
7716   // Returns false if the class has a dependent base or if it or one
7717   // of its bases is present in the base set of the current context.
7718   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
7719     return false;
7720 
7721   Diag(SS.getRange().getBegin(),
7722        diag::err_using_decl_nested_name_specifier_is_not_base_class)
7723     << (NestedNameSpecifier*) SS.getScopeRep()
7724     << cast<CXXRecordDecl>(CurContext)
7725     << SS.getRange();
7726 
7727   return true;
7728 }
7729 
7730 Decl *Sema::ActOnAliasDeclaration(Scope *S,
7731                                   AccessSpecifier AS,
7732                                   MultiTemplateParamsArg TemplateParamLists,
7733                                   SourceLocation UsingLoc,
7734                                   UnqualifiedId &Name,
7735                                   AttributeList *AttrList,
7736                                   TypeResult Type) {
7737   // Skip up to the relevant declaration scope.
7738   while (S->getFlags() & Scope::TemplateParamScope)
7739     S = S->getParent();
7740   assert((S->getFlags() & Scope::DeclScope) &&
7741          "got alias-declaration outside of declaration scope");
7742 
7743   if (Type.isInvalid())
7744     return 0;
7745 
7746   bool Invalid = false;
7747   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
7748   TypeSourceInfo *TInfo = 0;
7749   GetTypeFromParser(Type.get(), &TInfo);
7750 
7751   if (DiagnoseClassNameShadow(CurContext, NameInfo))
7752     return 0;
7753 
7754   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
7755                                       UPPC_DeclarationType)) {
7756     Invalid = true;
7757     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
7758                                              TInfo->getTypeLoc().getBeginLoc());
7759   }
7760 
7761   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
7762   LookupName(Previous, S);
7763 
7764   // Warn about shadowing the name of a template parameter.
7765   if (Previous.isSingleResult() &&
7766       Previous.getFoundDecl()->isTemplateParameter()) {
7767     DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
7768     Previous.clear();
7769   }
7770 
7771   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
7772          "name in alias declaration must be an identifier");
7773   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
7774                                                Name.StartLocation,
7775                                                Name.Identifier, TInfo);
7776 
7777   NewTD->setAccess(AS);
7778 
7779   if (Invalid)
7780     NewTD->setInvalidDecl();
7781 
7782   ProcessDeclAttributeList(S, NewTD, AttrList);
7783 
7784   CheckTypedefForVariablyModifiedType(S, NewTD);
7785   Invalid |= NewTD->isInvalidDecl();
7786 
7787   bool Redeclaration = false;
7788 
7789   NamedDecl *NewND;
7790   if (TemplateParamLists.size()) {
7791     TypeAliasTemplateDecl *OldDecl = 0;
7792     TemplateParameterList *OldTemplateParams = 0;
7793 
7794     if (TemplateParamLists.size() != 1) {
7795       Diag(UsingLoc, diag::err_alias_template_extra_headers)
7796         << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
7797          TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
7798     }
7799     TemplateParameterList *TemplateParams = TemplateParamLists[0];
7800 
7801     // Only consider previous declarations in the same scope.
7802     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
7803                          /*ExplicitInstantiationOrSpecialization*/false);
7804     if (!Previous.empty()) {
7805       Redeclaration = true;
7806 
7807       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
7808       if (!OldDecl && !Invalid) {
7809         Diag(UsingLoc, diag::err_redefinition_different_kind)
7810           << Name.Identifier;
7811 
7812         NamedDecl *OldD = Previous.getRepresentativeDecl();
7813         if (OldD->getLocation().isValid())
7814           Diag(OldD->getLocation(), diag::note_previous_definition);
7815 
7816         Invalid = true;
7817       }
7818 
7819       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
7820         if (TemplateParameterListsAreEqual(TemplateParams,
7821                                            OldDecl->getTemplateParameters(),
7822                                            /*Complain=*/true,
7823                                            TPL_TemplateMatch))
7824           OldTemplateParams = OldDecl->getTemplateParameters();
7825         else
7826           Invalid = true;
7827 
7828         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
7829         if (!Invalid &&
7830             !Context.hasSameType(OldTD->getUnderlyingType(),
7831                                  NewTD->getUnderlyingType())) {
7832           // FIXME: The C++0x standard does not clearly say this is ill-formed,
7833           // but we can't reasonably accept it.
7834           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
7835             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
7836           if (OldTD->getLocation().isValid())
7837             Diag(OldTD->getLocation(), diag::note_previous_definition);
7838           Invalid = true;
7839         }
7840       }
7841     }
7842 
7843     // Merge any previous default template arguments into our parameters,
7844     // and check the parameter list.
7845     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
7846                                    TPC_TypeAliasTemplate))
7847       return 0;
7848 
7849     TypeAliasTemplateDecl *NewDecl =
7850       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
7851                                     Name.Identifier, TemplateParams,
7852                                     NewTD);
7853 
7854     NewDecl->setAccess(AS);
7855 
7856     if (Invalid)
7857       NewDecl->setInvalidDecl();
7858     else if (OldDecl)
7859       NewDecl->setPreviousDecl(OldDecl);
7860 
7861     NewND = NewDecl;
7862   } else {
7863     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
7864     NewND = NewTD;
7865   }
7866 
7867   if (!Redeclaration)
7868     PushOnScopeChains(NewND, S);
7869 
7870   ActOnDocumentableDecl(NewND);
7871   return NewND;
7872 }
7873 
7874 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
7875                                              SourceLocation NamespaceLoc,
7876                                              SourceLocation AliasLoc,
7877                                              IdentifierInfo *Alias,
7878                                              CXXScopeSpec &SS,
7879                                              SourceLocation IdentLoc,
7880                                              IdentifierInfo *Ident) {
7881 
7882   // Lookup the namespace name.
7883   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
7884   LookupParsedName(R, S, &SS);
7885 
7886   // Check if we have a previous declaration with the same name.
7887   NamedDecl *PrevDecl
7888     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
7889                        ForRedeclaration);
7890   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
7891     PrevDecl = 0;
7892 
7893   if (PrevDecl) {
7894     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
7895       // We already have an alias with the same name that points to the same
7896       // namespace, so don't create a new one.
7897       // FIXME: At some point, we'll want to create the (redundant)
7898       // declaration to maintain better source information.
7899       if (!R.isAmbiguous() && !R.empty() &&
7900           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
7901         return 0;
7902     }
7903 
7904     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
7905       diag::err_redefinition_different_kind;
7906     Diag(AliasLoc, DiagID) << Alias;
7907     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
7908     return 0;
7909   }
7910 
7911   if (R.isAmbiguous())
7912     return 0;
7913 
7914   if (R.empty()) {
7915     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
7916       Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
7917       return 0;
7918     }
7919   }
7920 
7921   NamespaceAliasDecl *AliasDecl =
7922     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
7923                                Alias, SS.getWithLocInContext(Context),
7924                                IdentLoc, R.getFoundDecl());
7925 
7926   PushOnScopeChains(AliasDecl, S);
7927   return AliasDecl;
7928 }
7929 
7930 Sema::ImplicitExceptionSpecification
7931 Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
7932                                                CXXMethodDecl *MD) {
7933   CXXRecordDecl *ClassDecl = MD->getParent();
7934 
7935   // C++ [except.spec]p14:
7936   //   An implicitly declared special member function (Clause 12) shall have an
7937   //   exception-specification. [...]
7938   ImplicitExceptionSpecification ExceptSpec(*this);
7939   if (ClassDecl->isInvalidDecl())
7940     return ExceptSpec;
7941 
7942   // Direct base-class constructors.
7943   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7944                                        BEnd = ClassDecl->bases_end();
7945        B != BEnd; ++B) {
7946     if (B->isVirtual()) // Handled below.
7947       continue;
7948 
7949     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7950       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7951       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7952       // If this is a deleted function, add it anyway. This might be conformant
7953       // with the standard. This might not. I'm not sure. It might not matter.
7954       if (Constructor)
7955         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7956     }
7957   }
7958 
7959   // Virtual base-class constructors.
7960   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7961                                        BEnd = ClassDecl->vbases_end();
7962        B != BEnd; ++B) {
7963     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7964       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7965       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7966       // If this is a deleted function, add it anyway. This might be conformant
7967       // with the standard. This might not. I'm not sure. It might not matter.
7968       if (Constructor)
7969         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7970     }
7971   }
7972 
7973   // Field constructors.
7974   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7975                                FEnd = ClassDecl->field_end();
7976        F != FEnd; ++F) {
7977     if (F->hasInClassInitializer()) {
7978       if (Expr *E = F->getInClassInitializer())
7979         ExceptSpec.CalledExpr(E);
7980       else if (!F->isInvalidDecl())
7981         // DR1351:
7982         //   If the brace-or-equal-initializer of a non-static data member
7983         //   invokes a defaulted default constructor of its class or of an
7984         //   enclosing class in a potentially evaluated subexpression, the
7985         //   program is ill-formed.
7986         //
7987         // This resolution is unworkable: the exception specification of the
7988         // default constructor can be needed in an unevaluated context, in
7989         // particular, in the operand of a noexcept-expression, and we can be
7990         // unable to compute an exception specification for an enclosed class.
7991         //
7992         // We do not allow an in-class initializer to require the evaluation
7993         // of the exception specification for any in-class initializer whose
7994         // definition is not lexically complete.
7995         Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
7996     } else if (const RecordType *RecordTy
7997               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7998       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7999       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
8000       // If this is a deleted function, add it anyway. This might be conformant
8001       // with the standard. This might not. I'm not sure. It might not matter.
8002       // In particular, the problem is that this function never gets called. It
8003       // might just be ill-formed because this function attempts to refer to
8004       // a deleted function here.
8005       if (Constructor)
8006         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
8007     }
8008   }
8009 
8010   return ExceptSpec;
8011 }
8012 
8013 Sema::ImplicitExceptionSpecification
8014 Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) {
8015   CXXRecordDecl *ClassDecl = CD->getParent();
8016 
8017   // C++ [except.spec]p14:
8018   //   An inheriting constructor [...] shall have an exception-specification. [...]
8019   ImplicitExceptionSpecification ExceptSpec(*this);
8020   if (ClassDecl->isInvalidDecl())
8021     return ExceptSpec;
8022 
8023   // Inherited constructor.
8024   const CXXConstructorDecl *InheritedCD = CD->getInheritedConstructor();
8025   const CXXRecordDecl *InheritedDecl = InheritedCD->getParent();
8026   // FIXME: Copying or moving the parameters could add extra exceptions to the
8027   // set, as could the default arguments for the inherited constructor. This
8028   // will be addressed when we implement the resolution of core issue 1351.
8029   ExceptSpec.CalledDecl(CD->getLocStart(), InheritedCD);
8030 
8031   // Direct base-class constructors.
8032   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8033                                        BEnd = ClassDecl->bases_end();
8034        B != BEnd; ++B) {
8035     if (B->isVirtual()) // Handled below.
8036       continue;
8037 
8038     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8039       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8040       if (BaseClassDecl == InheritedDecl)
8041         continue;
8042       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
8043       if (Constructor)
8044         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
8045     }
8046   }
8047 
8048   // Virtual base-class constructors.
8049   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8050                                        BEnd = ClassDecl->vbases_end();
8051        B != BEnd; ++B) {
8052     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8053       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8054       if (BaseClassDecl == InheritedDecl)
8055         continue;
8056       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
8057       if (Constructor)
8058         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
8059     }
8060   }
8061 
8062   // Field constructors.
8063   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8064                                FEnd = ClassDecl->field_end();
8065        F != FEnd; ++F) {
8066     if (F->hasInClassInitializer()) {
8067       if (Expr *E = F->getInClassInitializer())
8068         ExceptSpec.CalledExpr(E);
8069       else if (!F->isInvalidDecl())
8070         Diag(CD->getLocation(),
8071              diag::err_in_class_initializer_references_def_ctor) << CD;
8072     } else if (const RecordType *RecordTy
8073               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
8074       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8075       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
8076       if (Constructor)
8077         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
8078     }
8079   }
8080 
8081   return ExceptSpec;
8082 }
8083 
8084 namespace {
8085 /// RAII object to register a special member as being currently declared.
8086 struct DeclaringSpecialMember {
8087   Sema &S;
8088   Sema::SpecialMemberDecl D;
8089   bool WasAlreadyBeingDeclared;
8090 
8091   DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
8092     : S(S), D(RD, CSM) {
8093     WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D);
8094     if (WasAlreadyBeingDeclared)
8095       // This almost never happens, but if it does, ensure that our cache
8096       // doesn't contain a stale result.
8097       S.SpecialMemberCache.clear();
8098 
8099     // FIXME: Register a note to be produced if we encounter an error while
8100     // declaring the special member.
8101   }
8102   ~DeclaringSpecialMember() {
8103     if (!WasAlreadyBeingDeclared)
8104       S.SpecialMembersBeingDeclared.erase(D);
8105   }
8106 
8107   /// \brief Are we already trying to declare this special member?
8108   bool isAlreadyBeingDeclared() const {
8109     return WasAlreadyBeingDeclared;
8110   }
8111 };
8112 }
8113 
8114 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
8115                                                      CXXRecordDecl *ClassDecl) {
8116   // C++ [class.ctor]p5:
8117   //   A default constructor for a class X is a constructor of class X
8118   //   that can be called without an argument. If there is no
8119   //   user-declared constructor for class X, a default constructor is
8120   //   implicitly declared. An implicitly-declared default constructor
8121   //   is an inline public member of its class.
8122   assert(ClassDecl->needsImplicitDefaultConstructor() &&
8123          "Should not build implicit default constructor!");
8124 
8125   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
8126   if (DSM.isAlreadyBeingDeclared())
8127     return 0;
8128 
8129   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8130                                                      CXXDefaultConstructor,
8131                                                      false);
8132 
8133   // Create the actual constructor declaration.
8134   CanQualType ClassType
8135     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8136   SourceLocation ClassLoc = ClassDecl->getLocation();
8137   DeclarationName Name
8138     = Context.DeclarationNames.getCXXConstructorName(ClassType);
8139   DeclarationNameInfo NameInfo(Name, ClassLoc);
8140   CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
8141       Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
8142       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
8143       Constexpr);
8144   DefaultCon->setAccess(AS_public);
8145   DefaultCon->setDefaulted();
8146   DefaultCon->setImplicit();
8147 
8148   // Build an exception specification pointing back at this constructor.
8149   FunctionProtoType::ExtProtoInfo EPI = getImplicitMethodEPI(*this, DefaultCon);
8150   DefaultCon->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8151 
8152   // We don't need to use SpecialMemberIsTrivial here; triviality for default
8153   // constructors is easy to compute.
8154   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
8155 
8156   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
8157     SetDeclDeleted(DefaultCon, ClassLoc);
8158 
8159   // Note that we have declared this constructor.
8160   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
8161 
8162   if (Scope *S = getScopeForContext(ClassDecl))
8163     PushOnScopeChains(DefaultCon, S, false);
8164   ClassDecl->addDecl(DefaultCon);
8165 
8166   return DefaultCon;
8167 }
8168 
8169 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
8170                                             CXXConstructorDecl *Constructor) {
8171   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
8172           !Constructor->doesThisDeclarationHaveABody() &&
8173           !Constructor->isDeleted()) &&
8174     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
8175 
8176   CXXRecordDecl *ClassDecl = Constructor->getParent();
8177   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
8178 
8179   SynthesizedFunctionScope Scope(*this, Constructor);
8180   DiagnosticErrorTrap Trap(Diags);
8181   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
8182       Trap.hasErrorOccurred()) {
8183     Diag(CurrentLocation, diag::note_member_synthesized_at)
8184       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
8185     Constructor->setInvalidDecl();
8186     return;
8187   }
8188 
8189   SourceLocation Loc = Constructor->getLocation();
8190   Constructor->setBody(new (Context) CompoundStmt(Loc));
8191 
8192   Constructor->markUsed(Context);
8193   MarkVTableUsed(CurrentLocation, ClassDecl);
8194 
8195   if (ASTMutationListener *L = getASTMutationListener()) {
8196     L->CompletedImplicitDefinition(Constructor);
8197   }
8198 
8199   DiagnoseUninitializedFields(*this, Constructor);
8200 }
8201 
8202 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
8203   // Perform any delayed checks on exception specifications.
8204   CheckDelayedMemberExceptionSpecs();
8205 }
8206 
8207 namespace {
8208 /// Information on inheriting constructors to declare.
8209 class InheritingConstructorInfo {
8210 public:
8211   InheritingConstructorInfo(Sema &SemaRef, CXXRecordDecl *Derived)
8212       : SemaRef(SemaRef), Derived(Derived) {
8213     // Mark the constructors that we already have in the derived class.
8214     //
8215     // C++11 [class.inhctor]p3: [...] a constructor is implicitly declared [...]
8216     //   unless there is a user-declared constructor with the same signature in
8217     //   the class where the using-declaration appears.
8218     visitAll(Derived, &InheritingConstructorInfo::noteDeclaredInDerived);
8219   }
8220 
8221   void inheritAll(CXXRecordDecl *RD) {
8222     visitAll(RD, &InheritingConstructorInfo::inherit);
8223   }
8224 
8225 private:
8226   /// Information about an inheriting constructor.
8227   struct InheritingConstructor {
8228     InheritingConstructor()
8229       : DeclaredInDerived(false), BaseCtor(0), DerivedCtor(0) {}
8230 
8231     /// If \c true, a constructor with this signature is already declared
8232     /// in the derived class.
8233     bool DeclaredInDerived;
8234 
8235     /// The constructor which is inherited.
8236     const CXXConstructorDecl *BaseCtor;
8237 
8238     /// The derived constructor we declared.
8239     CXXConstructorDecl *DerivedCtor;
8240   };
8241 
8242   /// Inheriting constructors with a given canonical type. There can be at
8243   /// most one such non-template constructor, and any number of templated
8244   /// constructors.
8245   struct InheritingConstructorsForType {
8246     InheritingConstructor NonTemplate;
8247     SmallVector<std::pair<TemplateParameterList *, InheritingConstructor>, 4>
8248         Templates;
8249 
8250     InheritingConstructor &getEntry(Sema &S, const CXXConstructorDecl *Ctor) {
8251       if (FunctionTemplateDecl *FTD = Ctor->getDescribedFunctionTemplate()) {
8252         TemplateParameterList *ParamList = FTD->getTemplateParameters();
8253         for (unsigned I = 0, N = Templates.size(); I != N; ++I)
8254           if (S.TemplateParameterListsAreEqual(ParamList, Templates[I].first,
8255                                                false, S.TPL_TemplateMatch))
8256             return Templates[I].second;
8257         Templates.push_back(std::make_pair(ParamList, InheritingConstructor()));
8258         return Templates.back().second;
8259       }
8260 
8261       return NonTemplate;
8262     }
8263   };
8264 
8265   /// Get or create the inheriting constructor record for a constructor.
8266   InheritingConstructor &getEntry(const CXXConstructorDecl *Ctor,
8267                                   QualType CtorType) {
8268     return Map[CtorType.getCanonicalType()->castAs<FunctionProtoType>()]
8269         .getEntry(SemaRef, Ctor);
8270   }
8271 
8272   typedef void (InheritingConstructorInfo::*VisitFn)(const CXXConstructorDecl*);
8273 
8274   /// Process all constructors for a class.
8275   void visitAll(const CXXRecordDecl *RD, VisitFn Callback) {
8276     for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(),
8277                                       CtorE = RD->ctor_end();
8278          CtorIt != CtorE; ++CtorIt)
8279       (this->*Callback)(*CtorIt);
8280     for (CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
8281              I(RD->decls_begin()), E(RD->decls_end());
8282          I != E; ++I) {
8283       const FunctionDecl *FD = (*I)->getTemplatedDecl();
8284       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
8285         (this->*Callback)(CD);
8286     }
8287   }
8288 
8289   /// Note that a constructor (or constructor template) was declared in Derived.
8290   void noteDeclaredInDerived(const CXXConstructorDecl *Ctor) {
8291     getEntry(Ctor, Ctor->getType()).DeclaredInDerived = true;
8292   }
8293 
8294   /// Inherit a single constructor.
8295   void inherit(const CXXConstructorDecl *Ctor) {
8296     const FunctionProtoType *CtorType =
8297         Ctor->getType()->castAs<FunctionProtoType>();
8298     ArrayRef<QualType> ArgTypes(CtorType->getArgTypes());
8299     FunctionProtoType::ExtProtoInfo EPI = CtorType->getExtProtoInfo();
8300 
8301     SourceLocation UsingLoc = getUsingLoc(Ctor->getParent());
8302 
8303     // Core issue (no number yet): the ellipsis is always discarded.
8304     if (EPI.Variadic) {
8305       SemaRef.Diag(UsingLoc, diag::warn_using_decl_constructor_ellipsis);
8306       SemaRef.Diag(Ctor->getLocation(),
8307                    diag::note_using_decl_constructor_ellipsis);
8308       EPI.Variadic = false;
8309     }
8310 
8311     // Declare a constructor for each number of parameters.
8312     //
8313     // C++11 [class.inhctor]p1:
8314     //   The candidate set of inherited constructors from the class X named in
8315     //   the using-declaration consists of [... modulo defects ...] for each
8316     //   constructor or constructor template of X, the set of constructors or
8317     //   constructor templates that results from omitting any ellipsis parameter
8318     //   specification and successively omitting parameters with a default
8319     //   argument from the end of the parameter-type-list
8320     unsigned MinParams = minParamsToInherit(Ctor);
8321     unsigned Params = Ctor->getNumParams();
8322     if (Params >= MinParams) {
8323       do
8324         declareCtor(UsingLoc, Ctor,
8325                     SemaRef.Context.getFunctionType(
8326                         Ctor->getResultType(), ArgTypes.slice(0, Params), EPI));
8327       while (Params > MinParams &&
8328              Ctor->getParamDecl(--Params)->hasDefaultArg());
8329     }
8330   }
8331 
8332   /// Find the using-declaration which specified that we should inherit the
8333   /// constructors of \p Base.
8334   SourceLocation getUsingLoc(const CXXRecordDecl *Base) {
8335     // No fancy lookup required; just look for the base constructor name
8336     // directly within the derived class.
8337     ASTContext &Context = SemaRef.Context;
8338     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8339         Context.getCanonicalType(Context.getRecordType(Base)));
8340     DeclContext::lookup_const_result Decls = Derived->lookup(Name);
8341     return Decls.empty() ? Derived->getLocation() : Decls[0]->getLocation();
8342   }
8343 
8344   unsigned minParamsToInherit(const CXXConstructorDecl *Ctor) {
8345     // C++11 [class.inhctor]p3:
8346     //   [F]or each constructor template in the candidate set of inherited
8347     //   constructors, a constructor template is implicitly declared
8348     if (Ctor->getDescribedFunctionTemplate())
8349       return 0;
8350 
8351     //   For each non-template constructor in the candidate set of inherited
8352     //   constructors other than a constructor having no parameters or a
8353     //   copy/move constructor having a single parameter, a constructor is
8354     //   implicitly declared [...]
8355     if (Ctor->getNumParams() == 0)
8356       return 1;
8357     if (Ctor->isCopyOrMoveConstructor())
8358       return 2;
8359 
8360     // Per discussion on core reflector, never inherit a constructor which
8361     // would become a default, copy, or move constructor of Derived either.
8362     const ParmVarDecl *PD = Ctor->getParamDecl(0);
8363     const ReferenceType *RT = PD->getType()->getAs<ReferenceType>();
8364     return (RT && RT->getPointeeCXXRecordDecl() == Derived) ? 2 : 1;
8365   }
8366 
8367   /// Declare a single inheriting constructor, inheriting the specified
8368   /// constructor, with the given type.
8369   void declareCtor(SourceLocation UsingLoc, const CXXConstructorDecl *BaseCtor,
8370                    QualType DerivedType) {
8371     InheritingConstructor &Entry = getEntry(BaseCtor, DerivedType);
8372 
8373     // C++11 [class.inhctor]p3:
8374     //   ... a constructor is implicitly declared with the same constructor
8375     //   characteristics unless there is a user-declared constructor with
8376     //   the same signature in the class where the using-declaration appears
8377     if (Entry.DeclaredInDerived)
8378       return;
8379 
8380     // C++11 [class.inhctor]p7:
8381     //   If two using-declarations declare inheriting constructors with the
8382     //   same signature, the program is ill-formed
8383     if (Entry.DerivedCtor) {
8384       if (BaseCtor->getParent() != Entry.BaseCtor->getParent()) {
8385         // Only diagnose this once per constructor.
8386         if (Entry.DerivedCtor->isInvalidDecl())
8387           return;
8388         Entry.DerivedCtor->setInvalidDecl();
8389 
8390         SemaRef.Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
8391         SemaRef.Diag(BaseCtor->getLocation(),
8392                      diag::note_using_decl_constructor_conflict_current_ctor);
8393         SemaRef.Diag(Entry.BaseCtor->getLocation(),
8394                      diag::note_using_decl_constructor_conflict_previous_ctor);
8395         SemaRef.Diag(Entry.DerivedCtor->getLocation(),
8396                      diag::note_using_decl_constructor_conflict_previous_using);
8397       } else {
8398         // Core issue (no number): if the same inheriting constructor is
8399         // produced by multiple base class constructors from the same base
8400         // class, the inheriting constructor is defined as deleted.
8401         SemaRef.SetDeclDeleted(Entry.DerivedCtor, UsingLoc);
8402       }
8403 
8404       return;
8405     }
8406 
8407     ASTContext &Context = SemaRef.Context;
8408     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8409         Context.getCanonicalType(Context.getRecordType(Derived)));
8410     DeclarationNameInfo NameInfo(Name, UsingLoc);
8411 
8412     TemplateParameterList *TemplateParams = 0;
8413     if (const FunctionTemplateDecl *FTD =
8414             BaseCtor->getDescribedFunctionTemplate()) {
8415       TemplateParams = FTD->getTemplateParameters();
8416       // We're reusing template parameters from a different DeclContext. This
8417       // is questionable at best, but works out because the template depth in
8418       // both places is guaranteed to be 0.
8419       // FIXME: Rebuild the template parameters in the new context, and
8420       // transform the function type to refer to them.
8421     }
8422 
8423     // Build type source info pointing at the using-declaration. This is
8424     // required by template instantiation.
8425     TypeSourceInfo *TInfo =
8426         Context.getTrivialTypeSourceInfo(DerivedType, UsingLoc);
8427     FunctionProtoTypeLoc ProtoLoc =
8428         TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
8429 
8430     CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
8431         Context, Derived, UsingLoc, NameInfo, DerivedType,
8432         TInfo, BaseCtor->isExplicit(), /*Inline=*/true,
8433         /*ImplicitlyDeclared=*/true, /*Constexpr=*/BaseCtor->isConstexpr());
8434 
8435     // Build an unevaluated exception specification for this constructor.
8436     const FunctionProtoType *FPT = DerivedType->castAs<FunctionProtoType>();
8437     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8438     EPI.ExceptionSpecType = EST_Unevaluated;
8439     EPI.ExceptionSpecDecl = DerivedCtor;
8440     DerivedCtor->setType(Context.getFunctionType(FPT->getResultType(),
8441                                                  FPT->getArgTypes(), EPI));
8442 
8443     // Build the parameter declarations.
8444     SmallVector<ParmVarDecl *, 16> ParamDecls;
8445     for (unsigned I = 0, N = FPT->getNumArgs(); I != N; ++I) {
8446       TypeSourceInfo *TInfo =
8447           Context.getTrivialTypeSourceInfo(FPT->getArgType(I), UsingLoc);
8448       ParmVarDecl *PD = ParmVarDecl::Create(
8449           Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/0,
8450           FPT->getArgType(I), TInfo, SC_None, /*DefaultArg=*/0);
8451       PD->setScopeInfo(0, I);
8452       PD->setImplicit();
8453       ParamDecls.push_back(PD);
8454       ProtoLoc.setArg(I, PD);
8455     }
8456 
8457     // Set up the new constructor.
8458     DerivedCtor->setAccess(BaseCtor->getAccess());
8459     DerivedCtor->setParams(ParamDecls);
8460     DerivedCtor->setInheritedConstructor(BaseCtor);
8461     if (BaseCtor->isDeleted())
8462       SemaRef.SetDeclDeleted(DerivedCtor, UsingLoc);
8463 
8464     // If this is a constructor template, build the template declaration.
8465     if (TemplateParams) {
8466       FunctionTemplateDecl *DerivedTemplate =
8467           FunctionTemplateDecl::Create(SemaRef.Context, Derived, UsingLoc, Name,
8468                                        TemplateParams, DerivedCtor);
8469       DerivedTemplate->setAccess(BaseCtor->getAccess());
8470       DerivedCtor->setDescribedFunctionTemplate(DerivedTemplate);
8471       Derived->addDecl(DerivedTemplate);
8472     } else {
8473       Derived->addDecl(DerivedCtor);
8474     }
8475 
8476     Entry.BaseCtor = BaseCtor;
8477     Entry.DerivedCtor = DerivedCtor;
8478   }
8479 
8480   Sema &SemaRef;
8481   CXXRecordDecl *Derived;
8482   typedef llvm::DenseMap<const Type *, InheritingConstructorsForType> MapType;
8483   MapType Map;
8484 };
8485 }
8486 
8487 void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
8488   // Defer declaring the inheriting constructors until the class is
8489   // instantiated.
8490   if (ClassDecl->isDependentContext())
8491     return;
8492 
8493   // Find base classes from which we might inherit constructors.
8494   SmallVector<CXXRecordDecl*, 4> InheritedBases;
8495   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
8496                                           BaseE = ClassDecl->bases_end();
8497        BaseIt != BaseE; ++BaseIt)
8498     if (BaseIt->getInheritConstructors())
8499       InheritedBases.push_back(BaseIt->getType()->getAsCXXRecordDecl());
8500 
8501   // Go no further if we're not inheriting any constructors.
8502   if (InheritedBases.empty())
8503     return;
8504 
8505   // Declare the inherited constructors.
8506   InheritingConstructorInfo ICI(*this, ClassDecl);
8507   for (unsigned I = 0, N = InheritedBases.size(); I != N; ++I)
8508     ICI.inheritAll(InheritedBases[I]);
8509 }
8510 
8511 void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
8512                                        CXXConstructorDecl *Constructor) {
8513   CXXRecordDecl *ClassDecl = Constructor->getParent();
8514   assert(Constructor->getInheritedConstructor() &&
8515          !Constructor->doesThisDeclarationHaveABody() &&
8516          !Constructor->isDeleted());
8517 
8518   SynthesizedFunctionScope Scope(*this, Constructor);
8519   DiagnosticErrorTrap Trap(Diags);
8520   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
8521       Trap.hasErrorOccurred()) {
8522     Diag(CurrentLocation, diag::note_inhctor_synthesized_at)
8523       << Context.getTagDeclType(ClassDecl);
8524     Constructor->setInvalidDecl();
8525     return;
8526   }
8527 
8528   SourceLocation Loc = Constructor->getLocation();
8529   Constructor->setBody(new (Context) CompoundStmt(Loc));
8530 
8531   Constructor->markUsed(Context);
8532   MarkVTableUsed(CurrentLocation, ClassDecl);
8533 
8534   if (ASTMutationListener *L = getASTMutationListener()) {
8535     L->CompletedImplicitDefinition(Constructor);
8536   }
8537 }
8538 
8539 
8540 Sema::ImplicitExceptionSpecification
8541 Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
8542   CXXRecordDecl *ClassDecl = MD->getParent();
8543 
8544   // C++ [except.spec]p14:
8545   //   An implicitly declared special member function (Clause 12) shall have
8546   //   an exception-specification.
8547   ImplicitExceptionSpecification ExceptSpec(*this);
8548   if (ClassDecl->isInvalidDecl())
8549     return ExceptSpec;
8550 
8551   // Direct base-class destructors.
8552   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8553                                        BEnd = ClassDecl->bases_end();
8554        B != BEnd; ++B) {
8555     if (B->isVirtual()) // Handled below.
8556       continue;
8557 
8558     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8559       ExceptSpec.CalledDecl(B->getLocStart(),
8560                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8561   }
8562 
8563   // Virtual base-class destructors.
8564   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8565                                        BEnd = ClassDecl->vbases_end();
8566        B != BEnd; ++B) {
8567     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8568       ExceptSpec.CalledDecl(B->getLocStart(),
8569                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8570   }
8571 
8572   // Field destructors.
8573   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8574                                FEnd = ClassDecl->field_end();
8575        F != FEnd; ++F) {
8576     if (const RecordType *RecordTy
8577         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
8578       ExceptSpec.CalledDecl(F->getLocation(),
8579                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
8580   }
8581 
8582   return ExceptSpec;
8583 }
8584 
8585 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
8586   // C++ [class.dtor]p2:
8587   //   If a class has no user-declared destructor, a destructor is
8588   //   declared implicitly. An implicitly-declared destructor is an
8589   //   inline public member of its class.
8590   assert(ClassDecl->needsImplicitDestructor());
8591 
8592   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
8593   if (DSM.isAlreadyBeingDeclared())
8594     return 0;
8595 
8596   // Create the actual destructor declaration.
8597   CanQualType ClassType
8598     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8599   SourceLocation ClassLoc = ClassDecl->getLocation();
8600   DeclarationName Name
8601     = Context.DeclarationNames.getCXXDestructorName(ClassType);
8602   DeclarationNameInfo NameInfo(Name, ClassLoc);
8603   CXXDestructorDecl *Destructor
8604       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8605                                   QualType(), 0, /*isInline=*/true,
8606                                   /*isImplicitlyDeclared=*/true);
8607   Destructor->setAccess(AS_public);
8608   Destructor->setDefaulted();
8609   Destructor->setImplicit();
8610 
8611   // Build an exception specification pointing back at this destructor.
8612   FunctionProtoType::ExtProtoInfo EPI = getImplicitMethodEPI(*this, Destructor);
8613   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8614 
8615   AddOverriddenMethods(ClassDecl, Destructor);
8616 
8617   // We don't need to use SpecialMemberIsTrivial here; triviality for
8618   // destructors is easy to compute.
8619   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
8620 
8621   if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
8622     SetDeclDeleted(Destructor, ClassLoc);
8623 
8624   // Note that we have declared this destructor.
8625   ++ASTContext::NumImplicitDestructorsDeclared;
8626 
8627   // Introduce this destructor into its scope.
8628   if (Scope *S = getScopeForContext(ClassDecl))
8629     PushOnScopeChains(Destructor, S, false);
8630   ClassDecl->addDecl(Destructor);
8631 
8632   return Destructor;
8633 }
8634 
8635 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
8636                                     CXXDestructorDecl *Destructor) {
8637   assert((Destructor->isDefaulted() &&
8638           !Destructor->doesThisDeclarationHaveABody() &&
8639           !Destructor->isDeleted()) &&
8640          "DefineImplicitDestructor - call it for implicit default dtor");
8641   CXXRecordDecl *ClassDecl = Destructor->getParent();
8642   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
8643 
8644   if (Destructor->isInvalidDecl())
8645     return;
8646 
8647   SynthesizedFunctionScope Scope(*this, Destructor);
8648 
8649   DiagnosticErrorTrap Trap(Diags);
8650   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
8651                                          Destructor->getParent());
8652 
8653   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
8654     Diag(CurrentLocation, diag::note_member_synthesized_at)
8655       << CXXDestructor << Context.getTagDeclType(ClassDecl);
8656 
8657     Destructor->setInvalidDecl();
8658     return;
8659   }
8660 
8661   SourceLocation Loc = Destructor->getLocation();
8662   Destructor->setBody(new (Context) CompoundStmt(Loc));
8663   Destructor->markUsed(Context);
8664   MarkVTableUsed(CurrentLocation, ClassDecl);
8665 
8666   if (ASTMutationListener *L = getASTMutationListener()) {
8667     L->CompletedImplicitDefinition(Destructor);
8668   }
8669 }
8670 
8671 /// \brief Perform any semantic analysis which needs to be delayed until all
8672 /// pending class member declarations have been parsed.
8673 void Sema::ActOnFinishCXXMemberDecls() {
8674   // If the context is an invalid C++ class, just suppress these checks.
8675   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
8676     if (Record->isInvalidDecl()) {
8677       DelayedDefaultedMemberExceptionSpecs.clear();
8678       DelayedDestructorExceptionSpecChecks.clear();
8679       return;
8680     }
8681   }
8682 }
8683 
8684 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
8685                                          CXXDestructorDecl *Destructor) {
8686   assert(getLangOpts().CPlusPlus11 &&
8687          "adjusting dtor exception specs was introduced in c++11");
8688 
8689   // C++11 [class.dtor]p3:
8690   //   A declaration of a destructor that does not have an exception-
8691   //   specification is implicitly considered to have the same exception-
8692   //   specification as an implicit declaration.
8693   const FunctionProtoType *DtorType = Destructor->getType()->
8694                                         getAs<FunctionProtoType>();
8695   if (DtorType->hasExceptionSpec())
8696     return;
8697 
8698   // Replace the destructor's type, building off the existing one. Fortunately,
8699   // the only thing of interest in the destructor type is its extended info.
8700   // The return and arguments are fixed.
8701   FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
8702   EPI.ExceptionSpecType = EST_Unevaluated;
8703   EPI.ExceptionSpecDecl = Destructor;
8704   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8705 
8706   // FIXME: If the destructor has a body that could throw, and the newly created
8707   // spec doesn't allow exceptions, we should emit a warning, because this
8708   // change in behavior can break conforming C++03 programs at runtime.
8709   // However, we don't have a body or an exception specification yet, so it
8710   // needs to be done somewhere else.
8711 }
8712 
8713 namespace {
8714 /// \brief An abstract base class for all helper classes used in building the
8715 //  copy/move operators. These classes serve as factory functions and help us
8716 //  avoid using the same Expr* in the AST twice.
8717 class ExprBuilder {
8718   ExprBuilder(const ExprBuilder&) LLVM_DELETED_FUNCTION;
8719   ExprBuilder &operator=(const ExprBuilder&) LLVM_DELETED_FUNCTION;
8720 
8721 protected:
8722   static Expr *assertNotNull(Expr *E) {
8723     assert(E && "Expression construction must not fail.");
8724     return E;
8725   }
8726 
8727 public:
8728   ExprBuilder() {}
8729   virtual ~ExprBuilder() {}
8730 
8731   virtual Expr *build(Sema &S, SourceLocation Loc) const = 0;
8732 };
8733 
8734 class RefBuilder: public ExprBuilder {
8735   VarDecl *Var;
8736   QualType VarType;
8737 
8738 public:
8739   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8740     return assertNotNull(S.BuildDeclRefExpr(Var, VarType, VK_LValue, Loc).take());
8741   }
8742 
8743   RefBuilder(VarDecl *Var, QualType VarType)
8744       : Var(Var), VarType(VarType) {}
8745 };
8746 
8747 class ThisBuilder: public ExprBuilder {
8748 public:
8749   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8750     return assertNotNull(S.ActOnCXXThis(Loc).takeAs<Expr>());
8751   }
8752 };
8753 
8754 class CastBuilder: public ExprBuilder {
8755   const ExprBuilder &Builder;
8756   QualType Type;
8757   ExprValueKind Kind;
8758   const CXXCastPath &Path;
8759 
8760 public:
8761   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8762     return assertNotNull(S.ImpCastExprToType(Builder.build(S, Loc), Type,
8763                                              CK_UncheckedDerivedToBase, Kind,
8764                                              &Path).take());
8765   }
8766 
8767   CastBuilder(const ExprBuilder &Builder, QualType Type, ExprValueKind Kind,
8768               const CXXCastPath &Path)
8769       : Builder(Builder), Type(Type), Kind(Kind), Path(Path) {}
8770 };
8771 
8772 class DerefBuilder: public ExprBuilder {
8773   const ExprBuilder &Builder;
8774 
8775 public:
8776   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8777     return assertNotNull(
8778         S.CreateBuiltinUnaryOp(Loc, UO_Deref, Builder.build(S, Loc)).take());
8779   }
8780 
8781   DerefBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
8782 };
8783 
8784 class MemberBuilder: public ExprBuilder {
8785   const ExprBuilder &Builder;
8786   QualType Type;
8787   CXXScopeSpec SS;
8788   bool IsArrow;
8789   LookupResult &MemberLookup;
8790 
8791 public:
8792   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8793     return assertNotNull(S.BuildMemberReferenceExpr(
8794         Builder.build(S, Loc), Type, Loc, IsArrow, SS, SourceLocation(), 0,
8795         MemberLookup, 0).take());
8796   }
8797 
8798   MemberBuilder(const ExprBuilder &Builder, QualType Type, bool IsArrow,
8799                 LookupResult &MemberLookup)
8800       : Builder(Builder), Type(Type), IsArrow(IsArrow),
8801         MemberLookup(MemberLookup) {}
8802 };
8803 
8804 class MoveCastBuilder: public ExprBuilder {
8805   const ExprBuilder &Builder;
8806 
8807 public:
8808   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8809     return assertNotNull(CastForMoving(S, Builder.build(S, Loc)));
8810   }
8811 
8812   MoveCastBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
8813 };
8814 
8815 class LvalueConvBuilder: public ExprBuilder {
8816   const ExprBuilder &Builder;
8817 
8818 public:
8819   virtual Expr *build(Sema &S, SourceLocation Loc) const LLVM_OVERRIDE {
8820     return assertNotNull(
8821         S.DefaultLvalueConversion(Builder.build(S, Loc)).take());
8822   }
8823 
8824   LvalueConvBuilder(const ExprBuilder &Builder) : Builder(Builder) {}
8825 };
8826 
8827 class SubscriptBuilder: public ExprBuilder {
8828   const ExprBuilder &Base;
8829   const ExprBuilder &Index;
8830 
8831 public:
8832   virtual Expr *build(Sema &S, SourceLocation Loc) const
8833       LLVM_OVERRIDE {
8834     return assertNotNull(S.CreateBuiltinArraySubscriptExpr(
8835         Base.build(S, Loc), Loc, Index.build(S, Loc), Loc).take());
8836   }
8837 
8838   SubscriptBuilder(const ExprBuilder &Base, const ExprBuilder &Index)
8839       : Base(Base), Index(Index) {}
8840 };
8841 
8842 } // end anonymous namespace
8843 
8844 /// When generating a defaulted copy or move assignment operator, if a field
8845 /// should be copied with __builtin_memcpy rather than via explicit assignments,
8846 /// do so. This optimization only applies for arrays of scalars, and for arrays
8847 /// of class type where the selected copy/move-assignment operator is trivial.
8848 static StmtResult
8849 buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
8850                            const ExprBuilder &ToB, const ExprBuilder &FromB) {
8851   // Compute the size of the memory buffer to be copied.
8852   QualType SizeType = S.Context.getSizeType();
8853   llvm::APInt Size(S.Context.getTypeSize(SizeType),
8854                    S.Context.getTypeSizeInChars(T).getQuantity());
8855 
8856   // Take the address of the field references for "from" and "to". We
8857   // directly construct UnaryOperators here because semantic analysis
8858   // does not permit us to take the address of an xvalue.
8859   Expr *From = FromB.build(S, Loc);
8860   From = new (S.Context) UnaryOperator(From, UO_AddrOf,
8861                          S.Context.getPointerType(From->getType()),
8862                          VK_RValue, OK_Ordinary, Loc);
8863   Expr *To = ToB.build(S, Loc);
8864   To = new (S.Context) UnaryOperator(To, UO_AddrOf,
8865                        S.Context.getPointerType(To->getType()),
8866                        VK_RValue, OK_Ordinary, Loc);
8867 
8868   const Type *E = T->getBaseElementTypeUnsafe();
8869   bool NeedsCollectableMemCpy =
8870     E->isRecordType() && E->getAs<RecordType>()->getDecl()->hasObjectMember();
8871 
8872   // Create a reference to the __builtin_objc_memmove_collectable function
8873   StringRef MemCpyName = NeedsCollectableMemCpy ?
8874     "__builtin_objc_memmove_collectable" :
8875     "__builtin_memcpy";
8876   LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
8877                  Sema::LookupOrdinaryName);
8878   S.LookupName(R, S.TUScope, true);
8879 
8880   FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
8881   if (!MemCpy)
8882     // Something went horribly wrong earlier, and we will have complained
8883     // about it.
8884     return StmtError();
8885 
8886   ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
8887                                             VK_RValue, Loc, 0);
8888   assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
8889 
8890   Expr *CallArgs[] = {
8891     To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
8892   };
8893   ExprResult Call = S.ActOnCallExpr(/*Scope=*/0, MemCpyRef.take(),
8894                                     Loc, CallArgs, Loc);
8895 
8896   assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
8897   return S.Owned(Call.takeAs<Stmt>());
8898 }
8899 
8900 /// \brief Builds a statement that copies/moves the given entity from \p From to
8901 /// \c To.
8902 ///
8903 /// This routine is used to copy/move the members of a class with an
8904 /// implicitly-declared copy/move assignment operator. When the entities being
8905 /// copied are arrays, this routine builds for loops to copy them.
8906 ///
8907 /// \param S The Sema object used for type-checking.
8908 ///
8909 /// \param Loc The location where the implicit copy/move is being generated.
8910 ///
8911 /// \param T The type of the expressions being copied/moved. Both expressions
8912 /// must have this type.
8913 ///
8914 /// \param To The expression we are copying/moving to.
8915 ///
8916 /// \param From The expression we are copying/moving from.
8917 ///
8918 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
8919 /// Otherwise, it's a non-static member subobject.
8920 ///
8921 /// \param Copying Whether we're copying or moving.
8922 ///
8923 /// \param Depth Internal parameter recording the depth of the recursion.
8924 ///
8925 /// \returns A statement or a loop that copies the expressions, or StmtResult(0)
8926 /// if a memcpy should be used instead.
8927 static StmtResult
8928 buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
8929                                  const ExprBuilder &To, const ExprBuilder &From,
8930                                  bool CopyingBaseSubobject, bool Copying,
8931                                  unsigned Depth = 0) {
8932   // C++11 [class.copy]p28:
8933   //   Each subobject is assigned in the manner appropriate to its type:
8934   //
8935   //     - if the subobject is of class type, as if by a call to operator= with
8936   //       the subobject as the object expression and the corresponding
8937   //       subobject of x as a single function argument (as if by explicit
8938   //       qualification; that is, ignoring any possible virtual overriding
8939   //       functions in more derived classes);
8940   //
8941   // C++03 [class.copy]p13:
8942   //     - if the subobject is of class type, the copy assignment operator for
8943   //       the class is used (as if by explicit qualification; that is,
8944   //       ignoring any possible virtual overriding functions in more derived
8945   //       classes);
8946   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
8947     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8948 
8949     // Look for operator=.
8950     DeclarationName Name
8951       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8952     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
8953     S.LookupQualifiedName(OpLookup, ClassDecl, false);
8954 
8955     // Prior to C++11, filter out any result that isn't a copy/move-assignment
8956     // operator.
8957     if (!S.getLangOpts().CPlusPlus11) {
8958       LookupResult::Filter F = OpLookup.makeFilter();
8959       while (F.hasNext()) {
8960         NamedDecl *D = F.next();
8961         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
8962           if (Method->isCopyAssignmentOperator() ||
8963               (!Copying && Method->isMoveAssignmentOperator()))
8964             continue;
8965 
8966         F.erase();
8967       }
8968       F.done();
8969     }
8970 
8971     // Suppress the protected check (C++ [class.protected]) for each of the
8972     // assignment operators we found. This strange dance is required when
8973     // we're assigning via a base classes's copy-assignment operator. To
8974     // ensure that we're getting the right base class subobject (without
8975     // ambiguities), we need to cast "this" to that subobject type; to
8976     // ensure that we don't go through the virtual call mechanism, we need
8977     // to qualify the operator= name with the base class (see below). However,
8978     // this means that if the base class has a protected copy assignment
8979     // operator, the protected member access check will fail. So, we
8980     // rewrite "protected" access to "public" access in this case, since we
8981     // know by construction that we're calling from a derived class.
8982     if (CopyingBaseSubobject) {
8983       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
8984            L != LEnd; ++L) {
8985         if (L.getAccess() == AS_protected)
8986           L.setAccess(AS_public);
8987       }
8988     }
8989 
8990     // Create the nested-name-specifier that will be used to qualify the
8991     // reference to operator=; this is required to suppress the virtual
8992     // call mechanism.
8993     CXXScopeSpec SS;
8994     const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
8995     SS.MakeTrivial(S.Context,
8996                    NestedNameSpecifier::Create(S.Context, 0, false,
8997                                                CanonicalT),
8998                    Loc);
8999 
9000     // Create the reference to operator=.
9001     ExprResult OpEqualRef
9002       = S.BuildMemberReferenceExpr(To.build(S, Loc), T, Loc, /*isArrow=*/false,
9003                                    SS, /*TemplateKWLoc=*/SourceLocation(),
9004                                    /*FirstQualifierInScope=*/0,
9005                                    OpLookup,
9006                                    /*TemplateArgs=*/0,
9007                                    /*SuppressQualifierCheck=*/true);
9008     if (OpEqualRef.isInvalid())
9009       return StmtError();
9010 
9011     // Build the call to the assignment operator.
9012 
9013     Expr *FromInst = From.build(S, Loc);
9014     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
9015                                                   OpEqualRef.takeAs<Expr>(),
9016                                                   Loc, FromInst, Loc);
9017     if (Call.isInvalid())
9018       return StmtError();
9019 
9020     // If we built a call to a trivial 'operator=' while copying an array,
9021     // bail out. We'll replace the whole shebang with a memcpy.
9022     CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
9023     if (CE && CE->getMethodDecl()->isTrivial() && Depth)
9024       return StmtResult((Stmt*)0);
9025 
9026     // Convert to an expression-statement, and clean up any produced
9027     // temporaries.
9028     return S.ActOnExprStmt(Call);
9029   }
9030 
9031   //     - if the subobject is of scalar type, the built-in assignment
9032   //       operator is used.
9033   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
9034   if (!ArrayTy) {
9035     ExprResult Assignment = S.CreateBuiltinBinOp(
9036         Loc, BO_Assign, To.build(S, Loc), From.build(S, Loc));
9037     if (Assignment.isInvalid())
9038       return StmtError();
9039     return S.ActOnExprStmt(Assignment);
9040   }
9041 
9042   //     - if the subobject is an array, each element is assigned, in the
9043   //       manner appropriate to the element type;
9044 
9045   // Construct a loop over the array bounds, e.g.,
9046   //
9047   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
9048   //
9049   // that will copy each of the array elements.
9050   QualType SizeType = S.Context.getSizeType();
9051 
9052   // Create the iteration variable.
9053   IdentifierInfo *IterationVarName = 0;
9054   {
9055     SmallString<8> Str;
9056     llvm::raw_svector_ostream OS(Str);
9057     OS << "__i" << Depth;
9058     IterationVarName = &S.Context.Idents.get(OS.str());
9059   }
9060   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
9061                                           IterationVarName, SizeType,
9062                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
9063                                           SC_None);
9064 
9065   // Initialize the iteration variable to zero.
9066   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
9067   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
9068 
9069   // Creates a reference to the iteration variable.
9070   RefBuilder IterationVarRef(IterationVar, SizeType);
9071   LvalueConvBuilder IterationVarRefRVal(IterationVarRef);
9072 
9073   // Create the DeclStmt that holds the iteration variable.
9074   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
9075 
9076   // Subscript the "from" and "to" expressions with the iteration variable.
9077   SubscriptBuilder FromIndexCopy(From, IterationVarRefRVal);
9078   MoveCastBuilder FromIndexMove(FromIndexCopy);
9079   const ExprBuilder *FromIndex;
9080   if (Copying)
9081     FromIndex = &FromIndexCopy;
9082   else
9083     FromIndex = &FromIndexMove;
9084 
9085   SubscriptBuilder ToIndex(To, IterationVarRefRVal);
9086 
9087   // Build the copy/move for an individual element of the array.
9088   StmtResult Copy =
9089     buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
9090                                      ToIndex, *FromIndex, CopyingBaseSubobject,
9091                                      Copying, Depth + 1);
9092   // Bail out if copying fails or if we determined that we should use memcpy.
9093   if (Copy.isInvalid() || !Copy.get())
9094     return Copy;
9095 
9096   // Create the comparison against the array bound.
9097   llvm::APInt Upper
9098     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
9099   Expr *Comparison
9100     = new (S.Context) BinaryOperator(IterationVarRefRVal.build(S, Loc),
9101                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
9102                                      BO_NE, S.Context.BoolTy,
9103                                      VK_RValue, OK_Ordinary, Loc, false);
9104 
9105   // Create the pre-increment of the iteration variable.
9106   Expr *Increment
9107     = new (S.Context) UnaryOperator(IterationVarRef.build(S, Loc), UO_PreInc,
9108                                     SizeType, VK_LValue, OK_Ordinary, Loc);
9109 
9110   // Construct the loop that copies all elements of this array.
9111   return S.ActOnForStmt(Loc, Loc, InitStmt,
9112                         S.MakeFullExpr(Comparison),
9113                         0, S.MakeFullDiscardedValueExpr(Increment),
9114                         Loc, Copy.take());
9115 }
9116 
9117 static StmtResult
9118 buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
9119                       const ExprBuilder &To, const ExprBuilder &From,
9120                       bool CopyingBaseSubobject, bool Copying) {
9121   // Maybe we should use a memcpy?
9122   if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
9123       T.isTriviallyCopyableType(S.Context))
9124     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
9125 
9126   StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
9127                                                      CopyingBaseSubobject,
9128                                                      Copying, 0));
9129 
9130   // If we ended up picking a trivial assignment operator for an array of a
9131   // non-trivially-copyable class type, just emit a memcpy.
9132   if (!Result.isInvalid() && !Result.get())
9133     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
9134 
9135   return Result;
9136 }
9137 
9138 Sema::ImplicitExceptionSpecification
9139 Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
9140   CXXRecordDecl *ClassDecl = MD->getParent();
9141 
9142   ImplicitExceptionSpecification ExceptSpec(*this);
9143   if (ClassDecl->isInvalidDecl())
9144     return ExceptSpec;
9145 
9146   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
9147   assert(T->getNumArgs() == 1 && "not a copy assignment op");
9148   unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
9149 
9150   // C++ [except.spec]p14:
9151   //   An implicitly declared special member function (Clause 12) shall have an
9152   //   exception-specification. [...]
9153 
9154   // It is unspecified whether or not an implicit copy assignment operator
9155   // attempts to deduplicate calls to assignment operators of virtual bases are
9156   // made. As such, this exception specification is effectively unspecified.
9157   // Based on a similar decision made for constness in C++0x, we're erring on
9158   // the side of assuming such calls to be made regardless of whether they
9159   // actually happen.
9160   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9161                                        BaseEnd = ClassDecl->bases_end();
9162        Base != BaseEnd; ++Base) {
9163     if (Base->isVirtual())
9164       continue;
9165 
9166     CXXRecordDecl *BaseClassDecl
9167       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9168     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
9169                                                             ArgQuals, false, 0))
9170       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
9171   }
9172 
9173   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9174                                        BaseEnd = ClassDecl->vbases_end();
9175        Base != BaseEnd; ++Base) {
9176     CXXRecordDecl *BaseClassDecl
9177       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9178     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
9179                                                             ArgQuals, false, 0))
9180       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
9181   }
9182 
9183   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9184                                   FieldEnd = ClassDecl->field_end();
9185        Field != FieldEnd;
9186        ++Field) {
9187     QualType FieldType = Context.getBaseElementType(Field->getType());
9188     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9189       if (CXXMethodDecl *CopyAssign =
9190           LookupCopyingAssignment(FieldClassDecl,
9191                                   ArgQuals | FieldType.getCVRQualifiers(),
9192                                   false, 0))
9193         ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
9194     }
9195   }
9196 
9197   return ExceptSpec;
9198 }
9199 
9200 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
9201   // Note: The following rules are largely analoguous to the copy
9202   // constructor rules. Note that virtual bases are not taken into account
9203   // for determining the argument type of the operator. Note also that
9204   // operators taking an object instead of a reference are allowed.
9205   assert(ClassDecl->needsImplicitCopyAssignment());
9206 
9207   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
9208   if (DSM.isAlreadyBeingDeclared())
9209     return 0;
9210 
9211   QualType ArgType = Context.getTypeDeclType(ClassDecl);
9212   QualType RetType = Context.getLValueReferenceType(ArgType);
9213   bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
9214   if (Const)
9215     ArgType = ArgType.withConst();
9216   ArgType = Context.getLValueReferenceType(ArgType);
9217 
9218   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9219                                                      CXXCopyAssignment,
9220                                                      Const);
9221 
9222   //   An implicitly-declared copy assignment operator is an inline public
9223   //   member of its class.
9224   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
9225   SourceLocation ClassLoc = ClassDecl->getLocation();
9226   DeclarationNameInfo NameInfo(Name, ClassLoc);
9227   CXXMethodDecl *CopyAssignment =
9228       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9229                             /*TInfo=*/ 0, /*StorageClass=*/ SC_None,
9230                             /*isInline=*/ true, Constexpr, SourceLocation());
9231   CopyAssignment->setAccess(AS_public);
9232   CopyAssignment->setDefaulted();
9233   CopyAssignment->setImplicit();
9234 
9235   // Build an exception specification pointing back at this member.
9236   FunctionProtoType::ExtProtoInfo EPI =
9237       getImplicitMethodEPI(*this, CopyAssignment);
9238   CopyAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
9239 
9240   // Add the parameter to the operator.
9241   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
9242                                                ClassLoc, ClassLoc, /*Id=*/0,
9243                                                ArgType, /*TInfo=*/0,
9244                                                SC_None, 0);
9245   CopyAssignment->setParams(FromParam);
9246 
9247   AddOverriddenMethods(ClassDecl, CopyAssignment);
9248 
9249   CopyAssignment->setTrivial(
9250     ClassDecl->needsOverloadResolutionForCopyAssignment()
9251       ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
9252       : ClassDecl->hasTrivialCopyAssignment());
9253 
9254   if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
9255     SetDeclDeleted(CopyAssignment, ClassLoc);
9256 
9257   // Note that we have added this copy-assignment operator.
9258   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
9259 
9260   if (Scope *S = getScopeForContext(ClassDecl))
9261     PushOnScopeChains(CopyAssignment, S, false);
9262   ClassDecl->addDecl(CopyAssignment);
9263 
9264   return CopyAssignment;
9265 }
9266 
9267 /// Diagnose an implicit copy operation for a class which is odr-used, but
9268 /// which is deprecated because the class has a user-declared copy constructor,
9269 /// copy assignment operator, or destructor.
9270 static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp,
9271                                             SourceLocation UseLoc) {
9272   assert(CopyOp->isImplicit());
9273 
9274   CXXRecordDecl *RD = CopyOp->getParent();
9275   CXXMethodDecl *UserDeclaredOperation = 0;
9276 
9277   // In Microsoft mode, assignment operations don't affect constructors and
9278   // vice versa.
9279   if (RD->hasUserDeclaredDestructor()) {
9280     UserDeclaredOperation = RD->getDestructor();
9281   } else if (!isa<CXXConstructorDecl>(CopyOp) &&
9282              RD->hasUserDeclaredCopyConstructor() &&
9283              !S.getLangOpts().MicrosoftMode) {
9284     // Find any user-declared copy constructor.
9285     for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
9286                                       E = RD->ctor_end(); I != E; ++I) {
9287       if (I->isCopyConstructor()) {
9288         UserDeclaredOperation = *I;
9289         break;
9290       }
9291     }
9292     assert(UserDeclaredOperation);
9293   } else if (isa<CXXConstructorDecl>(CopyOp) &&
9294              RD->hasUserDeclaredCopyAssignment() &&
9295              !S.getLangOpts().MicrosoftMode) {
9296     // Find any user-declared move assignment operator.
9297     for (CXXRecordDecl::method_iterator I = RD->method_begin(),
9298                                         E = RD->method_end(); I != E; ++I) {
9299       if (I->isCopyAssignmentOperator()) {
9300         UserDeclaredOperation = *I;
9301         break;
9302       }
9303     }
9304     assert(UserDeclaredOperation);
9305   }
9306 
9307   if (UserDeclaredOperation) {
9308     S.Diag(UserDeclaredOperation->getLocation(),
9309          diag::warn_deprecated_copy_operation)
9310       << RD << /*copy assignment*/!isa<CXXConstructorDecl>(CopyOp)
9311       << /*destructor*/isa<CXXDestructorDecl>(UserDeclaredOperation);
9312     S.Diag(UseLoc, diag::note_member_synthesized_at)
9313       << (isa<CXXConstructorDecl>(CopyOp) ? Sema::CXXCopyConstructor
9314                                           : Sema::CXXCopyAssignment)
9315       << RD;
9316   }
9317 }
9318 
9319 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
9320                                         CXXMethodDecl *CopyAssignOperator) {
9321   assert((CopyAssignOperator->isDefaulted() &&
9322           CopyAssignOperator->isOverloadedOperator() &&
9323           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
9324           !CopyAssignOperator->doesThisDeclarationHaveABody() &&
9325           !CopyAssignOperator->isDeleted()) &&
9326          "DefineImplicitCopyAssignment called for wrong function");
9327 
9328   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
9329 
9330   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
9331     CopyAssignOperator->setInvalidDecl();
9332     return;
9333   }
9334 
9335   // C++11 [class.copy]p18:
9336   //   The [definition of an implicitly declared copy assignment operator] is
9337   //   deprecated if the class has a user-declared copy constructor or a
9338   //   user-declared destructor.
9339   if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
9340     diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator, CurrentLocation);
9341 
9342   CopyAssignOperator->markUsed(Context);
9343 
9344   SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
9345   DiagnosticErrorTrap Trap(Diags);
9346 
9347   // C++0x [class.copy]p30:
9348   //   The implicitly-defined or explicitly-defaulted copy assignment operator
9349   //   for a non-union class X performs memberwise copy assignment of its
9350   //   subobjects. The direct base classes of X are assigned first, in the
9351   //   order of their declaration in the base-specifier-list, and then the
9352   //   immediate non-static data members of X are assigned, in the order in
9353   //   which they were declared in the class definition.
9354 
9355   // The statements that form the synthesized function body.
9356   SmallVector<Stmt*, 8> Statements;
9357 
9358   // The parameter for the "other" object, which we are copying from.
9359   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
9360   Qualifiers OtherQuals = Other->getType().getQualifiers();
9361   QualType OtherRefType = Other->getType();
9362   if (const LValueReferenceType *OtherRef
9363                                 = OtherRefType->getAs<LValueReferenceType>()) {
9364     OtherRefType = OtherRef->getPointeeType();
9365     OtherQuals = OtherRefType.getQualifiers();
9366   }
9367 
9368   // Our location for everything implicitly-generated.
9369   SourceLocation Loc = CopyAssignOperator->getLocation();
9370 
9371   // Builds a DeclRefExpr for the "other" object.
9372   RefBuilder OtherRef(Other, OtherRefType);
9373 
9374   // Builds the "this" pointer.
9375   ThisBuilder This;
9376 
9377   // Assign base classes.
9378   bool Invalid = false;
9379   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9380        E = ClassDecl->bases_end(); Base != E; ++Base) {
9381     // Form the assignment:
9382     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
9383     QualType BaseType = Base->getType().getUnqualifiedType();
9384     if (!BaseType->isRecordType()) {
9385       Invalid = true;
9386       continue;
9387     }
9388 
9389     CXXCastPath BasePath;
9390     BasePath.push_back(Base);
9391 
9392     // Construct the "from" expression, which is an implicit cast to the
9393     // appropriately-qualified base type.
9394     CastBuilder From(OtherRef, Context.getQualifiedType(BaseType, OtherQuals),
9395                      VK_LValue, BasePath);
9396 
9397     // Dereference "this".
9398     DerefBuilder DerefThis(This);
9399     CastBuilder To(DerefThis,
9400                    Context.getCVRQualifiedType(
9401                        BaseType, CopyAssignOperator->getTypeQualifiers()),
9402                    VK_LValue, BasePath);
9403 
9404     // Build the copy.
9405     StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
9406                                             To, From,
9407                                             /*CopyingBaseSubobject=*/true,
9408                                             /*Copying=*/true);
9409     if (Copy.isInvalid()) {
9410       Diag(CurrentLocation, diag::note_member_synthesized_at)
9411         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9412       CopyAssignOperator->setInvalidDecl();
9413       return;
9414     }
9415 
9416     // Success! Record the copy.
9417     Statements.push_back(Copy.takeAs<Expr>());
9418   }
9419 
9420   // Assign non-static members.
9421   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9422                                   FieldEnd = ClassDecl->field_end();
9423        Field != FieldEnd; ++Field) {
9424     if (Field->isUnnamedBitfield())
9425       continue;
9426 
9427     if (Field->isInvalidDecl()) {
9428       Invalid = true;
9429       continue;
9430     }
9431 
9432     // Check for members of reference type; we can't copy those.
9433     if (Field->getType()->isReferenceType()) {
9434       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9435         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9436       Diag(Field->getLocation(), diag::note_declared_at);
9437       Diag(CurrentLocation, diag::note_member_synthesized_at)
9438         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9439       Invalid = true;
9440       continue;
9441     }
9442 
9443     // Check for members of const-qualified, non-class type.
9444     QualType BaseType = Context.getBaseElementType(Field->getType());
9445     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9446       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9447         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9448       Diag(Field->getLocation(), diag::note_declared_at);
9449       Diag(CurrentLocation, diag::note_member_synthesized_at)
9450         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9451       Invalid = true;
9452       continue;
9453     }
9454 
9455     // Suppress assigning zero-width bitfields.
9456     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9457       continue;
9458 
9459     QualType FieldType = Field->getType().getNonReferenceType();
9460     if (FieldType->isIncompleteArrayType()) {
9461       assert(ClassDecl->hasFlexibleArrayMember() &&
9462              "Incomplete array type is not valid");
9463       continue;
9464     }
9465 
9466     // Build references to the field in the object we're copying from and to.
9467     CXXScopeSpec SS; // Intentionally empty
9468     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9469                               LookupMemberName);
9470     MemberLookup.addDecl(*Field);
9471     MemberLookup.resolveKind();
9472 
9473     MemberBuilder From(OtherRef, OtherRefType, /*IsArrow=*/false, MemberLookup);
9474 
9475     MemberBuilder To(This, getCurrentThisType(), /*IsArrow=*/true, MemberLookup);
9476 
9477     // Build the copy of this field.
9478     StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
9479                                             To, From,
9480                                             /*CopyingBaseSubobject=*/false,
9481                                             /*Copying=*/true);
9482     if (Copy.isInvalid()) {
9483       Diag(CurrentLocation, diag::note_member_synthesized_at)
9484         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9485       CopyAssignOperator->setInvalidDecl();
9486       return;
9487     }
9488 
9489     // Success! Record the copy.
9490     Statements.push_back(Copy.takeAs<Stmt>());
9491   }
9492 
9493   if (!Invalid) {
9494     // Add a "return *this;"
9495     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This.build(*this, Loc));
9496 
9497     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9498     if (Return.isInvalid())
9499       Invalid = true;
9500     else {
9501       Statements.push_back(Return.takeAs<Stmt>());
9502 
9503       if (Trap.hasErrorOccurred()) {
9504         Diag(CurrentLocation, diag::note_member_synthesized_at)
9505           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9506         Invalid = true;
9507       }
9508     }
9509   }
9510 
9511   if (Invalid) {
9512     CopyAssignOperator->setInvalidDecl();
9513     return;
9514   }
9515 
9516   StmtResult Body;
9517   {
9518     CompoundScopeRAII CompoundScope(*this);
9519     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9520                              /*isStmtExpr=*/false);
9521     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9522   }
9523   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
9524 
9525   if (ASTMutationListener *L = getASTMutationListener()) {
9526     L->CompletedImplicitDefinition(CopyAssignOperator);
9527   }
9528 }
9529 
9530 Sema::ImplicitExceptionSpecification
9531 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
9532   CXXRecordDecl *ClassDecl = MD->getParent();
9533 
9534   ImplicitExceptionSpecification ExceptSpec(*this);
9535   if (ClassDecl->isInvalidDecl())
9536     return ExceptSpec;
9537 
9538   // C++0x [except.spec]p14:
9539   //   An implicitly declared special member function (Clause 12) shall have an
9540   //   exception-specification. [...]
9541 
9542   // It is unspecified whether or not an implicit move assignment operator
9543   // attempts to deduplicate calls to assignment operators of virtual bases are
9544   // made. As such, this exception specification is effectively unspecified.
9545   // Based on a similar decision made for constness in C++0x, we're erring on
9546   // the side of assuming such calls to be made regardless of whether they
9547   // actually happen.
9548   // Note that a move constructor is not implicitly declared when there are
9549   // virtual bases, but it can still be user-declared and explicitly defaulted.
9550   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9551                                        BaseEnd = ClassDecl->bases_end();
9552        Base != BaseEnd; ++Base) {
9553     if (Base->isVirtual())
9554       continue;
9555 
9556     CXXRecordDecl *BaseClassDecl
9557       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9558     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9559                                                            0, false, 0))
9560       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9561   }
9562 
9563   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9564                                        BaseEnd = ClassDecl->vbases_end();
9565        Base != BaseEnd; ++Base) {
9566     CXXRecordDecl *BaseClassDecl
9567       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9568     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9569                                                            0, false, 0))
9570       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9571   }
9572 
9573   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9574                                   FieldEnd = ClassDecl->field_end();
9575        Field != FieldEnd;
9576        ++Field) {
9577     QualType FieldType = Context.getBaseElementType(Field->getType());
9578     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9579       if (CXXMethodDecl *MoveAssign =
9580               LookupMovingAssignment(FieldClassDecl,
9581                                      FieldType.getCVRQualifiers(),
9582                                      false, 0))
9583         ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
9584     }
9585   }
9586 
9587   return ExceptSpec;
9588 }
9589 
9590 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
9591   assert(ClassDecl->needsImplicitMoveAssignment());
9592 
9593   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
9594   if (DSM.isAlreadyBeingDeclared())
9595     return 0;
9596 
9597   // Note: The following rules are largely analoguous to the move
9598   // constructor rules.
9599 
9600   QualType ArgType = Context.getTypeDeclType(ClassDecl);
9601   QualType RetType = Context.getLValueReferenceType(ArgType);
9602   ArgType = Context.getRValueReferenceType(ArgType);
9603 
9604   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9605                                                      CXXMoveAssignment,
9606                                                      false);
9607 
9608   //   An implicitly-declared move assignment operator is an inline public
9609   //   member of its class.
9610   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
9611   SourceLocation ClassLoc = ClassDecl->getLocation();
9612   DeclarationNameInfo NameInfo(Name, ClassLoc);
9613   CXXMethodDecl *MoveAssignment =
9614       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9615                             /*TInfo=*/0, /*StorageClass=*/SC_None,
9616                             /*isInline=*/true, Constexpr, SourceLocation());
9617   MoveAssignment->setAccess(AS_public);
9618   MoveAssignment->setDefaulted();
9619   MoveAssignment->setImplicit();
9620 
9621   // Build an exception specification pointing back at this member.
9622   FunctionProtoType::ExtProtoInfo EPI =
9623       getImplicitMethodEPI(*this, MoveAssignment);
9624   MoveAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
9625 
9626   // Add the parameter to the operator.
9627   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
9628                                                ClassLoc, ClassLoc, /*Id=*/0,
9629                                                ArgType, /*TInfo=*/0,
9630                                                SC_None, 0);
9631   MoveAssignment->setParams(FromParam);
9632 
9633   AddOverriddenMethods(ClassDecl, MoveAssignment);
9634 
9635   MoveAssignment->setTrivial(
9636     ClassDecl->needsOverloadResolutionForMoveAssignment()
9637       ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
9638       : ClassDecl->hasTrivialMoveAssignment());
9639 
9640   if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
9641     ClassDecl->setImplicitMoveAssignmentIsDeleted();
9642     SetDeclDeleted(MoveAssignment, ClassLoc);
9643   }
9644 
9645   // Note that we have added this copy-assignment operator.
9646   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
9647 
9648   if (Scope *S = getScopeForContext(ClassDecl))
9649     PushOnScopeChains(MoveAssignment, S, false);
9650   ClassDecl->addDecl(MoveAssignment);
9651 
9652   return MoveAssignment;
9653 }
9654 
9655 /// Check if we're implicitly defining a move assignment operator for a class
9656 /// with virtual bases. Such a move assignment might move-assign the virtual
9657 /// base multiple times.
9658 static void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class,
9659                                                SourceLocation CurrentLocation) {
9660   assert(!Class->isDependentContext() && "should not define dependent move");
9661 
9662   // Only a virtual base could get implicitly move-assigned multiple times.
9663   // Only a non-trivial move assignment can observe this. We only want to
9664   // diagnose if we implicitly define an assignment operator that assigns
9665   // two base classes, both of which move-assign the same virtual base.
9666   if (Class->getNumVBases() == 0 || Class->hasTrivialMoveAssignment() ||
9667       Class->getNumBases() < 2)
9668     return;
9669 
9670   llvm::SmallVector<CXXBaseSpecifier *, 16> Worklist;
9671   typedef llvm::DenseMap<CXXRecordDecl*, CXXBaseSpecifier*> VBaseMap;
9672   VBaseMap VBases;
9673 
9674   for (CXXRecordDecl::base_class_iterator BI = Class->bases_begin(),
9675                                           BE = Class->bases_end();
9676        BI != BE; ++BI) {
9677     Worklist.push_back(&*BI);
9678     while (!Worklist.empty()) {
9679       CXXBaseSpecifier *BaseSpec = Worklist.pop_back_val();
9680       CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
9681 
9682       // If the base has no non-trivial move assignment operators,
9683       // we don't care about moves from it.
9684       if (!Base->hasNonTrivialMoveAssignment())
9685         continue;
9686 
9687       // If there's nothing virtual here, skip it.
9688       if (!BaseSpec->isVirtual() && !Base->getNumVBases())
9689         continue;
9690 
9691       // If we're not actually going to call a move assignment for this base,
9692       // or the selected move assignment is trivial, skip it.
9693       Sema::SpecialMemberOverloadResult *SMOR =
9694         S.LookupSpecialMember(Base, Sema::CXXMoveAssignment,
9695                               /*ConstArg*/false, /*VolatileArg*/false,
9696                               /*RValueThis*/true, /*ConstThis*/false,
9697                               /*VolatileThis*/false);
9698       if (!SMOR->getMethod() || SMOR->getMethod()->isTrivial() ||
9699           !SMOR->getMethod()->isMoveAssignmentOperator())
9700         continue;
9701 
9702       if (BaseSpec->isVirtual()) {
9703         // We're going to move-assign this virtual base, and its move
9704         // assignment operator is not trivial. If this can happen for
9705         // multiple distinct direct bases of Class, diagnose it. (If it
9706         // only happens in one base, we'll diagnose it when synthesizing
9707         // that base class's move assignment operator.)
9708         CXXBaseSpecifier *&Existing =
9709             VBases.insert(std::make_pair(Base->getCanonicalDecl(), BI))
9710                 .first->second;
9711         if (Existing && Existing != BI) {
9712           S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times)
9713             << Class << Base;
9714           S.Diag(Existing->getLocStart(), diag::note_vbase_moved_here)
9715             << (Base->getCanonicalDecl() ==
9716                 Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl())
9717             << Base << Existing->getType() << Existing->getSourceRange();
9718           S.Diag(BI->getLocStart(), diag::note_vbase_moved_here)
9719             << (Base->getCanonicalDecl() ==
9720                 BI->getType()->getAsCXXRecordDecl()->getCanonicalDecl())
9721             << Base << BI->getType() << BaseSpec->getSourceRange();
9722 
9723           // Only diagnose each vbase once.
9724           Existing = 0;
9725         }
9726       } else {
9727         // Only walk over bases that have defaulted move assignment operators.
9728         // We assume that any user-provided move assignment operator handles
9729         // the multiple-moves-of-vbase case itself somehow.
9730         if (!SMOR->getMethod()->isDefaulted())
9731           continue;
9732 
9733         // We're going to move the base classes of Base. Add them to the list.
9734         for (CXXRecordDecl::base_class_iterator BI = Base->bases_begin(),
9735                                                 BE = Base->bases_end();
9736              BI != BE; ++BI)
9737           Worklist.push_back(&*BI);
9738       }
9739     }
9740   }
9741 }
9742 
9743 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
9744                                         CXXMethodDecl *MoveAssignOperator) {
9745   assert((MoveAssignOperator->isDefaulted() &&
9746           MoveAssignOperator->isOverloadedOperator() &&
9747           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
9748           !MoveAssignOperator->doesThisDeclarationHaveABody() &&
9749           !MoveAssignOperator->isDeleted()) &&
9750          "DefineImplicitMoveAssignment called for wrong function");
9751 
9752   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
9753 
9754   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
9755     MoveAssignOperator->setInvalidDecl();
9756     return;
9757   }
9758 
9759   MoveAssignOperator->markUsed(Context);
9760 
9761   SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
9762   DiagnosticErrorTrap Trap(Diags);
9763 
9764   // C++0x [class.copy]p28:
9765   //   The implicitly-defined or move assignment operator for a non-union class
9766   //   X performs memberwise move assignment of its subobjects. The direct base
9767   //   classes of X are assigned first, in the order of their declaration in the
9768   //   base-specifier-list, and then the immediate non-static data members of X
9769   //   are assigned, in the order in which they were declared in the class
9770   //   definition.
9771 
9772   // Issue a warning if our implicit move assignment operator will move
9773   // from a virtual base more than once.
9774   checkMoveAssignmentForRepeatedMove(*this, ClassDecl, CurrentLocation);
9775 
9776   // The statements that form the synthesized function body.
9777   SmallVector<Stmt*, 8> Statements;
9778 
9779   // The parameter for the "other" object, which we are move from.
9780   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
9781   QualType OtherRefType = Other->getType()->
9782       getAs<RValueReferenceType>()->getPointeeType();
9783   assert(!OtherRefType.getQualifiers() &&
9784          "Bad argument type of defaulted move assignment");
9785 
9786   // Our location for everything implicitly-generated.
9787   SourceLocation Loc = MoveAssignOperator->getLocation();
9788 
9789   // Builds a reference to the "other" object.
9790   RefBuilder OtherRef(Other, OtherRefType);
9791   // Cast to rvalue.
9792   MoveCastBuilder MoveOther(OtherRef);
9793 
9794   // Builds the "this" pointer.
9795   ThisBuilder This;
9796 
9797   // Assign base classes.
9798   bool Invalid = false;
9799   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9800        E = ClassDecl->bases_end(); Base != E; ++Base) {
9801     // C++11 [class.copy]p28:
9802     //   It is unspecified whether subobjects representing virtual base classes
9803     //   are assigned more than once by the implicitly-defined copy assignment
9804     //   operator.
9805     // FIXME: Do not assign to a vbase that will be assigned by some other base
9806     // class. For a move-assignment, this can result in the vbase being moved
9807     // multiple times.
9808 
9809     // Form the assignment:
9810     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
9811     QualType BaseType = Base->getType().getUnqualifiedType();
9812     if (!BaseType->isRecordType()) {
9813       Invalid = true;
9814       continue;
9815     }
9816 
9817     CXXCastPath BasePath;
9818     BasePath.push_back(Base);
9819 
9820     // Construct the "from" expression, which is an implicit cast to the
9821     // appropriately-qualified base type.
9822     CastBuilder From(OtherRef, BaseType, VK_XValue, BasePath);
9823 
9824     // Dereference "this".
9825     DerefBuilder DerefThis(This);
9826 
9827     // Implicitly cast "this" to the appropriately-qualified base type.
9828     CastBuilder To(DerefThis,
9829                    Context.getCVRQualifiedType(
9830                        BaseType, MoveAssignOperator->getTypeQualifiers()),
9831                    VK_LValue, BasePath);
9832 
9833     // Build the move.
9834     StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
9835                                             To, From,
9836                                             /*CopyingBaseSubobject=*/true,
9837                                             /*Copying=*/false);
9838     if (Move.isInvalid()) {
9839       Diag(CurrentLocation, diag::note_member_synthesized_at)
9840         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9841       MoveAssignOperator->setInvalidDecl();
9842       return;
9843     }
9844 
9845     // Success! Record the move.
9846     Statements.push_back(Move.takeAs<Expr>());
9847   }
9848 
9849   // Assign non-static members.
9850   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9851                                   FieldEnd = ClassDecl->field_end();
9852        Field != FieldEnd; ++Field) {
9853     if (Field->isUnnamedBitfield())
9854       continue;
9855 
9856     if (Field->isInvalidDecl()) {
9857       Invalid = true;
9858       continue;
9859     }
9860 
9861     // Check for members of reference type; we can't move those.
9862     if (Field->getType()->isReferenceType()) {
9863       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9864         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9865       Diag(Field->getLocation(), diag::note_declared_at);
9866       Diag(CurrentLocation, diag::note_member_synthesized_at)
9867         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9868       Invalid = true;
9869       continue;
9870     }
9871 
9872     // Check for members of const-qualified, non-class type.
9873     QualType BaseType = Context.getBaseElementType(Field->getType());
9874     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9875       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9876         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9877       Diag(Field->getLocation(), diag::note_declared_at);
9878       Diag(CurrentLocation, diag::note_member_synthesized_at)
9879         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9880       Invalid = true;
9881       continue;
9882     }
9883 
9884     // Suppress assigning zero-width bitfields.
9885     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9886       continue;
9887 
9888     QualType FieldType = Field->getType().getNonReferenceType();
9889     if (FieldType->isIncompleteArrayType()) {
9890       assert(ClassDecl->hasFlexibleArrayMember() &&
9891              "Incomplete array type is not valid");
9892       continue;
9893     }
9894 
9895     // Build references to the field in the object we're copying from and to.
9896     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9897                               LookupMemberName);
9898     MemberLookup.addDecl(*Field);
9899     MemberLookup.resolveKind();
9900     MemberBuilder From(MoveOther, OtherRefType,
9901                        /*IsArrow=*/false, MemberLookup);
9902     MemberBuilder To(This, getCurrentThisType(),
9903                      /*IsArrow=*/true, MemberLookup);
9904 
9905     assert(!From.build(*this, Loc)->isLValue() && // could be xvalue or prvalue
9906         "Member reference with rvalue base must be rvalue except for reference "
9907         "members, which aren't allowed for move assignment.");
9908 
9909     // Build the move of this field.
9910     StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
9911                                             To, From,
9912                                             /*CopyingBaseSubobject=*/false,
9913                                             /*Copying=*/false);
9914     if (Move.isInvalid()) {
9915       Diag(CurrentLocation, diag::note_member_synthesized_at)
9916         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9917       MoveAssignOperator->setInvalidDecl();
9918       return;
9919     }
9920 
9921     // Success! Record the copy.
9922     Statements.push_back(Move.takeAs<Stmt>());
9923   }
9924 
9925   if (!Invalid) {
9926     // Add a "return *this;"
9927     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This.build(*this, Loc));
9928 
9929     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9930     if (Return.isInvalid())
9931       Invalid = true;
9932     else {
9933       Statements.push_back(Return.takeAs<Stmt>());
9934 
9935       if (Trap.hasErrorOccurred()) {
9936         Diag(CurrentLocation, diag::note_member_synthesized_at)
9937           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9938         Invalid = true;
9939       }
9940     }
9941   }
9942 
9943   if (Invalid) {
9944     MoveAssignOperator->setInvalidDecl();
9945     return;
9946   }
9947 
9948   StmtResult Body;
9949   {
9950     CompoundScopeRAII CompoundScope(*this);
9951     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9952                              /*isStmtExpr=*/false);
9953     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9954   }
9955   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
9956 
9957   if (ASTMutationListener *L = getASTMutationListener()) {
9958     L->CompletedImplicitDefinition(MoveAssignOperator);
9959   }
9960 }
9961 
9962 Sema::ImplicitExceptionSpecification
9963 Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
9964   CXXRecordDecl *ClassDecl = MD->getParent();
9965 
9966   ImplicitExceptionSpecification ExceptSpec(*this);
9967   if (ClassDecl->isInvalidDecl())
9968     return ExceptSpec;
9969 
9970   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
9971   assert(T->getNumArgs() >= 1 && "not a copy ctor");
9972   unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
9973 
9974   // C++ [except.spec]p14:
9975   //   An implicitly declared special member function (Clause 12) shall have an
9976   //   exception-specification. [...]
9977   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9978                                        BaseEnd = ClassDecl->bases_end();
9979        Base != BaseEnd;
9980        ++Base) {
9981     // Virtual bases are handled below.
9982     if (Base->isVirtual())
9983       continue;
9984 
9985     CXXRecordDecl *BaseClassDecl
9986       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9987     if (CXXConstructorDecl *CopyConstructor =
9988           LookupCopyingConstructor(BaseClassDecl, Quals))
9989       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9990   }
9991   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9992                                        BaseEnd = ClassDecl->vbases_end();
9993        Base != BaseEnd;
9994        ++Base) {
9995     CXXRecordDecl *BaseClassDecl
9996       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9997     if (CXXConstructorDecl *CopyConstructor =
9998           LookupCopyingConstructor(BaseClassDecl, Quals))
9999       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
10000   }
10001   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
10002                                   FieldEnd = ClassDecl->field_end();
10003        Field != FieldEnd;
10004        ++Field) {
10005     QualType FieldType = Context.getBaseElementType(Field->getType());
10006     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
10007       if (CXXConstructorDecl *CopyConstructor =
10008               LookupCopyingConstructor(FieldClassDecl,
10009                                        Quals | FieldType.getCVRQualifiers()))
10010       ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
10011     }
10012   }
10013 
10014   return ExceptSpec;
10015 }
10016 
10017 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
10018                                                     CXXRecordDecl *ClassDecl) {
10019   // C++ [class.copy]p4:
10020   //   If the class definition does not explicitly declare a copy
10021   //   constructor, one is declared implicitly.
10022   assert(ClassDecl->needsImplicitCopyConstructor());
10023 
10024   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
10025   if (DSM.isAlreadyBeingDeclared())
10026     return 0;
10027 
10028   QualType ClassType = Context.getTypeDeclType(ClassDecl);
10029   QualType ArgType = ClassType;
10030   bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
10031   if (Const)
10032     ArgType = ArgType.withConst();
10033   ArgType = Context.getLValueReferenceType(ArgType);
10034 
10035   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
10036                                                      CXXCopyConstructor,
10037                                                      Const);
10038 
10039   DeclarationName Name
10040     = Context.DeclarationNames.getCXXConstructorName(
10041                                            Context.getCanonicalType(ClassType));
10042   SourceLocation ClassLoc = ClassDecl->getLocation();
10043   DeclarationNameInfo NameInfo(Name, ClassLoc);
10044 
10045   //   An implicitly-declared copy constructor is an inline public
10046   //   member of its class.
10047   CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
10048       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
10049       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
10050       Constexpr);
10051   CopyConstructor->setAccess(AS_public);
10052   CopyConstructor->setDefaulted();
10053 
10054   // Build an exception specification pointing back at this member.
10055   FunctionProtoType::ExtProtoInfo EPI =
10056       getImplicitMethodEPI(*this, CopyConstructor);
10057   CopyConstructor->setType(
10058       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
10059 
10060   // Add the parameter to the constructor.
10061   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
10062                                                ClassLoc, ClassLoc,
10063                                                /*IdentifierInfo=*/0,
10064                                                ArgType, /*TInfo=*/0,
10065                                                SC_None, 0);
10066   CopyConstructor->setParams(FromParam);
10067 
10068   CopyConstructor->setTrivial(
10069     ClassDecl->needsOverloadResolutionForCopyConstructor()
10070       ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
10071       : ClassDecl->hasTrivialCopyConstructor());
10072 
10073   if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
10074     SetDeclDeleted(CopyConstructor, ClassLoc);
10075 
10076   // Note that we have declared this constructor.
10077   ++ASTContext::NumImplicitCopyConstructorsDeclared;
10078 
10079   if (Scope *S = getScopeForContext(ClassDecl))
10080     PushOnScopeChains(CopyConstructor, S, false);
10081   ClassDecl->addDecl(CopyConstructor);
10082 
10083   return CopyConstructor;
10084 }
10085 
10086 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
10087                                    CXXConstructorDecl *CopyConstructor) {
10088   assert((CopyConstructor->isDefaulted() &&
10089           CopyConstructor->isCopyConstructor() &&
10090           !CopyConstructor->doesThisDeclarationHaveABody() &&
10091           !CopyConstructor->isDeleted()) &&
10092          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
10093 
10094   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
10095   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
10096 
10097   // C++11 [class.copy]p7:
10098   //   The [definition of an implicitly declared copy constructor] is
10099   //   deprecated if the class has a user-declared copy assignment operator
10100   //   or a user-declared destructor.
10101   if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
10102     diagnoseDeprecatedCopyOperation(*this, CopyConstructor, CurrentLocation);
10103 
10104   SynthesizedFunctionScope Scope(*this, CopyConstructor);
10105   DiagnosticErrorTrap Trap(Diags);
10106 
10107   if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) ||
10108       Trap.hasErrorOccurred()) {
10109     Diag(CurrentLocation, diag::note_member_synthesized_at)
10110       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
10111     CopyConstructor->setInvalidDecl();
10112   }  else {
10113     Sema::CompoundScopeRAII CompoundScope(*this);
10114     CopyConstructor->setBody(ActOnCompoundStmt(
10115         CopyConstructor->getLocation(), CopyConstructor->getLocation(), None,
10116         /*isStmtExpr=*/ false).takeAs<Stmt>());
10117   }
10118 
10119   CopyConstructor->markUsed(Context);
10120   if (ASTMutationListener *L = getASTMutationListener()) {
10121     L->CompletedImplicitDefinition(CopyConstructor);
10122   }
10123 }
10124 
10125 Sema::ImplicitExceptionSpecification
10126 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
10127   CXXRecordDecl *ClassDecl = MD->getParent();
10128 
10129   // C++ [except.spec]p14:
10130   //   An implicitly declared special member function (Clause 12) shall have an
10131   //   exception-specification. [...]
10132   ImplicitExceptionSpecification ExceptSpec(*this);
10133   if (ClassDecl->isInvalidDecl())
10134     return ExceptSpec;
10135 
10136   // Direct base-class constructors.
10137   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
10138                                        BEnd = ClassDecl->bases_end();
10139        B != BEnd; ++B) {
10140     if (B->isVirtual()) // Handled below.
10141       continue;
10142 
10143     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
10144       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
10145       CXXConstructorDecl *Constructor =
10146           LookupMovingConstructor(BaseClassDecl, 0);
10147       // If this is a deleted function, add it anyway. This might be conformant
10148       // with the standard. This might not. I'm not sure. It might not matter.
10149       if (Constructor)
10150         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
10151     }
10152   }
10153 
10154   // Virtual base-class constructors.
10155   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
10156                                        BEnd = ClassDecl->vbases_end();
10157        B != BEnd; ++B) {
10158     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
10159       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
10160       CXXConstructorDecl *Constructor =
10161           LookupMovingConstructor(BaseClassDecl, 0);
10162       // If this is a deleted function, add it anyway. This might be conformant
10163       // with the standard. This might not. I'm not sure. It might not matter.
10164       if (Constructor)
10165         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
10166     }
10167   }
10168 
10169   // Field constructors.
10170   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
10171                                FEnd = ClassDecl->field_end();
10172        F != FEnd; ++F) {
10173     QualType FieldType = Context.getBaseElementType(F->getType());
10174     if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
10175       CXXConstructorDecl *Constructor =
10176           LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
10177       // If this is a deleted function, add it anyway. This might be conformant
10178       // with the standard. This might not. I'm not sure. It might not matter.
10179       // In particular, the problem is that this function never gets called. It
10180       // might just be ill-formed because this function attempts to refer to
10181       // a deleted function here.
10182       if (Constructor)
10183         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
10184     }
10185   }
10186 
10187   return ExceptSpec;
10188 }
10189 
10190 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
10191                                                     CXXRecordDecl *ClassDecl) {
10192   assert(ClassDecl->needsImplicitMoveConstructor());
10193 
10194   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
10195   if (DSM.isAlreadyBeingDeclared())
10196     return 0;
10197 
10198   QualType ClassType = Context.getTypeDeclType(ClassDecl);
10199   QualType ArgType = Context.getRValueReferenceType(ClassType);
10200 
10201   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
10202                                                      CXXMoveConstructor,
10203                                                      false);
10204 
10205   DeclarationName Name
10206     = Context.DeclarationNames.getCXXConstructorName(
10207                                            Context.getCanonicalType(ClassType));
10208   SourceLocation ClassLoc = ClassDecl->getLocation();
10209   DeclarationNameInfo NameInfo(Name, ClassLoc);
10210 
10211   // C++11 [class.copy]p11:
10212   //   An implicitly-declared copy/move constructor is an inline public
10213   //   member of its class.
10214   CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
10215       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
10216       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
10217       Constexpr);
10218   MoveConstructor->setAccess(AS_public);
10219   MoveConstructor->setDefaulted();
10220 
10221   // Build an exception specification pointing back at this member.
10222   FunctionProtoType::ExtProtoInfo EPI =
10223       getImplicitMethodEPI(*this, MoveConstructor);
10224   MoveConstructor->setType(
10225       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
10226 
10227   // Add the parameter to the constructor.
10228   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
10229                                                ClassLoc, ClassLoc,
10230                                                /*IdentifierInfo=*/0,
10231                                                ArgType, /*TInfo=*/0,
10232                                                SC_None, 0);
10233   MoveConstructor->setParams(FromParam);
10234 
10235   MoveConstructor->setTrivial(
10236     ClassDecl->needsOverloadResolutionForMoveConstructor()
10237       ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
10238       : ClassDecl->hasTrivialMoveConstructor());
10239 
10240   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
10241     ClassDecl->setImplicitMoveConstructorIsDeleted();
10242     SetDeclDeleted(MoveConstructor, ClassLoc);
10243   }
10244 
10245   // Note that we have declared this constructor.
10246   ++ASTContext::NumImplicitMoveConstructorsDeclared;
10247 
10248   if (Scope *S = getScopeForContext(ClassDecl))
10249     PushOnScopeChains(MoveConstructor, S, false);
10250   ClassDecl->addDecl(MoveConstructor);
10251 
10252   return MoveConstructor;
10253 }
10254 
10255 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
10256                                    CXXConstructorDecl *MoveConstructor) {
10257   assert((MoveConstructor->isDefaulted() &&
10258           MoveConstructor->isMoveConstructor() &&
10259           !MoveConstructor->doesThisDeclarationHaveABody() &&
10260           !MoveConstructor->isDeleted()) &&
10261          "DefineImplicitMoveConstructor - call it for implicit move ctor");
10262 
10263   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
10264   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
10265 
10266   SynthesizedFunctionScope Scope(*this, MoveConstructor);
10267   DiagnosticErrorTrap Trap(Diags);
10268 
10269   if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) ||
10270       Trap.hasErrorOccurred()) {
10271     Diag(CurrentLocation, diag::note_member_synthesized_at)
10272       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
10273     MoveConstructor->setInvalidDecl();
10274   }  else {
10275     Sema::CompoundScopeRAII CompoundScope(*this);
10276     MoveConstructor->setBody(ActOnCompoundStmt(
10277         MoveConstructor->getLocation(), MoveConstructor->getLocation(), None,
10278         /*isStmtExpr=*/ false).takeAs<Stmt>());
10279   }
10280 
10281   MoveConstructor->markUsed(Context);
10282 
10283   if (ASTMutationListener *L = getASTMutationListener()) {
10284     L->CompletedImplicitDefinition(MoveConstructor);
10285   }
10286 }
10287 
10288 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
10289   return FD->isDeleted() && FD->isDefaulted() && isa<CXXMethodDecl>(FD);
10290 }
10291 
10292 void Sema::DefineImplicitLambdaToFunctionPointerConversion(
10293                             SourceLocation CurrentLocation,
10294                             CXXConversionDecl *Conv) {
10295   CXXRecordDecl *Lambda = Conv->getParent();
10296   CXXMethodDecl *CallOp = Lambda->getLambdaCallOperator();
10297   // If we are defining a specialization of a conversion to function-ptr
10298   // cache the deduced template arguments for this specialization
10299   // so that we can use them to retrieve the corresponding call-operator
10300   // and static-invoker.
10301   const TemplateArgumentList *DeducedTemplateArgs = 0;
10302 
10303 
10304   // Retrieve the corresponding call-operator specialization.
10305   if (Lambda->isGenericLambda()) {
10306     assert(Conv->isFunctionTemplateSpecialization());
10307     FunctionTemplateDecl *CallOpTemplate =
10308         CallOp->getDescribedFunctionTemplate();
10309     DeducedTemplateArgs = Conv->getTemplateSpecializationArgs();
10310     void *InsertPos = 0;
10311     FunctionDecl *CallOpSpec = CallOpTemplate->findSpecialization(
10312                                                 DeducedTemplateArgs->data(),
10313                                                 DeducedTemplateArgs->size(),
10314                                                 InsertPos);
10315     assert(CallOpSpec &&
10316           "Conversion operator must have a corresponding call operator");
10317     CallOp = cast<CXXMethodDecl>(CallOpSpec);
10318   }
10319   // Mark the call operator referenced (and add to pending instantiations
10320   // if necessary).
10321   // For both the conversion and static-invoker template specializations
10322   // we construct their body's in this function, so no need to add them
10323   // to the PendingInstantiations.
10324   MarkFunctionReferenced(CurrentLocation, CallOp);
10325 
10326   SynthesizedFunctionScope Scope(*this, Conv);
10327   DiagnosticErrorTrap Trap(Diags);
10328 
10329   // Retrieve the static invoker...
10330   CXXMethodDecl *Invoker = Lambda->getLambdaStaticInvoker();
10331   // ... and get the corresponding specialization for a generic lambda.
10332   if (Lambda->isGenericLambda()) {
10333     assert(DeducedTemplateArgs &&
10334       "Must have deduced template arguments from Conversion Operator");
10335     FunctionTemplateDecl *InvokeTemplate =
10336                           Invoker->getDescribedFunctionTemplate();
10337     void *InsertPos = 0;
10338     FunctionDecl *InvokeSpec = InvokeTemplate->findSpecialization(
10339                                                 DeducedTemplateArgs->data(),
10340                                                 DeducedTemplateArgs->size(),
10341                                                 InsertPos);
10342     assert(InvokeSpec &&
10343       "Must have a corresponding static invoker specialization");
10344     Invoker = cast<CXXMethodDecl>(InvokeSpec);
10345   }
10346   // Construct the body of the conversion function { return __invoke; }.
10347   Expr *FunctionRef = BuildDeclRefExpr(Invoker, Invoker->getType(),
10348                                         VK_LValue, Conv->getLocation()).take();
10349    assert(FunctionRef && "Can't refer to __invoke function?");
10350    Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
10351    Conv->setBody(new (Context) CompoundStmt(Context, Return,
10352                                             Conv->getLocation(),
10353                                             Conv->getLocation()));
10354 
10355   Conv->markUsed(Context);
10356   Conv->setReferenced();
10357 
10358   // Fill in the __invoke function with a dummy implementation. IR generation
10359   // will fill in the actual details.
10360   Invoker->markUsed(Context);
10361   Invoker->setReferenced();
10362   Invoker->setBody(new (Context) CompoundStmt(Conv->getLocation()));
10363 
10364   if (ASTMutationListener *L = getASTMutationListener()) {
10365     L->CompletedImplicitDefinition(Conv);
10366     L->CompletedImplicitDefinition(Invoker);
10367    }
10368 }
10369 
10370 
10371 
10372 void Sema::DefineImplicitLambdaToBlockPointerConversion(
10373        SourceLocation CurrentLocation,
10374        CXXConversionDecl *Conv)
10375 {
10376   assert(!Conv->getParent()->isGenericLambda());
10377 
10378   Conv->markUsed(Context);
10379 
10380   SynthesizedFunctionScope Scope(*this, Conv);
10381   DiagnosticErrorTrap Trap(Diags);
10382 
10383   // Copy-initialize the lambda object as needed to capture it.
10384   Expr *This = ActOnCXXThis(CurrentLocation).take();
10385   Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
10386 
10387   ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
10388                                                         Conv->getLocation(),
10389                                                         Conv, DerefThis);
10390 
10391   // If we're not under ARC, make sure we still get the _Block_copy/autorelease
10392   // behavior.  Note that only the general conversion function does this
10393   // (since it's unusable otherwise); in the case where we inline the
10394   // block literal, it has block literal lifetime semantics.
10395   if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
10396     BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
10397                                           CK_CopyAndAutoreleaseBlockObject,
10398                                           BuildBlock.get(), 0, VK_RValue);
10399 
10400   if (BuildBlock.isInvalid()) {
10401     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10402     Conv->setInvalidDecl();
10403     return;
10404   }
10405 
10406   // Create the return statement that returns the block from the conversion
10407   // function.
10408   StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
10409   if (Return.isInvalid()) {
10410     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10411     Conv->setInvalidDecl();
10412     return;
10413   }
10414 
10415   // Set the body of the conversion function.
10416   Stmt *ReturnS = Return.take();
10417   Conv->setBody(new (Context) CompoundStmt(Context, ReturnS,
10418                                            Conv->getLocation(),
10419                                            Conv->getLocation()));
10420 
10421   // We're done; notify the mutation listener, if any.
10422   if (ASTMutationListener *L = getASTMutationListener()) {
10423     L->CompletedImplicitDefinition(Conv);
10424   }
10425 }
10426 
10427 /// \brief Determine whether the given list arguments contains exactly one
10428 /// "real" (non-default) argument.
10429 static bool hasOneRealArgument(MultiExprArg Args) {
10430   switch (Args.size()) {
10431   case 0:
10432     return false;
10433 
10434   default:
10435     if (!Args[1]->isDefaultArgument())
10436       return false;
10437 
10438     // fall through
10439   case 1:
10440     return !Args[0]->isDefaultArgument();
10441   }
10442 
10443   return false;
10444 }
10445 
10446 ExprResult
10447 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10448                             CXXConstructorDecl *Constructor,
10449                             MultiExprArg ExprArgs,
10450                             bool HadMultipleCandidates,
10451                             bool IsListInitialization,
10452                             bool RequiresZeroInit,
10453                             unsigned ConstructKind,
10454                             SourceRange ParenRange) {
10455   bool Elidable = false;
10456 
10457   // C++0x [class.copy]p34:
10458   //   When certain criteria are met, an implementation is allowed to
10459   //   omit the copy/move construction of a class object, even if the
10460   //   copy/move constructor and/or destructor for the object have
10461   //   side effects. [...]
10462   //     - when a temporary class object that has not been bound to a
10463   //       reference (12.2) would be copied/moved to a class object
10464   //       with the same cv-unqualified type, the copy/move operation
10465   //       can be omitted by constructing the temporary object
10466   //       directly into the target of the omitted copy/move
10467   if (ConstructKind == CXXConstructExpr::CK_Complete &&
10468       Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
10469     Expr *SubExpr = ExprArgs[0];
10470     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
10471   }
10472 
10473   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
10474                                Elidable, ExprArgs, HadMultipleCandidates,
10475                                IsListInitialization, RequiresZeroInit,
10476                                ConstructKind, ParenRange);
10477 }
10478 
10479 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
10480 /// including handling of its default argument expressions.
10481 ExprResult
10482 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10483                             CXXConstructorDecl *Constructor, bool Elidable,
10484                             MultiExprArg ExprArgs,
10485                             bool HadMultipleCandidates,
10486                             bool IsListInitialization,
10487                             bool RequiresZeroInit,
10488                             unsigned ConstructKind,
10489                             SourceRange ParenRange) {
10490   MarkFunctionReferenced(ConstructLoc, Constructor);
10491   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
10492                                         Constructor, Elidable, ExprArgs,
10493                                         HadMultipleCandidates,
10494                                         IsListInitialization, RequiresZeroInit,
10495               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
10496                                         ParenRange));
10497 }
10498 
10499 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
10500   if (VD->isInvalidDecl()) return;
10501 
10502   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
10503   if (ClassDecl->isInvalidDecl()) return;
10504   if (ClassDecl->hasIrrelevantDestructor()) return;
10505   if (ClassDecl->isDependentContext()) return;
10506 
10507   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
10508   MarkFunctionReferenced(VD->getLocation(), Destructor);
10509   CheckDestructorAccess(VD->getLocation(), Destructor,
10510                         PDiag(diag::err_access_dtor_var)
10511                         << VD->getDeclName()
10512                         << VD->getType());
10513   DiagnoseUseOfDecl(Destructor, VD->getLocation());
10514 
10515   if (!VD->hasGlobalStorage()) return;
10516 
10517   // Emit warning for non-trivial dtor in global scope (a real global,
10518   // class-static, function-static).
10519   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
10520 
10521   // TODO: this should be re-enabled for static locals by !CXAAtExit
10522   if (!VD->isStaticLocal())
10523     Diag(VD->getLocation(), diag::warn_global_destructor);
10524 }
10525 
10526 /// \brief Given a constructor and the set of arguments provided for the
10527 /// constructor, convert the arguments and add any required default arguments
10528 /// to form a proper call to this constructor.
10529 ///
10530 /// \returns true if an error occurred, false otherwise.
10531 bool
10532 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
10533                               MultiExprArg ArgsPtr,
10534                               SourceLocation Loc,
10535                               SmallVectorImpl<Expr*> &ConvertedArgs,
10536                               bool AllowExplicit,
10537                               bool IsListInitialization) {
10538   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
10539   unsigned NumArgs = ArgsPtr.size();
10540   Expr **Args = ArgsPtr.data();
10541 
10542   const FunctionProtoType *Proto
10543     = Constructor->getType()->getAs<FunctionProtoType>();
10544   assert(Proto && "Constructor without a prototype?");
10545   unsigned NumArgsInProto = Proto->getNumArgs();
10546 
10547   // If too few arguments are available, we'll fill in the rest with defaults.
10548   if (NumArgs < NumArgsInProto)
10549     ConvertedArgs.reserve(NumArgsInProto);
10550   else
10551     ConvertedArgs.reserve(NumArgs);
10552 
10553   VariadicCallType CallType =
10554     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
10555   SmallVector<Expr *, 8> AllArgs;
10556   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
10557                                         Proto, 0,
10558                                         llvm::makeArrayRef(Args, NumArgs),
10559                                         AllArgs,
10560                                         CallType, AllowExplicit,
10561                                         IsListInitialization);
10562   ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
10563 
10564   DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
10565 
10566   CheckConstructorCall(Constructor,
10567                        llvm::makeArrayRef<const Expr *>(AllArgs.data(),
10568                                                         AllArgs.size()),
10569                        Proto, Loc);
10570 
10571   return Invalid;
10572 }
10573 
10574 static inline bool
10575 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
10576                                        const FunctionDecl *FnDecl) {
10577   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
10578   if (isa<NamespaceDecl>(DC)) {
10579     return SemaRef.Diag(FnDecl->getLocation(),
10580                         diag::err_operator_new_delete_declared_in_namespace)
10581       << FnDecl->getDeclName();
10582   }
10583 
10584   if (isa<TranslationUnitDecl>(DC) &&
10585       FnDecl->getStorageClass() == SC_Static) {
10586     return SemaRef.Diag(FnDecl->getLocation(),
10587                         diag::err_operator_new_delete_declared_static)
10588       << FnDecl->getDeclName();
10589   }
10590 
10591   return false;
10592 }
10593 
10594 static inline bool
10595 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
10596                             CanQualType ExpectedResultType,
10597                             CanQualType ExpectedFirstParamType,
10598                             unsigned DependentParamTypeDiag,
10599                             unsigned InvalidParamTypeDiag) {
10600   QualType ResultType =
10601     FnDecl->getType()->getAs<FunctionType>()->getResultType();
10602 
10603   // Check that the result type is not dependent.
10604   if (ResultType->isDependentType())
10605     return SemaRef.Diag(FnDecl->getLocation(),
10606                         diag::err_operator_new_delete_dependent_result_type)
10607     << FnDecl->getDeclName() << ExpectedResultType;
10608 
10609   // Check that the result type is what we expect.
10610   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
10611     return SemaRef.Diag(FnDecl->getLocation(),
10612                         diag::err_operator_new_delete_invalid_result_type)
10613     << FnDecl->getDeclName() << ExpectedResultType;
10614 
10615   // A function template must have at least 2 parameters.
10616   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
10617     return SemaRef.Diag(FnDecl->getLocation(),
10618                       diag::err_operator_new_delete_template_too_few_parameters)
10619         << FnDecl->getDeclName();
10620 
10621   // The function decl must have at least 1 parameter.
10622   if (FnDecl->getNumParams() == 0)
10623     return SemaRef.Diag(FnDecl->getLocation(),
10624                         diag::err_operator_new_delete_too_few_parameters)
10625       << FnDecl->getDeclName();
10626 
10627   // Check the first parameter type is not dependent.
10628   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
10629   if (FirstParamType->isDependentType())
10630     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
10631       << FnDecl->getDeclName() << ExpectedFirstParamType;
10632 
10633   // Check that the first parameter type is what we expect.
10634   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
10635       ExpectedFirstParamType)
10636     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
10637     << FnDecl->getDeclName() << ExpectedFirstParamType;
10638 
10639   return false;
10640 }
10641 
10642 static bool
10643 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
10644   // C++ [basic.stc.dynamic.allocation]p1:
10645   //   A program is ill-formed if an allocation function is declared in a
10646   //   namespace scope other than global scope or declared static in global
10647   //   scope.
10648   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10649     return true;
10650 
10651   CanQualType SizeTy =
10652     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
10653 
10654   // C++ [basic.stc.dynamic.allocation]p1:
10655   //  The return type shall be void*. The first parameter shall have type
10656   //  std::size_t.
10657   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
10658                                   SizeTy,
10659                                   diag::err_operator_new_dependent_param_type,
10660                                   diag::err_operator_new_param_type))
10661     return true;
10662 
10663   // C++ [basic.stc.dynamic.allocation]p1:
10664   //  The first parameter shall not have an associated default argument.
10665   if (FnDecl->getParamDecl(0)->hasDefaultArg())
10666     return SemaRef.Diag(FnDecl->getLocation(),
10667                         diag::err_operator_new_default_arg)
10668       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
10669 
10670   return false;
10671 }
10672 
10673 static bool
10674 CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
10675   // C++ [basic.stc.dynamic.deallocation]p1:
10676   //   A program is ill-formed if deallocation functions are declared in a
10677   //   namespace scope other than global scope or declared static in global
10678   //   scope.
10679   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10680     return true;
10681 
10682   // C++ [basic.stc.dynamic.deallocation]p2:
10683   //   Each deallocation function shall return void and its first parameter
10684   //   shall be void*.
10685   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
10686                                   SemaRef.Context.VoidPtrTy,
10687                                  diag::err_operator_delete_dependent_param_type,
10688                                  diag::err_operator_delete_param_type))
10689     return true;
10690 
10691   return false;
10692 }
10693 
10694 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
10695 /// of this overloaded operator is well-formed. If so, returns false;
10696 /// otherwise, emits appropriate diagnostics and returns true.
10697 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
10698   assert(FnDecl && FnDecl->isOverloadedOperator() &&
10699          "Expected an overloaded operator declaration");
10700 
10701   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
10702 
10703   // C++ [over.oper]p5:
10704   //   The allocation and deallocation functions, operator new,
10705   //   operator new[], operator delete and operator delete[], are
10706   //   described completely in 3.7.3. The attributes and restrictions
10707   //   found in the rest of this subclause do not apply to them unless
10708   //   explicitly stated in 3.7.3.
10709   if (Op == OO_Delete || Op == OO_Array_Delete)
10710     return CheckOperatorDeleteDeclaration(*this, FnDecl);
10711 
10712   if (Op == OO_New || Op == OO_Array_New)
10713     return CheckOperatorNewDeclaration(*this, FnDecl);
10714 
10715   // C++ [over.oper]p6:
10716   //   An operator function shall either be a non-static member
10717   //   function or be a non-member function and have at least one
10718   //   parameter whose type is a class, a reference to a class, an
10719   //   enumeration, or a reference to an enumeration.
10720   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
10721     if (MethodDecl->isStatic())
10722       return Diag(FnDecl->getLocation(),
10723                   diag::err_operator_overload_static) << FnDecl->getDeclName();
10724   } else {
10725     bool ClassOrEnumParam = false;
10726     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10727                                    ParamEnd = FnDecl->param_end();
10728          Param != ParamEnd; ++Param) {
10729       QualType ParamType = (*Param)->getType().getNonReferenceType();
10730       if (ParamType->isDependentType() || ParamType->isRecordType() ||
10731           ParamType->isEnumeralType()) {
10732         ClassOrEnumParam = true;
10733         break;
10734       }
10735     }
10736 
10737     if (!ClassOrEnumParam)
10738       return Diag(FnDecl->getLocation(),
10739                   diag::err_operator_overload_needs_class_or_enum)
10740         << FnDecl->getDeclName();
10741   }
10742 
10743   // C++ [over.oper]p8:
10744   //   An operator function cannot have default arguments (8.3.6),
10745   //   except where explicitly stated below.
10746   //
10747   // Only the function-call operator allows default arguments
10748   // (C++ [over.call]p1).
10749   if (Op != OO_Call) {
10750     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
10751          Param != FnDecl->param_end(); ++Param) {
10752       if ((*Param)->hasDefaultArg())
10753         return Diag((*Param)->getLocation(),
10754                     diag::err_operator_overload_default_arg)
10755           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
10756     }
10757   }
10758 
10759   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
10760     { false, false, false }
10761 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
10762     , { Unary, Binary, MemberOnly }
10763 #include "clang/Basic/OperatorKinds.def"
10764   };
10765 
10766   bool CanBeUnaryOperator = OperatorUses[Op][0];
10767   bool CanBeBinaryOperator = OperatorUses[Op][1];
10768   bool MustBeMemberOperator = OperatorUses[Op][2];
10769 
10770   // C++ [over.oper]p8:
10771   //   [...] Operator functions cannot have more or fewer parameters
10772   //   than the number required for the corresponding operator, as
10773   //   described in the rest of this subclause.
10774   unsigned NumParams = FnDecl->getNumParams()
10775                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
10776   if (Op != OO_Call &&
10777       ((NumParams == 1 && !CanBeUnaryOperator) ||
10778        (NumParams == 2 && !CanBeBinaryOperator) ||
10779        (NumParams < 1) || (NumParams > 2))) {
10780     // We have the wrong number of parameters.
10781     unsigned ErrorKind;
10782     if (CanBeUnaryOperator && CanBeBinaryOperator) {
10783       ErrorKind = 2;  // 2 -> unary or binary.
10784     } else if (CanBeUnaryOperator) {
10785       ErrorKind = 0;  // 0 -> unary
10786     } else {
10787       assert(CanBeBinaryOperator &&
10788              "All non-call overloaded operators are unary or binary!");
10789       ErrorKind = 1;  // 1 -> binary
10790     }
10791 
10792     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
10793       << FnDecl->getDeclName() << NumParams << ErrorKind;
10794   }
10795 
10796   // Overloaded operators other than operator() cannot be variadic.
10797   if (Op != OO_Call &&
10798       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
10799     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
10800       << FnDecl->getDeclName();
10801   }
10802 
10803   // Some operators must be non-static member functions.
10804   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
10805     return Diag(FnDecl->getLocation(),
10806                 diag::err_operator_overload_must_be_member)
10807       << FnDecl->getDeclName();
10808   }
10809 
10810   // C++ [over.inc]p1:
10811   //   The user-defined function called operator++ implements the
10812   //   prefix and postfix ++ operator. If this function is a member
10813   //   function with no parameters, or a non-member function with one
10814   //   parameter of class or enumeration type, it defines the prefix
10815   //   increment operator ++ for objects of that type. If the function
10816   //   is a member function with one parameter (which shall be of type
10817   //   int) or a non-member function with two parameters (the second
10818   //   of which shall be of type int), it defines the postfix
10819   //   increment operator ++ for objects of that type.
10820   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
10821     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
10822     bool ParamIsInt = false;
10823     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
10824       ParamIsInt = BT->getKind() == BuiltinType::Int;
10825 
10826     if (!ParamIsInt)
10827       return Diag(LastParam->getLocation(),
10828                   diag::err_operator_overload_post_incdec_must_be_int)
10829         << LastParam->getType() << (Op == OO_MinusMinus);
10830   }
10831 
10832   return false;
10833 }
10834 
10835 /// CheckLiteralOperatorDeclaration - Check whether the declaration
10836 /// of this literal operator function is well-formed. If so, returns
10837 /// false; otherwise, emits appropriate diagnostics and returns true.
10838 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
10839   if (isa<CXXMethodDecl>(FnDecl)) {
10840     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
10841       << FnDecl->getDeclName();
10842     return true;
10843   }
10844 
10845   if (FnDecl->isExternC()) {
10846     Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
10847     return true;
10848   }
10849 
10850   bool Valid = false;
10851 
10852   // This might be the definition of a literal operator template.
10853   FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
10854   // This might be a specialization of a literal operator template.
10855   if (!TpDecl)
10856     TpDecl = FnDecl->getPrimaryTemplate();
10857 
10858   // template <char...> type operator "" name() and
10859   // template <class T, T...> type operator "" name() are the only valid
10860   // template signatures, and the only valid signatures with no parameters.
10861   if (TpDecl) {
10862     if (FnDecl->param_size() == 0) {
10863       // Must have one or two template parameters
10864       TemplateParameterList *Params = TpDecl->getTemplateParameters();
10865       if (Params->size() == 1) {
10866         NonTypeTemplateParmDecl *PmDecl =
10867           dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
10868 
10869         // The template parameter must be a char parameter pack.
10870         if (PmDecl && PmDecl->isTemplateParameterPack() &&
10871             Context.hasSameType(PmDecl->getType(), Context.CharTy))
10872           Valid = true;
10873       } else if (Params->size() == 2) {
10874         TemplateTypeParmDecl *PmType =
10875           dyn_cast<TemplateTypeParmDecl>(Params->getParam(0));
10876         NonTypeTemplateParmDecl *PmArgs =
10877           dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(1));
10878 
10879         // The second template parameter must be a parameter pack with the
10880         // first template parameter as its type.
10881         if (PmType && PmArgs &&
10882             !PmType->isTemplateParameterPack() &&
10883             PmArgs->isTemplateParameterPack()) {
10884           const TemplateTypeParmType *TArgs =
10885             PmArgs->getType()->getAs<TemplateTypeParmType>();
10886           if (TArgs && TArgs->getDepth() == PmType->getDepth() &&
10887               TArgs->getIndex() == PmType->getIndex()) {
10888             Valid = true;
10889             if (ActiveTemplateInstantiations.empty())
10890               Diag(FnDecl->getLocation(),
10891                    diag::ext_string_literal_operator_template);
10892           }
10893         }
10894       }
10895     }
10896   } else if (FnDecl->param_size()) {
10897     // Check the first parameter
10898     FunctionDecl::param_iterator Param = FnDecl->param_begin();
10899 
10900     QualType T = (*Param)->getType().getUnqualifiedType();
10901 
10902     // unsigned long long int, long double, and any character type are allowed
10903     // as the only parameters.
10904     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
10905         Context.hasSameType(T, Context.LongDoubleTy) ||
10906         Context.hasSameType(T, Context.CharTy) ||
10907         Context.hasSameType(T, Context.WideCharTy) ||
10908         Context.hasSameType(T, Context.Char16Ty) ||
10909         Context.hasSameType(T, Context.Char32Ty)) {
10910       if (++Param == FnDecl->param_end())
10911         Valid = true;
10912       goto FinishedParams;
10913     }
10914 
10915     // Otherwise it must be a pointer to const; let's strip those qualifiers.
10916     const PointerType *PT = T->getAs<PointerType>();
10917     if (!PT)
10918       goto FinishedParams;
10919     T = PT->getPointeeType();
10920     if (!T.isConstQualified() || T.isVolatileQualified())
10921       goto FinishedParams;
10922     T = T.getUnqualifiedType();
10923 
10924     // Move on to the second parameter;
10925     ++Param;
10926 
10927     // If there is no second parameter, the first must be a const char *
10928     if (Param == FnDecl->param_end()) {
10929       if (Context.hasSameType(T, Context.CharTy))
10930         Valid = true;
10931       goto FinishedParams;
10932     }
10933 
10934     // const char *, const wchar_t*, const char16_t*, and const char32_t*
10935     // are allowed as the first parameter to a two-parameter function
10936     if (!(Context.hasSameType(T, Context.CharTy) ||
10937           Context.hasSameType(T, Context.WideCharTy) ||
10938           Context.hasSameType(T, Context.Char16Ty) ||
10939           Context.hasSameType(T, Context.Char32Ty)))
10940       goto FinishedParams;
10941 
10942     // The second and final parameter must be an std::size_t
10943     T = (*Param)->getType().getUnqualifiedType();
10944     if (Context.hasSameType(T, Context.getSizeType()) &&
10945         ++Param == FnDecl->param_end())
10946       Valid = true;
10947   }
10948 
10949   // FIXME: This diagnostic is absolutely terrible.
10950 FinishedParams:
10951   if (!Valid) {
10952     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
10953       << FnDecl->getDeclName();
10954     return true;
10955   }
10956 
10957   // A parameter-declaration-clause containing a default argument is not
10958   // equivalent to any of the permitted forms.
10959   for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10960                                     ParamEnd = FnDecl->param_end();
10961        Param != ParamEnd; ++Param) {
10962     if ((*Param)->hasDefaultArg()) {
10963       Diag((*Param)->getDefaultArgRange().getBegin(),
10964            diag::err_literal_operator_default_argument)
10965         << (*Param)->getDefaultArgRange();
10966       break;
10967     }
10968   }
10969 
10970   StringRef LiteralName
10971     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
10972   if (LiteralName[0] != '_') {
10973     // C++11 [usrlit.suffix]p1:
10974     //   Literal suffix identifiers that do not start with an underscore
10975     //   are reserved for future standardization.
10976     Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved)
10977       << NumericLiteralParser::isValidUDSuffix(getLangOpts(), LiteralName);
10978   }
10979 
10980   return false;
10981 }
10982 
10983 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
10984 /// linkage specification, including the language and (if present)
10985 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
10986 /// the location of the language string literal, which is provided
10987 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
10988 /// the '{' brace. Otherwise, this linkage specification does not
10989 /// have any braces.
10990 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
10991                                            SourceLocation LangLoc,
10992                                            StringRef Lang,
10993                                            SourceLocation LBraceLoc) {
10994   LinkageSpecDecl::LanguageIDs Language;
10995   if (Lang == "\"C\"")
10996     Language = LinkageSpecDecl::lang_c;
10997   else if (Lang == "\"C++\"")
10998     Language = LinkageSpecDecl::lang_cxx;
10999   else {
11000     Diag(LangLoc, diag::err_bad_language);
11001     return 0;
11002   }
11003 
11004   // FIXME: Add all the various semantics of linkage specifications
11005 
11006   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
11007                                                ExternLoc, LangLoc, Language,
11008                                                LBraceLoc.isValid());
11009   CurContext->addDecl(D);
11010   PushDeclContext(S, D);
11011   return D;
11012 }
11013 
11014 /// ActOnFinishLinkageSpecification - Complete the definition of
11015 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
11016 /// valid, it's the position of the closing '}' brace in a linkage
11017 /// specification that uses braces.
11018 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
11019                                             Decl *LinkageSpec,
11020                                             SourceLocation RBraceLoc) {
11021   if (LinkageSpec) {
11022     if (RBraceLoc.isValid()) {
11023       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
11024       LSDecl->setRBraceLoc(RBraceLoc);
11025     }
11026     PopDeclContext();
11027   }
11028   return LinkageSpec;
11029 }
11030 
11031 Decl *Sema::ActOnEmptyDeclaration(Scope *S,
11032                                   AttributeList *AttrList,
11033                                   SourceLocation SemiLoc) {
11034   Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
11035   // Attribute declarations appertain to empty declaration so we handle
11036   // them here.
11037   if (AttrList)
11038     ProcessDeclAttributeList(S, ED, AttrList);
11039 
11040   CurContext->addDecl(ED);
11041   return ED;
11042 }
11043 
11044 /// \brief Perform semantic analysis for the variable declaration that
11045 /// occurs within a C++ catch clause, returning the newly-created
11046 /// variable.
11047 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
11048                                          TypeSourceInfo *TInfo,
11049                                          SourceLocation StartLoc,
11050                                          SourceLocation Loc,
11051                                          IdentifierInfo *Name) {
11052   bool Invalid = false;
11053   QualType ExDeclType = TInfo->getType();
11054 
11055   // Arrays and functions decay.
11056   if (ExDeclType->isArrayType())
11057     ExDeclType = Context.getArrayDecayedType(ExDeclType);
11058   else if (ExDeclType->isFunctionType())
11059     ExDeclType = Context.getPointerType(ExDeclType);
11060 
11061   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
11062   // The exception-declaration shall not denote a pointer or reference to an
11063   // incomplete type, other than [cv] void*.
11064   // N2844 forbids rvalue references.
11065   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
11066     Diag(Loc, diag::err_catch_rvalue_ref);
11067     Invalid = true;
11068   }
11069 
11070   QualType BaseType = ExDeclType;
11071   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
11072   unsigned DK = diag::err_catch_incomplete;
11073   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
11074     BaseType = Ptr->getPointeeType();
11075     Mode = 1;
11076     DK = diag::err_catch_incomplete_ptr;
11077   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
11078     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
11079     BaseType = Ref->getPointeeType();
11080     Mode = 2;
11081     DK = diag::err_catch_incomplete_ref;
11082   }
11083   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
11084       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
11085     Invalid = true;
11086 
11087   if (!Invalid && !ExDeclType->isDependentType() &&
11088       RequireNonAbstractType(Loc, ExDeclType,
11089                              diag::err_abstract_type_in_decl,
11090                              AbstractVariableType))
11091     Invalid = true;
11092 
11093   // Only the non-fragile NeXT runtime currently supports C++ catches
11094   // of ObjC types, and no runtime supports catching ObjC types by value.
11095   if (!Invalid && getLangOpts().ObjC1) {
11096     QualType T = ExDeclType;
11097     if (const ReferenceType *RT = T->getAs<ReferenceType>())
11098       T = RT->getPointeeType();
11099 
11100     if (T->isObjCObjectType()) {
11101       Diag(Loc, diag::err_objc_object_catch);
11102       Invalid = true;
11103     } else if (T->isObjCObjectPointerType()) {
11104       // FIXME: should this be a test for macosx-fragile specifically?
11105       if (getLangOpts().ObjCRuntime.isFragile())
11106         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
11107     }
11108   }
11109 
11110   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
11111                                     ExDeclType, TInfo, SC_None);
11112   ExDecl->setExceptionVariable(true);
11113 
11114   // In ARC, infer 'retaining' for variables of retainable type.
11115   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
11116     Invalid = true;
11117 
11118   if (!Invalid && !ExDeclType->isDependentType()) {
11119     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
11120       // Insulate this from anything else we might currently be parsing.
11121       EnterExpressionEvaluationContext scope(*this, PotentiallyEvaluated);
11122 
11123       // C++ [except.handle]p16:
11124       //   The object declared in an exception-declaration or, if the
11125       //   exception-declaration does not specify a name, a temporary (12.2) is
11126       //   copy-initialized (8.5) from the exception object. [...]
11127       //   The object is destroyed when the handler exits, after the destruction
11128       //   of any automatic objects initialized within the handler.
11129       //
11130       // We just pretend to initialize the object with itself, then make sure
11131       // it can be destroyed later.
11132       QualType initType = ExDeclType;
11133 
11134       InitializedEntity entity =
11135         InitializedEntity::InitializeVariable(ExDecl);
11136       InitializationKind initKind =
11137         InitializationKind::CreateCopy(Loc, SourceLocation());
11138 
11139       Expr *opaqueValue =
11140         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
11141       InitializationSequence sequence(*this, entity, initKind, opaqueValue);
11142       ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
11143       if (result.isInvalid())
11144         Invalid = true;
11145       else {
11146         // If the constructor used was non-trivial, set this as the
11147         // "initializer".
11148         CXXConstructExpr *construct = result.takeAs<CXXConstructExpr>();
11149         if (!construct->getConstructor()->isTrivial()) {
11150           Expr *init = MaybeCreateExprWithCleanups(construct);
11151           ExDecl->setInit(init);
11152         }
11153 
11154         // And make sure it's destructable.
11155         FinalizeVarWithDestructor(ExDecl, recordType);
11156       }
11157     }
11158   }
11159 
11160   if (Invalid)
11161     ExDecl->setInvalidDecl();
11162 
11163   return ExDecl;
11164 }
11165 
11166 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
11167 /// handler.
11168 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
11169   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
11170   bool Invalid = D.isInvalidType();
11171 
11172   // Check for unexpanded parameter packs.
11173   if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
11174                                       UPPC_ExceptionType)) {
11175     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
11176                                              D.getIdentifierLoc());
11177     Invalid = true;
11178   }
11179 
11180   IdentifierInfo *II = D.getIdentifier();
11181   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
11182                                              LookupOrdinaryName,
11183                                              ForRedeclaration)) {
11184     // The scope should be freshly made just for us. There is just no way
11185     // it contains any previous declaration.
11186     assert(!S->isDeclScope(PrevDecl));
11187     if (PrevDecl->isTemplateParameter()) {
11188       // Maybe we will complain about the shadowed template parameter.
11189       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
11190       PrevDecl = 0;
11191     }
11192   }
11193 
11194   if (D.getCXXScopeSpec().isSet() && !Invalid) {
11195     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
11196       << D.getCXXScopeSpec().getRange();
11197     Invalid = true;
11198   }
11199 
11200   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
11201                                               D.getLocStart(),
11202                                               D.getIdentifierLoc(),
11203                                               D.getIdentifier());
11204   if (Invalid)
11205     ExDecl->setInvalidDecl();
11206 
11207   // Add the exception declaration into this scope.
11208   if (II)
11209     PushOnScopeChains(ExDecl, S);
11210   else
11211     CurContext->addDecl(ExDecl);
11212 
11213   ProcessDeclAttributes(S, ExDecl, D);
11214   return ExDecl;
11215 }
11216 
11217 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
11218                                          Expr *AssertExpr,
11219                                          Expr *AssertMessageExpr,
11220                                          SourceLocation RParenLoc) {
11221   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
11222 
11223   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
11224     return 0;
11225 
11226   return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
11227                                       AssertMessage, RParenLoc, false);
11228 }
11229 
11230 Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
11231                                          Expr *AssertExpr,
11232                                          StringLiteral *AssertMessage,
11233                                          SourceLocation RParenLoc,
11234                                          bool Failed) {
11235   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
11236       !Failed) {
11237     // In a static_assert-declaration, the constant-expression shall be a
11238     // constant expression that can be contextually converted to bool.
11239     ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
11240     if (Converted.isInvalid())
11241       Failed = true;
11242 
11243     llvm::APSInt Cond;
11244     if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
11245           diag::err_static_assert_expression_is_not_constant,
11246           /*AllowFold=*/false).isInvalid())
11247       Failed = true;
11248 
11249     if (!Failed && !Cond) {
11250       SmallString<256> MsgBuffer;
11251       llvm::raw_svector_ostream Msg(MsgBuffer);
11252       AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
11253       Diag(StaticAssertLoc, diag::err_static_assert_failed)
11254         << Msg.str() << AssertExpr->getSourceRange();
11255       Failed = true;
11256     }
11257   }
11258 
11259   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
11260                                         AssertExpr, AssertMessage, RParenLoc,
11261                                         Failed);
11262 
11263   CurContext->addDecl(Decl);
11264   return Decl;
11265 }
11266 
11267 /// \brief Perform semantic analysis of the given friend type declaration.
11268 ///
11269 /// \returns A friend declaration that.
11270 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
11271                                       SourceLocation FriendLoc,
11272                                       TypeSourceInfo *TSInfo) {
11273   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
11274 
11275   QualType T = TSInfo->getType();
11276   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
11277 
11278   // C++03 [class.friend]p2:
11279   //   An elaborated-type-specifier shall be used in a friend declaration
11280   //   for a class.*
11281   //
11282   //   * The class-key of the elaborated-type-specifier is required.
11283   if (!ActiveTemplateInstantiations.empty()) {
11284     // Do not complain about the form of friend template types during
11285     // template instantiation; we will already have complained when the
11286     // template was declared.
11287   } else {
11288     if (!T->isElaboratedTypeSpecifier()) {
11289       // If we evaluated the type to a record type, suggest putting
11290       // a tag in front.
11291       if (const RecordType *RT = T->getAs<RecordType>()) {
11292         RecordDecl *RD = RT->getDecl();
11293 
11294         std::string InsertionText = std::string(" ") + RD->getKindName();
11295 
11296         Diag(TypeRange.getBegin(),
11297              getLangOpts().CPlusPlus11 ?
11298                diag::warn_cxx98_compat_unelaborated_friend_type :
11299                diag::ext_unelaborated_friend_type)
11300           << (unsigned) RD->getTagKind()
11301           << T
11302           << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
11303                                         InsertionText);
11304       } else {
11305         Diag(FriendLoc,
11306              getLangOpts().CPlusPlus11 ?
11307                diag::warn_cxx98_compat_nonclass_type_friend :
11308                diag::ext_nonclass_type_friend)
11309           << T
11310           << TypeRange;
11311       }
11312     } else if (T->getAs<EnumType>()) {
11313       Diag(FriendLoc,
11314            getLangOpts().CPlusPlus11 ?
11315              diag::warn_cxx98_compat_enum_friend :
11316              diag::ext_enum_friend)
11317         << T
11318         << TypeRange;
11319     }
11320 
11321     // C++11 [class.friend]p3:
11322     //   A friend declaration that does not declare a function shall have one
11323     //   of the following forms:
11324     //     friend elaborated-type-specifier ;
11325     //     friend simple-type-specifier ;
11326     //     friend typename-specifier ;
11327     if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
11328       Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
11329   }
11330 
11331   //   If the type specifier in a friend declaration designates a (possibly
11332   //   cv-qualified) class type, that class is declared as a friend; otherwise,
11333   //   the friend declaration is ignored.
11334   return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
11335 }
11336 
11337 /// Handle a friend tag declaration where the scope specifier was
11338 /// templated.
11339 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
11340                                     unsigned TagSpec, SourceLocation TagLoc,
11341                                     CXXScopeSpec &SS,
11342                                     IdentifierInfo *Name,
11343                                     SourceLocation NameLoc,
11344                                     AttributeList *Attr,
11345                                     MultiTemplateParamsArg TempParamLists) {
11346   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
11347 
11348   bool isExplicitSpecialization = false;
11349   bool Invalid = false;
11350 
11351   if (TemplateParameterList *TemplateParams =
11352           MatchTemplateParametersToScopeSpecifier(
11353               TagLoc, NameLoc, SS, TempParamLists, /*friend*/ true,
11354               isExplicitSpecialization, Invalid)) {
11355     if (TemplateParams->size() > 0) {
11356       // This is a declaration of a class template.
11357       if (Invalid)
11358         return 0;
11359 
11360       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
11361                                 SS, Name, NameLoc, Attr,
11362                                 TemplateParams, AS_public,
11363                                 /*ModulePrivateLoc=*/SourceLocation(),
11364                                 TempParamLists.size() - 1,
11365                                 TempParamLists.data()).take();
11366     } else {
11367       // The "template<>" header is extraneous.
11368       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
11369         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
11370       isExplicitSpecialization = true;
11371     }
11372   }
11373 
11374   if (Invalid) return 0;
11375 
11376   bool isAllExplicitSpecializations = true;
11377   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
11378     if (TempParamLists[I]->size()) {
11379       isAllExplicitSpecializations = false;
11380       break;
11381     }
11382   }
11383 
11384   // FIXME: don't ignore attributes.
11385 
11386   // If it's explicit specializations all the way down, just forget
11387   // about the template header and build an appropriate non-templated
11388   // friend.  TODO: for source fidelity, remember the headers.
11389   if (isAllExplicitSpecializations) {
11390     if (SS.isEmpty()) {
11391       bool Owned = false;
11392       bool IsDependent = false;
11393       return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
11394                       Attr, AS_public,
11395                       /*ModulePrivateLoc=*/SourceLocation(),
11396                       MultiTemplateParamsArg(), Owned, IsDependent,
11397                       /*ScopedEnumKWLoc=*/SourceLocation(),
11398                       /*ScopedEnumUsesClassTag=*/false,
11399                       /*UnderlyingType=*/TypeResult());
11400     }
11401 
11402     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
11403     ElaboratedTypeKeyword Keyword
11404       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11405     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
11406                                    *Name, NameLoc);
11407     if (T.isNull())
11408       return 0;
11409 
11410     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11411     if (isa<DependentNameType>(T)) {
11412       DependentNameTypeLoc TL =
11413           TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11414       TL.setElaboratedKeywordLoc(TagLoc);
11415       TL.setQualifierLoc(QualifierLoc);
11416       TL.setNameLoc(NameLoc);
11417     } else {
11418       ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
11419       TL.setElaboratedKeywordLoc(TagLoc);
11420       TL.setQualifierLoc(QualifierLoc);
11421       TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
11422     }
11423 
11424     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11425                                             TSI, FriendLoc, TempParamLists);
11426     Friend->setAccess(AS_public);
11427     CurContext->addDecl(Friend);
11428     return Friend;
11429   }
11430 
11431   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
11432 
11433 
11434 
11435   // Handle the case of a templated-scope friend class.  e.g.
11436   //   template <class T> class A<T>::B;
11437   // FIXME: we don't support these right now.
11438   Diag(NameLoc, diag::warn_template_qualified_friend_unsupported)
11439     << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);
11440   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11441   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
11442   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11443   DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11444   TL.setElaboratedKeywordLoc(TagLoc);
11445   TL.setQualifierLoc(SS.getWithLocInContext(Context));
11446   TL.setNameLoc(NameLoc);
11447 
11448   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11449                                           TSI, FriendLoc, TempParamLists);
11450   Friend->setAccess(AS_public);
11451   Friend->setUnsupportedFriend(true);
11452   CurContext->addDecl(Friend);
11453   return Friend;
11454 }
11455 
11456 
11457 /// Handle a friend type declaration.  This works in tandem with
11458 /// ActOnTag.
11459 ///
11460 /// Notes on friend class templates:
11461 ///
11462 /// We generally treat friend class declarations as if they were
11463 /// declaring a class.  So, for example, the elaborated type specifier
11464 /// in a friend declaration is required to obey the restrictions of a
11465 /// class-head (i.e. no typedefs in the scope chain), template
11466 /// parameters are required to match up with simple template-ids, &c.
11467 /// However, unlike when declaring a template specialization, it's
11468 /// okay to refer to a template specialization without an empty
11469 /// template parameter declaration, e.g.
11470 ///   friend class A<T>::B<unsigned>;
11471 /// We permit this as a special case; if there are any template
11472 /// parameters present at all, require proper matching, i.e.
11473 ///   template <> template \<class T> friend class A<int>::B;
11474 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
11475                                 MultiTemplateParamsArg TempParams) {
11476   SourceLocation Loc = DS.getLocStart();
11477 
11478   assert(DS.isFriendSpecified());
11479   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11480 
11481   // Try to convert the decl specifier to a type.  This works for
11482   // friend templates because ActOnTag never produces a ClassTemplateDecl
11483   // for a TUK_Friend.
11484   Declarator TheDeclarator(DS, Declarator::MemberContext);
11485   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
11486   QualType T = TSI->getType();
11487   if (TheDeclarator.isInvalidType())
11488     return 0;
11489 
11490   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
11491     return 0;
11492 
11493   // This is definitely an error in C++98.  It's probably meant to
11494   // be forbidden in C++0x, too, but the specification is just
11495   // poorly written.
11496   //
11497   // The problem is with declarations like the following:
11498   //   template <T> friend A<T>::foo;
11499   // where deciding whether a class C is a friend or not now hinges
11500   // on whether there exists an instantiation of A that causes
11501   // 'foo' to equal C.  There are restrictions on class-heads
11502   // (which we declare (by fiat) elaborated friend declarations to
11503   // be) that makes this tractable.
11504   //
11505   // FIXME: handle "template <> friend class A<T>;", which
11506   // is possibly well-formed?  Who even knows?
11507   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
11508     Diag(Loc, diag::err_tagless_friend_type_template)
11509       << DS.getSourceRange();
11510     return 0;
11511   }
11512 
11513   // C++98 [class.friend]p1: A friend of a class is a function
11514   //   or class that is not a member of the class . . .
11515   // This is fixed in DR77, which just barely didn't make the C++03
11516   // deadline.  It's also a very silly restriction that seriously
11517   // affects inner classes and which nobody else seems to implement;
11518   // thus we never diagnose it, not even in -pedantic.
11519   //
11520   // But note that we could warn about it: it's always useless to
11521   // friend one of your own members (it's not, however, worthless to
11522   // friend a member of an arbitrary specialization of your template).
11523 
11524   Decl *D;
11525   if (unsigned NumTempParamLists = TempParams.size())
11526     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
11527                                    NumTempParamLists,
11528                                    TempParams.data(),
11529                                    TSI,
11530                                    DS.getFriendSpecLoc());
11531   else
11532     D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
11533 
11534   if (!D)
11535     return 0;
11536 
11537   D->setAccess(AS_public);
11538   CurContext->addDecl(D);
11539 
11540   return D;
11541 }
11542 
11543 NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
11544                                         MultiTemplateParamsArg TemplateParams) {
11545   const DeclSpec &DS = D.getDeclSpec();
11546 
11547   assert(DS.isFriendSpecified());
11548   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11549 
11550   SourceLocation Loc = D.getIdentifierLoc();
11551   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
11552 
11553   // C++ [class.friend]p1
11554   //   A friend of a class is a function or class....
11555   // Note that this sees through typedefs, which is intended.
11556   // It *doesn't* see through dependent types, which is correct
11557   // according to [temp.arg.type]p3:
11558   //   If a declaration acquires a function type through a
11559   //   type dependent on a template-parameter and this causes
11560   //   a declaration that does not use the syntactic form of a
11561   //   function declarator to have a function type, the program
11562   //   is ill-formed.
11563   if (!TInfo->getType()->isFunctionType()) {
11564     Diag(Loc, diag::err_unexpected_friend);
11565 
11566     // It might be worthwhile to try to recover by creating an
11567     // appropriate declaration.
11568     return 0;
11569   }
11570 
11571   // C++ [namespace.memdef]p3
11572   //  - If a friend declaration in a non-local class first declares a
11573   //    class or function, the friend class or function is a member
11574   //    of the innermost enclosing namespace.
11575   //  - The name of the friend is not found by simple name lookup
11576   //    until a matching declaration is provided in that namespace
11577   //    scope (either before or after the class declaration granting
11578   //    friendship).
11579   //  - If a friend function is called, its name may be found by the
11580   //    name lookup that considers functions from namespaces and
11581   //    classes associated with the types of the function arguments.
11582   //  - When looking for a prior declaration of a class or a function
11583   //    declared as a friend, scopes outside the innermost enclosing
11584   //    namespace scope are not considered.
11585 
11586   CXXScopeSpec &SS = D.getCXXScopeSpec();
11587   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
11588   DeclarationName Name = NameInfo.getName();
11589   assert(Name);
11590 
11591   // Check for unexpanded parameter packs.
11592   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
11593       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
11594       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
11595     return 0;
11596 
11597   // The context we found the declaration in, or in which we should
11598   // create the declaration.
11599   DeclContext *DC;
11600   Scope *DCScope = S;
11601   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
11602                         ForRedeclaration);
11603 
11604   // There are five cases here.
11605   //   - There's no scope specifier and we're in a local class. Only look
11606   //     for functions declared in the immediately-enclosing block scope.
11607   // We recover from invalid scope qualifiers as if they just weren't there.
11608   FunctionDecl *FunctionContainingLocalClass = 0;
11609   if ((SS.isInvalid() || !SS.isSet()) &&
11610       (FunctionContainingLocalClass =
11611            cast<CXXRecordDecl>(CurContext)->isLocalClass())) {
11612     // C++11 [class.friend]p11:
11613     //   If a friend declaration appears in a local class and the name
11614     //   specified is an unqualified name, a prior declaration is
11615     //   looked up without considering scopes that are outside the
11616     //   innermost enclosing non-class scope. For a friend function
11617     //   declaration, if there is no prior declaration, the program is
11618     //   ill-formed.
11619 
11620     // Find the innermost enclosing non-class scope. This is the block
11621     // scope containing the local class definition (or for a nested class,
11622     // the outer local class).
11623     DCScope = S->getFnParent();
11624 
11625     // Look up the function name in the scope.
11626     Previous.clear(LookupLocalFriendName);
11627     LookupName(Previous, S, /*AllowBuiltinCreation*/false);
11628 
11629     if (!Previous.empty()) {
11630       // All possible previous declarations must have the same context:
11631       // either they were declared at block scope or they are members of
11632       // one of the enclosing local classes.
11633       DC = Previous.getRepresentativeDecl()->getDeclContext();
11634     } else {
11635       // This is ill-formed, but provide the context that we would have
11636       // declared the function in, if we were permitted to, for error recovery.
11637       DC = FunctionContainingLocalClass;
11638     }
11639     adjustContextForLocalExternDecl(DC);
11640 
11641     // C++ [class.friend]p6:
11642     //   A function can be defined in a friend declaration of a class if and
11643     //   only if the class is a non-local class (9.8), the function name is
11644     //   unqualified, and the function has namespace scope.
11645     if (D.isFunctionDefinition()) {
11646       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
11647     }
11648 
11649   //   - There's no scope specifier, in which case we just go to the
11650   //     appropriate scope and look for a function or function template
11651   //     there as appropriate.
11652   } else if (SS.isInvalid() || !SS.isSet()) {
11653     // C++11 [namespace.memdef]p3:
11654     //   If the name in a friend declaration is neither qualified nor
11655     //   a template-id and the declaration is a function or an
11656     //   elaborated-type-specifier, the lookup to determine whether
11657     //   the entity has been previously declared shall not consider
11658     //   any scopes outside the innermost enclosing namespace.
11659     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
11660 
11661     // Find the appropriate context according to the above.
11662     DC = CurContext;
11663 
11664     // Skip class contexts.  If someone can cite chapter and verse
11665     // for this behavior, that would be nice --- it's what GCC and
11666     // EDG do, and it seems like a reasonable intent, but the spec
11667     // really only says that checks for unqualified existing
11668     // declarations should stop at the nearest enclosing namespace,
11669     // not that they should only consider the nearest enclosing
11670     // namespace.
11671     while (DC->isRecord())
11672       DC = DC->getParent();
11673 
11674     DeclContext *LookupDC = DC;
11675     while (LookupDC->isTransparentContext())
11676       LookupDC = LookupDC->getParent();
11677 
11678     while (true) {
11679       LookupQualifiedName(Previous, LookupDC);
11680 
11681       if (!Previous.empty()) {
11682         DC = LookupDC;
11683         break;
11684       }
11685 
11686       if (isTemplateId) {
11687         if (isa<TranslationUnitDecl>(LookupDC)) break;
11688       } else {
11689         if (LookupDC->isFileContext()) break;
11690       }
11691       LookupDC = LookupDC->getParent();
11692     }
11693 
11694     DCScope = getScopeForDeclContext(S, DC);
11695 
11696   //   - There's a non-dependent scope specifier, in which case we
11697   //     compute it and do a previous lookup there for a function
11698   //     or function template.
11699   } else if (!SS.getScopeRep()->isDependent()) {
11700     DC = computeDeclContext(SS);
11701     if (!DC) return 0;
11702 
11703     if (RequireCompleteDeclContext(SS, DC)) return 0;
11704 
11705     LookupQualifiedName(Previous, DC);
11706 
11707     // Ignore things found implicitly in the wrong scope.
11708     // TODO: better diagnostics for this case.  Suggesting the right
11709     // qualified scope would be nice...
11710     LookupResult::Filter F = Previous.makeFilter();
11711     while (F.hasNext()) {
11712       NamedDecl *D = F.next();
11713       if (!DC->InEnclosingNamespaceSetOf(
11714               D->getDeclContext()->getRedeclContext()))
11715         F.erase();
11716     }
11717     F.done();
11718 
11719     if (Previous.empty()) {
11720       D.setInvalidType();
11721       Diag(Loc, diag::err_qualified_friend_not_found)
11722           << Name << TInfo->getType();
11723       return 0;
11724     }
11725 
11726     // C++ [class.friend]p1: A friend of a class is a function or
11727     //   class that is not a member of the class . . .
11728     if (DC->Equals(CurContext))
11729       Diag(DS.getFriendSpecLoc(),
11730            getLangOpts().CPlusPlus11 ?
11731              diag::warn_cxx98_compat_friend_is_member :
11732              diag::err_friend_is_member);
11733 
11734     if (D.isFunctionDefinition()) {
11735       // C++ [class.friend]p6:
11736       //   A function can be defined in a friend declaration of a class if and
11737       //   only if the class is a non-local class (9.8), the function name is
11738       //   unqualified, and the function has namespace scope.
11739       SemaDiagnosticBuilder DB
11740         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
11741 
11742       DB << SS.getScopeRep();
11743       if (DC->isFileContext())
11744         DB << FixItHint::CreateRemoval(SS.getRange());
11745       SS.clear();
11746     }
11747 
11748   //   - There's a scope specifier that does not match any template
11749   //     parameter lists, in which case we use some arbitrary context,
11750   //     create a method or method template, and wait for instantiation.
11751   //   - There's a scope specifier that does match some template
11752   //     parameter lists, which we don't handle right now.
11753   } else {
11754     if (D.isFunctionDefinition()) {
11755       // C++ [class.friend]p6:
11756       //   A function can be defined in a friend declaration of a class if and
11757       //   only if the class is a non-local class (9.8), the function name is
11758       //   unqualified, and the function has namespace scope.
11759       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
11760         << SS.getScopeRep();
11761     }
11762 
11763     DC = CurContext;
11764     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
11765   }
11766 
11767   if (!DC->isRecord()) {
11768     // This implies that it has to be an operator or function.
11769     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
11770         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
11771         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
11772       Diag(Loc, diag::err_introducing_special_friend) <<
11773         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
11774          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
11775       return 0;
11776     }
11777   }
11778 
11779   // FIXME: This is an egregious hack to cope with cases where the scope stack
11780   // does not contain the declaration context, i.e., in an out-of-line
11781   // definition of a class.
11782   Scope FakeDCScope(S, Scope::DeclScope, Diags);
11783   if (!DCScope) {
11784     FakeDCScope.setEntity(DC);
11785     DCScope = &FakeDCScope;
11786   }
11787 
11788   bool AddToScope = true;
11789   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
11790                                           TemplateParams, AddToScope);
11791   if (!ND) return 0;
11792 
11793   assert(ND->getLexicalDeclContext() == CurContext);
11794 
11795   // If we performed typo correction, we might have added a scope specifier
11796   // and changed the decl context.
11797   DC = ND->getDeclContext();
11798 
11799   // Add the function declaration to the appropriate lookup tables,
11800   // adjusting the redeclarations list as necessary.  We don't
11801   // want to do this yet if the friending class is dependent.
11802   //
11803   // Also update the scope-based lookup if the target context's
11804   // lookup context is in lexical scope.
11805   if (!CurContext->isDependentContext()) {
11806     DC = DC->getRedeclContext();
11807     DC->makeDeclVisibleInContext(ND);
11808     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
11809       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
11810   }
11811 
11812   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
11813                                        D.getIdentifierLoc(), ND,
11814                                        DS.getFriendSpecLoc());
11815   FrD->setAccess(AS_public);
11816   CurContext->addDecl(FrD);
11817 
11818   if (ND->isInvalidDecl()) {
11819     FrD->setInvalidDecl();
11820   } else {
11821     if (DC->isRecord()) CheckFriendAccess(ND);
11822 
11823     FunctionDecl *FD;
11824     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
11825       FD = FTD->getTemplatedDecl();
11826     else
11827       FD = cast<FunctionDecl>(ND);
11828 
11829     // C++11 [dcl.fct.default]p4: If a friend declaration specifies a
11830     // default argument expression, that declaration shall be a definition
11831     // and shall be the only declaration of the function or function
11832     // template in the translation unit.
11833     if (functionDeclHasDefaultArgument(FD)) {
11834       if (FunctionDecl *OldFD = FD->getPreviousDecl()) {
11835         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
11836         Diag(OldFD->getLocation(), diag::note_previous_declaration);
11837       } else if (!D.isFunctionDefinition())
11838         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def);
11839     }
11840 
11841     // Mark templated-scope function declarations as unsupported.
11842     if (FD->getNumTemplateParameterLists())
11843       FrD->setUnsupportedFriend(true);
11844   }
11845 
11846   return ND;
11847 }
11848 
11849 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
11850   AdjustDeclIfTemplate(Dcl);
11851 
11852   FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
11853   if (!Fn) {
11854     Diag(DelLoc, diag::err_deleted_non_function);
11855     return;
11856   }
11857 
11858   if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
11859     // Don't consider the implicit declaration we generate for explicit
11860     // specializations. FIXME: Do not generate these implicit declarations.
11861     if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
11862         || Prev->getPreviousDecl()) && !Prev->isDefined()) {
11863       Diag(DelLoc, diag::err_deleted_decl_not_first);
11864       Diag(Prev->getLocation(), diag::note_previous_declaration);
11865     }
11866     // If the declaration wasn't the first, we delete the function anyway for
11867     // recovery.
11868     Fn = Fn->getCanonicalDecl();
11869   }
11870 
11871   if (Fn->isDeleted())
11872     return;
11873 
11874   // See if we're deleting a function which is already known to override a
11875   // non-deleted virtual function.
11876   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn)) {
11877     bool IssuedDiagnostic = false;
11878     for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
11879                                         E = MD->end_overridden_methods();
11880          I != E; ++I) {
11881       if (!(*MD->begin_overridden_methods())->isDeleted()) {
11882         if (!IssuedDiagnostic) {
11883           Diag(DelLoc, diag::err_deleted_override) << MD->getDeclName();
11884           IssuedDiagnostic = true;
11885         }
11886         Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
11887       }
11888     }
11889   }
11890 
11891   Fn->setDeletedAsWritten();
11892 }
11893 
11894 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
11895   CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Dcl);
11896 
11897   if (MD) {
11898     if (MD->getParent()->isDependentType()) {
11899       MD->setDefaulted();
11900       MD->setExplicitlyDefaulted();
11901       return;
11902     }
11903 
11904     CXXSpecialMember Member = getSpecialMember(MD);
11905     if (Member == CXXInvalid) {
11906       if (!MD->isInvalidDecl())
11907         Diag(DefaultLoc, diag::err_default_special_members);
11908       return;
11909     }
11910 
11911     MD->setDefaulted();
11912     MD->setExplicitlyDefaulted();
11913 
11914     // If this definition appears within the record, do the checking when
11915     // the record is complete.
11916     const FunctionDecl *Primary = MD;
11917     if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
11918       // Find the uninstantiated declaration that actually had the '= default'
11919       // on it.
11920       Pattern->isDefined(Primary);
11921 
11922     // If the method was defaulted on its first declaration, we will have
11923     // already performed the checking in CheckCompletedCXXClass. Such a
11924     // declaration doesn't trigger an implicit definition.
11925     if (Primary == Primary->getCanonicalDecl())
11926       return;
11927 
11928     CheckExplicitlyDefaultedSpecialMember(MD);
11929 
11930     // The exception specification is needed because we are defining the
11931     // function.
11932     ResolveExceptionSpec(DefaultLoc,
11933                          MD->getType()->castAs<FunctionProtoType>());
11934 
11935     if (MD->isInvalidDecl())
11936       return;
11937 
11938     switch (Member) {
11939     case CXXDefaultConstructor:
11940       DefineImplicitDefaultConstructor(DefaultLoc,
11941                                        cast<CXXConstructorDecl>(MD));
11942       break;
11943     case CXXCopyConstructor:
11944       DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
11945       break;
11946     case CXXCopyAssignment:
11947       DefineImplicitCopyAssignment(DefaultLoc, MD);
11948       break;
11949     case CXXDestructor:
11950       DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(MD));
11951       break;
11952     case CXXMoveConstructor:
11953       DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
11954       break;
11955     case CXXMoveAssignment:
11956       DefineImplicitMoveAssignment(DefaultLoc, MD);
11957       break;
11958     case CXXInvalid:
11959       llvm_unreachable("Invalid special member.");
11960     }
11961   } else {
11962     Diag(DefaultLoc, diag::err_default_special_members);
11963   }
11964 }
11965 
11966 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
11967   for (Stmt::child_range CI = S->children(); CI; ++CI) {
11968     Stmt *SubStmt = *CI;
11969     if (!SubStmt)
11970       continue;
11971     if (isa<ReturnStmt>(SubStmt))
11972       Self.Diag(SubStmt->getLocStart(),
11973            diag::err_return_in_constructor_handler);
11974     if (!isa<Expr>(SubStmt))
11975       SearchForReturnInStmt(Self, SubStmt);
11976   }
11977 }
11978 
11979 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
11980   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
11981     CXXCatchStmt *Handler = TryBlock->getHandler(I);
11982     SearchForReturnInStmt(*this, Handler);
11983   }
11984 }
11985 
11986 bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
11987                                              const CXXMethodDecl *Old) {
11988   const FunctionType *NewFT = New->getType()->getAs<FunctionType>();
11989   const FunctionType *OldFT = Old->getType()->getAs<FunctionType>();
11990 
11991   CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
11992 
11993   // If the calling conventions match, everything is fine
11994   if (NewCC == OldCC)
11995     return false;
11996 
11997   Diag(New->getLocation(),
11998        diag::err_conflicting_overriding_cc_attributes)
11999     << New->getDeclName() << New->getType() << Old->getType();
12000   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12001   return true;
12002 }
12003 
12004 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
12005                                              const CXXMethodDecl *Old) {
12006   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
12007   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
12008 
12009   if (Context.hasSameType(NewTy, OldTy) ||
12010       NewTy->isDependentType() || OldTy->isDependentType())
12011     return false;
12012 
12013   // Check if the return types are covariant
12014   QualType NewClassTy, OldClassTy;
12015 
12016   /// Both types must be pointers or references to classes.
12017   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
12018     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
12019       NewClassTy = NewPT->getPointeeType();
12020       OldClassTy = OldPT->getPointeeType();
12021     }
12022   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
12023     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
12024       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
12025         NewClassTy = NewRT->getPointeeType();
12026         OldClassTy = OldRT->getPointeeType();
12027       }
12028     }
12029   }
12030 
12031   // The return types aren't either both pointers or references to a class type.
12032   if (NewClassTy.isNull()) {
12033     Diag(New->getLocation(),
12034          diag::err_different_return_type_for_overriding_virtual_function)
12035       << New->getDeclName() << NewTy << OldTy;
12036     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12037 
12038     return true;
12039   }
12040 
12041   // C++ [class.virtual]p6:
12042   //   If the return type of D::f differs from the return type of B::f, the
12043   //   class type in the return type of D::f shall be complete at the point of
12044   //   declaration of D::f or shall be the class type D.
12045   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
12046     if (!RT->isBeingDefined() &&
12047         RequireCompleteType(New->getLocation(), NewClassTy,
12048                             diag::err_covariant_return_incomplete,
12049                             New->getDeclName()))
12050     return true;
12051   }
12052 
12053   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
12054     // Check if the new class derives from the old class.
12055     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
12056       Diag(New->getLocation(),
12057            diag::err_covariant_return_not_derived)
12058       << New->getDeclName() << NewTy << OldTy;
12059       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12060       return true;
12061     }
12062 
12063     // Check if we the conversion from derived to base is valid.
12064     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
12065                     diag::err_covariant_return_inaccessible_base,
12066                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
12067                     // FIXME: Should this point to the return type?
12068                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
12069       // FIXME: this note won't trigger for delayed access control
12070       // diagnostics, and it's impossible to get an undelayed error
12071       // here from access control during the original parse because
12072       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
12073       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12074       return true;
12075     }
12076   }
12077 
12078   // The qualifiers of the return types must be the same.
12079   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
12080     Diag(New->getLocation(),
12081          diag::err_covariant_return_type_different_qualifications)
12082     << New->getDeclName() << NewTy << OldTy;
12083     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12084     return true;
12085   };
12086 
12087 
12088   // The new class type must have the same or less qualifiers as the old type.
12089   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
12090     Diag(New->getLocation(),
12091          diag::err_covariant_return_type_class_type_more_qualified)
12092     << New->getDeclName() << NewTy << OldTy;
12093     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
12094     return true;
12095   };
12096 
12097   return false;
12098 }
12099 
12100 /// \brief Mark the given method pure.
12101 ///
12102 /// \param Method the method to be marked pure.
12103 ///
12104 /// \param InitRange the source range that covers the "0" initializer.
12105 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
12106   SourceLocation EndLoc = InitRange.getEnd();
12107   if (EndLoc.isValid())
12108     Method->setRangeEnd(EndLoc);
12109 
12110   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
12111     Method->setPure();
12112     return false;
12113   }
12114 
12115   if (!Method->isInvalidDecl())
12116     Diag(Method->getLocation(), diag::err_non_virtual_pure)
12117       << Method->getDeclName() << InitRange;
12118   return true;
12119 }
12120 
12121 /// \brief Determine whether the given declaration is a static data member.
12122 static bool isStaticDataMember(const Decl *D) {
12123   if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D))
12124     return Var->isStaticDataMember();
12125 
12126   return false;
12127 }
12128 
12129 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
12130 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
12131 /// is a fresh scope pushed for just this purpose.
12132 ///
12133 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
12134 /// static data member of class X, names should be looked up in the scope of
12135 /// class X.
12136 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
12137   // If there is no declaration, there was an error parsing it.
12138   if (D == 0 || D->isInvalidDecl()) return;
12139 
12140   // We will always have a nested name specifier here, but this declaration
12141   // might not be out of line if the specifier names the current namespace:
12142   //   extern int n;
12143   //   int ::n = 0;
12144   if (D->isOutOfLine())
12145     EnterDeclaratorContext(S, D->getDeclContext());
12146 
12147   // If we are parsing the initializer for a static data member, push a
12148   // new expression evaluation context that is associated with this static
12149   // data member.
12150   if (isStaticDataMember(D))
12151     PushExpressionEvaluationContext(PotentiallyEvaluated, D);
12152 }
12153 
12154 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
12155 /// initializer for the out-of-line declaration 'D'.
12156 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
12157   // If there is no declaration, there was an error parsing it.
12158   if (D == 0 || D->isInvalidDecl()) return;
12159 
12160   if (isStaticDataMember(D))
12161     PopExpressionEvaluationContext();
12162 
12163   if (D->isOutOfLine())
12164     ExitDeclaratorContext(S);
12165 }
12166 
12167 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
12168 /// C++ if/switch/while/for statement.
12169 /// e.g: "if (int x = f()) {...}"
12170 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
12171   // C++ 6.4p2:
12172   // The declarator shall not specify a function or an array.
12173   // The type-specifier-seq shall not contain typedef and shall not declare a
12174   // new class or enumeration.
12175   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
12176          "Parser allowed 'typedef' as storage class of condition decl.");
12177 
12178   Decl *Dcl = ActOnDeclarator(S, D);
12179   if (!Dcl)
12180     return true;
12181 
12182   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
12183     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
12184       << D.getSourceRange();
12185     return true;
12186   }
12187 
12188   return Dcl;
12189 }
12190 
12191 void Sema::LoadExternalVTableUses() {
12192   if (!ExternalSource)
12193     return;
12194 
12195   SmallVector<ExternalVTableUse, 4> VTables;
12196   ExternalSource->ReadUsedVTables(VTables);
12197   SmallVector<VTableUse, 4> NewUses;
12198   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
12199     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
12200       = VTablesUsed.find(VTables[I].Record);
12201     // Even if a definition wasn't required before, it may be required now.
12202     if (Pos != VTablesUsed.end()) {
12203       if (!Pos->second && VTables[I].DefinitionRequired)
12204         Pos->second = true;
12205       continue;
12206     }
12207 
12208     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
12209     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
12210   }
12211 
12212   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
12213 }
12214 
12215 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
12216                           bool DefinitionRequired) {
12217   // Ignore any vtable uses in unevaluated operands or for classes that do
12218   // not have a vtable.
12219   if (!Class->isDynamicClass() || Class->isDependentContext() ||
12220       CurContext->isDependentContext() || isUnevaluatedContext())
12221     return;
12222 
12223   // Try to insert this class into the map.
12224   LoadExternalVTableUses();
12225   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
12226   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
12227     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
12228   if (!Pos.second) {
12229     // If we already had an entry, check to see if we are promoting this vtable
12230     // to required a definition. If so, we need to reappend to the VTableUses
12231     // list, since we may have already processed the first entry.
12232     if (DefinitionRequired && !Pos.first->second) {
12233       Pos.first->second = true;
12234     } else {
12235       // Otherwise, we can early exit.
12236       return;
12237     }
12238   }
12239 
12240   // Local classes need to have their virtual members marked
12241   // immediately. For all other classes, we mark their virtual members
12242   // at the end of the translation unit.
12243   if (Class->isLocalClass())
12244     MarkVirtualMembersReferenced(Loc, Class);
12245   else
12246     VTableUses.push_back(std::make_pair(Class, Loc));
12247 }
12248 
12249 bool Sema::DefineUsedVTables() {
12250   LoadExternalVTableUses();
12251   if (VTableUses.empty())
12252     return false;
12253 
12254   // Note: The VTableUses vector could grow as a result of marking
12255   // the members of a class as "used", so we check the size each
12256   // time through the loop and prefer indices (which are stable) to
12257   // iterators (which are not).
12258   bool DefinedAnything = false;
12259   for (unsigned I = 0; I != VTableUses.size(); ++I) {
12260     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
12261     if (!Class)
12262       continue;
12263 
12264     SourceLocation Loc = VTableUses[I].second;
12265 
12266     bool DefineVTable = true;
12267 
12268     // If this class has a key function, but that key function is
12269     // defined in another translation unit, we don't need to emit the
12270     // vtable even though we're using it.
12271     const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
12272     if (KeyFunction && !KeyFunction->hasBody()) {
12273       // The key function is in another translation unit.
12274       DefineVTable = false;
12275       TemplateSpecializationKind TSK =
12276           KeyFunction->getTemplateSpecializationKind();
12277       assert(TSK != TSK_ExplicitInstantiationDefinition &&
12278              TSK != TSK_ImplicitInstantiation &&
12279              "Instantiations don't have key functions");
12280       (void)TSK;
12281     } else if (!KeyFunction) {
12282       // If we have a class with no key function that is the subject
12283       // of an explicit instantiation declaration, suppress the
12284       // vtable; it will live with the explicit instantiation
12285       // definition.
12286       bool IsExplicitInstantiationDeclaration
12287         = Class->getTemplateSpecializationKind()
12288                                       == TSK_ExplicitInstantiationDeclaration;
12289       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
12290                                  REnd = Class->redecls_end();
12291            R != REnd; ++R) {
12292         TemplateSpecializationKind TSK
12293           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
12294         if (TSK == TSK_ExplicitInstantiationDeclaration)
12295           IsExplicitInstantiationDeclaration = true;
12296         else if (TSK == TSK_ExplicitInstantiationDefinition) {
12297           IsExplicitInstantiationDeclaration = false;
12298           break;
12299         }
12300       }
12301 
12302       if (IsExplicitInstantiationDeclaration)
12303         DefineVTable = false;
12304     }
12305 
12306     // The exception specifications for all virtual members may be needed even
12307     // if we are not providing an authoritative form of the vtable in this TU.
12308     // We may choose to emit it available_externally anyway.
12309     if (!DefineVTable) {
12310       MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
12311       continue;
12312     }
12313 
12314     // Mark all of the virtual members of this class as referenced, so
12315     // that we can build a vtable. Then, tell the AST consumer that a
12316     // vtable for this class is required.
12317     DefinedAnything = true;
12318     MarkVirtualMembersReferenced(Loc, Class);
12319     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
12320     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
12321 
12322     // Optionally warn if we're emitting a weak vtable.
12323     if (Class->isExternallyVisible() &&
12324         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
12325       const FunctionDecl *KeyFunctionDef = 0;
12326       if (!KeyFunction ||
12327           (KeyFunction->hasBody(KeyFunctionDef) &&
12328            KeyFunctionDef->isInlined()))
12329         Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
12330              TSK_ExplicitInstantiationDefinition
12331              ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
12332           << Class;
12333     }
12334   }
12335   VTableUses.clear();
12336 
12337   return DefinedAnything;
12338 }
12339 
12340 void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
12341                                                  const CXXRecordDecl *RD) {
12342   for (CXXRecordDecl::method_iterator I = RD->method_begin(),
12343                                       E = RD->method_end(); I != E; ++I)
12344     if ((*I)->isVirtual() && !(*I)->isPure())
12345       ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
12346 }
12347 
12348 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
12349                                         const CXXRecordDecl *RD) {
12350   // Mark all functions which will appear in RD's vtable as used.
12351   CXXFinalOverriderMap FinalOverriders;
12352   RD->getFinalOverriders(FinalOverriders);
12353   for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
12354                                             E = FinalOverriders.end();
12355        I != E; ++I) {
12356     for (OverridingMethods::const_iterator OI = I->second.begin(),
12357                                            OE = I->second.end();
12358          OI != OE; ++OI) {
12359       assert(OI->second.size() > 0 && "no final overrider");
12360       CXXMethodDecl *Overrider = OI->second.front().Method;
12361 
12362       // C++ [basic.def.odr]p2:
12363       //   [...] A virtual member function is used if it is not pure. [...]
12364       if (!Overrider->isPure())
12365         MarkFunctionReferenced(Loc, Overrider);
12366     }
12367   }
12368 
12369   // Only classes that have virtual bases need a VTT.
12370   if (RD->getNumVBases() == 0)
12371     return;
12372 
12373   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
12374            e = RD->bases_end(); i != e; ++i) {
12375     const CXXRecordDecl *Base =
12376         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
12377     if (Base->getNumVBases() == 0)
12378       continue;
12379     MarkVirtualMembersReferenced(Loc, Base);
12380   }
12381 }
12382 
12383 /// SetIvarInitializers - This routine builds initialization ASTs for the
12384 /// Objective-C implementation whose ivars need be initialized.
12385 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
12386   if (!getLangOpts().CPlusPlus)
12387     return;
12388   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
12389     SmallVector<ObjCIvarDecl*, 8> ivars;
12390     CollectIvarsToConstructOrDestruct(OID, ivars);
12391     if (ivars.empty())
12392       return;
12393     SmallVector<CXXCtorInitializer*, 32> AllToInit;
12394     for (unsigned i = 0; i < ivars.size(); i++) {
12395       FieldDecl *Field = ivars[i];
12396       if (Field->isInvalidDecl())
12397         continue;
12398 
12399       CXXCtorInitializer *Member;
12400       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
12401       InitializationKind InitKind =
12402         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
12403 
12404       InitializationSequence InitSeq(*this, InitEntity, InitKind, None);
12405       ExprResult MemberInit =
12406         InitSeq.Perform(*this, InitEntity, InitKind, None);
12407       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
12408       // Note, MemberInit could actually come back empty if no initialization
12409       // is required (e.g., because it would call a trivial default constructor)
12410       if (!MemberInit.get() || MemberInit.isInvalid())
12411         continue;
12412 
12413       Member =
12414         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
12415                                          SourceLocation(),
12416                                          MemberInit.takeAs<Expr>(),
12417                                          SourceLocation());
12418       AllToInit.push_back(Member);
12419 
12420       // Be sure that the destructor is accessible and is marked as referenced.
12421       if (const RecordType *RecordTy
12422                   = Context.getBaseElementType(Field->getType())
12423                                                         ->getAs<RecordType>()) {
12424                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
12425         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
12426           MarkFunctionReferenced(Field->getLocation(), Destructor);
12427           CheckDestructorAccess(Field->getLocation(), Destructor,
12428                             PDiag(diag::err_access_dtor_ivar)
12429                               << Context.getBaseElementType(Field->getType()));
12430         }
12431       }
12432     }
12433     ObjCImplementation->setIvarInitializers(Context,
12434                                             AllToInit.data(), AllToInit.size());
12435   }
12436 }
12437 
12438 static
12439 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
12440                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
12441                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
12442                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
12443                            Sema &S) {
12444   if (Ctor->isInvalidDecl())
12445     return;
12446 
12447   CXXConstructorDecl *Target = Ctor->getTargetConstructor();
12448 
12449   // Target may not be determinable yet, for instance if this is a dependent
12450   // call in an uninstantiated template.
12451   if (Target) {
12452     const FunctionDecl *FNTarget = 0;
12453     (void)Target->hasBody(FNTarget);
12454     Target = const_cast<CXXConstructorDecl*>(
12455       cast_or_null<CXXConstructorDecl>(FNTarget));
12456   }
12457 
12458   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
12459                      // Avoid dereferencing a null pointer here.
12460                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
12461 
12462   if (!Current.insert(Canonical))
12463     return;
12464 
12465   // We know that beyond here, we aren't chaining into a cycle.
12466   if (!Target || !Target->isDelegatingConstructor() ||
12467       Target->isInvalidDecl() || Valid.count(TCanonical)) {
12468     Valid.insert(Current.begin(), Current.end());
12469     Current.clear();
12470   // We've hit a cycle.
12471   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
12472              Current.count(TCanonical)) {
12473     // If we haven't diagnosed this cycle yet, do so now.
12474     if (!Invalid.count(TCanonical)) {
12475       S.Diag((*Ctor->init_begin())->getSourceLocation(),
12476              diag::warn_delegating_ctor_cycle)
12477         << Ctor;
12478 
12479       // Don't add a note for a function delegating directly to itself.
12480       if (TCanonical != Canonical)
12481         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
12482 
12483       CXXConstructorDecl *C = Target;
12484       while (C->getCanonicalDecl() != Canonical) {
12485         const FunctionDecl *FNTarget = 0;
12486         (void)C->getTargetConstructor()->hasBody(FNTarget);
12487         assert(FNTarget && "Ctor cycle through bodiless function");
12488 
12489         C = const_cast<CXXConstructorDecl*>(
12490           cast<CXXConstructorDecl>(FNTarget));
12491         S.Diag(C->getLocation(), diag::note_which_delegates_to);
12492       }
12493     }
12494 
12495     Invalid.insert(Current.begin(), Current.end());
12496     Current.clear();
12497   } else {
12498     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
12499   }
12500 }
12501 
12502 
12503 void Sema::CheckDelegatingCtorCycles() {
12504   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
12505 
12506   for (DelegatingCtorDeclsType::iterator
12507          I = DelegatingCtorDecls.begin(ExternalSource),
12508          E = DelegatingCtorDecls.end();
12509        I != E; ++I)
12510     DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
12511 
12512   for (llvm::SmallSet<CXXConstructorDecl *, 4>::iterator CI = Invalid.begin(),
12513                                                          CE = Invalid.end();
12514        CI != CE; ++CI)
12515     (*CI)->setInvalidDecl();
12516 }
12517 
12518 namespace {
12519   /// \brief AST visitor that finds references to the 'this' expression.
12520   class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
12521     Sema &S;
12522 
12523   public:
12524     explicit FindCXXThisExpr(Sema &S) : S(S) { }
12525 
12526     bool VisitCXXThisExpr(CXXThisExpr *E) {
12527       S.Diag(E->getLocation(), diag::err_this_static_member_func)
12528         << E->isImplicit();
12529       return false;
12530     }
12531   };
12532 }
12533 
12534 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
12535   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12536   if (!TSInfo)
12537     return false;
12538 
12539   TypeLoc TL = TSInfo->getTypeLoc();
12540   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12541   if (!ProtoTL)
12542     return false;
12543 
12544   // C++11 [expr.prim.general]p3:
12545   //   [The expression this] shall not appear before the optional
12546   //   cv-qualifier-seq and it shall not appear within the declaration of a
12547   //   static member function (although its type and value category are defined
12548   //   within a static member function as they are within a non-static member
12549   //   function). [ Note: this is because declaration matching does not occur
12550   //  until the complete declarator is known. - end note ]
12551   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12552   FindCXXThisExpr Finder(*this);
12553 
12554   // If the return type came after the cv-qualifier-seq, check it now.
12555   if (Proto->hasTrailingReturn() &&
12556       !Finder.TraverseTypeLoc(ProtoTL.getResultLoc()))
12557     return true;
12558 
12559   // Check the exception specification.
12560   if (checkThisInStaticMemberFunctionExceptionSpec(Method))
12561     return true;
12562 
12563   return checkThisInStaticMemberFunctionAttributes(Method);
12564 }
12565 
12566 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
12567   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12568   if (!TSInfo)
12569     return false;
12570 
12571   TypeLoc TL = TSInfo->getTypeLoc();
12572   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12573   if (!ProtoTL)
12574     return false;
12575 
12576   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12577   FindCXXThisExpr Finder(*this);
12578 
12579   switch (Proto->getExceptionSpecType()) {
12580   case EST_Uninstantiated:
12581   case EST_Unevaluated:
12582   case EST_BasicNoexcept:
12583   case EST_DynamicNone:
12584   case EST_MSAny:
12585   case EST_None:
12586     break;
12587 
12588   case EST_ComputedNoexcept:
12589     if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
12590       return true;
12591 
12592   case EST_Dynamic:
12593     for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
12594          EEnd = Proto->exception_end();
12595          E != EEnd; ++E) {
12596       if (!Finder.TraverseType(*E))
12597         return true;
12598     }
12599     break;
12600   }
12601 
12602   return false;
12603 }
12604 
12605 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
12606   FindCXXThisExpr Finder(*this);
12607 
12608   // Check attributes.
12609   for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
12610        A != AEnd; ++A) {
12611     // FIXME: This should be emitted by tblgen.
12612     Expr *Arg = 0;
12613     ArrayRef<Expr *> Args;
12614     if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
12615       Arg = G->getArg();
12616     else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
12617       Arg = G->getArg();
12618     else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
12619       Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
12620     else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
12621       Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
12622     else if (ExclusiveLockFunctionAttr *ELF
12623                = dyn_cast<ExclusiveLockFunctionAttr>(*A))
12624       Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
12625     else if (SharedLockFunctionAttr *SLF
12626                = dyn_cast<SharedLockFunctionAttr>(*A))
12627       Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
12628     else if (ExclusiveTrylockFunctionAttr *ETLF
12629                = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
12630       Arg = ETLF->getSuccessValue();
12631       Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
12632     } else if (SharedTrylockFunctionAttr *STLF
12633                  = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
12634       Arg = STLF->getSuccessValue();
12635       Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
12636     } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
12637       Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
12638     else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
12639       Arg = LR->getArg();
12640     else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
12641       Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
12642     else if (ExclusiveLocksRequiredAttr *ELR
12643                = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
12644       Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
12645     else if (SharedLocksRequiredAttr *SLR
12646                = dyn_cast<SharedLocksRequiredAttr>(*A))
12647       Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
12648 
12649     if (Arg && !Finder.TraverseStmt(Arg))
12650       return true;
12651 
12652     for (unsigned I = 0, N = Args.size(); I != N; ++I) {
12653       if (!Finder.TraverseStmt(Args[I]))
12654         return true;
12655     }
12656   }
12657 
12658   return false;
12659 }
12660 
12661 void
12662 Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
12663                                   ArrayRef<ParsedType> DynamicExceptions,
12664                                   ArrayRef<SourceRange> DynamicExceptionRanges,
12665                                   Expr *NoexceptExpr,
12666                                   SmallVectorImpl<QualType> &Exceptions,
12667                                   FunctionProtoType::ExtProtoInfo &EPI) {
12668   Exceptions.clear();
12669   EPI.ExceptionSpecType = EST;
12670   if (EST == EST_Dynamic) {
12671     Exceptions.reserve(DynamicExceptions.size());
12672     for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
12673       // FIXME: Preserve type source info.
12674       QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
12675 
12676       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
12677       collectUnexpandedParameterPacks(ET, Unexpanded);
12678       if (!Unexpanded.empty()) {
12679         DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
12680                                          UPPC_ExceptionType,
12681                                          Unexpanded);
12682         continue;
12683       }
12684 
12685       // Check that the type is valid for an exception spec, and
12686       // drop it if not.
12687       if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
12688         Exceptions.push_back(ET);
12689     }
12690     EPI.NumExceptions = Exceptions.size();
12691     EPI.Exceptions = Exceptions.data();
12692     return;
12693   }
12694 
12695   if (EST == EST_ComputedNoexcept) {
12696     // If an error occurred, there's no expression here.
12697     if (NoexceptExpr) {
12698       assert((NoexceptExpr->isTypeDependent() ||
12699               NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
12700               Context.BoolTy) &&
12701              "Parser should have made sure that the expression is boolean");
12702       if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
12703         EPI.ExceptionSpecType = EST_BasicNoexcept;
12704         return;
12705       }
12706 
12707       if (!NoexceptExpr->isValueDependent())
12708         NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
12709                          diag::err_noexcept_needs_constant_expression,
12710                          /*AllowFold*/ false).take();
12711       EPI.NoexceptExpr = NoexceptExpr;
12712     }
12713     return;
12714   }
12715 }
12716 
12717 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
12718 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
12719   // Implicitly declared functions (e.g. copy constructors) are
12720   // __host__ __device__
12721   if (D->isImplicit())
12722     return CFT_HostDevice;
12723 
12724   if (D->hasAttr<CUDAGlobalAttr>())
12725     return CFT_Global;
12726 
12727   if (D->hasAttr<CUDADeviceAttr>()) {
12728     if (D->hasAttr<CUDAHostAttr>())
12729       return CFT_HostDevice;
12730     return CFT_Device;
12731   }
12732 
12733   return CFT_Host;
12734 }
12735 
12736 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
12737                            CUDAFunctionTarget CalleeTarget) {
12738   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
12739   // Callable from the device only."
12740   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
12741     return true;
12742 
12743   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
12744   // Callable from the host only."
12745   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
12746   // Callable from the host only."
12747   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
12748       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
12749     return true;
12750 
12751   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
12752     return true;
12753 
12754   return false;
12755 }
12756 
12757 /// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
12758 ///
12759 MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
12760                                        SourceLocation DeclStart,
12761                                        Declarator &D, Expr *BitWidth,
12762                                        InClassInitStyle InitStyle,
12763                                        AccessSpecifier AS,
12764                                        AttributeList *MSPropertyAttr) {
12765   IdentifierInfo *II = D.getIdentifier();
12766   if (!II) {
12767     Diag(DeclStart, diag::err_anonymous_property);
12768     return NULL;
12769   }
12770   SourceLocation Loc = D.getIdentifierLoc();
12771 
12772   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
12773   QualType T = TInfo->getType();
12774   if (getLangOpts().CPlusPlus) {
12775     CheckExtraCXXDefaultArguments(D);
12776 
12777     if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
12778                                         UPPC_DataMemberType)) {
12779       D.setInvalidType();
12780       T = Context.IntTy;
12781       TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
12782     }
12783   }
12784 
12785   DiagnoseFunctionSpecifiers(D.getDeclSpec());
12786 
12787   if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
12788     Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
12789          diag::err_invalid_thread)
12790       << DeclSpec::getSpecifierName(TSCS);
12791 
12792   // Check to see if this name was declared as a member previously
12793   NamedDecl *PrevDecl = 0;
12794   LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
12795   LookupName(Previous, S);
12796   switch (Previous.getResultKind()) {
12797   case LookupResult::Found:
12798   case LookupResult::FoundUnresolvedValue:
12799     PrevDecl = Previous.getAsSingle<NamedDecl>();
12800     break;
12801 
12802   case LookupResult::FoundOverloaded:
12803     PrevDecl = Previous.getRepresentativeDecl();
12804     break;
12805 
12806   case LookupResult::NotFound:
12807   case LookupResult::NotFoundInCurrentInstantiation:
12808   case LookupResult::Ambiguous:
12809     break;
12810   }
12811 
12812   if (PrevDecl && PrevDecl->isTemplateParameter()) {
12813     // Maybe we will complain about the shadowed template parameter.
12814     DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
12815     // Just pretend that we didn't see the previous declaration.
12816     PrevDecl = 0;
12817   }
12818 
12819   if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
12820     PrevDecl = 0;
12821 
12822   SourceLocation TSSL = D.getLocStart();
12823   const AttributeList::PropertyData &Data = MSPropertyAttr->getPropertyData();
12824   MSPropertyDecl *NewPD = MSPropertyDecl::Create(
12825       Context, Record, Loc, II, T, TInfo, TSSL, Data.GetterId, Data.SetterId);
12826   ProcessDeclAttributes(TUScope, NewPD, D);
12827   NewPD->setAccess(AS);
12828 
12829   if (NewPD->isInvalidDecl())
12830     Record->setInvalidDecl();
12831 
12832   if (D.getDeclSpec().isModulePrivateSpecified())
12833     NewPD->setModulePrivate();
12834 
12835   if (NewPD->isInvalidDecl() && PrevDecl) {
12836     // Don't introduce NewFD into scope; there's already something
12837     // with the same name in the same scope.
12838   } else if (II) {
12839     PushOnScopeChains(NewPD, S);
12840   } else
12841     Record->addDecl(NewPD);
12842 
12843   return NewPD;
12844 }
12845