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/ASTMutationListener.h"
18 #include "clang/AST/CXXInheritance.h"
19 #include "clang/AST/CharUnits.h"
20 #include "clang/AST/DeclVisitor.h"
21 #include "clang/AST/EvaluatedExprVisitor.h"
22 #include "clang/AST/ExprCXX.h"
23 #include "clang/AST/RecordLayout.h"
24 #include "clang/AST/RecursiveASTVisitor.h"
25 #include "clang/AST/StmtVisitor.h"
26 #include "clang/AST/TypeLoc.h"
27 #include "clang/AST/TypeOrdering.h"
28 #include "clang/Basic/PartialDiagnostic.h"
29 #include "clang/Basic/TargetInfo.h"
30 #include "clang/Lex/Preprocessor.h"
31 #include "clang/Sema/CXXFieldCollector.h"
32 #include "clang/Sema/DeclSpec.h"
33 #include "clang/Sema/Initialization.h"
34 #include "clang/Sema/Lookup.h"
35 #include "clang/Sema/ParsedTemplate.h"
36 #include "clang/Sema/Scope.h"
37 #include "clang/Sema/ScopeInfo.h"
38 #include "llvm/ADT/STLExtras.h"
39 #include "llvm/ADT/SmallString.h"
40 #include <map>
41 #include <set>
42 
43 using namespace clang;
44 
45 //===----------------------------------------------------------------------===//
46 // CheckDefaultArgumentVisitor
47 //===----------------------------------------------------------------------===//
48 
49 namespace {
50   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
51   /// the default argument of a parameter to determine whether it
52   /// contains any ill-formed subexpressions. For example, this will
53   /// diagnose the use of local variables or parameters within the
54   /// default argument expression.
55   class CheckDefaultArgumentVisitor
56     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
57     Expr *DefaultArg;
58     Sema *S;
59 
60   public:
61     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
62       : DefaultArg(defarg), S(s) {}
63 
64     bool VisitExpr(Expr *Node);
65     bool VisitDeclRefExpr(DeclRefExpr *DRE);
66     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
67     bool VisitLambdaExpr(LambdaExpr *Lambda);
68     bool VisitPseudoObjectExpr(PseudoObjectExpr *POE);
69   };
70 
71   /// VisitExpr - Visit all of the children of this expression.
72   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
73     bool IsInvalid = false;
74     for (Stmt::child_range I = Node->children(); I; ++I)
75       IsInvalid |= Visit(*I);
76     return IsInvalid;
77   }
78 
79   /// VisitDeclRefExpr - Visit a reference to a declaration, to
80   /// determine whether this declaration can be used in the default
81   /// argument expression.
82   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
83     NamedDecl *Decl = DRE->getDecl();
84     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
85       // C++ [dcl.fct.default]p9
86       //   Default arguments are evaluated each time the function is
87       //   called. The order of evaluation of function arguments is
88       //   unspecified. Consequently, parameters of a function shall not
89       //   be used in default argument expressions, even if they are not
90       //   evaluated. Parameters of a function declared before a default
91       //   argument expression are in scope and can hide namespace and
92       //   class member names.
93       return S->Diag(DRE->getLocStart(),
94                      diag::err_param_default_argument_references_param)
95          << Param->getDeclName() << DefaultArg->getSourceRange();
96     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
97       // C++ [dcl.fct.default]p7
98       //   Local variables shall not be used in default argument
99       //   expressions.
100       if (VDecl->isLocalVarDecl())
101         return S->Diag(DRE->getLocStart(),
102                        diag::err_param_default_argument_references_local)
103           << VDecl->getDeclName() << DefaultArg->getSourceRange();
104     }
105 
106     return false;
107   }
108 
109   /// VisitCXXThisExpr - Visit a C++ "this" expression.
110   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
111     // C++ [dcl.fct.default]p8:
112     //   The keyword this shall not be used in a default argument of a
113     //   member function.
114     return S->Diag(ThisE->getLocStart(),
115                    diag::err_param_default_argument_references_this)
116                << ThisE->getSourceRange();
117   }
118 
119   bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) {
120     bool Invalid = false;
121     for (PseudoObjectExpr::semantics_iterator
122            i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
123       Expr *E = *i;
124 
125       // Look through bindings.
126       if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
127         E = OVE->getSourceExpr();
128         assert(E && "pseudo-object binding without source expression?");
129       }
130 
131       Invalid |= Visit(E);
132     }
133     return Invalid;
134   }
135 
136   bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
137     // C++11 [expr.lambda.prim]p13:
138     //   A lambda-expression appearing in a default argument shall not
139     //   implicitly or explicitly capture any entity.
140     if (Lambda->capture_begin() == Lambda->capture_end())
141       return false;
142 
143     return S->Diag(Lambda->getLocStart(),
144                    diag::err_lambda_capture_default_arg);
145   }
146 }
147 
148 void
149 Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
150                                                  const CXXMethodDecl *Method) {
151   // If we have an MSAny spec already, don't bother.
152   if (!Method || ComputedEST == EST_MSAny)
153     return;
154 
155   const FunctionProtoType *Proto
156     = Method->getType()->getAs<FunctionProtoType>();
157   Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
158   if (!Proto)
159     return;
160 
161   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
162 
163   // If this function can throw any exceptions, make a note of that.
164   if (EST == EST_MSAny || EST == EST_None) {
165     ClearExceptions();
166     ComputedEST = EST;
167     return;
168   }
169 
170   // FIXME: If the call to this decl is using any of its default arguments, we
171   // need to search them for potentially-throwing calls.
172 
173   // If this function has a basic noexcept, it doesn't affect the outcome.
174   if (EST == EST_BasicNoexcept)
175     return;
176 
177   // If we have a throw-all spec at this point, ignore the function.
178   if (ComputedEST == EST_None)
179     return;
180 
181   // If we're still at noexcept(true) and there's a nothrow() callee,
182   // change to that specification.
183   if (EST == EST_DynamicNone) {
184     if (ComputedEST == EST_BasicNoexcept)
185       ComputedEST = EST_DynamicNone;
186     return;
187   }
188 
189   // Check out noexcept specs.
190   if (EST == EST_ComputedNoexcept) {
191     FunctionProtoType::NoexceptResult NR =
192         Proto->getNoexceptSpec(Self->Context);
193     assert(NR != FunctionProtoType::NR_NoNoexcept &&
194            "Must have noexcept result for EST_ComputedNoexcept.");
195     assert(NR != FunctionProtoType::NR_Dependent &&
196            "Should not generate implicit declarations for dependent cases, "
197            "and don't know how to handle them anyway.");
198 
199     // noexcept(false) -> no spec on the new function
200     if (NR == FunctionProtoType::NR_Throw) {
201       ClearExceptions();
202       ComputedEST = EST_None;
203     }
204     // noexcept(true) won't change anything either.
205     return;
206   }
207 
208   assert(EST == EST_Dynamic && "EST case not considered earlier.");
209   assert(ComputedEST != EST_None &&
210          "Shouldn't collect exceptions when throw-all is guaranteed.");
211   ComputedEST = EST_Dynamic;
212   // Record the exceptions in this function's exception specification.
213   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
214                                           EEnd = Proto->exception_end();
215        E != EEnd; ++E)
216     if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
217       Exceptions.push_back(*E);
218 }
219 
220 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
221   if (!E || ComputedEST == EST_MSAny)
222     return;
223 
224   // FIXME:
225   //
226   // C++0x [except.spec]p14:
227   //   [An] implicit exception-specification specifies the type-id T if and
228   // only if T is allowed by the exception-specification of a function directly
229   // invoked by f's implicit definition; f shall allow all exceptions if any
230   // function it directly invokes allows all exceptions, and f shall allow no
231   // exceptions if every function it directly invokes allows no exceptions.
232   //
233   // Note in particular that if an implicit exception-specification is generated
234   // for a function containing a throw-expression, that specification can still
235   // be noexcept(true).
236   //
237   // Note also that 'directly invoked' is not defined in the standard, and there
238   // is no indication that we should only consider potentially-evaluated calls.
239   //
240   // Ultimately we should implement the intent of the standard: the exception
241   // specification should be the set of exceptions which can be thrown by the
242   // implicit definition. For now, we assume that any non-nothrow expression can
243   // throw any exception.
244 
245   if (Self->canThrow(E))
246     ComputedEST = EST_None;
247 }
248 
249 bool
250 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
251                               SourceLocation EqualLoc) {
252   if (RequireCompleteType(Param->getLocation(), Param->getType(),
253                           diag::err_typecheck_decl_incomplete_type)) {
254     Param->setInvalidDecl();
255     return true;
256   }
257 
258   // C++ [dcl.fct.default]p5
259   //   A default argument expression is implicitly converted (clause
260   //   4) to the parameter type. The default argument expression has
261   //   the same semantic constraints as the initializer expression in
262   //   a declaration of a variable of the parameter type, using the
263   //   copy-initialization semantics (8.5).
264   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
265                                                                     Param);
266   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
267                                                            EqualLoc);
268   InitializationSequence InitSeq(*this, Entity, Kind, Arg);
269   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
270   if (Result.isInvalid())
271     return true;
272   Arg = Result.takeAs<Expr>();
273 
274   CheckCompletedExpr(Arg, EqualLoc);
275   Arg = MaybeCreateExprWithCleanups(Arg);
276 
277   // Okay: add the default argument to the parameter
278   Param->setDefaultArg(Arg);
279 
280   // We have already instantiated this parameter; provide each of the
281   // instantiations with the uninstantiated default argument.
282   UnparsedDefaultArgInstantiationsMap::iterator InstPos
283     = UnparsedDefaultArgInstantiations.find(Param);
284   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
285     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
286       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
287 
288     // We're done tracking this parameter's instantiations.
289     UnparsedDefaultArgInstantiations.erase(InstPos);
290   }
291 
292   return false;
293 }
294 
295 /// ActOnParamDefaultArgument - Check whether the default argument
296 /// provided for a function parameter is well-formed. If so, attach it
297 /// to the parameter declaration.
298 void
299 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
300                                 Expr *DefaultArg) {
301   if (!param || !DefaultArg)
302     return;
303 
304   ParmVarDecl *Param = cast<ParmVarDecl>(param);
305   UnparsedDefaultArgLocs.erase(Param);
306 
307   // Default arguments are only permitted in C++
308   if (!getLangOpts().CPlusPlus) {
309     Diag(EqualLoc, diag::err_param_default_argument)
310       << DefaultArg->getSourceRange();
311     Param->setInvalidDecl();
312     return;
313   }
314 
315   // Check for unexpanded parameter packs.
316   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
317     Param->setInvalidDecl();
318     return;
319   }
320 
321   // Check that the default argument is well-formed
322   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
323   if (DefaultArgChecker.Visit(DefaultArg)) {
324     Param->setInvalidDecl();
325     return;
326   }
327 
328   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
329 }
330 
331 /// ActOnParamUnparsedDefaultArgument - We've seen a default
332 /// argument for a function parameter, but we can't parse it yet
333 /// because we're inside a class definition. Note that this default
334 /// argument will be parsed later.
335 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
336                                              SourceLocation EqualLoc,
337                                              SourceLocation ArgLoc) {
338   if (!param)
339     return;
340 
341   ParmVarDecl *Param = cast<ParmVarDecl>(param);
342   if (Param)
343     Param->setUnparsedDefaultArg();
344 
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 
356   Param->setInvalidDecl();
357 
358   UnparsedDefaultArgLocs.erase(Param);
359 }
360 
361 /// CheckExtraCXXDefaultArguments - Check for any extra default
362 /// arguments in the declarator, which is not a function declaration
363 /// or definition and therefore is not permitted to have default
364 /// arguments. This routine should be invoked for every declarator
365 /// that is not a function declaration or definition.
366 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
367   // C++ [dcl.fct.default]p3
368   //   A default argument expression shall be specified only in the
369   //   parameter-declaration-clause of a function declaration or in a
370   //   template-parameter (14.1). It shall not be specified for a
371   //   parameter pack. If it is specified in a
372   //   parameter-declaration-clause, it shall not occur within a
373   //   declarator or abstract-declarator of a parameter-declaration.
374   bool MightBeFunction = D.isFunctionDeclarationContext();
375   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
376     DeclaratorChunk &chunk = D.getTypeObject(i);
377     if (chunk.Kind == DeclaratorChunk::Function) {
378       if (MightBeFunction) {
379         // This is a function declaration. It can have default arguments, but
380         // keep looking in case its return type is a function type with default
381         // arguments.
382         MightBeFunction = false;
383         continue;
384       }
385       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
386         ParmVarDecl *Param =
387           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
388         if (Param->hasUnparsedDefaultArg()) {
389           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
390           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
391             << SourceRange((*Toks)[1].getLocation(),
392                            Toks->back().getLocation());
393           delete Toks;
394           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
395         } else if (Param->getDefaultArg()) {
396           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
397             << Param->getDefaultArg()->getSourceRange();
398           Param->setDefaultArg(0);
399         }
400       }
401     } else if (chunk.Kind != DeclaratorChunk::Paren) {
402       MightBeFunction = false;
403     }
404   }
405 }
406 
407 /// MergeCXXFunctionDecl - Merge two declarations of the same C++
408 /// function, once we already know that they have the same
409 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
410 /// error, false otherwise.
411 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
412                                 Scope *S) {
413   bool Invalid = false;
414 
415   // C++ [dcl.fct.default]p4:
416   //   For non-template functions, default arguments can be added in
417   //   later declarations of a function in the same
418   //   scope. Declarations in different scopes have completely
419   //   distinct sets of default arguments. That is, declarations in
420   //   inner scopes do not acquire default arguments from
421   //   declarations in outer scopes, and vice versa. In a given
422   //   function declaration, all parameters subsequent to a
423   //   parameter with a default argument shall have default
424   //   arguments supplied in this or previous declarations. A
425   //   default argument shall not be redefined by a later
426   //   declaration (not even to the same value).
427   //
428   // C++ [dcl.fct.default]p6:
429   //   Except for member functions of class templates, the default arguments
430   //   in a member function definition that appears outside of the class
431   //   definition are added to the set of default arguments provided by the
432   //   member function declaration in the class definition.
433   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
434     ParmVarDecl *OldParam = Old->getParamDecl(p);
435     ParmVarDecl *NewParam = New->getParamDecl(p);
436 
437     bool OldParamHasDfl = OldParam->hasDefaultArg();
438     bool NewParamHasDfl = NewParam->hasDefaultArg();
439 
440     NamedDecl *ND = Old;
441     if (S && !isDeclInScope(ND, New->getDeclContext(), S))
442       // Ignore default parameters of old decl if they are not in
443       // the same scope.
444       OldParamHasDfl = false;
445 
446     if (OldParamHasDfl && NewParamHasDfl) {
447 
448       unsigned DiagDefaultParamID =
449         diag::err_param_default_argument_redefinition;
450 
451       // MSVC accepts that default parameters be redefined for member functions
452       // of template class. The new default parameter's value is ignored.
453       Invalid = true;
454       if (getLangOpts().MicrosoftExt) {
455         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
456         if (MD && MD->getParent()->getDescribedClassTemplate()) {
457           // Merge the old default argument into the new parameter.
458           NewParam->setHasInheritedDefaultArg();
459           if (OldParam->hasUninstantiatedDefaultArg())
460             NewParam->setUninstantiatedDefaultArg(
461                                       OldParam->getUninstantiatedDefaultArg());
462           else
463             NewParam->setDefaultArg(OldParam->getInit());
464           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
465           Invalid = false;
466         }
467       }
468 
469       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
470       // hint here. Alternatively, we could walk the type-source information
471       // for NewParam to find the last source location in the type... but it
472       // isn't worth the effort right now. This is the kind of test case that
473       // is hard to get right:
474       //   int f(int);
475       //   void g(int (*fp)(int) = f);
476       //   void g(int (*fp)(int) = &f);
477       Diag(NewParam->getLocation(), DiagDefaultParamID)
478         << NewParam->getDefaultArgRange();
479 
480       // Look for the function declaration where the default argument was
481       // actually written, which may be a declaration prior to Old.
482       for (FunctionDecl *Older = Old->getPreviousDecl();
483            Older; Older = Older->getPreviousDecl()) {
484         if (!Older->getParamDecl(p)->hasDefaultArg())
485           break;
486 
487         OldParam = Older->getParamDecl(p);
488       }
489 
490       Diag(OldParam->getLocation(), diag::note_previous_definition)
491         << OldParam->getDefaultArgRange();
492     } else if (OldParamHasDfl) {
493       // Merge the old default argument into the new parameter.
494       // It's important to use getInit() here;  getDefaultArg()
495       // strips off any top-level ExprWithCleanups.
496       NewParam->setHasInheritedDefaultArg();
497       if (OldParam->hasUninstantiatedDefaultArg())
498         NewParam->setUninstantiatedDefaultArg(
499                                       OldParam->getUninstantiatedDefaultArg());
500       else
501         NewParam->setDefaultArg(OldParam->getInit());
502     } else if (NewParamHasDfl) {
503       if (New->getDescribedFunctionTemplate()) {
504         // Paragraph 4, quoted above, only applies to non-template functions.
505         Diag(NewParam->getLocation(),
506              diag::err_param_default_argument_template_redecl)
507           << NewParam->getDefaultArgRange();
508         Diag(Old->getLocation(), diag::note_template_prev_declaration)
509           << false;
510       } else if (New->getTemplateSpecializationKind()
511                    != TSK_ImplicitInstantiation &&
512                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
513         // C++ [temp.expr.spec]p21:
514         //   Default function arguments shall not be specified in a declaration
515         //   or a definition for one of the following explicit specializations:
516         //     - the explicit specialization of a function template;
517         //     - the explicit specialization of a member function template;
518         //     - the explicit specialization of a member function of a class
519         //       template where the class template specialization to which the
520         //       member function specialization belongs is implicitly
521         //       instantiated.
522         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
523           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
524           << New->getDeclName()
525           << NewParam->getDefaultArgRange();
526       } else if (New->getDeclContext()->isDependentContext()) {
527         // C++ [dcl.fct.default]p6 (DR217):
528         //   Default arguments for a member function of a class template shall
529         //   be specified on the initial declaration of the member function
530         //   within the class template.
531         //
532         // Reading the tea leaves a bit in DR217 and its reference to DR205
533         // leads me to the conclusion that one cannot add default function
534         // arguments for an out-of-line definition of a member function of a
535         // dependent type.
536         int WhichKind = 2;
537         if (CXXRecordDecl *Record
538               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
539           if (Record->getDescribedClassTemplate())
540             WhichKind = 0;
541           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
542             WhichKind = 1;
543           else
544             WhichKind = 2;
545         }
546 
547         Diag(NewParam->getLocation(),
548              diag::err_param_default_argument_member_template_redecl)
549           << WhichKind
550           << NewParam->getDefaultArgRange();
551       }
552     }
553   }
554 
555   // DR1344: If a default argument is added outside a class definition and that
556   // default argument makes the function a special member function, the program
557   // is ill-formed. This can only happen for constructors.
558   if (isa<CXXConstructorDecl>(New) &&
559       New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
560     CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
561                      OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
562     if (NewSM != OldSM) {
563       ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
564       assert(NewParam->hasDefaultArg());
565       Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
566         << NewParam->getDefaultArgRange() << NewSM;
567       Diag(Old->getLocation(), diag::note_previous_declaration);
568     }
569   }
570 
571   // C++11 [dcl.constexpr]p1: If any declaration of a function or function
572   // template has a constexpr specifier then all its declarations shall
573   // contain the constexpr specifier.
574   if (New->isConstexpr() != Old->isConstexpr()) {
575     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
576       << New << New->isConstexpr();
577     Diag(Old->getLocation(), diag::note_previous_declaration);
578     Invalid = true;
579   }
580 
581   if (CheckEquivalentExceptionSpec(Old, New))
582     Invalid = true;
583 
584   return Invalid;
585 }
586 
587 /// \brief Merge the exception specifications of two variable declarations.
588 ///
589 /// This is called when there's a redeclaration of a VarDecl. The function
590 /// checks if the redeclaration might have an exception specification and
591 /// validates compatibility and merges the specs if necessary.
592 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
593   // Shortcut if exceptions are disabled.
594   if (!getLangOpts().CXXExceptions)
595     return;
596 
597   assert(Context.hasSameType(New->getType(), Old->getType()) &&
598          "Should only be called if types are otherwise the same.");
599 
600   QualType NewType = New->getType();
601   QualType OldType = Old->getType();
602 
603   // We're only interested in pointers and references to functions, as well
604   // as pointers to member functions.
605   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
606     NewType = R->getPointeeType();
607     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
608   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
609     NewType = P->getPointeeType();
610     OldType = OldType->getAs<PointerType>()->getPointeeType();
611   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
612     NewType = M->getPointeeType();
613     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
614   }
615 
616   if (!NewType->isFunctionProtoType())
617     return;
618 
619   // There's lots of special cases for functions. For function pointers, system
620   // libraries are hopefully not as broken so that we don't need these
621   // workarounds.
622   if (CheckEquivalentExceptionSpec(
623         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
624         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
625     New->setInvalidDecl();
626   }
627 }
628 
629 /// CheckCXXDefaultArguments - Verify that the default arguments for a
630 /// function declaration are well-formed according to C++
631 /// [dcl.fct.default].
632 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
633   unsigned NumParams = FD->getNumParams();
634   unsigned p;
635 
636   // Find first parameter with a default argument
637   for (p = 0; p < NumParams; ++p) {
638     ParmVarDecl *Param = FD->getParamDecl(p);
639     if (Param->hasDefaultArg())
640       break;
641   }
642 
643   // C++ [dcl.fct.default]p4:
644   //   In a given function declaration, all parameters
645   //   subsequent to a parameter with a default argument shall
646   //   have default arguments supplied in this or previous
647   //   declarations. A default argument shall not be redefined
648   //   by a later declaration (not even to the same value).
649   unsigned LastMissingDefaultArg = 0;
650   for (; p < NumParams; ++p) {
651     ParmVarDecl *Param = FD->getParamDecl(p);
652     if (!Param->hasDefaultArg()) {
653       if (Param->isInvalidDecl())
654         /* We already complained about this parameter. */;
655       else if (Param->getIdentifier())
656         Diag(Param->getLocation(),
657              diag::err_param_default_argument_missing_name)
658           << Param->getIdentifier();
659       else
660         Diag(Param->getLocation(),
661              diag::err_param_default_argument_missing);
662 
663       LastMissingDefaultArg = p;
664     }
665   }
666 
667   if (LastMissingDefaultArg > 0) {
668     // Some default arguments were missing. Clear out all of the
669     // default arguments up to (and including) the last missing
670     // default argument, so that we leave the function parameters
671     // in a semantically valid state.
672     for (p = 0; p <= LastMissingDefaultArg; ++p) {
673       ParmVarDecl *Param = FD->getParamDecl(p);
674       if (Param->hasDefaultArg()) {
675         Param->setDefaultArg(0);
676       }
677     }
678   }
679 }
680 
681 // CheckConstexprParameterTypes - Check whether a function's parameter types
682 // are all literal types. If so, return true. If not, produce a suitable
683 // diagnostic and return false.
684 static bool CheckConstexprParameterTypes(Sema &SemaRef,
685                                          const FunctionDecl *FD) {
686   unsigned ArgIndex = 0;
687   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
688   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
689        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
690     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
691     SourceLocation ParamLoc = PD->getLocation();
692     if (!(*i)->isDependentType() &&
693         SemaRef.RequireLiteralType(ParamLoc, *i,
694                                    diag::err_constexpr_non_literal_param,
695                                    ArgIndex+1, PD->getSourceRange(),
696                                    isa<CXXConstructorDecl>(FD)))
697       return false;
698   }
699   return true;
700 }
701 
702 /// \brief Get diagnostic %select index for tag kind for
703 /// record diagnostic message.
704 /// WARNING: Indexes apply to particular diagnostics only!
705 ///
706 /// \returns diagnostic %select index.
707 static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
708   switch (Tag) {
709   case TTK_Struct: return 0;
710   case TTK_Interface: return 1;
711   case TTK_Class:  return 2;
712   default: llvm_unreachable("Invalid tag kind for record diagnostic!");
713   }
714 }
715 
716 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
717 // the requirements of a constexpr function definition or a constexpr
718 // constructor definition. If so, return true. If not, produce appropriate
719 // diagnostics and return false.
720 //
721 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
722 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
723   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
724   if (MD && MD->isInstance()) {
725     // C++11 [dcl.constexpr]p4:
726     //  The definition of a constexpr constructor shall satisfy the following
727     //  constraints:
728     //  - the class shall not have any virtual base classes;
729     const CXXRecordDecl *RD = MD->getParent();
730     if (RD->getNumVBases()) {
731       Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
732         << isa<CXXConstructorDecl>(NewFD)
733         << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
734       for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
735              E = RD->vbases_end(); I != E; ++I)
736         Diag(I->getLocStart(),
737              diag::note_constexpr_virtual_base_here) << I->getSourceRange();
738       return false;
739     }
740   }
741 
742   if (!isa<CXXConstructorDecl>(NewFD)) {
743     // C++11 [dcl.constexpr]p3:
744     //  The definition of a constexpr function shall satisfy the following
745     //  constraints:
746     // - it shall not be virtual;
747     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
748     if (Method && Method->isVirtual()) {
749       Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
750 
751       // If it's not obvious why this function is virtual, find an overridden
752       // function which uses the 'virtual' keyword.
753       const CXXMethodDecl *WrittenVirtual = Method;
754       while (!WrittenVirtual->isVirtualAsWritten())
755         WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
756       if (WrittenVirtual != Method)
757         Diag(WrittenVirtual->getLocation(),
758              diag::note_overridden_virtual_function);
759       return false;
760     }
761 
762     // - its return type shall be a literal type;
763     QualType RT = NewFD->getResultType();
764     if (!RT->isDependentType() &&
765         RequireLiteralType(NewFD->getLocation(), RT,
766                            diag::err_constexpr_non_literal_return))
767       return false;
768   }
769 
770   // - each of its parameter types shall be a literal type;
771   if (!CheckConstexprParameterTypes(*this, NewFD))
772     return false;
773 
774   return true;
775 }
776 
777 /// Check the given declaration statement is legal within a constexpr function
778 /// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
779 ///
780 /// \return true if the body is OK (maybe only as an extension), false if we
781 ///         have diagnosed a problem.
782 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
783                                    DeclStmt *DS, SourceLocation &Cxx1yLoc) {
784   // C++11 [dcl.constexpr]p3 and p4:
785   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
786   //  contain only
787   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
788          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
789     switch ((*DclIt)->getKind()) {
790     case Decl::StaticAssert:
791     case Decl::Using:
792     case Decl::UsingShadow:
793     case Decl::UsingDirective:
794     case Decl::UnresolvedUsingTypename:
795     case Decl::UnresolvedUsingValue:
796       //   - static_assert-declarations
797       //   - using-declarations,
798       //   - using-directives,
799       continue;
800 
801     case Decl::Typedef:
802     case Decl::TypeAlias: {
803       //   - typedef declarations and alias-declarations that do not define
804       //     classes or enumerations,
805       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
806       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
807         // Don't allow variably-modified types in constexpr functions.
808         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
809         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
810           << TL.getSourceRange() << TL.getType()
811           << isa<CXXConstructorDecl>(Dcl);
812         return false;
813       }
814       continue;
815     }
816 
817     case Decl::Enum:
818     case Decl::CXXRecord:
819       // C++1y allows types to be defined, not just declared.
820       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition())
821         SemaRef.Diag(DS->getLocStart(),
822                      SemaRef.getLangOpts().CPlusPlus1y
823                        ? diag::warn_cxx11_compat_constexpr_type_definition
824                        : diag::ext_constexpr_type_definition)
825           << isa<CXXConstructorDecl>(Dcl);
826       continue;
827 
828     case Decl::EnumConstant:
829     case Decl::IndirectField:
830     case Decl::ParmVar:
831       // These can only appear with other declarations which are banned in
832       // C++11 and permitted in C++1y, so ignore them.
833       continue;
834 
835     case Decl::Var: {
836       // C++1y [dcl.constexpr]p3 allows anything except:
837       //   a definition of a variable of non-literal type or of static or
838       //   thread storage duration or for which no initialization is performed.
839       VarDecl *VD = cast<VarDecl>(*DclIt);
840       if (VD->isThisDeclarationADefinition()) {
841         if (VD->isStaticLocal()) {
842           SemaRef.Diag(VD->getLocation(),
843                        diag::err_constexpr_local_var_static)
844             << isa<CXXConstructorDecl>(Dcl)
845             << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
846           return false;
847         }
848         if (!VD->getType()->isDependentType() &&
849             SemaRef.RequireLiteralType(
850               VD->getLocation(), VD->getType(),
851               diag::err_constexpr_local_var_non_literal_type,
852               isa<CXXConstructorDecl>(Dcl)))
853           return false;
854         if (!VD->hasInit()) {
855           SemaRef.Diag(VD->getLocation(),
856                        diag::err_constexpr_local_var_no_init)
857             << isa<CXXConstructorDecl>(Dcl);
858           return false;
859         }
860       }
861       SemaRef.Diag(VD->getLocation(),
862                    SemaRef.getLangOpts().CPlusPlus1y
863                     ? diag::warn_cxx11_compat_constexpr_local_var
864                     : diag::ext_constexpr_local_var)
865         << isa<CXXConstructorDecl>(Dcl);
866       continue;
867     }
868 
869     case Decl::NamespaceAlias:
870     case Decl::Function:
871       // These are disallowed in C++11 and permitted in C++1y. Allow them
872       // everywhere as an extension.
873       if (!Cxx1yLoc.isValid())
874         Cxx1yLoc = DS->getLocStart();
875       continue;
876 
877     default:
878       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
879         << isa<CXXConstructorDecl>(Dcl);
880       return false;
881     }
882   }
883 
884   return true;
885 }
886 
887 /// Check that the given field is initialized within a constexpr constructor.
888 ///
889 /// \param Dcl The constexpr constructor being checked.
890 /// \param Field The field being checked. This may be a member of an anonymous
891 ///        struct or union nested within the class being checked.
892 /// \param Inits All declarations, including anonymous struct/union members and
893 ///        indirect members, for which any initialization was provided.
894 /// \param Diagnosed Set to true if an error is produced.
895 static void CheckConstexprCtorInitializer(Sema &SemaRef,
896                                           const FunctionDecl *Dcl,
897                                           FieldDecl *Field,
898                                           llvm::SmallSet<Decl*, 16> &Inits,
899                                           bool &Diagnosed) {
900   if (Field->isUnnamedBitfield())
901     return;
902 
903   if (Field->isAnonymousStructOrUnion() &&
904       Field->getType()->getAsCXXRecordDecl()->isEmpty())
905     return;
906 
907   if (!Inits.count(Field)) {
908     if (!Diagnosed) {
909       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
910       Diagnosed = true;
911     }
912     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
913   } else if (Field->isAnonymousStructOrUnion()) {
914     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
915     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
916          I != E; ++I)
917       // If an anonymous union contains an anonymous struct of which any member
918       // is initialized, all members must be initialized.
919       if (!RD->isUnion() || Inits.count(*I))
920         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
921   }
922 }
923 
924 /// Check the provided statement is allowed in a constexpr function
925 /// definition.
926 static bool
927 CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
928                            llvm::SmallVectorImpl<SourceLocation> &ReturnStmts,
929                            SourceLocation &Cxx1yLoc) {
930   // - its function-body shall be [...] a compound-statement that contains only
931   switch (S->getStmtClass()) {
932   case Stmt::NullStmtClass:
933     //   - null statements,
934     return true;
935 
936   case Stmt::DeclStmtClass:
937     //   - static_assert-declarations
938     //   - using-declarations,
939     //   - using-directives,
940     //   - typedef declarations and alias-declarations that do not define
941     //     classes or enumerations,
942     if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc))
943       return false;
944     return true;
945 
946   case Stmt::ReturnStmtClass:
947     //   - and exactly one return statement;
948     if (isa<CXXConstructorDecl>(Dcl)) {
949       // C++1y allows return statements in constexpr constructors.
950       if (!Cxx1yLoc.isValid())
951         Cxx1yLoc = S->getLocStart();
952       return true;
953     }
954 
955     ReturnStmts.push_back(S->getLocStart());
956     return true;
957 
958   case Stmt::CompoundStmtClass: {
959     // C++1y allows compound-statements.
960     if (!Cxx1yLoc.isValid())
961       Cxx1yLoc = S->getLocStart();
962 
963     CompoundStmt *CompStmt = cast<CompoundStmt>(S);
964     for (CompoundStmt::body_iterator BodyIt = CompStmt->body_begin(),
965            BodyEnd = CompStmt->body_end(); BodyIt != BodyEnd; ++BodyIt) {
966       if (!CheckConstexprFunctionStmt(SemaRef, Dcl, *BodyIt, ReturnStmts,
967                                       Cxx1yLoc))
968         return false;
969     }
970     return true;
971   }
972 
973   case Stmt::AttributedStmtClass:
974     if (!Cxx1yLoc.isValid())
975       Cxx1yLoc = S->getLocStart();
976     return true;
977 
978   case Stmt::IfStmtClass: {
979     // C++1y allows if-statements.
980     if (!Cxx1yLoc.isValid())
981       Cxx1yLoc = S->getLocStart();
982 
983     IfStmt *If = cast<IfStmt>(S);
984     if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
985                                     Cxx1yLoc))
986       return false;
987     if (If->getElse() &&
988         !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
989                                     Cxx1yLoc))
990       return false;
991     return true;
992   }
993 
994   case Stmt::WhileStmtClass:
995   case Stmt::DoStmtClass:
996   case Stmt::ForStmtClass:
997   case Stmt::CXXForRangeStmtClass:
998   case Stmt::ContinueStmtClass:
999     // C++1y allows all of these. We don't allow them as extensions in C++11,
1000     // because they don't make sense without variable mutation.
1001     if (!SemaRef.getLangOpts().CPlusPlus1y)
1002       break;
1003     if (!Cxx1yLoc.isValid())
1004       Cxx1yLoc = S->getLocStart();
1005     for (Stmt::child_range Children = S->children(); Children; ++Children)
1006       if (*Children &&
1007           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1008                                       Cxx1yLoc))
1009         return false;
1010     return true;
1011 
1012   case Stmt::SwitchStmtClass:
1013   case Stmt::CaseStmtClass:
1014   case Stmt::DefaultStmtClass:
1015   case Stmt::BreakStmtClass:
1016     // C++1y allows switch-statements, and since they don't need variable
1017     // mutation, we can reasonably allow them in C++11 as an extension.
1018     if (!Cxx1yLoc.isValid())
1019       Cxx1yLoc = S->getLocStart();
1020     for (Stmt::child_range Children = S->children(); Children; ++Children)
1021       if (*Children &&
1022           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1023                                       Cxx1yLoc))
1024         return false;
1025     return true;
1026 
1027   default:
1028     if (!isa<Expr>(S))
1029       break;
1030 
1031     // C++1y allows expression-statements.
1032     if (!Cxx1yLoc.isValid())
1033       Cxx1yLoc = S->getLocStart();
1034     return true;
1035   }
1036 
1037   SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt)
1038     << isa<CXXConstructorDecl>(Dcl);
1039   return false;
1040 }
1041 
1042 /// Check the body for the given constexpr function declaration only contains
1043 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
1044 ///
1045 /// \return true if the body is OK, false if we have diagnosed a problem.
1046 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
1047   if (isa<CXXTryStmt>(Body)) {
1048     // C++11 [dcl.constexpr]p3:
1049     //  The definition of a constexpr function shall satisfy the following
1050     //  constraints: [...]
1051     // - its function-body shall be = delete, = default, or a
1052     //   compound-statement
1053     //
1054     // C++11 [dcl.constexpr]p4:
1055     //  In the definition of a constexpr constructor, [...]
1056     // - its function-body shall not be a function-try-block;
1057     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
1058       << isa<CXXConstructorDecl>(Dcl);
1059     return false;
1060   }
1061 
1062   SmallVector<SourceLocation, 4> ReturnStmts;
1063 
1064   // - its function-body shall be [...] a compound-statement that contains only
1065   //   [... list of cases ...]
1066   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
1067   SourceLocation Cxx1yLoc;
1068   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
1069          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
1070     if (!CheckConstexprFunctionStmt(*this, Dcl, *BodyIt, ReturnStmts, Cxx1yLoc))
1071       return false;
1072   }
1073 
1074   if (Cxx1yLoc.isValid())
1075     Diag(Cxx1yLoc,
1076          getLangOpts().CPlusPlus1y
1077            ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
1078            : diag::ext_constexpr_body_invalid_stmt)
1079       << isa<CXXConstructorDecl>(Dcl);
1080 
1081   if (const CXXConstructorDecl *Constructor
1082         = dyn_cast<CXXConstructorDecl>(Dcl)) {
1083     const CXXRecordDecl *RD = Constructor->getParent();
1084     // DR1359:
1085     // - every non-variant non-static data member and base class sub-object
1086     //   shall be initialized;
1087     // - if the class is a non-empty union, or for each non-empty anonymous
1088     //   union member of a non-union class, exactly one non-static data member
1089     //   shall be initialized;
1090     if (RD->isUnion()) {
1091       if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
1092         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
1093         return false;
1094       }
1095     } else if (!Constructor->isDependentContext() &&
1096                !Constructor->isDelegatingConstructor()) {
1097       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
1098 
1099       // Skip detailed checking if we have enough initializers, and we would
1100       // allow at most one initializer per member.
1101       bool AnyAnonStructUnionMembers = false;
1102       unsigned Fields = 0;
1103       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1104            E = RD->field_end(); I != E; ++I, ++Fields) {
1105         if (I->isAnonymousStructOrUnion()) {
1106           AnyAnonStructUnionMembers = true;
1107           break;
1108         }
1109       }
1110       if (AnyAnonStructUnionMembers ||
1111           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
1112         // Check initialization of non-static data members. Base classes are
1113         // always initialized so do not need to be checked. Dependent bases
1114         // might not have initializers in the member initializer list.
1115         llvm::SmallSet<Decl*, 16> Inits;
1116         for (CXXConstructorDecl::init_const_iterator
1117                I = Constructor->init_begin(), E = Constructor->init_end();
1118              I != E; ++I) {
1119           if (FieldDecl *FD = (*I)->getMember())
1120             Inits.insert(FD);
1121           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
1122             Inits.insert(ID->chain_begin(), ID->chain_end());
1123         }
1124 
1125         bool Diagnosed = false;
1126         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1127              E = RD->field_end(); I != E; ++I)
1128           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
1129         if (Diagnosed)
1130           return false;
1131       }
1132     }
1133   } else {
1134     if (ReturnStmts.empty()) {
1135       // C++1y doesn't require constexpr functions to contain a 'return'
1136       // statement. We still do, unless the return type is void, because
1137       // otherwise if there's no return statement, the function cannot
1138       // be used in a core constant expression.
1139       bool OK = getLangOpts().CPlusPlus1y && Dcl->getResultType()->isVoidType();
1140       Diag(Dcl->getLocation(),
1141            OK ? diag::warn_cxx11_compat_constexpr_body_no_return
1142               : diag::err_constexpr_body_no_return);
1143       return OK;
1144     }
1145     if (ReturnStmts.size() > 1) {
1146       Diag(ReturnStmts.back(),
1147            getLangOpts().CPlusPlus1y
1148              ? diag::warn_cxx11_compat_constexpr_body_multiple_return
1149              : diag::ext_constexpr_body_multiple_return);
1150       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
1151         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
1152     }
1153   }
1154 
1155   // C++11 [dcl.constexpr]p5:
1156   //   if no function argument values exist such that the function invocation
1157   //   substitution would produce a constant expression, the program is
1158   //   ill-formed; no diagnostic required.
1159   // C++11 [dcl.constexpr]p3:
1160   //   - every constructor call and implicit conversion used in initializing the
1161   //     return value shall be one of those allowed in a constant expression.
1162   // C++11 [dcl.constexpr]p4:
1163   //   - every constructor involved in initializing non-static data members and
1164   //     base class sub-objects shall be a constexpr constructor.
1165   SmallVector<PartialDiagnosticAt, 8> Diags;
1166   if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
1167     Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr)
1168       << isa<CXXConstructorDecl>(Dcl);
1169     for (size_t I = 0, N = Diags.size(); I != N; ++I)
1170       Diag(Diags[I].first, Diags[I].second);
1171     // Don't return false here: we allow this for compatibility in
1172     // system headers.
1173   }
1174 
1175   return true;
1176 }
1177 
1178 /// isCurrentClassName - Determine whether the identifier II is the
1179 /// name of the class type currently being defined. In the case of
1180 /// nested classes, this will only return true if II is the name of
1181 /// the innermost class.
1182 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
1183                               const CXXScopeSpec *SS) {
1184   assert(getLangOpts().CPlusPlus && "No class names in C!");
1185 
1186   CXXRecordDecl *CurDecl;
1187   if (SS && SS->isSet() && !SS->isInvalid()) {
1188     DeclContext *DC = computeDeclContext(*SS, true);
1189     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1190   } else
1191     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1192 
1193   if (CurDecl && CurDecl->getIdentifier())
1194     return &II == CurDecl->getIdentifier();
1195   else
1196     return false;
1197 }
1198 
1199 /// \brief Determine whether the given class is a base class of the given
1200 /// class, including looking at dependent bases.
1201 static bool findCircularInheritance(const CXXRecordDecl *Class,
1202                                     const CXXRecordDecl *Current) {
1203   SmallVector<const CXXRecordDecl*, 8> Queue;
1204 
1205   Class = Class->getCanonicalDecl();
1206   while (true) {
1207     for (CXXRecordDecl::base_class_const_iterator I = Current->bases_begin(),
1208                                                   E = Current->bases_end();
1209          I != E; ++I) {
1210       CXXRecordDecl *Base = I->getType()->getAsCXXRecordDecl();
1211       if (!Base)
1212         continue;
1213 
1214       Base = Base->getDefinition();
1215       if (!Base)
1216         continue;
1217 
1218       if (Base->getCanonicalDecl() == Class)
1219         return true;
1220 
1221       Queue.push_back(Base);
1222     }
1223 
1224     if (Queue.empty())
1225       return false;
1226 
1227     Current = Queue.back();
1228     Queue.pop_back();
1229   }
1230 
1231   return false;
1232 }
1233 
1234 /// \brief Check the validity of a C++ base class specifier.
1235 ///
1236 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
1237 /// and returns NULL otherwise.
1238 CXXBaseSpecifier *
1239 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
1240                          SourceRange SpecifierRange,
1241                          bool Virtual, AccessSpecifier Access,
1242                          TypeSourceInfo *TInfo,
1243                          SourceLocation EllipsisLoc) {
1244   QualType BaseType = TInfo->getType();
1245 
1246   // C++ [class.union]p1:
1247   //   A union shall not have base classes.
1248   if (Class->isUnion()) {
1249     Diag(Class->getLocation(), diag::err_base_clause_on_union)
1250       << SpecifierRange;
1251     return 0;
1252   }
1253 
1254   if (EllipsisLoc.isValid() &&
1255       !TInfo->getType()->containsUnexpandedParameterPack()) {
1256     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1257       << TInfo->getTypeLoc().getSourceRange();
1258     EllipsisLoc = SourceLocation();
1259   }
1260 
1261   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
1262 
1263   if (BaseType->isDependentType()) {
1264     // Make sure that we don't have circular inheritance among our dependent
1265     // bases. For non-dependent bases, the check for completeness below handles
1266     // this.
1267     if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
1268       if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
1269           ((BaseDecl = BaseDecl->getDefinition()) &&
1270            findCircularInheritance(Class, BaseDecl))) {
1271         Diag(BaseLoc, diag::err_circular_inheritance)
1272           << BaseType << Context.getTypeDeclType(Class);
1273 
1274         if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
1275           Diag(BaseDecl->getLocation(), diag::note_previous_decl)
1276             << BaseType;
1277 
1278         return 0;
1279       }
1280     }
1281 
1282     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1283                                           Class->getTagKind() == TTK_Class,
1284                                           Access, TInfo, EllipsisLoc);
1285   }
1286 
1287   // Base specifiers must be record types.
1288   if (!BaseType->isRecordType()) {
1289     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
1290     return 0;
1291   }
1292 
1293   // C++ [class.union]p1:
1294   //   A union shall not be used as a base class.
1295   if (BaseType->isUnionType()) {
1296     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
1297     return 0;
1298   }
1299 
1300   // C++ [class.derived]p2:
1301   //   The class-name in a base-specifier shall not be an incompletely
1302   //   defined class.
1303   if (RequireCompleteType(BaseLoc, BaseType,
1304                           diag::err_incomplete_base_class, SpecifierRange)) {
1305     Class->setInvalidDecl();
1306     return 0;
1307   }
1308 
1309   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
1310   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
1311   assert(BaseDecl && "Record type has no declaration");
1312   BaseDecl = BaseDecl->getDefinition();
1313   assert(BaseDecl && "Base type is not incomplete, but has no definition");
1314   CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
1315   assert(CXXBaseDecl && "Base type is not a C++ type");
1316 
1317   // C++ [class]p3:
1318   //   If a class is marked final and it appears as a base-type-specifier in
1319   //   base-clause, the program is ill-formed.
1320   if (CXXBaseDecl->hasAttr<FinalAttr>()) {
1321     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
1322       << CXXBaseDecl->getDeclName();
1323     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
1324       << CXXBaseDecl->getDeclName();
1325     return 0;
1326   }
1327 
1328   if (BaseDecl->isInvalidDecl())
1329     Class->setInvalidDecl();
1330 
1331   // Create the base specifier.
1332   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1333                                         Class->getTagKind() == TTK_Class,
1334                                         Access, TInfo, EllipsisLoc);
1335 }
1336 
1337 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
1338 /// one entry in the base class list of a class specifier, for
1339 /// example:
1340 ///    class foo : public bar, virtual private baz {
1341 /// 'public bar' and 'virtual private baz' are each base-specifiers.
1342 BaseResult
1343 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1344                          ParsedAttributes &Attributes,
1345                          bool Virtual, AccessSpecifier Access,
1346                          ParsedType basetype, SourceLocation BaseLoc,
1347                          SourceLocation EllipsisLoc) {
1348   if (!classdecl)
1349     return true;
1350 
1351   AdjustDeclIfTemplate(classdecl);
1352   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1353   if (!Class)
1354     return true;
1355 
1356   // We do not support any C++11 attributes on base-specifiers yet.
1357   // Diagnose any attributes we see.
1358   if (!Attributes.empty()) {
1359     for (AttributeList *Attr = Attributes.getList(); Attr;
1360          Attr = Attr->getNext()) {
1361       if (Attr->isInvalid() ||
1362           Attr->getKind() == AttributeList::IgnoredAttribute)
1363         continue;
1364       Diag(Attr->getLoc(),
1365            Attr->getKind() == AttributeList::UnknownAttribute
1366              ? diag::warn_unknown_attribute_ignored
1367              : diag::err_base_specifier_attribute)
1368         << Attr->getName();
1369     }
1370   }
1371 
1372   TypeSourceInfo *TInfo = 0;
1373   GetTypeFromParser(basetype, &TInfo);
1374 
1375   if (EllipsisLoc.isInvalid() &&
1376       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
1377                                       UPPC_BaseType))
1378     return true;
1379 
1380   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
1381                                                       Virtual, Access, TInfo,
1382                                                       EllipsisLoc))
1383     return BaseSpec;
1384   else
1385     Class->setInvalidDecl();
1386 
1387   return true;
1388 }
1389 
1390 /// \brief Performs the actual work of attaching the given base class
1391 /// specifiers to a C++ class.
1392 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
1393                                 unsigned NumBases) {
1394  if (NumBases == 0)
1395     return false;
1396 
1397   // Used to keep track of which base types we have already seen, so
1398   // that we can properly diagnose redundant direct base types. Note
1399   // that the key is always the unqualified canonical type of the base
1400   // class.
1401   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
1402 
1403   // Copy non-redundant base specifiers into permanent storage.
1404   unsigned NumGoodBases = 0;
1405   bool Invalid = false;
1406   for (unsigned idx = 0; idx < NumBases; ++idx) {
1407     QualType NewBaseType
1408       = Context.getCanonicalType(Bases[idx]->getType());
1409     NewBaseType = NewBaseType.getLocalUnqualifiedType();
1410 
1411     CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
1412     if (KnownBase) {
1413       // C++ [class.mi]p3:
1414       //   A class shall not be specified as a direct base class of a
1415       //   derived class more than once.
1416       Diag(Bases[idx]->getLocStart(),
1417            diag::err_duplicate_base_class)
1418         << KnownBase->getType()
1419         << Bases[idx]->getSourceRange();
1420 
1421       // Delete the duplicate base class specifier; we're going to
1422       // overwrite its pointer later.
1423       Context.Deallocate(Bases[idx]);
1424 
1425       Invalid = true;
1426     } else {
1427       // Okay, add this new base class.
1428       KnownBase = Bases[idx];
1429       Bases[NumGoodBases++] = Bases[idx];
1430       if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
1431         const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
1432         if (Class->isInterface() &&
1433               (!RD->isInterface() ||
1434                KnownBase->getAccessSpecifier() != AS_public)) {
1435           // The Microsoft extension __interface does not permit bases that
1436           // are not themselves public interfaces.
1437           Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
1438             << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getName()
1439             << RD->getSourceRange();
1440           Invalid = true;
1441         }
1442         if (RD->hasAttr<WeakAttr>())
1443           Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
1444       }
1445     }
1446   }
1447 
1448   // Attach the remaining base class specifiers to the derived class.
1449   Class->setBases(Bases, NumGoodBases);
1450 
1451   // Delete the remaining (good) base class specifiers, since their
1452   // data has been copied into the CXXRecordDecl.
1453   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
1454     Context.Deallocate(Bases[idx]);
1455 
1456   return Invalid;
1457 }
1458 
1459 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
1460 /// class, after checking whether there are any duplicate base
1461 /// classes.
1462 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1463                                unsigned NumBases) {
1464   if (!ClassDecl || !Bases || !NumBases)
1465     return;
1466 
1467   AdjustDeclIfTemplate(ClassDecl);
1468   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
1469                        (CXXBaseSpecifier**)(Bases), NumBases);
1470 }
1471 
1472 /// \brief Determine whether the type \p Derived is a C++ class that is
1473 /// derived from the type \p Base.
1474 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
1475   if (!getLangOpts().CPlusPlus)
1476     return false;
1477 
1478   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1479   if (!DerivedRD)
1480     return false;
1481 
1482   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1483   if (!BaseRD)
1484     return false;
1485 
1486   // If either the base or the derived type is invalid, don't try to
1487   // check whether one is derived from the other.
1488   if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
1489     return false;
1490 
1491   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
1492   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
1493 }
1494 
1495 /// \brief Determine whether the type \p Derived is a C++ class that is
1496 /// derived from the type \p Base.
1497 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
1498   if (!getLangOpts().CPlusPlus)
1499     return false;
1500 
1501   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1502   if (!DerivedRD)
1503     return false;
1504 
1505   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1506   if (!BaseRD)
1507     return false;
1508 
1509   return DerivedRD->isDerivedFrom(BaseRD, Paths);
1510 }
1511 
1512 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
1513                               CXXCastPath &BasePathArray) {
1514   assert(BasePathArray.empty() && "Base path array must be empty!");
1515   assert(Paths.isRecordingPaths() && "Must record paths!");
1516 
1517   const CXXBasePath &Path = Paths.front();
1518 
1519   // We first go backward and check if we have a virtual base.
1520   // FIXME: It would be better if CXXBasePath had the base specifier for
1521   // the nearest virtual base.
1522   unsigned Start = 0;
1523   for (unsigned I = Path.size(); I != 0; --I) {
1524     if (Path[I - 1].Base->isVirtual()) {
1525       Start = I - 1;
1526       break;
1527     }
1528   }
1529 
1530   // Now add all bases.
1531   for (unsigned I = Start, E = Path.size(); I != E; ++I)
1532     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
1533 }
1534 
1535 /// \brief Determine whether the given base path includes a virtual
1536 /// base class.
1537 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
1538   for (CXXCastPath::const_iterator B = BasePath.begin(),
1539                                 BEnd = BasePath.end();
1540        B != BEnd; ++B)
1541     if ((*B)->isVirtual())
1542       return true;
1543 
1544   return false;
1545 }
1546 
1547 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
1548 /// conversion (where Derived and Base are class types) is
1549 /// well-formed, meaning that the conversion is unambiguous (and
1550 /// that all of the base classes are accessible). Returns true
1551 /// and emits a diagnostic if the code is ill-formed, returns false
1552 /// otherwise. Loc is the location where this routine should point to
1553 /// if there is an error, and Range is the source range to highlight
1554 /// if there is an error.
1555 bool
1556 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1557                                    unsigned InaccessibleBaseID,
1558                                    unsigned AmbigiousBaseConvID,
1559                                    SourceLocation Loc, SourceRange Range,
1560                                    DeclarationName Name,
1561                                    CXXCastPath *BasePath) {
1562   // First, determine whether the path from Derived to Base is
1563   // ambiguous. This is slightly more expensive than checking whether
1564   // the Derived to Base conversion exists, because here we need to
1565   // explore multiple paths to determine if there is an ambiguity.
1566   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1567                      /*DetectVirtual=*/false);
1568   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
1569   assert(DerivationOkay &&
1570          "Can only be used with a derived-to-base conversion");
1571   (void)DerivationOkay;
1572 
1573   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
1574     if (InaccessibleBaseID) {
1575       // Check that the base class can be accessed.
1576       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
1577                                    InaccessibleBaseID)) {
1578         case AR_inaccessible:
1579           return true;
1580         case AR_accessible:
1581         case AR_dependent:
1582         case AR_delayed:
1583           break;
1584       }
1585     }
1586 
1587     // Build a base path if necessary.
1588     if (BasePath)
1589       BuildBasePathArray(Paths, *BasePath);
1590     return false;
1591   }
1592 
1593   // We know that the derived-to-base conversion is ambiguous, and
1594   // we're going to produce a diagnostic. Perform the derived-to-base
1595   // search just one more time to compute all of the possible paths so
1596   // that we can print them out. This is more expensive than any of
1597   // the previous derived-to-base checks we've done, but at this point
1598   // performance isn't as much of an issue.
1599   Paths.clear();
1600   Paths.setRecordingPaths(true);
1601   bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
1602   assert(StillOkay && "Can only be used with a derived-to-base conversion");
1603   (void)StillOkay;
1604 
1605   // Build up a textual representation of the ambiguous paths, e.g.,
1606   // D -> B -> A, that will be used to illustrate the ambiguous
1607   // conversions in the diagnostic. We only print one of the paths
1608   // to each base class subobject.
1609   std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1610 
1611   Diag(Loc, AmbigiousBaseConvID)
1612   << Derived << Base << PathDisplayStr << Range << Name;
1613   return true;
1614 }
1615 
1616 bool
1617 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1618                                    SourceLocation Loc, SourceRange Range,
1619                                    CXXCastPath *BasePath,
1620                                    bool IgnoreAccess) {
1621   return CheckDerivedToBaseConversion(Derived, Base,
1622                                       IgnoreAccess ? 0
1623                                        : diag::err_upcast_to_inaccessible_base,
1624                                       diag::err_ambiguous_derived_to_base_conv,
1625                                       Loc, Range, DeclarationName(),
1626                                       BasePath);
1627 }
1628 
1629 
1630 /// @brief Builds a string representing ambiguous paths from a
1631 /// specific derived class to different subobjects of the same base
1632 /// class.
1633 ///
1634 /// This function builds a string that can be used in error messages
1635 /// to show the different paths that one can take through the
1636 /// inheritance hierarchy to go from the derived class to different
1637 /// subobjects of a base class. The result looks something like this:
1638 /// @code
1639 /// struct D -> struct B -> struct A
1640 /// struct D -> struct C -> struct A
1641 /// @endcode
1642 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
1643   std::string PathDisplayStr;
1644   std::set<unsigned> DisplayedPaths;
1645   for (CXXBasePaths::paths_iterator Path = Paths.begin();
1646        Path != Paths.end(); ++Path) {
1647     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
1648       // We haven't displayed a path to this particular base
1649       // class subobject yet.
1650       PathDisplayStr += "\n    ";
1651       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
1652       for (CXXBasePath::const_iterator Element = Path->begin();
1653            Element != Path->end(); ++Element)
1654         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
1655     }
1656   }
1657 
1658   return PathDisplayStr;
1659 }
1660 
1661 //===----------------------------------------------------------------------===//
1662 // C++ class member Handling
1663 //===----------------------------------------------------------------------===//
1664 
1665 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
1666 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1667                                 SourceLocation ASLoc,
1668                                 SourceLocation ColonLoc,
1669                                 AttributeList *Attrs) {
1670   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1671   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1672                                                   ASLoc, ColonLoc);
1673   CurContext->addHiddenDecl(ASDecl);
1674   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
1675 }
1676 
1677 /// CheckOverrideControl - Check C++11 override control semantics.
1678 void Sema::CheckOverrideControl(Decl *D) {
1679   if (D->isInvalidDecl())
1680     return;
1681 
1682   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1683 
1684   // Do we know which functions this declaration might be overriding?
1685   bool OverridesAreKnown = !MD ||
1686       (!MD->getParent()->hasAnyDependentBases() &&
1687        !MD->getType()->isDependentType());
1688 
1689   if (!MD || !MD->isVirtual()) {
1690     if (OverridesAreKnown) {
1691       if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1692         Diag(OA->getLocation(),
1693              diag::override_keyword_only_allowed_on_virtual_member_functions)
1694           << "override" << FixItHint::CreateRemoval(OA->getLocation());
1695         D->dropAttr<OverrideAttr>();
1696       }
1697       if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1698         Diag(FA->getLocation(),
1699              diag::override_keyword_only_allowed_on_virtual_member_functions)
1700           << "final" << FixItHint::CreateRemoval(FA->getLocation());
1701         D->dropAttr<FinalAttr>();
1702       }
1703     }
1704     return;
1705   }
1706 
1707   if (!OverridesAreKnown)
1708     return;
1709 
1710   // C++11 [class.virtual]p5:
1711   //   If a virtual function is marked with the virt-specifier override and
1712   //   does not override a member function of a base class, the program is
1713   //   ill-formed.
1714   bool HasOverriddenMethods =
1715     MD->begin_overridden_methods() != MD->end_overridden_methods();
1716   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
1717     Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
1718       << MD->getDeclName();
1719 }
1720 
1721 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1722 /// function overrides a virtual member function marked 'final', according to
1723 /// C++11 [class.virtual]p4.
1724 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1725                                                   const CXXMethodDecl *Old) {
1726   if (!Old->hasAttr<FinalAttr>())
1727     return false;
1728 
1729   Diag(New->getLocation(), diag::err_final_function_overridden)
1730     << New->getDeclName();
1731   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1732   return true;
1733 }
1734 
1735 static bool InitializationHasSideEffects(const FieldDecl &FD) {
1736   const Type *T = FD.getType()->getBaseElementTypeUnsafe();
1737   // FIXME: Destruction of ObjC lifetime types has side-effects.
1738   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1739     return !RD->isCompleteDefinition() ||
1740            !RD->hasTrivialDefaultConstructor() ||
1741            !RD->hasTrivialDestructor();
1742   return false;
1743 }
1744 
1745 static AttributeList *getMSPropertyAttr(AttributeList *list) {
1746   for (AttributeList* it = list; it != 0; it = it->getNext())
1747     if (it->isDeclspecPropertyAttribute())
1748       return it;
1749   return 0;
1750 }
1751 
1752 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1753 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1754 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
1755 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
1756 /// present (but parsing it has been deferred).
1757 NamedDecl *
1758 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1759                                MultiTemplateParamsArg TemplateParameterLists,
1760                                Expr *BW, const VirtSpecifiers &VS,
1761                                InClassInitStyle InitStyle) {
1762   const DeclSpec &DS = D.getDeclSpec();
1763   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1764   DeclarationName Name = NameInfo.getName();
1765   SourceLocation Loc = NameInfo.getLoc();
1766 
1767   // For anonymous bitfields, the location should point to the type.
1768   if (Loc.isInvalid())
1769     Loc = D.getLocStart();
1770 
1771   Expr *BitWidth = static_cast<Expr*>(BW);
1772 
1773   assert(isa<CXXRecordDecl>(CurContext));
1774   assert(!DS.isFriendSpecified());
1775 
1776   bool isFunc = D.isDeclarationOfFunction();
1777 
1778   if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
1779     // The Microsoft extension __interface only permits public member functions
1780     // and prohibits constructors, destructors, operators, non-public member
1781     // functions, static methods and data members.
1782     unsigned InvalidDecl;
1783     bool ShowDeclName = true;
1784     if (!isFunc)
1785       InvalidDecl = (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) ? 0 : 1;
1786     else if (AS != AS_public)
1787       InvalidDecl = 2;
1788     else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
1789       InvalidDecl = 3;
1790     else switch (Name.getNameKind()) {
1791       case DeclarationName::CXXConstructorName:
1792         InvalidDecl = 4;
1793         ShowDeclName = false;
1794         break;
1795 
1796       case DeclarationName::CXXDestructorName:
1797         InvalidDecl = 5;
1798         ShowDeclName = false;
1799         break;
1800 
1801       case DeclarationName::CXXOperatorName:
1802       case DeclarationName::CXXConversionFunctionName:
1803         InvalidDecl = 6;
1804         break;
1805 
1806       default:
1807         InvalidDecl = 0;
1808         break;
1809     }
1810 
1811     if (InvalidDecl) {
1812       if (ShowDeclName)
1813         Diag(Loc, diag::err_invalid_member_in_interface)
1814           << (InvalidDecl-1) << Name;
1815       else
1816         Diag(Loc, diag::err_invalid_member_in_interface)
1817           << (InvalidDecl-1) << "";
1818       return 0;
1819     }
1820   }
1821 
1822   // C++ 9.2p6: A member shall not be declared to have automatic storage
1823   // duration (auto, register) or with the extern storage-class-specifier.
1824   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1825   // data members and cannot be applied to names declared const or static,
1826   // and cannot be applied to reference members.
1827   switch (DS.getStorageClassSpec()) {
1828   case DeclSpec::SCS_unspecified:
1829   case DeclSpec::SCS_typedef:
1830   case DeclSpec::SCS_static:
1831     break;
1832   case DeclSpec::SCS_mutable:
1833     if (isFunc) {
1834       Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1835 
1836       // FIXME: It would be nicer if the keyword was ignored only for this
1837       // declarator. Otherwise we could get follow-up errors.
1838       D.getMutableDeclSpec().ClearStorageClassSpecs();
1839     }
1840     break;
1841   default:
1842     Diag(DS.getStorageClassSpecLoc(),
1843          diag::err_storageclass_invalid_for_member);
1844     D.getMutableDeclSpec().ClearStorageClassSpecs();
1845     break;
1846   }
1847 
1848   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1849                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1850                       !isFunc);
1851 
1852   if (DS.isConstexprSpecified() && isInstField) {
1853     SemaDiagnosticBuilder B =
1854         Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
1855     SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
1856     if (InitStyle == ICIS_NoInit) {
1857       B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const");
1858       D.getMutableDeclSpec().ClearConstexprSpec();
1859       const char *PrevSpec;
1860       unsigned DiagID;
1861       bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc,
1862                                          PrevSpec, DiagID, getLangOpts());
1863       (void)Failed;
1864       assert(!Failed && "Making a constexpr member const shouldn't fail");
1865     } else {
1866       B << 1;
1867       const char *PrevSpec;
1868       unsigned DiagID;
1869       if (D.getMutableDeclSpec().SetStorageClassSpec(
1870           *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID)) {
1871         assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
1872                "This is the only DeclSpec that should fail to be applied");
1873         B << 1;
1874       } else {
1875         B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
1876         isInstField = false;
1877       }
1878     }
1879   }
1880 
1881   NamedDecl *Member;
1882   if (isInstField) {
1883     CXXScopeSpec &SS = D.getCXXScopeSpec();
1884 
1885     // Data members must have identifiers for names.
1886     if (!Name.isIdentifier()) {
1887       Diag(Loc, diag::err_bad_variable_name)
1888         << Name;
1889       return 0;
1890     }
1891 
1892     IdentifierInfo *II = Name.getAsIdentifierInfo();
1893 
1894     // Member field could not be with "template" keyword.
1895     // So TemplateParameterLists should be empty in this case.
1896     if (TemplateParameterLists.size()) {
1897       TemplateParameterList* TemplateParams = TemplateParameterLists[0];
1898       if (TemplateParams->size()) {
1899         // There is no such thing as a member field template.
1900         Diag(D.getIdentifierLoc(), diag::err_template_member)
1901             << II
1902             << SourceRange(TemplateParams->getTemplateLoc(),
1903                 TemplateParams->getRAngleLoc());
1904       } else {
1905         // There is an extraneous 'template<>' for this member.
1906         Diag(TemplateParams->getTemplateLoc(),
1907             diag::err_template_member_noparams)
1908             << II
1909             << SourceRange(TemplateParams->getTemplateLoc(),
1910                 TemplateParams->getRAngleLoc());
1911       }
1912       return 0;
1913     }
1914 
1915     if (SS.isSet() && !SS.isInvalid()) {
1916       // The user provided a superfluous scope specifier inside a class
1917       // definition:
1918       //
1919       // class X {
1920       //   int X::member;
1921       // };
1922       if (DeclContext *DC = computeDeclContext(SS, false))
1923         diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
1924       else
1925         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
1926           << Name << SS.getRange();
1927 
1928       SS.clear();
1929     }
1930 
1931     AttributeList *MSPropertyAttr =
1932       getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
1933     if (MSPropertyAttr) {
1934       Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1935                                 BitWidth, InitStyle, AS, MSPropertyAttr);
1936       isInstField = false;
1937     } else {
1938       Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1939                                 BitWidth, InitStyle, AS);
1940     }
1941     assert(Member && "HandleField never returns null");
1942   } else {
1943     assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
1944 
1945     Member = HandleDeclarator(S, D, TemplateParameterLists);
1946     if (!Member) {
1947       return 0;
1948     }
1949 
1950     // Non-instance-fields can't have a bitfield.
1951     if (BitWidth) {
1952       if (Member->isInvalidDecl()) {
1953         // don't emit another diagnostic.
1954       } else if (isa<VarDecl>(Member)) {
1955         // C++ 9.6p3: A bit-field shall not be a static member.
1956         // "static member 'A' cannot be a bit-field"
1957         Diag(Loc, diag::err_static_not_bitfield)
1958           << Name << BitWidth->getSourceRange();
1959       } else if (isa<TypedefDecl>(Member)) {
1960         // "typedef member 'x' cannot be a bit-field"
1961         Diag(Loc, diag::err_typedef_not_bitfield)
1962           << Name << BitWidth->getSourceRange();
1963       } else {
1964         // A function typedef ("typedef int f(); f a;").
1965         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
1966         Diag(Loc, diag::err_not_integral_type_bitfield)
1967           << Name << cast<ValueDecl>(Member)->getType()
1968           << BitWidth->getSourceRange();
1969       }
1970 
1971       BitWidth = 0;
1972       Member->setInvalidDecl();
1973     }
1974 
1975     Member->setAccess(AS);
1976 
1977     // If we have declared a member function template, set the access of the
1978     // templated declaration as well.
1979     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
1980       FunTmpl->getTemplatedDecl()->setAccess(AS);
1981   }
1982 
1983   if (VS.isOverrideSpecified())
1984     Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
1985   if (VS.isFinalSpecified())
1986     Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
1987 
1988   if (VS.getLastLocation().isValid()) {
1989     // Update the end location of a method that has a virt-specifiers.
1990     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
1991       MD->setRangeEnd(VS.getLastLocation());
1992   }
1993 
1994   CheckOverrideControl(Member);
1995 
1996   assert((Name || isInstField) && "No identifier for non-field ?");
1997 
1998   if (isInstField) {
1999     FieldDecl *FD = cast<FieldDecl>(Member);
2000     FieldCollector->Add(FD);
2001 
2002     if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
2003                                  FD->getLocation())
2004           != DiagnosticsEngine::Ignored) {
2005       // Remember all explicit private FieldDecls that have a name, no side
2006       // effects and are not part of a dependent type declaration.
2007       if (!FD->isImplicit() && FD->getDeclName() &&
2008           FD->getAccess() == AS_private &&
2009           !FD->hasAttr<UnusedAttr>() &&
2010           !FD->getParent()->isDependentContext() &&
2011           !InitializationHasSideEffects(*FD))
2012         UnusedPrivateFields.insert(FD);
2013     }
2014   }
2015 
2016   return Member;
2017 }
2018 
2019 namespace {
2020   class UninitializedFieldVisitor
2021       : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
2022     Sema &S;
2023     ValueDecl *VD;
2024   public:
2025     typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
2026     UninitializedFieldVisitor(Sema &S, ValueDecl *VD) : Inherited(S.Context),
2027                                                         S(S) {
2028       if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(VD))
2029         this->VD = IFD->getAnonField();
2030       else
2031         this->VD = VD;
2032     }
2033 
2034     void HandleExpr(Expr *E) {
2035       if (!E) return;
2036 
2037       // Expressions like x(x) sometimes lack the surrounding expressions
2038       // but need to be checked anyways.
2039       HandleValue(E);
2040       Visit(E);
2041     }
2042 
2043     void HandleValue(Expr *E) {
2044       E = E->IgnoreParens();
2045 
2046       if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
2047         if (isa<EnumConstantDecl>(ME->getMemberDecl()))
2048           return;
2049 
2050         // FieldME is the inner-most MemberExpr that is not an anonymous struct
2051         // or union.
2052         MemberExpr *FieldME = ME;
2053 
2054         Expr *Base = E;
2055         while (isa<MemberExpr>(Base)) {
2056           ME = cast<MemberExpr>(Base);
2057 
2058           if (isa<VarDecl>(ME->getMemberDecl()))
2059             return;
2060 
2061           if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2062             if (!FD->isAnonymousStructOrUnion())
2063               FieldME = ME;
2064 
2065           Base = ME->getBase();
2066         }
2067 
2068         if (VD == FieldME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
2069           unsigned diag = VD->getType()->isReferenceType()
2070               ? diag::warn_reference_field_is_uninit
2071               : diag::warn_field_is_uninit;
2072           S.Diag(FieldME->getExprLoc(), diag) << VD;
2073         }
2074         return;
2075       }
2076 
2077       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
2078         HandleValue(CO->getTrueExpr());
2079         HandleValue(CO->getFalseExpr());
2080         return;
2081       }
2082 
2083       if (BinaryConditionalOperator *BCO =
2084               dyn_cast<BinaryConditionalOperator>(E)) {
2085         HandleValue(BCO->getCommon());
2086         HandleValue(BCO->getFalseExpr());
2087         return;
2088       }
2089 
2090       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
2091         switch (BO->getOpcode()) {
2092         default:
2093           return;
2094         case(BO_PtrMemD):
2095         case(BO_PtrMemI):
2096           HandleValue(BO->getLHS());
2097           return;
2098         case(BO_Comma):
2099           HandleValue(BO->getRHS());
2100           return;
2101         }
2102       }
2103     }
2104 
2105     void VisitImplicitCastExpr(ImplicitCastExpr *E) {
2106       if (E->getCastKind() == CK_LValueToRValue)
2107         HandleValue(E->getSubExpr());
2108 
2109       Inherited::VisitImplicitCastExpr(E);
2110     }
2111 
2112     void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
2113       Expr *Callee = E->getCallee();
2114       if (isa<MemberExpr>(Callee))
2115         HandleValue(Callee);
2116 
2117       Inherited::VisitCXXMemberCallExpr(E);
2118     }
2119   };
2120   static void CheckInitExprContainsUninitializedFields(Sema &S, Expr *E,
2121                                                        ValueDecl *VD) {
2122     UninitializedFieldVisitor(S, VD).HandleExpr(E);
2123   }
2124 } // namespace
2125 
2126 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
2127 /// in-class initializer for a non-static C++ class member, and after
2128 /// instantiating an in-class initializer in a class template. Such actions
2129 /// are deferred until the class is complete.
2130 void
2131 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
2132                                        Expr *InitExpr) {
2133   FieldDecl *FD = cast<FieldDecl>(D);
2134   assert(FD->getInClassInitStyle() != ICIS_NoInit &&
2135          "must set init style when field is created");
2136 
2137   if (!InitExpr) {
2138     FD->setInvalidDecl();
2139     FD->removeInClassInitializer();
2140     return;
2141   }
2142 
2143   if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
2144     FD->setInvalidDecl();
2145     FD->removeInClassInitializer();
2146     return;
2147   }
2148 
2149   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, InitLoc)
2150       != DiagnosticsEngine::Ignored) {
2151     CheckInitExprContainsUninitializedFields(*this, InitExpr, FD);
2152   }
2153 
2154   ExprResult Init = InitExpr;
2155   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
2156     InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
2157     InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
2158         ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
2159         : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
2160     InitializationSequence Seq(*this, Entity, Kind, InitExpr);
2161     Init = Seq.Perform(*this, Entity, Kind, InitExpr);
2162     if (Init.isInvalid()) {
2163       FD->setInvalidDecl();
2164       return;
2165     }
2166   }
2167 
2168   // C++11 [class.base.init]p7:
2169   //   The initialization of each base and member constitutes a
2170   //   full-expression.
2171   Init = ActOnFinishFullExpr(Init.take(), InitLoc);
2172   if (Init.isInvalid()) {
2173     FD->setInvalidDecl();
2174     return;
2175   }
2176 
2177   InitExpr = Init.release();
2178 
2179   FD->setInClassInitializer(InitExpr);
2180 }
2181 
2182 /// \brief Find the direct and/or virtual base specifiers that
2183 /// correspond to the given base type, for use in base initialization
2184 /// within a constructor.
2185 static bool FindBaseInitializer(Sema &SemaRef,
2186                                 CXXRecordDecl *ClassDecl,
2187                                 QualType BaseType,
2188                                 const CXXBaseSpecifier *&DirectBaseSpec,
2189                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
2190   // First, check for a direct base class.
2191   DirectBaseSpec = 0;
2192   for (CXXRecordDecl::base_class_const_iterator Base
2193          = ClassDecl->bases_begin();
2194        Base != ClassDecl->bases_end(); ++Base) {
2195     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
2196       // We found a direct base of this type. That's what we're
2197       // initializing.
2198       DirectBaseSpec = &*Base;
2199       break;
2200     }
2201   }
2202 
2203   // Check for a virtual base class.
2204   // FIXME: We might be able to short-circuit this if we know in advance that
2205   // there are no virtual bases.
2206   VirtualBaseSpec = 0;
2207   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
2208     // We haven't found a base yet; search the class hierarchy for a
2209     // virtual base class.
2210     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2211                        /*DetectVirtual=*/false);
2212     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
2213                               BaseType, Paths)) {
2214       for (CXXBasePaths::paths_iterator Path = Paths.begin();
2215            Path != Paths.end(); ++Path) {
2216         if (Path->back().Base->isVirtual()) {
2217           VirtualBaseSpec = Path->back().Base;
2218           break;
2219         }
2220       }
2221     }
2222   }
2223 
2224   return DirectBaseSpec || VirtualBaseSpec;
2225 }
2226 
2227 /// \brief Handle a C++ member initializer using braced-init-list syntax.
2228 MemInitResult
2229 Sema::ActOnMemInitializer(Decl *ConstructorD,
2230                           Scope *S,
2231                           CXXScopeSpec &SS,
2232                           IdentifierInfo *MemberOrBase,
2233                           ParsedType TemplateTypeTy,
2234                           const DeclSpec &DS,
2235                           SourceLocation IdLoc,
2236                           Expr *InitList,
2237                           SourceLocation EllipsisLoc) {
2238   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2239                              DS, IdLoc, InitList,
2240                              EllipsisLoc);
2241 }
2242 
2243 /// \brief Handle a C++ member initializer using parentheses syntax.
2244 MemInitResult
2245 Sema::ActOnMemInitializer(Decl *ConstructorD,
2246                           Scope *S,
2247                           CXXScopeSpec &SS,
2248                           IdentifierInfo *MemberOrBase,
2249                           ParsedType TemplateTypeTy,
2250                           const DeclSpec &DS,
2251                           SourceLocation IdLoc,
2252                           SourceLocation LParenLoc,
2253                           ArrayRef<Expr *> Args,
2254                           SourceLocation RParenLoc,
2255                           SourceLocation EllipsisLoc) {
2256   Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
2257                                            Args, RParenLoc);
2258   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2259                              DS, IdLoc, List, EllipsisLoc);
2260 }
2261 
2262 namespace {
2263 
2264 // Callback to only accept typo corrections that can be a valid C++ member
2265 // intializer: either a non-static field member or a base class.
2266 class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
2267  public:
2268   explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
2269       : ClassDecl(ClassDecl) {}
2270 
2271   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
2272     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
2273       if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
2274         return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
2275       else
2276         return isa<TypeDecl>(ND);
2277     }
2278     return false;
2279   }
2280 
2281  private:
2282   CXXRecordDecl *ClassDecl;
2283 };
2284 
2285 }
2286 
2287 /// \brief Handle a C++ member initializer.
2288 MemInitResult
2289 Sema::BuildMemInitializer(Decl *ConstructorD,
2290                           Scope *S,
2291                           CXXScopeSpec &SS,
2292                           IdentifierInfo *MemberOrBase,
2293                           ParsedType TemplateTypeTy,
2294                           const DeclSpec &DS,
2295                           SourceLocation IdLoc,
2296                           Expr *Init,
2297                           SourceLocation EllipsisLoc) {
2298   if (!ConstructorD)
2299     return true;
2300 
2301   AdjustDeclIfTemplate(ConstructorD);
2302 
2303   CXXConstructorDecl *Constructor
2304     = dyn_cast<CXXConstructorDecl>(ConstructorD);
2305   if (!Constructor) {
2306     // The user wrote a constructor initializer on a function that is
2307     // not a C++ constructor. Ignore the error for now, because we may
2308     // have more member initializers coming; we'll diagnose it just
2309     // once in ActOnMemInitializers.
2310     return true;
2311   }
2312 
2313   CXXRecordDecl *ClassDecl = Constructor->getParent();
2314 
2315   // C++ [class.base.init]p2:
2316   //   Names in a mem-initializer-id are looked up in the scope of the
2317   //   constructor's class and, if not found in that scope, are looked
2318   //   up in the scope containing the constructor's definition.
2319   //   [Note: if the constructor's class contains a member with the
2320   //   same name as a direct or virtual base class of the class, a
2321   //   mem-initializer-id naming the member or base class and composed
2322   //   of a single identifier refers to the class member. A
2323   //   mem-initializer-id for the hidden base class may be specified
2324   //   using a qualified name. ]
2325   if (!SS.getScopeRep() && !TemplateTypeTy) {
2326     // Look for a member, first.
2327     DeclContext::lookup_result Result
2328       = ClassDecl->lookup(MemberOrBase);
2329     if (!Result.empty()) {
2330       ValueDecl *Member;
2331       if ((Member = dyn_cast<FieldDecl>(Result.front())) ||
2332           (Member = dyn_cast<IndirectFieldDecl>(Result.front()))) {
2333         if (EllipsisLoc.isValid())
2334           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
2335             << MemberOrBase
2336             << SourceRange(IdLoc, Init->getSourceRange().getEnd());
2337 
2338         return BuildMemberInitializer(Member, Init, IdLoc);
2339       }
2340     }
2341   }
2342   // It didn't name a member, so see if it names a class.
2343   QualType BaseType;
2344   TypeSourceInfo *TInfo = 0;
2345 
2346   if (TemplateTypeTy) {
2347     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
2348   } else if (DS.getTypeSpecType() == TST_decltype) {
2349     BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
2350   } else {
2351     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
2352     LookupParsedName(R, S, &SS);
2353 
2354     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
2355     if (!TyD) {
2356       if (R.isAmbiguous()) return true;
2357 
2358       // We don't want access-control diagnostics here.
2359       R.suppressDiagnostics();
2360 
2361       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
2362         bool NotUnknownSpecialization = false;
2363         DeclContext *DC = computeDeclContext(SS, false);
2364         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
2365           NotUnknownSpecialization = !Record->hasAnyDependentBases();
2366 
2367         if (!NotUnknownSpecialization) {
2368           // When the scope specifier can refer to a member of an unknown
2369           // specialization, we take it as a type name.
2370           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
2371                                        SS.getWithLocInContext(Context),
2372                                        *MemberOrBase, IdLoc);
2373           if (BaseType.isNull())
2374             return true;
2375 
2376           R.clear();
2377           R.setLookupName(MemberOrBase);
2378         }
2379       }
2380 
2381       // If no results were found, try to correct typos.
2382       TypoCorrection Corr;
2383       MemInitializerValidatorCCC Validator(ClassDecl);
2384       if (R.empty() && BaseType.isNull() &&
2385           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
2386                               Validator, ClassDecl))) {
2387         std::string CorrectedStr(Corr.getAsString(getLangOpts()));
2388         std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
2389         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
2390           // We have found a non-static data member with a similar
2391           // name to what was typed; complain and initialize that
2392           // member.
2393           Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2394             << MemberOrBase << true << CorrectedQuotedStr
2395             << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2396           Diag(Member->getLocation(), diag::note_previous_decl)
2397             << CorrectedQuotedStr;
2398 
2399           return BuildMemberInitializer(Member, Init, IdLoc);
2400         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
2401           const CXXBaseSpecifier *DirectBaseSpec;
2402           const CXXBaseSpecifier *VirtualBaseSpec;
2403           if (FindBaseInitializer(*this, ClassDecl,
2404                                   Context.getTypeDeclType(Type),
2405                                   DirectBaseSpec, VirtualBaseSpec)) {
2406             // We have found a direct or virtual base class with a
2407             // similar name to what was typed; complain and initialize
2408             // that base class.
2409             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2410               << MemberOrBase << false << CorrectedQuotedStr
2411               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2412 
2413             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
2414                                                              : VirtualBaseSpec;
2415             Diag(BaseSpec->getLocStart(),
2416                  diag::note_base_class_specified_here)
2417               << BaseSpec->getType()
2418               << BaseSpec->getSourceRange();
2419 
2420             TyD = Type;
2421           }
2422         }
2423       }
2424 
2425       if (!TyD && BaseType.isNull()) {
2426         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
2427           << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
2428         return true;
2429       }
2430     }
2431 
2432     if (BaseType.isNull()) {
2433       BaseType = Context.getTypeDeclType(TyD);
2434       if (SS.isSet()) {
2435         NestedNameSpecifier *Qualifier =
2436           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2437 
2438         // FIXME: preserve source range information
2439         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
2440       }
2441     }
2442   }
2443 
2444   if (!TInfo)
2445     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
2446 
2447   return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2448 }
2449 
2450 /// Checks a member initializer expression for cases where reference (or
2451 /// pointer) members are bound to by-value parameters (or their addresses).
2452 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
2453                                                Expr *Init,
2454                                                SourceLocation IdLoc) {
2455   QualType MemberTy = Member->getType();
2456 
2457   // We only handle pointers and references currently.
2458   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
2459   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
2460     return;
2461 
2462   const bool IsPointer = MemberTy->isPointerType();
2463   if (IsPointer) {
2464     if (const UnaryOperator *Op
2465           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
2466       // The only case we're worried about with pointers requires taking the
2467       // address.
2468       if (Op->getOpcode() != UO_AddrOf)
2469         return;
2470 
2471       Init = Op->getSubExpr();
2472     } else {
2473       // We only handle address-of expression initializers for pointers.
2474       return;
2475     }
2476   }
2477 
2478   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
2479     // We only warn when referring to a non-reference parameter declaration.
2480     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
2481     if (!Parameter || Parameter->getType()->isReferenceType())
2482       return;
2483 
2484     S.Diag(Init->getExprLoc(),
2485            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
2486                      : diag::warn_bind_ref_member_to_parameter)
2487       << Member << Parameter << Init->getSourceRange();
2488   } else {
2489     // Other initializers are fine.
2490     return;
2491   }
2492 
2493   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
2494     << (unsigned)IsPointer;
2495 }
2496 
2497 MemInitResult
2498 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
2499                              SourceLocation IdLoc) {
2500   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
2501   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
2502   assert((DirectMember || IndirectMember) &&
2503          "Member must be a FieldDecl or IndirectFieldDecl");
2504 
2505   if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2506     return true;
2507 
2508   if (Member->isInvalidDecl())
2509     return true;
2510 
2511   // Diagnose value-uses of fields to initialize themselves, e.g.
2512   //   foo(foo)
2513   // where foo is not also a parameter to the constructor.
2514   // TODO: implement -Wuninitialized and fold this into that framework.
2515   MultiExprArg Args;
2516   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2517     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2518   } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
2519     Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
2520   } else {
2521     // Template instantiation doesn't reconstruct ParenListExprs for us.
2522     Args = Init;
2523   }
2524 
2525   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, IdLoc)
2526         != DiagnosticsEngine::Ignored)
2527     for (unsigned i = 0, e = Args.size(); i != e; ++i)
2528       // FIXME: Warn about the case when other fields are used before being
2529       // initialized. For example, let this field be the i'th field. When
2530       // initializing the i'th field, throw a warning if any of the >= i'th
2531       // fields are used, as they are not yet initialized.
2532       // Right now we are only handling the case where the i'th field uses
2533       // itself in its initializer.
2534       // Also need to take into account that some fields may be initialized by
2535       // in-class initializers, see C++11 [class.base.init]p9.
2536       CheckInitExprContainsUninitializedFields(*this, Args[i], Member);
2537 
2538   SourceRange InitRange = Init->getSourceRange();
2539 
2540   if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
2541     // Can't check initialization for a member of dependent type or when
2542     // any of the arguments are type-dependent expressions.
2543     DiscardCleanupsInEvaluationContext();
2544   } else {
2545     bool InitList = false;
2546     if (isa<InitListExpr>(Init)) {
2547       InitList = true;
2548       Args = Init;
2549     }
2550 
2551     // Initialize the member.
2552     InitializedEntity MemberEntity =
2553       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
2554                    : InitializedEntity::InitializeMember(IndirectMember, 0);
2555     InitializationKind Kind =
2556       InitList ? InitializationKind::CreateDirectList(IdLoc)
2557                : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
2558                                                   InitRange.getEnd());
2559 
2560     InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
2561     ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 0);
2562     if (MemberInit.isInvalid())
2563       return true;
2564 
2565     CheckForDanglingReferenceOrPointer(*this, Member, MemberInit.get(), IdLoc);
2566 
2567     // C++11 [class.base.init]p7:
2568     //   The initialization of each base and member constitutes a
2569     //   full-expression.
2570     MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin());
2571     if (MemberInit.isInvalid())
2572       return true;
2573 
2574     Init = MemberInit.get();
2575   }
2576 
2577   if (DirectMember) {
2578     return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
2579                                             InitRange.getBegin(), Init,
2580                                             InitRange.getEnd());
2581   } else {
2582     return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
2583                                             InitRange.getBegin(), Init,
2584                                             InitRange.getEnd());
2585   }
2586 }
2587 
2588 MemInitResult
2589 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
2590                                  CXXRecordDecl *ClassDecl) {
2591   SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
2592   if (!LangOpts.CPlusPlus11)
2593     return Diag(NameLoc, diag::err_delegating_ctor)
2594       << TInfo->getTypeLoc().getLocalSourceRange();
2595   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
2596 
2597   bool InitList = true;
2598   MultiExprArg Args = Init;
2599   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2600     InitList = false;
2601     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2602   }
2603 
2604   SourceRange InitRange = Init->getSourceRange();
2605   // Initialize the object.
2606   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
2607                                      QualType(ClassDecl->getTypeForDecl(), 0));
2608   InitializationKind Kind =
2609     InitList ? InitializationKind::CreateDirectList(NameLoc)
2610              : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
2611                                                 InitRange.getEnd());
2612   InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
2613   ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
2614                                               Args, 0);
2615   if (DelegationInit.isInvalid())
2616     return true;
2617 
2618   assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
2619          "Delegating constructor with no target?");
2620 
2621   // C++11 [class.base.init]p7:
2622   //   The initialization of each base and member constitutes a
2623   //   full-expression.
2624   DelegationInit = ActOnFinishFullExpr(DelegationInit.get(),
2625                                        InitRange.getBegin());
2626   if (DelegationInit.isInvalid())
2627     return true;
2628 
2629   // If we are in a dependent context, template instantiation will
2630   // perform this type-checking again. Just save the arguments that we
2631   // received in a ParenListExpr.
2632   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2633   // of the information that we have about the base
2634   // initializer. However, deconstructing the ASTs is a dicey process,
2635   // and this approach is far more likely to get the corner cases right.
2636   if (CurContext->isDependentContext())
2637     DelegationInit = Owned(Init);
2638 
2639   return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
2640                                           DelegationInit.takeAs<Expr>(),
2641                                           InitRange.getEnd());
2642 }
2643 
2644 MemInitResult
2645 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
2646                            Expr *Init, CXXRecordDecl *ClassDecl,
2647                            SourceLocation EllipsisLoc) {
2648   SourceLocation BaseLoc
2649     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
2650 
2651   if (!BaseType->isDependentType() && !BaseType->isRecordType())
2652     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
2653              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2654 
2655   // C++ [class.base.init]p2:
2656   //   [...] Unless the mem-initializer-id names a nonstatic data
2657   //   member of the constructor's class or a direct or virtual base
2658   //   of that class, the mem-initializer is ill-formed. A
2659   //   mem-initializer-list can initialize a base class using any
2660   //   name that denotes that base class type.
2661   bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
2662 
2663   SourceRange InitRange = Init->getSourceRange();
2664   if (EllipsisLoc.isValid()) {
2665     // This is a pack expansion.
2666     if (!BaseType->containsUnexpandedParameterPack())  {
2667       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2668         << SourceRange(BaseLoc, InitRange.getEnd());
2669 
2670       EllipsisLoc = SourceLocation();
2671     }
2672   } else {
2673     // Check for any unexpanded parameter packs.
2674     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
2675       return true;
2676 
2677     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2678       return true;
2679   }
2680 
2681   // Check for direct and virtual base classes.
2682   const CXXBaseSpecifier *DirectBaseSpec = 0;
2683   const CXXBaseSpecifier *VirtualBaseSpec = 0;
2684   if (!Dependent) {
2685     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2686                                        BaseType))
2687       return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2688 
2689     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2690                         VirtualBaseSpec);
2691 
2692     // C++ [base.class.init]p2:
2693     // Unless the mem-initializer-id names a nonstatic data member of the
2694     // constructor's class or a direct or virtual base of that class, the
2695     // mem-initializer is ill-formed.
2696     if (!DirectBaseSpec && !VirtualBaseSpec) {
2697       // If the class has any dependent bases, then it's possible that
2698       // one of those types will resolve to the same type as
2699       // BaseType. Therefore, just treat this as a dependent base
2700       // class initialization.  FIXME: Should we try to check the
2701       // initialization anyway? It seems odd.
2702       if (ClassDecl->hasAnyDependentBases())
2703         Dependent = true;
2704       else
2705         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
2706           << BaseType << Context.getTypeDeclType(ClassDecl)
2707           << BaseTInfo->getTypeLoc().getLocalSourceRange();
2708     }
2709   }
2710 
2711   if (Dependent) {
2712     DiscardCleanupsInEvaluationContext();
2713 
2714     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2715                                             /*IsVirtual=*/false,
2716                                             InitRange.getBegin(), Init,
2717                                             InitRange.getEnd(), EllipsisLoc);
2718   }
2719 
2720   // C++ [base.class.init]p2:
2721   //   If a mem-initializer-id is ambiguous because it designates both
2722   //   a direct non-virtual base class and an inherited virtual base
2723   //   class, the mem-initializer is ill-formed.
2724   if (DirectBaseSpec && VirtualBaseSpec)
2725     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
2726       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2727 
2728   CXXBaseSpecifier *BaseSpec = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
2729   if (!BaseSpec)
2730     BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
2731 
2732   // Initialize the base.
2733   bool InitList = true;
2734   MultiExprArg Args = Init;
2735   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2736     InitList = false;
2737     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2738   }
2739 
2740   InitializedEntity BaseEntity =
2741     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
2742   InitializationKind Kind =
2743     InitList ? InitializationKind::CreateDirectList(BaseLoc)
2744              : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
2745                                                 InitRange.getEnd());
2746   InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
2747   ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, 0);
2748   if (BaseInit.isInvalid())
2749     return true;
2750 
2751   // C++11 [class.base.init]p7:
2752   //   The initialization of each base and member constitutes a
2753   //   full-expression.
2754   BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin());
2755   if (BaseInit.isInvalid())
2756     return true;
2757 
2758   // If we are in a dependent context, template instantiation will
2759   // perform this type-checking again. Just save the arguments that we
2760   // received in a ParenListExpr.
2761   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2762   // of the information that we have about the base
2763   // initializer. However, deconstructing the ASTs is a dicey process,
2764   // and this approach is far more likely to get the corner cases right.
2765   if (CurContext->isDependentContext())
2766     BaseInit = Owned(Init);
2767 
2768   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2769                                           BaseSpec->isVirtual(),
2770                                           InitRange.getBegin(),
2771                                           BaseInit.takeAs<Expr>(),
2772                                           InitRange.getEnd(), EllipsisLoc);
2773 }
2774 
2775 // Create a static_cast\<T&&>(expr).
2776 static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) {
2777   if (T.isNull()) T = E->getType();
2778   QualType TargetType = SemaRef.BuildReferenceType(
2779       T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName());
2780   SourceLocation ExprLoc = E->getLocStart();
2781   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
2782       TargetType, ExprLoc);
2783 
2784   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
2785                                    SourceRange(ExprLoc, ExprLoc),
2786                                    E->getSourceRange()).take();
2787 }
2788 
2789 /// ImplicitInitializerKind - How an implicit base or member initializer should
2790 /// initialize its base or member.
2791 enum ImplicitInitializerKind {
2792   IIK_Default,
2793   IIK_Copy,
2794   IIK_Move,
2795   IIK_Inherit
2796 };
2797 
2798 static bool
2799 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2800                              ImplicitInitializerKind ImplicitInitKind,
2801                              CXXBaseSpecifier *BaseSpec,
2802                              bool IsInheritedVirtualBase,
2803                              CXXCtorInitializer *&CXXBaseInit) {
2804   InitializedEntity InitEntity
2805     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
2806                                         IsInheritedVirtualBase);
2807 
2808   ExprResult BaseInit;
2809 
2810   switch (ImplicitInitKind) {
2811   case IIK_Inherit: {
2812     const CXXRecordDecl *Inherited =
2813         Constructor->getInheritedConstructor()->getParent();
2814     const CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
2815     if (Base && Inherited->getCanonicalDecl() == Base->getCanonicalDecl()) {
2816       // C++11 [class.inhctor]p8:
2817       //   Each expression in the expression-list is of the form
2818       //   static_cast<T&&>(p), where p is the name of the corresponding
2819       //   constructor parameter and T is the declared type of p.
2820       SmallVector<Expr*, 16> Args;
2821       for (unsigned I = 0, E = Constructor->getNumParams(); I != E; ++I) {
2822         ParmVarDecl *PD = Constructor->getParamDecl(I);
2823         ExprResult ArgExpr =
2824             SemaRef.BuildDeclRefExpr(PD, PD->getType().getNonReferenceType(),
2825                                      VK_LValue, SourceLocation());
2826         if (ArgExpr.isInvalid())
2827           return true;
2828         Args.push_back(CastForMoving(SemaRef, ArgExpr.take(), PD->getType()));
2829       }
2830 
2831       InitializationKind InitKind = InitializationKind::CreateDirect(
2832           Constructor->getLocation(), SourceLocation(), SourceLocation());
2833       InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, Args);
2834       BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, Args);
2835       break;
2836     }
2837   }
2838   // Fall through.
2839   case IIK_Default: {
2840     InitializationKind InitKind
2841       = InitializationKind::CreateDefault(Constructor->getLocation());
2842     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
2843     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
2844     break;
2845   }
2846 
2847   case IIK_Move:
2848   case IIK_Copy: {
2849     bool Moving = ImplicitInitKind == IIK_Move;
2850     ParmVarDecl *Param = Constructor->getParamDecl(0);
2851     QualType ParamType = Param->getType().getNonReferenceType();
2852 
2853     Expr *CopyCtorArg =
2854       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2855                           SourceLocation(), Param, false,
2856                           Constructor->getLocation(), ParamType,
2857                           VK_LValue, 0);
2858 
2859     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
2860 
2861     // Cast to the base class to avoid ambiguities.
2862     QualType ArgTy =
2863       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
2864                                        ParamType.getQualifiers());
2865 
2866     if (Moving) {
2867       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
2868     }
2869 
2870     CXXCastPath BasePath;
2871     BasePath.push_back(BaseSpec);
2872     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
2873                                             CK_UncheckedDerivedToBase,
2874                                             Moving ? VK_XValue : VK_LValue,
2875                                             &BasePath).take();
2876 
2877     InitializationKind InitKind
2878       = InitializationKind::CreateDirect(Constructor->getLocation(),
2879                                          SourceLocation(), SourceLocation());
2880     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
2881     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
2882     break;
2883   }
2884   }
2885 
2886   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
2887   if (BaseInit.isInvalid())
2888     return true;
2889 
2890   CXXBaseInit =
2891     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2892                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
2893                                                         SourceLocation()),
2894                                              BaseSpec->isVirtual(),
2895                                              SourceLocation(),
2896                                              BaseInit.takeAs<Expr>(),
2897                                              SourceLocation(),
2898                                              SourceLocation());
2899 
2900   return false;
2901 }
2902 
2903 static bool RefersToRValueRef(Expr *MemRef) {
2904   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
2905   return Referenced->getType()->isRValueReferenceType();
2906 }
2907 
2908 static bool
2909 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2910                                ImplicitInitializerKind ImplicitInitKind,
2911                                FieldDecl *Field, IndirectFieldDecl *Indirect,
2912                                CXXCtorInitializer *&CXXMemberInit) {
2913   if (Field->isInvalidDecl())
2914     return true;
2915 
2916   SourceLocation Loc = Constructor->getLocation();
2917 
2918   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
2919     bool Moving = ImplicitInitKind == IIK_Move;
2920     ParmVarDecl *Param = Constructor->getParamDecl(0);
2921     QualType ParamType = Param->getType().getNonReferenceType();
2922 
2923     // Suppress copying zero-width bitfields.
2924     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
2925       return false;
2926 
2927     Expr *MemberExprBase =
2928       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2929                           SourceLocation(), Param, false,
2930                           Loc, ParamType, VK_LValue, 0);
2931 
2932     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
2933 
2934     if (Moving) {
2935       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
2936     }
2937 
2938     // Build a reference to this field within the parameter.
2939     CXXScopeSpec SS;
2940     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
2941                               Sema::LookupMemberName);
2942     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
2943                                   : cast<ValueDecl>(Field), AS_public);
2944     MemberLookup.resolveKind();
2945     ExprResult CtorArg
2946       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
2947                                          ParamType, Loc,
2948                                          /*IsArrow=*/false,
2949                                          SS,
2950                                          /*TemplateKWLoc=*/SourceLocation(),
2951                                          /*FirstQualifierInScope=*/0,
2952                                          MemberLookup,
2953                                          /*TemplateArgs=*/0);
2954     if (CtorArg.isInvalid())
2955       return true;
2956 
2957     // C++11 [class.copy]p15:
2958     //   - if a member m has rvalue reference type T&&, it is direct-initialized
2959     //     with static_cast<T&&>(x.m);
2960     if (RefersToRValueRef(CtorArg.get())) {
2961       CtorArg = CastForMoving(SemaRef, CtorArg.take());
2962     }
2963 
2964     // When the field we are copying is an array, create index variables for
2965     // each dimension of the array. We use these index variables to subscript
2966     // the source array, and other clients (e.g., CodeGen) will perform the
2967     // necessary iteration with these index variables.
2968     SmallVector<VarDecl *, 4> IndexVariables;
2969     QualType BaseType = Field->getType();
2970     QualType SizeType = SemaRef.Context.getSizeType();
2971     bool InitializingArray = false;
2972     while (const ConstantArrayType *Array
2973                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
2974       InitializingArray = true;
2975       // Create the iteration variable for this array index.
2976       IdentifierInfo *IterationVarName = 0;
2977       {
2978         SmallString<8> Str;
2979         llvm::raw_svector_ostream OS(Str);
2980         OS << "__i" << IndexVariables.size();
2981         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
2982       }
2983       VarDecl *IterationVar
2984         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
2985                           IterationVarName, SizeType,
2986                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
2987                           SC_None);
2988       IndexVariables.push_back(IterationVar);
2989 
2990       // Create a reference to the iteration variable.
2991       ExprResult IterationVarRef
2992         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
2993       assert(!IterationVarRef.isInvalid() &&
2994              "Reference to invented variable cannot fail!");
2995       IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
2996       assert(!IterationVarRef.isInvalid() &&
2997              "Conversion of invented variable cannot fail!");
2998 
2999       // Subscript the array with this iteration variable.
3000       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
3001                                                         IterationVarRef.take(),
3002                                                         Loc);
3003       if (CtorArg.isInvalid())
3004         return true;
3005 
3006       BaseType = Array->getElementType();
3007     }
3008 
3009     // The array subscript expression is an lvalue, which is wrong for moving.
3010     if (Moving && InitializingArray)
3011       CtorArg = CastForMoving(SemaRef, CtorArg.take());
3012 
3013     // Construct the entity that we will be initializing. For an array, this
3014     // will be first element in the array, which may require several levels
3015     // of array-subscript entities.
3016     SmallVector<InitializedEntity, 4> Entities;
3017     Entities.reserve(1 + IndexVariables.size());
3018     if (Indirect)
3019       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
3020     else
3021       Entities.push_back(InitializedEntity::InitializeMember(Field));
3022     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
3023       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
3024                                                               0,
3025                                                               Entities.back()));
3026 
3027     // Direct-initialize to use the copy constructor.
3028     InitializationKind InitKind =
3029       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
3030 
3031     Expr *CtorArgE = CtorArg.takeAs<Expr>();
3032     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind, CtorArgE);
3033 
3034     ExprResult MemberInit
3035       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
3036                         MultiExprArg(&CtorArgE, 1));
3037     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3038     if (MemberInit.isInvalid())
3039       return true;
3040 
3041     if (Indirect) {
3042       assert(IndexVariables.size() == 0 &&
3043              "Indirect field improperly initialized");
3044       CXXMemberInit
3045         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3046                                                    Loc, Loc,
3047                                                    MemberInit.takeAs<Expr>(),
3048                                                    Loc);
3049     } else
3050       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
3051                                                  Loc, MemberInit.takeAs<Expr>(),
3052                                                  Loc,
3053                                                  IndexVariables.data(),
3054                                                  IndexVariables.size());
3055     return false;
3056   }
3057 
3058   assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
3059          "Unhandled implicit init kind!");
3060 
3061   QualType FieldBaseElementType =
3062     SemaRef.Context.getBaseElementType(Field->getType());
3063 
3064   if (FieldBaseElementType->isRecordType()) {
3065     InitializedEntity InitEntity
3066       = Indirect? InitializedEntity::InitializeMember(Indirect)
3067                 : InitializedEntity::InitializeMember(Field);
3068     InitializationKind InitKind =
3069       InitializationKind::CreateDefault(Loc);
3070 
3071     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
3072     ExprResult MemberInit =
3073       InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
3074 
3075     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3076     if (MemberInit.isInvalid())
3077       return true;
3078 
3079     if (Indirect)
3080       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3081                                                                Indirect, Loc,
3082                                                                Loc,
3083                                                                MemberInit.get(),
3084                                                                Loc);
3085     else
3086       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3087                                                                Field, Loc, Loc,
3088                                                                MemberInit.get(),
3089                                                                Loc);
3090     return false;
3091   }
3092 
3093   if (!Field->getParent()->isUnion()) {
3094     if (FieldBaseElementType->isReferenceType()) {
3095       SemaRef.Diag(Constructor->getLocation(),
3096                    diag::err_uninitialized_member_in_ctor)
3097       << (int)Constructor->isImplicit()
3098       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3099       << 0 << Field->getDeclName();
3100       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3101       return true;
3102     }
3103 
3104     if (FieldBaseElementType.isConstQualified()) {
3105       SemaRef.Diag(Constructor->getLocation(),
3106                    diag::err_uninitialized_member_in_ctor)
3107       << (int)Constructor->isImplicit()
3108       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3109       << 1 << Field->getDeclName();
3110       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3111       return true;
3112     }
3113   }
3114 
3115   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
3116       FieldBaseElementType->isObjCRetainableType() &&
3117       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
3118       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
3119     // ARC:
3120     //   Default-initialize Objective-C pointers to NULL.
3121     CXXMemberInit
3122       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3123                                                  Loc, Loc,
3124                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
3125                                                  Loc);
3126     return false;
3127   }
3128 
3129   // Nothing to initialize.
3130   CXXMemberInit = 0;
3131   return false;
3132 }
3133 
3134 namespace {
3135 struct BaseAndFieldInfo {
3136   Sema &S;
3137   CXXConstructorDecl *Ctor;
3138   bool AnyErrorsInInits;
3139   ImplicitInitializerKind IIK;
3140   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
3141   SmallVector<CXXCtorInitializer*, 8> AllToInit;
3142 
3143   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
3144     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
3145     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
3146     if (Generated && Ctor->isCopyConstructor())
3147       IIK = IIK_Copy;
3148     else if (Generated && Ctor->isMoveConstructor())
3149       IIK = IIK_Move;
3150     else if (Ctor->getInheritedConstructor())
3151       IIK = IIK_Inherit;
3152     else
3153       IIK = IIK_Default;
3154   }
3155 
3156   bool isImplicitCopyOrMove() const {
3157     switch (IIK) {
3158     case IIK_Copy:
3159     case IIK_Move:
3160       return true;
3161 
3162     case IIK_Default:
3163     case IIK_Inherit:
3164       return false;
3165     }
3166 
3167     llvm_unreachable("Invalid ImplicitInitializerKind!");
3168   }
3169 
3170   bool addFieldInitializer(CXXCtorInitializer *Init) {
3171     AllToInit.push_back(Init);
3172 
3173     // Check whether this initializer makes the field "used".
3174     if (Init->getInit()->HasSideEffects(S.Context))
3175       S.UnusedPrivateFields.remove(Init->getAnyMember());
3176 
3177     return false;
3178   }
3179 };
3180 }
3181 
3182 /// \brief Determine whether the given indirect field declaration is somewhere
3183 /// within an anonymous union.
3184 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
3185   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
3186                                       CEnd = F->chain_end();
3187        C != CEnd; ++C)
3188     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
3189       if (Record->isUnion())
3190         return true;
3191 
3192   return false;
3193 }
3194 
3195 /// \brief Determine whether the given type is an incomplete or zero-lenfgth
3196 /// array type.
3197 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
3198   if (T->isIncompleteArrayType())
3199     return true;
3200 
3201   while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
3202     if (!ArrayT->getSize())
3203       return true;
3204 
3205     T = ArrayT->getElementType();
3206   }
3207 
3208   return false;
3209 }
3210 
3211 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
3212                                     FieldDecl *Field,
3213                                     IndirectFieldDecl *Indirect = 0) {
3214 
3215   // Overwhelmingly common case: we have a direct initializer for this field.
3216   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
3217     return Info.addFieldInitializer(Init);
3218 
3219   // C++11 [class.base.init]p8: if the entity is a non-static data member that
3220   // has a brace-or-equal-initializer, the entity is initialized as specified
3221   // in [dcl.init].
3222   if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
3223     Expr *DIE = CXXDefaultInitExpr::Create(SemaRef.Context,
3224                                            Info.Ctor->getLocation(), Field);
3225     CXXCtorInitializer *Init;
3226     if (Indirect)
3227       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3228                                                       SourceLocation(),
3229                                                       SourceLocation(), DIE,
3230                                                       SourceLocation());
3231     else
3232       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3233                                                       SourceLocation(),
3234                                                       SourceLocation(), DIE,
3235                                                       SourceLocation());
3236     return Info.addFieldInitializer(Init);
3237   }
3238 
3239   // Don't build an implicit initializer for union members if none was
3240   // explicitly specified.
3241   if (Field->getParent()->isUnion() ||
3242       (Indirect && isWithinAnonymousUnion(Indirect)))
3243     return false;
3244 
3245   // Don't initialize incomplete or zero-length arrays.
3246   if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
3247     return false;
3248 
3249   // Don't try to build an implicit initializer if there were semantic
3250   // errors in any of the initializers (and therefore we might be
3251   // missing some that the user actually wrote).
3252   if (Info.AnyErrorsInInits || Field->isInvalidDecl())
3253     return false;
3254 
3255   CXXCtorInitializer *Init = 0;
3256   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
3257                                      Indirect, Init))
3258     return true;
3259 
3260   if (!Init)
3261     return false;
3262 
3263   return Info.addFieldInitializer(Init);
3264 }
3265 
3266 bool
3267 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
3268                                CXXCtorInitializer *Initializer) {
3269   assert(Initializer->isDelegatingInitializer());
3270   Constructor->setNumCtorInitializers(1);
3271   CXXCtorInitializer **initializer =
3272     new (Context) CXXCtorInitializer*[1];
3273   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
3274   Constructor->setCtorInitializers(initializer);
3275 
3276   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
3277     MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
3278     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
3279   }
3280 
3281   DelegatingCtorDecls.push_back(Constructor);
3282 
3283   return false;
3284 }
3285 
3286 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
3287                                ArrayRef<CXXCtorInitializer *> Initializers) {
3288   if (Constructor->isDependentContext()) {
3289     // Just store the initializers as written, they will be checked during
3290     // instantiation.
3291     if (!Initializers.empty()) {
3292       Constructor->setNumCtorInitializers(Initializers.size());
3293       CXXCtorInitializer **baseOrMemberInitializers =
3294         new (Context) CXXCtorInitializer*[Initializers.size()];
3295       memcpy(baseOrMemberInitializers, Initializers.data(),
3296              Initializers.size() * sizeof(CXXCtorInitializer*));
3297       Constructor->setCtorInitializers(baseOrMemberInitializers);
3298     }
3299 
3300     // Let template instantiation know whether we had errors.
3301     if (AnyErrors)
3302       Constructor->setInvalidDecl();
3303 
3304     return false;
3305   }
3306 
3307   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
3308 
3309   // We need to build the initializer AST according to order of construction
3310   // and not what user specified in the Initializers list.
3311   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
3312   if (!ClassDecl)
3313     return true;
3314 
3315   bool HadError = false;
3316 
3317   for (unsigned i = 0; i < Initializers.size(); i++) {
3318     CXXCtorInitializer *Member = Initializers[i];
3319 
3320     if (Member->isBaseInitializer())
3321       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
3322     else
3323       Info.AllBaseFields[Member->getAnyMember()] = Member;
3324   }
3325 
3326   // Keep track of the direct virtual bases.
3327   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
3328   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
3329        E = ClassDecl->bases_end(); I != E; ++I) {
3330     if (I->isVirtual())
3331       DirectVBases.insert(I);
3332   }
3333 
3334   // Push virtual bases before others.
3335   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3336        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3337 
3338     if (CXXCtorInitializer *Value
3339         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
3340       Info.AllToInit.push_back(Value);
3341     } else if (!AnyErrors) {
3342       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
3343       CXXCtorInitializer *CXXBaseInit;
3344       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3345                                        VBase, IsInheritedVirtualBase,
3346                                        CXXBaseInit)) {
3347         HadError = true;
3348         continue;
3349       }
3350 
3351       Info.AllToInit.push_back(CXXBaseInit);
3352     }
3353   }
3354 
3355   // Non-virtual bases.
3356   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3357        E = ClassDecl->bases_end(); Base != E; ++Base) {
3358     // Virtuals are in the virtual base list and already constructed.
3359     if (Base->isVirtual())
3360       continue;
3361 
3362     if (CXXCtorInitializer *Value
3363           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
3364       Info.AllToInit.push_back(Value);
3365     } else if (!AnyErrors) {
3366       CXXCtorInitializer *CXXBaseInit;
3367       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3368                                        Base, /*IsInheritedVirtualBase=*/false,
3369                                        CXXBaseInit)) {
3370         HadError = true;
3371         continue;
3372       }
3373 
3374       Info.AllToInit.push_back(CXXBaseInit);
3375     }
3376   }
3377 
3378   // Fields.
3379   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3380                                MemEnd = ClassDecl->decls_end();
3381        Mem != MemEnd; ++Mem) {
3382     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
3383       // C++ [class.bit]p2:
3384       //   A declaration for a bit-field that omits the identifier declares an
3385       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
3386       //   initialized.
3387       if (F->isUnnamedBitfield())
3388         continue;
3389 
3390       // If we're not generating the implicit copy/move constructor, then we'll
3391       // handle anonymous struct/union fields based on their individual
3392       // indirect fields.
3393       if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
3394         continue;
3395 
3396       if (CollectFieldInitializer(*this, Info, F))
3397         HadError = true;
3398       continue;
3399     }
3400 
3401     // Beyond this point, we only consider default initialization.
3402     if (Info.isImplicitCopyOrMove())
3403       continue;
3404 
3405     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
3406       if (F->getType()->isIncompleteArrayType()) {
3407         assert(ClassDecl->hasFlexibleArrayMember() &&
3408                "Incomplete array type is not valid");
3409         continue;
3410       }
3411 
3412       // Initialize each field of an anonymous struct individually.
3413       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
3414         HadError = true;
3415 
3416       continue;
3417     }
3418   }
3419 
3420   unsigned NumInitializers = Info.AllToInit.size();
3421   if (NumInitializers > 0) {
3422     Constructor->setNumCtorInitializers(NumInitializers);
3423     CXXCtorInitializer **baseOrMemberInitializers =
3424       new (Context) CXXCtorInitializer*[NumInitializers];
3425     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
3426            NumInitializers * sizeof(CXXCtorInitializer*));
3427     Constructor->setCtorInitializers(baseOrMemberInitializers);
3428 
3429     // Constructors implicitly reference the base and member
3430     // destructors.
3431     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
3432                                            Constructor->getParent());
3433   }
3434 
3435   return HadError;
3436 }
3437 
3438 static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
3439   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
3440     const RecordDecl *RD = RT->getDecl();
3441     if (RD->isAnonymousStructOrUnion()) {
3442       for (RecordDecl::field_iterator Field = RD->field_begin(),
3443           E = RD->field_end(); Field != E; ++Field)
3444         PopulateKeysForFields(*Field, IdealInits);
3445       return;
3446     }
3447   }
3448   IdealInits.push_back(Field);
3449 }
3450 
3451 static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
3452   return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
3453 }
3454 
3455 static void *GetKeyForMember(ASTContext &Context,
3456                              CXXCtorInitializer *Member) {
3457   if (!Member->isAnyMemberInitializer())
3458     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
3459 
3460   return Member->getAnyMember();
3461 }
3462 
3463 static void DiagnoseBaseOrMemInitializerOrder(
3464     Sema &SemaRef, const CXXConstructorDecl *Constructor,
3465     ArrayRef<CXXCtorInitializer *> Inits) {
3466   if (Constructor->getDeclContext()->isDependentContext())
3467     return;
3468 
3469   // Don't check initializers order unless the warning is enabled at the
3470   // location of at least one initializer.
3471   bool ShouldCheckOrder = false;
3472   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3473     CXXCtorInitializer *Init = Inits[InitIndex];
3474     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
3475                                          Init->getSourceLocation())
3476           != DiagnosticsEngine::Ignored) {
3477       ShouldCheckOrder = true;
3478       break;
3479     }
3480   }
3481   if (!ShouldCheckOrder)
3482     return;
3483 
3484   // Build the list of bases and members in the order that they'll
3485   // actually be initialized.  The explicit initializers should be in
3486   // this same order but may be missing things.
3487   SmallVector<const void*, 32> IdealInitKeys;
3488 
3489   const CXXRecordDecl *ClassDecl = Constructor->getParent();
3490 
3491   // 1. Virtual bases.
3492   for (CXXRecordDecl::base_class_const_iterator VBase =
3493        ClassDecl->vbases_begin(),
3494        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3495     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
3496 
3497   // 2. Non-virtual bases.
3498   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3499        E = ClassDecl->bases_end(); Base != E; ++Base) {
3500     if (Base->isVirtual())
3501       continue;
3502     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
3503   }
3504 
3505   // 3. Direct fields.
3506   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3507        E = ClassDecl->field_end(); Field != E; ++Field) {
3508     if (Field->isUnnamedBitfield())
3509       continue;
3510 
3511     PopulateKeysForFields(*Field, IdealInitKeys);
3512   }
3513 
3514   unsigned NumIdealInits = IdealInitKeys.size();
3515   unsigned IdealIndex = 0;
3516 
3517   CXXCtorInitializer *PrevInit = 0;
3518   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3519     CXXCtorInitializer *Init = Inits[InitIndex];
3520     void *InitKey = GetKeyForMember(SemaRef.Context, Init);
3521 
3522     // Scan forward to try to find this initializer in the idealized
3523     // initializers list.
3524     for (; IdealIndex != NumIdealInits; ++IdealIndex)
3525       if (InitKey == IdealInitKeys[IdealIndex])
3526         break;
3527 
3528     // If we didn't find this initializer, it must be because we
3529     // scanned past it on a previous iteration.  That can only
3530     // happen if we're out of order;  emit a warning.
3531     if (IdealIndex == NumIdealInits && PrevInit) {
3532       Sema::SemaDiagnosticBuilder D =
3533         SemaRef.Diag(PrevInit->getSourceLocation(),
3534                      diag::warn_initializer_out_of_order);
3535 
3536       if (PrevInit->isAnyMemberInitializer())
3537         D << 0 << PrevInit->getAnyMember()->getDeclName();
3538       else
3539         D << 1 << PrevInit->getTypeSourceInfo()->getType();
3540 
3541       if (Init->isAnyMemberInitializer())
3542         D << 0 << Init->getAnyMember()->getDeclName();
3543       else
3544         D << 1 << Init->getTypeSourceInfo()->getType();
3545 
3546       // Move back to the initializer's location in the ideal list.
3547       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
3548         if (InitKey == IdealInitKeys[IdealIndex])
3549           break;
3550 
3551       assert(IdealIndex != NumIdealInits &&
3552              "initializer not found in initializer list");
3553     }
3554 
3555     PrevInit = Init;
3556   }
3557 }
3558 
3559 namespace {
3560 bool CheckRedundantInit(Sema &S,
3561                         CXXCtorInitializer *Init,
3562                         CXXCtorInitializer *&PrevInit) {
3563   if (!PrevInit) {
3564     PrevInit = Init;
3565     return false;
3566   }
3567 
3568   if (FieldDecl *Field = Init->getAnyMember())
3569     S.Diag(Init->getSourceLocation(),
3570            diag::err_multiple_mem_initialization)
3571       << Field->getDeclName()
3572       << Init->getSourceRange();
3573   else {
3574     const Type *BaseClass = Init->getBaseClass();
3575     assert(BaseClass && "neither field nor base");
3576     S.Diag(Init->getSourceLocation(),
3577            diag::err_multiple_base_initialization)
3578       << QualType(BaseClass, 0)
3579       << Init->getSourceRange();
3580   }
3581   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
3582     << 0 << PrevInit->getSourceRange();
3583 
3584   return true;
3585 }
3586 
3587 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
3588 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
3589 
3590 bool CheckRedundantUnionInit(Sema &S,
3591                              CXXCtorInitializer *Init,
3592                              RedundantUnionMap &Unions) {
3593   FieldDecl *Field = Init->getAnyMember();
3594   RecordDecl *Parent = Field->getParent();
3595   NamedDecl *Child = Field;
3596 
3597   while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
3598     if (Parent->isUnion()) {
3599       UnionEntry &En = Unions[Parent];
3600       if (En.first && En.first != Child) {
3601         S.Diag(Init->getSourceLocation(),
3602                diag::err_multiple_mem_union_initialization)
3603           << Field->getDeclName()
3604           << Init->getSourceRange();
3605         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
3606           << 0 << En.second->getSourceRange();
3607         return true;
3608       }
3609       if (!En.first) {
3610         En.first = Child;
3611         En.second = Init;
3612       }
3613       if (!Parent->isAnonymousStructOrUnion())
3614         return false;
3615     }
3616 
3617     Child = Parent;
3618     Parent = cast<RecordDecl>(Parent->getDeclContext());
3619   }
3620 
3621   return false;
3622 }
3623 }
3624 
3625 /// ActOnMemInitializers - Handle the member initializers for a constructor.
3626 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
3627                                 SourceLocation ColonLoc,
3628                                 ArrayRef<CXXCtorInitializer*> MemInits,
3629                                 bool AnyErrors) {
3630   if (!ConstructorDecl)
3631     return;
3632 
3633   AdjustDeclIfTemplate(ConstructorDecl);
3634 
3635   CXXConstructorDecl *Constructor
3636     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
3637 
3638   if (!Constructor) {
3639     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
3640     return;
3641   }
3642 
3643   // Mapping for the duplicate initializers check.
3644   // For member initializers, this is keyed with a FieldDecl*.
3645   // For base initializers, this is keyed with a Type*.
3646   llvm::DenseMap<void*, CXXCtorInitializer *> Members;
3647 
3648   // Mapping for the inconsistent anonymous-union initializers check.
3649   RedundantUnionMap MemberUnions;
3650 
3651   bool HadError = false;
3652   for (unsigned i = 0; i < MemInits.size(); i++) {
3653     CXXCtorInitializer *Init = MemInits[i];
3654 
3655     // Set the source order index.
3656     Init->setSourceOrder(i);
3657 
3658     if (Init->isAnyMemberInitializer()) {
3659       FieldDecl *Field = Init->getAnyMember();
3660       if (CheckRedundantInit(*this, Init, Members[Field]) ||
3661           CheckRedundantUnionInit(*this, Init, MemberUnions))
3662         HadError = true;
3663     } else if (Init->isBaseInitializer()) {
3664       void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
3665       if (CheckRedundantInit(*this, Init, Members[Key]))
3666         HadError = true;
3667     } else {
3668       assert(Init->isDelegatingInitializer());
3669       // This must be the only initializer
3670       if (MemInits.size() != 1) {
3671         Diag(Init->getSourceLocation(),
3672              diag::err_delegating_initializer_alone)
3673           << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
3674         // We will treat this as being the only initializer.
3675       }
3676       SetDelegatingInitializer(Constructor, MemInits[i]);
3677       // Return immediately as the initializer is set.
3678       return;
3679     }
3680   }
3681 
3682   if (HadError)
3683     return;
3684 
3685   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
3686 
3687   SetCtorInitializers(Constructor, AnyErrors, MemInits);
3688 }
3689 
3690 void
3691 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
3692                                              CXXRecordDecl *ClassDecl) {
3693   // Ignore dependent contexts. Also ignore unions, since their members never
3694   // have destructors implicitly called.
3695   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3696     return;
3697 
3698   // FIXME: all the access-control diagnostics are positioned on the
3699   // field/base declaration.  That's probably good; that said, the
3700   // user might reasonably want to know why the destructor is being
3701   // emitted, and we currently don't say.
3702 
3703   // Non-static data members.
3704   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3705        E = ClassDecl->field_end(); I != E; ++I) {
3706     FieldDecl *Field = *I;
3707     if (Field->isInvalidDecl())
3708       continue;
3709 
3710     // Don't destroy incomplete or zero-length arrays.
3711     if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
3712       continue;
3713 
3714     QualType FieldType = Context.getBaseElementType(Field->getType());
3715 
3716     const RecordType* RT = FieldType->getAs<RecordType>();
3717     if (!RT)
3718       continue;
3719 
3720     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3721     if (FieldClassDecl->isInvalidDecl())
3722       continue;
3723     if (FieldClassDecl->hasIrrelevantDestructor())
3724       continue;
3725     // The destructor for an implicit anonymous union member is never invoked.
3726     if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
3727       continue;
3728 
3729     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
3730     assert(Dtor && "No dtor found for FieldClassDecl!");
3731     CheckDestructorAccess(Field->getLocation(), Dtor,
3732                           PDiag(diag::err_access_dtor_field)
3733                             << Field->getDeclName()
3734                             << FieldType);
3735 
3736     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3737     DiagnoseUseOfDecl(Dtor, Location);
3738   }
3739 
3740   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
3741 
3742   // Bases.
3743   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3744        E = ClassDecl->bases_end(); Base != E; ++Base) {
3745     // Bases are always records in a well-formed non-dependent class.
3746     const RecordType *RT = Base->getType()->getAs<RecordType>();
3747 
3748     // Remember direct virtual bases.
3749     if (Base->isVirtual())
3750       DirectVirtualBases.insert(RT);
3751 
3752     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3753     // If our base class is invalid, we probably can't get its dtor anyway.
3754     if (BaseClassDecl->isInvalidDecl())
3755       continue;
3756     if (BaseClassDecl->hasIrrelevantDestructor())
3757       continue;
3758 
3759     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3760     assert(Dtor && "No dtor found for BaseClassDecl!");
3761 
3762     // FIXME: caret should be on the start of the class name
3763     CheckDestructorAccess(Base->getLocStart(), Dtor,
3764                           PDiag(diag::err_access_dtor_base)
3765                             << Base->getType()
3766                             << Base->getSourceRange(),
3767                           Context.getTypeDeclType(ClassDecl));
3768 
3769     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3770     DiagnoseUseOfDecl(Dtor, Location);
3771   }
3772 
3773   // Virtual bases.
3774   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3775        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3776 
3777     // Bases are always records in a well-formed non-dependent class.
3778     const RecordType *RT = VBase->getType()->castAs<RecordType>();
3779 
3780     // Ignore direct virtual bases.
3781     if (DirectVirtualBases.count(RT))
3782       continue;
3783 
3784     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3785     // If our base class is invalid, we probably can't get its dtor anyway.
3786     if (BaseClassDecl->isInvalidDecl())
3787       continue;
3788     if (BaseClassDecl->hasIrrelevantDestructor())
3789       continue;
3790 
3791     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3792     assert(Dtor && "No dtor found for BaseClassDecl!");
3793     if (CheckDestructorAccess(
3794             ClassDecl->getLocation(), Dtor,
3795             PDiag(diag::err_access_dtor_vbase)
3796                 << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
3797             Context.getTypeDeclType(ClassDecl)) ==
3798         AR_accessible) {
3799       CheckDerivedToBaseConversion(
3800           Context.getTypeDeclType(ClassDecl), VBase->getType(),
3801           diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
3802           SourceRange(), DeclarationName(), 0);
3803     }
3804 
3805     MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3806     DiagnoseUseOfDecl(Dtor, Location);
3807   }
3808 }
3809 
3810 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
3811   if (!CDtorDecl)
3812     return;
3813 
3814   if (CXXConstructorDecl *Constructor
3815       = dyn_cast<CXXConstructorDecl>(CDtorDecl))
3816     SetCtorInitializers(Constructor, /*AnyErrors=*/false);
3817 }
3818 
3819 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3820                                   unsigned DiagID, AbstractDiagSelID SelID) {
3821   class NonAbstractTypeDiagnoser : public TypeDiagnoser {
3822     unsigned DiagID;
3823     AbstractDiagSelID SelID;
3824 
3825   public:
3826     NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
3827       : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
3828 
3829     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
3830       if (Suppressed) return;
3831       if (SelID == -1)
3832         S.Diag(Loc, DiagID) << T;
3833       else
3834         S.Diag(Loc, DiagID) << SelID << T;
3835     }
3836   } Diagnoser(DiagID, SelID);
3837 
3838   return RequireNonAbstractType(Loc, T, Diagnoser);
3839 }
3840 
3841 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3842                                   TypeDiagnoser &Diagnoser) {
3843   if (!getLangOpts().CPlusPlus)
3844     return false;
3845 
3846   if (const ArrayType *AT = Context.getAsArrayType(T))
3847     return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3848 
3849   if (const PointerType *PT = T->getAs<PointerType>()) {
3850     // Find the innermost pointer type.
3851     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
3852       PT = T;
3853 
3854     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
3855       return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3856   }
3857 
3858   const RecordType *RT = T->getAs<RecordType>();
3859   if (!RT)
3860     return false;
3861 
3862   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3863 
3864   // We can't answer whether something is abstract until it has a
3865   // definition.  If it's currently being defined, we'll walk back
3866   // over all the declarations when we have a full definition.
3867   const CXXRecordDecl *Def = RD->getDefinition();
3868   if (!Def || Def->isBeingDefined())
3869     return false;
3870 
3871   if (!RD->isAbstract())
3872     return false;
3873 
3874   Diagnoser.diagnose(*this, Loc, T);
3875   DiagnoseAbstractType(RD);
3876 
3877   return true;
3878 }
3879 
3880 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
3881   // Check if we've already emitted the list of pure virtual functions
3882   // for this class.
3883   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
3884     return;
3885 
3886   CXXFinalOverriderMap FinalOverriders;
3887   RD->getFinalOverriders(FinalOverriders);
3888 
3889   // Keep a set of seen pure methods so we won't diagnose the same method
3890   // more than once.
3891   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
3892 
3893   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
3894                                    MEnd = FinalOverriders.end();
3895        M != MEnd;
3896        ++M) {
3897     for (OverridingMethods::iterator SO = M->second.begin(),
3898                                   SOEnd = M->second.end();
3899          SO != SOEnd; ++SO) {
3900       // C++ [class.abstract]p4:
3901       //   A class is abstract if it contains or inherits at least one
3902       //   pure virtual function for which the final overrider is pure
3903       //   virtual.
3904 
3905       //
3906       if (SO->second.size() != 1)
3907         continue;
3908 
3909       if (!SO->second.front().Method->isPure())
3910         continue;
3911 
3912       if (!SeenPureMethods.insert(SO->second.front().Method))
3913         continue;
3914 
3915       Diag(SO->second.front().Method->getLocation(),
3916            diag::note_pure_virtual_function)
3917         << SO->second.front().Method->getDeclName() << RD->getDeclName();
3918     }
3919   }
3920 
3921   if (!PureVirtualClassDiagSet)
3922     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
3923   PureVirtualClassDiagSet->insert(RD);
3924 }
3925 
3926 namespace {
3927 struct AbstractUsageInfo {
3928   Sema &S;
3929   CXXRecordDecl *Record;
3930   CanQualType AbstractType;
3931   bool Invalid;
3932 
3933   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
3934     : S(S), Record(Record),
3935       AbstractType(S.Context.getCanonicalType(
3936                    S.Context.getTypeDeclType(Record))),
3937       Invalid(false) {}
3938 
3939   void DiagnoseAbstractType() {
3940     if (Invalid) return;
3941     S.DiagnoseAbstractType(Record);
3942     Invalid = true;
3943   }
3944 
3945   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
3946 };
3947 
3948 struct CheckAbstractUsage {
3949   AbstractUsageInfo &Info;
3950   const NamedDecl *Ctx;
3951 
3952   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
3953     : Info(Info), Ctx(Ctx) {}
3954 
3955   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
3956     switch (TL.getTypeLocClass()) {
3957 #define ABSTRACT_TYPELOC(CLASS, PARENT)
3958 #define TYPELOC(CLASS, PARENT) \
3959     case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
3960 #include "clang/AST/TypeLocNodes.def"
3961     }
3962   }
3963 
3964   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3965     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
3966     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3967       if (!TL.getArg(I))
3968         continue;
3969 
3970       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
3971       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
3972     }
3973   }
3974 
3975   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3976     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
3977   }
3978 
3979   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3980     // Visit the type parameters from a permissive context.
3981     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3982       TemplateArgumentLoc TAL = TL.getArgLoc(I);
3983       if (TAL.getArgument().getKind() == TemplateArgument::Type)
3984         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
3985           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
3986       // TODO: other template argument types?
3987     }
3988   }
3989 
3990   // Visit pointee types from a permissive context.
3991 #define CheckPolymorphic(Type) \
3992   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
3993     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
3994   }
3995   CheckPolymorphic(PointerTypeLoc)
3996   CheckPolymorphic(ReferenceTypeLoc)
3997   CheckPolymorphic(MemberPointerTypeLoc)
3998   CheckPolymorphic(BlockPointerTypeLoc)
3999   CheckPolymorphic(AtomicTypeLoc)
4000 
4001   /// Handle all the types we haven't given a more specific
4002   /// implementation for above.
4003   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4004     // Every other kind of type that we haven't called out already
4005     // that has an inner type is either (1) sugar or (2) contains that
4006     // inner type in some way as a subobject.
4007     if (TypeLoc Next = TL.getNextTypeLoc())
4008       return Visit(Next, Sel);
4009 
4010     // If there's no inner type and we're in a permissive context,
4011     // don't diagnose.
4012     if (Sel == Sema::AbstractNone) return;
4013 
4014     // Check whether the type matches the abstract type.
4015     QualType T = TL.getType();
4016     if (T->isArrayType()) {
4017       Sel = Sema::AbstractArrayType;
4018       T = Info.S.Context.getBaseElementType(T);
4019     }
4020     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
4021     if (CT != Info.AbstractType) return;
4022 
4023     // It matched; do some magic.
4024     if (Sel == Sema::AbstractArrayType) {
4025       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
4026         << T << TL.getSourceRange();
4027     } else {
4028       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
4029         << Sel << T << TL.getSourceRange();
4030     }
4031     Info.DiagnoseAbstractType();
4032   }
4033 };
4034 
4035 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
4036                                   Sema::AbstractDiagSelID Sel) {
4037   CheckAbstractUsage(*this, D).Visit(TL, Sel);
4038 }
4039 
4040 }
4041 
4042 /// Check for invalid uses of an abstract type in a method declaration.
4043 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4044                                     CXXMethodDecl *MD) {
4045   // No need to do the check on definitions, which require that
4046   // the return/param types be complete.
4047   if (MD->doesThisDeclarationHaveABody())
4048     return;
4049 
4050   // For safety's sake, just ignore it if we don't have type source
4051   // information.  This should never happen for non-implicit methods,
4052   // but...
4053   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
4054     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
4055 }
4056 
4057 /// Check for invalid uses of an abstract type within a class definition.
4058 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4059                                     CXXRecordDecl *RD) {
4060   for (CXXRecordDecl::decl_iterator
4061          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
4062     Decl *D = *I;
4063     if (D->isImplicit()) continue;
4064 
4065     // Methods and method templates.
4066     if (isa<CXXMethodDecl>(D)) {
4067       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
4068     } else if (isa<FunctionTemplateDecl>(D)) {
4069       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
4070       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
4071 
4072     // Fields and static variables.
4073     } else if (isa<FieldDecl>(D)) {
4074       FieldDecl *FD = cast<FieldDecl>(D);
4075       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
4076         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
4077     } else if (isa<VarDecl>(D)) {
4078       VarDecl *VD = cast<VarDecl>(D);
4079       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
4080         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
4081 
4082     // Nested classes and class templates.
4083     } else if (isa<CXXRecordDecl>(D)) {
4084       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
4085     } else if (isa<ClassTemplateDecl>(D)) {
4086       CheckAbstractClassUsage(Info,
4087                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
4088     }
4089   }
4090 }
4091 
4092 /// \brief Perform semantic checks on a class definition that has been
4093 /// completing, introducing implicitly-declared members, checking for
4094 /// abstract types, etc.
4095 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
4096   if (!Record)
4097     return;
4098 
4099   if (Record->isAbstract() && !Record->isInvalidDecl()) {
4100     AbstractUsageInfo Info(*this, Record);
4101     CheckAbstractClassUsage(Info, Record);
4102   }
4103 
4104   // If this is not an aggregate type and has no user-declared constructor,
4105   // complain about any non-static data members of reference or const scalar
4106   // type, since they will never get initializers.
4107   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
4108       !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
4109       !Record->isLambda()) {
4110     bool Complained = false;
4111     for (RecordDecl::field_iterator F = Record->field_begin(),
4112                                  FEnd = Record->field_end();
4113          F != FEnd; ++F) {
4114       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
4115         continue;
4116 
4117       if (F->getType()->isReferenceType() ||
4118           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
4119         if (!Complained) {
4120           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
4121             << Record->getTagKind() << Record;
4122           Complained = true;
4123         }
4124 
4125         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
4126           << F->getType()->isReferenceType()
4127           << F->getDeclName();
4128       }
4129     }
4130   }
4131 
4132   if (Record->isDynamicClass() && !Record->isDependentType())
4133     DynamicClasses.push_back(Record);
4134 
4135   if (Record->getIdentifier()) {
4136     // C++ [class.mem]p13:
4137     //   If T is the name of a class, then each of the following shall have a
4138     //   name different from T:
4139     //     - every member of every anonymous union that is a member of class T.
4140     //
4141     // C++ [class.mem]p14:
4142     //   In addition, if class T has a user-declared constructor (12.1), every
4143     //   non-static data member of class T shall have a name different from T.
4144     DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
4145     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
4146          ++I) {
4147       NamedDecl *D = *I;
4148       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
4149           isa<IndirectFieldDecl>(D)) {
4150         Diag(D->getLocation(), diag::err_member_name_of_class)
4151           << D->getDeclName();
4152         break;
4153       }
4154     }
4155   }
4156 
4157   // Warn if the class has virtual methods but non-virtual public destructor.
4158   if (Record->isPolymorphic() && !Record->isDependentType()) {
4159     CXXDestructorDecl *dtor = Record->getDestructor();
4160     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
4161       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
4162            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
4163   }
4164 
4165   if (Record->isAbstract() && Record->hasAttr<FinalAttr>()) {
4166     Diag(Record->getLocation(), diag::warn_abstract_final_class);
4167     DiagnoseAbstractType(Record);
4168   }
4169 
4170   if (!Record->isDependentType()) {
4171     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4172                                      MEnd = Record->method_end();
4173          M != MEnd; ++M) {
4174       // See if a method overloads virtual methods in a base
4175       // class without overriding any.
4176       if (!M->isStatic())
4177         DiagnoseHiddenVirtualMethods(Record, *M);
4178 
4179       // Check whether the explicitly-defaulted special members are valid.
4180       if (!M->isInvalidDecl() && M->isExplicitlyDefaulted())
4181         CheckExplicitlyDefaultedSpecialMember(*M);
4182 
4183       // For an explicitly defaulted or deleted special member, we defer
4184       // determining triviality until the class is complete. That time is now!
4185       if (!M->isImplicit() && !M->isUserProvided()) {
4186         CXXSpecialMember CSM = getSpecialMember(*M);
4187         if (CSM != CXXInvalid) {
4188           M->setTrivial(SpecialMemberIsTrivial(*M, CSM));
4189 
4190           // Inform the class that we've finished declaring this member.
4191           Record->finishedDefaultedOrDeletedMember(*M);
4192         }
4193       }
4194     }
4195   }
4196 
4197   // C++11 [dcl.constexpr]p8: A constexpr specifier for a non-static member
4198   // function that is not a constructor declares that member function to be
4199   // const. [...] The class of which that function is a member shall be
4200   // a literal type.
4201   //
4202   // If the class has virtual bases, any constexpr members will already have
4203   // been diagnosed by the checks performed on the member declaration, so
4204   // suppress this (less useful) diagnostic.
4205   //
4206   // We delay this until we know whether an explicitly-defaulted (or deleted)
4207   // destructor for the class is trivial.
4208   if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
4209       !Record->isLiteral() && !Record->getNumVBases()) {
4210     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4211                                      MEnd = Record->method_end();
4212          M != MEnd; ++M) {
4213       if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
4214         switch (Record->getTemplateSpecializationKind()) {
4215         case TSK_ImplicitInstantiation:
4216         case TSK_ExplicitInstantiationDeclaration:
4217         case TSK_ExplicitInstantiationDefinition:
4218           // If a template instantiates to a non-literal type, but its members
4219           // instantiate to constexpr functions, the template is technically
4220           // ill-formed, but we allow it for sanity.
4221           continue;
4222 
4223         case TSK_Undeclared:
4224         case TSK_ExplicitSpecialization:
4225           RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
4226                              diag::err_constexpr_method_non_literal);
4227           break;
4228         }
4229 
4230         // Only produce one error per class.
4231         break;
4232       }
4233     }
4234   }
4235 
4236   // Declare inheriting constructors. We do this eagerly here because:
4237   // - The standard requires an eager diagnostic for conflicting inheriting
4238   //   constructors from different classes.
4239   // - The lazy declaration of the other implicit constructors is so as to not
4240   //   waste space and performance on classes that are not meant to be
4241   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
4242   //   have inheriting constructors.
4243   DeclareInheritingConstructors(Record);
4244 }
4245 
4246 /// Is the special member function which would be selected to perform the
4247 /// specified operation on the specified class type a constexpr constructor?
4248 static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4249                                      Sema::CXXSpecialMember CSM,
4250                                      bool ConstArg) {
4251   Sema::SpecialMemberOverloadResult *SMOR =
4252       S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
4253                             false, false, false, false);
4254   if (!SMOR || !SMOR->getMethod())
4255     // A constructor we wouldn't select can't be "involved in initializing"
4256     // anything.
4257     return true;
4258   return SMOR->getMethod()->isConstexpr();
4259 }
4260 
4261 /// Determine whether the specified special member function would be constexpr
4262 /// if it were implicitly defined.
4263 static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4264                                               Sema::CXXSpecialMember CSM,
4265                                               bool ConstArg) {
4266   if (!S.getLangOpts().CPlusPlus11)
4267     return false;
4268 
4269   // C++11 [dcl.constexpr]p4:
4270   // In the definition of a constexpr constructor [...]
4271   bool Ctor = true;
4272   switch (CSM) {
4273   case Sema::CXXDefaultConstructor:
4274     // Since default constructor lookup is essentially trivial (and cannot
4275     // involve, for instance, template instantiation), we compute whether a
4276     // defaulted default constructor is constexpr directly within CXXRecordDecl.
4277     //
4278     // This is important for performance; we need to know whether the default
4279     // constructor is constexpr to determine whether the type is a literal type.
4280     return ClassDecl->defaultedDefaultConstructorIsConstexpr();
4281 
4282   case Sema::CXXCopyConstructor:
4283   case Sema::CXXMoveConstructor:
4284     // For copy or move constructors, we need to perform overload resolution.
4285     break;
4286 
4287   case Sema::CXXCopyAssignment:
4288   case Sema::CXXMoveAssignment:
4289     if (!S.getLangOpts().CPlusPlus1y)
4290       return false;
4291     // In C++1y, we need to perform overload resolution.
4292     Ctor = false;
4293     break;
4294 
4295   case Sema::CXXDestructor:
4296   case Sema::CXXInvalid:
4297     return false;
4298   }
4299 
4300   //   -- if the class is a non-empty union, or for each non-empty anonymous
4301   //      union member of a non-union class, exactly one non-static data member
4302   //      shall be initialized; [DR1359]
4303   //
4304   // If we squint, this is guaranteed, since exactly one non-static data member
4305   // will be initialized (if the constructor isn't deleted), we just don't know
4306   // which one.
4307   if (Ctor && ClassDecl->isUnion())
4308     return true;
4309 
4310   //   -- the class shall not have any virtual base classes;
4311   if (Ctor && ClassDecl->getNumVBases())
4312     return false;
4313 
4314   // C++1y [class.copy]p26:
4315   //   -- [the class] is a literal type, and
4316   if (!Ctor && !ClassDecl->isLiteral())
4317     return false;
4318 
4319   //   -- every constructor involved in initializing [...] base class
4320   //      sub-objects shall be a constexpr constructor;
4321   //   -- the assignment operator selected to copy/move each direct base
4322   //      class is a constexpr function, and
4323   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
4324                                        BEnd = ClassDecl->bases_end();
4325        B != BEnd; ++B) {
4326     const RecordType *BaseType = B->getType()->getAs<RecordType>();
4327     if (!BaseType) continue;
4328 
4329     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
4330     if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, ConstArg))
4331       return false;
4332   }
4333 
4334   //   -- every constructor involved in initializing non-static data members
4335   //      [...] shall be a constexpr constructor;
4336   //   -- every non-static data member and base class sub-object shall be
4337   //      initialized
4338   //   -- for each non-stastic data member of X that is of class type (or array
4339   //      thereof), the assignment operator selected to copy/move that member is
4340   //      a constexpr function
4341   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
4342                                FEnd = ClassDecl->field_end();
4343        F != FEnd; ++F) {
4344     if (F->isInvalidDecl())
4345       continue;
4346     if (const RecordType *RecordTy =
4347             S.Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
4348       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
4349       if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, ConstArg))
4350         return false;
4351     }
4352   }
4353 
4354   // All OK, it's constexpr!
4355   return true;
4356 }
4357 
4358 static Sema::ImplicitExceptionSpecification
4359 computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
4360   switch (S.getSpecialMember(MD)) {
4361   case Sema::CXXDefaultConstructor:
4362     return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
4363   case Sema::CXXCopyConstructor:
4364     return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
4365   case Sema::CXXCopyAssignment:
4366     return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
4367   case Sema::CXXMoveConstructor:
4368     return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
4369   case Sema::CXXMoveAssignment:
4370     return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
4371   case Sema::CXXDestructor:
4372     return S.ComputeDefaultedDtorExceptionSpec(MD);
4373   case Sema::CXXInvalid:
4374     break;
4375   }
4376   assert(cast<CXXConstructorDecl>(MD)->getInheritedConstructor() &&
4377          "only special members have implicit exception specs");
4378   return S.ComputeInheritingCtorExceptionSpec(cast<CXXConstructorDecl>(MD));
4379 }
4380 
4381 static void
4382 updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
4383                     const Sema::ImplicitExceptionSpecification &ExceptSpec) {
4384   FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
4385   ExceptSpec.getEPI(EPI);
4386   FD->setType(S.Context.getFunctionType(FPT->getResultType(),
4387                                         FPT->getArgTypes(), EPI));
4388 }
4389 
4390 void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
4391   const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
4392   if (FPT->getExceptionSpecType() != EST_Unevaluated)
4393     return;
4394 
4395   // Evaluate the exception specification.
4396   ImplicitExceptionSpecification ExceptSpec =
4397       computeImplicitExceptionSpec(*this, Loc, MD);
4398 
4399   // Update the type of the special member to use it.
4400   updateExceptionSpec(*this, MD, FPT, ExceptSpec);
4401 
4402   // A user-provided destructor can be defined outside the class. When that
4403   // happens, be sure to update the exception specification on both
4404   // declarations.
4405   const FunctionProtoType *CanonicalFPT =
4406     MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
4407   if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
4408     updateExceptionSpec(*this, MD->getCanonicalDecl(),
4409                         CanonicalFPT, ExceptSpec);
4410 }
4411 
4412 void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
4413   CXXRecordDecl *RD = MD->getParent();
4414   CXXSpecialMember CSM = getSpecialMember(MD);
4415 
4416   assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
4417          "not an explicitly-defaulted special member");
4418 
4419   // Whether this was the first-declared instance of the constructor.
4420   // This affects whether we implicitly add an exception spec and constexpr.
4421   bool First = MD == MD->getCanonicalDecl();
4422 
4423   bool HadError = false;
4424 
4425   // C++11 [dcl.fct.def.default]p1:
4426   //   A function that is explicitly defaulted shall
4427   //     -- be a special member function (checked elsewhere),
4428   //     -- have the same type (except for ref-qualifiers, and except that a
4429   //        copy operation can take a non-const reference) as an implicit
4430   //        declaration, and
4431   //     -- not have default arguments.
4432   unsigned ExpectedParams = 1;
4433   if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
4434     ExpectedParams = 0;
4435   if (MD->getNumParams() != ExpectedParams) {
4436     // This also checks for default arguments: a copy or move constructor with a
4437     // default argument is classified as a default constructor, and assignment
4438     // operations and destructors can't have default arguments.
4439     Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
4440       << CSM << MD->getSourceRange();
4441     HadError = true;
4442   } else if (MD->isVariadic()) {
4443     Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
4444       << CSM << MD->getSourceRange();
4445     HadError = true;
4446   }
4447 
4448   const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
4449 
4450   bool CanHaveConstParam = false;
4451   if (CSM == CXXCopyConstructor)
4452     CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
4453   else if (CSM == CXXCopyAssignment)
4454     CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
4455 
4456   QualType ReturnType = Context.VoidTy;
4457   if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
4458     // Check for return type matching.
4459     ReturnType = Type->getResultType();
4460     QualType ExpectedReturnType =
4461         Context.getLValueReferenceType(Context.getTypeDeclType(RD));
4462     if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
4463       Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
4464         << (CSM == CXXMoveAssignment) << ExpectedReturnType;
4465       HadError = true;
4466     }
4467 
4468     // A defaulted special member cannot have cv-qualifiers.
4469     if (Type->getTypeQuals()) {
4470       Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
4471         << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus1y;
4472       HadError = true;
4473     }
4474   }
4475 
4476   // Check for parameter type matching.
4477   QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
4478   bool HasConstParam = false;
4479   if (ExpectedParams && ArgType->isReferenceType()) {
4480     // Argument must be reference to possibly-const T.
4481     QualType ReferentType = ArgType->getPointeeType();
4482     HasConstParam = ReferentType.isConstQualified();
4483 
4484     if (ReferentType.isVolatileQualified()) {
4485       Diag(MD->getLocation(),
4486            diag::err_defaulted_special_member_volatile_param) << CSM;
4487       HadError = true;
4488     }
4489 
4490     if (HasConstParam && !CanHaveConstParam) {
4491       if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
4492         Diag(MD->getLocation(),
4493              diag::err_defaulted_special_member_copy_const_param)
4494           << (CSM == CXXCopyAssignment);
4495         // FIXME: Explain why this special member can't be const.
4496       } else {
4497         Diag(MD->getLocation(),
4498              diag::err_defaulted_special_member_move_const_param)
4499           << (CSM == CXXMoveAssignment);
4500       }
4501       HadError = true;
4502     }
4503   } else if (ExpectedParams) {
4504     // A copy assignment operator can take its argument by value, but a
4505     // defaulted one cannot.
4506     assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
4507     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
4508     HadError = true;
4509   }
4510 
4511   // C++11 [dcl.fct.def.default]p2:
4512   //   An explicitly-defaulted function may be declared constexpr only if it
4513   //   would have been implicitly declared as constexpr,
4514   // Do not apply this rule to members of class templates, since core issue 1358
4515   // makes such functions always instantiate to constexpr functions. For
4516   // functions which cannot be constexpr (for non-constructors in C++11 and for
4517   // destructors in C++1y), this is checked elsewhere.
4518   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
4519                                                      HasConstParam);
4520   if ((getLangOpts().CPlusPlus1y ? !isa<CXXDestructorDecl>(MD)
4521                                  : isa<CXXConstructorDecl>(MD)) &&
4522       MD->isConstexpr() && !Constexpr &&
4523       MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
4524     Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
4525     // FIXME: Explain why the special member can't be constexpr.
4526     HadError = true;
4527   }
4528 
4529   //   and may have an explicit exception-specification only if it is compatible
4530   //   with the exception-specification on the implicit declaration.
4531   if (Type->hasExceptionSpec()) {
4532     // Delay the check if this is the first declaration of the special member,
4533     // since we may not have parsed some necessary in-class initializers yet.
4534     if (First) {
4535       // If the exception specification needs to be instantiated, do so now,
4536       // before we clobber it with an EST_Unevaluated specification below.
4537       if (Type->getExceptionSpecType() == EST_Uninstantiated) {
4538         InstantiateExceptionSpec(MD->getLocStart(), MD);
4539         Type = MD->getType()->getAs<FunctionProtoType>();
4540       }
4541       DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type));
4542     } else
4543       CheckExplicitlyDefaultedMemberExceptionSpec(MD, Type);
4544   }
4545 
4546   //   If a function is explicitly defaulted on its first declaration,
4547   if (First) {
4548     //  -- it is implicitly considered to be constexpr if the implicit
4549     //     definition would be,
4550     MD->setConstexpr(Constexpr);
4551 
4552     //  -- it is implicitly considered to have the same exception-specification
4553     //     as if it had been implicitly declared,
4554     FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
4555     EPI.ExceptionSpecType = EST_Unevaluated;
4556     EPI.ExceptionSpecDecl = MD;
4557     MD->setType(Context.getFunctionType(ReturnType,
4558                                         ArrayRef<QualType>(&ArgType,
4559                                                            ExpectedParams),
4560                                         EPI));
4561   }
4562 
4563   if (ShouldDeleteSpecialMember(MD, CSM)) {
4564     if (First) {
4565       SetDeclDeleted(MD, MD->getLocation());
4566     } else {
4567       // C++11 [dcl.fct.def.default]p4:
4568       //   [For a] user-provided explicitly-defaulted function [...] if such a
4569       //   function is implicitly defined as deleted, the program is ill-formed.
4570       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
4571       HadError = true;
4572     }
4573   }
4574 
4575   if (HadError)
4576     MD->setInvalidDecl();
4577 }
4578 
4579 /// Check whether the exception specification provided for an
4580 /// explicitly-defaulted special member matches the exception specification
4581 /// that would have been generated for an implicit special member, per
4582 /// C++11 [dcl.fct.def.default]p2.
4583 void Sema::CheckExplicitlyDefaultedMemberExceptionSpec(
4584     CXXMethodDecl *MD, const FunctionProtoType *SpecifiedType) {
4585   // Compute the implicit exception specification.
4586   FunctionProtoType::ExtProtoInfo EPI;
4587   computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
4588   const FunctionProtoType *ImplicitType = cast<FunctionProtoType>(
4589     Context.getFunctionType(Context.VoidTy, None, EPI));
4590 
4591   // Ensure that it matches.
4592   CheckEquivalentExceptionSpec(
4593     PDiag(diag::err_incorrect_defaulted_exception_spec)
4594       << getSpecialMember(MD), PDiag(),
4595     ImplicitType, SourceLocation(),
4596     SpecifiedType, MD->getLocation());
4597 }
4598 
4599 void Sema::CheckDelayedExplicitlyDefaultedMemberExceptionSpecs() {
4600   for (unsigned I = 0, N = DelayedDefaultedMemberExceptionSpecs.size();
4601        I != N; ++I)
4602     CheckExplicitlyDefaultedMemberExceptionSpec(
4603       DelayedDefaultedMemberExceptionSpecs[I].first,
4604       DelayedDefaultedMemberExceptionSpecs[I].second);
4605 
4606   DelayedDefaultedMemberExceptionSpecs.clear();
4607 }
4608 
4609 namespace {
4610 struct SpecialMemberDeletionInfo {
4611   Sema &S;
4612   CXXMethodDecl *MD;
4613   Sema::CXXSpecialMember CSM;
4614   bool Diagnose;
4615 
4616   // Properties of the special member, computed for convenience.
4617   bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
4618   SourceLocation Loc;
4619 
4620   bool AllFieldsAreConst;
4621 
4622   SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
4623                             Sema::CXXSpecialMember CSM, bool Diagnose)
4624     : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
4625       IsConstructor(false), IsAssignment(false), IsMove(false),
4626       ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
4627       AllFieldsAreConst(true) {
4628     switch (CSM) {
4629       case Sema::CXXDefaultConstructor:
4630       case Sema::CXXCopyConstructor:
4631         IsConstructor = true;
4632         break;
4633       case Sema::CXXMoveConstructor:
4634         IsConstructor = true;
4635         IsMove = true;
4636         break;
4637       case Sema::CXXCopyAssignment:
4638         IsAssignment = true;
4639         break;
4640       case Sema::CXXMoveAssignment:
4641         IsAssignment = true;
4642         IsMove = true;
4643         break;
4644       case Sema::CXXDestructor:
4645         break;
4646       case Sema::CXXInvalid:
4647         llvm_unreachable("invalid special member kind");
4648     }
4649 
4650     if (MD->getNumParams()) {
4651       ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
4652       VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
4653     }
4654   }
4655 
4656   bool inUnion() const { return MD->getParent()->isUnion(); }
4657 
4658   /// Look up the corresponding special member in the given class.
4659   Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
4660                                               unsigned Quals) {
4661     unsigned TQ = MD->getTypeQualifiers();
4662     // cv-qualifiers on class members don't affect default ctor / dtor calls.
4663     if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
4664       Quals = 0;
4665     return S.LookupSpecialMember(Class, CSM,
4666                                  ConstArg || (Quals & Qualifiers::Const),
4667                                  VolatileArg || (Quals & Qualifiers::Volatile),
4668                                  MD->getRefQualifier() == RQ_RValue,
4669                                  TQ & Qualifiers::Const,
4670                                  TQ & Qualifiers::Volatile);
4671   }
4672 
4673   typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
4674 
4675   bool shouldDeleteForBase(CXXBaseSpecifier *Base);
4676   bool shouldDeleteForField(FieldDecl *FD);
4677   bool shouldDeleteForAllConstMembers();
4678 
4679   bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
4680                                      unsigned Quals);
4681   bool shouldDeleteForSubobjectCall(Subobject Subobj,
4682                                     Sema::SpecialMemberOverloadResult *SMOR,
4683                                     bool IsDtorCallInCtor);
4684 
4685   bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
4686 };
4687 }
4688 
4689 /// Is the given special member inaccessible when used on the given
4690 /// sub-object.
4691 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
4692                                              CXXMethodDecl *target) {
4693   /// If we're operating on a base class, the object type is the
4694   /// type of this special member.
4695   QualType objectTy;
4696   AccessSpecifier access = target->getAccess();
4697   if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
4698     objectTy = S.Context.getTypeDeclType(MD->getParent());
4699     access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
4700 
4701   // If we're operating on a field, the object type is the type of the field.
4702   } else {
4703     objectTy = S.Context.getTypeDeclType(target->getParent());
4704   }
4705 
4706   return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
4707 }
4708 
4709 /// Check whether we should delete a special member due to the implicit
4710 /// definition containing a call to a special member of a subobject.
4711 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
4712     Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
4713     bool IsDtorCallInCtor) {
4714   CXXMethodDecl *Decl = SMOR->getMethod();
4715   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4716 
4717   int DiagKind = -1;
4718 
4719   if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
4720     DiagKind = !Decl ? 0 : 1;
4721   else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
4722     DiagKind = 2;
4723   else if (!isAccessible(Subobj, Decl))
4724     DiagKind = 3;
4725   else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
4726            !Decl->isTrivial()) {
4727     // A member of a union must have a trivial corresponding special member.
4728     // As a weird special case, a destructor call from a union's constructor
4729     // must be accessible and non-deleted, but need not be trivial. Such a
4730     // destructor is never actually called, but is semantically checked as
4731     // if it were.
4732     DiagKind = 4;
4733   }
4734 
4735   if (DiagKind == -1)
4736     return false;
4737 
4738   if (Diagnose) {
4739     if (Field) {
4740       S.Diag(Field->getLocation(),
4741              diag::note_deleted_special_member_class_subobject)
4742         << CSM << MD->getParent() << /*IsField*/true
4743         << Field << DiagKind << IsDtorCallInCtor;
4744     } else {
4745       CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
4746       S.Diag(Base->getLocStart(),
4747              diag::note_deleted_special_member_class_subobject)
4748         << CSM << MD->getParent() << /*IsField*/false
4749         << Base->getType() << DiagKind << IsDtorCallInCtor;
4750     }
4751 
4752     if (DiagKind == 1)
4753       S.NoteDeletedFunction(Decl);
4754     // FIXME: Explain inaccessibility if DiagKind == 3.
4755   }
4756 
4757   return true;
4758 }
4759 
4760 /// Check whether we should delete a special member function due to having a
4761 /// direct or virtual base class or non-static data member of class type M.
4762 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
4763     CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
4764   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4765 
4766   // C++11 [class.ctor]p5:
4767   // -- any direct or virtual base class, or non-static data member with no
4768   //    brace-or-equal-initializer, has class type M (or array thereof) and
4769   //    either M has no default constructor or overload resolution as applied
4770   //    to M's default constructor results in an ambiguity or in a function
4771   //    that is deleted or inaccessible
4772   // C++11 [class.copy]p11, C++11 [class.copy]p23:
4773   // -- a direct or virtual base class B that cannot be copied/moved because
4774   //    overload resolution, as applied to B's corresponding special member,
4775   //    results in an ambiguity or a function that is deleted or inaccessible
4776   //    from the defaulted special member
4777   // C++11 [class.dtor]p5:
4778   // -- any direct or virtual base class [...] has a type with a destructor
4779   //    that is deleted or inaccessible
4780   if (!(CSM == Sema::CXXDefaultConstructor &&
4781         Field && Field->hasInClassInitializer()) &&
4782       shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals), false))
4783     return true;
4784 
4785   // C++11 [class.ctor]p5, C++11 [class.copy]p11:
4786   // -- any direct or virtual base class or non-static data member has a
4787   //    type with a destructor that is deleted or inaccessible
4788   if (IsConstructor) {
4789     Sema::SpecialMemberOverloadResult *SMOR =
4790         S.LookupSpecialMember(Class, Sema::CXXDestructor,
4791                               false, false, false, false, false);
4792     if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
4793       return true;
4794   }
4795 
4796   return false;
4797 }
4798 
4799 /// Check whether we should delete a special member function due to the class
4800 /// having a particular direct or virtual base class.
4801 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
4802   CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
4803   return shouldDeleteForClassSubobject(BaseClass, Base, 0);
4804 }
4805 
4806 /// Check whether we should delete a special member function due to the class
4807 /// having a particular non-static data member.
4808 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
4809   QualType FieldType = S.Context.getBaseElementType(FD->getType());
4810   CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4811 
4812   if (CSM == Sema::CXXDefaultConstructor) {
4813     // For a default constructor, all references must be initialized in-class
4814     // and, if a union, it must have a non-const member.
4815     if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
4816       if (Diagnose)
4817         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4818           << MD->getParent() << FD << FieldType << /*Reference*/0;
4819       return true;
4820     }
4821     // C++11 [class.ctor]p5: any non-variant non-static data member of
4822     // const-qualified type (or array thereof) with no
4823     // brace-or-equal-initializer does not have a user-provided default
4824     // constructor.
4825     if (!inUnion() && FieldType.isConstQualified() &&
4826         !FD->hasInClassInitializer() &&
4827         (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
4828       if (Diagnose)
4829         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4830           << MD->getParent() << FD << FD->getType() << /*Const*/1;
4831       return true;
4832     }
4833 
4834     if (inUnion() && !FieldType.isConstQualified())
4835       AllFieldsAreConst = false;
4836   } else if (CSM == Sema::CXXCopyConstructor) {
4837     // For a copy constructor, data members must not be of rvalue reference
4838     // type.
4839     if (FieldType->isRValueReferenceType()) {
4840       if (Diagnose)
4841         S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
4842           << MD->getParent() << FD << FieldType;
4843       return true;
4844     }
4845   } else if (IsAssignment) {
4846     // For an assignment operator, data members must not be of reference type.
4847     if (FieldType->isReferenceType()) {
4848       if (Diagnose)
4849         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4850           << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
4851       return true;
4852     }
4853     if (!FieldRecord && FieldType.isConstQualified()) {
4854       // C++11 [class.copy]p23:
4855       // -- a non-static data member of const non-class type (or array thereof)
4856       if (Diagnose)
4857         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4858           << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
4859       return true;
4860     }
4861   }
4862 
4863   if (FieldRecord) {
4864     // Some additional restrictions exist on the variant members.
4865     if (!inUnion() && FieldRecord->isUnion() &&
4866         FieldRecord->isAnonymousStructOrUnion()) {
4867       bool AllVariantFieldsAreConst = true;
4868 
4869       // FIXME: Handle anonymous unions declared within anonymous unions.
4870       for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4871                                          UE = FieldRecord->field_end();
4872            UI != UE; ++UI) {
4873         QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
4874 
4875         if (!UnionFieldType.isConstQualified())
4876           AllVariantFieldsAreConst = false;
4877 
4878         CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
4879         if (UnionFieldRecord &&
4880             shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
4881                                           UnionFieldType.getCVRQualifiers()))
4882           return true;
4883       }
4884 
4885       // At least one member in each anonymous union must be non-const
4886       if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
4887           FieldRecord->field_begin() != FieldRecord->field_end()) {
4888         if (Diagnose)
4889           S.Diag(FieldRecord->getLocation(),
4890                  diag::note_deleted_default_ctor_all_const)
4891             << MD->getParent() << /*anonymous union*/1;
4892         return true;
4893       }
4894 
4895       // Don't check the implicit member of the anonymous union type.
4896       // This is technically non-conformant, but sanity demands it.
4897       return false;
4898     }
4899 
4900     if (shouldDeleteForClassSubobject(FieldRecord, FD,
4901                                       FieldType.getCVRQualifiers()))
4902       return true;
4903   }
4904 
4905   return false;
4906 }
4907 
4908 /// C++11 [class.ctor] p5:
4909 ///   A defaulted default constructor for a class X is defined as deleted if
4910 /// X is a union and all of its variant members are of const-qualified type.
4911 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
4912   // This is a silly definition, because it gives an empty union a deleted
4913   // default constructor. Don't do that.
4914   if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
4915       (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
4916     if (Diagnose)
4917       S.Diag(MD->getParent()->getLocation(),
4918              diag::note_deleted_default_ctor_all_const)
4919         << MD->getParent() << /*not anonymous union*/0;
4920     return true;
4921   }
4922   return false;
4923 }
4924 
4925 /// Determine whether a defaulted special member function should be defined as
4926 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
4927 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
4928 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4929                                      bool Diagnose) {
4930   if (MD->isInvalidDecl())
4931     return false;
4932   CXXRecordDecl *RD = MD->getParent();
4933   assert(!RD->isDependentType() && "do deletion after instantiation");
4934   if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
4935     return false;
4936 
4937   // C++11 [expr.lambda.prim]p19:
4938   //   The closure type associated with a lambda-expression has a
4939   //   deleted (8.4.3) default constructor and a deleted copy
4940   //   assignment operator.
4941   if (RD->isLambda() &&
4942       (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
4943     if (Diagnose)
4944       Diag(RD->getLocation(), diag::note_lambda_decl);
4945     return true;
4946   }
4947 
4948   // For an anonymous struct or union, the copy and assignment special members
4949   // will never be used, so skip the check. For an anonymous union declared at
4950   // namespace scope, the constructor and destructor are used.
4951   if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
4952       RD->isAnonymousStructOrUnion())
4953     return false;
4954 
4955   // C++11 [class.copy]p7, p18:
4956   //   If the class definition declares a move constructor or move assignment
4957   //   operator, an implicitly declared copy constructor or copy assignment
4958   //   operator is defined as deleted.
4959   if (MD->isImplicit() &&
4960       (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
4961     CXXMethodDecl *UserDeclaredMove = 0;
4962 
4963     // In Microsoft mode, a user-declared move only causes the deletion of the
4964     // corresponding copy operation, not both copy operations.
4965     if (RD->hasUserDeclaredMoveConstructor() &&
4966         (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
4967       if (!Diagnose) return true;
4968 
4969       // Find any user-declared move constructor.
4970       for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
4971                                         E = RD->ctor_end(); I != E; ++I) {
4972         if (I->isMoveConstructor()) {
4973           UserDeclaredMove = *I;
4974           break;
4975         }
4976       }
4977       assert(UserDeclaredMove);
4978     } else if (RD->hasUserDeclaredMoveAssignment() &&
4979                (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
4980       if (!Diagnose) return true;
4981 
4982       // Find any user-declared move assignment operator.
4983       for (CXXRecordDecl::method_iterator I = RD->method_begin(),
4984                                           E = RD->method_end(); I != E; ++I) {
4985         if (I->isMoveAssignmentOperator()) {
4986           UserDeclaredMove = *I;
4987           break;
4988         }
4989       }
4990       assert(UserDeclaredMove);
4991     }
4992 
4993     if (UserDeclaredMove) {
4994       Diag(UserDeclaredMove->getLocation(),
4995            diag::note_deleted_copy_user_declared_move)
4996         << (CSM == CXXCopyAssignment) << RD
4997         << UserDeclaredMove->isMoveAssignmentOperator();
4998       return true;
4999     }
5000   }
5001 
5002   // Do access control from the special member function
5003   ContextRAII MethodContext(*this, MD);
5004 
5005   // C++11 [class.dtor]p5:
5006   // -- for a virtual destructor, lookup of the non-array deallocation function
5007   //    results in an ambiguity or in a function that is deleted or inaccessible
5008   if (CSM == CXXDestructor && MD->isVirtual()) {
5009     FunctionDecl *OperatorDelete = 0;
5010     DeclarationName Name =
5011       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5012     if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
5013                                  OperatorDelete, false)) {
5014       if (Diagnose)
5015         Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
5016       return true;
5017     }
5018   }
5019 
5020   SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
5021 
5022   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5023                                           BE = RD->bases_end(); BI != BE; ++BI)
5024     if (!BI->isVirtual() &&
5025         SMI.shouldDeleteForBase(BI))
5026       return true;
5027 
5028   for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
5029                                           BE = RD->vbases_end(); BI != BE; ++BI)
5030     if (SMI.shouldDeleteForBase(BI))
5031       return true;
5032 
5033   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5034                                      FE = RD->field_end(); FI != FE; ++FI)
5035     if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
5036         SMI.shouldDeleteForField(*FI))
5037       return true;
5038 
5039   if (SMI.shouldDeleteForAllConstMembers())
5040     return true;
5041 
5042   return false;
5043 }
5044 
5045 /// Perform lookup for a special member of the specified kind, and determine
5046 /// whether it is trivial. If the triviality can be determined without the
5047 /// lookup, skip it. This is intended for use when determining whether a
5048 /// special member of a containing object is trivial, and thus does not ever
5049 /// perform overload resolution for default constructors.
5050 ///
5051 /// If \p Selected is not \c NULL, \c *Selected will be filled in with the
5052 /// member that was most likely to be intended to be trivial, if any.
5053 static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
5054                                      Sema::CXXSpecialMember CSM, unsigned Quals,
5055                                      CXXMethodDecl **Selected) {
5056   if (Selected)
5057     *Selected = 0;
5058 
5059   switch (CSM) {
5060   case Sema::CXXInvalid:
5061     llvm_unreachable("not a special member");
5062 
5063   case Sema::CXXDefaultConstructor:
5064     // C++11 [class.ctor]p5:
5065     //   A default constructor is trivial if:
5066     //    - all the [direct subobjects] have trivial default constructors
5067     //
5068     // Note, no overload resolution is performed in this case.
5069     if (RD->hasTrivialDefaultConstructor())
5070       return true;
5071 
5072     if (Selected) {
5073       // If there's a default constructor which could have been trivial, dig it
5074       // out. Otherwise, if there's any user-provided default constructor, point
5075       // to that as an example of why there's not a trivial one.
5076       CXXConstructorDecl *DefCtor = 0;
5077       if (RD->needsImplicitDefaultConstructor())
5078         S.DeclareImplicitDefaultConstructor(RD);
5079       for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(),
5080                                         CE = RD->ctor_end(); CI != CE; ++CI) {
5081         if (!CI->isDefaultConstructor())
5082           continue;
5083         DefCtor = *CI;
5084         if (!DefCtor->isUserProvided())
5085           break;
5086       }
5087 
5088       *Selected = DefCtor;
5089     }
5090 
5091     return false;
5092 
5093   case Sema::CXXDestructor:
5094     // C++11 [class.dtor]p5:
5095     //   A destructor is trivial if:
5096     //    - all the direct [subobjects] have trivial destructors
5097     if (RD->hasTrivialDestructor())
5098       return true;
5099 
5100     if (Selected) {
5101       if (RD->needsImplicitDestructor())
5102         S.DeclareImplicitDestructor(RD);
5103       *Selected = RD->getDestructor();
5104     }
5105 
5106     return false;
5107 
5108   case Sema::CXXCopyConstructor:
5109     // C++11 [class.copy]p12:
5110     //   A copy constructor is trivial if:
5111     //    - the constructor selected to copy each direct [subobject] is trivial
5112     if (RD->hasTrivialCopyConstructor()) {
5113       if (Quals == Qualifiers::Const)
5114         // We must either select the trivial copy constructor or reach an
5115         // ambiguity; no need to actually perform overload resolution.
5116         return true;
5117     } else if (!Selected) {
5118       return false;
5119     }
5120     // In C++98, we are not supposed to perform overload resolution here, but we
5121     // treat that as a language defect, as suggested on cxx-abi-dev, to treat
5122     // cases like B as having a non-trivial copy constructor:
5123     //   struct A { template<typename T> A(T&); };
5124     //   struct B { mutable A a; };
5125     goto NeedOverloadResolution;
5126 
5127   case Sema::CXXCopyAssignment:
5128     // C++11 [class.copy]p25:
5129     //   A copy assignment operator is trivial if:
5130     //    - the assignment operator selected to copy each direct [subobject] is
5131     //      trivial
5132     if (RD->hasTrivialCopyAssignment()) {
5133       if (Quals == Qualifiers::Const)
5134         return true;
5135     } else if (!Selected) {
5136       return false;
5137     }
5138     // In C++98, we are not supposed to perform overload resolution here, but we
5139     // treat that as a language defect.
5140     goto NeedOverloadResolution;
5141 
5142   case Sema::CXXMoveConstructor:
5143   case Sema::CXXMoveAssignment:
5144   NeedOverloadResolution:
5145     Sema::SpecialMemberOverloadResult *SMOR =
5146       S.LookupSpecialMember(RD, CSM,
5147                             Quals & Qualifiers::Const,
5148                             Quals & Qualifiers::Volatile,
5149                             /*RValueThis*/false, /*ConstThis*/false,
5150                             /*VolatileThis*/false);
5151 
5152     // The standard doesn't describe how to behave if the lookup is ambiguous.
5153     // We treat it as not making the member non-trivial, just like the standard
5154     // mandates for the default constructor. This should rarely matter, because
5155     // the member will also be deleted.
5156     if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
5157       return true;
5158 
5159     if (!SMOR->getMethod()) {
5160       assert(SMOR->getKind() ==
5161              Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
5162       return false;
5163     }
5164 
5165     // We deliberately don't check if we found a deleted special member. We're
5166     // not supposed to!
5167     if (Selected)
5168       *Selected = SMOR->getMethod();
5169     return SMOR->getMethod()->isTrivial();
5170   }
5171 
5172   llvm_unreachable("unknown special method kind");
5173 }
5174 
5175 static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
5176   for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end();
5177        CI != CE; ++CI)
5178     if (!CI->isImplicit())
5179       return *CI;
5180 
5181   // Look for constructor templates.
5182   typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
5183   for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
5184     if (CXXConstructorDecl *CD =
5185           dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
5186       return CD;
5187   }
5188 
5189   return 0;
5190 }
5191 
5192 /// The kind of subobject we are checking for triviality. The values of this
5193 /// enumeration are used in diagnostics.
5194 enum TrivialSubobjectKind {
5195   /// The subobject is a base class.
5196   TSK_BaseClass,
5197   /// The subobject is a non-static data member.
5198   TSK_Field,
5199   /// The object is actually the complete object.
5200   TSK_CompleteObject
5201 };
5202 
5203 /// Check whether the special member selected for a given type would be trivial.
5204 static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
5205                                       QualType SubType,
5206                                       Sema::CXXSpecialMember CSM,
5207                                       TrivialSubobjectKind Kind,
5208                                       bool Diagnose) {
5209   CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
5210   if (!SubRD)
5211     return true;
5212 
5213   CXXMethodDecl *Selected;
5214   if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
5215                                Diagnose ? &Selected : 0))
5216     return true;
5217 
5218   if (Diagnose) {
5219     if (!Selected && CSM == Sema::CXXDefaultConstructor) {
5220       S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
5221         << Kind << SubType.getUnqualifiedType();
5222       if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
5223         S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
5224     } else if (!Selected)
5225       S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
5226         << Kind << SubType.getUnqualifiedType() << CSM << SubType;
5227     else if (Selected->isUserProvided()) {
5228       if (Kind == TSK_CompleteObject)
5229         S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
5230           << Kind << SubType.getUnqualifiedType() << CSM;
5231       else {
5232         S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
5233           << Kind << SubType.getUnqualifiedType() << CSM;
5234         S.Diag(Selected->getLocation(), diag::note_declared_at);
5235       }
5236     } else {
5237       if (Kind != TSK_CompleteObject)
5238         S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
5239           << Kind << SubType.getUnqualifiedType() << CSM;
5240 
5241       // Explain why the defaulted or deleted special member isn't trivial.
5242       S.SpecialMemberIsTrivial(Selected, CSM, Diagnose);
5243     }
5244   }
5245 
5246   return false;
5247 }
5248 
5249 /// Check whether the members of a class type allow a special member to be
5250 /// trivial.
5251 static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
5252                                      Sema::CXXSpecialMember CSM,
5253                                      bool ConstArg, bool Diagnose) {
5254   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5255                                      FE = RD->field_end(); FI != FE; ++FI) {
5256     if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
5257       continue;
5258 
5259     QualType FieldType = S.Context.getBaseElementType(FI->getType());
5260 
5261     // Pretend anonymous struct or union members are members of this class.
5262     if (FI->isAnonymousStructOrUnion()) {
5263       if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
5264                                     CSM, ConstArg, Diagnose))
5265         return false;
5266       continue;
5267     }
5268 
5269     // C++11 [class.ctor]p5:
5270     //   A default constructor is trivial if [...]
5271     //    -- no non-static data member of its class has a
5272     //       brace-or-equal-initializer
5273     if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
5274       if (Diagnose)
5275         S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI;
5276       return false;
5277     }
5278 
5279     // Objective C ARC 4.3.5:
5280     //   [...] nontrivally ownership-qualified types are [...] not trivially
5281     //   default constructible, copy constructible, move constructible, copy
5282     //   assignable, move assignable, or destructible [...]
5283     if (S.getLangOpts().ObjCAutoRefCount &&
5284         FieldType.hasNonTrivialObjCLifetime()) {
5285       if (Diagnose)
5286         S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
5287           << RD << FieldType.getObjCLifetime();
5288       return false;
5289     }
5290 
5291     if (ConstArg && !FI->isMutable())
5292       FieldType.addConst();
5293     if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, CSM,
5294                                    TSK_Field, Diagnose))
5295       return false;
5296   }
5297 
5298   return true;
5299 }
5300 
5301 /// Diagnose why the specified class does not have a trivial special member of
5302 /// the given kind.
5303 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
5304   QualType Ty = Context.getRecordType(RD);
5305   if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)
5306     Ty.addConst();
5307 
5308   checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, CSM,
5309                             TSK_CompleteObject, /*Diagnose*/true);
5310 }
5311 
5312 /// Determine whether a defaulted or deleted special member function is trivial,
5313 /// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5314 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
5315 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
5316                                   bool Diagnose) {
5317   assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
5318 
5319   CXXRecordDecl *RD = MD->getParent();
5320 
5321   bool ConstArg = false;
5322 
5323   // C++11 [class.copy]p12, p25:
5324   //   A [special member] is trivial if its declared parameter type is the same
5325   //   as if it had been implicitly declared [...]
5326   switch (CSM) {
5327   case CXXDefaultConstructor:
5328   case CXXDestructor:
5329     // Trivial default constructors and destructors cannot have parameters.
5330     break;
5331 
5332   case CXXCopyConstructor:
5333   case CXXCopyAssignment: {
5334     // Trivial copy operations always have const, non-volatile parameter types.
5335     ConstArg = true;
5336     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5337     const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
5338     if (!RT || RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) {
5339       if (Diagnose)
5340         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5341           << Param0->getSourceRange() << Param0->getType()
5342           << Context.getLValueReferenceType(
5343                Context.getRecordType(RD).withConst());
5344       return false;
5345     }
5346     break;
5347   }
5348 
5349   case CXXMoveConstructor:
5350   case CXXMoveAssignment: {
5351     // Trivial move operations always have non-cv-qualified parameters.
5352     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5353     const RValueReferenceType *RT =
5354       Param0->getType()->getAs<RValueReferenceType>();
5355     if (!RT || RT->getPointeeType().getCVRQualifiers()) {
5356       if (Diagnose)
5357         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5358           << Param0->getSourceRange() << Param0->getType()
5359           << Context.getRValueReferenceType(Context.getRecordType(RD));
5360       return false;
5361     }
5362     break;
5363   }
5364 
5365   case CXXInvalid:
5366     llvm_unreachable("not a special member");
5367   }
5368 
5369   // FIXME: We require that the parameter-declaration-clause is equivalent to
5370   // that of an implicit declaration, not just that the declared parameter type
5371   // matches, in order to prevent absuridities like a function simultaneously
5372   // being a trivial copy constructor and a non-trivial default constructor.
5373   // This issue has not yet been assigned a core issue number.
5374   if (MD->getMinRequiredArguments() < MD->getNumParams()) {
5375     if (Diagnose)
5376       Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
5377            diag::note_nontrivial_default_arg)
5378         << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
5379     return false;
5380   }
5381   if (MD->isVariadic()) {
5382     if (Diagnose)
5383       Diag(MD->getLocation(), diag::note_nontrivial_variadic);
5384     return false;
5385   }
5386 
5387   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5388   //   A copy/move [constructor or assignment operator] is trivial if
5389   //    -- the [member] selected to copy/move each direct base class subobject
5390   //       is trivial
5391   //
5392   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5393   //   A [default constructor or destructor] is trivial if
5394   //    -- all the direct base classes have trivial [default constructors or
5395   //       destructors]
5396   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5397                                           BE = RD->bases_end(); BI != BE; ++BI)
5398     if (!checkTrivialSubobjectCall(*this, BI->getLocStart(),
5399                                    ConstArg ? BI->getType().withConst()
5400                                             : BI->getType(),
5401                                    CSM, TSK_BaseClass, Diagnose))
5402       return false;
5403 
5404   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5405   //   A copy/move [constructor or assignment operator] for a class X is
5406   //   trivial if
5407   //    -- for each non-static data member of X that is of class type (or array
5408   //       thereof), the constructor selected to copy/move that member is
5409   //       trivial
5410   //
5411   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5412   //   A [default constructor or destructor] is trivial if
5413   //    -- for all of the non-static data members of its class that are of class
5414   //       type (or array thereof), each such class has a trivial [default
5415   //       constructor or destructor]
5416   if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, Diagnose))
5417     return false;
5418 
5419   // C++11 [class.dtor]p5:
5420   //   A destructor is trivial if [...]
5421   //    -- the destructor is not virtual
5422   if (CSM == CXXDestructor && MD->isVirtual()) {
5423     if (Diagnose)
5424       Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
5425     return false;
5426   }
5427 
5428   // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
5429   //   A [special member] for class X is trivial if [...]
5430   //    -- class X has no virtual functions and no virtual base classes
5431   if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
5432     if (!Diagnose)
5433       return false;
5434 
5435     if (RD->getNumVBases()) {
5436       // Check for virtual bases. We already know that the corresponding
5437       // member in all bases is trivial, so vbases must all be direct.
5438       CXXBaseSpecifier &BS = *RD->vbases_begin();
5439       assert(BS.isVirtual());
5440       Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1;
5441       return false;
5442     }
5443 
5444     // Must have a virtual method.
5445     for (CXXRecordDecl::method_iterator MI = RD->method_begin(),
5446                                         ME = RD->method_end(); MI != ME; ++MI) {
5447       if (MI->isVirtual()) {
5448         SourceLocation MLoc = MI->getLocStart();
5449         Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
5450         return false;
5451       }
5452     }
5453 
5454     llvm_unreachable("dynamic class with no vbases and no virtual functions");
5455   }
5456 
5457   // Looks like it's trivial!
5458   return true;
5459 }
5460 
5461 /// \brief Data used with FindHiddenVirtualMethod
5462 namespace {
5463   struct FindHiddenVirtualMethodData {
5464     Sema *S;
5465     CXXMethodDecl *Method;
5466     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
5467     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
5468   };
5469 }
5470 
5471 /// \brief Check whether any most overriden method from MD in Methods
5472 static bool CheckMostOverridenMethods(const CXXMethodDecl *MD,
5473                    const llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5474   if (MD->size_overridden_methods() == 0)
5475     return Methods.count(MD->getCanonicalDecl());
5476   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5477                                       E = MD->end_overridden_methods();
5478        I != E; ++I)
5479     if (CheckMostOverridenMethods(*I, Methods))
5480       return true;
5481   return false;
5482 }
5483 
5484 /// \brief Member lookup function that determines whether a given C++
5485 /// method overloads virtual methods in a base class without overriding any,
5486 /// to be used with CXXRecordDecl::lookupInBases().
5487 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
5488                                     CXXBasePath &Path,
5489                                     void *UserData) {
5490   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
5491 
5492   FindHiddenVirtualMethodData &Data
5493     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
5494 
5495   DeclarationName Name = Data.Method->getDeclName();
5496   assert(Name.getNameKind() == DeclarationName::Identifier);
5497 
5498   bool foundSameNameMethod = false;
5499   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
5500   for (Path.Decls = BaseRecord->lookup(Name);
5501        !Path.Decls.empty();
5502        Path.Decls = Path.Decls.slice(1)) {
5503     NamedDecl *D = Path.Decls.front();
5504     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
5505       MD = MD->getCanonicalDecl();
5506       foundSameNameMethod = true;
5507       // Interested only in hidden virtual methods.
5508       if (!MD->isVirtual())
5509         continue;
5510       // If the method we are checking overrides a method from its base
5511       // don't warn about the other overloaded methods.
5512       if (!Data.S->IsOverload(Data.Method, MD, false))
5513         return true;
5514       // Collect the overload only if its hidden.
5515       if (!CheckMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods))
5516         overloadedMethods.push_back(MD);
5517     }
5518   }
5519 
5520   if (foundSameNameMethod)
5521     Data.OverloadedMethods.append(overloadedMethods.begin(),
5522                                    overloadedMethods.end());
5523   return foundSameNameMethod;
5524 }
5525 
5526 /// \brief Add the most overriden methods from MD to Methods
5527 static void AddMostOverridenMethods(const CXXMethodDecl *MD,
5528                          llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5529   if (MD->size_overridden_methods() == 0)
5530     Methods.insert(MD->getCanonicalDecl());
5531   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5532                                       E = MD->end_overridden_methods();
5533        I != E; ++I)
5534     AddMostOverridenMethods(*I, Methods);
5535 }
5536 
5537 /// \brief See if a method overloads virtual methods in a base class without
5538 /// overriding any.
5539 void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
5540   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
5541                                MD->getLocation()) == DiagnosticsEngine::Ignored)
5542     return;
5543   if (!MD->getDeclName().isIdentifier())
5544     return;
5545 
5546   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
5547                      /*bool RecordPaths=*/false,
5548                      /*bool DetectVirtual=*/false);
5549   FindHiddenVirtualMethodData Data;
5550   Data.Method = MD;
5551   Data.S = this;
5552 
5553   // Keep the base methods that were overriden or introduced in the subclass
5554   // by 'using' in a set. A base method not in this set is hidden.
5555   DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
5556   for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
5557     NamedDecl *ND = *I;
5558     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
5559       ND = shad->getTargetDecl();
5560     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
5561       AddMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods);
5562   }
5563 
5564   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
5565       !Data.OverloadedMethods.empty()) {
5566     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
5567       << MD << (Data.OverloadedMethods.size() > 1);
5568 
5569     for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
5570       CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
5571       PartialDiagnostic PD = PDiag(
5572            diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
5573       HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
5574       Diag(overloadedMD->getLocation(), PD);
5575     }
5576   }
5577 }
5578 
5579 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5580                                              Decl *TagDecl,
5581                                              SourceLocation LBrac,
5582                                              SourceLocation RBrac,
5583                                              AttributeList *AttrList) {
5584   if (!TagDecl)
5585     return;
5586 
5587   AdjustDeclIfTemplate(TagDecl);
5588 
5589   for (const AttributeList* l = AttrList; l; l = l->getNext()) {
5590     if (l->getKind() != AttributeList::AT_Visibility)
5591       continue;
5592     l->setInvalid();
5593     Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
5594       l->getName();
5595   }
5596 
5597   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
5598               // strict aliasing violation!
5599               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
5600               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
5601 
5602   CheckCompletedCXXClass(
5603                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
5604 }
5605 
5606 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5607 /// special functions, such as the default constructor, copy
5608 /// constructor, or destructor, to the given C++ class (C++
5609 /// [special]p1).  This routine can only be executed just before the
5610 /// definition of the class is complete.
5611 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
5612   if (!ClassDecl->hasUserDeclaredConstructor())
5613     ++ASTContext::NumImplicitDefaultConstructors;
5614 
5615   if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
5616     ++ASTContext::NumImplicitCopyConstructors;
5617 
5618     // If the properties or semantics of the copy constructor couldn't be
5619     // determined while the class was being declared, force a declaration
5620     // of it now.
5621     if (ClassDecl->needsOverloadResolutionForCopyConstructor())
5622       DeclareImplicitCopyConstructor(ClassDecl);
5623   }
5624 
5625   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
5626     ++ASTContext::NumImplicitMoveConstructors;
5627 
5628     if (ClassDecl->needsOverloadResolutionForMoveConstructor())
5629       DeclareImplicitMoveConstructor(ClassDecl);
5630   }
5631 
5632   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
5633     ++ASTContext::NumImplicitCopyAssignmentOperators;
5634 
5635     // If we have a dynamic class, then the copy assignment operator may be
5636     // virtual, so we have to declare it immediately. This ensures that, e.g.,
5637     // it shows up in the right place in the vtable and that we diagnose
5638     // problems with the implicit exception specification.
5639     if (ClassDecl->isDynamicClass() ||
5640         ClassDecl->needsOverloadResolutionForCopyAssignment())
5641       DeclareImplicitCopyAssignment(ClassDecl);
5642   }
5643 
5644   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
5645     ++ASTContext::NumImplicitMoveAssignmentOperators;
5646 
5647     // Likewise for the move assignment operator.
5648     if (ClassDecl->isDynamicClass() ||
5649         ClassDecl->needsOverloadResolutionForMoveAssignment())
5650       DeclareImplicitMoveAssignment(ClassDecl);
5651   }
5652 
5653   if (!ClassDecl->hasUserDeclaredDestructor()) {
5654     ++ASTContext::NumImplicitDestructors;
5655 
5656     // If we have a dynamic class, then the destructor may be virtual, so we
5657     // have to declare the destructor immediately. This ensures that, e.g., it
5658     // shows up in the right place in the vtable and that we diagnose problems
5659     // with the implicit exception specification.
5660     if (ClassDecl->isDynamicClass() ||
5661         ClassDecl->needsOverloadResolutionForDestructor())
5662       DeclareImplicitDestructor(ClassDecl);
5663   }
5664 }
5665 
5666 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
5667   if (!D)
5668     return;
5669 
5670   int NumParamList = D->getNumTemplateParameterLists();
5671   for (int i = 0; i < NumParamList; i++) {
5672     TemplateParameterList* Params = D->getTemplateParameterList(i);
5673     for (TemplateParameterList::iterator Param = Params->begin(),
5674                                       ParamEnd = Params->end();
5675           Param != ParamEnd; ++Param) {
5676       NamedDecl *Named = cast<NamedDecl>(*Param);
5677       if (Named->getDeclName()) {
5678         S->AddDecl(Named);
5679         IdResolver.AddDecl(Named);
5680       }
5681     }
5682   }
5683 }
5684 
5685 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
5686   if (!D)
5687     return;
5688 
5689   TemplateParameterList *Params = 0;
5690   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
5691     Params = Template->getTemplateParameters();
5692   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
5693            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
5694     Params = PartialSpec->getTemplateParameters();
5695   else
5696     return;
5697 
5698   for (TemplateParameterList::iterator Param = Params->begin(),
5699                                     ParamEnd = Params->end();
5700        Param != ParamEnd; ++Param) {
5701     NamedDecl *Named = cast<NamedDecl>(*Param);
5702     if (Named->getDeclName()) {
5703       S->AddDecl(Named);
5704       IdResolver.AddDecl(Named);
5705     }
5706   }
5707 }
5708 
5709 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5710   if (!RecordD) return;
5711   AdjustDeclIfTemplate(RecordD);
5712   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
5713   PushDeclContext(S, Record);
5714 }
5715 
5716 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5717   if (!RecordD) return;
5718   PopDeclContext();
5719 }
5720 
5721 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
5722 /// parsing a top-level (non-nested) C++ class, and we are now
5723 /// parsing those parts of the given Method declaration that could
5724 /// not be parsed earlier (C++ [class.mem]p2), such as default
5725 /// arguments. This action should enter the scope of the given
5726 /// Method declaration as if we had just parsed the qualified method
5727 /// name. However, it should not bring the parameters into scope;
5728 /// that will be performed by ActOnDelayedCXXMethodParameter.
5729 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5730 }
5731 
5732 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
5733 /// C++ method declaration. We're (re-)introducing the given
5734 /// function parameter into scope for use in parsing later parts of
5735 /// the method declaration. For example, we could see an
5736 /// ActOnParamDefaultArgument event for this parameter.
5737 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
5738   if (!ParamD)
5739     return;
5740 
5741   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
5742 
5743   // If this parameter has an unparsed default argument, clear it out
5744   // to make way for the parsed default argument.
5745   if (Param->hasUnparsedDefaultArg())
5746     Param->setDefaultArg(0);
5747 
5748   S->AddDecl(Param);
5749   if (Param->getDeclName())
5750     IdResolver.AddDecl(Param);
5751 }
5752 
5753 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
5754 /// processing the delayed method declaration for Method. The method
5755 /// declaration is now considered finished. There may be a separate
5756 /// ActOnStartOfFunctionDef action later (not necessarily
5757 /// immediately!) for this method, if it was also defined inside the
5758 /// class body.
5759 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5760   if (!MethodD)
5761     return;
5762 
5763   AdjustDeclIfTemplate(MethodD);
5764 
5765   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
5766 
5767   // Now that we have our default arguments, check the constructor
5768   // again. It could produce additional diagnostics or affect whether
5769   // the class has implicitly-declared destructors, among other
5770   // things.
5771   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
5772     CheckConstructor(Constructor);
5773 
5774   // Check the default arguments, which we may have added.
5775   if (!Method->isInvalidDecl())
5776     CheckCXXDefaultArguments(Method);
5777 }
5778 
5779 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
5780 /// the well-formedness of the constructor declarator @p D with type @p
5781 /// R. If there are any errors in the declarator, this routine will
5782 /// emit diagnostics and set the invalid bit to true.  In any case, the type
5783 /// will be updated to reflect a well-formed type for the constructor and
5784 /// returned.
5785 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
5786                                           StorageClass &SC) {
5787   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
5788 
5789   // C++ [class.ctor]p3:
5790   //   A constructor shall not be virtual (10.3) or static (9.4). A
5791   //   constructor can be invoked for a const, volatile or const
5792   //   volatile object. A constructor shall not be declared const,
5793   //   volatile, or const volatile (9.3.2).
5794   if (isVirtual) {
5795     if (!D.isInvalidType())
5796       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5797         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
5798         << SourceRange(D.getIdentifierLoc());
5799     D.setInvalidType();
5800   }
5801   if (SC == SC_Static) {
5802     if (!D.isInvalidType())
5803       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5804         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5805         << SourceRange(D.getIdentifierLoc());
5806     D.setInvalidType();
5807     SC = SC_None;
5808   }
5809 
5810   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5811   if (FTI.TypeQuals != 0) {
5812     if (FTI.TypeQuals & Qualifiers::Const)
5813       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5814         << "const" << SourceRange(D.getIdentifierLoc());
5815     if (FTI.TypeQuals & Qualifiers::Volatile)
5816       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5817         << "volatile" << SourceRange(D.getIdentifierLoc());
5818     if (FTI.TypeQuals & Qualifiers::Restrict)
5819       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5820         << "restrict" << SourceRange(D.getIdentifierLoc());
5821     D.setInvalidType();
5822   }
5823 
5824   // C++0x [class.ctor]p4:
5825   //   A constructor shall not be declared with a ref-qualifier.
5826   if (FTI.hasRefQualifier()) {
5827     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
5828       << FTI.RefQualifierIsLValueRef
5829       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5830     D.setInvalidType();
5831   }
5832 
5833   // Rebuild the function type "R" without any type qualifiers (in
5834   // case any of the errors above fired) and with "void" as the
5835   // return type, since constructors don't have return types.
5836   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5837   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
5838     return R;
5839 
5840   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
5841   EPI.TypeQuals = 0;
5842   EPI.RefQualifier = RQ_None;
5843 
5844   return Context.getFunctionType(Context.VoidTy, Proto->getArgTypes(), EPI);
5845 }
5846 
5847 /// CheckConstructor - Checks a fully-formed constructor for
5848 /// well-formedness, issuing any diagnostics required. Returns true if
5849 /// the constructor declarator is invalid.
5850 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
5851   CXXRecordDecl *ClassDecl
5852     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
5853   if (!ClassDecl)
5854     return Constructor->setInvalidDecl();
5855 
5856   // C++ [class.copy]p3:
5857   //   A declaration of a constructor for a class X is ill-formed if
5858   //   its first parameter is of type (optionally cv-qualified) X and
5859   //   either there are no other parameters or else all other
5860   //   parameters have default arguments.
5861   if (!Constructor->isInvalidDecl() &&
5862       ((Constructor->getNumParams() == 1) ||
5863        (Constructor->getNumParams() > 1 &&
5864         Constructor->getParamDecl(1)->hasDefaultArg())) &&
5865       Constructor->getTemplateSpecializationKind()
5866                                               != TSK_ImplicitInstantiation) {
5867     QualType ParamType = Constructor->getParamDecl(0)->getType();
5868     QualType ClassTy = Context.getTagDeclType(ClassDecl);
5869     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
5870       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
5871       const char *ConstRef
5872         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
5873                                                         : " const &";
5874       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
5875         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
5876 
5877       // FIXME: Rather that making the constructor invalid, we should endeavor
5878       // to fix the type.
5879       Constructor->setInvalidDecl();
5880     }
5881   }
5882 }
5883 
5884 /// CheckDestructor - Checks a fully-formed destructor definition for
5885 /// well-formedness, issuing any diagnostics required.  Returns true
5886 /// on error.
5887 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
5888   CXXRecordDecl *RD = Destructor->getParent();
5889 
5890   if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
5891     SourceLocation Loc;
5892 
5893     if (!Destructor->isImplicit())
5894       Loc = Destructor->getLocation();
5895     else
5896       Loc = RD->getLocation();
5897 
5898     // If we have a virtual destructor, look up the deallocation function
5899     FunctionDecl *OperatorDelete = 0;
5900     DeclarationName Name =
5901     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5902     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
5903       return true;
5904 
5905     MarkFunctionReferenced(Loc, OperatorDelete);
5906 
5907     Destructor->setOperatorDelete(OperatorDelete);
5908   }
5909 
5910   return false;
5911 }
5912 
5913 static inline bool
5914 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
5915   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5916           FTI.ArgInfo[0].Param &&
5917           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
5918 }
5919 
5920 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5921 /// the well-formednes of the destructor declarator @p D with type @p
5922 /// R. If there are any errors in the declarator, this routine will
5923 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
5924 /// will be updated to reflect a well-formed type for the destructor and
5925 /// returned.
5926 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
5927                                          StorageClass& SC) {
5928   // C++ [class.dtor]p1:
5929   //   [...] A typedef-name that names a class is a class-name
5930   //   (7.1.3); however, a typedef-name that names a class shall not
5931   //   be used as the identifier in the declarator for a destructor
5932   //   declaration.
5933   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
5934   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
5935     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5936       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
5937   else if (const TemplateSpecializationType *TST =
5938              DeclaratorType->getAs<TemplateSpecializationType>())
5939     if (TST->isTypeAlias())
5940       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5941         << DeclaratorType << 1;
5942 
5943   // C++ [class.dtor]p2:
5944   //   A destructor is used to destroy objects of its class type. A
5945   //   destructor takes no parameters, and no return type can be
5946   //   specified for it (not even void). The address of a destructor
5947   //   shall not be taken. A destructor shall not be static. A
5948   //   destructor can be invoked for a const, volatile or const
5949   //   volatile object. A destructor shall not be declared const,
5950   //   volatile or const volatile (9.3.2).
5951   if (SC == SC_Static) {
5952     if (!D.isInvalidType())
5953       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
5954         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5955         << SourceRange(D.getIdentifierLoc())
5956         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
5957 
5958     SC = SC_None;
5959   }
5960   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
5961     // Destructors don't have return types, but the parser will
5962     // happily parse something like:
5963     //
5964     //   class X {
5965     //     float ~X();
5966     //   };
5967     //
5968     // The return type will be eliminated later.
5969     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
5970       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5971       << SourceRange(D.getIdentifierLoc());
5972   }
5973 
5974   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5975   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
5976     if (FTI.TypeQuals & Qualifiers::Const)
5977       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5978         << "const" << SourceRange(D.getIdentifierLoc());
5979     if (FTI.TypeQuals & Qualifiers::Volatile)
5980       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5981         << "volatile" << SourceRange(D.getIdentifierLoc());
5982     if (FTI.TypeQuals & Qualifiers::Restrict)
5983       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5984         << "restrict" << SourceRange(D.getIdentifierLoc());
5985     D.setInvalidType();
5986   }
5987 
5988   // C++0x [class.dtor]p2:
5989   //   A destructor shall not be declared with a ref-qualifier.
5990   if (FTI.hasRefQualifier()) {
5991     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
5992       << FTI.RefQualifierIsLValueRef
5993       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5994     D.setInvalidType();
5995   }
5996 
5997   // Make sure we don't have any parameters.
5998   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
5999     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
6000 
6001     // Delete the parameters.
6002     FTI.freeArgs();
6003     D.setInvalidType();
6004   }
6005 
6006   // Make sure the destructor isn't variadic.
6007   if (FTI.isVariadic) {
6008     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
6009     D.setInvalidType();
6010   }
6011 
6012   // Rebuild the function type "R" without any type qualifiers or
6013   // parameters (in case any of the errors above fired) and with
6014   // "void" as the return type, since destructors don't have return
6015   // types.
6016   if (!D.isInvalidType())
6017     return R;
6018 
6019   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6020   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
6021   EPI.Variadic = false;
6022   EPI.TypeQuals = 0;
6023   EPI.RefQualifier = RQ_None;
6024   return Context.getFunctionType(Context.VoidTy, None, EPI);
6025 }
6026 
6027 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
6028 /// well-formednes of the conversion function declarator @p D with
6029 /// type @p R. If there are any errors in the declarator, this routine
6030 /// will emit diagnostics and return true. Otherwise, it will return
6031 /// false. Either way, the type @p R will be updated to reflect a
6032 /// well-formed type for the conversion operator.
6033 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
6034                                      StorageClass& SC) {
6035   // C++ [class.conv.fct]p1:
6036   //   Neither parameter types nor return type can be specified. The
6037   //   type of a conversion function (8.3.5) is "function taking no
6038   //   parameter returning conversion-type-id."
6039   if (SC == SC_Static) {
6040     if (!D.isInvalidType())
6041       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
6042         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6043         << SourceRange(D.getIdentifierLoc());
6044     D.setInvalidType();
6045     SC = SC_None;
6046   }
6047 
6048   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
6049 
6050   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6051     // Conversion functions don't have return types, but the parser will
6052     // happily parse something like:
6053     //
6054     //   class X {
6055     //     float operator bool();
6056     //   };
6057     //
6058     // The return type will be changed later anyway.
6059     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
6060       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6061       << SourceRange(D.getIdentifierLoc());
6062     D.setInvalidType();
6063   }
6064 
6065   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6066 
6067   // Make sure we don't have any parameters.
6068   if (Proto->getNumArgs() > 0) {
6069     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
6070 
6071     // Delete the parameters.
6072     D.getFunctionTypeInfo().freeArgs();
6073     D.setInvalidType();
6074   } else if (Proto->isVariadic()) {
6075     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
6076     D.setInvalidType();
6077   }
6078 
6079   // Diagnose "&operator bool()" and other such nonsense.  This
6080   // is actually a gcc extension which we don't support.
6081   if (Proto->getResultType() != ConvType) {
6082     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
6083       << Proto->getResultType();
6084     D.setInvalidType();
6085     ConvType = Proto->getResultType();
6086   }
6087 
6088   // C++ [class.conv.fct]p4:
6089   //   The conversion-type-id shall not represent a function type nor
6090   //   an array type.
6091   if (ConvType->isArrayType()) {
6092     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
6093     ConvType = Context.getPointerType(ConvType);
6094     D.setInvalidType();
6095   } else if (ConvType->isFunctionType()) {
6096     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
6097     ConvType = Context.getPointerType(ConvType);
6098     D.setInvalidType();
6099   }
6100 
6101   // Rebuild the function type "R" without any parameters (in case any
6102   // of the errors above fired) and with the conversion type as the
6103   // return type.
6104   if (D.isInvalidType())
6105     R = Context.getFunctionType(ConvType, None, Proto->getExtProtoInfo());
6106 
6107   // C++0x explicit conversion operators.
6108   if (D.getDeclSpec().isExplicitSpecified())
6109     Diag(D.getDeclSpec().getExplicitSpecLoc(),
6110          getLangOpts().CPlusPlus11 ?
6111            diag::warn_cxx98_compat_explicit_conversion_functions :
6112            diag::ext_explicit_conversion_functions)
6113       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
6114 }
6115 
6116 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
6117 /// the declaration of the given C++ conversion function. This routine
6118 /// is responsible for recording the conversion function in the C++
6119 /// class, if possible.
6120 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
6121   assert(Conversion && "Expected to receive a conversion function declaration");
6122 
6123   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
6124 
6125   // Make sure we aren't redeclaring the conversion function.
6126   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
6127 
6128   // C++ [class.conv.fct]p1:
6129   //   [...] A conversion function is never used to convert a
6130   //   (possibly cv-qualified) object to the (possibly cv-qualified)
6131   //   same object type (or a reference to it), to a (possibly
6132   //   cv-qualified) base class of that type (or a reference to it),
6133   //   or to (possibly cv-qualified) void.
6134   // FIXME: Suppress this warning if the conversion function ends up being a
6135   // virtual function that overrides a virtual function in a base class.
6136   QualType ClassType
6137     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6138   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
6139     ConvType = ConvTypeRef->getPointeeType();
6140   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
6141       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
6142     /* Suppress diagnostics for instantiations. */;
6143   else if (ConvType->isRecordType()) {
6144     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
6145     if (ConvType == ClassType)
6146       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
6147         << ClassType;
6148     else if (IsDerivedFrom(ClassType, ConvType))
6149       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
6150         <<  ClassType << ConvType;
6151   } else if (ConvType->isVoidType()) {
6152     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
6153       << ClassType << ConvType;
6154   }
6155 
6156   if (FunctionTemplateDecl *ConversionTemplate
6157                                 = Conversion->getDescribedFunctionTemplate())
6158     return ConversionTemplate;
6159 
6160   return Conversion;
6161 }
6162 
6163 //===----------------------------------------------------------------------===//
6164 // Namespace Handling
6165 //===----------------------------------------------------------------------===//
6166 
6167 /// \brief Diagnose a mismatch in 'inline' qualifiers when a namespace is
6168 /// reopened.
6169 static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
6170                                             SourceLocation Loc,
6171                                             IdentifierInfo *II, bool *IsInline,
6172                                             NamespaceDecl *PrevNS) {
6173   assert(*IsInline != PrevNS->isInline());
6174 
6175   // HACK: Work around a bug in libstdc++4.6's <atomic>, where
6176   // std::__atomic[0,1,2] are defined as non-inline namespaces, then reopened as
6177   // inline namespaces, with the intention of bringing names into namespace std.
6178   //
6179   // We support this just well enough to get that case working; this is not
6180   // sufficient to support reopening namespaces as inline in general.
6181   if (*IsInline && II && II->getName().startswith("__atomic") &&
6182       S.getSourceManager().isInSystemHeader(Loc)) {
6183     // Mark all prior declarations of the namespace as inline.
6184     for (NamespaceDecl *NS = PrevNS->getMostRecentDecl(); NS;
6185          NS = NS->getPreviousDecl())
6186       NS->setInline(*IsInline);
6187     // Patch up the lookup table for the containing namespace. This isn't really
6188     // correct, but it's good enough for this particular case.
6189     for (DeclContext::decl_iterator I = PrevNS->decls_begin(),
6190                                     E = PrevNS->decls_end(); I != E; ++I)
6191       if (NamedDecl *ND = dyn_cast<NamedDecl>(*I))
6192         PrevNS->getParent()->makeDeclVisibleInContext(ND);
6193     return;
6194   }
6195 
6196   if (PrevNS->isInline())
6197     // The user probably just forgot the 'inline', so suggest that it
6198     // be added back.
6199     S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
6200       << FixItHint::CreateInsertion(KeywordLoc, "inline ");
6201   else
6202     S.Diag(Loc, diag::err_inline_namespace_mismatch)
6203       << IsInline;
6204 
6205   S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
6206   *IsInline = PrevNS->isInline();
6207 }
6208 
6209 /// ActOnStartNamespaceDef - This is called at the start of a namespace
6210 /// definition.
6211 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
6212                                    SourceLocation InlineLoc,
6213                                    SourceLocation NamespaceLoc,
6214                                    SourceLocation IdentLoc,
6215                                    IdentifierInfo *II,
6216                                    SourceLocation LBrace,
6217                                    AttributeList *AttrList) {
6218   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
6219   // For anonymous namespace, take the location of the left brace.
6220   SourceLocation Loc = II ? IdentLoc : LBrace;
6221   bool IsInline = InlineLoc.isValid();
6222   bool IsInvalid = false;
6223   bool IsStd = false;
6224   bool AddToKnown = false;
6225   Scope *DeclRegionScope = NamespcScope->getParent();
6226 
6227   NamespaceDecl *PrevNS = 0;
6228   if (II) {
6229     // C++ [namespace.def]p2:
6230     //   The identifier in an original-namespace-definition shall not
6231     //   have been previously defined in the declarative region in
6232     //   which the original-namespace-definition appears. The
6233     //   identifier in an original-namespace-definition is the name of
6234     //   the namespace. Subsequently in that declarative region, it is
6235     //   treated as an original-namespace-name.
6236     //
6237     // Since namespace names are unique in their scope, and we don't
6238     // look through using directives, just look for any ordinary names.
6239 
6240     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
6241     Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
6242     Decl::IDNS_Namespace;
6243     NamedDecl *PrevDecl = 0;
6244     DeclContext::lookup_result R = CurContext->getRedeclContext()->lookup(II);
6245     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
6246          ++I) {
6247       if ((*I)->getIdentifierNamespace() & IDNS) {
6248         PrevDecl = *I;
6249         break;
6250       }
6251     }
6252 
6253     PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
6254 
6255     if (PrevNS) {
6256       // This is an extended namespace definition.
6257       if (IsInline != PrevNS->isInline())
6258         DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
6259                                         &IsInline, PrevNS);
6260     } else if (PrevDecl) {
6261       // This is an invalid name redefinition.
6262       Diag(Loc, diag::err_redefinition_different_kind)
6263         << II;
6264       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6265       IsInvalid = true;
6266       // Continue on to push Namespc as current DeclContext and return it.
6267     } else if (II->isStr("std") &&
6268                CurContext->getRedeclContext()->isTranslationUnit()) {
6269       // This is the first "real" definition of the namespace "std", so update
6270       // our cache of the "std" namespace to point at this definition.
6271       PrevNS = getStdNamespace();
6272       IsStd = true;
6273       AddToKnown = !IsInline;
6274     } else {
6275       // We've seen this namespace for the first time.
6276       AddToKnown = !IsInline;
6277     }
6278   } else {
6279     // Anonymous namespaces.
6280 
6281     // Determine whether the parent already has an anonymous namespace.
6282     DeclContext *Parent = CurContext->getRedeclContext();
6283     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6284       PrevNS = TU->getAnonymousNamespace();
6285     } else {
6286       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
6287       PrevNS = ND->getAnonymousNamespace();
6288     }
6289 
6290     if (PrevNS && IsInline != PrevNS->isInline())
6291       DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
6292                                       &IsInline, PrevNS);
6293   }
6294 
6295   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
6296                                                  StartLoc, Loc, II, PrevNS);
6297   if (IsInvalid)
6298     Namespc->setInvalidDecl();
6299 
6300   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
6301 
6302   // FIXME: Should we be merging attributes?
6303   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
6304     PushNamespaceVisibilityAttr(Attr, Loc);
6305 
6306   if (IsStd)
6307     StdNamespace = Namespc;
6308   if (AddToKnown)
6309     KnownNamespaces[Namespc] = false;
6310 
6311   if (II) {
6312     PushOnScopeChains(Namespc, DeclRegionScope);
6313   } else {
6314     // Link the anonymous namespace into its parent.
6315     DeclContext *Parent = CurContext->getRedeclContext();
6316     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6317       TU->setAnonymousNamespace(Namespc);
6318     } else {
6319       cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
6320     }
6321 
6322     CurContext->addDecl(Namespc);
6323 
6324     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
6325     //   behaves as if it were replaced by
6326     //     namespace unique { /* empty body */ }
6327     //     using namespace unique;
6328     //     namespace unique { namespace-body }
6329     //   where all occurrences of 'unique' in a translation unit are
6330     //   replaced by the same identifier and this identifier differs
6331     //   from all other identifiers in the entire program.
6332 
6333     // We just create the namespace with an empty name and then add an
6334     // implicit using declaration, just like the standard suggests.
6335     //
6336     // CodeGen enforces the "universally unique" aspect by giving all
6337     // declarations semantically contained within an anonymous
6338     // namespace internal linkage.
6339 
6340     if (!PrevNS) {
6341       UsingDirectiveDecl* UD
6342         = UsingDirectiveDecl::Create(Context, Parent,
6343                                      /* 'using' */ LBrace,
6344                                      /* 'namespace' */ SourceLocation(),
6345                                      /* qualifier */ NestedNameSpecifierLoc(),
6346                                      /* identifier */ SourceLocation(),
6347                                      Namespc,
6348                                      /* Ancestor */ Parent);
6349       UD->setImplicit();
6350       Parent->addDecl(UD);
6351     }
6352   }
6353 
6354   ActOnDocumentableDecl(Namespc);
6355 
6356   // Although we could have an invalid decl (i.e. the namespace name is a
6357   // redefinition), push it as current DeclContext and try to continue parsing.
6358   // FIXME: We should be able to push Namespc here, so that the each DeclContext
6359   // for the namespace has the declarations that showed up in that particular
6360   // namespace definition.
6361   PushDeclContext(NamespcScope, Namespc);
6362   return Namespc;
6363 }
6364 
6365 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
6366 /// is a namespace alias, returns the namespace it points to.
6367 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
6368   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
6369     return AD->getNamespace();
6370   return dyn_cast_or_null<NamespaceDecl>(D);
6371 }
6372 
6373 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
6374 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
6375 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
6376   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
6377   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
6378   Namespc->setRBraceLoc(RBrace);
6379   PopDeclContext();
6380   if (Namespc->hasAttr<VisibilityAttr>())
6381     PopPragmaVisibility(true, RBrace);
6382 }
6383 
6384 CXXRecordDecl *Sema::getStdBadAlloc() const {
6385   return cast_or_null<CXXRecordDecl>(
6386                                   StdBadAlloc.get(Context.getExternalSource()));
6387 }
6388 
6389 NamespaceDecl *Sema::getStdNamespace() const {
6390   return cast_or_null<NamespaceDecl>(
6391                                  StdNamespace.get(Context.getExternalSource()));
6392 }
6393 
6394 /// \brief Retrieve the special "std" namespace, which may require us to
6395 /// implicitly define the namespace.
6396 NamespaceDecl *Sema::getOrCreateStdNamespace() {
6397   if (!StdNamespace) {
6398     // The "std" namespace has not yet been defined, so build one implicitly.
6399     StdNamespace = NamespaceDecl::Create(Context,
6400                                          Context.getTranslationUnitDecl(),
6401                                          /*Inline=*/false,
6402                                          SourceLocation(), SourceLocation(),
6403                                          &PP.getIdentifierTable().get("std"),
6404                                          /*PrevDecl=*/0);
6405     getStdNamespace()->setImplicit(true);
6406   }
6407 
6408   return getStdNamespace();
6409 }
6410 
6411 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
6412   assert(getLangOpts().CPlusPlus &&
6413          "Looking for std::initializer_list outside of C++.");
6414 
6415   // We're looking for implicit instantiations of
6416   // template <typename E> class std::initializer_list.
6417 
6418   if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
6419     return false;
6420 
6421   ClassTemplateDecl *Template = 0;
6422   const TemplateArgument *Arguments = 0;
6423 
6424   if (const RecordType *RT = Ty->getAs<RecordType>()) {
6425 
6426     ClassTemplateSpecializationDecl *Specialization =
6427         dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
6428     if (!Specialization)
6429       return false;
6430 
6431     Template = Specialization->getSpecializedTemplate();
6432     Arguments = Specialization->getTemplateArgs().data();
6433   } else if (const TemplateSpecializationType *TST =
6434                  Ty->getAs<TemplateSpecializationType>()) {
6435     Template = dyn_cast_or_null<ClassTemplateDecl>(
6436         TST->getTemplateName().getAsTemplateDecl());
6437     Arguments = TST->getArgs();
6438   }
6439   if (!Template)
6440     return false;
6441 
6442   if (!StdInitializerList) {
6443     // Haven't recognized std::initializer_list yet, maybe this is it.
6444     CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
6445     if (TemplateClass->getIdentifier() !=
6446             &PP.getIdentifierTable().get("initializer_list") ||
6447         !getStdNamespace()->InEnclosingNamespaceSetOf(
6448             TemplateClass->getDeclContext()))
6449       return false;
6450     // This is a template called std::initializer_list, but is it the right
6451     // template?
6452     TemplateParameterList *Params = Template->getTemplateParameters();
6453     if (Params->getMinRequiredArguments() != 1)
6454       return false;
6455     if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
6456       return false;
6457 
6458     // It's the right template.
6459     StdInitializerList = Template;
6460   }
6461 
6462   if (Template != StdInitializerList)
6463     return false;
6464 
6465   // This is an instance of std::initializer_list. Find the argument type.
6466   if (Element)
6467     *Element = Arguments[0].getAsType();
6468   return true;
6469 }
6470 
6471 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
6472   NamespaceDecl *Std = S.getStdNamespace();
6473   if (!Std) {
6474     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6475     return 0;
6476   }
6477 
6478   LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
6479                       Loc, Sema::LookupOrdinaryName);
6480   if (!S.LookupQualifiedName(Result, Std)) {
6481     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6482     return 0;
6483   }
6484   ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
6485   if (!Template) {
6486     Result.suppressDiagnostics();
6487     // We found something weird. Complain about the first thing we found.
6488     NamedDecl *Found = *Result.begin();
6489     S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
6490     return 0;
6491   }
6492 
6493   // We found some template called std::initializer_list. Now verify that it's
6494   // correct.
6495   TemplateParameterList *Params = Template->getTemplateParameters();
6496   if (Params->getMinRequiredArguments() != 1 ||
6497       !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6498     S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
6499     return 0;
6500   }
6501 
6502   return Template;
6503 }
6504 
6505 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
6506   if (!StdInitializerList) {
6507     StdInitializerList = LookupStdInitializerList(*this, Loc);
6508     if (!StdInitializerList)
6509       return QualType();
6510   }
6511 
6512   TemplateArgumentListInfo Args(Loc, Loc);
6513   Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
6514                                        Context.getTrivialTypeSourceInfo(Element,
6515                                                                         Loc)));
6516   return Context.getCanonicalType(
6517       CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
6518 }
6519 
6520 bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
6521   // C++ [dcl.init.list]p2:
6522   //   A constructor is an initializer-list constructor if its first parameter
6523   //   is of type std::initializer_list<E> or reference to possibly cv-qualified
6524   //   std::initializer_list<E> for some type E, and either there are no other
6525   //   parameters or else all other parameters have default arguments.
6526   if (Ctor->getNumParams() < 1 ||
6527       (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
6528     return false;
6529 
6530   QualType ArgType = Ctor->getParamDecl(0)->getType();
6531   if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
6532     ArgType = RT->getPointeeType().getUnqualifiedType();
6533 
6534   return isStdInitializerList(ArgType, 0);
6535 }
6536 
6537 /// \brief Determine whether a using statement is in a context where it will be
6538 /// apply in all contexts.
6539 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
6540   switch (CurContext->getDeclKind()) {
6541     case Decl::TranslationUnit:
6542       return true;
6543     case Decl::LinkageSpec:
6544       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
6545     default:
6546       return false;
6547   }
6548 }
6549 
6550 namespace {
6551 
6552 // Callback to only accept typo corrections that are namespaces.
6553 class NamespaceValidatorCCC : public CorrectionCandidateCallback {
6554  public:
6555   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
6556     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
6557       return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
6558     }
6559     return false;
6560   }
6561 };
6562 
6563 }
6564 
6565 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
6566                                        CXXScopeSpec &SS,
6567                                        SourceLocation IdentLoc,
6568                                        IdentifierInfo *Ident) {
6569   NamespaceValidatorCCC Validator;
6570   R.clear();
6571   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
6572                                                R.getLookupKind(), Sc, &SS,
6573                                                Validator)) {
6574     std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
6575     std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
6576     if (DeclContext *DC = S.computeDeclContext(SS, false))
6577       S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
6578         << Ident << DC << CorrectedQuotedStr << SS.getRange()
6579         << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
6580                                         CorrectedStr);
6581     else
6582       S.Diag(IdentLoc, diag::err_using_directive_suggest)
6583         << Ident << CorrectedQuotedStr
6584         << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
6585 
6586     S.Diag(Corrected.getCorrectionDecl()->getLocation(),
6587          diag::note_namespace_defined_here) << CorrectedQuotedStr;
6588 
6589     R.addDecl(Corrected.getCorrectionDecl());
6590     return true;
6591   }
6592   return false;
6593 }
6594 
6595 Decl *Sema::ActOnUsingDirective(Scope *S,
6596                                           SourceLocation UsingLoc,
6597                                           SourceLocation NamespcLoc,
6598                                           CXXScopeSpec &SS,
6599                                           SourceLocation IdentLoc,
6600                                           IdentifierInfo *NamespcName,
6601                                           AttributeList *AttrList) {
6602   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
6603   assert(NamespcName && "Invalid NamespcName.");
6604   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
6605 
6606   // This can only happen along a recovery path.
6607   while (S->getFlags() & Scope::TemplateParamScope)
6608     S = S->getParent();
6609   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6610 
6611   UsingDirectiveDecl *UDir = 0;
6612   NestedNameSpecifier *Qualifier = 0;
6613   if (SS.isSet())
6614     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
6615 
6616   // Lookup namespace name.
6617   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
6618   LookupParsedName(R, S, &SS);
6619   if (R.isAmbiguous())
6620     return 0;
6621 
6622   if (R.empty()) {
6623     R.clear();
6624     // Allow "using namespace std;" or "using namespace ::std;" even if
6625     // "std" hasn't been defined yet, for GCC compatibility.
6626     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
6627         NamespcName->isStr("std")) {
6628       Diag(IdentLoc, diag::ext_using_undefined_std);
6629       R.addDecl(getOrCreateStdNamespace());
6630       R.resolveKind();
6631     }
6632     // Otherwise, attempt typo correction.
6633     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
6634   }
6635 
6636   if (!R.empty()) {
6637     NamedDecl *Named = R.getFoundDecl();
6638     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
6639         && "expected namespace decl");
6640     // C++ [namespace.udir]p1:
6641     //   A using-directive specifies that the names in the nominated
6642     //   namespace can be used in the scope in which the
6643     //   using-directive appears after the using-directive. During
6644     //   unqualified name lookup (3.4.1), the names appear as if they
6645     //   were declared in the nearest enclosing namespace which
6646     //   contains both the using-directive and the nominated
6647     //   namespace. [Note: in this context, "contains" means "contains
6648     //   directly or indirectly". ]
6649 
6650     // Find enclosing context containing both using-directive and
6651     // nominated namespace.
6652     NamespaceDecl *NS = getNamespaceDecl(Named);
6653     DeclContext *CommonAncestor = cast<DeclContext>(NS);
6654     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
6655       CommonAncestor = CommonAncestor->getParent();
6656 
6657     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
6658                                       SS.getWithLocInContext(Context),
6659                                       IdentLoc, Named, CommonAncestor);
6660 
6661     if (IsUsingDirectiveInToplevelContext(CurContext) &&
6662         !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
6663       Diag(IdentLoc, diag::warn_using_directive_in_header);
6664     }
6665 
6666     PushUsingDirective(S, UDir);
6667   } else {
6668     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
6669   }
6670 
6671   if (UDir)
6672     ProcessDeclAttributeList(S, UDir, AttrList);
6673 
6674   return UDir;
6675 }
6676 
6677 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
6678   // If the scope has an associated entity and the using directive is at
6679   // namespace or translation unit scope, add the UsingDirectiveDecl into
6680   // its lookup structure so qualified name lookup can find it.
6681   DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
6682   if (Ctx && !Ctx->isFunctionOrMethod())
6683     Ctx->addDecl(UDir);
6684   else
6685     // Otherwise, it is at block sope. The using-directives will affect lookup
6686     // only to the end of the scope.
6687     S->PushUsingDirective(UDir);
6688 }
6689 
6690 
6691 Decl *Sema::ActOnUsingDeclaration(Scope *S,
6692                                   AccessSpecifier AS,
6693                                   bool HasUsingKeyword,
6694                                   SourceLocation UsingLoc,
6695                                   CXXScopeSpec &SS,
6696                                   UnqualifiedId &Name,
6697                                   AttributeList *AttrList,
6698                                   bool IsTypeName,
6699                                   SourceLocation TypenameLoc) {
6700   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6701 
6702   switch (Name.getKind()) {
6703   case UnqualifiedId::IK_ImplicitSelfParam:
6704   case UnqualifiedId::IK_Identifier:
6705   case UnqualifiedId::IK_OperatorFunctionId:
6706   case UnqualifiedId::IK_LiteralOperatorId:
6707   case UnqualifiedId::IK_ConversionFunctionId:
6708     break;
6709 
6710   case UnqualifiedId::IK_ConstructorName:
6711   case UnqualifiedId::IK_ConstructorTemplateId:
6712     // C++11 inheriting constructors.
6713     Diag(Name.getLocStart(),
6714          getLangOpts().CPlusPlus11 ?
6715            diag::warn_cxx98_compat_using_decl_constructor :
6716            diag::err_using_decl_constructor)
6717       << SS.getRange();
6718 
6719     if (getLangOpts().CPlusPlus11) break;
6720 
6721     return 0;
6722 
6723   case UnqualifiedId::IK_DestructorName:
6724     Diag(Name.getLocStart(), diag::err_using_decl_destructor)
6725       << SS.getRange();
6726     return 0;
6727 
6728   case UnqualifiedId::IK_TemplateId:
6729     Diag(Name.getLocStart(), diag::err_using_decl_template_id)
6730       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
6731     return 0;
6732   }
6733 
6734   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
6735   DeclarationName TargetName = TargetNameInfo.getName();
6736   if (!TargetName)
6737     return 0;
6738 
6739   // Warn about access declarations.
6740   // TODO: store that the declaration was written without 'using' and
6741   // talk about access decls instead of using decls in the
6742   // diagnostics.
6743   if (!HasUsingKeyword) {
6744     UsingLoc = Name.getLocStart();
6745 
6746     Diag(UsingLoc,
6747          getLangOpts().CPlusPlus11 ? diag::err_access_decl
6748                                    : diag::warn_access_decl_deprecated)
6749       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
6750   }
6751 
6752   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
6753       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
6754     return 0;
6755 
6756   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
6757                                         TargetNameInfo, AttrList,
6758                                         /* IsInstantiation */ false,
6759                                         IsTypeName, TypenameLoc);
6760   if (UD)
6761     PushOnScopeChains(UD, S, /*AddToContext*/ false);
6762 
6763   return UD;
6764 }
6765 
6766 /// \brief Determine whether a using declaration considers the given
6767 /// declarations as "equivalent", e.g., if they are redeclarations of
6768 /// the same entity or are both typedefs of the same type.
6769 static bool
6770 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
6771                          bool &SuppressRedeclaration) {
6772   if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
6773     SuppressRedeclaration = false;
6774     return true;
6775   }
6776 
6777   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
6778     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
6779       SuppressRedeclaration = true;
6780       return Context.hasSameType(TD1->getUnderlyingType(),
6781                                  TD2->getUnderlyingType());
6782     }
6783 
6784   return false;
6785 }
6786 
6787 
6788 /// Determines whether to create a using shadow decl for a particular
6789 /// decl, given the set of decls existing prior to this using lookup.
6790 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
6791                                 const LookupResult &Previous) {
6792   // Diagnose finding a decl which is not from a base class of the
6793   // current class.  We do this now because there are cases where this
6794   // function will silently decide not to build a shadow decl, which
6795   // will pre-empt further diagnostics.
6796   //
6797   // We don't need to do this in C++0x because we do the check once on
6798   // the qualifier.
6799   //
6800   // FIXME: diagnose the following if we care enough:
6801   //   struct A { int foo; };
6802   //   struct B : A { using A::foo; };
6803   //   template <class T> struct C : A {};
6804   //   template <class T> struct D : C<T> { using B::foo; } // <---
6805   // This is invalid (during instantiation) in C++03 because B::foo
6806   // resolves to the using decl in B, which is not a base class of D<T>.
6807   // We can't diagnose it immediately because C<T> is an unknown
6808   // specialization.  The UsingShadowDecl in D<T> then points directly
6809   // to A::foo, which will look well-formed when we instantiate.
6810   // The right solution is to not collapse the shadow-decl chain.
6811   if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
6812     DeclContext *OrigDC = Orig->getDeclContext();
6813 
6814     // Handle enums and anonymous structs.
6815     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
6816     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
6817     while (OrigRec->isAnonymousStructOrUnion())
6818       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
6819 
6820     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
6821       if (OrigDC == CurContext) {
6822         Diag(Using->getLocation(),
6823              diag::err_using_decl_nested_name_specifier_is_current_class)
6824           << Using->getQualifierLoc().getSourceRange();
6825         Diag(Orig->getLocation(), diag::note_using_decl_target);
6826         return true;
6827       }
6828 
6829       Diag(Using->getQualifierLoc().getBeginLoc(),
6830            diag::err_using_decl_nested_name_specifier_is_not_base_class)
6831         << Using->getQualifier()
6832         << cast<CXXRecordDecl>(CurContext)
6833         << Using->getQualifierLoc().getSourceRange();
6834       Diag(Orig->getLocation(), diag::note_using_decl_target);
6835       return true;
6836     }
6837   }
6838 
6839   if (Previous.empty()) return false;
6840 
6841   NamedDecl *Target = Orig;
6842   if (isa<UsingShadowDecl>(Target))
6843     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6844 
6845   // If the target happens to be one of the previous declarations, we
6846   // don't have a conflict.
6847   //
6848   // FIXME: but we might be increasing its access, in which case we
6849   // should redeclare it.
6850   NamedDecl *NonTag = 0, *Tag = 0;
6851   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
6852          I != E; ++I) {
6853     NamedDecl *D = (*I)->getUnderlyingDecl();
6854     bool Result;
6855     if (IsEquivalentForUsingDecl(Context, D, Target, Result))
6856       return Result;
6857 
6858     (isa<TagDecl>(D) ? Tag : NonTag) = D;
6859   }
6860 
6861   if (Target->isFunctionOrFunctionTemplate()) {
6862     FunctionDecl *FD;
6863     if (isa<FunctionTemplateDecl>(Target))
6864       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
6865     else
6866       FD = cast<FunctionDecl>(Target);
6867 
6868     NamedDecl *OldDecl = 0;
6869     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
6870     case Ovl_Overload:
6871       return false;
6872 
6873     case Ovl_NonFunction:
6874       Diag(Using->getLocation(), diag::err_using_decl_conflict);
6875       break;
6876 
6877     // We found a decl with the exact signature.
6878     case Ovl_Match:
6879       // If we're in a record, we want to hide the target, so we
6880       // return true (without a diagnostic) to tell the caller not to
6881       // build a shadow decl.
6882       if (CurContext->isRecord())
6883         return true;
6884 
6885       // If we're not in a record, this is an error.
6886       Diag(Using->getLocation(), diag::err_using_decl_conflict);
6887       break;
6888     }
6889 
6890     Diag(Target->getLocation(), diag::note_using_decl_target);
6891     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
6892     return true;
6893   }
6894 
6895   // Target is not a function.
6896 
6897   if (isa<TagDecl>(Target)) {
6898     // No conflict between a tag and a non-tag.
6899     if (!Tag) return false;
6900 
6901     Diag(Using->getLocation(), diag::err_using_decl_conflict);
6902     Diag(Target->getLocation(), diag::note_using_decl_target);
6903     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
6904     return true;
6905   }
6906 
6907   // No conflict between a tag and a non-tag.
6908   if (!NonTag) return false;
6909 
6910   Diag(Using->getLocation(), diag::err_using_decl_conflict);
6911   Diag(Target->getLocation(), diag::note_using_decl_target);
6912   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
6913   return true;
6914 }
6915 
6916 /// Builds a shadow declaration corresponding to a 'using' declaration.
6917 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
6918                                             UsingDecl *UD,
6919                                             NamedDecl *Orig) {
6920 
6921   // If we resolved to another shadow declaration, just coalesce them.
6922   NamedDecl *Target = Orig;
6923   if (isa<UsingShadowDecl>(Target)) {
6924     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6925     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
6926   }
6927 
6928   UsingShadowDecl *Shadow
6929     = UsingShadowDecl::Create(Context, CurContext,
6930                               UD->getLocation(), UD, Target);
6931   UD->addShadowDecl(Shadow);
6932 
6933   Shadow->setAccess(UD->getAccess());
6934   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
6935     Shadow->setInvalidDecl();
6936 
6937   if (S)
6938     PushOnScopeChains(Shadow, S);
6939   else
6940     CurContext->addDecl(Shadow);
6941 
6942 
6943   return Shadow;
6944 }
6945 
6946 /// Hides a using shadow declaration.  This is required by the current
6947 /// using-decl implementation when a resolvable using declaration in a
6948 /// class is followed by a declaration which would hide or override
6949 /// one or more of the using decl's targets; for example:
6950 ///
6951 ///   struct Base { void foo(int); };
6952 ///   struct Derived : Base {
6953 ///     using Base::foo;
6954 ///     void foo(int);
6955 ///   };
6956 ///
6957 /// The governing language is C++03 [namespace.udecl]p12:
6958 ///
6959 ///   When a using-declaration brings names from a base class into a
6960 ///   derived class scope, member functions in the derived class
6961 ///   override and/or hide member functions with the same name and
6962 ///   parameter types in a base class (rather than conflicting).
6963 ///
6964 /// There are two ways to implement this:
6965 ///   (1) optimistically create shadow decls when they're not hidden
6966 ///       by existing declarations, or
6967 ///   (2) don't create any shadow decls (or at least don't make them
6968 ///       visible) until we've fully parsed/instantiated the class.
6969 /// The problem with (1) is that we might have to retroactively remove
6970 /// a shadow decl, which requires several O(n) operations because the
6971 /// decl structures are (very reasonably) not designed for removal.
6972 /// (2) avoids this but is very fiddly and phase-dependent.
6973 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
6974   if (Shadow->getDeclName().getNameKind() ==
6975         DeclarationName::CXXConversionFunctionName)
6976     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
6977 
6978   // Remove it from the DeclContext...
6979   Shadow->getDeclContext()->removeDecl(Shadow);
6980 
6981   // ...and the scope, if applicable...
6982   if (S) {
6983     S->RemoveDecl(Shadow);
6984     IdResolver.RemoveDecl(Shadow);
6985   }
6986 
6987   // ...and the using decl.
6988   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
6989 
6990   // TODO: complain somehow if Shadow was used.  It shouldn't
6991   // be possible for this to happen, because...?
6992 }
6993 
6994 /// Builds a using declaration.
6995 ///
6996 /// \param IsInstantiation - Whether this call arises from an
6997 ///   instantiation of an unresolved using declaration.  We treat
6998 ///   the lookup differently for these declarations.
6999 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
7000                                        SourceLocation UsingLoc,
7001                                        CXXScopeSpec &SS,
7002                                        const DeclarationNameInfo &NameInfo,
7003                                        AttributeList *AttrList,
7004                                        bool IsInstantiation,
7005                                        bool IsTypeName,
7006                                        SourceLocation TypenameLoc) {
7007   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
7008   SourceLocation IdentLoc = NameInfo.getLoc();
7009   assert(IdentLoc.isValid() && "Invalid TargetName location.");
7010 
7011   // FIXME: We ignore attributes for now.
7012 
7013   if (SS.isEmpty()) {
7014     Diag(IdentLoc, diag::err_using_requires_qualname);
7015     return 0;
7016   }
7017 
7018   // Do the redeclaration lookup in the current scope.
7019   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
7020                         ForRedeclaration);
7021   Previous.setHideTags(false);
7022   if (S) {
7023     LookupName(Previous, S);
7024 
7025     // It is really dumb that we have to do this.
7026     LookupResult::Filter F = Previous.makeFilter();
7027     while (F.hasNext()) {
7028       NamedDecl *D = F.next();
7029       if (!isDeclInScope(D, CurContext, S))
7030         F.erase();
7031     }
7032     F.done();
7033   } else {
7034     assert(IsInstantiation && "no scope in non-instantiation");
7035     assert(CurContext->isRecord() && "scope not record in instantiation");
7036     LookupQualifiedName(Previous, CurContext);
7037   }
7038 
7039   // Check for invalid redeclarations.
7040   if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
7041     return 0;
7042 
7043   // Check for bad qualifiers.
7044   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
7045     return 0;
7046 
7047   DeclContext *LookupContext = computeDeclContext(SS);
7048   NamedDecl *D;
7049   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
7050   if (!LookupContext) {
7051     if (IsTypeName) {
7052       // FIXME: not all declaration name kinds are legal here
7053       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
7054                                               UsingLoc, TypenameLoc,
7055                                               QualifierLoc,
7056                                               IdentLoc, NameInfo.getName());
7057     } else {
7058       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
7059                                            QualifierLoc, NameInfo);
7060     }
7061   } else {
7062     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
7063                           NameInfo, IsTypeName);
7064   }
7065   D->setAccess(AS);
7066   CurContext->addDecl(D);
7067 
7068   if (!LookupContext) return D;
7069   UsingDecl *UD = cast<UsingDecl>(D);
7070 
7071   if (RequireCompleteDeclContext(SS, LookupContext)) {
7072     UD->setInvalidDecl();
7073     return UD;
7074   }
7075 
7076   // The normal rules do not apply to inheriting constructor declarations.
7077   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
7078     if (CheckInheritingConstructorUsingDecl(UD))
7079       UD->setInvalidDecl();
7080     return UD;
7081   }
7082 
7083   // Otherwise, look up the target name.
7084 
7085   LookupResult R(*this, NameInfo, LookupOrdinaryName);
7086 
7087   // Unlike most lookups, we don't always want to hide tag
7088   // declarations: tag names are visible through the using declaration
7089   // even if hidden by ordinary names, *except* in a dependent context
7090   // where it's important for the sanity of two-phase lookup.
7091   if (!IsInstantiation)
7092     R.setHideTags(false);
7093 
7094   // For the purposes of this lookup, we have a base object type
7095   // equal to that of the current context.
7096   if (CurContext->isRecord()) {
7097     R.setBaseObjectType(
7098                    Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
7099   }
7100 
7101   LookupQualifiedName(R, LookupContext);
7102 
7103   if (R.empty()) {
7104     Diag(IdentLoc, diag::err_no_member)
7105       << NameInfo.getName() << LookupContext << SS.getRange();
7106     UD->setInvalidDecl();
7107     return UD;
7108   }
7109 
7110   if (R.isAmbiguous()) {
7111     UD->setInvalidDecl();
7112     return UD;
7113   }
7114 
7115   if (IsTypeName) {
7116     // If we asked for a typename and got a non-type decl, error out.
7117     if (!R.getAsSingle<TypeDecl>()) {
7118       Diag(IdentLoc, diag::err_using_typename_non_type);
7119       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
7120         Diag((*I)->getUnderlyingDecl()->getLocation(),
7121              diag::note_using_decl_target);
7122       UD->setInvalidDecl();
7123       return UD;
7124     }
7125   } else {
7126     // If we asked for a non-typename and we got a type, error out,
7127     // but only if this is an instantiation of an unresolved using
7128     // decl.  Otherwise just silently find the type name.
7129     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
7130       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
7131       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
7132       UD->setInvalidDecl();
7133       return UD;
7134     }
7135   }
7136 
7137   // C++0x N2914 [namespace.udecl]p6:
7138   // A using-declaration shall not name a namespace.
7139   if (R.getAsSingle<NamespaceDecl>()) {
7140     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
7141       << SS.getRange();
7142     UD->setInvalidDecl();
7143     return UD;
7144   }
7145 
7146   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
7147     if (!CheckUsingShadowDecl(UD, *I, Previous))
7148       BuildUsingShadowDecl(S, UD, *I);
7149   }
7150 
7151   return UD;
7152 }
7153 
7154 /// Additional checks for a using declaration referring to a constructor name.
7155 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
7156   assert(!UD->isTypeName() && "expecting a constructor name");
7157 
7158   const Type *SourceType = UD->getQualifier()->getAsType();
7159   assert(SourceType &&
7160          "Using decl naming constructor doesn't have type in scope spec.");
7161   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
7162 
7163   // Check whether the named type is a direct base class.
7164   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
7165   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
7166   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
7167        BaseIt != BaseE; ++BaseIt) {
7168     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
7169     if (CanonicalSourceType == BaseType)
7170       break;
7171     if (BaseIt->getType()->isDependentType())
7172       break;
7173   }
7174 
7175   if (BaseIt == BaseE) {
7176     // Did not find SourceType in the bases.
7177     Diag(UD->getUsingLocation(),
7178          diag::err_using_decl_constructor_not_in_direct_base)
7179       << UD->getNameInfo().getSourceRange()
7180       << QualType(SourceType, 0) << TargetClass;
7181     return true;
7182   }
7183 
7184   if (!CurContext->isDependentContext())
7185     BaseIt->setInheritConstructors();
7186 
7187   return false;
7188 }
7189 
7190 /// Checks that the given using declaration is not an invalid
7191 /// redeclaration.  Note that this is checking only for the using decl
7192 /// itself, not for any ill-formedness among the UsingShadowDecls.
7193 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
7194                                        bool isTypeName,
7195                                        const CXXScopeSpec &SS,
7196                                        SourceLocation NameLoc,
7197                                        const LookupResult &Prev) {
7198   // C++03 [namespace.udecl]p8:
7199   // C++0x [namespace.udecl]p10:
7200   //   A using-declaration is a declaration and can therefore be used
7201   //   repeatedly where (and only where) multiple declarations are
7202   //   allowed.
7203   //
7204   // That's in non-member contexts.
7205   if (!CurContext->getRedeclContext()->isRecord())
7206     return false;
7207 
7208   NestedNameSpecifier *Qual
7209     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
7210 
7211   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
7212     NamedDecl *D = *I;
7213 
7214     bool DTypename;
7215     NestedNameSpecifier *DQual;
7216     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
7217       DTypename = UD->isTypeName();
7218       DQual = UD->getQualifier();
7219     } else if (UnresolvedUsingValueDecl *UD
7220                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
7221       DTypename = false;
7222       DQual = UD->getQualifier();
7223     } else if (UnresolvedUsingTypenameDecl *UD
7224                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
7225       DTypename = true;
7226       DQual = UD->getQualifier();
7227     } else continue;
7228 
7229     // using decls differ if one says 'typename' and the other doesn't.
7230     // FIXME: non-dependent using decls?
7231     if (isTypeName != DTypename) continue;
7232 
7233     // using decls differ if they name different scopes (but note that
7234     // template instantiation can cause this check to trigger when it
7235     // didn't before instantiation).
7236     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
7237         Context.getCanonicalNestedNameSpecifier(DQual))
7238       continue;
7239 
7240     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
7241     Diag(D->getLocation(), diag::note_using_decl) << 1;
7242     return true;
7243   }
7244 
7245   return false;
7246 }
7247 
7248 
7249 /// Checks that the given nested-name qualifier used in a using decl
7250 /// in the current context is appropriately related to the current
7251 /// scope.  If an error is found, diagnoses it and returns true.
7252 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
7253                                    const CXXScopeSpec &SS,
7254                                    SourceLocation NameLoc) {
7255   DeclContext *NamedContext = computeDeclContext(SS);
7256 
7257   if (!CurContext->isRecord()) {
7258     // C++03 [namespace.udecl]p3:
7259     // C++0x [namespace.udecl]p8:
7260     //   A using-declaration for a class member shall be a member-declaration.
7261 
7262     // If we weren't able to compute a valid scope, it must be a
7263     // dependent class scope.
7264     if (!NamedContext || NamedContext->isRecord()) {
7265       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
7266         << SS.getRange();
7267       return true;
7268     }
7269 
7270     // Otherwise, everything is known to be fine.
7271     return false;
7272   }
7273 
7274   // The current scope is a record.
7275 
7276   // If the named context is dependent, we can't decide much.
7277   if (!NamedContext) {
7278     // FIXME: in C++0x, we can diagnose if we can prove that the
7279     // nested-name-specifier does not refer to a base class, which is
7280     // still possible in some cases.
7281 
7282     // Otherwise we have to conservatively report that things might be
7283     // okay.
7284     return false;
7285   }
7286 
7287   if (!NamedContext->isRecord()) {
7288     // Ideally this would point at the last name in the specifier,
7289     // but we don't have that level of source info.
7290     Diag(SS.getRange().getBegin(),
7291          diag::err_using_decl_nested_name_specifier_is_not_class)
7292       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
7293     return true;
7294   }
7295 
7296   if (!NamedContext->isDependentContext() &&
7297       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
7298     return true;
7299 
7300   if (getLangOpts().CPlusPlus11) {
7301     // C++0x [namespace.udecl]p3:
7302     //   In a using-declaration used as a member-declaration, the
7303     //   nested-name-specifier shall name a base class of the class
7304     //   being defined.
7305 
7306     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
7307                                  cast<CXXRecordDecl>(NamedContext))) {
7308       if (CurContext == NamedContext) {
7309         Diag(NameLoc,
7310              diag::err_using_decl_nested_name_specifier_is_current_class)
7311           << SS.getRange();
7312         return true;
7313       }
7314 
7315       Diag(SS.getRange().getBegin(),
7316            diag::err_using_decl_nested_name_specifier_is_not_base_class)
7317         << (NestedNameSpecifier*) SS.getScopeRep()
7318         << cast<CXXRecordDecl>(CurContext)
7319         << SS.getRange();
7320       return true;
7321     }
7322 
7323     return false;
7324   }
7325 
7326   // C++03 [namespace.udecl]p4:
7327   //   A using-declaration used as a member-declaration shall refer
7328   //   to a member of a base class of the class being defined [etc.].
7329 
7330   // Salient point: SS doesn't have to name a base class as long as
7331   // lookup only finds members from base classes.  Therefore we can
7332   // diagnose here only if we can prove that that can't happen,
7333   // i.e. if the class hierarchies provably don't intersect.
7334 
7335   // TODO: it would be nice if "definitely valid" results were cached
7336   // in the UsingDecl and UsingShadowDecl so that these checks didn't
7337   // need to be repeated.
7338 
7339   struct UserData {
7340     llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
7341 
7342     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
7343       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7344       Data->Bases.insert(Base);
7345       return true;
7346     }
7347 
7348     bool hasDependentBases(const CXXRecordDecl *Class) {
7349       return !Class->forallBases(collect, this);
7350     }
7351 
7352     /// Returns true if the base is dependent or is one of the
7353     /// accumulated base classes.
7354     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
7355       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7356       return !Data->Bases.count(Base);
7357     }
7358 
7359     bool mightShareBases(const CXXRecordDecl *Class) {
7360       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
7361     }
7362   };
7363 
7364   UserData Data;
7365 
7366   // Returns false if we find a dependent base.
7367   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
7368     return false;
7369 
7370   // Returns false if the class has a dependent base or if it or one
7371   // of its bases is present in the base set of the current context.
7372   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
7373     return false;
7374 
7375   Diag(SS.getRange().getBegin(),
7376        diag::err_using_decl_nested_name_specifier_is_not_base_class)
7377     << (NestedNameSpecifier*) SS.getScopeRep()
7378     << cast<CXXRecordDecl>(CurContext)
7379     << SS.getRange();
7380 
7381   return true;
7382 }
7383 
7384 Decl *Sema::ActOnAliasDeclaration(Scope *S,
7385                                   AccessSpecifier AS,
7386                                   MultiTemplateParamsArg TemplateParamLists,
7387                                   SourceLocation UsingLoc,
7388                                   UnqualifiedId &Name,
7389                                   AttributeList *AttrList,
7390                                   TypeResult Type) {
7391   // Skip up to the relevant declaration scope.
7392   while (S->getFlags() & Scope::TemplateParamScope)
7393     S = S->getParent();
7394   assert((S->getFlags() & Scope::DeclScope) &&
7395          "got alias-declaration outside of declaration scope");
7396 
7397   if (Type.isInvalid())
7398     return 0;
7399 
7400   bool Invalid = false;
7401   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
7402   TypeSourceInfo *TInfo = 0;
7403   GetTypeFromParser(Type.get(), &TInfo);
7404 
7405   if (DiagnoseClassNameShadow(CurContext, NameInfo))
7406     return 0;
7407 
7408   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
7409                                       UPPC_DeclarationType)) {
7410     Invalid = true;
7411     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
7412                                              TInfo->getTypeLoc().getBeginLoc());
7413   }
7414 
7415   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
7416   LookupName(Previous, S);
7417 
7418   // Warn about shadowing the name of a template parameter.
7419   if (Previous.isSingleResult() &&
7420       Previous.getFoundDecl()->isTemplateParameter()) {
7421     DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
7422     Previous.clear();
7423   }
7424 
7425   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
7426          "name in alias declaration must be an identifier");
7427   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
7428                                                Name.StartLocation,
7429                                                Name.Identifier, TInfo);
7430 
7431   NewTD->setAccess(AS);
7432 
7433   if (Invalid)
7434     NewTD->setInvalidDecl();
7435 
7436   ProcessDeclAttributeList(S, NewTD, AttrList);
7437 
7438   CheckTypedefForVariablyModifiedType(S, NewTD);
7439   Invalid |= NewTD->isInvalidDecl();
7440 
7441   bool Redeclaration = false;
7442 
7443   NamedDecl *NewND;
7444   if (TemplateParamLists.size()) {
7445     TypeAliasTemplateDecl *OldDecl = 0;
7446     TemplateParameterList *OldTemplateParams = 0;
7447 
7448     if (TemplateParamLists.size() != 1) {
7449       Diag(UsingLoc, diag::err_alias_template_extra_headers)
7450         << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
7451          TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
7452     }
7453     TemplateParameterList *TemplateParams = TemplateParamLists[0];
7454 
7455     // Only consider previous declarations in the same scope.
7456     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
7457                          /*ExplicitInstantiationOrSpecialization*/false);
7458     if (!Previous.empty()) {
7459       Redeclaration = true;
7460 
7461       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
7462       if (!OldDecl && !Invalid) {
7463         Diag(UsingLoc, diag::err_redefinition_different_kind)
7464           << Name.Identifier;
7465 
7466         NamedDecl *OldD = Previous.getRepresentativeDecl();
7467         if (OldD->getLocation().isValid())
7468           Diag(OldD->getLocation(), diag::note_previous_definition);
7469 
7470         Invalid = true;
7471       }
7472 
7473       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
7474         if (TemplateParameterListsAreEqual(TemplateParams,
7475                                            OldDecl->getTemplateParameters(),
7476                                            /*Complain=*/true,
7477                                            TPL_TemplateMatch))
7478           OldTemplateParams = OldDecl->getTemplateParameters();
7479         else
7480           Invalid = true;
7481 
7482         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
7483         if (!Invalid &&
7484             !Context.hasSameType(OldTD->getUnderlyingType(),
7485                                  NewTD->getUnderlyingType())) {
7486           // FIXME: The C++0x standard does not clearly say this is ill-formed,
7487           // but we can't reasonably accept it.
7488           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
7489             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
7490           if (OldTD->getLocation().isValid())
7491             Diag(OldTD->getLocation(), diag::note_previous_definition);
7492           Invalid = true;
7493         }
7494       }
7495     }
7496 
7497     // Merge any previous default template arguments into our parameters,
7498     // and check the parameter list.
7499     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
7500                                    TPC_TypeAliasTemplate))
7501       return 0;
7502 
7503     TypeAliasTemplateDecl *NewDecl =
7504       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
7505                                     Name.Identifier, TemplateParams,
7506                                     NewTD);
7507 
7508     NewDecl->setAccess(AS);
7509 
7510     if (Invalid)
7511       NewDecl->setInvalidDecl();
7512     else if (OldDecl)
7513       NewDecl->setPreviousDeclaration(OldDecl);
7514 
7515     NewND = NewDecl;
7516   } else {
7517     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
7518     NewND = NewTD;
7519   }
7520 
7521   if (!Redeclaration)
7522     PushOnScopeChains(NewND, S);
7523 
7524   ActOnDocumentableDecl(NewND);
7525   return NewND;
7526 }
7527 
7528 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
7529                                              SourceLocation NamespaceLoc,
7530                                              SourceLocation AliasLoc,
7531                                              IdentifierInfo *Alias,
7532                                              CXXScopeSpec &SS,
7533                                              SourceLocation IdentLoc,
7534                                              IdentifierInfo *Ident) {
7535 
7536   // Lookup the namespace name.
7537   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
7538   LookupParsedName(R, S, &SS);
7539 
7540   // Check if we have a previous declaration with the same name.
7541   NamedDecl *PrevDecl
7542     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
7543                        ForRedeclaration);
7544   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
7545     PrevDecl = 0;
7546 
7547   if (PrevDecl) {
7548     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
7549       // We already have an alias with the same name that points to the same
7550       // namespace, so don't create a new one.
7551       // FIXME: At some point, we'll want to create the (redundant)
7552       // declaration to maintain better source information.
7553       if (!R.isAmbiguous() && !R.empty() &&
7554           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
7555         return 0;
7556     }
7557 
7558     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
7559       diag::err_redefinition_different_kind;
7560     Diag(AliasLoc, DiagID) << Alias;
7561     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
7562     return 0;
7563   }
7564 
7565   if (R.isAmbiguous())
7566     return 0;
7567 
7568   if (R.empty()) {
7569     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
7570       Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
7571       return 0;
7572     }
7573   }
7574 
7575   NamespaceAliasDecl *AliasDecl =
7576     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
7577                                Alias, SS.getWithLocInContext(Context),
7578                                IdentLoc, R.getFoundDecl());
7579 
7580   PushOnScopeChains(AliasDecl, S);
7581   return AliasDecl;
7582 }
7583 
7584 Sema::ImplicitExceptionSpecification
7585 Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
7586                                                CXXMethodDecl *MD) {
7587   CXXRecordDecl *ClassDecl = MD->getParent();
7588 
7589   // C++ [except.spec]p14:
7590   //   An implicitly declared special member function (Clause 12) shall have an
7591   //   exception-specification. [...]
7592   ImplicitExceptionSpecification ExceptSpec(*this);
7593   if (ClassDecl->isInvalidDecl())
7594     return ExceptSpec;
7595 
7596   // Direct base-class constructors.
7597   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7598                                        BEnd = ClassDecl->bases_end();
7599        B != BEnd; ++B) {
7600     if (B->isVirtual()) // Handled below.
7601       continue;
7602 
7603     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7604       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7605       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7606       // If this is a deleted function, add it anyway. This might be conformant
7607       // with the standard. This might not. I'm not sure. It might not matter.
7608       if (Constructor)
7609         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7610     }
7611   }
7612 
7613   // Virtual base-class constructors.
7614   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7615                                        BEnd = ClassDecl->vbases_end();
7616        B != BEnd; ++B) {
7617     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7618       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7619       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7620       // If this is a deleted function, add it anyway. This might be conformant
7621       // with the standard. This might not. I'm not sure. It might not matter.
7622       if (Constructor)
7623         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7624     }
7625   }
7626 
7627   // Field constructors.
7628   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7629                                FEnd = ClassDecl->field_end();
7630        F != FEnd; ++F) {
7631     if (F->hasInClassInitializer()) {
7632       if (Expr *E = F->getInClassInitializer())
7633         ExceptSpec.CalledExpr(E);
7634       else if (!F->isInvalidDecl())
7635         // DR1351:
7636         //   If the brace-or-equal-initializer of a non-static data member
7637         //   invokes a defaulted default constructor of its class or of an
7638         //   enclosing class in a potentially evaluated subexpression, the
7639         //   program is ill-formed.
7640         //
7641         // This resolution is unworkable: the exception specification of the
7642         // default constructor can be needed in an unevaluated context, in
7643         // particular, in the operand of a noexcept-expression, and we can be
7644         // unable to compute an exception specification for an enclosed class.
7645         //
7646         // We do not allow an in-class initializer to require the evaluation
7647         // of the exception specification for any in-class initializer whose
7648         // definition is not lexically complete.
7649         Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
7650     } else if (const RecordType *RecordTy
7651               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7652       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7653       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7654       // If this is a deleted function, add it anyway. This might be conformant
7655       // with the standard. This might not. I'm not sure. It might not matter.
7656       // In particular, the problem is that this function never gets called. It
7657       // might just be ill-formed because this function attempts to refer to
7658       // a deleted function here.
7659       if (Constructor)
7660         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7661     }
7662   }
7663 
7664   return ExceptSpec;
7665 }
7666 
7667 Sema::ImplicitExceptionSpecification
7668 Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) {
7669   CXXRecordDecl *ClassDecl = CD->getParent();
7670 
7671   // C++ [except.spec]p14:
7672   //   An inheriting constructor [...] shall have an exception-specification. [...]
7673   ImplicitExceptionSpecification ExceptSpec(*this);
7674   if (ClassDecl->isInvalidDecl())
7675     return ExceptSpec;
7676 
7677   // Inherited constructor.
7678   const CXXConstructorDecl *InheritedCD = CD->getInheritedConstructor();
7679   const CXXRecordDecl *InheritedDecl = InheritedCD->getParent();
7680   // FIXME: Copying or moving the parameters could add extra exceptions to the
7681   // set, as could the default arguments for the inherited constructor. This
7682   // will be addressed when we implement the resolution of core issue 1351.
7683   ExceptSpec.CalledDecl(CD->getLocStart(), InheritedCD);
7684 
7685   // Direct base-class constructors.
7686   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7687                                        BEnd = ClassDecl->bases_end();
7688        B != BEnd; ++B) {
7689     if (B->isVirtual()) // Handled below.
7690       continue;
7691 
7692     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7693       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7694       if (BaseClassDecl == InheritedDecl)
7695         continue;
7696       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7697       if (Constructor)
7698         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7699     }
7700   }
7701 
7702   // Virtual base-class constructors.
7703   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7704                                        BEnd = ClassDecl->vbases_end();
7705        B != BEnd; ++B) {
7706     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7707       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7708       if (BaseClassDecl == InheritedDecl)
7709         continue;
7710       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7711       if (Constructor)
7712         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7713     }
7714   }
7715 
7716   // Field constructors.
7717   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7718                                FEnd = ClassDecl->field_end();
7719        F != FEnd; ++F) {
7720     if (F->hasInClassInitializer()) {
7721       if (Expr *E = F->getInClassInitializer())
7722         ExceptSpec.CalledExpr(E);
7723       else if (!F->isInvalidDecl())
7724         Diag(CD->getLocation(),
7725              diag::err_in_class_initializer_references_def_ctor) << CD;
7726     } else if (const RecordType *RecordTy
7727               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7728       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7729       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7730       if (Constructor)
7731         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7732     }
7733   }
7734 
7735   return ExceptSpec;
7736 }
7737 
7738 namespace {
7739 /// RAII object to register a special member as being currently declared.
7740 struct DeclaringSpecialMember {
7741   Sema &S;
7742   Sema::SpecialMemberDecl D;
7743   bool WasAlreadyBeingDeclared;
7744 
7745   DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
7746     : S(S), D(RD, CSM) {
7747     WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D);
7748     if (WasAlreadyBeingDeclared)
7749       // This almost never happens, but if it does, ensure that our cache
7750       // doesn't contain a stale result.
7751       S.SpecialMemberCache.clear();
7752 
7753     // FIXME: Register a note to be produced if we encounter an error while
7754     // declaring the special member.
7755   }
7756   ~DeclaringSpecialMember() {
7757     if (!WasAlreadyBeingDeclared)
7758       S.SpecialMembersBeingDeclared.erase(D);
7759   }
7760 
7761   /// \brief Are we already trying to declare this special member?
7762   bool isAlreadyBeingDeclared() const {
7763     return WasAlreadyBeingDeclared;
7764   }
7765 };
7766 }
7767 
7768 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
7769                                                      CXXRecordDecl *ClassDecl) {
7770   // C++ [class.ctor]p5:
7771   //   A default constructor for a class X is a constructor of class X
7772   //   that can be called without an argument. If there is no
7773   //   user-declared constructor for class X, a default constructor is
7774   //   implicitly declared. An implicitly-declared default constructor
7775   //   is an inline public member of its class.
7776   assert(ClassDecl->needsImplicitDefaultConstructor() &&
7777          "Should not build implicit default constructor!");
7778 
7779   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
7780   if (DSM.isAlreadyBeingDeclared())
7781     return 0;
7782 
7783   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
7784                                                      CXXDefaultConstructor,
7785                                                      false);
7786 
7787   // Create the actual constructor declaration.
7788   CanQualType ClassType
7789     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7790   SourceLocation ClassLoc = ClassDecl->getLocation();
7791   DeclarationName Name
7792     = Context.DeclarationNames.getCXXConstructorName(ClassType);
7793   DeclarationNameInfo NameInfo(Name, ClassLoc);
7794   CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
7795       Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
7796       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
7797       Constexpr);
7798   DefaultCon->setAccess(AS_public);
7799   DefaultCon->setDefaulted();
7800   DefaultCon->setImplicit();
7801 
7802   // Build an exception specification pointing back at this constructor.
7803   FunctionProtoType::ExtProtoInfo EPI;
7804   EPI.ExceptionSpecType = EST_Unevaluated;
7805   EPI.ExceptionSpecDecl = DefaultCon;
7806   DefaultCon->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
7807 
7808   // We don't need to use SpecialMemberIsTrivial here; triviality for default
7809   // constructors is easy to compute.
7810   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
7811 
7812   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
7813     SetDeclDeleted(DefaultCon, ClassLoc);
7814 
7815   // Note that we have declared this constructor.
7816   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
7817 
7818   if (Scope *S = getScopeForContext(ClassDecl))
7819     PushOnScopeChains(DefaultCon, S, false);
7820   ClassDecl->addDecl(DefaultCon);
7821 
7822   return DefaultCon;
7823 }
7824 
7825 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
7826                                             CXXConstructorDecl *Constructor) {
7827   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
7828           !Constructor->doesThisDeclarationHaveABody() &&
7829           !Constructor->isDeleted()) &&
7830     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
7831 
7832   CXXRecordDecl *ClassDecl = Constructor->getParent();
7833   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
7834 
7835   SynthesizedFunctionScope Scope(*this, Constructor);
7836   DiagnosticErrorTrap Trap(Diags);
7837   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
7838       Trap.hasErrorOccurred()) {
7839     Diag(CurrentLocation, diag::note_member_synthesized_at)
7840       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
7841     Constructor->setInvalidDecl();
7842     return;
7843   }
7844 
7845   SourceLocation Loc = Constructor->getLocation();
7846   Constructor->setBody(new (Context) CompoundStmt(Loc));
7847 
7848   Constructor->setUsed();
7849   MarkVTableUsed(CurrentLocation, ClassDecl);
7850 
7851   if (ASTMutationListener *L = getASTMutationListener()) {
7852     L->CompletedImplicitDefinition(Constructor);
7853   }
7854 }
7855 
7856 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
7857   // Check that any explicitly-defaulted methods have exception specifications
7858   // compatible with their implicit exception specifications.
7859   CheckDelayedExplicitlyDefaultedMemberExceptionSpecs();
7860 }
7861 
7862 namespace {
7863 /// Information on inheriting constructors to declare.
7864 class InheritingConstructorInfo {
7865 public:
7866   InheritingConstructorInfo(Sema &SemaRef, CXXRecordDecl *Derived)
7867       : SemaRef(SemaRef), Derived(Derived) {
7868     // Mark the constructors that we already have in the derived class.
7869     //
7870     // C++11 [class.inhctor]p3: [...] a constructor is implicitly declared [...]
7871     //   unless there is a user-declared constructor with the same signature in
7872     //   the class where the using-declaration appears.
7873     visitAll(Derived, &InheritingConstructorInfo::noteDeclaredInDerived);
7874   }
7875 
7876   void inheritAll(CXXRecordDecl *RD) {
7877     visitAll(RD, &InheritingConstructorInfo::inherit);
7878   }
7879 
7880 private:
7881   /// Information about an inheriting constructor.
7882   struct InheritingConstructor {
7883     InheritingConstructor()
7884       : DeclaredInDerived(false), BaseCtor(0), DerivedCtor(0) {}
7885 
7886     /// If \c true, a constructor with this signature is already declared
7887     /// in the derived class.
7888     bool DeclaredInDerived;
7889 
7890     /// The constructor which is inherited.
7891     const CXXConstructorDecl *BaseCtor;
7892 
7893     /// The derived constructor we declared.
7894     CXXConstructorDecl *DerivedCtor;
7895   };
7896 
7897   /// Inheriting constructors with a given canonical type. There can be at
7898   /// most one such non-template constructor, and any number of templated
7899   /// constructors.
7900   struct InheritingConstructorsForType {
7901     InheritingConstructor NonTemplate;
7902     llvm::SmallVector<
7903       std::pair<TemplateParameterList*, InheritingConstructor>, 4> Templates;
7904 
7905     InheritingConstructor &getEntry(Sema &S, const CXXConstructorDecl *Ctor) {
7906       if (FunctionTemplateDecl *FTD = Ctor->getDescribedFunctionTemplate()) {
7907         TemplateParameterList *ParamList = FTD->getTemplateParameters();
7908         for (unsigned I = 0, N = Templates.size(); I != N; ++I)
7909           if (S.TemplateParameterListsAreEqual(ParamList, Templates[I].first,
7910                                                false, S.TPL_TemplateMatch))
7911             return Templates[I].second;
7912         Templates.push_back(std::make_pair(ParamList, InheritingConstructor()));
7913         return Templates.back().second;
7914       }
7915 
7916       return NonTemplate;
7917     }
7918   };
7919 
7920   /// Get or create the inheriting constructor record for a constructor.
7921   InheritingConstructor &getEntry(const CXXConstructorDecl *Ctor,
7922                                   QualType CtorType) {
7923     return Map[CtorType.getCanonicalType()->castAs<FunctionProtoType>()]
7924         .getEntry(SemaRef, Ctor);
7925   }
7926 
7927   typedef void (InheritingConstructorInfo::*VisitFn)(const CXXConstructorDecl*);
7928 
7929   /// Process all constructors for a class.
7930   void visitAll(const CXXRecordDecl *RD, VisitFn Callback) {
7931     for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(),
7932                                       CtorE = RD->ctor_end();
7933          CtorIt != CtorE; ++CtorIt)
7934       (this->*Callback)(*CtorIt);
7935     for (CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
7936              I(RD->decls_begin()), E(RD->decls_end());
7937          I != E; ++I) {
7938       const FunctionDecl *FD = (*I)->getTemplatedDecl();
7939       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
7940         (this->*Callback)(CD);
7941     }
7942   }
7943 
7944   /// Note that a constructor (or constructor template) was declared in Derived.
7945   void noteDeclaredInDerived(const CXXConstructorDecl *Ctor) {
7946     getEntry(Ctor, Ctor->getType()).DeclaredInDerived = true;
7947   }
7948 
7949   /// Inherit a single constructor.
7950   void inherit(const CXXConstructorDecl *Ctor) {
7951     const FunctionProtoType *CtorType =
7952         Ctor->getType()->castAs<FunctionProtoType>();
7953     ArrayRef<QualType> ArgTypes(CtorType->getArgTypes());
7954     FunctionProtoType::ExtProtoInfo EPI = CtorType->getExtProtoInfo();
7955 
7956     SourceLocation UsingLoc = getUsingLoc(Ctor->getParent());
7957 
7958     // Core issue (no number yet): the ellipsis is always discarded.
7959     if (EPI.Variadic) {
7960       SemaRef.Diag(UsingLoc, diag::warn_using_decl_constructor_ellipsis);
7961       SemaRef.Diag(Ctor->getLocation(),
7962                    diag::note_using_decl_constructor_ellipsis);
7963       EPI.Variadic = false;
7964     }
7965 
7966     // Declare a constructor for each number of parameters.
7967     //
7968     // C++11 [class.inhctor]p1:
7969     //   The candidate set of inherited constructors from the class X named in
7970     //   the using-declaration consists of [... modulo defects ...] for each
7971     //   constructor or constructor template of X, the set of constructors or
7972     //   constructor templates that results from omitting any ellipsis parameter
7973     //   specification and successively omitting parameters with a default
7974     //   argument from the end of the parameter-type-list
7975     unsigned MinParams = minParamsToInherit(Ctor);
7976     unsigned Params = Ctor->getNumParams();
7977     if (Params >= MinParams) {
7978       do
7979         declareCtor(UsingLoc, Ctor,
7980                     SemaRef.Context.getFunctionType(
7981                         Ctor->getResultType(), ArgTypes.slice(0, Params), EPI));
7982       while (Params > MinParams &&
7983              Ctor->getParamDecl(--Params)->hasDefaultArg());
7984     }
7985   }
7986 
7987   /// Find the using-declaration which specified that we should inherit the
7988   /// constructors of \p Base.
7989   SourceLocation getUsingLoc(const CXXRecordDecl *Base) {
7990     // No fancy lookup required; just look for the base constructor name
7991     // directly within the derived class.
7992     ASTContext &Context = SemaRef.Context;
7993     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
7994         Context.getCanonicalType(Context.getRecordType(Base)));
7995     DeclContext::lookup_const_result Decls = Derived->lookup(Name);
7996     return Decls.empty() ? Derived->getLocation() : Decls[0]->getLocation();
7997   }
7998 
7999   unsigned minParamsToInherit(const CXXConstructorDecl *Ctor) {
8000     // C++11 [class.inhctor]p3:
8001     //   [F]or each constructor template in the candidate set of inherited
8002     //   constructors, a constructor template is implicitly declared
8003     if (Ctor->getDescribedFunctionTemplate())
8004       return 0;
8005 
8006     //   For each non-template constructor in the candidate set of inherited
8007     //   constructors other than a constructor having no parameters or a
8008     //   copy/move constructor having a single parameter, a constructor is
8009     //   implicitly declared [...]
8010     if (Ctor->getNumParams() == 0)
8011       return 1;
8012     if (Ctor->isCopyOrMoveConstructor())
8013       return 2;
8014 
8015     // Per discussion on core reflector, never inherit a constructor which
8016     // would become a default, copy, or move constructor of Derived either.
8017     const ParmVarDecl *PD = Ctor->getParamDecl(0);
8018     const ReferenceType *RT = PD->getType()->getAs<ReferenceType>();
8019     return (RT && RT->getPointeeCXXRecordDecl() == Derived) ? 2 : 1;
8020   }
8021 
8022   /// Declare a single inheriting constructor, inheriting the specified
8023   /// constructor, with the given type.
8024   void declareCtor(SourceLocation UsingLoc, const CXXConstructorDecl *BaseCtor,
8025                    QualType DerivedType) {
8026     InheritingConstructor &Entry = getEntry(BaseCtor, DerivedType);
8027 
8028     // C++11 [class.inhctor]p3:
8029     //   ... a constructor is implicitly declared with the same constructor
8030     //   characteristics unless there is a user-declared constructor with
8031     //   the same signature in the class where the using-declaration appears
8032     if (Entry.DeclaredInDerived)
8033       return;
8034 
8035     // C++11 [class.inhctor]p7:
8036     //   If two using-declarations declare inheriting constructors with the
8037     //   same signature, the program is ill-formed
8038     if (Entry.DerivedCtor) {
8039       if (BaseCtor->getParent() != Entry.BaseCtor->getParent()) {
8040         // Only diagnose this once per constructor.
8041         if (Entry.DerivedCtor->isInvalidDecl())
8042           return;
8043         Entry.DerivedCtor->setInvalidDecl();
8044 
8045         SemaRef.Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
8046         SemaRef.Diag(BaseCtor->getLocation(),
8047                      diag::note_using_decl_constructor_conflict_current_ctor);
8048         SemaRef.Diag(Entry.BaseCtor->getLocation(),
8049                      diag::note_using_decl_constructor_conflict_previous_ctor);
8050         SemaRef.Diag(Entry.DerivedCtor->getLocation(),
8051                      diag::note_using_decl_constructor_conflict_previous_using);
8052       } else {
8053         // Core issue (no number): if the same inheriting constructor is
8054         // produced by multiple base class constructors from the same base
8055         // class, the inheriting constructor is defined as deleted.
8056         SemaRef.SetDeclDeleted(Entry.DerivedCtor, UsingLoc);
8057       }
8058 
8059       return;
8060     }
8061 
8062     ASTContext &Context = SemaRef.Context;
8063     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8064         Context.getCanonicalType(Context.getRecordType(Derived)));
8065     DeclarationNameInfo NameInfo(Name, UsingLoc);
8066 
8067     TemplateParameterList *TemplateParams = 0;
8068     if (const FunctionTemplateDecl *FTD =
8069             BaseCtor->getDescribedFunctionTemplate()) {
8070       TemplateParams = FTD->getTemplateParameters();
8071       // We're reusing template parameters from a different DeclContext. This
8072       // is questionable at best, but works out because the template depth in
8073       // both places is guaranteed to be 0.
8074       // FIXME: Rebuild the template parameters in the new context, and
8075       // transform the function type to refer to them.
8076     }
8077 
8078     // Build type source info pointing at the using-declaration. This is
8079     // required by template instantiation.
8080     TypeSourceInfo *TInfo =
8081         Context.getTrivialTypeSourceInfo(DerivedType, UsingLoc);
8082     FunctionProtoTypeLoc ProtoLoc =
8083         TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
8084 
8085     CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
8086         Context, Derived, UsingLoc, NameInfo, DerivedType,
8087         TInfo, BaseCtor->isExplicit(), /*Inline=*/true,
8088         /*ImplicitlyDeclared=*/true, /*Constexpr=*/BaseCtor->isConstexpr());
8089 
8090     // Build an unevaluated exception specification for this constructor.
8091     const FunctionProtoType *FPT = DerivedType->castAs<FunctionProtoType>();
8092     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8093     EPI.ExceptionSpecType = EST_Unevaluated;
8094     EPI.ExceptionSpecDecl = DerivedCtor;
8095     DerivedCtor->setType(Context.getFunctionType(FPT->getResultType(),
8096                                                  FPT->getArgTypes(), EPI));
8097 
8098     // Build the parameter declarations.
8099     SmallVector<ParmVarDecl *, 16> ParamDecls;
8100     for (unsigned I = 0, N = FPT->getNumArgs(); I != N; ++I) {
8101       TypeSourceInfo *TInfo =
8102           Context.getTrivialTypeSourceInfo(FPT->getArgType(I), UsingLoc);
8103       ParmVarDecl *PD = ParmVarDecl::Create(
8104           Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/0,
8105           FPT->getArgType(I), TInfo, SC_None, /*DefaultArg=*/0);
8106       PD->setScopeInfo(0, I);
8107       PD->setImplicit();
8108       ParamDecls.push_back(PD);
8109       ProtoLoc.setArg(I, PD);
8110     }
8111 
8112     // Set up the new constructor.
8113     DerivedCtor->setAccess(BaseCtor->getAccess());
8114     DerivedCtor->setParams(ParamDecls);
8115     DerivedCtor->setInheritedConstructor(BaseCtor);
8116     if (BaseCtor->isDeleted())
8117       SemaRef.SetDeclDeleted(DerivedCtor, UsingLoc);
8118 
8119     // If this is a constructor template, build the template declaration.
8120     if (TemplateParams) {
8121       FunctionTemplateDecl *DerivedTemplate =
8122           FunctionTemplateDecl::Create(SemaRef.Context, Derived, UsingLoc, Name,
8123                                        TemplateParams, DerivedCtor);
8124       DerivedTemplate->setAccess(BaseCtor->getAccess());
8125       DerivedCtor->setDescribedFunctionTemplate(DerivedTemplate);
8126       Derived->addDecl(DerivedTemplate);
8127     } else {
8128       Derived->addDecl(DerivedCtor);
8129     }
8130 
8131     Entry.BaseCtor = BaseCtor;
8132     Entry.DerivedCtor = DerivedCtor;
8133   }
8134 
8135   Sema &SemaRef;
8136   CXXRecordDecl *Derived;
8137   typedef llvm::DenseMap<const Type *, InheritingConstructorsForType> MapType;
8138   MapType Map;
8139 };
8140 }
8141 
8142 void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
8143   // Defer declaring the inheriting constructors until the class is
8144   // instantiated.
8145   if (ClassDecl->isDependentContext())
8146     return;
8147 
8148   // Find base classes from which we might inherit constructors.
8149   SmallVector<CXXRecordDecl*, 4> InheritedBases;
8150   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
8151                                           BaseE = ClassDecl->bases_end();
8152        BaseIt != BaseE; ++BaseIt)
8153     if (BaseIt->getInheritConstructors())
8154       InheritedBases.push_back(BaseIt->getType()->getAsCXXRecordDecl());
8155 
8156   // Go no further if we're not inheriting any constructors.
8157   if (InheritedBases.empty())
8158     return;
8159 
8160   // Declare the inherited constructors.
8161   InheritingConstructorInfo ICI(*this, ClassDecl);
8162   for (unsigned I = 0, N = InheritedBases.size(); I != N; ++I)
8163     ICI.inheritAll(InheritedBases[I]);
8164 }
8165 
8166 void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
8167                                        CXXConstructorDecl *Constructor) {
8168   CXXRecordDecl *ClassDecl = Constructor->getParent();
8169   assert(Constructor->getInheritedConstructor() &&
8170          !Constructor->doesThisDeclarationHaveABody() &&
8171          !Constructor->isDeleted());
8172 
8173   SynthesizedFunctionScope Scope(*this, Constructor);
8174   DiagnosticErrorTrap Trap(Diags);
8175   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
8176       Trap.hasErrorOccurred()) {
8177     Diag(CurrentLocation, diag::note_inhctor_synthesized_at)
8178       << Context.getTagDeclType(ClassDecl);
8179     Constructor->setInvalidDecl();
8180     return;
8181   }
8182 
8183   SourceLocation Loc = Constructor->getLocation();
8184   Constructor->setBody(new (Context) CompoundStmt(Loc));
8185 
8186   Constructor->setUsed();
8187   MarkVTableUsed(CurrentLocation, ClassDecl);
8188 
8189   if (ASTMutationListener *L = getASTMutationListener()) {
8190     L->CompletedImplicitDefinition(Constructor);
8191   }
8192 }
8193 
8194 
8195 Sema::ImplicitExceptionSpecification
8196 Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
8197   CXXRecordDecl *ClassDecl = MD->getParent();
8198 
8199   // C++ [except.spec]p14:
8200   //   An implicitly declared special member function (Clause 12) shall have
8201   //   an exception-specification.
8202   ImplicitExceptionSpecification ExceptSpec(*this);
8203   if (ClassDecl->isInvalidDecl())
8204     return ExceptSpec;
8205 
8206   // Direct base-class destructors.
8207   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8208                                        BEnd = ClassDecl->bases_end();
8209        B != BEnd; ++B) {
8210     if (B->isVirtual()) // Handled below.
8211       continue;
8212 
8213     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8214       ExceptSpec.CalledDecl(B->getLocStart(),
8215                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8216   }
8217 
8218   // Virtual base-class destructors.
8219   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8220                                        BEnd = ClassDecl->vbases_end();
8221        B != BEnd; ++B) {
8222     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8223       ExceptSpec.CalledDecl(B->getLocStart(),
8224                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8225   }
8226 
8227   // Field destructors.
8228   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8229                                FEnd = ClassDecl->field_end();
8230        F != FEnd; ++F) {
8231     if (const RecordType *RecordTy
8232         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
8233       ExceptSpec.CalledDecl(F->getLocation(),
8234                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
8235   }
8236 
8237   return ExceptSpec;
8238 }
8239 
8240 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
8241   // C++ [class.dtor]p2:
8242   //   If a class has no user-declared destructor, a destructor is
8243   //   declared implicitly. An implicitly-declared destructor is an
8244   //   inline public member of its class.
8245   assert(ClassDecl->needsImplicitDestructor());
8246 
8247   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
8248   if (DSM.isAlreadyBeingDeclared())
8249     return 0;
8250 
8251   // Create the actual destructor declaration.
8252   CanQualType ClassType
8253     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8254   SourceLocation ClassLoc = ClassDecl->getLocation();
8255   DeclarationName Name
8256     = Context.DeclarationNames.getCXXDestructorName(ClassType);
8257   DeclarationNameInfo NameInfo(Name, ClassLoc);
8258   CXXDestructorDecl *Destructor
8259       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8260                                   QualType(), 0, /*isInline=*/true,
8261                                   /*isImplicitlyDeclared=*/true);
8262   Destructor->setAccess(AS_public);
8263   Destructor->setDefaulted();
8264   Destructor->setImplicit();
8265 
8266   // Build an exception specification pointing back at this destructor.
8267   FunctionProtoType::ExtProtoInfo EPI;
8268   EPI.ExceptionSpecType = EST_Unevaluated;
8269   EPI.ExceptionSpecDecl = Destructor;
8270   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8271 
8272   AddOverriddenMethods(ClassDecl, Destructor);
8273 
8274   // We don't need to use SpecialMemberIsTrivial here; triviality for
8275   // destructors is easy to compute.
8276   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
8277 
8278   if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
8279     SetDeclDeleted(Destructor, ClassLoc);
8280 
8281   // Note that we have declared this destructor.
8282   ++ASTContext::NumImplicitDestructorsDeclared;
8283 
8284   // Introduce this destructor into its scope.
8285   if (Scope *S = getScopeForContext(ClassDecl))
8286     PushOnScopeChains(Destructor, S, false);
8287   ClassDecl->addDecl(Destructor);
8288 
8289   return Destructor;
8290 }
8291 
8292 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
8293                                     CXXDestructorDecl *Destructor) {
8294   assert((Destructor->isDefaulted() &&
8295           !Destructor->doesThisDeclarationHaveABody() &&
8296           !Destructor->isDeleted()) &&
8297          "DefineImplicitDestructor - call it for implicit default dtor");
8298   CXXRecordDecl *ClassDecl = Destructor->getParent();
8299   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
8300 
8301   if (Destructor->isInvalidDecl())
8302     return;
8303 
8304   SynthesizedFunctionScope Scope(*this, Destructor);
8305 
8306   DiagnosticErrorTrap Trap(Diags);
8307   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
8308                                          Destructor->getParent());
8309 
8310   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
8311     Diag(CurrentLocation, diag::note_member_synthesized_at)
8312       << CXXDestructor << Context.getTagDeclType(ClassDecl);
8313 
8314     Destructor->setInvalidDecl();
8315     return;
8316   }
8317 
8318   SourceLocation Loc = Destructor->getLocation();
8319   Destructor->setBody(new (Context) CompoundStmt(Loc));
8320   Destructor->setImplicitlyDefined(true);
8321   Destructor->setUsed();
8322   MarkVTableUsed(CurrentLocation, ClassDecl);
8323 
8324   if (ASTMutationListener *L = getASTMutationListener()) {
8325     L->CompletedImplicitDefinition(Destructor);
8326   }
8327 }
8328 
8329 /// \brief Perform any semantic analysis which needs to be delayed until all
8330 /// pending class member declarations have been parsed.
8331 void Sema::ActOnFinishCXXMemberDecls() {
8332   // If the context is an invalid C++ class, just suppress these checks.
8333   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
8334     if (Record->isInvalidDecl()) {
8335       DelayedDestructorExceptionSpecChecks.clear();
8336       return;
8337     }
8338   }
8339 
8340   // Perform any deferred checking of exception specifications for virtual
8341   // destructors.
8342   for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
8343        i != e; ++i) {
8344     const CXXDestructorDecl *Dtor =
8345         DelayedDestructorExceptionSpecChecks[i].first;
8346     assert(!Dtor->getParent()->isDependentType() &&
8347            "Should not ever add destructors of templates into the list.");
8348     CheckOverridingFunctionExceptionSpec(Dtor,
8349         DelayedDestructorExceptionSpecChecks[i].second);
8350   }
8351   DelayedDestructorExceptionSpecChecks.clear();
8352 }
8353 
8354 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
8355                                          CXXDestructorDecl *Destructor) {
8356   assert(getLangOpts().CPlusPlus11 &&
8357          "adjusting dtor exception specs was introduced in c++11");
8358 
8359   // C++11 [class.dtor]p3:
8360   //   A declaration of a destructor that does not have an exception-
8361   //   specification is implicitly considered to have the same exception-
8362   //   specification as an implicit declaration.
8363   const FunctionProtoType *DtorType = Destructor->getType()->
8364                                         getAs<FunctionProtoType>();
8365   if (DtorType->hasExceptionSpec())
8366     return;
8367 
8368   // Replace the destructor's type, building off the existing one. Fortunately,
8369   // the only thing of interest in the destructor type is its extended info.
8370   // The return and arguments are fixed.
8371   FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
8372   EPI.ExceptionSpecType = EST_Unevaluated;
8373   EPI.ExceptionSpecDecl = Destructor;
8374   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8375 
8376   // FIXME: If the destructor has a body that could throw, and the newly created
8377   // spec doesn't allow exceptions, we should emit a warning, because this
8378   // change in behavior can break conforming C++03 programs at runtime.
8379   // However, we don't have a body or an exception specification yet, so it
8380   // needs to be done somewhere else.
8381 }
8382 
8383 /// When generating a defaulted copy or move assignment operator, if a field
8384 /// should be copied with __builtin_memcpy rather than via explicit assignments,
8385 /// do so. This optimization only applies for arrays of scalars, and for arrays
8386 /// of class type where the selected copy/move-assignment operator is trivial.
8387 static StmtResult
8388 buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
8389                            Expr *To, Expr *From) {
8390   // Compute the size of the memory buffer to be copied.
8391   QualType SizeType = S.Context.getSizeType();
8392   llvm::APInt Size(S.Context.getTypeSize(SizeType),
8393                    S.Context.getTypeSizeInChars(T).getQuantity());
8394 
8395   // Take the address of the field references for "from" and "to". We
8396   // directly construct UnaryOperators here because semantic analysis
8397   // does not permit us to take the address of an xvalue.
8398   From = new (S.Context) UnaryOperator(From, UO_AddrOf,
8399                          S.Context.getPointerType(From->getType()),
8400                          VK_RValue, OK_Ordinary, Loc);
8401   To = new (S.Context) UnaryOperator(To, UO_AddrOf,
8402                        S.Context.getPointerType(To->getType()),
8403                        VK_RValue, OK_Ordinary, Loc);
8404 
8405   const Type *E = T->getBaseElementTypeUnsafe();
8406   bool NeedsCollectableMemCpy =
8407     E->isRecordType() && E->getAs<RecordType>()->getDecl()->hasObjectMember();
8408 
8409   // Create a reference to the __builtin_objc_memmove_collectable function
8410   StringRef MemCpyName = NeedsCollectableMemCpy ?
8411     "__builtin_objc_memmove_collectable" :
8412     "__builtin_memcpy";
8413   LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
8414                  Sema::LookupOrdinaryName);
8415   S.LookupName(R, S.TUScope, true);
8416 
8417   FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
8418   if (!MemCpy)
8419     // Something went horribly wrong earlier, and we will have complained
8420     // about it.
8421     return StmtError();
8422 
8423   ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
8424                                             VK_RValue, Loc, 0);
8425   assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
8426 
8427   Expr *CallArgs[] = {
8428     To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
8429   };
8430   ExprResult Call = S.ActOnCallExpr(/*Scope=*/0, MemCpyRef.take(),
8431                                     Loc, CallArgs, Loc);
8432 
8433   assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
8434   return S.Owned(Call.takeAs<Stmt>());
8435 }
8436 
8437 /// \brief Builds a statement that copies/moves the given entity from \p From to
8438 /// \c To.
8439 ///
8440 /// This routine is used to copy/move the members of a class with an
8441 /// implicitly-declared copy/move assignment operator. When the entities being
8442 /// copied are arrays, this routine builds for loops to copy them.
8443 ///
8444 /// \param S The Sema object used for type-checking.
8445 ///
8446 /// \param Loc The location where the implicit copy/move is being generated.
8447 ///
8448 /// \param T The type of the expressions being copied/moved. Both expressions
8449 /// must have this type.
8450 ///
8451 /// \param To The expression we are copying/moving to.
8452 ///
8453 /// \param From The expression we are copying/moving from.
8454 ///
8455 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
8456 /// Otherwise, it's a non-static member subobject.
8457 ///
8458 /// \param Copying Whether we're copying or moving.
8459 ///
8460 /// \param Depth Internal parameter recording the depth of the recursion.
8461 ///
8462 /// \returns A statement or a loop that copies the expressions, or StmtResult(0)
8463 /// if a memcpy should be used instead.
8464 static StmtResult
8465 buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
8466                                  Expr *To, Expr *From,
8467                                  bool CopyingBaseSubobject, bool Copying,
8468                                  unsigned Depth = 0) {
8469   // C++11 [class.copy]p28:
8470   //   Each subobject is assigned in the manner appropriate to its type:
8471   //
8472   //     - if the subobject is of class type, as if by a call to operator= with
8473   //       the subobject as the object expression and the corresponding
8474   //       subobject of x as a single function argument (as if by explicit
8475   //       qualification; that is, ignoring any possible virtual overriding
8476   //       functions in more derived classes);
8477   //
8478   // C++03 [class.copy]p13:
8479   //     - if the subobject is of class type, the copy assignment operator for
8480   //       the class is used (as if by explicit qualification; that is,
8481   //       ignoring any possible virtual overriding functions in more derived
8482   //       classes);
8483   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
8484     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8485 
8486     // Look for operator=.
8487     DeclarationName Name
8488       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8489     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
8490     S.LookupQualifiedName(OpLookup, ClassDecl, false);
8491 
8492     // Prior to C++11, filter out any result that isn't a copy/move-assignment
8493     // operator.
8494     if (!S.getLangOpts().CPlusPlus11) {
8495       LookupResult::Filter F = OpLookup.makeFilter();
8496       while (F.hasNext()) {
8497         NamedDecl *D = F.next();
8498         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
8499           if (Method->isCopyAssignmentOperator() ||
8500               (!Copying && Method->isMoveAssignmentOperator()))
8501             continue;
8502 
8503         F.erase();
8504       }
8505       F.done();
8506     }
8507 
8508     // Suppress the protected check (C++ [class.protected]) for each of the
8509     // assignment operators we found. This strange dance is required when
8510     // we're assigning via a base classes's copy-assignment operator. To
8511     // ensure that we're getting the right base class subobject (without
8512     // ambiguities), we need to cast "this" to that subobject type; to
8513     // ensure that we don't go through the virtual call mechanism, we need
8514     // to qualify the operator= name with the base class (see below). However,
8515     // this means that if the base class has a protected copy assignment
8516     // operator, the protected member access check will fail. So, we
8517     // rewrite "protected" access to "public" access in this case, since we
8518     // know by construction that we're calling from a derived class.
8519     if (CopyingBaseSubobject) {
8520       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
8521            L != LEnd; ++L) {
8522         if (L.getAccess() == AS_protected)
8523           L.setAccess(AS_public);
8524       }
8525     }
8526 
8527     // Create the nested-name-specifier that will be used to qualify the
8528     // reference to operator=; this is required to suppress the virtual
8529     // call mechanism.
8530     CXXScopeSpec SS;
8531     const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
8532     SS.MakeTrivial(S.Context,
8533                    NestedNameSpecifier::Create(S.Context, 0, false,
8534                                                CanonicalT),
8535                    Loc);
8536 
8537     // Create the reference to operator=.
8538     ExprResult OpEqualRef
8539       = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
8540                                    /*TemplateKWLoc=*/SourceLocation(),
8541                                    /*FirstQualifierInScope=*/0,
8542                                    OpLookup,
8543                                    /*TemplateArgs=*/0,
8544                                    /*SuppressQualifierCheck=*/true);
8545     if (OpEqualRef.isInvalid())
8546       return StmtError();
8547 
8548     // Build the call to the assignment operator.
8549 
8550     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
8551                                                   OpEqualRef.takeAs<Expr>(),
8552                                                   Loc, From, Loc);
8553     if (Call.isInvalid())
8554       return StmtError();
8555 
8556     // If we built a call to a trivial 'operator=' while copying an array,
8557     // bail out. We'll replace the whole shebang with a memcpy.
8558     CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
8559     if (CE && CE->getMethodDecl()->isTrivial() && Depth)
8560       return StmtResult((Stmt*)0);
8561 
8562     // Convert to an expression-statement, and clean up any produced
8563     // temporaries.
8564     return S.ActOnExprStmt(Call);
8565   }
8566 
8567   //     - if the subobject is of scalar type, the built-in assignment
8568   //       operator is used.
8569   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
8570   if (!ArrayTy) {
8571     ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
8572     if (Assignment.isInvalid())
8573       return StmtError();
8574     return S.ActOnExprStmt(Assignment);
8575   }
8576 
8577   //     - if the subobject is an array, each element is assigned, in the
8578   //       manner appropriate to the element type;
8579 
8580   // Construct a loop over the array bounds, e.g.,
8581   //
8582   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
8583   //
8584   // that will copy each of the array elements.
8585   QualType SizeType = S.Context.getSizeType();
8586 
8587   // Create the iteration variable.
8588   IdentifierInfo *IterationVarName = 0;
8589   {
8590     SmallString<8> Str;
8591     llvm::raw_svector_ostream OS(Str);
8592     OS << "__i" << Depth;
8593     IterationVarName = &S.Context.Idents.get(OS.str());
8594   }
8595   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
8596                                           IterationVarName, SizeType,
8597                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
8598                                           SC_None);
8599 
8600   // Initialize the iteration variable to zero.
8601   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
8602   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
8603 
8604   // Create a reference to the iteration variable; we'll use this several
8605   // times throughout.
8606   Expr *IterationVarRef
8607     = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
8608   assert(IterationVarRef && "Reference to invented variable cannot fail!");
8609   Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
8610   assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
8611 
8612   // Create the DeclStmt that holds the iteration variable.
8613   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
8614 
8615   // Subscript the "from" and "to" expressions with the iteration variable.
8616   From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
8617                                                          IterationVarRefRVal,
8618                                                          Loc));
8619   To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
8620                                                        IterationVarRefRVal,
8621                                                        Loc));
8622   if (!Copying) // Cast to rvalue
8623     From = CastForMoving(S, From);
8624 
8625   // Build the copy/move for an individual element of the array.
8626   StmtResult Copy =
8627     buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
8628                                      To, From, CopyingBaseSubobject,
8629                                      Copying, Depth + 1);
8630   // Bail out if copying fails or if we determined that we should use memcpy.
8631   if (Copy.isInvalid() || !Copy.get())
8632     return Copy;
8633 
8634   // Create the comparison against the array bound.
8635   llvm::APInt Upper
8636     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
8637   Expr *Comparison
8638     = new (S.Context) BinaryOperator(IterationVarRefRVal,
8639                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
8640                                      BO_NE, S.Context.BoolTy,
8641                                      VK_RValue, OK_Ordinary, Loc, false);
8642 
8643   // Create the pre-increment of the iteration variable.
8644   Expr *Increment
8645     = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
8646                                     VK_LValue, OK_Ordinary, Loc);
8647 
8648   // Construct the loop that copies all elements of this array.
8649   return S.ActOnForStmt(Loc, Loc, InitStmt,
8650                         S.MakeFullExpr(Comparison),
8651                         0, S.MakeFullDiscardedValueExpr(Increment),
8652                         Loc, Copy.take());
8653 }
8654 
8655 static StmtResult
8656 buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
8657                       Expr *To, Expr *From,
8658                       bool CopyingBaseSubobject, bool Copying) {
8659   // Maybe we should use a memcpy?
8660   if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
8661       T.isTriviallyCopyableType(S.Context))
8662     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8663 
8664   StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
8665                                                      CopyingBaseSubobject,
8666                                                      Copying, 0));
8667 
8668   // If we ended up picking a trivial assignment operator for an array of a
8669   // non-trivially-copyable class type, just emit a memcpy.
8670   if (!Result.isInvalid() && !Result.get())
8671     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8672 
8673   return Result;
8674 }
8675 
8676 Sema::ImplicitExceptionSpecification
8677 Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
8678   CXXRecordDecl *ClassDecl = MD->getParent();
8679 
8680   ImplicitExceptionSpecification ExceptSpec(*this);
8681   if (ClassDecl->isInvalidDecl())
8682     return ExceptSpec;
8683 
8684   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
8685   assert(T->getNumArgs() == 1 && "not a copy assignment op");
8686   unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
8687 
8688   // C++ [except.spec]p14:
8689   //   An implicitly declared special member function (Clause 12) shall have an
8690   //   exception-specification. [...]
8691 
8692   // It is unspecified whether or not an implicit copy assignment operator
8693   // attempts to deduplicate calls to assignment operators of virtual bases are
8694   // made. As such, this exception specification is effectively unspecified.
8695   // Based on a similar decision made for constness in C++0x, we're erring on
8696   // the side of assuming such calls to be made regardless of whether they
8697   // actually happen.
8698   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8699                                        BaseEnd = ClassDecl->bases_end();
8700        Base != BaseEnd; ++Base) {
8701     if (Base->isVirtual())
8702       continue;
8703 
8704     CXXRecordDecl *BaseClassDecl
8705       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8706     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8707                                                             ArgQuals, false, 0))
8708       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8709   }
8710 
8711   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8712                                        BaseEnd = ClassDecl->vbases_end();
8713        Base != BaseEnd; ++Base) {
8714     CXXRecordDecl *BaseClassDecl
8715       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8716     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8717                                                             ArgQuals, false, 0))
8718       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8719   }
8720 
8721   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8722                                   FieldEnd = ClassDecl->field_end();
8723        Field != FieldEnd;
8724        ++Field) {
8725     QualType FieldType = Context.getBaseElementType(Field->getType());
8726     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8727       if (CXXMethodDecl *CopyAssign =
8728           LookupCopyingAssignment(FieldClassDecl,
8729                                   ArgQuals | FieldType.getCVRQualifiers(),
8730                                   false, 0))
8731         ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
8732     }
8733   }
8734 
8735   return ExceptSpec;
8736 }
8737 
8738 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
8739   // Note: The following rules are largely analoguous to the copy
8740   // constructor rules. Note that virtual bases are not taken into account
8741   // for determining the argument type of the operator. Note also that
8742   // operators taking an object instead of a reference are allowed.
8743   assert(ClassDecl->needsImplicitCopyAssignment());
8744 
8745   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
8746   if (DSM.isAlreadyBeingDeclared())
8747     return 0;
8748 
8749   QualType ArgType = Context.getTypeDeclType(ClassDecl);
8750   QualType RetType = Context.getLValueReferenceType(ArgType);
8751   bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
8752   if (Const)
8753     ArgType = ArgType.withConst();
8754   ArgType = Context.getLValueReferenceType(ArgType);
8755 
8756   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8757                                                      CXXCopyAssignment,
8758                                                      Const);
8759 
8760   //   An implicitly-declared copy assignment operator is an inline public
8761   //   member of its class.
8762   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8763   SourceLocation ClassLoc = ClassDecl->getLocation();
8764   DeclarationNameInfo NameInfo(Name, ClassLoc);
8765   CXXMethodDecl *CopyAssignment =
8766       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
8767                             /*TInfo=*/ 0, /*StorageClass=*/ SC_None,
8768                             /*isInline=*/ true, Constexpr, SourceLocation());
8769   CopyAssignment->setAccess(AS_public);
8770   CopyAssignment->setDefaulted();
8771   CopyAssignment->setImplicit();
8772 
8773   // Build an exception specification pointing back at this member.
8774   FunctionProtoType::ExtProtoInfo EPI;
8775   EPI.ExceptionSpecType = EST_Unevaluated;
8776   EPI.ExceptionSpecDecl = CopyAssignment;
8777   CopyAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
8778 
8779   // Add the parameter to the operator.
8780   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
8781                                                ClassLoc, ClassLoc, /*Id=*/0,
8782                                                ArgType, /*TInfo=*/0,
8783                                                SC_None, 0);
8784   CopyAssignment->setParams(FromParam);
8785 
8786   AddOverriddenMethods(ClassDecl, CopyAssignment);
8787 
8788   CopyAssignment->setTrivial(
8789     ClassDecl->needsOverloadResolutionForCopyAssignment()
8790       ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
8791       : ClassDecl->hasTrivialCopyAssignment());
8792 
8793   // C++11 [class.copy]p19:
8794   //   ....  If the class definition does not explicitly declare a copy
8795   //   assignment operator, there is no user-declared move constructor, and
8796   //   there is no user-declared move assignment operator, a copy assignment
8797   //   operator is implicitly declared as defaulted.
8798   if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
8799     SetDeclDeleted(CopyAssignment, ClassLoc);
8800 
8801   // Note that we have added this copy-assignment operator.
8802   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
8803 
8804   if (Scope *S = getScopeForContext(ClassDecl))
8805     PushOnScopeChains(CopyAssignment, S, false);
8806   ClassDecl->addDecl(CopyAssignment);
8807 
8808   return CopyAssignment;
8809 }
8810 
8811 /// Diagnose an implicit copy operation for a class which is odr-used, but
8812 /// which is deprecated because the class has a user-declared copy constructor,
8813 /// copy assignment operator, or destructor.
8814 static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp,
8815                                             SourceLocation UseLoc) {
8816   assert(CopyOp->isImplicit());
8817 
8818   CXXRecordDecl *RD = CopyOp->getParent();
8819   CXXMethodDecl *UserDeclaredOperation = 0;
8820 
8821   // In Microsoft mode, assignment operations don't affect constructors and
8822   // vice versa.
8823   if (RD->hasUserDeclaredDestructor()) {
8824     UserDeclaredOperation = RD->getDestructor();
8825   } else if (!isa<CXXConstructorDecl>(CopyOp) &&
8826              RD->hasUserDeclaredCopyConstructor() &&
8827              !S.getLangOpts().MicrosoftMode) {
8828     // Find any user-declared copy constructor.
8829     for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
8830                                       E = RD->ctor_end(); I != E; ++I) {
8831       if (I->isCopyConstructor()) {
8832         UserDeclaredOperation = *I;
8833         break;
8834       }
8835     }
8836     assert(UserDeclaredOperation);
8837   } else if (isa<CXXConstructorDecl>(CopyOp) &&
8838              RD->hasUserDeclaredCopyAssignment() &&
8839              !S.getLangOpts().MicrosoftMode) {
8840     // Find any user-declared move assignment operator.
8841     for (CXXRecordDecl::method_iterator I = RD->method_begin(),
8842                                         E = RD->method_end(); I != E; ++I) {
8843       if (I->isCopyAssignmentOperator()) {
8844         UserDeclaredOperation = *I;
8845         break;
8846       }
8847     }
8848     assert(UserDeclaredOperation);
8849   }
8850 
8851   if (UserDeclaredOperation) {
8852     S.Diag(UserDeclaredOperation->getLocation(),
8853          diag::warn_deprecated_copy_operation)
8854       << RD << /*copy assignment*/!isa<CXXConstructorDecl>(CopyOp)
8855       << /*destructor*/isa<CXXDestructorDecl>(UserDeclaredOperation);
8856     S.Diag(UseLoc, diag::note_member_synthesized_at)
8857       << (isa<CXXConstructorDecl>(CopyOp) ? Sema::CXXCopyConstructor
8858                                           : Sema::CXXCopyAssignment)
8859       << RD;
8860   }
8861 }
8862 
8863 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
8864                                         CXXMethodDecl *CopyAssignOperator) {
8865   assert((CopyAssignOperator->isDefaulted() &&
8866           CopyAssignOperator->isOverloadedOperator() &&
8867           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
8868           !CopyAssignOperator->doesThisDeclarationHaveABody() &&
8869           !CopyAssignOperator->isDeleted()) &&
8870          "DefineImplicitCopyAssignment called for wrong function");
8871 
8872   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
8873 
8874   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
8875     CopyAssignOperator->setInvalidDecl();
8876     return;
8877   }
8878 
8879   // C++11 [class.copy]p18:
8880   //   The [definition of an implicitly declared copy assignment operator] is
8881   //   deprecated if the class has a user-declared copy constructor or a
8882   //   user-declared destructor.
8883   if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
8884     diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator, CurrentLocation);
8885 
8886   CopyAssignOperator->setUsed();
8887 
8888   SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
8889   DiagnosticErrorTrap Trap(Diags);
8890 
8891   // C++0x [class.copy]p30:
8892   //   The implicitly-defined or explicitly-defaulted copy assignment operator
8893   //   for a non-union class X performs memberwise copy assignment of its
8894   //   subobjects. The direct base classes of X are assigned first, in the
8895   //   order of their declaration in the base-specifier-list, and then the
8896   //   immediate non-static data members of X are assigned, in the order in
8897   //   which they were declared in the class definition.
8898 
8899   // The statements that form the synthesized function body.
8900   SmallVector<Stmt*, 8> Statements;
8901 
8902   // The parameter for the "other" object, which we are copying from.
8903   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
8904   Qualifiers OtherQuals = Other->getType().getQualifiers();
8905   QualType OtherRefType = Other->getType();
8906   if (const LValueReferenceType *OtherRef
8907                                 = OtherRefType->getAs<LValueReferenceType>()) {
8908     OtherRefType = OtherRef->getPointeeType();
8909     OtherQuals = OtherRefType.getQualifiers();
8910   }
8911 
8912   // Our location for everything implicitly-generated.
8913   SourceLocation Loc = CopyAssignOperator->getLocation();
8914 
8915   // Construct a reference to the "other" object. We'll be using this
8916   // throughout the generated ASTs.
8917   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
8918   assert(OtherRef && "Reference to parameter cannot fail!");
8919 
8920   // Construct the "this" pointer. We'll be using this throughout the generated
8921   // ASTs.
8922   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
8923   assert(This && "Reference to this cannot fail!");
8924 
8925   // Assign base classes.
8926   bool Invalid = false;
8927   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8928        E = ClassDecl->bases_end(); Base != E; ++Base) {
8929     // Form the assignment:
8930     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
8931     QualType BaseType = Base->getType().getUnqualifiedType();
8932     if (!BaseType->isRecordType()) {
8933       Invalid = true;
8934       continue;
8935     }
8936 
8937     CXXCastPath BasePath;
8938     BasePath.push_back(Base);
8939 
8940     // Construct the "from" expression, which is an implicit cast to the
8941     // appropriately-qualified base type.
8942     Expr *From = OtherRef;
8943     From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
8944                              CK_UncheckedDerivedToBase,
8945                              VK_LValue, &BasePath).take();
8946 
8947     // Dereference "this".
8948     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
8949 
8950     // Implicitly cast "this" to the appropriately-qualified base type.
8951     To = ImpCastExprToType(To.take(),
8952                            Context.getCVRQualifiedType(BaseType,
8953                                      CopyAssignOperator->getTypeQualifiers()),
8954                            CK_UncheckedDerivedToBase,
8955                            VK_LValue, &BasePath);
8956 
8957     // Build the copy.
8958     StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
8959                                             To.get(), From,
8960                                             /*CopyingBaseSubobject=*/true,
8961                                             /*Copying=*/true);
8962     if (Copy.isInvalid()) {
8963       Diag(CurrentLocation, diag::note_member_synthesized_at)
8964         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8965       CopyAssignOperator->setInvalidDecl();
8966       return;
8967     }
8968 
8969     // Success! Record the copy.
8970     Statements.push_back(Copy.takeAs<Expr>());
8971   }
8972 
8973   // Assign non-static members.
8974   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8975                                   FieldEnd = ClassDecl->field_end();
8976        Field != FieldEnd; ++Field) {
8977     if (Field->isUnnamedBitfield())
8978       continue;
8979 
8980     if (Field->isInvalidDecl()) {
8981       Invalid = true;
8982       continue;
8983     }
8984 
8985     // Check for members of reference type; we can't copy those.
8986     if (Field->getType()->isReferenceType()) {
8987       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8988         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
8989       Diag(Field->getLocation(), diag::note_declared_at);
8990       Diag(CurrentLocation, diag::note_member_synthesized_at)
8991         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8992       Invalid = true;
8993       continue;
8994     }
8995 
8996     // Check for members of const-qualified, non-class type.
8997     QualType BaseType = Context.getBaseElementType(Field->getType());
8998     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
8999       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9000         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9001       Diag(Field->getLocation(), diag::note_declared_at);
9002       Diag(CurrentLocation, diag::note_member_synthesized_at)
9003         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9004       Invalid = true;
9005       continue;
9006     }
9007 
9008     // Suppress assigning zero-width bitfields.
9009     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9010       continue;
9011 
9012     QualType FieldType = Field->getType().getNonReferenceType();
9013     if (FieldType->isIncompleteArrayType()) {
9014       assert(ClassDecl->hasFlexibleArrayMember() &&
9015              "Incomplete array type is not valid");
9016       continue;
9017     }
9018 
9019     // Build references to the field in the object we're copying from and to.
9020     CXXScopeSpec SS; // Intentionally empty
9021     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9022                               LookupMemberName);
9023     MemberLookup.addDecl(*Field);
9024     MemberLookup.resolveKind();
9025     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9026                                                Loc, /*IsArrow=*/false,
9027                                                SS, SourceLocation(), 0,
9028                                                MemberLookup, 0);
9029     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9030                                              Loc, /*IsArrow=*/true,
9031                                              SS, SourceLocation(), 0,
9032                                              MemberLookup, 0);
9033     assert(!From.isInvalid() && "Implicit field reference cannot fail");
9034     assert(!To.isInvalid() && "Implicit field reference cannot fail");
9035 
9036     // Build the copy of this field.
9037     StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
9038                                             To.get(), From.get(),
9039                                             /*CopyingBaseSubobject=*/false,
9040                                             /*Copying=*/true);
9041     if (Copy.isInvalid()) {
9042       Diag(CurrentLocation, diag::note_member_synthesized_at)
9043         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9044       CopyAssignOperator->setInvalidDecl();
9045       return;
9046     }
9047 
9048     // Success! Record the copy.
9049     Statements.push_back(Copy.takeAs<Stmt>());
9050   }
9051 
9052   if (!Invalid) {
9053     // Add a "return *this;"
9054     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9055 
9056     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9057     if (Return.isInvalid())
9058       Invalid = true;
9059     else {
9060       Statements.push_back(Return.takeAs<Stmt>());
9061 
9062       if (Trap.hasErrorOccurred()) {
9063         Diag(CurrentLocation, diag::note_member_synthesized_at)
9064           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9065         Invalid = true;
9066       }
9067     }
9068   }
9069 
9070   if (Invalid) {
9071     CopyAssignOperator->setInvalidDecl();
9072     return;
9073   }
9074 
9075   StmtResult Body;
9076   {
9077     CompoundScopeRAII CompoundScope(*this);
9078     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9079                              /*isStmtExpr=*/false);
9080     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9081   }
9082   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
9083 
9084   if (ASTMutationListener *L = getASTMutationListener()) {
9085     L->CompletedImplicitDefinition(CopyAssignOperator);
9086   }
9087 }
9088 
9089 Sema::ImplicitExceptionSpecification
9090 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
9091   CXXRecordDecl *ClassDecl = MD->getParent();
9092 
9093   ImplicitExceptionSpecification ExceptSpec(*this);
9094   if (ClassDecl->isInvalidDecl())
9095     return ExceptSpec;
9096 
9097   // C++0x [except.spec]p14:
9098   //   An implicitly declared special member function (Clause 12) shall have an
9099   //   exception-specification. [...]
9100 
9101   // It is unspecified whether or not an implicit move assignment operator
9102   // attempts to deduplicate calls to assignment operators of virtual bases are
9103   // made. As such, this exception specification is effectively unspecified.
9104   // Based on a similar decision made for constness in C++0x, we're erring on
9105   // the side of assuming such calls to be made regardless of whether they
9106   // actually happen.
9107   // Note that a move constructor is not implicitly declared when there are
9108   // virtual bases, but it can still be user-declared and explicitly defaulted.
9109   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9110                                        BaseEnd = ClassDecl->bases_end();
9111        Base != BaseEnd; ++Base) {
9112     if (Base->isVirtual())
9113       continue;
9114 
9115     CXXRecordDecl *BaseClassDecl
9116       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9117     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9118                                                            0, false, 0))
9119       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9120   }
9121 
9122   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9123                                        BaseEnd = ClassDecl->vbases_end();
9124        Base != BaseEnd; ++Base) {
9125     CXXRecordDecl *BaseClassDecl
9126       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9127     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9128                                                            0, false, 0))
9129       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9130   }
9131 
9132   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9133                                   FieldEnd = ClassDecl->field_end();
9134        Field != FieldEnd;
9135        ++Field) {
9136     QualType FieldType = Context.getBaseElementType(Field->getType());
9137     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9138       if (CXXMethodDecl *MoveAssign =
9139               LookupMovingAssignment(FieldClassDecl,
9140                                      FieldType.getCVRQualifiers(),
9141                                      false, 0))
9142         ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
9143     }
9144   }
9145 
9146   return ExceptSpec;
9147 }
9148 
9149 /// Determine whether the class type has any direct or indirect virtual base
9150 /// classes which have a non-trivial move assignment operator.
9151 static bool
9152 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
9153   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9154                                           BaseEnd = ClassDecl->vbases_end();
9155        Base != BaseEnd; ++Base) {
9156     CXXRecordDecl *BaseClass =
9157         cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9158 
9159     // Try to declare the move assignment. If it would be deleted, then the
9160     // class does not have a non-trivial move assignment.
9161     if (BaseClass->needsImplicitMoveAssignment())
9162       S.DeclareImplicitMoveAssignment(BaseClass);
9163 
9164     if (BaseClass->hasNonTrivialMoveAssignment())
9165       return true;
9166   }
9167 
9168   return false;
9169 }
9170 
9171 /// Determine whether the given type either has a move constructor or is
9172 /// trivially copyable.
9173 static bool
9174 hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
9175   Type = S.Context.getBaseElementType(Type);
9176 
9177   // FIXME: Technically, non-trivially-copyable non-class types, such as
9178   // reference types, are supposed to return false here, but that appears
9179   // to be a standard defect.
9180   CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
9181   if (!ClassDecl || !ClassDecl->getDefinition() || ClassDecl->isInvalidDecl())
9182     return true;
9183 
9184   if (Type.isTriviallyCopyableType(S.Context))
9185     return true;
9186 
9187   if (IsConstructor) {
9188     // FIXME: Need this because otherwise hasMoveConstructor isn't guaranteed to
9189     // give the right answer.
9190     if (ClassDecl->needsImplicitMoveConstructor())
9191       S.DeclareImplicitMoveConstructor(ClassDecl);
9192     return ClassDecl->hasMoveConstructor();
9193   }
9194 
9195   // FIXME: Need this because otherwise hasMoveAssignment isn't guaranteed to
9196   // give the right answer.
9197   if (ClassDecl->needsImplicitMoveAssignment())
9198     S.DeclareImplicitMoveAssignment(ClassDecl);
9199   return ClassDecl->hasMoveAssignment();
9200 }
9201 
9202 /// Determine whether all non-static data members and direct or virtual bases
9203 /// of class \p ClassDecl have either a move operation, or are trivially
9204 /// copyable.
9205 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
9206                                             bool IsConstructor) {
9207   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9208                                           BaseEnd = ClassDecl->bases_end();
9209        Base != BaseEnd; ++Base) {
9210     if (Base->isVirtual())
9211       continue;
9212 
9213     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9214       return false;
9215   }
9216 
9217   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9218                                           BaseEnd = ClassDecl->vbases_end();
9219        Base != BaseEnd; ++Base) {
9220     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9221       return false;
9222   }
9223 
9224   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9225                                      FieldEnd = ClassDecl->field_end();
9226        Field != FieldEnd; ++Field) {
9227     if (!hasMoveOrIsTriviallyCopyable(S, Field->getType(), IsConstructor))
9228       return false;
9229   }
9230 
9231   return true;
9232 }
9233 
9234 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
9235   // C++11 [class.copy]p20:
9236   //   If the definition of a class X does not explicitly declare a move
9237   //   assignment operator, one will be implicitly declared as defaulted
9238   //   if and only if:
9239   //
9240   //   - [first 4 bullets]
9241   assert(ClassDecl->needsImplicitMoveAssignment());
9242 
9243   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
9244   if (DSM.isAlreadyBeingDeclared())
9245     return 0;
9246 
9247   // [Checked after we build the declaration]
9248   //   - the move assignment operator would not be implicitly defined as
9249   //     deleted,
9250 
9251   // [DR1402]:
9252   //   - X has no direct or indirect virtual base class with a non-trivial
9253   //     move assignment operator, and
9254   //   - each of X's non-static data members and direct or virtual base classes
9255   //     has a type that either has a move assignment operator or is trivially
9256   //     copyable.
9257   if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
9258       !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
9259     ClassDecl->setFailedImplicitMoveAssignment();
9260     return 0;
9261   }
9262 
9263   // Note: The following rules are largely analoguous to the move
9264   // constructor rules.
9265 
9266   QualType ArgType = Context.getTypeDeclType(ClassDecl);
9267   QualType RetType = Context.getLValueReferenceType(ArgType);
9268   ArgType = Context.getRValueReferenceType(ArgType);
9269 
9270   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9271                                                      CXXMoveAssignment,
9272                                                      false);
9273 
9274   //   An implicitly-declared move assignment operator is an inline public
9275   //   member of its class.
9276   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
9277   SourceLocation ClassLoc = ClassDecl->getLocation();
9278   DeclarationNameInfo NameInfo(Name, ClassLoc);
9279   CXXMethodDecl *MoveAssignment =
9280       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9281                             /*TInfo=*/0, /*StorageClass=*/SC_None,
9282                             /*isInline=*/true, Constexpr, SourceLocation());
9283   MoveAssignment->setAccess(AS_public);
9284   MoveAssignment->setDefaulted();
9285   MoveAssignment->setImplicit();
9286 
9287   // Build an exception specification pointing back at this member.
9288   FunctionProtoType::ExtProtoInfo EPI;
9289   EPI.ExceptionSpecType = EST_Unevaluated;
9290   EPI.ExceptionSpecDecl = MoveAssignment;
9291   MoveAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
9292 
9293   // Add the parameter to the operator.
9294   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
9295                                                ClassLoc, ClassLoc, /*Id=*/0,
9296                                                ArgType, /*TInfo=*/0,
9297                                                SC_None, 0);
9298   MoveAssignment->setParams(FromParam);
9299 
9300   AddOverriddenMethods(ClassDecl, MoveAssignment);
9301 
9302   MoveAssignment->setTrivial(
9303     ClassDecl->needsOverloadResolutionForMoveAssignment()
9304       ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
9305       : ClassDecl->hasTrivialMoveAssignment());
9306 
9307   // C++0x [class.copy]p9:
9308   //   If the definition of a class X does not explicitly declare a move
9309   //   assignment operator, one will be implicitly declared as defaulted if and
9310   //   only if:
9311   //   [...]
9312   //   - the move assignment operator would not be implicitly defined as
9313   //     deleted.
9314   if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
9315     // Cache this result so that we don't try to generate this over and over
9316     // on every lookup, leaking memory and wasting time.
9317     ClassDecl->setFailedImplicitMoveAssignment();
9318     return 0;
9319   }
9320 
9321   // Note that we have added this copy-assignment operator.
9322   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
9323 
9324   if (Scope *S = getScopeForContext(ClassDecl))
9325     PushOnScopeChains(MoveAssignment, S, false);
9326   ClassDecl->addDecl(MoveAssignment);
9327 
9328   return MoveAssignment;
9329 }
9330 
9331 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
9332                                         CXXMethodDecl *MoveAssignOperator) {
9333   assert((MoveAssignOperator->isDefaulted() &&
9334           MoveAssignOperator->isOverloadedOperator() &&
9335           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
9336           !MoveAssignOperator->doesThisDeclarationHaveABody() &&
9337           !MoveAssignOperator->isDeleted()) &&
9338          "DefineImplicitMoveAssignment called for wrong function");
9339 
9340   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
9341 
9342   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
9343     MoveAssignOperator->setInvalidDecl();
9344     return;
9345   }
9346 
9347   MoveAssignOperator->setUsed();
9348 
9349   SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
9350   DiagnosticErrorTrap Trap(Diags);
9351 
9352   // C++0x [class.copy]p28:
9353   //   The implicitly-defined or move assignment operator for a non-union class
9354   //   X performs memberwise move assignment of its subobjects. The direct base
9355   //   classes of X are assigned first, in the order of their declaration in the
9356   //   base-specifier-list, and then the immediate non-static data members of X
9357   //   are assigned, in the order in which they were declared in the class
9358   //   definition.
9359 
9360   // The statements that form the synthesized function body.
9361   SmallVector<Stmt*, 8> Statements;
9362 
9363   // The parameter for the "other" object, which we are move from.
9364   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
9365   QualType OtherRefType = Other->getType()->
9366       getAs<RValueReferenceType>()->getPointeeType();
9367   assert(!OtherRefType.getQualifiers() &&
9368          "Bad argument type of defaulted move assignment");
9369 
9370   // Our location for everything implicitly-generated.
9371   SourceLocation Loc = MoveAssignOperator->getLocation();
9372 
9373   // Construct a reference to the "other" object. We'll be using this
9374   // throughout the generated ASTs.
9375   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
9376   assert(OtherRef && "Reference to parameter cannot fail!");
9377   // Cast to rvalue.
9378   OtherRef = CastForMoving(*this, OtherRef);
9379 
9380   // Construct the "this" pointer. We'll be using this throughout the generated
9381   // ASTs.
9382   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
9383   assert(This && "Reference to this cannot fail!");
9384 
9385   // Assign base classes.
9386   bool Invalid = false;
9387   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9388        E = ClassDecl->bases_end(); Base != E; ++Base) {
9389     // Form the assignment:
9390     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
9391     QualType BaseType = Base->getType().getUnqualifiedType();
9392     if (!BaseType->isRecordType()) {
9393       Invalid = true;
9394       continue;
9395     }
9396 
9397     CXXCastPath BasePath;
9398     BasePath.push_back(Base);
9399 
9400     // Construct the "from" expression, which is an implicit cast to the
9401     // appropriately-qualified base type.
9402     Expr *From = OtherRef;
9403     From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
9404                              VK_XValue, &BasePath).take();
9405 
9406     // Dereference "this".
9407     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9408 
9409     // Implicitly cast "this" to the appropriately-qualified base type.
9410     To = ImpCastExprToType(To.take(),
9411                            Context.getCVRQualifiedType(BaseType,
9412                                      MoveAssignOperator->getTypeQualifiers()),
9413                            CK_UncheckedDerivedToBase,
9414                            VK_LValue, &BasePath);
9415 
9416     // Build the move.
9417     StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
9418                                             To.get(), From,
9419                                             /*CopyingBaseSubobject=*/true,
9420                                             /*Copying=*/false);
9421     if (Move.isInvalid()) {
9422       Diag(CurrentLocation, diag::note_member_synthesized_at)
9423         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9424       MoveAssignOperator->setInvalidDecl();
9425       return;
9426     }
9427 
9428     // Success! Record the move.
9429     Statements.push_back(Move.takeAs<Expr>());
9430   }
9431 
9432   // Assign non-static members.
9433   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9434                                   FieldEnd = ClassDecl->field_end();
9435        Field != FieldEnd; ++Field) {
9436     if (Field->isUnnamedBitfield())
9437       continue;
9438 
9439     if (Field->isInvalidDecl()) {
9440       Invalid = true;
9441       continue;
9442     }
9443 
9444     // Check for members of reference type; we can't move those.
9445     if (Field->getType()->isReferenceType()) {
9446       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9447         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9448       Diag(Field->getLocation(), diag::note_declared_at);
9449       Diag(CurrentLocation, diag::note_member_synthesized_at)
9450         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9451       Invalid = true;
9452       continue;
9453     }
9454 
9455     // Check for members of const-qualified, non-class type.
9456     QualType BaseType = Context.getBaseElementType(Field->getType());
9457     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9458       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9459         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9460       Diag(Field->getLocation(), diag::note_declared_at);
9461       Diag(CurrentLocation, diag::note_member_synthesized_at)
9462         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9463       Invalid = true;
9464       continue;
9465     }
9466 
9467     // Suppress assigning zero-width bitfields.
9468     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9469       continue;
9470 
9471     QualType FieldType = Field->getType().getNonReferenceType();
9472     if (FieldType->isIncompleteArrayType()) {
9473       assert(ClassDecl->hasFlexibleArrayMember() &&
9474              "Incomplete array type is not valid");
9475       continue;
9476     }
9477 
9478     // Build references to the field in the object we're copying from and to.
9479     CXXScopeSpec SS; // Intentionally empty
9480     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9481                               LookupMemberName);
9482     MemberLookup.addDecl(*Field);
9483     MemberLookup.resolveKind();
9484     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9485                                                Loc, /*IsArrow=*/false,
9486                                                SS, SourceLocation(), 0,
9487                                                MemberLookup, 0);
9488     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9489                                              Loc, /*IsArrow=*/true,
9490                                              SS, SourceLocation(), 0,
9491                                              MemberLookup, 0);
9492     assert(!From.isInvalid() && "Implicit field reference cannot fail");
9493     assert(!To.isInvalid() && "Implicit field reference cannot fail");
9494 
9495     assert(!From.get()->isLValue() && // could be xvalue or prvalue
9496         "Member reference with rvalue base must be rvalue except for reference "
9497         "members, which aren't allowed for move assignment.");
9498 
9499     // Build the move of this field.
9500     StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
9501                                             To.get(), From.get(),
9502                                             /*CopyingBaseSubobject=*/false,
9503                                             /*Copying=*/false);
9504     if (Move.isInvalid()) {
9505       Diag(CurrentLocation, diag::note_member_synthesized_at)
9506         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9507       MoveAssignOperator->setInvalidDecl();
9508       return;
9509     }
9510 
9511     // Success! Record the copy.
9512     Statements.push_back(Move.takeAs<Stmt>());
9513   }
9514 
9515   if (!Invalid) {
9516     // Add a "return *this;"
9517     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9518 
9519     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9520     if (Return.isInvalid())
9521       Invalid = true;
9522     else {
9523       Statements.push_back(Return.takeAs<Stmt>());
9524 
9525       if (Trap.hasErrorOccurred()) {
9526         Diag(CurrentLocation, diag::note_member_synthesized_at)
9527           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9528         Invalid = true;
9529       }
9530     }
9531   }
9532 
9533   if (Invalid) {
9534     MoveAssignOperator->setInvalidDecl();
9535     return;
9536   }
9537 
9538   StmtResult Body;
9539   {
9540     CompoundScopeRAII CompoundScope(*this);
9541     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9542                              /*isStmtExpr=*/false);
9543     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9544   }
9545   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
9546 
9547   if (ASTMutationListener *L = getASTMutationListener()) {
9548     L->CompletedImplicitDefinition(MoveAssignOperator);
9549   }
9550 }
9551 
9552 Sema::ImplicitExceptionSpecification
9553 Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
9554   CXXRecordDecl *ClassDecl = MD->getParent();
9555 
9556   ImplicitExceptionSpecification ExceptSpec(*this);
9557   if (ClassDecl->isInvalidDecl())
9558     return ExceptSpec;
9559 
9560   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
9561   assert(T->getNumArgs() >= 1 && "not a copy ctor");
9562   unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
9563 
9564   // C++ [except.spec]p14:
9565   //   An implicitly declared special member function (Clause 12) shall have an
9566   //   exception-specification. [...]
9567   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9568                                        BaseEnd = ClassDecl->bases_end();
9569        Base != BaseEnd;
9570        ++Base) {
9571     // Virtual bases are handled below.
9572     if (Base->isVirtual())
9573       continue;
9574 
9575     CXXRecordDecl *BaseClassDecl
9576       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9577     if (CXXConstructorDecl *CopyConstructor =
9578           LookupCopyingConstructor(BaseClassDecl, Quals))
9579       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9580   }
9581   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9582                                        BaseEnd = ClassDecl->vbases_end();
9583        Base != BaseEnd;
9584        ++Base) {
9585     CXXRecordDecl *BaseClassDecl
9586       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9587     if (CXXConstructorDecl *CopyConstructor =
9588           LookupCopyingConstructor(BaseClassDecl, Quals))
9589       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9590   }
9591   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9592                                   FieldEnd = ClassDecl->field_end();
9593        Field != FieldEnd;
9594        ++Field) {
9595     QualType FieldType = Context.getBaseElementType(Field->getType());
9596     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9597       if (CXXConstructorDecl *CopyConstructor =
9598               LookupCopyingConstructor(FieldClassDecl,
9599                                        Quals | FieldType.getCVRQualifiers()))
9600       ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
9601     }
9602   }
9603 
9604   return ExceptSpec;
9605 }
9606 
9607 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
9608                                                     CXXRecordDecl *ClassDecl) {
9609   // C++ [class.copy]p4:
9610   //   If the class definition does not explicitly declare a copy
9611   //   constructor, one is declared implicitly.
9612   assert(ClassDecl->needsImplicitCopyConstructor());
9613 
9614   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
9615   if (DSM.isAlreadyBeingDeclared())
9616     return 0;
9617 
9618   QualType ClassType = Context.getTypeDeclType(ClassDecl);
9619   QualType ArgType = ClassType;
9620   bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
9621   if (Const)
9622     ArgType = ArgType.withConst();
9623   ArgType = Context.getLValueReferenceType(ArgType);
9624 
9625   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9626                                                      CXXCopyConstructor,
9627                                                      Const);
9628 
9629   DeclarationName Name
9630     = Context.DeclarationNames.getCXXConstructorName(
9631                                            Context.getCanonicalType(ClassType));
9632   SourceLocation ClassLoc = ClassDecl->getLocation();
9633   DeclarationNameInfo NameInfo(Name, ClassLoc);
9634 
9635   //   An implicitly-declared copy constructor is an inline public
9636   //   member of its class.
9637   CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
9638       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9639       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9640       Constexpr);
9641   CopyConstructor->setAccess(AS_public);
9642   CopyConstructor->setDefaulted();
9643 
9644   // Build an exception specification pointing back at this member.
9645   FunctionProtoType::ExtProtoInfo EPI;
9646   EPI.ExceptionSpecType = EST_Unevaluated;
9647   EPI.ExceptionSpecDecl = CopyConstructor;
9648   CopyConstructor->setType(
9649       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9650 
9651   // Add the parameter to the constructor.
9652   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
9653                                                ClassLoc, ClassLoc,
9654                                                /*IdentifierInfo=*/0,
9655                                                ArgType, /*TInfo=*/0,
9656                                                SC_None, 0);
9657   CopyConstructor->setParams(FromParam);
9658 
9659   CopyConstructor->setTrivial(
9660     ClassDecl->needsOverloadResolutionForCopyConstructor()
9661       ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
9662       : ClassDecl->hasTrivialCopyConstructor());
9663 
9664   // C++11 [class.copy]p8:
9665   //   ... If the class definition does not explicitly declare a copy
9666   //   constructor, there is no user-declared move constructor, and there is no
9667   //   user-declared move assignment operator, a copy constructor is implicitly
9668   //   declared as defaulted.
9669   if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
9670     SetDeclDeleted(CopyConstructor, ClassLoc);
9671 
9672   // Note that we have declared this constructor.
9673   ++ASTContext::NumImplicitCopyConstructorsDeclared;
9674 
9675   if (Scope *S = getScopeForContext(ClassDecl))
9676     PushOnScopeChains(CopyConstructor, S, false);
9677   ClassDecl->addDecl(CopyConstructor);
9678 
9679   return CopyConstructor;
9680 }
9681 
9682 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
9683                                    CXXConstructorDecl *CopyConstructor) {
9684   assert((CopyConstructor->isDefaulted() &&
9685           CopyConstructor->isCopyConstructor() &&
9686           !CopyConstructor->doesThisDeclarationHaveABody() &&
9687           !CopyConstructor->isDeleted()) &&
9688          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
9689 
9690   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
9691   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
9692 
9693   // C++11 [class.copy]p7:
9694   //   The [definition of an implicitly declared copy constructro] is
9695   //   deprecated if the class has a user-declared copy assignment operator
9696   //   or a user-declared destructor.
9697   if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
9698     diagnoseDeprecatedCopyOperation(*this, CopyConstructor, CurrentLocation);
9699 
9700   SynthesizedFunctionScope Scope(*this, CopyConstructor);
9701   DiagnosticErrorTrap Trap(Diags);
9702 
9703   if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) ||
9704       Trap.hasErrorOccurred()) {
9705     Diag(CurrentLocation, diag::note_member_synthesized_at)
9706       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
9707     CopyConstructor->setInvalidDecl();
9708   }  else {
9709     Sema::CompoundScopeRAII CompoundScope(*this);
9710     CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
9711                                                CopyConstructor->getLocation(),
9712                                                MultiStmtArg(),
9713                                                /*isStmtExpr=*/false)
9714                                                               .takeAs<Stmt>());
9715     CopyConstructor->setImplicitlyDefined(true);
9716   }
9717 
9718   CopyConstructor->setUsed();
9719   if (ASTMutationListener *L = getASTMutationListener()) {
9720     L->CompletedImplicitDefinition(CopyConstructor);
9721   }
9722 }
9723 
9724 Sema::ImplicitExceptionSpecification
9725 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
9726   CXXRecordDecl *ClassDecl = MD->getParent();
9727 
9728   // C++ [except.spec]p14:
9729   //   An implicitly declared special member function (Clause 12) shall have an
9730   //   exception-specification. [...]
9731   ImplicitExceptionSpecification ExceptSpec(*this);
9732   if (ClassDecl->isInvalidDecl())
9733     return ExceptSpec;
9734 
9735   // Direct base-class constructors.
9736   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
9737                                        BEnd = ClassDecl->bases_end();
9738        B != BEnd; ++B) {
9739     if (B->isVirtual()) // Handled below.
9740       continue;
9741 
9742     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9743       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9744       CXXConstructorDecl *Constructor =
9745           LookupMovingConstructor(BaseClassDecl, 0);
9746       // If this is a deleted function, add it anyway. This might be conformant
9747       // with the standard. This might not. I'm not sure. It might not matter.
9748       if (Constructor)
9749         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9750     }
9751   }
9752 
9753   // Virtual base-class constructors.
9754   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
9755                                        BEnd = ClassDecl->vbases_end();
9756        B != BEnd; ++B) {
9757     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9758       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9759       CXXConstructorDecl *Constructor =
9760           LookupMovingConstructor(BaseClassDecl, 0);
9761       // If this is a deleted function, add it anyway. This might be conformant
9762       // with the standard. This might not. I'm not sure. It might not matter.
9763       if (Constructor)
9764         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9765     }
9766   }
9767 
9768   // Field constructors.
9769   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
9770                                FEnd = ClassDecl->field_end();
9771        F != FEnd; ++F) {
9772     QualType FieldType = Context.getBaseElementType(F->getType());
9773     if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
9774       CXXConstructorDecl *Constructor =
9775           LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
9776       // If this is a deleted function, add it anyway. This might be conformant
9777       // with the standard. This might not. I'm not sure. It might not matter.
9778       // In particular, the problem is that this function never gets called. It
9779       // might just be ill-formed because this function attempts to refer to
9780       // a deleted function here.
9781       if (Constructor)
9782         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
9783     }
9784   }
9785 
9786   return ExceptSpec;
9787 }
9788 
9789 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
9790                                                     CXXRecordDecl *ClassDecl) {
9791   // C++11 [class.copy]p9:
9792   //   If the definition of a class X does not explicitly declare a move
9793   //   constructor, one will be implicitly declared as defaulted if and only if:
9794   //
9795   //   - [first 4 bullets]
9796   assert(ClassDecl->needsImplicitMoveConstructor());
9797 
9798   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
9799   if (DSM.isAlreadyBeingDeclared())
9800     return 0;
9801 
9802   // [Checked after we build the declaration]
9803   //   - the move assignment operator would not be implicitly defined as
9804   //     deleted,
9805 
9806   // [DR1402]:
9807   //   - each of X's non-static data members and direct or virtual base classes
9808   //     has a type that either has a move constructor or is trivially copyable.
9809   if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
9810     ClassDecl->setFailedImplicitMoveConstructor();
9811     return 0;
9812   }
9813 
9814   QualType ClassType = Context.getTypeDeclType(ClassDecl);
9815   QualType ArgType = Context.getRValueReferenceType(ClassType);
9816 
9817   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9818                                                      CXXMoveConstructor,
9819                                                      false);
9820 
9821   DeclarationName Name
9822     = Context.DeclarationNames.getCXXConstructorName(
9823                                            Context.getCanonicalType(ClassType));
9824   SourceLocation ClassLoc = ClassDecl->getLocation();
9825   DeclarationNameInfo NameInfo(Name, ClassLoc);
9826 
9827   // C++11 [class.copy]p11:
9828   //   An implicitly-declared copy/move constructor is an inline public
9829   //   member of its class.
9830   CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
9831       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9832       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9833       Constexpr);
9834   MoveConstructor->setAccess(AS_public);
9835   MoveConstructor->setDefaulted();
9836 
9837   // Build an exception specification pointing back at this member.
9838   FunctionProtoType::ExtProtoInfo EPI;
9839   EPI.ExceptionSpecType = EST_Unevaluated;
9840   EPI.ExceptionSpecDecl = MoveConstructor;
9841   MoveConstructor->setType(
9842       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9843 
9844   // Add the parameter to the constructor.
9845   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
9846                                                ClassLoc, ClassLoc,
9847                                                /*IdentifierInfo=*/0,
9848                                                ArgType, /*TInfo=*/0,
9849                                                SC_None, 0);
9850   MoveConstructor->setParams(FromParam);
9851 
9852   MoveConstructor->setTrivial(
9853     ClassDecl->needsOverloadResolutionForMoveConstructor()
9854       ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
9855       : ClassDecl->hasTrivialMoveConstructor());
9856 
9857   // C++0x [class.copy]p9:
9858   //   If the definition of a class X does not explicitly declare a move
9859   //   constructor, one will be implicitly declared as defaulted if and only if:
9860   //   [...]
9861   //   - the move constructor would not be implicitly defined as deleted.
9862   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
9863     // Cache this result so that we don't try to generate this over and over
9864     // on every lookup, leaking memory and wasting time.
9865     ClassDecl->setFailedImplicitMoveConstructor();
9866     return 0;
9867   }
9868 
9869   // Note that we have declared this constructor.
9870   ++ASTContext::NumImplicitMoveConstructorsDeclared;
9871 
9872   if (Scope *S = getScopeForContext(ClassDecl))
9873     PushOnScopeChains(MoveConstructor, S, false);
9874   ClassDecl->addDecl(MoveConstructor);
9875 
9876   return MoveConstructor;
9877 }
9878 
9879 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
9880                                    CXXConstructorDecl *MoveConstructor) {
9881   assert((MoveConstructor->isDefaulted() &&
9882           MoveConstructor->isMoveConstructor() &&
9883           !MoveConstructor->doesThisDeclarationHaveABody() &&
9884           !MoveConstructor->isDeleted()) &&
9885          "DefineImplicitMoveConstructor - call it for implicit move ctor");
9886 
9887   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
9888   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
9889 
9890   SynthesizedFunctionScope Scope(*this, MoveConstructor);
9891   DiagnosticErrorTrap Trap(Diags);
9892 
9893   if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) ||
9894       Trap.hasErrorOccurred()) {
9895     Diag(CurrentLocation, diag::note_member_synthesized_at)
9896       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
9897     MoveConstructor->setInvalidDecl();
9898   }  else {
9899     Sema::CompoundScopeRAII CompoundScope(*this);
9900     MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
9901                                                MoveConstructor->getLocation(),
9902                                                MultiStmtArg(),
9903                                                /*isStmtExpr=*/false)
9904                                                               .takeAs<Stmt>());
9905     MoveConstructor->setImplicitlyDefined(true);
9906   }
9907 
9908   MoveConstructor->setUsed();
9909 
9910   if (ASTMutationListener *L = getASTMutationListener()) {
9911     L->CompletedImplicitDefinition(MoveConstructor);
9912   }
9913 }
9914 
9915 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
9916   return FD->isDeleted() &&
9917          (FD->isDefaulted() || FD->isImplicit()) &&
9918          isa<CXXMethodDecl>(FD);
9919 }
9920 
9921 /// \brief Mark the call operator of the given lambda closure type as "used".
9922 static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
9923   CXXMethodDecl *CallOperator
9924     = cast<CXXMethodDecl>(
9925         Lambda->lookup(
9926           S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
9927   CallOperator->setReferenced();
9928   CallOperator->setUsed();
9929 }
9930 
9931 void Sema::DefineImplicitLambdaToFunctionPointerConversion(
9932        SourceLocation CurrentLocation,
9933        CXXConversionDecl *Conv)
9934 {
9935   CXXRecordDecl *Lambda = Conv->getParent();
9936 
9937   // Make sure that the lambda call operator is marked used.
9938   markLambdaCallOperatorUsed(*this, Lambda);
9939 
9940   Conv->setUsed();
9941 
9942   SynthesizedFunctionScope Scope(*this, Conv);
9943   DiagnosticErrorTrap Trap(Diags);
9944 
9945   // Return the address of the __invoke function.
9946   DeclarationName InvokeName = &Context.Idents.get("__invoke");
9947   CXXMethodDecl *Invoke
9948     = cast<CXXMethodDecl>(Lambda->lookup(InvokeName).front());
9949   Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
9950                                        VK_LValue, Conv->getLocation()).take();
9951   assert(FunctionRef && "Can't refer to __invoke function?");
9952   Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
9953   Conv->setBody(new (Context) CompoundStmt(Context, Return,
9954                                            Conv->getLocation(),
9955                                            Conv->getLocation()));
9956 
9957   // Fill in the __invoke function with a dummy implementation. IR generation
9958   // will fill in the actual details.
9959   Invoke->setUsed();
9960   Invoke->setReferenced();
9961   Invoke->setBody(new (Context) CompoundStmt(Conv->getLocation()));
9962 
9963   if (ASTMutationListener *L = getASTMutationListener()) {
9964     L->CompletedImplicitDefinition(Conv);
9965     L->CompletedImplicitDefinition(Invoke);
9966   }
9967 }
9968 
9969 void Sema::DefineImplicitLambdaToBlockPointerConversion(
9970        SourceLocation CurrentLocation,
9971        CXXConversionDecl *Conv)
9972 {
9973   Conv->setUsed();
9974 
9975   SynthesizedFunctionScope Scope(*this, Conv);
9976   DiagnosticErrorTrap Trap(Diags);
9977 
9978   // Copy-initialize the lambda object as needed to capture it.
9979   Expr *This = ActOnCXXThis(CurrentLocation).take();
9980   Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
9981 
9982   ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
9983                                                         Conv->getLocation(),
9984                                                         Conv, DerefThis);
9985 
9986   // If we're not under ARC, make sure we still get the _Block_copy/autorelease
9987   // behavior.  Note that only the general conversion function does this
9988   // (since it's unusable otherwise); in the case where we inline the
9989   // block literal, it has block literal lifetime semantics.
9990   if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
9991     BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
9992                                           CK_CopyAndAutoreleaseBlockObject,
9993                                           BuildBlock.get(), 0, VK_RValue);
9994 
9995   if (BuildBlock.isInvalid()) {
9996     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
9997     Conv->setInvalidDecl();
9998     return;
9999   }
10000 
10001   // Create the return statement that returns the block from the conversion
10002   // function.
10003   StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
10004   if (Return.isInvalid()) {
10005     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10006     Conv->setInvalidDecl();
10007     return;
10008   }
10009 
10010   // Set the body of the conversion function.
10011   Stmt *ReturnS = Return.take();
10012   Conv->setBody(new (Context) CompoundStmt(Context, ReturnS,
10013                                            Conv->getLocation(),
10014                                            Conv->getLocation()));
10015 
10016   // We're done; notify the mutation listener, if any.
10017   if (ASTMutationListener *L = getASTMutationListener()) {
10018     L->CompletedImplicitDefinition(Conv);
10019   }
10020 }
10021 
10022 /// \brief Determine whether the given list arguments contains exactly one
10023 /// "real" (non-default) argument.
10024 static bool hasOneRealArgument(MultiExprArg Args) {
10025   switch (Args.size()) {
10026   case 0:
10027     return false;
10028 
10029   default:
10030     if (!Args[1]->isDefaultArgument())
10031       return false;
10032 
10033     // fall through
10034   case 1:
10035     return !Args[0]->isDefaultArgument();
10036   }
10037 
10038   return false;
10039 }
10040 
10041 ExprResult
10042 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10043                             CXXConstructorDecl *Constructor,
10044                             MultiExprArg ExprArgs,
10045                             bool HadMultipleCandidates,
10046                             bool IsListInitialization,
10047                             bool RequiresZeroInit,
10048                             unsigned ConstructKind,
10049                             SourceRange ParenRange) {
10050   bool Elidable = false;
10051 
10052   // C++0x [class.copy]p34:
10053   //   When certain criteria are met, an implementation is allowed to
10054   //   omit the copy/move construction of a class object, even if the
10055   //   copy/move constructor and/or destructor for the object have
10056   //   side effects. [...]
10057   //     - when a temporary class object that has not been bound to a
10058   //       reference (12.2) would be copied/moved to a class object
10059   //       with the same cv-unqualified type, the copy/move operation
10060   //       can be omitted by constructing the temporary object
10061   //       directly into the target of the omitted copy/move
10062   if (ConstructKind == CXXConstructExpr::CK_Complete &&
10063       Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
10064     Expr *SubExpr = ExprArgs[0];
10065     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
10066   }
10067 
10068   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
10069                                Elidable, ExprArgs, HadMultipleCandidates,
10070                                IsListInitialization, RequiresZeroInit,
10071                                ConstructKind, ParenRange);
10072 }
10073 
10074 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
10075 /// including handling of its default argument expressions.
10076 ExprResult
10077 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10078                             CXXConstructorDecl *Constructor, bool Elidable,
10079                             MultiExprArg ExprArgs,
10080                             bool HadMultipleCandidates,
10081                             bool IsListInitialization,
10082                             bool RequiresZeroInit,
10083                             unsigned ConstructKind,
10084                             SourceRange ParenRange) {
10085   MarkFunctionReferenced(ConstructLoc, Constructor);
10086   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
10087                                         Constructor, Elidable, ExprArgs,
10088                                         HadMultipleCandidates,
10089                                         IsListInitialization, RequiresZeroInit,
10090               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
10091                                         ParenRange));
10092 }
10093 
10094 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
10095   if (VD->isInvalidDecl()) return;
10096 
10097   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
10098   if (ClassDecl->isInvalidDecl()) return;
10099   if (ClassDecl->hasIrrelevantDestructor()) return;
10100   if (ClassDecl->isDependentContext()) return;
10101 
10102   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
10103   MarkFunctionReferenced(VD->getLocation(), Destructor);
10104   CheckDestructorAccess(VD->getLocation(), Destructor,
10105                         PDiag(diag::err_access_dtor_var)
10106                         << VD->getDeclName()
10107                         << VD->getType());
10108   DiagnoseUseOfDecl(Destructor, VD->getLocation());
10109 
10110   if (!VD->hasGlobalStorage()) return;
10111 
10112   // Emit warning for non-trivial dtor in global scope (a real global,
10113   // class-static, function-static).
10114   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
10115 
10116   // TODO: this should be re-enabled for static locals by !CXAAtExit
10117   if (!VD->isStaticLocal())
10118     Diag(VD->getLocation(), diag::warn_global_destructor);
10119 }
10120 
10121 /// \brief Given a constructor and the set of arguments provided for the
10122 /// constructor, convert the arguments and add any required default arguments
10123 /// to form a proper call to this constructor.
10124 ///
10125 /// \returns true if an error occurred, false otherwise.
10126 bool
10127 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
10128                               MultiExprArg ArgsPtr,
10129                               SourceLocation Loc,
10130                               SmallVectorImpl<Expr*> &ConvertedArgs,
10131                               bool AllowExplicit,
10132                               bool IsListInitialization) {
10133   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
10134   unsigned NumArgs = ArgsPtr.size();
10135   Expr **Args = ArgsPtr.data();
10136 
10137   const FunctionProtoType *Proto
10138     = Constructor->getType()->getAs<FunctionProtoType>();
10139   assert(Proto && "Constructor without a prototype?");
10140   unsigned NumArgsInProto = Proto->getNumArgs();
10141 
10142   // If too few arguments are available, we'll fill in the rest with defaults.
10143   if (NumArgs < NumArgsInProto)
10144     ConvertedArgs.reserve(NumArgsInProto);
10145   else
10146     ConvertedArgs.reserve(NumArgs);
10147 
10148   VariadicCallType CallType =
10149     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
10150   SmallVector<Expr *, 8> AllArgs;
10151   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
10152                                         Proto, 0,
10153                                         llvm::makeArrayRef(Args, NumArgs),
10154                                         AllArgs,
10155                                         CallType, AllowExplicit,
10156                                         IsListInitialization);
10157   ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
10158 
10159   DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
10160 
10161   CheckConstructorCall(Constructor,
10162                        llvm::makeArrayRef<const Expr *>(AllArgs.data(),
10163                                                         AllArgs.size()),
10164                        Proto, Loc);
10165 
10166   return Invalid;
10167 }
10168 
10169 static inline bool
10170 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
10171                                        const FunctionDecl *FnDecl) {
10172   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
10173   if (isa<NamespaceDecl>(DC)) {
10174     return SemaRef.Diag(FnDecl->getLocation(),
10175                         diag::err_operator_new_delete_declared_in_namespace)
10176       << FnDecl->getDeclName();
10177   }
10178 
10179   if (isa<TranslationUnitDecl>(DC) &&
10180       FnDecl->getStorageClass() == SC_Static) {
10181     return SemaRef.Diag(FnDecl->getLocation(),
10182                         diag::err_operator_new_delete_declared_static)
10183       << FnDecl->getDeclName();
10184   }
10185 
10186   return false;
10187 }
10188 
10189 static inline bool
10190 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
10191                             CanQualType ExpectedResultType,
10192                             CanQualType ExpectedFirstParamType,
10193                             unsigned DependentParamTypeDiag,
10194                             unsigned InvalidParamTypeDiag) {
10195   QualType ResultType =
10196     FnDecl->getType()->getAs<FunctionType>()->getResultType();
10197 
10198   // Check that the result type is not dependent.
10199   if (ResultType->isDependentType())
10200     return SemaRef.Diag(FnDecl->getLocation(),
10201                         diag::err_operator_new_delete_dependent_result_type)
10202     << FnDecl->getDeclName() << ExpectedResultType;
10203 
10204   // Check that the result type is what we expect.
10205   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
10206     return SemaRef.Diag(FnDecl->getLocation(),
10207                         diag::err_operator_new_delete_invalid_result_type)
10208     << FnDecl->getDeclName() << ExpectedResultType;
10209 
10210   // A function template must have at least 2 parameters.
10211   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
10212     return SemaRef.Diag(FnDecl->getLocation(),
10213                       diag::err_operator_new_delete_template_too_few_parameters)
10214         << FnDecl->getDeclName();
10215 
10216   // The function decl must have at least 1 parameter.
10217   if (FnDecl->getNumParams() == 0)
10218     return SemaRef.Diag(FnDecl->getLocation(),
10219                         diag::err_operator_new_delete_too_few_parameters)
10220       << FnDecl->getDeclName();
10221 
10222   // Check the first parameter type is not dependent.
10223   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
10224   if (FirstParamType->isDependentType())
10225     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
10226       << FnDecl->getDeclName() << ExpectedFirstParamType;
10227 
10228   // Check that the first parameter type is what we expect.
10229   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
10230       ExpectedFirstParamType)
10231     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
10232     << FnDecl->getDeclName() << ExpectedFirstParamType;
10233 
10234   return false;
10235 }
10236 
10237 static bool
10238 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
10239   // C++ [basic.stc.dynamic.allocation]p1:
10240   //   A program is ill-formed if an allocation function is declared in a
10241   //   namespace scope other than global scope or declared static in global
10242   //   scope.
10243   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10244     return true;
10245 
10246   CanQualType SizeTy =
10247     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
10248 
10249   // C++ [basic.stc.dynamic.allocation]p1:
10250   //  The return type shall be void*. The first parameter shall have type
10251   //  std::size_t.
10252   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
10253                                   SizeTy,
10254                                   diag::err_operator_new_dependent_param_type,
10255                                   diag::err_operator_new_param_type))
10256     return true;
10257 
10258   // C++ [basic.stc.dynamic.allocation]p1:
10259   //  The first parameter shall not have an associated default argument.
10260   if (FnDecl->getParamDecl(0)->hasDefaultArg())
10261     return SemaRef.Diag(FnDecl->getLocation(),
10262                         diag::err_operator_new_default_arg)
10263       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
10264 
10265   return false;
10266 }
10267 
10268 static bool
10269 CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
10270   // C++ [basic.stc.dynamic.deallocation]p1:
10271   //   A program is ill-formed if deallocation functions are declared in a
10272   //   namespace scope other than global scope or declared static in global
10273   //   scope.
10274   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10275     return true;
10276 
10277   // C++ [basic.stc.dynamic.deallocation]p2:
10278   //   Each deallocation function shall return void and its first parameter
10279   //   shall be void*.
10280   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
10281                                   SemaRef.Context.VoidPtrTy,
10282                                  diag::err_operator_delete_dependent_param_type,
10283                                  diag::err_operator_delete_param_type))
10284     return true;
10285 
10286   return false;
10287 }
10288 
10289 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
10290 /// of this overloaded operator is well-formed. If so, returns false;
10291 /// otherwise, emits appropriate diagnostics and returns true.
10292 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
10293   assert(FnDecl && FnDecl->isOverloadedOperator() &&
10294          "Expected an overloaded operator declaration");
10295 
10296   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
10297 
10298   // C++ [over.oper]p5:
10299   //   The allocation and deallocation functions, operator new,
10300   //   operator new[], operator delete and operator delete[], are
10301   //   described completely in 3.7.3. The attributes and restrictions
10302   //   found in the rest of this subclause do not apply to them unless
10303   //   explicitly stated in 3.7.3.
10304   if (Op == OO_Delete || Op == OO_Array_Delete)
10305     return CheckOperatorDeleteDeclaration(*this, FnDecl);
10306 
10307   if (Op == OO_New || Op == OO_Array_New)
10308     return CheckOperatorNewDeclaration(*this, FnDecl);
10309 
10310   // C++ [over.oper]p6:
10311   //   An operator function shall either be a non-static member
10312   //   function or be a non-member function and have at least one
10313   //   parameter whose type is a class, a reference to a class, an
10314   //   enumeration, or a reference to an enumeration.
10315   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
10316     if (MethodDecl->isStatic())
10317       return Diag(FnDecl->getLocation(),
10318                   diag::err_operator_overload_static) << FnDecl->getDeclName();
10319   } else {
10320     bool ClassOrEnumParam = false;
10321     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10322                                    ParamEnd = FnDecl->param_end();
10323          Param != ParamEnd; ++Param) {
10324       QualType ParamType = (*Param)->getType().getNonReferenceType();
10325       if (ParamType->isDependentType() || ParamType->isRecordType() ||
10326           ParamType->isEnumeralType()) {
10327         ClassOrEnumParam = true;
10328         break;
10329       }
10330     }
10331 
10332     if (!ClassOrEnumParam)
10333       return Diag(FnDecl->getLocation(),
10334                   diag::err_operator_overload_needs_class_or_enum)
10335         << FnDecl->getDeclName();
10336   }
10337 
10338   // C++ [over.oper]p8:
10339   //   An operator function cannot have default arguments (8.3.6),
10340   //   except where explicitly stated below.
10341   //
10342   // Only the function-call operator allows default arguments
10343   // (C++ [over.call]p1).
10344   if (Op != OO_Call) {
10345     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
10346          Param != FnDecl->param_end(); ++Param) {
10347       if ((*Param)->hasDefaultArg())
10348         return Diag((*Param)->getLocation(),
10349                     diag::err_operator_overload_default_arg)
10350           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
10351     }
10352   }
10353 
10354   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
10355     { false, false, false }
10356 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
10357     , { Unary, Binary, MemberOnly }
10358 #include "clang/Basic/OperatorKinds.def"
10359   };
10360 
10361   bool CanBeUnaryOperator = OperatorUses[Op][0];
10362   bool CanBeBinaryOperator = OperatorUses[Op][1];
10363   bool MustBeMemberOperator = OperatorUses[Op][2];
10364 
10365   // C++ [over.oper]p8:
10366   //   [...] Operator functions cannot have more or fewer parameters
10367   //   than the number required for the corresponding operator, as
10368   //   described in the rest of this subclause.
10369   unsigned NumParams = FnDecl->getNumParams()
10370                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
10371   if (Op != OO_Call &&
10372       ((NumParams == 1 && !CanBeUnaryOperator) ||
10373        (NumParams == 2 && !CanBeBinaryOperator) ||
10374        (NumParams < 1) || (NumParams > 2))) {
10375     // We have the wrong number of parameters.
10376     unsigned ErrorKind;
10377     if (CanBeUnaryOperator && CanBeBinaryOperator) {
10378       ErrorKind = 2;  // 2 -> unary or binary.
10379     } else if (CanBeUnaryOperator) {
10380       ErrorKind = 0;  // 0 -> unary
10381     } else {
10382       assert(CanBeBinaryOperator &&
10383              "All non-call overloaded operators are unary or binary!");
10384       ErrorKind = 1;  // 1 -> binary
10385     }
10386 
10387     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
10388       << FnDecl->getDeclName() << NumParams << ErrorKind;
10389   }
10390 
10391   // Overloaded operators other than operator() cannot be variadic.
10392   if (Op != OO_Call &&
10393       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
10394     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
10395       << FnDecl->getDeclName();
10396   }
10397 
10398   // Some operators must be non-static member functions.
10399   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
10400     return Diag(FnDecl->getLocation(),
10401                 diag::err_operator_overload_must_be_member)
10402       << FnDecl->getDeclName();
10403   }
10404 
10405   // C++ [over.inc]p1:
10406   //   The user-defined function called operator++ implements the
10407   //   prefix and postfix ++ operator. If this function is a member
10408   //   function with no parameters, or a non-member function with one
10409   //   parameter of class or enumeration type, it defines the prefix
10410   //   increment operator ++ for objects of that type. If the function
10411   //   is a member function with one parameter (which shall be of type
10412   //   int) or a non-member function with two parameters (the second
10413   //   of which shall be of type int), it defines the postfix
10414   //   increment operator ++ for objects of that type.
10415   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
10416     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
10417     bool ParamIsInt = false;
10418     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
10419       ParamIsInt = BT->getKind() == BuiltinType::Int;
10420 
10421     if (!ParamIsInt)
10422       return Diag(LastParam->getLocation(),
10423                   diag::err_operator_overload_post_incdec_must_be_int)
10424         << LastParam->getType() << (Op == OO_MinusMinus);
10425   }
10426 
10427   return false;
10428 }
10429 
10430 /// CheckLiteralOperatorDeclaration - Check whether the declaration
10431 /// of this literal operator function is well-formed. If so, returns
10432 /// false; otherwise, emits appropriate diagnostics and returns true.
10433 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
10434   if (isa<CXXMethodDecl>(FnDecl)) {
10435     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
10436       << FnDecl->getDeclName();
10437     return true;
10438   }
10439 
10440   if (FnDecl->isExternC()) {
10441     Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
10442     return true;
10443   }
10444 
10445   bool Valid = false;
10446 
10447   // This might be the definition of a literal operator template.
10448   FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
10449   // This might be a specialization of a literal operator template.
10450   if (!TpDecl)
10451     TpDecl = FnDecl->getPrimaryTemplate();
10452 
10453   // template <char...> type operator "" name() is the only valid template
10454   // signature, and the only valid signature with no parameters.
10455   if (TpDecl) {
10456     if (FnDecl->param_size() == 0) {
10457       // Must have only one template parameter
10458       TemplateParameterList *Params = TpDecl->getTemplateParameters();
10459       if (Params->size() == 1) {
10460         NonTypeTemplateParmDecl *PmDecl =
10461           dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
10462 
10463         // The template parameter must be a char parameter pack.
10464         if (PmDecl && PmDecl->isTemplateParameterPack() &&
10465             Context.hasSameType(PmDecl->getType(), Context.CharTy))
10466           Valid = true;
10467       }
10468     }
10469   } else if (FnDecl->param_size()) {
10470     // Check the first parameter
10471     FunctionDecl::param_iterator Param = FnDecl->param_begin();
10472 
10473     QualType T = (*Param)->getType().getUnqualifiedType();
10474 
10475     // unsigned long long int, long double, and any character type are allowed
10476     // as the only parameters.
10477     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
10478         Context.hasSameType(T, Context.LongDoubleTy) ||
10479         Context.hasSameType(T, Context.CharTy) ||
10480         Context.hasSameType(T, Context.WideCharTy) ||
10481         Context.hasSameType(T, Context.Char16Ty) ||
10482         Context.hasSameType(T, Context.Char32Ty)) {
10483       if (++Param == FnDecl->param_end())
10484         Valid = true;
10485       goto FinishedParams;
10486     }
10487 
10488     // Otherwise it must be a pointer to const; let's strip those qualifiers.
10489     const PointerType *PT = T->getAs<PointerType>();
10490     if (!PT)
10491       goto FinishedParams;
10492     T = PT->getPointeeType();
10493     if (!T.isConstQualified() || T.isVolatileQualified())
10494       goto FinishedParams;
10495     T = T.getUnqualifiedType();
10496 
10497     // Move on to the second parameter;
10498     ++Param;
10499 
10500     // If there is no second parameter, the first must be a const char *
10501     if (Param == FnDecl->param_end()) {
10502       if (Context.hasSameType(T, Context.CharTy))
10503         Valid = true;
10504       goto FinishedParams;
10505     }
10506 
10507     // const char *, const wchar_t*, const char16_t*, and const char32_t*
10508     // are allowed as the first parameter to a two-parameter function
10509     if (!(Context.hasSameType(T, Context.CharTy) ||
10510           Context.hasSameType(T, Context.WideCharTy) ||
10511           Context.hasSameType(T, Context.Char16Ty) ||
10512           Context.hasSameType(T, Context.Char32Ty)))
10513       goto FinishedParams;
10514 
10515     // The second and final parameter must be an std::size_t
10516     T = (*Param)->getType().getUnqualifiedType();
10517     if (Context.hasSameType(T, Context.getSizeType()) &&
10518         ++Param == FnDecl->param_end())
10519       Valid = true;
10520   }
10521 
10522   // FIXME: This diagnostic is absolutely terrible.
10523 FinishedParams:
10524   if (!Valid) {
10525     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
10526       << FnDecl->getDeclName();
10527     return true;
10528   }
10529 
10530   // A parameter-declaration-clause containing a default argument is not
10531   // equivalent to any of the permitted forms.
10532   for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10533                                     ParamEnd = FnDecl->param_end();
10534        Param != ParamEnd; ++Param) {
10535     if ((*Param)->hasDefaultArg()) {
10536       Diag((*Param)->getDefaultArgRange().getBegin(),
10537            diag::err_literal_operator_default_argument)
10538         << (*Param)->getDefaultArgRange();
10539       break;
10540     }
10541   }
10542 
10543   StringRef LiteralName
10544     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
10545   if (LiteralName[0] != '_') {
10546     // C++11 [usrlit.suffix]p1:
10547     //   Literal suffix identifiers that do not start with an underscore
10548     //   are reserved for future standardization.
10549     Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
10550   }
10551 
10552   return false;
10553 }
10554 
10555 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
10556 /// linkage specification, including the language and (if present)
10557 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
10558 /// the location of the language string literal, which is provided
10559 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
10560 /// the '{' brace. Otherwise, this linkage specification does not
10561 /// have any braces.
10562 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
10563                                            SourceLocation LangLoc,
10564                                            StringRef Lang,
10565                                            SourceLocation LBraceLoc) {
10566   LinkageSpecDecl::LanguageIDs Language;
10567   if (Lang == "\"C\"")
10568     Language = LinkageSpecDecl::lang_c;
10569   else if (Lang == "\"C++\"")
10570     Language = LinkageSpecDecl::lang_cxx;
10571   else {
10572     Diag(LangLoc, diag::err_bad_language);
10573     return 0;
10574   }
10575 
10576   // FIXME: Add all the various semantics of linkage specifications
10577 
10578   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
10579                                                ExternLoc, LangLoc, Language,
10580                                                LBraceLoc.isValid());
10581   CurContext->addDecl(D);
10582   PushDeclContext(S, D);
10583   return D;
10584 }
10585 
10586 /// ActOnFinishLinkageSpecification - Complete the definition of
10587 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
10588 /// valid, it's the position of the closing '}' brace in a linkage
10589 /// specification that uses braces.
10590 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
10591                                             Decl *LinkageSpec,
10592                                             SourceLocation RBraceLoc) {
10593   if (LinkageSpec) {
10594     if (RBraceLoc.isValid()) {
10595       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
10596       LSDecl->setRBraceLoc(RBraceLoc);
10597     }
10598     PopDeclContext();
10599   }
10600   return LinkageSpec;
10601 }
10602 
10603 Decl *Sema::ActOnEmptyDeclaration(Scope *S,
10604                                   AttributeList *AttrList,
10605                                   SourceLocation SemiLoc) {
10606   Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
10607   // Attribute declarations appertain to empty declaration so we handle
10608   // them here.
10609   if (AttrList)
10610     ProcessDeclAttributeList(S, ED, AttrList);
10611 
10612   CurContext->addDecl(ED);
10613   return ED;
10614 }
10615 
10616 /// \brief Perform semantic analysis for the variable declaration that
10617 /// occurs within a C++ catch clause, returning the newly-created
10618 /// variable.
10619 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
10620                                          TypeSourceInfo *TInfo,
10621                                          SourceLocation StartLoc,
10622                                          SourceLocation Loc,
10623                                          IdentifierInfo *Name) {
10624   bool Invalid = false;
10625   QualType ExDeclType = TInfo->getType();
10626 
10627   // Arrays and functions decay.
10628   if (ExDeclType->isArrayType())
10629     ExDeclType = Context.getArrayDecayedType(ExDeclType);
10630   else if (ExDeclType->isFunctionType())
10631     ExDeclType = Context.getPointerType(ExDeclType);
10632 
10633   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
10634   // The exception-declaration shall not denote a pointer or reference to an
10635   // incomplete type, other than [cv] void*.
10636   // N2844 forbids rvalue references.
10637   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
10638     Diag(Loc, diag::err_catch_rvalue_ref);
10639     Invalid = true;
10640   }
10641 
10642   QualType BaseType = ExDeclType;
10643   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
10644   unsigned DK = diag::err_catch_incomplete;
10645   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
10646     BaseType = Ptr->getPointeeType();
10647     Mode = 1;
10648     DK = diag::err_catch_incomplete_ptr;
10649   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
10650     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
10651     BaseType = Ref->getPointeeType();
10652     Mode = 2;
10653     DK = diag::err_catch_incomplete_ref;
10654   }
10655   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
10656       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
10657     Invalid = true;
10658 
10659   if (!Invalid && !ExDeclType->isDependentType() &&
10660       RequireNonAbstractType(Loc, ExDeclType,
10661                              diag::err_abstract_type_in_decl,
10662                              AbstractVariableType))
10663     Invalid = true;
10664 
10665   // Only the non-fragile NeXT runtime currently supports C++ catches
10666   // of ObjC types, and no runtime supports catching ObjC types by value.
10667   if (!Invalid && getLangOpts().ObjC1) {
10668     QualType T = ExDeclType;
10669     if (const ReferenceType *RT = T->getAs<ReferenceType>())
10670       T = RT->getPointeeType();
10671 
10672     if (T->isObjCObjectType()) {
10673       Diag(Loc, diag::err_objc_object_catch);
10674       Invalid = true;
10675     } else if (T->isObjCObjectPointerType()) {
10676       // FIXME: should this be a test for macosx-fragile specifically?
10677       if (getLangOpts().ObjCRuntime.isFragile())
10678         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
10679     }
10680   }
10681 
10682   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
10683                                     ExDeclType, TInfo, SC_None);
10684   ExDecl->setExceptionVariable(true);
10685 
10686   // In ARC, infer 'retaining' for variables of retainable type.
10687   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
10688     Invalid = true;
10689 
10690   if (!Invalid && !ExDeclType->isDependentType()) {
10691     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
10692       // Insulate this from anything else we might currently be parsing.
10693       EnterExpressionEvaluationContext scope(*this, PotentiallyEvaluated);
10694 
10695       // C++ [except.handle]p16:
10696       //   The object declared in an exception-declaration or, if the
10697       //   exception-declaration does not specify a name, a temporary (12.2) is
10698       //   copy-initialized (8.5) from the exception object. [...]
10699       //   The object is destroyed when the handler exits, after the destruction
10700       //   of any automatic objects initialized within the handler.
10701       //
10702       // We just pretend to initialize the object with itself, then make sure
10703       // it can be destroyed later.
10704       QualType initType = ExDeclType;
10705 
10706       InitializedEntity entity =
10707         InitializedEntity::InitializeVariable(ExDecl);
10708       InitializationKind initKind =
10709         InitializationKind::CreateCopy(Loc, SourceLocation());
10710 
10711       Expr *opaqueValue =
10712         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
10713       InitializationSequence sequence(*this, entity, initKind, opaqueValue);
10714       ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
10715       if (result.isInvalid())
10716         Invalid = true;
10717       else {
10718         // If the constructor used was non-trivial, set this as the
10719         // "initializer".
10720         CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
10721         if (!construct->getConstructor()->isTrivial()) {
10722           Expr *init = MaybeCreateExprWithCleanups(construct);
10723           ExDecl->setInit(init);
10724         }
10725 
10726         // And make sure it's destructable.
10727         FinalizeVarWithDestructor(ExDecl, recordType);
10728       }
10729     }
10730   }
10731 
10732   if (Invalid)
10733     ExDecl->setInvalidDecl();
10734 
10735   return ExDecl;
10736 }
10737 
10738 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
10739 /// handler.
10740 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
10741   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
10742   bool Invalid = D.isInvalidType();
10743 
10744   // Check for unexpanded parameter packs.
10745   if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
10746                                       UPPC_ExceptionType)) {
10747     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
10748                                              D.getIdentifierLoc());
10749     Invalid = true;
10750   }
10751 
10752   IdentifierInfo *II = D.getIdentifier();
10753   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
10754                                              LookupOrdinaryName,
10755                                              ForRedeclaration)) {
10756     // The scope should be freshly made just for us. There is just no way
10757     // it contains any previous declaration.
10758     assert(!S->isDeclScope(PrevDecl));
10759     if (PrevDecl->isTemplateParameter()) {
10760       // Maybe we will complain about the shadowed template parameter.
10761       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
10762       PrevDecl = 0;
10763     }
10764   }
10765 
10766   if (D.getCXXScopeSpec().isSet() && !Invalid) {
10767     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
10768       << D.getCXXScopeSpec().getRange();
10769     Invalid = true;
10770   }
10771 
10772   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
10773                                               D.getLocStart(),
10774                                               D.getIdentifierLoc(),
10775                                               D.getIdentifier());
10776   if (Invalid)
10777     ExDecl->setInvalidDecl();
10778 
10779   // Add the exception declaration into this scope.
10780   if (II)
10781     PushOnScopeChains(ExDecl, S);
10782   else
10783     CurContext->addDecl(ExDecl);
10784 
10785   ProcessDeclAttributes(S, ExDecl, D);
10786   return ExDecl;
10787 }
10788 
10789 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10790                                          Expr *AssertExpr,
10791                                          Expr *AssertMessageExpr,
10792                                          SourceLocation RParenLoc) {
10793   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
10794 
10795   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
10796     return 0;
10797 
10798   return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
10799                                       AssertMessage, RParenLoc, false);
10800 }
10801 
10802 Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10803                                          Expr *AssertExpr,
10804                                          StringLiteral *AssertMessage,
10805                                          SourceLocation RParenLoc,
10806                                          bool Failed) {
10807   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
10808       !Failed) {
10809     // In a static_assert-declaration, the constant-expression shall be a
10810     // constant expression that can be contextually converted to bool.
10811     ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
10812     if (Converted.isInvalid())
10813       Failed = true;
10814 
10815     llvm::APSInt Cond;
10816     if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
10817           diag::err_static_assert_expression_is_not_constant,
10818           /*AllowFold=*/false).isInvalid())
10819       Failed = true;
10820 
10821     if (!Failed && !Cond) {
10822       SmallString<256> MsgBuffer;
10823       llvm::raw_svector_ostream Msg(MsgBuffer);
10824       AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
10825       Diag(StaticAssertLoc, diag::err_static_assert_failed)
10826         << Msg.str() << AssertExpr->getSourceRange();
10827       Failed = true;
10828     }
10829   }
10830 
10831   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
10832                                         AssertExpr, AssertMessage, RParenLoc,
10833                                         Failed);
10834 
10835   CurContext->addDecl(Decl);
10836   return Decl;
10837 }
10838 
10839 /// \brief Perform semantic analysis of the given friend type declaration.
10840 ///
10841 /// \returns A friend declaration that.
10842 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
10843                                       SourceLocation FriendLoc,
10844                                       TypeSourceInfo *TSInfo) {
10845   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
10846 
10847   QualType T = TSInfo->getType();
10848   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
10849 
10850   // C++03 [class.friend]p2:
10851   //   An elaborated-type-specifier shall be used in a friend declaration
10852   //   for a class.*
10853   //
10854   //   * The class-key of the elaborated-type-specifier is required.
10855   if (!ActiveTemplateInstantiations.empty()) {
10856     // Do not complain about the form of friend template types during
10857     // template instantiation; we will already have complained when the
10858     // template was declared.
10859   } else {
10860     if (!T->isElaboratedTypeSpecifier()) {
10861       // If we evaluated the type to a record type, suggest putting
10862       // a tag in front.
10863       if (const RecordType *RT = T->getAs<RecordType>()) {
10864         RecordDecl *RD = RT->getDecl();
10865 
10866         std::string InsertionText = std::string(" ") + RD->getKindName();
10867 
10868         Diag(TypeRange.getBegin(),
10869              getLangOpts().CPlusPlus11 ?
10870                diag::warn_cxx98_compat_unelaborated_friend_type :
10871                diag::ext_unelaborated_friend_type)
10872           << (unsigned) RD->getTagKind()
10873           << T
10874           << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
10875                                         InsertionText);
10876       } else {
10877         Diag(FriendLoc,
10878              getLangOpts().CPlusPlus11 ?
10879                diag::warn_cxx98_compat_nonclass_type_friend :
10880                diag::ext_nonclass_type_friend)
10881           << T
10882           << TypeRange;
10883       }
10884     } else if (T->getAs<EnumType>()) {
10885       Diag(FriendLoc,
10886            getLangOpts().CPlusPlus11 ?
10887              diag::warn_cxx98_compat_enum_friend :
10888              diag::ext_enum_friend)
10889         << T
10890         << TypeRange;
10891     }
10892 
10893     // C++11 [class.friend]p3:
10894     //   A friend declaration that does not declare a function shall have one
10895     //   of the following forms:
10896     //     friend elaborated-type-specifier ;
10897     //     friend simple-type-specifier ;
10898     //     friend typename-specifier ;
10899     if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
10900       Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
10901   }
10902 
10903   //   If the type specifier in a friend declaration designates a (possibly
10904   //   cv-qualified) class type, that class is declared as a friend; otherwise,
10905   //   the friend declaration is ignored.
10906   return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
10907 }
10908 
10909 /// Handle a friend tag declaration where the scope specifier was
10910 /// templated.
10911 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
10912                                     unsigned TagSpec, SourceLocation TagLoc,
10913                                     CXXScopeSpec &SS,
10914                                     IdentifierInfo *Name,
10915                                     SourceLocation NameLoc,
10916                                     AttributeList *Attr,
10917                                     MultiTemplateParamsArg TempParamLists) {
10918   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
10919 
10920   bool isExplicitSpecialization = false;
10921   bool Invalid = false;
10922 
10923   if (TemplateParameterList *TemplateParams
10924         = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
10925                                                   TempParamLists.data(),
10926                                                   TempParamLists.size(),
10927                                                   /*friend*/ true,
10928                                                   isExplicitSpecialization,
10929                                                   Invalid)) {
10930     if (TemplateParams->size() > 0) {
10931       // This is a declaration of a class template.
10932       if (Invalid)
10933         return 0;
10934 
10935       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
10936                                 SS, Name, NameLoc, Attr,
10937                                 TemplateParams, AS_public,
10938                                 /*ModulePrivateLoc=*/SourceLocation(),
10939                                 TempParamLists.size() - 1,
10940                                 TempParamLists.data()).take();
10941     } else {
10942       // The "template<>" header is extraneous.
10943       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
10944         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
10945       isExplicitSpecialization = true;
10946     }
10947   }
10948 
10949   if (Invalid) return 0;
10950 
10951   bool isAllExplicitSpecializations = true;
10952   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
10953     if (TempParamLists[I]->size()) {
10954       isAllExplicitSpecializations = false;
10955       break;
10956     }
10957   }
10958 
10959   // FIXME: don't ignore attributes.
10960 
10961   // If it's explicit specializations all the way down, just forget
10962   // about the template header and build an appropriate non-templated
10963   // friend.  TODO: for source fidelity, remember the headers.
10964   if (isAllExplicitSpecializations) {
10965     if (SS.isEmpty()) {
10966       bool Owned = false;
10967       bool IsDependent = false;
10968       return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
10969                       Attr, AS_public,
10970                       /*ModulePrivateLoc=*/SourceLocation(),
10971                       MultiTemplateParamsArg(), Owned, IsDependent,
10972                       /*ScopedEnumKWLoc=*/SourceLocation(),
10973                       /*ScopedEnumUsesClassTag=*/false,
10974                       /*UnderlyingType=*/TypeResult());
10975     }
10976 
10977     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
10978     ElaboratedTypeKeyword Keyword
10979       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
10980     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
10981                                    *Name, NameLoc);
10982     if (T.isNull())
10983       return 0;
10984 
10985     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
10986     if (isa<DependentNameType>(T)) {
10987       DependentNameTypeLoc TL =
10988           TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
10989       TL.setElaboratedKeywordLoc(TagLoc);
10990       TL.setQualifierLoc(QualifierLoc);
10991       TL.setNameLoc(NameLoc);
10992     } else {
10993       ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
10994       TL.setElaboratedKeywordLoc(TagLoc);
10995       TL.setQualifierLoc(QualifierLoc);
10996       TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
10997     }
10998 
10999     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11000                                             TSI, FriendLoc, TempParamLists);
11001     Friend->setAccess(AS_public);
11002     CurContext->addDecl(Friend);
11003     return Friend;
11004   }
11005 
11006   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
11007 
11008 
11009 
11010   // Handle the case of a templated-scope friend class.  e.g.
11011   //   template <class T> class A<T>::B;
11012   // FIXME: we don't support these right now.
11013   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11014   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
11015   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11016   DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11017   TL.setElaboratedKeywordLoc(TagLoc);
11018   TL.setQualifierLoc(SS.getWithLocInContext(Context));
11019   TL.setNameLoc(NameLoc);
11020 
11021   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11022                                           TSI, FriendLoc, TempParamLists);
11023   Friend->setAccess(AS_public);
11024   Friend->setUnsupportedFriend(true);
11025   CurContext->addDecl(Friend);
11026   return Friend;
11027 }
11028 
11029 
11030 /// Handle a friend type declaration.  This works in tandem with
11031 /// ActOnTag.
11032 ///
11033 /// Notes on friend class templates:
11034 ///
11035 /// We generally treat friend class declarations as if they were
11036 /// declaring a class.  So, for example, the elaborated type specifier
11037 /// in a friend declaration is required to obey the restrictions of a
11038 /// class-head (i.e. no typedefs in the scope chain), template
11039 /// parameters are required to match up with simple template-ids, &c.
11040 /// However, unlike when declaring a template specialization, it's
11041 /// okay to refer to a template specialization without an empty
11042 /// template parameter declaration, e.g.
11043 ///   friend class A<T>::B<unsigned>;
11044 /// We permit this as a special case; if there are any template
11045 /// parameters present at all, require proper matching, i.e.
11046 ///   template <> template \<class T> friend class A<int>::B;
11047 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
11048                                 MultiTemplateParamsArg TempParams) {
11049   SourceLocation Loc = DS.getLocStart();
11050 
11051   assert(DS.isFriendSpecified());
11052   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11053 
11054   // Try to convert the decl specifier to a type.  This works for
11055   // friend templates because ActOnTag never produces a ClassTemplateDecl
11056   // for a TUK_Friend.
11057   Declarator TheDeclarator(DS, Declarator::MemberContext);
11058   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
11059   QualType T = TSI->getType();
11060   if (TheDeclarator.isInvalidType())
11061     return 0;
11062 
11063   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
11064     return 0;
11065 
11066   // This is definitely an error in C++98.  It's probably meant to
11067   // be forbidden in C++0x, too, but the specification is just
11068   // poorly written.
11069   //
11070   // The problem is with declarations like the following:
11071   //   template <T> friend A<T>::foo;
11072   // where deciding whether a class C is a friend or not now hinges
11073   // on whether there exists an instantiation of A that causes
11074   // 'foo' to equal C.  There are restrictions on class-heads
11075   // (which we declare (by fiat) elaborated friend declarations to
11076   // be) that makes this tractable.
11077   //
11078   // FIXME: handle "template <> friend class A<T>;", which
11079   // is possibly well-formed?  Who even knows?
11080   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
11081     Diag(Loc, diag::err_tagless_friend_type_template)
11082       << DS.getSourceRange();
11083     return 0;
11084   }
11085 
11086   // C++98 [class.friend]p1: A friend of a class is a function
11087   //   or class that is not a member of the class . . .
11088   // This is fixed in DR77, which just barely didn't make the C++03
11089   // deadline.  It's also a very silly restriction that seriously
11090   // affects inner classes and which nobody else seems to implement;
11091   // thus we never diagnose it, not even in -pedantic.
11092   //
11093   // But note that we could warn about it: it's always useless to
11094   // friend one of your own members (it's not, however, worthless to
11095   // friend a member of an arbitrary specialization of your template).
11096 
11097   Decl *D;
11098   if (unsigned NumTempParamLists = TempParams.size())
11099     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
11100                                    NumTempParamLists,
11101                                    TempParams.data(),
11102                                    TSI,
11103                                    DS.getFriendSpecLoc());
11104   else
11105     D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
11106 
11107   if (!D)
11108     return 0;
11109 
11110   D->setAccess(AS_public);
11111   CurContext->addDecl(D);
11112 
11113   return D;
11114 }
11115 
11116 NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
11117                                         MultiTemplateParamsArg TemplateParams) {
11118   const DeclSpec &DS = D.getDeclSpec();
11119 
11120   assert(DS.isFriendSpecified());
11121   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11122 
11123   SourceLocation Loc = D.getIdentifierLoc();
11124   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
11125 
11126   // C++ [class.friend]p1
11127   //   A friend of a class is a function or class....
11128   // Note that this sees through typedefs, which is intended.
11129   // It *doesn't* see through dependent types, which is correct
11130   // according to [temp.arg.type]p3:
11131   //   If a declaration acquires a function type through a
11132   //   type dependent on a template-parameter and this causes
11133   //   a declaration that does not use the syntactic form of a
11134   //   function declarator to have a function type, the program
11135   //   is ill-formed.
11136   if (!TInfo->getType()->isFunctionType()) {
11137     Diag(Loc, diag::err_unexpected_friend);
11138 
11139     // It might be worthwhile to try to recover by creating an
11140     // appropriate declaration.
11141     return 0;
11142   }
11143 
11144   // C++ [namespace.memdef]p3
11145   //  - If a friend declaration in a non-local class first declares a
11146   //    class or function, the friend class or function is a member
11147   //    of the innermost enclosing namespace.
11148   //  - The name of the friend is not found by simple name lookup
11149   //    until a matching declaration is provided in that namespace
11150   //    scope (either before or after the class declaration granting
11151   //    friendship).
11152   //  - If a friend function is called, its name may be found by the
11153   //    name lookup that considers functions from namespaces and
11154   //    classes associated with the types of the function arguments.
11155   //  - When looking for a prior declaration of a class or a function
11156   //    declared as a friend, scopes outside the innermost enclosing
11157   //    namespace scope are not considered.
11158 
11159   CXXScopeSpec &SS = D.getCXXScopeSpec();
11160   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
11161   DeclarationName Name = NameInfo.getName();
11162   assert(Name);
11163 
11164   // Check for unexpanded parameter packs.
11165   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
11166       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
11167       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
11168     return 0;
11169 
11170   // The context we found the declaration in, or in which we should
11171   // create the declaration.
11172   DeclContext *DC;
11173   Scope *DCScope = S;
11174   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
11175                         ForRedeclaration);
11176 
11177   // FIXME: there are different rules in local classes
11178 
11179   // There are four cases here.
11180   //   - There's no scope specifier, in which case we just go to the
11181   //     appropriate scope and look for a function or function template
11182   //     there as appropriate.
11183   // Recover from invalid scope qualifiers as if they just weren't there.
11184   if (SS.isInvalid() || !SS.isSet()) {
11185     // C++0x [namespace.memdef]p3:
11186     //   If the name in a friend declaration is neither qualified nor
11187     //   a template-id and the declaration is a function or an
11188     //   elaborated-type-specifier, the lookup to determine whether
11189     //   the entity has been previously declared shall not consider
11190     //   any scopes outside the innermost enclosing namespace.
11191     // C++0x [class.friend]p11:
11192     //   If a friend declaration appears in a local class and the name
11193     //   specified is an unqualified name, a prior declaration is
11194     //   looked up without considering scopes that are outside the
11195     //   innermost enclosing non-class scope. For a friend function
11196     //   declaration, if there is no prior declaration, the program is
11197     //   ill-formed.
11198     bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
11199     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
11200 
11201     // Find the appropriate context according to the above.
11202     DC = CurContext;
11203 
11204     // Skip class contexts.  If someone can cite chapter and verse
11205     // for this behavior, that would be nice --- it's what GCC and
11206     // EDG do, and it seems like a reasonable intent, but the spec
11207     // really only says that checks for unqualified existing
11208     // declarations should stop at the nearest enclosing namespace,
11209     // not that they should only consider the nearest enclosing
11210     // namespace.
11211     while (DC->isRecord())
11212       DC = DC->getParent();
11213 
11214     DeclContext *LookupDC = DC;
11215     while (LookupDC->isTransparentContext())
11216       LookupDC = LookupDC->getParent();
11217 
11218     while (true) {
11219       LookupQualifiedName(Previous, LookupDC);
11220 
11221       // TODO: decide what we think about using declarations.
11222       if (isLocal)
11223         break;
11224 
11225       if (!Previous.empty()) {
11226         DC = LookupDC;
11227         break;
11228       }
11229 
11230       if (isTemplateId) {
11231         if (isa<TranslationUnitDecl>(LookupDC)) break;
11232       } else {
11233         if (LookupDC->isFileContext()) break;
11234       }
11235       LookupDC = LookupDC->getParent();
11236     }
11237 
11238     DCScope = getScopeForDeclContext(S, DC);
11239 
11240     // C++ [class.friend]p6:
11241     //   A function can be defined in a friend declaration of a class if and
11242     //   only if the class is a non-local class (9.8), the function name is
11243     //   unqualified, and the function has namespace scope.
11244     if (isLocal && D.isFunctionDefinition()) {
11245       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
11246     }
11247 
11248   //   - There's a non-dependent scope specifier, in which case we
11249   //     compute it and do a previous lookup there for a function
11250   //     or function template.
11251   } else if (!SS.getScopeRep()->isDependent()) {
11252     DC = computeDeclContext(SS);
11253     if (!DC) return 0;
11254 
11255     if (RequireCompleteDeclContext(SS, DC)) return 0;
11256 
11257     LookupQualifiedName(Previous, DC);
11258 
11259     // Ignore things found implicitly in the wrong scope.
11260     // TODO: better diagnostics for this case.  Suggesting the right
11261     // qualified scope would be nice...
11262     LookupResult::Filter F = Previous.makeFilter();
11263     while (F.hasNext()) {
11264       NamedDecl *D = F.next();
11265       if (!DC->InEnclosingNamespaceSetOf(
11266               D->getDeclContext()->getRedeclContext()))
11267         F.erase();
11268     }
11269     F.done();
11270 
11271     if (Previous.empty()) {
11272       D.setInvalidType();
11273       Diag(Loc, diag::err_qualified_friend_not_found)
11274           << Name << TInfo->getType();
11275       return 0;
11276     }
11277 
11278     // C++ [class.friend]p1: A friend of a class is a function or
11279     //   class that is not a member of the class . . .
11280     if (DC->Equals(CurContext))
11281       Diag(DS.getFriendSpecLoc(),
11282            getLangOpts().CPlusPlus11 ?
11283              diag::warn_cxx98_compat_friend_is_member :
11284              diag::err_friend_is_member);
11285 
11286     if (D.isFunctionDefinition()) {
11287       // C++ [class.friend]p6:
11288       //   A function can be defined in a friend declaration of a class if and
11289       //   only if the class is a non-local class (9.8), the function name is
11290       //   unqualified, and the function has namespace scope.
11291       SemaDiagnosticBuilder DB
11292         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
11293 
11294       DB << SS.getScopeRep();
11295       if (DC->isFileContext())
11296         DB << FixItHint::CreateRemoval(SS.getRange());
11297       SS.clear();
11298     }
11299 
11300   //   - There's a scope specifier that does not match any template
11301   //     parameter lists, in which case we use some arbitrary context,
11302   //     create a method or method template, and wait for instantiation.
11303   //   - There's a scope specifier that does match some template
11304   //     parameter lists, which we don't handle right now.
11305   } else {
11306     if (D.isFunctionDefinition()) {
11307       // C++ [class.friend]p6:
11308       //   A function can be defined in a friend declaration of a class if and
11309       //   only if the class is a non-local class (9.8), the function name is
11310       //   unqualified, and the function has namespace scope.
11311       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
11312         << SS.getScopeRep();
11313     }
11314 
11315     DC = CurContext;
11316     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
11317   }
11318 
11319   if (!DC->isRecord()) {
11320     // This implies that it has to be an operator or function.
11321     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
11322         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
11323         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
11324       Diag(Loc, diag::err_introducing_special_friend) <<
11325         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
11326          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
11327       return 0;
11328     }
11329   }
11330 
11331   // FIXME: This is an egregious hack to cope with cases where the scope stack
11332   // does not contain the declaration context, i.e., in an out-of-line
11333   // definition of a class.
11334   Scope FakeDCScope(S, Scope::DeclScope, Diags);
11335   if (!DCScope) {
11336     FakeDCScope.setEntity(DC);
11337     DCScope = &FakeDCScope;
11338   }
11339 
11340   bool AddToScope = true;
11341   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
11342                                           TemplateParams, AddToScope);
11343   if (!ND) return 0;
11344 
11345   assert(ND->getDeclContext() == DC);
11346   assert(ND->getLexicalDeclContext() == CurContext);
11347 
11348   // Add the function declaration to the appropriate lookup tables,
11349   // adjusting the redeclarations list as necessary.  We don't
11350   // want to do this yet if the friending class is dependent.
11351   //
11352   // Also update the scope-based lookup if the target context's
11353   // lookup context is in lexical scope.
11354   if (!CurContext->isDependentContext()) {
11355     DC = DC->getRedeclContext();
11356     DC->makeDeclVisibleInContext(ND);
11357     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
11358       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
11359   }
11360 
11361   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
11362                                        D.getIdentifierLoc(), ND,
11363                                        DS.getFriendSpecLoc());
11364   FrD->setAccess(AS_public);
11365   CurContext->addDecl(FrD);
11366 
11367   if (ND->isInvalidDecl()) {
11368     FrD->setInvalidDecl();
11369   } else {
11370     if (DC->isRecord()) CheckFriendAccess(ND);
11371 
11372     FunctionDecl *FD;
11373     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
11374       FD = FTD->getTemplatedDecl();
11375     else
11376       FD = cast<FunctionDecl>(ND);
11377 
11378     // Mark templated-scope function declarations as unsupported.
11379     if (FD->getNumTemplateParameterLists())
11380       FrD->setUnsupportedFriend(true);
11381   }
11382 
11383   return ND;
11384 }
11385 
11386 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
11387   AdjustDeclIfTemplate(Dcl);
11388 
11389   FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
11390   if (!Fn) {
11391     Diag(DelLoc, diag::err_deleted_non_function);
11392     return;
11393   }
11394 
11395   if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
11396     // Don't consider the implicit declaration we generate for explicit
11397     // specializations. FIXME: Do not generate these implicit declarations.
11398     if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
11399         || Prev->getPreviousDecl()) && !Prev->isDefined()) {
11400       Diag(DelLoc, diag::err_deleted_decl_not_first);
11401       Diag(Prev->getLocation(), diag::note_previous_declaration);
11402     }
11403     // If the declaration wasn't the first, we delete the function anyway for
11404     // recovery.
11405     Fn = Fn->getCanonicalDecl();
11406   }
11407 
11408   if (Fn->isDeleted())
11409     return;
11410 
11411   // See if we're deleting a function which is already known to override a
11412   // non-deleted virtual function.
11413   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn)) {
11414     bool IssuedDiagnostic = false;
11415     for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
11416                                         E = MD->end_overridden_methods();
11417          I != E; ++I) {
11418       if (!(*MD->begin_overridden_methods())->isDeleted()) {
11419         if (!IssuedDiagnostic) {
11420           Diag(DelLoc, diag::err_deleted_override) << MD->getDeclName();
11421           IssuedDiagnostic = true;
11422         }
11423         Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
11424       }
11425     }
11426   }
11427 
11428   Fn->setDeletedAsWritten();
11429 }
11430 
11431 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
11432   CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Dcl);
11433 
11434   if (MD) {
11435     if (MD->getParent()->isDependentType()) {
11436       MD->setDefaulted();
11437       MD->setExplicitlyDefaulted();
11438       return;
11439     }
11440 
11441     CXXSpecialMember Member = getSpecialMember(MD);
11442     if (Member == CXXInvalid) {
11443       Diag(DefaultLoc, diag::err_default_special_members);
11444       return;
11445     }
11446 
11447     MD->setDefaulted();
11448     MD->setExplicitlyDefaulted();
11449 
11450     // If this definition appears within the record, do the checking when
11451     // the record is complete.
11452     const FunctionDecl *Primary = MD;
11453     if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
11454       // Find the uninstantiated declaration that actually had the '= default'
11455       // on it.
11456       Pattern->isDefined(Primary);
11457 
11458     // If the method was defaulted on its first declaration, we will have
11459     // already performed the checking in CheckCompletedCXXClass. Such a
11460     // declaration doesn't trigger an implicit definition.
11461     if (Primary == Primary->getCanonicalDecl())
11462       return;
11463 
11464     CheckExplicitlyDefaultedSpecialMember(MD);
11465 
11466     // The exception specification is needed because we are defining the
11467     // function.
11468     ResolveExceptionSpec(DefaultLoc,
11469                          MD->getType()->castAs<FunctionProtoType>());
11470 
11471     switch (Member) {
11472     case CXXDefaultConstructor: {
11473       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11474       if (!CD->isInvalidDecl())
11475         DefineImplicitDefaultConstructor(DefaultLoc, CD);
11476       break;
11477     }
11478 
11479     case CXXCopyConstructor: {
11480       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11481       if (!CD->isInvalidDecl())
11482         DefineImplicitCopyConstructor(DefaultLoc, CD);
11483       break;
11484     }
11485 
11486     case CXXCopyAssignment: {
11487       if (!MD->isInvalidDecl())
11488         DefineImplicitCopyAssignment(DefaultLoc, MD);
11489       break;
11490     }
11491 
11492     case CXXDestructor: {
11493       CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
11494       if (!DD->isInvalidDecl())
11495         DefineImplicitDestructor(DefaultLoc, DD);
11496       break;
11497     }
11498 
11499     case CXXMoveConstructor: {
11500       CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11501       if (!CD->isInvalidDecl())
11502         DefineImplicitMoveConstructor(DefaultLoc, CD);
11503       break;
11504     }
11505 
11506     case CXXMoveAssignment: {
11507       if (!MD->isInvalidDecl())
11508         DefineImplicitMoveAssignment(DefaultLoc, MD);
11509       break;
11510     }
11511 
11512     case CXXInvalid:
11513       llvm_unreachable("Invalid special member.");
11514     }
11515   } else {
11516     Diag(DefaultLoc, diag::err_default_special_members);
11517   }
11518 }
11519 
11520 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
11521   for (Stmt::child_range CI = S->children(); CI; ++CI) {
11522     Stmt *SubStmt = *CI;
11523     if (!SubStmt)
11524       continue;
11525     if (isa<ReturnStmt>(SubStmt))
11526       Self.Diag(SubStmt->getLocStart(),
11527            diag::err_return_in_constructor_handler);
11528     if (!isa<Expr>(SubStmt))
11529       SearchForReturnInStmt(Self, SubStmt);
11530   }
11531 }
11532 
11533 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
11534   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
11535     CXXCatchStmt *Handler = TryBlock->getHandler(I);
11536     SearchForReturnInStmt(*this, Handler);
11537   }
11538 }
11539 
11540 bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
11541                                              const CXXMethodDecl *Old) {
11542   const FunctionType *NewFT = New->getType()->getAs<FunctionType>();
11543   const FunctionType *OldFT = Old->getType()->getAs<FunctionType>();
11544 
11545   CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
11546 
11547   // If the calling conventions match, everything is fine
11548   if (NewCC == OldCC)
11549     return false;
11550 
11551   // If either of the calling conventions are set to "default", we need to pick
11552   // something more sensible based on the target. This supports code where the
11553   // one method explicitly sets thiscall, and another has no explicit calling
11554   // convention.
11555   CallingConv Default =
11556     Context.getTargetInfo().getDefaultCallingConv(TargetInfo::CCMT_Member);
11557   if (NewCC == CC_Default)
11558     NewCC = Default;
11559   if (OldCC == CC_Default)
11560     OldCC = Default;
11561 
11562   // If the calling conventions still don't match, then report the error
11563   if (NewCC != OldCC) {
11564     Diag(New->getLocation(),
11565          diag::err_conflicting_overriding_cc_attributes)
11566       << New->getDeclName() << New->getType() << Old->getType();
11567     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11568     return true;
11569   }
11570 
11571   return false;
11572 }
11573 
11574 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
11575                                              const CXXMethodDecl *Old) {
11576   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
11577   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
11578 
11579   if (Context.hasSameType(NewTy, OldTy) ||
11580       NewTy->isDependentType() || OldTy->isDependentType())
11581     return false;
11582 
11583   // Check if the return types are covariant
11584   QualType NewClassTy, OldClassTy;
11585 
11586   /// Both types must be pointers or references to classes.
11587   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
11588     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
11589       NewClassTy = NewPT->getPointeeType();
11590       OldClassTy = OldPT->getPointeeType();
11591     }
11592   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
11593     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
11594       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
11595         NewClassTy = NewRT->getPointeeType();
11596         OldClassTy = OldRT->getPointeeType();
11597       }
11598     }
11599   }
11600 
11601   // The return types aren't either both pointers or references to a class type.
11602   if (NewClassTy.isNull()) {
11603     Diag(New->getLocation(),
11604          diag::err_different_return_type_for_overriding_virtual_function)
11605       << New->getDeclName() << NewTy << OldTy;
11606     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11607 
11608     return true;
11609   }
11610 
11611   // C++ [class.virtual]p6:
11612   //   If the return type of D::f differs from the return type of B::f, the
11613   //   class type in the return type of D::f shall be complete at the point of
11614   //   declaration of D::f or shall be the class type D.
11615   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
11616     if (!RT->isBeingDefined() &&
11617         RequireCompleteType(New->getLocation(), NewClassTy,
11618                             diag::err_covariant_return_incomplete,
11619                             New->getDeclName()))
11620     return true;
11621   }
11622 
11623   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
11624     // Check if the new class derives from the old class.
11625     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
11626       Diag(New->getLocation(),
11627            diag::err_covariant_return_not_derived)
11628       << New->getDeclName() << NewTy << OldTy;
11629       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11630       return true;
11631     }
11632 
11633     // Check if we the conversion from derived to base is valid.
11634     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
11635                     diag::err_covariant_return_inaccessible_base,
11636                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
11637                     // FIXME: Should this point to the return type?
11638                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
11639       // FIXME: this note won't trigger for delayed access control
11640       // diagnostics, and it's impossible to get an undelayed error
11641       // here from access control during the original parse because
11642       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
11643       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11644       return true;
11645     }
11646   }
11647 
11648   // The qualifiers of the return types must be the same.
11649   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
11650     Diag(New->getLocation(),
11651          diag::err_covariant_return_type_different_qualifications)
11652     << New->getDeclName() << NewTy << OldTy;
11653     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11654     return true;
11655   };
11656 
11657 
11658   // The new class type must have the same or less qualifiers as the old type.
11659   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
11660     Diag(New->getLocation(),
11661          diag::err_covariant_return_type_class_type_more_qualified)
11662     << New->getDeclName() << NewTy << OldTy;
11663     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11664     return true;
11665   };
11666 
11667   return false;
11668 }
11669 
11670 /// \brief Mark the given method pure.
11671 ///
11672 /// \param Method the method to be marked pure.
11673 ///
11674 /// \param InitRange the source range that covers the "0" initializer.
11675 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
11676   SourceLocation EndLoc = InitRange.getEnd();
11677   if (EndLoc.isValid())
11678     Method->setRangeEnd(EndLoc);
11679 
11680   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
11681     Method->setPure();
11682     return false;
11683   }
11684 
11685   if (!Method->isInvalidDecl())
11686     Diag(Method->getLocation(), diag::err_non_virtual_pure)
11687       << Method->getDeclName() << InitRange;
11688   return true;
11689 }
11690 
11691 /// \brief Determine whether the given declaration is a static data member.
11692 static bool isStaticDataMember(Decl *D) {
11693   VarDecl *Var = dyn_cast_or_null<VarDecl>(D);
11694   if (!Var)
11695     return false;
11696 
11697   return Var->isStaticDataMember();
11698 }
11699 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
11700 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
11701 /// is a fresh scope pushed for just this purpose.
11702 ///
11703 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
11704 /// static data member of class X, names should be looked up in the scope of
11705 /// class X.
11706 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
11707   // If there is no declaration, there was an error parsing it.
11708   if (D == 0 || D->isInvalidDecl()) return;
11709 
11710   // We should only get called for declarations with scope specifiers, like:
11711   //   int foo::bar;
11712   assert(D->isOutOfLine());
11713   EnterDeclaratorContext(S, D->getDeclContext());
11714 
11715   // If we are parsing the initializer for a static data member, push a
11716   // new expression evaluation context that is associated with this static
11717   // data member.
11718   if (isStaticDataMember(D))
11719     PushExpressionEvaluationContext(PotentiallyEvaluated, D);
11720 }
11721 
11722 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
11723 /// initializer for the out-of-line declaration 'D'.
11724 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
11725   // If there is no declaration, there was an error parsing it.
11726   if (D == 0 || D->isInvalidDecl()) return;
11727 
11728   if (isStaticDataMember(D))
11729     PopExpressionEvaluationContext();
11730 
11731   assert(D->isOutOfLine());
11732   ExitDeclaratorContext(S);
11733 }
11734 
11735 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
11736 /// C++ if/switch/while/for statement.
11737 /// e.g: "if (int x = f()) {...}"
11738 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
11739   // C++ 6.4p2:
11740   // The declarator shall not specify a function or an array.
11741   // The type-specifier-seq shall not contain typedef and shall not declare a
11742   // new class or enumeration.
11743   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
11744          "Parser allowed 'typedef' as storage class of condition decl.");
11745 
11746   Decl *Dcl = ActOnDeclarator(S, D);
11747   if (!Dcl)
11748     return true;
11749 
11750   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
11751     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
11752       << D.getSourceRange();
11753     return true;
11754   }
11755 
11756   return Dcl;
11757 }
11758 
11759 void Sema::LoadExternalVTableUses() {
11760   if (!ExternalSource)
11761     return;
11762 
11763   SmallVector<ExternalVTableUse, 4> VTables;
11764   ExternalSource->ReadUsedVTables(VTables);
11765   SmallVector<VTableUse, 4> NewUses;
11766   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
11767     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
11768       = VTablesUsed.find(VTables[I].Record);
11769     // Even if a definition wasn't required before, it may be required now.
11770     if (Pos != VTablesUsed.end()) {
11771       if (!Pos->second && VTables[I].DefinitionRequired)
11772         Pos->second = true;
11773       continue;
11774     }
11775 
11776     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
11777     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
11778   }
11779 
11780   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
11781 }
11782 
11783 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
11784                           bool DefinitionRequired) {
11785   // Ignore any vtable uses in unevaluated operands or for classes that do
11786   // not have a vtable.
11787   if (!Class->isDynamicClass() || Class->isDependentContext() ||
11788       CurContext->isDependentContext() || isUnevaluatedContext())
11789     return;
11790 
11791   // Try to insert this class into the map.
11792   LoadExternalVTableUses();
11793   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11794   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
11795     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
11796   if (!Pos.second) {
11797     // If we already had an entry, check to see if we are promoting this vtable
11798     // to required a definition. If so, we need to reappend to the VTableUses
11799     // list, since we may have already processed the first entry.
11800     if (DefinitionRequired && !Pos.first->second) {
11801       Pos.first->second = true;
11802     } else {
11803       // Otherwise, we can early exit.
11804       return;
11805     }
11806   }
11807 
11808   // Local classes need to have their virtual members marked
11809   // immediately. For all other classes, we mark their virtual members
11810   // at the end of the translation unit.
11811   if (Class->isLocalClass())
11812     MarkVirtualMembersReferenced(Loc, Class);
11813   else
11814     VTableUses.push_back(std::make_pair(Class, Loc));
11815 }
11816 
11817 bool Sema::DefineUsedVTables() {
11818   LoadExternalVTableUses();
11819   if (VTableUses.empty())
11820     return false;
11821 
11822   // Note: The VTableUses vector could grow as a result of marking
11823   // the members of a class as "used", so we check the size each
11824   // time through the loop and prefer indices (which are stable) to
11825   // iterators (which are not).
11826   bool DefinedAnything = false;
11827   for (unsigned I = 0; I != VTableUses.size(); ++I) {
11828     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
11829     if (!Class)
11830       continue;
11831 
11832     SourceLocation Loc = VTableUses[I].second;
11833 
11834     bool DefineVTable = true;
11835 
11836     // If this class has a key function, but that key function is
11837     // defined in another translation unit, we don't need to emit the
11838     // vtable even though we're using it.
11839     const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
11840     if (KeyFunction && !KeyFunction->hasBody()) {
11841       switch (KeyFunction->getTemplateSpecializationKind()) {
11842       case TSK_Undeclared:
11843       case TSK_ExplicitSpecialization:
11844       case TSK_ExplicitInstantiationDeclaration:
11845         // The key function is in another translation unit.
11846         DefineVTable = false;
11847         break;
11848 
11849       case TSK_ExplicitInstantiationDefinition:
11850       case TSK_ImplicitInstantiation:
11851         // We will be instantiating the key function.
11852         break;
11853       }
11854     } else if (!KeyFunction) {
11855       // If we have a class with no key function that is the subject
11856       // of an explicit instantiation declaration, suppress the
11857       // vtable; it will live with the explicit instantiation
11858       // definition.
11859       bool IsExplicitInstantiationDeclaration
11860         = Class->getTemplateSpecializationKind()
11861                                       == TSK_ExplicitInstantiationDeclaration;
11862       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
11863                                  REnd = Class->redecls_end();
11864            R != REnd; ++R) {
11865         TemplateSpecializationKind TSK
11866           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
11867         if (TSK == TSK_ExplicitInstantiationDeclaration)
11868           IsExplicitInstantiationDeclaration = true;
11869         else if (TSK == TSK_ExplicitInstantiationDefinition) {
11870           IsExplicitInstantiationDeclaration = false;
11871           break;
11872         }
11873       }
11874 
11875       if (IsExplicitInstantiationDeclaration)
11876         DefineVTable = false;
11877     }
11878 
11879     // The exception specifications for all virtual members may be needed even
11880     // if we are not providing an authoritative form of the vtable in this TU.
11881     // We may choose to emit it available_externally anyway.
11882     if (!DefineVTable) {
11883       MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
11884       continue;
11885     }
11886 
11887     // Mark all of the virtual members of this class as referenced, so
11888     // that we can build a vtable. Then, tell the AST consumer that a
11889     // vtable for this class is required.
11890     DefinedAnything = true;
11891     MarkVirtualMembersReferenced(Loc, Class);
11892     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11893     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
11894 
11895     // Optionally warn if we're emitting a weak vtable.
11896     if (Class->isExternallyVisible() &&
11897         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
11898       const FunctionDecl *KeyFunctionDef = 0;
11899       if (!KeyFunction ||
11900           (KeyFunction->hasBody(KeyFunctionDef) &&
11901            KeyFunctionDef->isInlined()))
11902         Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
11903              TSK_ExplicitInstantiationDefinition
11904              ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
11905           << Class;
11906     }
11907   }
11908   VTableUses.clear();
11909 
11910   return DefinedAnything;
11911 }
11912 
11913 void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
11914                                                  const CXXRecordDecl *RD) {
11915   for (CXXRecordDecl::method_iterator I = RD->method_begin(),
11916                                       E = RD->method_end(); I != E; ++I)
11917     if ((*I)->isVirtual() && !(*I)->isPure())
11918       ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
11919 }
11920 
11921 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
11922                                         const CXXRecordDecl *RD) {
11923   // Mark all functions which will appear in RD's vtable as used.
11924   CXXFinalOverriderMap FinalOverriders;
11925   RD->getFinalOverriders(FinalOverriders);
11926   for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
11927                                             E = FinalOverriders.end();
11928        I != E; ++I) {
11929     for (OverridingMethods::const_iterator OI = I->second.begin(),
11930                                            OE = I->second.end();
11931          OI != OE; ++OI) {
11932       assert(OI->second.size() > 0 && "no final overrider");
11933       CXXMethodDecl *Overrider = OI->second.front().Method;
11934 
11935       // C++ [basic.def.odr]p2:
11936       //   [...] A virtual member function is used if it is not pure. [...]
11937       if (!Overrider->isPure())
11938         MarkFunctionReferenced(Loc, Overrider);
11939     }
11940   }
11941 
11942   // Only classes that have virtual bases need a VTT.
11943   if (RD->getNumVBases() == 0)
11944     return;
11945 
11946   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
11947            e = RD->bases_end(); i != e; ++i) {
11948     const CXXRecordDecl *Base =
11949         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
11950     if (Base->getNumVBases() == 0)
11951       continue;
11952     MarkVirtualMembersReferenced(Loc, Base);
11953   }
11954 }
11955 
11956 /// SetIvarInitializers - This routine builds initialization ASTs for the
11957 /// Objective-C implementation whose ivars need be initialized.
11958 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
11959   if (!getLangOpts().CPlusPlus)
11960     return;
11961   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
11962     SmallVector<ObjCIvarDecl*, 8> ivars;
11963     CollectIvarsToConstructOrDestruct(OID, ivars);
11964     if (ivars.empty())
11965       return;
11966     SmallVector<CXXCtorInitializer*, 32> AllToInit;
11967     for (unsigned i = 0; i < ivars.size(); i++) {
11968       FieldDecl *Field = ivars[i];
11969       if (Field->isInvalidDecl())
11970         continue;
11971 
11972       CXXCtorInitializer *Member;
11973       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
11974       InitializationKind InitKind =
11975         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
11976 
11977       InitializationSequence InitSeq(*this, InitEntity, InitKind, None);
11978       ExprResult MemberInit =
11979         InitSeq.Perform(*this, InitEntity, InitKind, None);
11980       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
11981       // Note, MemberInit could actually come back empty if no initialization
11982       // is required (e.g., because it would call a trivial default constructor)
11983       if (!MemberInit.get() || MemberInit.isInvalid())
11984         continue;
11985 
11986       Member =
11987         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
11988                                          SourceLocation(),
11989                                          MemberInit.takeAs<Expr>(),
11990                                          SourceLocation());
11991       AllToInit.push_back(Member);
11992 
11993       // Be sure that the destructor is accessible and is marked as referenced.
11994       if (const RecordType *RecordTy
11995                   = Context.getBaseElementType(Field->getType())
11996                                                         ->getAs<RecordType>()) {
11997                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
11998         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
11999           MarkFunctionReferenced(Field->getLocation(), Destructor);
12000           CheckDestructorAccess(Field->getLocation(), Destructor,
12001                             PDiag(diag::err_access_dtor_ivar)
12002                               << Context.getBaseElementType(Field->getType()));
12003         }
12004       }
12005     }
12006     ObjCImplementation->setIvarInitializers(Context,
12007                                             AllToInit.data(), AllToInit.size());
12008   }
12009 }
12010 
12011 static
12012 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
12013                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
12014                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
12015                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
12016                            Sema &S) {
12017   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
12018                                                    CE = Current.end();
12019   if (Ctor->isInvalidDecl())
12020     return;
12021 
12022   CXXConstructorDecl *Target = Ctor->getTargetConstructor();
12023 
12024   // Target may not be determinable yet, for instance if this is a dependent
12025   // call in an uninstantiated template.
12026   if (Target) {
12027     const FunctionDecl *FNTarget = 0;
12028     (void)Target->hasBody(FNTarget);
12029     Target = const_cast<CXXConstructorDecl*>(
12030       cast_or_null<CXXConstructorDecl>(FNTarget));
12031   }
12032 
12033   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
12034                      // Avoid dereferencing a null pointer here.
12035                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
12036 
12037   if (!Current.insert(Canonical))
12038     return;
12039 
12040   // We know that beyond here, we aren't chaining into a cycle.
12041   if (!Target || !Target->isDelegatingConstructor() ||
12042       Target->isInvalidDecl() || Valid.count(TCanonical)) {
12043     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
12044       Valid.insert(*CI);
12045     Current.clear();
12046   // We've hit a cycle.
12047   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
12048              Current.count(TCanonical)) {
12049     // If we haven't diagnosed this cycle yet, do so now.
12050     if (!Invalid.count(TCanonical)) {
12051       S.Diag((*Ctor->init_begin())->getSourceLocation(),
12052              diag::warn_delegating_ctor_cycle)
12053         << Ctor;
12054 
12055       // Don't add a note for a function delegating directly to itself.
12056       if (TCanonical != Canonical)
12057         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
12058 
12059       CXXConstructorDecl *C = Target;
12060       while (C->getCanonicalDecl() != Canonical) {
12061         const FunctionDecl *FNTarget = 0;
12062         (void)C->getTargetConstructor()->hasBody(FNTarget);
12063         assert(FNTarget && "Ctor cycle through bodiless function");
12064 
12065         C = const_cast<CXXConstructorDecl*>(
12066           cast<CXXConstructorDecl>(FNTarget));
12067         S.Diag(C->getLocation(), diag::note_which_delegates_to);
12068       }
12069     }
12070 
12071     for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
12072       Invalid.insert(*CI);
12073     Current.clear();
12074   } else {
12075     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
12076   }
12077 }
12078 
12079 
12080 void Sema::CheckDelegatingCtorCycles() {
12081   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
12082 
12083   llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
12084                                                    CE = Current.end();
12085 
12086   for (DelegatingCtorDeclsType::iterator
12087          I = DelegatingCtorDecls.begin(ExternalSource),
12088          E = DelegatingCtorDecls.end();
12089        I != E; ++I)
12090     DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
12091 
12092   for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
12093     (*CI)->setInvalidDecl();
12094 }
12095 
12096 namespace {
12097   /// \brief AST visitor that finds references to the 'this' expression.
12098   class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
12099     Sema &S;
12100 
12101   public:
12102     explicit FindCXXThisExpr(Sema &S) : S(S) { }
12103 
12104     bool VisitCXXThisExpr(CXXThisExpr *E) {
12105       S.Diag(E->getLocation(), diag::err_this_static_member_func)
12106         << E->isImplicit();
12107       return false;
12108     }
12109   };
12110 }
12111 
12112 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
12113   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12114   if (!TSInfo)
12115     return false;
12116 
12117   TypeLoc TL = TSInfo->getTypeLoc();
12118   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12119   if (!ProtoTL)
12120     return false;
12121 
12122   // C++11 [expr.prim.general]p3:
12123   //   [The expression this] shall not appear before the optional
12124   //   cv-qualifier-seq and it shall not appear within the declaration of a
12125   //   static member function (although its type and value category are defined
12126   //   within a static member function as they are within a non-static member
12127   //   function). [ Note: this is because declaration matching does not occur
12128   //  until the complete declarator is known. - end note ]
12129   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12130   FindCXXThisExpr Finder(*this);
12131 
12132   // If the return type came after the cv-qualifier-seq, check it now.
12133   if (Proto->hasTrailingReturn() &&
12134       !Finder.TraverseTypeLoc(ProtoTL.getResultLoc()))
12135     return true;
12136 
12137   // Check the exception specification.
12138   if (checkThisInStaticMemberFunctionExceptionSpec(Method))
12139     return true;
12140 
12141   return checkThisInStaticMemberFunctionAttributes(Method);
12142 }
12143 
12144 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
12145   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12146   if (!TSInfo)
12147     return false;
12148 
12149   TypeLoc TL = TSInfo->getTypeLoc();
12150   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12151   if (!ProtoTL)
12152     return false;
12153 
12154   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12155   FindCXXThisExpr Finder(*this);
12156 
12157   switch (Proto->getExceptionSpecType()) {
12158   case EST_Uninstantiated:
12159   case EST_Unevaluated:
12160   case EST_BasicNoexcept:
12161   case EST_DynamicNone:
12162   case EST_MSAny:
12163   case EST_None:
12164     break;
12165 
12166   case EST_ComputedNoexcept:
12167     if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
12168       return true;
12169 
12170   case EST_Dynamic:
12171     for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
12172          EEnd = Proto->exception_end();
12173          E != EEnd; ++E) {
12174       if (!Finder.TraverseType(*E))
12175         return true;
12176     }
12177     break;
12178   }
12179 
12180   return false;
12181 }
12182 
12183 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
12184   FindCXXThisExpr Finder(*this);
12185 
12186   // Check attributes.
12187   for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
12188        A != AEnd; ++A) {
12189     // FIXME: This should be emitted by tblgen.
12190     Expr *Arg = 0;
12191     ArrayRef<Expr *> Args;
12192     if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
12193       Arg = G->getArg();
12194     else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
12195       Arg = G->getArg();
12196     else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
12197       Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
12198     else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
12199       Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
12200     else if (ExclusiveLockFunctionAttr *ELF
12201                = dyn_cast<ExclusiveLockFunctionAttr>(*A))
12202       Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
12203     else if (SharedLockFunctionAttr *SLF
12204                = dyn_cast<SharedLockFunctionAttr>(*A))
12205       Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
12206     else if (ExclusiveTrylockFunctionAttr *ETLF
12207                = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
12208       Arg = ETLF->getSuccessValue();
12209       Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
12210     } else if (SharedTrylockFunctionAttr *STLF
12211                  = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
12212       Arg = STLF->getSuccessValue();
12213       Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
12214     } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
12215       Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
12216     else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
12217       Arg = LR->getArg();
12218     else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
12219       Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
12220     else if (ExclusiveLocksRequiredAttr *ELR
12221                = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
12222       Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
12223     else if (SharedLocksRequiredAttr *SLR
12224                = dyn_cast<SharedLocksRequiredAttr>(*A))
12225       Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
12226 
12227     if (Arg && !Finder.TraverseStmt(Arg))
12228       return true;
12229 
12230     for (unsigned I = 0, N = Args.size(); I != N; ++I) {
12231       if (!Finder.TraverseStmt(Args[I]))
12232         return true;
12233     }
12234   }
12235 
12236   return false;
12237 }
12238 
12239 void
12240 Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
12241                                   ArrayRef<ParsedType> DynamicExceptions,
12242                                   ArrayRef<SourceRange> DynamicExceptionRanges,
12243                                   Expr *NoexceptExpr,
12244                                   SmallVectorImpl<QualType> &Exceptions,
12245                                   FunctionProtoType::ExtProtoInfo &EPI) {
12246   Exceptions.clear();
12247   EPI.ExceptionSpecType = EST;
12248   if (EST == EST_Dynamic) {
12249     Exceptions.reserve(DynamicExceptions.size());
12250     for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
12251       // FIXME: Preserve type source info.
12252       QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
12253 
12254       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
12255       collectUnexpandedParameterPacks(ET, Unexpanded);
12256       if (!Unexpanded.empty()) {
12257         DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
12258                                          UPPC_ExceptionType,
12259                                          Unexpanded);
12260         continue;
12261       }
12262 
12263       // Check that the type is valid for an exception spec, and
12264       // drop it if not.
12265       if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
12266         Exceptions.push_back(ET);
12267     }
12268     EPI.NumExceptions = Exceptions.size();
12269     EPI.Exceptions = Exceptions.data();
12270     return;
12271   }
12272 
12273   if (EST == EST_ComputedNoexcept) {
12274     // If an error occurred, there's no expression here.
12275     if (NoexceptExpr) {
12276       assert((NoexceptExpr->isTypeDependent() ||
12277               NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
12278               Context.BoolTy) &&
12279              "Parser should have made sure that the expression is boolean");
12280       if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
12281         EPI.ExceptionSpecType = EST_BasicNoexcept;
12282         return;
12283       }
12284 
12285       if (!NoexceptExpr->isValueDependent())
12286         NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
12287                          diag::err_noexcept_needs_constant_expression,
12288                          /*AllowFold*/ false).take();
12289       EPI.NoexceptExpr = NoexceptExpr;
12290     }
12291     return;
12292   }
12293 }
12294 
12295 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
12296 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
12297   // Implicitly declared functions (e.g. copy constructors) are
12298   // __host__ __device__
12299   if (D->isImplicit())
12300     return CFT_HostDevice;
12301 
12302   if (D->hasAttr<CUDAGlobalAttr>())
12303     return CFT_Global;
12304 
12305   if (D->hasAttr<CUDADeviceAttr>()) {
12306     if (D->hasAttr<CUDAHostAttr>())
12307       return CFT_HostDevice;
12308     else
12309       return CFT_Device;
12310   }
12311 
12312   return CFT_Host;
12313 }
12314 
12315 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
12316                            CUDAFunctionTarget CalleeTarget) {
12317   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
12318   // Callable from the device only."
12319   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
12320     return true;
12321 
12322   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
12323   // Callable from the host only."
12324   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
12325   // Callable from the host only."
12326   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
12327       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
12328     return true;
12329 
12330   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
12331     return true;
12332 
12333   return false;
12334 }
12335 
12336 /// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
12337 ///
12338 MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
12339                                        SourceLocation DeclStart,
12340                                        Declarator &D, Expr *BitWidth,
12341                                        InClassInitStyle InitStyle,
12342                                        AccessSpecifier AS,
12343                                        AttributeList *MSPropertyAttr) {
12344   IdentifierInfo *II = D.getIdentifier();
12345   if (!II) {
12346     Diag(DeclStart, diag::err_anonymous_property);
12347     return NULL;
12348   }
12349   SourceLocation Loc = D.getIdentifierLoc();
12350 
12351   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
12352   QualType T = TInfo->getType();
12353   if (getLangOpts().CPlusPlus) {
12354     CheckExtraCXXDefaultArguments(D);
12355 
12356     if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
12357                                         UPPC_DataMemberType)) {
12358       D.setInvalidType();
12359       T = Context.IntTy;
12360       TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
12361     }
12362   }
12363 
12364   DiagnoseFunctionSpecifiers(D.getDeclSpec());
12365 
12366   if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
12367     Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
12368          diag::err_invalid_thread)
12369       << DeclSpec::getSpecifierName(TSCS);
12370 
12371   // Check to see if this name was declared as a member previously
12372   NamedDecl *PrevDecl = 0;
12373   LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
12374   LookupName(Previous, S);
12375   switch (Previous.getResultKind()) {
12376   case LookupResult::Found:
12377   case LookupResult::FoundUnresolvedValue:
12378     PrevDecl = Previous.getAsSingle<NamedDecl>();
12379     break;
12380 
12381   case LookupResult::FoundOverloaded:
12382     PrevDecl = Previous.getRepresentativeDecl();
12383     break;
12384 
12385   case LookupResult::NotFound:
12386   case LookupResult::NotFoundInCurrentInstantiation:
12387   case LookupResult::Ambiguous:
12388     break;
12389   }
12390 
12391   if (PrevDecl && PrevDecl->isTemplateParameter()) {
12392     // Maybe we will complain about the shadowed template parameter.
12393     DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
12394     // Just pretend that we didn't see the previous declaration.
12395     PrevDecl = 0;
12396   }
12397 
12398   if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
12399     PrevDecl = 0;
12400 
12401   SourceLocation TSSL = D.getLocStart();
12402   MSPropertyDecl *NewPD;
12403   const AttributeList::PropertyData &Data = MSPropertyAttr->getPropertyData();
12404   NewPD = new (Context) MSPropertyDecl(Record, Loc,
12405                                        II, T, TInfo, TSSL,
12406                                        Data.GetterId, Data.SetterId);
12407   ProcessDeclAttributes(TUScope, NewPD, D);
12408   NewPD->setAccess(AS);
12409 
12410   if (NewPD->isInvalidDecl())
12411     Record->setInvalidDecl();
12412 
12413   if (D.getDeclSpec().isModulePrivateSpecified())
12414     NewPD->setModulePrivate();
12415 
12416   if (NewPD->isInvalidDecl() && PrevDecl) {
12417     // Don't introduce NewFD into scope; there's already something
12418     // with the same name in the same scope.
12419   } else if (II) {
12420     PushOnScopeChains(NewPD, S);
12421   } else
12422     Record->addDecl(NewPD);
12423 
12424   return NewPD;
12425 }
12426