• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/LiteralSupport.h"
31 #include "clang/Lex/Preprocessor.h"
32 #include "clang/Sema/CXXFieldCollector.h"
33 #include "clang/Sema/DeclSpec.h"
34 #include "clang/Sema/Initialization.h"
35 #include "clang/Sema/Lookup.h"
36 #include "clang/Sema/ParsedTemplate.h"
37 #include "clang/Sema/Scope.h"
38 #include "clang/Sema/ScopeInfo.h"
39 #include "llvm/ADT/STLExtras.h"
40 #include "llvm/ADT/SmallString.h"
41 #include <map>
42 #include <set>
43 
44 using namespace clang;
45 
46 //===----------------------------------------------------------------------===//
47 // CheckDefaultArgumentVisitor
48 //===----------------------------------------------------------------------===//
49 
50 namespace {
51   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
52   /// the default argument of a parameter to determine whether it
53   /// contains any ill-formed subexpressions. For example, this will
54   /// diagnose the use of local variables or parameters within the
55   /// default argument expression.
56   class CheckDefaultArgumentVisitor
57     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
58     Expr *DefaultArg;
59     Sema *S;
60 
61   public:
CheckDefaultArgumentVisitor(Expr * defarg,Sema * s)62     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
63       : DefaultArg(defarg), S(s) {}
64 
65     bool VisitExpr(Expr *Node);
66     bool VisitDeclRefExpr(DeclRefExpr *DRE);
67     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
68     bool VisitLambdaExpr(LambdaExpr *Lambda);
69     bool VisitPseudoObjectExpr(PseudoObjectExpr *POE);
70   };
71 
72   /// VisitExpr - Visit all of the children of this expression.
VisitExpr(Expr * Node)73   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
74     bool IsInvalid = false;
75     for (Stmt::child_range I = Node->children(); I; ++I)
76       IsInvalid |= Visit(*I);
77     return IsInvalid;
78   }
79 
80   /// VisitDeclRefExpr - Visit a reference to a declaration, to
81   /// determine whether this declaration can be used in the default
82   /// argument expression.
VisitDeclRefExpr(DeclRefExpr * DRE)83   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
84     NamedDecl *Decl = DRE->getDecl();
85     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
86       // C++ [dcl.fct.default]p9
87       //   Default arguments are evaluated each time the function is
88       //   called. The order of evaluation of function arguments is
89       //   unspecified. Consequently, parameters of a function shall not
90       //   be used in default argument expressions, even if they are not
91       //   evaluated. Parameters of a function declared before a default
92       //   argument expression are in scope and can hide namespace and
93       //   class member names.
94       return S->Diag(DRE->getLocStart(),
95                      diag::err_param_default_argument_references_param)
96          << Param->getDeclName() << DefaultArg->getSourceRange();
97     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
98       // C++ [dcl.fct.default]p7
99       //   Local variables shall not be used in default argument
100       //   expressions.
101       if (VDecl->isLocalVarDecl())
102         return S->Diag(DRE->getLocStart(),
103                        diag::err_param_default_argument_references_local)
104           << VDecl->getDeclName() << DefaultArg->getSourceRange();
105     }
106 
107     return false;
108   }
109 
110   /// VisitCXXThisExpr - Visit a C++ "this" expression.
VisitCXXThisExpr(CXXThisExpr * ThisE)111   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
112     // C++ [dcl.fct.default]p8:
113     //   The keyword this shall not be used in a default argument of a
114     //   member function.
115     return S->Diag(ThisE->getLocStart(),
116                    diag::err_param_default_argument_references_this)
117                << ThisE->getSourceRange();
118   }
119 
VisitPseudoObjectExpr(PseudoObjectExpr * POE)120   bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) {
121     bool Invalid = false;
122     for (PseudoObjectExpr::semantics_iterator
123            i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
124       Expr *E = *i;
125 
126       // Look through bindings.
127       if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
128         E = OVE->getSourceExpr();
129         assert(E && "pseudo-object binding without source expression?");
130       }
131 
132       Invalid |= Visit(E);
133     }
134     return Invalid;
135   }
136 
VisitLambdaExpr(LambdaExpr * Lambda)137   bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
138     // C++11 [expr.lambda.prim]p13:
139     //   A lambda-expression appearing in a default argument shall not
140     //   implicitly or explicitly capture any entity.
141     if (Lambda->capture_begin() == Lambda->capture_end())
142       return false;
143 
144     return S->Diag(Lambda->getLocStart(),
145                    diag::err_lambda_capture_default_arg);
146   }
147 }
148 
149 void
CalledDecl(SourceLocation CallLoc,const CXXMethodDecl * Method)150 Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
151                                                  const CXXMethodDecl *Method) {
152   // If we have an MSAny spec already, don't bother.
153   if (!Method || ComputedEST == EST_MSAny)
154     return;
155 
156   const FunctionProtoType *Proto
157     = Method->getType()->getAs<FunctionProtoType>();
158   Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
159   if (!Proto)
160     return;
161 
162   ExceptionSpecificationType EST = Proto->getExceptionSpecType();
163 
164   // If this function can throw any exceptions, make a note of that.
165   if (EST == EST_MSAny || EST == EST_None) {
166     ClearExceptions();
167     ComputedEST = EST;
168     return;
169   }
170 
171   // FIXME: If the call to this decl is using any of its default arguments, we
172   // need to search them for potentially-throwing calls.
173 
174   // If this function has a basic noexcept, it doesn't affect the outcome.
175   if (EST == EST_BasicNoexcept)
176     return;
177 
178   // If we have a throw-all spec at this point, ignore the function.
179   if (ComputedEST == EST_None)
180     return;
181 
182   // If we're still at noexcept(true) and there's a nothrow() callee,
183   // change to that specification.
184   if (EST == EST_DynamicNone) {
185     if (ComputedEST == EST_BasicNoexcept)
186       ComputedEST = EST_DynamicNone;
187     return;
188   }
189 
190   // Check out noexcept specs.
191   if (EST == EST_ComputedNoexcept) {
192     FunctionProtoType::NoexceptResult NR =
193         Proto->getNoexceptSpec(Self->Context);
194     assert(NR != FunctionProtoType::NR_NoNoexcept &&
195            "Must have noexcept result for EST_ComputedNoexcept.");
196     assert(NR != FunctionProtoType::NR_Dependent &&
197            "Should not generate implicit declarations for dependent cases, "
198            "and don't know how to handle them anyway.");
199 
200     // noexcept(false) -> no spec on the new function
201     if (NR == FunctionProtoType::NR_Throw) {
202       ClearExceptions();
203       ComputedEST = EST_None;
204     }
205     // noexcept(true) won't change anything either.
206     return;
207   }
208 
209   assert(EST == EST_Dynamic && "EST case not considered earlier.");
210   assert(ComputedEST != EST_None &&
211          "Shouldn't collect exceptions when throw-all is guaranteed.");
212   ComputedEST = EST_Dynamic;
213   // Record the exceptions in this function's exception specification.
214   for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
215                                           EEnd = Proto->exception_end();
216        E != EEnd; ++E)
217     if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
218       Exceptions.push_back(*E);
219 }
220 
CalledExpr(Expr * E)221 void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
222   if (!E || ComputedEST == EST_MSAny)
223     return;
224 
225   // FIXME:
226   //
227   // C++0x [except.spec]p14:
228   //   [An] implicit exception-specification specifies the type-id T if and
229   // only if T is allowed by the exception-specification of a function directly
230   // invoked by f's implicit definition; f shall allow all exceptions if any
231   // function it directly invokes allows all exceptions, and f shall allow no
232   // exceptions if every function it directly invokes allows no exceptions.
233   //
234   // Note in particular that if an implicit exception-specification is generated
235   // for a function containing a throw-expression, that specification can still
236   // be noexcept(true).
237   //
238   // Note also that 'directly invoked' is not defined in the standard, and there
239   // is no indication that we should only consider potentially-evaluated calls.
240   //
241   // Ultimately we should implement the intent of the standard: the exception
242   // specification should be the set of exceptions which can be thrown by the
243   // implicit definition. For now, we assume that any non-nothrow expression can
244   // throw any exception.
245 
246   if (Self->canThrow(E))
247     ComputedEST = EST_None;
248 }
249 
250 bool
SetParamDefaultArgument(ParmVarDecl * Param,Expr * Arg,SourceLocation EqualLoc)251 Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
252                               SourceLocation EqualLoc) {
253   if (RequireCompleteType(Param->getLocation(), Param->getType(),
254                           diag::err_typecheck_decl_incomplete_type)) {
255     Param->setInvalidDecl();
256     return true;
257   }
258 
259   // C++ [dcl.fct.default]p5
260   //   A default argument expression is implicitly converted (clause
261   //   4) to the parameter type. The default argument expression has
262   //   the same semantic constraints as the initializer expression in
263   //   a declaration of a variable of the parameter type, using the
264   //   copy-initialization semantics (8.5).
265   InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
266                                                                     Param);
267   InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
268                                                            EqualLoc);
269   InitializationSequence InitSeq(*this, Entity, Kind, Arg);
270   ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
271   if (Result.isInvalid())
272     return true;
273   Arg = Result.takeAs<Expr>();
274 
275   CheckCompletedExpr(Arg, EqualLoc);
276   Arg = MaybeCreateExprWithCleanups(Arg);
277 
278   // Okay: add the default argument to the parameter
279   Param->setDefaultArg(Arg);
280 
281   // We have already instantiated this parameter; provide each of the
282   // instantiations with the uninstantiated default argument.
283   UnparsedDefaultArgInstantiationsMap::iterator InstPos
284     = UnparsedDefaultArgInstantiations.find(Param);
285   if (InstPos != UnparsedDefaultArgInstantiations.end()) {
286     for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
287       InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
288 
289     // We're done tracking this parameter's instantiations.
290     UnparsedDefaultArgInstantiations.erase(InstPos);
291   }
292 
293   return false;
294 }
295 
296 /// ActOnParamDefaultArgument - Check whether the default argument
297 /// provided for a function parameter is well-formed. If so, attach it
298 /// to the parameter declaration.
299 void
ActOnParamDefaultArgument(Decl * param,SourceLocation EqualLoc,Expr * DefaultArg)300 Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
301                                 Expr *DefaultArg) {
302   if (!param || !DefaultArg)
303     return;
304 
305   ParmVarDecl *Param = cast<ParmVarDecl>(param);
306   UnparsedDefaultArgLocs.erase(Param);
307 
308   // Default arguments are only permitted in C++
309   if (!getLangOpts().CPlusPlus) {
310     Diag(EqualLoc, diag::err_param_default_argument)
311       << DefaultArg->getSourceRange();
312     Param->setInvalidDecl();
313     return;
314   }
315 
316   // Check for unexpanded parameter packs.
317   if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
318     Param->setInvalidDecl();
319     return;
320   }
321 
322   // Check that the default argument is well-formed
323   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
324   if (DefaultArgChecker.Visit(DefaultArg)) {
325     Param->setInvalidDecl();
326     return;
327   }
328 
329   SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
330 }
331 
332 /// ActOnParamUnparsedDefaultArgument - We've seen a default
333 /// argument for a function parameter, but we can't parse it yet
334 /// because we're inside a class definition. Note that this default
335 /// argument will be parsed later.
ActOnParamUnparsedDefaultArgument(Decl * param,SourceLocation EqualLoc,SourceLocation ArgLoc)336 void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
337                                              SourceLocation EqualLoc,
338                                              SourceLocation ArgLoc) {
339   if (!param)
340     return;
341 
342   ParmVarDecl *Param = cast<ParmVarDecl>(param);
343   if (Param)
344     Param->setUnparsedDefaultArg();
345 
346   UnparsedDefaultArgLocs[Param] = ArgLoc;
347 }
348 
349 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
350 /// the default argument for the parameter param failed.
ActOnParamDefaultArgumentError(Decl * param)351 void Sema::ActOnParamDefaultArgumentError(Decl *param) {
352   if (!param)
353     return;
354 
355   ParmVarDecl *Param = cast<ParmVarDecl>(param);
356 
357   Param->setInvalidDecl();
358 
359   UnparsedDefaultArgLocs.erase(Param);
360 }
361 
362 /// CheckExtraCXXDefaultArguments - Check for any extra default
363 /// arguments in the declarator, which is not a function declaration
364 /// or definition and therefore is not permitted to have default
365 /// arguments. This routine should be invoked for every declarator
366 /// that is not a function declaration or definition.
CheckExtraCXXDefaultArguments(Declarator & D)367 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
368   // C++ [dcl.fct.default]p3
369   //   A default argument expression shall be specified only in the
370   //   parameter-declaration-clause of a function declaration or in a
371   //   template-parameter (14.1). It shall not be specified for a
372   //   parameter pack. If it is specified in a
373   //   parameter-declaration-clause, it shall not occur within a
374   //   declarator or abstract-declarator of a parameter-declaration.
375   bool MightBeFunction = D.isFunctionDeclarationContext();
376   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
377     DeclaratorChunk &chunk = D.getTypeObject(i);
378     if (chunk.Kind == DeclaratorChunk::Function) {
379       if (MightBeFunction) {
380         // This is a function declaration. It can have default arguments, but
381         // keep looking in case its return type is a function type with default
382         // arguments.
383         MightBeFunction = false;
384         continue;
385       }
386       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
387         ParmVarDecl *Param =
388           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
389         if (Param->hasUnparsedDefaultArg()) {
390           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
391           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
392             << SourceRange((*Toks)[1].getLocation(),
393                            Toks->back().getLocation());
394           delete Toks;
395           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
396         } else if (Param->getDefaultArg()) {
397           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
398             << Param->getDefaultArg()->getSourceRange();
399           Param->setDefaultArg(0);
400         }
401       }
402     } else if (chunk.Kind != DeclaratorChunk::Paren) {
403       MightBeFunction = false;
404     }
405   }
406 }
407 
functionDeclHasDefaultArgument(const FunctionDecl * FD)408 static bool functionDeclHasDefaultArgument(const FunctionDecl *FD) {
409   for (unsigned NumParams = FD->getNumParams(); NumParams > 0; --NumParams) {
410     const ParmVarDecl *PVD = FD->getParamDecl(NumParams-1);
411     if (!PVD->hasDefaultArg())
412       return false;
413     if (!PVD->hasInheritedDefaultArg())
414       return true;
415   }
416   return false;
417 }
418 
419 /// MergeCXXFunctionDecl - Merge two declarations of the same C++
420 /// function, once we already know that they have the same
421 /// type. Subroutine of MergeFunctionDecl. Returns true if there was an
422 /// error, false otherwise.
MergeCXXFunctionDecl(FunctionDecl * New,FunctionDecl * Old,Scope * S)423 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
424                                 Scope *S) {
425   bool Invalid = false;
426 
427   // C++ [dcl.fct.default]p4:
428   //   For non-template functions, default arguments can be added in
429   //   later declarations of a function in the same
430   //   scope. Declarations in different scopes have completely
431   //   distinct sets of default arguments. That is, declarations in
432   //   inner scopes do not acquire default arguments from
433   //   declarations in outer scopes, and vice versa. In a given
434   //   function declaration, all parameters subsequent to a
435   //   parameter with a default argument shall have default
436   //   arguments supplied in this or previous declarations. A
437   //   default argument shall not be redefined by a later
438   //   declaration (not even to the same value).
439   //
440   // C++ [dcl.fct.default]p6:
441   //   Except for member functions of class templates, the default arguments
442   //   in a member function definition that appears outside of the class
443   //   definition are added to the set of default arguments provided by the
444   //   member function declaration in the class definition.
445   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
446     ParmVarDecl *OldParam = Old->getParamDecl(p);
447     ParmVarDecl *NewParam = New->getParamDecl(p);
448 
449     bool OldParamHasDfl = OldParam->hasDefaultArg();
450     bool NewParamHasDfl = NewParam->hasDefaultArg();
451 
452     NamedDecl *ND = Old;
453     if (S && !isDeclInScope(ND, New->getDeclContext(), S))
454       // Ignore default parameters of old decl if they are not in
455       // the same scope.
456       OldParamHasDfl = false;
457 
458     if (OldParamHasDfl && NewParamHasDfl) {
459 
460       unsigned DiagDefaultParamID =
461         diag::err_param_default_argument_redefinition;
462 
463       // MSVC accepts that default parameters be redefined for member functions
464       // of template class. The new default parameter's value is ignored.
465       Invalid = true;
466       if (getLangOpts().MicrosoftExt) {
467         CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
468         if (MD && MD->getParent()->getDescribedClassTemplate()) {
469           // Merge the old default argument into the new parameter.
470           NewParam->setHasInheritedDefaultArg();
471           if (OldParam->hasUninstantiatedDefaultArg())
472             NewParam->setUninstantiatedDefaultArg(
473                                       OldParam->getUninstantiatedDefaultArg());
474           else
475             NewParam->setDefaultArg(OldParam->getInit());
476           DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
477           Invalid = false;
478         }
479       }
480 
481       // FIXME: If we knew where the '=' was, we could easily provide a fix-it
482       // hint here. Alternatively, we could walk the type-source information
483       // for NewParam to find the last source location in the type... but it
484       // isn't worth the effort right now. This is the kind of test case that
485       // is hard to get right:
486       //   int f(int);
487       //   void g(int (*fp)(int) = f);
488       //   void g(int (*fp)(int) = &f);
489       Diag(NewParam->getLocation(), DiagDefaultParamID)
490         << NewParam->getDefaultArgRange();
491 
492       // Look for the function declaration where the default argument was
493       // actually written, which may be a declaration prior to Old.
494       for (FunctionDecl *Older = Old->getPreviousDecl();
495            Older; Older = Older->getPreviousDecl()) {
496         if (!Older->getParamDecl(p)->hasDefaultArg())
497           break;
498 
499         OldParam = Older->getParamDecl(p);
500       }
501 
502       Diag(OldParam->getLocation(), diag::note_previous_definition)
503         << OldParam->getDefaultArgRange();
504     } else if (OldParamHasDfl) {
505       // Merge the old default argument into the new parameter.
506       // It's important to use getInit() here;  getDefaultArg()
507       // strips off any top-level ExprWithCleanups.
508       NewParam->setHasInheritedDefaultArg();
509       if (OldParam->hasUninstantiatedDefaultArg())
510         NewParam->setUninstantiatedDefaultArg(
511                                       OldParam->getUninstantiatedDefaultArg());
512       else
513         NewParam->setDefaultArg(OldParam->getInit());
514     } else if (NewParamHasDfl) {
515       if (New->getDescribedFunctionTemplate()) {
516         // Paragraph 4, quoted above, only applies to non-template functions.
517         Diag(NewParam->getLocation(),
518              diag::err_param_default_argument_template_redecl)
519           << NewParam->getDefaultArgRange();
520         Diag(Old->getLocation(), diag::note_template_prev_declaration)
521           << false;
522       } else if (New->getTemplateSpecializationKind()
523                    != TSK_ImplicitInstantiation &&
524                  New->getTemplateSpecializationKind() != TSK_Undeclared) {
525         // C++ [temp.expr.spec]p21:
526         //   Default function arguments shall not be specified in a declaration
527         //   or a definition for one of the following explicit specializations:
528         //     - the explicit specialization of a function template;
529         //     - the explicit specialization of a member function template;
530         //     - the explicit specialization of a member function of a class
531         //       template where the class template specialization to which the
532         //       member function specialization belongs is implicitly
533         //       instantiated.
534         Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
535           << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
536           << New->getDeclName()
537           << NewParam->getDefaultArgRange();
538       } else if (New->getDeclContext()->isDependentContext()) {
539         // C++ [dcl.fct.default]p6 (DR217):
540         //   Default arguments for a member function of a class template shall
541         //   be specified on the initial declaration of the member function
542         //   within the class template.
543         //
544         // Reading the tea leaves a bit in DR217 and its reference to DR205
545         // leads me to the conclusion that one cannot add default function
546         // arguments for an out-of-line definition of a member function of a
547         // dependent type.
548         int WhichKind = 2;
549         if (CXXRecordDecl *Record
550               = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
551           if (Record->getDescribedClassTemplate())
552             WhichKind = 0;
553           else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
554             WhichKind = 1;
555           else
556             WhichKind = 2;
557         }
558 
559         Diag(NewParam->getLocation(),
560              diag::err_param_default_argument_member_template_redecl)
561           << WhichKind
562           << NewParam->getDefaultArgRange();
563       }
564     }
565   }
566 
567   // DR1344: If a default argument is added outside a class definition and that
568   // default argument makes the function a special member function, the program
569   // is ill-formed. This can only happen for constructors.
570   if (isa<CXXConstructorDecl>(New) &&
571       New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
572     CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
573                      OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
574     if (NewSM != OldSM) {
575       ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
576       assert(NewParam->hasDefaultArg());
577       Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
578         << NewParam->getDefaultArgRange() << NewSM;
579       Diag(Old->getLocation(), diag::note_previous_declaration);
580     }
581   }
582 
583   // C++11 [dcl.constexpr]p1: If any declaration of a function or function
584   // template has a constexpr specifier then all its declarations shall
585   // contain the constexpr specifier.
586   if (New->isConstexpr() != Old->isConstexpr()) {
587     Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
588       << New << New->isConstexpr();
589     Diag(Old->getLocation(), diag::note_previous_declaration);
590     Invalid = true;
591   }
592 
593   // C++11 [dcl.fct.default]p4: If a friend declaration specifies a default
594   // argument expression, that declaration shall be a definition and shall be
595   // the only declaration of the function or function template in the
596   // translation unit.
597   if (Old->getFriendObjectKind() == Decl::FOK_Undeclared &&
598       functionDeclHasDefaultArgument(Old)) {
599     Diag(New->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
600     Diag(Old->getLocation(), diag::note_previous_declaration);
601     Invalid = true;
602   }
603 
604   if (CheckEquivalentExceptionSpec(Old, New))
605     Invalid = true;
606 
607   return Invalid;
608 }
609 
610 /// \brief Merge the exception specifications of two variable declarations.
611 ///
612 /// This is called when there's a redeclaration of a VarDecl. The function
613 /// checks if the redeclaration might have an exception specification and
614 /// validates compatibility and merges the specs if necessary.
MergeVarDeclExceptionSpecs(VarDecl * New,VarDecl * Old)615 void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
616   // Shortcut if exceptions are disabled.
617   if (!getLangOpts().CXXExceptions)
618     return;
619 
620   assert(Context.hasSameType(New->getType(), Old->getType()) &&
621          "Should only be called if types are otherwise the same.");
622 
623   QualType NewType = New->getType();
624   QualType OldType = Old->getType();
625 
626   // We're only interested in pointers and references to functions, as well
627   // as pointers to member functions.
628   if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
629     NewType = R->getPointeeType();
630     OldType = OldType->getAs<ReferenceType>()->getPointeeType();
631   } else if (const PointerType *P = NewType->getAs<PointerType>()) {
632     NewType = P->getPointeeType();
633     OldType = OldType->getAs<PointerType>()->getPointeeType();
634   } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
635     NewType = M->getPointeeType();
636     OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
637   }
638 
639   if (!NewType->isFunctionProtoType())
640     return;
641 
642   // There's lots of special cases for functions. For function pointers, system
643   // libraries are hopefully not as broken so that we don't need these
644   // workarounds.
645   if (CheckEquivalentExceptionSpec(
646         OldType->getAs<FunctionProtoType>(), Old->getLocation(),
647         NewType->getAs<FunctionProtoType>(), New->getLocation())) {
648     New->setInvalidDecl();
649   }
650 }
651 
652 /// CheckCXXDefaultArguments - Verify that the default arguments for a
653 /// function declaration are well-formed according to C++
654 /// [dcl.fct.default].
CheckCXXDefaultArguments(FunctionDecl * FD)655 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
656   unsigned NumParams = FD->getNumParams();
657   unsigned p;
658 
659   // Find first parameter with a default argument
660   for (p = 0; p < NumParams; ++p) {
661     ParmVarDecl *Param = FD->getParamDecl(p);
662     if (Param->hasDefaultArg())
663       break;
664   }
665 
666   // C++ [dcl.fct.default]p4:
667   //   In a given function declaration, all parameters
668   //   subsequent to a parameter with a default argument shall
669   //   have default arguments supplied in this or previous
670   //   declarations. A default argument shall not be redefined
671   //   by a later declaration (not even to the same value).
672   unsigned LastMissingDefaultArg = 0;
673   for (; p < NumParams; ++p) {
674     ParmVarDecl *Param = FD->getParamDecl(p);
675     if (!Param->hasDefaultArg()) {
676       if (Param->isInvalidDecl())
677         /* We already complained about this parameter. */;
678       else if (Param->getIdentifier())
679         Diag(Param->getLocation(),
680              diag::err_param_default_argument_missing_name)
681           << Param->getIdentifier();
682       else
683         Diag(Param->getLocation(),
684              diag::err_param_default_argument_missing);
685 
686       LastMissingDefaultArg = p;
687     }
688   }
689 
690   if (LastMissingDefaultArg > 0) {
691     // Some default arguments were missing. Clear out all of the
692     // default arguments up to (and including) the last missing
693     // default argument, so that we leave the function parameters
694     // in a semantically valid state.
695     for (p = 0; p <= LastMissingDefaultArg; ++p) {
696       ParmVarDecl *Param = FD->getParamDecl(p);
697       if (Param->hasDefaultArg()) {
698         Param->setDefaultArg(0);
699       }
700     }
701   }
702 }
703 
704 // CheckConstexprParameterTypes - Check whether a function's parameter types
705 // are all literal types. If so, return true. If not, produce a suitable
706 // diagnostic and return false.
CheckConstexprParameterTypes(Sema & SemaRef,const FunctionDecl * FD)707 static bool CheckConstexprParameterTypes(Sema &SemaRef,
708                                          const FunctionDecl *FD) {
709   unsigned ArgIndex = 0;
710   const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
711   for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
712        e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
713     const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
714     SourceLocation ParamLoc = PD->getLocation();
715     if (!(*i)->isDependentType() &&
716         SemaRef.RequireLiteralType(ParamLoc, *i,
717                                    diag::err_constexpr_non_literal_param,
718                                    ArgIndex+1, PD->getSourceRange(),
719                                    isa<CXXConstructorDecl>(FD)))
720       return false;
721   }
722   return true;
723 }
724 
725 /// \brief Get diagnostic %select index for tag kind for
726 /// record diagnostic message.
727 /// WARNING: Indexes apply to particular diagnostics only!
728 ///
729 /// \returns diagnostic %select index.
getRecordDiagFromTagKind(TagTypeKind Tag)730 static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
731   switch (Tag) {
732   case TTK_Struct: return 0;
733   case TTK_Interface: return 1;
734   case TTK_Class:  return 2;
735   default: llvm_unreachable("Invalid tag kind for record diagnostic!");
736   }
737 }
738 
739 // CheckConstexprFunctionDecl - Check whether a function declaration satisfies
740 // the requirements of a constexpr function definition or a constexpr
741 // constructor definition. If so, return true. If not, produce appropriate
742 // diagnostics and return false.
743 //
744 // This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
CheckConstexprFunctionDecl(const FunctionDecl * NewFD)745 bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
746   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
747   if (MD && MD->isInstance()) {
748     // C++11 [dcl.constexpr]p4:
749     //  The definition of a constexpr constructor shall satisfy the following
750     //  constraints:
751     //  - the class shall not have any virtual base classes;
752     const CXXRecordDecl *RD = MD->getParent();
753     if (RD->getNumVBases()) {
754       Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
755         << isa<CXXConstructorDecl>(NewFD)
756         << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
757       for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
758              E = RD->vbases_end(); I != E; ++I)
759         Diag(I->getLocStart(),
760              diag::note_constexpr_virtual_base_here) << I->getSourceRange();
761       return false;
762     }
763   }
764 
765   if (!isa<CXXConstructorDecl>(NewFD)) {
766     // C++11 [dcl.constexpr]p3:
767     //  The definition of a constexpr function shall satisfy the following
768     //  constraints:
769     // - it shall not be virtual;
770     const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
771     if (Method && Method->isVirtual()) {
772       Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
773 
774       // If it's not obvious why this function is virtual, find an overridden
775       // function which uses the 'virtual' keyword.
776       const CXXMethodDecl *WrittenVirtual = Method;
777       while (!WrittenVirtual->isVirtualAsWritten())
778         WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
779       if (WrittenVirtual != Method)
780         Diag(WrittenVirtual->getLocation(),
781              diag::note_overridden_virtual_function);
782       return false;
783     }
784 
785     // - its return type shall be a literal type;
786     QualType RT = NewFD->getResultType();
787     if (!RT->isDependentType() &&
788         RequireLiteralType(NewFD->getLocation(), RT,
789                            diag::err_constexpr_non_literal_return))
790       return false;
791   }
792 
793   // - each of its parameter types shall be a literal type;
794   if (!CheckConstexprParameterTypes(*this, NewFD))
795     return false;
796 
797   return true;
798 }
799 
800 /// Check the given declaration statement is legal within a constexpr function
801 /// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
802 ///
803 /// \return true if the body is OK (maybe only as an extension), false if we
804 ///         have diagnosed a problem.
CheckConstexprDeclStmt(Sema & SemaRef,const FunctionDecl * Dcl,DeclStmt * DS,SourceLocation & Cxx1yLoc)805 static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
806                                    DeclStmt *DS, SourceLocation &Cxx1yLoc) {
807   // C++11 [dcl.constexpr]p3 and p4:
808   //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
809   //  contain only
810   for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
811          DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
812     switch ((*DclIt)->getKind()) {
813     case Decl::StaticAssert:
814     case Decl::Using:
815     case Decl::UsingShadow:
816     case Decl::UsingDirective:
817     case Decl::UnresolvedUsingTypename:
818     case Decl::UnresolvedUsingValue:
819       //   - static_assert-declarations
820       //   - using-declarations,
821       //   - using-directives,
822       continue;
823 
824     case Decl::Typedef:
825     case Decl::TypeAlias: {
826       //   - typedef declarations and alias-declarations that do not define
827       //     classes or enumerations,
828       TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
829       if (TN->getUnderlyingType()->isVariablyModifiedType()) {
830         // Don't allow variably-modified types in constexpr functions.
831         TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
832         SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
833           << TL.getSourceRange() << TL.getType()
834           << isa<CXXConstructorDecl>(Dcl);
835         return false;
836       }
837       continue;
838     }
839 
840     case Decl::Enum:
841     case Decl::CXXRecord:
842       // C++1y allows types to be defined, not just declared.
843       if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition())
844         SemaRef.Diag(DS->getLocStart(),
845                      SemaRef.getLangOpts().CPlusPlus1y
846                        ? diag::warn_cxx11_compat_constexpr_type_definition
847                        : diag::ext_constexpr_type_definition)
848           << isa<CXXConstructorDecl>(Dcl);
849       continue;
850 
851     case Decl::EnumConstant:
852     case Decl::IndirectField:
853     case Decl::ParmVar:
854       // These can only appear with other declarations which are banned in
855       // C++11 and permitted in C++1y, so ignore them.
856       continue;
857 
858     case Decl::Var: {
859       // C++1y [dcl.constexpr]p3 allows anything except:
860       //   a definition of a variable of non-literal type or of static or
861       //   thread storage duration or for which no initialization is performed.
862       VarDecl *VD = cast<VarDecl>(*DclIt);
863       if (VD->isThisDeclarationADefinition()) {
864         if (VD->isStaticLocal()) {
865           SemaRef.Diag(VD->getLocation(),
866                        diag::err_constexpr_local_var_static)
867             << isa<CXXConstructorDecl>(Dcl)
868             << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
869           return false;
870         }
871         if (!VD->getType()->isDependentType() &&
872             SemaRef.RequireLiteralType(
873               VD->getLocation(), VD->getType(),
874               diag::err_constexpr_local_var_non_literal_type,
875               isa<CXXConstructorDecl>(Dcl)))
876           return false;
877         if (!VD->hasInit()) {
878           SemaRef.Diag(VD->getLocation(),
879                        diag::err_constexpr_local_var_no_init)
880             << isa<CXXConstructorDecl>(Dcl);
881           return false;
882         }
883       }
884       SemaRef.Diag(VD->getLocation(),
885                    SemaRef.getLangOpts().CPlusPlus1y
886                     ? diag::warn_cxx11_compat_constexpr_local_var
887                     : diag::ext_constexpr_local_var)
888         << isa<CXXConstructorDecl>(Dcl);
889       continue;
890     }
891 
892     case Decl::NamespaceAlias:
893     case Decl::Function:
894       // These are disallowed in C++11 and permitted in C++1y. Allow them
895       // everywhere as an extension.
896       if (!Cxx1yLoc.isValid())
897         Cxx1yLoc = DS->getLocStart();
898       continue;
899 
900     default:
901       SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
902         << isa<CXXConstructorDecl>(Dcl);
903       return false;
904     }
905   }
906 
907   return true;
908 }
909 
910 /// Check that the given field is initialized within a constexpr constructor.
911 ///
912 /// \param Dcl The constexpr constructor being checked.
913 /// \param Field The field being checked. This may be a member of an anonymous
914 ///        struct or union nested within the class being checked.
915 /// \param Inits All declarations, including anonymous struct/union members and
916 ///        indirect members, for which any initialization was provided.
917 /// \param Diagnosed Set to true if an error is produced.
CheckConstexprCtorInitializer(Sema & SemaRef,const FunctionDecl * Dcl,FieldDecl * Field,llvm::SmallSet<Decl *,16> & Inits,bool & Diagnosed)918 static void CheckConstexprCtorInitializer(Sema &SemaRef,
919                                           const FunctionDecl *Dcl,
920                                           FieldDecl *Field,
921                                           llvm::SmallSet<Decl*, 16> &Inits,
922                                           bool &Diagnosed) {
923   if (Field->isInvalidDecl())
924     return;
925 
926   if (Field->isUnnamedBitfield())
927     return;
928 
929   if (Field->isAnonymousStructOrUnion() &&
930       Field->getType()->getAsCXXRecordDecl()->isEmpty())
931     return;
932 
933   if (!Inits.count(Field)) {
934     if (!Diagnosed) {
935       SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
936       Diagnosed = true;
937     }
938     SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
939   } else if (Field->isAnonymousStructOrUnion()) {
940     const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
941     for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
942          I != E; ++I)
943       // If an anonymous union contains an anonymous struct of which any member
944       // is initialized, all members must be initialized.
945       if (!RD->isUnion() || Inits.count(*I))
946         CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
947   }
948 }
949 
950 /// Check the provided statement is allowed in a constexpr function
951 /// definition.
952 static bool
CheckConstexprFunctionStmt(Sema & SemaRef,const FunctionDecl * Dcl,Stmt * S,llvm::SmallVectorImpl<SourceLocation> & ReturnStmts,SourceLocation & Cxx1yLoc)953 CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
954                            llvm::SmallVectorImpl<SourceLocation> &ReturnStmts,
955                            SourceLocation &Cxx1yLoc) {
956   // - its function-body shall be [...] a compound-statement that contains only
957   switch (S->getStmtClass()) {
958   case Stmt::NullStmtClass:
959     //   - null statements,
960     return true;
961 
962   case Stmt::DeclStmtClass:
963     //   - static_assert-declarations
964     //   - using-declarations,
965     //   - using-directives,
966     //   - typedef declarations and alias-declarations that do not define
967     //     classes or enumerations,
968     if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc))
969       return false;
970     return true;
971 
972   case Stmt::ReturnStmtClass:
973     //   - and exactly one return statement;
974     if (isa<CXXConstructorDecl>(Dcl)) {
975       // C++1y allows return statements in constexpr constructors.
976       if (!Cxx1yLoc.isValid())
977         Cxx1yLoc = S->getLocStart();
978       return true;
979     }
980 
981     ReturnStmts.push_back(S->getLocStart());
982     return true;
983 
984   case Stmt::CompoundStmtClass: {
985     // C++1y allows compound-statements.
986     if (!Cxx1yLoc.isValid())
987       Cxx1yLoc = S->getLocStart();
988 
989     CompoundStmt *CompStmt = cast<CompoundStmt>(S);
990     for (CompoundStmt::body_iterator BodyIt = CompStmt->body_begin(),
991            BodyEnd = CompStmt->body_end(); BodyIt != BodyEnd; ++BodyIt) {
992       if (!CheckConstexprFunctionStmt(SemaRef, Dcl, *BodyIt, ReturnStmts,
993                                       Cxx1yLoc))
994         return false;
995     }
996     return true;
997   }
998 
999   case Stmt::AttributedStmtClass:
1000     if (!Cxx1yLoc.isValid())
1001       Cxx1yLoc = S->getLocStart();
1002     return true;
1003 
1004   case Stmt::IfStmtClass: {
1005     // C++1y allows if-statements.
1006     if (!Cxx1yLoc.isValid())
1007       Cxx1yLoc = S->getLocStart();
1008 
1009     IfStmt *If = cast<IfStmt>(S);
1010     if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
1011                                     Cxx1yLoc))
1012       return false;
1013     if (If->getElse() &&
1014         !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
1015                                     Cxx1yLoc))
1016       return false;
1017     return true;
1018   }
1019 
1020   case Stmt::WhileStmtClass:
1021   case Stmt::DoStmtClass:
1022   case Stmt::ForStmtClass:
1023   case Stmt::CXXForRangeStmtClass:
1024   case Stmt::ContinueStmtClass:
1025     // C++1y allows all of these. We don't allow them as extensions in C++11,
1026     // because they don't make sense without variable mutation.
1027     if (!SemaRef.getLangOpts().CPlusPlus1y)
1028       break;
1029     if (!Cxx1yLoc.isValid())
1030       Cxx1yLoc = S->getLocStart();
1031     for (Stmt::child_range Children = S->children(); Children; ++Children)
1032       if (*Children &&
1033           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1034                                       Cxx1yLoc))
1035         return false;
1036     return true;
1037 
1038   case Stmt::SwitchStmtClass:
1039   case Stmt::CaseStmtClass:
1040   case Stmt::DefaultStmtClass:
1041   case Stmt::BreakStmtClass:
1042     // C++1y allows switch-statements, and since they don't need variable
1043     // mutation, we can reasonably allow them in C++11 as an extension.
1044     if (!Cxx1yLoc.isValid())
1045       Cxx1yLoc = S->getLocStart();
1046     for (Stmt::child_range Children = S->children(); Children; ++Children)
1047       if (*Children &&
1048           !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1049                                       Cxx1yLoc))
1050         return false;
1051     return true;
1052 
1053   default:
1054     if (!isa<Expr>(S))
1055       break;
1056 
1057     // C++1y allows expression-statements.
1058     if (!Cxx1yLoc.isValid())
1059       Cxx1yLoc = S->getLocStart();
1060     return true;
1061   }
1062 
1063   SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt)
1064     << isa<CXXConstructorDecl>(Dcl);
1065   return false;
1066 }
1067 
1068 /// Check the body for the given constexpr function declaration only contains
1069 /// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
1070 ///
1071 /// \return true if the body is OK, false if we have diagnosed a problem.
CheckConstexprFunctionBody(const FunctionDecl * Dcl,Stmt * Body)1072 bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
1073   if (isa<CXXTryStmt>(Body)) {
1074     // C++11 [dcl.constexpr]p3:
1075     //  The definition of a constexpr function shall satisfy the following
1076     //  constraints: [...]
1077     // - its function-body shall be = delete, = default, or a
1078     //   compound-statement
1079     //
1080     // C++11 [dcl.constexpr]p4:
1081     //  In the definition of a constexpr constructor, [...]
1082     // - its function-body shall not be a function-try-block;
1083     Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
1084       << isa<CXXConstructorDecl>(Dcl);
1085     return false;
1086   }
1087 
1088   SmallVector<SourceLocation, 4> ReturnStmts;
1089 
1090   // - its function-body shall be [...] a compound-statement that contains only
1091   //   [... list of cases ...]
1092   CompoundStmt *CompBody = cast<CompoundStmt>(Body);
1093   SourceLocation Cxx1yLoc;
1094   for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
1095          BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
1096     if (!CheckConstexprFunctionStmt(*this, Dcl, *BodyIt, ReturnStmts, Cxx1yLoc))
1097       return false;
1098   }
1099 
1100   if (Cxx1yLoc.isValid())
1101     Diag(Cxx1yLoc,
1102          getLangOpts().CPlusPlus1y
1103            ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
1104            : diag::ext_constexpr_body_invalid_stmt)
1105       << isa<CXXConstructorDecl>(Dcl);
1106 
1107   if (const CXXConstructorDecl *Constructor
1108         = dyn_cast<CXXConstructorDecl>(Dcl)) {
1109     const CXXRecordDecl *RD = Constructor->getParent();
1110     // DR1359:
1111     // - every non-variant non-static data member and base class sub-object
1112     //   shall be initialized;
1113     // - if the class is a non-empty union, or for each non-empty anonymous
1114     //   union member of a non-union class, exactly one non-static data member
1115     //   shall be initialized;
1116     if (RD->isUnion()) {
1117       if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
1118         Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
1119         return false;
1120       }
1121     } else if (!Constructor->isDependentContext() &&
1122                !Constructor->isDelegatingConstructor()) {
1123       assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
1124 
1125       // Skip detailed checking if we have enough initializers, and we would
1126       // allow at most one initializer per member.
1127       bool AnyAnonStructUnionMembers = false;
1128       unsigned Fields = 0;
1129       for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1130            E = RD->field_end(); I != E; ++I, ++Fields) {
1131         if (I->isAnonymousStructOrUnion()) {
1132           AnyAnonStructUnionMembers = true;
1133           break;
1134         }
1135       }
1136       if (AnyAnonStructUnionMembers ||
1137           Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
1138         // Check initialization of non-static data members. Base classes are
1139         // always initialized so do not need to be checked. Dependent bases
1140         // might not have initializers in the member initializer list.
1141         llvm::SmallSet<Decl*, 16> Inits;
1142         for (CXXConstructorDecl::init_const_iterator
1143                I = Constructor->init_begin(), E = Constructor->init_end();
1144              I != E; ++I) {
1145           if (FieldDecl *FD = (*I)->getMember())
1146             Inits.insert(FD);
1147           else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
1148             Inits.insert(ID->chain_begin(), ID->chain_end());
1149         }
1150 
1151         bool Diagnosed = false;
1152         for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1153              E = RD->field_end(); I != E; ++I)
1154           CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
1155         if (Diagnosed)
1156           return false;
1157       }
1158     }
1159   } else {
1160     if (ReturnStmts.empty()) {
1161       // C++1y doesn't require constexpr functions to contain a 'return'
1162       // statement. We still do, unless the return type is void, because
1163       // otherwise if there's no return statement, the function cannot
1164       // be used in a core constant expression.
1165       bool OK = getLangOpts().CPlusPlus1y && Dcl->getResultType()->isVoidType();
1166       Diag(Dcl->getLocation(),
1167            OK ? diag::warn_cxx11_compat_constexpr_body_no_return
1168               : diag::err_constexpr_body_no_return);
1169       return OK;
1170     }
1171     if (ReturnStmts.size() > 1) {
1172       Diag(ReturnStmts.back(),
1173            getLangOpts().CPlusPlus1y
1174              ? diag::warn_cxx11_compat_constexpr_body_multiple_return
1175              : diag::ext_constexpr_body_multiple_return);
1176       for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
1177         Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
1178     }
1179   }
1180 
1181   // C++11 [dcl.constexpr]p5:
1182   //   if no function argument values exist such that the function invocation
1183   //   substitution would produce a constant expression, the program is
1184   //   ill-formed; no diagnostic required.
1185   // C++11 [dcl.constexpr]p3:
1186   //   - every constructor call and implicit conversion used in initializing the
1187   //     return value shall be one of those allowed in a constant expression.
1188   // C++11 [dcl.constexpr]p4:
1189   //   - every constructor involved in initializing non-static data members and
1190   //     base class sub-objects shall be a constexpr constructor.
1191   SmallVector<PartialDiagnosticAt, 8> Diags;
1192   if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
1193     Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr)
1194       << isa<CXXConstructorDecl>(Dcl);
1195     for (size_t I = 0, N = Diags.size(); I != N; ++I)
1196       Diag(Diags[I].first, Diags[I].second);
1197     // Don't return false here: we allow this for compatibility in
1198     // system headers.
1199   }
1200 
1201   return true;
1202 }
1203 
1204 /// isCurrentClassName - Determine whether the identifier II is the
1205 /// name of the class type currently being defined. In the case of
1206 /// nested classes, this will only return true if II is the name of
1207 /// the innermost class.
isCurrentClassName(const IdentifierInfo & II,Scope *,const CXXScopeSpec * SS)1208 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
1209                               const CXXScopeSpec *SS) {
1210   assert(getLangOpts().CPlusPlus && "No class names in C!");
1211 
1212   CXXRecordDecl *CurDecl;
1213   if (SS && SS->isSet() && !SS->isInvalid()) {
1214     DeclContext *DC = computeDeclContext(*SS, true);
1215     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1216   } else
1217     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1218 
1219   if (CurDecl && CurDecl->getIdentifier())
1220     return &II == CurDecl->getIdentifier();
1221   return false;
1222 }
1223 
1224 /// \brief Determine whether the given class is a base class of the given
1225 /// class, including looking at dependent bases.
findCircularInheritance(const CXXRecordDecl * Class,const CXXRecordDecl * Current)1226 static bool findCircularInheritance(const CXXRecordDecl *Class,
1227                                     const CXXRecordDecl *Current) {
1228   SmallVector<const CXXRecordDecl*, 8> Queue;
1229 
1230   Class = Class->getCanonicalDecl();
1231   while (true) {
1232     for (CXXRecordDecl::base_class_const_iterator I = Current->bases_begin(),
1233                                                   E = Current->bases_end();
1234          I != E; ++I) {
1235       CXXRecordDecl *Base = I->getType()->getAsCXXRecordDecl();
1236       if (!Base)
1237         continue;
1238 
1239       Base = Base->getDefinition();
1240       if (!Base)
1241         continue;
1242 
1243       if (Base->getCanonicalDecl() == Class)
1244         return true;
1245 
1246       Queue.push_back(Base);
1247     }
1248 
1249     if (Queue.empty())
1250       return false;
1251 
1252     Current = Queue.back();
1253     Queue.pop_back();
1254   }
1255 
1256   return false;
1257 }
1258 
1259 /// \brief Check the validity of a C++ base class specifier.
1260 ///
1261 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
1262 /// and returns NULL otherwise.
1263 CXXBaseSpecifier *
CheckBaseSpecifier(CXXRecordDecl * Class,SourceRange SpecifierRange,bool Virtual,AccessSpecifier Access,TypeSourceInfo * TInfo,SourceLocation EllipsisLoc)1264 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
1265                          SourceRange SpecifierRange,
1266                          bool Virtual, AccessSpecifier Access,
1267                          TypeSourceInfo *TInfo,
1268                          SourceLocation EllipsisLoc) {
1269   QualType BaseType = TInfo->getType();
1270 
1271   // C++ [class.union]p1:
1272   //   A union shall not have base classes.
1273   if (Class->isUnion()) {
1274     Diag(Class->getLocation(), diag::err_base_clause_on_union)
1275       << SpecifierRange;
1276     return 0;
1277   }
1278 
1279   if (EllipsisLoc.isValid() &&
1280       !TInfo->getType()->containsUnexpandedParameterPack()) {
1281     Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1282       << TInfo->getTypeLoc().getSourceRange();
1283     EllipsisLoc = SourceLocation();
1284   }
1285 
1286   SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
1287 
1288   if (BaseType->isDependentType()) {
1289     // Make sure that we don't have circular inheritance among our dependent
1290     // bases. For non-dependent bases, the check for completeness below handles
1291     // this.
1292     if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
1293       if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
1294           ((BaseDecl = BaseDecl->getDefinition()) &&
1295            findCircularInheritance(Class, BaseDecl))) {
1296         Diag(BaseLoc, diag::err_circular_inheritance)
1297           << BaseType << Context.getTypeDeclType(Class);
1298 
1299         if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
1300           Diag(BaseDecl->getLocation(), diag::note_previous_decl)
1301             << BaseType;
1302 
1303         return 0;
1304       }
1305     }
1306 
1307     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1308                                           Class->getTagKind() == TTK_Class,
1309                                           Access, TInfo, EllipsisLoc);
1310   }
1311 
1312   // Base specifiers must be record types.
1313   if (!BaseType->isRecordType()) {
1314     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
1315     return 0;
1316   }
1317 
1318   // C++ [class.union]p1:
1319   //   A union shall not be used as a base class.
1320   if (BaseType->isUnionType()) {
1321     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
1322     return 0;
1323   }
1324 
1325   // C++ [class.derived]p2:
1326   //   The class-name in a base-specifier shall not be an incompletely
1327   //   defined class.
1328   if (RequireCompleteType(BaseLoc, BaseType,
1329                           diag::err_incomplete_base_class, SpecifierRange)) {
1330     Class->setInvalidDecl();
1331     return 0;
1332   }
1333 
1334   // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
1335   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
1336   assert(BaseDecl && "Record type has no declaration");
1337   BaseDecl = BaseDecl->getDefinition();
1338   assert(BaseDecl && "Base type is not incomplete, but has no definition");
1339   CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
1340   assert(CXXBaseDecl && "Base type is not a C++ type");
1341 
1342   // C++ [class]p3:
1343   //   If a class is marked final and it appears as a base-type-specifier in
1344   //   base-clause, the program is ill-formed.
1345   if (CXXBaseDecl->hasAttr<FinalAttr>()) {
1346     Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
1347       << CXXBaseDecl->getDeclName();
1348     Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
1349       << CXXBaseDecl->getDeclName();
1350     return 0;
1351   }
1352 
1353   if (BaseDecl->isInvalidDecl())
1354     Class->setInvalidDecl();
1355 
1356   // Create the base specifier.
1357   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1358                                         Class->getTagKind() == TTK_Class,
1359                                         Access, TInfo, EllipsisLoc);
1360 }
1361 
1362 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
1363 /// one entry in the base class list of a class specifier, for
1364 /// example:
1365 ///    class foo : public bar, virtual private baz {
1366 /// 'public bar' and 'virtual private baz' are each base-specifiers.
1367 BaseResult
ActOnBaseSpecifier(Decl * classdecl,SourceRange SpecifierRange,ParsedAttributes & Attributes,bool Virtual,AccessSpecifier Access,ParsedType basetype,SourceLocation BaseLoc,SourceLocation EllipsisLoc)1368 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1369                          ParsedAttributes &Attributes,
1370                          bool Virtual, AccessSpecifier Access,
1371                          ParsedType basetype, SourceLocation BaseLoc,
1372                          SourceLocation EllipsisLoc) {
1373   if (!classdecl)
1374     return true;
1375 
1376   AdjustDeclIfTemplate(classdecl);
1377   CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1378   if (!Class)
1379     return true;
1380 
1381   // We do not support any C++11 attributes on base-specifiers yet.
1382   // Diagnose any attributes we see.
1383   if (!Attributes.empty()) {
1384     for (AttributeList *Attr = Attributes.getList(); Attr;
1385          Attr = Attr->getNext()) {
1386       if (Attr->isInvalid() ||
1387           Attr->getKind() == AttributeList::IgnoredAttribute)
1388         continue;
1389       Diag(Attr->getLoc(),
1390            Attr->getKind() == AttributeList::UnknownAttribute
1391              ? diag::warn_unknown_attribute_ignored
1392              : diag::err_base_specifier_attribute)
1393         << Attr->getName();
1394     }
1395   }
1396 
1397   TypeSourceInfo *TInfo = 0;
1398   GetTypeFromParser(basetype, &TInfo);
1399 
1400   if (EllipsisLoc.isInvalid() &&
1401       DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
1402                                       UPPC_BaseType))
1403     return true;
1404 
1405   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
1406                                                       Virtual, Access, TInfo,
1407                                                       EllipsisLoc))
1408     return BaseSpec;
1409   else
1410     Class->setInvalidDecl();
1411 
1412   return true;
1413 }
1414 
1415 /// \brief Performs the actual work of attaching the given base class
1416 /// specifiers to a C++ class.
AttachBaseSpecifiers(CXXRecordDecl * Class,CXXBaseSpecifier ** Bases,unsigned NumBases)1417 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
1418                                 unsigned NumBases) {
1419  if (NumBases == 0)
1420     return false;
1421 
1422   // Used to keep track of which base types we have already seen, so
1423   // that we can properly diagnose redundant direct base types. Note
1424   // that the key is always the unqualified canonical type of the base
1425   // class.
1426   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
1427 
1428   // Copy non-redundant base specifiers into permanent storage.
1429   unsigned NumGoodBases = 0;
1430   bool Invalid = false;
1431   for (unsigned idx = 0; idx < NumBases; ++idx) {
1432     QualType NewBaseType
1433       = Context.getCanonicalType(Bases[idx]->getType());
1434     NewBaseType = NewBaseType.getLocalUnqualifiedType();
1435 
1436     CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
1437     if (KnownBase) {
1438       // C++ [class.mi]p3:
1439       //   A class shall not be specified as a direct base class of a
1440       //   derived class more than once.
1441       Diag(Bases[idx]->getLocStart(),
1442            diag::err_duplicate_base_class)
1443         << KnownBase->getType()
1444         << Bases[idx]->getSourceRange();
1445 
1446       // Delete the duplicate base class specifier; we're going to
1447       // overwrite its pointer later.
1448       Context.Deallocate(Bases[idx]);
1449 
1450       Invalid = true;
1451     } else {
1452       // Okay, add this new base class.
1453       KnownBase = Bases[idx];
1454       Bases[NumGoodBases++] = Bases[idx];
1455       if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
1456         const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
1457         if (Class->isInterface() &&
1458               (!RD->isInterface() ||
1459                KnownBase->getAccessSpecifier() != AS_public)) {
1460           // The Microsoft extension __interface does not permit bases that
1461           // are not themselves public interfaces.
1462           Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
1463             << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getName()
1464             << RD->getSourceRange();
1465           Invalid = true;
1466         }
1467         if (RD->hasAttr<WeakAttr>())
1468           Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
1469       }
1470     }
1471   }
1472 
1473   // Attach the remaining base class specifiers to the derived class.
1474   Class->setBases(Bases, NumGoodBases);
1475 
1476   // Delete the remaining (good) base class specifiers, since their
1477   // data has been copied into the CXXRecordDecl.
1478   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
1479     Context.Deallocate(Bases[idx]);
1480 
1481   return Invalid;
1482 }
1483 
1484 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
1485 /// class, after checking whether there are any duplicate base
1486 /// classes.
ActOnBaseSpecifiers(Decl * ClassDecl,CXXBaseSpecifier ** Bases,unsigned NumBases)1487 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1488                                unsigned NumBases) {
1489   if (!ClassDecl || !Bases || !NumBases)
1490     return;
1491 
1492   AdjustDeclIfTemplate(ClassDecl);
1493   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases, NumBases);
1494 }
1495 
1496 /// \brief Determine whether the type \p Derived is a C++ class that is
1497 /// derived from the type \p Base.
IsDerivedFrom(QualType Derived,QualType Base)1498 bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
1499   if (!getLangOpts().CPlusPlus)
1500     return false;
1501 
1502   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1503   if (!DerivedRD)
1504     return false;
1505 
1506   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1507   if (!BaseRD)
1508     return false;
1509 
1510   // If either the base or the derived type is invalid, don't try to
1511   // check whether one is derived from the other.
1512   if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
1513     return false;
1514 
1515   // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
1516   return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
1517 }
1518 
1519 /// \brief Determine whether the type \p Derived is a C++ class that is
1520 /// derived from the type \p Base.
IsDerivedFrom(QualType Derived,QualType Base,CXXBasePaths & Paths)1521 bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
1522   if (!getLangOpts().CPlusPlus)
1523     return false;
1524 
1525   CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1526   if (!DerivedRD)
1527     return false;
1528 
1529   CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1530   if (!BaseRD)
1531     return false;
1532 
1533   return DerivedRD->isDerivedFrom(BaseRD, Paths);
1534 }
1535 
BuildBasePathArray(const CXXBasePaths & Paths,CXXCastPath & BasePathArray)1536 void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
1537                               CXXCastPath &BasePathArray) {
1538   assert(BasePathArray.empty() && "Base path array must be empty!");
1539   assert(Paths.isRecordingPaths() && "Must record paths!");
1540 
1541   const CXXBasePath &Path = Paths.front();
1542 
1543   // We first go backward and check if we have a virtual base.
1544   // FIXME: It would be better if CXXBasePath had the base specifier for
1545   // the nearest virtual base.
1546   unsigned Start = 0;
1547   for (unsigned I = Path.size(); I != 0; --I) {
1548     if (Path[I - 1].Base->isVirtual()) {
1549       Start = I - 1;
1550       break;
1551     }
1552   }
1553 
1554   // Now add all bases.
1555   for (unsigned I = Start, E = Path.size(); I != E; ++I)
1556     BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
1557 }
1558 
1559 /// \brief Determine whether the given base path includes a virtual
1560 /// base class.
BasePathInvolvesVirtualBase(const CXXCastPath & BasePath)1561 bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
1562   for (CXXCastPath::const_iterator B = BasePath.begin(),
1563                                 BEnd = BasePath.end();
1564        B != BEnd; ++B)
1565     if ((*B)->isVirtual())
1566       return true;
1567 
1568   return false;
1569 }
1570 
1571 /// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
1572 /// conversion (where Derived and Base are class types) is
1573 /// well-formed, meaning that the conversion is unambiguous (and
1574 /// that all of the base classes are accessible). Returns true
1575 /// and emits a diagnostic if the code is ill-formed, returns false
1576 /// otherwise. Loc is the location where this routine should point to
1577 /// if there is an error, and Range is the source range to highlight
1578 /// if there is an error.
1579 bool
CheckDerivedToBaseConversion(QualType Derived,QualType Base,unsigned InaccessibleBaseID,unsigned AmbigiousBaseConvID,SourceLocation Loc,SourceRange Range,DeclarationName Name,CXXCastPath * BasePath)1580 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1581                                    unsigned InaccessibleBaseID,
1582                                    unsigned AmbigiousBaseConvID,
1583                                    SourceLocation Loc, SourceRange Range,
1584                                    DeclarationName Name,
1585                                    CXXCastPath *BasePath) {
1586   // First, determine whether the path from Derived to Base is
1587   // ambiguous. This is slightly more expensive than checking whether
1588   // the Derived to Base conversion exists, because here we need to
1589   // explore multiple paths to determine if there is an ambiguity.
1590   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1591                      /*DetectVirtual=*/false);
1592   bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
1593   assert(DerivationOkay &&
1594          "Can only be used with a derived-to-base conversion");
1595   (void)DerivationOkay;
1596 
1597   if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
1598     if (InaccessibleBaseID) {
1599       // Check that the base class can be accessed.
1600       switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
1601                                    InaccessibleBaseID)) {
1602         case AR_inaccessible:
1603           return true;
1604         case AR_accessible:
1605         case AR_dependent:
1606         case AR_delayed:
1607           break;
1608       }
1609     }
1610 
1611     // Build a base path if necessary.
1612     if (BasePath)
1613       BuildBasePathArray(Paths, *BasePath);
1614     return false;
1615   }
1616 
1617   if (AmbigiousBaseConvID) {
1618     // We know that the derived-to-base conversion is ambiguous, and
1619     // we're going to produce a diagnostic. Perform the derived-to-base
1620     // search just one more time to compute all of the possible paths so
1621     // that we can print them out. This is more expensive than any of
1622     // the previous derived-to-base checks we've done, but at this point
1623     // performance isn't as much of an issue.
1624     Paths.clear();
1625     Paths.setRecordingPaths(true);
1626     bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
1627     assert(StillOkay && "Can only be used with a derived-to-base conversion");
1628     (void)StillOkay;
1629 
1630     // Build up a textual representation of the ambiguous paths, e.g.,
1631     // D -> B -> A, that will be used to illustrate the ambiguous
1632     // conversions in the diagnostic. We only print one of the paths
1633     // to each base class subobject.
1634     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1635 
1636     Diag(Loc, AmbigiousBaseConvID)
1637     << Derived << Base << PathDisplayStr << Range << Name;
1638   }
1639   return true;
1640 }
1641 
1642 bool
CheckDerivedToBaseConversion(QualType Derived,QualType Base,SourceLocation Loc,SourceRange Range,CXXCastPath * BasePath,bool IgnoreAccess)1643 Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1644                                    SourceLocation Loc, SourceRange Range,
1645                                    CXXCastPath *BasePath,
1646                                    bool IgnoreAccess) {
1647   return CheckDerivedToBaseConversion(Derived, Base,
1648                                       IgnoreAccess ? 0
1649                                        : diag::err_upcast_to_inaccessible_base,
1650                                       diag::err_ambiguous_derived_to_base_conv,
1651                                       Loc, Range, DeclarationName(),
1652                                       BasePath);
1653 }
1654 
1655 
1656 /// @brief Builds a string representing ambiguous paths from a
1657 /// specific derived class to different subobjects of the same base
1658 /// class.
1659 ///
1660 /// This function builds a string that can be used in error messages
1661 /// to show the different paths that one can take through the
1662 /// inheritance hierarchy to go from the derived class to different
1663 /// subobjects of a base class. The result looks something like this:
1664 /// @code
1665 /// struct D -> struct B -> struct A
1666 /// struct D -> struct C -> struct A
1667 /// @endcode
getAmbiguousPathsDisplayString(CXXBasePaths & Paths)1668 std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
1669   std::string PathDisplayStr;
1670   std::set<unsigned> DisplayedPaths;
1671   for (CXXBasePaths::paths_iterator Path = Paths.begin();
1672        Path != Paths.end(); ++Path) {
1673     if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
1674       // We haven't displayed a path to this particular base
1675       // class subobject yet.
1676       PathDisplayStr += "\n    ";
1677       PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
1678       for (CXXBasePath::const_iterator Element = Path->begin();
1679            Element != Path->end(); ++Element)
1680         PathDisplayStr += " -> " + Element->Base->getType().getAsString();
1681     }
1682   }
1683 
1684   return PathDisplayStr;
1685 }
1686 
1687 //===----------------------------------------------------------------------===//
1688 // C++ class member Handling
1689 //===----------------------------------------------------------------------===//
1690 
1691 /// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
ActOnAccessSpecifier(AccessSpecifier Access,SourceLocation ASLoc,SourceLocation ColonLoc,AttributeList * Attrs)1692 bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1693                                 SourceLocation ASLoc,
1694                                 SourceLocation ColonLoc,
1695                                 AttributeList *Attrs) {
1696   assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1697   AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1698                                                   ASLoc, ColonLoc);
1699   CurContext->addHiddenDecl(ASDecl);
1700   return ProcessAccessDeclAttributeList(ASDecl, Attrs);
1701 }
1702 
1703 /// CheckOverrideControl - Check C++11 override control semantics.
CheckOverrideControl(Decl * D)1704 void Sema::CheckOverrideControl(Decl *D) {
1705   if (D->isInvalidDecl())
1706     return;
1707 
1708   const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1709 
1710   // Do we know which functions this declaration might be overriding?
1711   bool OverridesAreKnown = !MD ||
1712       (!MD->getParent()->hasAnyDependentBases() &&
1713        !MD->getType()->isDependentType());
1714 
1715   if (!MD || !MD->isVirtual()) {
1716     if (OverridesAreKnown) {
1717       if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1718         Diag(OA->getLocation(),
1719              diag::override_keyword_only_allowed_on_virtual_member_functions)
1720           << "override" << FixItHint::CreateRemoval(OA->getLocation());
1721         D->dropAttr<OverrideAttr>();
1722       }
1723       if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1724         Diag(FA->getLocation(),
1725              diag::override_keyword_only_allowed_on_virtual_member_functions)
1726           << "final" << FixItHint::CreateRemoval(FA->getLocation());
1727         D->dropAttr<FinalAttr>();
1728       }
1729     }
1730     return;
1731   }
1732 
1733   if (!OverridesAreKnown)
1734     return;
1735 
1736   // C++11 [class.virtual]p5:
1737   //   If a virtual function is marked with the virt-specifier override and
1738   //   does not override a member function of a base class, the program is
1739   //   ill-formed.
1740   bool HasOverriddenMethods =
1741     MD->begin_overridden_methods() != MD->end_overridden_methods();
1742   if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
1743     Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
1744       << MD->getDeclName();
1745 }
1746 
1747 /// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1748 /// function overrides a virtual member function marked 'final', according to
1749 /// C++11 [class.virtual]p4.
CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl * New,const CXXMethodDecl * Old)1750 bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1751                                                   const CXXMethodDecl *Old) {
1752   if (!Old->hasAttr<FinalAttr>())
1753     return false;
1754 
1755   Diag(New->getLocation(), diag::err_final_function_overridden)
1756     << New->getDeclName();
1757   Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1758   return true;
1759 }
1760 
InitializationHasSideEffects(const FieldDecl & FD)1761 static bool InitializationHasSideEffects(const FieldDecl &FD) {
1762   const Type *T = FD.getType()->getBaseElementTypeUnsafe();
1763   // FIXME: Destruction of ObjC lifetime types has side-effects.
1764   if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1765     return !RD->isCompleteDefinition() ||
1766            !RD->hasTrivialDefaultConstructor() ||
1767            !RD->hasTrivialDestructor();
1768   return false;
1769 }
1770 
getMSPropertyAttr(AttributeList * list)1771 static AttributeList *getMSPropertyAttr(AttributeList *list) {
1772   for (AttributeList* it = list; it != 0; it = it->getNext())
1773     if (it->isDeclspecPropertyAttribute())
1774       return it;
1775   return 0;
1776 }
1777 
1778 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1779 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1780 /// bitfield width if there is one, 'InitExpr' specifies the initializer if
1781 /// one has been parsed, and 'InitStyle' is set if an in-class initializer is
1782 /// present (but parsing it has been deferred).
1783 NamedDecl *
ActOnCXXMemberDeclarator(Scope * S,AccessSpecifier AS,Declarator & D,MultiTemplateParamsArg TemplateParameterLists,Expr * BW,const VirtSpecifiers & VS,InClassInitStyle InitStyle)1784 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1785                                MultiTemplateParamsArg TemplateParameterLists,
1786                                Expr *BW, const VirtSpecifiers &VS,
1787                                InClassInitStyle InitStyle) {
1788   const DeclSpec &DS = D.getDeclSpec();
1789   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1790   DeclarationName Name = NameInfo.getName();
1791   SourceLocation Loc = NameInfo.getLoc();
1792 
1793   // For anonymous bitfields, the location should point to the type.
1794   if (Loc.isInvalid())
1795     Loc = D.getLocStart();
1796 
1797   Expr *BitWidth = static_cast<Expr*>(BW);
1798 
1799   assert(isa<CXXRecordDecl>(CurContext));
1800   assert(!DS.isFriendSpecified());
1801 
1802   bool isFunc = D.isDeclarationOfFunction();
1803 
1804   if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
1805     // The Microsoft extension __interface only permits public member functions
1806     // and prohibits constructors, destructors, operators, non-public member
1807     // functions, static methods and data members.
1808     unsigned InvalidDecl;
1809     bool ShowDeclName = true;
1810     if (!isFunc)
1811       InvalidDecl = (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) ? 0 : 1;
1812     else if (AS != AS_public)
1813       InvalidDecl = 2;
1814     else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
1815       InvalidDecl = 3;
1816     else switch (Name.getNameKind()) {
1817       case DeclarationName::CXXConstructorName:
1818         InvalidDecl = 4;
1819         ShowDeclName = false;
1820         break;
1821 
1822       case DeclarationName::CXXDestructorName:
1823         InvalidDecl = 5;
1824         ShowDeclName = false;
1825         break;
1826 
1827       case DeclarationName::CXXOperatorName:
1828       case DeclarationName::CXXConversionFunctionName:
1829         InvalidDecl = 6;
1830         break;
1831 
1832       default:
1833         InvalidDecl = 0;
1834         break;
1835     }
1836 
1837     if (InvalidDecl) {
1838       if (ShowDeclName)
1839         Diag(Loc, diag::err_invalid_member_in_interface)
1840           << (InvalidDecl-1) << Name;
1841       else
1842         Diag(Loc, diag::err_invalid_member_in_interface)
1843           << (InvalidDecl-1) << "";
1844       return 0;
1845     }
1846   }
1847 
1848   // C++ 9.2p6: A member shall not be declared to have automatic storage
1849   // duration (auto, register) or with the extern storage-class-specifier.
1850   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1851   // data members and cannot be applied to names declared const or static,
1852   // and cannot be applied to reference members.
1853   switch (DS.getStorageClassSpec()) {
1854   case DeclSpec::SCS_unspecified:
1855   case DeclSpec::SCS_typedef:
1856   case DeclSpec::SCS_static:
1857     break;
1858   case DeclSpec::SCS_mutable:
1859     if (isFunc) {
1860       Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1861 
1862       // FIXME: It would be nicer if the keyword was ignored only for this
1863       // declarator. Otherwise we could get follow-up errors.
1864       D.getMutableDeclSpec().ClearStorageClassSpecs();
1865     }
1866     break;
1867   default:
1868     Diag(DS.getStorageClassSpecLoc(),
1869          diag::err_storageclass_invalid_for_member);
1870     D.getMutableDeclSpec().ClearStorageClassSpecs();
1871     break;
1872   }
1873 
1874   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1875                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1876                       !isFunc);
1877 
1878   if (DS.isConstexprSpecified() && isInstField) {
1879     SemaDiagnosticBuilder B =
1880         Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
1881     SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
1882     if (InitStyle == ICIS_NoInit) {
1883       B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const");
1884       D.getMutableDeclSpec().ClearConstexprSpec();
1885       const char *PrevSpec;
1886       unsigned DiagID;
1887       bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc,
1888                                          PrevSpec, DiagID, getLangOpts());
1889       (void)Failed;
1890       assert(!Failed && "Making a constexpr member const shouldn't fail");
1891     } else {
1892       B << 1;
1893       const char *PrevSpec;
1894       unsigned DiagID;
1895       if (D.getMutableDeclSpec().SetStorageClassSpec(
1896           *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID)) {
1897         assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
1898                "This is the only DeclSpec that should fail to be applied");
1899         B << 1;
1900       } else {
1901         B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
1902         isInstField = false;
1903       }
1904     }
1905   }
1906 
1907   NamedDecl *Member;
1908   if (isInstField) {
1909     CXXScopeSpec &SS = D.getCXXScopeSpec();
1910 
1911     // Data members must have identifiers for names.
1912     if (!Name.isIdentifier()) {
1913       Diag(Loc, diag::err_bad_variable_name)
1914         << Name;
1915       return 0;
1916     }
1917 
1918     IdentifierInfo *II = Name.getAsIdentifierInfo();
1919 
1920     // Member field could not be with "template" keyword.
1921     // So TemplateParameterLists should be empty in this case.
1922     if (TemplateParameterLists.size()) {
1923       TemplateParameterList* TemplateParams = TemplateParameterLists[0];
1924       if (TemplateParams->size()) {
1925         // There is no such thing as a member field template.
1926         Diag(D.getIdentifierLoc(), diag::err_template_member)
1927             << II
1928             << SourceRange(TemplateParams->getTemplateLoc(),
1929                 TemplateParams->getRAngleLoc());
1930       } else {
1931         // There is an extraneous 'template<>' for this member.
1932         Diag(TemplateParams->getTemplateLoc(),
1933             diag::err_template_member_noparams)
1934             << II
1935             << SourceRange(TemplateParams->getTemplateLoc(),
1936                 TemplateParams->getRAngleLoc());
1937       }
1938       return 0;
1939     }
1940 
1941     if (SS.isSet() && !SS.isInvalid()) {
1942       // The user provided a superfluous scope specifier inside a class
1943       // definition:
1944       //
1945       // class X {
1946       //   int X::member;
1947       // };
1948       if (DeclContext *DC = computeDeclContext(SS, false))
1949         diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
1950       else
1951         Diag(D.getIdentifierLoc(), diag::err_member_qualification)
1952           << Name << SS.getRange();
1953 
1954       SS.clear();
1955     }
1956 
1957     AttributeList *MSPropertyAttr =
1958       getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
1959     if (MSPropertyAttr) {
1960       Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1961                                 BitWidth, InitStyle, AS, MSPropertyAttr);
1962       if (!Member)
1963         return 0;
1964       isInstField = false;
1965     } else {
1966       Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1967                                 BitWidth, InitStyle, AS);
1968       assert(Member && "HandleField never returns null");
1969     }
1970   } else {
1971     assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
1972 
1973     Member = HandleDeclarator(S, D, TemplateParameterLists);
1974     if (!Member)
1975       return 0;
1976 
1977     // Non-instance-fields can't have a bitfield.
1978     if (BitWidth) {
1979       if (Member->isInvalidDecl()) {
1980         // don't emit another diagnostic.
1981       } else if (isa<VarDecl>(Member)) {
1982         // C++ 9.6p3: A bit-field shall not be a static member.
1983         // "static member 'A' cannot be a bit-field"
1984         Diag(Loc, diag::err_static_not_bitfield)
1985           << Name << BitWidth->getSourceRange();
1986       } else if (isa<TypedefDecl>(Member)) {
1987         // "typedef member 'x' cannot be a bit-field"
1988         Diag(Loc, diag::err_typedef_not_bitfield)
1989           << Name << BitWidth->getSourceRange();
1990       } else {
1991         // A function typedef ("typedef int f(); f a;").
1992         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
1993         Diag(Loc, diag::err_not_integral_type_bitfield)
1994           << Name << cast<ValueDecl>(Member)->getType()
1995           << BitWidth->getSourceRange();
1996       }
1997 
1998       BitWidth = 0;
1999       Member->setInvalidDecl();
2000     }
2001 
2002     Member->setAccess(AS);
2003 
2004     // If we have declared a member function template or static data member
2005     // template, set the access of the templated declaration as well.
2006     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
2007       FunTmpl->getTemplatedDecl()->setAccess(AS);
2008     else if (VarTemplateDecl *VarTmpl = dyn_cast<VarTemplateDecl>(Member))
2009       VarTmpl->getTemplatedDecl()->setAccess(AS);
2010   }
2011 
2012   if (VS.isOverrideSpecified())
2013     Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
2014   if (VS.isFinalSpecified())
2015     Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
2016 
2017   if (VS.getLastLocation().isValid()) {
2018     // Update the end location of a method that has a virt-specifiers.
2019     if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
2020       MD->setRangeEnd(VS.getLastLocation());
2021   }
2022 
2023   CheckOverrideControl(Member);
2024 
2025   assert((Name || isInstField) && "No identifier for non-field ?");
2026 
2027   if (isInstField) {
2028     FieldDecl *FD = cast<FieldDecl>(Member);
2029     FieldCollector->Add(FD);
2030 
2031     if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
2032                                  FD->getLocation())
2033           != DiagnosticsEngine::Ignored) {
2034       // Remember all explicit private FieldDecls that have a name, no side
2035       // effects and are not part of a dependent type declaration.
2036       if (!FD->isImplicit() && FD->getDeclName() &&
2037           FD->getAccess() == AS_private &&
2038           !FD->hasAttr<UnusedAttr>() &&
2039           !FD->getParent()->isDependentContext() &&
2040           !InitializationHasSideEffects(*FD))
2041         UnusedPrivateFields.insert(FD);
2042     }
2043   }
2044 
2045   return Member;
2046 }
2047 
2048 namespace {
2049   class UninitializedFieldVisitor
2050       : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
2051     Sema &S;
2052     ValueDecl *VD;
2053   public:
2054     typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
UninitializedFieldVisitor(Sema & S,ValueDecl * VD)2055     UninitializedFieldVisitor(Sema &S, ValueDecl *VD) : Inherited(S.Context),
2056                                                         S(S) {
2057       if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(VD))
2058         this->VD = IFD->getAnonField();
2059       else
2060         this->VD = VD;
2061     }
2062 
HandleExpr(Expr * E)2063     void HandleExpr(Expr *E) {
2064       if (!E) return;
2065 
2066       // Expressions like x(x) sometimes lack the surrounding expressions
2067       // but need to be checked anyways.
2068       HandleValue(E);
2069       Visit(E);
2070     }
2071 
HandleValue(Expr * E)2072     void HandleValue(Expr *E) {
2073       E = E->IgnoreParens();
2074 
2075       if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
2076         if (isa<EnumConstantDecl>(ME->getMemberDecl()))
2077           return;
2078 
2079         // FieldME is the inner-most MemberExpr that is not an anonymous struct
2080         // or union.
2081         MemberExpr *FieldME = ME;
2082 
2083         Expr *Base = E;
2084         while (isa<MemberExpr>(Base)) {
2085           ME = cast<MemberExpr>(Base);
2086 
2087           if (isa<VarDecl>(ME->getMemberDecl()))
2088             return;
2089 
2090           if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2091             if (!FD->isAnonymousStructOrUnion())
2092               FieldME = ME;
2093 
2094           Base = ME->getBase();
2095         }
2096 
2097         if (VD == FieldME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
2098           unsigned diag = VD->getType()->isReferenceType()
2099               ? diag::warn_reference_field_is_uninit
2100               : diag::warn_field_is_uninit;
2101           S.Diag(FieldME->getExprLoc(), diag) << VD;
2102         }
2103         return;
2104       }
2105 
2106       if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
2107         HandleValue(CO->getTrueExpr());
2108         HandleValue(CO->getFalseExpr());
2109         return;
2110       }
2111 
2112       if (BinaryConditionalOperator *BCO =
2113               dyn_cast<BinaryConditionalOperator>(E)) {
2114         HandleValue(BCO->getCommon());
2115         HandleValue(BCO->getFalseExpr());
2116         return;
2117       }
2118 
2119       if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
2120         switch (BO->getOpcode()) {
2121         default:
2122           return;
2123         case(BO_PtrMemD):
2124         case(BO_PtrMemI):
2125           HandleValue(BO->getLHS());
2126           return;
2127         case(BO_Comma):
2128           HandleValue(BO->getRHS());
2129           return;
2130         }
2131       }
2132     }
2133 
VisitImplicitCastExpr(ImplicitCastExpr * E)2134     void VisitImplicitCastExpr(ImplicitCastExpr *E) {
2135       if (E->getCastKind() == CK_LValueToRValue)
2136         HandleValue(E->getSubExpr());
2137 
2138       Inherited::VisitImplicitCastExpr(E);
2139     }
2140 
VisitCXXMemberCallExpr(CXXMemberCallExpr * E)2141     void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
2142       Expr *Callee = E->getCallee();
2143       if (isa<MemberExpr>(Callee))
2144         HandleValue(Callee);
2145 
2146       Inherited::VisitCXXMemberCallExpr(E);
2147     }
2148   };
CheckInitExprContainsUninitializedFields(Sema & S,Expr * E,ValueDecl * VD)2149   static void CheckInitExprContainsUninitializedFields(Sema &S, Expr *E,
2150                                                        ValueDecl *VD) {
2151     UninitializedFieldVisitor(S, VD).HandleExpr(E);
2152   }
2153 } // namespace
2154 
2155 /// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
2156 /// in-class initializer for a non-static C++ class member, and after
2157 /// instantiating an in-class initializer in a class template. Such actions
2158 /// are deferred until the class is complete.
2159 void
ActOnCXXInClassMemberInitializer(Decl * D,SourceLocation InitLoc,Expr * InitExpr)2160 Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
2161                                        Expr *InitExpr) {
2162   FieldDecl *FD = cast<FieldDecl>(D);
2163   assert(FD->getInClassInitStyle() != ICIS_NoInit &&
2164          "must set init style when field is created");
2165 
2166   if (!InitExpr) {
2167     FD->setInvalidDecl();
2168     FD->removeInClassInitializer();
2169     return;
2170   }
2171 
2172   if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
2173     FD->setInvalidDecl();
2174     FD->removeInClassInitializer();
2175     return;
2176   }
2177 
2178   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, InitLoc)
2179       != DiagnosticsEngine::Ignored) {
2180     CheckInitExprContainsUninitializedFields(*this, InitExpr, FD);
2181   }
2182 
2183   ExprResult Init = InitExpr;
2184   if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
2185     InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
2186     InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
2187         ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
2188         : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
2189     InitializationSequence Seq(*this, Entity, Kind, InitExpr);
2190     Init = Seq.Perform(*this, Entity, Kind, InitExpr);
2191     if (Init.isInvalid()) {
2192       FD->setInvalidDecl();
2193       return;
2194     }
2195   }
2196 
2197   // C++11 [class.base.init]p7:
2198   //   The initialization of each base and member constitutes a
2199   //   full-expression.
2200   Init = ActOnFinishFullExpr(Init.take(), InitLoc);
2201   if (Init.isInvalid()) {
2202     FD->setInvalidDecl();
2203     return;
2204   }
2205 
2206   InitExpr = Init.release();
2207 
2208   FD->setInClassInitializer(InitExpr);
2209 }
2210 
2211 /// \brief Find the direct and/or virtual base specifiers that
2212 /// correspond to the given base type, for use in base initialization
2213 /// within a constructor.
FindBaseInitializer(Sema & SemaRef,CXXRecordDecl * ClassDecl,QualType BaseType,const CXXBaseSpecifier * & DirectBaseSpec,const CXXBaseSpecifier * & VirtualBaseSpec)2214 static bool FindBaseInitializer(Sema &SemaRef,
2215                                 CXXRecordDecl *ClassDecl,
2216                                 QualType BaseType,
2217                                 const CXXBaseSpecifier *&DirectBaseSpec,
2218                                 const CXXBaseSpecifier *&VirtualBaseSpec) {
2219   // First, check for a direct base class.
2220   DirectBaseSpec = 0;
2221   for (CXXRecordDecl::base_class_const_iterator Base
2222          = ClassDecl->bases_begin();
2223        Base != ClassDecl->bases_end(); ++Base) {
2224     if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
2225       // We found a direct base of this type. That's what we're
2226       // initializing.
2227       DirectBaseSpec = &*Base;
2228       break;
2229     }
2230   }
2231 
2232   // Check for a virtual base class.
2233   // FIXME: We might be able to short-circuit this if we know in advance that
2234   // there are no virtual bases.
2235   VirtualBaseSpec = 0;
2236   if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
2237     // We haven't found a base yet; search the class hierarchy for a
2238     // virtual base class.
2239     CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2240                        /*DetectVirtual=*/false);
2241     if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
2242                               BaseType, Paths)) {
2243       for (CXXBasePaths::paths_iterator Path = Paths.begin();
2244            Path != Paths.end(); ++Path) {
2245         if (Path->back().Base->isVirtual()) {
2246           VirtualBaseSpec = Path->back().Base;
2247           break;
2248         }
2249       }
2250     }
2251   }
2252 
2253   return DirectBaseSpec || VirtualBaseSpec;
2254 }
2255 
2256 /// \brief Handle a C++ member initializer using braced-init-list syntax.
2257 MemInitResult
ActOnMemInitializer(Decl * ConstructorD,Scope * S,CXXScopeSpec & SS,IdentifierInfo * MemberOrBase,ParsedType TemplateTypeTy,const DeclSpec & DS,SourceLocation IdLoc,Expr * InitList,SourceLocation EllipsisLoc)2258 Sema::ActOnMemInitializer(Decl *ConstructorD,
2259                           Scope *S,
2260                           CXXScopeSpec &SS,
2261                           IdentifierInfo *MemberOrBase,
2262                           ParsedType TemplateTypeTy,
2263                           const DeclSpec &DS,
2264                           SourceLocation IdLoc,
2265                           Expr *InitList,
2266                           SourceLocation EllipsisLoc) {
2267   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2268                              DS, IdLoc, InitList,
2269                              EllipsisLoc);
2270 }
2271 
2272 /// \brief Handle a C++ member initializer using parentheses syntax.
2273 MemInitResult
ActOnMemInitializer(Decl * ConstructorD,Scope * S,CXXScopeSpec & SS,IdentifierInfo * MemberOrBase,ParsedType TemplateTypeTy,const DeclSpec & DS,SourceLocation IdLoc,SourceLocation LParenLoc,ArrayRef<Expr * > Args,SourceLocation RParenLoc,SourceLocation EllipsisLoc)2274 Sema::ActOnMemInitializer(Decl *ConstructorD,
2275                           Scope *S,
2276                           CXXScopeSpec &SS,
2277                           IdentifierInfo *MemberOrBase,
2278                           ParsedType TemplateTypeTy,
2279                           const DeclSpec &DS,
2280                           SourceLocation IdLoc,
2281                           SourceLocation LParenLoc,
2282                           ArrayRef<Expr *> Args,
2283                           SourceLocation RParenLoc,
2284                           SourceLocation EllipsisLoc) {
2285   Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
2286                                            Args, RParenLoc);
2287   return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2288                              DS, IdLoc, List, EllipsisLoc);
2289 }
2290 
2291 namespace {
2292 
2293 // Callback to only accept typo corrections that can be a valid C++ member
2294 // intializer: either a non-static field member or a base class.
2295 class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
2296 public:
MemInitializerValidatorCCC(CXXRecordDecl * ClassDecl)2297   explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
2298       : ClassDecl(ClassDecl) {}
2299 
ValidateCandidate(const TypoCorrection & candidate)2300   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
2301     if (NamedDecl *ND = candidate.getCorrectionDecl()) {
2302       if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
2303         return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
2304       return isa<TypeDecl>(ND);
2305     }
2306     return false;
2307   }
2308 
2309 private:
2310   CXXRecordDecl *ClassDecl;
2311 };
2312 
2313 }
2314 
2315 /// \brief Handle a C++ member initializer.
2316 MemInitResult
BuildMemInitializer(Decl * ConstructorD,Scope * S,CXXScopeSpec & SS,IdentifierInfo * MemberOrBase,ParsedType TemplateTypeTy,const DeclSpec & DS,SourceLocation IdLoc,Expr * Init,SourceLocation EllipsisLoc)2317 Sema::BuildMemInitializer(Decl *ConstructorD,
2318                           Scope *S,
2319                           CXXScopeSpec &SS,
2320                           IdentifierInfo *MemberOrBase,
2321                           ParsedType TemplateTypeTy,
2322                           const DeclSpec &DS,
2323                           SourceLocation IdLoc,
2324                           Expr *Init,
2325                           SourceLocation EllipsisLoc) {
2326   if (!ConstructorD)
2327     return true;
2328 
2329   AdjustDeclIfTemplate(ConstructorD);
2330 
2331   CXXConstructorDecl *Constructor
2332     = dyn_cast<CXXConstructorDecl>(ConstructorD);
2333   if (!Constructor) {
2334     // The user wrote a constructor initializer on a function that is
2335     // not a C++ constructor. Ignore the error for now, because we may
2336     // have more member initializers coming; we'll diagnose it just
2337     // once in ActOnMemInitializers.
2338     return true;
2339   }
2340 
2341   CXXRecordDecl *ClassDecl = Constructor->getParent();
2342 
2343   // C++ [class.base.init]p2:
2344   //   Names in a mem-initializer-id are looked up in the scope of the
2345   //   constructor's class and, if not found in that scope, are looked
2346   //   up in the scope containing the constructor's definition.
2347   //   [Note: if the constructor's class contains a member with the
2348   //   same name as a direct or virtual base class of the class, a
2349   //   mem-initializer-id naming the member or base class and composed
2350   //   of a single identifier refers to the class member. A
2351   //   mem-initializer-id for the hidden base class may be specified
2352   //   using a qualified name. ]
2353   if (!SS.getScopeRep() && !TemplateTypeTy) {
2354     // Look for a member, first.
2355     DeclContext::lookup_result Result
2356       = ClassDecl->lookup(MemberOrBase);
2357     if (!Result.empty()) {
2358       ValueDecl *Member;
2359       if ((Member = dyn_cast<FieldDecl>(Result.front())) ||
2360           (Member = dyn_cast<IndirectFieldDecl>(Result.front()))) {
2361         if (EllipsisLoc.isValid())
2362           Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
2363             << MemberOrBase
2364             << SourceRange(IdLoc, Init->getSourceRange().getEnd());
2365 
2366         return BuildMemberInitializer(Member, Init, IdLoc);
2367       }
2368     }
2369   }
2370   // It didn't name a member, so see if it names a class.
2371   QualType BaseType;
2372   TypeSourceInfo *TInfo = 0;
2373 
2374   if (TemplateTypeTy) {
2375     BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
2376   } else if (DS.getTypeSpecType() == TST_decltype) {
2377     BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
2378   } else {
2379     LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
2380     LookupParsedName(R, S, &SS);
2381 
2382     TypeDecl *TyD = R.getAsSingle<TypeDecl>();
2383     if (!TyD) {
2384       if (R.isAmbiguous()) return true;
2385 
2386       // We don't want access-control diagnostics here.
2387       R.suppressDiagnostics();
2388 
2389       if (SS.isSet() && isDependentScopeSpecifier(SS)) {
2390         bool NotUnknownSpecialization = false;
2391         DeclContext *DC = computeDeclContext(SS, false);
2392         if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
2393           NotUnknownSpecialization = !Record->hasAnyDependentBases();
2394 
2395         if (!NotUnknownSpecialization) {
2396           // When the scope specifier can refer to a member of an unknown
2397           // specialization, we take it as a type name.
2398           BaseType = CheckTypenameType(ETK_None, SourceLocation(),
2399                                        SS.getWithLocInContext(Context),
2400                                        *MemberOrBase, IdLoc);
2401           if (BaseType.isNull())
2402             return true;
2403 
2404           R.clear();
2405           R.setLookupName(MemberOrBase);
2406         }
2407       }
2408 
2409       // If no results were found, try to correct typos.
2410       TypoCorrection Corr;
2411       MemInitializerValidatorCCC Validator(ClassDecl);
2412       if (R.empty() && BaseType.isNull() &&
2413           (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
2414                               Validator, ClassDecl))) {
2415         std::string CorrectedStr(Corr.getAsString(getLangOpts()));
2416         std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
2417         if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
2418           // We have found a non-static data member with a similar
2419           // name to what was typed; complain and initialize that
2420           // member.
2421           Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2422             << MemberOrBase << true << CorrectedQuotedStr
2423             << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2424           Diag(Member->getLocation(), diag::note_previous_decl)
2425             << CorrectedQuotedStr;
2426 
2427           return BuildMemberInitializer(Member, Init, IdLoc);
2428         } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
2429           const CXXBaseSpecifier *DirectBaseSpec;
2430           const CXXBaseSpecifier *VirtualBaseSpec;
2431           if (FindBaseInitializer(*this, ClassDecl,
2432                                   Context.getTypeDeclType(Type),
2433                                   DirectBaseSpec, VirtualBaseSpec)) {
2434             // We have found a direct or virtual base class with a
2435             // similar name to what was typed; complain and initialize
2436             // that base class.
2437             Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2438               << MemberOrBase << false << CorrectedQuotedStr
2439               << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2440 
2441             const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
2442                                                              : VirtualBaseSpec;
2443             Diag(BaseSpec->getLocStart(),
2444                  diag::note_base_class_specified_here)
2445               << BaseSpec->getType()
2446               << BaseSpec->getSourceRange();
2447 
2448             TyD = Type;
2449           }
2450         }
2451       }
2452 
2453       if (!TyD && BaseType.isNull()) {
2454         Diag(IdLoc, diag::err_mem_init_not_member_or_class)
2455           << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
2456         return true;
2457       }
2458     }
2459 
2460     if (BaseType.isNull()) {
2461       BaseType = Context.getTypeDeclType(TyD);
2462       if (SS.isSet()) {
2463         NestedNameSpecifier *Qualifier =
2464           static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2465 
2466         // FIXME: preserve source range information
2467         BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
2468       }
2469     }
2470   }
2471 
2472   if (!TInfo)
2473     TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
2474 
2475   return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2476 }
2477 
2478 /// Checks a member initializer expression for cases where reference (or
2479 /// pointer) members are bound to by-value parameters (or their addresses).
CheckForDanglingReferenceOrPointer(Sema & S,ValueDecl * Member,Expr * Init,SourceLocation IdLoc)2480 static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
2481                                                Expr *Init,
2482                                                SourceLocation IdLoc) {
2483   QualType MemberTy = Member->getType();
2484 
2485   // We only handle pointers and references currently.
2486   // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
2487   if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
2488     return;
2489 
2490   const bool IsPointer = MemberTy->isPointerType();
2491   if (IsPointer) {
2492     if (const UnaryOperator *Op
2493           = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
2494       // The only case we're worried about with pointers requires taking the
2495       // address.
2496       if (Op->getOpcode() != UO_AddrOf)
2497         return;
2498 
2499       Init = Op->getSubExpr();
2500     } else {
2501       // We only handle address-of expression initializers for pointers.
2502       return;
2503     }
2504   }
2505 
2506   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
2507     // We only warn when referring to a non-reference parameter declaration.
2508     const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
2509     if (!Parameter || Parameter->getType()->isReferenceType())
2510       return;
2511 
2512     S.Diag(Init->getExprLoc(),
2513            IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
2514                      : diag::warn_bind_ref_member_to_parameter)
2515       << Member << Parameter << Init->getSourceRange();
2516   } else {
2517     // Other initializers are fine.
2518     return;
2519   }
2520 
2521   S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
2522     << (unsigned)IsPointer;
2523 }
2524 
2525 MemInitResult
BuildMemberInitializer(ValueDecl * Member,Expr * Init,SourceLocation IdLoc)2526 Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
2527                              SourceLocation IdLoc) {
2528   FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
2529   IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
2530   assert((DirectMember || IndirectMember) &&
2531          "Member must be a FieldDecl or IndirectFieldDecl");
2532 
2533   if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2534     return true;
2535 
2536   if (Member->isInvalidDecl())
2537     return true;
2538 
2539   // Diagnose value-uses of fields to initialize themselves, e.g.
2540   //   foo(foo)
2541   // where foo is not also a parameter to the constructor.
2542   // TODO: implement -Wuninitialized and fold this into that framework.
2543   MultiExprArg Args;
2544   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2545     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2546   } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
2547     Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
2548   } else {
2549     // Template instantiation doesn't reconstruct ParenListExprs for us.
2550     Args = Init;
2551   }
2552 
2553   if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, IdLoc)
2554         != DiagnosticsEngine::Ignored)
2555     for (unsigned i = 0, e = Args.size(); i != e; ++i)
2556       // FIXME: Warn about the case when other fields are used before being
2557       // initialized. For example, let this field be the i'th field. When
2558       // initializing the i'th field, throw a warning if any of the >= i'th
2559       // fields are used, as they are not yet initialized.
2560       // Right now we are only handling the case where the i'th field uses
2561       // itself in its initializer.
2562       // Also need to take into account that some fields may be initialized by
2563       // in-class initializers, see C++11 [class.base.init]p9.
2564       CheckInitExprContainsUninitializedFields(*this, Args[i], Member);
2565 
2566   SourceRange InitRange = Init->getSourceRange();
2567 
2568   if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
2569     // Can't check initialization for a member of dependent type or when
2570     // any of the arguments are type-dependent expressions.
2571     DiscardCleanupsInEvaluationContext();
2572   } else {
2573     bool InitList = false;
2574     if (isa<InitListExpr>(Init)) {
2575       InitList = true;
2576       Args = Init;
2577     }
2578 
2579     // Initialize the member.
2580     InitializedEntity MemberEntity =
2581       DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
2582                    : InitializedEntity::InitializeMember(IndirectMember, 0);
2583     InitializationKind Kind =
2584       InitList ? InitializationKind::CreateDirectList(IdLoc)
2585                : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
2586                                                   InitRange.getEnd());
2587 
2588     InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
2589     ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 0);
2590     if (MemberInit.isInvalid())
2591       return true;
2592 
2593     CheckForDanglingReferenceOrPointer(*this, Member, MemberInit.get(), IdLoc);
2594 
2595     // C++11 [class.base.init]p7:
2596     //   The initialization of each base and member constitutes a
2597     //   full-expression.
2598     MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin());
2599     if (MemberInit.isInvalid())
2600       return true;
2601 
2602     Init = MemberInit.get();
2603   }
2604 
2605   if (DirectMember) {
2606     return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
2607                                             InitRange.getBegin(), Init,
2608                                             InitRange.getEnd());
2609   } else {
2610     return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
2611                                             InitRange.getBegin(), Init,
2612                                             InitRange.getEnd());
2613   }
2614 }
2615 
2616 MemInitResult
BuildDelegatingInitializer(TypeSourceInfo * TInfo,Expr * Init,CXXRecordDecl * ClassDecl)2617 Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
2618                                  CXXRecordDecl *ClassDecl) {
2619   SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
2620   if (!LangOpts.CPlusPlus11)
2621     return Diag(NameLoc, diag::err_delegating_ctor)
2622       << TInfo->getTypeLoc().getLocalSourceRange();
2623   Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
2624 
2625   bool InitList = true;
2626   MultiExprArg Args = Init;
2627   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2628     InitList = false;
2629     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2630   }
2631 
2632   SourceRange InitRange = Init->getSourceRange();
2633   // Initialize the object.
2634   InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
2635                                      QualType(ClassDecl->getTypeForDecl(), 0));
2636   InitializationKind Kind =
2637     InitList ? InitializationKind::CreateDirectList(NameLoc)
2638              : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
2639                                                 InitRange.getEnd());
2640   InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
2641   ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
2642                                               Args, 0);
2643   if (DelegationInit.isInvalid())
2644     return true;
2645 
2646   assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
2647          "Delegating constructor with no target?");
2648 
2649   // C++11 [class.base.init]p7:
2650   //   The initialization of each base and member constitutes a
2651   //   full-expression.
2652   DelegationInit = ActOnFinishFullExpr(DelegationInit.get(),
2653                                        InitRange.getBegin());
2654   if (DelegationInit.isInvalid())
2655     return true;
2656 
2657   // If we are in a dependent context, template instantiation will
2658   // perform this type-checking again. Just save the arguments that we
2659   // received in a ParenListExpr.
2660   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2661   // of the information that we have about the base
2662   // initializer. However, deconstructing the ASTs is a dicey process,
2663   // and this approach is far more likely to get the corner cases right.
2664   if (CurContext->isDependentContext())
2665     DelegationInit = Owned(Init);
2666 
2667   return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
2668                                           DelegationInit.takeAs<Expr>(),
2669                                           InitRange.getEnd());
2670 }
2671 
2672 MemInitResult
BuildBaseInitializer(QualType BaseType,TypeSourceInfo * BaseTInfo,Expr * Init,CXXRecordDecl * ClassDecl,SourceLocation EllipsisLoc)2673 Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
2674                            Expr *Init, CXXRecordDecl *ClassDecl,
2675                            SourceLocation EllipsisLoc) {
2676   SourceLocation BaseLoc
2677     = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
2678 
2679   if (!BaseType->isDependentType() && !BaseType->isRecordType())
2680     return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
2681              << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2682 
2683   // C++ [class.base.init]p2:
2684   //   [...] Unless the mem-initializer-id names a nonstatic data
2685   //   member of the constructor's class or a direct or virtual base
2686   //   of that class, the mem-initializer is ill-formed. A
2687   //   mem-initializer-list can initialize a base class using any
2688   //   name that denotes that base class type.
2689   bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
2690 
2691   SourceRange InitRange = Init->getSourceRange();
2692   if (EllipsisLoc.isValid()) {
2693     // This is a pack expansion.
2694     if (!BaseType->containsUnexpandedParameterPack())  {
2695       Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2696         << SourceRange(BaseLoc, InitRange.getEnd());
2697 
2698       EllipsisLoc = SourceLocation();
2699     }
2700   } else {
2701     // Check for any unexpanded parameter packs.
2702     if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
2703       return true;
2704 
2705     if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2706       return true;
2707   }
2708 
2709   // Check for direct and virtual base classes.
2710   const CXXBaseSpecifier *DirectBaseSpec = 0;
2711   const CXXBaseSpecifier *VirtualBaseSpec = 0;
2712   if (!Dependent) {
2713     if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2714                                        BaseType))
2715       return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2716 
2717     FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2718                         VirtualBaseSpec);
2719 
2720     // C++ [base.class.init]p2:
2721     // Unless the mem-initializer-id names a nonstatic data member of the
2722     // constructor's class or a direct or virtual base of that class, the
2723     // mem-initializer is ill-formed.
2724     if (!DirectBaseSpec && !VirtualBaseSpec) {
2725       // If the class has any dependent bases, then it's possible that
2726       // one of those types will resolve to the same type as
2727       // BaseType. Therefore, just treat this as a dependent base
2728       // class initialization.  FIXME: Should we try to check the
2729       // initialization anyway? It seems odd.
2730       if (ClassDecl->hasAnyDependentBases())
2731         Dependent = true;
2732       else
2733         return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
2734           << BaseType << Context.getTypeDeclType(ClassDecl)
2735           << BaseTInfo->getTypeLoc().getLocalSourceRange();
2736     }
2737   }
2738 
2739   if (Dependent) {
2740     DiscardCleanupsInEvaluationContext();
2741 
2742     return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2743                                             /*IsVirtual=*/false,
2744                                             InitRange.getBegin(), Init,
2745                                             InitRange.getEnd(), EllipsisLoc);
2746   }
2747 
2748   // C++ [base.class.init]p2:
2749   //   If a mem-initializer-id is ambiguous because it designates both
2750   //   a direct non-virtual base class and an inherited virtual base
2751   //   class, the mem-initializer is ill-formed.
2752   if (DirectBaseSpec && VirtualBaseSpec)
2753     return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
2754       << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2755 
2756   const CXXBaseSpecifier *BaseSpec = DirectBaseSpec;
2757   if (!BaseSpec)
2758     BaseSpec = VirtualBaseSpec;
2759 
2760   // Initialize the base.
2761   bool InitList = true;
2762   MultiExprArg Args = Init;
2763   if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2764     InitList = false;
2765     Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2766   }
2767 
2768   InitializedEntity BaseEntity =
2769     InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
2770   InitializationKind Kind =
2771     InitList ? InitializationKind::CreateDirectList(BaseLoc)
2772              : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
2773                                                 InitRange.getEnd());
2774   InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
2775   ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, 0);
2776   if (BaseInit.isInvalid())
2777     return true;
2778 
2779   // C++11 [class.base.init]p7:
2780   //   The initialization of each base and member constitutes a
2781   //   full-expression.
2782   BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin());
2783   if (BaseInit.isInvalid())
2784     return true;
2785 
2786   // If we are in a dependent context, template instantiation will
2787   // perform this type-checking again. Just save the arguments that we
2788   // received in a ParenListExpr.
2789   // FIXME: This isn't quite ideal, since our ASTs don't capture all
2790   // of the information that we have about the base
2791   // initializer. However, deconstructing the ASTs is a dicey process,
2792   // and this approach is far more likely to get the corner cases right.
2793   if (CurContext->isDependentContext())
2794     BaseInit = Owned(Init);
2795 
2796   return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2797                                           BaseSpec->isVirtual(),
2798                                           InitRange.getBegin(),
2799                                           BaseInit.takeAs<Expr>(),
2800                                           InitRange.getEnd(), EllipsisLoc);
2801 }
2802 
2803 // Create a static_cast\<T&&>(expr).
CastForMoving(Sema & SemaRef,Expr * E,QualType T=QualType ())2804 static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) {
2805   if (T.isNull()) T = E->getType();
2806   QualType TargetType = SemaRef.BuildReferenceType(
2807       T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName());
2808   SourceLocation ExprLoc = E->getLocStart();
2809   TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
2810       TargetType, ExprLoc);
2811 
2812   return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
2813                                    SourceRange(ExprLoc, ExprLoc),
2814                                    E->getSourceRange()).take();
2815 }
2816 
2817 /// ImplicitInitializerKind - How an implicit base or member initializer should
2818 /// initialize its base or member.
2819 enum ImplicitInitializerKind {
2820   IIK_Default,
2821   IIK_Copy,
2822   IIK_Move,
2823   IIK_Inherit
2824 };
2825 
2826 static bool
BuildImplicitBaseInitializer(Sema & SemaRef,CXXConstructorDecl * Constructor,ImplicitInitializerKind ImplicitInitKind,CXXBaseSpecifier * BaseSpec,bool IsInheritedVirtualBase,CXXCtorInitializer * & CXXBaseInit)2827 BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2828                              ImplicitInitializerKind ImplicitInitKind,
2829                              CXXBaseSpecifier *BaseSpec,
2830                              bool IsInheritedVirtualBase,
2831                              CXXCtorInitializer *&CXXBaseInit) {
2832   InitializedEntity InitEntity
2833     = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
2834                                         IsInheritedVirtualBase);
2835 
2836   ExprResult BaseInit;
2837 
2838   switch (ImplicitInitKind) {
2839   case IIK_Inherit: {
2840     const CXXRecordDecl *Inherited =
2841         Constructor->getInheritedConstructor()->getParent();
2842     const CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
2843     if (Base && Inherited->getCanonicalDecl() == Base->getCanonicalDecl()) {
2844       // C++11 [class.inhctor]p8:
2845       //   Each expression in the expression-list is of the form
2846       //   static_cast<T&&>(p), where p is the name of the corresponding
2847       //   constructor parameter and T is the declared type of p.
2848       SmallVector<Expr*, 16> Args;
2849       for (unsigned I = 0, E = Constructor->getNumParams(); I != E; ++I) {
2850         ParmVarDecl *PD = Constructor->getParamDecl(I);
2851         ExprResult ArgExpr =
2852             SemaRef.BuildDeclRefExpr(PD, PD->getType().getNonReferenceType(),
2853                                      VK_LValue, SourceLocation());
2854         if (ArgExpr.isInvalid())
2855           return true;
2856         Args.push_back(CastForMoving(SemaRef, ArgExpr.take(), PD->getType()));
2857       }
2858 
2859       InitializationKind InitKind = InitializationKind::CreateDirect(
2860           Constructor->getLocation(), SourceLocation(), SourceLocation());
2861       InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, Args);
2862       BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, Args);
2863       break;
2864     }
2865   }
2866   // Fall through.
2867   case IIK_Default: {
2868     InitializationKind InitKind
2869       = InitializationKind::CreateDefault(Constructor->getLocation());
2870     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
2871     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
2872     break;
2873   }
2874 
2875   case IIK_Move:
2876   case IIK_Copy: {
2877     bool Moving = ImplicitInitKind == IIK_Move;
2878     ParmVarDecl *Param = Constructor->getParamDecl(0);
2879     QualType ParamType = Param->getType().getNonReferenceType();
2880 
2881     Expr *CopyCtorArg =
2882       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2883                           SourceLocation(), Param, false,
2884                           Constructor->getLocation(), ParamType,
2885                           VK_LValue, 0);
2886 
2887     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
2888 
2889     // Cast to the base class to avoid ambiguities.
2890     QualType ArgTy =
2891       SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
2892                                        ParamType.getQualifiers());
2893 
2894     if (Moving) {
2895       CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
2896     }
2897 
2898     CXXCastPath BasePath;
2899     BasePath.push_back(BaseSpec);
2900     CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
2901                                             CK_UncheckedDerivedToBase,
2902                                             Moving ? VK_XValue : VK_LValue,
2903                                             &BasePath).take();
2904 
2905     InitializationKind InitKind
2906       = InitializationKind::CreateDirect(Constructor->getLocation(),
2907                                          SourceLocation(), SourceLocation());
2908     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
2909     BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
2910     break;
2911   }
2912   }
2913 
2914   BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
2915   if (BaseInit.isInvalid())
2916     return true;
2917 
2918   CXXBaseInit =
2919     new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2920                SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
2921                                                         SourceLocation()),
2922                                              BaseSpec->isVirtual(),
2923                                              SourceLocation(),
2924                                              BaseInit.takeAs<Expr>(),
2925                                              SourceLocation(),
2926                                              SourceLocation());
2927 
2928   return false;
2929 }
2930 
RefersToRValueRef(Expr * MemRef)2931 static bool RefersToRValueRef(Expr *MemRef) {
2932   ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
2933   return Referenced->getType()->isRValueReferenceType();
2934 }
2935 
2936 static bool
BuildImplicitMemberInitializer(Sema & SemaRef,CXXConstructorDecl * Constructor,ImplicitInitializerKind ImplicitInitKind,FieldDecl * Field,IndirectFieldDecl * Indirect,CXXCtorInitializer * & CXXMemberInit)2937 BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2938                                ImplicitInitializerKind ImplicitInitKind,
2939                                FieldDecl *Field, IndirectFieldDecl *Indirect,
2940                                CXXCtorInitializer *&CXXMemberInit) {
2941   if (Field->isInvalidDecl())
2942     return true;
2943 
2944   SourceLocation Loc = Constructor->getLocation();
2945 
2946   if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
2947     bool Moving = ImplicitInitKind == IIK_Move;
2948     ParmVarDecl *Param = Constructor->getParamDecl(0);
2949     QualType ParamType = Param->getType().getNonReferenceType();
2950 
2951     // Suppress copying zero-width bitfields.
2952     if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
2953       return false;
2954 
2955     Expr *MemberExprBase =
2956       DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2957                           SourceLocation(), Param, false,
2958                           Loc, ParamType, VK_LValue, 0);
2959 
2960     SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
2961 
2962     if (Moving) {
2963       MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
2964     }
2965 
2966     // Build a reference to this field within the parameter.
2967     CXXScopeSpec SS;
2968     LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
2969                               Sema::LookupMemberName);
2970     MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
2971                                   : cast<ValueDecl>(Field), AS_public);
2972     MemberLookup.resolveKind();
2973     ExprResult CtorArg
2974       = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
2975                                          ParamType, Loc,
2976                                          /*IsArrow=*/false,
2977                                          SS,
2978                                          /*TemplateKWLoc=*/SourceLocation(),
2979                                          /*FirstQualifierInScope=*/0,
2980                                          MemberLookup,
2981                                          /*TemplateArgs=*/0);
2982     if (CtorArg.isInvalid())
2983       return true;
2984 
2985     // C++11 [class.copy]p15:
2986     //   - if a member m has rvalue reference type T&&, it is direct-initialized
2987     //     with static_cast<T&&>(x.m);
2988     if (RefersToRValueRef(CtorArg.get())) {
2989       CtorArg = CastForMoving(SemaRef, CtorArg.take());
2990     }
2991 
2992     // When the field we are copying is an array, create index variables for
2993     // each dimension of the array. We use these index variables to subscript
2994     // the source array, and other clients (e.g., CodeGen) will perform the
2995     // necessary iteration with these index variables.
2996     SmallVector<VarDecl *, 4> IndexVariables;
2997     QualType BaseType = Field->getType();
2998     QualType SizeType = SemaRef.Context.getSizeType();
2999     bool InitializingArray = false;
3000     while (const ConstantArrayType *Array
3001                           = SemaRef.Context.getAsConstantArrayType(BaseType)) {
3002       InitializingArray = true;
3003       // Create the iteration variable for this array index.
3004       IdentifierInfo *IterationVarName = 0;
3005       {
3006         SmallString<8> Str;
3007         llvm::raw_svector_ostream OS(Str);
3008         OS << "__i" << IndexVariables.size();
3009         IterationVarName = &SemaRef.Context.Idents.get(OS.str());
3010       }
3011       VarDecl *IterationVar
3012         = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
3013                           IterationVarName, SizeType,
3014                         SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
3015                           SC_None);
3016       IndexVariables.push_back(IterationVar);
3017 
3018       // Create a reference to the iteration variable.
3019       ExprResult IterationVarRef
3020         = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
3021       assert(!IterationVarRef.isInvalid() &&
3022              "Reference to invented variable cannot fail!");
3023       IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
3024       assert(!IterationVarRef.isInvalid() &&
3025              "Conversion of invented variable cannot fail!");
3026 
3027       // Subscript the array with this iteration variable.
3028       CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
3029                                                         IterationVarRef.take(),
3030                                                         Loc);
3031       if (CtorArg.isInvalid())
3032         return true;
3033 
3034       BaseType = Array->getElementType();
3035     }
3036 
3037     // The array subscript expression is an lvalue, which is wrong for moving.
3038     if (Moving && InitializingArray)
3039       CtorArg = CastForMoving(SemaRef, CtorArg.take());
3040 
3041     // Construct the entity that we will be initializing. For an array, this
3042     // will be first element in the array, which may require several levels
3043     // of array-subscript entities.
3044     SmallVector<InitializedEntity, 4> Entities;
3045     Entities.reserve(1 + IndexVariables.size());
3046     if (Indirect)
3047       Entities.push_back(InitializedEntity::InitializeMember(Indirect));
3048     else
3049       Entities.push_back(InitializedEntity::InitializeMember(Field));
3050     for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
3051       Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
3052                                                               0,
3053                                                               Entities.back()));
3054 
3055     // Direct-initialize to use the copy constructor.
3056     InitializationKind InitKind =
3057       InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
3058 
3059     Expr *CtorArgE = CtorArg.takeAs<Expr>();
3060     InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind, CtorArgE);
3061 
3062     ExprResult MemberInit
3063       = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
3064                         MultiExprArg(&CtorArgE, 1));
3065     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3066     if (MemberInit.isInvalid())
3067       return true;
3068 
3069     if (Indirect) {
3070       assert(IndexVariables.size() == 0 &&
3071              "Indirect field improperly initialized");
3072       CXXMemberInit
3073         = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3074                                                    Loc, Loc,
3075                                                    MemberInit.takeAs<Expr>(),
3076                                                    Loc);
3077     } else
3078       CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
3079                                                  Loc, MemberInit.takeAs<Expr>(),
3080                                                  Loc,
3081                                                  IndexVariables.data(),
3082                                                  IndexVariables.size());
3083     return false;
3084   }
3085 
3086   assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
3087          "Unhandled implicit init kind!");
3088 
3089   QualType FieldBaseElementType =
3090     SemaRef.Context.getBaseElementType(Field->getType());
3091 
3092   if (FieldBaseElementType->isRecordType()) {
3093     InitializedEntity InitEntity
3094       = Indirect? InitializedEntity::InitializeMember(Indirect)
3095                 : InitializedEntity::InitializeMember(Field);
3096     InitializationKind InitKind =
3097       InitializationKind::CreateDefault(Loc);
3098 
3099     InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
3100     ExprResult MemberInit =
3101       InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
3102 
3103     MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3104     if (MemberInit.isInvalid())
3105       return true;
3106 
3107     if (Indirect)
3108       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3109                                                                Indirect, Loc,
3110                                                                Loc,
3111                                                                MemberInit.get(),
3112                                                                Loc);
3113     else
3114       CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3115                                                                Field, Loc, Loc,
3116                                                                MemberInit.get(),
3117                                                                Loc);
3118     return false;
3119   }
3120 
3121   if (!Field->getParent()->isUnion()) {
3122     if (FieldBaseElementType->isReferenceType()) {
3123       SemaRef.Diag(Constructor->getLocation(),
3124                    diag::err_uninitialized_member_in_ctor)
3125       << (int)Constructor->isImplicit()
3126       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3127       << 0 << Field->getDeclName();
3128       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3129       return true;
3130     }
3131 
3132     if (FieldBaseElementType.isConstQualified()) {
3133       SemaRef.Diag(Constructor->getLocation(),
3134                    diag::err_uninitialized_member_in_ctor)
3135       << (int)Constructor->isImplicit()
3136       << SemaRef.Context.getTagDeclType(Constructor->getParent())
3137       << 1 << Field->getDeclName();
3138       SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3139       return true;
3140     }
3141   }
3142 
3143   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
3144       FieldBaseElementType->isObjCRetainableType() &&
3145       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
3146       FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
3147     // ARC:
3148     //   Default-initialize Objective-C pointers to NULL.
3149     CXXMemberInit
3150       = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3151                                                  Loc, Loc,
3152                  new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
3153                                                  Loc);
3154     return false;
3155   }
3156 
3157   // Nothing to initialize.
3158   CXXMemberInit = 0;
3159   return false;
3160 }
3161 
3162 namespace {
3163 struct BaseAndFieldInfo {
3164   Sema &S;
3165   CXXConstructorDecl *Ctor;
3166   bool AnyErrorsInInits;
3167   ImplicitInitializerKind IIK;
3168   llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
3169   SmallVector<CXXCtorInitializer*, 8> AllToInit;
3170 
BaseAndFieldInfo__anon7fa201ac0411::BaseAndFieldInfo3171   BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
3172     : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
3173     bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
3174     if (Generated && Ctor->isCopyConstructor())
3175       IIK = IIK_Copy;
3176     else if (Generated && Ctor->isMoveConstructor())
3177       IIK = IIK_Move;
3178     else if (Ctor->getInheritedConstructor())
3179       IIK = IIK_Inherit;
3180     else
3181       IIK = IIK_Default;
3182   }
3183 
isImplicitCopyOrMove__anon7fa201ac0411::BaseAndFieldInfo3184   bool isImplicitCopyOrMove() const {
3185     switch (IIK) {
3186     case IIK_Copy:
3187     case IIK_Move:
3188       return true;
3189 
3190     case IIK_Default:
3191     case IIK_Inherit:
3192       return false;
3193     }
3194 
3195     llvm_unreachable("Invalid ImplicitInitializerKind!");
3196   }
3197 
addFieldInitializer__anon7fa201ac0411::BaseAndFieldInfo3198   bool addFieldInitializer(CXXCtorInitializer *Init) {
3199     AllToInit.push_back(Init);
3200 
3201     // Check whether this initializer makes the field "used".
3202     if (Init->getInit()->HasSideEffects(S.Context))
3203       S.UnusedPrivateFields.remove(Init->getAnyMember());
3204 
3205     return false;
3206   }
3207 };
3208 }
3209 
3210 /// \brief Determine whether the given indirect field declaration is somewhere
3211 /// within an anonymous union.
isWithinAnonymousUnion(IndirectFieldDecl * F)3212 static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
3213   for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
3214                                       CEnd = F->chain_end();
3215        C != CEnd; ++C)
3216     if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
3217       if (Record->isUnion())
3218         return true;
3219 
3220   return false;
3221 }
3222 
3223 /// \brief Determine whether the given type is an incomplete or zero-lenfgth
3224 /// array type.
isIncompleteOrZeroLengthArrayType(ASTContext & Context,QualType T)3225 static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
3226   if (T->isIncompleteArrayType())
3227     return true;
3228 
3229   while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
3230     if (!ArrayT->getSize())
3231       return true;
3232 
3233     T = ArrayT->getElementType();
3234   }
3235 
3236   return false;
3237 }
3238 
CollectFieldInitializer(Sema & SemaRef,BaseAndFieldInfo & Info,FieldDecl * Field,IndirectFieldDecl * Indirect=0)3239 static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
3240                                     FieldDecl *Field,
3241                                     IndirectFieldDecl *Indirect = 0) {
3242   if (Field->isInvalidDecl())
3243     return false;
3244 
3245   // Overwhelmingly common case: we have a direct initializer for this field.
3246   if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
3247     return Info.addFieldInitializer(Init);
3248 
3249   // C++11 [class.base.init]p8: if the entity is a non-static data member that
3250   // has a brace-or-equal-initializer, the entity is initialized as specified
3251   // in [dcl.init].
3252   if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
3253     Expr *DIE = CXXDefaultInitExpr::Create(SemaRef.Context,
3254                                            Info.Ctor->getLocation(), Field);
3255     CXXCtorInitializer *Init;
3256     if (Indirect)
3257       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3258                                                       SourceLocation(),
3259                                                       SourceLocation(), DIE,
3260                                                       SourceLocation());
3261     else
3262       Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3263                                                       SourceLocation(),
3264                                                       SourceLocation(), DIE,
3265                                                       SourceLocation());
3266     return Info.addFieldInitializer(Init);
3267   }
3268 
3269   // Don't build an implicit initializer for union members if none was
3270   // explicitly specified.
3271   if (Field->getParent()->isUnion() ||
3272       (Indirect && isWithinAnonymousUnion(Indirect)))
3273     return false;
3274 
3275   // Don't initialize incomplete or zero-length arrays.
3276   if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
3277     return false;
3278 
3279   // Don't try to build an implicit initializer if there were semantic
3280   // errors in any of the initializers (and therefore we might be
3281   // missing some that the user actually wrote).
3282   if (Info.AnyErrorsInInits)
3283     return false;
3284 
3285   CXXCtorInitializer *Init = 0;
3286   if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
3287                                      Indirect, Init))
3288     return true;
3289 
3290   if (!Init)
3291     return false;
3292 
3293   return Info.addFieldInitializer(Init);
3294 }
3295 
3296 bool
SetDelegatingInitializer(CXXConstructorDecl * Constructor,CXXCtorInitializer * Initializer)3297 Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
3298                                CXXCtorInitializer *Initializer) {
3299   assert(Initializer->isDelegatingInitializer());
3300   Constructor->setNumCtorInitializers(1);
3301   CXXCtorInitializer **initializer =
3302     new (Context) CXXCtorInitializer*[1];
3303   memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
3304   Constructor->setCtorInitializers(initializer);
3305 
3306   if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
3307     MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
3308     DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
3309   }
3310 
3311   DelegatingCtorDecls.push_back(Constructor);
3312 
3313   return false;
3314 }
3315 
SetCtorInitializers(CXXConstructorDecl * Constructor,bool AnyErrors,ArrayRef<CXXCtorInitializer * > Initializers)3316 bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
3317                                ArrayRef<CXXCtorInitializer *> Initializers) {
3318   if (Constructor->isDependentContext()) {
3319     // Just store the initializers as written, they will be checked during
3320     // instantiation.
3321     if (!Initializers.empty()) {
3322       Constructor->setNumCtorInitializers(Initializers.size());
3323       CXXCtorInitializer **baseOrMemberInitializers =
3324         new (Context) CXXCtorInitializer*[Initializers.size()];
3325       memcpy(baseOrMemberInitializers, Initializers.data(),
3326              Initializers.size() * sizeof(CXXCtorInitializer*));
3327       Constructor->setCtorInitializers(baseOrMemberInitializers);
3328     }
3329 
3330     // Let template instantiation know whether we had errors.
3331     if (AnyErrors)
3332       Constructor->setInvalidDecl();
3333 
3334     return false;
3335   }
3336 
3337   BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
3338 
3339   // We need to build the initializer AST according to order of construction
3340   // and not what user specified in the Initializers list.
3341   CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
3342   if (!ClassDecl)
3343     return true;
3344 
3345   bool HadError = false;
3346 
3347   for (unsigned i = 0; i < Initializers.size(); i++) {
3348     CXXCtorInitializer *Member = Initializers[i];
3349 
3350     if (Member->isBaseInitializer())
3351       Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
3352     else
3353       Info.AllBaseFields[Member->getAnyMember()] = Member;
3354   }
3355 
3356   // Keep track of the direct virtual bases.
3357   llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
3358   for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
3359        E = ClassDecl->bases_end(); I != E; ++I) {
3360     if (I->isVirtual())
3361       DirectVBases.insert(I);
3362   }
3363 
3364   // Push virtual bases before others.
3365   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3366        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3367 
3368     if (CXXCtorInitializer *Value
3369         = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
3370       // [class.base.init]p7, per DR257:
3371       //   A mem-initializer where the mem-initializer-id names a virtual base
3372       //   class is ignored during execution of a constructor of any class that
3373       //   is not the most derived class.
3374       if (ClassDecl->isAbstract()) {
3375         // FIXME: Provide a fixit to remove the base specifier. This requires
3376         // tracking the location of the associated comma for a base specifier.
3377         Diag(Value->getSourceLocation(), diag::warn_abstract_vbase_init_ignored)
3378           << VBase->getType() << ClassDecl;
3379         DiagnoseAbstractType(ClassDecl);
3380       }
3381 
3382       Info.AllToInit.push_back(Value);
3383     } else if (!AnyErrors && !ClassDecl->isAbstract()) {
3384       // [class.base.init]p8, per DR257:
3385       //   If a given [...] base class is not named by a mem-initializer-id
3386       //   [...] and the entity is not a virtual base class of an abstract
3387       //   class, then [...] the entity is default-initialized.
3388       bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
3389       CXXCtorInitializer *CXXBaseInit;
3390       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3391                                        VBase, IsInheritedVirtualBase,
3392                                        CXXBaseInit)) {
3393         HadError = true;
3394         continue;
3395       }
3396 
3397       Info.AllToInit.push_back(CXXBaseInit);
3398     }
3399   }
3400 
3401   // Non-virtual bases.
3402   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3403        E = ClassDecl->bases_end(); Base != E; ++Base) {
3404     // Virtuals are in the virtual base list and already constructed.
3405     if (Base->isVirtual())
3406       continue;
3407 
3408     if (CXXCtorInitializer *Value
3409           = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
3410       Info.AllToInit.push_back(Value);
3411     } else if (!AnyErrors) {
3412       CXXCtorInitializer *CXXBaseInit;
3413       if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3414                                        Base, /*IsInheritedVirtualBase=*/false,
3415                                        CXXBaseInit)) {
3416         HadError = true;
3417         continue;
3418       }
3419 
3420       Info.AllToInit.push_back(CXXBaseInit);
3421     }
3422   }
3423 
3424   // Fields.
3425   for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3426                                MemEnd = ClassDecl->decls_end();
3427        Mem != MemEnd; ++Mem) {
3428     if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
3429       // C++ [class.bit]p2:
3430       //   A declaration for a bit-field that omits the identifier declares an
3431       //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
3432       //   initialized.
3433       if (F->isUnnamedBitfield())
3434         continue;
3435 
3436       // If we're not generating the implicit copy/move constructor, then we'll
3437       // handle anonymous struct/union fields based on their individual
3438       // indirect fields.
3439       if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
3440         continue;
3441 
3442       if (CollectFieldInitializer(*this, Info, F))
3443         HadError = true;
3444       continue;
3445     }
3446 
3447     // Beyond this point, we only consider default initialization.
3448     if (Info.isImplicitCopyOrMove())
3449       continue;
3450 
3451     if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
3452       if (F->getType()->isIncompleteArrayType()) {
3453         assert(ClassDecl->hasFlexibleArrayMember() &&
3454                "Incomplete array type is not valid");
3455         continue;
3456       }
3457 
3458       // Initialize each field of an anonymous struct individually.
3459       if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
3460         HadError = true;
3461 
3462       continue;
3463     }
3464   }
3465 
3466   unsigned NumInitializers = Info.AllToInit.size();
3467   if (NumInitializers > 0) {
3468     Constructor->setNumCtorInitializers(NumInitializers);
3469     CXXCtorInitializer **baseOrMemberInitializers =
3470       new (Context) CXXCtorInitializer*[NumInitializers];
3471     memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
3472            NumInitializers * sizeof(CXXCtorInitializer*));
3473     Constructor->setCtorInitializers(baseOrMemberInitializers);
3474 
3475     // Constructors implicitly reference the base and member
3476     // destructors.
3477     MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
3478                                            Constructor->getParent());
3479   }
3480 
3481   return HadError;
3482 }
3483 
PopulateKeysForFields(FieldDecl * Field,SmallVectorImpl<const void * > & IdealInits)3484 static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
3485   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
3486     const RecordDecl *RD = RT->getDecl();
3487     if (RD->isAnonymousStructOrUnion()) {
3488       for (RecordDecl::field_iterator Field = RD->field_begin(),
3489           E = RD->field_end(); Field != E; ++Field)
3490         PopulateKeysForFields(*Field, IdealInits);
3491       return;
3492     }
3493   }
3494   IdealInits.push_back(Field);
3495 }
3496 
GetKeyForBase(ASTContext & Context,QualType BaseType)3497 static const void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
3498   return Context.getCanonicalType(BaseType).getTypePtr();
3499 }
3500 
GetKeyForMember(ASTContext & Context,CXXCtorInitializer * Member)3501 static const void *GetKeyForMember(ASTContext &Context,
3502                                    CXXCtorInitializer *Member) {
3503   if (!Member->isAnyMemberInitializer())
3504     return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
3505 
3506   return Member->getAnyMember();
3507 }
3508 
DiagnoseBaseOrMemInitializerOrder(Sema & SemaRef,const CXXConstructorDecl * Constructor,ArrayRef<CXXCtorInitializer * > Inits)3509 static void DiagnoseBaseOrMemInitializerOrder(
3510     Sema &SemaRef, const CXXConstructorDecl *Constructor,
3511     ArrayRef<CXXCtorInitializer *> Inits) {
3512   if (Constructor->getDeclContext()->isDependentContext())
3513     return;
3514 
3515   // Don't check initializers order unless the warning is enabled at the
3516   // location of at least one initializer.
3517   bool ShouldCheckOrder = false;
3518   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3519     CXXCtorInitializer *Init = Inits[InitIndex];
3520     if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
3521                                          Init->getSourceLocation())
3522           != DiagnosticsEngine::Ignored) {
3523       ShouldCheckOrder = true;
3524       break;
3525     }
3526   }
3527   if (!ShouldCheckOrder)
3528     return;
3529 
3530   // Build the list of bases and members in the order that they'll
3531   // actually be initialized.  The explicit initializers should be in
3532   // this same order but may be missing things.
3533   SmallVector<const void*, 32> IdealInitKeys;
3534 
3535   const CXXRecordDecl *ClassDecl = Constructor->getParent();
3536 
3537   // 1. Virtual bases.
3538   for (CXXRecordDecl::base_class_const_iterator VBase =
3539        ClassDecl->vbases_begin(),
3540        E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3541     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
3542 
3543   // 2. Non-virtual bases.
3544   for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3545        E = ClassDecl->bases_end(); Base != E; ++Base) {
3546     if (Base->isVirtual())
3547       continue;
3548     IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
3549   }
3550 
3551   // 3. Direct fields.
3552   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3553        E = ClassDecl->field_end(); Field != E; ++Field) {
3554     if (Field->isUnnamedBitfield())
3555       continue;
3556 
3557     PopulateKeysForFields(*Field, IdealInitKeys);
3558   }
3559 
3560   unsigned NumIdealInits = IdealInitKeys.size();
3561   unsigned IdealIndex = 0;
3562 
3563   CXXCtorInitializer *PrevInit = 0;
3564   for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3565     CXXCtorInitializer *Init = Inits[InitIndex];
3566     const void *InitKey = GetKeyForMember(SemaRef.Context, Init);
3567 
3568     // Scan forward to try to find this initializer in the idealized
3569     // initializers list.
3570     for (; IdealIndex != NumIdealInits; ++IdealIndex)
3571       if (InitKey == IdealInitKeys[IdealIndex])
3572         break;
3573 
3574     // If we didn't find this initializer, it must be because we
3575     // scanned past it on a previous iteration.  That can only
3576     // happen if we're out of order;  emit a warning.
3577     if (IdealIndex == NumIdealInits && PrevInit) {
3578       Sema::SemaDiagnosticBuilder D =
3579         SemaRef.Diag(PrevInit->getSourceLocation(),
3580                      diag::warn_initializer_out_of_order);
3581 
3582       if (PrevInit->isAnyMemberInitializer())
3583         D << 0 << PrevInit->getAnyMember()->getDeclName();
3584       else
3585         D << 1 << PrevInit->getTypeSourceInfo()->getType();
3586 
3587       if (Init->isAnyMemberInitializer())
3588         D << 0 << Init->getAnyMember()->getDeclName();
3589       else
3590         D << 1 << Init->getTypeSourceInfo()->getType();
3591 
3592       // Move back to the initializer's location in the ideal list.
3593       for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
3594         if (InitKey == IdealInitKeys[IdealIndex])
3595           break;
3596 
3597       assert(IdealIndex != NumIdealInits &&
3598              "initializer not found in initializer list");
3599     }
3600 
3601     PrevInit = Init;
3602   }
3603 }
3604 
3605 namespace {
CheckRedundantInit(Sema & S,CXXCtorInitializer * Init,CXXCtorInitializer * & PrevInit)3606 bool CheckRedundantInit(Sema &S,
3607                         CXXCtorInitializer *Init,
3608                         CXXCtorInitializer *&PrevInit) {
3609   if (!PrevInit) {
3610     PrevInit = Init;
3611     return false;
3612   }
3613 
3614   if (FieldDecl *Field = Init->getAnyMember())
3615     S.Diag(Init->getSourceLocation(),
3616            diag::err_multiple_mem_initialization)
3617       << Field->getDeclName()
3618       << Init->getSourceRange();
3619   else {
3620     const Type *BaseClass = Init->getBaseClass();
3621     assert(BaseClass && "neither field nor base");
3622     S.Diag(Init->getSourceLocation(),
3623            diag::err_multiple_base_initialization)
3624       << QualType(BaseClass, 0)
3625       << Init->getSourceRange();
3626   }
3627   S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
3628     << 0 << PrevInit->getSourceRange();
3629 
3630   return true;
3631 }
3632 
3633 typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
3634 typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
3635 
CheckRedundantUnionInit(Sema & S,CXXCtorInitializer * Init,RedundantUnionMap & Unions)3636 bool CheckRedundantUnionInit(Sema &S,
3637                              CXXCtorInitializer *Init,
3638                              RedundantUnionMap &Unions) {
3639   FieldDecl *Field = Init->getAnyMember();
3640   RecordDecl *Parent = Field->getParent();
3641   NamedDecl *Child = Field;
3642 
3643   while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
3644     if (Parent->isUnion()) {
3645       UnionEntry &En = Unions[Parent];
3646       if (En.first && En.first != Child) {
3647         S.Diag(Init->getSourceLocation(),
3648                diag::err_multiple_mem_union_initialization)
3649           << Field->getDeclName()
3650           << Init->getSourceRange();
3651         S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
3652           << 0 << En.second->getSourceRange();
3653         return true;
3654       }
3655       if (!En.first) {
3656         En.first = Child;
3657         En.second = Init;
3658       }
3659       if (!Parent->isAnonymousStructOrUnion())
3660         return false;
3661     }
3662 
3663     Child = Parent;
3664     Parent = cast<RecordDecl>(Parent->getDeclContext());
3665   }
3666 
3667   return false;
3668 }
3669 }
3670 
3671 /// ActOnMemInitializers - Handle the member initializers for a constructor.
ActOnMemInitializers(Decl * ConstructorDecl,SourceLocation ColonLoc,ArrayRef<CXXCtorInitializer * > MemInits,bool AnyErrors)3672 void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
3673                                 SourceLocation ColonLoc,
3674                                 ArrayRef<CXXCtorInitializer*> MemInits,
3675                                 bool AnyErrors) {
3676   if (!ConstructorDecl)
3677     return;
3678 
3679   AdjustDeclIfTemplate(ConstructorDecl);
3680 
3681   CXXConstructorDecl *Constructor
3682     = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
3683 
3684   if (!Constructor) {
3685     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
3686     return;
3687   }
3688 
3689   // Mapping for the duplicate initializers check.
3690   // For member initializers, this is keyed with a FieldDecl*.
3691   // For base initializers, this is keyed with a Type*.
3692   llvm::DenseMap<const void *, CXXCtorInitializer *> Members;
3693 
3694   // Mapping for the inconsistent anonymous-union initializers check.
3695   RedundantUnionMap MemberUnions;
3696 
3697   bool HadError = false;
3698   for (unsigned i = 0; i < MemInits.size(); i++) {
3699     CXXCtorInitializer *Init = MemInits[i];
3700 
3701     // Set the source order index.
3702     Init->setSourceOrder(i);
3703 
3704     if (Init->isAnyMemberInitializer()) {
3705       FieldDecl *Field = Init->getAnyMember();
3706       if (CheckRedundantInit(*this, Init, Members[Field]) ||
3707           CheckRedundantUnionInit(*this, Init, MemberUnions))
3708         HadError = true;
3709     } else if (Init->isBaseInitializer()) {
3710       const void *Key =
3711           GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
3712       if (CheckRedundantInit(*this, Init, Members[Key]))
3713         HadError = true;
3714     } else {
3715       assert(Init->isDelegatingInitializer());
3716       // This must be the only initializer
3717       if (MemInits.size() != 1) {
3718         Diag(Init->getSourceLocation(),
3719              diag::err_delegating_initializer_alone)
3720           << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
3721         // We will treat this as being the only initializer.
3722       }
3723       SetDelegatingInitializer(Constructor, MemInits[i]);
3724       // Return immediately as the initializer is set.
3725       return;
3726     }
3727   }
3728 
3729   if (HadError)
3730     return;
3731 
3732   DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
3733 
3734   SetCtorInitializers(Constructor, AnyErrors, MemInits);
3735 }
3736 
3737 void
MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,CXXRecordDecl * ClassDecl)3738 Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
3739                                              CXXRecordDecl *ClassDecl) {
3740   // Ignore dependent contexts. Also ignore unions, since their members never
3741   // have destructors implicitly called.
3742   if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3743     return;
3744 
3745   // FIXME: all the access-control diagnostics are positioned on the
3746   // field/base declaration.  That's probably good; that said, the
3747   // user might reasonably want to know why the destructor is being
3748   // emitted, and we currently don't say.
3749 
3750   // Non-static data members.
3751   for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3752        E = ClassDecl->field_end(); I != E; ++I) {
3753     FieldDecl *Field = *I;
3754     if (Field->isInvalidDecl())
3755       continue;
3756 
3757     // Don't destroy incomplete or zero-length arrays.
3758     if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
3759       continue;
3760 
3761     QualType FieldType = Context.getBaseElementType(Field->getType());
3762 
3763     const RecordType* RT = FieldType->getAs<RecordType>();
3764     if (!RT)
3765       continue;
3766 
3767     CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3768     if (FieldClassDecl->isInvalidDecl())
3769       continue;
3770     if (FieldClassDecl->hasIrrelevantDestructor())
3771       continue;
3772     // The destructor for an implicit anonymous union member is never invoked.
3773     if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
3774       continue;
3775 
3776     CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
3777     assert(Dtor && "No dtor found for FieldClassDecl!");
3778     CheckDestructorAccess(Field->getLocation(), Dtor,
3779                           PDiag(diag::err_access_dtor_field)
3780                             << Field->getDeclName()
3781                             << FieldType);
3782 
3783     MarkFunctionReferenced(Location, Dtor);
3784     DiagnoseUseOfDecl(Dtor, Location);
3785   }
3786 
3787   llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
3788 
3789   // Bases.
3790   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3791        E = ClassDecl->bases_end(); Base != E; ++Base) {
3792     // Bases are always records in a well-formed non-dependent class.
3793     const RecordType *RT = Base->getType()->getAs<RecordType>();
3794 
3795     // Remember direct virtual bases.
3796     if (Base->isVirtual())
3797       DirectVirtualBases.insert(RT);
3798 
3799     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3800     // If our base class is invalid, we probably can't get its dtor anyway.
3801     if (BaseClassDecl->isInvalidDecl())
3802       continue;
3803     if (BaseClassDecl->hasIrrelevantDestructor())
3804       continue;
3805 
3806     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3807     assert(Dtor && "No dtor found for BaseClassDecl!");
3808 
3809     // FIXME: caret should be on the start of the class name
3810     CheckDestructorAccess(Base->getLocStart(), Dtor,
3811                           PDiag(diag::err_access_dtor_base)
3812                             << Base->getType()
3813                             << Base->getSourceRange(),
3814                           Context.getTypeDeclType(ClassDecl));
3815 
3816     MarkFunctionReferenced(Location, Dtor);
3817     DiagnoseUseOfDecl(Dtor, Location);
3818   }
3819 
3820   // Virtual bases.
3821   for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3822        E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3823 
3824     // Bases are always records in a well-formed non-dependent class.
3825     const RecordType *RT = VBase->getType()->castAs<RecordType>();
3826 
3827     // Ignore direct virtual bases.
3828     if (DirectVirtualBases.count(RT))
3829       continue;
3830 
3831     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3832     // If our base class is invalid, we probably can't get its dtor anyway.
3833     if (BaseClassDecl->isInvalidDecl())
3834       continue;
3835     if (BaseClassDecl->hasIrrelevantDestructor())
3836       continue;
3837 
3838     CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3839     assert(Dtor && "No dtor found for BaseClassDecl!");
3840     if (CheckDestructorAccess(
3841             ClassDecl->getLocation(), Dtor,
3842             PDiag(diag::err_access_dtor_vbase)
3843                 << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
3844             Context.getTypeDeclType(ClassDecl)) ==
3845         AR_accessible) {
3846       CheckDerivedToBaseConversion(
3847           Context.getTypeDeclType(ClassDecl), VBase->getType(),
3848           diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
3849           SourceRange(), DeclarationName(), 0);
3850     }
3851 
3852     MarkFunctionReferenced(Location, Dtor);
3853     DiagnoseUseOfDecl(Dtor, Location);
3854   }
3855 }
3856 
ActOnDefaultCtorInitializers(Decl * CDtorDecl)3857 void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
3858   if (!CDtorDecl)
3859     return;
3860 
3861   if (CXXConstructorDecl *Constructor
3862       = dyn_cast<CXXConstructorDecl>(CDtorDecl))
3863     SetCtorInitializers(Constructor, /*AnyErrors=*/false);
3864 }
3865 
RequireNonAbstractType(SourceLocation Loc,QualType T,unsigned DiagID,AbstractDiagSelID SelID)3866 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3867                                   unsigned DiagID, AbstractDiagSelID SelID) {
3868   class NonAbstractTypeDiagnoser : public TypeDiagnoser {
3869     unsigned DiagID;
3870     AbstractDiagSelID SelID;
3871 
3872   public:
3873     NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
3874       : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
3875 
3876     void diagnose(Sema &S, SourceLocation Loc, QualType T) LLVM_OVERRIDE {
3877       if (Suppressed) return;
3878       if (SelID == -1)
3879         S.Diag(Loc, DiagID) << T;
3880       else
3881         S.Diag(Loc, DiagID) << SelID << T;
3882     }
3883   } Diagnoser(DiagID, SelID);
3884 
3885   return RequireNonAbstractType(Loc, T, Diagnoser);
3886 }
3887 
RequireNonAbstractType(SourceLocation Loc,QualType T,TypeDiagnoser & Diagnoser)3888 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3889                                   TypeDiagnoser &Diagnoser) {
3890   if (!getLangOpts().CPlusPlus)
3891     return false;
3892 
3893   if (const ArrayType *AT = Context.getAsArrayType(T))
3894     return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3895 
3896   if (const PointerType *PT = T->getAs<PointerType>()) {
3897     // Find the innermost pointer type.
3898     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
3899       PT = T;
3900 
3901     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
3902       return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3903   }
3904 
3905   const RecordType *RT = T->getAs<RecordType>();
3906   if (!RT)
3907     return false;
3908 
3909   const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3910 
3911   // We can't answer whether something is abstract until it has a
3912   // definition.  If it's currently being defined, we'll walk back
3913   // over all the declarations when we have a full definition.
3914   const CXXRecordDecl *Def = RD->getDefinition();
3915   if (!Def || Def->isBeingDefined())
3916     return false;
3917 
3918   if (!RD->isAbstract())
3919     return false;
3920 
3921   Diagnoser.diagnose(*this, Loc, T);
3922   DiagnoseAbstractType(RD);
3923 
3924   return true;
3925 }
3926 
DiagnoseAbstractType(const CXXRecordDecl * RD)3927 void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
3928   // Check if we've already emitted the list of pure virtual functions
3929   // for this class.
3930   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
3931     return;
3932 
3933   // If the diagnostic is suppressed, don't emit the notes. We're only
3934   // going to emit them once, so try to attach them to a diagnostic we're
3935   // actually going to show.
3936   if (Diags.isLastDiagnosticIgnored())
3937     return;
3938 
3939   CXXFinalOverriderMap FinalOverriders;
3940   RD->getFinalOverriders(FinalOverriders);
3941 
3942   // Keep a set of seen pure methods so we won't diagnose the same method
3943   // more than once.
3944   llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
3945 
3946   for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
3947                                    MEnd = FinalOverriders.end();
3948        M != MEnd;
3949        ++M) {
3950     for (OverridingMethods::iterator SO = M->second.begin(),
3951                                   SOEnd = M->second.end();
3952          SO != SOEnd; ++SO) {
3953       // C++ [class.abstract]p4:
3954       //   A class is abstract if it contains or inherits at least one
3955       //   pure virtual function for which the final overrider is pure
3956       //   virtual.
3957 
3958       //
3959       if (SO->second.size() != 1)
3960         continue;
3961 
3962       if (!SO->second.front().Method->isPure())
3963         continue;
3964 
3965       if (!SeenPureMethods.insert(SO->second.front().Method))
3966         continue;
3967 
3968       Diag(SO->second.front().Method->getLocation(),
3969            diag::note_pure_virtual_function)
3970         << SO->second.front().Method->getDeclName() << RD->getDeclName();
3971     }
3972   }
3973 
3974   if (!PureVirtualClassDiagSet)
3975     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
3976   PureVirtualClassDiagSet->insert(RD);
3977 }
3978 
3979 namespace {
3980 struct AbstractUsageInfo {
3981   Sema &S;
3982   CXXRecordDecl *Record;
3983   CanQualType AbstractType;
3984   bool Invalid;
3985 
AbstractUsageInfo__anon7fa201ac0611::AbstractUsageInfo3986   AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
3987     : S(S), Record(Record),
3988       AbstractType(S.Context.getCanonicalType(
3989                    S.Context.getTypeDeclType(Record))),
3990       Invalid(false) {}
3991 
DiagnoseAbstractType__anon7fa201ac0611::AbstractUsageInfo3992   void DiagnoseAbstractType() {
3993     if (Invalid) return;
3994     S.DiagnoseAbstractType(Record);
3995     Invalid = true;
3996   }
3997 
3998   void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
3999 };
4000 
4001 struct CheckAbstractUsage {
4002   AbstractUsageInfo &Info;
4003   const NamedDecl *Ctx;
4004 
CheckAbstractUsage__anon7fa201ac0611::CheckAbstractUsage4005   CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
4006     : Info(Info), Ctx(Ctx) {}
4007 
Visit__anon7fa201ac0611::CheckAbstractUsage4008   void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4009     switch (TL.getTypeLocClass()) {
4010 #define ABSTRACT_TYPELOC(CLASS, PARENT)
4011 #define TYPELOC(CLASS, PARENT) \
4012     case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
4013 #include "clang/AST/TypeLocNodes.def"
4014     }
4015   }
4016 
Check__anon7fa201ac0611::CheckAbstractUsage4017   void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4018     Visit(TL.getResultLoc(), Sema::AbstractReturnType);
4019     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
4020       if (!TL.getArg(I))
4021         continue;
4022 
4023       TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
4024       if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
4025     }
4026   }
4027 
Check__anon7fa201ac0611::CheckAbstractUsage4028   void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4029     Visit(TL.getElementLoc(), Sema::AbstractArrayType);
4030   }
4031 
Check__anon7fa201ac0611::CheckAbstractUsage4032   void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
4033     // Visit the type parameters from a permissive context.
4034     for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
4035       TemplateArgumentLoc TAL = TL.getArgLoc(I);
4036       if (TAL.getArgument().getKind() == TemplateArgument::Type)
4037         if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
4038           Visit(TSI->getTypeLoc(), Sema::AbstractNone);
4039       // TODO: other template argument types?
4040     }
4041   }
4042 
4043   // Visit pointee types from a permissive context.
4044 #define CheckPolymorphic(Type) \
4045   void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
4046     Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
4047   }
4048   CheckPolymorphic(PointerTypeLoc)
CheckPolymorphic__anon7fa201ac0611::CheckAbstractUsage4049   CheckPolymorphic(ReferenceTypeLoc)
4050   CheckPolymorphic(MemberPointerTypeLoc)
4051   CheckPolymorphic(BlockPointerTypeLoc)
4052   CheckPolymorphic(AtomicTypeLoc)
4053 
4054   /// Handle all the types we haven't given a more specific
4055   /// implementation for above.
4056   void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4057     // Every other kind of type that we haven't called out already
4058     // that has an inner type is either (1) sugar or (2) contains that
4059     // inner type in some way as a subobject.
4060     if (TypeLoc Next = TL.getNextTypeLoc())
4061       return Visit(Next, Sel);
4062 
4063     // If there's no inner type and we're in a permissive context,
4064     // don't diagnose.
4065     if (Sel == Sema::AbstractNone) return;
4066 
4067     // Check whether the type matches the abstract type.
4068     QualType T = TL.getType();
4069     if (T->isArrayType()) {
4070       Sel = Sema::AbstractArrayType;
4071       T = Info.S.Context.getBaseElementType(T);
4072     }
4073     CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
4074     if (CT != Info.AbstractType) return;
4075 
4076     // It matched; do some magic.
4077     if (Sel == Sema::AbstractArrayType) {
4078       Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
4079         << T << TL.getSourceRange();
4080     } else {
4081       Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
4082         << Sel << T << TL.getSourceRange();
4083     }
4084     Info.DiagnoseAbstractType();
4085   }
4086 };
4087 
CheckType(const NamedDecl * D,TypeLoc TL,Sema::AbstractDiagSelID Sel)4088 void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
4089                                   Sema::AbstractDiagSelID Sel) {
4090   CheckAbstractUsage(*this, D).Visit(TL, Sel);
4091 }
4092 
4093 }
4094 
4095 /// Check for invalid uses of an abstract type in a method declaration.
CheckAbstractClassUsage(AbstractUsageInfo & Info,CXXMethodDecl * MD)4096 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4097                                     CXXMethodDecl *MD) {
4098   // No need to do the check on definitions, which require that
4099   // the return/param types be complete.
4100   if (MD->doesThisDeclarationHaveABody())
4101     return;
4102 
4103   // For safety's sake, just ignore it if we don't have type source
4104   // information.  This should never happen for non-implicit methods,
4105   // but...
4106   if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
4107     Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
4108 }
4109 
4110 /// Check for invalid uses of an abstract type within a class definition.
CheckAbstractClassUsage(AbstractUsageInfo & Info,CXXRecordDecl * RD)4111 static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4112                                     CXXRecordDecl *RD) {
4113   for (CXXRecordDecl::decl_iterator
4114          I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
4115     Decl *D = *I;
4116     if (D->isImplicit()) continue;
4117 
4118     // Methods and method templates.
4119     if (isa<CXXMethodDecl>(D)) {
4120       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
4121     } else if (isa<FunctionTemplateDecl>(D)) {
4122       FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
4123       CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
4124 
4125     // Fields and static variables.
4126     } else if (isa<FieldDecl>(D)) {
4127       FieldDecl *FD = cast<FieldDecl>(D);
4128       if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
4129         Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
4130     } else if (isa<VarDecl>(D)) {
4131       VarDecl *VD = cast<VarDecl>(D);
4132       if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
4133         Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
4134 
4135     // Nested classes and class templates.
4136     } else if (isa<CXXRecordDecl>(D)) {
4137       CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
4138     } else if (isa<ClassTemplateDecl>(D)) {
4139       CheckAbstractClassUsage(Info,
4140                              cast<ClassTemplateDecl>(D)->getTemplatedDecl());
4141     }
4142   }
4143 }
4144 
4145 /// \brief Perform semantic checks on a class definition that has been
4146 /// completing, introducing implicitly-declared members, checking for
4147 /// abstract types, etc.
CheckCompletedCXXClass(CXXRecordDecl * Record)4148 void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
4149   if (!Record)
4150     return;
4151 
4152   if (Record->isAbstract() && !Record->isInvalidDecl()) {
4153     AbstractUsageInfo Info(*this, Record);
4154     CheckAbstractClassUsage(Info, Record);
4155   }
4156 
4157   // If this is not an aggregate type and has no user-declared constructor,
4158   // complain about any non-static data members of reference or const scalar
4159   // type, since they will never get initializers.
4160   if (!Record->isInvalidDecl() && !Record->isDependentType() &&
4161       !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
4162       !Record->isLambda()) {
4163     bool Complained = false;
4164     for (RecordDecl::field_iterator F = Record->field_begin(),
4165                                  FEnd = Record->field_end();
4166          F != FEnd; ++F) {
4167       if (F->hasInClassInitializer() || F->isUnnamedBitfield())
4168         continue;
4169 
4170       if (F->getType()->isReferenceType() ||
4171           (F->getType().isConstQualified() && F->getType()->isScalarType())) {
4172         if (!Complained) {
4173           Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
4174             << Record->getTagKind() << Record;
4175           Complained = true;
4176         }
4177 
4178         Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
4179           << F->getType()->isReferenceType()
4180           << F->getDeclName();
4181       }
4182     }
4183   }
4184 
4185   if (Record->isDynamicClass() && !Record->isDependentType())
4186     DynamicClasses.push_back(Record);
4187 
4188   if (Record->getIdentifier()) {
4189     // C++ [class.mem]p13:
4190     //   If T is the name of a class, then each of the following shall have a
4191     //   name different from T:
4192     //     - every member of every anonymous union that is a member of class T.
4193     //
4194     // C++ [class.mem]p14:
4195     //   In addition, if class T has a user-declared constructor (12.1), every
4196     //   non-static data member of class T shall have a name different from T.
4197     DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
4198     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
4199          ++I) {
4200       NamedDecl *D = *I;
4201       if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
4202           isa<IndirectFieldDecl>(D)) {
4203         Diag(D->getLocation(), diag::err_member_name_of_class)
4204           << D->getDeclName();
4205         break;
4206       }
4207     }
4208   }
4209 
4210   // Warn if the class has virtual methods but non-virtual public destructor.
4211   if (Record->isPolymorphic() && !Record->isDependentType()) {
4212     CXXDestructorDecl *dtor = Record->getDestructor();
4213     if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
4214       Diag(dtor ? dtor->getLocation() : Record->getLocation(),
4215            diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
4216   }
4217 
4218   if (Record->isAbstract() && Record->hasAttr<FinalAttr>()) {
4219     Diag(Record->getLocation(), diag::warn_abstract_final_class);
4220     DiagnoseAbstractType(Record);
4221   }
4222 
4223   if (!Record->isDependentType()) {
4224     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4225                                      MEnd = Record->method_end();
4226          M != MEnd; ++M) {
4227       // See if a method overloads virtual methods in a base
4228       // class without overriding any.
4229       if (!M->isStatic())
4230         DiagnoseHiddenVirtualMethods(Record, *M);
4231 
4232       // Check whether the explicitly-defaulted special members are valid.
4233       if (!M->isInvalidDecl() && M->isExplicitlyDefaulted())
4234         CheckExplicitlyDefaultedSpecialMember(*M);
4235 
4236       // For an explicitly defaulted or deleted special member, we defer
4237       // determining triviality until the class is complete. That time is now!
4238       if (!M->isImplicit() && !M->isUserProvided()) {
4239         CXXSpecialMember CSM = getSpecialMember(*M);
4240         if (CSM != CXXInvalid) {
4241           M->setTrivial(SpecialMemberIsTrivial(*M, CSM));
4242 
4243           // Inform the class that we've finished declaring this member.
4244           Record->finishedDefaultedOrDeletedMember(*M);
4245         }
4246       }
4247     }
4248   }
4249 
4250   // C++11 [dcl.constexpr]p8: A constexpr specifier for a non-static member
4251   // function that is not a constructor declares that member function to be
4252   // const. [...] The class of which that function is a member shall be
4253   // a literal type.
4254   //
4255   // If the class has virtual bases, any constexpr members will already have
4256   // been diagnosed by the checks performed on the member declaration, so
4257   // suppress this (less useful) diagnostic.
4258   //
4259   // We delay this until we know whether an explicitly-defaulted (or deleted)
4260   // destructor for the class is trivial.
4261   if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
4262       !Record->isLiteral() && !Record->getNumVBases()) {
4263     for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4264                                      MEnd = Record->method_end();
4265          M != MEnd; ++M) {
4266       if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
4267         switch (Record->getTemplateSpecializationKind()) {
4268         case TSK_ImplicitInstantiation:
4269         case TSK_ExplicitInstantiationDeclaration:
4270         case TSK_ExplicitInstantiationDefinition:
4271           // If a template instantiates to a non-literal type, but its members
4272           // instantiate to constexpr functions, the template is technically
4273           // ill-formed, but we allow it for sanity.
4274           continue;
4275 
4276         case TSK_Undeclared:
4277         case TSK_ExplicitSpecialization:
4278           RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
4279                              diag::err_constexpr_method_non_literal);
4280           break;
4281         }
4282 
4283         // Only produce one error per class.
4284         break;
4285       }
4286     }
4287   }
4288 
4289   // Declare inheriting constructors. We do this eagerly here because:
4290   // - The standard requires an eager diagnostic for conflicting inheriting
4291   //   constructors from different classes.
4292   // - The lazy declaration of the other implicit constructors is so as to not
4293   //   waste space and performance on classes that are not meant to be
4294   //   instantiated (e.g. meta-functions). This doesn't apply to classes that
4295   //   have inheriting constructors.
4296   DeclareInheritingConstructors(Record);
4297 }
4298 
4299 /// Is the special member function which would be selected to perform the
4300 /// specified operation on the specified class type a constexpr constructor?
specialMemberIsConstexpr(Sema & S,CXXRecordDecl * ClassDecl,Sema::CXXSpecialMember CSM,bool ConstArg)4301 static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4302                                      Sema::CXXSpecialMember CSM,
4303                                      bool ConstArg) {
4304   Sema::SpecialMemberOverloadResult *SMOR =
4305       S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
4306                             false, false, false, false);
4307   if (!SMOR || !SMOR->getMethod())
4308     // A constructor we wouldn't select can't be "involved in initializing"
4309     // anything.
4310     return true;
4311   return SMOR->getMethod()->isConstexpr();
4312 }
4313 
4314 /// Determine whether the specified special member function would be constexpr
4315 /// if it were implicitly defined.
defaultedSpecialMemberIsConstexpr(Sema & S,CXXRecordDecl * ClassDecl,Sema::CXXSpecialMember CSM,bool ConstArg)4316 static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4317                                               Sema::CXXSpecialMember CSM,
4318                                               bool ConstArg) {
4319   if (!S.getLangOpts().CPlusPlus11)
4320     return false;
4321 
4322   // C++11 [dcl.constexpr]p4:
4323   // In the definition of a constexpr constructor [...]
4324   bool Ctor = true;
4325   switch (CSM) {
4326   case Sema::CXXDefaultConstructor:
4327     // Since default constructor lookup is essentially trivial (and cannot
4328     // involve, for instance, template instantiation), we compute whether a
4329     // defaulted default constructor is constexpr directly within CXXRecordDecl.
4330     //
4331     // This is important for performance; we need to know whether the default
4332     // constructor is constexpr to determine whether the type is a literal type.
4333     return ClassDecl->defaultedDefaultConstructorIsConstexpr();
4334 
4335   case Sema::CXXCopyConstructor:
4336   case Sema::CXXMoveConstructor:
4337     // For copy or move constructors, we need to perform overload resolution.
4338     break;
4339 
4340   case Sema::CXXCopyAssignment:
4341   case Sema::CXXMoveAssignment:
4342     if (!S.getLangOpts().CPlusPlus1y)
4343       return false;
4344     // In C++1y, we need to perform overload resolution.
4345     Ctor = false;
4346     break;
4347 
4348   case Sema::CXXDestructor:
4349   case Sema::CXXInvalid:
4350     return false;
4351   }
4352 
4353   //   -- if the class is a non-empty union, or for each non-empty anonymous
4354   //      union member of a non-union class, exactly one non-static data member
4355   //      shall be initialized; [DR1359]
4356   //
4357   // If we squint, this is guaranteed, since exactly one non-static data member
4358   // will be initialized (if the constructor isn't deleted), we just don't know
4359   // which one.
4360   if (Ctor && ClassDecl->isUnion())
4361     return true;
4362 
4363   //   -- the class shall not have any virtual base classes;
4364   if (Ctor && ClassDecl->getNumVBases())
4365     return false;
4366 
4367   // C++1y [class.copy]p26:
4368   //   -- [the class] is a literal type, and
4369   if (!Ctor && !ClassDecl->isLiteral())
4370     return false;
4371 
4372   //   -- every constructor involved in initializing [...] base class
4373   //      sub-objects shall be a constexpr constructor;
4374   //   -- the assignment operator selected to copy/move each direct base
4375   //      class is a constexpr function, and
4376   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
4377                                        BEnd = ClassDecl->bases_end();
4378        B != BEnd; ++B) {
4379     const RecordType *BaseType = B->getType()->getAs<RecordType>();
4380     if (!BaseType) continue;
4381 
4382     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
4383     if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, ConstArg))
4384       return false;
4385   }
4386 
4387   //   -- every constructor involved in initializing non-static data members
4388   //      [...] shall be a constexpr constructor;
4389   //   -- every non-static data member and base class sub-object shall be
4390   //      initialized
4391   //   -- for each non-stastic data member of X that is of class type (or array
4392   //      thereof), the assignment operator selected to copy/move that member is
4393   //      a constexpr function
4394   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
4395                                FEnd = ClassDecl->field_end();
4396        F != FEnd; ++F) {
4397     if (F->isInvalidDecl())
4398       continue;
4399     if (const RecordType *RecordTy =
4400             S.Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
4401       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
4402       if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, ConstArg))
4403         return false;
4404     }
4405   }
4406 
4407   // All OK, it's constexpr!
4408   return true;
4409 }
4410 
4411 static Sema::ImplicitExceptionSpecification
computeImplicitExceptionSpec(Sema & S,SourceLocation Loc,CXXMethodDecl * MD)4412 computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
4413   switch (S.getSpecialMember(MD)) {
4414   case Sema::CXXDefaultConstructor:
4415     return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
4416   case Sema::CXXCopyConstructor:
4417     return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
4418   case Sema::CXXCopyAssignment:
4419     return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
4420   case Sema::CXXMoveConstructor:
4421     return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
4422   case Sema::CXXMoveAssignment:
4423     return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
4424   case Sema::CXXDestructor:
4425     return S.ComputeDefaultedDtorExceptionSpec(MD);
4426   case Sema::CXXInvalid:
4427     break;
4428   }
4429   assert(cast<CXXConstructorDecl>(MD)->getInheritedConstructor() &&
4430          "only special members have implicit exception specs");
4431   return S.ComputeInheritingCtorExceptionSpec(cast<CXXConstructorDecl>(MD));
4432 }
4433 
4434 static void
updateExceptionSpec(Sema & S,FunctionDecl * FD,const FunctionProtoType * FPT,const Sema::ImplicitExceptionSpecification & ExceptSpec)4435 updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
4436                     const Sema::ImplicitExceptionSpecification &ExceptSpec) {
4437   FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
4438   ExceptSpec.getEPI(EPI);
4439   FD->setType(S.Context.getFunctionType(FPT->getResultType(),
4440                                         FPT->getArgTypes(), EPI));
4441 }
4442 
EvaluateImplicitExceptionSpec(SourceLocation Loc,CXXMethodDecl * MD)4443 void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
4444   const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
4445   if (FPT->getExceptionSpecType() != EST_Unevaluated)
4446     return;
4447 
4448   // Evaluate the exception specification.
4449   ImplicitExceptionSpecification ExceptSpec =
4450       computeImplicitExceptionSpec(*this, Loc, MD);
4451 
4452   // Update the type of the special member to use it.
4453   updateExceptionSpec(*this, MD, FPT, ExceptSpec);
4454 
4455   // A user-provided destructor can be defined outside the class. When that
4456   // happens, be sure to update the exception specification on both
4457   // declarations.
4458   const FunctionProtoType *CanonicalFPT =
4459     MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
4460   if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
4461     updateExceptionSpec(*this, MD->getCanonicalDecl(),
4462                         CanonicalFPT, ExceptSpec);
4463 }
4464 
CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl * MD)4465 void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
4466   CXXRecordDecl *RD = MD->getParent();
4467   CXXSpecialMember CSM = getSpecialMember(MD);
4468 
4469   assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
4470          "not an explicitly-defaulted special member");
4471 
4472   // Whether this was the first-declared instance of the constructor.
4473   // This affects whether we implicitly add an exception spec and constexpr.
4474   bool First = MD == MD->getCanonicalDecl();
4475 
4476   bool HadError = false;
4477 
4478   // C++11 [dcl.fct.def.default]p1:
4479   //   A function that is explicitly defaulted shall
4480   //     -- be a special member function (checked elsewhere),
4481   //     -- have the same type (except for ref-qualifiers, and except that a
4482   //        copy operation can take a non-const reference) as an implicit
4483   //        declaration, and
4484   //     -- not have default arguments.
4485   unsigned ExpectedParams = 1;
4486   if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
4487     ExpectedParams = 0;
4488   if (MD->getNumParams() != ExpectedParams) {
4489     // This also checks for default arguments: a copy or move constructor with a
4490     // default argument is classified as a default constructor, and assignment
4491     // operations and destructors can't have default arguments.
4492     Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
4493       << CSM << MD->getSourceRange();
4494     HadError = true;
4495   } else if (MD->isVariadic()) {
4496     Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
4497       << CSM << MD->getSourceRange();
4498     HadError = true;
4499   }
4500 
4501   const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
4502 
4503   bool CanHaveConstParam = false;
4504   if (CSM == CXXCopyConstructor)
4505     CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
4506   else if (CSM == CXXCopyAssignment)
4507     CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
4508 
4509   QualType ReturnType = Context.VoidTy;
4510   if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
4511     // Check for return type matching.
4512     ReturnType = Type->getResultType();
4513     QualType ExpectedReturnType =
4514         Context.getLValueReferenceType(Context.getTypeDeclType(RD));
4515     if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
4516       Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
4517         << (CSM == CXXMoveAssignment) << ExpectedReturnType;
4518       HadError = true;
4519     }
4520 
4521     // A defaulted special member cannot have cv-qualifiers.
4522     if (Type->getTypeQuals()) {
4523       Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
4524         << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus1y;
4525       HadError = true;
4526     }
4527   }
4528 
4529   // Check for parameter type matching.
4530   QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
4531   bool HasConstParam = false;
4532   if (ExpectedParams && ArgType->isReferenceType()) {
4533     // Argument must be reference to possibly-const T.
4534     QualType ReferentType = ArgType->getPointeeType();
4535     HasConstParam = ReferentType.isConstQualified();
4536 
4537     if (ReferentType.isVolatileQualified()) {
4538       Diag(MD->getLocation(),
4539            diag::err_defaulted_special_member_volatile_param) << CSM;
4540       HadError = true;
4541     }
4542 
4543     if (HasConstParam && !CanHaveConstParam) {
4544       if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
4545         Diag(MD->getLocation(),
4546              diag::err_defaulted_special_member_copy_const_param)
4547           << (CSM == CXXCopyAssignment);
4548         // FIXME: Explain why this special member can't be const.
4549       } else {
4550         Diag(MD->getLocation(),
4551              diag::err_defaulted_special_member_move_const_param)
4552           << (CSM == CXXMoveAssignment);
4553       }
4554       HadError = true;
4555     }
4556   } else if (ExpectedParams) {
4557     // A copy assignment operator can take its argument by value, but a
4558     // defaulted one cannot.
4559     assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
4560     Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
4561     HadError = true;
4562   }
4563 
4564   // C++11 [dcl.fct.def.default]p2:
4565   //   An explicitly-defaulted function may be declared constexpr only if it
4566   //   would have been implicitly declared as constexpr,
4567   // Do not apply this rule to members of class templates, since core issue 1358
4568   // makes such functions always instantiate to constexpr functions. For
4569   // functions which cannot be constexpr (for non-constructors in C++11 and for
4570   // destructors in C++1y), this is checked elsewhere.
4571   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
4572                                                      HasConstParam);
4573   if ((getLangOpts().CPlusPlus1y ? !isa<CXXDestructorDecl>(MD)
4574                                  : isa<CXXConstructorDecl>(MD)) &&
4575       MD->isConstexpr() && !Constexpr &&
4576       MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
4577     Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
4578     // FIXME: Explain why the special member can't be constexpr.
4579     HadError = true;
4580   }
4581 
4582   //   and may have an explicit exception-specification only if it is compatible
4583   //   with the exception-specification on the implicit declaration.
4584   if (Type->hasExceptionSpec()) {
4585     // Delay the check if this is the first declaration of the special member,
4586     // since we may not have parsed some necessary in-class initializers yet.
4587     if (First) {
4588       // If the exception specification needs to be instantiated, do so now,
4589       // before we clobber it with an EST_Unevaluated specification below.
4590       if (Type->getExceptionSpecType() == EST_Uninstantiated) {
4591         InstantiateExceptionSpec(MD->getLocStart(), MD);
4592         Type = MD->getType()->getAs<FunctionProtoType>();
4593       }
4594       DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type));
4595     } else
4596       CheckExplicitlyDefaultedMemberExceptionSpec(MD, Type);
4597   }
4598 
4599   //   If a function is explicitly defaulted on its first declaration,
4600   if (First) {
4601     //  -- it is implicitly considered to be constexpr if the implicit
4602     //     definition would be,
4603     MD->setConstexpr(Constexpr);
4604 
4605     //  -- it is implicitly considered to have the same exception-specification
4606     //     as if it had been implicitly declared,
4607     FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
4608     EPI.ExceptionSpecType = EST_Unevaluated;
4609     EPI.ExceptionSpecDecl = MD;
4610     MD->setType(Context.getFunctionType(ReturnType,
4611                                         ArrayRef<QualType>(&ArgType,
4612                                                            ExpectedParams),
4613                                         EPI));
4614   }
4615 
4616   if (ShouldDeleteSpecialMember(MD, CSM)) {
4617     if (First) {
4618       SetDeclDeleted(MD, MD->getLocation());
4619     } else {
4620       // C++11 [dcl.fct.def.default]p4:
4621       //   [For a] user-provided explicitly-defaulted function [...] if such a
4622       //   function is implicitly defined as deleted, the program is ill-formed.
4623       Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
4624       HadError = true;
4625     }
4626   }
4627 
4628   if (HadError)
4629     MD->setInvalidDecl();
4630 }
4631 
4632 /// Check whether the exception specification provided for an
4633 /// explicitly-defaulted special member matches the exception specification
4634 /// that would have been generated for an implicit special member, per
4635 /// C++11 [dcl.fct.def.default]p2.
CheckExplicitlyDefaultedMemberExceptionSpec(CXXMethodDecl * MD,const FunctionProtoType * SpecifiedType)4636 void Sema::CheckExplicitlyDefaultedMemberExceptionSpec(
4637     CXXMethodDecl *MD, const FunctionProtoType *SpecifiedType) {
4638   // Compute the implicit exception specification.
4639   FunctionProtoType::ExtProtoInfo EPI;
4640   computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
4641   const FunctionProtoType *ImplicitType = cast<FunctionProtoType>(
4642     Context.getFunctionType(Context.VoidTy, None, EPI));
4643 
4644   // Ensure that it matches.
4645   CheckEquivalentExceptionSpec(
4646     PDiag(diag::err_incorrect_defaulted_exception_spec)
4647       << getSpecialMember(MD), PDiag(),
4648     ImplicitType, SourceLocation(),
4649     SpecifiedType, MD->getLocation());
4650 }
4651 
CheckDelayedExplicitlyDefaultedMemberExceptionSpecs()4652 void Sema::CheckDelayedExplicitlyDefaultedMemberExceptionSpecs() {
4653   for (unsigned I = 0, N = DelayedDefaultedMemberExceptionSpecs.size();
4654        I != N; ++I)
4655     CheckExplicitlyDefaultedMemberExceptionSpec(
4656       DelayedDefaultedMemberExceptionSpecs[I].first,
4657       DelayedDefaultedMemberExceptionSpecs[I].second);
4658 
4659   DelayedDefaultedMemberExceptionSpecs.clear();
4660 }
4661 
4662 namespace {
4663 struct SpecialMemberDeletionInfo {
4664   Sema &S;
4665   CXXMethodDecl *MD;
4666   Sema::CXXSpecialMember CSM;
4667   bool Diagnose;
4668 
4669   // Properties of the special member, computed for convenience.
4670   bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
4671   SourceLocation Loc;
4672 
4673   bool AllFieldsAreConst;
4674 
SpecialMemberDeletionInfo__anon7fa201ac0711::SpecialMemberDeletionInfo4675   SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
4676                             Sema::CXXSpecialMember CSM, bool Diagnose)
4677     : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
4678       IsConstructor(false), IsAssignment(false), IsMove(false),
4679       ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
4680       AllFieldsAreConst(true) {
4681     switch (CSM) {
4682       case Sema::CXXDefaultConstructor:
4683       case Sema::CXXCopyConstructor:
4684         IsConstructor = true;
4685         break;
4686       case Sema::CXXMoveConstructor:
4687         IsConstructor = true;
4688         IsMove = true;
4689         break;
4690       case Sema::CXXCopyAssignment:
4691         IsAssignment = true;
4692         break;
4693       case Sema::CXXMoveAssignment:
4694         IsAssignment = true;
4695         IsMove = true;
4696         break;
4697       case Sema::CXXDestructor:
4698         break;
4699       case Sema::CXXInvalid:
4700         llvm_unreachable("invalid special member kind");
4701     }
4702 
4703     if (MD->getNumParams()) {
4704       ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
4705       VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
4706     }
4707   }
4708 
inUnion__anon7fa201ac0711::SpecialMemberDeletionInfo4709   bool inUnion() const { return MD->getParent()->isUnion(); }
4710 
4711   /// Look up the corresponding special member in the given class.
lookupIn__anon7fa201ac0711::SpecialMemberDeletionInfo4712   Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
4713                                               unsigned Quals) {
4714     unsigned TQ = MD->getTypeQualifiers();
4715     // cv-qualifiers on class members don't affect default ctor / dtor calls.
4716     if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
4717       Quals = 0;
4718     return S.LookupSpecialMember(Class, CSM,
4719                                  ConstArg || (Quals & Qualifiers::Const),
4720                                  VolatileArg || (Quals & Qualifiers::Volatile),
4721                                  MD->getRefQualifier() == RQ_RValue,
4722                                  TQ & Qualifiers::Const,
4723                                  TQ & Qualifiers::Volatile);
4724   }
4725 
4726   typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
4727 
4728   bool shouldDeleteForBase(CXXBaseSpecifier *Base);
4729   bool shouldDeleteForField(FieldDecl *FD);
4730   bool shouldDeleteForAllConstMembers();
4731 
4732   bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
4733                                      unsigned Quals);
4734   bool shouldDeleteForSubobjectCall(Subobject Subobj,
4735                                     Sema::SpecialMemberOverloadResult *SMOR,
4736                                     bool IsDtorCallInCtor);
4737 
4738   bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
4739 };
4740 }
4741 
4742 /// Is the given special member inaccessible when used on the given
4743 /// sub-object.
isAccessible(Subobject Subobj,CXXMethodDecl * target)4744 bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
4745                                              CXXMethodDecl *target) {
4746   /// If we're operating on a base class, the object type is the
4747   /// type of this special member.
4748   QualType objectTy;
4749   AccessSpecifier access = target->getAccess();
4750   if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
4751     objectTy = S.Context.getTypeDeclType(MD->getParent());
4752     access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
4753 
4754   // If we're operating on a field, the object type is the type of the field.
4755   } else {
4756     objectTy = S.Context.getTypeDeclType(target->getParent());
4757   }
4758 
4759   return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
4760 }
4761 
4762 /// Check whether we should delete a special member due to the implicit
4763 /// definition containing a call to a special member of a subobject.
shouldDeleteForSubobjectCall(Subobject Subobj,Sema::SpecialMemberOverloadResult * SMOR,bool IsDtorCallInCtor)4764 bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
4765     Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
4766     bool IsDtorCallInCtor) {
4767   CXXMethodDecl *Decl = SMOR->getMethod();
4768   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4769 
4770   int DiagKind = -1;
4771 
4772   if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
4773     DiagKind = !Decl ? 0 : 1;
4774   else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
4775     DiagKind = 2;
4776   else if (!isAccessible(Subobj, Decl))
4777     DiagKind = 3;
4778   else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
4779            !Decl->isTrivial()) {
4780     // A member of a union must have a trivial corresponding special member.
4781     // As a weird special case, a destructor call from a union's constructor
4782     // must be accessible and non-deleted, but need not be trivial. Such a
4783     // destructor is never actually called, but is semantically checked as
4784     // if it were.
4785     DiagKind = 4;
4786   }
4787 
4788   if (DiagKind == -1)
4789     return false;
4790 
4791   if (Diagnose) {
4792     if (Field) {
4793       S.Diag(Field->getLocation(),
4794              diag::note_deleted_special_member_class_subobject)
4795         << CSM << MD->getParent() << /*IsField*/true
4796         << Field << DiagKind << IsDtorCallInCtor;
4797     } else {
4798       CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
4799       S.Diag(Base->getLocStart(),
4800              diag::note_deleted_special_member_class_subobject)
4801         << CSM << MD->getParent() << /*IsField*/false
4802         << Base->getType() << DiagKind << IsDtorCallInCtor;
4803     }
4804 
4805     if (DiagKind == 1)
4806       S.NoteDeletedFunction(Decl);
4807     // FIXME: Explain inaccessibility if DiagKind == 3.
4808   }
4809 
4810   return true;
4811 }
4812 
4813 /// Check whether we should delete a special member function due to having a
4814 /// direct or virtual base class or non-static data member of class type M.
shouldDeleteForClassSubobject(CXXRecordDecl * Class,Subobject Subobj,unsigned Quals)4815 bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
4816     CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
4817   FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4818 
4819   // C++11 [class.ctor]p5:
4820   // -- any direct or virtual base class, or non-static data member with no
4821   //    brace-or-equal-initializer, has class type M (or array thereof) and
4822   //    either M has no default constructor or overload resolution as applied
4823   //    to M's default constructor results in an ambiguity or in a function
4824   //    that is deleted or inaccessible
4825   // C++11 [class.copy]p11, C++11 [class.copy]p23:
4826   // -- a direct or virtual base class B that cannot be copied/moved because
4827   //    overload resolution, as applied to B's corresponding special member,
4828   //    results in an ambiguity or a function that is deleted or inaccessible
4829   //    from the defaulted special member
4830   // C++11 [class.dtor]p5:
4831   // -- any direct or virtual base class [...] has a type with a destructor
4832   //    that is deleted or inaccessible
4833   if (!(CSM == Sema::CXXDefaultConstructor &&
4834         Field && Field->hasInClassInitializer()) &&
4835       shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals), false))
4836     return true;
4837 
4838   // C++11 [class.ctor]p5, C++11 [class.copy]p11:
4839   // -- any direct or virtual base class or non-static data member has a
4840   //    type with a destructor that is deleted or inaccessible
4841   if (IsConstructor) {
4842     Sema::SpecialMemberOverloadResult *SMOR =
4843         S.LookupSpecialMember(Class, Sema::CXXDestructor,
4844                               false, false, false, false, false);
4845     if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
4846       return true;
4847   }
4848 
4849   return false;
4850 }
4851 
4852 /// Check whether we should delete a special member function due to the class
4853 /// having a particular direct or virtual base class.
shouldDeleteForBase(CXXBaseSpecifier * Base)4854 bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
4855   CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
4856   return shouldDeleteForClassSubobject(BaseClass, Base, 0);
4857 }
4858 
4859 /// Check whether we should delete a special member function due to the class
4860 /// having a particular non-static data member.
shouldDeleteForField(FieldDecl * FD)4861 bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
4862   QualType FieldType = S.Context.getBaseElementType(FD->getType());
4863   CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4864 
4865   if (CSM == Sema::CXXDefaultConstructor) {
4866     // For a default constructor, all references must be initialized in-class
4867     // and, if a union, it must have a non-const member.
4868     if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
4869       if (Diagnose)
4870         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4871           << MD->getParent() << FD << FieldType << /*Reference*/0;
4872       return true;
4873     }
4874     // C++11 [class.ctor]p5: any non-variant non-static data member of
4875     // const-qualified type (or array thereof) with no
4876     // brace-or-equal-initializer does not have a user-provided default
4877     // constructor.
4878     if (!inUnion() && FieldType.isConstQualified() &&
4879         !FD->hasInClassInitializer() &&
4880         (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
4881       if (Diagnose)
4882         S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4883           << MD->getParent() << FD << FD->getType() << /*Const*/1;
4884       return true;
4885     }
4886 
4887     if (inUnion() && !FieldType.isConstQualified())
4888       AllFieldsAreConst = false;
4889   } else if (CSM == Sema::CXXCopyConstructor) {
4890     // For a copy constructor, data members must not be of rvalue reference
4891     // type.
4892     if (FieldType->isRValueReferenceType()) {
4893       if (Diagnose)
4894         S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
4895           << MD->getParent() << FD << FieldType;
4896       return true;
4897     }
4898   } else if (IsAssignment) {
4899     // For an assignment operator, data members must not be of reference type.
4900     if (FieldType->isReferenceType()) {
4901       if (Diagnose)
4902         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4903           << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
4904       return true;
4905     }
4906     if (!FieldRecord && FieldType.isConstQualified()) {
4907       // C++11 [class.copy]p23:
4908       // -- a non-static data member of const non-class type (or array thereof)
4909       if (Diagnose)
4910         S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4911           << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
4912       return true;
4913     }
4914   }
4915 
4916   if (FieldRecord) {
4917     // Some additional restrictions exist on the variant members.
4918     if (!inUnion() && FieldRecord->isUnion() &&
4919         FieldRecord->isAnonymousStructOrUnion()) {
4920       bool AllVariantFieldsAreConst = true;
4921 
4922       // FIXME: Handle anonymous unions declared within anonymous unions.
4923       for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4924                                          UE = FieldRecord->field_end();
4925            UI != UE; ++UI) {
4926         QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
4927 
4928         if (!UnionFieldType.isConstQualified())
4929           AllVariantFieldsAreConst = false;
4930 
4931         CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
4932         if (UnionFieldRecord &&
4933             shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
4934                                           UnionFieldType.getCVRQualifiers()))
4935           return true;
4936       }
4937 
4938       // At least one member in each anonymous union must be non-const
4939       if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
4940           FieldRecord->field_begin() != FieldRecord->field_end()) {
4941         if (Diagnose)
4942           S.Diag(FieldRecord->getLocation(),
4943                  diag::note_deleted_default_ctor_all_const)
4944             << MD->getParent() << /*anonymous union*/1;
4945         return true;
4946       }
4947 
4948       // Don't check the implicit member of the anonymous union type.
4949       // This is technically non-conformant, but sanity demands it.
4950       return false;
4951     }
4952 
4953     if (shouldDeleteForClassSubobject(FieldRecord, FD,
4954                                       FieldType.getCVRQualifiers()))
4955       return true;
4956   }
4957 
4958   return false;
4959 }
4960 
4961 /// C++11 [class.ctor] p5:
4962 ///   A defaulted default constructor for a class X is defined as deleted if
4963 /// X is a union and all of its variant members are of const-qualified type.
shouldDeleteForAllConstMembers()4964 bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
4965   // This is a silly definition, because it gives an empty union a deleted
4966   // default constructor. Don't do that.
4967   if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
4968       (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
4969     if (Diagnose)
4970       S.Diag(MD->getParent()->getLocation(),
4971              diag::note_deleted_default_ctor_all_const)
4972         << MD->getParent() << /*not anonymous union*/0;
4973     return true;
4974   }
4975   return false;
4976 }
4977 
4978 /// Determine whether a defaulted special member function should be defined as
4979 /// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
4980 /// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
ShouldDeleteSpecialMember(CXXMethodDecl * MD,CXXSpecialMember CSM,bool Diagnose)4981 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4982                                      bool Diagnose) {
4983   if (MD->isInvalidDecl())
4984     return false;
4985   CXXRecordDecl *RD = MD->getParent();
4986   assert(!RD->isDependentType() && "do deletion after instantiation");
4987   if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
4988     return false;
4989 
4990   // C++11 [expr.lambda.prim]p19:
4991   //   The closure type associated with a lambda-expression has a
4992   //   deleted (8.4.3) default constructor and a deleted copy
4993   //   assignment operator.
4994   if (RD->isLambda() &&
4995       (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
4996     if (Diagnose)
4997       Diag(RD->getLocation(), diag::note_lambda_decl);
4998     return true;
4999   }
5000 
5001   // For an anonymous struct or union, the copy and assignment special members
5002   // will never be used, so skip the check. For an anonymous union declared at
5003   // namespace scope, the constructor and destructor are used.
5004   if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
5005       RD->isAnonymousStructOrUnion())
5006     return false;
5007 
5008   // C++11 [class.copy]p7, p18:
5009   //   If the class definition declares a move constructor or move assignment
5010   //   operator, an implicitly declared copy constructor or copy assignment
5011   //   operator is defined as deleted.
5012   if (MD->isImplicit() &&
5013       (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
5014     CXXMethodDecl *UserDeclaredMove = 0;
5015 
5016     // In Microsoft mode, a user-declared move only causes the deletion of the
5017     // corresponding copy operation, not both copy operations.
5018     if (RD->hasUserDeclaredMoveConstructor() &&
5019         (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
5020       if (!Diagnose) return true;
5021 
5022       // Find any user-declared move constructor.
5023       for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
5024                                         E = RD->ctor_end(); I != E; ++I) {
5025         if (I->isMoveConstructor()) {
5026           UserDeclaredMove = *I;
5027           break;
5028         }
5029       }
5030       assert(UserDeclaredMove);
5031     } else if (RD->hasUserDeclaredMoveAssignment() &&
5032                (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
5033       if (!Diagnose) return true;
5034 
5035       // Find any user-declared move assignment operator.
5036       for (CXXRecordDecl::method_iterator I = RD->method_begin(),
5037                                           E = RD->method_end(); I != E; ++I) {
5038         if (I->isMoveAssignmentOperator()) {
5039           UserDeclaredMove = *I;
5040           break;
5041         }
5042       }
5043       assert(UserDeclaredMove);
5044     }
5045 
5046     if (UserDeclaredMove) {
5047       Diag(UserDeclaredMove->getLocation(),
5048            diag::note_deleted_copy_user_declared_move)
5049         << (CSM == CXXCopyAssignment) << RD
5050         << UserDeclaredMove->isMoveAssignmentOperator();
5051       return true;
5052     }
5053   }
5054 
5055   // Do access control from the special member function
5056   ContextRAII MethodContext(*this, MD);
5057 
5058   // C++11 [class.dtor]p5:
5059   // -- for a virtual destructor, lookup of the non-array deallocation function
5060   //    results in an ambiguity or in a function that is deleted or inaccessible
5061   if (CSM == CXXDestructor && MD->isVirtual()) {
5062     FunctionDecl *OperatorDelete = 0;
5063     DeclarationName Name =
5064       Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5065     if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
5066                                  OperatorDelete, false)) {
5067       if (Diagnose)
5068         Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
5069       return true;
5070     }
5071   }
5072 
5073   SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
5074 
5075   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5076                                           BE = RD->bases_end(); BI != BE; ++BI)
5077     if (!BI->isVirtual() &&
5078         SMI.shouldDeleteForBase(BI))
5079       return true;
5080 
5081   // Per DR1611, do not consider virtual bases of constructors of abstract
5082   // classes, since we are not going to construct them.
5083   if (!RD->isAbstract() || !SMI.IsConstructor) {
5084     for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
5085                                             BE = RD->vbases_end();
5086          BI != BE; ++BI)
5087       if (SMI.shouldDeleteForBase(BI))
5088         return true;
5089   }
5090 
5091   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5092                                      FE = RD->field_end(); FI != FE; ++FI)
5093     if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
5094         SMI.shouldDeleteForField(*FI))
5095       return true;
5096 
5097   if (SMI.shouldDeleteForAllConstMembers())
5098     return true;
5099 
5100   return false;
5101 }
5102 
5103 /// Perform lookup for a special member of the specified kind, and determine
5104 /// whether it is trivial. If the triviality can be determined without the
5105 /// lookup, skip it. This is intended for use when determining whether a
5106 /// special member of a containing object is trivial, and thus does not ever
5107 /// perform overload resolution for default constructors.
5108 ///
5109 /// If \p Selected is not \c NULL, \c *Selected will be filled in with the
5110 /// member that was most likely to be intended to be trivial, if any.
findTrivialSpecialMember(Sema & S,CXXRecordDecl * RD,Sema::CXXSpecialMember CSM,unsigned Quals,CXXMethodDecl ** Selected)5111 static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
5112                                      Sema::CXXSpecialMember CSM, unsigned Quals,
5113                                      CXXMethodDecl **Selected) {
5114   if (Selected)
5115     *Selected = 0;
5116 
5117   switch (CSM) {
5118   case Sema::CXXInvalid:
5119     llvm_unreachable("not a special member");
5120 
5121   case Sema::CXXDefaultConstructor:
5122     // C++11 [class.ctor]p5:
5123     //   A default constructor is trivial if:
5124     //    - all the [direct subobjects] have trivial default constructors
5125     //
5126     // Note, no overload resolution is performed in this case.
5127     if (RD->hasTrivialDefaultConstructor())
5128       return true;
5129 
5130     if (Selected) {
5131       // If there's a default constructor which could have been trivial, dig it
5132       // out. Otherwise, if there's any user-provided default constructor, point
5133       // to that as an example of why there's not a trivial one.
5134       CXXConstructorDecl *DefCtor = 0;
5135       if (RD->needsImplicitDefaultConstructor())
5136         S.DeclareImplicitDefaultConstructor(RD);
5137       for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(),
5138                                         CE = RD->ctor_end(); CI != CE; ++CI) {
5139         if (!CI->isDefaultConstructor())
5140           continue;
5141         DefCtor = *CI;
5142         if (!DefCtor->isUserProvided())
5143           break;
5144       }
5145 
5146       *Selected = DefCtor;
5147     }
5148 
5149     return false;
5150 
5151   case Sema::CXXDestructor:
5152     // C++11 [class.dtor]p5:
5153     //   A destructor is trivial if:
5154     //    - all the direct [subobjects] have trivial destructors
5155     if (RD->hasTrivialDestructor())
5156       return true;
5157 
5158     if (Selected) {
5159       if (RD->needsImplicitDestructor())
5160         S.DeclareImplicitDestructor(RD);
5161       *Selected = RD->getDestructor();
5162     }
5163 
5164     return false;
5165 
5166   case Sema::CXXCopyConstructor:
5167     // C++11 [class.copy]p12:
5168     //   A copy constructor is trivial if:
5169     //    - the constructor selected to copy each direct [subobject] is trivial
5170     if (RD->hasTrivialCopyConstructor()) {
5171       if (Quals == Qualifiers::Const)
5172         // We must either select the trivial copy constructor or reach an
5173         // ambiguity; no need to actually perform overload resolution.
5174         return true;
5175     } else if (!Selected) {
5176       return false;
5177     }
5178     // In C++98, we are not supposed to perform overload resolution here, but we
5179     // treat that as a language defect, as suggested on cxx-abi-dev, to treat
5180     // cases like B as having a non-trivial copy constructor:
5181     //   struct A { template<typename T> A(T&); };
5182     //   struct B { mutable A a; };
5183     goto NeedOverloadResolution;
5184 
5185   case Sema::CXXCopyAssignment:
5186     // C++11 [class.copy]p25:
5187     //   A copy assignment operator is trivial if:
5188     //    - the assignment operator selected to copy each direct [subobject] is
5189     //      trivial
5190     if (RD->hasTrivialCopyAssignment()) {
5191       if (Quals == Qualifiers::Const)
5192         return true;
5193     } else if (!Selected) {
5194       return false;
5195     }
5196     // In C++98, we are not supposed to perform overload resolution here, but we
5197     // treat that as a language defect.
5198     goto NeedOverloadResolution;
5199 
5200   case Sema::CXXMoveConstructor:
5201   case Sema::CXXMoveAssignment:
5202   NeedOverloadResolution:
5203     Sema::SpecialMemberOverloadResult *SMOR =
5204       S.LookupSpecialMember(RD, CSM,
5205                             Quals & Qualifiers::Const,
5206                             Quals & Qualifiers::Volatile,
5207                             /*RValueThis*/false, /*ConstThis*/false,
5208                             /*VolatileThis*/false);
5209 
5210     // The standard doesn't describe how to behave if the lookup is ambiguous.
5211     // We treat it as not making the member non-trivial, just like the standard
5212     // mandates for the default constructor. This should rarely matter, because
5213     // the member will also be deleted.
5214     if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
5215       return true;
5216 
5217     if (!SMOR->getMethod()) {
5218       assert(SMOR->getKind() ==
5219              Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
5220       return false;
5221     }
5222 
5223     // We deliberately don't check if we found a deleted special member. We're
5224     // not supposed to!
5225     if (Selected)
5226       *Selected = SMOR->getMethod();
5227     return SMOR->getMethod()->isTrivial();
5228   }
5229 
5230   llvm_unreachable("unknown special method kind");
5231 }
5232 
findUserDeclaredCtor(CXXRecordDecl * RD)5233 static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
5234   for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end();
5235        CI != CE; ++CI)
5236     if (!CI->isImplicit())
5237       return *CI;
5238 
5239   // Look for constructor templates.
5240   typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
5241   for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
5242     if (CXXConstructorDecl *CD =
5243           dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
5244       return CD;
5245   }
5246 
5247   return 0;
5248 }
5249 
5250 /// The kind of subobject we are checking for triviality. The values of this
5251 /// enumeration are used in diagnostics.
5252 enum TrivialSubobjectKind {
5253   /// The subobject is a base class.
5254   TSK_BaseClass,
5255   /// The subobject is a non-static data member.
5256   TSK_Field,
5257   /// The object is actually the complete object.
5258   TSK_CompleteObject
5259 };
5260 
5261 /// Check whether the special member selected for a given type would be trivial.
checkTrivialSubobjectCall(Sema & S,SourceLocation SubobjLoc,QualType SubType,Sema::CXXSpecialMember CSM,TrivialSubobjectKind Kind,bool Diagnose)5262 static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
5263                                       QualType SubType,
5264                                       Sema::CXXSpecialMember CSM,
5265                                       TrivialSubobjectKind Kind,
5266                                       bool Diagnose) {
5267   CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
5268   if (!SubRD)
5269     return true;
5270 
5271   CXXMethodDecl *Selected;
5272   if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
5273                                Diagnose ? &Selected : 0))
5274     return true;
5275 
5276   if (Diagnose) {
5277     if (!Selected && CSM == Sema::CXXDefaultConstructor) {
5278       S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
5279         << Kind << SubType.getUnqualifiedType();
5280       if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
5281         S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
5282     } else if (!Selected)
5283       S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
5284         << Kind << SubType.getUnqualifiedType() << CSM << SubType;
5285     else if (Selected->isUserProvided()) {
5286       if (Kind == TSK_CompleteObject)
5287         S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
5288           << Kind << SubType.getUnqualifiedType() << CSM;
5289       else {
5290         S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
5291           << Kind << SubType.getUnqualifiedType() << CSM;
5292         S.Diag(Selected->getLocation(), diag::note_declared_at);
5293       }
5294     } else {
5295       if (Kind != TSK_CompleteObject)
5296         S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
5297           << Kind << SubType.getUnqualifiedType() << CSM;
5298 
5299       // Explain why the defaulted or deleted special member isn't trivial.
5300       S.SpecialMemberIsTrivial(Selected, CSM, Diagnose);
5301     }
5302   }
5303 
5304   return false;
5305 }
5306 
5307 /// Check whether the members of a class type allow a special member to be
5308 /// trivial.
checkTrivialClassMembers(Sema & S,CXXRecordDecl * RD,Sema::CXXSpecialMember CSM,bool ConstArg,bool Diagnose)5309 static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
5310                                      Sema::CXXSpecialMember CSM,
5311                                      bool ConstArg, bool Diagnose) {
5312   for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5313                                      FE = RD->field_end(); FI != FE; ++FI) {
5314     if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
5315       continue;
5316 
5317     QualType FieldType = S.Context.getBaseElementType(FI->getType());
5318 
5319     // Pretend anonymous struct or union members are members of this class.
5320     if (FI->isAnonymousStructOrUnion()) {
5321       if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
5322                                     CSM, ConstArg, Diagnose))
5323         return false;
5324       continue;
5325     }
5326 
5327     // C++11 [class.ctor]p5:
5328     //   A default constructor is trivial if [...]
5329     //    -- no non-static data member of its class has a
5330     //       brace-or-equal-initializer
5331     if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
5332       if (Diagnose)
5333         S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI;
5334       return false;
5335     }
5336 
5337     // Objective C ARC 4.3.5:
5338     //   [...] nontrivally ownership-qualified types are [...] not trivially
5339     //   default constructible, copy constructible, move constructible, copy
5340     //   assignable, move assignable, or destructible [...]
5341     if (S.getLangOpts().ObjCAutoRefCount &&
5342         FieldType.hasNonTrivialObjCLifetime()) {
5343       if (Diagnose)
5344         S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
5345           << RD << FieldType.getObjCLifetime();
5346       return false;
5347     }
5348 
5349     if (ConstArg && !FI->isMutable())
5350       FieldType.addConst();
5351     if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, CSM,
5352                                    TSK_Field, Diagnose))
5353       return false;
5354   }
5355 
5356   return true;
5357 }
5358 
5359 /// Diagnose why the specified class does not have a trivial special member of
5360 /// the given kind.
DiagnoseNontrivial(const CXXRecordDecl * RD,CXXSpecialMember CSM)5361 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
5362   QualType Ty = Context.getRecordType(RD);
5363   if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)
5364     Ty.addConst();
5365 
5366   checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, CSM,
5367                             TSK_CompleteObject, /*Diagnose*/true);
5368 }
5369 
5370 /// Determine whether a defaulted or deleted special member function is trivial,
5371 /// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5372 /// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
SpecialMemberIsTrivial(CXXMethodDecl * MD,CXXSpecialMember CSM,bool Diagnose)5373 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
5374                                   bool Diagnose) {
5375   assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
5376 
5377   CXXRecordDecl *RD = MD->getParent();
5378 
5379   bool ConstArg = false;
5380 
5381   // C++11 [class.copy]p12, p25:
5382   //   A [special member] is trivial if its declared parameter type is the same
5383   //   as if it had been implicitly declared [...]
5384   switch (CSM) {
5385   case CXXDefaultConstructor:
5386   case CXXDestructor:
5387     // Trivial default constructors and destructors cannot have parameters.
5388     break;
5389 
5390   case CXXCopyConstructor:
5391   case CXXCopyAssignment: {
5392     // Trivial copy operations always have const, non-volatile parameter types.
5393     ConstArg = true;
5394     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5395     const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
5396     if (!RT || RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) {
5397       if (Diagnose)
5398         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5399           << Param0->getSourceRange() << Param0->getType()
5400           << Context.getLValueReferenceType(
5401                Context.getRecordType(RD).withConst());
5402       return false;
5403     }
5404     break;
5405   }
5406 
5407   case CXXMoveConstructor:
5408   case CXXMoveAssignment: {
5409     // Trivial move operations always have non-cv-qualified parameters.
5410     const ParmVarDecl *Param0 = MD->getParamDecl(0);
5411     const RValueReferenceType *RT =
5412       Param0->getType()->getAs<RValueReferenceType>();
5413     if (!RT || RT->getPointeeType().getCVRQualifiers()) {
5414       if (Diagnose)
5415         Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5416           << Param0->getSourceRange() << Param0->getType()
5417           << Context.getRValueReferenceType(Context.getRecordType(RD));
5418       return false;
5419     }
5420     break;
5421   }
5422 
5423   case CXXInvalid:
5424     llvm_unreachable("not a special member");
5425   }
5426 
5427   // FIXME: We require that the parameter-declaration-clause is equivalent to
5428   // that of an implicit declaration, not just that the declared parameter type
5429   // matches, in order to prevent absuridities like a function simultaneously
5430   // being a trivial copy constructor and a non-trivial default constructor.
5431   // This issue has not yet been assigned a core issue number.
5432   if (MD->getMinRequiredArguments() < MD->getNumParams()) {
5433     if (Diagnose)
5434       Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
5435            diag::note_nontrivial_default_arg)
5436         << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
5437     return false;
5438   }
5439   if (MD->isVariadic()) {
5440     if (Diagnose)
5441       Diag(MD->getLocation(), diag::note_nontrivial_variadic);
5442     return false;
5443   }
5444 
5445   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5446   //   A copy/move [constructor or assignment operator] is trivial if
5447   //    -- the [member] selected to copy/move each direct base class subobject
5448   //       is trivial
5449   //
5450   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5451   //   A [default constructor or destructor] is trivial if
5452   //    -- all the direct base classes have trivial [default constructors or
5453   //       destructors]
5454   for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5455                                           BE = RD->bases_end(); BI != BE; ++BI)
5456     if (!checkTrivialSubobjectCall(*this, BI->getLocStart(),
5457                                    ConstArg ? BI->getType().withConst()
5458                                             : BI->getType(),
5459                                    CSM, TSK_BaseClass, Diagnose))
5460       return false;
5461 
5462   // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5463   //   A copy/move [constructor or assignment operator] for a class X is
5464   //   trivial if
5465   //    -- for each non-static data member of X that is of class type (or array
5466   //       thereof), the constructor selected to copy/move that member is
5467   //       trivial
5468   //
5469   // C++11 [class.copy]p12, C++11 [class.copy]p25:
5470   //   A [default constructor or destructor] is trivial if
5471   //    -- for all of the non-static data members of its class that are of class
5472   //       type (or array thereof), each such class has a trivial [default
5473   //       constructor or destructor]
5474   if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, Diagnose))
5475     return false;
5476 
5477   // C++11 [class.dtor]p5:
5478   //   A destructor is trivial if [...]
5479   //    -- the destructor is not virtual
5480   if (CSM == CXXDestructor && MD->isVirtual()) {
5481     if (Diagnose)
5482       Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
5483     return false;
5484   }
5485 
5486   // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
5487   //   A [special member] for class X is trivial if [...]
5488   //    -- class X has no virtual functions and no virtual base classes
5489   if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
5490     if (!Diagnose)
5491       return false;
5492 
5493     if (RD->getNumVBases()) {
5494       // Check for virtual bases. We already know that the corresponding
5495       // member in all bases is trivial, so vbases must all be direct.
5496       CXXBaseSpecifier &BS = *RD->vbases_begin();
5497       assert(BS.isVirtual());
5498       Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1;
5499       return false;
5500     }
5501 
5502     // Must have a virtual method.
5503     for (CXXRecordDecl::method_iterator MI = RD->method_begin(),
5504                                         ME = RD->method_end(); MI != ME; ++MI) {
5505       if (MI->isVirtual()) {
5506         SourceLocation MLoc = MI->getLocStart();
5507         Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
5508         return false;
5509       }
5510     }
5511 
5512     llvm_unreachable("dynamic class with no vbases and no virtual functions");
5513   }
5514 
5515   // Looks like it's trivial!
5516   return true;
5517 }
5518 
5519 /// \brief Data used with FindHiddenVirtualMethod
5520 namespace {
5521   struct FindHiddenVirtualMethodData {
5522     Sema *S;
5523     CXXMethodDecl *Method;
5524     llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
5525     SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
5526   };
5527 }
5528 
5529 /// \brief Check whether any most overriden method from MD in Methods
CheckMostOverridenMethods(const CXXMethodDecl * MD,const llvm::SmallPtrSet<const CXXMethodDecl *,8> & Methods)5530 static bool CheckMostOverridenMethods(const CXXMethodDecl *MD,
5531                    const llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5532   if (MD->size_overridden_methods() == 0)
5533     return Methods.count(MD->getCanonicalDecl());
5534   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5535                                       E = MD->end_overridden_methods();
5536        I != E; ++I)
5537     if (CheckMostOverridenMethods(*I, Methods))
5538       return true;
5539   return false;
5540 }
5541 
5542 /// \brief Member lookup function that determines whether a given C++
5543 /// method overloads virtual methods in a base class without overriding any,
5544 /// to be used with CXXRecordDecl::lookupInBases().
FindHiddenVirtualMethod(const CXXBaseSpecifier * Specifier,CXXBasePath & Path,void * UserData)5545 static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
5546                                     CXXBasePath &Path,
5547                                     void *UserData) {
5548   RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
5549 
5550   FindHiddenVirtualMethodData &Data
5551     = *static_cast<FindHiddenVirtualMethodData*>(UserData);
5552 
5553   DeclarationName Name = Data.Method->getDeclName();
5554   assert(Name.getNameKind() == DeclarationName::Identifier);
5555 
5556   bool foundSameNameMethod = false;
5557   SmallVector<CXXMethodDecl *, 8> overloadedMethods;
5558   for (Path.Decls = BaseRecord->lookup(Name);
5559        !Path.Decls.empty();
5560        Path.Decls = Path.Decls.slice(1)) {
5561     NamedDecl *D = Path.Decls.front();
5562     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
5563       MD = MD->getCanonicalDecl();
5564       foundSameNameMethod = true;
5565       // Interested only in hidden virtual methods.
5566       if (!MD->isVirtual())
5567         continue;
5568       // If the method we are checking overrides a method from its base
5569       // don't warn about the other overloaded methods.
5570       if (!Data.S->IsOverload(Data.Method, MD, false))
5571         return true;
5572       // Collect the overload only if its hidden.
5573       if (!CheckMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods))
5574         overloadedMethods.push_back(MD);
5575     }
5576   }
5577 
5578   if (foundSameNameMethod)
5579     Data.OverloadedMethods.append(overloadedMethods.begin(),
5580                                    overloadedMethods.end());
5581   return foundSameNameMethod;
5582 }
5583 
5584 /// \brief Add the most overriden methods from MD to Methods
AddMostOverridenMethods(const CXXMethodDecl * MD,llvm::SmallPtrSet<const CXXMethodDecl *,8> & Methods)5585 static void AddMostOverridenMethods(const CXXMethodDecl *MD,
5586                          llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5587   if (MD->size_overridden_methods() == 0)
5588     Methods.insert(MD->getCanonicalDecl());
5589   for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5590                                       E = MD->end_overridden_methods();
5591        I != E; ++I)
5592     AddMostOverridenMethods(*I, Methods);
5593 }
5594 
5595 /// \brief See if a method overloads virtual methods in a base class without
5596 /// overriding any.
DiagnoseHiddenVirtualMethods(CXXRecordDecl * DC,CXXMethodDecl * MD)5597 void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
5598   if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
5599                                MD->getLocation()) == DiagnosticsEngine::Ignored)
5600     return;
5601   if (!MD->getDeclName().isIdentifier())
5602     return;
5603 
5604   CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
5605                      /*bool RecordPaths=*/false,
5606                      /*bool DetectVirtual=*/false);
5607   FindHiddenVirtualMethodData Data;
5608   Data.Method = MD;
5609   Data.S = this;
5610 
5611   // Keep the base methods that were overriden or introduced in the subclass
5612   // by 'using' in a set. A base method not in this set is hidden.
5613   DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
5614   for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
5615     NamedDecl *ND = *I;
5616     if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
5617       ND = shad->getTargetDecl();
5618     if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
5619       AddMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods);
5620   }
5621 
5622   if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
5623       !Data.OverloadedMethods.empty()) {
5624     Diag(MD->getLocation(), diag::warn_overloaded_virtual)
5625       << MD << (Data.OverloadedMethods.size() > 1);
5626 
5627     for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
5628       CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
5629       PartialDiagnostic PD = PDiag(
5630            diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
5631       HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
5632       Diag(overloadedMD->getLocation(), PD);
5633     }
5634   }
5635 }
5636 
ActOnFinishCXXMemberSpecification(Scope * S,SourceLocation RLoc,Decl * TagDecl,SourceLocation LBrac,SourceLocation RBrac,AttributeList * AttrList)5637 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5638                                              Decl *TagDecl,
5639                                              SourceLocation LBrac,
5640                                              SourceLocation RBrac,
5641                                              AttributeList *AttrList) {
5642   if (!TagDecl)
5643     return;
5644 
5645   AdjustDeclIfTemplate(TagDecl);
5646 
5647   for (const AttributeList* l = AttrList; l; l = l->getNext()) {
5648     if (l->getKind() != AttributeList::AT_Visibility)
5649       continue;
5650     l->setInvalid();
5651     Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
5652       l->getName();
5653   }
5654 
5655   ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
5656               // strict aliasing violation!
5657               reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
5658               FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
5659 
5660   CheckCompletedCXXClass(
5661                         dyn_cast_or_null<CXXRecordDecl>(TagDecl));
5662 }
5663 
5664 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5665 /// special functions, such as the default constructor, copy
5666 /// constructor, or destructor, to the given C++ class (C++
5667 /// [special]p1).  This routine can only be executed just before the
5668 /// definition of the class is complete.
AddImplicitlyDeclaredMembersToClass(CXXRecordDecl * ClassDecl)5669 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
5670   if (!ClassDecl->hasUserDeclaredConstructor())
5671     ++ASTContext::NumImplicitDefaultConstructors;
5672 
5673   if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
5674     ++ASTContext::NumImplicitCopyConstructors;
5675 
5676     // If the properties or semantics of the copy constructor couldn't be
5677     // determined while the class was being declared, force a declaration
5678     // of it now.
5679     if (ClassDecl->needsOverloadResolutionForCopyConstructor())
5680       DeclareImplicitCopyConstructor(ClassDecl);
5681   }
5682 
5683   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
5684     ++ASTContext::NumImplicitMoveConstructors;
5685 
5686     if (ClassDecl->needsOverloadResolutionForMoveConstructor())
5687       DeclareImplicitMoveConstructor(ClassDecl);
5688   }
5689 
5690   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
5691     ++ASTContext::NumImplicitCopyAssignmentOperators;
5692 
5693     // If we have a dynamic class, then the copy assignment operator may be
5694     // virtual, so we have to declare it immediately. This ensures that, e.g.,
5695     // it shows up in the right place in the vtable and that we diagnose
5696     // problems with the implicit exception specification.
5697     if (ClassDecl->isDynamicClass() ||
5698         ClassDecl->needsOverloadResolutionForCopyAssignment())
5699       DeclareImplicitCopyAssignment(ClassDecl);
5700   }
5701 
5702   if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
5703     ++ASTContext::NumImplicitMoveAssignmentOperators;
5704 
5705     // Likewise for the move assignment operator.
5706     if (ClassDecl->isDynamicClass() ||
5707         ClassDecl->needsOverloadResolutionForMoveAssignment())
5708       DeclareImplicitMoveAssignment(ClassDecl);
5709   }
5710 
5711   if (!ClassDecl->hasUserDeclaredDestructor()) {
5712     ++ASTContext::NumImplicitDestructors;
5713 
5714     // If we have a dynamic class, then the destructor may be virtual, so we
5715     // have to declare the destructor immediately. This ensures that, e.g., it
5716     // shows up in the right place in the vtable and that we diagnose problems
5717     // with the implicit exception specification.
5718     if (ClassDecl->isDynamicClass() ||
5719         ClassDecl->needsOverloadResolutionForDestructor())
5720       DeclareImplicitDestructor(ClassDecl);
5721   }
5722 }
5723 
ActOnReenterDeclaratorTemplateScope(Scope * S,DeclaratorDecl * D)5724 void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
5725   if (!D)
5726     return;
5727 
5728   int NumParamList = D->getNumTemplateParameterLists();
5729   for (int i = 0; i < NumParamList; i++) {
5730     TemplateParameterList* Params = D->getTemplateParameterList(i);
5731     for (TemplateParameterList::iterator Param = Params->begin(),
5732                                       ParamEnd = Params->end();
5733           Param != ParamEnd; ++Param) {
5734       NamedDecl *Named = cast<NamedDecl>(*Param);
5735       if (Named->getDeclName()) {
5736         S->AddDecl(Named);
5737         IdResolver.AddDecl(Named);
5738       }
5739     }
5740   }
5741 }
5742 
ActOnReenterTemplateScope(Scope * S,Decl * D)5743 void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
5744   if (!D)
5745     return;
5746 
5747   TemplateParameterList *Params = 0;
5748   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
5749     Params = Template->getTemplateParameters();
5750   else if (ClassTemplatePartialSpecializationDecl *PartialSpec
5751            = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
5752     Params = PartialSpec->getTemplateParameters();
5753   else
5754     return;
5755 
5756   for (TemplateParameterList::iterator Param = Params->begin(),
5757                                     ParamEnd = Params->end();
5758        Param != ParamEnd; ++Param) {
5759     NamedDecl *Named = cast<NamedDecl>(*Param);
5760     if (Named->getDeclName()) {
5761       S->AddDecl(Named);
5762       IdResolver.AddDecl(Named);
5763     }
5764   }
5765 }
5766 
ActOnStartDelayedMemberDeclarations(Scope * S,Decl * RecordD)5767 void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5768   if (!RecordD) return;
5769   AdjustDeclIfTemplate(RecordD);
5770   CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
5771   PushDeclContext(S, Record);
5772 }
5773 
ActOnFinishDelayedMemberDeclarations(Scope * S,Decl * RecordD)5774 void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5775   if (!RecordD) return;
5776   PopDeclContext();
5777 }
5778 
5779 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
5780 /// parsing a top-level (non-nested) C++ class, and we are now
5781 /// parsing those parts of the given Method declaration that could
5782 /// not be parsed earlier (C++ [class.mem]p2), such as default
5783 /// arguments. This action should enter the scope of the given
5784 /// Method declaration as if we had just parsed the qualified method
5785 /// name. However, it should not bring the parameters into scope;
5786 /// that will be performed by ActOnDelayedCXXMethodParameter.
ActOnStartDelayedCXXMethodDeclaration(Scope * S,Decl * MethodD)5787 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5788 }
5789 
5790 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
5791 /// C++ method declaration. We're (re-)introducing the given
5792 /// function parameter into scope for use in parsing later parts of
5793 /// the method declaration. For example, we could see an
5794 /// ActOnParamDefaultArgument event for this parameter.
ActOnDelayedCXXMethodParameter(Scope * S,Decl * ParamD)5795 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
5796   if (!ParamD)
5797     return;
5798 
5799   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
5800 
5801   // If this parameter has an unparsed default argument, clear it out
5802   // to make way for the parsed default argument.
5803   if (Param->hasUnparsedDefaultArg())
5804     Param->setDefaultArg(0);
5805 
5806   S->AddDecl(Param);
5807   if (Param->getDeclName())
5808     IdResolver.AddDecl(Param);
5809 }
5810 
5811 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
5812 /// processing the delayed method declaration for Method. The method
5813 /// declaration is now considered finished. There may be a separate
5814 /// ActOnStartOfFunctionDef action later (not necessarily
5815 /// immediately!) for this method, if it was also defined inside the
5816 /// class body.
ActOnFinishDelayedCXXMethodDeclaration(Scope * S,Decl * MethodD)5817 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5818   if (!MethodD)
5819     return;
5820 
5821   AdjustDeclIfTemplate(MethodD);
5822 
5823   FunctionDecl *Method = cast<FunctionDecl>(MethodD);
5824 
5825   // Now that we have our default arguments, check the constructor
5826   // again. It could produce additional diagnostics or affect whether
5827   // the class has implicitly-declared destructors, among other
5828   // things.
5829   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
5830     CheckConstructor(Constructor);
5831 
5832   // Check the default arguments, which we may have added.
5833   if (!Method->isInvalidDecl())
5834     CheckCXXDefaultArguments(Method);
5835 }
5836 
5837 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
5838 /// the well-formedness of the constructor declarator @p D with type @p
5839 /// R. If there are any errors in the declarator, this routine will
5840 /// emit diagnostics and set the invalid bit to true.  In any case, the type
5841 /// will be updated to reflect a well-formed type for the constructor and
5842 /// returned.
CheckConstructorDeclarator(Declarator & D,QualType R,StorageClass & SC)5843 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
5844                                           StorageClass &SC) {
5845   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
5846 
5847   // C++ [class.ctor]p3:
5848   //   A constructor shall not be virtual (10.3) or static (9.4). A
5849   //   constructor can be invoked for a const, volatile or const
5850   //   volatile object. A constructor shall not be declared const,
5851   //   volatile, or const volatile (9.3.2).
5852   if (isVirtual) {
5853     if (!D.isInvalidType())
5854       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5855         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
5856         << SourceRange(D.getIdentifierLoc());
5857     D.setInvalidType();
5858   }
5859   if (SC == SC_Static) {
5860     if (!D.isInvalidType())
5861       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5862         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5863         << SourceRange(D.getIdentifierLoc());
5864     D.setInvalidType();
5865     SC = SC_None;
5866   }
5867 
5868   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5869   if (FTI.TypeQuals != 0) {
5870     if (FTI.TypeQuals & Qualifiers::Const)
5871       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5872         << "const" << SourceRange(D.getIdentifierLoc());
5873     if (FTI.TypeQuals & Qualifiers::Volatile)
5874       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5875         << "volatile" << SourceRange(D.getIdentifierLoc());
5876     if (FTI.TypeQuals & Qualifiers::Restrict)
5877       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5878         << "restrict" << SourceRange(D.getIdentifierLoc());
5879     D.setInvalidType();
5880   }
5881 
5882   // C++0x [class.ctor]p4:
5883   //   A constructor shall not be declared with a ref-qualifier.
5884   if (FTI.hasRefQualifier()) {
5885     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
5886       << FTI.RefQualifierIsLValueRef
5887       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5888     D.setInvalidType();
5889   }
5890 
5891   // Rebuild the function type "R" without any type qualifiers (in
5892   // case any of the errors above fired) and with "void" as the
5893   // return type, since constructors don't have return types.
5894   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5895   if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
5896     return R;
5897 
5898   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
5899   EPI.TypeQuals = 0;
5900   EPI.RefQualifier = RQ_None;
5901 
5902   return Context.getFunctionType(Context.VoidTy, Proto->getArgTypes(), EPI);
5903 }
5904 
5905 /// CheckConstructor - Checks a fully-formed constructor for
5906 /// well-formedness, issuing any diagnostics required. Returns true if
5907 /// the constructor declarator is invalid.
CheckConstructor(CXXConstructorDecl * Constructor)5908 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
5909   CXXRecordDecl *ClassDecl
5910     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
5911   if (!ClassDecl)
5912     return Constructor->setInvalidDecl();
5913 
5914   // C++ [class.copy]p3:
5915   //   A declaration of a constructor for a class X is ill-formed if
5916   //   its first parameter is of type (optionally cv-qualified) X and
5917   //   either there are no other parameters or else all other
5918   //   parameters have default arguments.
5919   if (!Constructor->isInvalidDecl() &&
5920       ((Constructor->getNumParams() == 1) ||
5921        (Constructor->getNumParams() > 1 &&
5922         Constructor->getParamDecl(1)->hasDefaultArg())) &&
5923       Constructor->getTemplateSpecializationKind()
5924                                               != TSK_ImplicitInstantiation) {
5925     QualType ParamType = Constructor->getParamDecl(0)->getType();
5926     QualType ClassTy = Context.getTagDeclType(ClassDecl);
5927     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
5928       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
5929       const char *ConstRef
5930         = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
5931                                                         : " const &";
5932       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
5933         << FixItHint::CreateInsertion(ParamLoc, ConstRef);
5934 
5935       // FIXME: Rather that making the constructor invalid, we should endeavor
5936       // to fix the type.
5937       Constructor->setInvalidDecl();
5938     }
5939   }
5940 }
5941 
5942 /// CheckDestructor - Checks a fully-formed destructor definition for
5943 /// well-formedness, issuing any diagnostics required.  Returns true
5944 /// on error.
CheckDestructor(CXXDestructorDecl * Destructor)5945 bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
5946   CXXRecordDecl *RD = Destructor->getParent();
5947 
5948   if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
5949     SourceLocation Loc;
5950 
5951     if (!Destructor->isImplicit())
5952       Loc = Destructor->getLocation();
5953     else
5954       Loc = RD->getLocation();
5955 
5956     // If we have a virtual destructor, look up the deallocation function
5957     FunctionDecl *OperatorDelete = 0;
5958     DeclarationName Name =
5959     Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5960     if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
5961       return true;
5962 
5963     MarkFunctionReferenced(Loc, OperatorDelete);
5964 
5965     Destructor->setOperatorDelete(OperatorDelete);
5966   }
5967 
5968   return false;
5969 }
5970 
5971 static inline bool
FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo & FTI)5972 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
5973   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5974           FTI.ArgInfo[0].Param &&
5975           cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
5976 }
5977 
5978 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5979 /// the well-formednes of the destructor declarator @p D with type @p
5980 /// R. If there are any errors in the declarator, this routine will
5981 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
5982 /// will be updated to reflect a well-formed type for the destructor and
5983 /// returned.
CheckDestructorDeclarator(Declarator & D,QualType R,StorageClass & SC)5984 QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
5985                                          StorageClass& SC) {
5986   // C++ [class.dtor]p1:
5987   //   [...] A typedef-name that names a class is a class-name
5988   //   (7.1.3); however, a typedef-name that names a class shall not
5989   //   be used as the identifier in the declarator for a destructor
5990   //   declaration.
5991   QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
5992   if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
5993     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5994       << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
5995   else if (const TemplateSpecializationType *TST =
5996              DeclaratorType->getAs<TemplateSpecializationType>())
5997     if (TST->isTypeAlias())
5998       Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5999         << DeclaratorType << 1;
6000 
6001   // C++ [class.dtor]p2:
6002   //   A destructor is used to destroy objects of its class type. A
6003   //   destructor takes no parameters, and no return type can be
6004   //   specified for it (not even void). The address of a destructor
6005   //   shall not be taken. A destructor shall not be static. A
6006   //   destructor can be invoked for a const, volatile or const
6007   //   volatile object. A destructor shall not be declared const,
6008   //   volatile or const volatile (9.3.2).
6009   if (SC == SC_Static) {
6010     if (!D.isInvalidType())
6011       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
6012         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6013         << SourceRange(D.getIdentifierLoc())
6014         << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
6015 
6016     SC = SC_None;
6017   }
6018   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6019     // Destructors don't have return types, but the parser will
6020     // happily parse something like:
6021     //
6022     //   class X {
6023     //     float ~X();
6024     //   };
6025     //
6026     // The return type will be eliminated later.
6027     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
6028       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6029       << SourceRange(D.getIdentifierLoc());
6030   }
6031 
6032   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
6033   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
6034     if (FTI.TypeQuals & Qualifiers::Const)
6035       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6036         << "const" << SourceRange(D.getIdentifierLoc());
6037     if (FTI.TypeQuals & Qualifiers::Volatile)
6038       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6039         << "volatile" << SourceRange(D.getIdentifierLoc());
6040     if (FTI.TypeQuals & Qualifiers::Restrict)
6041       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
6042         << "restrict" << SourceRange(D.getIdentifierLoc());
6043     D.setInvalidType();
6044   }
6045 
6046   // C++0x [class.dtor]p2:
6047   //   A destructor shall not be declared with a ref-qualifier.
6048   if (FTI.hasRefQualifier()) {
6049     Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
6050       << FTI.RefQualifierIsLValueRef
6051       << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
6052     D.setInvalidType();
6053   }
6054 
6055   // Make sure we don't have any parameters.
6056   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
6057     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
6058 
6059     // Delete the parameters.
6060     FTI.freeArgs();
6061     D.setInvalidType();
6062   }
6063 
6064   // Make sure the destructor isn't variadic.
6065   if (FTI.isVariadic) {
6066     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
6067     D.setInvalidType();
6068   }
6069 
6070   // Rebuild the function type "R" without any type qualifiers or
6071   // parameters (in case any of the errors above fired) and with
6072   // "void" as the return type, since destructors don't have return
6073   // types.
6074   if (!D.isInvalidType())
6075     return R;
6076 
6077   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6078   FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
6079   EPI.Variadic = false;
6080   EPI.TypeQuals = 0;
6081   EPI.RefQualifier = RQ_None;
6082   return Context.getFunctionType(Context.VoidTy, None, EPI);
6083 }
6084 
6085 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
6086 /// well-formednes of the conversion function declarator @p D with
6087 /// type @p R. If there are any errors in the declarator, this routine
6088 /// will emit diagnostics and return true. Otherwise, it will return
6089 /// false. Either way, the type @p R will be updated to reflect a
6090 /// well-formed type for the conversion operator.
CheckConversionDeclarator(Declarator & D,QualType & R,StorageClass & SC)6091 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
6092                                      StorageClass& SC) {
6093   // C++ [class.conv.fct]p1:
6094   //   Neither parameter types nor return type can be specified. The
6095   //   type of a conversion function (8.3.5) is "function taking no
6096   //   parameter returning conversion-type-id."
6097   if (SC == SC_Static) {
6098     if (!D.isInvalidType())
6099       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
6100         << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6101         << D.getName().getSourceRange();
6102     D.setInvalidType();
6103     SC = SC_None;
6104   }
6105 
6106   QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
6107 
6108   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6109     // Conversion functions don't have return types, but the parser will
6110     // happily parse something like:
6111     //
6112     //   class X {
6113     //     float operator bool();
6114     //   };
6115     //
6116     // The return type will be changed later anyway.
6117     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
6118       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6119       << SourceRange(D.getIdentifierLoc());
6120     D.setInvalidType();
6121   }
6122 
6123   const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6124 
6125   // Make sure we don't have any parameters.
6126   if (Proto->getNumArgs() > 0) {
6127     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
6128 
6129     // Delete the parameters.
6130     D.getFunctionTypeInfo().freeArgs();
6131     D.setInvalidType();
6132   } else if (Proto->isVariadic()) {
6133     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
6134     D.setInvalidType();
6135   }
6136 
6137   // Diagnose "&operator bool()" and other such nonsense.  This
6138   // is actually a gcc extension which we don't support.
6139   if (Proto->getResultType() != ConvType) {
6140     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
6141       << Proto->getResultType();
6142     D.setInvalidType();
6143     ConvType = Proto->getResultType();
6144   }
6145 
6146   // C++ [class.conv.fct]p4:
6147   //   The conversion-type-id shall not represent a function type nor
6148   //   an array type.
6149   if (ConvType->isArrayType()) {
6150     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
6151     ConvType = Context.getPointerType(ConvType);
6152     D.setInvalidType();
6153   } else if (ConvType->isFunctionType()) {
6154     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
6155     ConvType = Context.getPointerType(ConvType);
6156     D.setInvalidType();
6157   }
6158 
6159   // Rebuild the function type "R" without any parameters (in case any
6160   // of the errors above fired) and with the conversion type as the
6161   // return type.
6162   if (D.isInvalidType())
6163     R = Context.getFunctionType(ConvType, None, Proto->getExtProtoInfo());
6164 
6165   // C++0x explicit conversion operators.
6166   if (D.getDeclSpec().isExplicitSpecified())
6167     Diag(D.getDeclSpec().getExplicitSpecLoc(),
6168          getLangOpts().CPlusPlus11 ?
6169            diag::warn_cxx98_compat_explicit_conversion_functions :
6170            diag::ext_explicit_conversion_functions)
6171       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
6172 }
6173 
6174 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
6175 /// the declaration of the given C++ conversion function. This routine
6176 /// is responsible for recording the conversion function in the C++
6177 /// class, if possible.
ActOnConversionDeclarator(CXXConversionDecl * Conversion)6178 Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
6179   assert(Conversion && "Expected to receive a conversion function declaration");
6180 
6181   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
6182 
6183   // Make sure we aren't redeclaring the conversion function.
6184   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
6185 
6186   // C++ [class.conv.fct]p1:
6187   //   [...] A conversion function is never used to convert a
6188   //   (possibly cv-qualified) object to the (possibly cv-qualified)
6189   //   same object type (or a reference to it), to a (possibly
6190   //   cv-qualified) base class of that type (or a reference to it),
6191   //   or to (possibly cv-qualified) void.
6192   // FIXME: Suppress this warning if the conversion function ends up being a
6193   // virtual function that overrides a virtual function in a base class.
6194   QualType ClassType
6195     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6196   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
6197     ConvType = ConvTypeRef->getPointeeType();
6198   if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
6199       Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
6200     /* Suppress diagnostics for instantiations. */;
6201   else if (ConvType->isRecordType()) {
6202     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
6203     if (ConvType == ClassType)
6204       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
6205         << ClassType;
6206     else if (IsDerivedFrom(ClassType, ConvType))
6207       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
6208         <<  ClassType << ConvType;
6209   } else if (ConvType->isVoidType()) {
6210     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
6211       << ClassType << ConvType;
6212   }
6213 
6214   if (FunctionTemplateDecl *ConversionTemplate
6215                                 = Conversion->getDescribedFunctionTemplate())
6216     return ConversionTemplate;
6217 
6218   return Conversion;
6219 }
6220 
6221 //===----------------------------------------------------------------------===//
6222 // Namespace Handling
6223 //===----------------------------------------------------------------------===//
6224 
6225 /// \brief Diagnose a mismatch in 'inline' qualifiers when a namespace is
6226 /// reopened.
DiagnoseNamespaceInlineMismatch(Sema & S,SourceLocation KeywordLoc,SourceLocation Loc,IdentifierInfo * II,bool * IsInline,NamespaceDecl * PrevNS)6227 static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
6228                                             SourceLocation Loc,
6229                                             IdentifierInfo *II, bool *IsInline,
6230                                             NamespaceDecl *PrevNS) {
6231   assert(*IsInline != PrevNS->isInline());
6232 
6233   // HACK: Work around a bug in libstdc++4.6's <atomic>, where
6234   // std::__atomic[0,1,2] are defined as non-inline namespaces, then reopened as
6235   // inline namespaces, with the intention of bringing names into namespace std.
6236   //
6237   // We support this just well enough to get that case working; this is not
6238   // sufficient to support reopening namespaces as inline in general.
6239   if (*IsInline && II && II->getName().startswith("__atomic") &&
6240       S.getSourceManager().isInSystemHeader(Loc)) {
6241     // Mark all prior declarations of the namespace as inline.
6242     for (NamespaceDecl *NS = PrevNS->getMostRecentDecl(); NS;
6243          NS = NS->getPreviousDecl())
6244       NS->setInline(*IsInline);
6245     // Patch up the lookup table for the containing namespace. This isn't really
6246     // correct, but it's good enough for this particular case.
6247     for (DeclContext::decl_iterator I = PrevNS->decls_begin(),
6248                                     E = PrevNS->decls_end(); I != E; ++I)
6249       if (NamedDecl *ND = dyn_cast<NamedDecl>(*I))
6250         PrevNS->getParent()->makeDeclVisibleInContext(ND);
6251     return;
6252   }
6253 
6254   if (PrevNS->isInline())
6255     // The user probably just forgot the 'inline', so suggest that it
6256     // be added back.
6257     S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
6258       << FixItHint::CreateInsertion(KeywordLoc, "inline ");
6259   else
6260     S.Diag(Loc, diag::err_inline_namespace_mismatch)
6261       << IsInline;
6262 
6263   S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
6264   *IsInline = PrevNS->isInline();
6265 }
6266 
6267 /// ActOnStartNamespaceDef - This is called at the start of a namespace
6268 /// definition.
ActOnStartNamespaceDef(Scope * NamespcScope,SourceLocation InlineLoc,SourceLocation NamespaceLoc,SourceLocation IdentLoc,IdentifierInfo * II,SourceLocation LBrace,AttributeList * AttrList)6269 Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
6270                                    SourceLocation InlineLoc,
6271                                    SourceLocation NamespaceLoc,
6272                                    SourceLocation IdentLoc,
6273                                    IdentifierInfo *II,
6274                                    SourceLocation LBrace,
6275                                    AttributeList *AttrList) {
6276   SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
6277   // For anonymous namespace, take the location of the left brace.
6278   SourceLocation Loc = II ? IdentLoc : LBrace;
6279   bool IsInline = InlineLoc.isValid();
6280   bool IsInvalid = false;
6281   bool IsStd = false;
6282   bool AddToKnown = false;
6283   Scope *DeclRegionScope = NamespcScope->getParent();
6284 
6285   NamespaceDecl *PrevNS = 0;
6286   if (II) {
6287     // C++ [namespace.def]p2:
6288     //   The identifier in an original-namespace-definition shall not
6289     //   have been previously defined in the declarative region in
6290     //   which the original-namespace-definition appears. The
6291     //   identifier in an original-namespace-definition is the name of
6292     //   the namespace. Subsequently in that declarative region, it is
6293     //   treated as an original-namespace-name.
6294     //
6295     // Since namespace names are unique in their scope, and we don't
6296     // look through using directives, just look for any ordinary names.
6297 
6298     const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
6299     Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
6300     Decl::IDNS_Namespace;
6301     NamedDecl *PrevDecl = 0;
6302     DeclContext::lookup_result R = CurContext->getRedeclContext()->lookup(II);
6303     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
6304          ++I) {
6305       if ((*I)->getIdentifierNamespace() & IDNS) {
6306         PrevDecl = *I;
6307         break;
6308       }
6309     }
6310 
6311     PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
6312 
6313     if (PrevNS) {
6314       // This is an extended namespace definition.
6315       if (IsInline != PrevNS->isInline())
6316         DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
6317                                         &IsInline, PrevNS);
6318     } else if (PrevDecl) {
6319       // This is an invalid name redefinition.
6320       Diag(Loc, diag::err_redefinition_different_kind)
6321         << II;
6322       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6323       IsInvalid = true;
6324       // Continue on to push Namespc as current DeclContext and return it.
6325     } else if (II->isStr("std") &&
6326                CurContext->getRedeclContext()->isTranslationUnit()) {
6327       // This is the first "real" definition of the namespace "std", so update
6328       // our cache of the "std" namespace to point at this definition.
6329       PrevNS = getStdNamespace();
6330       IsStd = true;
6331       AddToKnown = !IsInline;
6332     } else {
6333       // We've seen this namespace for the first time.
6334       AddToKnown = !IsInline;
6335     }
6336   } else {
6337     // Anonymous namespaces.
6338 
6339     // Determine whether the parent already has an anonymous namespace.
6340     DeclContext *Parent = CurContext->getRedeclContext();
6341     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6342       PrevNS = TU->getAnonymousNamespace();
6343     } else {
6344       NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
6345       PrevNS = ND->getAnonymousNamespace();
6346     }
6347 
6348     if (PrevNS && IsInline != PrevNS->isInline())
6349       DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
6350                                       &IsInline, PrevNS);
6351   }
6352 
6353   NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
6354                                                  StartLoc, Loc, II, PrevNS);
6355   if (IsInvalid)
6356     Namespc->setInvalidDecl();
6357 
6358   ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
6359 
6360   // FIXME: Should we be merging attributes?
6361   if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
6362     PushNamespaceVisibilityAttr(Attr, Loc);
6363 
6364   if (IsStd)
6365     StdNamespace = Namespc;
6366   if (AddToKnown)
6367     KnownNamespaces[Namespc] = false;
6368 
6369   if (II) {
6370     PushOnScopeChains(Namespc, DeclRegionScope);
6371   } else {
6372     // Link the anonymous namespace into its parent.
6373     DeclContext *Parent = CurContext->getRedeclContext();
6374     if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6375       TU->setAnonymousNamespace(Namespc);
6376     } else {
6377       cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
6378     }
6379 
6380     CurContext->addDecl(Namespc);
6381 
6382     // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
6383     //   behaves as if it were replaced by
6384     //     namespace unique { /* empty body */ }
6385     //     using namespace unique;
6386     //     namespace unique { namespace-body }
6387     //   where all occurrences of 'unique' in a translation unit are
6388     //   replaced by the same identifier and this identifier differs
6389     //   from all other identifiers in the entire program.
6390 
6391     // We just create the namespace with an empty name and then add an
6392     // implicit using declaration, just like the standard suggests.
6393     //
6394     // CodeGen enforces the "universally unique" aspect by giving all
6395     // declarations semantically contained within an anonymous
6396     // namespace internal linkage.
6397 
6398     if (!PrevNS) {
6399       UsingDirectiveDecl* UD
6400         = UsingDirectiveDecl::Create(Context, Parent,
6401                                      /* 'using' */ LBrace,
6402                                      /* 'namespace' */ SourceLocation(),
6403                                      /* qualifier */ NestedNameSpecifierLoc(),
6404                                      /* identifier */ SourceLocation(),
6405                                      Namespc,
6406                                      /* Ancestor */ Parent);
6407       UD->setImplicit();
6408       Parent->addDecl(UD);
6409     }
6410   }
6411 
6412   ActOnDocumentableDecl(Namespc);
6413 
6414   // Although we could have an invalid decl (i.e. the namespace name is a
6415   // redefinition), push it as current DeclContext and try to continue parsing.
6416   // FIXME: We should be able to push Namespc here, so that the each DeclContext
6417   // for the namespace has the declarations that showed up in that particular
6418   // namespace definition.
6419   PushDeclContext(NamespcScope, Namespc);
6420   return Namespc;
6421 }
6422 
6423 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
6424 /// is a namespace alias, returns the namespace it points to.
getNamespaceDecl(NamedDecl * D)6425 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
6426   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
6427     return AD->getNamespace();
6428   return dyn_cast_or_null<NamespaceDecl>(D);
6429 }
6430 
6431 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
6432 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
ActOnFinishNamespaceDef(Decl * Dcl,SourceLocation RBrace)6433 void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
6434   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
6435   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
6436   Namespc->setRBraceLoc(RBrace);
6437   PopDeclContext();
6438   if (Namespc->hasAttr<VisibilityAttr>())
6439     PopPragmaVisibility(true, RBrace);
6440 }
6441 
getStdBadAlloc() const6442 CXXRecordDecl *Sema::getStdBadAlloc() const {
6443   return cast_or_null<CXXRecordDecl>(
6444                                   StdBadAlloc.get(Context.getExternalSource()));
6445 }
6446 
getStdNamespace() const6447 NamespaceDecl *Sema::getStdNamespace() const {
6448   return cast_or_null<NamespaceDecl>(
6449                                  StdNamespace.get(Context.getExternalSource()));
6450 }
6451 
6452 /// \brief Retrieve the special "std" namespace, which may require us to
6453 /// implicitly define the namespace.
getOrCreateStdNamespace()6454 NamespaceDecl *Sema::getOrCreateStdNamespace() {
6455   if (!StdNamespace) {
6456     // The "std" namespace has not yet been defined, so build one implicitly.
6457     StdNamespace = NamespaceDecl::Create(Context,
6458                                          Context.getTranslationUnitDecl(),
6459                                          /*Inline=*/false,
6460                                          SourceLocation(), SourceLocation(),
6461                                          &PP.getIdentifierTable().get("std"),
6462                                          /*PrevDecl=*/0);
6463     getStdNamespace()->setImplicit(true);
6464   }
6465 
6466   return getStdNamespace();
6467 }
6468 
isStdInitializerList(QualType Ty,QualType * Element)6469 bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
6470   assert(getLangOpts().CPlusPlus &&
6471          "Looking for std::initializer_list outside of C++.");
6472 
6473   // We're looking for implicit instantiations of
6474   // template <typename E> class std::initializer_list.
6475 
6476   if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
6477     return false;
6478 
6479   ClassTemplateDecl *Template = 0;
6480   const TemplateArgument *Arguments = 0;
6481 
6482   if (const RecordType *RT = Ty->getAs<RecordType>()) {
6483 
6484     ClassTemplateSpecializationDecl *Specialization =
6485         dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
6486     if (!Specialization)
6487       return false;
6488 
6489     Template = Specialization->getSpecializedTemplate();
6490     Arguments = Specialization->getTemplateArgs().data();
6491   } else if (const TemplateSpecializationType *TST =
6492                  Ty->getAs<TemplateSpecializationType>()) {
6493     Template = dyn_cast_or_null<ClassTemplateDecl>(
6494         TST->getTemplateName().getAsTemplateDecl());
6495     Arguments = TST->getArgs();
6496   }
6497   if (!Template)
6498     return false;
6499 
6500   if (!StdInitializerList) {
6501     // Haven't recognized std::initializer_list yet, maybe this is it.
6502     CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
6503     if (TemplateClass->getIdentifier() !=
6504             &PP.getIdentifierTable().get("initializer_list") ||
6505         !getStdNamespace()->InEnclosingNamespaceSetOf(
6506             TemplateClass->getDeclContext()))
6507       return false;
6508     // This is a template called std::initializer_list, but is it the right
6509     // template?
6510     TemplateParameterList *Params = Template->getTemplateParameters();
6511     if (Params->getMinRequiredArguments() != 1)
6512       return false;
6513     if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
6514       return false;
6515 
6516     // It's the right template.
6517     StdInitializerList = Template;
6518   }
6519 
6520   if (Template != StdInitializerList)
6521     return false;
6522 
6523   // This is an instance of std::initializer_list. Find the argument type.
6524   if (Element)
6525     *Element = Arguments[0].getAsType();
6526   return true;
6527 }
6528 
LookupStdInitializerList(Sema & S,SourceLocation Loc)6529 static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
6530   NamespaceDecl *Std = S.getStdNamespace();
6531   if (!Std) {
6532     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6533     return 0;
6534   }
6535 
6536   LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
6537                       Loc, Sema::LookupOrdinaryName);
6538   if (!S.LookupQualifiedName(Result, Std)) {
6539     S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6540     return 0;
6541   }
6542   ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
6543   if (!Template) {
6544     Result.suppressDiagnostics();
6545     // We found something weird. Complain about the first thing we found.
6546     NamedDecl *Found = *Result.begin();
6547     S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
6548     return 0;
6549   }
6550 
6551   // We found some template called std::initializer_list. Now verify that it's
6552   // correct.
6553   TemplateParameterList *Params = Template->getTemplateParameters();
6554   if (Params->getMinRequiredArguments() != 1 ||
6555       !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6556     S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
6557     return 0;
6558   }
6559 
6560   return Template;
6561 }
6562 
BuildStdInitializerList(QualType Element,SourceLocation Loc)6563 QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
6564   if (!StdInitializerList) {
6565     StdInitializerList = LookupStdInitializerList(*this, Loc);
6566     if (!StdInitializerList)
6567       return QualType();
6568   }
6569 
6570   TemplateArgumentListInfo Args(Loc, Loc);
6571   Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
6572                                        Context.getTrivialTypeSourceInfo(Element,
6573                                                                         Loc)));
6574   return Context.getCanonicalType(
6575       CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
6576 }
6577 
isInitListConstructor(const CXXConstructorDecl * Ctor)6578 bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
6579   // C++ [dcl.init.list]p2:
6580   //   A constructor is an initializer-list constructor if its first parameter
6581   //   is of type std::initializer_list<E> or reference to possibly cv-qualified
6582   //   std::initializer_list<E> for some type E, and either there are no other
6583   //   parameters or else all other parameters have default arguments.
6584   if (Ctor->getNumParams() < 1 ||
6585       (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
6586     return false;
6587 
6588   QualType ArgType = Ctor->getParamDecl(0)->getType();
6589   if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
6590     ArgType = RT->getPointeeType().getUnqualifiedType();
6591 
6592   return isStdInitializerList(ArgType, 0);
6593 }
6594 
6595 /// \brief Determine whether a using statement is in a context where it will be
6596 /// apply in all contexts.
IsUsingDirectiveInToplevelContext(DeclContext * CurContext)6597 static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
6598   switch (CurContext->getDeclKind()) {
6599     case Decl::TranslationUnit:
6600       return true;
6601     case Decl::LinkageSpec:
6602       return IsUsingDirectiveInToplevelContext(CurContext->getParent());
6603     default:
6604       return false;
6605   }
6606 }
6607 
6608 namespace {
6609 
6610 // Callback to only accept typo corrections that are namespaces.
6611 class NamespaceValidatorCCC : public CorrectionCandidateCallback {
6612 public:
ValidateCandidate(const TypoCorrection & candidate)6613   bool ValidateCandidate(const TypoCorrection &candidate) LLVM_OVERRIDE {
6614     if (NamedDecl *ND = candidate.getCorrectionDecl())
6615       return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
6616     return false;
6617   }
6618 };
6619 
6620 }
6621 
TryNamespaceTypoCorrection(Sema & S,LookupResult & R,Scope * Sc,CXXScopeSpec & SS,SourceLocation IdentLoc,IdentifierInfo * Ident)6622 static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
6623                                        CXXScopeSpec &SS,
6624                                        SourceLocation IdentLoc,
6625                                        IdentifierInfo *Ident) {
6626   NamespaceValidatorCCC Validator;
6627   R.clear();
6628   if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
6629                                                R.getLookupKind(), Sc, &SS,
6630                                                Validator)) {
6631     std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
6632     std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
6633     if (DeclContext *DC = S.computeDeclContext(SS, false)) {
6634       bool droppedSpecifier = Corrected.WillReplaceSpecifier() &&
6635                               Ident->getName().equals(CorrectedStr);
6636       S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
6637           << Ident << DC << droppedSpecifier << CorrectedQuotedStr
6638           << SS.getRange() << FixItHint::CreateReplacement(
6639                                   Corrected.getCorrectionRange(), CorrectedStr);
6640     } else {
6641       S.Diag(IdentLoc, diag::err_using_directive_suggest)
6642         << Ident << CorrectedQuotedStr
6643         << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
6644     }
6645 
6646     S.Diag(Corrected.getCorrectionDecl()->getLocation(),
6647          diag::note_namespace_defined_here) << CorrectedQuotedStr;
6648 
6649     R.addDecl(Corrected.getCorrectionDecl());
6650     return true;
6651   }
6652   return false;
6653 }
6654 
ActOnUsingDirective(Scope * S,SourceLocation UsingLoc,SourceLocation NamespcLoc,CXXScopeSpec & SS,SourceLocation IdentLoc,IdentifierInfo * NamespcName,AttributeList * AttrList)6655 Decl *Sema::ActOnUsingDirective(Scope *S,
6656                                           SourceLocation UsingLoc,
6657                                           SourceLocation NamespcLoc,
6658                                           CXXScopeSpec &SS,
6659                                           SourceLocation IdentLoc,
6660                                           IdentifierInfo *NamespcName,
6661                                           AttributeList *AttrList) {
6662   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
6663   assert(NamespcName && "Invalid NamespcName.");
6664   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
6665 
6666   // This can only happen along a recovery path.
6667   while (S->getFlags() & Scope::TemplateParamScope)
6668     S = S->getParent();
6669   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6670 
6671   UsingDirectiveDecl *UDir = 0;
6672   NestedNameSpecifier *Qualifier = 0;
6673   if (SS.isSet())
6674     Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
6675 
6676   // Lookup namespace name.
6677   LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
6678   LookupParsedName(R, S, &SS);
6679   if (R.isAmbiguous())
6680     return 0;
6681 
6682   if (R.empty()) {
6683     R.clear();
6684     // Allow "using namespace std;" or "using namespace ::std;" even if
6685     // "std" hasn't been defined yet, for GCC compatibility.
6686     if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
6687         NamespcName->isStr("std")) {
6688       Diag(IdentLoc, diag::ext_using_undefined_std);
6689       R.addDecl(getOrCreateStdNamespace());
6690       R.resolveKind();
6691     }
6692     // Otherwise, attempt typo correction.
6693     else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
6694   }
6695 
6696   if (!R.empty()) {
6697     NamedDecl *Named = R.getFoundDecl();
6698     assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
6699         && "expected namespace decl");
6700     // C++ [namespace.udir]p1:
6701     //   A using-directive specifies that the names in the nominated
6702     //   namespace can be used in the scope in which the
6703     //   using-directive appears after the using-directive. During
6704     //   unqualified name lookup (3.4.1), the names appear as if they
6705     //   were declared in the nearest enclosing namespace which
6706     //   contains both the using-directive and the nominated
6707     //   namespace. [Note: in this context, "contains" means "contains
6708     //   directly or indirectly". ]
6709 
6710     // Find enclosing context containing both using-directive and
6711     // nominated namespace.
6712     NamespaceDecl *NS = getNamespaceDecl(Named);
6713     DeclContext *CommonAncestor = cast<DeclContext>(NS);
6714     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
6715       CommonAncestor = CommonAncestor->getParent();
6716 
6717     UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
6718                                       SS.getWithLocInContext(Context),
6719                                       IdentLoc, Named, CommonAncestor);
6720 
6721     if (IsUsingDirectiveInToplevelContext(CurContext) &&
6722         !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
6723       Diag(IdentLoc, diag::warn_using_directive_in_header);
6724     }
6725 
6726     PushUsingDirective(S, UDir);
6727   } else {
6728     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
6729   }
6730 
6731   if (UDir)
6732     ProcessDeclAttributeList(S, UDir, AttrList);
6733 
6734   return UDir;
6735 }
6736 
PushUsingDirective(Scope * S,UsingDirectiveDecl * UDir)6737 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
6738   // If the scope has an associated entity and the using directive is at
6739   // namespace or translation unit scope, add the UsingDirectiveDecl into
6740   // its lookup structure so qualified name lookup can find it.
6741   DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
6742   if (Ctx && !Ctx->isFunctionOrMethod())
6743     Ctx->addDecl(UDir);
6744   else
6745     // Otherwise, it is at block sope. The using-directives will affect lookup
6746     // only to the end of the scope.
6747     S->PushUsingDirective(UDir);
6748 }
6749 
6750 
ActOnUsingDeclaration(Scope * S,AccessSpecifier AS,bool HasUsingKeyword,SourceLocation UsingLoc,CXXScopeSpec & SS,UnqualifiedId & Name,AttributeList * AttrList,bool HasTypenameKeyword,SourceLocation TypenameLoc)6751 Decl *Sema::ActOnUsingDeclaration(Scope *S,
6752                                   AccessSpecifier AS,
6753                                   bool HasUsingKeyword,
6754                                   SourceLocation UsingLoc,
6755                                   CXXScopeSpec &SS,
6756                                   UnqualifiedId &Name,
6757                                   AttributeList *AttrList,
6758                                   bool HasTypenameKeyword,
6759                                   SourceLocation TypenameLoc) {
6760   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6761 
6762   switch (Name.getKind()) {
6763   case UnqualifiedId::IK_ImplicitSelfParam:
6764   case UnqualifiedId::IK_Identifier:
6765   case UnqualifiedId::IK_OperatorFunctionId:
6766   case UnqualifiedId::IK_LiteralOperatorId:
6767   case UnqualifiedId::IK_ConversionFunctionId:
6768     break;
6769 
6770   case UnqualifiedId::IK_ConstructorName:
6771   case UnqualifiedId::IK_ConstructorTemplateId:
6772     // C++11 inheriting constructors.
6773     Diag(Name.getLocStart(),
6774          getLangOpts().CPlusPlus11 ?
6775            diag::warn_cxx98_compat_using_decl_constructor :
6776            diag::err_using_decl_constructor)
6777       << SS.getRange();
6778 
6779     if (getLangOpts().CPlusPlus11) break;
6780 
6781     return 0;
6782 
6783   case UnqualifiedId::IK_DestructorName:
6784     Diag(Name.getLocStart(), diag::err_using_decl_destructor)
6785       << SS.getRange();
6786     return 0;
6787 
6788   case UnqualifiedId::IK_TemplateId:
6789     Diag(Name.getLocStart(), diag::err_using_decl_template_id)
6790       << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
6791     return 0;
6792   }
6793 
6794   DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
6795   DeclarationName TargetName = TargetNameInfo.getName();
6796   if (!TargetName)
6797     return 0;
6798 
6799   // Warn about access declarations.
6800   if (!HasUsingKeyword) {
6801     Diag(Name.getLocStart(),
6802          getLangOpts().CPlusPlus11 ? diag::err_access_decl
6803                                    : diag::warn_access_decl_deprecated)
6804       << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
6805   }
6806 
6807   if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
6808       DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
6809     return 0;
6810 
6811   NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
6812                                         TargetNameInfo, AttrList,
6813                                         /* IsInstantiation */ false,
6814                                         HasTypenameKeyword, TypenameLoc);
6815   if (UD)
6816     PushOnScopeChains(UD, S, /*AddToContext*/ false);
6817 
6818   return UD;
6819 }
6820 
6821 /// \brief Determine whether a using declaration considers the given
6822 /// declarations as "equivalent", e.g., if they are redeclarations of
6823 /// the same entity or are both typedefs of the same type.
6824 static bool
IsEquivalentForUsingDecl(ASTContext & Context,NamedDecl * D1,NamedDecl * D2,bool & SuppressRedeclaration)6825 IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
6826                          bool &SuppressRedeclaration) {
6827   if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
6828     SuppressRedeclaration = false;
6829     return true;
6830   }
6831 
6832   if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
6833     if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
6834       SuppressRedeclaration = true;
6835       return Context.hasSameType(TD1->getUnderlyingType(),
6836                                  TD2->getUnderlyingType());
6837     }
6838 
6839   return false;
6840 }
6841 
6842 
6843 /// Determines whether to create a using shadow decl for a particular
6844 /// decl, given the set of decls existing prior to this using lookup.
CheckUsingShadowDecl(UsingDecl * Using,NamedDecl * Orig,const LookupResult & Previous)6845 bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
6846                                 const LookupResult &Previous) {
6847   // Diagnose finding a decl which is not from a base class of the
6848   // current class.  We do this now because there are cases where this
6849   // function will silently decide not to build a shadow decl, which
6850   // will pre-empt further diagnostics.
6851   //
6852   // We don't need to do this in C++0x because we do the check once on
6853   // the qualifier.
6854   //
6855   // FIXME: diagnose the following if we care enough:
6856   //   struct A { int foo; };
6857   //   struct B : A { using A::foo; };
6858   //   template <class T> struct C : A {};
6859   //   template <class T> struct D : C<T> { using B::foo; } // <---
6860   // This is invalid (during instantiation) in C++03 because B::foo
6861   // resolves to the using decl in B, which is not a base class of D<T>.
6862   // We can't diagnose it immediately because C<T> is an unknown
6863   // specialization.  The UsingShadowDecl in D<T> then points directly
6864   // to A::foo, which will look well-formed when we instantiate.
6865   // The right solution is to not collapse the shadow-decl chain.
6866   if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
6867     DeclContext *OrigDC = Orig->getDeclContext();
6868 
6869     // Handle enums and anonymous structs.
6870     if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
6871     CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
6872     while (OrigRec->isAnonymousStructOrUnion())
6873       OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
6874 
6875     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
6876       if (OrigDC == CurContext) {
6877         Diag(Using->getLocation(),
6878              diag::err_using_decl_nested_name_specifier_is_current_class)
6879           << Using->getQualifierLoc().getSourceRange();
6880         Diag(Orig->getLocation(), diag::note_using_decl_target);
6881         return true;
6882       }
6883 
6884       Diag(Using->getQualifierLoc().getBeginLoc(),
6885            diag::err_using_decl_nested_name_specifier_is_not_base_class)
6886         << Using->getQualifier()
6887         << cast<CXXRecordDecl>(CurContext)
6888         << Using->getQualifierLoc().getSourceRange();
6889       Diag(Orig->getLocation(), diag::note_using_decl_target);
6890       return true;
6891     }
6892   }
6893 
6894   if (Previous.empty()) return false;
6895 
6896   NamedDecl *Target = Orig;
6897   if (isa<UsingShadowDecl>(Target))
6898     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6899 
6900   // If the target happens to be one of the previous declarations, we
6901   // don't have a conflict.
6902   //
6903   // FIXME: but we might be increasing its access, in which case we
6904   // should redeclare it.
6905   NamedDecl *NonTag = 0, *Tag = 0;
6906   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
6907          I != E; ++I) {
6908     NamedDecl *D = (*I)->getUnderlyingDecl();
6909     bool Result;
6910     if (IsEquivalentForUsingDecl(Context, D, Target, Result))
6911       return Result;
6912 
6913     (isa<TagDecl>(D) ? Tag : NonTag) = D;
6914   }
6915 
6916   if (Target->isFunctionOrFunctionTemplate()) {
6917     FunctionDecl *FD;
6918     if (isa<FunctionTemplateDecl>(Target))
6919       FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
6920     else
6921       FD = cast<FunctionDecl>(Target);
6922 
6923     NamedDecl *OldDecl = 0;
6924     switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
6925     case Ovl_Overload:
6926       return false;
6927 
6928     case Ovl_NonFunction:
6929       Diag(Using->getLocation(), diag::err_using_decl_conflict);
6930       break;
6931 
6932     // We found a decl with the exact signature.
6933     case Ovl_Match:
6934       // If we're in a record, we want to hide the target, so we
6935       // return true (without a diagnostic) to tell the caller not to
6936       // build a shadow decl.
6937       if (CurContext->isRecord())
6938         return true;
6939 
6940       // If we're not in a record, this is an error.
6941       Diag(Using->getLocation(), diag::err_using_decl_conflict);
6942       break;
6943     }
6944 
6945     Diag(Target->getLocation(), diag::note_using_decl_target);
6946     Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
6947     return true;
6948   }
6949 
6950   // Target is not a function.
6951 
6952   if (isa<TagDecl>(Target)) {
6953     // No conflict between a tag and a non-tag.
6954     if (!Tag) return false;
6955 
6956     Diag(Using->getLocation(), diag::err_using_decl_conflict);
6957     Diag(Target->getLocation(), diag::note_using_decl_target);
6958     Diag(Tag->getLocation(), diag::note_using_decl_conflict);
6959     return true;
6960   }
6961 
6962   // No conflict between a tag and a non-tag.
6963   if (!NonTag) return false;
6964 
6965   Diag(Using->getLocation(), diag::err_using_decl_conflict);
6966   Diag(Target->getLocation(), diag::note_using_decl_target);
6967   Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
6968   return true;
6969 }
6970 
6971 /// Builds a shadow declaration corresponding to a 'using' declaration.
BuildUsingShadowDecl(Scope * S,UsingDecl * UD,NamedDecl * Orig)6972 UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
6973                                             UsingDecl *UD,
6974                                             NamedDecl *Orig) {
6975 
6976   // If we resolved to another shadow declaration, just coalesce them.
6977   NamedDecl *Target = Orig;
6978   if (isa<UsingShadowDecl>(Target)) {
6979     Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6980     assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
6981   }
6982 
6983   UsingShadowDecl *Shadow
6984     = UsingShadowDecl::Create(Context, CurContext,
6985                               UD->getLocation(), UD, Target);
6986   UD->addShadowDecl(Shadow);
6987 
6988   Shadow->setAccess(UD->getAccess());
6989   if (Orig->isInvalidDecl() || UD->isInvalidDecl())
6990     Shadow->setInvalidDecl();
6991 
6992   if (S)
6993     PushOnScopeChains(Shadow, S);
6994   else
6995     CurContext->addDecl(Shadow);
6996 
6997 
6998   return Shadow;
6999 }
7000 
7001 /// Hides a using shadow declaration.  This is required by the current
7002 /// using-decl implementation when a resolvable using declaration in a
7003 /// class is followed by a declaration which would hide or override
7004 /// one or more of the using decl's targets; for example:
7005 ///
7006 ///   struct Base { void foo(int); };
7007 ///   struct Derived : Base {
7008 ///     using Base::foo;
7009 ///     void foo(int);
7010 ///   };
7011 ///
7012 /// The governing language is C++03 [namespace.udecl]p12:
7013 ///
7014 ///   When a using-declaration brings names from a base class into a
7015 ///   derived class scope, member functions in the derived class
7016 ///   override and/or hide member functions with the same name and
7017 ///   parameter types in a base class (rather than conflicting).
7018 ///
7019 /// There are two ways to implement this:
7020 ///   (1) optimistically create shadow decls when they're not hidden
7021 ///       by existing declarations, or
7022 ///   (2) don't create any shadow decls (or at least don't make them
7023 ///       visible) until we've fully parsed/instantiated the class.
7024 /// The problem with (1) is that we might have to retroactively remove
7025 /// a shadow decl, which requires several O(n) operations because the
7026 /// decl structures are (very reasonably) not designed for removal.
7027 /// (2) avoids this but is very fiddly and phase-dependent.
HideUsingShadowDecl(Scope * S,UsingShadowDecl * Shadow)7028 void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
7029   if (Shadow->getDeclName().getNameKind() ==
7030         DeclarationName::CXXConversionFunctionName)
7031     cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
7032 
7033   // Remove it from the DeclContext...
7034   Shadow->getDeclContext()->removeDecl(Shadow);
7035 
7036   // ...and the scope, if applicable...
7037   if (S) {
7038     S->RemoveDecl(Shadow);
7039     IdResolver.RemoveDecl(Shadow);
7040   }
7041 
7042   // ...and the using decl.
7043   Shadow->getUsingDecl()->removeShadowDecl(Shadow);
7044 
7045   // TODO: complain somehow if Shadow was used.  It shouldn't
7046   // be possible for this to happen, because...?
7047 }
7048 
7049 namespace {
7050 class UsingValidatorCCC : public CorrectionCandidateCallback {
7051 public:
UsingValidatorCCC(bool HasTypenameKeyword,bool IsInstantiation)7052   UsingValidatorCCC(bool HasTypenameKeyword, bool IsInstantiation)
7053       : HasTypenameKeyword(HasTypenameKeyword),
7054         IsInstantiation(IsInstantiation) {}
7055 
ValidateCandidate(const TypoCorrection & Candidate)7056   bool ValidateCandidate(const TypoCorrection &Candidate) LLVM_OVERRIDE {
7057     NamedDecl *ND = Candidate.getCorrectionDecl();
7058 
7059     // Keywords are not valid here.
7060     if (!ND || isa<NamespaceDecl>(ND))
7061       return false;
7062 
7063     // Completely unqualified names are invalid for a 'using' declaration.
7064     if (Candidate.WillReplaceSpecifier() && !Candidate.getCorrectionSpecifier())
7065       return false;
7066 
7067     if (isa<TypeDecl>(ND))
7068       return HasTypenameKeyword || !IsInstantiation;
7069 
7070     return !HasTypenameKeyword;
7071   }
7072 
7073 private:
7074   bool HasTypenameKeyword;
7075   bool IsInstantiation;
7076 };
7077 } // end anonymous namespace
7078 
7079 /// Builds a using declaration.
7080 ///
7081 /// \param IsInstantiation - Whether this call arises from an
7082 ///   instantiation of an unresolved using declaration.  We treat
7083 ///   the lookup differently for these declarations.
BuildUsingDeclaration(Scope * S,AccessSpecifier AS,SourceLocation UsingLoc,CXXScopeSpec & SS,const DeclarationNameInfo & NameInfo,AttributeList * AttrList,bool IsInstantiation,bool HasTypenameKeyword,SourceLocation TypenameLoc)7084 NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
7085                                        SourceLocation UsingLoc,
7086                                        CXXScopeSpec &SS,
7087                                        const DeclarationNameInfo &NameInfo,
7088                                        AttributeList *AttrList,
7089                                        bool IsInstantiation,
7090                                        bool HasTypenameKeyword,
7091                                        SourceLocation TypenameLoc) {
7092   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
7093   SourceLocation IdentLoc = NameInfo.getLoc();
7094   assert(IdentLoc.isValid() && "Invalid TargetName location.");
7095 
7096   // FIXME: We ignore attributes for now.
7097 
7098   if (SS.isEmpty()) {
7099     Diag(IdentLoc, diag::err_using_requires_qualname);
7100     return 0;
7101   }
7102 
7103   // Do the redeclaration lookup in the current scope.
7104   LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
7105                         ForRedeclaration);
7106   Previous.setHideTags(false);
7107   if (S) {
7108     LookupName(Previous, S);
7109 
7110     // It is really dumb that we have to do this.
7111     LookupResult::Filter F = Previous.makeFilter();
7112     while (F.hasNext()) {
7113       NamedDecl *D = F.next();
7114       if (!isDeclInScope(D, CurContext, S))
7115         F.erase();
7116     }
7117     F.done();
7118   } else {
7119     assert(IsInstantiation && "no scope in non-instantiation");
7120     assert(CurContext->isRecord() && "scope not record in instantiation");
7121     LookupQualifiedName(Previous, CurContext);
7122   }
7123 
7124   // Check for invalid redeclarations.
7125   if (CheckUsingDeclRedeclaration(UsingLoc, HasTypenameKeyword,
7126                                   SS, IdentLoc, Previous))
7127     return 0;
7128 
7129   // Check for bad qualifiers.
7130   if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
7131     return 0;
7132 
7133   DeclContext *LookupContext = computeDeclContext(SS);
7134   NamedDecl *D;
7135   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
7136   if (!LookupContext) {
7137     if (HasTypenameKeyword) {
7138       // FIXME: not all declaration name kinds are legal here
7139       D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
7140                                               UsingLoc, TypenameLoc,
7141                                               QualifierLoc,
7142                                               IdentLoc, NameInfo.getName());
7143     } else {
7144       D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
7145                                            QualifierLoc, NameInfo);
7146     }
7147   } else {
7148     D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
7149                           NameInfo, HasTypenameKeyword);
7150   }
7151   D->setAccess(AS);
7152   CurContext->addDecl(D);
7153 
7154   if (!LookupContext) return D;
7155   UsingDecl *UD = cast<UsingDecl>(D);
7156 
7157   if (RequireCompleteDeclContext(SS, LookupContext)) {
7158     UD->setInvalidDecl();
7159     return UD;
7160   }
7161 
7162   // The normal rules do not apply to inheriting constructor declarations.
7163   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
7164     if (CheckInheritingConstructorUsingDecl(UD))
7165       UD->setInvalidDecl();
7166     return UD;
7167   }
7168 
7169   // Otherwise, look up the target name.
7170 
7171   LookupResult R(*this, NameInfo, LookupOrdinaryName);
7172 
7173   // Unlike most lookups, we don't always want to hide tag
7174   // declarations: tag names are visible through the using declaration
7175   // even if hidden by ordinary names, *except* in a dependent context
7176   // where it's important for the sanity of two-phase lookup.
7177   if (!IsInstantiation)
7178     R.setHideTags(false);
7179 
7180   // For the purposes of this lookup, we have a base object type
7181   // equal to that of the current context.
7182   if (CurContext->isRecord()) {
7183     R.setBaseObjectType(
7184                    Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
7185   }
7186 
7187   LookupQualifiedName(R, LookupContext);
7188 
7189   // Try to correct typos if possible.
7190   if (R.empty()) {
7191     UsingValidatorCCC CCC(HasTypenameKeyword, IsInstantiation);
7192     if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(),
7193                                                R.getLookupKind(), S, &SS, CCC)){
7194       // We reject any correction for which ND would be NULL.
7195       NamedDecl *ND = Corrected.getCorrectionDecl();
7196       std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
7197       std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
7198       R.setLookupName(Corrected.getCorrection());
7199       R.addDecl(ND);
7200       // We reject candidates where droppedSpecifier == true, hence the
7201       // literal '0' below.
7202       Diag(R.getNameLoc(), diag::err_no_member_suggest)
7203         << NameInfo.getName() << LookupContext << 0
7204         << CorrectedQuotedStr << SS.getRange()
7205         << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
7206                                         CorrectedStr);
7207       Diag(ND->getLocation(), diag::note_previous_decl)
7208         << CorrectedQuotedStr;
7209     } else {
7210       Diag(IdentLoc, diag::err_no_member)
7211         << NameInfo.getName() << LookupContext << SS.getRange();
7212       UD->setInvalidDecl();
7213       return UD;
7214     }
7215   }
7216 
7217   if (R.isAmbiguous()) {
7218     UD->setInvalidDecl();
7219     return UD;
7220   }
7221 
7222   if (HasTypenameKeyword) {
7223     // If we asked for a typename and got a non-type decl, error out.
7224     if (!R.getAsSingle<TypeDecl>()) {
7225       Diag(IdentLoc, diag::err_using_typename_non_type);
7226       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
7227         Diag((*I)->getUnderlyingDecl()->getLocation(),
7228              diag::note_using_decl_target);
7229       UD->setInvalidDecl();
7230       return UD;
7231     }
7232   } else {
7233     // If we asked for a non-typename and we got a type, error out,
7234     // but only if this is an instantiation of an unresolved using
7235     // decl.  Otherwise just silently find the type name.
7236     if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
7237       Diag(IdentLoc, diag::err_using_dependent_value_is_type);
7238       Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
7239       UD->setInvalidDecl();
7240       return UD;
7241     }
7242   }
7243 
7244   // C++0x N2914 [namespace.udecl]p6:
7245   // A using-declaration shall not name a namespace.
7246   if (R.getAsSingle<NamespaceDecl>()) {
7247     Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
7248       << SS.getRange();
7249     UD->setInvalidDecl();
7250     return UD;
7251   }
7252 
7253   for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
7254     if (!CheckUsingShadowDecl(UD, *I, Previous))
7255       BuildUsingShadowDecl(S, UD, *I);
7256   }
7257 
7258   return UD;
7259 }
7260 
7261 /// Additional checks for a using declaration referring to a constructor name.
CheckInheritingConstructorUsingDecl(UsingDecl * UD)7262 bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
7263   assert(!UD->hasTypename() && "expecting a constructor name");
7264 
7265   const Type *SourceType = UD->getQualifier()->getAsType();
7266   assert(SourceType &&
7267          "Using decl naming constructor doesn't have type in scope spec.");
7268   CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
7269 
7270   // Check whether the named type is a direct base class.
7271   CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
7272   CXXRecordDecl::base_class_iterator BaseIt, BaseE;
7273   for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
7274        BaseIt != BaseE; ++BaseIt) {
7275     CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
7276     if (CanonicalSourceType == BaseType)
7277       break;
7278     if (BaseIt->getType()->isDependentType())
7279       break;
7280   }
7281 
7282   if (BaseIt == BaseE) {
7283     // Did not find SourceType in the bases.
7284     Diag(UD->getUsingLoc(),
7285          diag::err_using_decl_constructor_not_in_direct_base)
7286       << UD->getNameInfo().getSourceRange()
7287       << QualType(SourceType, 0) << TargetClass;
7288     return true;
7289   }
7290 
7291   if (!CurContext->isDependentContext())
7292     BaseIt->setInheritConstructors();
7293 
7294   return false;
7295 }
7296 
7297 /// Checks that the given using declaration is not an invalid
7298 /// redeclaration.  Note that this is checking only for the using decl
7299 /// itself, not for any ill-formedness among the UsingShadowDecls.
CheckUsingDeclRedeclaration(SourceLocation UsingLoc,bool HasTypenameKeyword,const CXXScopeSpec & SS,SourceLocation NameLoc,const LookupResult & Prev)7300 bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
7301                                        bool HasTypenameKeyword,
7302                                        const CXXScopeSpec &SS,
7303                                        SourceLocation NameLoc,
7304                                        const LookupResult &Prev) {
7305   // C++03 [namespace.udecl]p8:
7306   // C++0x [namespace.udecl]p10:
7307   //   A using-declaration is a declaration and can therefore be used
7308   //   repeatedly where (and only where) multiple declarations are
7309   //   allowed.
7310   //
7311   // That's in non-member contexts.
7312   if (!CurContext->getRedeclContext()->isRecord())
7313     return false;
7314 
7315   NestedNameSpecifier *Qual
7316     = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
7317 
7318   for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
7319     NamedDecl *D = *I;
7320 
7321     bool DTypename;
7322     NestedNameSpecifier *DQual;
7323     if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
7324       DTypename = UD->hasTypename();
7325       DQual = UD->getQualifier();
7326     } else if (UnresolvedUsingValueDecl *UD
7327                  = dyn_cast<UnresolvedUsingValueDecl>(D)) {
7328       DTypename = false;
7329       DQual = UD->getQualifier();
7330     } else if (UnresolvedUsingTypenameDecl *UD
7331                  = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
7332       DTypename = true;
7333       DQual = UD->getQualifier();
7334     } else continue;
7335 
7336     // using decls differ if one says 'typename' and the other doesn't.
7337     // FIXME: non-dependent using decls?
7338     if (HasTypenameKeyword != DTypename) continue;
7339 
7340     // using decls differ if they name different scopes (but note that
7341     // template instantiation can cause this check to trigger when it
7342     // didn't before instantiation).
7343     if (Context.getCanonicalNestedNameSpecifier(Qual) !=
7344         Context.getCanonicalNestedNameSpecifier(DQual))
7345       continue;
7346 
7347     Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
7348     Diag(D->getLocation(), diag::note_using_decl) << 1;
7349     return true;
7350   }
7351 
7352   return false;
7353 }
7354 
7355 
7356 /// Checks that the given nested-name qualifier used in a using decl
7357 /// in the current context is appropriately related to the current
7358 /// scope.  If an error is found, diagnoses it and returns true.
CheckUsingDeclQualifier(SourceLocation UsingLoc,const CXXScopeSpec & SS,SourceLocation NameLoc)7359 bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
7360                                    const CXXScopeSpec &SS,
7361                                    SourceLocation NameLoc) {
7362   DeclContext *NamedContext = computeDeclContext(SS);
7363 
7364   if (!CurContext->isRecord()) {
7365     // C++03 [namespace.udecl]p3:
7366     // C++0x [namespace.udecl]p8:
7367     //   A using-declaration for a class member shall be a member-declaration.
7368 
7369     // If we weren't able to compute a valid scope, it must be a
7370     // dependent class scope.
7371     if (!NamedContext || NamedContext->isRecord()) {
7372       Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
7373         << SS.getRange();
7374       return true;
7375     }
7376 
7377     // Otherwise, everything is known to be fine.
7378     return false;
7379   }
7380 
7381   // The current scope is a record.
7382 
7383   // If the named context is dependent, we can't decide much.
7384   if (!NamedContext) {
7385     // FIXME: in C++0x, we can diagnose if we can prove that the
7386     // nested-name-specifier does not refer to a base class, which is
7387     // still possible in some cases.
7388 
7389     // Otherwise we have to conservatively report that things might be
7390     // okay.
7391     return false;
7392   }
7393 
7394   if (!NamedContext->isRecord()) {
7395     // Ideally this would point at the last name in the specifier,
7396     // but we don't have that level of source info.
7397     Diag(SS.getRange().getBegin(),
7398          diag::err_using_decl_nested_name_specifier_is_not_class)
7399       << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
7400     return true;
7401   }
7402 
7403   if (!NamedContext->isDependentContext() &&
7404       RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
7405     return true;
7406 
7407   if (getLangOpts().CPlusPlus11) {
7408     // C++0x [namespace.udecl]p3:
7409     //   In a using-declaration used as a member-declaration, the
7410     //   nested-name-specifier shall name a base class of the class
7411     //   being defined.
7412 
7413     if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
7414                                  cast<CXXRecordDecl>(NamedContext))) {
7415       if (CurContext == NamedContext) {
7416         Diag(NameLoc,
7417              diag::err_using_decl_nested_name_specifier_is_current_class)
7418           << SS.getRange();
7419         return true;
7420       }
7421 
7422       Diag(SS.getRange().getBegin(),
7423            diag::err_using_decl_nested_name_specifier_is_not_base_class)
7424         << (NestedNameSpecifier*) SS.getScopeRep()
7425         << cast<CXXRecordDecl>(CurContext)
7426         << SS.getRange();
7427       return true;
7428     }
7429 
7430     return false;
7431   }
7432 
7433   // C++03 [namespace.udecl]p4:
7434   //   A using-declaration used as a member-declaration shall refer
7435   //   to a member of a base class of the class being defined [etc.].
7436 
7437   // Salient point: SS doesn't have to name a base class as long as
7438   // lookup only finds members from base classes.  Therefore we can
7439   // diagnose here only if we can prove that that can't happen,
7440   // i.e. if the class hierarchies provably don't intersect.
7441 
7442   // TODO: it would be nice if "definitely valid" results were cached
7443   // in the UsingDecl and UsingShadowDecl so that these checks didn't
7444   // need to be repeated.
7445 
7446   struct UserData {
7447     llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
7448 
7449     static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
7450       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7451       Data->Bases.insert(Base);
7452       return true;
7453     }
7454 
7455     bool hasDependentBases(const CXXRecordDecl *Class) {
7456       return !Class->forallBases(collect, this);
7457     }
7458 
7459     /// Returns true if the base is dependent or is one of the
7460     /// accumulated base classes.
7461     static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
7462       UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7463       return !Data->Bases.count(Base);
7464     }
7465 
7466     bool mightShareBases(const CXXRecordDecl *Class) {
7467       return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
7468     }
7469   };
7470 
7471   UserData Data;
7472 
7473   // Returns false if we find a dependent base.
7474   if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
7475     return false;
7476 
7477   // Returns false if the class has a dependent base or if it or one
7478   // of its bases is present in the base set of the current context.
7479   if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
7480     return false;
7481 
7482   Diag(SS.getRange().getBegin(),
7483        diag::err_using_decl_nested_name_specifier_is_not_base_class)
7484     << (NestedNameSpecifier*) SS.getScopeRep()
7485     << cast<CXXRecordDecl>(CurContext)
7486     << SS.getRange();
7487 
7488   return true;
7489 }
7490 
ActOnAliasDeclaration(Scope * S,AccessSpecifier AS,MultiTemplateParamsArg TemplateParamLists,SourceLocation UsingLoc,UnqualifiedId & Name,AttributeList * AttrList,TypeResult Type)7491 Decl *Sema::ActOnAliasDeclaration(Scope *S,
7492                                   AccessSpecifier AS,
7493                                   MultiTemplateParamsArg TemplateParamLists,
7494                                   SourceLocation UsingLoc,
7495                                   UnqualifiedId &Name,
7496                                   AttributeList *AttrList,
7497                                   TypeResult Type) {
7498   // Skip up to the relevant declaration scope.
7499   while (S->getFlags() & Scope::TemplateParamScope)
7500     S = S->getParent();
7501   assert((S->getFlags() & Scope::DeclScope) &&
7502          "got alias-declaration outside of declaration scope");
7503 
7504   if (Type.isInvalid())
7505     return 0;
7506 
7507   bool Invalid = false;
7508   DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
7509   TypeSourceInfo *TInfo = 0;
7510   GetTypeFromParser(Type.get(), &TInfo);
7511 
7512   if (DiagnoseClassNameShadow(CurContext, NameInfo))
7513     return 0;
7514 
7515   if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
7516                                       UPPC_DeclarationType)) {
7517     Invalid = true;
7518     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
7519                                              TInfo->getTypeLoc().getBeginLoc());
7520   }
7521 
7522   LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
7523   LookupName(Previous, S);
7524 
7525   // Warn about shadowing the name of a template parameter.
7526   if (Previous.isSingleResult() &&
7527       Previous.getFoundDecl()->isTemplateParameter()) {
7528     DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
7529     Previous.clear();
7530   }
7531 
7532   assert(Name.Kind == UnqualifiedId::IK_Identifier &&
7533          "name in alias declaration must be an identifier");
7534   TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
7535                                                Name.StartLocation,
7536                                                Name.Identifier, TInfo);
7537 
7538   NewTD->setAccess(AS);
7539 
7540   if (Invalid)
7541     NewTD->setInvalidDecl();
7542 
7543   ProcessDeclAttributeList(S, NewTD, AttrList);
7544 
7545   CheckTypedefForVariablyModifiedType(S, NewTD);
7546   Invalid |= NewTD->isInvalidDecl();
7547 
7548   bool Redeclaration = false;
7549 
7550   NamedDecl *NewND;
7551   if (TemplateParamLists.size()) {
7552     TypeAliasTemplateDecl *OldDecl = 0;
7553     TemplateParameterList *OldTemplateParams = 0;
7554 
7555     if (TemplateParamLists.size() != 1) {
7556       Diag(UsingLoc, diag::err_alias_template_extra_headers)
7557         << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
7558          TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
7559     }
7560     TemplateParameterList *TemplateParams = TemplateParamLists[0];
7561 
7562     // Only consider previous declarations in the same scope.
7563     FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
7564                          /*ExplicitInstantiationOrSpecialization*/false);
7565     if (!Previous.empty()) {
7566       Redeclaration = true;
7567 
7568       OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
7569       if (!OldDecl && !Invalid) {
7570         Diag(UsingLoc, diag::err_redefinition_different_kind)
7571           << Name.Identifier;
7572 
7573         NamedDecl *OldD = Previous.getRepresentativeDecl();
7574         if (OldD->getLocation().isValid())
7575           Diag(OldD->getLocation(), diag::note_previous_definition);
7576 
7577         Invalid = true;
7578       }
7579 
7580       if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
7581         if (TemplateParameterListsAreEqual(TemplateParams,
7582                                            OldDecl->getTemplateParameters(),
7583                                            /*Complain=*/true,
7584                                            TPL_TemplateMatch))
7585           OldTemplateParams = OldDecl->getTemplateParameters();
7586         else
7587           Invalid = true;
7588 
7589         TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
7590         if (!Invalid &&
7591             !Context.hasSameType(OldTD->getUnderlyingType(),
7592                                  NewTD->getUnderlyingType())) {
7593           // FIXME: The C++0x standard does not clearly say this is ill-formed,
7594           // but we can't reasonably accept it.
7595           Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
7596             << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
7597           if (OldTD->getLocation().isValid())
7598             Diag(OldTD->getLocation(), diag::note_previous_definition);
7599           Invalid = true;
7600         }
7601       }
7602     }
7603 
7604     // Merge any previous default template arguments into our parameters,
7605     // and check the parameter list.
7606     if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
7607                                    TPC_TypeAliasTemplate))
7608       return 0;
7609 
7610     TypeAliasTemplateDecl *NewDecl =
7611       TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
7612                                     Name.Identifier, TemplateParams,
7613                                     NewTD);
7614 
7615     NewDecl->setAccess(AS);
7616 
7617     if (Invalid)
7618       NewDecl->setInvalidDecl();
7619     else if (OldDecl)
7620       NewDecl->setPreviousDeclaration(OldDecl);
7621 
7622     NewND = NewDecl;
7623   } else {
7624     ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
7625     NewND = NewTD;
7626   }
7627 
7628   if (!Redeclaration)
7629     PushOnScopeChains(NewND, S);
7630 
7631   ActOnDocumentableDecl(NewND);
7632   return NewND;
7633 }
7634 
ActOnNamespaceAliasDef(Scope * S,SourceLocation NamespaceLoc,SourceLocation AliasLoc,IdentifierInfo * Alias,CXXScopeSpec & SS,SourceLocation IdentLoc,IdentifierInfo * Ident)7635 Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
7636                                              SourceLocation NamespaceLoc,
7637                                              SourceLocation AliasLoc,
7638                                              IdentifierInfo *Alias,
7639                                              CXXScopeSpec &SS,
7640                                              SourceLocation IdentLoc,
7641                                              IdentifierInfo *Ident) {
7642 
7643   // Lookup the namespace name.
7644   LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
7645   LookupParsedName(R, S, &SS);
7646 
7647   // Check if we have a previous declaration with the same name.
7648   NamedDecl *PrevDecl
7649     = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
7650                        ForRedeclaration);
7651   if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
7652     PrevDecl = 0;
7653 
7654   if (PrevDecl) {
7655     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
7656       // We already have an alias with the same name that points to the same
7657       // namespace, so don't create a new one.
7658       // FIXME: At some point, we'll want to create the (redundant)
7659       // declaration to maintain better source information.
7660       if (!R.isAmbiguous() && !R.empty() &&
7661           AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
7662         return 0;
7663     }
7664 
7665     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
7666       diag::err_redefinition_different_kind;
7667     Diag(AliasLoc, DiagID) << Alias;
7668     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
7669     return 0;
7670   }
7671 
7672   if (R.isAmbiguous())
7673     return 0;
7674 
7675   if (R.empty()) {
7676     if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
7677       Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
7678       return 0;
7679     }
7680   }
7681 
7682   NamespaceAliasDecl *AliasDecl =
7683     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
7684                                Alias, SS.getWithLocInContext(Context),
7685                                IdentLoc, R.getFoundDecl());
7686 
7687   PushOnScopeChains(AliasDecl, S);
7688   return AliasDecl;
7689 }
7690 
7691 Sema::ImplicitExceptionSpecification
ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,CXXMethodDecl * MD)7692 Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
7693                                                CXXMethodDecl *MD) {
7694   CXXRecordDecl *ClassDecl = MD->getParent();
7695 
7696   // C++ [except.spec]p14:
7697   //   An implicitly declared special member function (Clause 12) shall have an
7698   //   exception-specification. [...]
7699   ImplicitExceptionSpecification ExceptSpec(*this);
7700   if (ClassDecl->isInvalidDecl())
7701     return ExceptSpec;
7702 
7703   // Direct base-class constructors.
7704   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7705                                        BEnd = ClassDecl->bases_end();
7706        B != BEnd; ++B) {
7707     if (B->isVirtual()) // Handled below.
7708       continue;
7709 
7710     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7711       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7712       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7713       // If this is a deleted function, add it anyway. This might be conformant
7714       // with the standard. This might not. I'm not sure. It might not matter.
7715       if (Constructor)
7716         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7717     }
7718   }
7719 
7720   // Virtual base-class constructors.
7721   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7722                                        BEnd = ClassDecl->vbases_end();
7723        B != BEnd; ++B) {
7724     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7725       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7726       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7727       // If this is a deleted function, add it anyway. This might be conformant
7728       // with the standard. This might not. I'm not sure. It might not matter.
7729       if (Constructor)
7730         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7731     }
7732   }
7733 
7734   // Field constructors.
7735   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7736                                FEnd = ClassDecl->field_end();
7737        F != FEnd; ++F) {
7738     if (F->hasInClassInitializer()) {
7739       if (Expr *E = F->getInClassInitializer())
7740         ExceptSpec.CalledExpr(E);
7741       else if (!F->isInvalidDecl())
7742         // DR1351:
7743         //   If the brace-or-equal-initializer of a non-static data member
7744         //   invokes a defaulted default constructor of its class or of an
7745         //   enclosing class in a potentially evaluated subexpression, the
7746         //   program is ill-formed.
7747         //
7748         // This resolution is unworkable: the exception specification of the
7749         // default constructor can be needed in an unevaluated context, in
7750         // particular, in the operand of a noexcept-expression, and we can be
7751         // unable to compute an exception specification for an enclosed class.
7752         //
7753         // We do not allow an in-class initializer to require the evaluation
7754         // of the exception specification for any in-class initializer whose
7755         // definition is not lexically complete.
7756         Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
7757     } else if (const RecordType *RecordTy
7758               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7759       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7760       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7761       // If this is a deleted function, add it anyway. This might be conformant
7762       // with the standard. This might not. I'm not sure. It might not matter.
7763       // In particular, the problem is that this function never gets called. It
7764       // might just be ill-formed because this function attempts to refer to
7765       // a deleted function here.
7766       if (Constructor)
7767         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7768     }
7769   }
7770 
7771   return ExceptSpec;
7772 }
7773 
7774 Sema::ImplicitExceptionSpecification
ComputeInheritingCtorExceptionSpec(CXXConstructorDecl * CD)7775 Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) {
7776   CXXRecordDecl *ClassDecl = CD->getParent();
7777 
7778   // C++ [except.spec]p14:
7779   //   An inheriting constructor [...] shall have an exception-specification. [...]
7780   ImplicitExceptionSpecification ExceptSpec(*this);
7781   if (ClassDecl->isInvalidDecl())
7782     return ExceptSpec;
7783 
7784   // Inherited constructor.
7785   const CXXConstructorDecl *InheritedCD = CD->getInheritedConstructor();
7786   const CXXRecordDecl *InheritedDecl = InheritedCD->getParent();
7787   // FIXME: Copying or moving the parameters could add extra exceptions to the
7788   // set, as could the default arguments for the inherited constructor. This
7789   // will be addressed when we implement the resolution of core issue 1351.
7790   ExceptSpec.CalledDecl(CD->getLocStart(), InheritedCD);
7791 
7792   // Direct base-class constructors.
7793   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7794                                        BEnd = ClassDecl->bases_end();
7795        B != BEnd; ++B) {
7796     if (B->isVirtual()) // Handled below.
7797       continue;
7798 
7799     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7800       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7801       if (BaseClassDecl == InheritedDecl)
7802         continue;
7803       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7804       if (Constructor)
7805         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7806     }
7807   }
7808 
7809   // Virtual base-class constructors.
7810   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7811                                        BEnd = ClassDecl->vbases_end();
7812        B != BEnd; ++B) {
7813     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7814       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7815       if (BaseClassDecl == InheritedDecl)
7816         continue;
7817       CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7818       if (Constructor)
7819         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7820     }
7821   }
7822 
7823   // Field constructors.
7824   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7825                                FEnd = ClassDecl->field_end();
7826        F != FEnd; ++F) {
7827     if (F->hasInClassInitializer()) {
7828       if (Expr *E = F->getInClassInitializer())
7829         ExceptSpec.CalledExpr(E);
7830       else if (!F->isInvalidDecl())
7831         Diag(CD->getLocation(),
7832              diag::err_in_class_initializer_references_def_ctor) << CD;
7833     } else if (const RecordType *RecordTy
7834               = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7835       CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7836       CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7837       if (Constructor)
7838         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7839     }
7840   }
7841 
7842   return ExceptSpec;
7843 }
7844 
7845 namespace {
7846 /// RAII object to register a special member as being currently declared.
7847 struct DeclaringSpecialMember {
7848   Sema &S;
7849   Sema::SpecialMemberDecl D;
7850   bool WasAlreadyBeingDeclared;
7851 
DeclaringSpecialMember__anon7fa201ac0b11::DeclaringSpecialMember7852   DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
7853     : S(S), D(RD, CSM) {
7854     WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D);
7855     if (WasAlreadyBeingDeclared)
7856       // This almost never happens, but if it does, ensure that our cache
7857       // doesn't contain a stale result.
7858       S.SpecialMemberCache.clear();
7859 
7860     // FIXME: Register a note to be produced if we encounter an error while
7861     // declaring the special member.
7862   }
~DeclaringSpecialMember__anon7fa201ac0b11::DeclaringSpecialMember7863   ~DeclaringSpecialMember() {
7864     if (!WasAlreadyBeingDeclared)
7865       S.SpecialMembersBeingDeclared.erase(D);
7866   }
7867 
7868   /// \brief Are we already trying to declare this special member?
isAlreadyBeingDeclared__anon7fa201ac0b11::DeclaringSpecialMember7869   bool isAlreadyBeingDeclared() const {
7870     return WasAlreadyBeingDeclared;
7871   }
7872 };
7873 }
7874 
DeclareImplicitDefaultConstructor(CXXRecordDecl * ClassDecl)7875 CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
7876                                                      CXXRecordDecl *ClassDecl) {
7877   // C++ [class.ctor]p5:
7878   //   A default constructor for a class X is a constructor of class X
7879   //   that can be called without an argument. If there is no
7880   //   user-declared constructor for class X, a default constructor is
7881   //   implicitly declared. An implicitly-declared default constructor
7882   //   is an inline public member of its class.
7883   assert(ClassDecl->needsImplicitDefaultConstructor() &&
7884          "Should not build implicit default constructor!");
7885 
7886   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
7887   if (DSM.isAlreadyBeingDeclared())
7888     return 0;
7889 
7890   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
7891                                                      CXXDefaultConstructor,
7892                                                      false);
7893 
7894   // Create the actual constructor declaration.
7895   CanQualType ClassType
7896     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7897   SourceLocation ClassLoc = ClassDecl->getLocation();
7898   DeclarationName Name
7899     = Context.DeclarationNames.getCXXConstructorName(ClassType);
7900   DeclarationNameInfo NameInfo(Name, ClassLoc);
7901   CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
7902       Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
7903       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
7904       Constexpr);
7905   DefaultCon->setAccess(AS_public);
7906   DefaultCon->setDefaulted();
7907   DefaultCon->setImplicit();
7908 
7909   // Build an exception specification pointing back at this constructor.
7910   FunctionProtoType::ExtProtoInfo EPI;
7911   EPI.ExceptionSpecType = EST_Unevaluated;
7912   EPI.ExceptionSpecDecl = DefaultCon;
7913   DefaultCon->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
7914 
7915   // We don't need to use SpecialMemberIsTrivial here; triviality for default
7916   // constructors is easy to compute.
7917   DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
7918 
7919   if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
7920     SetDeclDeleted(DefaultCon, ClassLoc);
7921 
7922   // Note that we have declared this constructor.
7923   ++ASTContext::NumImplicitDefaultConstructorsDeclared;
7924 
7925   if (Scope *S = getScopeForContext(ClassDecl))
7926     PushOnScopeChains(DefaultCon, S, false);
7927   ClassDecl->addDecl(DefaultCon);
7928 
7929   return DefaultCon;
7930 }
7931 
DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,CXXConstructorDecl * Constructor)7932 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
7933                                             CXXConstructorDecl *Constructor) {
7934   assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
7935           !Constructor->doesThisDeclarationHaveABody() &&
7936           !Constructor->isDeleted()) &&
7937     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
7938 
7939   CXXRecordDecl *ClassDecl = Constructor->getParent();
7940   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
7941 
7942   SynthesizedFunctionScope Scope(*this, Constructor);
7943   DiagnosticErrorTrap Trap(Diags);
7944   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
7945       Trap.hasErrorOccurred()) {
7946     Diag(CurrentLocation, diag::note_member_synthesized_at)
7947       << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
7948     Constructor->setInvalidDecl();
7949     return;
7950   }
7951 
7952   SourceLocation Loc = Constructor->getLocation();
7953   Constructor->setBody(new (Context) CompoundStmt(Loc));
7954 
7955   Constructor->setUsed();
7956   MarkVTableUsed(CurrentLocation, ClassDecl);
7957 
7958   if (ASTMutationListener *L = getASTMutationListener()) {
7959     L->CompletedImplicitDefinition(Constructor);
7960   }
7961 }
7962 
ActOnFinishDelayedMemberInitializers(Decl * D)7963 void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
7964   // Check that any explicitly-defaulted methods have exception specifications
7965   // compatible with their implicit exception specifications.
7966   CheckDelayedExplicitlyDefaultedMemberExceptionSpecs();
7967 }
7968 
7969 namespace {
7970 /// Information on inheriting constructors to declare.
7971 class InheritingConstructorInfo {
7972 public:
InheritingConstructorInfo(Sema & SemaRef,CXXRecordDecl * Derived)7973   InheritingConstructorInfo(Sema &SemaRef, CXXRecordDecl *Derived)
7974       : SemaRef(SemaRef), Derived(Derived) {
7975     // Mark the constructors that we already have in the derived class.
7976     //
7977     // C++11 [class.inhctor]p3: [...] a constructor is implicitly declared [...]
7978     //   unless there is a user-declared constructor with the same signature in
7979     //   the class where the using-declaration appears.
7980     visitAll(Derived, &InheritingConstructorInfo::noteDeclaredInDerived);
7981   }
7982 
inheritAll(CXXRecordDecl * RD)7983   void inheritAll(CXXRecordDecl *RD) {
7984     visitAll(RD, &InheritingConstructorInfo::inherit);
7985   }
7986 
7987 private:
7988   /// Information about an inheriting constructor.
7989   struct InheritingConstructor {
InheritingConstructor__anon7fa201ac0c11::InheritingConstructorInfo::InheritingConstructor7990     InheritingConstructor()
7991       : DeclaredInDerived(false), BaseCtor(0), DerivedCtor(0) {}
7992 
7993     /// If \c true, a constructor with this signature is already declared
7994     /// in the derived class.
7995     bool DeclaredInDerived;
7996 
7997     /// The constructor which is inherited.
7998     const CXXConstructorDecl *BaseCtor;
7999 
8000     /// The derived constructor we declared.
8001     CXXConstructorDecl *DerivedCtor;
8002   };
8003 
8004   /// Inheriting constructors with a given canonical type. There can be at
8005   /// most one such non-template constructor, and any number of templated
8006   /// constructors.
8007   struct InheritingConstructorsForType {
8008     InheritingConstructor NonTemplate;
8009     llvm::SmallVector<
8010       std::pair<TemplateParameterList*, InheritingConstructor>, 4> Templates;
8011 
getEntry__anon7fa201ac0c11::InheritingConstructorInfo::InheritingConstructorsForType8012     InheritingConstructor &getEntry(Sema &S, const CXXConstructorDecl *Ctor) {
8013       if (FunctionTemplateDecl *FTD = Ctor->getDescribedFunctionTemplate()) {
8014         TemplateParameterList *ParamList = FTD->getTemplateParameters();
8015         for (unsigned I = 0, N = Templates.size(); I != N; ++I)
8016           if (S.TemplateParameterListsAreEqual(ParamList, Templates[I].first,
8017                                                false, S.TPL_TemplateMatch))
8018             return Templates[I].second;
8019         Templates.push_back(std::make_pair(ParamList, InheritingConstructor()));
8020         return Templates.back().second;
8021       }
8022 
8023       return NonTemplate;
8024     }
8025   };
8026 
8027   /// Get or create the inheriting constructor record for a constructor.
getEntry(const CXXConstructorDecl * Ctor,QualType CtorType)8028   InheritingConstructor &getEntry(const CXXConstructorDecl *Ctor,
8029                                   QualType CtorType) {
8030     return Map[CtorType.getCanonicalType()->castAs<FunctionProtoType>()]
8031         .getEntry(SemaRef, Ctor);
8032   }
8033 
8034   typedef void (InheritingConstructorInfo::*VisitFn)(const CXXConstructorDecl*);
8035 
8036   /// Process all constructors for a class.
visitAll(const CXXRecordDecl * RD,VisitFn Callback)8037   void visitAll(const CXXRecordDecl *RD, VisitFn Callback) {
8038     for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(),
8039                                       CtorE = RD->ctor_end();
8040          CtorIt != CtorE; ++CtorIt)
8041       (this->*Callback)(*CtorIt);
8042     for (CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
8043              I(RD->decls_begin()), E(RD->decls_end());
8044          I != E; ++I) {
8045       const FunctionDecl *FD = (*I)->getTemplatedDecl();
8046       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
8047         (this->*Callback)(CD);
8048     }
8049   }
8050 
8051   /// Note that a constructor (or constructor template) was declared in Derived.
noteDeclaredInDerived(const CXXConstructorDecl * Ctor)8052   void noteDeclaredInDerived(const CXXConstructorDecl *Ctor) {
8053     getEntry(Ctor, Ctor->getType()).DeclaredInDerived = true;
8054   }
8055 
8056   /// Inherit a single constructor.
inherit(const CXXConstructorDecl * Ctor)8057   void inherit(const CXXConstructorDecl *Ctor) {
8058     const FunctionProtoType *CtorType =
8059         Ctor->getType()->castAs<FunctionProtoType>();
8060     ArrayRef<QualType> ArgTypes(CtorType->getArgTypes());
8061     FunctionProtoType::ExtProtoInfo EPI = CtorType->getExtProtoInfo();
8062 
8063     SourceLocation UsingLoc = getUsingLoc(Ctor->getParent());
8064 
8065     // Core issue (no number yet): the ellipsis is always discarded.
8066     if (EPI.Variadic) {
8067       SemaRef.Diag(UsingLoc, diag::warn_using_decl_constructor_ellipsis);
8068       SemaRef.Diag(Ctor->getLocation(),
8069                    diag::note_using_decl_constructor_ellipsis);
8070       EPI.Variadic = false;
8071     }
8072 
8073     // Declare a constructor for each number of parameters.
8074     //
8075     // C++11 [class.inhctor]p1:
8076     //   The candidate set of inherited constructors from the class X named in
8077     //   the using-declaration consists of [... modulo defects ...] for each
8078     //   constructor or constructor template of X, the set of constructors or
8079     //   constructor templates that results from omitting any ellipsis parameter
8080     //   specification and successively omitting parameters with a default
8081     //   argument from the end of the parameter-type-list
8082     unsigned MinParams = minParamsToInherit(Ctor);
8083     unsigned Params = Ctor->getNumParams();
8084     if (Params >= MinParams) {
8085       do
8086         declareCtor(UsingLoc, Ctor,
8087                     SemaRef.Context.getFunctionType(
8088                         Ctor->getResultType(), ArgTypes.slice(0, Params), EPI));
8089       while (Params > MinParams &&
8090              Ctor->getParamDecl(--Params)->hasDefaultArg());
8091     }
8092   }
8093 
8094   /// Find the using-declaration which specified that we should inherit the
8095   /// constructors of \p Base.
getUsingLoc(const CXXRecordDecl * Base)8096   SourceLocation getUsingLoc(const CXXRecordDecl *Base) {
8097     // No fancy lookup required; just look for the base constructor name
8098     // directly within the derived class.
8099     ASTContext &Context = SemaRef.Context;
8100     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8101         Context.getCanonicalType(Context.getRecordType(Base)));
8102     DeclContext::lookup_const_result Decls = Derived->lookup(Name);
8103     return Decls.empty() ? Derived->getLocation() : Decls[0]->getLocation();
8104   }
8105 
minParamsToInherit(const CXXConstructorDecl * Ctor)8106   unsigned minParamsToInherit(const CXXConstructorDecl *Ctor) {
8107     // C++11 [class.inhctor]p3:
8108     //   [F]or each constructor template in the candidate set of inherited
8109     //   constructors, a constructor template is implicitly declared
8110     if (Ctor->getDescribedFunctionTemplate())
8111       return 0;
8112 
8113     //   For each non-template constructor in the candidate set of inherited
8114     //   constructors other than a constructor having no parameters or a
8115     //   copy/move constructor having a single parameter, a constructor is
8116     //   implicitly declared [...]
8117     if (Ctor->getNumParams() == 0)
8118       return 1;
8119     if (Ctor->isCopyOrMoveConstructor())
8120       return 2;
8121 
8122     // Per discussion on core reflector, never inherit a constructor which
8123     // would become a default, copy, or move constructor of Derived either.
8124     const ParmVarDecl *PD = Ctor->getParamDecl(0);
8125     const ReferenceType *RT = PD->getType()->getAs<ReferenceType>();
8126     return (RT && RT->getPointeeCXXRecordDecl() == Derived) ? 2 : 1;
8127   }
8128 
8129   /// Declare a single inheriting constructor, inheriting the specified
8130   /// constructor, with the given type.
declareCtor(SourceLocation UsingLoc,const CXXConstructorDecl * BaseCtor,QualType DerivedType)8131   void declareCtor(SourceLocation UsingLoc, const CXXConstructorDecl *BaseCtor,
8132                    QualType DerivedType) {
8133     InheritingConstructor &Entry = getEntry(BaseCtor, DerivedType);
8134 
8135     // C++11 [class.inhctor]p3:
8136     //   ... a constructor is implicitly declared with the same constructor
8137     //   characteristics unless there is a user-declared constructor with
8138     //   the same signature in the class where the using-declaration appears
8139     if (Entry.DeclaredInDerived)
8140       return;
8141 
8142     // C++11 [class.inhctor]p7:
8143     //   If two using-declarations declare inheriting constructors with the
8144     //   same signature, the program is ill-formed
8145     if (Entry.DerivedCtor) {
8146       if (BaseCtor->getParent() != Entry.BaseCtor->getParent()) {
8147         // Only diagnose this once per constructor.
8148         if (Entry.DerivedCtor->isInvalidDecl())
8149           return;
8150         Entry.DerivedCtor->setInvalidDecl();
8151 
8152         SemaRef.Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
8153         SemaRef.Diag(BaseCtor->getLocation(),
8154                      diag::note_using_decl_constructor_conflict_current_ctor);
8155         SemaRef.Diag(Entry.BaseCtor->getLocation(),
8156                      diag::note_using_decl_constructor_conflict_previous_ctor);
8157         SemaRef.Diag(Entry.DerivedCtor->getLocation(),
8158                      diag::note_using_decl_constructor_conflict_previous_using);
8159       } else {
8160         // Core issue (no number): if the same inheriting constructor is
8161         // produced by multiple base class constructors from the same base
8162         // class, the inheriting constructor is defined as deleted.
8163         SemaRef.SetDeclDeleted(Entry.DerivedCtor, UsingLoc);
8164       }
8165 
8166       return;
8167     }
8168 
8169     ASTContext &Context = SemaRef.Context;
8170     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8171         Context.getCanonicalType(Context.getRecordType(Derived)));
8172     DeclarationNameInfo NameInfo(Name, UsingLoc);
8173 
8174     TemplateParameterList *TemplateParams = 0;
8175     if (const FunctionTemplateDecl *FTD =
8176             BaseCtor->getDescribedFunctionTemplate()) {
8177       TemplateParams = FTD->getTemplateParameters();
8178       // We're reusing template parameters from a different DeclContext. This
8179       // is questionable at best, but works out because the template depth in
8180       // both places is guaranteed to be 0.
8181       // FIXME: Rebuild the template parameters in the new context, and
8182       // transform the function type to refer to them.
8183     }
8184 
8185     // Build type source info pointing at the using-declaration. This is
8186     // required by template instantiation.
8187     TypeSourceInfo *TInfo =
8188         Context.getTrivialTypeSourceInfo(DerivedType, UsingLoc);
8189     FunctionProtoTypeLoc ProtoLoc =
8190         TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
8191 
8192     CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
8193         Context, Derived, UsingLoc, NameInfo, DerivedType,
8194         TInfo, BaseCtor->isExplicit(), /*Inline=*/true,
8195         /*ImplicitlyDeclared=*/true, /*Constexpr=*/BaseCtor->isConstexpr());
8196 
8197     // Build an unevaluated exception specification for this constructor.
8198     const FunctionProtoType *FPT = DerivedType->castAs<FunctionProtoType>();
8199     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8200     EPI.ExceptionSpecType = EST_Unevaluated;
8201     EPI.ExceptionSpecDecl = DerivedCtor;
8202     DerivedCtor->setType(Context.getFunctionType(FPT->getResultType(),
8203                                                  FPT->getArgTypes(), EPI));
8204 
8205     // Build the parameter declarations.
8206     SmallVector<ParmVarDecl *, 16> ParamDecls;
8207     for (unsigned I = 0, N = FPT->getNumArgs(); I != N; ++I) {
8208       TypeSourceInfo *TInfo =
8209           Context.getTrivialTypeSourceInfo(FPT->getArgType(I), UsingLoc);
8210       ParmVarDecl *PD = ParmVarDecl::Create(
8211           Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/0,
8212           FPT->getArgType(I), TInfo, SC_None, /*DefaultArg=*/0);
8213       PD->setScopeInfo(0, I);
8214       PD->setImplicit();
8215       ParamDecls.push_back(PD);
8216       ProtoLoc.setArg(I, PD);
8217     }
8218 
8219     // Set up the new constructor.
8220     DerivedCtor->setAccess(BaseCtor->getAccess());
8221     DerivedCtor->setParams(ParamDecls);
8222     DerivedCtor->setInheritedConstructor(BaseCtor);
8223     if (BaseCtor->isDeleted())
8224       SemaRef.SetDeclDeleted(DerivedCtor, UsingLoc);
8225 
8226     // If this is a constructor template, build the template declaration.
8227     if (TemplateParams) {
8228       FunctionTemplateDecl *DerivedTemplate =
8229           FunctionTemplateDecl::Create(SemaRef.Context, Derived, UsingLoc, Name,
8230                                        TemplateParams, DerivedCtor);
8231       DerivedTemplate->setAccess(BaseCtor->getAccess());
8232       DerivedCtor->setDescribedFunctionTemplate(DerivedTemplate);
8233       Derived->addDecl(DerivedTemplate);
8234     } else {
8235       Derived->addDecl(DerivedCtor);
8236     }
8237 
8238     Entry.BaseCtor = BaseCtor;
8239     Entry.DerivedCtor = DerivedCtor;
8240   }
8241 
8242   Sema &SemaRef;
8243   CXXRecordDecl *Derived;
8244   typedef llvm::DenseMap<const Type *, InheritingConstructorsForType> MapType;
8245   MapType Map;
8246 };
8247 }
8248 
DeclareInheritingConstructors(CXXRecordDecl * ClassDecl)8249 void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
8250   // Defer declaring the inheriting constructors until the class is
8251   // instantiated.
8252   if (ClassDecl->isDependentContext())
8253     return;
8254 
8255   // Find base classes from which we might inherit constructors.
8256   SmallVector<CXXRecordDecl*, 4> InheritedBases;
8257   for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
8258                                           BaseE = ClassDecl->bases_end();
8259        BaseIt != BaseE; ++BaseIt)
8260     if (BaseIt->getInheritConstructors())
8261       InheritedBases.push_back(BaseIt->getType()->getAsCXXRecordDecl());
8262 
8263   // Go no further if we're not inheriting any constructors.
8264   if (InheritedBases.empty())
8265     return;
8266 
8267   // Declare the inherited constructors.
8268   InheritingConstructorInfo ICI(*this, ClassDecl);
8269   for (unsigned I = 0, N = InheritedBases.size(); I != N; ++I)
8270     ICI.inheritAll(InheritedBases[I]);
8271 }
8272 
DefineInheritingConstructor(SourceLocation CurrentLocation,CXXConstructorDecl * Constructor)8273 void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
8274                                        CXXConstructorDecl *Constructor) {
8275   CXXRecordDecl *ClassDecl = Constructor->getParent();
8276   assert(Constructor->getInheritedConstructor() &&
8277          !Constructor->doesThisDeclarationHaveABody() &&
8278          !Constructor->isDeleted());
8279 
8280   SynthesizedFunctionScope Scope(*this, Constructor);
8281   DiagnosticErrorTrap Trap(Diags);
8282   if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
8283       Trap.hasErrorOccurred()) {
8284     Diag(CurrentLocation, diag::note_inhctor_synthesized_at)
8285       << Context.getTagDeclType(ClassDecl);
8286     Constructor->setInvalidDecl();
8287     return;
8288   }
8289 
8290   SourceLocation Loc = Constructor->getLocation();
8291   Constructor->setBody(new (Context) CompoundStmt(Loc));
8292 
8293   Constructor->setUsed();
8294   MarkVTableUsed(CurrentLocation, ClassDecl);
8295 
8296   if (ASTMutationListener *L = getASTMutationListener()) {
8297     L->CompletedImplicitDefinition(Constructor);
8298   }
8299 }
8300 
8301 
8302 Sema::ImplicitExceptionSpecification
ComputeDefaultedDtorExceptionSpec(CXXMethodDecl * MD)8303 Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
8304   CXXRecordDecl *ClassDecl = MD->getParent();
8305 
8306   // C++ [except.spec]p14:
8307   //   An implicitly declared special member function (Clause 12) shall have
8308   //   an exception-specification.
8309   ImplicitExceptionSpecification ExceptSpec(*this);
8310   if (ClassDecl->isInvalidDecl())
8311     return ExceptSpec;
8312 
8313   // Direct base-class destructors.
8314   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8315                                        BEnd = ClassDecl->bases_end();
8316        B != BEnd; ++B) {
8317     if (B->isVirtual()) // Handled below.
8318       continue;
8319 
8320     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8321       ExceptSpec.CalledDecl(B->getLocStart(),
8322                    LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8323   }
8324 
8325   // Virtual base-class destructors.
8326   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8327                                        BEnd = ClassDecl->vbases_end();
8328        B != BEnd; ++B) {
8329     if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8330       ExceptSpec.CalledDecl(B->getLocStart(),
8331                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8332   }
8333 
8334   // Field destructors.
8335   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8336                                FEnd = ClassDecl->field_end();
8337        F != FEnd; ++F) {
8338     if (const RecordType *RecordTy
8339         = Context.getBaseElementType(F->getType())->getAs<RecordType>())
8340       ExceptSpec.CalledDecl(F->getLocation(),
8341                   LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
8342   }
8343 
8344   return ExceptSpec;
8345 }
8346 
DeclareImplicitDestructor(CXXRecordDecl * ClassDecl)8347 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
8348   // C++ [class.dtor]p2:
8349   //   If a class has no user-declared destructor, a destructor is
8350   //   declared implicitly. An implicitly-declared destructor is an
8351   //   inline public member of its class.
8352   assert(ClassDecl->needsImplicitDestructor());
8353 
8354   DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
8355   if (DSM.isAlreadyBeingDeclared())
8356     return 0;
8357 
8358   // Create the actual destructor declaration.
8359   CanQualType ClassType
8360     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8361   SourceLocation ClassLoc = ClassDecl->getLocation();
8362   DeclarationName Name
8363     = Context.DeclarationNames.getCXXDestructorName(ClassType);
8364   DeclarationNameInfo NameInfo(Name, ClassLoc);
8365   CXXDestructorDecl *Destructor
8366       = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8367                                   QualType(), 0, /*isInline=*/true,
8368                                   /*isImplicitlyDeclared=*/true);
8369   Destructor->setAccess(AS_public);
8370   Destructor->setDefaulted();
8371   Destructor->setImplicit();
8372 
8373   // Build an exception specification pointing back at this destructor.
8374   FunctionProtoType::ExtProtoInfo EPI;
8375   EPI.ExceptionSpecType = EST_Unevaluated;
8376   EPI.ExceptionSpecDecl = Destructor;
8377   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8378 
8379   AddOverriddenMethods(ClassDecl, Destructor);
8380 
8381   // We don't need to use SpecialMemberIsTrivial here; triviality for
8382   // destructors is easy to compute.
8383   Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
8384 
8385   if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
8386     SetDeclDeleted(Destructor, ClassLoc);
8387 
8388   // Note that we have declared this destructor.
8389   ++ASTContext::NumImplicitDestructorsDeclared;
8390 
8391   // Introduce this destructor into its scope.
8392   if (Scope *S = getScopeForContext(ClassDecl))
8393     PushOnScopeChains(Destructor, S, false);
8394   ClassDecl->addDecl(Destructor);
8395 
8396   return Destructor;
8397 }
8398 
DefineImplicitDestructor(SourceLocation CurrentLocation,CXXDestructorDecl * Destructor)8399 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
8400                                     CXXDestructorDecl *Destructor) {
8401   assert((Destructor->isDefaulted() &&
8402           !Destructor->doesThisDeclarationHaveABody() &&
8403           !Destructor->isDeleted()) &&
8404          "DefineImplicitDestructor - call it for implicit default dtor");
8405   CXXRecordDecl *ClassDecl = Destructor->getParent();
8406   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
8407 
8408   if (Destructor->isInvalidDecl())
8409     return;
8410 
8411   SynthesizedFunctionScope Scope(*this, Destructor);
8412 
8413   DiagnosticErrorTrap Trap(Diags);
8414   MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
8415                                          Destructor->getParent());
8416 
8417   if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
8418     Diag(CurrentLocation, diag::note_member_synthesized_at)
8419       << CXXDestructor << Context.getTagDeclType(ClassDecl);
8420 
8421     Destructor->setInvalidDecl();
8422     return;
8423   }
8424 
8425   SourceLocation Loc = Destructor->getLocation();
8426   Destructor->setBody(new (Context) CompoundStmt(Loc));
8427   Destructor->setUsed();
8428   MarkVTableUsed(CurrentLocation, ClassDecl);
8429 
8430   if (ASTMutationListener *L = getASTMutationListener()) {
8431     L->CompletedImplicitDefinition(Destructor);
8432   }
8433 }
8434 
8435 /// \brief Perform any semantic analysis which needs to be delayed until all
8436 /// pending class member declarations have been parsed.
ActOnFinishCXXMemberDecls()8437 void Sema::ActOnFinishCXXMemberDecls() {
8438   // If the context is an invalid C++ class, just suppress these checks.
8439   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
8440     if (Record->isInvalidDecl()) {
8441       DelayedDestructorExceptionSpecChecks.clear();
8442       return;
8443     }
8444   }
8445 
8446   // Perform any deferred checking of exception specifications for virtual
8447   // destructors.
8448   for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
8449        i != e; ++i) {
8450     const CXXDestructorDecl *Dtor =
8451         DelayedDestructorExceptionSpecChecks[i].first;
8452     assert(!Dtor->getParent()->isDependentType() &&
8453            "Should not ever add destructors of templates into the list.");
8454     CheckOverridingFunctionExceptionSpec(Dtor,
8455         DelayedDestructorExceptionSpecChecks[i].second);
8456   }
8457   DelayedDestructorExceptionSpecChecks.clear();
8458 }
8459 
AdjustDestructorExceptionSpec(CXXRecordDecl * ClassDecl,CXXDestructorDecl * Destructor)8460 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
8461                                          CXXDestructorDecl *Destructor) {
8462   assert(getLangOpts().CPlusPlus11 &&
8463          "adjusting dtor exception specs was introduced in c++11");
8464 
8465   // C++11 [class.dtor]p3:
8466   //   A declaration of a destructor that does not have an exception-
8467   //   specification is implicitly considered to have the same exception-
8468   //   specification as an implicit declaration.
8469   const FunctionProtoType *DtorType = Destructor->getType()->
8470                                         getAs<FunctionProtoType>();
8471   if (DtorType->hasExceptionSpec())
8472     return;
8473 
8474   // Replace the destructor's type, building off the existing one. Fortunately,
8475   // the only thing of interest in the destructor type is its extended info.
8476   // The return and arguments are fixed.
8477   FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
8478   EPI.ExceptionSpecType = EST_Unevaluated;
8479   EPI.ExceptionSpecDecl = Destructor;
8480   Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8481 
8482   // FIXME: If the destructor has a body that could throw, and the newly created
8483   // spec doesn't allow exceptions, we should emit a warning, because this
8484   // change in behavior can break conforming C++03 programs at runtime.
8485   // However, we don't have a body or an exception specification yet, so it
8486   // needs to be done somewhere else.
8487 }
8488 
8489 /// When generating a defaulted copy or move assignment operator, if a field
8490 /// should be copied with __builtin_memcpy rather than via explicit assignments,
8491 /// do so. This optimization only applies for arrays of scalars, and for arrays
8492 /// of class type where the selected copy/move-assignment operator is trivial.
8493 static StmtResult
buildMemcpyForAssignmentOp(Sema & S,SourceLocation Loc,QualType T,Expr * To,Expr * From)8494 buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
8495                            Expr *To, Expr *From) {
8496   // Compute the size of the memory buffer to be copied.
8497   QualType SizeType = S.Context.getSizeType();
8498   llvm::APInt Size(S.Context.getTypeSize(SizeType),
8499                    S.Context.getTypeSizeInChars(T).getQuantity());
8500 
8501   // Take the address of the field references for "from" and "to". We
8502   // directly construct UnaryOperators here because semantic analysis
8503   // does not permit us to take the address of an xvalue.
8504   From = new (S.Context) UnaryOperator(From, UO_AddrOf,
8505                          S.Context.getPointerType(From->getType()),
8506                          VK_RValue, OK_Ordinary, Loc);
8507   To = new (S.Context) UnaryOperator(To, UO_AddrOf,
8508                        S.Context.getPointerType(To->getType()),
8509                        VK_RValue, OK_Ordinary, Loc);
8510 
8511   const Type *E = T->getBaseElementTypeUnsafe();
8512   bool NeedsCollectableMemCpy =
8513     E->isRecordType() && E->getAs<RecordType>()->getDecl()->hasObjectMember();
8514 
8515   // Create a reference to the __builtin_objc_memmove_collectable function
8516   StringRef MemCpyName = NeedsCollectableMemCpy ?
8517     "__builtin_objc_memmove_collectable" :
8518     "__builtin_memcpy";
8519   LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
8520                  Sema::LookupOrdinaryName);
8521   S.LookupName(R, S.TUScope, true);
8522 
8523   FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
8524   if (!MemCpy)
8525     // Something went horribly wrong earlier, and we will have complained
8526     // about it.
8527     return StmtError();
8528 
8529   ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
8530                                             VK_RValue, Loc, 0);
8531   assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
8532 
8533   Expr *CallArgs[] = {
8534     To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
8535   };
8536   ExprResult Call = S.ActOnCallExpr(/*Scope=*/0, MemCpyRef.take(),
8537                                     Loc, CallArgs, Loc);
8538 
8539   assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
8540   return S.Owned(Call.takeAs<Stmt>());
8541 }
8542 
8543 /// \brief Builds a statement that copies/moves the given entity from \p From to
8544 /// \c To.
8545 ///
8546 /// This routine is used to copy/move the members of a class with an
8547 /// implicitly-declared copy/move assignment operator. When the entities being
8548 /// copied are arrays, this routine builds for loops to copy them.
8549 ///
8550 /// \param S The Sema object used for type-checking.
8551 ///
8552 /// \param Loc The location where the implicit copy/move is being generated.
8553 ///
8554 /// \param T The type of the expressions being copied/moved. Both expressions
8555 /// must have this type.
8556 ///
8557 /// \param To The expression we are copying/moving to.
8558 ///
8559 /// \param From The expression we are copying/moving from.
8560 ///
8561 /// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
8562 /// Otherwise, it's a non-static member subobject.
8563 ///
8564 /// \param Copying Whether we're copying or moving.
8565 ///
8566 /// \param Depth Internal parameter recording the depth of the recursion.
8567 ///
8568 /// \returns A statement or a loop that copies the expressions, or StmtResult(0)
8569 /// if a memcpy should be used instead.
8570 static StmtResult
buildSingleCopyAssignRecursively(Sema & S,SourceLocation Loc,QualType T,Expr * To,Expr * From,bool CopyingBaseSubobject,bool Copying,unsigned Depth=0)8571 buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
8572                                  Expr *To, Expr *From,
8573                                  bool CopyingBaseSubobject, bool Copying,
8574                                  unsigned Depth = 0) {
8575   // C++11 [class.copy]p28:
8576   //   Each subobject is assigned in the manner appropriate to its type:
8577   //
8578   //     - if the subobject is of class type, as if by a call to operator= with
8579   //       the subobject as the object expression and the corresponding
8580   //       subobject of x as a single function argument (as if by explicit
8581   //       qualification; that is, ignoring any possible virtual overriding
8582   //       functions in more derived classes);
8583   //
8584   // C++03 [class.copy]p13:
8585   //     - if the subobject is of class type, the copy assignment operator for
8586   //       the class is used (as if by explicit qualification; that is,
8587   //       ignoring any possible virtual overriding functions in more derived
8588   //       classes);
8589   if (const RecordType *RecordTy = T->getAs<RecordType>()) {
8590     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8591 
8592     // Look for operator=.
8593     DeclarationName Name
8594       = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8595     LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
8596     S.LookupQualifiedName(OpLookup, ClassDecl, false);
8597 
8598     // Prior to C++11, filter out any result that isn't a copy/move-assignment
8599     // operator.
8600     if (!S.getLangOpts().CPlusPlus11) {
8601       LookupResult::Filter F = OpLookup.makeFilter();
8602       while (F.hasNext()) {
8603         NamedDecl *D = F.next();
8604         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
8605           if (Method->isCopyAssignmentOperator() ||
8606               (!Copying && Method->isMoveAssignmentOperator()))
8607             continue;
8608 
8609         F.erase();
8610       }
8611       F.done();
8612     }
8613 
8614     // Suppress the protected check (C++ [class.protected]) for each of the
8615     // assignment operators we found. This strange dance is required when
8616     // we're assigning via a base classes's copy-assignment operator. To
8617     // ensure that we're getting the right base class subobject (without
8618     // ambiguities), we need to cast "this" to that subobject type; to
8619     // ensure that we don't go through the virtual call mechanism, we need
8620     // to qualify the operator= name with the base class (see below). However,
8621     // this means that if the base class has a protected copy assignment
8622     // operator, the protected member access check will fail. So, we
8623     // rewrite "protected" access to "public" access in this case, since we
8624     // know by construction that we're calling from a derived class.
8625     if (CopyingBaseSubobject) {
8626       for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
8627            L != LEnd; ++L) {
8628         if (L.getAccess() == AS_protected)
8629           L.setAccess(AS_public);
8630       }
8631     }
8632 
8633     // Create the nested-name-specifier that will be used to qualify the
8634     // reference to operator=; this is required to suppress the virtual
8635     // call mechanism.
8636     CXXScopeSpec SS;
8637     const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
8638     SS.MakeTrivial(S.Context,
8639                    NestedNameSpecifier::Create(S.Context, 0, false,
8640                                                CanonicalT),
8641                    Loc);
8642 
8643     // Create the reference to operator=.
8644     ExprResult OpEqualRef
8645       = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
8646                                    /*TemplateKWLoc=*/SourceLocation(),
8647                                    /*FirstQualifierInScope=*/0,
8648                                    OpLookup,
8649                                    /*TemplateArgs=*/0,
8650                                    /*SuppressQualifierCheck=*/true);
8651     if (OpEqualRef.isInvalid())
8652       return StmtError();
8653 
8654     // Build the call to the assignment operator.
8655 
8656     ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
8657                                                   OpEqualRef.takeAs<Expr>(),
8658                                                   Loc, From, Loc);
8659     if (Call.isInvalid())
8660       return StmtError();
8661 
8662     // If we built a call to a trivial 'operator=' while copying an array,
8663     // bail out. We'll replace the whole shebang with a memcpy.
8664     CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
8665     if (CE && CE->getMethodDecl()->isTrivial() && Depth)
8666       return StmtResult((Stmt*)0);
8667 
8668     // Convert to an expression-statement, and clean up any produced
8669     // temporaries.
8670     return S.ActOnExprStmt(Call);
8671   }
8672 
8673   //     - if the subobject is of scalar type, the built-in assignment
8674   //       operator is used.
8675   const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
8676   if (!ArrayTy) {
8677     ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
8678     if (Assignment.isInvalid())
8679       return StmtError();
8680     return S.ActOnExprStmt(Assignment);
8681   }
8682 
8683   //     - if the subobject is an array, each element is assigned, in the
8684   //       manner appropriate to the element type;
8685 
8686   // Construct a loop over the array bounds, e.g.,
8687   //
8688   //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
8689   //
8690   // that will copy each of the array elements.
8691   QualType SizeType = S.Context.getSizeType();
8692 
8693   // Create the iteration variable.
8694   IdentifierInfo *IterationVarName = 0;
8695   {
8696     SmallString<8> Str;
8697     llvm::raw_svector_ostream OS(Str);
8698     OS << "__i" << Depth;
8699     IterationVarName = &S.Context.Idents.get(OS.str());
8700   }
8701   VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
8702                                           IterationVarName, SizeType,
8703                             S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
8704                                           SC_None);
8705 
8706   // Initialize the iteration variable to zero.
8707   llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
8708   IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
8709 
8710   // Create a reference to the iteration variable; we'll use this several
8711   // times throughout.
8712   Expr *IterationVarRef
8713     = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
8714   assert(IterationVarRef && "Reference to invented variable cannot fail!");
8715   Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
8716   assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
8717 
8718   // Create the DeclStmt that holds the iteration variable.
8719   Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
8720 
8721   // Subscript the "from" and "to" expressions with the iteration variable.
8722   From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
8723                                                          IterationVarRefRVal,
8724                                                          Loc));
8725   To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
8726                                                        IterationVarRefRVal,
8727                                                        Loc));
8728   if (!Copying) // Cast to rvalue
8729     From = CastForMoving(S, From);
8730 
8731   // Build the copy/move for an individual element of the array.
8732   StmtResult Copy =
8733     buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
8734                                      To, From, CopyingBaseSubobject,
8735                                      Copying, Depth + 1);
8736   // Bail out if copying fails or if we determined that we should use memcpy.
8737   if (Copy.isInvalid() || !Copy.get())
8738     return Copy;
8739 
8740   // Create the comparison against the array bound.
8741   llvm::APInt Upper
8742     = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
8743   Expr *Comparison
8744     = new (S.Context) BinaryOperator(IterationVarRefRVal,
8745                      IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
8746                                      BO_NE, S.Context.BoolTy,
8747                                      VK_RValue, OK_Ordinary, Loc, false);
8748 
8749   // Create the pre-increment of the iteration variable.
8750   Expr *Increment
8751     = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
8752                                     VK_LValue, OK_Ordinary, Loc);
8753 
8754   // Construct the loop that copies all elements of this array.
8755   return S.ActOnForStmt(Loc, Loc, InitStmt,
8756                         S.MakeFullExpr(Comparison),
8757                         0, S.MakeFullDiscardedValueExpr(Increment),
8758                         Loc, Copy.take());
8759 }
8760 
8761 static StmtResult
buildSingleCopyAssign(Sema & S,SourceLocation Loc,QualType T,Expr * To,Expr * From,bool CopyingBaseSubobject,bool Copying)8762 buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
8763                       Expr *To, Expr *From,
8764                       bool CopyingBaseSubobject, bool Copying) {
8765   // Maybe we should use a memcpy?
8766   if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
8767       T.isTriviallyCopyableType(S.Context))
8768     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8769 
8770   StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
8771                                                      CopyingBaseSubobject,
8772                                                      Copying, 0));
8773 
8774   // If we ended up picking a trivial assignment operator for an array of a
8775   // non-trivially-copyable class type, just emit a memcpy.
8776   if (!Result.isInvalid() && !Result.get())
8777     return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8778 
8779   return Result;
8780 }
8781 
8782 Sema::ImplicitExceptionSpecification
ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl * MD)8783 Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
8784   CXXRecordDecl *ClassDecl = MD->getParent();
8785 
8786   ImplicitExceptionSpecification ExceptSpec(*this);
8787   if (ClassDecl->isInvalidDecl())
8788     return ExceptSpec;
8789 
8790   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
8791   assert(T->getNumArgs() == 1 && "not a copy assignment op");
8792   unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
8793 
8794   // C++ [except.spec]p14:
8795   //   An implicitly declared special member function (Clause 12) shall have an
8796   //   exception-specification. [...]
8797 
8798   // It is unspecified whether or not an implicit copy assignment operator
8799   // attempts to deduplicate calls to assignment operators of virtual bases are
8800   // made. As such, this exception specification is effectively unspecified.
8801   // Based on a similar decision made for constness in C++0x, we're erring on
8802   // the side of assuming such calls to be made regardless of whether they
8803   // actually happen.
8804   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8805                                        BaseEnd = ClassDecl->bases_end();
8806        Base != BaseEnd; ++Base) {
8807     if (Base->isVirtual())
8808       continue;
8809 
8810     CXXRecordDecl *BaseClassDecl
8811       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8812     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8813                                                             ArgQuals, false, 0))
8814       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8815   }
8816 
8817   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8818                                        BaseEnd = ClassDecl->vbases_end();
8819        Base != BaseEnd; ++Base) {
8820     CXXRecordDecl *BaseClassDecl
8821       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8822     if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8823                                                             ArgQuals, false, 0))
8824       ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8825   }
8826 
8827   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8828                                   FieldEnd = ClassDecl->field_end();
8829        Field != FieldEnd;
8830        ++Field) {
8831     QualType FieldType = Context.getBaseElementType(Field->getType());
8832     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8833       if (CXXMethodDecl *CopyAssign =
8834           LookupCopyingAssignment(FieldClassDecl,
8835                                   ArgQuals | FieldType.getCVRQualifiers(),
8836                                   false, 0))
8837         ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
8838     }
8839   }
8840 
8841   return ExceptSpec;
8842 }
8843 
DeclareImplicitCopyAssignment(CXXRecordDecl * ClassDecl)8844 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
8845   // Note: The following rules are largely analoguous to the copy
8846   // constructor rules. Note that virtual bases are not taken into account
8847   // for determining the argument type of the operator. Note also that
8848   // operators taking an object instead of a reference are allowed.
8849   assert(ClassDecl->needsImplicitCopyAssignment());
8850 
8851   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
8852   if (DSM.isAlreadyBeingDeclared())
8853     return 0;
8854 
8855   QualType ArgType = Context.getTypeDeclType(ClassDecl);
8856   QualType RetType = Context.getLValueReferenceType(ArgType);
8857   bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
8858   if (Const)
8859     ArgType = ArgType.withConst();
8860   ArgType = Context.getLValueReferenceType(ArgType);
8861 
8862   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8863                                                      CXXCopyAssignment,
8864                                                      Const);
8865 
8866   //   An implicitly-declared copy assignment operator is an inline public
8867   //   member of its class.
8868   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8869   SourceLocation ClassLoc = ClassDecl->getLocation();
8870   DeclarationNameInfo NameInfo(Name, ClassLoc);
8871   CXXMethodDecl *CopyAssignment =
8872       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
8873                             /*TInfo=*/ 0, /*StorageClass=*/ SC_None,
8874                             /*isInline=*/ true, Constexpr, SourceLocation());
8875   CopyAssignment->setAccess(AS_public);
8876   CopyAssignment->setDefaulted();
8877   CopyAssignment->setImplicit();
8878 
8879   // Build an exception specification pointing back at this member.
8880   FunctionProtoType::ExtProtoInfo EPI;
8881   EPI.ExceptionSpecType = EST_Unevaluated;
8882   EPI.ExceptionSpecDecl = CopyAssignment;
8883   CopyAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
8884 
8885   // Add the parameter to the operator.
8886   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
8887                                                ClassLoc, ClassLoc, /*Id=*/0,
8888                                                ArgType, /*TInfo=*/0,
8889                                                SC_None, 0);
8890   CopyAssignment->setParams(FromParam);
8891 
8892   AddOverriddenMethods(ClassDecl, CopyAssignment);
8893 
8894   CopyAssignment->setTrivial(
8895     ClassDecl->needsOverloadResolutionForCopyAssignment()
8896       ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
8897       : ClassDecl->hasTrivialCopyAssignment());
8898 
8899   // C++11 [class.copy]p19:
8900   //   ....  If the class definition does not explicitly declare a copy
8901   //   assignment operator, there is no user-declared move constructor, and
8902   //   there is no user-declared move assignment operator, a copy assignment
8903   //   operator is implicitly declared as defaulted.
8904   if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
8905     SetDeclDeleted(CopyAssignment, ClassLoc);
8906 
8907   // Note that we have added this copy-assignment operator.
8908   ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
8909 
8910   if (Scope *S = getScopeForContext(ClassDecl))
8911     PushOnScopeChains(CopyAssignment, S, false);
8912   ClassDecl->addDecl(CopyAssignment);
8913 
8914   return CopyAssignment;
8915 }
8916 
8917 /// Diagnose an implicit copy operation for a class which is odr-used, but
8918 /// which is deprecated because the class has a user-declared copy constructor,
8919 /// copy assignment operator, or destructor.
diagnoseDeprecatedCopyOperation(Sema & S,CXXMethodDecl * CopyOp,SourceLocation UseLoc)8920 static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp,
8921                                             SourceLocation UseLoc) {
8922   assert(CopyOp->isImplicit());
8923 
8924   CXXRecordDecl *RD = CopyOp->getParent();
8925   CXXMethodDecl *UserDeclaredOperation = 0;
8926 
8927   // In Microsoft mode, assignment operations don't affect constructors and
8928   // vice versa.
8929   if (RD->hasUserDeclaredDestructor()) {
8930     UserDeclaredOperation = RD->getDestructor();
8931   } else if (!isa<CXXConstructorDecl>(CopyOp) &&
8932              RD->hasUserDeclaredCopyConstructor() &&
8933              !S.getLangOpts().MicrosoftMode) {
8934     // Find any user-declared copy constructor.
8935     for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
8936                                       E = RD->ctor_end(); I != E; ++I) {
8937       if (I->isCopyConstructor()) {
8938         UserDeclaredOperation = *I;
8939         break;
8940       }
8941     }
8942     assert(UserDeclaredOperation);
8943   } else if (isa<CXXConstructorDecl>(CopyOp) &&
8944              RD->hasUserDeclaredCopyAssignment() &&
8945              !S.getLangOpts().MicrosoftMode) {
8946     // Find any user-declared move assignment operator.
8947     for (CXXRecordDecl::method_iterator I = RD->method_begin(),
8948                                         E = RD->method_end(); I != E; ++I) {
8949       if (I->isCopyAssignmentOperator()) {
8950         UserDeclaredOperation = *I;
8951         break;
8952       }
8953     }
8954     assert(UserDeclaredOperation);
8955   }
8956 
8957   if (UserDeclaredOperation) {
8958     S.Diag(UserDeclaredOperation->getLocation(),
8959          diag::warn_deprecated_copy_operation)
8960       << RD << /*copy assignment*/!isa<CXXConstructorDecl>(CopyOp)
8961       << /*destructor*/isa<CXXDestructorDecl>(UserDeclaredOperation);
8962     S.Diag(UseLoc, diag::note_member_synthesized_at)
8963       << (isa<CXXConstructorDecl>(CopyOp) ? Sema::CXXCopyConstructor
8964                                           : Sema::CXXCopyAssignment)
8965       << RD;
8966   }
8967 }
8968 
DefineImplicitCopyAssignment(SourceLocation CurrentLocation,CXXMethodDecl * CopyAssignOperator)8969 void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
8970                                         CXXMethodDecl *CopyAssignOperator) {
8971   assert((CopyAssignOperator->isDefaulted() &&
8972           CopyAssignOperator->isOverloadedOperator() &&
8973           CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
8974           !CopyAssignOperator->doesThisDeclarationHaveABody() &&
8975           !CopyAssignOperator->isDeleted()) &&
8976          "DefineImplicitCopyAssignment called for wrong function");
8977 
8978   CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
8979 
8980   if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
8981     CopyAssignOperator->setInvalidDecl();
8982     return;
8983   }
8984 
8985   // C++11 [class.copy]p18:
8986   //   The [definition of an implicitly declared copy assignment operator] is
8987   //   deprecated if the class has a user-declared copy constructor or a
8988   //   user-declared destructor.
8989   if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
8990     diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator, CurrentLocation);
8991 
8992   CopyAssignOperator->setUsed();
8993 
8994   SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
8995   DiagnosticErrorTrap Trap(Diags);
8996 
8997   // C++0x [class.copy]p30:
8998   //   The implicitly-defined or explicitly-defaulted copy assignment operator
8999   //   for a non-union class X performs memberwise copy assignment of its
9000   //   subobjects. The direct base classes of X are assigned first, in the
9001   //   order of their declaration in the base-specifier-list, and then the
9002   //   immediate non-static data members of X are assigned, in the order in
9003   //   which they were declared in the class definition.
9004 
9005   // The statements that form the synthesized function body.
9006   SmallVector<Stmt*, 8> Statements;
9007 
9008   // The parameter for the "other" object, which we are copying from.
9009   ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
9010   Qualifiers OtherQuals = Other->getType().getQualifiers();
9011   QualType OtherRefType = Other->getType();
9012   if (const LValueReferenceType *OtherRef
9013                                 = OtherRefType->getAs<LValueReferenceType>()) {
9014     OtherRefType = OtherRef->getPointeeType();
9015     OtherQuals = OtherRefType.getQualifiers();
9016   }
9017 
9018   // Our location for everything implicitly-generated.
9019   SourceLocation Loc = CopyAssignOperator->getLocation();
9020 
9021   // Construct a reference to the "other" object. We'll be using this
9022   // throughout the generated ASTs.
9023   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
9024   assert(OtherRef && "Reference to parameter cannot fail!");
9025 
9026   // Construct the "this" pointer. We'll be using this throughout the generated
9027   // ASTs.
9028   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
9029   assert(This && "Reference to this cannot fail!");
9030 
9031   // Assign base classes.
9032   bool Invalid = false;
9033   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9034        E = ClassDecl->bases_end(); Base != E; ++Base) {
9035     // Form the assignment:
9036     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
9037     QualType BaseType = Base->getType().getUnqualifiedType();
9038     if (!BaseType->isRecordType()) {
9039       Invalid = true;
9040       continue;
9041     }
9042 
9043     CXXCastPath BasePath;
9044     BasePath.push_back(Base);
9045 
9046     // Construct the "from" expression, which is an implicit cast to the
9047     // appropriately-qualified base type.
9048     Expr *From = OtherRef;
9049     From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
9050                              CK_UncheckedDerivedToBase,
9051                              VK_LValue, &BasePath).take();
9052 
9053     // Dereference "this".
9054     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9055 
9056     // Implicitly cast "this" to the appropriately-qualified base type.
9057     To = ImpCastExprToType(To.take(),
9058                            Context.getCVRQualifiedType(BaseType,
9059                                      CopyAssignOperator->getTypeQualifiers()),
9060                            CK_UncheckedDerivedToBase,
9061                            VK_LValue, &BasePath);
9062 
9063     // Build the copy.
9064     StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
9065                                             To.get(), From,
9066                                             /*CopyingBaseSubobject=*/true,
9067                                             /*Copying=*/true);
9068     if (Copy.isInvalid()) {
9069       Diag(CurrentLocation, diag::note_member_synthesized_at)
9070         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9071       CopyAssignOperator->setInvalidDecl();
9072       return;
9073     }
9074 
9075     // Success! Record the copy.
9076     Statements.push_back(Copy.takeAs<Expr>());
9077   }
9078 
9079   // Assign non-static members.
9080   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9081                                   FieldEnd = ClassDecl->field_end();
9082        Field != FieldEnd; ++Field) {
9083     if (Field->isUnnamedBitfield())
9084       continue;
9085 
9086     if (Field->isInvalidDecl()) {
9087       Invalid = true;
9088       continue;
9089     }
9090 
9091     // Check for members of reference type; we can't copy those.
9092     if (Field->getType()->isReferenceType()) {
9093       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9094         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9095       Diag(Field->getLocation(), diag::note_declared_at);
9096       Diag(CurrentLocation, diag::note_member_synthesized_at)
9097         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9098       Invalid = true;
9099       continue;
9100     }
9101 
9102     // Check for members of const-qualified, non-class type.
9103     QualType BaseType = Context.getBaseElementType(Field->getType());
9104     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9105       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9106         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9107       Diag(Field->getLocation(), diag::note_declared_at);
9108       Diag(CurrentLocation, diag::note_member_synthesized_at)
9109         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9110       Invalid = true;
9111       continue;
9112     }
9113 
9114     // Suppress assigning zero-width bitfields.
9115     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9116       continue;
9117 
9118     QualType FieldType = Field->getType().getNonReferenceType();
9119     if (FieldType->isIncompleteArrayType()) {
9120       assert(ClassDecl->hasFlexibleArrayMember() &&
9121              "Incomplete array type is not valid");
9122       continue;
9123     }
9124 
9125     // Build references to the field in the object we're copying from and to.
9126     CXXScopeSpec SS; // Intentionally empty
9127     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9128                               LookupMemberName);
9129     MemberLookup.addDecl(*Field);
9130     MemberLookup.resolveKind();
9131     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9132                                                Loc, /*IsArrow=*/false,
9133                                                SS, SourceLocation(), 0,
9134                                                MemberLookup, 0);
9135     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9136                                              Loc, /*IsArrow=*/true,
9137                                              SS, SourceLocation(), 0,
9138                                              MemberLookup, 0);
9139     assert(!From.isInvalid() && "Implicit field reference cannot fail");
9140     assert(!To.isInvalid() && "Implicit field reference cannot fail");
9141 
9142     // Build the copy of this field.
9143     StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
9144                                             To.get(), From.get(),
9145                                             /*CopyingBaseSubobject=*/false,
9146                                             /*Copying=*/true);
9147     if (Copy.isInvalid()) {
9148       Diag(CurrentLocation, diag::note_member_synthesized_at)
9149         << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9150       CopyAssignOperator->setInvalidDecl();
9151       return;
9152     }
9153 
9154     // Success! Record the copy.
9155     Statements.push_back(Copy.takeAs<Stmt>());
9156   }
9157 
9158   if (!Invalid) {
9159     // Add a "return *this;"
9160     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9161 
9162     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9163     if (Return.isInvalid())
9164       Invalid = true;
9165     else {
9166       Statements.push_back(Return.takeAs<Stmt>());
9167 
9168       if (Trap.hasErrorOccurred()) {
9169         Diag(CurrentLocation, diag::note_member_synthesized_at)
9170           << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9171         Invalid = true;
9172       }
9173     }
9174   }
9175 
9176   if (Invalid) {
9177     CopyAssignOperator->setInvalidDecl();
9178     return;
9179   }
9180 
9181   StmtResult Body;
9182   {
9183     CompoundScopeRAII CompoundScope(*this);
9184     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9185                              /*isStmtExpr=*/false);
9186     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9187   }
9188   CopyAssignOperator->setBody(Body.takeAs<Stmt>());
9189 
9190   if (ASTMutationListener *L = getASTMutationListener()) {
9191     L->CompletedImplicitDefinition(CopyAssignOperator);
9192   }
9193 }
9194 
9195 Sema::ImplicitExceptionSpecification
ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl * MD)9196 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
9197   CXXRecordDecl *ClassDecl = MD->getParent();
9198 
9199   ImplicitExceptionSpecification ExceptSpec(*this);
9200   if (ClassDecl->isInvalidDecl())
9201     return ExceptSpec;
9202 
9203   // C++0x [except.spec]p14:
9204   //   An implicitly declared special member function (Clause 12) shall have an
9205   //   exception-specification. [...]
9206 
9207   // It is unspecified whether or not an implicit move assignment operator
9208   // attempts to deduplicate calls to assignment operators of virtual bases are
9209   // made. As such, this exception specification is effectively unspecified.
9210   // Based on a similar decision made for constness in C++0x, we're erring on
9211   // the side of assuming such calls to be made regardless of whether they
9212   // actually happen.
9213   // Note that a move constructor is not implicitly declared when there are
9214   // virtual bases, but it can still be user-declared and explicitly defaulted.
9215   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9216                                        BaseEnd = ClassDecl->bases_end();
9217        Base != BaseEnd; ++Base) {
9218     if (Base->isVirtual())
9219       continue;
9220 
9221     CXXRecordDecl *BaseClassDecl
9222       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9223     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9224                                                            0, false, 0))
9225       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9226   }
9227 
9228   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9229                                        BaseEnd = ClassDecl->vbases_end();
9230        Base != BaseEnd; ++Base) {
9231     CXXRecordDecl *BaseClassDecl
9232       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9233     if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9234                                                            0, false, 0))
9235       ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9236   }
9237 
9238   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9239                                   FieldEnd = ClassDecl->field_end();
9240        Field != FieldEnd;
9241        ++Field) {
9242     QualType FieldType = Context.getBaseElementType(Field->getType());
9243     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9244       if (CXXMethodDecl *MoveAssign =
9245               LookupMovingAssignment(FieldClassDecl,
9246                                      FieldType.getCVRQualifiers(),
9247                                      false, 0))
9248         ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
9249     }
9250   }
9251 
9252   return ExceptSpec;
9253 }
9254 
9255 /// Determine whether the class type has any direct or indirect virtual base
9256 /// classes which have a non-trivial move assignment operator.
9257 static bool
hasVirtualBaseWithNonTrivialMoveAssignment(Sema & S,CXXRecordDecl * ClassDecl)9258 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
9259   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9260                                           BaseEnd = ClassDecl->vbases_end();
9261        Base != BaseEnd; ++Base) {
9262     CXXRecordDecl *BaseClass =
9263         cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9264 
9265     // Try to declare the move assignment. If it would be deleted, then the
9266     // class does not have a non-trivial move assignment.
9267     if (BaseClass->needsImplicitMoveAssignment())
9268       S.DeclareImplicitMoveAssignment(BaseClass);
9269 
9270     if (BaseClass->hasNonTrivialMoveAssignment())
9271       return true;
9272   }
9273 
9274   return false;
9275 }
9276 
9277 /// Determine whether the given type either has a move constructor or is
9278 /// trivially copyable.
9279 static bool
hasMoveOrIsTriviallyCopyable(Sema & S,QualType Type,bool IsConstructor)9280 hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
9281   Type = S.Context.getBaseElementType(Type);
9282 
9283   // FIXME: Technically, non-trivially-copyable non-class types, such as
9284   // reference types, are supposed to return false here, but that appears
9285   // to be a standard defect.
9286   CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
9287   if (!ClassDecl || !ClassDecl->getDefinition() || ClassDecl->isInvalidDecl())
9288     return true;
9289 
9290   if (Type.isTriviallyCopyableType(S.Context))
9291     return true;
9292 
9293   if (IsConstructor) {
9294     // FIXME: Need this because otherwise hasMoveConstructor isn't guaranteed to
9295     // give the right answer.
9296     if (ClassDecl->needsImplicitMoveConstructor())
9297       S.DeclareImplicitMoveConstructor(ClassDecl);
9298     return ClassDecl->hasMoveConstructor();
9299   }
9300 
9301   // FIXME: Need this because otherwise hasMoveAssignment isn't guaranteed to
9302   // give the right answer.
9303   if (ClassDecl->needsImplicitMoveAssignment())
9304     S.DeclareImplicitMoveAssignment(ClassDecl);
9305   return ClassDecl->hasMoveAssignment();
9306 }
9307 
9308 /// Determine whether all non-static data members and direct or virtual bases
9309 /// of class \p ClassDecl have either a move operation, or are trivially
9310 /// copyable.
subobjectsHaveMoveOrTrivialCopy(Sema & S,CXXRecordDecl * ClassDecl,bool IsConstructor)9311 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
9312                                             bool IsConstructor) {
9313   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9314                                           BaseEnd = ClassDecl->bases_end();
9315        Base != BaseEnd; ++Base) {
9316     if (Base->isVirtual())
9317       continue;
9318 
9319     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9320       return false;
9321   }
9322 
9323   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9324                                           BaseEnd = ClassDecl->vbases_end();
9325        Base != BaseEnd; ++Base) {
9326     if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9327       return false;
9328   }
9329 
9330   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9331                                      FieldEnd = ClassDecl->field_end();
9332        Field != FieldEnd; ++Field) {
9333     if (!hasMoveOrIsTriviallyCopyable(S, Field->getType(), IsConstructor))
9334       return false;
9335   }
9336 
9337   return true;
9338 }
9339 
DeclareImplicitMoveAssignment(CXXRecordDecl * ClassDecl)9340 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
9341   // C++11 [class.copy]p20:
9342   //   If the definition of a class X does not explicitly declare a move
9343   //   assignment operator, one will be implicitly declared as defaulted
9344   //   if and only if:
9345   //
9346   //   - [first 4 bullets]
9347   assert(ClassDecl->needsImplicitMoveAssignment());
9348 
9349   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
9350   if (DSM.isAlreadyBeingDeclared())
9351     return 0;
9352 
9353   // [Checked after we build the declaration]
9354   //   - the move assignment operator would not be implicitly defined as
9355   //     deleted,
9356 
9357   // [DR1402]:
9358   //   - X has no direct or indirect virtual base class with a non-trivial
9359   //     move assignment operator, and
9360   //   - each of X's non-static data members and direct or virtual base classes
9361   //     has a type that either has a move assignment operator or is trivially
9362   //     copyable.
9363   if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
9364       !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
9365     ClassDecl->setFailedImplicitMoveAssignment();
9366     return 0;
9367   }
9368 
9369   // Note: The following rules are largely analoguous to the move
9370   // constructor rules.
9371 
9372   QualType ArgType = Context.getTypeDeclType(ClassDecl);
9373   QualType RetType = Context.getLValueReferenceType(ArgType);
9374   ArgType = Context.getRValueReferenceType(ArgType);
9375 
9376   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9377                                                      CXXMoveAssignment,
9378                                                      false);
9379 
9380   //   An implicitly-declared move assignment operator is an inline public
9381   //   member of its class.
9382   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
9383   SourceLocation ClassLoc = ClassDecl->getLocation();
9384   DeclarationNameInfo NameInfo(Name, ClassLoc);
9385   CXXMethodDecl *MoveAssignment =
9386       CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9387                             /*TInfo=*/0, /*StorageClass=*/SC_None,
9388                             /*isInline=*/true, Constexpr, SourceLocation());
9389   MoveAssignment->setAccess(AS_public);
9390   MoveAssignment->setDefaulted();
9391   MoveAssignment->setImplicit();
9392 
9393   // Build an exception specification pointing back at this member.
9394   FunctionProtoType::ExtProtoInfo EPI;
9395   EPI.ExceptionSpecType = EST_Unevaluated;
9396   EPI.ExceptionSpecDecl = MoveAssignment;
9397   MoveAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
9398 
9399   // Add the parameter to the operator.
9400   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
9401                                                ClassLoc, ClassLoc, /*Id=*/0,
9402                                                ArgType, /*TInfo=*/0,
9403                                                SC_None, 0);
9404   MoveAssignment->setParams(FromParam);
9405 
9406   AddOverriddenMethods(ClassDecl, MoveAssignment);
9407 
9408   MoveAssignment->setTrivial(
9409     ClassDecl->needsOverloadResolutionForMoveAssignment()
9410       ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
9411       : ClassDecl->hasTrivialMoveAssignment());
9412 
9413   // C++0x [class.copy]p9:
9414   //   If the definition of a class X does not explicitly declare a move
9415   //   assignment operator, one will be implicitly declared as defaulted if and
9416   //   only if:
9417   //   [...]
9418   //   - the move assignment operator would not be implicitly defined as
9419   //     deleted.
9420   if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
9421     // Cache this result so that we don't try to generate this over and over
9422     // on every lookup, leaking memory and wasting time.
9423     ClassDecl->setFailedImplicitMoveAssignment();
9424     return 0;
9425   }
9426 
9427   // Note that we have added this copy-assignment operator.
9428   ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
9429 
9430   if (Scope *S = getScopeForContext(ClassDecl))
9431     PushOnScopeChains(MoveAssignment, S, false);
9432   ClassDecl->addDecl(MoveAssignment);
9433 
9434   return MoveAssignment;
9435 }
9436 
DefineImplicitMoveAssignment(SourceLocation CurrentLocation,CXXMethodDecl * MoveAssignOperator)9437 void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
9438                                         CXXMethodDecl *MoveAssignOperator) {
9439   assert((MoveAssignOperator->isDefaulted() &&
9440           MoveAssignOperator->isOverloadedOperator() &&
9441           MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
9442           !MoveAssignOperator->doesThisDeclarationHaveABody() &&
9443           !MoveAssignOperator->isDeleted()) &&
9444          "DefineImplicitMoveAssignment called for wrong function");
9445 
9446   CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
9447 
9448   if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
9449     MoveAssignOperator->setInvalidDecl();
9450     return;
9451   }
9452 
9453   MoveAssignOperator->setUsed();
9454 
9455   SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
9456   DiagnosticErrorTrap Trap(Diags);
9457 
9458   // C++0x [class.copy]p28:
9459   //   The implicitly-defined or move assignment operator for a non-union class
9460   //   X performs memberwise move assignment of its subobjects. The direct base
9461   //   classes of X are assigned first, in the order of their declaration in the
9462   //   base-specifier-list, and then the immediate non-static data members of X
9463   //   are assigned, in the order in which they were declared in the class
9464   //   definition.
9465 
9466   // The statements that form the synthesized function body.
9467   SmallVector<Stmt*, 8> Statements;
9468 
9469   // The parameter for the "other" object, which we are move from.
9470   ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
9471   QualType OtherRefType = Other->getType()->
9472       getAs<RValueReferenceType>()->getPointeeType();
9473   assert(!OtherRefType.getQualifiers() &&
9474          "Bad argument type of defaulted move assignment");
9475 
9476   // Our location for everything implicitly-generated.
9477   SourceLocation Loc = MoveAssignOperator->getLocation();
9478 
9479   // Construct a reference to the "other" object. We'll be using this
9480   // throughout the generated ASTs.
9481   Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
9482   assert(OtherRef && "Reference to parameter cannot fail!");
9483   // Cast to rvalue.
9484   OtherRef = CastForMoving(*this, OtherRef);
9485 
9486   // Construct the "this" pointer. We'll be using this throughout the generated
9487   // ASTs.
9488   Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
9489   assert(This && "Reference to this cannot fail!");
9490 
9491   // Assign base classes.
9492   bool Invalid = false;
9493   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9494        E = ClassDecl->bases_end(); Base != E; ++Base) {
9495     // Form the assignment:
9496     //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
9497     QualType BaseType = Base->getType().getUnqualifiedType();
9498     if (!BaseType->isRecordType()) {
9499       Invalid = true;
9500       continue;
9501     }
9502 
9503     CXXCastPath BasePath;
9504     BasePath.push_back(Base);
9505 
9506     // Construct the "from" expression, which is an implicit cast to the
9507     // appropriately-qualified base type.
9508     Expr *From = OtherRef;
9509     From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
9510                              VK_XValue, &BasePath).take();
9511 
9512     // Dereference "this".
9513     ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9514 
9515     // Implicitly cast "this" to the appropriately-qualified base type.
9516     To = ImpCastExprToType(To.take(),
9517                            Context.getCVRQualifiedType(BaseType,
9518                                      MoveAssignOperator->getTypeQualifiers()),
9519                            CK_UncheckedDerivedToBase,
9520                            VK_LValue, &BasePath);
9521 
9522     // Build the move.
9523     StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
9524                                             To.get(), From,
9525                                             /*CopyingBaseSubobject=*/true,
9526                                             /*Copying=*/false);
9527     if (Move.isInvalid()) {
9528       Diag(CurrentLocation, diag::note_member_synthesized_at)
9529         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9530       MoveAssignOperator->setInvalidDecl();
9531       return;
9532     }
9533 
9534     // Success! Record the move.
9535     Statements.push_back(Move.takeAs<Expr>());
9536   }
9537 
9538   // Assign non-static members.
9539   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9540                                   FieldEnd = ClassDecl->field_end();
9541        Field != FieldEnd; ++Field) {
9542     if (Field->isUnnamedBitfield())
9543       continue;
9544 
9545     if (Field->isInvalidDecl()) {
9546       Invalid = true;
9547       continue;
9548     }
9549 
9550     // Check for members of reference type; we can't move those.
9551     if (Field->getType()->isReferenceType()) {
9552       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9553         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9554       Diag(Field->getLocation(), diag::note_declared_at);
9555       Diag(CurrentLocation, diag::note_member_synthesized_at)
9556         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9557       Invalid = true;
9558       continue;
9559     }
9560 
9561     // Check for members of const-qualified, non-class type.
9562     QualType BaseType = Context.getBaseElementType(Field->getType());
9563     if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9564       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9565         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9566       Diag(Field->getLocation(), diag::note_declared_at);
9567       Diag(CurrentLocation, diag::note_member_synthesized_at)
9568         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9569       Invalid = true;
9570       continue;
9571     }
9572 
9573     // Suppress assigning zero-width bitfields.
9574     if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9575       continue;
9576 
9577     QualType FieldType = Field->getType().getNonReferenceType();
9578     if (FieldType->isIncompleteArrayType()) {
9579       assert(ClassDecl->hasFlexibleArrayMember() &&
9580              "Incomplete array type is not valid");
9581       continue;
9582     }
9583 
9584     // Build references to the field in the object we're copying from and to.
9585     CXXScopeSpec SS; // Intentionally empty
9586     LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9587                               LookupMemberName);
9588     MemberLookup.addDecl(*Field);
9589     MemberLookup.resolveKind();
9590     ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9591                                                Loc, /*IsArrow=*/false,
9592                                                SS, SourceLocation(), 0,
9593                                                MemberLookup, 0);
9594     ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9595                                              Loc, /*IsArrow=*/true,
9596                                              SS, SourceLocation(), 0,
9597                                              MemberLookup, 0);
9598     assert(!From.isInvalid() && "Implicit field reference cannot fail");
9599     assert(!To.isInvalid() && "Implicit field reference cannot fail");
9600 
9601     assert(!From.get()->isLValue() && // could be xvalue or prvalue
9602         "Member reference with rvalue base must be rvalue except for reference "
9603         "members, which aren't allowed for move assignment.");
9604 
9605     // Build the move of this field.
9606     StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
9607                                             To.get(), From.get(),
9608                                             /*CopyingBaseSubobject=*/false,
9609                                             /*Copying=*/false);
9610     if (Move.isInvalid()) {
9611       Diag(CurrentLocation, diag::note_member_synthesized_at)
9612         << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9613       MoveAssignOperator->setInvalidDecl();
9614       return;
9615     }
9616 
9617     // Success! Record the copy.
9618     Statements.push_back(Move.takeAs<Stmt>());
9619   }
9620 
9621   if (!Invalid) {
9622     // Add a "return *this;"
9623     ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9624 
9625     StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9626     if (Return.isInvalid())
9627       Invalid = true;
9628     else {
9629       Statements.push_back(Return.takeAs<Stmt>());
9630 
9631       if (Trap.hasErrorOccurred()) {
9632         Diag(CurrentLocation, diag::note_member_synthesized_at)
9633           << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9634         Invalid = true;
9635       }
9636     }
9637   }
9638 
9639   if (Invalid) {
9640     MoveAssignOperator->setInvalidDecl();
9641     return;
9642   }
9643 
9644   StmtResult Body;
9645   {
9646     CompoundScopeRAII CompoundScope(*this);
9647     Body = ActOnCompoundStmt(Loc, Loc, Statements,
9648                              /*isStmtExpr=*/false);
9649     assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9650   }
9651   MoveAssignOperator->setBody(Body.takeAs<Stmt>());
9652 
9653   if (ASTMutationListener *L = getASTMutationListener()) {
9654     L->CompletedImplicitDefinition(MoveAssignOperator);
9655   }
9656 }
9657 
9658 Sema::ImplicitExceptionSpecification
ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl * MD)9659 Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
9660   CXXRecordDecl *ClassDecl = MD->getParent();
9661 
9662   ImplicitExceptionSpecification ExceptSpec(*this);
9663   if (ClassDecl->isInvalidDecl())
9664     return ExceptSpec;
9665 
9666   const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
9667   assert(T->getNumArgs() >= 1 && "not a copy ctor");
9668   unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
9669 
9670   // C++ [except.spec]p14:
9671   //   An implicitly declared special member function (Clause 12) shall have an
9672   //   exception-specification. [...]
9673   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9674                                        BaseEnd = ClassDecl->bases_end();
9675        Base != BaseEnd;
9676        ++Base) {
9677     // Virtual bases are handled below.
9678     if (Base->isVirtual())
9679       continue;
9680 
9681     CXXRecordDecl *BaseClassDecl
9682       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9683     if (CXXConstructorDecl *CopyConstructor =
9684           LookupCopyingConstructor(BaseClassDecl, Quals))
9685       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9686   }
9687   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9688                                        BaseEnd = ClassDecl->vbases_end();
9689        Base != BaseEnd;
9690        ++Base) {
9691     CXXRecordDecl *BaseClassDecl
9692       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9693     if (CXXConstructorDecl *CopyConstructor =
9694           LookupCopyingConstructor(BaseClassDecl, Quals))
9695       ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9696   }
9697   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9698                                   FieldEnd = ClassDecl->field_end();
9699        Field != FieldEnd;
9700        ++Field) {
9701     QualType FieldType = Context.getBaseElementType(Field->getType());
9702     if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9703       if (CXXConstructorDecl *CopyConstructor =
9704               LookupCopyingConstructor(FieldClassDecl,
9705                                        Quals | FieldType.getCVRQualifiers()))
9706       ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
9707     }
9708   }
9709 
9710   return ExceptSpec;
9711 }
9712 
DeclareImplicitCopyConstructor(CXXRecordDecl * ClassDecl)9713 CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
9714                                                     CXXRecordDecl *ClassDecl) {
9715   // C++ [class.copy]p4:
9716   //   If the class definition does not explicitly declare a copy
9717   //   constructor, one is declared implicitly.
9718   assert(ClassDecl->needsImplicitCopyConstructor());
9719 
9720   DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
9721   if (DSM.isAlreadyBeingDeclared())
9722     return 0;
9723 
9724   QualType ClassType = Context.getTypeDeclType(ClassDecl);
9725   QualType ArgType = ClassType;
9726   bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
9727   if (Const)
9728     ArgType = ArgType.withConst();
9729   ArgType = Context.getLValueReferenceType(ArgType);
9730 
9731   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9732                                                      CXXCopyConstructor,
9733                                                      Const);
9734 
9735   DeclarationName Name
9736     = Context.DeclarationNames.getCXXConstructorName(
9737                                            Context.getCanonicalType(ClassType));
9738   SourceLocation ClassLoc = ClassDecl->getLocation();
9739   DeclarationNameInfo NameInfo(Name, ClassLoc);
9740 
9741   //   An implicitly-declared copy constructor is an inline public
9742   //   member of its class.
9743   CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
9744       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9745       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9746       Constexpr);
9747   CopyConstructor->setAccess(AS_public);
9748   CopyConstructor->setDefaulted();
9749 
9750   // Build an exception specification pointing back at this member.
9751   FunctionProtoType::ExtProtoInfo EPI;
9752   EPI.ExceptionSpecType = EST_Unevaluated;
9753   EPI.ExceptionSpecDecl = CopyConstructor;
9754   CopyConstructor->setType(
9755       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9756 
9757   // Add the parameter to the constructor.
9758   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
9759                                                ClassLoc, ClassLoc,
9760                                                /*IdentifierInfo=*/0,
9761                                                ArgType, /*TInfo=*/0,
9762                                                SC_None, 0);
9763   CopyConstructor->setParams(FromParam);
9764 
9765   CopyConstructor->setTrivial(
9766     ClassDecl->needsOverloadResolutionForCopyConstructor()
9767       ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
9768       : ClassDecl->hasTrivialCopyConstructor());
9769 
9770   // C++11 [class.copy]p8:
9771   //   ... If the class definition does not explicitly declare a copy
9772   //   constructor, there is no user-declared move constructor, and there is no
9773   //   user-declared move assignment operator, a copy constructor is implicitly
9774   //   declared as defaulted.
9775   if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
9776     SetDeclDeleted(CopyConstructor, ClassLoc);
9777 
9778   // Note that we have declared this constructor.
9779   ++ASTContext::NumImplicitCopyConstructorsDeclared;
9780 
9781   if (Scope *S = getScopeForContext(ClassDecl))
9782     PushOnScopeChains(CopyConstructor, S, false);
9783   ClassDecl->addDecl(CopyConstructor);
9784 
9785   return CopyConstructor;
9786 }
9787 
DefineImplicitCopyConstructor(SourceLocation CurrentLocation,CXXConstructorDecl * CopyConstructor)9788 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
9789                                    CXXConstructorDecl *CopyConstructor) {
9790   assert((CopyConstructor->isDefaulted() &&
9791           CopyConstructor->isCopyConstructor() &&
9792           !CopyConstructor->doesThisDeclarationHaveABody() &&
9793           !CopyConstructor->isDeleted()) &&
9794          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
9795 
9796   CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
9797   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
9798 
9799   // C++11 [class.copy]p7:
9800   //   The [definition of an implicitly declared copy constructro] is
9801   //   deprecated if the class has a user-declared copy assignment operator
9802   //   or a user-declared destructor.
9803   if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
9804     diagnoseDeprecatedCopyOperation(*this, CopyConstructor, CurrentLocation);
9805 
9806   SynthesizedFunctionScope Scope(*this, CopyConstructor);
9807   DiagnosticErrorTrap Trap(Diags);
9808 
9809   if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) ||
9810       Trap.hasErrorOccurred()) {
9811     Diag(CurrentLocation, diag::note_member_synthesized_at)
9812       << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
9813     CopyConstructor->setInvalidDecl();
9814   }  else {
9815     Sema::CompoundScopeRAII CompoundScope(*this);
9816     CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
9817                                                CopyConstructor->getLocation(),
9818                                                MultiStmtArg(),
9819                                                /*isStmtExpr=*/false)
9820                                                               .takeAs<Stmt>());
9821   }
9822 
9823   CopyConstructor->setUsed();
9824   if (ASTMutationListener *L = getASTMutationListener()) {
9825     L->CompletedImplicitDefinition(CopyConstructor);
9826   }
9827 }
9828 
9829 Sema::ImplicitExceptionSpecification
ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl * MD)9830 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
9831   CXXRecordDecl *ClassDecl = MD->getParent();
9832 
9833   // C++ [except.spec]p14:
9834   //   An implicitly declared special member function (Clause 12) shall have an
9835   //   exception-specification. [...]
9836   ImplicitExceptionSpecification ExceptSpec(*this);
9837   if (ClassDecl->isInvalidDecl())
9838     return ExceptSpec;
9839 
9840   // Direct base-class constructors.
9841   for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
9842                                        BEnd = ClassDecl->bases_end();
9843        B != BEnd; ++B) {
9844     if (B->isVirtual()) // Handled below.
9845       continue;
9846 
9847     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9848       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9849       CXXConstructorDecl *Constructor =
9850           LookupMovingConstructor(BaseClassDecl, 0);
9851       // If this is a deleted function, add it anyway. This might be conformant
9852       // with the standard. This might not. I'm not sure. It might not matter.
9853       if (Constructor)
9854         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9855     }
9856   }
9857 
9858   // Virtual base-class constructors.
9859   for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
9860                                        BEnd = ClassDecl->vbases_end();
9861        B != BEnd; ++B) {
9862     if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9863       CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9864       CXXConstructorDecl *Constructor =
9865           LookupMovingConstructor(BaseClassDecl, 0);
9866       // If this is a deleted function, add it anyway. This might be conformant
9867       // with the standard. This might not. I'm not sure. It might not matter.
9868       if (Constructor)
9869         ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9870     }
9871   }
9872 
9873   // Field constructors.
9874   for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
9875                                FEnd = ClassDecl->field_end();
9876        F != FEnd; ++F) {
9877     QualType FieldType = Context.getBaseElementType(F->getType());
9878     if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
9879       CXXConstructorDecl *Constructor =
9880           LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
9881       // If this is a deleted function, add it anyway. This might be conformant
9882       // with the standard. This might not. I'm not sure. It might not matter.
9883       // In particular, the problem is that this function never gets called. It
9884       // might just be ill-formed because this function attempts to refer to
9885       // a deleted function here.
9886       if (Constructor)
9887         ExceptSpec.CalledDecl(F->getLocation(), Constructor);
9888     }
9889   }
9890 
9891   return ExceptSpec;
9892 }
9893 
DeclareImplicitMoveConstructor(CXXRecordDecl * ClassDecl)9894 CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
9895                                                     CXXRecordDecl *ClassDecl) {
9896   // C++11 [class.copy]p9:
9897   //   If the definition of a class X does not explicitly declare a move
9898   //   constructor, one will be implicitly declared as defaulted if and only if:
9899   //
9900   //   - [first 4 bullets]
9901   assert(ClassDecl->needsImplicitMoveConstructor());
9902 
9903   DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
9904   if (DSM.isAlreadyBeingDeclared())
9905     return 0;
9906 
9907   // [Checked after we build the declaration]
9908   //   - the move assignment operator would not be implicitly defined as
9909   //     deleted,
9910 
9911   // [DR1402]:
9912   //   - each of X's non-static data members and direct or virtual base classes
9913   //     has a type that either has a move constructor or is trivially copyable.
9914   if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
9915     ClassDecl->setFailedImplicitMoveConstructor();
9916     return 0;
9917   }
9918 
9919   QualType ClassType = Context.getTypeDeclType(ClassDecl);
9920   QualType ArgType = Context.getRValueReferenceType(ClassType);
9921 
9922   bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9923                                                      CXXMoveConstructor,
9924                                                      false);
9925 
9926   DeclarationName Name
9927     = Context.DeclarationNames.getCXXConstructorName(
9928                                            Context.getCanonicalType(ClassType));
9929   SourceLocation ClassLoc = ClassDecl->getLocation();
9930   DeclarationNameInfo NameInfo(Name, ClassLoc);
9931 
9932   // C++11 [class.copy]p11:
9933   //   An implicitly-declared copy/move constructor is an inline public
9934   //   member of its class.
9935   CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
9936       Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9937       /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9938       Constexpr);
9939   MoveConstructor->setAccess(AS_public);
9940   MoveConstructor->setDefaulted();
9941 
9942   // Build an exception specification pointing back at this member.
9943   FunctionProtoType::ExtProtoInfo EPI;
9944   EPI.ExceptionSpecType = EST_Unevaluated;
9945   EPI.ExceptionSpecDecl = MoveConstructor;
9946   MoveConstructor->setType(
9947       Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9948 
9949   // Add the parameter to the constructor.
9950   ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
9951                                                ClassLoc, ClassLoc,
9952                                                /*IdentifierInfo=*/0,
9953                                                ArgType, /*TInfo=*/0,
9954                                                SC_None, 0);
9955   MoveConstructor->setParams(FromParam);
9956 
9957   MoveConstructor->setTrivial(
9958     ClassDecl->needsOverloadResolutionForMoveConstructor()
9959       ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
9960       : ClassDecl->hasTrivialMoveConstructor());
9961 
9962   // C++0x [class.copy]p9:
9963   //   If the definition of a class X does not explicitly declare a move
9964   //   constructor, one will be implicitly declared as defaulted if and only if:
9965   //   [...]
9966   //   - the move constructor would not be implicitly defined as deleted.
9967   if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
9968     // Cache this result so that we don't try to generate this over and over
9969     // on every lookup, leaking memory and wasting time.
9970     ClassDecl->setFailedImplicitMoveConstructor();
9971     return 0;
9972   }
9973 
9974   // Note that we have declared this constructor.
9975   ++ASTContext::NumImplicitMoveConstructorsDeclared;
9976 
9977   if (Scope *S = getScopeForContext(ClassDecl))
9978     PushOnScopeChains(MoveConstructor, S, false);
9979   ClassDecl->addDecl(MoveConstructor);
9980 
9981   return MoveConstructor;
9982 }
9983 
DefineImplicitMoveConstructor(SourceLocation CurrentLocation,CXXConstructorDecl * MoveConstructor)9984 void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
9985                                    CXXConstructorDecl *MoveConstructor) {
9986   assert((MoveConstructor->isDefaulted() &&
9987           MoveConstructor->isMoveConstructor() &&
9988           !MoveConstructor->doesThisDeclarationHaveABody() &&
9989           !MoveConstructor->isDeleted()) &&
9990          "DefineImplicitMoveConstructor - call it for implicit move ctor");
9991 
9992   CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
9993   assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
9994 
9995   SynthesizedFunctionScope Scope(*this, MoveConstructor);
9996   DiagnosticErrorTrap Trap(Diags);
9997 
9998   if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) ||
9999       Trap.hasErrorOccurred()) {
10000     Diag(CurrentLocation, diag::note_member_synthesized_at)
10001       << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
10002     MoveConstructor->setInvalidDecl();
10003   }  else {
10004     Sema::CompoundScopeRAII CompoundScope(*this);
10005     MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
10006                                                MoveConstructor->getLocation(),
10007                                                MultiStmtArg(),
10008                                                /*isStmtExpr=*/false)
10009                                                               .takeAs<Stmt>());
10010   }
10011 
10012   MoveConstructor->setUsed();
10013 
10014   if (ASTMutationListener *L = getASTMutationListener()) {
10015     L->CompletedImplicitDefinition(MoveConstructor);
10016   }
10017 }
10018 
isImplicitlyDeleted(FunctionDecl * FD)10019 bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
10020   return FD->isDeleted() && FD->isDefaulted() && isa<CXXMethodDecl>(FD);
10021 }
10022 
10023 /// \brief Mark the call operator of the given lambda closure type as "used".
markLambdaCallOperatorUsed(Sema & S,CXXRecordDecl * Lambda)10024 static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
10025   CXXMethodDecl *CallOperator
10026     = cast<CXXMethodDecl>(
10027         Lambda->lookup(
10028           S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
10029   CallOperator->setReferenced();
10030   CallOperator->setUsed();
10031 }
10032 
DefineImplicitLambdaToFunctionPointerConversion(SourceLocation CurrentLocation,CXXConversionDecl * Conv)10033 void Sema::DefineImplicitLambdaToFunctionPointerConversion(
10034        SourceLocation CurrentLocation,
10035        CXXConversionDecl *Conv)
10036 {
10037   CXXRecordDecl *Lambda = Conv->getParent();
10038 
10039   // Make sure that the lambda call operator is marked used.
10040   markLambdaCallOperatorUsed(*this, Lambda);
10041 
10042   Conv->setUsed();
10043 
10044   SynthesizedFunctionScope Scope(*this, Conv);
10045   DiagnosticErrorTrap Trap(Diags);
10046 
10047   // Return the address of the __invoke function.
10048   DeclarationName InvokeName = &Context.Idents.get("__invoke");
10049   CXXMethodDecl *Invoke
10050     = cast<CXXMethodDecl>(Lambda->lookup(InvokeName).front());
10051   Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
10052                                        VK_LValue, Conv->getLocation()).take();
10053   assert(FunctionRef && "Can't refer to __invoke function?");
10054   Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
10055   Conv->setBody(new (Context) CompoundStmt(Context, Return,
10056                                            Conv->getLocation(),
10057                                            Conv->getLocation()));
10058 
10059   // Fill in the __invoke function with a dummy implementation. IR generation
10060   // will fill in the actual details.
10061   Invoke->setUsed();
10062   Invoke->setReferenced();
10063   Invoke->setBody(new (Context) CompoundStmt(Conv->getLocation()));
10064 
10065   if (ASTMutationListener *L = getASTMutationListener()) {
10066     L->CompletedImplicitDefinition(Conv);
10067     L->CompletedImplicitDefinition(Invoke);
10068   }
10069 }
10070 
DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLocation,CXXConversionDecl * Conv)10071 void Sema::DefineImplicitLambdaToBlockPointerConversion(
10072        SourceLocation CurrentLocation,
10073        CXXConversionDecl *Conv)
10074 {
10075   Conv->setUsed();
10076 
10077   SynthesizedFunctionScope Scope(*this, Conv);
10078   DiagnosticErrorTrap Trap(Diags);
10079 
10080   // Copy-initialize the lambda object as needed to capture it.
10081   Expr *This = ActOnCXXThis(CurrentLocation).take();
10082   Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
10083 
10084   ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
10085                                                         Conv->getLocation(),
10086                                                         Conv, DerefThis);
10087 
10088   // If we're not under ARC, make sure we still get the _Block_copy/autorelease
10089   // behavior.  Note that only the general conversion function does this
10090   // (since it's unusable otherwise); in the case where we inline the
10091   // block literal, it has block literal lifetime semantics.
10092   if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
10093     BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
10094                                           CK_CopyAndAutoreleaseBlockObject,
10095                                           BuildBlock.get(), 0, VK_RValue);
10096 
10097   if (BuildBlock.isInvalid()) {
10098     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10099     Conv->setInvalidDecl();
10100     return;
10101   }
10102 
10103   // Create the return statement that returns the block from the conversion
10104   // function.
10105   StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
10106   if (Return.isInvalid()) {
10107     Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10108     Conv->setInvalidDecl();
10109     return;
10110   }
10111 
10112   // Set the body of the conversion function.
10113   Stmt *ReturnS = Return.take();
10114   Conv->setBody(new (Context) CompoundStmt(Context, ReturnS,
10115                                            Conv->getLocation(),
10116                                            Conv->getLocation()));
10117 
10118   // We're done; notify the mutation listener, if any.
10119   if (ASTMutationListener *L = getASTMutationListener()) {
10120     L->CompletedImplicitDefinition(Conv);
10121   }
10122 }
10123 
10124 /// \brief Determine whether the given list arguments contains exactly one
10125 /// "real" (non-default) argument.
hasOneRealArgument(MultiExprArg Args)10126 static bool hasOneRealArgument(MultiExprArg Args) {
10127   switch (Args.size()) {
10128   case 0:
10129     return false;
10130 
10131   default:
10132     if (!Args[1]->isDefaultArgument())
10133       return false;
10134 
10135     // fall through
10136   case 1:
10137     return !Args[0]->isDefaultArgument();
10138   }
10139 
10140   return false;
10141 }
10142 
10143 ExprResult
BuildCXXConstructExpr(SourceLocation ConstructLoc,QualType DeclInitType,CXXConstructorDecl * Constructor,MultiExprArg ExprArgs,bool HadMultipleCandidates,bool IsListInitialization,bool RequiresZeroInit,unsigned ConstructKind,SourceRange ParenRange)10144 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10145                             CXXConstructorDecl *Constructor,
10146                             MultiExprArg ExprArgs,
10147                             bool HadMultipleCandidates,
10148                             bool IsListInitialization,
10149                             bool RequiresZeroInit,
10150                             unsigned ConstructKind,
10151                             SourceRange ParenRange) {
10152   bool Elidable = false;
10153 
10154   // C++0x [class.copy]p34:
10155   //   When certain criteria are met, an implementation is allowed to
10156   //   omit the copy/move construction of a class object, even if the
10157   //   copy/move constructor and/or destructor for the object have
10158   //   side effects. [...]
10159   //     - when a temporary class object that has not been bound to a
10160   //       reference (12.2) would be copied/moved to a class object
10161   //       with the same cv-unqualified type, the copy/move operation
10162   //       can be omitted by constructing the temporary object
10163   //       directly into the target of the omitted copy/move
10164   if (ConstructKind == CXXConstructExpr::CK_Complete &&
10165       Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
10166     Expr *SubExpr = ExprArgs[0];
10167     Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
10168   }
10169 
10170   return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
10171                                Elidable, ExprArgs, HadMultipleCandidates,
10172                                IsListInitialization, RequiresZeroInit,
10173                                ConstructKind, ParenRange);
10174 }
10175 
10176 /// BuildCXXConstructExpr - Creates a complete call to a constructor,
10177 /// including handling of its default argument expressions.
10178 ExprResult
BuildCXXConstructExpr(SourceLocation ConstructLoc,QualType DeclInitType,CXXConstructorDecl * Constructor,bool Elidable,MultiExprArg ExprArgs,bool HadMultipleCandidates,bool IsListInitialization,bool RequiresZeroInit,unsigned ConstructKind,SourceRange ParenRange)10179 Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10180                             CXXConstructorDecl *Constructor, bool Elidable,
10181                             MultiExprArg ExprArgs,
10182                             bool HadMultipleCandidates,
10183                             bool IsListInitialization,
10184                             bool RequiresZeroInit,
10185                             unsigned ConstructKind,
10186                             SourceRange ParenRange) {
10187   MarkFunctionReferenced(ConstructLoc, Constructor);
10188   return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
10189                                         Constructor, Elidable, ExprArgs,
10190                                         HadMultipleCandidates,
10191                                         IsListInitialization, RequiresZeroInit,
10192               static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
10193                                         ParenRange));
10194 }
10195 
FinalizeVarWithDestructor(VarDecl * VD,const RecordType * Record)10196 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
10197   if (VD->isInvalidDecl()) return;
10198 
10199   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
10200   if (ClassDecl->isInvalidDecl()) return;
10201   if (ClassDecl->hasIrrelevantDestructor()) return;
10202   if (ClassDecl->isDependentContext()) return;
10203 
10204   CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
10205   MarkFunctionReferenced(VD->getLocation(), Destructor);
10206   CheckDestructorAccess(VD->getLocation(), Destructor,
10207                         PDiag(diag::err_access_dtor_var)
10208                         << VD->getDeclName()
10209                         << VD->getType());
10210   DiagnoseUseOfDecl(Destructor, VD->getLocation());
10211 
10212   if (!VD->hasGlobalStorage()) return;
10213 
10214   // Emit warning for non-trivial dtor in global scope (a real global,
10215   // class-static, function-static).
10216   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
10217 
10218   // TODO: this should be re-enabled for static locals by !CXAAtExit
10219   if (!VD->isStaticLocal())
10220     Diag(VD->getLocation(), diag::warn_global_destructor);
10221 }
10222 
10223 /// \brief Given a constructor and the set of arguments provided for the
10224 /// constructor, convert the arguments and add any required default arguments
10225 /// to form a proper call to this constructor.
10226 ///
10227 /// \returns true if an error occurred, false otherwise.
10228 bool
CompleteConstructorCall(CXXConstructorDecl * Constructor,MultiExprArg ArgsPtr,SourceLocation Loc,SmallVectorImpl<Expr * > & ConvertedArgs,bool AllowExplicit,bool IsListInitialization)10229 Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
10230                               MultiExprArg ArgsPtr,
10231                               SourceLocation Loc,
10232                               SmallVectorImpl<Expr*> &ConvertedArgs,
10233                               bool AllowExplicit,
10234                               bool IsListInitialization) {
10235   // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
10236   unsigned NumArgs = ArgsPtr.size();
10237   Expr **Args = ArgsPtr.data();
10238 
10239   const FunctionProtoType *Proto
10240     = Constructor->getType()->getAs<FunctionProtoType>();
10241   assert(Proto && "Constructor without a prototype?");
10242   unsigned NumArgsInProto = Proto->getNumArgs();
10243 
10244   // If too few arguments are available, we'll fill in the rest with defaults.
10245   if (NumArgs < NumArgsInProto)
10246     ConvertedArgs.reserve(NumArgsInProto);
10247   else
10248     ConvertedArgs.reserve(NumArgs);
10249 
10250   VariadicCallType CallType =
10251     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
10252   SmallVector<Expr *, 8> AllArgs;
10253   bool Invalid = GatherArgumentsForCall(Loc, Constructor,
10254                                         Proto, 0,
10255                                         llvm::makeArrayRef(Args, NumArgs),
10256                                         AllArgs,
10257                                         CallType, AllowExplicit,
10258                                         IsListInitialization);
10259   ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
10260 
10261   DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
10262 
10263   CheckConstructorCall(Constructor,
10264                        llvm::makeArrayRef<const Expr *>(AllArgs.data(),
10265                                                         AllArgs.size()),
10266                        Proto, Loc);
10267 
10268   return Invalid;
10269 }
10270 
10271 static inline bool
CheckOperatorNewDeleteDeclarationScope(Sema & SemaRef,const FunctionDecl * FnDecl)10272 CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
10273                                        const FunctionDecl *FnDecl) {
10274   const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
10275   if (isa<NamespaceDecl>(DC)) {
10276     return SemaRef.Diag(FnDecl->getLocation(),
10277                         diag::err_operator_new_delete_declared_in_namespace)
10278       << FnDecl->getDeclName();
10279   }
10280 
10281   if (isa<TranslationUnitDecl>(DC) &&
10282       FnDecl->getStorageClass() == SC_Static) {
10283     return SemaRef.Diag(FnDecl->getLocation(),
10284                         diag::err_operator_new_delete_declared_static)
10285       << FnDecl->getDeclName();
10286   }
10287 
10288   return false;
10289 }
10290 
10291 static inline bool
CheckOperatorNewDeleteTypes(Sema & SemaRef,const FunctionDecl * FnDecl,CanQualType ExpectedResultType,CanQualType ExpectedFirstParamType,unsigned DependentParamTypeDiag,unsigned InvalidParamTypeDiag)10292 CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
10293                             CanQualType ExpectedResultType,
10294                             CanQualType ExpectedFirstParamType,
10295                             unsigned DependentParamTypeDiag,
10296                             unsigned InvalidParamTypeDiag) {
10297   QualType ResultType =
10298     FnDecl->getType()->getAs<FunctionType>()->getResultType();
10299 
10300   // Check that the result type is not dependent.
10301   if (ResultType->isDependentType())
10302     return SemaRef.Diag(FnDecl->getLocation(),
10303                         diag::err_operator_new_delete_dependent_result_type)
10304     << FnDecl->getDeclName() << ExpectedResultType;
10305 
10306   // Check that the result type is what we expect.
10307   if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
10308     return SemaRef.Diag(FnDecl->getLocation(),
10309                         diag::err_operator_new_delete_invalid_result_type)
10310     << FnDecl->getDeclName() << ExpectedResultType;
10311 
10312   // A function template must have at least 2 parameters.
10313   if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
10314     return SemaRef.Diag(FnDecl->getLocation(),
10315                       diag::err_operator_new_delete_template_too_few_parameters)
10316         << FnDecl->getDeclName();
10317 
10318   // The function decl must have at least 1 parameter.
10319   if (FnDecl->getNumParams() == 0)
10320     return SemaRef.Diag(FnDecl->getLocation(),
10321                         diag::err_operator_new_delete_too_few_parameters)
10322       << FnDecl->getDeclName();
10323 
10324   // Check the first parameter type is not dependent.
10325   QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
10326   if (FirstParamType->isDependentType())
10327     return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
10328       << FnDecl->getDeclName() << ExpectedFirstParamType;
10329 
10330   // Check that the first parameter type is what we expect.
10331   if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
10332       ExpectedFirstParamType)
10333     return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
10334     << FnDecl->getDeclName() << ExpectedFirstParamType;
10335 
10336   return false;
10337 }
10338 
10339 static bool
CheckOperatorNewDeclaration(Sema & SemaRef,const FunctionDecl * FnDecl)10340 CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
10341   // C++ [basic.stc.dynamic.allocation]p1:
10342   //   A program is ill-formed if an allocation function is declared in a
10343   //   namespace scope other than global scope or declared static in global
10344   //   scope.
10345   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10346     return true;
10347 
10348   CanQualType SizeTy =
10349     SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
10350 
10351   // C++ [basic.stc.dynamic.allocation]p1:
10352   //  The return type shall be void*. The first parameter shall have type
10353   //  std::size_t.
10354   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
10355                                   SizeTy,
10356                                   diag::err_operator_new_dependent_param_type,
10357                                   diag::err_operator_new_param_type))
10358     return true;
10359 
10360   // C++ [basic.stc.dynamic.allocation]p1:
10361   //  The first parameter shall not have an associated default argument.
10362   if (FnDecl->getParamDecl(0)->hasDefaultArg())
10363     return SemaRef.Diag(FnDecl->getLocation(),
10364                         diag::err_operator_new_default_arg)
10365       << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
10366 
10367   return false;
10368 }
10369 
10370 static bool
CheckOperatorDeleteDeclaration(Sema & SemaRef,FunctionDecl * FnDecl)10371 CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
10372   // C++ [basic.stc.dynamic.deallocation]p1:
10373   //   A program is ill-formed if deallocation functions are declared in a
10374   //   namespace scope other than global scope or declared static in global
10375   //   scope.
10376   if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10377     return true;
10378 
10379   // C++ [basic.stc.dynamic.deallocation]p2:
10380   //   Each deallocation function shall return void and its first parameter
10381   //   shall be void*.
10382   if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
10383                                   SemaRef.Context.VoidPtrTy,
10384                                  diag::err_operator_delete_dependent_param_type,
10385                                  diag::err_operator_delete_param_type))
10386     return true;
10387 
10388   return false;
10389 }
10390 
10391 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
10392 /// of this overloaded operator is well-formed. If so, returns false;
10393 /// otherwise, emits appropriate diagnostics and returns true.
CheckOverloadedOperatorDeclaration(FunctionDecl * FnDecl)10394 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
10395   assert(FnDecl && FnDecl->isOverloadedOperator() &&
10396          "Expected an overloaded operator declaration");
10397 
10398   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
10399 
10400   // C++ [over.oper]p5:
10401   //   The allocation and deallocation functions, operator new,
10402   //   operator new[], operator delete and operator delete[], are
10403   //   described completely in 3.7.3. The attributes and restrictions
10404   //   found in the rest of this subclause do not apply to them unless
10405   //   explicitly stated in 3.7.3.
10406   if (Op == OO_Delete || Op == OO_Array_Delete)
10407     return CheckOperatorDeleteDeclaration(*this, FnDecl);
10408 
10409   if (Op == OO_New || Op == OO_Array_New)
10410     return CheckOperatorNewDeclaration(*this, FnDecl);
10411 
10412   // C++ [over.oper]p6:
10413   //   An operator function shall either be a non-static member
10414   //   function or be a non-member function and have at least one
10415   //   parameter whose type is a class, a reference to a class, an
10416   //   enumeration, or a reference to an enumeration.
10417   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
10418     if (MethodDecl->isStatic())
10419       return Diag(FnDecl->getLocation(),
10420                   diag::err_operator_overload_static) << FnDecl->getDeclName();
10421   } else {
10422     bool ClassOrEnumParam = false;
10423     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10424                                    ParamEnd = FnDecl->param_end();
10425          Param != ParamEnd; ++Param) {
10426       QualType ParamType = (*Param)->getType().getNonReferenceType();
10427       if (ParamType->isDependentType() || ParamType->isRecordType() ||
10428           ParamType->isEnumeralType()) {
10429         ClassOrEnumParam = true;
10430         break;
10431       }
10432     }
10433 
10434     if (!ClassOrEnumParam)
10435       return Diag(FnDecl->getLocation(),
10436                   diag::err_operator_overload_needs_class_or_enum)
10437         << FnDecl->getDeclName();
10438   }
10439 
10440   // C++ [over.oper]p8:
10441   //   An operator function cannot have default arguments (8.3.6),
10442   //   except where explicitly stated below.
10443   //
10444   // Only the function-call operator allows default arguments
10445   // (C++ [over.call]p1).
10446   if (Op != OO_Call) {
10447     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
10448          Param != FnDecl->param_end(); ++Param) {
10449       if ((*Param)->hasDefaultArg())
10450         return Diag((*Param)->getLocation(),
10451                     diag::err_operator_overload_default_arg)
10452           << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
10453     }
10454   }
10455 
10456   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
10457     { false, false, false }
10458 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
10459     , { Unary, Binary, MemberOnly }
10460 #include "clang/Basic/OperatorKinds.def"
10461   };
10462 
10463   bool CanBeUnaryOperator = OperatorUses[Op][0];
10464   bool CanBeBinaryOperator = OperatorUses[Op][1];
10465   bool MustBeMemberOperator = OperatorUses[Op][2];
10466 
10467   // C++ [over.oper]p8:
10468   //   [...] Operator functions cannot have more or fewer parameters
10469   //   than the number required for the corresponding operator, as
10470   //   described in the rest of this subclause.
10471   unsigned NumParams = FnDecl->getNumParams()
10472                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
10473   if (Op != OO_Call &&
10474       ((NumParams == 1 && !CanBeUnaryOperator) ||
10475        (NumParams == 2 && !CanBeBinaryOperator) ||
10476        (NumParams < 1) || (NumParams > 2))) {
10477     // We have the wrong number of parameters.
10478     unsigned ErrorKind;
10479     if (CanBeUnaryOperator && CanBeBinaryOperator) {
10480       ErrorKind = 2;  // 2 -> unary or binary.
10481     } else if (CanBeUnaryOperator) {
10482       ErrorKind = 0;  // 0 -> unary
10483     } else {
10484       assert(CanBeBinaryOperator &&
10485              "All non-call overloaded operators are unary or binary!");
10486       ErrorKind = 1;  // 1 -> binary
10487     }
10488 
10489     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
10490       << FnDecl->getDeclName() << NumParams << ErrorKind;
10491   }
10492 
10493   // Overloaded operators other than operator() cannot be variadic.
10494   if (Op != OO_Call &&
10495       FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
10496     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
10497       << FnDecl->getDeclName();
10498   }
10499 
10500   // Some operators must be non-static member functions.
10501   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
10502     return Diag(FnDecl->getLocation(),
10503                 diag::err_operator_overload_must_be_member)
10504       << FnDecl->getDeclName();
10505   }
10506 
10507   // C++ [over.inc]p1:
10508   //   The user-defined function called operator++ implements the
10509   //   prefix and postfix ++ operator. If this function is a member
10510   //   function with no parameters, or a non-member function with one
10511   //   parameter of class or enumeration type, it defines the prefix
10512   //   increment operator ++ for objects of that type. If the function
10513   //   is a member function with one parameter (which shall be of type
10514   //   int) or a non-member function with two parameters (the second
10515   //   of which shall be of type int), it defines the postfix
10516   //   increment operator ++ for objects of that type.
10517   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
10518     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
10519     bool ParamIsInt = false;
10520     if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
10521       ParamIsInt = BT->getKind() == BuiltinType::Int;
10522 
10523     if (!ParamIsInt)
10524       return Diag(LastParam->getLocation(),
10525                   diag::err_operator_overload_post_incdec_must_be_int)
10526         << LastParam->getType() << (Op == OO_MinusMinus);
10527   }
10528 
10529   return false;
10530 }
10531 
10532 /// CheckLiteralOperatorDeclaration - Check whether the declaration
10533 /// of this literal operator function is well-formed. If so, returns
10534 /// false; otherwise, emits appropriate diagnostics and returns true.
CheckLiteralOperatorDeclaration(FunctionDecl * FnDecl)10535 bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
10536   if (isa<CXXMethodDecl>(FnDecl)) {
10537     Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
10538       << FnDecl->getDeclName();
10539     return true;
10540   }
10541 
10542   if (FnDecl->isExternC()) {
10543     Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
10544     return true;
10545   }
10546 
10547   bool Valid = false;
10548 
10549   // This might be the definition of a literal operator template.
10550   FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
10551   // This might be a specialization of a literal operator template.
10552   if (!TpDecl)
10553     TpDecl = FnDecl->getPrimaryTemplate();
10554 
10555   // template <char...> type operator "" name() is the only valid template
10556   // signature, and the only valid signature with no parameters.
10557   if (TpDecl) {
10558     if (FnDecl->param_size() == 0) {
10559       // Must have only one template parameter
10560       TemplateParameterList *Params = TpDecl->getTemplateParameters();
10561       if (Params->size() == 1) {
10562         NonTypeTemplateParmDecl *PmDecl =
10563           dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
10564 
10565         // The template parameter must be a char parameter pack.
10566         if (PmDecl && PmDecl->isTemplateParameterPack() &&
10567             Context.hasSameType(PmDecl->getType(), Context.CharTy))
10568           Valid = true;
10569       }
10570     }
10571   } else if (FnDecl->param_size()) {
10572     // Check the first parameter
10573     FunctionDecl::param_iterator Param = FnDecl->param_begin();
10574 
10575     QualType T = (*Param)->getType().getUnqualifiedType();
10576 
10577     // unsigned long long int, long double, and any character type are allowed
10578     // as the only parameters.
10579     if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
10580         Context.hasSameType(T, Context.LongDoubleTy) ||
10581         Context.hasSameType(T, Context.CharTy) ||
10582         Context.hasSameType(T, Context.WideCharTy) ||
10583         Context.hasSameType(T, Context.Char16Ty) ||
10584         Context.hasSameType(T, Context.Char32Ty)) {
10585       if (++Param == FnDecl->param_end())
10586         Valid = true;
10587       goto FinishedParams;
10588     }
10589 
10590     // Otherwise it must be a pointer to const; let's strip those qualifiers.
10591     const PointerType *PT = T->getAs<PointerType>();
10592     if (!PT)
10593       goto FinishedParams;
10594     T = PT->getPointeeType();
10595     if (!T.isConstQualified() || T.isVolatileQualified())
10596       goto FinishedParams;
10597     T = T.getUnqualifiedType();
10598 
10599     // Move on to the second parameter;
10600     ++Param;
10601 
10602     // If there is no second parameter, the first must be a const char *
10603     if (Param == FnDecl->param_end()) {
10604       if (Context.hasSameType(T, Context.CharTy))
10605         Valid = true;
10606       goto FinishedParams;
10607     }
10608 
10609     // const char *, const wchar_t*, const char16_t*, and const char32_t*
10610     // are allowed as the first parameter to a two-parameter function
10611     if (!(Context.hasSameType(T, Context.CharTy) ||
10612           Context.hasSameType(T, Context.WideCharTy) ||
10613           Context.hasSameType(T, Context.Char16Ty) ||
10614           Context.hasSameType(T, Context.Char32Ty)))
10615       goto FinishedParams;
10616 
10617     // The second and final parameter must be an std::size_t
10618     T = (*Param)->getType().getUnqualifiedType();
10619     if (Context.hasSameType(T, Context.getSizeType()) &&
10620         ++Param == FnDecl->param_end())
10621       Valid = true;
10622   }
10623 
10624   // FIXME: This diagnostic is absolutely terrible.
10625 FinishedParams:
10626   if (!Valid) {
10627     Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
10628       << FnDecl->getDeclName();
10629     return true;
10630   }
10631 
10632   // A parameter-declaration-clause containing a default argument is not
10633   // equivalent to any of the permitted forms.
10634   for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10635                                     ParamEnd = FnDecl->param_end();
10636        Param != ParamEnd; ++Param) {
10637     if ((*Param)->hasDefaultArg()) {
10638       Diag((*Param)->getDefaultArgRange().getBegin(),
10639            diag::err_literal_operator_default_argument)
10640         << (*Param)->getDefaultArgRange();
10641       break;
10642     }
10643   }
10644 
10645   StringRef LiteralName
10646     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
10647   if (LiteralName[0] != '_') {
10648     // C++11 [usrlit.suffix]p1:
10649     //   Literal suffix identifiers that do not start with an underscore
10650     //   are reserved for future standardization.
10651     Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved)
10652       << NumericLiteralParser::isValidUDSuffix(getLangOpts(), LiteralName);
10653   }
10654 
10655   return false;
10656 }
10657 
10658 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
10659 /// linkage specification, including the language and (if present)
10660 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
10661 /// the location of the language string literal, which is provided
10662 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
10663 /// the '{' brace. Otherwise, this linkage specification does not
10664 /// have any braces.
ActOnStartLinkageSpecification(Scope * S,SourceLocation ExternLoc,SourceLocation LangLoc,StringRef Lang,SourceLocation LBraceLoc)10665 Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
10666                                            SourceLocation LangLoc,
10667                                            StringRef Lang,
10668                                            SourceLocation LBraceLoc) {
10669   LinkageSpecDecl::LanguageIDs Language;
10670   if (Lang == "\"C\"")
10671     Language = LinkageSpecDecl::lang_c;
10672   else if (Lang == "\"C++\"")
10673     Language = LinkageSpecDecl::lang_cxx;
10674   else {
10675     Diag(LangLoc, diag::err_bad_language);
10676     return 0;
10677   }
10678 
10679   // FIXME: Add all the various semantics of linkage specifications
10680 
10681   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
10682                                                ExternLoc, LangLoc, Language,
10683                                                LBraceLoc.isValid());
10684   CurContext->addDecl(D);
10685   PushDeclContext(S, D);
10686   return D;
10687 }
10688 
10689 /// ActOnFinishLinkageSpecification - Complete the definition of
10690 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
10691 /// valid, it's the position of the closing '}' brace in a linkage
10692 /// specification that uses braces.
ActOnFinishLinkageSpecification(Scope * S,Decl * LinkageSpec,SourceLocation RBraceLoc)10693 Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
10694                                             Decl *LinkageSpec,
10695                                             SourceLocation RBraceLoc) {
10696   if (LinkageSpec) {
10697     if (RBraceLoc.isValid()) {
10698       LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
10699       LSDecl->setRBraceLoc(RBraceLoc);
10700     }
10701     PopDeclContext();
10702   }
10703   return LinkageSpec;
10704 }
10705 
ActOnEmptyDeclaration(Scope * S,AttributeList * AttrList,SourceLocation SemiLoc)10706 Decl *Sema::ActOnEmptyDeclaration(Scope *S,
10707                                   AttributeList *AttrList,
10708                                   SourceLocation SemiLoc) {
10709   Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
10710   // Attribute declarations appertain to empty declaration so we handle
10711   // them here.
10712   if (AttrList)
10713     ProcessDeclAttributeList(S, ED, AttrList);
10714 
10715   CurContext->addDecl(ED);
10716   return ED;
10717 }
10718 
10719 /// \brief Perform semantic analysis for the variable declaration that
10720 /// occurs within a C++ catch clause, returning the newly-created
10721 /// variable.
BuildExceptionDeclaration(Scope * S,TypeSourceInfo * TInfo,SourceLocation StartLoc,SourceLocation Loc,IdentifierInfo * Name)10722 VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
10723                                          TypeSourceInfo *TInfo,
10724                                          SourceLocation StartLoc,
10725                                          SourceLocation Loc,
10726                                          IdentifierInfo *Name) {
10727   bool Invalid = false;
10728   QualType ExDeclType = TInfo->getType();
10729 
10730   // Arrays and functions decay.
10731   if (ExDeclType->isArrayType())
10732     ExDeclType = Context.getArrayDecayedType(ExDeclType);
10733   else if (ExDeclType->isFunctionType())
10734     ExDeclType = Context.getPointerType(ExDeclType);
10735 
10736   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
10737   // The exception-declaration shall not denote a pointer or reference to an
10738   // incomplete type, other than [cv] void*.
10739   // N2844 forbids rvalue references.
10740   if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
10741     Diag(Loc, diag::err_catch_rvalue_ref);
10742     Invalid = true;
10743   }
10744 
10745   QualType BaseType = ExDeclType;
10746   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
10747   unsigned DK = diag::err_catch_incomplete;
10748   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
10749     BaseType = Ptr->getPointeeType();
10750     Mode = 1;
10751     DK = diag::err_catch_incomplete_ptr;
10752   } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
10753     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
10754     BaseType = Ref->getPointeeType();
10755     Mode = 2;
10756     DK = diag::err_catch_incomplete_ref;
10757   }
10758   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
10759       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
10760     Invalid = true;
10761 
10762   if (!Invalid && !ExDeclType->isDependentType() &&
10763       RequireNonAbstractType(Loc, ExDeclType,
10764                              diag::err_abstract_type_in_decl,
10765                              AbstractVariableType))
10766     Invalid = true;
10767 
10768   // Only the non-fragile NeXT runtime currently supports C++ catches
10769   // of ObjC types, and no runtime supports catching ObjC types by value.
10770   if (!Invalid && getLangOpts().ObjC1) {
10771     QualType T = ExDeclType;
10772     if (const ReferenceType *RT = T->getAs<ReferenceType>())
10773       T = RT->getPointeeType();
10774 
10775     if (T->isObjCObjectType()) {
10776       Diag(Loc, diag::err_objc_object_catch);
10777       Invalid = true;
10778     } else if (T->isObjCObjectPointerType()) {
10779       // FIXME: should this be a test for macosx-fragile specifically?
10780       if (getLangOpts().ObjCRuntime.isFragile())
10781         Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
10782     }
10783   }
10784 
10785   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
10786                                     ExDeclType, TInfo, SC_None);
10787   ExDecl->setExceptionVariable(true);
10788 
10789   // In ARC, infer 'retaining' for variables of retainable type.
10790   if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
10791     Invalid = true;
10792 
10793   if (!Invalid && !ExDeclType->isDependentType()) {
10794     if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
10795       // Insulate this from anything else we might currently be parsing.
10796       EnterExpressionEvaluationContext scope(*this, PotentiallyEvaluated);
10797 
10798       // C++ [except.handle]p16:
10799       //   The object declared in an exception-declaration or, if the
10800       //   exception-declaration does not specify a name, a temporary (12.2) is
10801       //   copy-initialized (8.5) from the exception object. [...]
10802       //   The object is destroyed when the handler exits, after the destruction
10803       //   of any automatic objects initialized within the handler.
10804       //
10805       // We just pretend to initialize the object with itself, then make sure
10806       // it can be destroyed later.
10807       QualType initType = ExDeclType;
10808 
10809       InitializedEntity entity =
10810         InitializedEntity::InitializeVariable(ExDecl);
10811       InitializationKind initKind =
10812         InitializationKind::CreateCopy(Loc, SourceLocation());
10813 
10814       Expr *opaqueValue =
10815         new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
10816       InitializationSequence sequence(*this, entity, initKind, opaqueValue);
10817       ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
10818       if (result.isInvalid())
10819         Invalid = true;
10820       else {
10821         // If the constructor used was non-trivial, set this as the
10822         // "initializer".
10823         CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
10824         if (!construct->getConstructor()->isTrivial()) {
10825           Expr *init = MaybeCreateExprWithCleanups(construct);
10826           ExDecl->setInit(init);
10827         }
10828 
10829         // And make sure it's destructable.
10830         FinalizeVarWithDestructor(ExDecl, recordType);
10831       }
10832     }
10833   }
10834 
10835   if (Invalid)
10836     ExDecl->setInvalidDecl();
10837 
10838   return ExDecl;
10839 }
10840 
10841 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
10842 /// handler.
ActOnExceptionDeclarator(Scope * S,Declarator & D)10843 Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
10844   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
10845   bool Invalid = D.isInvalidType();
10846 
10847   // Check for unexpanded parameter packs.
10848   if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
10849                                       UPPC_ExceptionType)) {
10850     TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
10851                                              D.getIdentifierLoc());
10852     Invalid = true;
10853   }
10854 
10855   IdentifierInfo *II = D.getIdentifier();
10856   if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
10857                                              LookupOrdinaryName,
10858                                              ForRedeclaration)) {
10859     // The scope should be freshly made just for us. There is just no way
10860     // it contains any previous declaration.
10861     assert(!S->isDeclScope(PrevDecl));
10862     if (PrevDecl->isTemplateParameter()) {
10863       // Maybe we will complain about the shadowed template parameter.
10864       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
10865       PrevDecl = 0;
10866     }
10867   }
10868 
10869   if (D.getCXXScopeSpec().isSet() && !Invalid) {
10870     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
10871       << D.getCXXScopeSpec().getRange();
10872     Invalid = true;
10873   }
10874 
10875   VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
10876                                               D.getLocStart(),
10877                                               D.getIdentifierLoc(),
10878                                               D.getIdentifier());
10879   if (Invalid)
10880     ExDecl->setInvalidDecl();
10881 
10882   // Add the exception declaration into this scope.
10883   if (II)
10884     PushOnScopeChains(ExDecl, S);
10885   else
10886     CurContext->addDecl(ExDecl);
10887 
10888   ProcessDeclAttributes(S, ExDecl, D);
10889   return ExDecl;
10890 }
10891 
ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,Expr * AssertExpr,Expr * AssertMessageExpr,SourceLocation RParenLoc)10892 Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10893                                          Expr *AssertExpr,
10894                                          Expr *AssertMessageExpr,
10895                                          SourceLocation RParenLoc) {
10896   StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
10897 
10898   if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
10899     return 0;
10900 
10901   return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
10902                                       AssertMessage, RParenLoc, false);
10903 }
10904 
BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,Expr * AssertExpr,StringLiteral * AssertMessage,SourceLocation RParenLoc,bool Failed)10905 Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10906                                          Expr *AssertExpr,
10907                                          StringLiteral *AssertMessage,
10908                                          SourceLocation RParenLoc,
10909                                          bool Failed) {
10910   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
10911       !Failed) {
10912     // In a static_assert-declaration, the constant-expression shall be a
10913     // constant expression that can be contextually converted to bool.
10914     ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
10915     if (Converted.isInvalid())
10916       Failed = true;
10917 
10918     llvm::APSInt Cond;
10919     if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
10920           diag::err_static_assert_expression_is_not_constant,
10921           /*AllowFold=*/false).isInvalid())
10922       Failed = true;
10923 
10924     if (!Failed && !Cond) {
10925       SmallString<256> MsgBuffer;
10926       llvm::raw_svector_ostream Msg(MsgBuffer);
10927       AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
10928       Diag(StaticAssertLoc, diag::err_static_assert_failed)
10929         << Msg.str() << AssertExpr->getSourceRange();
10930       Failed = true;
10931     }
10932   }
10933 
10934   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
10935                                         AssertExpr, AssertMessage, RParenLoc,
10936                                         Failed);
10937 
10938   CurContext->addDecl(Decl);
10939   return Decl;
10940 }
10941 
10942 /// \brief Perform semantic analysis of the given friend type declaration.
10943 ///
10944 /// \returns A friend declaration that.
CheckFriendTypeDecl(SourceLocation LocStart,SourceLocation FriendLoc,TypeSourceInfo * TSInfo)10945 FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
10946                                       SourceLocation FriendLoc,
10947                                       TypeSourceInfo *TSInfo) {
10948   assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
10949 
10950   QualType T = TSInfo->getType();
10951   SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
10952 
10953   // C++03 [class.friend]p2:
10954   //   An elaborated-type-specifier shall be used in a friend declaration
10955   //   for a class.*
10956   //
10957   //   * The class-key of the elaborated-type-specifier is required.
10958   if (!ActiveTemplateInstantiations.empty()) {
10959     // Do not complain about the form of friend template types during
10960     // template instantiation; we will already have complained when the
10961     // template was declared.
10962   } else {
10963     if (!T->isElaboratedTypeSpecifier()) {
10964       // If we evaluated the type to a record type, suggest putting
10965       // a tag in front.
10966       if (const RecordType *RT = T->getAs<RecordType>()) {
10967         RecordDecl *RD = RT->getDecl();
10968 
10969         std::string InsertionText = std::string(" ") + RD->getKindName();
10970 
10971         Diag(TypeRange.getBegin(),
10972              getLangOpts().CPlusPlus11 ?
10973                diag::warn_cxx98_compat_unelaborated_friend_type :
10974                diag::ext_unelaborated_friend_type)
10975           << (unsigned) RD->getTagKind()
10976           << T
10977           << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
10978                                         InsertionText);
10979       } else {
10980         Diag(FriendLoc,
10981              getLangOpts().CPlusPlus11 ?
10982                diag::warn_cxx98_compat_nonclass_type_friend :
10983                diag::ext_nonclass_type_friend)
10984           << T
10985           << TypeRange;
10986       }
10987     } else if (T->getAs<EnumType>()) {
10988       Diag(FriendLoc,
10989            getLangOpts().CPlusPlus11 ?
10990              diag::warn_cxx98_compat_enum_friend :
10991              diag::ext_enum_friend)
10992         << T
10993         << TypeRange;
10994     }
10995 
10996     // C++11 [class.friend]p3:
10997     //   A friend declaration that does not declare a function shall have one
10998     //   of the following forms:
10999     //     friend elaborated-type-specifier ;
11000     //     friend simple-type-specifier ;
11001     //     friend typename-specifier ;
11002     if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
11003       Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
11004   }
11005 
11006   //   If the type specifier in a friend declaration designates a (possibly
11007   //   cv-qualified) class type, that class is declared as a friend; otherwise,
11008   //   the friend declaration is ignored.
11009   return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
11010 }
11011 
11012 /// Handle a friend tag declaration where the scope specifier was
11013 /// templated.
ActOnTemplatedFriendTag(Scope * S,SourceLocation FriendLoc,unsigned TagSpec,SourceLocation TagLoc,CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation NameLoc,AttributeList * Attr,MultiTemplateParamsArg TempParamLists)11014 Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
11015                                     unsigned TagSpec, SourceLocation TagLoc,
11016                                     CXXScopeSpec &SS,
11017                                     IdentifierInfo *Name,
11018                                     SourceLocation NameLoc,
11019                                     AttributeList *Attr,
11020                                     MultiTemplateParamsArg TempParamLists) {
11021   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
11022 
11023   bool isExplicitSpecialization = false;
11024   bool Invalid = false;
11025 
11026   if (TemplateParameterList *TemplateParams =
11027           MatchTemplateParametersToScopeSpecifier(
11028               TagLoc, NameLoc, SS, TempParamLists, /*friend*/ true,
11029               isExplicitSpecialization, Invalid)) {
11030     if (TemplateParams->size() > 0) {
11031       // This is a declaration of a class template.
11032       if (Invalid)
11033         return 0;
11034 
11035       return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
11036                                 SS, Name, NameLoc, Attr,
11037                                 TemplateParams, AS_public,
11038                                 /*ModulePrivateLoc=*/SourceLocation(),
11039                                 TempParamLists.size() - 1,
11040                                 TempParamLists.data()).take();
11041     } else {
11042       // The "template<>" header is extraneous.
11043       Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
11044         << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
11045       isExplicitSpecialization = true;
11046     }
11047   }
11048 
11049   if (Invalid) return 0;
11050 
11051   bool isAllExplicitSpecializations = true;
11052   for (unsigned I = TempParamLists.size(); I-- > 0; ) {
11053     if (TempParamLists[I]->size()) {
11054       isAllExplicitSpecializations = false;
11055       break;
11056     }
11057   }
11058 
11059   // FIXME: don't ignore attributes.
11060 
11061   // If it's explicit specializations all the way down, just forget
11062   // about the template header and build an appropriate non-templated
11063   // friend.  TODO: for source fidelity, remember the headers.
11064   if (isAllExplicitSpecializations) {
11065     if (SS.isEmpty()) {
11066       bool Owned = false;
11067       bool IsDependent = false;
11068       return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
11069                       Attr, AS_public,
11070                       /*ModulePrivateLoc=*/SourceLocation(),
11071                       MultiTemplateParamsArg(), Owned, IsDependent,
11072                       /*ScopedEnumKWLoc=*/SourceLocation(),
11073                       /*ScopedEnumUsesClassTag=*/false,
11074                       /*UnderlyingType=*/TypeResult());
11075     }
11076 
11077     NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
11078     ElaboratedTypeKeyword Keyword
11079       = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11080     QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
11081                                    *Name, NameLoc);
11082     if (T.isNull())
11083       return 0;
11084 
11085     TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11086     if (isa<DependentNameType>(T)) {
11087       DependentNameTypeLoc TL =
11088           TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11089       TL.setElaboratedKeywordLoc(TagLoc);
11090       TL.setQualifierLoc(QualifierLoc);
11091       TL.setNameLoc(NameLoc);
11092     } else {
11093       ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
11094       TL.setElaboratedKeywordLoc(TagLoc);
11095       TL.setQualifierLoc(QualifierLoc);
11096       TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
11097     }
11098 
11099     FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11100                                             TSI, FriendLoc, TempParamLists);
11101     Friend->setAccess(AS_public);
11102     CurContext->addDecl(Friend);
11103     return Friend;
11104   }
11105 
11106   assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
11107 
11108 
11109 
11110   // Handle the case of a templated-scope friend class.  e.g.
11111   //   template <class T> class A<T>::B;
11112   // FIXME: we don't support these right now.
11113   ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11114   QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
11115   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11116   DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11117   TL.setElaboratedKeywordLoc(TagLoc);
11118   TL.setQualifierLoc(SS.getWithLocInContext(Context));
11119   TL.setNameLoc(NameLoc);
11120 
11121   FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11122                                           TSI, FriendLoc, TempParamLists);
11123   Friend->setAccess(AS_public);
11124   Friend->setUnsupportedFriend(true);
11125   CurContext->addDecl(Friend);
11126   return Friend;
11127 }
11128 
11129 
11130 /// Handle a friend type declaration.  This works in tandem with
11131 /// ActOnTag.
11132 ///
11133 /// Notes on friend class templates:
11134 ///
11135 /// We generally treat friend class declarations as if they were
11136 /// declaring a class.  So, for example, the elaborated type specifier
11137 /// in a friend declaration is required to obey the restrictions of a
11138 /// class-head (i.e. no typedefs in the scope chain), template
11139 /// parameters are required to match up with simple template-ids, &c.
11140 /// However, unlike when declaring a template specialization, it's
11141 /// okay to refer to a template specialization without an empty
11142 /// template parameter declaration, e.g.
11143 ///   friend class A<T>::B<unsigned>;
11144 /// We permit this as a special case; if there are any template
11145 /// parameters present at all, require proper matching, i.e.
11146 ///   template <> template \<class T> friend class A<int>::B;
ActOnFriendTypeDecl(Scope * S,const DeclSpec & DS,MultiTemplateParamsArg TempParams)11147 Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
11148                                 MultiTemplateParamsArg TempParams) {
11149   SourceLocation Loc = DS.getLocStart();
11150 
11151   assert(DS.isFriendSpecified());
11152   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11153 
11154   // Try to convert the decl specifier to a type.  This works for
11155   // friend templates because ActOnTag never produces a ClassTemplateDecl
11156   // for a TUK_Friend.
11157   Declarator TheDeclarator(DS, Declarator::MemberContext);
11158   TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
11159   QualType T = TSI->getType();
11160   if (TheDeclarator.isInvalidType())
11161     return 0;
11162 
11163   if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
11164     return 0;
11165 
11166   // This is definitely an error in C++98.  It's probably meant to
11167   // be forbidden in C++0x, too, but the specification is just
11168   // poorly written.
11169   //
11170   // The problem is with declarations like the following:
11171   //   template <T> friend A<T>::foo;
11172   // where deciding whether a class C is a friend or not now hinges
11173   // on whether there exists an instantiation of A that causes
11174   // 'foo' to equal C.  There are restrictions on class-heads
11175   // (which we declare (by fiat) elaborated friend declarations to
11176   // be) that makes this tractable.
11177   //
11178   // FIXME: handle "template <> friend class A<T>;", which
11179   // is possibly well-formed?  Who even knows?
11180   if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
11181     Diag(Loc, diag::err_tagless_friend_type_template)
11182       << DS.getSourceRange();
11183     return 0;
11184   }
11185 
11186   // C++98 [class.friend]p1: A friend of a class is a function
11187   //   or class that is not a member of the class . . .
11188   // This is fixed in DR77, which just barely didn't make the C++03
11189   // deadline.  It's also a very silly restriction that seriously
11190   // affects inner classes and which nobody else seems to implement;
11191   // thus we never diagnose it, not even in -pedantic.
11192   //
11193   // But note that we could warn about it: it's always useless to
11194   // friend one of your own members (it's not, however, worthless to
11195   // friend a member of an arbitrary specialization of your template).
11196 
11197   Decl *D;
11198   if (unsigned NumTempParamLists = TempParams.size())
11199     D = FriendTemplateDecl::Create(Context, CurContext, Loc,
11200                                    NumTempParamLists,
11201                                    TempParams.data(),
11202                                    TSI,
11203                                    DS.getFriendSpecLoc());
11204   else
11205     D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
11206 
11207   if (!D)
11208     return 0;
11209 
11210   D->setAccess(AS_public);
11211   CurContext->addDecl(D);
11212 
11213   return D;
11214 }
11215 
ActOnFriendFunctionDecl(Scope * S,Declarator & D,MultiTemplateParamsArg TemplateParams)11216 NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
11217                                         MultiTemplateParamsArg TemplateParams) {
11218   const DeclSpec &DS = D.getDeclSpec();
11219 
11220   assert(DS.isFriendSpecified());
11221   assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11222 
11223   SourceLocation Loc = D.getIdentifierLoc();
11224   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
11225 
11226   // C++ [class.friend]p1
11227   //   A friend of a class is a function or class....
11228   // Note that this sees through typedefs, which is intended.
11229   // It *doesn't* see through dependent types, which is correct
11230   // according to [temp.arg.type]p3:
11231   //   If a declaration acquires a function type through a
11232   //   type dependent on a template-parameter and this causes
11233   //   a declaration that does not use the syntactic form of a
11234   //   function declarator to have a function type, the program
11235   //   is ill-formed.
11236   if (!TInfo->getType()->isFunctionType()) {
11237     Diag(Loc, diag::err_unexpected_friend);
11238 
11239     // It might be worthwhile to try to recover by creating an
11240     // appropriate declaration.
11241     return 0;
11242   }
11243 
11244   // C++ [namespace.memdef]p3
11245   //  - If a friend declaration in a non-local class first declares a
11246   //    class or function, the friend class or function is a member
11247   //    of the innermost enclosing namespace.
11248   //  - The name of the friend is not found by simple name lookup
11249   //    until a matching declaration is provided in that namespace
11250   //    scope (either before or after the class declaration granting
11251   //    friendship).
11252   //  - If a friend function is called, its name may be found by the
11253   //    name lookup that considers functions from namespaces and
11254   //    classes associated with the types of the function arguments.
11255   //  - When looking for a prior declaration of a class or a function
11256   //    declared as a friend, scopes outside the innermost enclosing
11257   //    namespace scope are not considered.
11258 
11259   CXXScopeSpec &SS = D.getCXXScopeSpec();
11260   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
11261   DeclarationName Name = NameInfo.getName();
11262   assert(Name);
11263 
11264   // Check for unexpanded parameter packs.
11265   if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
11266       DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
11267       DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
11268     return 0;
11269 
11270   // The context we found the declaration in, or in which we should
11271   // create the declaration.
11272   DeclContext *DC;
11273   Scope *DCScope = S;
11274   LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
11275                         ForRedeclaration);
11276 
11277   // FIXME: there are different rules in local classes
11278 
11279   // There are four cases here.
11280   //   - There's no scope specifier, in which case we just go to the
11281   //     appropriate scope and look for a function or function template
11282   //     there as appropriate.
11283   // Recover from invalid scope qualifiers as if they just weren't there.
11284   if (SS.isInvalid() || !SS.isSet()) {
11285     // C++0x [namespace.memdef]p3:
11286     //   If the name in a friend declaration is neither qualified nor
11287     //   a template-id and the declaration is a function or an
11288     //   elaborated-type-specifier, the lookup to determine whether
11289     //   the entity has been previously declared shall not consider
11290     //   any scopes outside the innermost enclosing namespace.
11291     // C++0x [class.friend]p11:
11292     //   If a friend declaration appears in a local class and the name
11293     //   specified is an unqualified name, a prior declaration is
11294     //   looked up without considering scopes that are outside the
11295     //   innermost enclosing non-class scope. For a friend function
11296     //   declaration, if there is no prior declaration, the program is
11297     //   ill-formed.
11298     bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
11299     bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
11300 
11301     // Find the appropriate context according to the above.
11302     DC = CurContext;
11303 
11304     // Skip class contexts.  If someone can cite chapter and verse
11305     // for this behavior, that would be nice --- it's what GCC and
11306     // EDG do, and it seems like a reasonable intent, but the spec
11307     // really only says that checks for unqualified existing
11308     // declarations should stop at the nearest enclosing namespace,
11309     // not that they should only consider the nearest enclosing
11310     // namespace.
11311     while (DC->isRecord())
11312       DC = DC->getParent();
11313 
11314     DeclContext *LookupDC = DC;
11315     while (LookupDC->isTransparentContext())
11316       LookupDC = LookupDC->getParent();
11317 
11318     while (true) {
11319       LookupQualifiedName(Previous, LookupDC);
11320 
11321       // TODO: decide what we think about using declarations.
11322       if (isLocal)
11323         break;
11324 
11325       if (!Previous.empty()) {
11326         DC = LookupDC;
11327         break;
11328       }
11329 
11330       if (isTemplateId) {
11331         if (isa<TranslationUnitDecl>(LookupDC)) break;
11332       } else {
11333         if (LookupDC->isFileContext()) break;
11334       }
11335       LookupDC = LookupDC->getParent();
11336     }
11337 
11338     DCScope = getScopeForDeclContext(S, DC);
11339 
11340     // C++ [class.friend]p6:
11341     //   A function can be defined in a friend declaration of a class if and
11342     //   only if the class is a non-local class (9.8), the function name is
11343     //   unqualified, and the function has namespace scope.
11344     if (isLocal && D.isFunctionDefinition()) {
11345       Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
11346     }
11347 
11348   //   - There's a non-dependent scope specifier, in which case we
11349   //     compute it and do a previous lookup there for a function
11350   //     or function template.
11351   } else if (!SS.getScopeRep()->isDependent()) {
11352     DC = computeDeclContext(SS);
11353     if (!DC) return 0;
11354 
11355     if (RequireCompleteDeclContext(SS, DC)) return 0;
11356 
11357     LookupQualifiedName(Previous, DC);
11358 
11359     // Ignore things found implicitly in the wrong scope.
11360     // TODO: better diagnostics for this case.  Suggesting the right
11361     // qualified scope would be nice...
11362     LookupResult::Filter F = Previous.makeFilter();
11363     while (F.hasNext()) {
11364       NamedDecl *D = F.next();
11365       if (!DC->InEnclosingNamespaceSetOf(
11366               D->getDeclContext()->getRedeclContext()))
11367         F.erase();
11368     }
11369     F.done();
11370 
11371     if (Previous.empty()) {
11372       D.setInvalidType();
11373       Diag(Loc, diag::err_qualified_friend_not_found)
11374           << Name << TInfo->getType();
11375       return 0;
11376     }
11377 
11378     // C++ [class.friend]p1: A friend of a class is a function or
11379     //   class that is not a member of the class . . .
11380     if (DC->Equals(CurContext))
11381       Diag(DS.getFriendSpecLoc(),
11382            getLangOpts().CPlusPlus11 ?
11383              diag::warn_cxx98_compat_friend_is_member :
11384              diag::err_friend_is_member);
11385 
11386     if (D.isFunctionDefinition()) {
11387       // C++ [class.friend]p6:
11388       //   A function can be defined in a friend declaration of a class if and
11389       //   only if the class is a non-local class (9.8), the function name is
11390       //   unqualified, and the function has namespace scope.
11391       SemaDiagnosticBuilder DB
11392         = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
11393 
11394       DB << SS.getScopeRep();
11395       if (DC->isFileContext())
11396         DB << FixItHint::CreateRemoval(SS.getRange());
11397       SS.clear();
11398     }
11399 
11400   //   - There's a scope specifier that does not match any template
11401   //     parameter lists, in which case we use some arbitrary context,
11402   //     create a method or method template, and wait for instantiation.
11403   //   - There's a scope specifier that does match some template
11404   //     parameter lists, which we don't handle right now.
11405   } else {
11406     if (D.isFunctionDefinition()) {
11407       // C++ [class.friend]p6:
11408       //   A function can be defined in a friend declaration of a class if and
11409       //   only if the class is a non-local class (9.8), the function name is
11410       //   unqualified, and the function has namespace scope.
11411       Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
11412         << SS.getScopeRep();
11413     }
11414 
11415     DC = CurContext;
11416     assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
11417   }
11418 
11419   if (!DC->isRecord()) {
11420     // This implies that it has to be an operator or function.
11421     if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
11422         D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
11423         D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
11424       Diag(Loc, diag::err_introducing_special_friend) <<
11425         (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
11426          D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
11427       return 0;
11428     }
11429   }
11430 
11431   // FIXME: This is an egregious hack to cope with cases where the scope stack
11432   // does not contain the declaration context, i.e., in an out-of-line
11433   // definition of a class.
11434   Scope FakeDCScope(S, Scope::DeclScope, Diags);
11435   if (!DCScope) {
11436     FakeDCScope.setEntity(DC);
11437     DCScope = &FakeDCScope;
11438   }
11439 
11440   bool AddToScope = true;
11441   NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
11442                                           TemplateParams, AddToScope);
11443   if (!ND) return 0;
11444 
11445   assert(ND->getDeclContext() == DC);
11446   assert(ND->getLexicalDeclContext() == CurContext);
11447 
11448   // Add the function declaration to the appropriate lookup tables,
11449   // adjusting the redeclarations list as necessary.  We don't
11450   // want to do this yet if the friending class is dependent.
11451   //
11452   // Also update the scope-based lookup if the target context's
11453   // lookup context is in lexical scope.
11454   if (!CurContext->isDependentContext()) {
11455     DC = DC->getRedeclContext();
11456     DC->makeDeclVisibleInContext(ND);
11457     if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
11458       PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
11459   }
11460 
11461   FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
11462                                        D.getIdentifierLoc(), ND,
11463                                        DS.getFriendSpecLoc());
11464   FrD->setAccess(AS_public);
11465   CurContext->addDecl(FrD);
11466 
11467   if (ND->isInvalidDecl()) {
11468     FrD->setInvalidDecl();
11469   } else {
11470     if (DC->isRecord()) CheckFriendAccess(ND);
11471 
11472     FunctionDecl *FD;
11473     if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
11474       FD = FTD->getTemplatedDecl();
11475     else
11476       FD = cast<FunctionDecl>(ND);
11477 
11478     // C++11 [dcl.fct.default]p4: If a friend declaration specifies a
11479     // default argument expression, that declaration shall be a definition
11480     // and shall be the only declaration of the function or function
11481     // template in the translation unit.
11482     if (functionDeclHasDefaultArgument(FD)) {
11483       if (FunctionDecl *OldFD = FD->getPreviousDecl()) {
11484         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared);
11485         Diag(OldFD->getLocation(), diag::note_previous_declaration);
11486       } else if (!D.isFunctionDefinition())
11487         Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def);
11488     }
11489 
11490     // Mark templated-scope function declarations as unsupported.
11491     if (FD->getNumTemplateParameterLists())
11492       FrD->setUnsupportedFriend(true);
11493   }
11494 
11495   return ND;
11496 }
11497 
SetDeclDeleted(Decl * Dcl,SourceLocation DelLoc)11498 void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
11499   AdjustDeclIfTemplate(Dcl);
11500 
11501   FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
11502   if (!Fn) {
11503     Diag(DelLoc, diag::err_deleted_non_function);
11504     return;
11505   }
11506 
11507   if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
11508     // Don't consider the implicit declaration we generate for explicit
11509     // specializations. FIXME: Do not generate these implicit declarations.
11510     if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
11511         || Prev->getPreviousDecl()) && !Prev->isDefined()) {
11512       Diag(DelLoc, diag::err_deleted_decl_not_first);
11513       Diag(Prev->getLocation(), diag::note_previous_declaration);
11514     }
11515     // If the declaration wasn't the first, we delete the function anyway for
11516     // recovery.
11517     Fn = Fn->getCanonicalDecl();
11518   }
11519 
11520   if (Fn->isDeleted())
11521     return;
11522 
11523   // See if we're deleting a function which is already known to override a
11524   // non-deleted virtual function.
11525   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn)) {
11526     bool IssuedDiagnostic = false;
11527     for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
11528                                         E = MD->end_overridden_methods();
11529          I != E; ++I) {
11530       if (!(*MD->begin_overridden_methods())->isDeleted()) {
11531         if (!IssuedDiagnostic) {
11532           Diag(DelLoc, diag::err_deleted_override) << MD->getDeclName();
11533           IssuedDiagnostic = true;
11534         }
11535         Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
11536       }
11537     }
11538   }
11539 
11540   Fn->setDeletedAsWritten();
11541 }
11542 
SetDeclDefaulted(Decl * Dcl,SourceLocation DefaultLoc)11543 void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
11544   CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Dcl);
11545 
11546   if (MD) {
11547     if (MD->getParent()->isDependentType()) {
11548       MD->setDefaulted();
11549       MD->setExplicitlyDefaulted();
11550       return;
11551     }
11552 
11553     CXXSpecialMember Member = getSpecialMember(MD);
11554     if (Member == CXXInvalid) {
11555       if (!MD->isInvalidDecl())
11556         Diag(DefaultLoc, diag::err_default_special_members);
11557       return;
11558     }
11559 
11560     MD->setDefaulted();
11561     MD->setExplicitlyDefaulted();
11562 
11563     // If this definition appears within the record, do the checking when
11564     // the record is complete.
11565     const FunctionDecl *Primary = MD;
11566     if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
11567       // Find the uninstantiated declaration that actually had the '= default'
11568       // on it.
11569       Pattern->isDefined(Primary);
11570 
11571     // If the method was defaulted on its first declaration, we will have
11572     // already performed the checking in CheckCompletedCXXClass. Such a
11573     // declaration doesn't trigger an implicit definition.
11574     if (Primary == Primary->getCanonicalDecl())
11575       return;
11576 
11577     CheckExplicitlyDefaultedSpecialMember(MD);
11578 
11579     // The exception specification is needed because we are defining the
11580     // function.
11581     ResolveExceptionSpec(DefaultLoc,
11582                          MD->getType()->castAs<FunctionProtoType>());
11583 
11584     if (MD->isInvalidDecl())
11585       return;
11586 
11587     switch (Member) {
11588     case CXXDefaultConstructor:
11589       DefineImplicitDefaultConstructor(DefaultLoc,
11590                                        cast<CXXConstructorDecl>(MD));
11591       break;
11592     case CXXCopyConstructor:
11593       DefineImplicitCopyConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
11594       break;
11595     case CXXCopyAssignment:
11596       DefineImplicitCopyAssignment(DefaultLoc, MD);
11597       break;
11598     case CXXDestructor:
11599       DefineImplicitDestructor(DefaultLoc, cast<CXXDestructorDecl>(MD));
11600       break;
11601     case CXXMoveConstructor:
11602       DefineImplicitMoveConstructor(DefaultLoc, cast<CXXConstructorDecl>(MD));
11603       break;
11604     case CXXMoveAssignment:
11605       DefineImplicitMoveAssignment(DefaultLoc, MD);
11606       break;
11607     case CXXInvalid:
11608       llvm_unreachable("Invalid special member.");
11609     }
11610   } else {
11611     Diag(DefaultLoc, diag::err_default_special_members);
11612   }
11613 }
11614 
SearchForReturnInStmt(Sema & Self,Stmt * S)11615 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
11616   for (Stmt::child_range CI = S->children(); CI; ++CI) {
11617     Stmt *SubStmt = *CI;
11618     if (!SubStmt)
11619       continue;
11620     if (isa<ReturnStmt>(SubStmt))
11621       Self.Diag(SubStmt->getLocStart(),
11622            diag::err_return_in_constructor_handler);
11623     if (!isa<Expr>(SubStmt))
11624       SearchForReturnInStmt(Self, SubStmt);
11625   }
11626 }
11627 
DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt * TryBlock)11628 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
11629   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
11630     CXXCatchStmt *Handler = TryBlock->getHandler(I);
11631     SearchForReturnInStmt(*this, Handler);
11632   }
11633 }
11634 
CheckOverridingFunctionAttributes(const CXXMethodDecl * New,const CXXMethodDecl * Old)11635 bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
11636                                              const CXXMethodDecl *Old) {
11637   const FunctionType *NewFT = New->getType()->getAs<FunctionType>();
11638   const FunctionType *OldFT = Old->getType()->getAs<FunctionType>();
11639 
11640   CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
11641 
11642   // If the calling conventions match, everything is fine
11643   if (NewCC == OldCC)
11644     return false;
11645 
11646   // If either of the calling conventions are set to "default", we need to pick
11647   // something more sensible based on the target. This supports code where the
11648   // one method explicitly sets thiscall, and another has no explicit calling
11649   // convention.
11650   CallingConv Default =
11651     Context.getTargetInfo().getDefaultCallingConv(TargetInfo::CCMT_Member);
11652   if (NewCC == CC_Default)
11653     NewCC = Default;
11654   if (OldCC == CC_Default)
11655     OldCC = Default;
11656 
11657   // If the calling conventions still don't match, then report the error
11658   if (NewCC != OldCC) {
11659     Diag(New->getLocation(),
11660          diag::err_conflicting_overriding_cc_attributes)
11661       << New->getDeclName() << New->getType() << Old->getType();
11662     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11663     return true;
11664   }
11665 
11666   return false;
11667 }
11668 
CheckOverridingFunctionReturnType(const CXXMethodDecl * New,const CXXMethodDecl * Old)11669 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
11670                                              const CXXMethodDecl *Old) {
11671   QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
11672   QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
11673 
11674   if (Context.hasSameType(NewTy, OldTy) ||
11675       NewTy->isDependentType() || OldTy->isDependentType())
11676     return false;
11677 
11678   // Check if the return types are covariant
11679   QualType NewClassTy, OldClassTy;
11680 
11681   /// Both types must be pointers or references to classes.
11682   if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
11683     if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
11684       NewClassTy = NewPT->getPointeeType();
11685       OldClassTy = OldPT->getPointeeType();
11686     }
11687   } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
11688     if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
11689       if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
11690         NewClassTy = NewRT->getPointeeType();
11691         OldClassTy = OldRT->getPointeeType();
11692       }
11693     }
11694   }
11695 
11696   // The return types aren't either both pointers or references to a class type.
11697   if (NewClassTy.isNull()) {
11698     Diag(New->getLocation(),
11699          diag::err_different_return_type_for_overriding_virtual_function)
11700       << New->getDeclName() << NewTy << OldTy;
11701     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11702 
11703     return true;
11704   }
11705 
11706   // C++ [class.virtual]p6:
11707   //   If the return type of D::f differs from the return type of B::f, the
11708   //   class type in the return type of D::f shall be complete at the point of
11709   //   declaration of D::f or shall be the class type D.
11710   if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
11711     if (!RT->isBeingDefined() &&
11712         RequireCompleteType(New->getLocation(), NewClassTy,
11713                             diag::err_covariant_return_incomplete,
11714                             New->getDeclName()))
11715     return true;
11716   }
11717 
11718   if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
11719     // Check if the new class derives from the old class.
11720     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
11721       Diag(New->getLocation(),
11722            diag::err_covariant_return_not_derived)
11723       << New->getDeclName() << NewTy << OldTy;
11724       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11725       return true;
11726     }
11727 
11728     // Check if we the conversion from derived to base is valid.
11729     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
11730                     diag::err_covariant_return_inaccessible_base,
11731                     diag::err_covariant_return_ambiguous_derived_to_base_conv,
11732                     // FIXME: Should this point to the return type?
11733                     New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
11734       // FIXME: this note won't trigger for delayed access control
11735       // diagnostics, and it's impossible to get an undelayed error
11736       // here from access control during the original parse because
11737       // the ParsingDeclSpec/ParsingDeclarator are still in scope.
11738       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11739       return true;
11740     }
11741   }
11742 
11743   // The qualifiers of the return types must be the same.
11744   if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
11745     Diag(New->getLocation(),
11746          diag::err_covariant_return_type_different_qualifications)
11747     << New->getDeclName() << NewTy << OldTy;
11748     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11749     return true;
11750   };
11751 
11752 
11753   // The new class type must have the same or less qualifiers as the old type.
11754   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
11755     Diag(New->getLocation(),
11756          diag::err_covariant_return_type_class_type_more_qualified)
11757     << New->getDeclName() << NewTy << OldTy;
11758     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11759     return true;
11760   };
11761 
11762   return false;
11763 }
11764 
11765 /// \brief Mark the given method pure.
11766 ///
11767 /// \param Method the method to be marked pure.
11768 ///
11769 /// \param InitRange the source range that covers the "0" initializer.
CheckPureMethod(CXXMethodDecl * Method,SourceRange InitRange)11770 bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
11771   SourceLocation EndLoc = InitRange.getEnd();
11772   if (EndLoc.isValid())
11773     Method->setRangeEnd(EndLoc);
11774 
11775   if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
11776     Method->setPure();
11777     return false;
11778   }
11779 
11780   if (!Method->isInvalidDecl())
11781     Diag(Method->getLocation(), diag::err_non_virtual_pure)
11782       << Method->getDeclName() << InitRange;
11783   return true;
11784 }
11785 
11786 /// \brief Determine whether the given declaration is a static data member.
isStaticDataMember(const Decl * D)11787 static bool isStaticDataMember(const Decl *D) {
11788   if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D))
11789     return Var->isStaticDataMember();
11790 
11791   return false;
11792 }
11793 
11794 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
11795 /// an initializer for the out-of-line declaration 'Dcl'.  The scope
11796 /// is a fresh scope pushed for just this purpose.
11797 ///
11798 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
11799 /// static data member of class X, names should be looked up in the scope of
11800 /// class X.
ActOnCXXEnterDeclInitializer(Scope * S,Decl * D)11801 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
11802   // If there is no declaration, there was an error parsing it.
11803   if (D == 0 || D->isInvalidDecl()) return;
11804 
11805   // We should only get called for declarations with scope specifiers, like:
11806   //   int foo::bar;
11807   assert(D->isOutOfLine());
11808   EnterDeclaratorContext(S, D->getDeclContext());
11809 
11810   // If we are parsing the initializer for a static data member, push a
11811   // new expression evaluation context that is associated with this static
11812   // data member.
11813   if (isStaticDataMember(D))
11814     PushExpressionEvaluationContext(PotentiallyEvaluated, D);
11815 }
11816 
11817 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
11818 /// initializer for the out-of-line declaration 'D'.
ActOnCXXExitDeclInitializer(Scope * S,Decl * D)11819 void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
11820   // If there is no declaration, there was an error parsing it.
11821   if (D == 0 || D->isInvalidDecl()) return;
11822 
11823   if (isStaticDataMember(D))
11824     PopExpressionEvaluationContext();
11825 
11826   assert(D->isOutOfLine());
11827   ExitDeclaratorContext(S);
11828 }
11829 
11830 /// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
11831 /// C++ if/switch/while/for statement.
11832 /// e.g: "if (int x = f()) {...}"
ActOnCXXConditionDeclaration(Scope * S,Declarator & D)11833 DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
11834   // C++ 6.4p2:
11835   // The declarator shall not specify a function or an array.
11836   // The type-specifier-seq shall not contain typedef and shall not declare a
11837   // new class or enumeration.
11838   assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
11839          "Parser allowed 'typedef' as storage class of condition decl.");
11840 
11841   Decl *Dcl = ActOnDeclarator(S, D);
11842   if (!Dcl)
11843     return true;
11844 
11845   if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
11846     Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
11847       << D.getSourceRange();
11848     return true;
11849   }
11850 
11851   return Dcl;
11852 }
11853 
LoadExternalVTableUses()11854 void Sema::LoadExternalVTableUses() {
11855   if (!ExternalSource)
11856     return;
11857 
11858   SmallVector<ExternalVTableUse, 4> VTables;
11859   ExternalSource->ReadUsedVTables(VTables);
11860   SmallVector<VTableUse, 4> NewUses;
11861   for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
11862     llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
11863       = VTablesUsed.find(VTables[I].Record);
11864     // Even if a definition wasn't required before, it may be required now.
11865     if (Pos != VTablesUsed.end()) {
11866       if (!Pos->second && VTables[I].DefinitionRequired)
11867         Pos->second = true;
11868       continue;
11869     }
11870 
11871     VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
11872     NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
11873   }
11874 
11875   VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
11876 }
11877 
MarkVTableUsed(SourceLocation Loc,CXXRecordDecl * Class,bool DefinitionRequired)11878 void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
11879                           bool DefinitionRequired) {
11880   // Ignore any vtable uses in unevaluated operands or for classes that do
11881   // not have a vtable.
11882   if (!Class->isDynamicClass() || Class->isDependentContext() ||
11883       CurContext->isDependentContext() || isUnevaluatedContext())
11884     return;
11885 
11886   // Try to insert this class into the map.
11887   LoadExternalVTableUses();
11888   Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11889   std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
11890     Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
11891   if (!Pos.second) {
11892     // If we already had an entry, check to see if we are promoting this vtable
11893     // to required a definition. If so, we need to reappend to the VTableUses
11894     // list, since we may have already processed the first entry.
11895     if (DefinitionRequired && !Pos.first->second) {
11896       Pos.first->second = true;
11897     } else {
11898       // Otherwise, we can early exit.
11899       return;
11900     }
11901   }
11902 
11903   // Local classes need to have their virtual members marked
11904   // immediately. For all other classes, we mark their virtual members
11905   // at the end of the translation unit.
11906   if (Class->isLocalClass())
11907     MarkVirtualMembersReferenced(Loc, Class);
11908   else
11909     VTableUses.push_back(std::make_pair(Class, Loc));
11910 }
11911 
DefineUsedVTables()11912 bool Sema::DefineUsedVTables() {
11913   LoadExternalVTableUses();
11914   if (VTableUses.empty())
11915     return false;
11916 
11917   // Note: The VTableUses vector could grow as a result of marking
11918   // the members of a class as "used", so we check the size each
11919   // time through the loop and prefer indices (which are stable) to
11920   // iterators (which are not).
11921   bool DefinedAnything = false;
11922   for (unsigned I = 0; I != VTableUses.size(); ++I) {
11923     CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
11924     if (!Class)
11925       continue;
11926 
11927     SourceLocation Loc = VTableUses[I].second;
11928 
11929     bool DefineVTable = true;
11930 
11931     // If this class has a key function, but that key function is
11932     // defined in another translation unit, we don't need to emit the
11933     // vtable even though we're using it.
11934     const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
11935     if (KeyFunction && !KeyFunction->hasBody()) {
11936       switch (KeyFunction->getTemplateSpecializationKind()) {
11937       case TSK_Undeclared:
11938       case TSK_ExplicitSpecialization:
11939       case TSK_ExplicitInstantiationDeclaration:
11940         // The key function is in another translation unit.
11941         DefineVTable = false;
11942         break;
11943 
11944       case TSK_ExplicitInstantiationDefinition:
11945       case TSK_ImplicitInstantiation:
11946         // We will be instantiating the key function.
11947         break;
11948       }
11949     } else if (!KeyFunction) {
11950       // If we have a class with no key function that is the subject
11951       // of an explicit instantiation declaration, suppress the
11952       // vtable; it will live with the explicit instantiation
11953       // definition.
11954       bool IsExplicitInstantiationDeclaration
11955         = Class->getTemplateSpecializationKind()
11956                                       == TSK_ExplicitInstantiationDeclaration;
11957       for (TagDecl::redecl_iterator R = Class->redecls_begin(),
11958                                  REnd = Class->redecls_end();
11959            R != REnd; ++R) {
11960         TemplateSpecializationKind TSK
11961           = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
11962         if (TSK == TSK_ExplicitInstantiationDeclaration)
11963           IsExplicitInstantiationDeclaration = true;
11964         else if (TSK == TSK_ExplicitInstantiationDefinition) {
11965           IsExplicitInstantiationDeclaration = false;
11966           break;
11967         }
11968       }
11969 
11970       if (IsExplicitInstantiationDeclaration)
11971         DefineVTable = false;
11972     }
11973 
11974     // The exception specifications for all virtual members may be needed even
11975     // if we are not providing an authoritative form of the vtable in this TU.
11976     // We may choose to emit it available_externally anyway.
11977     if (!DefineVTable) {
11978       MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
11979       continue;
11980     }
11981 
11982     // Mark all of the virtual members of this class as referenced, so
11983     // that we can build a vtable. Then, tell the AST consumer that a
11984     // vtable for this class is required.
11985     DefinedAnything = true;
11986     MarkVirtualMembersReferenced(Loc, Class);
11987     CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11988     Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
11989 
11990     // Optionally warn if we're emitting a weak vtable.
11991     if (Class->isExternallyVisible() &&
11992         Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
11993       const FunctionDecl *KeyFunctionDef = 0;
11994       if (!KeyFunction ||
11995           (KeyFunction->hasBody(KeyFunctionDef) &&
11996            KeyFunctionDef->isInlined()))
11997         Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
11998              TSK_ExplicitInstantiationDefinition
11999              ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
12000           << Class;
12001     }
12002   }
12003   VTableUses.clear();
12004 
12005   return DefinedAnything;
12006 }
12007 
MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,const CXXRecordDecl * RD)12008 void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
12009                                                  const CXXRecordDecl *RD) {
12010   for (CXXRecordDecl::method_iterator I = RD->method_begin(),
12011                                       E = RD->method_end(); I != E; ++I)
12012     if ((*I)->isVirtual() && !(*I)->isPure())
12013       ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
12014 }
12015 
MarkVirtualMembersReferenced(SourceLocation Loc,const CXXRecordDecl * RD)12016 void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
12017                                         const CXXRecordDecl *RD) {
12018   // Mark all functions which will appear in RD's vtable as used.
12019   CXXFinalOverriderMap FinalOverriders;
12020   RD->getFinalOverriders(FinalOverriders);
12021   for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
12022                                             E = FinalOverriders.end();
12023        I != E; ++I) {
12024     for (OverridingMethods::const_iterator OI = I->second.begin(),
12025                                            OE = I->second.end();
12026          OI != OE; ++OI) {
12027       assert(OI->second.size() > 0 && "no final overrider");
12028       CXXMethodDecl *Overrider = OI->second.front().Method;
12029 
12030       // C++ [basic.def.odr]p2:
12031       //   [...] A virtual member function is used if it is not pure. [...]
12032       if (!Overrider->isPure())
12033         MarkFunctionReferenced(Loc, Overrider);
12034     }
12035   }
12036 
12037   // Only classes that have virtual bases need a VTT.
12038   if (RD->getNumVBases() == 0)
12039     return;
12040 
12041   for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
12042            e = RD->bases_end(); i != e; ++i) {
12043     const CXXRecordDecl *Base =
12044         cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
12045     if (Base->getNumVBases() == 0)
12046       continue;
12047     MarkVirtualMembersReferenced(Loc, Base);
12048   }
12049 }
12050 
12051 /// SetIvarInitializers - This routine builds initialization ASTs for the
12052 /// Objective-C implementation whose ivars need be initialized.
SetIvarInitializers(ObjCImplementationDecl * ObjCImplementation)12053 void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
12054   if (!getLangOpts().CPlusPlus)
12055     return;
12056   if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
12057     SmallVector<ObjCIvarDecl*, 8> ivars;
12058     CollectIvarsToConstructOrDestruct(OID, ivars);
12059     if (ivars.empty())
12060       return;
12061     SmallVector<CXXCtorInitializer*, 32> AllToInit;
12062     for (unsigned i = 0; i < ivars.size(); i++) {
12063       FieldDecl *Field = ivars[i];
12064       if (Field->isInvalidDecl())
12065         continue;
12066 
12067       CXXCtorInitializer *Member;
12068       InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
12069       InitializationKind InitKind =
12070         InitializationKind::CreateDefault(ObjCImplementation->getLocation());
12071 
12072       InitializationSequence InitSeq(*this, InitEntity, InitKind, None);
12073       ExprResult MemberInit =
12074         InitSeq.Perform(*this, InitEntity, InitKind, None);
12075       MemberInit = MaybeCreateExprWithCleanups(MemberInit);
12076       // Note, MemberInit could actually come back empty if no initialization
12077       // is required (e.g., because it would call a trivial default constructor)
12078       if (!MemberInit.get() || MemberInit.isInvalid())
12079         continue;
12080 
12081       Member =
12082         new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
12083                                          SourceLocation(),
12084                                          MemberInit.takeAs<Expr>(),
12085                                          SourceLocation());
12086       AllToInit.push_back(Member);
12087 
12088       // Be sure that the destructor is accessible and is marked as referenced.
12089       if (const RecordType *RecordTy
12090                   = Context.getBaseElementType(Field->getType())
12091                                                         ->getAs<RecordType>()) {
12092                     CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
12093         if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
12094           MarkFunctionReferenced(Field->getLocation(), Destructor);
12095           CheckDestructorAccess(Field->getLocation(), Destructor,
12096                             PDiag(diag::err_access_dtor_ivar)
12097                               << Context.getBaseElementType(Field->getType()));
12098         }
12099       }
12100     }
12101     ObjCImplementation->setIvarInitializers(Context,
12102                                             AllToInit.data(), AllToInit.size());
12103   }
12104 }
12105 
12106 static
DelegatingCycleHelper(CXXConstructorDecl * Ctor,llvm::SmallSet<CXXConstructorDecl *,4> & Valid,llvm::SmallSet<CXXConstructorDecl *,4> & Invalid,llvm::SmallSet<CXXConstructorDecl *,4> & Current,Sema & S)12107 void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
12108                            llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
12109                            llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
12110                            llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
12111                            Sema &S) {
12112   if (Ctor->isInvalidDecl())
12113     return;
12114 
12115   CXXConstructorDecl *Target = Ctor->getTargetConstructor();
12116 
12117   // Target may not be determinable yet, for instance if this is a dependent
12118   // call in an uninstantiated template.
12119   if (Target) {
12120     const FunctionDecl *FNTarget = 0;
12121     (void)Target->hasBody(FNTarget);
12122     Target = const_cast<CXXConstructorDecl*>(
12123       cast_or_null<CXXConstructorDecl>(FNTarget));
12124   }
12125 
12126   CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
12127                      // Avoid dereferencing a null pointer here.
12128                      *TCanonical = Target ? Target->getCanonicalDecl() : 0;
12129 
12130   if (!Current.insert(Canonical))
12131     return;
12132 
12133   // We know that beyond here, we aren't chaining into a cycle.
12134   if (!Target || !Target->isDelegatingConstructor() ||
12135       Target->isInvalidDecl() || Valid.count(TCanonical)) {
12136     Valid.insert(Current.begin(), Current.end());
12137     Current.clear();
12138   // We've hit a cycle.
12139   } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
12140              Current.count(TCanonical)) {
12141     // If we haven't diagnosed this cycle yet, do so now.
12142     if (!Invalid.count(TCanonical)) {
12143       S.Diag((*Ctor->init_begin())->getSourceLocation(),
12144              diag::warn_delegating_ctor_cycle)
12145         << Ctor;
12146 
12147       // Don't add a note for a function delegating directly to itself.
12148       if (TCanonical != Canonical)
12149         S.Diag(Target->getLocation(), diag::note_it_delegates_to);
12150 
12151       CXXConstructorDecl *C = Target;
12152       while (C->getCanonicalDecl() != Canonical) {
12153         const FunctionDecl *FNTarget = 0;
12154         (void)C->getTargetConstructor()->hasBody(FNTarget);
12155         assert(FNTarget && "Ctor cycle through bodiless function");
12156 
12157         C = const_cast<CXXConstructorDecl*>(
12158           cast<CXXConstructorDecl>(FNTarget));
12159         S.Diag(C->getLocation(), diag::note_which_delegates_to);
12160       }
12161     }
12162 
12163     Invalid.insert(Current.begin(), Current.end());
12164     Current.clear();
12165   } else {
12166     DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
12167   }
12168 }
12169 
12170 
CheckDelegatingCtorCycles()12171 void Sema::CheckDelegatingCtorCycles() {
12172   llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
12173 
12174   for (DelegatingCtorDeclsType::iterator
12175          I = DelegatingCtorDecls.begin(ExternalSource),
12176          E = DelegatingCtorDecls.end();
12177        I != E; ++I)
12178     DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
12179 
12180   for (llvm::SmallSet<CXXConstructorDecl *, 4>::iterator CI = Invalid.begin(),
12181                                                          CE = Invalid.end();
12182        CI != CE; ++CI)
12183     (*CI)->setInvalidDecl();
12184 }
12185 
12186 namespace {
12187   /// \brief AST visitor that finds references to the 'this' expression.
12188   class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
12189     Sema &S;
12190 
12191   public:
FindCXXThisExpr(Sema & S)12192     explicit FindCXXThisExpr(Sema &S) : S(S) { }
12193 
VisitCXXThisExpr(CXXThisExpr * E)12194     bool VisitCXXThisExpr(CXXThisExpr *E) {
12195       S.Diag(E->getLocation(), diag::err_this_static_member_func)
12196         << E->isImplicit();
12197       return false;
12198     }
12199   };
12200 }
12201 
checkThisInStaticMemberFunctionType(CXXMethodDecl * Method)12202 bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
12203   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12204   if (!TSInfo)
12205     return false;
12206 
12207   TypeLoc TL = TSInfo->getTypeLoc();
12208   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12209   if (!ProtoTL)
12210     return false;
12211 
12212   // C++11 [expr.prim.general]p3:
12213   //   [The expression this] shall not appear before the optional
12214   //   cv-qualifier-seq and it shall not appear within the declaration of a
12215   //   static member function (although its type and value category are defined
12216   //   within a static member function as they are within a non-static member
12217   //   function). [ Note: this is because declaration matching does not occur
12218   //  until the complete declarator is known. - end note ]
12219   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12220   FindCXXThisExpr Finder(*this);
12221 
12222   // If the return type came after the cv-qualifier-seq, check it now.
12223   if (Proto->hasTrailingReturn() &&
12224       !Finder.TraverseTypeLoc(ProtoTL.getResultLoc()))
12225     return true;
12226 
12227   // Check the exception specification.
12228   if (checkThisInStaticMemberFunctionExceptionSpec(Method))
12229     return true;
12230 
12231   return checkThisInStaticMemberFunctionAttributes(Method);
12232 }
12233 
checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl * Method)12234 bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
12235   TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12236   if (!TSInfo)
12237     return false;
12238 
12239   TypeLoc TL = TSInfo->getTypeLoc();
12240   FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12241   if (!ProtoTL)
12242     return false;
12243 
12244   const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12245   FindCXXThisExpr Finder(*this);
12246 
12247   switch (Proto->getExceptionSpecType()) {
12248   case EST_Uninstantiated:
12249   case EST_Unevaluated:
12250   case EST_BasicNoexcept:
12251   case EST_DynamicNone:
12252   case EST_MSAny:
12253   case EST_None:
12254     break;
12255 
12256   case EST_ComputedNoexcept:
12257     if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
12258       return true;
12259 
12260   case EST_Dynamic:
12261     for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
12262          EEnd = Proto->exception_end();
12263          E != EEnd; ++E) {
12264       if (!Finder.TraverseType(*E))
12265         return true;
12266     }
12267     break;
12268   }
12269 
12270   return false;
12271 }
12272 
checkThisInStaticMemberFunctionAttributes(CXXMethodDecl * Method)12273 bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
12274   FindCXXThisExpr Finder(*this);
12275 
12276   // Check attributes.
12277   for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
12278        A != AEnd; ++A) {
12279     // FIXME: This should be emitted by tblgen.
12280     Expr *Arg = 0;
12281     ArrayRef<Expr *> Args;
12282     if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
12283       Arg = G->getArg();
12284     else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
12285       Arg = G->getArg();
12286     else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
12287       Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
12288     else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
12289       Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
12290     else if (ExclusiveLockFunctionAttr *ELF
12291                = dyn_cast<ExclusiveLockFunctionAttr>(*A))
12292       Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
12293     else if (SharedLockFunctionAttr *SLF
12294                = dyn_cast<SharedLockFunctionAttr>(*A))
12295       Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
12296     else if (ExclusiveTrylockFunctionAttr *ETLF
12297                = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
12298       Arg = ETLF->getSuccessValue();
12299       Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
12300     } else if (SharedTrylockFunctionAttr *STLF
12301                  = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
12302       Arg = STLF->getSuccessValue();
12303       Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
12304     } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
12305       Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
12306     else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
12307       Arg = LR->getArg();
12308     else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
12309       Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
12310     else if (ExclusiveLocksRequiredAttr *ELR
12311                = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
12312       Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
12313     else if (SharedLocksRequiredAttr *SLR
12314                = dyn_cast<SharedLocksRequiredAttr>(*A))
12315       Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
12316 
12317     if (Arg && !Finder.TraverseStmt(Arg))
12318       return true;
12319 
12320     for (unsigned I = 0, N = Args.size(); I != N; ++I) {
12321       if (!Finder.TraverseStmt(Args[I]))
12322         return true;
12323     }
12324   }
12325 
12326   return false;
12327 }
12328 
12329 void
checkExceptionSpecification(ExceptionSpecificationType EST,ArrayRef<ParsedType> DynamicExceptions,ArrayRef<SourceRange> DynamicExceptionRanges,Expr * NoexceptExpr,SmallVectorImpl<QualType> & Exceptions,FunctionProtoType::ExtProtoInfo & EPI)12330 Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
12331                                   ArrayRef<ParsedType> DynamicExceptions,
12332                                   ArrayRef<SourceRange> DynamicExceptionRanges,
12333                                   Expr *NoexceptExpr,
12334                                   SmallVectorImpl<QualType> &Exceptions,
12335                                   FunctionProtoType::ExtProtoInfo &EPI) {
12336   Exceptions.clear();
12337   EPI.ExceptionSpecType = EST;
12338   if (EST == EST_Dynamic) {
12339     Exceptions.reserve(DynamicExceptions.size());
12340     for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
12341       // FIXME: Preserve type source info.
12342       QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
12343 
12344       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
12345       collectUnexpandedParameterPacks(ET, Unexpanded);
12346       if (!Unexpanded.empty()) {
12347         DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
12348                                          UPPC_ExceptionType,
12349                                          Unexpanded);
12350         continue;
12351       }
12352 
12353       // Check that the type is valid for an exception spec, and
12354       // drop it if not.
12355       if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
12356         Exceptions.push_back(ET);
12357     }
12358     EPI.NumExceptions = Exceptions.size();
12359     EPI.Exceptions = Exceptions.data();
12360     return;
12361   }
12362 
12363   if (EST == EST_ComputedNoexcept) {
12364     // If an error occurred, there's no expression here.
12365     if (NoexceptExpr) {
12366       assert((NoexceptExpr->isTypeDependent() ||
12367               NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
12368               Context.BoolTy) &&
12369              "Parser should have made sure that the expression is boolean");
12370       if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
12371         EPI.ExceptionSpecType = EST_BasicNoexcept;
12372         return;
12373       }
12374 
12375       if (!NoexceptExpr->isValueDependent())
12376         NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
12377                          diag::err_noexcept_needs_constant_expression,
12378                          /*AllowFold*/ false).take();
12379       EPI.NoexceptExpr = NoexceptExpr;
12380     }
12381     return;
12382   }
12383 }
12384 
12385 /// IdentifyCUDATarget - Determine the CUDA compilation target for this function
IdentifyCUDATarget(const FunctionDecl * D)12386 Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
12387   // Implicitly declared functions (e.g. copy constructors) are
12388   // __host__ __device__
12389   if (D->isImplicit())
12390     return CFT_HostDevice;
12391 
12392   if (D->hasAttr<CUDAGlobalAttr>())
12393     return CFT_Global;
12394 
12395   if (D->hasAttr<CUDADeviceAttr>()) {
12396     if (D->hasAttr<CUDAHostAttr>())
12397       return CFT_HostDevice;
12398     return CFT_Device;
12399   }
12400 
12401   return CFT_Host;
12402 }
12403 
CheckCUDATarget(CUDAFunctionTarget CallerTarget,CUDAFunctionTarget CalleeTarget)12404 bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
12405                            CUDAFunctionTarget CalleeTarget) {
12406   // CUDA B.1.1 "The __device__ qualifier declares a function that is...
12407   // Callable from the device only."
12408   if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
12409     return true;
12410 
12411   // CUDA B.1.2 "The __global__ qualifier declares a function that is...
12412   // Callable from the host only."
12413   // CUDA B.1.3 "The __host__ qualifier declares a function that is...
12414   // Callable from the host only."
12415   if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
12416       (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
12417     return true;
12418 
12419   if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
12420     return true;
12421 
12422   return false;
12423 }
12424 
12425 /// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
12426 ///
HandleMSProperty(Scope * S,RecordDecl * Record,SourceLocation DeclStart,Declarator & D,Expr * BitWidth,InClassInitStyle InitStyle,AccessSpecifier AS,AttributeList * MSPropertyAttr)12427 MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
12428                                        SourceLocation DeclStart,
12429                                        Declarator &D, Expr *BitWidth,
12430                                        InClassInitStyle InitStyle,
12431                                        AccessSpecifier AS,
12432                                        AttributeList *MSPropertyAttr) {
12433   IdentifierInfo *II = D.getIdentifier();
12434   if (!II) {
12435     Diag(DeclStart, diag::err_anonymous_property);
12436     return NULL;
12437   }
12438   SourceLocation Loc = D.getIdentifierLoc();
12439 
12440   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
12441   QualType T = TInfo->getType();
12442   if (getLangOpts().CPlusPlus) {
12443     CheckExtraCXXDefaultArguments(D);
12444 
12445     if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
12446                                         UPPC_DataMemberType)) {
12447       D.setInvalidType();
12448       T = Context.IntTy;
12449       TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
12450     }
12451   }
12452 
12453   DiagnoseFunctionSpecifiers(D.getDeclSpec());
12454 
12455   if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
12456     Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
12457          diag::err_invalid_thread)
12458       << DeclSpec::getSpecifierName(TSCS);
12459 
12460   // Check to see if this name was declared as a member previously
12461   NamedDecl *PrevDecl = 0;
12462   LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
12463   LookupName(Previous, S);
12464   switch (Previous.getResultKind()) {
12465   case LookupResult::Found:
12466   case LookupResult::FoundUnresolvedValue:
12467     PrevDecl = Previous.getAsSingle<NamedDecl>();
12468     break;
12469 
12470   case LookupResult::FoundOverloaded:
12471     PrevDecl = Previous.getRepresentativeDecl();
12472     break;
12473 
12474   case LookupResult::NotFound:
12475   case LookupResult::NotFoundInCurrentInstantiation:
12476   case LookupResult::Ambiguous:
12477     break;
12478   }
12479 
12480   if (PrevDecl && PrevDecl->isTemplateParameter()) {
12481     // Maybe we will complain about the shadowed template parameter.
12482     DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
12483     // Just pretend that we didn't see the previous declaration.
12484     PrevDecl = 0;
12485   }
12486 
12487   if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
12488     PrevDecl = 0;
12489 
12490   SourceLocation TSSL = D.getLocStart();
12491   MSPropertyDecl *NewPD;
12492   const AttributeList::PropertyData &Data = MSPropertyAttr->getPropertyData();
12493   NewPD = new (Context) MSPropertyDecl(Record, Loc,
12494                                        II, T, TInfo, TSSL,
12495                                        Data.GetterId, Data.SetterId);
12496   ProcessDeclAttributes(TUScope, NewPD, D);
12497   NewPD->setAccess(AS);
12498 
12499   if (NewPD->isInvalidDecl())
12500     Record->setInvalidDecl();
12501 
12502   if (D.getDeclSpec().isModulePrivateSpecified())
12503     NewPD->setModulePrivate();
12504 
12505   if (NewPD->isInvalidDecl() && PrevDecl) {
12506     // Don't introduce NewFD into scope; there's already something
12507     // with the same name in the same scope.
12508   } else if (II) {
12509     PushOnScopeChains(NewPD, S);
12510   } else
12511     Record->addDecl(NewPD);
12512 
12513   return NewPD;
12514 }
12515