SemaDeclCXX.cpp revision 36155c14b691720ee3e94bfe99886229650bbfb5
1//===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file implements semantic analysis for C++ declarations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/SemaInternal.h"
15#include "clang/AST/ASTConsumer.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/AST/ASTMutationListener.h"
18#include "clang/AST/CXXInheritance.h"
19#include "clang/AST/CharUnits.h"
20#include "clang/AST/DeclVisitor.h"
21#include "clang/AST/EvaluatedExprVisitor.h"
22#include "clang/AST/ExprCXX.h"
23#include "clang/AST/RecordLayout.h"
24#include "clang/AST/RecursiveASTVisitor.h"
25#include "clang/AST/StmtVisitor.h"
26#include "clang/AST/TypeLoc.h"
27#include "clang/AST/TypeOrdering.h"
28#include "clang/Basic/PartialDiagnostic.h"
29#include "clang/Basic/TargetInfo.h"
30#include "clang/Lex/Preprocessor.h"
31#include "clang/Sema/CXXFieldCollector.h"
32#include "clang/Sema/DeclSpec.h"
33#include "clang/Sema/Initialization.h"
34#include "clang/Sema/Lookup.h"
35#include "clang/Sema/ParsedTemplate.h"
36#include "clang/Sema/Scope.h"
37#include "clang/Sema/ScopeInfo.h"
38#include "llvm/ADT/STLExtras.h"
39#include "llvm/ADT/SmallString.h"
40#include <map>
41#include <set>
42
43using namespace clang;
44
45//===----------------------------------------------------------------------===//
46// CheckDefaultArgumentVisitor
47//===----------------------------------------------------------------------===//
48
49namespace {
50  /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
51  /// the default argument of a parameter to determine whether it
52  /// contains any ill-formed subexpressions. For example, this will
53  /// diagnose the use of local variables or parameters within the
54  /// default argument expression.
55  class CheckDefaultArgumentVisitor
56    : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
57    Expr *DefaultArg;
58    Sema *S;
59
60  public:
61    CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
62      : DefaultArg(defarg), S(s) {}
63
64    bool VisitExpr(Expr *Node);
65    bool VisitDeclRefExpr(DeclRefExpr *DRE);
66    bool VisitCXXThisExpr(CXXThisExpr *ThisE);
67    bool VisitLambdaExpr(LambdaExpr *Lambda);
68    bool VisitPseudoObjectExpr(PseudoObjectExpr *POE);
69  };
70
71  /// VisitExpr - Visit all of the children of this expression.
72  bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
73    bool IsInvalid = false;
74    for (Stmt::child_range I = Node->children(); I; ++I)
75      IsInvalid |= Visit(*I);
76    return IsInvalid;
77  }
78
79  /// VisitDeclRefExpr - Visit a reference to a declaration, to
80  /// determine whether this declaration can be used in the default
81  /// argument expression.
82  bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
83    NamedDecl *Decl = DRE->getDecl();
84    if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
85      // C++ [dcl.fct.default]p9
86      //   Default arguments are evaluated each time the function is
87      //   called. The order of evaluation of function arguments is
88      //   unspecified. Consequently, parameters of a function shall not
89      //   be used in default argument expressions, even if they are not
90      //   evaluated. Parameters of a function declared before a default
91      //   argument expression are in scope and can hide namespace and
92      //   class member names.
93      return S->Diag(DRE->getLocStart(),
94                     diag::err_param_default_argument_references_param)
95         << Param->getDeclName() << DefaultArg->getSourceRange();
96    } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
97      // C++ [dcl.fct.default]p7
98      //   Local variables shall not be used in default argument
99      //   expressions.
100      if (VDecl->isLocalVarDecl())
101        return S->Diag(DRE->getLocStart(),
102                       diag::err_param_default_argument_references_local)
103          << VDecl->getDeclName() << DefaultArg->getSourceRange();
104    }
105
106    return false;
107  }
108
109  /// VisitCXXThisExpr - Visit a C++ "this" expression.
110  bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
111    // C++ [dcl.fct.default]p8:
112    //   The keyword this shall not be used in a default argument of a
113    //   member function.
114    return S->Diag(ThisE->getLocStart(),
115                   diag::err_param_default_argument_references_this)
116               << ThisE->getSourceRange();
117  }
118
119  bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) {
120    bool Invalid = false;
121    for (PseudoObjectExpr::semantics_iterator
122           i = POE->semantics_begin(), e = POE->semantics_end(); i != e; ++i) {
123      Expr *E = *i;
124
125      // Look through bindings.
126      if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) {
127        E = OVE->getSourceExpr();
128        assert(E && "pseudo-object binding without source expression?");
129      }
130
131      Invalid |= Visit(E);
132    }
133    return Invalid;
134  }
135
136  bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
137    // C++11 [expr.lambda.prim]p13:
138    //   A lambda-expression appearing in a default argument shall not
139    //   implicitly or explicitly capture any entity.
140    if (Lambda->capture_begin() == Lambda->capture_end())
141      return false;
142
143    return S->Diag(Lambda->getLocStart(),
144                   diag::err_lambda_capture_default_arg);
145  }
146}
147
148void
149Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
150                                                 const CXXMethodDecl *Method) {
151  // If we have an MSAny spec already, don't bother.
152  if (!Method || ComputedEST == EST_MSAny)
153    return;
154
155  const FunctionProtoType *Proto
156    = Method->getType()->getAs<FunctionProtoType>();
157  Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
158  if (!Proto)
159    return;
160
161  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
162
163  // If this function can throw any exceptions, make a note of that.
164  if (EST == EST_MSAny || EST == EST_None) {
165    ClearExceptions();
166    ComputedEST = EST;
167    return;
168  }
169
170  // FIXME: If the call to this decl is using any of its default arguments, we
171  // need to search them for potentially-throwing calls.
172
173  // If this function has a basic noexcept, it doesn't affect the outcome.
174  if (EST == EST_BasicNoexcept)
175    return;
176
177  // If we have a throw-all spec at this point, ignore the function.
178  if (ComputedEST == EST_None)
179    return;
180
181  // If we're still at noexcept(true) and there's a nothrow() callee,
182  // change to that specification.
183  if (EST == EST_DynamicNone) {
184    if (ComputedEST == EST_BasicNoexcept)
185      ComputedEST = EST_DynamicNone;
186    return;
187  }
188
189  // Check out noexcept specs.
190  if (EST == EST_ComputedNoexcept) {
191    FunctionProtoType::NoexceptResult NR =
192        Proto->getNoexceptSpec(Self->Context);
193    assert(NR != FunctionProtoType::NR_NoNoexcept &&
194           "Must have noexcept result for EST_ComputedNoexcept.");
195    assert(NR != FunctionProtoType::NR_Dependent &&
196           "Should not generate implicit declarations for dependent cases, "
197           "and don't know how to handle them anyway.");
198
199    // noexcept(false) -> no spec on the new function
200    if (NR == FunctionProtoType::NR_Throw) {
201      ClearExceptions();
202      ComputedEST = EST_None;
203    }
204    // noexcept(true) won't change anything either.
205    return;
206  }
207
208  assert(EST == EST_Dynamic && "EST case not considered earlier.");
209  assert(ComputedEST != EST_None &&
210         "Shouldn't collect exceptions when throw-all is guaranteed.");
211  ComputedEST = EST_Dynamic;
212  // Record the exceptions in this function's exception specification.
213  for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
214                                          EEnd = Proto->exception_end();
215       E != EEnd; ++E)
216    if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
217      Exceptions.push_back(*E);
218}
219
220void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
221  if (!E || ComputedEST == EST_MSAny)
222    return;
223
224  // FIXME:
225  //
226  // C++0x [except.spec]p14:
227  //   [An] implicit exception-specification specifies the type-id T if and
228  // only if T is allowed by the exception-specification of a function directly
229  // invoked by f's implicit definition; f shall allow all exceptions if any
230  // function it directly invokes allows all exceptions, and f shall allow no
231  // exceptions if every function it directly invokes allows no exceptions.
232  //
233  // Note in particular that if an implicit exception-specification is generated
234  // for a function containing a throw-expression, that specification can still
235  // be noexcept(true).
236  //
237  // Note also that 'directly invoked' is not defined in the standard, and there
238  // is no indication that we should only consider potentially-evaluated calls.
239  //
240  // Ultimately we should implement the intent of the standard: the exception
241  // specification should be the set of exceptions which can be thrown by the
242  // implicit definition. For now, we assume that any non-nothrow expression can
243  // throw any exception.
244
245  if (Self->canThrow(E))
246    ComputedEST = EST_None;
247}
248
249bool
250Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
251                              SourceLocation EqualLoc) {
252  if (RequireCompleteType(Param->getLocation(), Param->getType(),
253                          diag::err_typecheck_decl_incomplete_type)) {
254    Param->setInvalidDecl();
255    return true;
256  }
257
258  // C++ [dcl.fct.default]p5
259  //   A default argument expression is implicitly converted (clause
260  //   4) to the parameter type. The default argument expression has
261  //   the same semantic constraints as the initializer expression in
262  //   a declaration of a variable of the parameter type, using the
263  //   copy-initialization semantics (8.5).
264  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
265                                                                    Param);
266  InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
267                                                           EqualLoc);
268  InitializationSequence InitSeq(*this, Entity, Kind, Arg);
269  ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
270  if (Result.isInvalid())
271    return true;
272  Arg = Result.takeAs<Expr>();
273
274  CheckCompletedExpr(Arg, EqualLoc);
275  Arg = MaybeCreateExprWithCleanups(Arg);
276
277  // Okay: add the default argument to the parameter
278  Param->setDefaultArg(Arg);
279
280  // We have already instantiated this parameter; provide each of the
281  // instantiations with the uninstantiated default argument.
282  UnparsedDefaultArgInstantiationsMap::iterator InstPos
283    = UnparsedDefaultArgInstantiations.find(Param);
284  if (InstPos != UnparsedDefaultArgInstantiations.end()) {
285    for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
286      InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
287
288    // We're done tracking this parameter's instantiations.
289    UnparsedDefaultArgInstantiations.erase(InstPos);
290  }
291
292  return false;
293}
294
295/// ActOnParamDefaultArgument - Check whether the default argument
296/// provided for a function parameter is well-formed. If so, attach it
297/// to the parameter declaration.
298void
299Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
300                                Expr *DefaultArg) {
301  if (!param || !DefaultArg)
302    return;
303
304  ParmVarDecl *Param = cast<ParmVarDecl>(param);
305  UnparsedDefaultArgLocs.erase(Param);
306
307  // Default arguments are only permitted in C++
308  if (!getLangOpts().CPlusPlus) {
309    Diag(EqualLoc, diag::err_param_default_argument)
310      << DefaultArg->getSourceRange();
311    Param->setInvalidDecl();
312    return;
313  }
314
315  // Check for unexpanded parameter packs.
316  if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
317    Param->setInvalidDecl();
318    return;
319  }
320
321  // Check that the default argument is well-formed
322  CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
323  if (DefaultArgChecker.Visit(DefaultArg)) {
324    Param->setInvalidDecl();
325    return;
326  }
327
328  SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
329}
330
331/// ActOnParamUnparsedDefaultArgument - We've seen a default
332/// argument for a function parameter, but we can't parse it yet
333/// because we're inside a class definition. Note that this default
334/// argument will be parsed later.
335void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
336                                             SourceLocation EqualLoc,
337                                             SourceLocation ArgLoc) {
338  if (!param)
339    return;
340
341  ParmVarDecl *Param = cast<ParmVarDecl>(param);
342  if (Param)
343    Param->setUnparsedDefaultArg();
344
345  UnparsedDefaultArgLocs[Param] = ArgLoc;
346}
347
348/// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
349/// the default argument for the parameter param failed.
350void Sema::ActOnParamDefaultArgumentError(Decl *param) {
351  if (!param)
352    return;
353
354  ParmVarDecl *Param = cast<ParmVarDecl>(param);
355
356  Param->setInvalidDecl();
357
358  UnparsedDefaultArgLocs.erase(Param);
359}
360
361/// CheckExtraCXXDefaultArguments - Check for any extra default
362/// arguments in the declarator, which is not a function declaration
363/// or definition and therefore is not permitted to have default
364/// arguments. This routine should be invoked for every declarator
365/// that is not a function declaration or definition.
366void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
367  // C++ [dcl.fct.default]p3
368  //   A default argument expression shall be specified only in the
369  //   parameter-declaration-clause of a function declaration or in a
370  //   template-parameter (14.1). It shall not be specified for a
371  //   parameter pack. If it is specified in a
372  //   parameter-declaration-clause, it shall not occur within a
373  //   declarator or abstract-declarator of a parameter-declaration.
374  bool MightBeFunction = D.isFunctionDeclarationContext();
375  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
376    DeclaratorChunk &chunk = D.getTypeObject(i);
377    if (chunk.Kind == DeclaratorChunk::Function) {
378      if (MightBeFunction) {
379        // This is a function declaration. It can have default arguments, but
380        // keep looking in case its return type is a function type with default
381        // arguments.
382        MightBeFunction = false;
383        continue;
384      }
385      for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
386        ParmVarDecl *Param =
387          cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
388        if (Param->hasUnparsedDefaultArg()) {
389          CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
390          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
391            << SourceRange((*Toks)[1].getLocation(),
392                           Toks->back().getLocation());
393          delete Toks;
394          chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
395        } else if (Param->getDefaultArg()) {
396          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
397            << Param->getDefaultArg()->getSourceRange();
398          Param->setDefaultArg(0);
399        }
400      }
401    } else if (chunk.Kind != DeclaratorChunk::Paren) {
402      MightBeFunction = false;
403    }
404  }
405}
406
407/// MergeCXXFunctionDecl - Merge two declarations of the same C++
408/// function, once we already know that they have the same
409/// type. Subroutine of MergeFunctionDecl. Returns true if there was an
410/// error, false otherwise.
411bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
412                                Scope *S) {
413  bool Invalid = false;
414
415  // C++ [dcl.fct.default]p4:
416  //   For non-template functions, default arguments can be added in
417  //   later declarations of a function in the same
418  //   scope. Declarations in different scopes have completely
419  //   distinct sets of default arguments. That is, declarations in
420  //   inner scopes do not acquire default arguments from
421  //   declarations in outer scopes, and vice versa. In a given
422  //   function declaration, all parameters subsequent to a
423  //   parameter with a default argument shall have default
424  //   arguments supplied in this or previous declarations. A
425  //   default argument shall not be redefined by a later
426  //   declaration (not even to the same value).
427  //
428  // C++ [dcl.fct.default]p6:
429  //   Except for member functions of class templates, the default arguments
430  //   in a member function definition that appears outside of the class
431  //   definition are added to the set of default arguments provided by the
432  //   member function declaration in the class definition.
433  for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
434    ParmVarDecl *OldParam = Old->getParamDecl(p);
435    ParmVarDecl *NewParam = New->getParamDecl(p);
436
437    bool OldParamHasDfl = OldParam->hasDefaultArg();
438    bool NewParamHasDfl = NewParam->hasDefaultArg();
439
440    NamedDecl *ND = Old;
441    if (S && !isDeclInScope(ND, New->getDeclContext(), S))
442      // Ignore default parameters of old decl if they are not in
443      // the same scope.
444      OldParamHasDfl = false;
445
446    if (OldParamHasDfl && NewParamHasDfl) {
447
448      unsigned DiagDefaultParamID =
449        diag::err_param_default_argument_redefinition;
450
451      // MSVC accepts that default parameters be redefined for member functions
452      // of template class. The new default parameter's value is ignored.
453      Invalid = true;
454      if (getLangOpts().MicrosoftExt) {
455        CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
456        if (MD && MD->getParent()->getDescribedClassTemplate()) {
457          // Merge the old default argument into the new parameter.
458          NewParam->setHasInheritedDefaultArg();
459          if (OldParam->hasUninstantiatedDefaultArg())
460            NewParam->setUninstantiatedDefaultArg(
461                                      OldParam->getUninstantiatedDefaultArg());
462          else
463            NewParam->setDefaultArg(OldParam->getInit());
464          DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
465          Invalid = false;
466        }
467      }
468
469      // FIXME: If we knew where the '=' was, we could easily provide a fix-it
470      // hint here. Alternatively, we could walk the type-source information
471      // for NewParam to find the last source location in the type... but it
472      // isn't worth the effort right now. This is the kind of test case that
473      // is hard to get right:
474      //   int f(int);
475      //   void g(int (*fp)(int) = f);
476      //   void g(int (*fp)(int) = &f);
477      Diag(NewParam->getLocation(), DiagDefaultParamID)
478        << NewParam->getDefaultArgRange();
479
480      // Look for the function declaration where the default argument was
481      // actually written, which may be a declaration prior to Old.
482      for (FunctionDecl *Older = Old->getPreviousDecl();
483           Older; Older = Older->getPreviousDecl()) {
484        if (!Older->getParamDecl(p)->hasDefaultArg())
485          break;
486
487        OldParam = Older->getParamDecl(p);
488      }
489
490      Diag(OldParam->getLocation(), diag::note_previous_definition)
491        << OldParam->getDefaultArgRange();
492    } else if (OldParamHasDfl) {
493      // Merge the old default argument into the new parameter.
494      // It's important to use getInit() here;  getDefaultArg()
495      // strips off any top-level ExprWithCleanups.
496      NewParam->setHasInheritedDefaultArg();
497      if (OldParam->hasUninstantiatedDefaultArg())
498        NewParam->setUninstantiatedDefaultArg(
499                                      OldParam->getUninstantiatedDefaultArg());
500      else
501        NewParam->setDefaultArg(OldParam->getInit());
502    } else if (NewParamHasDfl) {
503      if (New->getDescribedFunctionTemplate()) {
504        // Paragraph 4, quoted above, only applies to non-template functions.
505        Diag(NewParam->getLocation(),
506             diag::err_param_default_argument_template_redecl)
507          << NewParam->getDefaultArgRange();
508        Diag(Old->getLocation(), diag::note_template_prev_declaration)
509          << false;
510      } else if (New->getTemplateSpecializationKind()
511                   != TSK_ImplicitInstantiation &&
512                 New->getTemplateSpecializationKind() != TSK_Undeclared) {
513        // C++ [temp.expr.spec]p21:
514        //   Default function arguments shall not be specified in a declaration
515        //   or a definition for one of the following explicit specializations:
516        //     - the explicit specialization of a function template;
517        //     - the explicit specialization of a member function template;
518        //     - the explicit specialization of a member function of a class
519        //       template where the class template specialization to which the
520        //       member function specialization belongs is implicitly
521        //       instantiated.
522        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
523          << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
524          << New->getDeclName()
525          << NewParam->getDefaultArgRange();
526      } else if (New->getDeclContext()->isDependentContext()) {
527        // C++ [dcl.fct.default]p6 (DR217):
528        //   Default arguments for a member function of a class template shall
529        //   be specified on the initial declaration of the member function
530        //   within the class template.
531        //
532        // Reading the tea leaves a bit in DR217 and its reference to DR205
533        // leads me to the conclusion that one cannot add default function
534        // arguments for an out-of-line definition of a member function of a
535        // dependent type.
536        int WhichKind = 2;
537        if (CXXRecordDecl *Record
538              = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
539          if (Record->getDescribedClassTemplate())
540            WhichKind = 0;
541          else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
542            WhichKind = 1;
543          else
544            WhichKind = 2;
545        }
546
547        Diag(NewParam->getLocation(),
548             diag::err_param_default_argument_member_template_redecl)
549          << WhichKind
550          << NewParam->getDefaultArgRange();
551      }
552    }
553  }
554
555  // DR1344: If a default argument is added outside a class definition and that
556  // default argument makes the function a special member function, the program
557  // is ill-formed. This can only happen for constructors.
558  if (isa<CXXConstructorDecl>(New) &&
559      New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {
560    CXXSpecialMember NewSM = getSpecialMember(cast<CXXMethodDecl>(New)),
561                     OldSM = getSpecialMember(cast<CXXMethodDecl>(Old));
562    if (NewSM != OldSM) {
563      ParmVarDecl *NewParam = New->getParamDecl(New->getMinRequiredArguments());
564      assert(NewParam->hasDefaultArg());
565      Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special)
566        << NewParam->getDefaultArgRange() << NewSM;
567      Diag(Old->getLocation(), diag::note_previous_declaration);
568    }
569  }
570
571  // C++11 [dcl.constexpr]p1: If any declaration of a function or function
572  // template has a constexpr specifier then all its declarations shall
573  // contain the constexpr specifier.
574  if (New->isConstexpr() != Old->isConstexpr()) {
575    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
576      << New << New->isConstexpr();
577    Diag(Old->getLocation(), diag::note_previous_declaration);
578    Invalid = true;
579  }
580
581  if (CheckEquivalentExceptionSpec(Old, New))
582    Invalid = true;
583
584  return Invalid;
585}
586
587/// \brief Merge the exception specifications of two variable declarations.
588///
589/// This is called when there's a redeclaration of a VarDecl. The function
590/// checks if the redeclaration might have an exception specification and
591/// validates compatibility and merges the specs if necessary.
592void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
593  // Shortcut if exceptions are disabled.
594  if (!getLangOpts().CXXExceptions)
595    return;
596
597  assert(Context.hasSameType(New->getType(), Old->getType()) &&
598         "Should only be called if types are otherwise the same.");
599
600  QualType NewType = New->getType();
601  QualType OldType = Old->getType();
602
603  // We're only interested in pointers and references to functions, as well
604  // as pointers to member functions.
605  if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
606    NewType = R->getPointeeType();
607    OldType = OldType->getAs<ReferenceType>()->getPointeeType();
608  } else if (const PointerType *P = NewType->getAs<PointerType>()) {
609    NewType = P->getPointeeType();
610    OldType = OldType->getAs<PointerType>()->getPointeeType();
611  } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
612    NewType = M->getPointeeType();
613    OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
614  }
615
616  if (!NewType->isFunctionProtoType())
617    return;
618
619  // There's lots of special cases for functions. For function pointers, system
620  // libraries are hopefully not as broken so that we don't need these
621  // workarounds.
622  if (CheckEquivalentExceptionSpec(
623        OldType->getAs<FunctionProtoType>(), Old->getLocation(),
624        NewType->getAs<FunctionProtoType>(), New->getLocation())) {
625    New->setInvalidDecl();
626  }
627}
628
629/// CheckCXXDefaultArguments - Verify that the default arguments for a
630/// function declaration are well-formed according to C++
631/// [dcl.fct.default].
632void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
633  unsigned NumParams = FD->getNumParams();
634  unsigned p;
635
636  // Find first parameter with a default argument
637  for (p = 0; p < NumParams; ++p) {
638    ParmVarDecl *Param = FD->getParamDecl(p);
639    if (Param->hasDefaultArg())
640      break;
641  }
642
643  // C++ [dcl.fct.default]p4:
644  //   In a given function declaration, all parameters
645  //   subsequent to a parameter with a default argument shall
646  //   have default arguments supplied in this or previous
647  //   declarations. A default argument shall not be redefined
648  //   by a later declaration (not even to the same value).
649  unsigned LastMissingDefaultArg = 0;
650  for (; p < NumParams; ++p) {
651    ParmVarDecl *Param = FD->getParamDecl(p);
652    if (!Param->hasDefaultArg()) {
653      if (Param->isInvalidDecl())
654        /* We already complained about this parameter. */;
655      else if (Param->getIdentifier())
656        Diag(Param->getLocation(),
657             diag::err_param_default_argument_missing_name)
658          << Param->getIdentifier();
659      else
660        Diag(Param->getLocation(),
661             diag::err_param_default_argument_missing);
662
663      LastMissingDefaultArg = p;
664    }
665  }
666
667  if (LastMissingDefaultArg > 0) {
668    // Some default arguments were missing. Clear out all of the
669    // default arguments up to (and including) the last missing
670    // default argument, so that we leave the function parameters
671    // in a semantically valid state.
672    for (p = 0; p <= LastMissingDefaultArg; ++p) {
673      ParmVarDecl *Param = FD->getParamDecl(p);
674      if (Param->hasDefaultArg()) {
675        Param->setDefaultArg(0);
676      }
677    }
678  }
679}
680
681// CheckConstexprParameterTypes - Check whether a function's parameter types
682// are all literal types. If so, return true. If not, produce a suitable
683// diagnostic and return false.
684static bool CheckConstexprParameterTypes(Sema &SemaRef,
685                                         const FunctionDecl *FD) {
686  unsigned ArgIndex = 0;
687  const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
688  for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
689       e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
690    const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
691    SourceLocation ParamLoc = PD->getLocation();
692    if (!(*i)->isDependentType() &&
693        SemaRef.RequireLiteralType(ParamLoc, *i,
694                                   diag::err_constexpr_non_literal_param,
695                                   ArgIndex+1, PD->getSourceRange(),
696                                   isa<CXXConstructorDecl>(FD)))
697      return false;
698  }
699  return true;
700}
701
702/// \brief Get diagnostic %select index for tag kind for
703/// record diagnostic message.
704/// WARNING: Indexes apply to particular diagnostics only!
705///
706/// \returns diagnostic %select index.
707static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
708  switch (Tag) {
709  case TTK_Struct: return 0;
710  case TTK_Interface: return 1;
711  case TTK_Class:  return 2;
712  default: llvm_unreachable("Invalid tag kind for record diagnostic!");
713  }
714}
715
716// CheckConstexprFunctionDecl - Check whether a function declaration satisfies
717// the requirements of a constexpr function definition or a constexpr
718// constructor definition. If so, return true. If not, produce appropriate
719// diagnostics and return false.
720//
721// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
722bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
723  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
724  if (MD && MD->isInstance()) {
725    // C++11 [dcl.constexpr]p4:
726    //  The definition of a constexpr constructor shall satisfy the following
727    //  constraints:
728    //  - the class shall not have any virtual base classes;
729    const CXXRecordDecl *RD = MD->getParent();
730    if (RD->getNumVBases()) {
731      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
732        << isa<CXXConstructorDecl>(NewFD)
733        << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
734      for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
735             E = RD->vbases_end(); I != E; ++I)
736        Diag(I->getLocStart(),
737             diag::note_constexpr_virtual_base_here) << I->getSourceRange();
738      return false;
739    }
740  }
741
742  if (!isa<CXXConstructorDecl>(NewFD)) {
743    // C++11 [dcl.constexpr]p3:
744    //  The definition of a constexpr function shall satisfy the following
745    //  constraints:
746    // - it shall not be virtual;
747    const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
748    if (Method && Method->isVirtual()) {
749      Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
750
751      // If it's not obvious why this function is virtual, find an overridden
752      // function which uses the 'virtual' keyword.
753      const CXXMethodDecl *WrittenVirtual = Method;
754      while (!WrittenVirtual->isVirtualAsWritten())
755        WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
756      if (WrittenVirtual != Method)
757        Diag(WrittenVirtual->getLocation(),
758             diag::note_overridden_virtual_function);
759      return false;
760    }
761
762    // - its return type shall be a literal type;
763    QualType RT = NewFD->getResultType();
764    if (!RT->isDependentType() &&
765        RequireLiteralType(NewFD->getLocation(), RT,
766                           diag::err_constexpr_non_literal_return))
767      return false;
768  }
769
770  // - each of its parameter types shall be a literal type;
771  if (!CheckConstexprParameterTypes(*this, NewFD))
772    return false;
773
774  return true;
775}
776
777/// Check the given declaration statement is legal within a constexpr function
778/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.
779///
780/// \return true if the body is OK (maybe only as an extension), false if we
781///         have diagnosed a problem.
782static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
783                                   DeclStmt *DS, SourceLocation &Cxx1yLoc) {
784  // C++11 [dcl.constexpr]p3 and p4:
785  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
786  //  contain only
787  for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
788         DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
789    switch ((*DclIt)->getKind()) {
790    case Decl::StaticAssert:
791    case Decl::Using:
792    case Decl::UsingShadow:
793    case Decl::UsingDirective:
794    case Decl::UnresolvedUsingTypename:
795    case Decl::UnresolvedUsingValue:
796      //   - static_assert-declarations
797      //   - using-declarations,
798      //   - using-directives,
799      continue;
800
801    case Decl::Typedef:
802    case Decl::TypeAlias: {
803      //   - typedef declarations and alias-declarations that do not define
804      //     classes or enumerations,
805      TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
806      if (TN->getUnderlyingType()->isVariablyModifiedType()) {
807        // Don't allow variably-modified types in constexpr functions.
808        TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
809        SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
810          << TL.getSourceRange() << TL.getType()
811          << isa<CXXConstructorDecl>(Dcl);
812        return false;
813      }
814      continue;
815    }
816
817    case Decl::Enum:
818    case Decl::CXXRecord:
819      // C++1y allows types to be defined, not just declared.
820      if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition())
821        SemaRef.Diag(DS->getLocStart(),
822                     SemaRef.getLangOpts().CPlusPlus1y
823                       ? diag::warn_cxx11_compat_constexpr_type_definition
824                       : diag::ext_constexpr_type_definition)
825          << isa<CXXConstructorDecl>(Dcl);
826      continue;
827
828    case Decl::EnumConstant:
829    case Decl::IndirectField:
830    case Decl::ParmVar:
831      // These can only appear with other declarations which are banned in
832      // C++11 and permitted in C++1y, so ignore them.
833      continue;
834
835    case Decl::Var: {
836      // C++1y [dcl.constexpr]p3 allows anything except:
837      //   a definition of a variable of non-literal type or of static or
838      //   thread storage duration or for which no initialization is performed.
839      VarDecl *VD = cast<VarDecl>(*DclIt);
840      if (VD->isThisDeclarationADefinition()) {
841        if (VD->isStaticLocal()) {
842          SemaRef.Diag(VD->getLocation(),
843                       diag::err_constexpr_local_var_static)
844            << isa<CXXConstructorDecl>(Dcl)
845            << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
846          return false;
847        }
848        if (!VD->getType()->isDependentType() &&
849            SemaRef.RequireLiteralType(
850              VD->getLocation(), VD->getType(),
851              diag::err_constexpr_local_var_non_literal_type,
852              isa<CXXConstructorDecl>(Dcl)))
853          return false;
854        if (!VD->hasInit()) {
855          SemaRef.Diag(VD->getLocation(),
856                       diag::err_constexpr_local_var_no_init)
857            << isa<CXXConstructorDecl>(Dcl);
858          return false;
859        }
860      }
861      SemaRef.Diag(VD->getLocation(),
862                   SemaRef.getLangOpts().CPlusPlus1y
863                    ? diag::warn_cxx11_compat_constexpr_local_var
864                    : diag::ext_constexpr_local_var)
865        << isa<CXXConstructorDecl>(Dcl);
866      continue;
867    }
868
869    case Decl::NamespaceAlias:
870    case Decl::Function:
871      // These are disallowed in C++11 and permitted in C++1y. Allow them
872      // everywhere as an extension.
873      if (!Cxx1yLoc.isValid())
874        Cxx1yLoc = DS->getLocStart();
875      continue;
876
877    default:
878      SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
879        << isa<CXXConstructorDecl>(Dcl);
880      return false;
881    }
882  }
883
884  return true;
885}
886
887/// Check that the given field is initialized within a constexpr constructor.
888///
889/// \param Dcl The constexpr constructor being checked.
890/// \param Field The field being checked. This may be a member of an anonymous
891///        struct or union nested within the class being checked.
892/// \param Inits All declarations, including anonymous struct/union members and
893///        indirect members, for which any initialization was provided.
894/// \param Diagnosed Set to true if an error is produced.
895static void CheckConstexprCtorInitializer(Sema &SemaRef,
896                                          const FunctionDecl *Dcl,
897                                          FieldDecl *Field,
898                                          llvm::SmallSet<Decl*, 16> &Inits,
899                                          bool &Diagnosed) {
900  if (Field->isUnnamedBitfield())
901    return;
902
903  if (Field->isAnonymousStructOrUnion() &&
904      Field->getType()->getAsCXXRecordDecl()->isEmpty())
905    return;
906
907  if (!Inits.count(Field)) {
908    if (!Diagnosed) {
909      SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
910      Diagnosed = true;
911    }
912    SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
913  } else if (Field->isAnonymousStructOrUnion()) {
914    const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
915    for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
916         I != E; ++I)
917      // If an anonymous union contains an anonymous struct of which any member
918      // is initialized, all members must be initialized.
919      if (!RD->isUnion() || Inits.count(*I))
920        CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
921  }
922}
923
924/// Check the provided statement is allowed in a constexpr function
925/// definition.
926static bool
927CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
928                           llvm::SmallVectorImpl<SourceLocation> &ReturnStmts,
929                           SourceLocation &Cxx1yLoc) {
930  // - its function-body shall be [...] a compound-statement that contains only
931  switch (S->getStmtClass()) {
932  case Stmt::NullStmtClass:
933    //   - null statements,
934    return true;
935
936  case Stmt::DeclStmtClass:
937    //   - static_assert-declarations
938    //   - using-declarations,
939    //   - using-directives,
940    //   - typedef declarations and alias-declarations that do not define
941    //     classes or enumerations,
942    if (!CheckConstexprDeclStmt(SemaRef, Dcl, cast<DeclStmt>(S), Cxx1yLoc))
943      return false;
944    return true;
945
946  case Stmt::ReturnStmtClass:
947    //   - and exactly one return statement;
948    if (isa<CXXConstructorDecl>(Dcl)) {
949      // C++1y allows return statements in constexpr constructors.
950      if (!Cxx1yLoc.isValid())
951        Cxx1yLoc = S->getLocStart();
952      return true;
953    }
954
955    ReturnStmts.push_back(S->getLocStart());
956    return true;
957
958  case Stmt::CompoundStmtClass: {
959    // C++1y allows compound-statements.
960    if (!Cxx1yLoc.isValid())
961      Cxx1yLoc = S->getLocStart();
962
963    CompoundStmt *CompStmt = cast<CompoundStmt>(S);
964    for (CompoundStmt::body_iterator BodyIt = CompStmt->body_begin(),
965           BodyEnd = CompStmt->body_end(); BodyIt != BodyEnd; ++BodyIt) {
966      if (!CheckConstexprFunctionStmt(SemaRef, Dcl, *BodyIt, ReturnStmts,
967                                      Cxx1yLoc))
968        return false;
969    }
970    return true;
971  }
972
973  case Stmt::AttributedStmtClass:
974    if (!Cxx1yLoc.isValid())
975      Cxx1yLoc = S->getLocStart();
976    return true;
977
978  case Stmt::IfStmtClass: {
979    // C++1y allows if-statements.
980    if (!Cxx1yLoc.isValid())
981      Cxx1yLoc = S->getLocStart();
982
983    IfStmt *If = cast<IfStmt>(S);
984    if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts,
985                                    Cxx1yLoc))
986      return false;
987    if (If->getElse() &&
988        !CheckConstexprFunctionStmt(SemaRef, Dcl, If->getElse(), ReturnStmts,
989                                    Cxx1yLoc))
990      return false;
991    return true;
992  }
993
994  case Stmt::WhileStmtClass:
995  case Stmt::DoStmtClass:
996  case Stmt::ForStmtClass:
997  case Stmt::CXXForRangeStmtClass:
998  case Stmt::ContinueStmtClass:
999    // C++1y allows all of these. We don't allow them as extensions in C++11,
1000    // because they don't make sense without variable mutation.
1001    if (!SemaRef.getLangOpts().CPlusPlus1y)
1002      break;
1003    if (!Cxx1yLoc.isValid())
1004      Cxx1yLoc = S->getLocStart();
1005    for (Stmt::child_range Children = S->children(); Children; ++Children)
1006      if (*Children &&
1007          !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1008                                      Cxx1yLoc))
1009        return false;
1010    return true;
1011
1012  case Stmt::SwitchStmtClass:
1013  case Stmt::CaseStmtClass:
1014  case Stmt::DefaultStmtClass:
1015  case Stmt::BreakStmtClass:
1016    // C++1y allows switch-statements, and since they don't need variable
1017    // mutation, we can reasonably allow them in C++11 as an extension.
1018    if (!Cxx1yLoc.isValid())
1019      Cxx1yLoc = S->getLocStart();
1020    for (Stmt::child_range Children = S->children(); Children; ++Children)
1021      if (*Children &&
1022          !CheckConstexprFunctionStmt(SemaRef, Dcl, *Children, ReturnStmts,
1023                                      Cxx1yLoc))
1024        return false;
1025    return true;
1026
1027  default:
1028    if (!isa<Expr>(S))
1029      break;
1030
1031    // C++1y allows expression-statements.
1032    if (!Cxx1yLoc.isValid())
1033      Cxx1yLoc = S->getLocStart();
1034    return true;
1035  }
1036
1037  SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt)
1038    << isa<CXXConstructorDecl>(Dcl);
1039  return false;
1040}
1041
1042/// Check the body for the given constexpr function declaration only contains
1043/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
1044///
1045/// \return true if the body is OK, false if we have diagnosed a problem.
1046bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
1047  if (isa<CXXTryStmt>(Body)) {
1048    // C++11 [dcl.constexpr]p3:
1049    //  The definition of a constexpr function shall satisfy the following
1050    //  constraints: [...]
1051    // - its function-body shall be = delete, = default, or a
1052    //   compound-statement
1053    //
1054    // C++11 [dcl.constexpr]p4:
1055    //  In the definition of a constexpr constructor, [...]
1056    // - its function-body shall not be a function-try-block;
1057    Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
1058      << isa<CXXConstructorDecl>(Dcl);
1059    return false;
1060  }
1061
1062  SmallVector<SourceLocation, 4> ReturnStmts;
1063
1064  // - its function-body shall be [...] a compound-statement that contains only
1065  //   [... list of cases ...]
1066  CompoundStmt *CompBody = cast<CompoundStmt>(Body);
1067  SourceLocation Cxx1yLoc;
1068  for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
1069         BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
1070    if (!CheckConstexprFunctionStmt(*this, Dcl, *BodyIt, ReturnStmts, Cxx1yLoc))
1071      return false;
1072  }
1073
1074  if (Cxx1yLoc.isValid())
1075    Diag(Cxx1yLoc,
1076         getLangOpts().CPlusPlus1y
1077           ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt
1078           : diag::ext_constexpr_body_invalid_stmt)
1079      << isa<CXXConstructorDecl>(Dcl);
1080
1081  if (const CXXConstructorDecl *Constructor
1082        = dyn_cast<CXXConstructorDecl>(Dcl)) {
1083    const CXXRecordDecl *RD = Constructor->getParent();
1084    // DR1359:
1085    // - every non-variant non-static data member and base class sub-object
1086    //   shall be initialized;
1087    // - if the class is a non-empty union, or for each non-empty anonymous
1088    //   union member of a non-union class, exactly one non-static data member
1089    //   shall be initialized;
1090    if (RD->isUnion()) {
1091      if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
1092        Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
1093        return false;
1094      }
1095    } else if (!Constructor->isDependentContext() &&
1096               !Constructor->isDelegatingConstructor()) {
1097      assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
1098
1099      // Skip detailed checking if we have enough initializers, and we would
1100      // allow at most one initializer per member.
1101      bool AnyAnonStructUnionMembers = false;
1102      unsigned Fields = 0;
1103      for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1104           E = RD->field_end(); I != E; ++I, ++Fields) {
1105        if (I->isAnonymousStructOrUnion()) {
1106          AnyAnonStructUnionMembers = true;
1107          break;
1108        }
1109      }
1110      if (AnyAnonStructUnionMembers ||
1111          Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
1112        // Check initialization of non-static data members. Base classes are
1113        // always initialized so do not need to be checked. Dependent bases
1114        // might not have initializers in the member initializer list.
1115        llvm::SmallSet<Decl*, 16> Inits;
1116        for (CXXConstructorDecl::init_const_iterator
1117               I = Constructor->init_begin(), E = Constructor->init_end();
1118             I != E; ++I) {
1119          if (FieldDecl *FD = (*I)->getMember())
1120            Inits.insert(FD);
1121          else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
1122            Inits.insert(ID->chain_begin(), ID->chain_end());
1123        }
1124
1125        bool Diagnosed = false;
1126        for (CXXRecordDecl::field_iterator I = RD->field_begin(),
1127             E = RD->field_end(); I != E; ++I)
1128          CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
1129        if (Diagnosed)
1130          return false;
1131      }
1132    }
1133  } else {
1134    if (ReturnStmts.empty()) {
1135      // C++1y doesn't require constexpr functions to contain a 'return'
1136      // statement. We still do, unless the return type is void, because
1137      // otherwise if there's no return statement, the function cannot
1138      // be used in a core constant expression.
1139      bool OK = getLangOpts().CPlusPlus1y && Dcl->getResultType()->isVoidType();
1140      Diag(Dcl->getLocation(),
1141           OK ? diag::warn_cxx11_compat_constexpr_body_no_return
1142              : diag::err_constexpr_body_no_return);
1143      return OK;
1144    }
1145    if (ReturnStmts.size() > 1) {
1146      Diag(ReturnStmts.back(),
1147           getLangOpts().CPlusPlus1y
1148             ? diag::warn_cxx11_compat_constexpr_body_multiple_return
1149             : diag::ext_constexpr_body_multiple_return);
1150      for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
1151        Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
1152    }
1153  }
1154
1155  // C++11 [dcl.constexpr]p5:
1156  //   if no function argument values exist such that the function invocation
1157  //   substitution would produce a constant expression, the program is
1158  //   ill-formed; no diagnostic required.
1159  // C++11 [dcl.constexpr]p3:
1160  //   - every constructor call and implicit conversion used in initializing the
1161  //     return value shall be one of those allowed in a constant expression.
1162  // C++11 [dcl.constexpr]p4:
1163  //   - every constructor involved in initializing non-static data members and
1164  //     base class sub-objects shall be a constexpr constructor.
1165  SmallVector<PartialDiagnosticAt, 8> Diags;
1166  if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
1167    Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr)
1168      << isa<CXXConstructorDecl>(Dcl);
1169    for (size_t I = 0, N = Diags.size(); I != N; ++I)
1170      Diag(Diags[I].first, Diags[I].second);
1171    // Don't return false here: we allow this for compatibility in
1172    // system headers.
1173  }
1174
1175  return true;
1176}
1177
1178/// isCurrentClassName - Determine whether the identifier II is the
1179/// name of the class type currently being defined. In the case of
1180/// nested classes, this will only return true if II is the name of
1181/// the innermost class.
1182bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
1183                              const CXXScopeSpec *SS) {
1184  assert(getLangOpts().CPlusPlus && "No class names in C!");
1185
1186  CXXRecordDecl *CurDecl;
1187  if (SS && SS->isSet() && !SS->isInvalid()) {
1188    DeclContext *DC = computeDeclContext(*SS, true);
1189    CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1190  } else
1191    CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1192
1193  if (CurDecl && CurDecl->getIdentifier())
1194    return &II == CurDecl->getIdentifier();
1195  else
1196    return false;
1197}
1198
1199/// \brief Determine whether the given class is a base class of the given
1200/// class, including looking at dependent bases.
1201static bool findCircularInheritance(const CXXRecordDecl *Class,
1202                                    const CXXRecordDecl *Current) {
1203  SmallVector<const CXXRecordDecl*, 8> Queue;
1204
1205  Class = Class->getCanonicalDecl();
1206  while (true) {
1207    for (CXXRecordDecl::base_class_const_iterator I = Current->bases_begin(),
1208                                                  E = Current->bases_end();
1209         I != E; ++I) {
1210      CXXRecordDecl *Base = I->getType()->getAsCXXRecordDecl();
1211      if (!Base)
1212        continue;
1213
1214      Base = Base->getDefinition();
1215      if (!Base)
1216        continue;
1217
1218      if (Base->getCanonicalDecl() == Class)
1219        return true;
1220
1221      Queue.push_back(Base);
1222    }
1223
1224    if (Queue.empty())
1225      return false;
1226
1227    Current = Queue.back();
1228    Queue.pop_back();
1229  }
1230
1231  return false;
1232}
1233
1234/// \brief Check the validity of a C++ base class specifier.
1235///
1236/// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
1237/// and returns NULL otherwise.
1238CXXBaseSpecifier *
1239Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
1240                         SourceRange SpecifierRange,
1241                         bool Virtual, AccessSpecifier Access,
1242                         TypeSourceInfo *TInfo,
1243                         SourceLocation EllipsisLoc) {
1244  QualType BaseType = TInfo->getType();
1245
1246  // C++ [class.union]p1:
1247  //   A union shall not have base classes.
1248  if (Class->isUnion()) {
1249    Diag(Class->getLocation(), diag::err_base_clause_on_union)
1250      << SpecifierRange;
1251    return 0;
1252  }
1253
1254  if (EllipsisLoc.isValid() &&
1255      !TInfo->getType()->containsUnexpandedParameterPack()) {
1256    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1257      << TInfo->getTypeLoc().getSourceRange();
1258    EllipsisLoc = SourceLocation();
1259  }
1260
1261  SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
1262
1263  if (BaseType->isDependentType()) {
1264    // Make sure that we don't have circular inheritance among our dependent
1265    // bases. For non-dependent bases, the check for completeness below handles
1266    // this.
1267    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {
1268      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() ||
1269          ((BaseDecl = BaseDecl->getDefinition()) &&
1270           findCircularInheritance(Class, BaseDecl))) {
1271        Diag(BaseLoc, diag::err_circular_inheritance)
1272          << BaseType << Context.getTypeDeclType(Class);
1273
1274        if (BaseDecl->getCanonicalDecl() != Class->getCanonicalDecl())
1275          Diag(BaseDecl->getLocation(), diag::note_previous_decl)
1276            << BaseType;
1277
1278        return 0;
1279      }
1280    }
1281
1282    return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1283                                          Class->getTagKind() == TTK_Class,
1284                                          Access, TInfo, EllipsisLoc);
1285  }
1286
1287  // Base specifiers must be record types.
1288  if (!BaseType->isRecordType()) {
1289    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
1290    return 0;
1291  }
1292
1293  // C++ [class.union]p1:
1294  //   A union shall not be used as a base class.
1295  if (BaseType->isUnionType()) {
1296    Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
1297    return 0;
1298  }
1299
1300  // C++ [class.derived]p2:
1301  //   The class-name in a base-specifier shall not be an incompletely
1302  //   defined class.
1303  if (RequireCompleteType(BaseLoc, BaseType,
1304                          diag::err_incomplete_base_class, SpecifierRange)) {
1305    Class->setInvalidDecl();
1306    return 0;
1307  }
1308
1309  // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
1310  RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
1311  assert(BaseDecl && "Record type has no declaration");
1312  BaseDecl = BaseDecl->getDefinition();
1313  assert(BaseDecl && "Base type is not incomplete, but has no definition");
1314  CXXRecordDecl *CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
1315  assert(CXXBaseDecl && "Base type is not a C++ type");
1316
1317  // C++ [class]p3:
1318  //   If a class is marked final and it appears as a base-type-specifier in
1319  //   base-clause, the program is ill-formed.
1320  if (CXXBaseDecl->hasAttr<FinalAttr>()) {
1321    Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
1322      << CXXBaseDecl->getDeclName();
1323    Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
1324      << CXXBaseDecl->getDeclName();
1325    return 0;
1326  }
1327
1328  if (BaseDecl->isInvalidDecl())
1329    Class->setInvalidDecl();
1330
1331  // Create the base specifier.
1332  return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1333                                        Class->getTagKind() == TTK_Class,
1334                                        Access, TInfo, EllipsisLoc);
1335}
1336
1337/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
1338/// one entry in the base class list of a class specifier, for
1339/// example:
1340///    class foo : public bar, virtual private baz {
1341/// 'public bar' and 'virtual private baz' are each base-specifiers.
1342BaseResult
1343Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1344                         ParsedAttributes &Attributes,
1345                         bool Virtual, AccessSpecifier Access,
1346                         ParsedType basetype, SourceLocation BaseLoc,
1347                         SourceLocation EllipsisLoc) {
1348  if (!classdecl)
1349    return true;
1350
1351  AdjustDeclIfTemplate(classdecl);
1352  CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1353  if (!Class)
1354    return true;
1355
1356  // We do not support any C++11 attributes on base-specifiers yet.
1357  // Diagnose any attributes we see.
1358  if (!Attributes.empty()) {
1359    for (AttributeList *Attr = Attributes.getList(); Attr;
1360         Attr = Attr->getNext()) {
1361      if (Attr->isInvalid() ||
1362          Attr->getKind() == AttributeList::IgnoredAttribute)
1363        continue;
1364      Diag(Attr->getLoc(),
1365           Attr->getKind() == AttributeList::UnknownAttribute
1366             ? diag::warn_unknown_attribute_ignored
1367             : diag::err_base_specifier_attribute)
1368        << Attr->getName();
1369    }
1370  }
1371
1372  TypeSourceInfo *TInfo = 0;
1373  GetTypeFromParser(basetype, &TInfo);
1374
1375  if (EllipsisLoc.isInvalid() &&
1376      DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
1377                                      UPPC_BaseType))
1378    return true;
1379
1380  if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
1381                                                      Virtual, Access, TInfo,
1382                                                      EllipsisLoc))
1383    return BaseSpec;
1384  else
1385    Class->setInvalidDecl();
1386
1387  return true;
1388}
1389
1390/// \brief Performs the actual work of attaching the given base class
1391/// specifiers to a C++ class.
1392bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
1393                                unsigned NumBases) {
1394 if (NumBases == 0)
1395    return false;
1396
1397  // Used to keep track of which base types we have already seen, so
1398  // that we can properly diagnose redundant direct base types. Note
1399  // that the key is always the unqualified canonical type of the base
1400  // class.
1401  std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
1402
1403  // Copy non-redundant base specifiers into permanent storage.
1404  unsigned NumGoodBases = 0;
1405  bool Invalid = false;
1406  for (unsigned idx = 0; idx < NumBases; ++idx) {
1407    QualType NewBaseType
1408      = Context.getCanonicalType(Bases[idx]->getType());
1409    NewBaseType = NewBaseType.getLocalUnqualifiedType();
1410
1411    CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
1412    if (KnownBase) {
1413      // C++ [class.mi]p3:
1414      //   A class shall not be specified as a direct base class of a
1415      //   derived class more than once.
1416      Diag(Bases[idx]->getLocStart(),
1417           diag::err_duplicate_base_class)
1418        << KnownBase->getType()
1419        << Bases[idx]->getSourceRange();
1420
1421      // Delete the duplicate base class specifier; we're going to
1422      // overwrite its pointer later.
1423      Context.Deallocate(Bases[idx]);
1424
1425      Invalid = true;
1426    } else {
1427      // Okay, add this new base class.
1428      KnownBase = Bases[idx];
1429      Bases[NumGoodBases++] = Bases[idx];
1430      if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {
1431        const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
1432        if (Class->isInterface() &&
1433              (!RD->isInterface() ||
1434               KnownBase->getAccessSpecifier() != AS_public)) {
1435          // The Microsoft extension __interface does not permit bases that
1436          // are not themselves public interfaces.
1437          Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface)
1438            << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getName()
1439            << RD->getSourceRange();
1440          Invalid = true;
1441        }
1442        if (RD->hasAttr<WeakAttr>())
1443          Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
1444      }
1445    }
1446  }
1447
1448  // Attach the remaining base class specifiers to the derived class.
1449  Class->setBases(Bases, NumGoodBases);
1450
1451  // Delete the remaining (good) base class specifiers, since their
1452  // data has been copied into the CXXRecordDecl.
1453  for (unsigned idx = 0; idx < NumGoodBases; ++idx)
1454    Context.Deallocate(Bases[idx]);
1455
1456  return Invalid;
1457}
1458
1459/// ActOnBaseSpecifiers - Attach the given base specifiers to the
1460/// class, after checking whether there are any duplicate base
1461/// classes.
1462void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1463                               unsigned NumBases) {
1464  if (!ClassDecl || !Bases || !NumBases)
1465    return;
1466
1467  AdjustDeclIfTemplate(ClassDecl);
1468  AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
1469                       (CXXBaseSpecifier**)(Bases), NumBases);
1470}
1471
1472/// \brief Determine whether the type \p Derived is a C++ class that is
1473/// derived from the type \p Base.
1474bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
1475  if (!getLangOpts().CPlusPlus)
1476    return false;
1477
1478  CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1479  if (!DerivedRD)
1480    return false;
1481
1482  CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1483  if (!BaseRD)
1484    return false;
1485
1486  // If either the base or the derived type is invalid, don't try to
1487  // check whether one is derived from the other.
1488  if (BaseRD->isInvalidDecl() || DerivedRD->isInvalidDecl())
1489    return false;
1490
1491  // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
1492  return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
1493}
1494
1495/// \brief Determine whether the type \p Derived is a C++ class that is
1496/// derived from the type \p Base.
1497bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
1498  if (!getLangOpts().CPlusPlus)
1499    return false;
1500
1501  CXXRecordDecl *DerivedRD = Derived->getAsCXXRecordDecl();
1502  if (!DerivedRD)
1503    return false;
1504
1505  CXXRecordDecl *BaseRD = Base->getAsCXXRecordDecl();
1506  if (!BaseRD)
1507    return false;
1508
1509  return DerivedRD->isDerivedFrom(BaseRD, Paths);
1510}
1511
1512void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
1513                              CXXCastPath &BasePathArray) {
1514  assert(BasePathArray.empty() && "Base path array must be empty!");
1515  assert(Paths.isRecordingPaths() && "Must record paths!");
1516
1517  const CXXBasePath &Path = Paths.front();
1518
1519  // We first go backward and check if we have a virtual base.
1520  // FIXME: It would be better if CXXBasePath had the base specifier for
1521  // the nearest virtual base.
1522  unsigned Start = 0;
1523  for (unsigned I = Path.size(); I != 0; --I) {
1524    if (Path[I - 1].Base->isVirtual()) {
1525      Start = I - 1;
1526      break;
1527    }
1528  }
1529
1530  // Now add all bases.
1531  for (unsigned I = Start, E = Path.size(); I != E; ++I)
1532    BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
1533}
1534
1535/// \brief Determine whether the given base path includes a virtual
1536/// base class.
1537bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
1538  for (CXXCastPath::const_iterator B = BasePath.begin(),
1539                                BEnd = BasePath.end();
1540       B != BEnd; ++B)
1541    if ((*B)->isVirtual())
1542      return true;
1543
1544  return false;
1545}
1546
1547/// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
1548/// conversion (where Derived and Base are class types) is
1549/// well-formed, meaning that the conversion is unambiguous (and
1550/// that all of the base classes are accessible). Returns true
1551/// and emits a diagnostic if the code is ill-formed, returns false
1552/// otherwise. Loc is the location where this routine should point to
1553/// if there is an error, and Range is the source range to highlight
1554/// if there is an error.
1555bool
1556Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1557                                   unsigned InaccessibleBaseID,
1558                                   unsigned AmbigiousBaseConvID,
1559                                   SourceLocation Loc, SourceRange Range,
1560                                   DeclarationName Name,
1561                                   CXXCastPath *BasePath) {
1562  // First, determine whether the path from Derived to Base is
1563  // ambiguous. This is slightly more expensive than checking whether
1564  // the Derived to Base conversion exists, because here we need to
1565  // explore multiple paths to determine if there is an ambiguity.
1566  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1567                     /*DetectVirtual=*/false);
1568  bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
1569  assert(DerivationOkay &&
1570         "Can only be used with a derived-to-base conversion");
1571  (void)DerivationOkay;
1572
1573  if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
1574    if (InaccessibleBaseID) {
1575      // Check that the base class can be accessed.
1576      switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
1577                                   InaccessibleBaseID)) {
1578        case AR_inaccessible:
1579          return true;
1580        case AR_accessible:
1581        case AR_dependent:
1582        case AR_delayed:
1583          break;
1584      }
1585    }
1586
1587    // Build a base path if necessary.
1588    if (BasePath)
1589      BuildBasePathArray(Paths, *BasePath);
1590    return false;
1591  }
1592
1593  // We know that the derived-to-base conversion is ambiguous, and
1594  // we're going to produce a diagnostic. Perform the derived-to-base
1595  // search just one more time to compute all of the possible paths so
1596  // that we can print them out. This is more expensive than any of
1597  // the previous derived-to-base checks we've done, but at this point
1598  // performance isn't as much of an issue.
1599  Paths.clear();
1600  Paths.setRecordingPaths(true);
1601  bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
1602  assert(StillOkay && "Can only be used with a derived-to-base conversion");
1603  (void)StillOkay;
1604
1605  // Build up a textual representation of the ambiguous paths, e.g.,
1606  // D -> B -> A, that will be used to illustrate the ambiguous
1607  // conversions in the diagnostic. We only print one of the paths
1608  // to each base class subobject.
1609  std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1610
1611  Diag(Loc, AmbigiousBaseConvID)
1612  << Derived << Base << PathDisplayStr << Range << Name;
1613  return true;
1614}
1615
1616bool
1617Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1618                                   SourceLocation Loc, SourceRange Range,
1619                                   CXXCastPath *BasePath,
1620                                   bool IgnoreAccess) {
1621  return CheckDerivedToBaseConversion(Derived, Base,
1622                                      IgnoreAccess ? 0
1623                                       : diag::err_upcast_to_inaccessible_base,
1624                                      diag::err_ambiguous_derived_to_base_conv,
1625                                      Loc, Range, DeclarationName(),
1626                                      BasePath);
1627}
1628
1629
1630/// @brief Builds a string representing ambiguous paths from a
1631/// specific derived class to different subobjects of the same base
1632/// class.
1633///
1634/// This function builds a string that can be used in error messages
1635/// to show the different paths that one can take through the
1636/// inheritance hierarchy to go from the derived class to different
1637/// subobjects of a base class. The result looks something like this:
1638/// @code
1639/// struct D -> struct B -> struct A
1640/// struct D -> struct C -> struct A
1641/// @endcode
1642std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
1643  std::string PathDisplayStr;
1644  std::set<unsigned> DisplayedPaths;
1645  for (CXXBasePaths::paths_iterator Path = Paths.begin();
1646       Path != Paths.end(); ++Path) {
1647    if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
1648      // We haven't displayed a path to this particular base
1649      // class subobject yet.
1650      PathDisplayStr += "\n    ";
1651      PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
1652      for (CXXBasePath::const_iterator Element = Path->begin();
1653           Element != Path->end(); ++Element)
1654        PathDisplayStr += " -> " + Element->Base->getType().getAsString();
1655    }
1656  }
1657
1658  return PathDisplayStr;
1659}
1660
1661//===----------------------------------------------------------------------===//
1662// C++ class member Handling
1663//===----------------------------------------------------------------------===//
1664
1665/// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
1666bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1667                                SourceLocation ASLoc,
1668                                SourceLocation ColonLoc,
1669                                AttributeList *Attrs) {
1670  assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1671  AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1672                                                  ASLoc, ColonLoc);
1673  CurContext->addHiddenDecl(ASDecl);
1674  return ProcessAccessDeclAttributeList(ASDecl, Attrs);
1675}
1676
1677/// CheckOverrideControl - Check C++11 override control semantics.
1678void Sema::CheckOverrideControl(Decl *D) {
1679  if (D->isInvalidDecl())
1680    return;
1681
1682  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1683
1684  // Do we know which functions this declaration might be overriding?
1685  bool OverridesAreKnown = !MD ||
1686      (!MD->getParent()->hasAnyDependentBases() &&
1687       !MD->getType()->isDependentType());
1688
1689  if (!MD || !MD->isVirtual()) {
1690    if (OverridesAreKnown) {
1691      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1692        Diag(OA->getLocation(),
1693             diag::override_keyword_only_allowed_on_virtual_member_functions)
1694          << "override" << FixItHint::CreateRemoval(OA->getLocation());
1695        D->dropAttr<OverrideAttr>();
1696      }
1697      if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1698        Diag(FA->getLocation(),
1699             diag::override_keyword_only_allowed_on_virtual_member_functions)
1700          << "final" << FixItHint::CreateRemoval(FA->getLocation());
1701        D->dropAttr<FinalAttr>();
1702      }
1703    }
1704    return;
1705  }
1706
1707  if (!OverridesAreKnown)
1708    return;
1709
1710  // C++11 [class.virtual]p5:
1711  //   If a virtual function is marked with the virt-specifier override and
1712  //   does not override a member function of a base class, the program is
1713  //   ill-formed.
1714  bool HasOverriddenMethods =
1715    MD->begin_overridden_methods() != MD->end_overridden_methods();
1716  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
1717    Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
1718      << MD->getDeclName();
1719}
1720
1721/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1722/// function overrides a virtual member function marked 'final', according to
1723/// C++11 [class.virtual]p4.
1724bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1725                                                  const CXXMethodDecl *Old) {
1726  if (!Old->hasAttr<FinalAttr>())
1727    return false;
1728
1729  Diag(New->getLocation(), diag::err_final_function_overridden)
1730    << New->getDeclName();
1731  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1732  return true;
1733}
1734
1735static bool InitializationHasSideEffects(const FieldDecl &FD) {
1736  const Type *T = FD.getType()->getBaseElementTypeUnsafe();
1737  // FIXME: Destruction of ObjC lifetime types has side-effects.
1738  if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1739    return !RD->isCompleteDefinition() ||
1740           !RD->hasTrivialDefaultConstructor() ||
1741           !RD->hasTrivialDestructor();
1742  return false;
1743}
1744
1745static AttributeList *getMSPropertyAttr(AttributeList *list) {
1746  for (AttributeList* it = list; it != 0; it = it->getNext())
1747    if (it->isDeclspecPropertyAttribute())
1748      return it;
1749  return 0;
1750}
1751
1752/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1753/// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1754/// bitfield width if there is one, 'InitExpr' specifies the initializer if
1755/// one has been parsed, and 'InitStyle' is set if an in-class initializer is
1756/// present (but parsing it has been deferred).
1757NamedDecl *
1758Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1759                               MultiTemplateParamsArg TemplateParameterLists,
1760                               Expr *BW, const VirtSpecifiers &VS,
1761                               InClassInitStyle InitStyle) {
1762  const DeclSpec &DS = D.getDeclSpec();
1763  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1764  DeclarationName Name = NameInfo.getName();
1765  SourceLocation Loc = NameInfo.getLoc();
1766
1767  // For anonymous bitfields, the location should point to the type.
1768  if (Loc.isInvalid())
1769    Loc = D.getLocStart();
1770
1771  Expr *BitWidth = static_cast<Expr*>(BW);
1772
1773  assert(isa<CXXRecordDecl>(CurContext));
1774  assert(!DS.isFriendSpecified());
1775
1776  bool isFunc = D.isDeclarationOfFunction();
1777
1778  if (cast<CXXRecordDecl>(CurContext)->isInterface()) {
1779    // The Microsoft extension __interface only permits public member functions
1780    // and prohibits constructors, destructors, operators, non-public member
1781    // functions, static methods and data members.
1782    unsigned InvalidDecl;
1783    bool ShowDeclName = true;
1784    if (!isFunc)
1785      InvalidDecl = (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) ? 0 : 1;
1786    else if (AS != AS_public)
1787      InvalidDecl = 2;
1788    else if (DS.getStorageClassSpec() == DeclSpec::SCS_static)
1789      InvalidDecl = 3;
1790    else switch (Name.getNameKind()) {
1791      case DeclarationName::CXXConstructorName:
1792        InvalidDecl = 4;
1793        ShowDeclName = false;
1794        break;
1795
1796      case DeclarationName::CXXDestructorName:
1797        InvalidDecl = 5;
1798        ShowDeclName = false;
1799        break;
1800
1801      case DeclarationName::CXXOperatorName:
1802      case DeclarationName::CXXConversionFunctionName:
1803        InvalidDecl = 6;
1804        break;
1805
1806      default:
1807        InvalidDecl = 0;
1808        break;
1809    }
1810
1811    if (InvalidDecl) {
1812      if (ShowDeclName)
1813        Diag(Loc, diag::err_invalid_member_in_interface)
1814          << (InvalidDecl-1) << Name;
1815      else
1816        Diag(Loc, diag::err_invalid_member_in_interface)
1817          << (InvalidDecl-1) << "";
1818      return 0;
1819    }
1820  }
1821
1822  // C++ 9.2p6: A member shall not be declared to have automatic storage
1823  // duration (auto, register) or with the extern storage-class-specifier.
1824  // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1825  // data members and cannot be applied to names declared const or static,
1826  // and cannot be applied to reference members.
1827  switch (DS.getStorageClassSpec()) {
1828  case DeclSpec::SCS_unspecified:
1829  case DeclSpec::SCS_typedef:
1830  case DeclSpec::SCS_static:
1831    break;
1832  case DeclSpec::SCS_mutable:
1833    if (isFunc) {
1834      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1835
1836      // FIXME: It would be nicer if the keyword was ignored only for this
1837      // declarator. Otherwise we could get follow-up errors.
1838      D.getMutableDeclSpec().ClearStorageClassSpecs();
1839    }
1840    break;
1841  default:
1842    Diag(DS.getStorageClassSpecLoc(),
1843         diag::err_storageclass_invalid_for_member);
1844    D.getMutableDeclSpec().ClearStorageClassSpecs();
1845    break;
1846  }
1847
1848  bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1849                       DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1850                      !isFunc);
1851
1852  if (DS.isConstexprSpecified() && isInstField) {
1853    SemaDiagnosticBuilder B =
1854        Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);
1855    SourceLocation ConstexprLoc = DS.getConstexprSpecLoc();
1856    if (InitStyle == ICIS_NoInit) {
1857      B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const");
1858      D.getMutableDeclSpec().ClearConstexprSpec();
1859      const char *PrevSpec;
1860      unsigned DiagID;
1861      bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc,
1862                                         PrevSpec, DiagID, getLangOpts());
1863      (void)Failed;
1864      assert(!Failed && "Making a constexpr member const shouldn't fail");
1865    } else {
1866      B << 1;
1867      const char *PrevSpec;
1868      unsigned DiagID;
1869      if (D.getMutableDeclSpec().SetStorageClassSpec(
1870          *this, DeclSpec::SCS_static, ConstexprLoc, PrevSpec, DiagID)) {
1871        assert(DS.getStorageClassSpec() == DeclSpec::SCS_mutable &&
1872               "This is the only DeclSpec that should fail to be applied");
1873        B << 1;
1874      } else {
1875        B << 0 << FixItHint::CreateInsertion(ConstexprLoc, "static ");
1876        isInstField = false;
1877      }
1878    }
1879  }
1880
1881  NamedDecl *Member;
1882  if (isInstField) {
1883    CXXScopeSpec &SS = D.getCXXScopeSpec();
1884
1885    // Data members must have identifiers for names.
1886    if (!Name.isIdentifier()) {
1887      Diag(Loc, diag::err_bad_variable_name)
1888        << Name;
1889      return 0;
1890    }
1891
1892    IdentifierInfo *II = Name.getAsIdentifierInfo();
1893
1894    // Member field could not be with "template" keyword.
1895    // So TemplateParameterLists should be empty in this case.
1896    if (TemplateParameterLists.size()) {
1897      TemplateParameterList* TemplateParams = TemplateParameterLists[0];
1898      if (TemplateParams->size()) {
1899        // There is no such thing as a member field template.
1900        Diag(D.getIdentifierLoc(), diag::err_template_member)
1901            << II
1902            << SourceRange(TemplateParams->getTemplateLoc(),
1903                TemplateParams->getRAngleLoc());
1904      } else {
1905        // There is an extraneous 'template<>' for this member.
1906        Diag(TemplateParams->getTemplateLoc(),
1907            diag::err_template_member_noparams)
1908            << II
1909            << SourceRange(TemplateParams->getTemplateLoc(),
1910                TemplateParams->getRAngleLoc());
1911      }
1912      return 0;
1913    }
1914
1915    if (SS.isSet() && !SS.isInvalid()) {
1916      // The user provided a superfluous scope specifier inside a class
1917      // definition:
1918      //
1919      // class X {
1920      //   int X::member;
1921      // };
1922      if (DeclContext *DC = computeDeclContext(SS, false))
1923        diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
1924      else
1925        Diag(D.getIdentifierLoc(), diag::err_member_qualification)
1926          << Name << SS.getRange();
1927
1928      SS.clear();
1929    }
1930
1931    AttributeList *MSPropertyAttr =
1932      getMSPropertyAttr(D.getDeclSpec().getAttributes().getList());
1933    if (MSPropertyAttr) {
1934      Member = HandleMSProperty(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1935                                BitWidth, InitStyle, AS, MSPropertyAttr);
1936      isInstField = false;
1937    } else {
1938      Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D,
1939                                BitWidth, InitStyle, AS);
1940    }
1941    assert(Member && "HandleField never returns null");
1942  } else {
1943    assert(InitStyle == ICIS_NoInit || D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static);
1944
1945    Member = HandleDeclarator(S, D, TemplateParameterLists);
1946    if (!Member) {
1947      return 0;
1948    }
1949
1950    // Non-instance-fields can't have a bitfield.
1951    if (BitWidth) {
1952      if (Member->isInvalidDecl()) {
1953        // don't emit another diagnostic.
1954      } else if (isa<VarDecl>(Member)) {
1955        // C++ 9.6p3: A bit-field shall not be a static member.
1956        // "static member 'A' cannot be a bit-field"
1957        Diag(Loc, diag::err_static_not_bitfield)
1958          << Name << BitWidth->getSourceRange();
1959      } else if (isa<TypedefDecl>(Member)) {
1960        // "typedef member 'x' cannot be a bit-field"
1961        Diag(Loc, diag::err_typedef_not_bitfield)
1962          << Name << BitWidth->getSourceRange();
1963      } else {
1964        // A function typedef ("typedef int f(); f a;").
1965        // C++ 9.6p3: A bit-field shall have integral or enumeration type.
1966        Diag(Loc, diag::err_not_integral_type_bitfield)
1967          << Name << cast<ValueDecl>(Member)->getType()
1968          << BitWidth->getSourceRange();
1969      }
1970
1971      BitWidth = 0;
1972      Member->setInvalidDecl();
1973    }
1974
1975    Member->setAccess(AS);
1976
1977    // If we have declared a member function template, set the access of the
1978    // templated declaration as well.
1979    if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
1980      FunTmpl->getTemplatedDecl()->setAccess(AS);
1981  }
1982
1983  if (VS.isOverrideSpecified())
1984    Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
1985  if (VS.isFinalSpecified())
1986    Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
1987
1988  if (VS.getLastLocation().isValid()) {
1989    // Update the end location of a method that has a virt-specifiers.
1990    if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
1991      MD->setRangeEnd(VS.getLastLocation());
1992  }
1993
1994  CheckOverrideControl(Member);
1995
1996  assert((Name || isInstField) && "No identifier for non-field ?");
1997
1998  if (isInstField) {
1999    FieldDecl *FD = cast<FieldDecl>(Member);
2000    FieldCollector->Add(FD);
2001
2002    if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
2003                                 FD->getLocation())
2004          != DiagnosticsEngine::Ignored) {
2005      // Remember all explicit private FieldDecls that have a name, no side
2006      // effects and are not part of a dependent type declaration.
2007      if (!FD->isImplicit() && FD->getDeclName() &&
2008          FD->getAccess() == AS_private &&
2009          !FD->hasAttr<UnusedAttr>() &&
2010          !FD->getParent()->isDependentContext() &&
2011          !InitializationHasSideEffects(*FD))
2012        UnusedPrivateFields.insert(FD);
2013    }
2014  }
2015
2016  return Member;
2017}
2018
2019namespace {
2020  class UninitializedFieldVisitor
2021      : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
2022    Sema &S;
2023    ValueDecl *VD;
2024  public:
2025    typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
2026    UninitializedFieldVisitor(Sema &S, ValueDecl *VD) : Inherited(S.Context),
2027                                                        S(S) {
2028      if (IndirectFieldDecl *IFD = dyn_cast<IndirectFieldDecl>(VD))
2029        this->VD = IFD->getAnonField();
2030      else
2031        this->VD = VD;
2032    }
2033
2034    void HandleExpr(Expr *E) {
2035      if (!E) return;
2036
2037      // Expressions like x(x) sometimes lack the surrounding expressions
2038      // but need to be checked anyways.
2039      HandleValue(E);
2040      Visit(E);
2041    }
2042
2043    void HandleValue(Expr *E) {
2044      E = E->IgnoreParens();
2045
2046      if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
2047        if (isa<EnumConstantDecl>(ME->getMemberDecl()))
2048          return;
2049
2050        // FieldME is the inner-most MemberExpr that is not an anonymous struct
2051        // or union.
2052        MemberExpr *FieldME = ME;
2053
2054        Expr *Base = E;
2055        while (isa<MemberExpr>(Base)) {
2056          ME = cast<MemberExpr>(Base);
2057
2058          if (isa<VarDecl>(ME->getMemberDecl()))
2059            return;
2060
2061          if (FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2062            if (!FD->isAnonymousStructOrUnion())
2063              FieldME = ME;
2064
2065          Base = ME->getBase();
2066        }
2067
2068        if (VD == FieldME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
2069          unsigned diag = VD->getType()->isReferenceType()
2070              ? diag::warn_reference_field_is_uninit
2071              : diag::warn_field_is_uninit;
2072          S.Diag(FieldME->getExprLoc(), diag) << VD;
2073        }
2074        return;
2075      }
2076
2077      if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
2078        HandleValue(CO->getTrueExpr());
2079        HandleValue(CO->getFalseExpr());
2080        return;
2081      }
2082
2083      if (BinaryConditionalOperator *BCO =
2084              dyn_cast<BinaryConditionalOperator>(E)) {
2085        HandleValue(BCO->getCommon());
2086        HandleValue(BCO->getFalseExpr());
2087        return;
2088      }
2089
2090      if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
2091        switch (BO->getOpcode()) {
2092        default:
2093          return;
2094        case(BO_PtrMemD):
2095        case(BO_PtrMemI):
2096          HandleValue(BO->getLHS());
2097          return;
2098        case(BO_Comma):
2099          HandleValue(BO->getRHS());
2100          return;
2101        }
2102      }
2103    }
2104
2105    void VisitImplicitCastExpr(ImplicitCastExpr *E) {
2106      if (E->getCastKind() == CK_LValueToRValue)
2107        HandleValue(E->getSubExpr());
2108
2109      Inherited::VisitImplicitCastExpr(E);
2110    }
2111
2112    void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
2113      Expr *Callee = E->getCallee();
2114      if (isa<MemberExpr>(Callee))
2115        HandleValue(Callee);
2116
2117      Inherited::VisitCXXMemberCallExpr(E);
2118    }
2119  };
2120  static void CheckInitExprContainsUninitializedFields(Sema &S, Expr *E,
2121                                                       ValueDecl *VD) {
2122    UninitializedFieldVisitor(S, VD).HandleExpr(E);
2123  }
2124} // namespace
2125
2126/// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
2127/// in-class initializer for a non-static C++ class member, and after
2128/// instantiating an in-class initializer in a class template. Such actions
2129/// are deferred until the class is complete.
2130void
2131Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
2132                                       Expr *InitExpr) {
2133  FieldDecl *FD = cast<FieldDecl>(D);
2134  assert(FD->getInClassInitStyle() != ICIS_NoInit &&
2135         "must set init style when field is created");
2136
2137  if (!InitExpr) {
2138    FD->setInvalidDecl();
2139    FD->removeInClassInitializer();
2140    return;
2141  }
2142
2143  if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
2144    FD->setInvalidDecl();
2145    FD->removeInClassInitializer();
2146    return;
2147  }
2148
2149  if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, InitLoc)
2150      != DiagnosticsEngine::Ignored) {
2151    CheckInitExprContainsUninitializedFields(*this, InitExpr, FD);
2152  }
2153
2154  ExprResult Init = InitExpr;
2155  if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
2156    InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
2157    InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
2158        ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
2159        : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
2160    InitializationSequence Seq(*this, Entity, Kind, InitExpr);
2161    Init = Seq.Perform(*this, Entity, Kind, InitExpr);
2162    if (Init.isInvalid()) {
2163      FD->setInvalidDecl();
2164      return;
2165    }
2166  }
2167
2168  // C++11 [class.base.init]p7:
2169  //   The initialization of each base and member constitutes a
2170  //   full-expression.
2171  Init = ActOnFinishFullExpr(Init.take(), InitLoc);
2172  if (Init.isInvalid()) {
2173    FD->setInvalidDecl();
2174    return;
2175  }
2176
2177  InitExpr = Init.release();
2178
2179  FD->setInClassInitializer(InitExpr);
2180}
2181
2182/// \brief Find the direct and/or virtual base specifiers that
2183/// correspond to the given base type, for use in base initialization
2184/// within a constructor.
2185static bool FindBaseInitializer(Sema &SemaRef,
2186                                CXXRecordDecl *ClassDecl,
2187                                QualType BaseType,
2188                                const CXXBaseSpecifier *&DirectBaseSpec,
2189                                const CXXBaseSpecifier *&VirtualBaseSpec) {
2190  // First, check for a direct base class.
2191  DirectBaseSpec = 0;
2192  for (CXXRecordDecl::base_class_const_iterator Base
2193         = ClassDecl->bases_begin();
2194       Base != ClassDecl->bases_end(); ++Base) {
2195    if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
2196      // We found a direct base of this type. That's what we're
2197      // initializing.
2198      DirectBaseSpec = &*Base;
2199      break;
2200    }
2201  }
2202
2203  // Check for a virtual base class.
2204  // FIXME: We might be able to short-circuit this if we know in advance that
2205  // there are no virtual bases.
2206  VirtualBaseSpec = 0;
2207  if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
2208    // We haven't found a base yet; search the class hierarchy for a
2209    // virtual base class.
2210    CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2211                       /*DetectVirtual=*/false);
2212    if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
2213                              BaseType, Paths)) {
2214      for (CXXBasePaths::paths_iterator Path = Paths.begin();
2215           Path != Paths.end(); ++Path) {
2216        if (Path->back().Base->isVirtual()) {
2217          VirtualBaseSpec = Path->back().Base;
2218          break;
2219        }
2220      }
2221    }
2222  }
2223
2224  return DirectBaseSpec || VirtualBaseSpec;
2225}
2226
2227/// \brief Handle a C++ member initializer using braced-init-list syntax.
2228MemInitResult
2229Sema::ActOnMemInitializer(Decl *ConstructorD,
2230                          Scope *S,
2231                          CXXScopeSpec &SS,
2232                          IdentifierInfo *MemberOrBase,
2233                          ParsedType TemplateTypeTy,
2234                          const DeclSpec &DS,
2235                          SourceLocation IdLoc,
2236                          Expr *InitList,
2237                          SourceLocation EllipsisLoc) {
2238  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2239                             DS, IdLoc, InitList,
2240                             EllipsisLoc);
2241}
2242
2243/// \brief Handle a C++ member initializer using parentheses syntax.
2244MemInitResult
2245Sema::ActOnMemInitializer(Decl *ConstructorD,
2246                          Scope *S,
2247                          CXXScopeSpec &SS,
2248                          IdentifierInfo *MemberOrBase,
2249                          ParsedType TemplateTypeTy,
2250                          const DeclSpec &DS,
2251                          SourceLocation IdLoc,
2252                          SourceLocation LParenLoc,
2253                          ArrayRef<Expr *> Args,
2254                          SourceLocation RParenLoc,
2255                          SourceLocation EllipsisLoc) {
2256  Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
2257                                           Args, RParenLoc);
2258  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
2259                             DS, IdLoc, List, EllipsisLoc);
2260}
2261
2262namespace {
2263
2264// Callback to only accept typo corrections that can be a valid C++ member
2265// intializer: either a non-static field member or a base class.
2266class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
2267 public:
2268  explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
2269      : ClassDecl(ClassDecl) {}
2270
2271  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
2272    if (NamedDecl *ND = candidate.getCorrectionDecl()) {
2273      if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
2274        return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
2275      else
2276        return isa<TypeDecl>(ND);
2277    }
2278    return false;
2279  }
2280
2281 private:
2282  CXXRecordDecl *ClassDecl;
2283};
2284
2285}
2286
2287/// \brief Handle a C++ member initializer.
2288MemInitResult
2289Sema::BuildMemInitializer(Decl *ConstructorD,
2290                          Scope *S,
2291                          CXXScopeSpec &SS,
2292                          IdentifierInfo *MemberOrBase,
2293                          ParsedType TemplateTypeTy,
2294                          const DeclSpec &DS,
2295                          SourceLocation IdLoc,
2296                          Expr *Init,
2297                          SourceLocation EllipsisLoc) {
2298  if (!ConstructorD)
2299    return true;
2300
2301  AdjustDeclIfTemplate(ConstructorD);
2302
2303  CXXConstructorDecl *Constructor
2304    = dyn_cast<CXXConstructorDecl>(ConstructorD);
2305  if (!Constructor) {
2306    // The user wrote a constructor initializer on a function that is
2307    // not a C++ constructor. Ignore the error for now, because we may
2308    // have more member initializers coming; we'll diagnose it just
2309    // once in ActOnMemInitializers.
2310    return true;
2311  }
2312
2313  CXXRecordDecl *ClassDecl = Constructor->getParent();
2314
2315  // C++ [class.base.init]p2:
2316  //   Names in a mem-initializer-id are looked up in the scope of the
2317  //   constructor's class and, if not found in that scope, are looked
2318  //   up in the scope containing the constructor's definition.
2319  //   [Note: if the constructor's class contains a member with the
2320  //   same name as a direct or virtual base class of the class, a
2321  //   mem-initializer-id naming the member or base class and composed
2322  //   of a single identifier refers to the class member. A
2323  //   mem-initializer-id for the hidden base class may be specified
2324  //   using a qualified name. ]
2325  if (!SS.getScopeRep() && !TemplateTypeTy) {
2326    // Look for a member, first.
2327    DeclContext::lookup_result Result
2328      = ClassDecl->lookup(MemberOrBase);
2329    if (!Result.empty()) {
2330      ValueDecl *Member;
2331      if ((Member = dyn_cast<FieldDecl>(Result.front())) ||
2332          (Member = dyn_cast<IndirectFieldDecl>(Result.front()))) {
2333        if (EllipsisLoc.isValid())
2334          Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
2335            << MemberOrBase
2336            << SourceRange(IdLoc, Init->getSourceRange().getEnd());
2337
2338        return BuildMemberInitializer(Member, Init, IdLoc);
2339      }
2340    }
2341  }
2342  // It didn't name a member, so see if it names a class.
2343  QualType BaseType;
2344  TypeSourceInfo *TInfo = 0;
2345
2346  if (TemplateTypeTy) {
2347    BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
2348  } else if (DS.getTypeSpecType() == TST_decltype) {
2349    BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
2350  } else {
2351    LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
2352    LookupParsedName(R, S, &SS);
2353
2354    TypeDecl *TyD = R.getAsSingle<TypeDecl>();
2355    if (!TyD) {
2356      if (R.isAmbiguous()) return true;
2357
2358      // We don't want access-control diagnostics here.
2359      R.suppressDiagnostics();
2360
2361      if (SS.isSet() && isDependentScopeSpecifier(SS)) {
2362        bool NotUnknownSpecialization = false;
2363        DeclContext *DC = computeDeclContext(SS, false);
2364        if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
2365          NotUnknownSpecialization = !Record->hasAnyDependentBases();
2366
2367        if (!NotUnknownSpecialization) {
2368          // When the scope specifier can refer to a member of an unknown
2369          // specialization, we take it as a type name.
2370          BaseType = CheckTypenameType(ETK_None, SourceLocation(),
2371                                       SS.getWithLocInContext(Context),
2372                                       *MemberOrBase, IdLoc);
2373          if (BaseType.isNull())
2374            return true;
2375
2376          R.clear();
2377          R.setLookupName(MemberOrBase);
2378        }
2379      }
2380
2381      // If no results were found, try to correct typos.
2382      TypoCorrection Corr;
2383      MemInitializerValidatorCCC Validator(ClassDecl);
2384      if (R.empty() && BaseType.isNull() &&
2385          (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
2386                              Validator, ClassDecl))) {
2387        std::string CorrectedStr(Corr.getAsString(getLangOpts()));
2388        std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
2389        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
2390          // We have found a non-static data member with a similar
2391          // name to what was typed; complain and initialize that
2392          // member.
2393          Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2394            << MemberOrBase << true << CorrectedQuotedStr
2395            << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2396          Diag(Member->getLocation(), diag::note_previous_decl)
2397            << CorrectedQuotedStr;
2398
2399          return BuildMemberInitializer(Member, Init, IdLoc);
2400        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
2401          const CXXBaseSpecifier *DirectBaseSpec;
2402          const CXXBaseSpecifier *VirtualBaseSpec;
2403          if (FindBaseInitializer(*this, ClassDecl,
2404                                  Context.getTypeDeclType(Type),
2405                                  DirectBaseSpec, VirtualBaseSpec)) {
2406            // We have found a direct or virtual base class with a
2407            // similar name to what was typed; complain and initialize
2408            // that base class.
2409            Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2410              << MemberOrBase << false << CorrectedQuotedStr
2411              << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2412
2413            const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
2414                                                             : VirtualBaseSpec;
2415            Diag(BaseSpec->getLocStart(),
2416                 diag::note_base_class_specified_here)
2417              << BaseSpec->getType()
2418              << BaseSpec->getSourceRange();
2419
2420            TyD = Type;
2421          }
2422        }
2423      }
2424
2425      if (!TyD && BaseType.isNull()) {
2426        Diag(IdLoc, diag::err_mem_init_not_member_or_class)
2427          << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
2428        return true;
2429      }
2430    }
2431
2432    if (BaseType.isNull()) {
2433      BaseType = Context.getTypeDeclType(TyD);
2434      if (SS.isSet()) {
2435        NestedNameSpecifier *Qualifier =
2436          static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2437
2438        // FIXME: preserve source range information
2439        BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
2440      }
2441    }
2442  }
2443
2444  if (!TInfo)
2445    TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
2446
2447  return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2448}
2449
2450/// Checks a member initializer expression for cases where reference (or
2451/// pointer) members are bound to by-value parameters (or their addresses).
2452static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
2453                                               Expr *Init,
2454                                               SourceLocation IdLoc) {
2455  QualType MemberTy = Member->getType();
2456
2457  // We only handle pointers and references currently.
2458  // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
2459  if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
2460    return;
2461
2462  const bool IsPointer = MemberTy->isPointerType();
2463  if (IsPointer) {
2464    if (const UnaryOperator *Op
2465          = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
2466      // The only case we're worried about with pointers requires taking the
2467      // address.
2468      if (Op->getOpcode() != UO_AddrOf)
2469        return;
2470
2471      Init = Op->getSubExpr();
2472    } else {
2473      // We only handle address-of expression initializers for pointers.
2474      return;
2475    }
2476  }
2477
2478  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
2479    // We only warn when referring to a non-reference parameter declaration.
2480    const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
2481    if (!Parameter || Parameter->getType()->isReferenceType())
2482      return;
2483
2484    S.Diag(Init->getExprLoc(),
2485           IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
2486                     : diag::warn_bind_ref_member_to_parameter)
2487      << Member << Parameter << Init->getSourceRange();
2488  } else {
2489    // Other initializers are fine.
2490    return;
2491  }
2492
2493  S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
2494    << (unsigned)IsPointer;
2495}
2496
2497MemInitResult
2498Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
2499                             SourceLocation IdLoc) {
2500  FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
2501  IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
2502  assert((DirectMember || IndirectMember) &&
2503         "Member must be a FieldDecl or IndirectFieldDecl");
2504
2505  if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2506    return true;
2507
2508  if (Member->isInvalidDecl())
2509    return true;
2510
2511  // Diagnose value-uses of fields to initialize themselves, e.g.
2512  //   foo(foo)
2513  // where foo is not also a parameter to the constructor.
2514  // TODO: implement -Wuninitialized and fold this into that framework.
2515  MultiExprArg Args;
2516  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2517    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2518  } else if (InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
2519    Args = MultiExprArg(InitList->getInits(), InitList->getNumInits());
2520  } else {
2521    // Template instantiation doesn't reconstruct ParenListExprs for us.
2522    Args = Init;
2523  }
2524
2525  if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, IdLoc)
2526        != DiagnosticsEngine::Ignored)
2527    for (unsigned i = 0, e = Args.size(); i != e; ++i)
2528      // FIXME: Warn about the case when other fields are used before being
2529      // initialized. For example, let this field be the i'th field. When
2530      // initializing the i'th field, throw a warning if any of the >= i'th
2531      // fields are used, as they are not yet initialized.
2532      // Right now we are only handling the case where the i'th field uses
2533      // itself in its initializer.
2534      // Also need to take into account that some fields may be initialized by
2535      // in-class initializers, see C++11 [class.base.init]p9.
2536      CheckInitExprContainsUninitializedFields(*this, Args[i], Member);
2537
2538  SourceRange InitRange = Init->getSourceRange();
2539
2540  if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
2541    // Can't check initialization for a member of dependent type or when
2542    // any of the arguments are type-dependent expressions.
2543    DiscardCleanupsInEvaluationContext();
2544  } else {
2545    bool InitList = false;
2546    if (isa<InitListExpr>(Init)) {
2547      InitList = true;
2548      Args = Init;
2549    }
2550
2551    // Initialize the member.
2552    InitializedEntity MemberEntity =
2553      DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
2554                   : InitializedEntity::InitializeMember(IndirectMember, 0);
2555    InitializationKind Kind =
2556      InitList ? InitializationKind::CreateDirectList(IdLoc)
2557               : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
2558                                                  InitRange.getEnd());
2559
2560    InitializationSequence InitSeq(*this, MemberEntity, Kind, Args);
2561    ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind, Args, 0);
2562    if (MemberInit.isInvalid())
2563      return true;
2564
2565    CheckForDanglingReferenceOrPointer(*this, Member, MemberInit.get(), IdLoc);
2566
2567    // C++11 [class.base.init]p7:
2568    //   The initialization of each base and member constitutes a
2569    //   full-expression.
2570    MemberInit = ActOnFinishFullExpr(MemberInit.get(), InitRange.getBegin());
2571    if (MemberInit.isInvalid())
2572      return true;
2573
2574    Init = MemberInit.get();
2575  }
2576
2577  if (DirectMember) {
2578    return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
2579                                            InitRange.getBegin(), Init,
2580                                            InitRange.getEnd());
2581  } else {
2582    return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
2583                                            InitRange.getBegin(), Init,
2584                                            InitRange.getEnd());
2585  }
2586}
2587
2588MemInitResult
2589Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
2590                                 CXXRecordDecl *ClassDecl) {
2591  SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
2592  if (!LangOpts.CPlusPlus11)
2593    return Diag(NameLoc, diag::err_delegating_ctor)
2594      << TInfo->getTypeLoc().getLocalSourceRange();
2595  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
2596
2597  bool InitList = true;
2598  MultiExprArg Args = Init;
2599  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2600    InitList = false;
2601    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2602  }
2603
2604  SourceRange InitRange = Init->getSourceRange();
2605  // Initialize the object.
2606  InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
2607                                     QualType(ClassDecl->getTypeForDecl(), 0));
2608  InitializationKind Kind =
2609    InitList ? InitializationKind::CreateDirectList(NameLoc)
2610             : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
2611                                                InitRange.getEnd());
2612  InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args);
2613  ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
2614                                              Args, 0);
2615  if (DelegationInit.isInvalid())
2616    return true;
2617
2618  assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
2619         "Delegating constructor with no target?");
2620
2621  // C++11 [class.base.init]p7:
2622  //   The initialization of each base and member constitutes a
2623  //   full-expression.
2624  DelegationInit = ActOnFinishFullExpr(DelegationInit.get(),
2625                                       InitRange.getBegin());
2626  if (DelegationInit.isInvalid())
2627    return true;
2628
2629  // If we are in a dependent context, template instantiation will
2630  // perform this type-checking again. Just save the arguments that we
2631  // received in a ParenListExpr.
2632  // FIXME: This isn't quite ideal, since our ASTs don't capture all
2633  // of the information that we have about the base
2634  // initializer. However, deconstructing the ASTs is a dicey process,
2635  // and this approach is far more likely to get the corner cases right.
2636  if (CurContext->isDependentContext())
2637    DelegationInit = Owned(Init);
2638
2639  return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
2640                                          DelegationInit.takeAs<Expr>(),
2641                                          InitRange.getEnd());
2642}
2643
2644MemInitResult
2645Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
2646                           Expr *Init, CXXRecordDecl *ClassDecl,
2647                           SourceLocation EllipsisLoc) {
2648  SourceLocation BaseLoc
2649    = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
2650
2651  if (!BaseType->isDependentType() && !BaseType->isRecordType())
2652    return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
2653             << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2654
2655  // C++ [class.base.init]p2:
2656  //   [...] Unless the mem-initializer-id names a nonstatic data
2657  //   member of the constructor's class or a direct or virtual base
2658  //   of that class, the mem-initializer is ill-formed. A
2659  //   mem-initializer-list can initialize a base class using any
2660  //   name that denotes that base class type.
2661  bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
2662
2663  SourceRange InitRange = Init->getSourceRange();
2664  if (EllipsisLoc.isValid()) {
2665    // This is a pack expansion.
2666    if (!BaseType->containsUnexpandedParameterPack())  {
2667      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2668        << SourceRange(BaseLoc, InitRange.getEnd());
2669
2670      EllipsisLoc = SourceLocation();
2671    }
2672  } else {
2673    // Check for any unexpanded parameter packs.
2674    if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
2675      return true;
2676
2677    if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2678      return true;
2679  }
2680
2681  // Check for direct and virtual base classes.
2682  const CXXBaseSpecifier *DirectBaseSpec = 0;
2683  const CXXBaseSpecifier *VirtualBaseSpec = 0;
2684  if (!Dependent) {
2685    if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2686                                       BaseType))
2687      return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2688
2689    FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2690                        VirtualBaseSpec);
2691
2692    // C++ [base.class.init]p2:
2693    // Unless the mem-initializer-id names a nonstatic data member of the
2694    // constructor's class or a direct or virtual base of that class, the
2695    // mem-initializer is ill-formed.
2696    if (!DirectBaseSpec && !VirtualBaseSpec) {
2697      // If the class has any dependent bases, then it's possible that
2698      // one of those types will resolve to the same type as
2699      // BaseType. Therefore, just treat this as a dependent base
2700      // class initialization.  FIXME: Should we try to check the
2701      // initialization anyway? It seems odd.
2702      if (ClassDecl->hasAnyDependentBases())
2703        Dependent = true;
2704      else
2705        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
2706          << BaseType << Context.getTypeDeclType(ClassDecl)
2707          << BaseTInfo->getTypeLoc().getLocalSourceRange();
2708    }
2709  }
2710
2711  if (Dependent) {
2712    DiscardCleanupsInEvaluationContext();
2713
2714    return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2715                                            /*IsVirtual=*/false,
2716                                            InitRange.getBegin(), Init,
2717                                            InitRange.getEnd(), EllipsisLoc);
2718  }
2719
2720  // C++ [base.class.init]p2:
2721  //   If a mem-initializer-id is ambiguous because it designates both
2722  //   a direct non-virtual base class and an inherited virtual base
2723  //   class, the mem-initializer is ill-formed.
2724  if (DirectBaseSpec && VirtualBaseSpec)
2725    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
2726      << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2727
2728  CXXBaseSpecifier *BaseSpec = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
2729  if (!BaseSpec)
2730    BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
2731
2732  // Initialize the base.
2733  bool InitList = true;
2734  MultiExprArg Args = Init;
2735  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2736    InitList = false;
2737    Args = MultiExprArg(ParenList->getExprs(), ParenList->getNumExprs());
2738  }
2739
2740  InitializedEntity BaseEntity =
2741    InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
2742  InitializationKind Kind =
2743    InitList ? InitializationKind::CreateDirectList(BaseLoc)
2744             : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
2745                                                InitRange.getEnd());
2746  InitializationSequence InitSeq(*this, BaseEntity, Kind, Args);
2747  ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind, Args, 0);
2748  if (BaseInit.isInvalid())
2749    return true;
2750
2751  // C++11 [class.base.init]p7:
2752  //   The initialization of each base and member constitutes a
2753  //   full-expression.
2754  BaseInit = ActOnFinishFullExpr(BaseInit.get(), InitRange.getBegin());
2755  if (BaseInit.isInvalid())
2756    return true;
2757
2758  // If we are in a dependent context, template instantiation will
2759  // perform this type-checking again. Just save the arguments that we
2760  // received in a ParenListExpr.
2761  // FIXME: This isn't quite ideal, since our ASTs don't capture all
2762  // of the information that we have about the base
2763  // initializer. However, deconstructing the ASTs is a dicey process,
2764  // and this approach is far more likely to get the corner cases right.
2765  if (CurContext->isDependentContext())
2766    BaseInit = Owned(Init);
2767
2768  return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2769                                          BaseSpec->isVirtual(),
2770                                          InitRange.getBegin(),
2771                                          BaseInit.takeAs<Expr>(),
2772                                          InitRange.getEnd(), EllipsisLoc);
2773}
2774
2775// Create a static_cast\<T&&>(expr).
2776static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) {
2777  if (T.isNull()) T = E->getType();
2778  QualType TargetType = SemaRef.BuildReferenceType(
2779      T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName());
2780  SourceLocation ExprLoc = E->getLocStart();
2781  TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
2782      TargetType, ExprLoc);
2783
2784  return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
2785                                   SourceRange(ExprLoc, ExprLoc),
2786                                   E->getSourceRange()).take();
2787}
2788
2789/// ImplicitInitializerKind - How an implicit base or member initializer should
2790/// initialize its base or member.
2791enum ImplicitInitializerKind {
2792  IIK_Default,
2793  IIK_Copy,
2794  IIK_Move,
2795  IIK_Inherit
2796};
2797
2798static bool
2799BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2800                             ImplicitInitializerKind ImplicitInitKind,
2801                             CXXBaseSpecifier *BaseSpec,
2802                             bool IsInheritedVirtualBase,
2803                             CXXCtorInitializer *&CXXBaseInit) {
2804  InitializedEntity InitEntity
2805    = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
2806                                        IsInheritedVirtualBase);
2807
2808  ExprResult BaseInit;
2809
2810  switch (ImplicitInitKind) {
2811  case IIK_Inherit: {
2812    const CXXRecordDecl *Inherited =
2813        Constructor->getInheritedConstructor()->getParent();
2814    const CXXRecordDecl *Base = BaseSpec->getType()->getAsCXXRecordDecl();
2815    if (Base && Inherited->getCanonicalDecl() == Base->getCanonicalDecl()) {
2816      // C++11 [class.inhctor]p8:
2817      //   Each expression in the expression-list is of the form
2818      //   static_cast<T&&>(p), where p is the name of the corresponding
2819      //   constructor parameter and T is the declared type of p.
2820      SmallVector<Expr*, 16> Args;
2821      for (unsigned I = 0, E = Constructor->getNumParams(); I != E; ++I) {
2822        ParmVarDecl *PD = Constructor->getParamDecl(I);
2823        ExprResult ArgExpr =
2824            SemaRef.BuildDeclRefExpr(PD, PD->getType().getNonReferenceType(),
2825                                     VK_LValue, SourceLocation());
2826        if (ArgExpr.isInvalid())
2827          return true;
2828        Args.push_back(CastForMoving(SemaRef, ArgExpr.take(), PD->getType()));
2829      }
2830
2831      InitializationKind InitKind = InitializationKind::CreateDirect(
2832          Constructor->getLocation(), SourceLocation(), SourceLocation());
2833      InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, Args);
2834      BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, Args);
2835      break;
2836    }
2837  }
2838  // Fall through.
2839  case IIK_Default: {
2840    InitializationKind InitKind
2841      = InitializationKind::CreateDefault(Constructor->getLocation());
2842    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
2843    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
2844    break;
2845  }
2846
2847  case IIK_Move:
2848  case IIK_Copy: {
2849    bool Moving = ImplicitInitKind == IIK_Move;
2850    ParmVarDecl *Param = Constructor->getParamDecl(0);
2851    QualType ParamType = Param->getType().getNonReferenceType();
2852
2853    Expr *CopyCtorArg =
2854      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2855                          SourceLocation(), Param, false,
2856                          Constructor->getLocation(), ParamType,
2857                          VK_LValue, 0);
2858
2859    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
2860
2861    // Cast to the base class to avoid ambiguities.
2862    QualType ArgTy =
2863      SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
2864                                       ParamType.getQualifiers());
2865
2866    if (Moving) {
2867      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
2868    }
2869
2870    CXXCastPath BasePath;
2871    BasePath.push_back(BaseSpec);
2872    CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
2873                                            CK_UncheckedDerivedToBase,
2874                                            Moving ? VK_XValue : VK_LValue,
2875                                            &BasePath).take();
2876
2877    InitializationKind InitKind
2878      = InitializationKind::CreateDirect(Constructor->getLocation(),
2879                                         SourceLocation(), SourceLocation());
2880    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, CopyCtorArg);
2881    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, CopyCtorArg);
2882    break;
2883  }
2884  }
2885
2886  BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
2887  if (BaseInit.isInvalid())
2888    return true;
2889
2890  CXXBaseInit =
2891    new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2892               SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
2893                                                        SourceLocation()),
2894                                             BaseSpec->isVirtual(),
2895                                             SourceLocation(),
2896                                             BaseInit.takeAs<Expr>(),
2897                                             SourceLocation(),
2898                                             SourceLocation());
2899
2900  return false;
2901}
2902
2903static bool RefersToRValueRef(Expr *MemRef) {
2904  ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
2905  return Referenced->getType()->isRValueReferenceType();
2906}
2907
2908static bool
2909BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2910                               ImplicitInitializerKind ImplicitInitKind,
2911                               FieldDecl *Field, IndirectFieldDecl *Indirect,
2912                               CXXCtorInitializer *&CXXMemberInit) {
2913  if (Field->isInvalidDecl())
2914    return true;
2915
2916  SourceLocation Loc = Constructor->getLocation();
2917
2918  if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
2919    bool Moving = ImplicitInitKind == IIK_Move;
2920    ParmVarDecl *Param = Constructor->getParamDecl(0);
2921    QualType ParamType = Param->getType().getNonReferenceType();
2922
2923    // Suppress copying zero-width bitfields.
2924    if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
2925      return false;
2926
2927    Expr *MemberExprBase =
2928      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2929                          SourceLocation(), Param, false,
2930                          Loc, ParamType, VK_LValue, 0);
2931
2932    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
2933
2934    if (Moving) {
2935      MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
2936    }
2937
2938    // Build a reference to this field within the parameter.
2939    CXXScopeSpec SS;
2940    LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
2941                              Sema::LookupMemberName);
2942    MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
2943                                  : cast<ValueDecl>(Field), AS_public);
2944    MemberLookup.resolveKind();
2945    ExprResult CtorArg
2946      = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
2947                                         ParamType, Loc,
2948                                         /*IsArrow=*/false,
2949                                         SS,
2950                                         /*TemplateKWLoc=*/SourceLocation(),
2951                                         /*FirstQualifierInScope=*/0,
2952                                         MemberLookup,
2953                                         /*TemplateArgs=*/0);
2954    if (CtorArg.isInvalid())
2955      return true;
2956
2957    // C++11 [class.copy]p15:
2958    //   - if a member m has rvalue reference type T&&, it is direct-initialized
2959    //     with static_cast<T&&>(x.m);
2960    if (RefersToRValueRef(CtorArg.get())) {
2961      CtorArg = CastForMoving(SemaRef, CtorArg.take());
2962    }
2963
2964    // When the field we are copying is an array, create index variables for
2965    // each dimension of the array. We use these index variables to subscript
2966    // the source array, and other clients (e.g., CodeGen) will perform the
2967    // necessary iteration with these index variables.
2968    SmallVector<VarDecl *, 4> IndexVariables;
2969    QualType BaseType = Field->getType();
2970    QualType SizeType = SemaRef.Context.getSizeType();
2971    bool InitializingArray = false;
2972    while (const ConstantArrayType *Array
2973                          = SemaRef.Context.getAsConstantArrayType(BaseType)) {
2974      InitializingArray = true;
2975      // Create the iteration variable for this array index.
2976      IdentifierInfo *IterationVarName = 0;
2977      {
2978        SmallString<8> Str;
2979        llvm::raw_svector_ostream OS(Str);
2980        OS << "__i" << IndexVariables.size();
2981        IterationVarName = &SemaRef.Context.Idents.get(OS.str());
2982      }
2983      VarDecl *IterationVar
2984        = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
2985                          IterationVarName, SizeType,
2986                        SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
2987                          SC_None);
2988      IndexVariables.push_back(IterationVar);
2989
2990      // Create a reference to the iteration variable.
2991      ExprResult IterationVarRef
2992        = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
2993      assert(!IterationVarRef.isInvalid() &&
2994             "Reference to invented variable cannot fail!");
2995      IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
2996      assert(!IterationVarRef.isInvalid() &&
2997             "Conversion of invented variable cannot fail!");
2998
2999      // Subscript the array with this iteration variable.
3000      CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
3001                                                        IterationVarRef.take(),
3002                                                        Loc);
3003      if (CtorArg.isInvalid())
3004        return true;
3005
3006      BaseType = Array->getElementType();
3007    }
3008
3009    // The array subscript expression is an lvalue, which is wrong for moving.
3010    if (Moving && InitializingArray)
3011      CtorArg = CastForMoving(SemaRef, CtorArg.take());
3012
3013    // Construct the entity that we will be initializing. For an array, this
3014    // will be first element in the array, which may require several levels
3015    // of array-subscript entities.
3016    SmallVector<InitializedEntity, 4> Entities;
3017    Entities.reserve(1 + IndexVariables.size());
3018    if (Indirect)
3019      Entities.push_back(InitializedEntity::InitializeMember(Indirect));
3020    else
3021      Entities.push_back(InitializedEntity::InitializeMember(Field));
3022    for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
3023      Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
3024                                                              0,
3025                                                              Entities.back()));
3026
3027    // Direct-initialize to use the copy constructor.
3028    InitializationKind InitKind =
3029      InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
3030
3031    Expr *CtorArgE = CtorArg.takeAs<Expr>();
3032    InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind, CtorArgE);
3033
3034    ExprResult MemberInit
3035      = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
3036                        MultiExprArg(&CtorArgE, 1));
3037    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3038    if (MemberInit.isInvalid())
3039      return true;
3040
3041    if (Indirect) {
3042      assert(IndexVariables.size() == 0 &&
3043             "Indirect field improperly initialized");
3044      CXXMemberInit
3045        = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3046                                                   Loc, Loc,
3047                                                   MemberInit.takeAs<Expr>(),
3048                                                   Loc);
3049    } else
3050      CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
3051                                                 Loc, MemberInit.takeAs<Expr>(),
3052                                                 Loc,
3053                                                 IndexVariables.data(),
3054                                                 IndexVariables.size());
3055    return false;
3056  }
3057
3058  assert((ImplicitInitKind == IIK_Default || ImplicitInitKind == IIK_Inherit) &&
3059         "Unhandled implicit init kind!");
3060
3061  QualType FieldBaseElementType =
3062    SemaRef.Context.getBaseElementType(Field->getType());
3063
3064  if (FieldBaseElementType->isRecordType()) {
3065    InitializedEntity InitEntity
3066      = Indirect? InitializedEntity::InitializeMember(Indirect)
3067                : InitializedEntity::InitializeMember(Field);
3068    InitializationKind InitKind =
3069      InitializationKind::CreateDefault(Loc);
3070
3071    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, None);
3072    ExprResult MemberInit =
3073      InitSeq.Perform(SemaRef, InitEntity, InitKind, None);
3074
3075    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
3076    if (MemberInit.isInvalid())
3077      return true;
3078
3079    if (Indirect)
3080      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3081                                                               Indirect, Loc,
3082                                                               Loc,
3083                                                               MemberInit.get(),
3084                                                               Loc);
3085    else
3086      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
3087                                                               Field, Loc, Loc,
3088                                                               MemberInit.get(),
3089                                                               Loc);
3090    return false;
3091  }
3092
3093  if (!Field->getParent()->isUnion()) {
3094    if (FieldBaseElementType->isReferenceType()) {
3095      SemaRef.Diag(Constructor->getLocation(),
3096                   diag::err_uninitialized_member_in_ctor)
3097      << (int)Constructor->isImplicit()
3098      << SemaRef.Context.getTagDeclType(Constructor->getParent())
3099      << 0 << Field->getDeclName();
3100      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3101      return true;
3102    }
3103
3104    if (FieldBaseElementType.isConstQualified()) {
3105      SemaRef.Diag(Constructor->getLocation(),
3106                   diag::err_uninitialized_member_in_ctor)
3107      << (int)Constructor->isImplicit()
3108      << SemaRef.Context.getTagDeclType(Constructor->getParent())
3109      << 1 << Field->getDeclName();
3110      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
3111      return true;
3112    }
3113  }
3114
3115  if (SemaRef.getLangOpts().ObjCAutoRefCount &&
3116      FieldBaseElementType->isObjCRetainableType() &&
3117      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
3118      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
3119    // ARC:
3120    //   Default-initialize Objective-C pointers to NULL.
3121    CXXMemberInit
3122      = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3123                                                 Loc, Loc,
3124                 new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
3125                                                 Loc);
3126    return false;
3127  }
3128
3129  // Nothing to initialize.
3130  CXXMemberInit = 0;
3131  return false;
3132}
3133
3134namespace {
3135struct BaseAndFieldInfo {
3136  Sema &S;
3137  CXXConstructorDecl *Ctor;
3138  bool AnyErrorsInInits;
3139  ImplicitInitializerKind IIK;
3140  llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
3141  SmallVector<CXXCtorInitializer*, 8> AllToInit;
3142
3143  BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
3144    : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
3145    bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
3146    if (Generated && Ctor->isCopyConstructor())
3147      IIK = IIK_Copy;
3148    else if (Generated && Ctor->isMoveConstructor())
3149      IIK = IIK_Move;
3150    else if (Ctor->getInheritedConstructor())
3151      IIK = IIK_Inherit;
3152    else
3153      IIK = IIK_Default;
3154  }
3155
3156  bool isImplicitCopyOrMove() const {
3157    switch (IIK) {
3158    case IIK_Copy:
3159    case IIK_Move:
3160      return true;
3161
3162    case IIK_Default:
3163    case IIK_Inherit:
3164      return false;
3165    }
3166
3167    llvm_unreachable("Invalid ImplicitInitializerKind!");
3168  }
3169
3170  bool addFieldInitializer(CXXCtorInitializer *Init) {
3171    AllToInit.push_back(Init);
3172
3173    // Check whether this initializer makes the field "used".
3174    if (Init->getInit()->HasSideEffects(S.Context))
3175      S.UnusedPrivateFields.remove(Init->getAnyMember());
3176
3177    return false;
3178  }
3179};
3180}
3181
3182/// \brief Determine whether the given indirect field declaration is somewhere
3183/// within an anonymous union.
3184static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
3185  for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
3186                                      CEnd = F->chain_end();
3187       C != CEnd; ++C)
3188    if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
3189      if (Record->isUnion())
3190        return true;
3191
3192  return false;
3193}
3194
3195/// \brief Determine whether the given type is an incomplete or zero-lenfgth
3196/// array type.
3197static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
3198  if (T->isIncompleteArrayType())
3199    return true;
3200
3201  while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
3202    if (!ArrayT->getSize())
3203      return true;
3204
3205    T = ArrayT->getElementType();
3206  }
3207
3208  return false;
3209}
3210
3211static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
3212                                    FieldDecl *Field,
3213                                    IndirectFieldDecl *Indirect = 0) {
3214
3215  // Overwhelmingly common case: we have a direct initializer for this field.
3216  if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
3217    return Info.addFieldInitializer(Init);
3218
3219  // C++11 [class.base.init]p8: if the entity is a non-static data member that
3220  // has a brace-or-equal-initializer, the entity is initialized as specified
3221  // in [dcl.init].
3222  if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
3223    Expr *DIE = CXXDefaultInitExpr::Create(SemaRef.Context,
3224                                           Info.Ctor->getLocation(), Field);
3225    CXXCtorInitializer *Init;
3226    if (Indirect)
3227      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
3228                                                      SourceLocation(),
3229                                                      SourceLocation(), DIE,
3230                                                      SourceLocation());
3231    else
3232      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
3233                                                      SourceLocation(),
3234                                                      SourceLocation(), DIE,
3235                                                      SourceLocation());
3236    return Info.addFieldInitializer(Init);
3237  }
3238
3239  // Don't build an implicit initializer for union members if none was
3240  // explicitly specified.
3241  if (Field->getParent()->isUnion() ||
3242      (Indirect && isWithinAnonymousUnion(Indirect)))
3243    return false;
3244
3245  // Don't initialize incomplete or zero-length arrays.
3246  if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
3247    return false;
3248
3249  // Don't try to build an implicit initializer if there were semantic
3250  // errors in any of the initializers (and therefore we might be
3251  // missing some that the user actually wrote).
3252  if (Info.AnyErrorsInInits || Field->isInvalidDecl())
3253    return false;
3254
3255  CXXCtorInitializer *Init = 0;
3256  if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
3257                                     Indirect, Init))
3258    return true;
3259
3260  if (!Init)
3261    return false;
3262
3263  return Info.addFieldInitializer(Init);
3264}
3265
3266bool
3267Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
3268                               CXXCtorInitializer *Initializer) {
3269  assert(Initializer->isDelegatingInitializer());
3270  Constructor->setNumCtorInitializers(1);
3271  CXXCtorInitializer **initializer =
3272    new (Context) CXXCtorInitializer*[1];
3273  memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
3274  Constructor->setCtorInitializers(initializer);
3275
3276  if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
3277    MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
3278    DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
3279  }
3280
3281  DelegatingCtorDecls.push_back(Constructor);
3282
3283  return false;
3284}
3285
3286bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor, bool AnyErrors,
3287                               ArrayRef<CXXCtorInitializer *> Initializers) {
3288  if (Constructor->isDependentContext()) {
3289    // Just store the initializers as written, they will be checked during
3290    // instantiation.
3291    if (!Initializers.empty()) {
3292      Constructor->setNumCtorInitializers(Initializers.size());
3293      CXXCtorInitializer **baseOrMemberInitializers =
3294        new (Context) CXXCtorInitializer*[Initializers.size()];
3295      memcpy(baseOrMemberInitializers, Initializers.data(),
3296             Initializers.size() * sizeof(CXXCtorInitializer*));
3297      Constructor->setCtorInitializers(baseOrMemberInitializers);
3298    }
3299
3300    // Let template instantiation know whether we had errors.
3301    if (AnyErrors)
3302      Constructor->setInvalidDecl();
3303
3304    return false;
3305  }
3306
3307  BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
3308
3309  // We need to build the initializer AST according to order of construction
3310  // and not what user specified in the Initializers list.
3311  CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
3312  if (!ClassDecl)
3313    return true;
3314
3315  bool HadError = false;
3316
3317  for (unsigned i = 0; i < Initializers.size(); i++) {
3318    CXXCtorInitializer *Member = Initializers[i];
3319
3320    if (Member->isBaseInitializer())
3321      Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
3322    else
3323      Info.AllBaseFields[Member->getAnyMember()] = Member;
3324  }
3325
3326  // Keep track of the direct virtual bases.
3327  llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
3328  for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
3329       E = ClassDecl->bases_end(); I != E; ++I) {
3330    if (I->isVirtual())
3331      DirectVBases.insert(I);
3332  }
3333
3334  // Push virtual bases before others.
3335  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3336       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3337
3338    if (CXXCtorInitializer *Value
3339        = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
3340      Info.AllToInit.push_back(Value);
3341    } else if (!AnyErrors) {
3342      bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
3343      CXXCtorInitializer *CXXBaseInit;
3344      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3345                                       VBase, IsInheritedVirtualBase,
3346                                       CXXBaseInit)) {
3347        HadError = true;
3348        continue;
3349      }
3350
3351      Info.AllToInit.push_back(CXXBaseInit);
3352    }
3353  }
3354
3355  // Non-virtual bases.
3356  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3357       E = ClassDecl->bases_end(); Base != E; ++Base) {
3358    // Virtuals are in the virtual base list and already constructed.
3359    if (Base->isVirtual())
3360      continue;
3361
3362    if (CXXCtorInitializer *Value
3363          = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
3364      Info.AllToInit.push_back(Value);
3365    } else if (!AnyErrors) {
3366      CXXCtorInitializer *CXXBaseInit;
3367      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3368                                       Base, /*IsInheritedVirtualBase=*/false,
3369                                       CXXBaseInit)) {
3370        HadError = true;
3371        continue;
3372      }
3373
3374      Info.AllToInit.push_back(CXXBaseInit);
3375    }
3376  }
3377
3378  // Fields.
3379  for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3380                               MemEnd = ClassDecl->decls_end();
3381       Mem != MemEnd; ++Mem) {
3382    if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
3383      // C++ [class.bit]p2:
3384      //   A declaration for a bit-field that omits the identifier declares an
3385      //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
3386      //   initialized.
3387      if (F->isUnnamedBitfield())
3388        continue;
3389
3390      // If we're not generating the implicit copy/move constructor, then we'll
3391      // handle anonymous struct/union fields based on their individual
3392      // indirect fields.
3393      if (F->isAnonymousStructOrUnion() && !Info.isImplicitCopyOrMove())
3394        continue;
3395
3396      if (CollectFieldInitializer(*this, Info, F))
3397        HadError = true;
3398      continue;
3399    }
3400
3401    // Beyond this point, we only consider default initialization.
3402    if (Info.isImplicitCopyOrMove())
3403      continue;
3404
3405    if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
3406      if (F->getType()->isIncompleteArrayType()) {
3407        assert(ClassDecl->hasFlexibleArrayMember() &&
3408               "Incomplete array type is not valid");
3409        continue;
3410      }
3411
3412      // Initialize each field of an anonymous struct individually.
3413      if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
3414        HadError = true;
3415
3416      continue;
3417    }
3418  }
3419
3420  unsigned NumInitializers = Info.AllToInit.size();
3421  if (NumInitializers > 0) {
3422    Constructor->setNumCtorInitializers(NumInitializers);
3423    CXXCtorInitializer **baseOrMemberInitializers =
3424      new (Context) CXXCtorInitializer*[NumInitializers];
3425    memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
3426           NumInitializers * sizeof(CXXCtorInitializer*));
3427    Constructor->setCtorInitializers(baseOrMemberInitializers);
3428
3429    // Constructors implicitly reference the base and member
3430    // destructors.
3431    MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
3432                                           Constructor->getParent());
3433  }
3434
3435  return HadError;
3436}
3437
3438static void PopulateKeysForFields(FieldDecl *Field, SmallVectorImpl<const void*> &IdealInits) {
3439  if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
3440    const RecordDecl *RD = RT->getDecl();
3441    if (RD->isAnonymousStructOrUnion()) {
3442      for (RecordDecl::field_iterator Field = RD->field_begin(),
3443          E = RD->field_end(); Field != E; ++Field)
3444        PopulateKeysForFields(*Field, IdealInits);
3445      return;
3446    }
3447  }
3448  IdealInits.push_back(Field);
3449}
3450
3451static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
3452  return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
3453}
3454
3455static void *GetKeyForMember(ASTContext &Context,
3456                             CXXCtorInitializer *Member) {
3457  if (!Member->isAnyMemberInitializer())
3458    return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
3459
3460  return Member->getAnyMember();
3461}
3462
3463static void DiagnoseBaseOrMemInitializerOrder(
3464    Sema &SemaRef, const CXXConstructorDecl *Constructor,
3465    ArrayRef<CXXCtorInitializer *> Inits) {
3466  if (Constructor->getDeclContext()->isDependentContext())
3467    return;
3468
3469  // Don't check initializers order unless the warning is enabled at the
3470  // location of at least one initializer.
3471  bool ShouldCheckOrder = false;
3472  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3473    CXXCtorInitializer *Init = Inits[InitIndex];
3474    if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
3475                                         Init->getSourceLocation())
3476          != DiagnosticsEngine::Ignored) {
3477      ShouldCheckOrder = true;
3478      break;
3479    }
3480  }
3481  if (!ShouldCheckOrder)
3482    return;
3483
3484  // Build the list of bases and members in the order that they'll
3485  // actually be initialized.  The explicit initializers should be in
3486  // this same order but may be missing things.
3487  SmallVector<const void*, 32> IdealInitKeys;
3488
3489  const CXXRecordDecl *ClassDecl = Constructor->getParent();
3490
3491  // 1. Virtual bases.
3492  for (CXXRecordDecl::base_class_const_iterator VBase =
3493       ClassDecl->vbases_begin(),
3494       E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3495    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
3496
3497  // 2. Non-virtual bases.
3498  for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3499       E = ClassDecl->bases_end(); Base != E; ++Base) {
3500    if (Base->isVirtual())
3501      continue;
3502    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
3503  }
3504
3505  // 3. Direct fields.
3506  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3507       E = ClassDecl->field_end(); Field != E; ++Field) {
3508    if (Field->isUnnamedBitfield())
3509      continue;
3510
3511    PopulateKeysForFields(*Field, IdealInitKeys);
3512  }
3513
3514  unsigned NumIdealInits = IdealInitKeys.size();
3515  unsigned IdealIndex = 0;
3516
3517  CXXCtorInitializer *PrevInit = 0;
3518  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {
3519    CXXCtorInitializer *Init = Inits[InitIndex];
3520    void *InitKey = GetKeyForMember(SemaRef.Context, Init);
3521
3522    // Scan forward to try to find this initializer in the idealized
3523    // initializers list.
3524    for (; IdealIndex != NumIdealInits; ++IdealIndex)
3525      if (InitKey == IdealInitKeys[IdealIndex])
3526        break;
3527
3528    // If we didn't find this initializer, it must be because we
3529    // scanned past it on a previous iteration.  That can only
3530    // happen if we're out of order;  emit a warning.
3531    if (IdealIndex == NumIdealInits && PrevInit) {
3532      Sema::SemaDiagnosticBuilder D =
3533        SemaRef.Diag(PrevInit->getSourceLocation(),
3534                     diag::warn_initializer_out_of_order);
3535
3536      if (PrevInit->isAnyMemberInitializer())
3537        D << 0 << PrevInit->getAnyMember()->getDeclName();
3538      else
3539        D << 1 << PrevInit->getTypeSourceInfo()->getType();
3540
3541      if (Init->isAnyMemberInitializer())
3542        D << 0 << Init->getAnyMember()->getDeclName();
3543      else
3544        D << 1 << Init->getTypeSourceInfo()->getType();
3545
3546      // Move back to the initializer's location in the ideal list.
3547      for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
3548        if (InitKey == IdealInitKeys[IdealIndex])
3549          break;
3550
3551      assert(IdealIndex != NumIdealInits &&
3552             "initializer not found in initializer list");
3553    }
3554
3555    PrevInit = Init;
3556  }
3557}
3558
3559namespace {
3560bool CheckRedundantInit(Sema &S,
3561                        CXXCtorInitializer *Init,
3562                        CXXCtorInitializer *&PrevInit) {
3563  if (!PrevInit) {
3564    PrevInit = Init;
3565    return false;
3566  }
3567
3568  if (FieldDecl *Field = Init->getAnyMember())
3569    S.Diag(Init->getSourceLocation(),
3570           diag::err_multiple_mem_initialization)
3571      << Field->getDeclName()
3572      << Init->getSourceRange();
3573  else {
3574    const Type *BaseClass = Init->getBaseClass();
3575    assert(BaseClass && "neither field nor base");
3576    S.Diag(Init->getSourceLocation(),
3577           diag::err_multiple_base_initialization)
3578      << QualType(BaseClass, 0)
3579      << Init->getSourceRange();
3580  }
3581  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
3582    << 0 << PrevInit->getSourceRange();
3583
3584  return true;
3585}
3586
3587typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
3588typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
3589
3590bool CheckRedundantUnionInit(Sema &S,
3591                             CXXCtorInitializer *Init,
3592                             RedundantUnionMap &Unions) {
3593  FieldDecl *Field = Init->getAnyMember();
3594  RecordDecl *Parent = Field->getParent();
3595  NamedDecl *Child = Field;
3596
3597  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
3598    if (Parent->isUnion()) {
3599      UnionEntry &En = Unions[Parent];
3600      if (En.first && En.first != Child) {
3601        S.Diag(Init->getSourceLocation(),
3602               diag::err_multiple_mem_union_initialization)
3603          << Field->getDeclName()
3604          << Init->getSourceRange();
3605        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
3606          << 0 << En.second->getSourceRange();
3607        return true;
3608      }
3609      if (!En.first) {
3610        En.first = Child;
3611        En.second = Init;
3612      }
3613      if (!Parent->isAnonymousStructOrUnion())
3614        return false;
3615    }
3616
3617    Child = Parent;
3618    Parent = cast<RecordDecl>(Parent->getDeclContext());
3619  }
3620
3621  return false;
3622}
3623}
3624
3625/// ActOnMemInitializers - Handle the member initializers for a constructor.
3626void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
3627                                SourceLocation ColonLoc,
3628                                ArrayRef<CXXCtorInitializer*> MemInits,
3629                                bool AnyErrors) {
3630  if (!ConstructorDecl)
3631    return;
3632
3633  AdjustDeclIfTemplate(ConstructorDecl);
3634
3635  CXXConstructorDecl *Constructor
3636    = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
3637
3638  if (!Constructor) {
3639    Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
3640    return;
3641  }
3642
3643  // Mapping for the duplicate initializers check.
3644  // For member initializers, this is keyed with a FieldDecl*.
3645  // For base initializers, this is keyed with a Type*.
3646  llvm::DenseMap<void*, CXXCtorInitializer *> Members;
3647
3648  // Mapping for the inconsistent anonymous-union initializers check.
3649  RedundantUnionMap MemberUnions;
3650
3651  bool HadError = false;
3652  for (unsigned i = 0; i < MemInits.size(); i++) {
3653    CXXCtorInitializer *Init = MemInits[i];
3654
3655    // Set the source order index.
3656    Init->setSourceOrder(i);
3657
3658    if (Init->isAnyMemberInitializer()) {
3659      FieldDecl *Field = Init->getAnyMember();
3660      if (CheckRedundantInit(*this, Init, Members[Field]) ||
3661          CheckRedundantUnionInit(*this, Init, MemberUnions))
3662        HadError = true;
3663    } else if (Init->isBaseInitializer()) {
3664      void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
3665      if (CheckRedundantInit(*this, Init, Members[Key]))
3666        HadError = true;
3667    } else {
3668      assert(Init->isDelegatingInitializer());
3669      // This must be the only initializer
3670      if (MemInits.size() != 1) {
3671        Diag(Init->getSourceLocation(),
3672             diag::err_delegating_initializer_alone)
3673          << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
3674        // We will treat this as being the only initializer.
3675      }
3676      SetDelegatingInitializer(Constructor, MemInits[i]);
3677      // Return immediately as the initializer is set.
3678      return;
3679    }
3680  }
3681
3682  if (HadError)
3683    return;
3684
3685  DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits);
3686
3687  SetCtorInitializers(Constructor, AnyErrors, MemInits);
3688}
3689
3690void
3691Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
3692                                             CXXRecordDecl *ClassDecl) {
3693  // Ignore dependent contexts. Also ignore unions, since their members never
3694  // have destructors implicitly called.
3695  if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3696    return;
3697
3698  // FIXME: all the access-control diagnostics are positioned on the
3699  // field/base declaration.  That's probably good; that said, the
3700  // user might reasonably want to know why the destructor is being
3701  // emitted, and we currently don't say.
3702
3703  // Non-static data members.
3704  for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3705       E = ClassDecl->field_end(); I != E; ++I) {
3706    FieldDecl *Field = *I;
3707    if (Field->isInvalidDecl())
3708      continue;
3709
3710    // Don't destroy incomplete or zero-length arrays.
3711    if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
3712      continue;
3713
3714    QualType FieldType = Context.getBaseElementType(Field->getType());
3715
3716    const RecordType* RT = FieldType->getAs<RecordType>();
3717    if (!RT)
3718      continue;
3719
3720    CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3721    if (FieldClassDecl->isInvalidDecl())
3722      continue;
3723    if (FieldClassDecl->hasIrrelevantDestructor())
3724      continue;
3725    // The destructor for an implicit anonymous union member is never invoked.
3726    if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
3727      continue;
3728
3729    CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
3730    assert(Dtor && "No dtor found for FieldClassDecl!");
3731    CheckDestructorAccess(Field->getLocation(), Dtor,
3732                          PDiag(diag::err_access_dtor_field)
3733                            << Field->getDeclName()
3734                            << FieldType);
3735
3736    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3737    DiagnoseUseOfDecl(Dtor, Location);
3738  }
3739
3740  llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
3741
3742  // Bases.
3743  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3744       E = ClassDecl->bases_end(); Base != E; ++Base) {
3745    // Bases are always records in a well-formed non-dependent class.
3746    const RecordType *RT = Base->getType()->getAs<RecordType>();
3747
3748    // Remember direct virtual bases.
3749    if (Base->isVirtual())
3750      DirectVirtualBases.insert(RT);
3751
3752    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3753    // If our base class is invalid, we probably can't get its dtor anyway.
3754    if (BaseClassDecl->isInvalidDecl())
3755      continue;
3756    if (BaseClassDecl->hasIrrelevantDestructor())
3757      continue;
3758
3759    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3760    assert(Dtor && "No dtor found for BaseClassDecl!");
3761
3762    // FIXME: caret should be on the start of the class name
3763    CheckDestructorAccess(Base->getLocStart(), Dtor,
3764                          PDiag(diag::err_access_dtor_base)
3765                            << Base->getType()
3766                            << Base->getSourceRange(),
3767                          Context.getTypeDeclType(ClassDecl));
3768
3769    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3770    DiagnoseUseOfDecl(Dtor, Location);
3771  }
3772
3773  // Virtual bases.
3774  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3775       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3776
3777    // Bases are always records in a well-formed non-dependent class.
3778    const RecordType *RT = VBase->getType()->castAs<RecordType>();
3779
3780    // Ignore direct virtual bases.
3781    if (DirectVirtualBases.count(RT))
3782      continue;
3783
3784    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3785    // If our base class is invalid, we probably can't get its dtor anyway.
3786    if (BaseClassDecl->isInvalidDecl())
3787      continue;
3788    if (BaseClassDecl->hasIrrelevantDestructor())
3789      continue;
3790
3791    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3792    assert(Dtor && "No dtor found for BaseClassDecl!");
3793    if (CheckDestructorAccess(
3794            ClassDecl->getLocation(), Dtor,
3795            PDiag(diag::err_access_dtor_vbase)
3796                << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
3797            Context.getTypeDeclType(ClassDecl)) ==
3798        AR_accessible) {
3799      CheckDerivedToBaseConversion(
3800          Context.getTypeDeclType(ClassDecl), VBase->getType(),
3801          diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
3802          SourceRange(), DeclarationName(), 0);
3803    }
3804
3805    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3806    DiagnoseUseOfDecl(Dtor, Location);
3807  }
3808}
3809
3810void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
3811  if (!CDtorDecl)
3812    return;
3813
3814  if (CXXConstructorDecl *Constructor
3815      = dyn_cast<CXXConstructorDecl>(CDtorDecl))
3816    SetCtorInitializers(Constructor, /*AnyErrors=*/false);
3817}
3818
3819bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3820                                  unsigned DiagID, AbstractDiagSelID SelID) {
3821  class NonAbstractTypeDiagnoser : public TypeDiagnoser {
3822    unsigned DiagID;
3823    AbstractDiagSelID SelID;
3824
3825  public:
3826    NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
3827      : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
3828
3829    virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
3830      if (Suppressed) return;
3831      if (SelID == -1)
3832        S.Diag(Loc, DiagID) << T;
3833      else
3834        S.Diag(Loc, DiagID) << SelID << T;
3835    }
3836  } Diagnoser(DiagID, SelID);
3837
3838  return RequireNonAbstractType(Loc, T, Diagnoser);
3839}
3840
3841bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3842                                  TypeDiagnoser &Diagnoser) {
3843  if (!getLangOpts().CPlusPlus)
3844    return false;
3845
3846  if (const ArrayType *AT = Context.getAsArrayType(T))
3847    return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3848
3849  if (const PointerType *PT = T->getAs<PointerType>()) {
3850    // Find the innermost pointer type.
3851    while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
3852      PT = T;
3853
3854    if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
3855      return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3856  }
3857
3858  const RecordType *RT = T->getAs<RecordType>();
3859  if (!RT)
3860    return false;
3861
3862  const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3863
3864  // We can't answer whether something is abstract until it has a
3865  // definition.  If it's currently being defined, we'll walk back
3866  // over all the declarations when we have a full definition.
3867  const CXXRecordDecl *Def = RD->getDefinition();
3868  if (!Def || Def->isBeingDefined())
3869    return false;
3870
3871  if (!RD->isAbstract())
3872    return false;
3873
3874  Diagnoser.diagnose(*this, Loc, T);
3875  DiagnoseAbstractType(RD);
3876
3877  return true;
3878}
3879
3880void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
3881  // Check if we've already emitted the list of pure virtual functions
3882  // for this class.
3883  if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
3884    return;
3885
3886  CXXFinalOverriderMap FinalOverriders;
3887  RD->getFinalOverriders(FinalOverriders);
3888
3889  // Keep a set of seen pure methods so we won't diagnose the same method
3890  // more than once.
3891  llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
3892
3893  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
3894                                   MEnd = FinalOverriders.end();
3895       M != MEnd;
3896       ++M) {
3897    for (OverridingMethods::iterator SO = M->second.begin(),
3898                                  SOEnd = M->second.end();
3899         SO != SOEnd; ++SO) {
3900      // C++ [class.abstract]p4:
3901      //   A class is abstract if it contains or inherits at least one
3902      //   pure virtual function for which the final overrider is pure
3903      //   virtual.
3904
3905      //
3906      if (SO->second.size() != 1)
3907        continue;
3908
3909      if (!SO->second.front().Method->isPure())
3910        continue;
3911
3912      if (!SeenPureMethods.insert(SO->second.front().Method))
3913        continue;
3914
3915      Diag(SO->second.front().Method->getLocation(),
3916           diag::note_pure_virtual_function)
3917        << SO->second.front().Method->getDeclName() << RD->getDeclName();
3918    }
3919  }
3920
3921  if (!PureVirtualClassDiagSet)
3922    PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
3923  PureVirtualClassDiagSet->insert(RD);
3924}
3925
3926namespace {
3927struct AbstractUsageInfo {
3928  Sema &S;
3929  CXXRecordDecl *Record;
3930  CanQualType AbstractType;
3931  bool Invalid;
3932
3933  AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
3934    : S(S), Record(Record),
3935      AbstractType(S.Context.getCanonicalType(
3936                   S.Context.getTypeDeclType(Record))),
3937      Invalid(false) {}
3938
3939  void DiagnoseAbstractType() {
3940    if (Invalid) return;
3941    S.DiagnoseAbstractType(Record);
3942    Invalid = true;
3943  }
3944
3945  void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
3946};
3947
3948struct CheckAbstractUsage {
3949  AbstractUsageInfo &Info;
3950  const NamedDecl *Ctx;
3951
3952  CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
3953    : Info(Info), Ctx(Ctx) {}
3954
3955  void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
3956    switch (TL.getTypeLocClass()) {
3957#define ABSTRACT_TYPELOC(CLASS, PARENT)
3958#define TYPELOC(CLASS, PARENT) \
3959    case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
3960#include "clang/AST/TypeLocNodes.def"
3961    }
3962  }
3963
3964  void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3965    Visit(TL.getResultLoc(), Sema::AbstractReturnType);
3966    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3967      if (!TL.getArg(I))
3968        continue;
3969
3970      TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
3971      if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
3972    }
3973  }
3974
3975  void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3976    Visit(TL.getElementLoc(), Sema::AbstractArrayType);
3977  }
3978
3979  void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3980    // Visit the type parameters from a permissive context.
3981    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3982      TemplateArgumentLoc TAL = TL.getArgLoc(I);
3983      if (TAL.getArgument().getKind() == TemplateArgument::Type)
3984        if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
3985          Visit(TSI->getTypeLoc(), Sema::AbstractNone);
3986      // TODO: other template argument types?
3987    }
3988  }
3989
3990  // Visit pointee types from a permissive context.
3991#define CheckPolymorphic(Type) \
3992  void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
3993    Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
3994  }
3995  CheckPolymorphic(PointerTypeLoc)
3996  CheckPolymorphic(ReferenceTypeLoc)
3997  CheckPolymorphic(MemberPointerTypeLoc)
3998  CheckPolymorphic(BlockPointerTypeLoc)
3999  CheckPolymorphic(AtomicTypeLoc)
4000
4001  /// Handle all the types we haven't given a more specific
4002  /// implementation for above.
4003  void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
4004    // Every other kind of type that we haven't called out already
4005    // that has an inner type is either (1) sugar or (2) contains that
4006    // inner type in some way as a subobject.
4007    if (TypeLoc Next = TL.getNextTypeLoc())
4008      return Visit(Next, Sel);
4009
4010    // If there's no inner type and we're in a permissive context,
4011    // don't diagnose.
4012    if (Sel == Sema::AbstractNone) return;
4013
4014    // Check whether the type matches the abstract type.
4015    QualType T = TL.getType();
4016    if (T->isArrayType()) {
4017      Sel = Sema::AbstractArrayType;
4018      T = Info.S.Context.getBaseElementType(T);
4019    }
4020    CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
4021    if (CT != Info.AbstractType) return;
4022
4023    // It matched; do some magic.
4024    if (Sel == Sema::AbstractArrayType) {
4025      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
4026        << T << TL.getSourceRange();
4027    } else {
4028      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
4029        << Sel << T << TL.getSourceRange();
4030    }
4031    Info.DiagnoseAbstractType();
4032  }
4033};
4034
4035void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
4036                                  Sema::AbstractDiagSelID Sel) {
4037  CheckAbstractUsage(*this, D).Visit(TL, Sel);
4038}
4039
4040}
4041
4042/// Check for invalid uses of an abstract type in a method declaration.
4043static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4044                                    CXXMethodDecl *MD) {
4045  // No need to do the check on definitions, which require that
4046  // the return/param types be complete.
4047  if (MD->doesThisDeclarationHaveABody())
4048    return;
4049
4050  // For safety's sake, just ignore it if we don't have type source
4051  // information.  This should never happen for non-implicit methods,
4052  // but...
4053  if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
4054    Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
4055}
4056
4057/// Check for invalid uses of an abstract type within a class definition.
4058static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
4059                                    CXXRecordDecl *RD) {
4060  for (CXXRecordDecl::decl_iterator
4061         I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
4062    Decl *D = *I;
4063    if (D->isImplicit()) continue;
4064
4065    // Methods and method templates.
4066    if (isa<CXXMethodDecl>(D)) {
4067      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
4068    } else if (isa<FunctionTemplateDecl>(D)) {
4069      FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
4070      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
4071
4072    // Fields and static variables.
4073    } else if (isa<FieldDecl>(D)) {
4074      FieldDecl *FD = cast<FieldDecl>(D);
4075      if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
4076        Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
4077    } else if (isa<VarDecl>(D)) {
4078      VarDecl *VD = cast<VarDecl>(D);
4079      if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
4080        Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
4081
4082    // Nested classes and class templates.
4083    } else if (isa<CXXRecordDecl>(D)) {
4084      CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
4085    } else if (isa<ClassTemplateDecl>(D)) {
4086      CheckAbstractClassUsage(Info,
4087                             cast<ClassTemplateDecl>(D)->getTemplatedDecl());
4088    }
4089  }
4090}
4091
4092/// \brief Perform semantic checks on a class definition that has been
4093/// completing, introducing implicitly-declared members, checking for
4094/// abstract types, etc.
4095void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
4096  if (!Record)
4097    return;
4098
4099  if (Record->isAbstract() && !Record->isInvalidDecl()) {
4100    AbstractUsageInfo Info(*this, Record);
4101    CheckAbstractClassUsage(Info, Record);
4102  }
4103
4104  // If this is not an aggregate type and has no user-declared constructor,
4105  // complain about any non-static data members of reference or const scalar
4106  // type, since they will never get initializers.
4107  if (!Record->isInvalidDecl() && !Record->isDependentType() &&
4108      !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
4109      !Record->isLambda()) {
4110    bool Complained = false;
4111    for (RecordDecl::field_iterator F = Record->field_begin(),
4112                                 FEnd = Record->field_end();
4113         F != FEnd; ++F) {
4114      if (F->hasInClassInitializer() || F->isUnnamedBitfield())
4115        continue;
4116
4117      if (F->getType()->isReferenceType() ||
4118          (F->getType().isConstQualified() && F->getType()->isScalarType())) {
4119        if (!Complained) {
4120          Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
4121            << Record->getTagKind() << Record;
4122          Complained = true;
4123        }
4124
4125        Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
4126          << F->getType()->isReferenceType()
4127          << F->getDeclName();
4128      }
4129    }
4130  }
4131
4132  if (Record->isDynamicClass() && !Record->isDependentType())
4133    DynamicClasses.push_back(Record);
4134
4135  if (Record->getIdentifier()) {
4136    // C++ [class.mem]p13:
4137    //   If T is the name of a class, then each of the following shall have a
4138    //   name different from T:
4139    //     - every member of every anonymous union that is a member of class T.
4140    //
4141    // C++ [class.mem]p14:
4142    //   In addition, if class T has a user-declared constructor (12.1), every
4143    //   non-static data member of class T shall have a name different from T.
4144    DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
4145    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
4146         ++I) {
4147      NamedDecl *D = *I;
4148      if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
4149          isa<IndirectFieldDecl>(D)) {
4150        Diag(D->getLocation(), diag::err_member_name_of_class)
4151          << D->getDeclName();
4152        break;
4153      }
4154    }
4155  }
4156
4157  // Warn if the class has virtual methods but non-virtual public destructor.
4158  if (Record->isPolymorphic() && !Record->isDependentType()) {
4159    CXXDestructorDecl *dtor = Record->getDestructor();
4160    if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
4161      Diag(dtor ? dtor->getLocation() : Record->getLocation(),
4162           diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
4163  }
4164
4165  if (Record->isAbstract() && Record->hasAttr<FinalAttr>()) {
4166    Diag(Record->getLocation(), diag::warn_abstract_final_class);
4167    DiagnoseAbstractType(Record);
4168  }
4169
4170  if (!Record->isDependentType()) {
4171    for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4172                                     MEnd = Record->method_end();
4173         M != MEnd; ++M) {
4174      // See if a method overloads virtual methods in a base
4175      // class without overriding any.
4176      if (!M->isStatic())
4177        DiagnoseHiddenVirtualMethods(Record, *M);
4178
4179      // Check whether the explicitly-defaulted special members are valid.
4180      if (!M->isInvalidDecl() && M->isExplicitlyDefaulted())
4181        CheckExplicitlyDefaultedSpecialMember(*M);
4182
4183      // For an explicitly defaulted or deleted special member, we defer
4184      // determining triviality until the class is complete. That time is now!
4185      if (!M->isImplicit() && !M->isUserProvided()) {
4186        CXXSpecialMember CSM = getSpecialMember(*M);
4187        if (CSM != CXXInvalid) {
4188          M->setTrivial(SpecialMemberIsTrivial(*M, CSM));
4189
4190          // Inform the class that we've finished declaring this member.
4191          Record->finishedDefaultedOrDeletedMember(*M);
4192        }
4193      }
4194    }
4195  }
4196
4197  // C++11 [dcl.constexpr]p8: A constexpr specifier for a non-static member
4198  // function that is not a constructor declares that member function to be
4199  // const. [...] The class of which that function is a member shall be
4200  // a literal type.
4201  //
4202  // If the class has virtual bases, any constexpr members will already have
4203  // been diagnosed by the checks performed on the member declaration, so
4204  // suppress this (less useful) diagnostic.
4205  //
4206  // We delay this until we know whether an explicitly-defaulted (or deleted)
4207  // destructor for the class is trivial.
4208  if (LangOpts.CPlusPlus11 && !Record->isDependentType() &&
4209      !Record->isLiteral() && !Record->getNumVBases()) {
4210    for (CXXRecordDecl::method_iterator M = Record->method_begin(),
4211                                     MEnd = Record->method_end();
4212         M != MEnd; ++M) {
4213      if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
4214        switch (Record->getTemplateSpecializationKind()) {
4215        case TSK_ImplicitInstantiation:
4216        case TSK_ExplicitInstantiationDeclaration:
4217        case TSK_ExplicitInstantiationDefinition:
4218          // If a template instantiates to a non-literal type, but its members
4219          // instantiate to constexpr functions, the template is technically
4220          // ill-formed, but we allow it for sanity.
4221          continue;
4222
4223        case TSK_Undeclared:
4224        case TSK_ExplicitSpecialization:
4225          RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
4226                             diag::err_constexpr_method_non_literal);
4227          break;
4228        }
4229
4230        // Only produce one error per class.
4231        break;
4232      }
4233    }
4234  }
4235
4236  // Declare inheriting constructors. We do this eagerly here because:
4237  // - The standard requires an eager diagnostic for conflicting inheriting
4238  //   constructors from different classes.
4239  // - The lazy declaration of the other implicit constructors is so as to not
4240  //   waste space and performance on classes that are not meant to be
4241  //   instantiated (e.g. meta-functions). This doesn't apply to classes that
4242  //   have inheriting constructors.
4243  DeclareInheritingConstructors(Record);
4244}
4245
4246/// Is the special member function which would be selected to perform the
4247/// specified operation on the specified class type a constexpr constructor?
4248static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4249                                     Sema::CXXSpecialMember CSM,
4250                                     bool ConstArg) {
4251  Sema::SpecialMemberOverloadResult *SMOR =
4252      S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
4253                            false, false, false, false);
4254  if (!SMOR || !SMOR->getMethod())
4255    // A constructor we wouldn't select can't be "involved in initializing"
4256    // anything.
4257    return true;
4258  return SMOR->getMethod()->isConstexpr();
4259}
4260
4261/// Determine whether the specified special member function would be constexpr
4262/// if it were implicitly defined.
4263static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4264                                              Sema::CXXSpecialMember CSM,
4265                                              bool ConstArg) {
4266  if (!S.getLangOpts().CPlusPlus11)
4267    return false;
4268
4269  // C++11 [dcl.constexpr]p4:
4270  // In the definition of a constexpr constructor [...]
4271  bool Ctor = true;
4272  switch (CSM) {
4273  case Sema::CXXDefaultConstructor:
4274    // Since default constructor lookup is essentially trivial (and cannot
4275    // involve, for instance, template instantiation), we compute whether a
4276    // defaulted default constructor is constexpr directly within CXXRecordDecl.
4277    //
4278    // This is important for performance; we need to know whether the default
4279    // constructor is constexpr to determine whether the type is a literal type.
4280    return ClassDecl->defaultedDefaultConstructorIsConstexpr();
4281
4282  case Sema::CXXCopyConstructor:
4283  case Sema::CXXMoveConstructor:
4284    // For copy or move constructors, we need to perform overload resolution.
4285    break;
4286
4287  case Sema::CXXCopyAssignment:
4288  case Sema::CXXMoveAssignment:
4289    if (!S.getLangOpts().CPlusPlus1y)
4290      return false;
4291    // In C++1y, we need to perform overload resolution.
4292    Ctor = false;
4293    break;
4294
4295  case Sema::CXXDestructor:
4296  case Sema::CXXInvalid:
4297    return false;
4298  }
4299
4300  //   -- if the class is a non-empty union, or for each non-empty anonymous
4301  //      union member of a non-union class, exactly one non-static data member
4302  //      shall be initialized; [DR1359]
4303  //
4304  // If we squint, this is guaranteed, since exactly one non-static data member
4305  // will be initialized (if the constructor isn't deleted), we just don't know
4306  // which one.
4307  if (Ctor && ClassDecl->isUnion())
4308    return true;
4309
4310  //   -- the class shall not have any virtual base classes;
4311  if (Ctor && ClassDecl->getNumVBases())
4312    return false;
4313
4314  // C++1y [class.copy]p26:
4315  //   -- [the class] is a literal type, and
4316  if (!Ctor && !ClassDecl->isLiteral())
4317    return false;
4318
4319  //   -- every constructor involved in initializing [...] base class
4320  //      sub-objects shall be a constexpr constructor;
4321  //   -- the assignment operator selected to copy/move each direct base
4322  //      class is a constexpr function, and
4323  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
4324                                       BEnd = ClassDecl->bases_end();
4325       B != BEnd; ++B) {
4326    const RecordType *BaseType = B->getType()->getAs<RecordType>();
4327    if (!BaseType) continue;
4328
4329    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
4330    if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, ConstArg))
4331      return false;
4332  }
4333
4334  //   -- every constructor involved in initializing non-static data members
4335  //      [...] shall be a constexpr constructor;
4336  //   -- every non-static data member and base class sub-object shall be
4337  //      initialized
4338  //   -- for each non-stastic data member of X that is of class type (or array
4339  //      thereof), the assignment operator selected to copy/move that member is
4340  //      a constexpr function
4341  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
4342                               FEnd = ClassDecl->field_end();
4343       F != FEnd; ++F) {
4344    if (F->isInvalidDecl())
4345      continue;
4346    if (const RecordType *RecordTy =
4347            S.Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
4348      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
4349      if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, ConstArg))
4350        return false;
4351    }
4352  }
4353
4354  // All OK, it's constexpr!
4355  return true;
4356}
4357
4358static Sema::ImplicitExceptionSpecification
4359computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
4360  switch (S.getSpecialMember(MD)) {
4361  case Sema::CXXDefaultConstructor:
4362    return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
4363  case Sema::CXXCopyConstructor:
4364    return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
4365  case Sema::CXXCopyAssignment:
4366    return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
4367  case Sema::CXXMoveConstructor:
4368    return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
4369  case Sema::CXXMoveAssignment:
4370    return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
4371  case Sema::CXXDestructor:
4372    return S.ComputeDefaultedDtorExceptionSpec(MD);
4373  case Sema::CXXInvalid:
4374    break;
4375  }
4376  assert(cast<CXXConstructorDecl>(MD)->getInheritedConstructor() &&
4377         "only special members have implicit exception specs");
4378  return S.ComputeInheritingCtorExceptionSpec(cast<CXXConstructorDecl>(MD));
4379}
4380
4381static void
4382updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
4383                    const Sema::ImplicitExceptionSpecification &ExceptSpec) {
4384  FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
4385  ExceptSpec.getEPI(EPI);
4386  FD->setType(S.Context.getFunctionType(FPT->getResultType(),
4387                                        FPT->getArgTypes(), EPI));
4388}
4389
4390void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
4391  const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
4392  if (FPT->getExceptionSpecType() != EST_Unevaluated)
4393    return;
4394
4395  // Evaluate the exception specification.
4396  ImplicitExceptionSpecification ExceptSpec =
4397      computeImplicitExceptionSpec(*this, Loc, MD);
4398
4399  // Update the type of the special member to use it.
4400  updateExceptionSpec(*this, MD, FPT, ExceptSpec);
4401
4402  // A user-provided destructor can be defined outside the class. When that
4403  // happens, be sure to update the exception specification on both
4404  // declarations.
4405  const FunctionProtoType *CanonicalFPT =
4406    MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
4407  if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
4408    updateExceptionSpec(*this, MD->getCanonicalDecl(),
4409                        CanonicalFPT, ExceptSpec);
4410}
4411
4412void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
4413  CXXRecordDecl *RD = MD->getParent();
4414  CXXSpecialMember CSM = getSpecialMember(MD);
4415
4416  assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
4417         "not an explicitly-defaulted special member");
4418
4419  // Whether this was the first-declared instance of the constructor.
4420  // This affects whether we implicitly add an exception spec and constexpr.
4421  bool First = MD == MD->getCanonicalDecl();
4422
4423  bool HadError = false;
4424
4425  // C++11 [dcl.fct.def.default]p1:
4426  //   A function that is explicitly defaulted shall
4427  //     -- be a special member function (checked elsewhere),
4428  //     -- have the same type (except for ref-qualifiers, and except that a
4429  //        copy operation can take a non-const reference) as an implicit
4430  //        declaration, and
4431  //     -- not have default arguments.
4432  unsigned ExpectedParams = 1;
4433  if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
4434    ExpectedParams = 0;
4435  if (MD->getNumParams() != ExpectedParams) {
4436    // This also checks for default arguments: a copy or move constructor with a
4437    // default argument is classified as a default constructor, and assignment
4438    // operations and destructors can't have default arguments.
4439    Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
4440      << CSM << MD->getSourceRange();
4441    HadError = true;
4442  } else if (MD->isVariadic()) {
4443    Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic)
4444      << CSM << MD->getSourceRange();
4445    HadError = true;
4446  }
4447
4448  const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
4449
4450  bool CanHaveConstParam = false;
4451  if (CSM == CXXCopyConstructor)
4452    CanHaveConstParam = RD->implicitCopyConstructorHasConstParam();
4453  else if (CSM == CXXCopyAssignment)
4454    CanHaveConstParam = RD->implicitCopyAssignmentHasConstParam();
4455
4456  QualType ReturnType = Context.VoidTy;
4457  if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
4458    // Check for return type matching.
4459    ReturnType = Type->getResultType();
4460    QualType ExpectedReturnType =
4461        Context.getLValueReferenceType(Context.getTypeDeclType(RD));
4462    if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
4463      Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
4464        << (CSM == CXXMoveAssignment) << ExpectedReturnType;
4465      HadError = true;
4466    }
4467
4468    // A defaulted special member cannot have cv-qualifiers.
4469    if (Type->getTypeQuals()) {
4470      Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
4471        << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus1y;
4472      HadError = true;
4473    }
4474  }
4475
4476  // Check for parameter type matching.
4477  QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
4478  bool HasConstParam = false;
4479  if (ExpectedParams && ArgType->isReferenceType()) {
4480    // Argument must be reference to possibly-const T.
4481    QualType ReferentType = ArgType->getPointeeType();
4482    HasConstParam = ReferentType.isConstQualified();
4483
4484    if (ReferentType.isVolatileQualified()) {
4485      Diag(MD->getLocation(),
4486           diag::err_defaulted_special_member_volatile_param) << CSM;
4487      HadError = true;
4488    }
4489
4490    if (HasConstParam && !CanHaveConstParam) {
4491      if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
4492        Diag(MD->getLocation(),
4493             diag::err_defaulted_special_member_copy_const_param)
4494          << (CSM == CXXCopyAssignment);
4495        // FIXME: Explain why this special member can't be const.
4496      } else {
4497        Diag(MD->getLocation(),
4498             diag::err_defaulted_special_member_move_const_param)
4499          << (CSM == CXXMoveAssignment);
4500      }
4501      HadError = true;
4502    }
4503  } else if (ExpectedParams) {
4504    // A copy assignment operator can take its argument by value, but a
4505    // defaulted one cannot.
4506    assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
4507    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
4508    HadError = true;
4509  }
4510
4511  // C++11 [dcl.fct.def.default]p2:
4512  //   An explicitly-defaulted function may be declared constexpr only if it
4513  //   would have been implicitly declared as constexpr,
4514  // Do not apply this rule to members of class templates, since core issue 1358
4515  // makes such functions always instantiate to constexpr functions. For
4516  // functions which cannot be constexpr (for non-constructors in C++11 and for
4517  // destructors in C++1y), this is checked elsewhere.
4518  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
4519                                                     HasConstParam);
4520  if ((getLangOpts().CPlusPlus1y ? !isa<CXXDestructorDecl>(MD)
4521                                 : isa<CXXConstructorDecl>(MD)) &&
4522      MD->isConstexpr() && !Constexpr &&
4523      MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
4524    Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
4525    // FIXME: Explain why the special member can't be constexpr.
4526    HadError = true;
4527  }
4528
4529  //   and may have an explicit exception-specification only if it is compatible
4530  //   with the exception-specification on the implicit declaration.
4531  if (Type->hasExceptionSpec()) {
4532    // Delay the check if this is the first declaration of the special member,
4533    // since we may not have parsed some necessary in-class initializers yet.
4534    if (First) {
4535      // If the exception specification needs to be instantiated, do so now,
4536      // before we clobber it with an EST_Unevaluated specification below.
4537      if (Type->getExceptionSpecType() == EST_Uninstantiated) {
4538        InstantiateExceptionSpec(MD->getLocStart(), MD);
4539        Type = MD->getType()->getAs<FunctionProtoType>();
4540      }
4541      DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type));
4542    } else
4543      CheckExplicitlyDefaultedMemberExceptionSpec(MD, Type);
4544  }
4545
4546  //   If a function is explicitly defaulted on its first declaration,
4547  if (First) {
4548    //  -- it is implicitly considered to be constexpr if the implicit
4549    //     definition would be,
4550    MD->setConstexpr(Constexpr);
4551
4552    //  -- it is implicitly considered to have the same exception-specification
4553    //     as if it had been implicitly declared,
4554    FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
4555    EPI.ExceptionSpecType = EST_Unevaluated;
4556    EPI.ExceptionSpecDecl = MD;
4557    MD->setType(Context.getFunctionType(ReturnType,
4558                                        ArrayRef<QualType>(&ArgType,
4559                                                           ExpectedParams),
4560                                        EPI));
4561  }
4562
4563  if (ShouldDeleteSpecialMember(MD, CSM)) {
4564    if (First) {
4565      SetDeclDeleted(MD, MD->getLocation());
4566    } else {
4567      // C++11 [dcl.fct.def.default]p4:
4568      //   [For a] user-provided explicitly-defaulted function [...] if such a
4569      //   function is implicitly defined as deleted, the program is ill-formed.
4570      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
4571      HadError = true;
4572    }
4573  }
4574
4575  if (HadError)
4576    MD->setInvalidDecl();
4577}
4578
4579/// Check whether the exception specification provided for an
4580/// explicitly-defaulted special member matches the exception specification
4581/// that would have been generated for an implicit special member, per
4582/// C++11 [dcl.fct.def.default]p2.
4583void Sema::CheckExplicitlyDefaultedMemberExceptionSpec(
4584    CXXMethodDecl *MD, const FunctionProtoType *SpecifiedType) {
4585  // Compute the implicit exception specification.
4586  FunctionProtoType::ExtProtoInfo EPI;
4587  computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
4588  const FunctionProtoType *ImplicitType = cast<FunctionProtoType>(
4589    Context.getFunctionType(Context.VoidTy, None, EPI));
4590
4591  // Ensure that it matches.
4592  CheckEquivalentExceptionSpec(
4593    PDiag(diag::err_incorrect_defaulted_exception_spec)
4594      << getSpecialMember(MD), PDiag(),
4595    ImplicitType, SourceLocation(),
4596    SpecifiedType, MD->getLocation());
4597}
4598
4599void Sema::CheckDelayedExplicitlyDefaultedMemberExceptionSpecs() {
4600  for (unsigned I = 0, N = DelayedDefaultedMemberExceptionSpecs.size();
4601       I != N; ++I)
4602    CheckExplicitlyDefaultedMemberExceptionSpec(
4603      DelayedDefaultedMemberExceptionSpecs[I].first,
4604      DelayedDefaultedMemberExceptionSpecs[I].second);
4605
4606  DelayedDefaultedMemberExceptionSpecs.clear();
4607}
4608
4609namespace {
4610struct SpecialMemberDeletionInfo {
4611  Sema &S;
4612  CXXMethodDecl *MD;
4613  Sema::CXXSpecialMember CSM;
4614  bool Diagnose;
4615
4616  // Properties of the special member, computed for convenience.
4617  bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
4618  SourceLocation Loc;
4619
4620  bool AllFieldsAreConst;
4621
4622  SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
4623                            Sema::CXXSpecialMember CSM, bool Diagnose)
4624    : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
4625      IsConstructor(false), IsAssignment(false), IsMove(false),
4626      ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
4627      AllFieldsAreConst(true) {
4628    switch (CSM) {
4629      case Sema::CXXDefaultConstructor:
4630      case Sema::CXXCopyConstructor:
4631        IsConstructor = true;
4632        break;
4633      case Sema::CXXMoveConstructor:
4634        IsConstructor = true;
4635        IsMove = true;
4636        break;
4637      case Sema::CXXCopyAssignment:
4638        IsAssignment = true;
4639        break;
4640      case Sema::CXXMoveAssignment:
4641        IsAssignment = true;
4642        IsMove = true;
4643        break;
4644      case Sema::CXXDestructor:
4645        break;
4646      case Sema::CXXInvalid:
4647        llvm_unreachable("invalid special member kind");
4648    }
4649
4650    if (MD->getNumParams()) {
4651      ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
4652      VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
4653    }
4654  }
4655
4656  bool inUnion() const { return MD->getParent()->isUnion(); }
4657
4658  /// Look up the corresponding special member in the given class.
4659  Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
4660                                              unsigned Quals) {
4661    unsigned TQ = MD->getTypeQualifiers();
4662    // cv-qualifiers on class members don't affect default ctor / dtor calls.
4663    if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
4664      Quals = 0;
4665    return S.LookupSpecialMember(Class, CSM,
4666                                 ConstArg || (Quals & Qualifiers::Const),
4667                                 VolatileArg || (Quals & Qualifiers::Volatile),
4668                                 MD->getRefQualifier() == RQ_RValue,
4669                                 TQ & Qualifiers::Const,
4670                                 TQ & Qualifiers::Volatile);
4671  }
4672
4673  typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
4674
4675  bool shouldDeleteForBase(CXXBaseSpecifier *Base);
4676  bool shouldDeleteForField(FieldDecl *FD);
4677  bool shouldDeleteForAllConstMembers();
4678
4679  bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
4680                                     unsigned Quals);
4681  bool shouldDeleteForSubobjectCall(Subobject Subobj,
4682                                    Sema::SpecialMemberOverloadResult *SMOR,
4683                                    bool IsDtorCallInCtor);
4684
4685  bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
4686};
4687}
4688
4689/// Is the given special member inaccessible when used on the given
4690/// sub-object.
4691bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
4692                                             CXXMethodDecl *target) {
4693  /// If we're operating on a base class, the object type is the
4694  /// type of this special member.
4695  QualType objectTy;
4696  AccessSpecifier access = target->getAccess();
4697  if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
4698    objectTy = S.Context.getTypeDeclType(MD->getParent());
4699    access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
4700
4701  // If we're operating on a field, the object type is the type of the field.
4702  } else {
4703    objectTy = S.Context.getTypeDeclType(target->getParent());
4704  }
4705
4706  return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
4707}
4708
4709/// Check whether we should delete a special member due to the implicit
4710/// definition containing a call to a special member of a subobject.
4711bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
4712    Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
4713    bool IsDtorCallInCtor) {
4714  CXXMethodDecl *Decl = SMOR->getMethod();
4715  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4716
4717  int DiagKind = -1;
4718
4719  if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
4720    DiagKind = !Decl ? 0 : 1;
4721  else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
4722    DiagKind = 2;
4723  else if (!isAccessible(Subobj, Decl))
4724    DiagKind = 3;
4725  else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
4726           !Decl->isTrivial()) {
4727    // A member of a union must have a trivial corresponding special member.
4728    // As a weird special case, a destructor call from a union's constructor
4729    // must be accessible and non-deleted, but need not be trivial. Such a
4730    // destructor is never actually called, but is semantically checked as
4731    // if it were.
4732    DiagKind = 4;
4733  }
4734
4735  if (DiagKind == -1)
4736    return false;
4737
4738  if (Diagnose) {
4739    if (Field) {
4740      S.Diag(Field->getLocation(),
4741             diag::note_deleted_special_member_class_subobject)
4742        << CSM << MD->getParent() << /*IsField*/true
4743        << Field << DiagKind << IsDtorCallInCtor;
4744    } else {
4745      CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
4746      S.Diag(Base->getLocStart(),
4747             diag::note_deleted_special_member_class_subobject)
4748        << CSM << MD->getParent() << /*IsField*/false
4749        << Base->getType() << DiagKind << IsDtorCallInCtor;
4750    }
4751
4752    if (DiagKind == 1)
4753      S.NoteDeletedFunction(Decl);
4754    // FIXME: Explain inaccessibility if DiagKind == 3.
4755  }
4756
4757  return true;
4758}
4759
4760/// Check whether we should delete a special member function due to having a
4761/// direct or virtual base class or non-static data member of class type M.
4762bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
4763    CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
4764  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4765
4766  // C++11 [class.ctor]p5:
4767  // -- any direct or virtual base class, or non-static data member with no
4768  //    brace-or-equal-initializer, has class type M (or array thereof) and
4769  //    either M has no default constructor or overload resolution as applied
4770  //    to M's default constructor results in an ambiguity or in a function
4771  //    that is deleted or inaccessible
4772  // C++11 [class.copy]p11, C++11 [class.copy]p23:
4773  // -- a direct or virtual base class B that cannot be copied/moved because
4774  //    overload resolution, as applied to B's corresponding special member,
4775  //    results in an ambiguity or a function that is deleted or inaccessible
4776  //    from the defaulted special member
4777  // C++11 [class.dtor]p5:
4778  // -- any direct or virtual base class [...] has a type with a destructor
4779  //    that is deleted or inaccessible
4780  if (!(CSM == Sema::CXXDefaultConstructor &&
4781        Field && Field->hasInClassInitializer()) &&
4782      shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals), false))
4783    return true;
4784
4785  // C++11 [class.ctor]p5, C++11 [class.copy]p11:
4786  // -- any direct or virtual base class or non-static data member has a
4787  //    type with a destructor that is deleted or inaccessible
4788  if (IsConstructor) {
4789    Sema::SpecialMemberOverloadResult *SMOR =
4790        S.LookupSpecialMember(Class, Sema::CXXDestructor,
4791                              false, false, false, false, false);
4792    if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
4793      return true;
4794  }
4795
4796  return false;
4797}
4798
4799/// Check whether we should delete a special member function due to the class
4800/// having a particular direct or virtual base class.
4801bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
4802  CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
4803  return shouldDeleteForClassSubobject(BaseClass, Base, 0);
4804}
4805
4806/// Check whether we should delete a special member function due to the class
4807/// having a particular non-static data member.
4808bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
4809  QualType FieldType = S.Context.getBaseElementType(FD->getType());
4810  CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4811
4812  if (CSM == Sema::CXXDefaultConstructor) {
4813    // For a default constructor, all references must be initialized in-class
4814    // and, if a union, it must have a non-const member.
4815    if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
4816      if (Diagnose)
4817        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4818          << MD->getParent() << FD << FieldType << /*Reference*/0;
4819      return true;
4820    }
4821    // C++11 [class.ctor]p5: any non-variant non-static data member of
4822    // const-qualified type (or array thereof) with no
4823    // brace-or-equal-initializer does not have a user-provided default
4824    // constructor.
4825    if (!inUnion() && FieldType.isConstQualified() &&
4826        !FD->hasInClassInitializer() &&
4827        (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
4828      if (Diagnose)
4829        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4830          << MD->getParent() << FD << FD->getType() << /*Const*/1;
4831      return true;
4832    }
4833
4834    if (inUnion() && !FieldType.isConstQualified())
4835      AllFieldsAreConst = false;
4836  } else if (CSM == Sema::CXXCopyConstructor) {
4837    // For a copy constructor, data members must not be of rvalue reference
4838    // type.
4839    if (FieldType->isRValueReferenceType()) {
4840      if (Diagnose)
4841        S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
4842          << MD->getParent() << FD << FieldType;
4843      return true;
4844    }
4845  } else if (IsAssignment) {
4846    // For an assignment operator, data members must not be of reference type.
4847    if (FieldType->isReferenceType()) {
4848      if (Diagnose)
4849        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4850          << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
4851      return true;
4852    }
4853    if (!FieldRecord && FieldType.isConstQualified()) {
4854      // C++11 [class.copy]p23:
4855      // -- a non-static data member of const non-class type (or array thereof)
4856      if (Diagnose)
4857        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4858          << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
4859      return true;
4860    }
4861  }
4862
4863  if (FieldRecord) {
4864    // Some additional restrictions exist on the variant members.
4865    if (!inUnion() && FieldRecord->isUnion() &&
4866        FieldRecord->isAnonymousStructOrUnion()) {
4867      bool AllVariantFieldsAreConst = true;
4868
4869      // FIXME: Handle anonymous unions declared within anonymous unions.
4870      for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4871                                         UE = FieldRecord->field_end();
4872           UI != UE; ++UI) {
4873        QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
4874
4875        if (!UnionFieldType.isConstQualified())
4876          AllVariantFieldsAreConst = false;
4877
4878        CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
4879        if (UnionFieldRecord &&
4880            shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
4881                                          UnionFieldType.getCVRQualifiers()))
4882          return true;
4883      }
4884
4885      // At least one member in each anonymous union must be non-const
4886      if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
4887          FieldRecord->field_begin() != FieldRecord->field_end()) {
4888        if (Diagnose)
4889          S.Diag(FieldRecord->getLocation(),
4890                 diag::note_deleted_default_ctor_all_const)
4891            << MD->getParent() << /*anonymous union*/1;
4892        return true;
4893      }
4894
4895      // Don't check the implicit member of the anonymous union type.
4896      // This is technically non-conformant, but sanity demands it.
4897      return false;
4898    }
4899
4900    if (shouldDeleteForClassSubobject(FieldRecord, FD,
4901                                      FieldType.getCVRQualifiers()))
4902      return true;
4903  }
4904
4905  return false;
4906}
4907
4908/// C++11 [class.ctor] p5:
4909///   A defaulted default constructor for a class X is defined as deleted if
4910/// X is a union and all of its variant members are of const-qualified type.
4911bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
4912  // This is a silly definition, because it gives an empty union a deleted
4913  // default constructor. Don't do that.
4914  if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
4915      (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
4916    if (Diagnose)
4917      S.Diag(MD->getParent()->getLocation(),
4918             diag::note_deleted_default_ctor_all_const)
4919        << MD->getParent() << /*not anonymous union*/0;
4920    return true;
4921  }
4922  return false;
4923}
4924
4925/// Determine whether a defaulted special member function should be defined as
4926/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
4927/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
4928bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4929                                     bool Diagnose) {
4930  if (MD->isInvalidDecl())
4931    return false;
4932  CXXRecordDecl *RD = MD->getParent();
4933  assert(!RD->isDependentType() && "do deletion after instantiation");
4934  if (!LangOpts.CPlusPlus11 || RD->isInvalidDecl())
4935    return false;
4936
4937  // C++11 [expr.lambda.prim]p19:
4938  //   The closure type associated with a lambda-expression has a
4939  //   deleted (8.4.3) default constructor and a deleted copy
4940  //   assignment operator.
4941  if (RD->isLambda() &&
4942      (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
4943    if (Diagnose)
4944      Diag(RD->getLocation(), diag::note_lambda_decl);
4945    return true;
4946  }
4947
4948  // For an anonymous struct or union, the copy and assignment special members
4949  // will never be used, so skip the check. For an anonymous union declared at
4950  // namespace scope, the constructor and destructor are used.
4951  if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
4952      RD->isAnonymousStructOrUnion())
4953    return false;
4954
4955  // C++11 [class.copy]p7, p18:
4956  //   If the class definition declares a move constructor or move assignment
4957  //   operator, an implicitly declared copy constructor or copy assignment
4958  //   operator is defined as deleted.
4959  if (MD->isImplicit() &&
4960      (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
4961    CXXMethodDecl *UserDeclaredMove = 0;
4962
4963    // In Microsoft mode, a user-declared move only causes the deletion of the
4964    // corresponding copy operation, not both copy operations.
4965    if (RD->hasUserDeclaredMoveConstructor() &&
4966        (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
4967      if (!Diagnose) return true;
4968
4969      // Find any user-declared move constructor.
4970      for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
4971                                        E = RD->ctor_end(); I != E; ++I) {
4972        if (I->isMoveConstructor()) {
4973          UserDeclaredMove = *I;
4974          break;
4975        }
4976      }
4977      assert(UserDeclaredMove);
4978    } else if (RD->hasUserDeclaredMoveAssignment() &&
4979               (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
4980      if (!Diagnose) return true;
4981
4982      // Find any user-declared move assignment operator.
4983      for (CXXRecordDecl::method_iterator I = RD->method_begin(),
4984                                          E = RD->method_end(); I != E; ++I) {
4985        if (I->isMoveAssignmentOperator()) {
4986          UserDeclaredMove = *I;
4987          break;
4988        }
4989      }
4990      assert(UserDeclaredMove);
4991    }
4992
4993    if (UserDeclaredMove) {
4994      Diag(UserDeclaredMove->getLocation(),
4995           diag::note_deleted_copy_user_declared_move)
4996        << (CSM == CXXCopyAssignment) << RD
4997        << UserDeclaredMove->isMoveAssignmentOperator();
4998      return true;
4999    }
5000  }
5001
5002  // Do access control from the special member function
5003  ContextRAII MethodContext(*this, MD);
5004
5005  // C++11 [class.dtor]p5:
5006  // -- for a virtual destructor, lookup of the non-array deallocation function
5007  //    results in an ambiguity or in a function that is deleted or inaccessible
5008  if (CSM == CXXDestructor && MD->isVirtual()) {
5009    FunctionDecl *OperatorDelete = 0;
5010    DeclarationName Name =
5011      Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5012    if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
5013                                 OperatorDelete, false)) {
5014      if (Diagnose)
5015        Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
5016      return true;
5017    }
5018  }
5019
5020  SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
5021
5022  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5023                                          BE = RD->bases_end(); BI != BE; ++BI)
5024    if (!BI->isVirtual() &&
5025        SMI.shouldDeleteForBase(BI))
5026      return true;
5027
5028  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
5029                                          BE = RD->vbases_end(); BI != BE; ++BI)
5030    if (SMI.shouldDeleteForBase(BI))
5031      return true;
5032
5033  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5034                                     FE = RD->field_end(); FI != FE; ++FI)
5035    if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
5036        SMI.shouldDeleteForField(*FI))
5037      return true;
5038
5039  if (SMI.shouldDeleteForAllConstMembers())
5040    return true;
5041
5042  return false;
5043}
5044
5045/// Perform lookup for a special member of the specified kind, and determine
5046/// whether it is trivial. If the triviality can be determined without the
5047/// lookup, skip it. This is intended for use when determining whether a
5048/// special member of a containing object is trivial, and thus does not ever
5049/// perform overload resolution for default constructors.
5050///
5051/// If \p Selected is not \c NULL, \c *Selected will be filled in with the
5052/// member that was most likely to be intended to be trivial, if any.
5053static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
5054                                     Sema::CXXSpecialMember CSM, unsigned Quals,
5055                                     CXXMethodDecl **Selected) {
5056  if (Selected)
5057    *Selected = 0;
5058
5059  switch (CSM) {
5060  case Sema::CXXInvalid:
5061    llvm_unreachable("not a special member");
5062
5063  case Sema::CXXDefaultConstructor:
5064    // C++11 [class.ctor]p5:
5065    //   A default constructor is trivial if:
5066    //    - all the [direct subobjects] have trivial default constructors
5067    //
5068    // Note, no overload resolution is performed in this case.
5069    if (RD->hasTrivialDefaultConstructor())
5070      return true;
5071
5072    if (Selected) {
5073      // If there's a default constructor which could have been trivial, dig it
5074      // out. Otherwise, if there's any user-provided default constructor, point
5075      // to that as an example of why there's not a trivial one.
5076      CXXConstructorDecl *DefCtor = 0;
5077      if (RD->needsImplicitDefaultConstructor())
5078        S.DeclareImplicitDefaultConstructor(RD);
5079      for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(),
5080                                        CE = RD->ctor_end(); CI != CE; ++CI) {
5081        if (!CI->isDefaultConstructor())
5082          continue;
5083        DefCtor = *CI;
5084        if (!DefCtor->isUserProvided())
5085          break;
5086      }
5087
5088      *Selected = DefCtor;
5089    }
5090
5091    return false;
5092
5093  case Sema::CXXDestructor:
5094    // C++11 [class.dtor]p5:
5095    //   A destructor is trivial if:
5096    //    - all the direct [subobjects] have trivial destructors
5097    if (RD->hasTrivialDestructor())
5098      return true;
5099
5100    if (Selected) {
5101      if (RD->needsImplicitDestructor())
5102        S.DeclareImplicitDestructor(RD);
5103      *Selected = RD->getDestructor();
5104    }
5105
5106    return false;
5107
5108  case Sema::CXXCopyConstructor:
5109    // C++11 [class.copy]p12:
5110    //   A copy constructor is trivial if:
5111    //    - the constructor selected to copy each direct [subobject] is trivial
5112    if (RD->hasTrivialCopyConstructor()) {
5113      if (Quals == Qualifiers::Const)
5114        // We must either select the trivial copy constructor or reach an
5115        // ambiguity; no need to actually perform overload resolution.
5116        return true;
5117    } else if (!Selected) {
5118      return false;
5119    }
5120    // In C++98, we are not supposed to perform overload resolution here, but we
5121    // treat that as a language defect, as suggested on cxx-abi-dev, to treat
5122    // cases like B as having a non-trivial copy constructor:
5123    //   struct A { template<typename T> A(T&); };
5124    //   struct B { mutable A a; };
5125    goto NeedOverloadResolution;
5126
5127  case Sema::CXXCopyAssignment:
5128    // C++11 [class.copy]p25:
5129    //   A copy assignment operator is trivial if:
5130    //    - the assignment operator selected to copy each direct [subobject] is
5131    //      trivial
5132    if (RD->hasTrivialCopyAssignment()) {
5133      if (Quals == Qualifiers::Const)
5134        return true;
5135    } else if (!Selected) {
5136      return false;
5137    }
5138    // In C++98, we are not supposed to perform overload resolution here, but we
5139    // treat that as a language defect.
5140    goto NeedOverloadResolution;
5141
5142  case Sema::CXXMoveConstructor:
5143  case Sema::CXXMoveAssignment:
5144  NeedOverloadResolution:
5145    Sema::SpecialMemberOverloadResult *SMOR =
5146      S.LookupSpecialMember(RD, CSM,
5147                            Quals & Qualifiers::Const,
5148                            Quals & Qualifiers::Volatile,
5149                            /*RValueThis*/false, /*ConstThis*/false,
5150                            /*VolatileThis*/false);
5151
5152    // The standard doesn't describe how to behave if the lookup is ambiguous.
5153    // We treat it as not making the member non-trivial, just like the standard
5154    // mandates for the default constructor. This should rarely matter, because
5155    // the member will also be deleted.
5156    if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
5157      return true;
5158
5159    if (!SMOR->getMethod()) {
5160      assert(SMOR->getKind() ==
5161             Sema::SpecialMemberOverloadResult::NoMemberOrDeleted);
5162      return false;
5163    }
5164
5165    // We deliberately don't check if we found a deleted special member. We're
5166    // not supposed to!
5167    if (Selected)
5168      *Selected = SMOR->getMethod();
5169    return SMOR->getMethod()->isTrivial();
5170  }
5171
5172  llvm_unreachable("unknown special method kind");
5173}
5174
5175static CXXConstructorDecl *findUserDeclaredCtor(CXXRecordDecl *RD) {
5176  for (CXXRecordDecl::ctor_iterator CI = RD->ctor_begin(), CE = RD->ctor_end();
5177       CI != CE; ++CI)
5178    if (!CI->isImplicit())
5179      return *CI;
5180
5181  // Look for constructor templates.
5182  typedef CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl> tmpl_iter;
5183  for (tmpl_iter TI(RD->decls_begin()), TE(RD->decls_end()); TI != TE; ++TI) {
5184    if (CXXConstructorDecl *CD =
5185          dyn_cast<CXXConstructorDecl>(TI->getTemplatedDecl()))
5186      return CD;
5187  }
5188
5189  return 0;
5190}
5191
5192/// The kind of subobject we are checking for triviality. The values of this
5193/// enumeration are used in diagnostics.
5194enum TrivialSubobjectKind {
5195  /// The subobject is a base class.
5196  TSK_BaseClass,
5197  /// The subobject is a non-static data member.
5198  TSK_Field,
5199  /// The object is actually the complete object.
5200  TSK_CompleteObject
5201};
5202
5203/// Check whether the special member selected for a given type would be trivial.
5204static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
5205                                      QualType SubType,
5206                                      Sema::CXXSpecialMember CSM,
5207                                      TrivialSubobjectKind Kind,
5208                                      bool Diagnose) {
5209  CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
5210  if (!SubRD)
5211    return true;
5212
5213  CXXMethodDecl *Selected;
5214  if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
5215                               Diagnose ? &Selected : 0))
5216    return true;
5217
5218  if (Diagnose) {
5219    if (!Selected && CSM == Sema::CXXDefaultConstructor) {
5220      S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor)
5221        << Kind << SubType.getUnqualifiedType();
5222      if (CXXConstructorDecl *CD = findUserDeclaredCtor(SubRD))
5223        S.Diag(CD->getLocation(), diag::note_user_declared_ctor);
5224    } else if (!Selected)
5225      S.Diag(SubobjLoc, diag::note_nontrivial_no_copy)
5226        << Kind << SubType.getUnqualifiedType() << CSM << SubType;
5227    else if (Selected->isUserProvided()) {
5228      if (Kind == TSK_CompleteObject)
5229        S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided)
5230          << Kind << SubType.getUnqualifiedType() << CSM;
5231      else {
5232        S.Diag(SubobjLoc, diag::note_nontrivial_user_provided)
5233          << Kind << SubType.getUnqualifiedType() << CSM;
5234        S.Diag(Selected->getLocation(), diag::note_declared_at);
5235      }
5236    } else {
5237      if (Kind != TSK_CompleteObject)
5238        S.Diag(SubobjLoc, diag::note_nontrivial_subobject)
5239          << Kind << SubType.getUnqualifiedType() << CSM;
5240
5241      // Explain why the defaulted or deleted special member isn't trivial.
5242      S.SpecialMemberIsTrivial(Selected, CSM, Diagnose);
5243    }
5244  }
5245
5246  return false;
5247}
5248
5249/// Check whether the members of a class type allow a special member to be
5250/// trivial.
5251static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
5252                                     Sema::CXXSpecialMember CSM,
5253                                     bool ConstArg, bool Diagnose) {
5254  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
5255                                     FE = RD->field_end(); FI != FE; ++FI) {
5256    if (FI->isInvalidDecl() || FI->isUnnamedBitfield())
5257      continue;
5258
5259    QualType FieldType = S.Context.getBaseElementType(FI->getType());
5260
5261    // Pretend anonymous struct or union members are members of this class.
5262    if (FI->isAnonymousStructOrUnion()) {
5263      if (!checkTrivialClassMembers(S, FieldType->getAsCXXRecordDecl(),
5264                                    CSM, ConstArg, Diagnose))
5265        return false;
5266      continue;
5267    }
5268
5269    // C++11 [class.ctor]p5:
5270    //   A default constructor is trivial if [...]
5271    //    -- no non-static data member of its class has a
5272    //       brace-or-equal-initializer
5273    if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
5274      if (Diagnose)
5275        S.Diag(FI->getLocation(), diag::note_nontrivial_in_class_init) << *FI;
5276      return false;
5277    }
5278
5279    // Objective C ARC 4.3.5:
5280    //   [...] nontrivally ownership-qualified types are [...] not trivially
5281    //   default constructible, copy constructible, move constructible, copy
5282    //   assignable, move assignable, or destructible [...]
5283    if (S.getLangOpts().ObjCAutoRefCount &&
5284        FieldType.hasNonTrivialObjCLifetime()) {
5285      if (Diagnose)
5286        S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership)
5287          << RD << FieldType.getObjCLifetime();
5288      return false;
5289    }
5290
5291    if (ConstArg && !FI->isMutable())
5292      FieldType.addConst();
5293    if (!checkTrivialSubobjectCall(S, FI->getLocation(), FieldType, CSM,
5294                                   TSK_Field, Diagnose))
5295      return false;
5296  }
5297
5298  return true;
5299}
5300
5301/// Diagnose why the specified class does not have a trivial special member of
5302/// the given kind.
5303void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
5304  QualType Ty = Context.getRecordType(RD);
5305  if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)
5306    Ty.addConst();
5307
5308  checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, CSM,
5309                            TSK_CompleteObject, /*Diagnose*/true);
5310}
5311
5312/// Determine whether a defaulted or deleted special member function is trivial,
5313/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
5314/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
5315bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
5316                                  bool Diagnose) {
5317  assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
5318
5319  CXXRecordDecl *RD = MD->getParent();
5320
5321  bool ConstArg = false;
5322
5323  // C++11 [class.copy]p12, p25:
5324  //   A [special member] is trivial if its declared parameter type is the same
5325  //   as if it had been implicitly declared [...]
5326  switch (CSM) {
5327  case CXXDefaultConstructor:
5328  case CXXDestructor:
5329    // Trivial default constructors and destructors cannot have parameters.
5330    break;
5331
5332  case CXXCopyConstructor:
5333  case CXXCopyAssignment: {
5334    // Trivial copy operations always have const, non-volatile parameter types.
5335    ConstArg = true;
5336    const ParmVarDecl *Param0 = MD->getParamDecl(0);
5337    const ReferenceType *RT = Param0->getType()->getAs<ReferenceType>();
5338    if (!RT || RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) {
5339      if (Diagnose)
5340        Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5341          << Param0->getSourceRange() << Param0->getType()
5342          << Context.getLValueReferenceType(
5343               Context.getRecordType(RD).withConst());
5344      return false;
5345    }
5346    break;
5347  }
5348
5349  case CXXMoveConstructor:
5350  case CXXMoveAssignment: {
5351    // Trivial move operations always have non-cv-qualified parameters.
5352    const ParmVarDecl *Param0 = MD->getParamDecl(0);
5353    const RValueReferenceType *RT =
5354      Param0->getType()->getAs<RValueReferenceType>();
5355    if (!RT || RT->getPointeeType().getCVRQualifiers()) {
5356      if (Diagnose)
5357        Diag(Param0->getLocation(), diag::note_nontrivial_param_type)
5358          << Param0->getSourceRange() << Param0->getType()
5359          << Context.getRValueReferenceType(Context.getRecordType(RD));
5360      return false;
5361    }
5362    break;
5363  }
5364
5365  case CXXInvalid:
5366    llvm_unreachable("not a special member");
5367  }
5368
5369  // FIXME: We require that the parameter-declaration-clause is equivalent to
5370  // that of an implicit declaration, not just that the declared parameter type
5371  // matches, in order to prevent absuridities like a function simultaneously
5372  // being a trivial copy constructor and a non-trivial default constructor.
5373  // This issue has not yet been assigned a core issue number.
5374  if (MD->getMinRequiredArguments() < MD->getNumParams()) {
5375    if (Diagnose)
5376      Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(),
5377           diag::note_nontrivial_default_arg)
5378        << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();
5379    return false;
5380  }
5381  if (MD->isVariadic()) {
5382    if (Diagnose)
5383      Diag(MD->getLocation(), diag::note_nontrivial_variadic);
5384    return false;
5385  }
5386
5387  // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5388  //   A copy/move [constructor or assignment operator] is trivial if
5389  //    -- the [member] selected to copy/move each direct base class subobject
5390  //       is trivial
5391  //
5392  // C++11 [class.copy]p12, C++11 [class.copy]p25:
5393  //   A [default constructor or destructor] is trivial if
5394  //    -- all the direct base classes have trivial [default constructors or
5395  //       destructors]
5396  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
5397                                          BE = RD->bases_end(); BI != BE; ++BI)
5398    if (!checkTrivialSubobjectCall(*this, BI->getLocStart(),
5399                                   ConstArg ? BI->getType().withConst()
5400                                            : BI->getType(),
5401                                   CSM, TSK_BaseClass, Diagnose))
5402      return false;
5403
5404  // C++11 [class.ctor]p5, C++11 [class.dtor]p5:
5405  //   A copy/move [constructor or assignment operator] for a class X is
5406  //   trivial if
5407  //    -- for each non-static data member of X that is of class type (or array
5408  //       thereof), the constructor selected to copy/move that member is
5409  //       trivial
5410  //
5411  // C++11 [class.copy]p12, C++11 [class.copy]p25:
5412  //   A [default constructor or destructor] is trivial if
5413  //    -- for all of the non-static data members of its class that are of class
5414  //       type (or array thereof), each such class has a trivial [default
5415  //       constructor or destructor]
5416  if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, Diagnose))
5417    return false;
5418
5419  // C++11 [class.dtor]p5:
5420  //   A destructor is trivial if [...]
5421  //    -- the destructor is not virtual
5422  if (CSM == CXXDestructor && MD->isVirtual()) {
5423    if (Diagnose)
5424      Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;
5425    return false;
5426  }
5427
5428  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:
5429  //   A [special member] for class X is trivial if [...]
5430  //    -- class X has no virtual functions and no virtual base classes
5431  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
5432    if (!Diagnose)
5433      return false;
5434
5435    if (RD->getNumVBases()) {
5436      // Check for virtual bases. We already know that the corresponding
5437      // member in all bases is trivial, so vbases must all be direct.
5438      CXXBaseSpecifier &BS = *RD->vbases_begin();
5439      assert(BS.isVirtual());
5440      Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1;
5441      return false;
5442    }
5443
5444    // Must have a virtual method.
5445    for (CXXRecordDecl::method_iterator MI = RD->method_begin(),
5446                                        ME = RD->method_end(); MI != ME; ++MI) {
5447      if (MI->isVirtual()) {
5448        SourceLocation MLoc = MI->getLocStart();
5449        Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;
5450        return false;
5451      }
5452    }
5453
5454    llvm_unreachable("dynamic class with no vbases and no virtual functions");
5455  }
5456
5457  // Looks like it's trivial!
5458  return true;
5459}
5460
5461/// \brief Data used with FindHiddenVirtualMethod
5462namespace {
5463  struct FindHiddenVirtualMethodData {
5464    Sema *S;
5465    CXXMethodDecl *Method;
5466    llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
5467    SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
5468  };
5469}
5470
5471/// \brief Check whether any most overriden method from MD in Methods
5472static bool CheckMostOverridenMethods(const CXXMethodDecl *MD,
5473                   const llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5474  if (MD->size_overridden_methods() == 0)
5475    return Methods.count(MD->getCanonicalDecl());
5476  for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5477                                      E = MD->end_overridden_methods();
5478       I != E; ++I)
5479    if (CheckMostOverridenMethods(*I, Methods))
5480      return true;
5481  return false;
5482}
5483
5484/// \brief Member lookup function that determines whether a given C++
5485/// method overloads virtual methods in a base class without overriding any,
5486/// to be used with CXXRecordDecl::lookupInBases().
5487static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
5488                                    CXXBasePath &Path,
5489                                    void *UserData) {
5490  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
5491
5492  FindHiddenVirtualMethodData &Data
5493    = *static_cast<FindHiddenVirtualMethodData*>(UserData);
5494
5495  DeclarationName Name = Data.Method->getDeclName();
5496  assert(Name.getNameKind() == DeclarationName::Identifier);
5497
5498  bool foundSameNameMethod = false;
5499  SmallVector<CXXMethodDecl *, 8> overloadedMethods;
5500  for (Path.Decls = BaseRecord->lookup(Name);
5501       !Path.Decls.empty();
5502       Path.Decls = Path.Decls.slice(1)) {
5503    NamedDecl *D = Path.Decls.front();
5504    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
5505      MD = MD->getCanonicalDecl();
5506      foundSameNameMethod = true;
5507      // Interested only in hidden virtual methods.
5508      if (!MD->isVirtual())
5509        continue;
5510      // If the method we are checking overrides a method from its base
5511      // don't warn about the other overloaded methods.
5512      if (!Data.S->IsOverload(Data.Method, MD, false))
5513        return true;
5514      // Collect the overload only if its hidden.
5515      if (!CheckMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods))
5516        overloadedMethods.push_back(MD);
5517    }
5518  }
5519
5520  if (foundSameNameMethod)
5521    Data.OverloadedMethods.append(overloadedMethods.begin(),
5522                                   overloadedMethods.end());
5523  return foundSameNameMethod;
5524}
5525
5526/// \brief Add the most overriden methods from MD to Methods
5527static void AddMostOverridenMethods(const CXXMethodDecl *MD,
5528                         llvm::SmallPtrSet<const CXXMethodDecl *, 8>& Methods) {
5529  if (MD->size_overridden_methods() == 0)
5530    Methods.insert(MD->getCanonicalDecl());
5531  for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
5532                                      E = MD->end_overridden_methods();
5533       I != E; ++I)
5534    AddMostOverridenMethods(*I, Methods);
5535}
5536
5537/// \brief See if a method overloads virtual methods in a base class without
5538/// overriding any.
5539void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
5540  if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
5541                               MD->getLocation()) == DiagnosticsEngine::Ignored)
5542    return;
5543  if (!MD->getDeclName().isIdentifier())
5544    return;
5545
5546  CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
5547                     /*bool RecordPaths=*/false,
5548                     /*bool DetectVirtual=*/false);
5549  FindHiddenVirtualMethodData Data;
5550  Data.Method = MD;
5551  Data.S = this;
5552
5553  // Keep the base methods that were overriden or introduced in the subclass
5554  // by 'using' in a set. A base method not in this set is hidden.
5555  DeclContext::lookup_result R = DC->lookup(MD->getDeclName());
5556  for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
5557    NamedDecl *ND = *I;
5558    if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*I))
5559      ND = shad->getTargetDecl();
5560    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
5561      AddMostOverridenMethods(MD, Data.OverridenAndUsingBaseMethods);
5562  }
5563
5564  if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
5565      !Data.OverloadedMethods.empty()) {
5566    Diag(MD->getLocation(), diag::warn_overloaded_virtual)
5567      << MD << (Data.OverloadedMethods.size() > 1);
5568
5569    for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
5570      CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
5571      PartialDiagnostic PD = PDiag(
5572           diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
5573      HandleFunctionTypeMismatch(PD, MD->getType(), overloadedMD->getType());
5574      Diag(overloadedMD->getLocation(), PD);
5575    }
5576  }
5577}
5578
5579void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
5580                                             Decl *TagDecl,
5581                                             SourceLocation LBrac,
5582                                             SourceLocation RBrac,
5583                                             AttributeList *AttrList) {
5584  if (!TagDecl)
5585    return;
5586
5587  AdjustDeclIfTemplate(TagDecl);
5588
5589  for (const AttributeList* l = AttrList; l; l = l->getNext()) {
5590    if (l->getKind() != AttributeList::AT_Visibility)
5591      continue;
5592    l->setInvalid();
5593    Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
5594      l->getName();
5595  }
5596
5597  ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
5598              // strict aliasing violation!
5599              reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
5600              FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
5601
5602  CheckCompletedCXXClass(
5603                        dyn_cast_or_null<CXXRecordDecl>(TagDecl));
5604}
5605
5606/// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
5607/// special functions, such as the default constructor, copy
5608/// constructor, or destructor, to the given C++ class (C++
5609/// [special]p1).  This routine can only be executed just before the
5610/// definition of the class is complete.
5611void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
5612  if (!ClassDecl->hasUserDeclaredConstructor())
5613    ++ASTContext::NumImplicitDefaultConstructors;
5614
5615  if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
5616    ++ASTContext::NumImplicitCopyConstructors;
5617
5618    // If the properties or semantics of the copy constructor couldn't be
5619    // determined while the class was being declared, force a declaration
5620    // of it now.
5621    if (ClassDecl->needsOverloadResolutionForCopyConstructor())
5622      DeclareImplicitCopyConstructor(ClassDecl);
5623  }
5624
5625  if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
5626    ++ASTContext::NumImplicitMoveConstructors;
5627
5628    if (ClassDecl->needsOverloadResolutionForMoveConstructor())
5629      DeclareImplicitMoveConstructor(ClassDecl);
5630  }
5631
5632  if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
5633    ++ASTContext::NumImplicitCopyAssignmentOperators;
5634
5635    // If we have a dynamic class, then the copy assignment operator may be
5636    // virtual, so we have to declare it immediately. This ensures that, e.g.,
5637    // it shows up in the right place in the vtable and that we diagnose
5638    // problems with the implicit exception specification.
5639    if (ClassDecl->isDynamicClass() ||
5640        ClassDecl->needsOverloadResolutionForCopyAssignment())
5641      DeclareImplicitCopyAssignment(ClassDecl);
5642  }
5643
5644  if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
5645    ++ASTContext::NumImplicitMoveAssignmentOperators;
5646
5647    // Likewise for the move assignment operator.
5648    if (ClassDecl->isDynamicClass() ||
5649        ClassDecl->needsOverloadResolutionForMoveAssignment())
5650      DeclareImplicitMoveAssignment(ClassDecl);
5651  }
5652
5653  if (!ClassDecl->hasUserDeclaredDestructor()) {
5654    ++ASTContext::NumImplicitDestructors;
5655
5656    // If we have a dynamic class, then the destructor may be virtual, so we
5657    // have to declare the destructor immediately. This ensures that, e.g., it
5658    // shows up in the right place in the vtable and that we diagnose problems
5659    // with the implicit exception specification.
5660    if (ClassDecl->isDynamicClass() ||
5661        ClassDecl->needsOverloadResolutionForDestructor())
5662      DeclareImplicitDestructor(ClassDecl);
5663  }
5664}
5665
5666void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
5667  if (!D)
5668    return;
5669
5670  int NumParamList = D->getNumTemplateParameterLists();
5671  for (int i = 0; i < NumParamList; i++) {
5672    TemplateParameterList* Params = D->getTemplateParameterList(i);
5673    for (TemplateParameterList::iterator Param = Params->begin(),
5674                                      ParamEnd = Params->end();
5675          Param != ParamEnd; ++Param) {
5676      NamedDecl *Named = cast<NamedDecl>(*Param);
5677      if (Named->getDeclName()) {
5678        S->AddDecl(Named);
5679        IdResolver.AddDecl(Named);
5680      }
5681    }
5682  }
5683}
5684
5685void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
5686  if (!D)
5687    return;
5688
5689  TemplateParameterList *Params = 0;
5690  if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
5691    Params = Template->getTemplateParameters();
5692  else if (ClassTemplatePartialSpecializationDecl *PartialSpec
5693           = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
5694    Params = PartialSpec->getTemplateParameters();
5695  else
5696    return;
5697
5698  for (TemplateParameterList::iterator Param = Params->begin(),
5699                                    ParamEnd = Params->end();
5700       Param != ParamEnd; ++Param) {
5701    NamedDecl *Named = cast<NamedDecl>(*Param);
5702    if (Named->getDeclName()) {
5703      S->AddDecl(Named);
5704      IdResolver.AddDecl(Named);
5705    }
5706  }
5707}
5708
5709void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5710  if (!RecordD) return;
5711  AdjustDeclIfTemplate(RecordD);
5712  CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
5713  PushDeclContext(S, Record);
5714}
5715
5716void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
5717  if (!RecordD) return;
5718  PopDeclContext();
5719}
5720
5721/// ActOnStartDelayedCXXMethodDeclaration - We have completed
5722/// parsing a top-level (non-nested) C++ class, and we are now
5723/// parsing those parts of the given Method declaration that could
5724/// not be parsed earlier (C++ [class.mem]p2), such as default
5725/// arguments. This action should enter the scope of the given
5726/// Method declaration as if we had just parsed the qualified method
5727/// name. However, it should not bring the parameters into scope;
5728/// that will be performed by ActOnDelayedCXXMethodParameter.
5729void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5730}
5731
5732/// ActOnDelayedCXXMethodParameter - We've already started a delayed
5733/// C++ method declaration. We're (re-)introducing the given
5734/// function parameter into scope for use in parsing later parts of
5735/// the method declaration. For example, we could see an
5736/// ActOnParamDefaultArgument event for this parameter.
5737void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
5738  if (!ParamD)
5739    return;
5740
5741  ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
5742
5743  // If this parameter has an unparsed default argument, clear it out
5744  // to make way for the parsed default argument.
5745  if (Param->hasUnparsedDefaultArg())
5746    Param->setDefaultArg(0);
5747
5748  S->AddDecl(Param);
5749  if (Param->getDeclName())
5750    IdResolver.AddDecl(Param);
5751}
5752
5753/// ActOnFinishDelayedCXXMethodDeclaration - We have finished
5754/// processing the delayed method declaration for Method. The method
5755/// declaration is now considered finished. There may be a separate
5756/// ActOnStartOfFunctionDef action later (not necessarily
5757/// immediately!) for this method, if it was also defined inside the
5758/// class body.
5759void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
5760  if (!MethodD)
5761    return;
5762
5763  AdjustDeclIfTemplate(MethodD);
5764
5765  FunctionDecl *Method = cast<FunctionDecl>(MethodD);
5766
5767  // Now that we have our default arguments, check the constructor
5768  // again. It could produce additional diagnostics or affect whether
5769  // the class has implicitly-declared destructors, among other
5770  // things.
5771  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
5772    CheckConstructor(Constructor);
5773
5774  // Check the default arguments, which we may have added.
5775  if (!Method->isInvalidDecl())
5776    CheckCXXDefaultArguments(Method);
5777}
5778
5779/// CheckConstructorDeclarator - Called by ActOnDeclarator to check
5780/// the well-formedness of the constructor declarator @p D with type @p
5781/// R. If there are any errors in the declarator, this routine will
5782/// emit diagnostics and set the invalid bit to true.  In any case, the type
5783/// will be updated to reflect a well-formed type for the constructor and
5784/// returned.
5785QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
5786                                          StorageClass &SC) {
5787  bool isVirtual = D.getDeclSpec().isVirtualSpecified();
5788
5789  // C++ [class.ctor]p3:
5790  //   A constructor shall not be virtual (10.3) or static (9.4). A
5791  //   constructor can be invoked for a const, volatile or const
5792  //   volatile object. A constructor shall not be declared const,
5793  //   volatile, or const volatile (9.3.2).
5794  if (isVirtual) {
5795    if (!D.isInvalidType())
5796      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5797        << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
5798        << SourceRange(D.getIdentifierLoc());
5799    D.setInvalidType();
5800  }
5801  if (SC == SC_Static) {
5802    if (!D.isInvalidType())
5803      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
5804        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5805        << SourceRange(D.getIdentifierLoc());
5806    D.setInvalidType();
5807    SC = SC_None;
5808  }
5809
5810  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5811  if (FTI.TypeQuals != 0) {
5812    if (FTI.TypeQuals & Qualifiers::Const)
5813      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5814        << "const" << SourceRange(D.getIdentifierLoc());
5815    if (FTI.TypeQuals & Qualifiers::Volatile)
5816      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5817        << "volatile" << SourceRange(D.getIdentifierLoc());
5818    if (FTI.TypeQuals & Qualifiers::Restrict)
5819      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
5820        << "restrict" << SourceRange(D.getIdentifierLoc());
5821    D.setInvalidType();
5822  }
5823
5824  // C++0x [class.ctor]p4:
5825  //   A constructor shall not be declared with a ref-qualifier.
5826  if (FTI.hasRefQualifier()) {
5827    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
5828      << FTI.RefQualifierIsLValueRef
5829      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5830    D.setInvalidType();
5831  }
5832
5833  // Rebuild the function type "R" without any type qualifiers (in
5834  // case any of the errors above fired) and with "void" as the
5835  // return type, since constructors don't have return types.
5836  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5837  if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
5838    return R;
5839
5840  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
5841  EPI.TypeQuals = 0;
5842  EPI.RefQualifier = RQ_None;
5843
5844  return Context.getFunctionType(Context.VoidTy, Proto->getArgTypes(), EPI);
5845}
5846
5847/// CheckConstructor - Checks a fully-formed constructor for
5848/// well-formedness, issuing any diagnostics required. Returns true if
5849/// the constructor declarator is invalid.
5850void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
5851  CXXRecordDecl *ClassDecl
5852    = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
5853  if (!ClassDecl)
5854    return Constructor->setInvalidDecl();
5855
5856  // C++ [class.copy]p3:
5857  //   A declaration of a constructor for a class X is ill-formed if
5858  //   its first parameter is of type (optionally cv-qualified) X and
5859  //   either there are no other parameters or else all other
5860  //   parameters have default arguments.
5861  if (!Constructor->isInvalidDecl() &&
5862      ((Constructor->getNumParams() == 1) ||
5863       (Constructor->getNumParams() > 1 &&
5864        Constructor->getParamDecl(1)->hasDefaultArg())) &&
5865      Constructor->getTemplateSpecializationKind()
5866                                              != TSK_ImplicitInstantiation) {
5867    QualType ParamType = Constructor->getParamDecl(0)->getType();
5868    QualType ClassTy = Context.getTagDeclType(ClassDecl);
5869    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
5870      SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
5871      const char *ConstRef
5872        = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
5873                                                        : " const &";
5874      Diag(ParamLoc, diag::err_constructor_byvalue_arg)
5875        << FixItHint::CreateInsertion(ParamLoc, ConstRef);
5876
5877      // FIXME: Rather that making the constructor invalid, we should endeavor
5878      // to fix the type.
5879      Constructor->setInvalidDecl();
5880    }
5881  }
5882}
5883
5884/// CheckDestructor - Checks a fully-formed destructor definition for
5885/// well-formedness, issuing any diagnostics required.  Returns true
5886/// on error.
5887bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
5888  CXXRecordDecl *RD = Destructor->getParent();
5889
5890  if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {
5891    SourceLocation Loc;
5892
5893    if (!Destructor->isImplicit())
5894      Loc = Destructor->getLocation();
5895    else
5896      Loc = RD->getLocation();
5897
5898    // If we have a virtual destructor, look up the deallocation function
5899    FunctionDecl *OperatorDelete = 0;
5900    DeclarationName Name =
5901    Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5902    if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
5903      return true;
5904
5905    MarkFunctionReferenced(Loc, OperatorDelete);
5906
5907    Destructor->setOperatorDelete(OperatorDelete);
5908  }
5909
5910  return false;
5911}
5912
5913static inline bool
5914FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
5915  return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5916          FTI.ArgInfo[0].Param &&
5917          cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
5918}
5919
5920/// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5921/// the well-formednes of the destructor declarator @p D with type @p
5922/// R. If there are any errors in the declarator, this routine will
5923/// emit diagnostics and set the declarator to invalid.  Even if this happens,
5924/// will be updated to reflect a well-formed type for the destructor and
5925/// returned.
5926QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
5927                                         StorageClass& SC) {
5928  // C++ [class.dtor]p1:
5929  //   [...] A typedef-name that names a class is a class-name
5930  //   (7.1.3); however, a typedef-name that names a class shall not
5931  //   be used as the identifier in the declarator for a destructor
5932  //   declaration.
5933  QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
5934  if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
5935    Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5936      << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
5937  else if (const TemplateSpecializationType *TST =
5938             DeclaratorType->getAs<TemplateSpecializationType>())
5939    if (TST->isTypeAlias())
5940      Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5941        << DeclaratorType << 1;
5942
5943  // C++ [class.dtor]p2:
5944  //   A destructor is used to destroy objects of its class type. A
5945  //   destructor takes no parameters, and no return type can be
5946  //   specified for it (not even void). The address of a destructor
5947  //   shall not be taken. A destructor shall not be static. A
5948  //   destructor can be invoked for a const, volatile or const
5949  //   volatile object. A destructor shall not be declared const,
5950  //   volatile or const volatile (9.3.2).
5951  if (SC == SC_Static) {
5952    if (!D.isInvalidType())
5953      Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
5954        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5955        << SourceRange(D.getIdentifierLoc())
5956        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
5957
5958    SC = SC_None;
5959  }
5960  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
5961    // Destructors don't have return types, but the parser will
5962    // happily parse something like:
5963    //
5964    //   class X {
5965    //     float ~X();
5966    //   };
5967    //
5968    // The return type will be eliminated later.
5969    Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
5970      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5971      << SourceRange(D.getIdentifierLoc());
5972  }
5973
5974  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5975  if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
5976    if (FTI.TypeQuals & Qualifiers::Const)
5977      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5978        << "const" << SourceRange(D.getIdentifierLoc());
5979    if (FTI.TypeQuals & Qualifiers::Volatile)
5980      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5981        << "volatile" << SourceRange(D.getIdentifierLoc());
5982    if (FTI.TypeQuals & Qualifiers::Restrict)
5983      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5984        << "restrict" << SourceRange(D.getIdentifierLoc());
5985    D.setInvalidType();
5986  }
5987
5988  // C++0x [class.dtor]p2:
5989  //   A destructor shall not be declared with a ref-qualifier.
5990  if (FTI.hasRefQualifier()) {
5991    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
5992      << FTI.RefQualifierIsLValueRef
5993      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5994    D.setInvalidType();
5995  }
5996
5997  // Make sure we don't have any parameters.
5998  if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
5999    Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
6000
6001    // Delete the parameters.
6002    FTI.freeArgs();
6003    D.setInvalidType();
6004  }
6005
6006  // Make sure the destructor isn't variadic.
6007  if (FTI.isVariadic) {
6008    Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
6009    D.setInvalidType();
6010  }
6011
6012  // Rebuild the function type "R" without any type qualifiers or
6013  // parameters (in case any of the errors above fired) and with
6014  // "void" as the return type, since destructors don't have return
6015  // types.
6016  if (!D.isInvalidType())
6017    return R;
6018
6019  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6020  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
6021  EPI.Variadic = false;
6022  EPI.TypeQuals = 0;
6023  EPI.RefQualifier = RQ_None;
6024  return Context.getFunctionType(Context.VoidTy, None, EPI);
6025}
6026
6027/// CheckConversionDeclarator - Called by ActOnDeclarator to check the
6028/// well-formednes of the conversion function declarator @p D with
6029/// type @p R. If there are any errors in the declarator, this routine
6030/// will emit diagnostics and return true. Otherwise, it will return
6031/// false. Either way, the type @p R will be updated to reflect a
6032/// well-formed type for the conversion operator.
6033void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
6034                                     StorageClass& SC) {
6035  // C++ [class.conv.fct]p1:
6036  //   Neither parameter types nor return type can be specified. The
6037  //   type of a conversion function (8.3.5) is "function taking no
6038  //   parameter returning conversion-type-id."
6039  if (SC == SC_Static) {
6040    if (!D.isInvalidType())
6041      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
6042        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
6043        << SourceRange(D.getIdentifierLoc());
6044    D.setInvalidType();
6045    SC = SC_None;
6046  }
6047
6048  QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
6049
6050  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
6051    // Conversion functions don't have return types, but the parser will
6052    // happily parse something like:
6053    //
6054    //   class X {
6055    //     float operator bool();
6056    //   };
6057    //
6058    // The return type will be changed later anyway.
6059    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
6060      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
6061      << SourceRange(D.getIdentifierLoc());
6062    D.setInvalidType();
6063  }
6064
6065  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
6066
6067  // Make sure we don't have any parameters.
6068  if (Proto->getNumArgs() > 0) {
6069    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
6070
6071    // Delete the parameters.
6072    D.getFunctionTypeInfo().freeArgs();
6073    D.setInvalidType();
6074  } else if (Proto->isVariadic()) {
6075    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
6076    D.setInvalidType();
6077  }
6078
6079  // Diagnose "&operator bool()" and other such nonsense.  This
6080  // is actually a gcc extension which we don't support.
6081  if (Proto->getResultType() != ConvType) {
6082    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
6083      << Proto->getResultType();
6084    D.setInvalidType();
6085    ConvType = Proto->getResultType();
6086  }
6087
6088  // C++ [class.conv.fct]p4:
6089  //   The conversion-type-id shall not represent a function type nor
6090  //   an array type.
6091  if (ConvType->isArrayType()) {
6092    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
6093    ConvType = Context.getPointerType(ConvType);
6094    D.setInvalidType();
6095  } else if (ConvType->isFunctionType()) {
6096    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
6097    ConvType = Context.getPointerType(ConvType);
6098    D.setInvalidType();
6099  }
6100
6101  // Rebuild the function type "R" without any parameters (in case any
6102  // of the errors above fired) and with the conversion type as the
6103  // return type.
6104  if (D.isInvalidType())
6105    R = Context.getFunctionType(ConvType, None, Proto->getExtProtoInfo());
6106
6107  // C++0x explicit conversion operators.
6108  if (D.getDeclSpec().isExplicitSpecified())
6109    Diag(D.getDeclSpec().getExplicitSpecLoc(),
6110         getLangOpts().CPlusPlus11 ?
6111           diag::warn_cxx98_compat_explicit_conversion_functions :
6112           diag::ext_explicit_conversion_functions)
6113      << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
6114}
6115
6116/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
6117/// the declaration of the given C++ conversion function. This routine
6118/// is responsible for recording the conversion function in the C++
6119/// class, if possible.
6120Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
6121  assert(Conversion && "Expected to receive a conversion function declaration");
6122
6123  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
6124
6125  // Make sure we aren't redeclaring the conversion function.
6126  QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
6127
6128  // C++ [class.conv.fct]p1:
6129  //   [...] A conversion function is never used to convert a
6130  //   (possibly cv-qualified) object to the (possibly cv-qualified)
6131  //   same object type (or a reference to it), to a (possibly
6132  //   cv-qualified) base class of that type (or a reference to it),
6133  //   or to (possibly cv-qualified) void.
6134  // FIXME: Suppress this warning if the conversion function ends up being a
6135  // virtual function that overrides a virtual function in a base class.
6136  QualType ClassType
6137    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6138  if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
6139    ConvType = ConvTypeRef->getPointeeType();
6140  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
6141      Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
6142    /* Suppress diagnostics for instantiations. */;
6143  else if (ConvType->isRecordType()) {
6144    ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
6145    if (ConvType == ClassType)
6146      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
6147        << ClassType;
6148    else if (IsDerivedFrom(ClassType, ConvType))
6149      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
6150        <<  ClassType << ConvType;
6151  } else if (ConvType->isVoidType()) {
6152    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
6153      << ClassType << ConvType;
6154  }
6155
6156  if (FunctionTemplateDecl *ConversionTemplate
6157                                = Conversion->getDescribedFunctionTemplate())
6158    return ConversionTemplate;
6159
6160  return Conversion;
6161}
6162
6163//===----------------------------------------------------------------------===//
6164// Namespace Handling
6165//===----------------------------------------------------------------------===//
6166
6167/// \brief Diagnose a mismatch in 'inline' qualifiers when a namespace is
6168/// reopened.
6169static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
6170                                            SourceLocation Loc,
6171                                            IdentifierInfo *II, bool *IsInline,
6172                                            NamespaceDecl *PrevNS) {
6173  assert(*IsInline != PrevNS->isInline());
6174
6175  // HACK: Work around a bug in libstdc++4.6's <atomic>, where
6176  // std::__atomic[0,1,2] are defined as non-inline namespaces, then reopened as
6177  // inline namespaces, with the intention of bringing names into namespace std.
6178  //
6179  // We support this just well enough to get that case working; this is not
6180  // sufficient to support reopening namespaces as inline in general.
6181  if (*IsInline && II && II->getName().startswith("__atomic") &&
6182      S.getSourceManager().isInSystemHeader(Loc)) {
6183    // Mark all prior declarations of the namespace as inline.
6184    for (NamespaceDecl *NS = PrevNS->getMostRecentDecl(); NS;
6185         NS = NS->getPreviousDecl())
6186      NS->setInline(*IsInline);
6187    // Patch up the lookup table for the containing namespace. This isn't really
6188    // correct, but it's good enough for this particular case.
6189    for (DeclContext::decl_iterator I = PrevNS->decls_begin(),
6190                                    E = PrevNS->decls_end(); I != E; ++I)
6191      if (NamedDecl *ND = dyn_cast<NamedDecl>(*I))
6192        PrevNS->getParent()->makeDeclVisibleInContext(ND);
6193    return;
6194  }
6195
6196  if (PrevNS->isInline())
6197    // The user probably just forgot the 'inline', so suggest that it
6198    // be added back.
6199    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
6200      << FixItHint::CreateInsertion(KeywordLoc, "inline ");
6201  else
6202    S.Diag(Loc, diag::err_inline_namespace_mismatch)
6203      << IsInline;
6204
6205  S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
6206  *IsInline = PrevNS->isInline();
6207}
6208
6209/// ActOnStartNamespaceDef - This is called at the start of a namespace
6210/// definition.
6211Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
6212                                   SourceLocation InlineLoc,
6213                                   SourceLocation NamespaceLoc,
6214                                   SourceLocation IdentLoc,
6215                                   IdentifierInfo *II,
6216                                   SourceLocation LBrace,
6217                                   AttributeList *AttrList) {
6218  SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
6219  // For anonymous namespace, take the location of the left brace.
6220  SourceLocation Loc = II ? IdentLoc : LBrace;
6221  bool IsInline = InlineLoc.isValid();
6222  bool IsInvalid = false;
6223  bool IsStd = false;
6224  bool AddToKnown = false;
6225  Scope *DeclRegionScope = NamespcScope->getParent();
6226
6227  NamespaceDecl *PrevNS = 0;
6228  if (II) {
6229    // C++ [namespace.def]p2:
6230    //   The identifier in an original-namespace-definition shall not
6231    //   have been previously defined in the declarative region in
6232    //   which the original-namespace-definition appears. The
6233    //   identifier in an original-namespace-definition is the name of
6234    //   the namespace. Subsequently in that declarative region, it is
6235    //   treated as an original-namespace-name.
6236    //
6237    // Since namespace names are unique in their scope, and we don't
6238    // look through using directives, just look for any ordinary names.
6239
6240    const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
6241    Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
6242    Decl::IDNS_Namespace;
6243    NamedDecl *PrevDecl = 0;
6244    DeclContext::lookup_result R = CurContext->getRedeclContext()->lookup(II);
6245    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E;
6246         ++I) {
6247      if ((*I)->getIdentifierNamespace() & IDNS) {
6248        PrevDecl = *I;
6249        break;
6250      }
6251    }
6252
6253    PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
6254
6255    if (PrevNS) {
6256      // This is an extended namespace definition.
6257      if (IsInline != PrevNS->isInline())
6258        DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, Loc, II,
6259                                        &IsInline, PrevNS);
6260    } else if (PrevDecl) {
6261      // This is an invalid name redefinition.
6262      Diag(Loc, diag::err_redefinition_different_kind)
6263        << II;
6264      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6265      IsInvalid = true;
6266      // Continue on to push Namespc as current DeclContext and return it.
6267    } else if (II->isStr("std") &&
6268               CurContext->getRedeclContext()->isTranslationUnit()) {
6269      // This is the first "real" definition of the namespace "std", so update
6270      // our cache of the "std" namespace to point at this definition.
6271      PrevNS = getStdNamespace();
6272      IsStd = true;
6273      AddToKnown = !IsInline;
6274    } else {
6275      // We've seen this namespace for the first time.
6276      AddToKnown = !IsInline;
6277    }
6278  } else {
6279    // Anonymous namespaces.
6280
6281    // Determine whether the parent already has an anonymous namespace.
6282    DeclContext *Parent = CurContext->getRedeclContext();
6283    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6284      PrevNS = TU->getAnonymousNamespace();
6285    } else {
6286      NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
6287      PrevNS = ND->getAnonymousNamespace();
6288    }
6289
6290    if (PrevNS && IsInline != PrevNS->isInline())
6291      DiagnoseNamespaceInlineMismatch(*this, NamespaceLoc, NamespaceLoc, II,
6292                                      &IsInline, PrevNS);
6293  }
6294
6295  NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
6296                                                 StartLoc, Loc, II, PrevNS);
6297  if (IsInvalid)
6298    Namespc->setInvalidDecl();
6299
6300  ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
6301
6302  // FIXME: Should we be merging attributes?
6303  if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
6304    PushNamespaceVisibilityAttr(Attr, Loc);
6305
6306  if (IsStd)
6307    StdNamespace = Namespc;
6308  if (AddToKnown)
6309    KnownNamespaces[Namespc] = false;
6310
6311  if (II) {
6312    PushOnScopeChains(Namespc, DeclRegionScope);
6313  } else {
6314    // Link the anonymous namespace into its parent.
6315    DeclContext *Parent = CurContext->getRedeclContext();
6316    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
6317      TU->setAnonymousNamespace(Namespc);
6318    } else {
6319      cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
6320    }
6321
6322    CurContext->addDecl(Namespc);
6323
6324    // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
6325    //   behaves as if it were replaced by
6326    //     namespace unique { /* empty body */ }
6327    //     using namespace unique;
6328    //     namespace unique { namespace-body }
6329    //   where all occurrences of 'unique' in a translation unit are
6330    //   replaced by the same identifier and this identifier differs
6331    //   from all other identifiers in the entire program.
6332
6333    // We just create the namespace with an empty name and then add an
6334    // implicit using declaration, just like the standard suggests.
6335    //
6336    // CodeGen enforces the "universally unique" aspect by giving all
6337    // declarations semantically contained within an anonymous
6338    // namespace internal linkage.
6339
6340    if (!PrevNS) {
6341      UsingDirectiveDecl* UD
6342        = UsingDirectiveDecl::Create(Context, Parent,
6343                                     /* 'using' */ LBrace,
6344                                     /* 'namespace' */ SourceLocation(),
6345                                     /* qualifier */ NestedNameSpecifierLoc(),
6346                                     /* identifier */ SourceLocation(),
6347                                     Namespc,
6348                                     /* Ancestor */ Parent);
6349      UD->setImplicit();
6350      Parent->addDecl(UD);
6351    }
6352  }
6353
6354  ActOnDocumentableDecl(Namespc);
6355
6356  // Although we could have an invalid decl (i.e. the namespace name is a
6357  // redefinition), push it as current DeclContext and try to continue parsing.
6358  // FIXME: We should be able to push Namespc here, so that the each DeclContext
6359  // for the namespace has the declarations that showed up in that particular
6360  // namespace definition.
6361  PushDeclContext(NamespcScope, Namespc);
6362  return Namespc;
6363}
6364
6365/// getNamespaceDecl - Returns the namespace a decl represents. If the decl
6366/// is a namespace alias, returns the namespace it points to.
6367static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
6368  if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
6369    return AD->getNamespace();
6370  return dyn_cast_or_null<NamespaceDecl>(D);
6371}
6372
6373/// ActOnFinishNamespaceDef - This callback is called after a namespace is
6374/// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
6375void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
6376  NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
6377  assert(Namespc && "Invalid parameter, expected NamespaceDecl");
6378  Namespc->setRBraceLoc(RBrace);
6379  PopDeclContext();
6380  if (Namespc->hasAttr<VisibilityAttr>())
6381    PopPragmaVisibility(true, RBrace);
6382}
6383
6384CXXRecordDecl *Sema::getStdBadAlloc() const {
6385  return cast_or_null<CXXRecordDecl>(
6386                                  StdBadAlloc.get(Context.getExternalSource()));
6387}
6388
6389NamespaceDecl *Sema::getStdNamespace() const {
6390  return cast_or_null<NamespaceDecl>(
6391                                 StdNamespace.get(Context.getExternalSource()));
6392}
6393
6394/// \brief Retrieve the special "std" namespace, which may require us to
6395/// implicitly define the namespace.
6396NamespaceDecl *Sema::getOrCreateStdNamespace() {
6397  if (!StdNamespace) {
6398    // The "std" namespace has not yet been defined, so build one implicitly.
6399    StdNamespace = NamespaceDecl::Create(Context,
6400                                         Context.getTranslationUnitDecl(),
6401                                         /*Inline=*/false,
6402                                         SourceLocation(), SourceLocation(),
6403                                         &PP.getIdentifierTable().get("std"),
6404                                         /*PrevDecl=*/0);
6405    getStdNamespace()->setImplicit(true);
6406  }
6407
6408  return getStdNamespace();
6409}
6410
6411bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
6412  assert(getLangOpts().CPlusPlus &&
6413         "Looking for std::initializer_list outside of C++.");
6414
6415  // We're looking for implicit instantiations of
6416  // template <typename E> class std::initializer_list.
6417
6418  if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
6419    return false;
6420
6421  ClassTemplateDecl *Template = 0;
6422  const TemplateArgument *Arguments = 0;
6423
6424  if (const RecordType *RT = Ty->getAs<RecordType>()) {
6425
6426    ClassTemplateSpecializationDecl *Specialization =
6427        dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
6428    if (!Specialization)
6429      return false;
6430
6431    Template = Specialization->getSpecializedTemplate();
6432    Arguments = Specialization->getTemplateArgs().data();
6433  } else if (const TemplateSpecializationType *TST =
6434                 Ty->getAs<TemplateSpecializationType>()) {
6435    Template = dyn_cast_or_null<ClassTemplateDecl>(
6436        TST->getTemplateName().getAsTemplateDecl());
6437    Arguments = TST->getArgs();
6438  }
6439  if (!Template)
6440    return false;
6441
6442  if (!StdInitializerList) {
6443    // Haven't recognized std::initializer_list yet, maybe this is it.
6444    CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
6445    if (TemplateClass->getIdentifier() !=
6446            &PP.getIdentifierTable().get("initializer_list") ||
6447        !getStdNamespace()->InEnclosingNamespaceSetOf(
6448            TemplateClass->getDeclContext()))
6449      return false;
6450    // This is a template called std::initializer_list, but is it the right
6451    // template?
6452    TemplateParameterList *Params = Template->getTemplateParameters();
6453    if (Params->getMinRequiredArguments() != 1)
6454      return false;
6455    if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
6456      return false;
6457
6458    // It's the right template.
6459    StdInitializerList = Template;
6460  }
6461
6462  if (Template != StdInitializerList)
6463    return false;
6464
6465  // This is an instance of std::initializer_list. Find the argument type.
6466  if (Element)
6467    *Element = Arguments[0].getAsType();
6468  return true;
6469}
6470
6471static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
6472  NamespaceDecl *Std = S.getStdNamespace();
6473  if (!Std) {
6474    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6475    return 0;
6476  }
6477
6478  LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
6479                      Loc, Sema::LookupOrdinaryName);
6480  if (!S.LookupQualifiedName(Result, Std)) {
6481    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
6482    return 0;
6483  }
6484  ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
6485  if (!Template) {
6486    Result.suppressDiagnostics();
6487    // We found something weird. Complain about the first thing we found.
6488    NamedDecl *Found = *Result.begin();
6489    S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
6490    return 0;
6491  }
6492
6493  // We found some template called std::initializer_list. Now verify that it's
6494  // correct.
6495  TemplateParameterList *Params = Template->getTemplateParameters();
6496  if (Params->getMinRequiredArguments() != 1 ||
6497      !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
6498    S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
6499    return 0;
6500  }
6501
6502  return Template;
6503}
6504
6505QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
6506  if (!StdInitializerList) {
6507    StdInitializerList = LookupStdInitializerList(*this, Loc);
6508    if (!StdInitializerList)
6509      return QualType();
6510  }
6511
6512  TemplateArgumentListInfo Args(Loc, Loc);
6513  Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
6514                                       Context.getTrivialTypeSourceInfo(Element,
6515                                                                        Loc)));
6516  return Context.getCanonicalType(
6517      CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
6518}
6519
6520bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
6521  // C++ [dcl.init.list]p2:
6522  //   A constructor is an initializer-list constructor if its first parameter
6523  //   is of type std::initializer_list<E> or reference to possibly cv-qualified
6524  //   std::initializer_list<E> for some type E, and either there are no other
6525  //   parameters or else all other parameters have default arguments.
6526  if (Ctor->getNumParams() < 1 ||
6527      (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
6528    return false;
6529
6530  QualType ArgType = Ctor->getParamDecl(0)->getType();
6531  if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
6532    ArgType = RT->getPointeeType().getUnqualifiedType();
6533
6534  return isStdInitializerList(ArgType, 0);
6535}
6536
6537/// \brief Determine whether a using statement is in a context where it will be
6538/// apply in all contexts.
6539static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
6540  switch (CurContext->getDeclKind()) {
6541    case Decl::TranslationUnit:
6542      return true;
6543    case Decl::LinkageSpec:
6544      return IsUsingDirectiveInToplevelContext(CurContext->getParent());
6545    default:
6546      return false;
6547  }
6548}
6549
6550namespace {
6551
6552// Callback to only accept typo corrections that are namespaces.
6553class NamespaceValidatorCCC : public CorrectionCandidateCallback {
6554 public:
6555  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
6556    if (NamedDecl *ND = candidate.getCorrectionDecl()) {
6557      return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
6558    }
6559    return false;
6560  }
6561};
6562
6563}
6564
6565static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
6566                                       CXXScopeSpec &SS,
6567                                       SourceLocation IdentLoc,
6568                                       IdentifierInfo *Ident) {
6569  NamespaceValidatorCCC Validator;
6570  R.clear();
6571  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
6572                                               R.getLookupKind(), Sc, &SS,
6573                                               Validator)) {
6574    std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
6575    std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
6576    if (DeclContext *DC = S.computeDeclContext(SS, false))
6577      S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
6578        << Ident << DC << CorrectedQuotedStr << SS.getRange()
6579        << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
6580                                        CorrectedStr);
6581    else
6582      S.Diag(IdentLoc, diag::err_using_directive_suggest)
6583        << Ident << CorrectedQuotedStr
6584        << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
6585
6586    S.Diag(Corrected.getCorrectionDecl()->getLocation(),
6587         diag::note_namespace_defined_here) << CorrectedQuotedStr;
6588
6589    R.addDecl(Corrected.getCorrectionDecl());
6590    return true;
6591  }
6592  return false;
6593}
6594
6595Decl *Sema::ActOnUsingDirective(Scope *S,
6596                                          SourceLocation UsingLoc,
6597                                          SourceLocation NamespcLoc,
6598                                          CXXScopeSpec &SS,
6599                                          SourceLocation IdentLoc,
6600                                          IdentifierInfo *NamespcName,
6601                                          AttributeList *AttrList) {
6602  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
6603  assert(NamespcName && "Invalid NamespcName.");
6604  assert(IdentLoc.isValid() && "Invalid NamespceName location.");
6605
6606  // This can only happen along a recovery path.
6607  while (S->getFlags() & Scope::TemplateParamScope)
6608    S = S->getParent();
6609  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6610
6611  UsingDirectiveDecl *UDir = 0;
6612  NestedNameSpecifier *Qualifier = 0;
6613  if (SS.isSet())
6614    Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
6615
6616  // Lookup namespace name.
6617  LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
6618  LookupParsedName(R, S, &SS);
6619  if (R.isAmbiguous())
6620    return 0;
6621
6622  if (R.empty()) {
6623    R.clear();
6624    // Allow "using namespace std;" or "using namespace ::std;" even if
6625    // "std" hasn't been defined yet, for GCC compatibility.
6626    if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
6627        NamespcName->isStr("std")) {
6628      Diag(IdentLoc, diag::ext_using_undefined_std);
6629      R.addDecl(getOrCreateStdNamespace());
6630      R.resolveKind();
6631    }
6632    // Otherwise, attempt typo correction.
6633    else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
6634  }
6635
6636  if (!R.empty()) {
6637    NamedDecl *Named = R.getFoundDecl();
6638    assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
6639        && "expected namespace decl");
6640    // C++ [namespace.udir]p1:
6641    //   A using-directive specifies that the names in the nominated
6642    //   namespace can be used in the scope in which the
6643    //   using-directive appears after the using-directive. During
6644    //   unqualified name lookup (3.4.1), the names appear as if they
6645    //   were declared in the nearest enclosing namespace which
6646    //   contains both the using-directive and the nominated
6647    //   namespace. [Note: in this context, "contains" means "contains
6648    //   directly or indirectly". ]
6649
6650    // Find enclosing context containing both using-directive and
6651    // nominated namespace.
6652    NamespaceDecl *NS = getNamespaceDecl(Named);
6653    DeclContext *CommonAncestor = cast<DeclContext>(NS);
6654    while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
6655      CommonAncestor = CommonAncestor->getParent();
6656
6657    UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
6658                                      SS.getWithLocInContext(Context),
6659                                      IdentLoc, Named, CommonAncestor);
6660
6661    if (IsUsingDirectiveInToplevelContext(CurContext) &&
6662        !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
6663      Diag(IdentLoc, diag::warn_using_directive_in_header);
6664    }
6665
6666    PushUsingDirective(S, UDir);
6667  } else {
6668    Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
6669  }
6670
6671  if (UDir)
6672    ProcessDeclAttributeList(S, UDir, AttrList);
6673
6674  return UDir;
6675}
6676
6677void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
6678  // If the scope has an associated entity and the using directive is at
6679  // namespace or translation unit scope, add the UsingDirectiveDecl into
6680  // its lookup structure so qualified name lookup can find it.
6681  DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
6682  if (Ctx && !Ctx->isFunctionOrMethod())
6683    Ctx->addDecl(UDir);
6684  else
6685    // Otherwise, it is at block sope. The using-directives will affect lookup
6686    // only to the end of the scope.
6687    S->PushUsingDirective(UDir);
6688}
6689
6690
6691Decl *Sema::ActOnUsingDeclaration(Scope *S,
6692                                  AccessSpecifier AS,
6693                                  bool HasUsingKeyword,
6694                                  SourceLocation UsingLoc,
6695                                  CXXScopeSpec &SS,
6696                                  UnqualifiedId &Name,
6697                                  AttributeList *AttrList,
6698                                  bool IsTypeName,
6699                                  SourceLocation TypenameLoc) {
6700  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
6701
6702  switch (Name.getKind()) {
6703  case UnqualifiedId::IK_ImplicitSelfParam:
6704  case UnqualifiedId::IK_Identifier:
6705  case UnqualifiedId::IK_OperatorFunctionId:
6706  case UnqualifiedId::IK_LiteralOperatorId:
6707  case UnqualifiedId::IK_ConversionFunctionId:
6708    break;
6709
6710  case UnqualifiedId::IK_ConstructorName:
6711  case UnqualifiedId::IK_ConstructorTemplateId:
6712    // C++11 inheriting constructors.
6713    Diag(Name.getLocStart(),
6714         getLangOpts().CPlusPlus11 ?
6715           diag::warn_cxx98_compat_using_decl_constructor :
6716           diag::err_using_decl_constructor)
6717      << SS.getRange();
6718
6719    if (getLangOpts().CPlusPlus11) break;
6720
6721    return 0;
6722
6723  case UnqualifiedId::IK_DestructorName:
6724    Diag(Name.getLocStart(), diag::err_using_decl_destructor)
6725      << SS.getRange();
6726    return 0;
6727
6728  case UnqualifiedId::IK_TemplateId:
6729    Diag(Name.getLocStart(), diag::err_using_decl_template_id)
6730      << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
6731    return 0;
6732  }
6733
6734  DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
6735  DeclarationName TargetName = TargetNameInfo.getName();
6736  if (!TargetName)
6737    return 0;
6738
6739  // Warn about access declarations.
6740  // TODO: store that the declaration was written without 'using' and
6741  // talk about access decls instead of using decls in the
6742  // diagnostics.
6743  if (!HasUsingKeyword) {
6744    UsingLoc = Name.getLocStart();
6745
6746    Diag(UsingLoc,
6747         getLangOpts().CPlusPlus11 ? diag::err_access_decl
6748                                   : diag::warn_access_decl_deprecated)
6749      << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
6750  }
6751
6752  if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
6753      DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
6754    return 0;
6755
6756  NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
6757                                        TargetNameInfo, AttrList,
6758                                        /* IsInstantiation */ false,
6759                                        IsTypeName, TypenameLoc);
6760  if (UD)
6761    PushOnScopeChains(UD, S, /*AddToContext*/ false);
6762
6763  return UD;
6764}
6765
6766/// \brief Determine whether a using declaration considers the given
6767/// declarations as "equivalent", e.g., if they are redeclarations of
6768/// the same entity or are both typedefs of the same type.
6769static bool
6770IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
6771                         bool &SuppressRedeclaration) {
6772  if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
6773    SuppressRedeclaration = false;
6774    return true;
6775  }
6776
6777  if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
6778    if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
6779      SuppressRedeclaration = true;
6780      return Context.hasSameType(TD1->getUnderlyingType(),
6781                                 TD2->getUnderlyingType());
6782    }
6783
6784  return false;
6785}
6786
6787
6788/// Determines whether to create a using shadow decl for a particular
6789/// decl, given the set of decls existing prior to this using lookup.
6790bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
6791                                const LookupResult &Previous) {
6792  // Diagnose finding a decl which is not from a base class of the
6793  // current class.  We do this now because there are cases where this
6794  // function will silently decide not to build a shadow decl, which
6795  // will pre-empt further diagnostics.
6796  //
6797  // We don't need to do this in C++0x because we do the check once on
6798  // the qualifier.
6799  //
6800  // FIXME: diagnose the following if we care enough:
6801  //   struct A { int foo; };
6802  //   struct B : A { using A::foo; };
6803  //   template <class T> struct C : A {};
6804  //   template <class T> struct D : C<T> { using B::foo; } // <---
6805  // This is invalid (during instantiation) in C++03 because B::foo
6806  // resolves to the using decl in B, which is not a base class of D<T>.
6807  // We can't diagnose it immediately because C<T> is an unknown
6808  // specialization.  The UsingShadowDecl in D<T> then points directly
6809  // to A::foo, which will look well-formed when we instantiate.
6810  // The right solution is to not collapse the shadow-decl chain.
6811  if (!getLangOpts().CPlusPlus11 && CurContext->isRecord()) {
6812    DeclContext *OrigDC = Orig->getDeclContext();
6813
6814    // Handle enums and anonymous structs.
6815    if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
6816    CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
6817    while (OrigRec->isAnonymousStructOrUnion())
6818      OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
6819
6820    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
6821      if (OrigDC == CurContext) {
6822        Diag(Using->getLocation(),
6823             diag::err_using_decl_nested_name_specifier_is_current_class)
6824          << Using->getQualifierLoc().getSourceRange();
6825        Diag(Orig->getLocation(), diag::note_using_decl_target);
6826        return true;
6827      }
6828
6829      Diag(Using->getQualifierLoc().getBeginLoc(),
6830           diag::err_using_decl_nested_name_specifier_is_not_base_class)
6831        << Using->getQualifier()
6832        << cast<CXXRecordDecl>(CurContext)
6833        << Using->getQualifierLoc().getSourceRange();
6834      Diag(Orig->getLocation(), diag::note_using_decl_target);
6835      return true;
6836    }
6837  }
6838
6839  if (Previous.empty()) return false;
6840
6841  NamedDecl *Target = Orig;
6842  if (isa<UsingShadowDecl>(Target))
6843    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6844
6845  // If the target happens to be one of the previous declarations, we
6846  // don't have a conflict.
6847  //
6848  // FIXME: but we might be increasing its access, in which case we
6849  // should redeclare it.
6850  NamedDecl *NonTag = 0, *Tag = 0;
6851  for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
6852         I != E; ++I) {
6853    NamedDecl *D = (*I)->getUnderlyingDecl();
6854    bool Result;
6855    if (IsEquivalentForUsingDecl(Context, D, Target, Result))
6856      return Result;
6857
6858    (isa<TagDecl>(D) ? Tag : NonTag) = D;
6859  }
6860
6861  if (Target->isFunctionOrFunctionTemplate()) {
6862    FunctionDecl *FD;
6863    if (isa<FunctionTemplateDecl>(Target))
6864      FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
6865    else
6866      FD = cast<FunctionDecl>(Target);
6867
6868    NamedDecl *OldDecl = 0;
6869    switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
6870    case Ovl_Overload:
6871      return false;
6872
6873    case Ovl_NonFunction:
6874      Diag(Using->getLocation(), diag::err_using_decl_conflict);
6875      break;
6876
6877    // We found a decl with the exact signature.
6878    case Ovl_Match:
6879      // If we're in a record, we want to hide the target, so we
6880      // return true (without a diagnostic) to tell the caller not to
6881      // build a shadow decl.
6882      if (CurContext->isRecord())
6883        return true;
6884
6885      // If we're not in a record, this is an error.
6886      Diag(Using->getLocation(), diag::err_using_decl_conflict);
6887      break;
6888    }
6889
6890    Diag(Target->getLocation(), diag::note_using_decl_target);
6891    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
6892    return true;
6893  }
6894
6895  // Target is not a function.
6896
6897  if (isa<TagDecl>(Target)) {
6898    // No conflict between a tag and a non-tag.
6899    if (!Tag) return false;
6900
6901    Diag(Using->getLocation(), diag::err_using_decl_conflict);
6902    Diag(Target->getLocation(), diag::note_using_decl_target);
6903    Diag(Tag->getLocation(), diag::note_using_decl_conflict);
6904    return true;
6905  }
6906
6907  // No conflict between a tag and a non-tag.
6908  if (!NonTag) return false;
6909
6910  Diag(Using->getLocation(), diag::err_using_decl_conflict);
6911  Diag(Target->getLocation(), diag::note_using_decl_target);
6912  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
6913  return true;
6914}
6915
6916/// Builds a shadow declaration corresponding to a 'using' declaration.
6917UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
6918                                            UsingDecl *UD,
6919                                            NamedDecl *Orig) {
6920
6921  // If we resolved to another shadow declaration, just coalesce them.
6922  NamedDecl *Target = Orig;
6923  if (isa<UsingShadowDecl>(Target)) {
6924    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6925    assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
6926  }
6927
6928  UsingShadowDecl *Shadow
6929    = UsingShadowDecl::Create(Context, CurContext,
6930                              UD->getLocation(), UD, Target);
6931  UD->addShadowDecl(Shadow);
6932
6933  Shadow->setAccess(UD->getAccess());
6934  if (Orig->isInvalidDecl() || UD->isInvalidDecl())
6935    Shadow->setInvalidDecl();
6936
6937  if (S)
6938    PushOnScopeChains(Shadow, S);
6939  else
6940    CurContext->addDecl(Shadow);
6941
6942
6943  return Shadow;
6944}
6945
6946/// Hides a using shadow declaration.  This is required by the current
6947/// using-decl implementation when a resolvable using declaration in a
6948/// class is followed by a declaration which would hide or override
6949/// one or more of the using decl's targets; for example:
6950///
6951///   struct Base { void foo(int); };
6952///   struct Derived : Base {
6953///     using Base::foo;
6954///     void foo(int);
6955///   };
6956///
6957/// The governing language is C++03 [namespace.udecl]p12:
6958///
6959///   When a using-declaration brings names from a base class into a
6960///   derived class scope, member functions in the derived class
6961///   override and/or hide member functions with the same name and
6962///   parameter types in a base class (rather than conflicting).
6963///
6964/// There are two ways to implement this:
6965///   (1) optimistically create shadow decls when they're not hidden
6966///       by existing declarations, or
6967///   (2) don't create any shadow decls (or at least don't make them
6968///       visible) until we've fully parsed/instantiated the class.
6969/// The problem with (1) is that we might have to retroactively remove
6970/// a shadow decl, which requires several O(n) operations because the
6971/// decl structures are (very reasonably) not designed for removal.
6972/// (2) avoids this but is very fiddly and phase-dependent.
6973void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
6974  if (Shadow->getDeclName().getNameKind() ==
6975        DeclarationName::CXXConversionFunctionName)
6976    cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
6977
6978  // Remove it from the DeclContext...
6979  Shadow->getDeclContext()->removeDecl(Shadow);
6980
6981  // ...and the scope, if applicable...
6982  if (S) {
6983    S->RemoveDecl(Shadow);
6984    IdResolver.RemoveDecl(Shadow);
6985  }
6986
6987  // ...and the using decl.
6988  Shadow->getUsingDecl()->removeShadowDecl(Shadow);
6989
6990  // TODO: complain somehow if Shadow was used.  It shouldn't
6991  // be possible for this to happen, because...?
6992}
6993
6994/// Builds a using declaration.
6995///
6996/// \param IsInstantiation - Whether this call arises from an
6997///   instantiation of an unresolved using declaration.  We treat
6998///   the lookup differently for these declarations.
6999NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
7000                                       SourceLocation UsingLoc,
7001                                       CXXScopeSpec &SS,
7002                                       const DeclarationNameInfo &NameInfo,
7003                                       AttributeList *AttrList,
7004                                       bool IsInstantiation,
7005                                       bool IsTypeName,
7006                                       SourceLocation TypenameLoc) {
7007  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
7008  SourceLocation IdentLoc = NameInfo.getLoc();
7009  assert(IdentLoc.isValid() && "Invalid TargetName location.");
7010
7011  // FIXME: We ignore attributes for now.
7012
7013  if (SS.isEmpty()) {
7014    Diag(IdentLoc, diag::err_using_requires_qualname);
7015    return 0;
7016  }
7017
7018  // Do the redeclaration lookup in the current scope.
7019  LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
7020                        ForRedeclaration);
7021  Previous.setHideTags(false);
7022  if (S) {
7023    LookupName(Previous, S);
7024
7025    // It is really dumb that we have to do this.
7026    LookupResult::Filter F = Previous.makeFilter();
7027    while (F.hasNext()) {
7028      NamedDecl *D = F.next();
7029      if (!isDeclInScope(D, CurContext, S))
7030        F.erase();
7031    }
7032    F.done();
7033  } else {
7034    assert(IsInstantiation && "no scope in non-instantiation");
7035    assert(CurContext->isRecord() && "scope not record in instantiation");
7036    LookupQualifiedName(Previous, CurContext);
7037  }
7038
7039  // Check for invalid redeclarations.
7040  if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
7041    return 0;
7042
7043  // Check for bad qualifiers.
7044  if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
7045    return 0;
7046
7047  DeclContext *LookupContext = computeDeclContext(SS);
7048  NamedDecl *D;
7049  NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
7050  if (!LookupContext) {
7051    if (IsTypeName) {
7052      // FIXME: not all declaration name kinds are legal here
7053      D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
7054                                              UsingLoc, TypenameLoc,
7055                                              QualifierLoc,
7056                                              IdentLoc, NameInfo.getName());
7057    } else {
7058      D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
7059                                           QualifierLoc, NameInfo);
7060    }
7061  } else {
7062    D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
7063                          NameInfo, IsTypeName);
7064  }
7065  D->setAccess(AS);
7066  CurContext->addDecl(D);
7067
7068  if (!LookupContext) return D;
7069  UsingDecl *UD = cast<UsingDecl>(D);
7070
7071  if (RequireCompleteDeclContext(SS, LookupContext)) {
7072    UD->setInvalidDecl();
7073    return UD;
7074  }
7075
7076  // The normal rules do not apply to inheriting constructor declarations.
7077  if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
7078    if (CheckInheritingConstructorUsingDecl(UD))
7079      UD->setInvalidDecl();
7080    return UD;
7081  }
7082
7083  // Otherwise, look up the target name.
7084
7085  LookupResult R(*this, NameInfo, LookupOrdinaryName);
7086
7087  // Unlike most lookups, we don't always want to hide tag
7088  // declarations: tag names are visible through the using declaration
7089  // even if hidden by ordinary names, *except* in a dependent context
7090  // where it's important for the sanity of two-phase lookup.
7091  if (!IsInstantiation)
7092    R.setHideTags(false);
7093
7094  // For the purposes of this lookup, we have a base object type
7095  // equal to that of the current context.
7096  if (CurContext->isRecord()) {
7097    R.setBaseObjectType(
7098                   Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
7099  }
7100
7101  LookupQualifiedName(R, LookupContext);
7102
7103  if (R.empty()) {
7104    Diag(IdentLoc, diag::err_no_member)
7105      << NameInfo.getName() << LookupContext << SS.getRange();
7106    UD->setInvalidDecl();
7107    return UD;
7108  }
7109
7110  if (R.isAmbiguous()) {
7111    UD->setInvalidDecl();
7112    return UD;
7113  }
7114
7115  if (IsTypeName) {
7116    // If we asked for a typename and got a non-type decl, error out.
7117    if (!R.getAsSingle<TypeDecl>()) {
7118      Diag(IdentLoc, diag::err_using_typename_non_type);
7119      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
7120        Diag((*I)->getUnderlyingDecl()->getLocation(),
7121             diag::note_using_decl_target);
7122      UD->setInvalidDecl();
7123      return UD;
7124    }
7125  } else {
7126    // If we asked for a non-typename and we got a type, error out,
7127    // but only if this is an instantiation of an unresolved using
7128    // decl.  Otherwise just silently find the type name.
7129    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
7130      Diag(IdentLoc, diag::err_using_dependent_value_is_type);
7131      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
7132      UD->setInvalidDecl();
7133      return UD;
7134    }
7135  }
7136
7137  // C++0x N2914 [namespace.udecl]p6:
7138  // A using-declaration shall not name a namespace.
7139  if (R.getAsSingle<NamespaceDecl>()) {
7140    Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
7141      << SS.getRange();
7142    UD->setInvalidDecl();
7143    return UD;
7144  }
7145
7146  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
7147    if (!CheckUsingShadowDecl(UD, *I, Previous))
7148      BuildUsingShadowDecl(S, UD, *I);
7149  }
7150
7151  return UD;
7152}
7153
7154/// Additional checks for a using declaration referring to a constructor name.
7155bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
7156  assert(!UD->isTypeName() && "expecting a constructor name");
7157
7158  const Type *SourceType = UD->getQualifier()->getAsType();
7159  assert(SourceType &&
7160         "Using decl naming constructor doesn't have type in scope spec.");
7161  CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
7162
7163  // Check whether the named type is a direct base class.
7164  CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
7165  CXXRecordDecl::base_class_iterator BaseIt, BaseE;
7166  for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
7167       BaseIt != BaseE; ++BaseIt) {
7168    CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
7169    if (CanonicalSourceType == BaseType)
7170      break;
7171    if (BaseIt->getType()->isDependentType())
7172      break;
7173  }
7174
7175  if (BaseIt == BaseE) {
7176    // Did not find SourceType in the bases.
7177    Diag(UD->getUsingLocation(),
7178         diag::err_using_decl_constructor_not_in_direct_base)
7179      << UD->getNameInfo().getSourceRange()
7180      << QualType(SourceType, 0) << TargetClass;
7181    return true;
7182  }
7183
7184  if (!CurContext->isDependentContext())
7185    BaseIt->setInheritConstructors();
7186
7187  return false;
7188}
7189
7190/// Checks that the given using declaration is not an invalid
7191/// redeclaration.  Note that this is checking only for the using decl
7192/// itself, not for any ill-formedness among the UsingShadowDecls.
7193bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
7194                                       bool isTypeName,
7195                                       const CXXScopeSpec &SS,
7196                                       SourceLocation NameLoc,
7197                                       const LookupResult &Prev) {
7198  // C++03 [namespace.udecl]p8:
7199  // C++0x [namespace.udecl]p10:
7200  //   A using-declaration is a declaration and can therefore be used
7201  //   repeatedly where (and only where) multiple declarations are
7202  //   allowed.
7203  //
7204  // That's in non-member contexts.
7205  if (!CurContext->getRedeclContext()->isRecord())
7206    return false;
7207
7208  NestedNameSpecifier *Qual
7209    = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
7210
7211  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
7212    NamedDecl *D = *I;
7213
7214    bool DTypename;
7215    NestedNameSpecifier *DQual;
7216    if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
7217      DTypename = UD->isTypeName();
7218      DQual = UD->getQualifier();
7219    } else if (UnresolvedUsingValueDecl *UD
7220                 = dyn_cast<UnresolvedUsingValueDecl>(D)) {
7221      DTypename = false;
7222      DQual = UD->getQualifier();
7223    } else if (UnresolvedUsingTypenameDecl *UD
7224                 = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
7225      DTypename = true;
7226      DQual = UD->getQualifier();
7227    } else continue;
7228
7229    // using decls differ if one says 'typename' and the other doesn't.
7230    // FIXME: non-dependent using decls?
7231    if (isTypeName != DTypename) continue;
7232
7233    // using decls differ if they name different scopes (but note that
7234    // template instantiation can cause this check to trigger when it
7235    // didn't before instantiation).
7236    if (Context.getCanonicalNestedNameSpecifier(Qual) !=
7237        Context.getCanonicalNestedNameSpecifier(DQual))
7238      continue;
7239
7240    Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
7241    Diag(D->getLocation(), diag::note_using_decl) << 1;
7242    return true;
7243  }
7244
7245  return false;
7246}
7247
7248
7249/// Checks that the given nested-name qualifier used in a using decl
7250/// in the current context is appropriately related to the current
7251/// scope.  If an error is found, diagnoses it and returns true.
7252bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
7253                                   const CXXScopeSpec &SS,
7254                                   SourceLocation NameLoc) {
7255  DeclContext *NamedContext = computeDeclContext(SS);
7256
7257  if (!CurContext->isRecord()) {
7258    // C++03 [namespace.udecl]p3:
7259    // C++0x [namespace.udecl]p8:
7260    //   A using-declaration for a class member shall be a member-declaration.
7261
7262    // If we weren't able to compute a valid scope, it must be a
7263    // dependent class scope.
7264    if (!NamedContext || NamedContext->isRecord()) {
7265      Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
7266        << SS.getRange();
7267      return true;
7268    }
7269
7270    // Otherwise, everything is known to be fine.
7271    return false;
7272  }
7273
7274  // The current scope is a record.
7275
7276  // If the named context is dependent, we can't decide much.
7277  if (!NamedContext) {
7278    // FIXME: in C++0x, we can diagnose if we can prove that the
7279    // nested-name-specifier does not refer to a base class, which is
7280    // still possible in some cases.
7281
7282    // Otherwise we have to conservatively report that things might be
7283    // okay.
7284    return false;
7285  }
7286
7287  if (!NamedContext->isRecord()) {
7288    // Ideally this would point at the last name in the specifier,
7289    // but we don't have that level of source info.
7290    Diag(SS.getRange().getBegin(),
7291         diag::err_using_decl_nested_name_specifier_is_not_class)
7292      << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
7293    return true;
7294  }
7295
7296  if (!NamedContext->isDependentContext() &&
7297      RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
7298    return true;
7299
7300  if (getLangOpts().CPlusPlus11) {
7301    // C++0x [namespace.udecl]p3:
7302    //   In a using-declaration used as a member-declaration, the
7303    //   nested-name-specifier shall name a base class of the class
7304    //   being defined.
7305
7306    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
7307                                 cast<CXXRecordDecl>(NamedContext))) {
7308      if (CurContext == NamedContext) {
7309        Diag(NameLoc,
7310             diag::err_using_decl_nested_name_specifier_is_current_class)
7311          << SS.getRange();
7312        return true;
7313      }
7314
7315      Diag(SS.getRange().getBegin(),
7316           diag::err_using_decl_nested_name_specifier_is_not_base_class)
7317        << (NestedNameSpecifier*) SS.getScopeRep()
7318        << cast<CXXRecordDecl>(CurContext)
7319        << SS.getRange();
7320      return true;
7321    }
7322
7323    return false;
7324  }
7325
7326  // C++03 [namespace.udecl]p4:
7327  //   A using-declaration used as a member-declaration shall refer
7328  //   to a member of a base class of the class being defined [etc.].
7329
7330  // Salient point: SS doesn't have to name a base class as long as
7331  // lookup only finds members from base classes.  Therefore we can
7332  // diagnose here only if we can prove that that can't happen,
7333  // i.e. if the class hierarchies provably don't intersect.
7334
7335  // TODO: it would be nice if "definitely valid" results were cached
7336  // in the UsingDecl and UsingShadowDecl so that these checks didn't
7337  // need to be repeated.
7338
7339  struct UserData {
7340    llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
7341
7342    static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
7343      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7344      Data->Bases.insert(Base);
7345      return true;
7346    }
7347
7348    bool hasDependentBases(const CXXRecordDecl *Class) {
7349      return !Class->forallBases(collect, this);
7350    }
7351
7352    /// Returns true if the base is dependent or is one of the
7353    /// accumulated base classes.
7354    static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
7355      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
7356      return !Data->Bases.count(Base);
7357    }
7358
7359    bool mightShareBases(const CXXRecordDecl *Class) {
7360      return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
7361    }
7362  };
7363
7364  UserData Data;
7365
7366  // Returns false if we find a dependent base.
7367  if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
7368    return false;
7369
7370  // Returns false if the class has a dependent base or if it or one
7371  // of its bases is present in the base set of the current context.
7372  if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
7373    return false;
7374
7375  Diag(SS.getRange().getBegin(),
7376       diag::err_using_decl_nested_name_specifier_is_not_base_class)
7377    << (NestedNameSpecifier*) SS.getScopeRep()
7378    << cast<CXXRecordDecl>(CurContext)
7379    << SS.getRange();
7380
7381  return true;
7382}
7383
7384Decl *Sema::ActOnAliasDeclaration(Scope *S,
7385                                  AccessSpecifier AS,
7386                                  MultiTemplateParamsArg TemplateParamLists,
7387                                  SourceLocation UsingLoc,
7388                                  UnqualifiedId &Name,
7389                                  AttributeList *AttrList,
7390                                  TypeResult Type) {
7391  // Skip up to the relevant declaration scope.
7392  while (S->getFlags() & Scope::TemplateParamScope)
7393    S = S->getParent();
7394  assert((S->getFlags() & Scope::DeclScope) &&
7395         "got alias-declaration outside of declaration scope");
7396
7397  if (Type.isInvalid())
7398    return 0;
7399
7400  bool Invalid = false;
7401  DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
7402  TypeSourceInfo *TInfo = 0;
7403  GetTypeFromParser(Type.get(), &TInfo);
7404
7405  if (DiagnoseClassNameShadow(CurContext, NameInfo))
7406    return 0;
7407
7408  if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
7409                                      UPPC_DeclarationType)) {
7410    Invalid = true;
7411    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
7412                                             TInfo->getTypeLoc().getBeginLoc());
7413  }
7414
7415  LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
7416  LookupName(Previous, S);
7417
7418  // Warn about shadowing the name of a template parameter.
7419  if (Previous.isSingleResult() &&
7420      Previous.getFoundDecl()->isTemplateParameter()) {
7421    DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
7422    Previous.clear();
7423  }
7424
7425  assert(Name.Kind == UnqualifiedId::IK_Identifier &&
7426         "name in alias declaration must be an identifier");
7427  TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
7428                                               Name.StartLocation,
7429                                               Name.Identifier, TInfo);
7430
7431  NewTD->setAccess(AS);
7432
7433  if (Invalid)
7434    NewTD->setInvalidDecl();
7435
7436  ProcessDeclAttributeList(S, NewTD, AttrList);
7437
7438  CheckTypedefForVariablyModifiedType(S, NewTD);
7439  Invalid |= NewTD->isInvalidDecl();
7440
7441  bool Redeclaration = false;
7442
7443  NamedDecl *NewND;
7444  if (TemplateParamLists.size()) {
7445    TypeAliasTemplateDecl *OldDecl = 0;
7446    TemplateParameterList *OldTemplateParams = 0;
7447
7448    if (TemplateParamLists.size() != 1) {
7449      Diag(UsingLoc, diag::err_alias_template_extra_headers)
7450        << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
7451         TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
7452    }
7453    TemplateParameterList *TemplateParams = TemplateParamLists[0];
7454
7455    // Only consider previous declarations in the same scope.
7456    FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
7457                         /*ExplicitInstantiationOrSpecialization*/false);
7458    if (!Previous.empty()) {
7459      Redeclaration = true;
7460
7461      OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
7462      if (!OldDecl && !Invalid) {
7463        Diag(UsingLoc, diag::err_redefinition_different_kind)
7464          << Name.Identifier;
7465
7466        NamedDecl *OldD = Previous.getRepresentativeDecl();
7467        if (OldD->getLocation().isValid())
7468          Diag(OldD->getLocation(), diag::note_previous_definition);
7469
7470        Invalid = true;
7471      }
7472
7473      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
7474        if (TemplateParameterListsAreEqual(TemplateParams,
7475                                           OldDecl->getTemplateParameters(),
7476                                           /*Complain=*/true,
7477                                           TPL_TemplateMatch))
7478          OldTemplateParams = OldDecl->getTemplateParameters();
7479        else
7480          Invalid = true;
7481
7482        TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
7483        if (!Invalid &&
7484            !Context.hasSameType(OldTD->getUnderlyingType(),
7485                                 NewTD->getUnderlyingType())) {
7486          // FIXME: The C++0x standard does not clearly say this is ill-formed,
7487          // but we can't reasonably accept it.
7488          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
7489            << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
7490          if (OldTD->getLocation().isValid())
7491            Diag(OldTD->getLocation(), diag::note_previous_definition);
7492          Invalid = true;
7493        }
7494      }
7495    }
7496
7497    // Merge any previous default template arguments into our parameters,
7498    // and check the parameter list.
7499    if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
7500                                   TPC_TypeAliasTemplate))
7501      return 0;
7502
7503    TypeAliasTemplateDecl *NewDecl =
7504      TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
7505                                    Name.Identifier, TemplateParams,
7506                                    NewTD);
7507
7508    NewDecl->setAccess(AS);
7509
7510    if (Invalid)
7511      NewDecl->setInvalidDecl();
7512    else if (OldDecl)
7513      NewDecl->setPreviousDeclaration(OldDecl);
7514
7515    NewND = NewDecl;
7516  } else {
7517    ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
7518    NewND = NewTD;
7519  }
7520
7521  if (!Redeclaration)
7522    PushOnScopeChains(NewND, S);
7523
7524  ActOnDocumentableDecl(NewND);
7525  return NewND;
7526}
7527
7528Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
7529                                             SourceLocation NamespaceLoc,
7530                                             SourceLocation AliasLoc,
7531                                             IdentifierInfo *Alias,
7532                                             CXXScopeSpec &SS,
7533                                             SourceLocation IdentLoc,
7534                                             IdentifierInfo *Ident) {
7535
7536  // Lookup the namespace name.
7537  LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
7538  LookupParsedName(R, S, &SS);
7539
7540  // Check if we have a previous declaration with the same name.
7541  NamedDecl *PrevDecl
7542    = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
7543                       ForRedeclaration);
7544  if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
7545    PrevDecl = 0;
7546
7547  if (PrevDecl) {
7548    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
7549      // We already have an alias with the same name that points to the same
7550      // namespace, so don't create a new one.
7551      // FIXME: At some point, we'll want to create the (redundant)
7552      // declaration to maintain better source information.
7553      if (!R.isAmbiguous() && !R.empty() &&
7554          AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
7555        return 0;
7556    }
7557
7558    unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
7559      diag::err_redefinition_different_kind;
7560    Diag(AliasLoc, DiagID) << Alias;
7561    Diag(PrevDecl->getLocation(), diag::note_previous_definition);
7562    return 0;
7563  }
7564
7565  if (R.isAmbiguous())
7566    return 0;
7567
7568  if (R.empty()) {
7569    if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
7570      Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
7571      return 0;
7572    }
7573  }
7574
7575  NamespaceAliasDecl *AliasDecl =
7576    NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
7577                               Alias, SS.getWithLocInContext(Context),
7578                               IdentLoc, R.getFoundDecl());
7579
7580  PushOnScopeChains(AliasDecl, S);
7581  return AliasDecl;
7582}
7583
7584Sema::ImplicitExceptionSpecification
7585Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
7586                                               CXXMethodDecl *MD) {
7587  CXXRecordDecl *ClassDecl = MD->getParent();
7588
7589  // C++ [except.spec]p14:
7590  //   An implicitly declared special member function (Clause 12) shall have an
7591  //   exception-specification. [...]
7592  ImplicitExceptionSpecification ExceptSpec(*this);
7593  if (ClassDecl->isInvalidDecl())
7594    return ExceptSpec;
7595
7596  // Direct base-class constructors.
7597  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7598                                       BEnd = ClassDecl->bases_end();
7599       B != BEnd; ++B) {
7600    if (B->isVirtual()) // Handled below.
7601      continue;
7602
7603    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7604      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7605      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7606      // If this is a deleted function, add it anyway. This might be conformant
7607      // with the standard. This might not. I'm not sure. It might not matter.
7608      if (Constructor)
7609        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7610    }
7611  }
7612
7613  // Virtual base-class constructors.
7614  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7615                                       BEnd = ClassDecl->vbases_end();
7616       B != BEnd; ++B) {
7617    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7618      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7619      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7620      // If this is a deleted function, add it anyway. This might be conformant
7621      // with the standard. This might not. I'm not sure. It might not matter.
7622      if (Constructor)
7623        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7624    }
7625  }
7626
7627  // Field constructors.
7628  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7629                               FEnd = ClassDecl->field_end();
7630       F != FEnd; ++F) {
7631    if (F->hasInClassInitializer()) {
7632      if (Expr *E = F->getInClassInitializer())
7633        ExceptSpec.CalledExpr(E);
7634      else if (!F->isInvalidDecl())
7635        // DR1351:
7636        //   If the brace-or-equal-initializer of a non-static data member
7637        //   invokes a defaulted default constructor of its class or of an
7638        //   enclosing class in a potentially evaluated subexpression, the
7639        //   program is ill-formed.
7640        //
7641        // This resolution is unworkable: the exception specification of the
7642        // default constructor can be needed in an unevaluated context, in
7643        // particular, in the operand of a noexcept-expression, and we can be
7644        // unable to compute an exception specification for an enclosed class.
7645        //
7646        // We do not allow an in-class initializer to require the evaluation
7647        // of the exception specification for any in-class initializer whose
7648        // definition is not lexically complete.
7649        Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
7650    } else if (const RecordType *RecordTy
7651              = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7652      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7653      CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7654      // If this is a deleted function, add it anyway. This might be conformant
7655      // with the standard. This might not. I'm not sure. It might not matter.
7656      // In particular, the problem is that this function never gets called. It
7657      // might just be ill-formed because this function attempts to refer to
7658      // a deleted function here.
7659      if (Constructor)
7660        ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7661    }
7662  }
7663
7664  return ExceptSpec;
7665}
7666
7667Sema::ImplicitExceptionSpecification
7668Sema::ComputeInheritingCtorExceptionSpec(CXXConstructorDecl *CD) {
7669  CXXRecordDecl *ClassDecl = CD->getParent();
7670
7671  // C++ [except.spec]p14:
7672  //   An inheriting constructor [...] shall have an exception-specification. [...]
7673  ImplicitExceptionSpecification ExceptSpec(*this);
7674  if (ClassDecl->isInvalidDecl())
7675    return ExceptSpec;
7676
7677  // Inherited constructor.
7678  const CXXConstructorDecl *InheritedCD = CD->getInheritedConstructor();
7679  const CXXRecordDecl *InheritedDecl = InheritedCD->getParent();
7680  // FIXME: Copying or moving the parameters could add extra exceptions to the
7681  // set, as could the default arguments for the inherited constructor. This
7682  // will be addressed when we implement the resolution of core issue 1351.
7683  ExceptSpec.CalledDecl(CD->getLocStart(), InheritedCD);
7684
7685  // Direct base-class constructors.
7686  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7687                                       BEnd = ClassDecl->bases_end();
7688       B != BEnd; ++B) {
7689    if (B->isVirtual()) // Handled below.
7690      continue;
7691
7692    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7693      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7694      if (BaseClassDecl == InheritedDecl)
7695        continue;
7696      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7697      if (Constructor)
7698        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7699    }
7700  }
7701
7702  // Virtual base-class constructors.
7703  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7704                                       BEnd = ClassDecl->vbases_end();
7705       B != BEnd; ++B) {
7706    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
7707      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
7708      if (BaseClassDecl == InheritedDecl)
7709        continue;
7710      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
7711      if (Constructor)
7712        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
7713    }
7714  }
7715
7716  // Field constructors.
7717  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7718                               FEnd = ClassDecl->field_end();
7719       F != FEnd; ++F) {
7720    if (F->hasInClassInitializer()) {
7721      if (Expr *E = F->getInClassInitializer())
7722        ExceptSpec.CalledExpr(E);
7723      else if (!F->isInvalidDecl())
7724        Diag(CD->getLocation(),
7725             diag::err_in_class_initializer_references_def_ctor) << CD;
7726    } else if (const RecordType *RecordTy
7727              = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
7728      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7729      CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
7730      if (Constructor)
7731        ExceptSpec.CalledDecl(F->getLocation(), Constructor);
7732    }
7733  }
7734
7735  return ExceptSpec;
7736}
7737
7738namespace {
7739/// RAII object to register a special member as being currently declared.
7740struct DeclaringSpecialMember {
7741  Sema &S;
7742  Sema::SpecialMemberDecl D;
7743  bool WasAlreadyBeingDeclared;
7744
7745  DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
7746    : S(S), D(RD, CSM) {
7747    WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D);
7748    if (WasAlreadyBeingDeclared)
7749      // This almost never happens, but if it does, ensure that our cache
7750      // doesn't contain a stale result.
7751      S.SpecialMemberCache.clear();
7752
7753    // FIXME: Register a note to be produced if we encounter an error while
7754    // declaring the special member.
7755  }
7756  ~DeclaringSpecialMember() {
7757    if (!WasAlreadyBeingDeclared)
7758      S.SpecialMembersBeingDeclared.erase(D);
7759  }
7760
7761  /// \brief Are we already trying to declare this special member?
7762  bool isAlreadyBeingDeclared() const {
7763    return WasAlreadyBeingDeclared;
7764  }
7765};
7766}
7767
7768CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
7769                                                     CXXRecordDecl *ClassDecl) {
7770  // C++ [class.ctor]p5:
7771  //   A default constructor for a class X is a constructor of class X
7772  //   that can be called without an argument. If there is no
7773  //   user-declared constructor for class X, a default constructor is
7774  //   implicitly declared. An implicitly-declared default constructor
7775  //   is an inline public member of its class.
7776  assert(ClassDecl->needsImplicitDefaultConstructor() &&
7777         "Should not build implicit default constructor!");
7778
7779  DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
7780  if (DSM.isAlreadyBeingDeclared())
7781    return 0;
7782
7783  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
7784                                                     CXXDefaultConstructor,
7785                                                     false);
7786
7787  // Create the actual constructor declaration.
7788  CanQualType ClassType
7789    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7790  SourceLocation ClassLoc = ClassDecl->getLocation();
7791  DeclarationName Name
7792    = Context.DeclarationNames.getCXXConstructorName(ClassType);
7793  DeclarationNameInfo NameInfo(Name, ClassLoc);
7794  CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
7795      Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
7796      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
7797      Constexpr);
7798  DefaultCon->setAccess(AS_public);
7799  DefaultCon->setDefaulted();
7800  DefaultCon->setImplicit();
7801
7802  // Build an exception specification pointing back at this constructor.
7803  FunctionProtoType::ExtProtoInfo EPI;
7804  EPI.ExceptionSpecType = EST_Unevaluated;
7805  EPI.ExceptionSpecDecl = DefaultCon;
7806  DefaultCon->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
7807
7808  // We don't need to use SpecialMemberIsTrivial here; triviality for default
7809  // constructors is easy to compute.
7810  DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
7811
7812  if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
7813    SetDeclDeleted(DefaultCon, ClassLoc);
7814
7815  // Note that we have declared this constructor.
7816  ++ASTContext::NumImplicitDefaultConstructorsDeclared;
7817
7818  if (Scope *S = getScopeForContext(ClassDecl))
7819    PushOnScopeChains(DefaultCon, S, false);
7820  ClassDecl->addDecl(DefaultCon);
7821
7822  return DefaultCon;
7823}
7824
7825void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
7826                                            CXXConstructorDecl *Constructor) {
7827  assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
7828          !Constructor->doesThisDeclarationHaveABody() &&
7829          !Constructor->isDeleted()) &&
7830    "DefineImplicitDefaultConstructor - call it for implicit default ctor");
7831
7832  CXXRecordDecl *ClassDecl = Constructor->getParent();
7833  assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
7834
7835  SynthesizedFunctionScope Scope(*this, Constructor);
7836  DiagnosticErrorTrap Trap(Diags);
7837  if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
7838      Trap.hasErrorOccurred()) {
7839    Diag(CurrentLocation, diag::note_member_synthesized_at)
7840      << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
7841    Constructor->setInvalidDecl();
7842    return;
7843  }
7844
7845  SourceLocation Loc = Constructor->getLocation();
7846  Constructor->setBody(new (Context) CompoundStmt(Loc));
7847
7848  Constructor->setUsed();
7849  MarkVTableUsed(CurrentLocation, ClassDecl);
7850
7851  if (ASTMutationListener *L = getASTMutationListener()) {
7852    L->CompletedImplicitDefinition(Constructor);
7853  }
7854}
7855
7856void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
7857  // Check that any explicitly-defaulted methods have exception specifications
7858  // compatible with their implicit exception specifications.
7859  CheckDelayedExplicitlyDefaultedMemberExceptionSpecs();
7860}
7861
7862namespace {
7863/// Information on inheriting constructors to declare.
7864class InheritingConstructorInfo {
7865public:
7866  InheritingConstructorInfo(Sema &SemaRef, CXXRecordDecl *Derived)
7867      : SemaRef(SemaRef), Derived(Derived) {
7868    // Mark the constructors that we already have in the derived class.
7869    //
7870    // C++11 [class.inhctor]p3: [...] a constructor is implicitly declared [...]
7871    //   unless there is a user-declared constructor with the same signature in
7872    //   the class where the using-declaration appears.
7873    visitAll(Derived, &InheritingConstructorInfo::noteDeclaredInDerived);
7874  }
7875
7876  void inheritAll(CXXRecordDecl *RD) {
7877    visitAll(RD, &InheritingConstructorInfo::inherit);
7878  }
7879
7880private:
7881  /// Information about an inheriting constructor.
7882  struct InheritingConstructor {
7883    InheritingConstructor()
7884      : DeclaredInDerived(false), BaseCtor(0), DerivedCtor(0) {}
7885
7886    /// If \c true, a constructor with this signature is already declared
7887    /// in the derived class.
7888    bool DeclaredInDerived;
7889
7890    /// The constructor which is inherited.
7891    const CXXConstructorDecl *BaseCtor;
7892
7893    /// The derived constructor we declared.
7894    CXXConstructorDecl *DerivedCtor;
7895  };
7896
7897  /// Inheriting constructors with a given canonical type. There can be at
7898  /// most one such non-template constructor, and any number of templated
7899  /// constructors.
7900  struct InheritingConstructorsForType {
7901    InheritingConstructor NonTemplate;
7902    llvm::SmallVector<
7903      std::pair<TemplateParameterList*, InheritingConstructor>, 4> Templates;
7904
7905    InheritingConstructor &getEntry(Sema &S, const CXXConstructorDecl *Ctor) {
7906      if (FunctionTemplateDecl *FTD = Ctor->getDescribedFunctionTemplate()) {
7907        TemplateParameterList *ParamList = FTD->getTemplateParameters();
7908        for (unsigned I = 0, N = Templates.size(); I != N; ++I)
7909          if (S.TemplateParameterListsAreEqual(ParamList, Templates[I].first,
7910                                               false, S.TPL_TemplateMatch))
7911            return Templates[I].second;
7912        Templates.push_back(std::make_pair(ParamList, InheritingConstructor()));
7913        return Templates.back().second;
7914      }
7915
7916      return NonTemplate;
7917    }
7918  };
7919
7920  /// Get or create the inheriting constructor record for a constructor.
7921  InheritingConstructor &getEntry(const CXXConstructorDecl *Ctor,
7922                                  QualType CtorType) {
7923    return Map[CtorType.getCanonicalType()->castAs<FunctionProtoType>()]
7924        .getEntry(SemaRef, Ctor);
7925  }
7926
7927  typedef void (InheritingConstructorInfo::*VisitFn)(const CXXConstructorDecl*);
7928
7929  /// Process all constructors for a class.
7930  void visitAll(const CXXRecordDecl *RD, VisitFn Callback) {
7931    for (CXXRecordDecl::ctor_iterator CtorIt = RD->ctor_begin(),
7932                                      CtorE = RD->ctor_end();
7933         CtorIt != CtorE; ++CtorIt)
7934      (this->*Callback)(*CtorIt);
7935    for (CXXRecordDecl::specific_decl_iterator<FunctionTemplateDecl>
7936             I(RD->decls_begin()), E(RD->decls_end());
7937         I != E; ++I) {
7938      const FunctionDecl *FD = (*I)->getTemplatedDecl();
7939      if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
7940        (this->*Callback)(CD);
7941    }
7942  }
7943
7944  /// Note that a constructor (or constructor template) was declared in Derived.
7945  void noteDeclaredInDerived(const CXXConstructorDecl *Ctor) {
7946    getEntry(Ctor, Ctor->getType()).DeclaredInDerived = true;
7947  }
7948
7949  /// Inherit a single constructor.
7950  void inherit(const CXXConstructorDecl *Ctor) {
7951    const FunctionProtoType *CtorType =
7952        Ctor->getType()->castAs<FunctionProtoType>();
7953    ArrayRef<QualType> ArgTypes(CtorType->getArgTypes());
7954    FunctionProtoType::ExtProtoInfo EPI = CtorType->getExtProtoInfo();
7955
7956    SourceLocation UsingLoc = getUsingLoc(Ctor->getParent());
7957
7958    // Core issue (no number yet): the ellipsis is always discarded.
7959    if (EPI.Variadic) {
7960      SemaRef.Diag(UsingLoc, diag::warn_using_decl_constructor_ellipsis);
7961      SemaRef.Diag(Ctor->getLocation(),
7962                   diag::note_using_decl_constructor_ellipsis);
7963      EPI.Variadic = false;
7964    }
7965
7966    // Declare a constructor for each number of parameters.
7967    //
7968    // C++11 [class.inhctor]p1:
7969    //   The candidate set of inherited constructors from the class X named in
7970    //   the using-declaration consists of [... modulo defects ...] for each
7971    //   constructor or constructor template of X, the set of constructors or
7972    //   constructor templates that results from omitting any ellipsis parameter
7973    //   specification and successively omitting parameters with a default
7974    //   argument from the end of the parameter-type-list
7975    unsigned MinParams = minParamsToInherit(Ctor);
7976    unsigned Params = Ctor->getNumParams();
7977    if (Params >= MinParams) {
7978      do
7979        declareCtor(UsingLoc, Ctor,
7980                    SemaRef.Context.getFunctionType(
7981                        Ctor->getResultType(), ArgTypes.slice(0, Params), EPI));
7982      while (Params > MinParams &&
7983             Ctor->getParamDecl(--Params)->hasDefaultArg());
7984    }
7985  }
7986
7987  /// Find the using-declaration which specified that we should inherit the
7988  /// constructors of \p Base.
7989  SourceLocation getUsingLoc(const CXXRecordDecl *Base) {
7990    // No fancy lookup required; just look for the base constructor name
7991    // directly within the derived class.
7992    ASTContext &Context = SemaRef.Context;
7993    DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
7994        Context.getCanonicalType(Context.getRecordType(Base)));
7995    DeclContext::lookup_const_result Decls = Derived->lookup(Name);
7996    return Decls.empty() ? Derived->getLocation() : Decls[0]->getLocation();
7997  }
7998
7999  unsigned minParamsToInherit(const CXXConstructorDecl *Ctor) {
8000    // C++11 [class.inhctor]p3:
8001    //   [F]or each constructor template in the candidate set of inherited
8002    //   constructors, a constructor template is implicitly declared
8003    if (Ctor->getDescribedFunctionTemplate())
8004      return 0;
8005
8006    //   For each non-template constructor in the candidate set of inherited
8007    //   constructors other than a constructor having no parameters or a
8008    //   copy/move constructor having a single parameter, a constructor is
8009    //   implicitly declared [...]
8010    if (Ctor->getNumParams() == 0)
8011      return 1;
8012    if (Ctor->isCopyOrMoveConstructor())
8013      return 2;
8014
8015    // Per discussion on core reflector, never inherit a constructor which
8016    // would become a default, copy, or move constructor of Derived either.
8017    const ParmVarDecl *PD = Ctor->getParamDecl(0);
8018    const ReferenceType *RT = PD->getType()->getAs<ReferenceType>();
8019    return (RT && RT->getPointeeCXXRecordDecl() == Derived) ? 2 : 1;
8020  }
8021
8022  /// Declare a single inheriting constructor, inheriting the specified
8023  /// constructor, with the given type.
8024  void declareCtor(SourceLocation UsingLoc, const CXXConstructorDecl *BaseCtor,
8025                   QualType DerivedType) {
8026    InheritingConstructor &Entry = getEntry(BaseCtor, DerivedType);
8027
8028    // C++11 [class.inhctor]p3:
8029    //   ... a constructor is implicitly declared with the same constructor
8030    //   characteristics unless there is a user-declared constructor with
8031    //   the same signature in the class where the using-declaration appears
8032    if (Entry.DeclaredInDerived)
8033      return;
8034
8035    // C++11 [class.inhctor]p7:
8036    //   If two using-declarations declare inheriting constructors with the
8037    //   same signature, the program is ill-formed
8038    if (Entry.DerivedCtor) {
8039      if (BaseCtor->getParent() != Entry.BaseCtor->getParent()) {
8040        // Only diagnose this once per constructor.
8041        if (Entry.DerivedCtor->isInvalidDecl())
8042          return;
8043        Entry.DerivedCtor->setInvalidDecl();
8044
8045        SemaRef.Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
8046        SemaRef.Diag(BaseCtor->getLocation(),
8047                     diag::note_using_decl_constructor_conflict_current_ctor);
8048        SemaRef.Diag(Entry.BaseCtor->getLocation(),
8049                     diag::note_using_decl_constructor_conflict_previous_ctor);
8050        SemaRef.Diag(Entry.DerivedCtor->getLocation(),
8051                     diag::note_using_decl_constructor_conflict_previous_using);
8052      } else {
8053        // Core issue (no number): if the same inheriting constructor is
8054        // produced by multiple base class constructors from the same base
8055        // class, the inheriting constructor is defined as deleted.
8056        SemaRef.SetDeclDeleted(Entry.DerivedCtor, UsingLoc);
8057      }
8058
8059      return;
8060    }
8061
8062    ASTContext &Context = SemaRef.Context;
8063    DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
8064        Context.getCanonicalType(Context.getRecordType(Derived)));
8065    DeclarationNameInfo NameInfo(Name, UsingLoc);
8066
8067    TemplateParameterList *TemplateParams = 0;
8068    if (const FunctionTemplateDecl *FTD =
8069            BaseCtor->getDescribedFunctionTemplate()) {
8070      TemplateParams = FTD->getTemplateParameters();
8071      // We're reusing template parameters from a different DeclContext. This
8072      // is questionable at best, but works out because the template depth in
8073      // both places is guaranteed to be 0.
8074      // FIXME: Rebuild the template parameters in the new context, and
8075      // transform the function type to refer to them.
8076    }
8077
8078    // Build type source info pointing at the using-declaration. This is
8079    // required by template instantiation.
8080    TypeSourceInfo *TInfo =
8081        Context.getTrivialTypeSourceInfo(DerivedType, UsingLoc);
8082    FunctionProtoTypeLoc ProtoLoc =
8083        TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
8084
8085    CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
8086        Context, Derived, UsingLoc, NameInfo, DerivedType,
8087        TInfo, BaseCtor->isExplicit(), /*Inline=*/true,
8088        /*ImplicitlyDeclared=*/true, /*Constexpr=*/BaseCtor->isConstexpr());
8089
8090    // Build an unevaluated exception specification for this constructor.
8091    const FunctionProtoType *FPT = DerivedType->castAs<FunctionProtoType>();
8092    FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8093    EPI.ExceptionSpecType = EST_Unevaluated;
8094    EPI.ExceptionSpecDecl = DerivedCtor;
8095    DerivedCtor->setType(Context.getFunctionType(FPT->getResultType(),
8096                                                 FPT->getArgTypes(), EPI));
8097
8098    // Build the parameter declarations.
8099    SmallVector<ParmVarDecl *, 16> ParamDecls;
8100    for (unsigned I = 0, N = FPT->getNumArgs(); I != N; ++I) {
8101      TypeSourceInfo *TInfo =
8102          Context.getTrivialTypeSourceInfo(FPT->getArgType(I), UsingLoc);
8103      ParmVarDecl *PD = ParmVarDecl::Create(
8104          Context, DerivedCtor, UsingLoc, UsingLoc, /*IdentifierInfo=*/0,
8105          FPT->getArgType(I), TInfo, SC_None, /*DefaultArg=*/0);
8106      PD->setScopeInfo(0, I);
8107      PD->setImplicit();
8108      ParamDecls.push_back(PD);
8109      ProtoLoc.setArg(I, PD);
8110    }
8111
8112    // Set up the new constructor.
8113    DerivedCtor->setAccess(BaseCtor->getAccess());
8114    DerivedCtor->setParams(ParamDecls);
8115    DerivedCtor->setInheritedConstructor(BaseCtor);
8116    if (BaseCtor->isDeleted())
8117      SemaRef.SetDeclDeleted(DerivedCtor, UsingLoc);
8118
8119    // If this is a constructor template, build the template declaration.
8120    if (TemplateParams) {
8121      FunctionTemplateDecl *DerivedTemplate =
8122          FunctionTemplateDecl::Create(SemaRef.Context, Derived, UsingLoc, Name,
8123                                       TemplateParams, DerivedCtor);
8124      DerivedTemplate->setAccess(BaseCtor->getAccess());
8125      DerivedCtor->setDescribedFunctionTemplate(DerivedTemplate);
8126      Derived->addDecl(DerivedTemplate);
8127    } else {
8128      Derived->addDecl(DerivedCtor);
8129    }
8130
8131    Entry.BaseCtor = BaseCtor;
8132    Entry.DerivedCtor = DerivedCtor;
8133  }
8134
8135  Sema &SemaRef;
8136  CXXRecordDecl *Derived;
8137  typedef llvm::DenseMap<const Type *, InheritingConstructorsForType> MapType;
8138  MapType Map;
8139};
8140}
8141
8142void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
8143  // Defer declaring the inheriting constructors until the class is
8144  // instantiated.
8145  if (ClassDecl->isDependentContext())
8146    return;
8147
8148  // Find base classes from which we might inherit constructors.
8149  SmallVector<CXXRecordDecl*, 4> InheritedBases;
8150  for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
8151                                          BaseE = ClassDecl->bases_end();
8152       BaseIt != BaseE; ++BaseIt)
8153    if (BaseIt->getInheritConstructors())
8154      InheritedBases.push_back(BaseIt->getType()->getAsCXXRecordDecl());
8155
8156  // Go no further if we're not inheriting any constructors.
8157  if (InheritedBases.empty())
8158    return;
8159
8160  // Declare the inherited constructors.
8161  InheritingConstructorInfo ICI(*this, ClassDecl);
8162  for (unsigned I = 0, N = InheritedBases.size(); I != N; ++I)
8163    ICI.inheritAll(InheritedBases[I]);
8164}
8165
8166void Sema::DefineInheritingConstructor(SourceLocation CurrentLocation,
8167                                       CXXConstructorDecl *Constructor) {
8168  CXXRecordDecl *ClassDecl = Constructor->getParent();
8169  assert(Constructor->getInheritedConstructor() &&
8170         !Constructor->doesThisDeclarationHaveABody() &&
8171         !Constructor->isDeleted());
8172
8173  SynthesizedFunctionScope Scope(*this, Constructor);
8174  DiagnosticErrorTrap Trap(Diags);
8175  if (SetCtorInitializers(Constructor, /*AnyErrors=*/false) ||
8176      Trap.hasErrorOccurred()) {
8177    Diag(CurrentLocation, diag::note_inhctor_synthesized_at)
8178      << Context.getTagDeclType(ClassDecl);
8179    Constructor->setInvalidDecl();
8180    return;
8181  }
8182
8183  SourceLocation Loc = Constructor->getLocation();
8184  Constructor->setBody(new (Context) CompoundStmt(Loc));
8185
8186  Constructor->setUsed();
8187  MarkVTableUsed(CurrentLocation, ClassDecl);
8188
8189  if (ASTMutationListener *L = getASTMutationListener()) {
8190    L->CompletedImplicitDefinition(Constructor);
8191  }
8192}
8193
8194
8195Sema::ImplicitExceptionSpecification
8196Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
8197  CXXRecordDecl *ClassDecl = MD->getParent();
8198
8199  // C++ [except.spec]p14:
8200  //   An implicitly declared special member function (Clause 12) shall have
8201  //   an exception-specification.
8202  ImplicitExceptionSpecification ExceptSpec(*this);
8203  if (ClassDecl->isInvalidDecl())
8204    return ExceptSpec;
8205
8206  // Direct base-class destructors.
8207  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8208                                       BEnd = ClassDecl->bases_end();
8209       B != BEnd; ++B) {
8210    if (B->isVirtual()) // Handled below.
8211      continue;
8212
8213    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8214      ExceptSpec.CalledDecl(B->getLocStart(),
8215                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8216  }
8217
8218  // Virtual base-class destructors.
8219  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8220                                       BEnd = ClassDecl->vbases_end();
8221       B != BEnd; ++B) {
8222    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
8223      ExceptSpec.CalledDecl(B->getLocStart(),
8224                  LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
8225  }
8226
8227  // Field destructors.
8228  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8229                               FEnd = ClassDecl->field_end();
8230       F != FEnd; ++F) {
8231    if (const RecordType *RecordTy
8232        = Context.getBaseElementType(F->getType())->getAs<RecordType>())
8233      ExceptSpec.CalledDecl(F->getLocation(),
8234                  LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
8235  }
8236
8237  return ExceptSpec;
8238}
8239
8240CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
8241  // C++ [class.dtor]p2:
8242  //   If a class has no user-declared destructor, a destructor is
8243  //   declared implicitly. An implicitly-declared destructor is an
8244  //   inline public member of its class.
8245  assert(ClassDecl->needsImplicitDestructor());
8246
8247  DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
8248  if (DSM.isAlreadyBeingDeclared())
8249    return 0;
8250
8251  // Create the actual destructor declaration.
8252  CanQualType ClassType
8253    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8254  SourceLocation ClassLoc = ClassDecl->getLocation();
8255  DeclarationName Name
8256    = Context.DeclarationNames.getCXXDestructorName(ClassType);
8257  DeclarationNameInfo NameInfo(Name, ClassLoc);
8258  CXXDestructorDecl *Destructor
8259      = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8260                                  QualType(), 0, /*isInline=*/true,
8261                                  /*isImplicitlyDeclared=*/true);
8262  Destructor->setAccess(AS_public);
8263  Destructor->setDefaulted();
8264  Destructor->setImplicit();
8265
8266  // Build an exception specification pointing back at this destructor.
8267  FunctionProtoType::ExtProtoInfo EPI;
8268  EPI.ExceptionSpecType = EST_Unevaluated;
8269  EPI.ExceptionSpecDecl = Destructor;
8270  Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8271
8272  AddOverriddenMethods(ClassDecl, Destructor);
8273
8274  // We don't need to use SpecialMemberIsTrivial here; triviality for
8275  // destructors is easy to compute.
8276  Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
8277
8278  if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
8279    SetDeclDeleted(Destructor, ClassLoc);
8280
8281  // Note that we have declared this destructor.
8282  ++ASTContext::NumImplicitDestructorsDeclared;
8283
8284  // Introduce this destructor into its scope.
8285  if (Scope *S = getScopeForContext(ClassDecl))
8286    PushOnScopeChains(Destructor, S, false);
8287  ClassDecl->addDecl(Destructor);
8288
8289  return Destructor;
8290}
8291
8292void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
8293                                    CXXDestructorDecl *Destructor) {
8294  assert((Destructor->isDefaulted() &&
8295          !Destructor->doesThisDeclarationHaveABody() &&
8296          !Destructor->isDeleted()) &&
8297         "DefineImplicitDestructor - call it for implicit default dtor");
8298  CXXRecordDecl *ClassDecl = Destructor->getParent();
8299  assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
8300
8301  if (Destructor->isInvalidDecl())
8302    return;
8303
8304  SynthesizedFunctionScope Scope(*this, Destructor);
8305
8306  DiagnosticErrorTrap Trap(Diags);
8307  MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
8308                                         Destructor->getParent());
8309
8310  if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
8311    Diag(CurrentLocation, diag::note_member_synthesized_at)
8312      << CXXDestructor << Context.getTagDeclType(ClassDecl);
8313
8314    Destructor->setInvalidDecl();
8315    return;
8316  }
8317
8318  SourceLocation Loc = Destructor->getLocation();
8319  Destructor->setBody(new (Context) CompoundStmt(Loc));
8320  Destructor->setImplicitlyDefined(true);
8321  Destructor->setUsed();
8322  MarkVTableUsed(CurrentLocation, ClassDecl);
8323
8324  if (ASTMutationListener *L = getASTMutationListener()) {
8325    L->CompletedImplicitDefinition(Destructor);
8326  }
8327}
8328
8329/// \brief Perform any semantic analysis which needs to be delayed until all
8330/// pending class member declarations have been parsed.
8331void Sema::ActOnFinishCXXMemberDecls() {
8332  // If the context is an invalid C++ class, just suppress these checks.
8333  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(CurContext)) {
8334    if (Record->isInvalidDecl()) {
8335      DelayedDestructorExceptionSpecChecks.clear();
8336      return;
8337    }
8338  }
8339
8340  // Perform any deferred checking of exception specifications for virtual
8341  // destructors.
8342  for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
8343       i != e; ++i) {
8344    const CXXDestructorDecl *Dtor =
8345        DelayedDestructorExceptionSpecChecks[i].first;
8346    assert(!Dtor->getParent()->isDependentType() &&
8347           "Should not ever add destructors of templates into the list.");
8348    CheckOverridingFunctionExceptionSpec(Dtor,
8349        DelayedDestructorExceptionSpecChecks[i].second);
8350  }
8351  DelayedDestructorExceptionSpecChecks.clear();
8352}
8353
8354void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
8355                                         CXXDestructorDecl *Destructor) {
8356  assert(getLangOpts().CPlusPlus11 &&
8357         "adjusting dtor exception specs was introduced in c++11");
8358
8359  // C++11 [class.dtor]p3:
8360  //   A declaration of a destructor that does not have an exception-
8361  //   specification is implicitly considered to have the same exception-
8362  //   specification as an implicit declaration.
8363  const FunctionProtoType *DtorType = Destructor->getType()->
8364                                        getAs<FunctionProtoType>();
8365  if (DtorType->hasExceptionSpec())
8366    return;
8367
8368  // Replace the destructor's type, building off the existing one. Fortunately,
8369  // the only thing of interest in the destructor type is its extended info.
8370  // The return and arguments are fixed.
8371  FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
8372  EPI.ExceptionSpecType = EST_Unevaluated;
8373  EPI.ExceptionSpecDecl = Destructor;
8374  Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
8375
8376  // FIXME: If the destructor has a body that could throw, and the newly created
8377  // spec doesn't allow exceptions, we should emit a warning, because this
8378  // change in behavior can break conforming C++03 programs at runtime.
8379  // However, we don't have a body or an exception specification yet, so it
8380  // needs to be done somewhere else.
8381}
8382
8383/// When generating a defaulted copy or move assignment operator, if a field
8384/// should be copied with __builtin_memcpy rather than via explicit assignments,
8385/// do so. This optimization only applies for arrays of scalars, and for arrays
8386/// of class type where the selected copy/move-assignment operator is trivial.
8387static StmtResult
8388buildMemcpyForAssignmentOp(Sema &S, SourceLocation Loc, QualType T,
8389                           Expr *To, Expr *From) {
8390  // Compute the size of the memory buffer to be copied.
8391  QualType SizeType = S.Context.getSizeType();
8392  llvm::APInt Size(S.Context.getTypeSize(SizeType),
8393                   S.Context.getTypeSizeInChars(T).getQuantity());
8394
8395  // Take the address of the field references for "from" and "to". We
8396  // directly construct UnaryOperators here because semantic analysis
8397  // does not permit us to take the address of an xvalue.
8398  From = new (S.Context) UnaryOperator(From, UO_AddrOf,
8399                         S.Context.getPointerType(From->getType()),
8400                         VK_RValue, OK_Ordinary, Loc);
8401  To = new (S.Context) UnaryOperator(To, UO_AddrOf,
8402                       S.Context.getPointerType(To->getType()),
8403                       VK_RValue, OK_Ordinary, Loc);
8404
8405  const Type *E = T->getBaseElementTypeUnsafe();
8406  bool NeedsCollectableMemCpy =
8407    E->isRecordType() && E->getAs<RecordType>()->getDecl()->hasObjectMember();
8408
8409  // Create a reference to the __builtin_objc_memmove_collectable function
8410  StringRef MemCpyName = NeedsCollectableMemCpy ?
8411    "__builtin_objc_memmove_collectable" :
8412    "__builtin_memcpy";
8413  LookupResult R(S, &S.Context.Idents.get(MemCpyName), Loc,
8414                 Sema::LookupOrdinaryName);
8415  S.LookupName(R, S.TUScope, true);
8416
8417  FunctionDecl *MemCpy = R.getAsSingle<FunctionDecl>();
8418  if (!MemCpy)
8419    // Something went horribly wrong earlier, and we will have complained
8420    // about it.
8421    return StmtError();
8422
8423  ExprResult MemCpyRef = S.BuildDeclRefExpr(MemCpy, S.Context.BuiltinFnTy,
8424                                            VK_RValue, Loc, 0);
8425  assert(MemCpyRef.isUsable() && "Builtin reference cannot fail");
8426
8427  Expr *CallArgs[] = {
8428    To, From, IntegerLiteral::Create(S.Context, Size, SizeType, Loc)
8429  };
8430  ExprResult Call = S.ActOnCallExpr(/*Scope=*/0, MemCpyRef.take(),
8431                                    Loc, CallArgs, Loc);
8432
8433  assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
8434  return S.Owned(Call.takeAs<Stmt>());
8435}
8436
8437/// \brief Builds a statement that copies/moves the given entity from \p From to
8438/// \c To.
8439///
8440/// This routine is used to copy/move the members of a class with an
8441/// implicitly-declared copy/move assignment operator. When the entities being
8442/// copied are arrays, this routine builds for loops to copy them.
8443///
8444/// \param S The Sema object used for type-checking.
8445///
8446/// \param Loc The location where the implicit copy/move is being generated.
8447///
8448/// \param T The type of the expressions being copied/moved. Both expressions
8449/// must have this type.
8450///
8451/// \param To The expression we are copying/moving to.
8452///
8453/// \param From The expression we are copying/moving from.
8454///
8455/// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
8456/// Otherwise, it's a non-static member subobject.
8457///
8458/// \param Copying Whether we're copying or moving.
8459///
8460/// \param Depth Internal parameter recording the depth of the recursion.
8461///
8462/// \returns A statement or a loop that copies the expressions, or StmtResult(0)
8463/// if a memcpy should be used instead.
8464static StmtResult
8465buildSingleCopyAssignRecursively(Sema &S, SourceLocation Loc, QualType T,
8466                                 Expr *To, Expr *From,
8467                                 bool CopyingBaseSubobject, bool Copying,
8468                                 unsigned Depth = 0) {
8469  // C++11 [class.copy]p28:
8470  //   Each subobject is assigned in the manner appropriate to its type:
8471  //
8472  //     - if the subobject is of class type, as if by a call to operator= with
8473  //       the subobject as the object expression and the corresponding
8474  //       subobject of x as a single function argument (as if by explicit
8475  //       qualification; that is, ignoring any possible virtual overriding
8476  //       functions in more derived classes);
8477  //
8478  // C++03 [class.copy]p13:
8479  //     - if the subobject is of class type, the copy assignment operator for
8480  //       the class is used (as if by explicit qualification; that is,
8481  //       ignoring any possible virtual overriding functions in more derived
8482  //       classes);
8483  if (const RecordType *RecordTy = T->getAs<RecordType>()) {
8484    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8485
8486    // Look for operator=.
8487    DeclarationName Name
8488      = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8489    LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
8490    S.LookupQualifiedName(OpLookup, ClassDecl, false);
8491
8492    // Prior to C++11, filter out any result that isn't a copy/move-assignment
8493    // operator.
8494    if (!S.getLangOpts().CPlusPlus11) {
8495      LookupResult::Filter F = OpLookup.makeFilter();
8496      while (F.hasNext()) {
8497        NamedDecl *D = F.next();
8498        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
8499          if (Method->isCopyAssignmentOperator() ||
8500              (!Copying && Method->isMoveAssignmentOperator()))
8501            continue;
8502
8503        F.erase();
8504      }
8505      F.done();
8506    }
8507
8508    // Suppress the protected check (C++ [class.protected]) for each of the
8509    // assignment operators we found. This strange dance is required when
8510    // we're assigning via a base classes's copy-assignment operator. To
8511    // ensure that we're getting the right base class subobject (without
8512    // ambiguities), we need to cast "this" to that subobject type; to
8513    // ensure that we don't go through the virtual call mechanism, we need
8514    // to qualify the operator= name with the base class (see below). However,
8515    // this means that if the base class has a protected copy assignment
8516    // operator, the protected member access check will fail. So, we
8517    // rewrite "protected" access to "public" access in this case, since we
8518    // know by construction that we're calling from a derived class.
8519    if (CopyingBaseSubobject) {
8520      for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
8521           L != LEnd; ++L) {
8522        if (L.getAccess() == AS_protected)
8523          L.setAccess(AS_public);
8524      }
8525    }
8526
8527    // Create the nested-name-specifier that will be used to qualify the
8528    // reference to operator=; this is required to suppress the virtual
8529    // call mechanism.
8530    CXXScopeSpec SS;
8531    const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
8532    SS.MakeTrivial(S.Context,
8533                   NestedNameSpecifier::Create(S.Context, 0, false,
8534                                               CanonicalT),
8535                   Loc);
8536
8537    // Create the reference to operator=.
8538    ExprResult OpEqualRef
8539      = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
8540                                   /*TemplateKWLoc=*/SourceLocation(),
8541                                   /*FirstQualifierInScope=*/0,
8542                                   OpLookup,
8543                                   /*TemplateArgs=*/0,
8544                                   /*SuppressQualifierCheck=*/true);
8545    if (OpEqualRef.isInvalid())
8546      return StmtError();
8547
8548    // Build the call to the assignment operator.
8549
8550    ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
8551                                                  OpEqualRef.takeAs<Expr>(),
8552                                                  Loc, From, Loc);
8553    if (Call.isInvalid())
8554      return StmtError();
8555
8556    // If we built a call to a trivial 'operator=' while copying an array,
8557    // bail out. We'll replace the whole shebang with a memcpy.
8558    CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(Call.get());
8559    if (CE && CE->getMethodDecl()->isTrivial() && Depth)
8560      return StmtResult((Stmt*)0);
8561
8562    // Convert to an expression-statement, and clean up any produced
8563    // temporaries.
8564    return S.ActOnExprStmt(Call);
8565  }
8566
8567  //     - if the subobject is of scalar type, the built-in assignment
8568  //       operator is used.
8569  const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
8570  if (!ArrayTy) {
8571    ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
8572    if (Assignment.isInvalid())
8573      return StmtError();
8574    return S.ActOnExprStmt(Assignment);
8575  }
8576
8577  //     - if the subobject is an array, each element is assigned, in the
8578  //       manner appropriate to the element type;
8579
8580  // Construct a loop over the array bounds, e.g.,
8581  //
8582  //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
8583  //
8584  // that will copy each of the array elements.
8585  QualType SizeType = S.Context.getSizeType();
8586
8587  // Create the iteration variable.
8588  IdentifierInfo *IterationVarName = 0;
8589  {
8590    SmallString<8> Str;
8591    llvm::raw_svector_ostream OS(Str);
8592    OS << "__i" << Depth;
8593    IterationVarName = &S.Context.Idents.get(OS.str());
8594  }
8595  VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
8596                                          IterationVarName, SizeType,
8597                            S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
8598                                          SC_None);
8599
8600  // Initialize the iteration variable to zero.
8601  llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
8602  IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
8603
8604  // Create a reference to the iteration variable; we'll use this several
8605  // times throughout.
8606  Expr *IterationVarRef
8607    = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
8608  assert(IterationVarRef && "Reference to invented variable cannot fail!");
8609  Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
8610  assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
8611
8612  // Create the DeclStmt that holds the iteration variable.
8613  Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
8614
8615  // Subscript the "from" and "to" expressions with the iteration variable.
8616  From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
8617                                                         IterationVarRefRVal,
8618                                                         Loc));
8619  To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
8620                                                       IterationVarRefRVal,
8621                                                       Loc));
8622  if (!Copying) // Cast to rvalue
8623    From = CastForMoving(S, From);
8624
8625  // Build the copy/move for an individual element of the array.
8626  StmtResult Copy =
8627    buildSingleCopyAssignRecursively(S, Loc, ArrayTy->getElementType(),
8628                                     To, From, CopyingBaseSubobject,
8629                                     Copying, Depth + 1);
8630  // Bail out if copying fails or if we determined that we should use memcpy.
8631  if (Copy.isInvalid() || !Copy.get())
8632    return Copy;
8633
8634  // Create the comparison against the array bound.
8635  llvm::APInt Upper
8636    = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
8637  Expr *Comparison
8638    = new (S.Context) BinaryOperator(IterationVarRefRVal,
8639                     IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
8640                                     BO_NE, S.Context.BoolTy,
8641                                     VK_RValue, OK_Ordinary, Loc, false);
8642
8643  // Create the pre-increment of the iteration variable.
8644  Expr *Increment
8645    = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
8646                                    VK_LValue, OK_Ordinary, Loc);
8647
8648  // Construct the loop that copies all elements of this array.
8649  return S.ActOnForStmt(Loc, Loc, InitStmt,
8650                        S.MakeFullExpr(Comparison),
8651                        0, S.MakeFullDiscardedValueExpr(Increment),
8652                        Loc, Copy.take());
8653}
8654
8655static StmtResult
8656buildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
8657                      Expr *To, Expr *From,
8658                      bool CopyingBaseSubobject, bool Copying) {
8659  // Maybe we should use a memcpy?
8660  if (T->isArrayType() && !T.isConstQualified() && !T.isVolatileQualified() &&
8661      T.isTriviallyCopyableType(S.Context))
8662    return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8663
8664  StmtResult Result(buildSingleCopyAssignRecursively(S, Loc, T, To, From,
8665                                                     CopyingBaseSubobject,
8666                                                     Copying, 0));
8667
8668  // If we ended up picking a trivial assignment operator for an array of a
8669  // non-trivially-copyable class type, just emit a memcpy.
8670  if (!Result.isInvalid() && !Result.get())
8671    return buildMemcpyForAssignmentOp(S, Loc, T, To, From);
8672
8673  return Result;
8674}
8675
8676Sema::ImplicitExceptionSpecification
8677Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
8678  CXXRecordDecl *ClassDecl = MD->getParent();
8679
8680  ImplicitExceptionSpecification ExceptSpec(*this);
8681  if (ClassDecl->isInvalidDecl())
8682    return ExceptSpec;
8683
8684  const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
8685  assert(T->getNumArgs() == 1 && "not a copy assignment op");
8686  unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
8687
8688  // C++ [except.spec]p14:
8689  //   An implicitly declared special member function (Clause 12) shall have an
8690  //   exception-specification. [...]
8691
8692  // It is unspecified whether or not an implicit copy assignment operator
8693  // attempts to deduplicate calls to assignment operators of virtual bases are
8694  // made. As such, this exception specification is effectively unspecified.
8695  // Based on a similar decision made for constness in C++0x, we're erring on
8696  // the side of assuming such calls to be made regardless of whether they
8697  // actually happen.
8698  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8699                                       BaseEnd = ClassDecl->bases_end();
8700       Base != BaseEnd; ++Base) {
8701    if (Base->isVirtual())
8702      continue;
8703
8704    CXXRecordDecl *BaseClassDecl
8705      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8706    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8707                                                            ArgQuals, false, 0))
8708      ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8709  }
8710
8711  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8712                                       BaseEnd = ClassDecl->vbases_end();
8713       Base != BaseEnd; ++Base) {
8714    CXXRecordDecl *BaseClassDecl
8715      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8716    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
8717                                                            ArgQuals, false, 0))
8718      ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
8719  }
8720
8721  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8722                                  FieldEnd = ClassDecl->field_end();
8723       Field != FieldEnd;
8724       ++Field) {
8725    QualType FieldType = Context.getBaseElementType(Field->getType());
8726    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8727      if (CXXMethodDecl *CopyAssign =
8728          LookupCopyingAssignment(FieldClassDecl,
8729                                  ArgQuals | FieldType.getCVRQualifiers(),
8730                                  false, 0))
8731        ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
8732    }
8733  }
8734
8735  return ExceptSpec;
8736}
8737
8738CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
8739  // Note: The following rules are largely analoguous to the copy
8740  // constructor rules. Note that virtual bases are not taken into account
8741  // for determining the argument type of the operator. Note also that
8742  // operators taking an object instead of a reference are allowed.
8743  assert(ClassDecl->needsImplicitCopyAssignment());
8744
8745  DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
8746  if (DSM.isAlreadyBeingDeclared())
8747    return 0;
8748
8749  QualType ArgType = Context.getTypeDeclType(ClassDecl);
8750  QualType RetType = Context.getLValueReferenceType(ArgType);
8751  bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
8752  if (Const)
8753    ArgType = ArgType.withConst();
8754  ArgType = Context.getLValueReferenceType(ArgType);
8755
8756  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8757                                                     CXXCopyAssignment,
8758                                                     Const);
8759
8760  //   An implicitly-declared copy assignment operator is an inline public
8761  //   member of its class.
8762  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8763  SourceLocation ClassLoc = ClassDecl->getLocation();
8764  DeclarationNameInfo NameInfo(Name, ClassLoc);
8765  CXXMethodDecl *CopyAssignment =
8766      CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
8767                            /*TInfo=*/ 0, /*StorageClass=*/ SC_None,
8768                            /*isInline=*/ true, Constexpr, SourceLocation());
8769  CopyAssignment->setAccess(AS_public);
8770  CopyAssignment->setDefaulted();
8771  CopyAssignment->setImplicit();
8772
8773  // Build an exception specification pointing back at this member.
8774  FunctionProtoType::ExtProtoInfo EPI;
8775  EPI.ExceptionSpecType = EST_Unevaluated;
8776  EPI.ExceptionSpecDecl = CopyAssignment;
8777  CopyAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
8778
8779  // Add the parameter to the operator.
8780  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
8781                                               ClassLoc, ClassLoc, /*Id=*/0,
8782                                               ArgType, /*TInfo=*/0,
8783                                               SC_None, 0);
8784  CopyAssignment->setParams(FromParam);
8785
8786  AddOverriddenMethods(ClassDecl, CopyAssignment);
8787
8788  CopyAssignment->setTrivial(
8789    ClassDecl->needsOverloadResolutionForCopyAssignment()
8790      ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
8791      : ClassDecl->hasTrivialCopyAssignment());
8792
8793  // C++11 [class.copy]p19:
8794  //   ....  If the class definition does not explicitly declare a copy
8795  //   assignment operator, there is no user-declared move constructor, and
8796  //   there is no user-declared move assignment operator, a copy assignment
8797  //   operator is implicitly declared as defaulted.
8798  if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
8799    SetDeclDeleted(CopyAssignment, ClassLoc);
8800
8801  // Note that we have added this copy-assignment operator.
8802  ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
8803
8804  if (Scope *S = getScopeForContext(ClassDecl))
8805    PushOnScopeChains(CopyAssignment, S, false);
8806  ClassDecl->addDecl(CopyAssignment);
8807
8808  return CopyAssignment;
8809}
8810
8811/// Diagnose an implicit copy operation for a class which is odr-used, but
8812/// which is deprecated because the class has a user-declared copy constructor,
8813/// copy assignment operator, or destructor.
8814static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp,
8815                                            SourceLocation UseLoc) {
8816  assert(CopyOp->isImplicit());
8817
8818  CXXRecordDecl *RD = CopyOp->getParent();
8819  CXXMethodDecl *UserDeclaredOperation = 0;
8820
8821  // In Microsoft mode, assignment operations don't affect constructors and
8822  // vice versa.
8823  if (RD->hasUserDeclaredDestructor()) {
8824    UserDeclaredOperation = RD->getDestructor();
8825  } else if (!isa<CXXConstructorDecl>(CopyOp) &&
8826             RD->hasUserDeclaredCopyConstructor() &&
8827             !S.getLangOpts().MicrosoftMode) {
8828    // Find any user-declared copy constructor.
8829    for (CXXRecordDecl::ctor_iterator I = RD->ctor_begin(),
8830                                      E = RD->ctor_end(); I != E; ++I) {
8831      if (I->isCopyConstructor()) {
8832        UserDeclaredOperation = *I;
8833        break;
8834      }
8835    }
8836    assert(UserDeclaredOperation);
8837  } else if (isa<CXXConstructorDecl>(CopyOp) &&
8838             RD->hasUserDeclaredCopyAssignment() &&
8839             !S.getLangOpts().MicrosoftMode) {
8840    // Find any user-declared move assignment operator.
8841    for (CXXRecordDecl::method_iterator I = RD->method_begin(),
8842                                        E = RD->method_end(); I != E; ++I) {
8843      if (I->isCopyAssignmentOperator()) {
8844        UserDeclaredOperation = *I;
8845        break;
8846      }
8847    }
8848    assert(UserDeclaredOperation);
8849  }
8850
8851  if (UserDeclaredOperation) {
8852    S.Diag(UserDeclaredOperation->getLocation(),
8853         diag::warn_deprecated_copy_operation)
8854      << RD << /*copy assignment*/!isa<CXXConstructorDecl>(CopyOp)
8855      << /*destructor*/isa<CXXDestructorDecl>(UserDeclaredOperation);
8856    S.Diag(UseLoc, diag::note_member_synthesized_at)
8857      << (isa<CXXConstructorDecl>(CopyOp) ? Sema::CXXCopyConstructor
8858                                          : Sema::CXXCopyAssignment)
8859      << RD;
8860  }
8861}
8862
8863void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
8864                                        CXXMethodDecl *CopyAssignOperator) {
8865  assert((CopyAssignOperator->isDefaulted() &&
8866          CopyAssignOperator->isOverloadedOperator() &&
8867          CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
8868          !CopyAssignOperator->doesThisDeclarationHaveABody() &&
8869          !CopyAssignOperator->isDeleted()) &&
8870         "DefineImplicitCopyAssignment called for wrong function");
8871
8872  CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
8873
8874  if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
8875    CopyAssignOperator->setInvalidDecl();
8876    return;
8877  }
8878
8879  // C++11 [class.copy]p18:
8880  //   The [definition of an implicitly declared copy assignment operator] is
8881  //   deprecated if the class has a user-declared copy constructor or a
8882  //   user-declared destructor.
8883  if (getLangOpts().CPlusPlus11 && CopyAssignOperator->isImplicit())
8884    diagnoseDeprecatedCopyOperation(*this, CopyAssignOperator, CurrentLocation);
8885
8886  CopyAssignOperator->setUsed();
8887
8888  SynthesizedFunctionScope Scope(*this, CopyAssignOperator);
8889  DiagnosticErrorTrap Trap(Diags);
8890
8891  // C++0x [class.copy]p30:
8892  //   The implicitly-defined or explicitly-defaulted copy assignment operator
8893  //   for a non-union class X performs memberwise copy assignment of its
8894  //   subobjects. The direct base classes of X are assigned first, in the
8895  //   order of their declaration in the base-specifier-list, and then the
8896  //   immediate non-static data members of X are assigned, in the order in
8897  //   which they were declared in the class definition.
8898
8899  // The statements that form the synthesized function body.
8900  SmallVector<Stmt*, 8> Statements;
8901
8902  // The parameter for the "other" object, which we are copying from.
8903  ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
8904  Qualifiers OtherQuals = Other->getType().getQualifiers();
8905  QualType OtherRefType = Other->getType();
8906  if (const LValueReferenceType *OtherRef
8907                                = OtherRefType->getAs<LValueReferenceType>()) {
8908    OtherRefType = OtherRef->getPointeeType();
8909    OtherQuals = OtherRefType.getQualifiers();
8910  }
8911
8912  // Our location for everything implicitly-generated.
8913  SourceLocation Loc = CopyAssignOperator->getLocation();
8914
8915  // Construct a reference to the "other" object. We'll be using this
8916  // throughout the generated ASTs.
8917  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
8918  assert(OtherRef && "Reference to parameter cannot fail!");
8919
8920  // Construct the "this" pointer. We'll be using this throughout the generated
8921  // ASTs.
8922  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
8923  assert(This && "Reference to this cannot fail!");
8924
8925  // Assign base classes.
8926  bool Invalid = false;
8927  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8928       E = ClassDecl->bases_end(); Base != E; ++Base) {
8929    // Form the assignment:
8930    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
8931    QualType BaseType = Base->getType().getUnqualifiedType();
8932    if (!BaseType->isRecordType()) {
8933      Invalid = true;
8934      continue;
8935    }
8936
8937    CXXCastPath BasePath;
8938    BasePath.push_back(Base);
8939
8940    // Construct the "from" expression, which is an implicit cast to the
8941    // appropriately-qualified base type.
8942    Expr *From = OtherRef;
8943    From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
8944                             CK_UncheckedDerivedToBase,
8945                             VK_LValue, &BasePath).take();
8946
8947    // Dereference "this".
8948    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
8949
8950    // Implicitly cast "this" to the appropriately-qualified base type.
8951    To = ImpCastExprToType(To.take(),
8952                           Context.getCVRQualifiedType(BaseType,
8953                                     CopyAssignOperator->getTypeQualifiers()),
8954                           CK_UncheckedDerivedToBase,
8955                           VK_LValue, &BasePath);
8956
8957    // Build the copy.
8958    StmtResult Copy = buildSingleCopyAssign(*this, Loc, BaseType,
8959                                            To.get(), From,
8960                                            /*CopyingBaseSubobject=*/true,
8961                                            /*Copying=*/true);
8962    if (Copy.isInvalid()) {
8963      Diag(CurrentLocation, diag::note_member_synthesized_at)
8964        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8965      CopyAssignOperator->setInvalidDecl();
8966      return;
8967    }
8968
8969    // Success! Record the copy.
8970    Statements.push_back(Copy.takeAs<Expr>());
8971  }
8972
8973  // Assign non-static members.
8974  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8975                                  FieldEnd = ClassDecl->field_end();
8976       Field != FieldEnd; ++Field) {
8977    if (Field->isUnnamedBitfield())
8978      continue;
8979
8980    if (Field->isInvalidDecl()) {
8981      Invalid = true;
8982      continue;
8983    }
8984
8985    // Check for members of reference type; we can't copy those.
8986    if (Field->getType()->isReferenceType()) {
8987      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8988        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
8989      Diag(Field->getLocation(), diag::note_declared_at);
8990      Diag(CurrentLocation, diag::note_member_synthesized_at)
8991        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8992      Invalid = true;
8993      continue;
8994    }
8995
8996    // Check for members of const-qualified, non-class type.
8997    QualType BaseType = Context.getBaseElementType(Field->getType());
8998    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
8999      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9000        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9001      Diag(Field->getLocation(), diag::note_declared_at);
9002      Diag(CurrentLocation, diag::note_member_synthesized_at)
9003        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9004      Invalid = true;
9005      continue;
9006    }
9007
9008    // Suppress assigning zero-width bitfields.
9009    if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9010      continue;
9011
9012    QualType FieldType = Field->getType().getNonReferenceType();
9013    if (FieldType->isIncompleteArrayType()) {
9014      assert(ClassDecl->hasFlexibleArrayMember() &&
9015             "Incomplete array type is not valid");
9016      continue;
9017    }
9018
9019    // Build references to the field in the object we're copying from and to.
9020    CXXScopeSpec SS; // Intentionally empty
9021    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9022                              LookupMemberName);
9023    MemberLookup.addDecl(*Field);
9024    MemberLookup.resolveKind();
9025    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9026                                               Loc, /*IsArrow=*/false,
9027                                               SS, SourceLocation(), 0,
9028                                               MemberLookup, 0);
9029    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9030                                             Loc, /*IsArrow=*/true,
9031                                             SS, SourceLocation(), 0,
9032                                             MemberLookup, 0);
9033    assert(!From.isInvalid() && "Implicit field reference cannot fail");
9034    assert(!To.isInvalid() && "Implicit field reference cannot fail");
9035
9036    // Build the copy of this field.
9037    StmtResult Copy = buildSingleCopyAssign(*this, Loc, FieldType,
9038                                            To.get(), From.get(),
9039                                            /*CopyingBaseSubobject=*/false,
9040                                            /*Copying=*/true);
9041    if (Copy.isInvalid()) {
9042      Diag(CurrentLocation, diag::note_member_synthesized_at)
9043        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9044      CopyAssignOperator->setInvalidDecl();
9045      return;
9046    }
9047
9048    // Success! Record the copy.
9049    Statements.push_back(Copy.takeAs<Stmt>());
9050  }
9051
9052  if (!Invalid) {
9053    // Add a "return *this;"
9054    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9055
9056    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9057    if (Return.isInvalid())
9058      Invalid = true;
9059    else {
9060      Statements.push_back(Return.takeAs<Stmt>());
9061
9062      if (Trap.hasErrorOccurred()) {
9063        Diag(CurrentLocation, diag::note_member_synthesized_at)
9064          << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9065        Invalid = true;
9066      }
9067    }
9068  }
9069
9070  if (Invalid) {
9071    CopyAssignOperator->setInvalidDecl();
9072    return;
9073  }
9074
9075  StmtResult Body;
9076  {
9077    CompoundScopeRAII CompoundScope(*this);
9078    Body = ActOnCompoundStmt(Loc, Loc, Statements,
9079                             /*isStmtExpr=*/false);
9080    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9081  }
9082  CopyAssignOperator->setBody(Body.takeAs<Stmt>());
9083
9084  if (ASTMutationListener *L = getASTMutationListener()) {
9085    L->CompletedImplicitDefinition(CopyAssignOperator);
9086  }
9087}
9088
9089Sema::ImplicitExceptionSpecification
9090Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
9091  CXXRecordDecl *ClassDecl = MD->getParent();
9092
9093  ImplicitExceptionSpecification ExceptSpec(*this);
9094  if (ClassDecl->isInvalidDecl())
9095    return ExceptSpec;
9096
9097  // C++0x [except.spec]p14:
9098  //   An implicitly declared special member function (Clause 12) shall have an
9099  //   exception-specification. [...]
9100
9101  // It is unspecified whether or not an implicit move assignment operator
9102  // attempts to deduplicate calls to assignment operators of virtual bases are
9103  // made. As such, this exception specification is effectively unspecified.
9104  // Based on a similar decision made for constness in C++0x, we're erring on
9105  // the side of assuming such calls to be made regardless of whether they
9106  // actually happen.
9107  // Note that a move constructor is not implicitly declared when there are
9108  // virtual bases, but it can still be user-declared and explicitly defaulted.
9109  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9110                                       BaseEnd = ClassDecl->bases_end();
9111       Base != BaseEnd; ++Base) {
9112    if (Base->isVirtual())
9113      continue;
9114
9115    CXXRecordDecl *BaseClassDecl
9116      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9117    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9118                                                           0, false, 0))
9119      ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9120  }
9121
9122  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9123                                       BaseEnd = ClassDecl->vbases_end();
9124       Base != BaseEnd; ++Base) {
9125    CXXRecordDecl *BaseClassDecl
9126      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9127    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
9128                                                           0, false, 0))
9129      ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
9130  }
9131
9132  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9133                                  FieldEnd = ClassDecl->field_end();
9134       Field != FieldEnd;
9135       ++Field) {
9136    QualType FieldType = Context.getBaseElementType(Field->getType());
9137    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9138      if (CXXMethodDecl *MoveAssign =
9139              LookupMovingAssignment(FieldClassDecl,
9140                                     FieldType.getCVRQualifiers(),
9141                                     false, 0))
9142        ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
9143    }
9144  }
9145
9146  return ExceptSpec;
9147}
9148
9149/// Determine whether the class type has any direct or indirect virtual base
9150/// classes which have a non-trivial move assignment operator.
9151static bool
9152hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
9153  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9154                                          BaseEnd = ClassDecl->vbases_end();
9155       Base != BaseEnd; ++Base) {
9156    CXXRecordDecl *BaseClass =
9157        cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9158
9159    // Try to declare the move assignment. If it would be deleted, then the
9160    // class does not have a non-trivial move assignment.
9161    if (BaseClass->needsImplicitMoveAssignment())
9162      S.DeclareImplicitMoveAssignment(BaseClass);
9163
9164    if (BaseClass->hasNonTrivialMoveAssignment())
9165      return true;
9166  }
9167
9168  return false;
9169}
9170
9171/// Determine whether the given type either has a move constructor or is
9172/// trivially copyable.
9173static bool
9174hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
9175  Type = S.Context.getBaseElementType(Type);
9176
9177  // FIXME: Technically, non-trivially-copyable non-class types, such as
9178  // reference types, are supposed to return false here, but that appears
9179  // to be a standard defect.
9180  CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
9181  if (!ClassDecl || !ClassDecl->getDefinition() || ClassDecl->isInvalidDecl())
9182    return true;
9183
9184  if (Type.isTriviallyCopyableType(S.Context))
9185    return true;
9186
9187  if (IsConstructor) {
9188    // FIXME: Need this because otherwise hasMoveConstructor isn't guaranteed to
9189    // give the right answer.
9190    if (ClassDecl->needsImplicitMoveConstructor())
9191      S.DeclareImplicitMoveConstructor(ClassDecl);
9192    return ClassDecl->hasMoveConstructor();
9193  }
9194
9195  // FIXME: Need this because otherwise hasMoveAssignment isn't guaranteed to
9196  // give the right answer.
9197  if (ClassDecl->needsImplicitMoveAssignment())
9198    S.DeclareImplicitMoveAssignment(ClassDecl);
9199  return ClassDecl->hasMoveAssignment();
9200}
9201
9202/// Determine whether all non-static data members and direct or virtual bases
9203/// of class \p ClassDecl have either a move operation, or are trivially
9204/// copyable.
9205static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
9206                                            bool IsConstructor) {
9207  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9208                                          BaseEnd = ClassDecl->bases_end();
9209       Base != BaseEnd; ++Base) {
9210    if (Base->isVirtual())
9211      continue;
9212
9213    if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9214      return false;
9215  }
9216
9217  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9218                                          BaseEnd = ClassDecl->vbases_end();
9219       Base != BaseEnd; ++Base) {
9220    if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
9221      return false;
9222  }
9223
9224  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9225                                     FieldEnd = ClassDecl->field_end();
9226       Field != FieldEnd; ++Field) {
9227    if (!hasMoveOrIsTriviallyCopyable(S, Field->getType(), IsConstructor))
9228      return false;
9229  }
9230
9231  return true;
9232}
9233
9234CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
9235  // C++11 [class.copy]p20:
9236  //   If the definition of a class X does not explicitly declare a move
9237  //   assignment operator, one will be implicitly declared as defaulted
9238  //   if and only if:
9239  //
9240  //   - [first 4 bullets]
9241  assert(ClassDecl->needsImplicitMoveAssignment());
9242
9243  DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
9244  if (DSM.isAlreadyBeingDeclared())
9245    return 0;
9246
9247  // [Checked after we build the declaration]
9248  //   - the move assignment operator would not be implicitly defined as
9249  //     deleted,
9250
9251  // [DR1402]:
9252  //   - X has no direct or indirect virtual base class with a non-trivial
9253  //     move assignment operator, and
9254  //   - each of X's non-static data members and direct or virtual base classes
9255  //     has a type that either has a move assignment operator or is trivially
9256  //     copyable.
9257  if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
9258      !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
9259    ClassDecl->setFailedImplicitMoveAssignment();
9260    return 0;
9261  }
9262
9263  // Note: The following rules are largely analoguous to the move
9264  // constructor rules.
9265
9266  QualType ArgType = Context.getTypeDeclType(ClassDecl);
9267  QualType RetType = Context.getLValueReferenceType(ArgType);
9268  ArgType = Context.getRValueReferenceType(ArgType);
9269
9270  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9271                                                     CXXMoveAssignment,
9272                                                     false);
9273
9274  //   An implicitly-declared move assignment operator is an inline public
9275  //   member of its class.
9276  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
9277  SourceLocation ClassLoc = ClassDecl->getLocation();
9278  DeclarationNameInfo NameInfo(Name, ClassLoc);
9279  CXXMethodDecl *MoveAssignment =
9280      CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9281                            /*TInfo=*/0, /*StorageClass=*/SC_None,
9282                            /*isInline=*/true, Constexpr, SourceLocation());
9283  MoveAssignment->setAccess(AS_public);
9284  MoveAssignment->setDefaulted();
9285  MoveAssignment->setImplicit();
9286
9287  // Build an exception specification pointing back at this member.
9288  FunctionProtoType::ExtProtoInfo EPI;
9289  EPI.ExceptionSpecType = EST_Unevaluated;
9290  EPI.ExceptionSpecDecl = MoveAssignment;
9291  MoveAssignment->setType(Context.getFunctionType(RetType, ArgType, EPI));
9292
9293  // Add the parameter to the operator.
9294  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
9295                                               ClassLoc, ClassLoc, /*Id=*/0,
9296                                               ArgType, /*TInfo=*/0,
9297                                               SC_None, 0);
9298  MoveAssignment->setParams(FromParam);
9299
9300  AddOverriddenMethods(ClassDecl, MoveAssignment);
9301
9302  MoveAssignment->setTrivial(
9303    ClassDecl->needsOverloadResolutionForMoveAssignment()
9304      ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
9305      : ClassDecl->hasTrivialMoveAssignment());
9306
9307  // C++0x [class.copy]p9:
9308  //   If the definition of a class X does not explicitly declare a move
9309  //   assignment operator, one will be implicitly declared as defaulted if and
9310  //   only if:
9311  //   [...]
9312  //   - the move assignment operator would not be implicitly defined as
9313  //     deleted.
9314  if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
9315    // Cache this result so that we don't try to generate this over and over
9316    // on every lookup, leaking memory and wasting time.
9317    ClassDecl->setFailedImplicitMoveAssignment();
9318    return 0;
9319  }
9320
9321  // Note that we have added this copy-assignment operator.
9322  ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
9323
9324  if (Scope *S = getScopeForContext(ClassDecl))
9325    PushOnScopeChains(MoveAssignment, S, false);
9326  ClassDecl->addDecl(MoveAssignment);
9327
9328  return MoveAssignment;
9329}
9330
9331void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
9332                                        CXXMethodDecl *MoveAssignOperator) {
9333  assert((MoveAssignOperator->isDefaulted() &&
9334          MoveAssignOperator->isOverloadedOperator() &&
9335          MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
9336          !MoveAssignOperator->doesThisDeclarationHaveABody() &&
9337          !MoveAssignOperator->isDeleted()) &&
9338         "DefineImplicitMoveAssignment called for wrong function");
9339
9340  CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
9341
9342  if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
9343    MoveAssignOperator->setInvalidDecl();
9344    return;
9345  }
9346
9347  MoveAssignOperator->setUsed();
9348
9349  SynthesizedFunctionScope Scope(*this, MoveAssignOperator);
9350  DiagnosticErrorTrap Trap(Diags);
9351
9352  // C++0x [class.copy]p28:
9353  //   The implicitly-defined or move assignment operator for a non-union class
9354  //   X performs memberwise move assignment of its subobjects. The direct base
9355  //   classes of X are assigned first, in the order of their declaration in the
9356  //   base-specifier-list, and then the immediate non-static data members of X
9357  //   are assigned, in the order in which they were declared in the class
9358  //   definition.
9359
9360  // The statements that form the synthesized function body.
9361  SmallVector<Stmt*, 8> Statements;
9362
9363  // The parameter for the "other" object, which we are move from.
9364  ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
9365  QualType OtherRefType = Other->getType()->
9366      getAs<RValueReferenceType>()->getPointeeType();
9367  assert(!OtherRefType.getQualifiers() &&
9368         "Bad argument type of defaulted move assignment");
9369
9370  // Our location for everything implicitly-generated.
9371  SourceLocation Loc = MoveAssignOperator->getLocation();
9372
9373  // Construct a reference to the "other" object. We'll be using this
9374  // throughout the generated ASTs.
9375  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
9376  assert(OtherRef && "Reference to parameter cannot fail!");
9377  // Cast to rvalue.
9378  OtherRef = CastForMoving(*this, OtherRef);
9379
9380  // Construct the "this" pointer. We'll be using this throughout the generated
9381  // ASTs.
9382  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
9383  assert(This && "Reference to this cannot fail!");
9384
9385  // Assign base classes.
9386  bool Invalid = false;
9387  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9388       E = ClassDecl->bases_end(); Base != E; ++Base) {
9389    // Form the assignment:
9390    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
9391    QualType BaseType = Base->getType().getUnqualifiedType();
9392    if (!BaseType->isRecordType()) {
9393      Invalid = true;
9394      continue;
9395    }
9396
9397    CXXCastPath BasePath;
9398    BasePath.push_back(Base);
9399
9400    // Construct the "from" expression, which is an implicit cast to the
9401    // appropriately-qualified base type.
9402    Expr *From = OtherRef;
9403    From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
9404                             VK_XValue, &BasePath).take();
9405
9406    // Dereference "this".
9407    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9408
9409    // Implicitly cast "this" to the appropriately-qualified base type.
9410    To = ImpCastExprToType(To.take(),
9411                           Context.getCVRQualifiedType(BaseType,
9412                                     MoveAssignOperator->getTypeQualifiers()),
9413                           CK_UncheckedDerivedToBase,
9414                           VK_LValue, &BasePath);
9415
9416    // Build the move.
9417    StmtResult Move = buildSingleCopyAssign(*this, Loc, BaseType,
9418                                            To.get(), From,
9419                                            /*CopyingBaseSubobject=*/true,
9420                                            /*Copying=*/false);
9421    if (Move.isInvalid()) {
9422      Diag(CurrentLocation, diag::note_member_synthesized_at)
9423        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9424      MoveAssignOperator->setInvalidDecl();
9425      return;
9426    }
9427
9428    // Success! Record the move.
9429    Statements.push_back(Move.takeAs<Expr>());
9430  }
9431
9432  // Assign non-static members.
9433  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9434                                  FieldEnd = ClassDecl->field_end();
9435       Field != FieldEnd; ++Field) {
9436    if (Field->isUnnamedBitfield())
9437      continue;
9438
9439    if (Field->isInvalidDecl()) {
9440      Invalid = true;
9441      continue;
9442    }
9443
9444    // Check for members of reference type; we can't move those.
9445    if (Field->getType()->isReferenceType()) {
9446      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9447        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9448      Diag(Field->getLocation(), diag::note_declared_at);
9449      Diag(CurrentLocation, diag::note_member_synthesized_at)
9450        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9451      Invalid = true;
9452      continue;
9453    }
9454
9455    // Check for members of const-qualified, non-class type.
9456    QualType BaseType = Context.getBaseElementType(Field->getType());
9457    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
9458      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9459        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9460      Diag(Field->getLocation(), diag::note_declared_at);
9461      Diag(CurrentLocation, diag::note_member_synthesized_at)
9462        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9463      Invalid = true;
9464      continue;
9465    }
9466
9467    // Suppress assigning zero-width bitfields.
9468    if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
9469      continue;
9470
9471    QualType FieldType = Field->getType().getNonReferenceType();
9472    if (FieldType->isIncompleteArrayType()) {
9473      assert(ClassDecl->hasFlexibleArrayMember() &&
9474             "Incomplete array type is not valid");
9475      continue;
9476    }
9477
9478    // Build references to the field in the object we're copying from and to.
9479    CXXScopeSpec SS; // Intentionally empty
9480    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
9481                              LookupMemberName);
9482    MemberLookup.addDecl(*Field);
9483    MemberLookup.resolveKind();
9484    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
9485                                               Loc, /*IsArrow=*/false,
9486                                               SS, SourceLocation(), 0,
9487                                               MemberLookup, 0);
9488    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
9489                                             Loc, /*IsArrow=*/true,
9490                                             SS, SourceLocation(), 0,
9491                                             MemberLookup, 0);
9492    assert(!From.isInvalid() && "Implicit field reference cannot fail");
9493    assert(!To.isInvalid() && "Implicit field reference cannot fail");
9494
9495    assert(!From.get()->isLValue() && // could be xvalue or prvalue
9496        "Member reference with rvalue base must be rvalue except for reference "
9497        "members, which aren't allowed for move assignment.");
9498
9499    // Build the move of this field.
9500    StmtResult Move = buildSingleCopyAssign(*this, Loc, FieldType,
9501                                            To.get(), From.get(),
9502                                            /*CopyingBaseSubobject=*/false,
9503                                            /*Copying=*/false);
9504    if (Move.isInvalid()) {
9505      Diag(CurrentLocation, diag::note_member_synthesized_at)
9506        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9507      MoveAssignOperator->setInvalidDecl();
9508      return;
9509    }
9510
9511    // Success! Record the copy.
9512    Statements.push_back(Move.takeAs<Stmt>());
9513  }
9514
9515  if (!Invalid) {
9516    // Add a "return *this;"
9517    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
9518
9519    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
9520    if (Return.isInvalid())
9521      Invalid = true;
9522    else {
9523      Statements.push_back(Return.takeAs<Stmt>());
9524
9525      if (Trap.hasErrorOccurred()) {
9526        Diag(CurrentLocation, diag::note_member_synthesized_at)
9527          << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9528        Invalid = true;
9529      }
9530    }
9531  }
9532
9533  if (Invalid) {
9534    MoveAssignOperator->setInvalidDecl();
9535    return;
9536  }
9537
9538  StmtResult Body;
9539  {
9540    CompoundScopeRAII CompoundScope(*this);
9541    Body = ActOnCompoundStmt(Loc, Loc, Statements,
9542                             /*isStmtExpr=*/false);
9543    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
9544  }
9545  MoveAssignOperator->setBody(Body.takeAs<Stmt>());
9546
9547  if (ASTMutationListener *L = getASTMutationListener()) {
9548    L->CompletedImplicitDefinition(MoveAssignOperator);
9549  }
9550}
9551
9552Sema::ImplicitExceptionSpecification
9553Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
9554  CXXRecordDecl *ClassDecl = MD->getParent();
9555
9556  ImplicitExceptionSpecification ExceptSpec(*this);
9557  if (ClassDecl->isInvalidDecl())
9558    return ExceptSpec;
9559
9560  const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
9561  assert(T->getNumArgs() >= 1 && "not a copy ctor");
9562  unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
9563
9564  // C++ [except.spec]p14:
9565  //   An implicitly declared special member function (Clause 12) shall have an
9566  //   exception-specification. [...]
9567  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9568                                       BaseEnd = ClassDecl->bases_end();
9569       Base != BaseEnd;
9570       ++Base) {
9571    // Virtual bases are handled below.
9572    if (Base->isVirtual())
9573      continue;
9574
9575    CXXRecordDecl *BaseClassDecl
9576      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9577    if (CXXConstructorDecl *CopyConstructor =
9578          LookupCopyingConstructor(BaseClassDecl, Quals))
9579      ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9580  }
9581  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9582                                       BaseEnd = ClassDecl->vbases_end();
9583       Base != BaseEnd;
9584       ++Base) {
9585    CXXRecordDecl *BaseClassDecl
9586      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
9587    if (CXXConstructorDecl *CopyConstructor =
9588          LookupCopyingConstructor(BaseClassDecl, Quals))
9589      ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
9590  }
9591  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9592                                  FieldEnd = ClassDecl->field_end();
9593       Field != FieldEnd;
9594       ++Field) {
9595    QualType FieldType = Context.getBaseElementType(Field->getType());
9596    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
9597      if (CXXConstructorDecl *CopyConstructor =
9598              LookupCopyingConstructor(FieldClassDecl,
9599                                       Quals | FieldType.getCVRQualifiers()))
9600      ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
9601    }
9602  }
9603
9604  return ExceptSpec;
9605}
9606
9607CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
9608                                                    CXXRecordDecl *ClassDecl) {
9609  // C++ [class.copy]p4:
9610  //   If the class definition does not explicitly declare a copy
9611  //   constructor, one is declared implicitly.
9612  assert(ClassDecl->needsImplicitCopyConstructor());
9613
9614  DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
9615  if (DSM.isAlreadyBeingDeclared())
9616    return 0;
9617
9618  QualType ClassType = Context.getTypeDeclType(ClassDecl);
9619  QualType ArgType = ClassType;
9620  bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
9621  if (Const)
9622    ArgType = ArgType.withConst();
9623  ArgType = Context.getLValueReferenceType(ArgType);
9624
9625  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9626                                                     CXXCopyConstructor,
9627                                                     Const);
9628
9629  DeclarationName Name
9630    = Context.DeclarationNames.getCXXConstructorName(
9631                                           Context.getCanonicalType(ClassType));
9632  SourceLocation ClassLoc = ClassDecl->getLocation();
9633  DeclarationNameInfo NameInfo(Name, ClassLoc);
9634
9635  //   An implicitly-declared copy constructor is an inline public
9636  //   member of its class.
9637  CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
9638      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9639      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9640      Constexpr);
9641  CopyConstructor->setAccess(AS_public);
9642  CopyConstructor->setDefaulted();
9643
9644  // Build an exception specification pointing back at this member.
9645  FunctionProtoType::ExtProtoInfo EPI;
9646  EPI.ExceptionSpecType = EST_Unevaluated;
9647  EPI.ExceptionSpecDecl = CopyConstructor;
9648  CopyConstructor->setType(
9649      Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9650
9651  // Add the parameter to the constructor.
9652  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
9653                                               ClassLoc, ClassLoc,
9654                                               /*IdentifierInfo=*/0,
9655                                               ArgType, /*TInfo=*/0,
9656                                               SC_None, 0);
9657  CopyConstructor->setParams(FromParam);
9658
9659  CopyConstructor->setTrivial(
9660    ClassDecl->needsOverloadResolutionForCopyConstructor()
9661      ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
9662      : ClassDecl->hasTrivialCopyConstructor());
9663
9664  // C++11 [class.copy]p8:
9665  //   ... If the class definition does not explicitly declare a copy
9666  //   constructor, there is no user-declared move constructor, and there is no
9667  //   user-declared move assignment operator, a copy constructor is implicitly
9668  //   declared as defaulted.
9669  if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
9670    SetDeclDeleted(CopyConstructor, ClassLoc);
9671
9672  // Note that we have declared this constructor.
9673  ++ASTContext::NumImplicitCopyConstructorsDeclared;
9674
9675  if (Scope *S = getScopeForContext(ClassDecl))
9676    PushOnScopeChains(CopyConstructor, S, false);
9677  ClassDecl->addDecl(CopyConstructor);
9678
9679  return CopyConstructor;
9680}
9681
9682void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
9683                                   CXXConstructorDecl *CopyConstructor) {
9684  assert((CopyConstructor->isDefaulted() &&
9685          CopyConstructor->isCopyConstructor() &&
9686          !CopyConstructor->doesThisDeclarationHaveABody() &&
9687          !CopyConstructor->isDeleted()) &&
9688         "DefineImplicitCopyConstructor - call it for implicit copy ctor");
9689
9690  CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
9691  assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
9692
9693  // C++11 [class.copy]p7:
9694  //   The [definition of an implicitly declared copy constructro] is
9695  //   deprecated if the class has a user-declared copy assignment operator
9696  //   or a user-declared destructor.
9697  if (getLangOpts().CPlusPlus11 && CopyConstructor->isImplicit())
9698    diagnoseDeprecatedCopyOperation(*this, CopyConstructor, CurrentLocation);
9699
9700  SynthesizedFunctionScope Scope(*this, CopyConstructor);
9701  DiagnosticErrorTrap Trap(Diags);
9702
9703  if (SetCtorInitializers(CopyConstructor, /*AnyErrors=*/false) ||
9704      Trap.hasErrorOccurred()) {
9705    Diag(CurrentLocation, diag::note_member_synthesized_at)
9706      << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
9707    CopyConstructor->setInvalidDecl();
9708  }  else {
9709    Sema::CompoundScopeRAII CompoundScope(*this);
9710    CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
9711                                               CopyConstructor->getLocation(),
9712                                               MultiStmtArg(),
9713                                               /*isStmtExpr=*/false)
9714                                                              .takeAs<Stmt>());
9715    CopyConstructor->setImplicitlyDefined(true);
9716  }
9717
9718  CopyConstructor->setUsed();
9719  if (ASTMutationListener *L = getASTMutationListener()) {
9720    L->CompletedImplicitDefinition(CopyConstructor);
9721  }
9722}
9723
9724Sema::ImplicitExceptionSpecification
9725Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
9726  CXXRecordDecl *ClassDecl = MD->getParent();
9727
9728  // C++ [except.spec]p14:
9729  //   An implicitly declared special member function (Clause 12) shall have an
9730  //   exception-specification. [...]
9731  ImplicitExceptionSpecification ExceptSpec(*this);
9732  if (ClassDecl->isInvalidDecl())
9733    return ExceptSpec;
9734
9735  // Direct base-class constructors.
9736  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
9737                                       BEnd = ClassDecl->bases_end();
9738       B != BEnd; ++B) {
9739    if (B->isVirtual()) // Handled below.
9740      continue;
9741
9742    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9743      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9744      CXXConstructorDecl *Constructor =
9745          LookupMovingConstructor(BaseClassDecl, 0);
9746      // If this is a deleted function, add it anyway. This might be conformant
9747      // with the standard. This might not. I'm not sure. It might not matter.
9748      if (Constructor)
9749        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9750    }
9751  }
9752
9753  // Virtual base-class constructors.
9754  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
9755                                       BEnd = ClassDecl->vbases_end();
9756       B != BEnd; ++B) {
9757    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
9758      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
9759      CXXConstructorDecl *Constructor =
9760          LookupMovingConstructor(BaseClassDecl, 0);
9761      // If this is a deleted function, add it anyway. This might be conformant
9762      // with the standard. This might not. I'm not sure. It might not matter.
9763      if (Constructor)
9764        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
9765    }
9766  }
9767
9768  // Field constructors.
9769  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
9770                               FEnd = ClassDecl->field_end();
9771       F != FEnd; ++F) {
9772    QualType FieldType = Context.getBaseElementType(F->getType());
9773    if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
9774      CXXConstructorDecl *Constructor =
9775          LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
9776      // If this is a deleted function, add it anyway. This might be conformant
9777      // with the standard. This might not. I'm not sure. It might not matter.
9778      // In particular, the problem is that this function never gets called. It
9779      // might just be ill-formed because this function attempts to refer to
9780      // a deleted function here.
9781      if (Constructor)
9782        ExceptSpec.CalledDecl(F->getLocation(), Constructor);
9783    }
9784  }
9785
9786  return ExceptSpec;
9787}
9788
9789CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
9790                                                    CXXRecordDecl *ClassDecl) {
9791  // C++11 [class.copy]p9:
9792  //   If the definition of a class X does not explicitly declare a move
9793  //   constructor, one will be implicitly declared as defaulted if and only if:
9794  //
9795  //   - [first 4 bullets]
9796  assert(ClassDecl->needsImplicitMoveConstructor());
9797
9798  DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
9799  if (DSM.isAlreadyBeingDeclared())
9800    return 0;
9801
9802  // [Checked after we build the declaration]
9803  //   - the move assignment operator would not be implicitly defined as
9804  //     deleted,
9805
9806  // [DR1402]:
9807  //   - each of X's non-static data members and direct or virtual base classes
9808  //     has a type that either has a move constructor or is trivially copyable.
9809  if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
9810    ClassDecl->setFailedImplicitMoveConstructor();
9811    return 0;
9812  }
9813
9814  QualType ClassType = Context.getTypeDeclType(ClassDecl);
9815  QualType ArgType = Context.getRValueReferenceType(ClassType);
9816
9817  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9818                                                     CXXMoveConstructor,
9819                                                     false);
9820
9821  DeclarationName Name
9822    = Context.DeclarationNames.getCXXConstructorName(
9823                                           Context.getCanonicalType(ClassType));
9824  SourceLocation ClassLoc = ClassDecl->getLocation();
9825  DeclarationNameInfo NameInfo(Name, ClassLoc);
9826
9827  // C++11 [class.copy]p11:
9828  //   An implicitly-declared copy/move constructor is an inline public
9829  //   member of its class.
9830  CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
9831      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9832      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
9833      Constexpr);
9834  MoveConstructor->setAccess(AS_public);
9835  MoveConstructor->setDefaulted();
9836
9837  // Build an exception specification pointing back at this member.
9838  FunctionProtoType::ExtProtoInfo EPI;
9839  EPI.ExceptionSpecType = EST_Unevaluated;
9840  EPI.ExceptionSpecDecl = MoveConstructor;
9841  MoveConstructor->setType(
9842      Context.getFunctionType(Context.VoidTy, ArgType, EPI));
9843
9844  // Add the parameter to the constructor.
9845  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
9846                                               ClassLoc, ClassLoc,
9847                                               /*IdentifierInfo=*/0,
9848                                               ArgType, /*TInfo=*/0,
9849                                               SC_None, 0);
9850  MoveConstructor->setParams(FromParam);
9851
9852  MoveConstructor->setTrivial(
9853    ClassDecl->needsOverloadResolutionForMoveConstructor()
9854      ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
9855      : ClassDecl->hasTrivialMoveConstructor());
9856
9857  // C++0x [class.copy]p9:
9858  //   If the definition of a class X does not explicitly declare a move
9859  //   constructor, one will be implicitly declared as defaulted if and only if:
9860  //   [...]
9861  //   - the move constructor would not be implicitly defined as deleted.
9862  if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
9863    // Cache this result so that we don't try to generate this over and over
9864    // on every lookup, leaking memory and wasting time.
9865    ClassDecl->setFailedImplicitMoveConstructor();
9866    return 0;
9867  }
9868
9869  // Note that we have declared this constructor.
9870  ++ASTContext::NumImplicitMoveConstructorsDeclared;
9871
9872  if (Scope *S = getScopeForContext(ClassDecl))
9873    PushOnScopeChains(MoveConstructor, S, false);
9874  ClassDecl->addDecl(MoveConstructor);
9875
9876  return MoveConstructor;
9877}
9878
9879void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
9880                                   CXXConstructorDecl *MoveConstructor) {
9881  assert((MoveConstructor->isDefaulted() &&
9882          MoveConstructor->isMoveConstructor() &&
9883          !MoveConstructor->doesThisDeclarationHaveABody() &&
9884          !MoveConstructor->isDeleted()) &&
9885         "DefineImplicitMoveConstructor - call it for implicit move ctor");
9886
9887  CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
9888  assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
9889
9890  SynthesizedFunctionScope Scope(*this, MoveConstructor);
9891  DiagnosticErrorTrap Trap(Diags);
9892
9893  if (SetCtorInitializers(MoveConstructor, /*AnyErrors=*/false) ||
9894      Trap.hasErrorOccurred()) {
9895    Diag(CurrentLocation, diag::note_member_synthesized_at)
9896      << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
9897    MoveConstructor->setInvalidDecl();
9898  }  else {
9899    Sema::CompoundScopeRAII CompoundScope(*this);
9900    MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
9901                                               MoveConstructor->getLocation(),
9902                                               MultiStmtArg(),
9903                                               /*isStmtExpr=*/false)
9904                                                              .takeAs<Stmt>());
9905    MoveConstructor->setImplicitlyDefined(true);
9906  }
9907
9908  MoveConstructor->setUsed();
9909
9910  if (ASTMutationListener *L = getASTMutationListener()) {
9911    L->CompletedImplicitDefinition(MoveConstructor);
9912  }
9913}
9914
9915bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
9916  return FD->isDeleted() &&
9917         (FD->isDefaulted() || FD->isImplicit()) &&
9918         isa<CXXMethodDecl>(FD);
9919}
9920
9921/// \brief Mark the call operator of the given lambda closure type as "used".
9922static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
9923  CXXMethodDecl *CallOperator
9924    = cast<CXXMethodDecl>(
9925        Lambda->lookup(
9926          S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).front());
9927  CallOperator->setReferenced();
9928  CallOperator->setUsed();
9929}
9930
9931void Sema::DefineImplicitLambdaToFunctionPointerConversion(
9932       SourceLocation CurrentLocation,
9933       CXXConversionDecl *Conv)
9934{
9935  CXXRecordDecl *Lambda = Conv->getParent();
9936
9937  // Make sure that the lambda call operator is marked used.
9938  markLambdaCallOperatorUsed(*this, Lambda);
9939
9940  Conv->setUsed();
9941
9942  SynthesizedFunctionScope Scope(*this, Conv);
9943  DiagnosticErrorTrap Trap(Diags);
9944
9945  // Return the address of the __invoke function.
9946  DeclarationName InvokeName = &Context.Idents.get("__invoke");
9947  CXXMethodDecl *Invoke
9948    = cast<CXXMethodDecl>(Lambda->lookup(InvokeName).front());
9949  Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
9950                                       VK_LValue, Conv->getLocation()).take();
9951  assert(FunctionRef && "Can't refer to __invoke function?");
9952  Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
9953  Conv->setBody(new (Context) CompoundStmt(Context, Return,
9954                                           Conv->getLocation(),
9955                                           Conv->getLocation()));
9956
9957  // Fill in the __invoke function with a dummy implementation. IR generation
9958  // will fill in the actual details.
9959  Invoke->setUsed();
9960  Invoke->setReferenced();
9961  Invoke->setBody(new (Context) CompoundStmt(Conv->getLocation()));
9962
9963  if (ASTMutationListener *L = getASTMutationListener()) {
9964    L->CompletedImplicitDefinition(Conv);
9965    L->CompletedImplicitDefinition(Invoke);
9966  }
9967}
9968
9969void Sema::DefineImplicitLambdaToBlockPointerConversion(
9970       SourceLocation CurrentLocation,
9971       CXXConversionDecl *Conv)
9972{
9973  Conv->setUsed();
9974
9975  SynthesizedFunctionScope Scope(*this, Conv);
9976  DiagnosticErrorTrap Trap(Diags);
9977
9978  // Copy-initialize the lambda object as needed to capture it.
9979  Expr *This = ActOnCXXThis(CurrentLocation).take();
9980  Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
9981
9982  ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
9983                                                        Conv->getLocation(),
9984                                                        Conv, DerefThis);
9985
9986  // If we're not under ARC, make sure we still get the _Block_copy/autorelease
9987  // behavior.  Note that only the general conversion function does this
9988  // (since it's unusable otherwise); in the case where we inline the
9989  // block literal, it has block literal lifetime semantics.
9990  if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
9991    BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
9992                                          CK_CopyAndAutoreleaseBlockObject,
9993                                          BuildBlock.get(), 0, VK_RValue);
9994
9995  if (BuildBlock.isInvalid()) {
9996    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
9997    Conv->setInvalidDecl();
9998    return;
9999  }
10000
10001  // Create the return statement that returns the block from the conversion
10002  // function.
10003  StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
10004  if (Return.isInvalid()) {
10005    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
10006    Conv->setInvalidDecl();
10007    return;
10008  }
10009
10010  // Set the body of the conversion function.
10011  Stmt *ReturnS = Return.take();
10012  Conv->setBody(new (Context) CompoundStmt(Context, ReturnS,
10013                                           Conv->getLocation(),
10014                                           Conv->getLocation()));
10015
10016  // We're done; notify the mutation listener, if any.
10017  if (ASTMutationListener *L = getASTMutationListener()) {
10018    L->CompletedImplicitDefinition(Conv);
10019  }
10020}
10021
10022/// \brief Determine whether the given list arguments contains exactly one
10023/// "real" (non-default) argument.
10024static bool hasOneRealArgument(MultiExprArg Args) {
10025  switch (Args.size()) {
10026  case 0:
10027    return false;
10028
10029  default:
10030    if (!Args[1]->isDefaultArgument())
10031      return false;
10032
10033    // fall through
10034  case 1:
10035    return !Args[0]->isDefaultArgument();
10036  }
10037
10038  return false;
10039}
10040
10041ExprResult
10042Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10043                            CXXConstructorDecl *Constructor,
10044                            MultiExprArg ExprArgs,
10045                            bool HadMultipleCandidates,
10046                            bool IsListInitialization,
10047                            bool RequiresZeroInit,
10048                            unsigned ConstructKind,
10049                            SourceRange ParenRange) {
10050  bool Elidable = false;
10051
10052  // C++0x [class.copy]p34:
10053  //   When certain criteria are met, an implementation is allowed to
10054  //   omit the copy/move construction of a class object, even if the
10055  //   copy/move constructor and/or destructor for the object have
10056  //   side effects. [...]
10057  //     - when a temporary class object that has not been bound to a
10058  //       reference (12.2) would be copied/moved to a class object
10059  //       with the same cv-unqualified type, the copy/move operation
10060  //       can be omitted by constructing the temporary object
10061  //       directly into the target of the omitted copy/move
10062  if (ConstructKind == CXXConstructExpr::CK_Complete &&
10063      Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
10064    Expr *SubExpr = ExprArgs[0];
10065    Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
10066  }
10067
10068  return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
10069                               Elidable, ExprArgs, HadMultipleCandidates,
10070                               IsListInitialization, RequiresZeroInit,
10071                               ConstructKind, ParenRange);
10072}
10073
10074/// BuildCXXConstructExpr - Creates a complete call to a constructor,
10075/// including handling of its default argument expressions.
10076ExprResult
10077Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
10078                            CXXConstructorDecl *Constructor, bool Elidable,
10079                            MultiExprArg ExprArgs,
10080                            bool HadMultipleCandidates,
10081                            bool IsListInitialization,
10082                            bool RequiresZeroInit,
10083                            unsigned ConstructKind,
10084                            SourceRange ParenRange) {
10085  MarkFunctionReferenced(ConstructLoc, Constructor);
10086  return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
10087                                        Constructor, Elidable, ExprArgs,
10088                                        HadMultipleCandidates,
10089                                        IsListInitialization, RequiresZeroInit,
10090              static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
10091                                        ParenRange));
10092}
10093
10094void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
10095  if (VD->isInvalidDecl()) return;
10096
10097  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
10098  if (ClassDecl->isInvalidDecl()) return;
10099  if (ClassDecl->hasIrrelevantDestructor()) return;
10100  if (ClassDecl->isDependentContext()) return;
10101
10102  CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
10103  MarkFunctionReferenced(VD->getLocation(), Destructor);
10104  CheckDestructorAccess(VD->getLocation(), Destructor,
10105                        PDiag(diag::err_access_dtor_var)
10106                        << VD->getDeclName()
10107                        << VD->getType());
10108  DiagnoseUseOfDecl(Destructor, VD->getLocation());
10109
10110  if (!VD->hasGlobalStorage()) return;
10111
10112  // Emit warning for non-trivial dtor in global scope (a real global,
10113  // class-static, function-static).
10114  Diag(VD->getLocation(), diag::warn_exit_time_destructor);
10115
10116  // TODO: this should be re-enabled for static locals by !CXAAtExit
10117  if (!VD->isStaticLocal())
10118    Diag(VD->getLocation(), diag::warn_global_destructor);
10119}
10120
10121/// \brief Given a constructor and the set of arguments provided for the
10122/// constructor, convert the arguments and add any required default arguments
10123/// to form a proper call to this constructor.
10124///
10125/// \returns true if an error occurred, false otherwise.
10126bool
10127Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
10128                              MultiExprArg ArgsPtr,
10129                              SourceLocation Loc,
10130                              SmallVectorImpl<Expr*> &ConvertedArgs,
10131                              bool AllowExplicit,
10132                              bool IsListInitialization) {
10133  // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
10134  unsigned NumArgs = ArgsPtr.size();
10135  Expr **Args = ArgsPtr.data();
10136
10137  const FunctionProtoType *Proto
10138    = Constructor->getType()->getAs<FunctionProtoType>();
10139  assert(Proto && "Constructor without a prototype?");
10140  unsigned NumArgsInProto = Proto->getNumArgs();
10141
10142  // If too few arguments are available, we'll fill in the rest with defaults.
10143  if (NumArgs < NumArgsInProto)
10144    ConvertedArgs.reserve(NumArgsInProto);
10145  else
10146    ConvertedArgs.reserve(NumArgs);
10147
10148  VariadicCallType CallType =
10149    Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
10150  SmallVector<Expr *, 8> AllArgs;
10151  bool Invalid = GatherArgumentsForCall(Loc, Constructor,
10152                                        Proto, 0,
10153                                        llvm::makeArrayRef(Args, NumArgs),
10154                                        AllArgs,
10155                                        CallType, AllowExplicit,
10156                                        IsListInitialization);
10157  ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
10158
10159  DiagnoseSentinelCalls(Constructor, Loc, AllArgs);
10160
10161  CheckConstructorCall(Constructor,
10162                       llvm::makeArrayRef<const Expr *>(AllArgs.data(),
10163                                                        AllArgs.size()),
10164                       Proto, Loc);
10165
10166  return Invalid;
10167}
10168
10169static inline bool
10170CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
10171                                       const FunctionDecl *FnDecl) {
10172  const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
10173  if (isa<NamespaceDecl>(DC)) {
10174    return SemaRef.Diag(FnDecl->getLocation(),
10175                        diag::err_operator_new_delete_declared_in_namespace)
10176      << FnDecl->getDeclName();
10177  }
10178
10179  if (isa<TranslationUnitDecl>(DC) &&
10180      FnDecl->getStorageClass() == SC_Static) {
10181    return SemaRef.Diag(FnDecl->getLocation(),
10182                        diag::err_operator_new_delete_declared_static)
10183      << FnDecl->getDeclName();
10184  }
10185
10186  return false;
10187}
10188
10189static inline bool
10190CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
10191                            CanQualType ExpectedResultType,
10192                            CanQualType ExpectedFirstParamType,
10193                            unsigned DependentParamTypeDiag,
10194                            unsigned InvalidParamTypeDiag) {
10195  QualType ResultType =
10196    FnDecl->getType()->getAs<FunctionType>()->getResultType();
10197
10198  // Check that the result type is not dependent.
10199  if (ResultType->isDependentType())
10200    return SemaRef.Diag(FnDecl->getLocation(),
10201                        diag::err_operator_new_delete_dependent_result_type)
10202    << FnDecl->getDeclName() << ExpectedResultType;
10203
10204  // Check that the result type is what we expect.
10205  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
10206    return SemaRef.Diag(FnDecl->getLocation(),
10207                        diag::err_operator_new_delete_invalid_result_type)
10208    << FnDecl->getDeclName() << ExpectedResultType;
10209
10210  // A function template must have at least 2 parameters.
10211  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
10212    return SemaRef.Diag(FnDecl->getLocation(),
10213                      diag::err_operator_new_delete_template_too_few_parameters)
10214        << FnDecl->getDeclName();
10215
10216  // The function decl must have at least 1 parameter.
10217  if (FnDecl->getNumParams() == 0)
10218    return SemaRef.Diag(FnDecl->getLocation(),
10219                        diag::err_operator_new_delete_too_few_parameters)
10220      << FnDecl->getDeclName();
10221
10222  // Check the first parameter type is not dependent.
10223  QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
10224  if (FirstParamType->isDependentType())
10225    return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
10226      << FnDecl->getDeclName() << ExpectedFirstParamType;
10227
10228  // Check that the first parameter type is what we expect.
10229  if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
10230      ExpectedFirstParamType)
10231    return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
10232    << FnDecl->getDeclName() << ExpectedFirstParamType;
10233
10234  return false;
10235}
10236
10237static bool
10238CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
10239  // C++ [basic.stc.dynamic.allocation]p1:
10240  //   A program is ill-formed if an allocation function is declared in a
10241  //   namespace scope other than global scope or declared static in global
10242  //   scope.
10243  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10244    return true;
10245
10246  CanQualType SizeTy =
10247    SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
10248
10249  // C++ [basic.stc.dynamic.allocation]p1:
10250  //  The return type shall be void*. The first parameter shall have type
10251  //  std::size_t.
10252  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
10253                                  SizeTy,
10254                                  diag::err_operator_new_dependent_param_type,
10255                                  diag::err_operator_new_param_type))
10256    return true;
10257
10258  // C++ [basic.stc.dynamic.allocation]p1:
10259  //  The first parameter shall not have an associated default argument.
10260  if (FnDecl->getParamDecl(0)->hasDefaultArg())
10261    return SemaRef.Diag(FnDecl->getLocation(),
10262                        diag::err_operator_new_default_arg)
10263      << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
10264
10265  return false;
10266}
10267
10268static bool
10269CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
10270  // C++ [basic.stc.dynamic.deallocation]p1:
10271  //   A program is ill-formed if deallocation functions are declared in a
10272  //   namespace scope other than global scope or declared static in global
10273  //   scope.
10274  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
10275    return true;
10276
10277  // C++ [basic.stc.dynamic.deallocation]p2:
10278  //   Each deallocation function shall return void and its first parameter
10279  //   shall be void*.
10280  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
10281                                  SemaRef.Context.VoidPtrTy,
10282                                 diag::err_operator_delete_dependent_param_type,
10283                                 diag::err_operator_delete_param_type))
10284    return true;
10285
10286  return false;
10287}
10288
10289/// CheckOverloadedOperatorDeclaration - Check whether the declaration
10290/// of this overloaded operator is well-formed. If so, returns false;
10291/// otherwise, emits appropriate diagnostics and returns true.
10292bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
10293  assert(FnDecl && FnDecl->isOverloadedOperator() &&
10294         "Expected an overloaded operator declaration");
10295
10296  OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
10297
10298  // C++ [over.oper]p5:
10299  //   The allocation and deallocation functions, operator new,
10300  //   operator new[], operator delete and operator delete[], are
10301  //   described completely in 3.7.3. The attributes and restrictions
10302  //   found in the rest of this subclause do not apply to them unless
10303  //   explicitly stated in 3.7.3.
10304  if (Op == OO_Delete || Op == OO_Array_Delete)
10305    return CheckOperatorDeleteDeclaration(*this, FnDecl);
10306
10307  if (Op == OO_New || Op == OO_Array_New)
10308    return CheckOperatorNewDeclaration(*this, FnDecl);
10309
10310  // C++ [over.oper]p6:
10311  //   An operator function shall either be a non-static member
10312  //   function or be a non-member function and have at least one
10313  //   parameter whose type is a class, a reference to a class, an
10314  //   enumeration, or a reference to an enumeration.
10315  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
10316    if (MethodDecl->isStatic())
10317      return Diag(FnDecl->getLocation(),
10318                  diag::err_operator_overload_static) << FnDecl->getDeclName();
10319  } else {
10320    bool ClassOrEnumParam = false;
10321    for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10322                                   ParamEnd = FnDecl->param_end();
10323         Param != ParamEnd; ++Param) {
10324      QualType ParamType = (*Param)->getType().getNonReferenceType();
10325      if (ParamType->isDependentType() || ParamType->isRecordType() ||
10326          ParamType->isEnumeralType()) {
10327        ClassOrEnumParam = true;
10328        break;
10329      }
10330    }
10331
10332    if (!ClassOrEnumParam)
10333      return Diag(FnDecl->getLocation(),
10334                  diag::err_operator_overload_needs_class_or_enum)
10335        << FnDecl->getDeclName();
10336  }
10337
10338  // C++ [over.oper]p8:
10339  //   An operator function cannot have default arguments (8.3.6),
10340  //   except where explicitly stated below.
10341  //
10342  // Only the function-call operator allows default arguments
10343  // (C++ [over.call]p1).
10344  if (Op != OO_Call) {
10345    for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
10346         Param != FnDecl->param_end(); ++Param) {
10347      if ((*Param)->hasDefaultArg())
10348        return Diag((*Param)->getLocation(),
10349                    diag::err_operator_overload_default_arg)
10350          << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
10351    }
10352  }
10353
10354  static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
10355    { false, false, false }
10356#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
10357    , { Unary, Binary, MemberOnly }
10358#include "clang/Basic/OperatorKinds.def"
10359  };
10360
10361  bool CanBeUnaryOperator = OperatorUses[Op][0];
10362  bool CanBeBinaryOperator = OperatorUses[Op][1];
10363  bool MustBeMemberOperator = OperatorUses[Op][2];
10364
10365  // C++ [over.oper]p8:
10366  //   [...] Operator functions cannot have more or fewer parameters
10367  //   than the number required for the corresponding operator, as
10368  //   described in the rest of this subclause.
10369  unsigned NumParams = FnDecl->getNumParams()
10370                     + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
10371  if (Op != OO_Call &&
10372      ((NumParams == 1 && !CanBeUnaryOperator) ||
10373       (NumParams == 2 && !CanBeBinaryOperator) ||
10374       (NumParams < 1) || (NumParams > 2))) {
10375    // We have the wrong number of parameters.
10376    unsigned ErrorKind;
10377    if (CanBeUnaryOperator && CanBeBinaryOperator) {
10378      ErrorKind = 2;  // 2 -> unary or binary.
10379    } else if (CanBeUnaryOperator) {
10380      ErrorKind = 0;  // 0 -> unary
10381    } else {
10382      assert(CanBeBinaryOperator &&
10383             "All non-call overloaded operators are unary or binary!");
10384      ErrorKind = 1;  // 1 -> binary
10385    }
10386
10387    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
10388      << FnDecl->getDeclName() << NumParams << ErrorKind;
10389  }
10390
10391  // Overloaded operators other than operator() cannot be variadic.
10392  if (Op != OO_Call &&
10393      FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
10394    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
10395      << FnDecl->getDeclName();
10396  }
10397
10398  // Some operators must be non-static member functions.
10399  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
10400    return Diag(FnDecl->getLocation(),
10401                diag::err_operator_overload_must_be_member)
10402      << FnDecl->getDeclName();
10403  }
10404
10405  // C++ [over.inc]p1:
10406  //   The user-defined function called operator++ implements the
10407  //   prefix and postfix ++ operator. If this function is a member
10408  //   function with no parameters, or a non-member function with one
10409  //   parameter of class or enumeration type, it defines the prefix
10410  //   increment operator ++ for objects of that type. If the function
10411  //   is a member function with one parameter (which shall be of type
10412  //   int) or a non-member function with two parameters (the second
10413  //   of which shall be of type int), it defines the postfix
10414  //   increment operator ++ for objects of that type.
10415  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
10416    ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
10417    bool ParamIsInt = false;
10418    if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
10419      ParamIsInt = BT->getKind() == BuiltinType::Int;
10420
10421    if (!ParamIsInt)
10422      return Diag(LastParam->getLocation(),
10423                  diag::err_operator_overload_post_incdec_must_be_int)
10424        << LastParam->getType() << (Op == OO_MinusMinus);
10425  }
10426
10427  return false;
10428}
10429
10430/// CheckLiteralOperatorDeclaration - Check whether the declaration
10431/// of this literal operator function is well-formed. If so, returns
10432/// false; otherwise, emits appropriate diagnostics and returns true.
10433bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
10434  if (isa<CXXMethodDecl>(FnDecl)) {
10435    Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
10436      << FnDecl->getDeclName();
10437    return true;
10438  }
10439
10440  if (FnDecl->isExternC()) {
10441    Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
10442    return true;
10443  }
10444
10445  bool Valid = false;
10446
10447  // This might be the definition of a literal operator template.
10448  FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
10449  // This might be a specialization of a literal operator template.
10450  if (!TpDecl)
10451    TpDecl = FnDecl->getPrimaryTemplate();
10452
10453  // template <char...> type operator "" name() is the only valid template
10454  // signature, and the only valid signature with no parameters.
10455  if (TpDecl) {
10456    if (FnDecl->param_size() == 0) {
10457      // Must have only one template parameter
10458      TemplateParameterList *Params = TpDecl->getTemplateParameters();
10459      if (Params->size() == 1) {
10460        NonTypeTemplateParmDecl *PmDecl =
10461          dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
10462
10463        // The template parameter must be a char parameter pack.
10464        if (PmDecl && PmDecl->isTemplateParameterPack() &&
10465            Context.hasSameType(PmDecl->getType(), Context.CharTy))
10466          Valid = true;
10467      }
10468    }
10469  } else if (FnDecl->param_size()) {
10470    // Check the first parameter
10471    FunctionDecl::param_iterator Param = FnDecl->param_begin();
10472
10473    QualType T = (*Param)->getType().getUnqualifiedType();
10474
10475    // unsigned long long int, long double, and any character type are allowed
10476    // as the only parameters.
10477    if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
10478        Context.hasSameType(T, Context.LongDoubleTy) ||
10479        Context.hasSameType(T, Context.CharTy) ||
10480        Context.hasSameType(T, Context.WideCharTy) ||
10481        Context.hasSameType(T, Context.Char16Ty) ||
10482        Context.hasSameType(T, Context.Char32Ty)) {
10483      if (++Param == FnDecl->param_end())
10484        Valid = true;
10485      goto FinishedParams;
10486    }
10487
10488    // Otherwise it must be a pointer to const; let's strip those qualifiers.
10489    const PointerType *PT = T->getAs<PointerType>();
10490    if (!PT)
10491      goto FinishedParams;
10492    T = PT->getPointeeType();
10493    if (!T.isConstQualified() || T.isVolatileQualified())
10494      goto FinishedParams;
10495    T = T.getUnqualifiedType();
10496
10497    // Move on to the second parameter;
10498    ++Param;
10499
10500    // If there is no second parameter, the first must be a const char *
10501    if (Param == FnDecl->param_end()) {
10502      if (Context.hasSameType(T, Context.CharTy))
10503        Valid = true;
10504      goto FinishedParams;
10505    }
10506
10507    // const char *, const wchar_t*, const char16_t*, and const char32_t*
10508    // are allowed as the first parameter to a two-parameter function
10509    if (!(Context.hasSameType(T, Context.CharTy) ||
10510          Context.hasSameType(T, Context.WideCharTy) ||
10511          Context.hasSameType(T, Context.Char16Ty) ||
10512          Context.hasSameType(T, Context.Char32Ty)))
10513      goto FinishedParams;
10514
10515    // The second and final parameter must be an std::size_t
10516    T = (*Param)->getType().getUnqualifiedType();
10517    if (Context.hasSameType(T, Context.getSizeType()) &&
10518        ++Param == FnDecl->param_end())
10519      Valid = true;
10520  }
10521
10522  // FIXME: This diagnostic is absolutely terrible.
10523FinishedParams:
10524  if (!Valid) {
10525    Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
10526      << FnDecl->getDeclName();
10527    return true;
10528  }
10529
10530  // A parameter-declaration-clause containing a default argument is not
10531  // equivalent to any of the permitted forms.
10532  for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
10533                                    ParamEnd = FnDecl->param_end();
10534       Param != ParamEnd; ++Param) {
10535    if ((*Param)->hasDefaultArg()) {
10536      Diag((*Param)->getDefaultArgRange().getBegin(),
10537           diag::err_literal_operator_default_argument)
10538        << (*Param)->getDefaultArgRange();
10539      break;
10540    }
10541  }
10542
10543  StringRef LiteralName
10544    = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
10545  if (LiteralName[0] != '_') {
10546    // C++11 [usrlit.suffix]p1:
10547    //   Literal suffix identifiers that do not start with an underscore
10548    //   are reserved for future standardization.
10549    Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
10550  }
10551
10552  return false;
10553}
10554
10555/// ActOnStartLinkageSpecification - Parsed the beginning of a C++
10556/// linkage specification, including the language and (if present)
10557/// the '{'. ExternLoc is the location of the 'extern', LangLoc is
10558/// the location of the language string literal, which is provided
10559/// by Lang/StrSize. LBraceLoc, if valid, provides the location of
10560/// the '{' brace. Otherwise, this linkage specification does not
10561/// have any braces.
10562Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
10563                                           SourceLocation LangLoc,
10564                                           StringRef Lang,
10565                                           SourceLocation LBraceLoc) {
10566  LinkageSpecDecl::LanguageIDs Language;
10567  if (Lang == "\"C\"")
10568    Language = LinkageSpecDecl::lang_c;
10569  else if (Lang == "\"C++\"")
10570    Language = LinkageSpecDecl::lang_cxx;
10571  else {
10572    Diag(LangLoc, diag::err_bad_language);
10573    return 0;
10574  }
10575
10576  // FIXME: Add all the various semantics of linkage specifications
10577
10578  LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
10579                                               ExternLoc, LangLoc, Language,
10580                                               LBraceLoc.isValid());
10581  CurContext->addDecl(D);
10582  PushDeclContext(S, D);
10583  return D;
10584}
10585
10586/// ActOnFinishLinkageSpecification - Complete the definition of
10587/// the C++ linkage specification LinkageSpec. If RBraceLoc is
10588/// valid, it's the position of the closing '}' brace in a linkage
10589/// specification that uses braces.
10590Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
10591                                            Decl *LinkageSpec,
10592                                            SourceLocation RBraceLoc) {
10593  if (LinkageSpec) {
10594    if (RBraceLoc.isValid()) {
10595      LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
10596      LSDecl->setRBraceLoc(RBraceLoc);
10597    }
10598    PopDeclContext();
10599  }
10600  return LinkageSpec;
10601}
10602
10603Decl *Sema::ActOnEmptyDeclaration(Scope *S,
10604                                  AttributeList *AttrList,
10605                                  SourceLocation SemiLoc) {
10606  Decl *ED = EmptyDecl::Create(Context, CurContext, SemiLoc);
10607  // Attribute declarations appertain to empty declaration so we handle
10608  // them here.
10609  if (AttrList)
10610    ProcessDeclAttributeList(S, ED, AttrList);
10611
10612  CurContext->addDecl(ED);
10613  return ED;
10614}
10615
10616/// \brief Perform semantic analysis for the variable declaration that
10617/// occurs within a C++ catch clause, returning the newly-created
10618/// variable.
10619VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
10620                                         TypeSourceInfo *TInfo,
10621                                         SourceLocation StartLoc,
10622                                         SourceLocation Loc,
10623                                         IdentifierInfo *Name) {
10624  bool Invalid = false;
10625  QualType ExDeclType = TInfo->getType();
10626
10627  // Arrays and functions decay.
10628  if (ExDeclType->isArrayType())
10629    ExDeclType = Context.getArrayDecayedType(ExDeclType);
10630  else if (ExDeclType->isFunctionType())
10631    ExDeclType = Context.getPointerType(ExDeclType);
10632
10633  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
10634  // The exception-declaration shall not denote a pointer or reference to an
10635  // incomplete type, other than [cv] void*.
10636  // N2844 forbids rvalue references.
10637  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
10638    Diag(Loc, diag::err_catch_rvalue_ref);
10639    Invalid = true;
10640  }
10641
10642  QualType BaseType = ExDeclType;
10643  int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
10644  unsigned DK = diag::err_catch_incomplete;
10645  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
10646    BaseType = Ptr->getPointeeType();
10647    Mode = 1;
10648    DK = diag::err_catch_incomplete_ptr;
10649  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
10650    // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
10651    BaseType = Ref->getPointeeType();
10652    Mode = 2;
10653    DK = diag::err_catch_incomplete_ref;
10654  }
10655  if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
10656      !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
10657    Invalid = true;
10658
10659  if (!Invalid && !ExDeclType->isDependentType() &&
10660      RequireNonAbstractType(Loc, ExDeclType,
10661                             diag::err_abstract_type_in_decl,
10662                             AbstractVariableType))
10663    Invalid = true;
10664
10665  // Only the non-fragile NeXT runtime currently supports C++ catches
10666  // of ObjC types, and no runtime supports catching ObjC types by value.
10667  if (!Invalid && getLangOpts().ObjC1) {
10668    QualType T = ExDeclType;
10669    if (const ReferenceType *RT = T->getAs<ReferenceType>())
10670      T = RT->getPointeeType();
10671
10672    if (T->isObjCObjectType()) {
10673      Diag(Loc, diag::err_objc_object_catch);
10674      Invalid = true;
10675    } else if (T->isObjCObjectPointerType()) {
10676      // FIXME: should this be a test for macosx-fragile specifically?
10677      if (getLangOpts().ObjCRuntime.isFragile())
10678        Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
10679    }
10680  }
10681
10682  VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
10683                                    ExDeclType, TInfo, SC_None);
10684  ExDecl->setExceptionVariable(true);
10685
10686  // In ARC, infer 'retaining' for variables of retainable type.
10687  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
10688    Invalid = true;
10689
10690  if (!Invalid && !ExDeclType->isDependentType()) {
10691    if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
10692      // Insulate this from anything else we might currently be parsing.
10693      EnterExpressionEvaluationContext scope(*this, PotentiallyEvaluated);
10694
10695      // C++ [except.handle]p16:
10696      //   The object declared in an exception-declaration or, if the
10697      //   exception-declaration does not specify a name, a temporary (12.2) is
10698      //   copy-initialized (8.5) from the exception object. [...]
10699      //   The object is destroyed when the handler exits, after the destruction
10700      //   of any automatic objects initialized within the handler.
10701      //
10702      // We just pretend to initialize the object with itself, then make sure
10703      // it can be destroyed later.
10704      QualType initType = ExDeclType;
10705
10706      InitializedEntity entity =
10707        InitializedEntity::InitializeVariable(ExDecl);
10708      InitializationKind initKind =
10709        InitializationKind::CreateCopy(Loc, SourceLocation());
10710
10711      Expr *opaqueValue =
10712        new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
10713      InitializationSequence sequence(*this, entity, initKind, opaqueValue);
10714      ExprResult result = sequence.Perform(*this, entity, initKind, opaqueValue);
10715      if (result.isInvalid())
10716        Invalid = true;
10717      else {
10718        // If the constructor used was non-trivial, set this as the
10719        // "initializer".
10720        CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
10721        if (!construct->getConstructor()->isTrivial()) {
10722          Expr *init = MaybeCreateExprWithCleanups(construct);
10723          ExDecl->setInit(init);
10724        }
10725
10726        // And make sure it's destructable.
10727        FinalizeVarWithDestructor(ExDecl, recordType);
10728      }
10729    }
10730  }
10731
10732  if (Invalid)
10733    ExDecl->setInvalidDecl();
10734
10735  return ExDecl;
10736}
10737
10738/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
10739/// handler.
10740Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
10741  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
10742  bool Invalid = D.isInvalidType();
10743
10744  // Check for unexpanded parameter packs.
10745  if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
10746                                      UPPC_ExceptionType)) {
10747    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
10748                                             D.getIdentifierLoc());
10749    Invalid = true;
10750  }
10751
10752  IdentifierInfo *II = D.getIdentifier();
10753  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
10754                                             LookupOrdinaryName,
10755                                             ForRedeclaration)) {
10756    // The scope should be freshly made just for us. There is just no way
10757    // it contains any previous declaration.
10758    assert(!S->isDeclScope(PrevDecl));
10759    if (PrevDecl->isTemplateParameter()) {
10760      // Maybe we will complain about the shadowed template parameter.
10761      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
10762      PrevDecl = 0;
10763    }
10764  }
10765
10766  if (D.getCXXScopeSpec().isSet() && !Invalid) {
10767    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
10768      << D.getCXXScopeSpec().getRange();
10769    Invalid = true;
10770  }
10771
10772  VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
10773                                              D.getLocStart(),
10774                                              D.getIdentifierLoc(),
10775                                              D.getIdentifier());
10776  if (Invalid)
10777    ExDecl->setInvalidDecl();
10778
10779  // Add the exception declaration into this scope.
10780  if (II)
10781    PushOnScopeChains(ExDecl, S);
10782  else
10783    CurContext->addDecl(ExDecl);
10784
10785  ProcessDeclAttributes(S, ExDecl, D);
10786  return ExDecl;
10787}
10788
10789Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10790                                         Expr *AssertExpr,
10791                                         Expr *AssertMessageExpr,
10792                                         SourceLocation RParenLoc) {
10793  StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
10794
10795  if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
10796    return 0;
10797
10798  return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
10799                                      AssertMessage, RParenLoc, false);
10800}
10801
10802Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
10803                                         Expr *AssertExpr,
10804                                         StringLiteral *AssertMessage,
10805                                         SourceLocation RParenLoc,
10806                                         bool Failed) {
10807  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
10808      !Failed) {
10809    // In a static_assert-declaration, the constant-expression shall be a
10810    // constant expression that can be contextually converted to bool.
10811    ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
10812    if (Converted.isInvalid())
10813      Failed = true;
10814
10815    llvm::APSInt Cond;
10816    if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
10817          diag::err_static_assert_expression_is_not_constant,
10818          /*AllowFold=*/false).isInvalid())
10819      Failed = true;
10820
10821    if (!Failed && !Cond) {
10822      SmallString<256> MsgBuffer;
10823      llvm::raw_svector_ostream Msg(MsgBuffer);
10824      AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
10825      Diag(StaticAssertLoc, diag::err_static_assert_failed)
10826        << Msg.str() << AssertExpr->getSourceRange();
10827      Failed = true;
10828    }
10829  }
10830
10831  Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
10832                                        AssertExpr, AssertMessage, RParenLoc,
10833                                        Failed);
10834
10835  CurContext->addDecl(Decl);
10836  return Decl;
10837}
10838
10839/// \brief Perform semantic analysis of the given friend type declaration.
10840///
10841/// \returns A friend declaration that.
10842FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
10843                                      SourceLocation FriendLoc,
10844                                      TypeSourceInfo *TSInfo) {
10845  assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
10846
10847  QualType T = TSInfo->getType();
10848  SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
10849
10850  // C++03 [class.friend]p2:
10851  //   An elaborated-type-specifier shall be used in a friend declaration
10852  //   for a class.*
10853  //
10854  //   * The class-key of the elaborated-type-specifier is required.
10855  if (!ActiveTemplateInstantiations.empty()) {
10856    // Do not complain about the form of friend template types during
10857    // template instantiation; we will already have complained when the
10858    // template was declared.
10859  } else {
10860    if (!T->isElaboratedTypeSpecifier()) {
10861      // If we evaluated the type to a record type, suggest putting
10862      // a tag in front.
10863      if (const RecordType *RT = T->getAs<RecordType>()) {
10864        RecordDecl *RD = RT->getDecl();
10865
10866        std::string InsertionText = std::string(" ") + RD->getKindName();
10867
10868        Diag(TypeRange.getBegin(),
10869             getLangOpts().CPlusPlus11 ?
10870               diag::warn_cxx98_compat_unelaborated_friend_type :
10871               diag::ext_unelaborated_friend_type)
10872          << (unsigned) RD->getTagKind()
10873          << T
10874          << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
10875                                        InsertionText);
10876      } else {
10877        Diag(FriendLoc,
10878             getLangOpts().CPlusPlus11 ?
10879               diag::warn_cxx98_compat_nonclass_type_friend :
10880               diag::ext_nonclass_type_friend)
10881          << T
10882          << TypeRange;
10883      }
10884    } else if (T->getAs<EnumType>()) {
10885      Diag(FriendLoc,
10886           getLangOpts().CPlusPlus11 ?
10887             diag::warn_cxx98_compat_enum_friend :
10888             diag::ext_enum_friend)
10889        << T
10890        << TypeRange;
10891    }
10892
10893    // C++11 [class.friend]p3:
10894    //   A friend declaration that does not declare a function shall have one
10895    //   of the following forms:
10896    //     friend elaborated-type-specifier ;
10897    //     friend simple-type-specifier ;
10898    //     friend typename-specifier ;
10899    if (getLangOpts().CPlusPlus11 && LocStart != FriendLoc)
10900      Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
10901  }
10902
10903  //   If the type specifier in a friend declaration designates a (possibly
10904  //   cv-qualified) class type, that class is declared as a friend; otherwise,
10905  //   the friend declaration is ignored.
10906  return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
10907}
10908
10909/// Handle a friend tag declaration where the scope specifier was
10910/// templated.
10911Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
10912                                    unsigned TagSpec, SourceLocation TagLoc,
10913                                    CXXScopeSpec &SS,
10914                                    IdentifierInfo *Name,
10915                                    SourceLocation NameLoc,
10916                                    AttributeList *Attr,
10917                                    MultiTemplateParamsArg TempParamLists) {
10918  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
10919
10920  bool isExplicitSpecialization = false;
10921  bool Invalid = false;
10922
10923  if (TemplateParameterList *TemplateParams
10924        = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
10925                                                  TempParamLists.data(),
10926                                                  TempParamLists.size(),
10927                                                  /*friend*/ true,
10928                                                  isExplicitSpecialization,
10929                                                  Invalid)) {
10930    if (TemplateParams->size() > 0) {
10931      // This is a declaration of a class template.
10932      if (Invalid)
10933        return 0;
10934
10935      return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
10936                                SS, Name, NameLoc, Attr,
10937                                TemplateParams, AS_public,
10938                                /*ModulePrivateLoc=*/SourceLocation(),
10939                                TempParamLists.size() - 1,
10940                                TempParamLists.data()).take();
10941    } else {
10942      // The "template<>" header is extraneous.
10943      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
10944        << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
10945      isExplicitSpecialization = true;
10946    }
10947  }
10948
10949  if (Invalid) return 0;
10950
10951  bool isAllExplicitSpecializations = true;
10952  for (unsigned I = TempParamLists.size(); I-- > 0; ) {
10953    if (TempParamLists[I]->size()) {
10954      isAllExplicitSpecializations = false;
10955      break;
10956    }
10957  }
10958
10959  // FIXME: don't ignore attributes.
10960
10961  // If it's explicit specializations all the way down, just forget
10962  // about the template header and build an appropriate non-templated
10963  // friend.  TODO: for source fidelity, remember the headers.
10964  if (isAllExplicitSpecializations) {
10965    if (SS.isEmpty()) {
10966      bool Owned = false;
10967      bool IsDependent = false;
10968      return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
10969                      Attr, AS_public,
10970                      /*ModulePrivateLoc=*/SourceLocation(),
10971                      MultiTemplateParamsArg(), Owned, IsDependent,
10972                      /*ScopedEnumKWLoc=*/SourceLocation(),
10973                      /*ScopedEnumUsesClassTag=*/false,
10974                      /*UnderlyingType=*/TypeResult());
10975    }
10976
10977    NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
10978    ElaboratedTypeKeyword Keyword
10979      = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
10980    QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
10981                                   *Name, NameLoc);
10982    if (T.isNull())
10983      return 0;
10984
10985    TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
10986    if (isa<DependentNameType>(T)) {
10987      DependentNameTypeLoc TL =
10988          TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
10989      TL.setElaboratedKeywordLoc(TagLoc);
10990      TL.setQualifierLoc(QualifierLoc);
10991      TL.setNameLoc(NameLoc);
10992    } else {
10993      ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
10994      TL.setElaboratedKeywordLoc(TagLoc);
10995      TL.setQualifierLoc(QualifierLoc);
10996      TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(NameLoc);
10997    }
10998
10999    FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11000                                            TSI, FriendLoc, TempParamLists);
11001    Friend->setAccess(AS_public);
11002    CurContext->addDecl(Friend);
11003    return Friend;
11004  }
11005
11006  assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
11007
11008
11009
11010  // Handle the case of a templated-scope friend class.  e.g.
11011  //   template <class T> class A<T>::B;
11012  // FIXME: we don't support these right now.
11013  ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
11014  QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
11015  TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
11016  DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
11017  TL.setElaboratedKeywordLoc(TagLoc);
11018  TL.setQualifierLoc(SS.getWithLocInContext(Context));
11019  TL.setNameLoc(NameLoc);
11020
11021  FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
11022                                          TSI, FriendLoc, TempParamLists);
11023  Friend->setAccess(AS_public);
11024  Friend->setUnsupportedFriend(true);
11025  CurContext->addDecl(Friend);
11026  return Friend;
11027}
11028
11029
11030/// Handle a friend type declaration.  This works in tandem with
11031/// ActOnTag.
11032///
11033/// Notes on friend class templates:
11034///
11035/// We generally treat friend class declarations as if they were
11036/// declaring a class.  So, for example, the elaborated type specifier
11037/// in a friend declaration is required to obey the restrictions of a
11038/// class-head (i.e. no typedefs in the scope chain), template
11039/// parameters are required to match up with simple template-ids, &c.
11040/// However, unlike when declaring a template specialization, it's
11041/// okay to refer to a template specialization without an empty
11042/// template parameter declaration, e.g.
11043///   friend class A<T>::B<unsigned>;
11044/// We permit this as a special case; if there are any template
11045/// parameters present at all, require proper matching, i.e.
11046///   template <> template \<class T> friend class A<int>::B;
11047Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
11048                                MultiTemplateParamsArg TempParams) {
11049  SourceLocation Loc = DS.getLocStart();
11050
11051  assert(DS.isFriendSpecified());
11052  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11053
11054  // Try to convert the decl specifier to a type.  This works for
11055  // friend templates because ActOnTag never produces a ClassTemplateDecl
11056  // for a TUK_Friend.
11057  Declarator TheDeclarator(DS, Declarator::MemberContext);
11058  TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
11059  QualType T = TSI->getType();
11060  if (TheDeclarator.isInvalidType())
11061    return 0;
11062
11063  if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
11064    return 0;
11065
11066  // This is definitely an error in C++98.  It's probably meant to
11067  // be forbidden in C++0x, too, but the specification is just
11068  // poorly written.
11069  //
11070  // The problem is with declarations like the following:
11071  //   template <T> friend A<T>::foo;
11072  // where deciding whether a class C is a friend or not now hinges
11073  // on whether there exists an instantiation of A that causes
11074  // 'foo' to equal C.  There are restrictions on class-heads
11075  // (which we declare (by fiat) elaborated friend declarations to
11076  // be) that makes this tractable.
11077  //
11078  // FIXME: handle "template <> friend class A<T>;", which
11079  // is possibly well-formed?  Who even knows?
11080  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
11081    Diag(Loc, diag::err_tagless_friend_type_template)
11082      << DS.getSourceRange();
11083    return 0;
11084  }
11085
11086  // C++98 [class.friend]p1: A friend of a class is a function
11087  //   or class that is not a member of the class . . .
11088  // This is fixed in DR77, which just barely didn't make the C++03
11089  // deadline.  It's also a very silly restriction that seriously
11090  // affects inner classes and which nobody else seems to implement;
11091  // thus we never diagnose it, not even in -pedantic.
11092  //
11093  // But note that we could warn about it: it's always useless to
11094  // friend one of your own members (it's not, however, worthless to
11095  // friend a member of an arbitrary specialization of your template).
11096
11097  Decl *D;
11098  if (unsigned NumTempParamLists = TempParams.size())
11099    D = FriendTemplateDecl::Create(Context, CurContext, Loc,
11100                                   NumTempParamLists,
11101                                   TempParams.data(),
11102                                   TSI,
11103                                   DS.getFriendSpecLoc());
11104  else
11105    D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
11106
11107  if (!D)
11108    return 0;
11109
11110  D->setAccess(AS_public);
11111  CurContext->addDecl(D);
11112
11113  return D;
11114}
11115
11116NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
11117                                        MultiTemplateParamsArg TemplateParams) {
11118  const DeclSpec &DS = D.getDeclSpec();
11119
11120  assert(DS.isFriendSpecified());
11121  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
11122
11123  SourceLocation Loc = D.getIdentifierLoc();
11124  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
11125
11126  // C++ [class.friend]p1
11127  //   A friend of a class is a function or class....
11128  // Note that this sees through typedefs, which is intended.
11129  // It *doesn't* see through dependent types, which is correct
11130  // according to [temp.arg.type]p3:
11131  //   If a declaration acquires a function type through a
11132  //   type dependent on a template-parameter and this causes
11133  //   a declaration that does not use the syntactic form of a
11134  //   function declarator to have a function type, the program
11135  //   is ill-formed.
11136  if (!TInfo->getType()->isFunctionType()) {
11137    Diag(Loc, diag::err_unexpected_friend);
11138
11139    // It might be worthwhile to try to recover by creating an
11140    // appropriate declaration.
11141    return 0;
11142  }
11143
11144  // C++ [namespace.memdef]p3
11145  //  - If a friend declaration in a non-local class first declares a
11146  //    class or function, the friend class or function is a member
11147  //    of the innermost enclosing namespace.
11148  //  - The name of the friend is not found by simple name lookup
11149  //    until a matching declaration is provided in that namespace
11150  //    scope (either before or after the class declaration granting
11151  //    friendship).
11152  //  - If a friend function is called, its name may be found by the
11153  //    name lookup that considers functions from namespaces and
11154  //    classes associated with the types of the function arguments.
11155  //  - When looking for a prior declaration of a class or a function
11156  //    declared as a friend, scopes outside the innermost enclosing
11157  //    namespace scope are not considered.
11158
11159  CXXScopeSpec &SS = D.getCXXScopeSpec();
11160  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
11161  DeclarationName Name = NameInfo.getName();
11162  assert(Name);
11163
11164  // Check for unexpanded parameter packs.
11165  if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
11166      DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
11167      DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
11168    return 0;
11169
11170  // The context we found the declaration in, or in which we should
11171  // create the declaration.
11172  DeclContext *DC;
11173  Scope *DCScope = S;
11174  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
11175                        ForRedeclaration);
11176
11177  // FIXME: there are different rules in local classes
11178
11179  // There are four cases here.
11180  //   - There's no scope specifier, in which case we just go to the
11181  //     appropriate scope and look for a function or function template
11182  //     there as appropriate.
11183  // Recover from invalid scope qualifiers as if they just weren't there.
11184  if (SS.isInvalid() || !SS.isSet()) {
11185    // C++0x [namespace.memdef]p3:
11186    //   If the name in a friend declaration is neither qualified nor
11187    //   a template-id and the declaration is a function or an
11188    //   elaborated-type-specifier, the lookup to determine whether
11189    //   the entity has been previously declared shall not consider
11190    //   any scopes outside the innermost enclosing namespace.
11191    // C++0x [class.friend]p11:
11192    //   If a friend declaration appears in a local class and the name
11193    //   specified is an unqualified name, a prior declaration is
11194    //   looked up without considering scopes that are outside the
11195    //   innermost enclosing non-class scope. For a friend function
11196    //   declaration, if there is no prior declaration, the program is
11197    //   ill-formed.
11198    bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
11199    bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
11200
11201    // Find the appropriate context according to the above.
11202    DC = CurContext;
11203
11204    // Skip class contexts.  If someone can cite chapter and verse
11205    // for this behavior, that would be nice --- it's what GCC and
11206    // EDG do, and it seems like a reasonable intent, but the spec
11207    // really only says that checks for unqualified existing
11208    // declarations should stop at the nearest enclosing namespace,
11209    // not that they should only consider the nearest enclosing
11210    // namespace.
11211    while (DC->isRecord())
11212      DC = DC->getParent();
11213
11214    DeclContext *LookupDC = DC;
11215    while (LookupDC->isTransparentContext())
11216      LookupDC = LookupDC->getParent();
11217
11218    while (true) {
11219      LookupQualifiedName(Previous, LookupDC);
11220
11221      // TODO: decide what we think about using declarations.
11222      if (isLocal)
11223        break;
11224
11225      if (!Previous.empty()) {
11226        DC = LookupDC;
11227        break;
11228      }
11229
11230      if (isTemplateId) {
11231        if (isa<TranslationUnitDecl>(LookupDC)) break;
11232      } else {
11233        if (LookupDC->isFileContext()) break;
11234      }
11235      LookupDC = LookupDC->getParent();
11236    }
11237
11238    DCScope = getScopeForDeclContext(S, DC);
11239
11240    // C++ [class.friend]p6:
11241    //   A function can be defined in a friend declaration of a class if and
11242    //   only if the class is a non-local class (9.8), the function name is
11243    //   unqualified, and the function has namespace scope.
11244    if (isLocal && D.isFunctionDefinition()) {
11245      Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
11246    }
11247
11248  //   - There's a non-dependent scope specifier, in which case we
11249  //     compute it and do a previous lookup there for a function
11250  //     or function template.
11251  } else if (!SS.getScopeRep()->isDependent()) {
11252    DC = computeDeclContext(SS);
11253    if (!DC) return 0;
11254
11255    if (RequireCompleteDeclContext(SS, DC)) return 0;
11256
11257    LookupQualifiedName(Previous, DC);
11258
11259    // Ignore things found implicitly in the wrong scope.
11260    // TODO: better diagnostics for this case.  Suggesting the right
11261    // qualified scope would be nice...
11262    LookupResult::Filter F = Previous.makeFilter();
11263    while (F.hasNext()) {
11264      NamedDecl *D = F.next();
11265      if (!DC->InEnclosingNamespaceSetOf(
11266              D->getDeclContext()->getRedeclContext()))
11267        F.erase();
11268    }
11269    F.done();
11270
11271    if (Previous.empty()) {
11272      D.setInvalidType();
11273      Diag(Loc, diag::err_qualified_friend_not_found)
11274          << Name << TInfo->getType();
11275      return 0;
11276    }
11277
11278    // C++ [class.friend]p1: A friend of a class is a function or
11279    //   class that is not a member of the class . . .
11280    if (DC->Equals(CurContext))
11281      Diag(DS.getFriendSpecLoc(),
11282           getLangOpts().CPlusPlus11 ?
11283             diag::warn_cxx98_compat_friend_is_member :
11284             diag::err_friend_is_member);
11285
11286    if (D.isFunctionDefinition()) {
11287      // C++ [class.friend]p6:
11288      //   A function can be defined in a friend declaration of a class if and
11289      //   only if the class is a non-local class (9.8), the function name is
11290      //   unqualified, and the function has namespace scope.
11291      SemaDiagnosticBuilder DB
11292        = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
11293
11294      DB << SS.getScopeRep();
11295      if (DC->isFileContext())
11296        DB << FixItHint::CreateRemoval(SS.getRange());
11297      SS.clear();
11298    }
11299
11300  //   - There's a scope specifier that does not match any template
11301  //     parameter lists, in which case we use some arbitrary context,
11302  //     create a method or method template, and wait for instantiation.
11303  //   - There's a scope specifier that does match some template
11304  //     parameter lists, which we don't handle right now.
11305  } else {
11306    if (D.isFunctionDefinition()) {
11307      // C++ [class.friend]p6:
11308      //   A function can be defined in a friend declaration of a class if and
11309      //   only if the class is a non-local class (9.8), the function name is
11310      //   unqualified, and the function has namespace scope.
11311      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
11312        << SS.getScopeRep();
11313    }
11314
11315    DC = CurContext;
11316    assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
11317  }
11318
11319  if (!DC->isRecord()) {
11320    // This implies that it has to be an operator or function.
11321    if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
11322        D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
11323        D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
11324      Diag(Loc, diag::err_introducing_special_friend) <<
11325        (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
11326         D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
11327      return 0;
11328    }
11329  }
11330
11331  // FIXME: This is an egregious hack to cope with cases where the scope stack
11332  // does not contain the declaration context, i.e., in an out-of-line
11333  // definition of a class.
11334  Scope FakeDCScope(S, Scope::DeclScope, Diags);
11335  if (!DCScope) {
11336    FakeDCScope.setEntity(DC);
11337    DCScope = &FakeDCScope;
11338  }
11339
11340  bool AddToScope = true;
11341  NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
11342                                          TemplateParams, AddToScope);
11343  if (!ND) return 0;
11344
11345  assert(ND->getDeclContext() == DC);
11346  assert(ND->getLexicalDeclContext() == CurContext);
11347
11348  // Add the function declaration to the appropriate lookup tables,
11349  // adjusting the redeclarations list as necessary.  We don't
11350  // want to do this yet if the friending class is dependent.
11351  //
11352  // Also update the scope-based lookup if the target context's
11353  // lookup context is in lexical scope.
11354  if (!CurContext->isDependentContext()) {
11355    DC = DC->getRedeclContext();
11356    DC->makeDeclVisibleInContext(ND);
11357    if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
11358      PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
11359  }
11360
11361  FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
11362                                       D.getIdentifierLoc(), ND,
11363                                       DS.getFriendSpecLoc());
11364  FrD->setAccess(AS_public);
11365  CurContext->addDecl(FrD);
11366
11367  if (ND->isInvalidDecl()) {
11368    FrD->setInvalidDecl();
11369  } else {
11370    if (DC->isRecord()) CheckFriendAccess(ND);
11371
11372    FunctionDecl *FD;
11373    if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
11374      FD = FTD->getTemplatedDecl();
11375    else
11376      FD = cast<FunctionDecl>(ND);
11377
11378    // Mark templated-scope function declarations as unsupported.
11379    if (FD->getNumTemplateParameterLists())
11380      FrD->setUnsupportedFriend(true);
11381  }
11382
11383  return ND;
11384}
11385
11386void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
11387  AdjustDeclIfTemplate(Dcl);
11388
11389  FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(Dcl);
11390  if (!Fn) {
11391    Diag(DelLoc, diag::err_deleted_non_function);
11392    return;
11393  }
11394
11395  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
11396    // Don't consider the implicit declaration we generate for explicit
11397    // specializations. FIXME: Do not generate these implicit declarations.
11398    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
11399        || Prev->getPreviousDecl()) && !Prev->isDefined()) {
11400      Diag(DelLoc, diag::err_deleted_decl_not_first);
11401      Diag(Prev->getLocation(), diag::note_previous_declaration);
11402    }
11403    // If the declaration wasn't the first, we delete the function anyway for
11404    // recovery.
11405    Fn = Fn->getCanonicalDecl();
11406  }
11407
11408  if (Fn->isDeleted())
11409    return;
11410
11411  // See if we're deleting a function which is already known to override a
11412  // non-deleted virtual function.
11413  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn)) {
11414    bool IssuedDiagnostic = false;
11415    for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
11416                                        E = MD->end_overridden_methods();
11417         I != E; ++I) {
11418      if (!(*MD->begin_overridden_methods())->isDeleted()) {
11419        if (!IssuedDiagnostic) {
11420          Diag(DelLoc, diag::err_deleted_override) << MD->getDeclName();
11421          IssuedDiagnostic = true;
11422        }
11423        Diag((*I)->getLocation(), diag::note_overridden_virtual_function);
11424      }
11425    }
11426  }
11427
11428  Fn->setDeletedAsWritten();
11429}
11430
11431void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
11432  CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Dcl);
11433
11434  if (MD) {
11435    if (MD->getParent()->isDependentType()) {
11436      MD->setDefaulted();
11437      MD->setExplicitlyDefaulted();
11438      return;
11439    }
11440
11441    CXXSpecialMember Member = getSpecialMember(MD);
11442    if (Member == CXXInvalid) {
11443      Diag(DefaultLoc, diag::err_default_special_members);
11444      return;
11445    }
11446
11447    MD->setDefaulted();
11448    MD->setExplicitlyDefaulted();
11449
11450    // If this definition appears within the record, do the checking when
11451    // the record is complete.
11452    const FunctionDecl *Primary = MD;
11453    if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
11454      // Find the uninstantiated declaration that actually had the '= default'
11455      // on it.
11456      Pattern->isDefined(Primary);
11457
11458    // If the method was defaulted on its first declaration, we will have
11459    // already performed the checking in CheckCompletedCXXClass. Such a
11460    // declaration doesn't trigger an implicit definition.
11461    if (Primary == Primary->getCanonicalDecl())
11462      return;
11463
11464    CheckExplicitlyDefaultedSpecialMember(MD);
11465
11466    // The exception specification is needed because we are defining the
11467    // function.
11468    ResolveExceptionSpec(DefaultLoc,
11469                         MD->getType()->castAs<FunctionProtoType>());
11470
11471    switch (Member) {
11472    case CXXDefaultConstructor: {
11473      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11474      if (!CD->isInvalidDecl())
11475        DefineImplicitDefaultConstructor(DefaultLoc, CD);
11476      break;
11477    }
11478
11479    case CXXCopyConstructor: {
11480      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11481      if (!CD->isInvalidDecl())
11482        DefineImplicitCopyConstructor(DefaultLoc, CD);
11483      break;
11484    }
11485
11486    case CXXCopyAssignment: {
11487      if (!MD->isInvalidDecl())
11488        DefineImplicitCopyAssignment(DefaultLoc, MD);
11489      break;
11490    }
11491
11492    case CXXDestructor: {
11493      CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
11494      if (!DD->isInvalidDecl())
11495        DefineImplicitDestructor(DefaultLoc, DD);
11496      break;
11497    }
11498
11499    case CXXMoveConstructor: {
11500      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
11501      if (!CD->isInvalidDecl())
11502        DefineImplicitMoveConstructor(DefaultLoc, CD);
11503      break;
11504    }
11505
11506    case CXXMoveAssignment: {
11507      if (!MD->isInvalidDecl())
11508        DefineImplicitMoveAssignment(DefaultLoc, MD);
11509      break;
11510    }
11511
11512    case CXXInvalid:
11513      llvm_unreachable("Invalid special member.");
11514    }
11515  } else {
11516    Diag(DefaultLoc, diag::err_default_special_members);
11517  }
11518}
11519
11520static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
11521  for (Stmt::child_range CI = S->children(); CI; ++CI) {
11522    Stmt *SubStmt = *CI;
11523    if (!SubStmt)
11524      continue;
11525    if (isa<ReturnStmt>(SubStmt))
11526      Self.Diag(SubStmt->getLocStart(),
11527           diag::err_return_in_constructor_handler);
11528    if (!isa<Expr>(SubStmt))
11529      SearchForReturnInStmt(Self, SubStmt);
11530  }
11531}
11532
11533void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
11534  for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
11535    CXXCatchStmt *Handler = TryBlock->getHandler(I);
11536    SearchForReturnInStmt(*this, Handler);
11537  }
11538}
11539
11540bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New,
11541                                             const CXXMethodDecl *Old) {
11542  const FunctionType *NewFT = New->getType()->getAs<FunctionType>();
11543  const FunctionType *OldFT = Old->getType()->getAs<FunctionType>();
11544
11545  CallingConv NewCC = NewFT->getCallConv(), OldCC = OldFT->getCallConv();
11546
11547  // If the calling conventions match, everything is fine
11548  if (NewCC == OldCC)
11549    return false;
11550
11551  // If either of the calling conventions are set to "default", we need to pick
11552  // something more sensible based on the target. This supports code where the
11553  // one method explicitly sets thiscall, and another has no explicit calling
11554  // convention.
11555  CallingConv Default =
11556    Context.getTargetInfo().getDefaultCallingConv(TargetInfo::CCMT_Member);
11557  if (NewCC == CC_Default)
11558    NewCC = Default;
11559  if (OldCC == CC_Default)
11560    OldCC = Default;
11561
11562  // If the calling conventions still don't match, then report the error
11563  if (NewCC != OldCC) {
11564    Diag(New->getLocation(),
11565         diag::err_conflicting_overriding_cc_attributes)
11566      << New->getDeclName() << New->getType() << Old->getType();
11567    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11568    return true;
11569  }
11570
11571  return false;
11572}
11573
11574bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
11575                                             const CXXMethodDecl *Old) {
11576  QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
11577  QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
11578
11579  if (Context.hasSameType(NewTy, OldTy) ||
11580      NewTy->isDependentType() || OldTy->isDependentType())
11581    return false;
11582
11583  // Check if the return types are covariant
11584  QualType NewClassTy, OldClassTy;
11585
11586  /// Both types must be pointers or references to classes.
11587  if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
11588    if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
11589      NewClassTy = NewPT->getPointeeType();
11590      OldClassTy = OldPT->getPointeeType();
11591    }
11592  } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
11593    if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
11594      if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
11595        NewClassTy = NewRT->getPointeeType();
11596        OldClassTy = OldRT->getPointeeType();
11597      }
11598    }
11599  }
11600
11601  // The return types aren't either both pointers or references to a class type.
11602  if (NewClassTy.isNull()) {
11603    Diag(New->getLocation(),
11604         diag::err_different_return_type_for_overriding_virtual_function)
11605      << New->getDeclName() << NewTy << OldTy;
11606    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11607
11608    return true;
11609  }
11610
11611  // C++ [class.virtual]p6:
11612  //   If the return type of D::f differs from the return type of B::f, the
11613  //   class type in the return type of D::f shall be complete at the point of
11614  //   declaration of D::f or shall be the class type D.
11615  if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
11616    if (!RT->isBeingDefined() &&
11617        RequireCompleteType(New->getLocation(), NewClassTy,
11618                            diag::err_covariant_return_incomplete,
11619                            New->getDeclName()))
11620    return true;
11621  }
11622
11623  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
11624    // Check if the new class derives from the old class.
11625    if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
11626      Diag(New->getLocation(),
11627           diag::err_covariant_return_not_derived)
11628      << New->getDeclName() << NewTy << OldTy;
11629      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11630      return true;
11631    }
11632
11633    // Check if we the conversion from derived to base is valid.
11634    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
11635                    diag::err_covariant_return_inaccessible_base,
11636                    diag::err_covariant_return_ambiguous_derived_to_base_conv,
11637                    // FIXME: Should this point to the return type?
11638                    New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
11639      // FIXME: this note won't trigger for delayed access control
11640      // diagnostics, and it's impossible to get an undelayed error
11641      // here from access control during the original parse because
11642      // the ParsingDeclSpec/ParsingDeclarator are still in scope.
11643      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11644      return true;
11645    }
11646  }
11647
11648  // The qualifiers of the return types must be the same.
11649  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
11650    Diag(New->getLocation(),
11651         diag::err_covariant_return_type_different_qualifications)
11652    << New->getDeclName() << NewTy << OldTy;
11653    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11654    return true;
11655  };
11656
11657
11658  // The new class type must have the same or less qualifiers as the old type.
11659  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
11660    Diag(New->getLocation(),
11661         diag::err_covariant_return_type_class_type_more_qualified)
11662    << New->getDeclName() << NewTy << OldTy;
11663    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
11664    return true;
11665  };
11666
11667  return false;
11668}
11669
11670/// \brief Mark the given method pure.
11671///
11672/// \param Method the method to be marked pure.
11673///
11674/// \param InitRange the source range that covers the "0" initializer.
11675bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
11676  SourceLocation EndLoc = InitRange.getEnd();
11677  if (EndLoc.isValid())
11678    Method->setRangeEnd(EndLoc);
11679
11680  if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
11681    Method->setPure();
11682    return false;
11683  }
11684
11685  if (!Method->isInvalidDecl())
11686    Diag(Method->getLocation(), diag::err_non_virtual_pure)
11687      << Method->getDeclName() << InitRange;
11688  return true;
11689}
11690
11691/// \brief Determine whether the given declaration is a static data member.
11692static bool isStaticDataMember(Decl *D) {
11693  VarDecl *Var = dyn_cast_or_null<VarDecl>(D);
11694  if (!Var)
11695    return false;
11696
11697  return Var->isStaticDataMember();
11698}
11699/// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
11700/// an initializer for the out-of-line declaration 'Dcl'.  The scope
11701/// is a fresh scope pushed for just this purpose.
11702///
11703/// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
11704/// static data member of class X, names should be looked up in the scope of
11705/// class X.
11706void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
11707  // If there is no declaration, there was an error parsing it.
11708  if (D == 0 || D->isInvalidDecl()) return;
11709
11710  // We should only get called for declarations with scope specifiers, like:
11711  //   int foo::bar;
11712  assert(D->isOutOfLine());
11713  EnterDeclaratorContext(S, D->getDeclContext());
11714
11715  // If we are parsing the initializer for a static data member, push a
11716  // new expression evaluation context that is associated with this static
11717  // data member.
11718  if (isStaticDataMember(D))
11719    PushExpressionEvaluationContext(PotentiallyEvaluated, D);
11720}
11721
11722/// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
11723/// initializer for the out-of-line declaration 'D'.
11724void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
11725  // If there is no declaration, there was an error parsing it.
11726  if (D == 0 || D->isInvalidDecl()) return;
11727
11728  if (isStaticDataMember(D))
11729    PopExpressionEvaluationContext();
11730
11731  assert(D->isOutOfLine());
11732  ExitDeclaratorContext(S);
11733}
11734
11735/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
11736/// C++ if/switch/while/for statement.
11737/// e.g: "if (int x = f()) {...}"
11738DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
11739  // C++ 6.4p2:
11740  // The declarator shall not specify a function or an array.
11741  // The type-specifier-seq shall not contain typedef and shall not declare a
11742  // new class or enumeration.
11743  assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
11744         "Parser allowed 'typedef' as storage class of condition decl.");
11745
11746  Decl *Dcl = ActOnDeclarator(S, D);
11747  if (!Dcl)
11748    return true;
11749
11750  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
11751    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
11752      << D.getSourceRange();
11753    return true;
11754  }
11755
11756  return Dcl;
11757}
11758
11759void Sema::LoadExternalVTableUses() {
11760  if (!ExternalSource)
11761    return;
11762
11763  SmallVector<ExternalVTableUse, 4> VTables;
11764  ExternalSource->ReadUsedVTables(VTables);
11765  SmallVector<VTableUse, 4> NewUses;
11766  for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
11767    llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
11768      = VTablesUsed.find(VTables[I].Record);
11769    // Even if a definition wasn't required before, it may be required now.
11770    if (Pos != VTablesUsed.end()) {
11771      if (!Pos->second && VTables[I].DefinitionRequired)
11772        Pos->second = true;
11773      continue;
11774    }
11775
11776    VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
11777    NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
11778  }
11779
11780  VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
11781}
11782
11783void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
11784                          bool DefinitionRequired) {
11785  // Ignore any vtable uses in unevaluated operands or for classes that do
11786  // not have a vtable.
11787  if (!Class->isDynamicClass() || Class->isDependentContext() ||
11788      CurContext->isDependentContext() || isUnevaluatedContext())
11789    return;
11790
11791  // Try to insert this class into the map.
11792  LoadExternalVTableUses();
11793  Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11794  std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
11795    Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
11796  if (!Pos.second) {
11797    // If we already had an entry, check to see if we are promoting this vtable
11798    // to required a definition. If so, we need to reappend to the VTableUses
11799    // list, since we may have already processed the first entry.
11800    if (DefinitionRequired && !Pos.first->second) {
11801      Pos.first->second = true;
11802    } else {
11803      // Otherwise, we can early exit.
11804      return;
11805    }
11806  }
11807
11808  // Local classes need to have their virtual members marked
11809  // immediately. For all other classes, we mark their virtual members
11810  // at the end of the translation unit.
11811  if (Class->isLocalClass())
11812    MarkVirtualMembersReferenced(Loc, Class);
11813  else
11814    VTableUses.push_back(std::make_pair(Class, Loc));
11815}
11816
11817bool Sema::DefineUsedVTables() {
11818  LoadExternalVTableUses();
11819  if (VTableUses.empty())
11820    return false;
11821
11822  // Note: The VTableUses vector could grow as a result of marking
11823  // the members of a class as "used", so we check the size each
11824  // time through the loop and prefer indices (which are stable) to
11825  // iterators (which are not).
11826  bool DefinedAnything = false;
11827  for (unsigned I = 0; I != VTableUses.size(); ++I) {
11828    CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
11829    if (!Class)
11830      continue;
11831
11832    SourceLocation Loc = VTableUses[I].second;
11833
11834    bool DefineVTable = true;
11835
11836    // If this class has a key function, but that key function is
11837    // defined in another translation unit, we don't need to emit the
11838    // vtable even though we're using it.
11839    const CXXMethodDecl *KeyFunction = Context.getCurrentKeyFunction(Class);
11840    if (KeyFunction && !KeyFunction->hasBody()) {
11841      switch (KeyFunction->getTemplateSpecializationKind()) {
11842      case TSK_Undeclared:
11843      case TSK_ExplicitSpecialization:
11844      case TSK_ExplicitInstantiationDeclaration:
11845        // The key function is in another translation unit.
11846        DefineVTable = false;
11847        break;
11848
11849      case TSK_ExplicitInstantiationDefinition:
11850      case TSK_ImplicitInstantiation:
11851        // We will be instantiating the key function.
11852        break;
11853      }
11854    } else if (!KeyFunction) {
11855      // If we have a class with no key function that is the subject
11856      // of an explicit instantiation declaration, suppress the
11857      // vtable; it will live with the explicit instantiation
11858      // definition.
11859      bool IsExplicitInstantiationDeclaration
11860        = Class->getTemplateSpecializationKind()
11861                                      == TSK_ExplicitInstantiationDeclaration;
11862      for (TagDecl::redecl_iterator R = Class->redecls_begin(),
11863                                 REnd = Class->redecls_end();
11864           R != REnd; ++R) {
11865        TemplateSpecializationKind TSK
11866          = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
11867        if (TSK == TSK_ExplicitInstantiationDeclaration)
11868          IsExplicitInstantiationDeclaration = true;
11869        else if (TSK == TSK_ExplicitInstantiationDefinition) {
11870          IsExplicitInstantiationDeclaration = false;
11871          break;
11872        }
11873      }
11874
11875      if (IsExplicitInstantiationDeclaration)
11876        DefineVTable = false;
11877    }
11878
11879    // The exception specifications for all virtual members may be needed even
11880    // if we are not providing an authoritative form of the vtable in this TU.
11881    // We may choose to emit it available_externally anyway.
11882    if (!DefineVTable) {
11883      MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
11884      continue;
11885    }
11886
11887    // Mark all of the virtual members of this class as referenced, so
11888    // that we can build a vtable. Then, tell the AST consumer that a
11889    // vtable for this class is required.
11890    DefinedAnything = true;
11891    MarkVirtualMembersReferenced(Loc, Class);
11892    CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
11893    Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
11894
11895    // Optionally warn if we're emitting a weak vtable.
11896    if (Class->isExternallyVisible() &&
11897        Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
11898      const FunctionDecl *KeyFunctionDef = 0;
11899      if (!KeyFunction ||
11900          (KeyFunction->hasBody(KeyFunctionDef) &&
11901           KeyFunctionDef->isInlined()))
11902        Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
11903             TSK_ExplicitInstantiationDefinition
11904             ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
11905          << Class;
11906    }
11907  }
11908  VTableUses.clear();
11909
11910  return DefinedAnything;
11911}
11912
11913void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
11914                                                 const CXXRecordDecl *RD) {
11915  for (CXXRecordDecl::method_iterator I = RD->method_begin(),
11916                                      E = RD->method_end(); I != E; ++I)
11917    if ((*I)->isVirtual() && !(*I)->isPure())
11918      ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
11919}
11920
11921void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
11922                                        const CXXRecordDecl *RD) {
11923  // Mark all functions which will appear in RD's vtable as used.
11924  CXXFinalOverriderMap FinalOverriders;
11925  RD->getFinalOverriders(FinalOverriders);
11926  for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
11927                                            E = FinalOverriders.end();
11928       I != E; ++I) {
11929    for (OverridingMethods::const_iterator OI = I->second.begin(),
11930                                           OE = I->second.end();
11931         OI != OE; ++OI) {
11932      assert(OI->second.size() > 0 && "no final overrider");
11933      CXXMethodDecl *Overrider = OI->second.front().Method;
11934
11935      // C++ [basic.def.odr]p2:
11936      //   [...] A virtual member function is used if it is not pure. [...]
11937      if (!Overrider->isPure())
11938        MarkFunctionReferenced(Loc, Overrider);
11939    }
11940  }
11941
11942  // Only classes that have virtual bases need a VTT.
11943  if (RD->getNumVBases() == 0)
11944    return;
11945
11946  for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
11947           e = RD->bases_end(); i != e; ++i) {
11948    const CXXRecordDecl *Base =
11949        cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
11950    if (Base->getNumVBases() == 0)
11951      continue;
11952    MarkVirtualMembersReferenced(Loc, Base);
11953  }
11954}
11955
11956/// SetIvarInitializers - This routine builds initialization ASTs for the
11957/// Objective-C implementation whose ivars need be initialized.
11958void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
11959  if (!getLangOpts().CPlusPlus)
11960    return;
11961  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
11962    SmallVector<ObjCIvarDecl*, 8> ivars;
11963    CollectIvarsToConstructOrDestruct(OID, ivars);
11964    if (ivars.empty())
11965      return;
11966    SmallVector<CXXCtorInitializer*, 32> AllToInit;
11967    for (unsigned i = 0; i < ivars.size(); i++) {
11968      FieldDecl *Field = ivars[i];
11969      if (Field->isInvalidDecl())
11970        continue;
11971
11972      CXXCtorInitializer *Member;
11973      InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
11974      InitializationKind InitKind =
11975        InitializationKind::CreateDefault(ObjCImplementation->getLocation());
11976
11977      InitializationSequence InitSeq(*this, InitEntity, InitKind, None);
11978      ExprResult MemberInit =
11979        InitSeq.Perform(*this, InitEntity, InitKind, None);
11980      MemberInit = MaybeCreateExprWithCleanups(MemberInit);
11981      // Note, MemberInit could actually come back empty if no initialization
11982      // is required (e.g., because it would call a trivial default constructor)
11983      if (!MemberInit.get() || MemberInit.isInvalid())
11984        continue;
11985
11986      Member =
11987        new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
11988                                         SourceLocation(),
11989                                         MemberInit.takeAs<Expr>(),
11990                                         SourceLocation());
11991      AllToInit.push_back(Member);
11992
11993      // Be sure that the destructor is accessible and is marked as referenced.
11994      if (const RecordType *RecordTy
11995                  = Context.getBaseElementType(Field->getType())
11996                                                        ->getAs<RecordType>()) {
11997                    CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
11998        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
11999          MarkFunctionReferenced(Field->getLocation(), Destructor);
12000          CheckDestructorAccess(Field->getLocation(), Destructor,
12001                            PDiag(diag::err_access_dtor_ivar)
12002                              << Context.getBaseElementType(Field->getType()));
12003        }
12004      }
12005    }
12006    ObjCImplementation->setIvarInitializers(Context,
12007                                            AllToInit.data(), AllToInit.size());
12008  }
12009}
12010
12011static
12012void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
12013                           llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
12014                           llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
12015                           llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
12016                           Sema &S) {
12017  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
12018                                                   CE = Current.end();
12019  if (Ctor->isInvalidDecl())
12020    return;
12021
12022  CXXConstructorDecl *Target = Ctor->getTargetConstructor();
12023
12024  // Target may not be determinable yet, for instance if this is a dependent
12025  // call in an uninstantiated template.
12026  if (Target) {
12027    const FunctionDecl *FNTarget = 0;
12028    (void)Target->hasBody(FNTarget);
12029    Target = const_cast<CXXConstructorDecl*>(
12030      cast_or_null<CXXConstructorDecl>(FNTarget));
12031  }
12032
12033  CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
12034                     // Avoid dereferencing a null pointer here.
12035                     *TCanonical = Target ? Target->getCanonicalDecl() : 0;
12036
12037  if (!Current.insert(Canonical))
12038    return;
12039
12040  // We know that beyond here, we aren't chaining into a cycle.
12041  if (!Target || !Target->isDelegatingConstructor() ||
12042      Target->isInvalidDecl() || Valid.count(TCanonical)) {
12043    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
12044      Valid.insert(*CI);
12045    Current.clear();
12046  // We've hit a cycle.
12047  } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
12048             Current.count(TCanonical)) {
12049    // If we haven't diagnosed this cycle yet, do so now.
12050    if (!Invalid.count(TCanonical)) {
12051      S.Diag((*Ctor->init_begin())->getSourceLocation(),
12052             diag::warn_delegating_ctor_cycle)
12053        << Ctor;
12054
12055      // Don't add a note for a function delegating directly to itself.
12056      if (TCanonical != Canonical)
12057        S.Diag(Target->getLocation(), diag::note_it_delegates_to);
12058
12059      CXXConstructorDecl *C = Target;
12060      while (C->getCanonicalDecl() != Canonical) {
12061        const FunctionDecl *FNTarget = 0;
12062        (void)C->getTargetConstructor()->hasBody(FNTarget);
12063        assert(FNTarget && "Ctor cycle through bodiless function");
12064
12065        C = const_cast<CXXConstructorDecl*>(
12066          cast<CXXConstructorDecl>(FNTarget));
12067        S.Diag(C->getLocation(), diag::note_which_delegates_to);
12068      }
12069    }
12070
12071    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
12072      Invalid.insert(*CI);
12073    Current.clear();
12074  } else {
12075    DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
12076  }
12077}
12078
12079
12080void Sema::CheckDelegatingCtorCycles() {
12081  llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
12082
12083  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
12084                                                   CE = Current.end();
12085
12086  for (DelegatingCtorDeclsType::iterator
12087         I = DelegatingCtorDecls.begin(ExternalSource),
12088         E = DelegatingCtorDecls.end();
12089       I != E; ++I)
12090    DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
12091
12092  for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
12093    (*CI)->setInvalidDecl();
12094}
12095
12096namespace {
12097  /// \brief AST visitor that finds references to the 'this' expression.
12098  class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
12099    Sema &S;
12100
12101  public:
12102    explicit FindCXXThisExpr(Sema &S) : S(S) { }
12103
12104    bool VisitCXXThisExpr(CXXThisExpr *E) {
12105      S.Diag(E->getLocation(), diag::err_this_static_member_func)
12106        << E->isImplicit();
12107      return false;
12108    }
12109  };
12110}
12111
12112bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
12113  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12114  if (!TSInfo)
12115    return false;
12116
12117  TypeLoc TL = TSInfo->getTypeLoc();
12118  FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12119  if (!ProtoTL)
12120    return false;
12121
12122  // C++11 [expr.prim.general]p3:
12123  //   [The expression this] shall not appear before the optional
12124  //   cv-qualifier-seq and it shall not appear within the declaration of a
12125  //   static member function (although its type and value category are defined
12126  //   within a static member function as they are within a non-static member
12127  //   function). [ Note: this is because declaration matching does not occur
12128  //  until the complete declarator is known. - end note ]
12129  const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12130  FindCXXThisExpr Finder(*this);
12131
12132  // If the return type came after the cv-qualifier-seq, check it now.
12133  if (Proto->hasTrailingReturn() &&
12134      !Finder.TraverseTypeLoc(ProtoTL.getResultLoc()))
12135    return true;
12136
12137  // Check the exception specification.
12138  if (checkThisInStaticMemberFunctionExceptionSpec(Method))
12139    return true;
12140
12141  return checkThisInStaticMemberFunctionAttributes(Method);
12142}
12143
12144bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
12145  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
12146  if (!TSInfo)
12147    return false;
12148
12149  TypeLoc TL = TSInfo->getTypeLoc();
12150  FunctionProtoTypeLoc ProtoTL = TL.getAs<FunctionProtoTypeLoc>();
12151  if (!ProtoTL)
12152    return false;
12153
12154  const FunctionProtoType *Proto = ProtoTL.getTypePtr();
12155  FindCXXThisExpr Finder(*this);
12156
12157  switch (Proto->getExceptionSpecType()) {
12158  case EST_Uninstantiated:
12159  case EST_Unevaluated:
12160  case EST_BasicNoexcept:
12161  case EST_DynamicNone:
12162  case EST_MSAny:
12163  case EST_None:
12164    break;
12165
12166  case EST_ComputedNoexcept:
12167    if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
12168      return true;
12169
12170  case EST_Dynamic:
12171    for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
12172         EEnd = Proto->exception_end();
12173         E != EEnd; ++E) {
12174      if (!Finder.TraverseType(*E))
12175        return true;
12176    }
12177    break;
12178  }
12179
12180  return false;
12181}
12182
12183bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
12184  FindCXXThisExpr Finder(*this);
12185
12186  // Check attributes.
12187  for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
12188       A != AEnd; ++A) {
12189    // FIXME: This should be emitted by tblgen.
12190    Expr *Arg = 0;
12191    ArrayRef<Expr *> Args;
12192    if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
12193      Arg = G->getArg();
12194    else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
12195      Arg = G->getArg();
12196    else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
12197      Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
12198    else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
12199      Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
12200    else if (ExclusiveLockFunctionAttr *ELF
12201               = dyn_cast<ExclusiveLockFunctionAttr>(*A))
12202      Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
12203    else if (SharedLockFunctionAttr *SLF
12204               = dyn_cast<SharedLockFunctionAttr>(*A))
12205      Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
12206    else if (ExclusiveTrylockFunctionAttr *ETLF
12207               = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
12208      Arg = ETLF->getSuccessValue();
12209      Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
12210    } else if (SharedTrylockFunctionAttr *STLF
12211                 = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
12212      Arg = STLF->getSuccessValue();
12213      Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
12214    } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
12215      Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
12216    else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
12217      Arg = LR->getArg();
12218    else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
12219      Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
12220    else if (ExclusiveLocksRequiredAttr *ELR
12221               = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
12222      Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
12223    else if (SharedLocksRequiredAttr *SLR
12224               = dyn_cast<SharedLocksRequiredAttr>(*A))
12225      Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
12226
12227    if (Arg && !Finder.TraverseStmt(Arg))
12228      return true;
12229
12230    for (unsigned I = 0, N = Args.size(); I != N; ++I) {
12231      if (!Finder.TraverseStmt(Args[I]))
12232        return true;
12233    }
12234  }
12235
12236  return false;
12237}
12238
12239void
12240Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
12241                                  ArrayRef<ParsedType> DynamicExceptions,
12242                                  ArrayRef<SourceRange> DynamicExceptionRanges,
12243                                  Expr *NoexceptExpr,
12244                                  SmallVectorImpl<QualType> &Exceptions,
12245                                  FunctionProtoType::ExtProtoInfo &EPI) {
12246  Exceptions.clear();
12247  EPI.ExceptionSpecType = EST;
12248  if (EST == EST_Dynamic) {
12249    Exceptions.reserve(DynamicExceptions.size());
12250    for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
12251      // FIXME: Preserve type source info.
12252      QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
12253
12254      SmallVector<UnexpandedParameterPack, 2> Unexpanded;
12255      collectUnexpandedParameterPacks(ET, Unexpanded);
12256      if (!Unexpanded.empty()) {
12257        DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
12258                                         UPPC_ExceptionType,
12259                                         Unexpanded);
12260        continue;
12261      }
12262
12263      // Check that the type is valid for an exception spec, and
12264      // drop it if not.
12265      if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
12266        Exceptions.push_back(ET);
12267    }
12268    EPI.NumExceptions = Exceptions.size();
12269    EPI.Exceptions = Exceptions.data();
12270    return;
12271  }
12272
12273  if (EST == EST_ComputedNoexcept) {
12274    // If an error occurred, there's no expression here.
12275    if (NoexceptExpr) {
12276      assert((NoexceptExpr->isTypeDependent() ||
12277              NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
12278              Context.BoolTy) &&
12279             "Parser should have made sure that the expression is boolean");
12280      if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
12281        EPI.ExceptionSpecType = EST_BasicNoexcept;
12282        return;
12283      }
12284
12285      if (!NoexceptExpr->isValueDependent())
12286        NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
12287                         diag::err_noexcept_needs_constant_expression,
12288                         /*AllowFold*/ false).take();
12289      EPI.NoexceptExpr = NoexceptExpr;
12290    }
12291    return;
12292  }
12293}
12294
12295/// IdentifyCUDATarget - Determine the CUDA compilation target for this function
12296Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
12297  // Implicitly declared functions (e.g. copy constructors) are
12298  // __host__ __device__
12299  if (D->isImplicit())
12300    return CFT_HostDevice;
12301
12302  if (D->hasAttr<CUDAGlobalAttr>())
12303    return CFT_Global;
12304
12305  if (D->hasAttr<CUDADeviceAttr>()) {
12306    if (D->hasAttr<CUDAHostAttr>())
12307      return CFT_HostDevice;
12308    else
12309      return CFT_Device;
12310  }
12311
12312  return CFT_Host;
12313}
12314
12315bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
12316                           CUDAFunctionTarget CalleeTarget) {
12317  // CUDA B.1.1 "The __device__ qualifier declares a function that is...
12318  // Callable from the device only."
12319  if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
12320    return true;
12321
12322  // CUDA B.1.2 "The __global__ qualifier declares a function that is...
12323  // Callable from the host only."
12324  // CUDA B.1.3 "The __host__ qualifier declares a function that is...
12325  // Callable from the host only."
12326  if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
12327      (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
12328    return true;
12329
12330  if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
12331    return true;
12332
12333  return false;
12334}
12335
12336/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.
12337///
12338MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record,
12339                                       SourceLocation DeclStart,
12340                                       Declarator &D, Expr *BitWidth,
12341                                       InClassInitStyle InitStyle,
12342                                       AccessSpecifier AS,
12343                                       AttributeList *MSPropertyAttr) {
12344  IdentifierInfo *II = D.getIdentifier();
12345  if (!II) {
12346    Diag(DeclStart, diag::err_anonymous_property);
12347    return NULL;
12348  }
12349  SourceLocation Loc = D.getIdentifierLoc();
12350
12351  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
12352  QualType T = TInfo->getType();
12353  if (getLangOpts().CPlusPlus) {
12354    CheckExtraCXXDefaultArguments(D);
12355
12356    if (DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
12357                                        UPPC_DataMemberType)) {
12358      D.setInvalidType();
12359      T = Context.IntTy;
12360      TInfo = Context.getTrivialTypeSourceInfo(T, Loc);
12361    }
12362  }
12363
12364  DiagnoseFunctionSpecifiers(D.getDeclSpec());
12365
12366  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())
12367    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(),
12368         diag::err_invalid_thread)
12369      << DeclSpec::getSpecifierName(TSCS);
12370
12371  // Check to see if this name was declared as a member previously
12372  NamedDecl *PrevDecl = 0;
12373  LookupResult Previous(*this, II, Loc, LookupMemberName, ForRedeclaration);
12374  LookupName(Previous, S);
12375  switch (Previous.getResultKind()) {
12376  case LookupResult::Found:
12377  case LookupResult::FoundUnresolvedValue:
12378    PrevDecl = Previous.getAsSingle<NamedDecl>();
12379    break;
12380
12381  case LookupResult::FoundOverloaded:
12382    PrevDecl = Previous.getRepresentativeDecl();
12383    break;
12384
12385  case LookupResult::NotFound:
12386  case LookupResult::NotFoundInCurrentInstantiation:
12387  case LookupResult::Ambiguous:
12388    break;
12389  }
12390
12391  if (PrevDecl && PrevDecl->isTemplateParameter()) {
12392    // Maybe we will complain about the shadowed template parameter.
12393    DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
12394    // Just pretend that we didn't see the previous declaration.
12395    PrevDecl = 0;
12396  }
12397
12398  if (PrevDecl && !isDeclInScope(PrevDecl, Record, S))
12399    PrevDecl = 0;
12400
12401  SourceLocation TSSL = D.getLocStart();
12402  MSPropertyDecl *NewPD;
12403  const AttributeList::PropertyData &Data = MSPropertyAttr->getPropertyData();
12404  NewPD = new (Context) MSPropertyDecl(Record, Loc,
12405                                       II, T, TInfo, TSSL,
12406                                       Data.GetterId, Data.SetterId);
12407  ProcessDeclAttributes(TUScope, NewPD, D);
12408  NewPD->setAccess(AS);
12409
12410  if (NewPD->isInvalidDecl())
12411    Record->setInvalidDecl();
12412
12413  if (D.getDeclSpec().isModulePrivateSpecified())
12414    NewPD->setModulePrivate();
12415
12416  if (NewPD->isInvalidDecl() && PrevDecl) {
12417    // Don't introduce NewFD into scope; there's already something
12418    // with the same name in the same scope.
12419  } else if (II) {
12420    PushOnScopeChains(NewPD, S);
12421  } else
12422    Record->addDecl(NewPD);
12423
12424  return NewPD;
12425}
12426