SemaDeclCXX.cpp revision 54b3ba8cf2eb4886a88cdb8adedb15f43333ff1d
1//===------ SemaDeclCXX.cpp - Semantic Analysis for C++ Declarations ------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file implements semantic analysis for C++ declarations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/SemaInternal.h"
15#include "clang/Sema/CXXFieldCollector.h"
16#include "clang/Sema/Scope.h"
17#include "clang/Sema/Initialization.h"
18#include "clang/Sema/Lookup.h"
19#include "clang/Sema/ScopeInfo.h"
20#include "clang/AST/ASTConsumer.h"
21#include "clang/AST/ASTContext.h"
22#include "clang/AST/ASTMutationListener.h"
23#include "clang/AST/CharUnits.h"
24#include "clang/AST/CXXInheritance.h"
25#include "clang/AST/DeclVisitor.h"
26#include "clang/AST/EvaluatedExprVisitor.h"
27#include "clang/AST/ExprCXX.h"
28#include "clang/AST/RecordLayout.h"
29#include "clang/AST/RecursiveASTVisitor.h"
30#include "clang/AST/StmtVisitor.h"
31#include "clang/AST/TypeLoc.h"
32#include "clang/AST/TypeOrdering.h"
33#include "clang/Sema/DeclSpec.h"
34#include "clang/Sema/ParsedTemplate.h"
35#include "clang/Basic/PartialDiagnostic.h"
36#include "clang/Lex/Preprocessor.h"
37#include "llvm/ADT/SmallString.h"
38#include "llvm/ADT/STLExtras.h"
39#include <map>
40#include <set>
41
42using namespace clang;
43
44//===----------------------------------------------------------------------===//
45// CheckDefaultArgumentVisitor
46//===----------------------------------------------------------------------===//
47
48namespace {
49  /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
50  /// the default argument of a parameter to determine whether it
51  /// contains any ill-formed subexpressions. For example, this will
52  /// diagnose the use of local variables or parameters within the
53  /// default argument expression.
54  class CheckDefaultArgumentVisitor
55    : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
56    Expr *DefaultArg;
57    Sema *S;
58
59  public:
60    CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
61      : DefaultArg(defarg), S(s) {}
62
63    bool VisitExpr(Expr *Node);
64    bool VisitDeclRefExpr(DeclRefExpr *DRE);
65    bool VisitCXXThisExpr(CXXThisExpr *ThisE);
66    bool VisitLambdaExpr(LambdaExpr *Lambda);
67  };
68
69  /// VisitExpr - Visit all of the children of this expression.
70  bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
71    bool IsInvalid = false;
72    for (Stmt::child_range I = Node->children(); I; ++I)
73      IsInvalid |= Visit(*I);
74    return IsInvalid;
75  }
76
77  /// VisitDeclRefExpr - Visit a reference to a declaration, to
78  /// determine whether this declaration can be used in the default
79  /// argument expression.
80  bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
81    NamedDecl *Decl = DRE->getDecl();
82    if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
83      // C++ [dcl.fct.default]p9
84      //   Default arguments are evaluated each time the function is
85      //   called. The order of evaluation of function arguments is
86      //   unspecified. Consequently, parameters of a function shall not
87      //   be used in default argument expressions, even if they are not
88      //   evaluated. Parameters of a function declared before a default
89      //   argument expression are in scope and can hide namespace and
90      //   class member names.
91      return S->Diag(DRE->getLocStart(),
92                     diag::err_param_default_argument_references_param)
93         << Param->getDeclName() << DefaultArg->getSourceRange();
94    } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
95      // C++ [dcl.fct.default]p7
96      //   Local variables shall not be used in default argument
97      //   expressions.
98      if (VDecl->isLocalVarDecl())
99        return S->Diag(DRE->getLocStart(),
100                       diag::err_param_default_argument_references_local)
101          << VDecl->getDeclName() << DefaultArg->getSourceRange();
102    }
103
104    return false;
105  }
106
107  /// VisitCXXThisExpr - Visit a C++ "this" expression.
108  bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
109    // C++ [dcl.fct.default]p8:
110    //   The keyword this shall not be used in a default argument of a
111    //   member function.
112    return S->Diag(ThisE->getLocStart(),
113                   diag::err_param_default_argument_references_this)
114               << ThisE->getSourceRange();
115  }
116
117  bool CheckDefaultArgumentVisitor::VisitLambdaExpr(LambdaExpr *Lambda) {
118    // C++11 [expr.lambda.prim]p13:
119    //   A lambda-expression appearing in a default argument shall not
120    //   implicitly or explicitly capture any entity.
121    if (Lambda->capture_begin() == Lambda->capture_end())
122      return false;
123
124    return S->Diag(Lambda->getLocStart(),
125                   diag::err_lambda_capture_default_arg);
126  }
127}
128
129void Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc,
130                                                      CXXMethodDecl *Method) {
131  // If we have an MSAny spec already, don't bother.
132  if (!Method || ComputedEST == EST_MSAny)
133    return;
134
135  const FunctionProtoType *Proto
136    = Method->getType()->getAs<FunctionProtoType>();
137  Proto = Self->ResolveExceptionSpec(CallLoc, Proto);
138  if (!Proto)
139    return;
140
141  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
142
143  // If this function can throw any exceptions, make a note of that.
144  if (EST == EST_MSAny || EST == EST_None) {
145    ClearExceptions();
146    ComputedEST = EST;
147    return;
148  }
149
150  // FIXME: If the call to this decl is using any of its default arguments, we
151  // need to search them for potentially-throwing calls.
152
153  // If this function has a basic noexcept, it doesn't affect the outcome.
154  if (EST == EST_BasicNoexcept)
155    return;
156
157  // If we have a throw-all spec at this point, ignore the function.
158  if (ComputedEST == EST_None)
159    return;
160
161  // If we're still at noexcept(true) and there's a nothrow() callee,
162  // change to that specification.
163  if (EST == EST_DynamicNone) {
164    if (ComputedEST == EST_BasicNoexcept)
165      ComputedEST = EST_DynamicNone;
166    return;
167  }
168
169  // Check out noexcept specs.
170  if (EST == EST_ComputedNoexcept) {
171    FunctionProtoType::NoexceptResult NR =
172        Proto->getNoexceptSpec(Self->Context);
173    assert(NR != FunctionProtoType::NR_NoNoexcept &&
174           "Must have noexcept result for EST_ComputedNoexcept.");
175    assert(NR != FunctionProtoType::NR_Dependent &&
176           "Should not generate implicit declarations for dependent cases, "
177           "and don't know how to handle them anyway.");
178
179    // noexcept(false) -> no spec on the new function
180    if (NR == FunctionProtoType::NR_Throw) {
181      ClearExceptions();
182      ComputedEST = EST_None;
183    }
184    // noexcept(true) won't change anything either.
185    return;
186  }
187
188  assert(EST == EST_Dynamic && "EST case not considered earlier.");
189  assert(ComputedEST != EST_None &&
190         "Shouldn't collect exceptions when throw-all is guaranteed.");
191  ComputedEST = EST_Dynamic;
192  // Record the exceptions in this function's exception specification.
193  for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
194                                          EEnd = Proto->exception_end();
195       E != EEnd; ++E)
196    if (ExceptionsSeen.insert(Self->Context.getCanonicalType(*E)))
197      Exceptions.push_back(*E);
198}
199
200void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
201  if (!E || ComputedEST == EST_MSAny)
202    return;
203
204  // FIXME:
205  //
206  // C++0x [except.spec]p14:
207  //   [An] implicit exception-specification specifies the type-id T if and
208  // only if T is allowed by the exception-specification of a function directly
209  // invoked by f's implicit definition; f shall allow all exceptions if any
210  // function it directly invokes allows all exceptions, and f shall allow no
211  // exceptions if every function it directly invokes allows no exceptions.
212  //
213  // Note in particular that if an implicit exception-specification is generated
214  // for a function containing a throw-expression, that specification can still
215  // be noexcept(true).
216  //
217  // Note also that 'directly invoked' is not defined in the standard, and there
218  // is no indication that we should only consider potentially-evaluated calls.
219  //
220  // Ultimately we should implement the intent of the standard: the exception
221  // specification should be the set of exceptions which can be thrown by the
222  // implicit definition. For now, we assume that any non-nothrow expression can
223  // throw any exception.
224
225  if (Self->canThrow(E))
226    ComputedEST = EST_None;
227}
228
229bool
230Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
231                              SourceLocation EqualLoc) {
232  if (RequireCompleteType(Param->getLocation(), Param->getType(),
233                          diag::err_typecheck_decl_incomplete_type)) {
234    Param->setInvalidDecl();
235    return true;
236  }
237
238  // C++ [dcl.fct.default]p5
239  //   A default argument expression is implicitly converted (clause
240  //   4) to the parameter type. The default argument expression has
241  //   the same semantic constraints as the initializer expression in
242  //   a declaration of a variable of the parameter type, using the
243  //   copy-initialization semantics (8.5).
244  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
245                                                                    Param);
246  InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
247                                                           EqualLoc);
248  InitializationSequence InitSeq(*this, Entity, Kind, &Arg, 1);
249  ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Arg);
250  if (Result.isInvalid())
251    return true;
252  Arg = Result.takeAs<Expr>();
253
254  CheckImplicitConversions(Arg, EqualLoc);
255  Arg = MaybeCreateExprWithCleanups(Arg);
256
257  // Okay: add the default argument to the parameter
258  Param->setDefaultArg(Arg);
259
260  // We have already instantiated this parameter; provide each of the
261  // instantiations with the uninstantiated default argument.
262  UnparsedDefaultArgInstantiationsMap::iterator InstPos
263    = UnparsedDefaultArgInstantiations.find(Param);
264  if (InstPos != UnparsedDefaultArgInstantiations.end()) {
265    for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
266      InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
267
268    // We're done tracking this parameter's instantiations.
269    UnparsedDefaultArgInstantiations.erase(InstPos);
270  }
271
272  return false;
273}
274
275/// ActOnParamDefaultArgument - Check whether the default argument
276/// provided for a function parameter is well-formed. If so, attach it
277/// to the parameter declaration.
278void
279Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
280                                Expr *DefaultArg) {
281  if (!param || !DefaultArg)
282    return;
283
284  ParmVarDecl *Param = cast<ParmVarDecl>(param);
285  UnparsedDefaultArgLocs.erase(Param);
286
287  // Default arguments are only permitted in C++
288  if (!getLangOpts().CPlusPlus) {
289    Diag(EqualLoc, diag::err_param_default_argument)
290      << DefaultArg->getSourceRange();
291    Param->setInvalidDecl();
292    return;
293  }
294
295  // Check for unexpanded parameter packs.
296  if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
297    Param->setInvalidDecl();
298    return;
299  }
300
301  // Check that the default argument is well-formed
302  CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
303  if (DefaultArgChecker.Visit(DefaultArg)) {
304    Param->setInvalidDecl();
305    return;
306  }
307
308  SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
309}
310
311/// ActOnParamUnparsedDefaultArgument - We've seen a default
312/// argument for a function parameter, but we can't parse it yet
313/// because we're inside a class definition. Note that this default
314/// argument will be parsed later.
315void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
316                                             SourceLocation EqualLoc,
317                                             SourceLocation ArgLoc) {
318  if (!param)
319    return;
320
321  ParmVarDecl *Param = cast<ParmVarDecl>(param);
322  if (Param)
323    Param->setUnparsedDefaultArg();
324
325  UnparsedDefaultArgLocs[Param] = ArgLoc;
326}
327
328/// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
329/// the default argument for the parameter param failed.
330void Sema::ActOnParamDefaultArgumentError(Decl *param) {
331  if (!param)
332    return;
333
334  ParmVarDecl *Param = cast<ParmVarDecl>(param);
335
336  Param->setInvalidDecl();
337
338  UnparsedDefaultArgLocs.erase(Param);
339}
340
341/// CheckExtraCXXDefaultArguments - Check for any extra default
342/// arguments in the declarator, which is not a function declaration
343/// or definition and therefore is not permitted to have default
344/// arguments. This routine should be invoked for every declarator
345/// that is not a function declaration or definition.
346void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
347  // C++ [dcl.fct.default]p3
348  //   A default argument expression shall be specified only in the
349  //   parameter-declaration-clause of a function declaration or in a
350  //   template-parameter (14.1). It shall not be specified for a
351  //   parameter pack. If it is specified in a
352  //   parameter-declaration-clause, it shall not occur within a
353  //   declarator or abstract-declarator of a parameter-declaration.
354  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
355    DeclaratorChunk &chunk = D.getTypeObject(i);
356    if (chunk.Kind == DeclaratorChunk::Function) {
357      for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
358        ParmVarDecl *Param =
359          cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
360        if (Param->hasUnparsedDefaultArg()) {
361          CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
362          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
363            << SourceRange((*Toks)[1].getLocation(), Toks->back().getLocation());
364          delete Toks;
365          chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
366        } else if (Param->getDefaultArg()) {
367          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
368            << Param->getDefaultArg()->getSourceRange();
369          Param->setDefaultArg(0);
370        }
371      }
372    }
373  }
374}
375
376/// MergeCXXFunctionDecl - Merge two declarations of the same C++
377/// function, once we already know that they have the same
378/// type. Subroutine of MergeFunctionDecl. Returns true if there was an
379/// error, false otherwise.
380bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old,
381                                Scope *S) {
382  bool Invalid = false;
383
384  // C++ [dcl.fct.default]p4:
385  //   For non-template functions, default arguments can be added in
386  //   later declarations of a function in the same
387  //   scope. Declarations in different scopes have completely
388  //   distinct sets of default arguments. That is, declarations in
389  //   inner scopes do not acquire default arguments from
390  //   declarations in outer scopes, and vice versa. In a given
391  //   function declaration, all parameters subsequent to a
392  //   parameter with a default argument shall have default
393  //   arguments supplied in this or previous declarations. A
394  //   default argument shall not be redefined by a later
395  //   declaration (not even to the same value).
396  //
397  // C++ [dcl.fct.default]p6:
398  //   Except for member functions of class templates, the default arguments
399  //   in a member function definition that appears outside of the class
400  //   definition are added to the set of default arguments provided by the
401  //   member function declaration in the class definition.
402  for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
403    ParmVarDecl *OldParam = Old->getParamDecl(p);
404    ParmVarDecl *NewParam = New->getParamDecl(p);
405
406    bool OldParamHasDfl = OldParam->hasDefaultArg();
407    bool NewParamHasDfl = NewParam->hasDefaultArg();
408
409    NamedDecl *ND = Old;
410    if (S && !isDeclInScope(ND, New->getDeclContext(), S))
411      // Ignore default parameters of old decl if they are not in
412      // the same scope.
413      OldParamHasDfl = false;
414
415    if (OldParamHasDfl && NewParamHasDfl) {
416
417      unsigned DiagDefaultParamID =
418        diag::err_param_default_argument_redefinition;
419
420      // MSVC accepts that default parameters be redefined for member functions
421      // of template class. The new default parameter's value is ignored.
422      Invalid = true;
423      if (getLangOpts().MicrosoftExt) {
424        CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
425        if (MD && MD->getParent()->getDescribedClassTemplate()) {
426          // Merge the old default argument into the new parameter.
427          NewParam->setHasInheritedDefaultArg();
428          if (OldParam->hasUninstantiatedDefaultArg())
429            NewParam->setUninstantiatedDefaultArg(
430                                      OldParam->getUninstantiatedDefaultArg());
431          else
432            NewParam->setDefaultArg(OldParam->getInit());
433          DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
434          Invalid = false;
435        }
436      }
437
438      // FIXME: If we knew where the '=' was, we could easily provide a fix-it
439      // hint here. Alternatively, we could walk the type-source information
440      // for NewParam to find the last source location in the type... but it
441      // isn't worth the effort right now. This is the kind of test case that
442      // is hard to get right:
443      //   int f(int);
444      //   void g(int (*fp)(int) = f);
445      //   void g(int (*fp)(int) = &f);
446      Diag(NewParam->getLocation(), DiagDefaultParamID)
447        << NewParam->getDefaultArgRange();
448
449      // Look for the function declaration where the default argument was
450      // actually written, which may be a declaration prior to Old.
451      for (FunctionDecl *Older = Old->getPreviousDecl();
452           Older; Older = Older->getPreviousDecl()) {
453        if (!Older->getParamDecl(p)->hasDefaultArg())
454          break;
455
456        OldParam = Older->getParamDecl(p);
457      }
458
459      Diag(OldParam->getLocation(), diag::note_previous_definition)
460        << OldParam->getDefaultArgRange();
461    } else if (OldParamHasDfl) {
462      // Merge the old default argument into the new parameter.
463      // It's important to use getInit() here;  getDefaultArg()
464      // strips off any top-level ExprWithCleanups.
465      NewParam->setHasInheritedDefaultArg();
466      if (OldParam->hasUninstantiatedDefaultArg())
467        NewParam->setUninstantiatedDefaultArg(
468                                      OldParam->getUninstantiatedDefaultArg());
469      else
470        NewParam->setDefaultArg(OldParam->getInit());
471    } else if (NewParamHasDfl) {
472      if (New->getDescribedFunctionTemplate()) {
473        // Paragraph 4, quoted above, only applies to non-template functions.
474        Diag(NewParam->getLocation(),
475             diag::err_param_default_argument_template_redecl)
476          << NewParam->getDefaultArgRange();
477        Diag(Old->getLocation(), diag::note_template_prev_declaration)
478          << false;
479      } else if (New->getTemplateSpecializationKind()
480                   != TSK_ImplicitInstantiation &&
481                 New->getTemplateSpecializationKind() != TSK_Undeclared) {
482        // C++ [temp.expr.spec]p21:
483        //   Default function arguments shall not be specified in a declaration
484        //   or a definition for one of the following explicit specializations:
485        //     - the explicit specialization of a function template;
486        //     - the explicit specialization of a member function template;
487        //     - the explicit specialization of a member function of a class
488        //       template where the class template specialization to which the
489        //       member function specialization belongs is implicitly
490        //       instantiated.
491        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
492          << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
493          << New->getDeclName()
494          << NewParam->getDefaultArgRange();
495      } else if (New->getDeclContext()->isDependentContext()) {
496        // C++ [dcl.fct.default]p6 (DR217):
497        //   Default arguments for a member function of a class template shall
498        //   be specified on the initial declaration of the member function
499        //   within the class template.
500        //
501        // Reading the tea leaves a bit in DR217 and its reference to DR205
502        // leads me to the conclusion that one cannot add default function
503        // arguments for an out-of-line definition of a member function of a
504        // dependent type.
505        int WhichKind = 2;
506        if (CXXRecordDecl *Record
507              = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
508          if (Record->getDescribedClassTemplate())
509            WhichKind = 0;
510          else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
511            WhichKind = 1;
512          else
513            WhichKind = 2;
514        }
515
516        Diag(NewParam->getLocation(),
517             diag::err_param_default_argument_member_template_redecl)
518          << WhichKind
519          << NewParam->getDefaultArgRange();
520      } else if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(New)) {
521        CXXSpecialMember NewSM = getSpecialMember(Ctor),
522                         OldSM = getSpecialMember(cast<CXXConstructorDecl>(Old));
523        if (NewSM != OldSM) {
524          Diag(NewParam->getLocation(),diag::warn_default_arg_makes_ctor_special)
525            << NewParam->getDefaultArgRange() << NewSM;
526          Diag(Old->getLocation(), diag::note_previous_declaration_special)
527            << OldSM;
528        }
529      }
530    }
531  }
532
533  // C++11 [dcl.constexpr]p1: If any declaration of a function or function
534  // template has a constexpr specifier then all its declarations shall
535  // contain the constexpr specifier.
536  if (New->isConstexpr() != Old->isConstexpr()) {
537    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch)
538      << New << New->isConstexpr();
539    Diag(Old->getLocation(), diag::note_previous_declaration);
540    Invalid = true;
541  }
542
543  if (CheckEquivalentExceptionSpec(Old, New))
544    Invalid = true;
545
546  return Invalid;
547}
548
549/// \brief Merge the exception specifications of two variable declarations.
550///
551/// This is called when there's a redeclaration of a VarDecl. The function
552/// checks if the redeclaration might have an exception specification and
553/// validates compatibility and merges the specs if necessary.
554void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
555  // Shortcut if exceptions are disabled.
556  if (!getLangOpts().CXXExceptions)
557    return;
558
559  assert(Context.hasSameType(New->getType(), Old->getType()) &&
560         "Should only be called if types are otherwise the same.");
561
562  QualType NewType = New->getType();
563  QualType OldType = Old->getType();
564
565  // We're only interested in pointers and references to functions, as well
566  // as pointers to member functions.
567  if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
568    NewType = R->getPointeeType();
569    OldType = OldType->getAs<ReferenceType>()->getPointeeType();
570  } else if (const PointerType *P = NewType->getAs<PointerType>()) {
571    NewType = P->getPointeeType();
572    OldType = OldType->getAs<PointerType>()->getPointeeType();
573  } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
574    NewType = M->getPointeeType();
575    OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
576  }
577
578  if (!NewType->isFunctionProtoType())
579    return;
580
581  // There's lots of special cases for functions. For function pointers, system
582  // libraries are hopefully not as broken so that we don't need these
583  // workarounds.
584  if (CheckEquivalentExceptionSpec(
585        OldType->getAs<FunctionProtoType>(), Old->getLocation(),
586        NewType->getAs<FunctionProtoType>(), New->getLocation())) {
587    New->setInvalidDecl();
588  }
589}
590
591/// CheckCXXDefaultArguments - Verify that the default arguments for a
592/// function declaration are well-formed according to C++
593/// [dcl.fct.default].
594void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
595  unsigned NumParams = FD->getNumParams();
596  unsigned p;
597
598  bool IsLambda = FD->getOverloadedOperator() == OO_Call &&
599                  isa<CXXMethodDecl>(FD) &&
600                  cast<CXXMethodDecl>(FD)->getParent()->isLambda();
601
602  // Find first parameter with a default argument
603  for (p = 0; p < NumParams; ++p) {
604    ParmVarDecl *Param = FD->getParamDecl(p);
605    if (Param->hasDefaultArg()) {
606      // C++11 [expr.prim.lambda]p5:
607      //   [...] Default arguments (8.3.6) shall not be specified in the
608      //   parameter-declaration-clause of a lambda-declarator.
609      //
610      // FIXME: Core issue 974 strikes this sentence, we only provide an
611      // extension warning.
612      if (IsLambda)
613        Diag(Param->getLocation(), diag::ext_lambda_default_arguments)
614          << Param->getDefaultArgRange();
615      break;
616    }
617  }
618
619  // C++ [dcl.fct.default]p4:
620  //   In a given function declaration, all parameters
621  //   subsequent to a parameter with a default argument shall
622  //   have default arguments supplied in this or previous
623  //   declarations. A default argument shall not be redefined
624  //   by a later declaration (not even to the same value).
625  unsigned LastMissingDefaultArg = 0;
626  for (; p < NumParams; ++p) {
627    ParmVarDecl *Param = FD->getParamDecl(p);
628    if (!Param->hasDefaultArg()) {
629      if (Param->isInvalidDecl())
630        /* We already complained about this parameter. */;
631      else if (Param->getIdentifier())
632        Diag(Param->getLocation(),
633             diag::err_param_default_argument_missing_name)
634          << Param->getIdentifier();
635      else
636        Diag(Param->getLocation(),
637             diag::err_param_default_argument_missing);
638
639      LastMissingDefaultArg = p;
640    }
641  }
642
643  if (LastMissingDefaultArg > 0) {
644    // Some default arguments were missing. Clear out all of the
645    // default arguments up to (and including) the last missing
646    // default argument, so that we leave the function parameters
647    // in a semantically valid state.
648    for (p = 0; p <= LastMissingDefaultArg; ++p) {
649      ParmVarDecl *Param = FD->getParamDecl(p);
650      if (Param->hasDefaultArg()) {
651        Param->setDefaultArg(0);
652      }
653    }
654  }
655}
656
657// CheckConstexprParameterTypes - Check whether a function's parameter types
658// are all literal types. If so, return true. If not, produce a suitable
659// diagnostic and return false.
660static bool CheckConstexprParameterTypes(Sema &SemaRef,
661                                         const FunctionDecl *FD) {
662  unsigned ArgIndex = 0;
663  const FunctionProtoType *FT = FD->getType()->getAs<FunctionProtoType>();
664  for (FunctionProtoType::arg_type_iterator i = FT->arg_type_begin(),
665       e = FT->arg_type_end(); i != e; ++i, ++ArgIndex) {
666    const ParmVarDecl *PD = FD->getParamDecl(ArgIndex);
667    SourceLocation ParamLoc = PD->getLocation();
668    if (!(*i)->isDependentType() &&
669        SemaRef.RequireLiteralType(ParamLoc, *i,
670                                   diag::err_constexpr_non_literal_param,
671                                   ArgIndex+1, PD->getSourceRange(),
672                                   isa<CXXConstructorDecl>(FD)))
673      return false;
674  }
675  return true;
676}
677
678/// \brief Get diagnostic %select index for tag kind for
679/// record diagnostic message.
680/// WARNING: Indexes apply to particular diagnostics only!
681///
682/// \returns diagnostic %select index.
683static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) {
684  switch (Tag) {
685  case TTK_Struct: return 0;
686  case TTK_Interface: return 1;
687  case TTK_Class:  return 2;
688  default: llvm_unreachable("Invalid tag kind for record diagnostic!");
689  }
690}
691
692// CheckConstexprFunctionDecl - Check whether a function declaration satisfies
693// the requirements of a constexpr function definition or a constexpr
694// constructor definition. If so, return true. If not, produce appropriate
695// diagnostics and return false.
696//
697// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.
698bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) {
699  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
700  if (MD && MD->isInstance()) {
701    // C++11 [dcl.constexpr]p4:
702    //  The definition of a constexpr constructor shall satisfy the following
703    //  constraints:
704    //  - the class shall not have any virtual base classes;
705    const CXXRecordDecl *RD = MD->getParent();
706    if (RD->getNumVBases()) {
707      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base)
708        << isa<CXXConstructorDecl>(NewFD)
709        << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();
710      for (CXXRecordDecl::base_class_const_iterator I = RD->vbases_begin(),
711             E = RD->vbases_end(); I != E; ++I)
712        Diag(I->getLocStart(),
713             diag::note_constexpr_virtual_base_here) << I->getSourceRange();
714      return false;
715    }
716  }
717
718  if (!isa<CXXConstructorDecl>(NewFD)) {
719    // C++11 [dcl.constexpr]p3:
720    //  The definition of a constexpr function shall satisfy the following
721    //  constraints:
722    // - it shall not be virtual;
723    const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD);
724    if (Method && Method->isVirtual()) {
725      Diag(NewFD->getLocation(), diag::err_constexpr_virtual);
726
727      // If it's not obvious why this function is virtual, find an overridden
728      // function which uses the 'virtual' keyword.
729      const CXXMethodDecl *WrittenVirtual = Method;
730      while (!WrittenVirtual->isVirtualAsWritten())
731        WrittenVirtual = *WrittenVirtual->begin_overridden_methods();
732      if (WrittenVirtual != Method)
733        Diag(WrittenVirtual->getLocation(),
734             diag::note_overridden_virtual_function);
735      return false;
736    }
737
738    // - its return type shall be a literal type;
739    QualType RT = NewFD->getResultType();
740    if (!RT->isDependentType() &&
741        RequireLiteralType(NewFD->getLocation(), RT,
742                           diag::err_constexpr_non_literal_return))
743      return false;
744  }
745
746  // - each of its parameter types shall be a literal type;
747  if (!CheckConstexprParameterTypes(*this, NewFD))
748    return false;
749
750  return true;
751}
752
753/// Check the given declaration statement is legal within a constexpr function
754/// body. C++0x [dcl.constexpr]p3,p4.
755///
756/// \return true if the body is OK, false if we have diagnosed a problem.
757static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
758                                   DeclStmt *DS) {
759  // C++0x [dcl.constexpr]p3 and p4:
760  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall
761  //  contain only
762  for (DeclStmt::decl_iterator DclIt = DS->decl_begin(),
763         DclEnd = DS->decl_end(); DclIt != DclEnd; ++DclIt) {
764    switch ((*DclIt)->getKind()) {
765    case Decl::StaticAssert:
766    case Decl::Using:
767    case Decl::UsingShadow:
768    case Decl::UsingDirective:
769    case Decl::UnresolvedUsingTypename:
770      //   - static_assert-declarations
771      //   - using-declarations,
772      //   - using-directives,
773      continue;
774
775    case Decl::Typedef:
776    case Decl::TypeAlias: {
777      //   - typedef declarations and alias-declarations that do not define
778      //     classes or enumerations,
779      TypedefNameDecl *TN = cast<TypedefNameDecl>(*DclIt);
780      if (TN->getUnderlyingType()->isVariablyModifiedType()) {
781        // Don't allow variably-modified types in constexpr functions.
782        TypeLoc TL = TN->getTypeSourceInfo()->getTypeLoc();
783        SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla)
784          << TL.getSourceRange() << TL.getType()
785          << isa<CXXConstructorDecl>(Dcl);
786        return false;
787      }
788      continue;
789    }
790
791    case Decl::Enum:
792    case Decl::CXXRecord:
793      // As an extension, we allow the declaration (but not the definition) of
794      // classes and enumerations in all declarations, not just in typedef and
795      // alias declarations.
796      if (cast<TagDecl>(*DclIt)->isThisDeclarationADefinition()) {
797        SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_type_definition)
798          << isa<CXXConstructorDecl>(Dcl);
799        return false;
800      }
801      continue;
802
803    case Decl::Var:
804      SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_var_declaration)
805        << isa<CXXConstructorDecl>(Dcl);
806      return false;
807
808    default:
809      SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt)
810        << isa<CXXConstructorDecl>(Dcl);
811      return false;
812    }
813  }
814
815  return true;
816}
817
818/// Check that the given field is initialized within a constexpr constructor.
819///
820/// \param Dcl The constexpr constructor being checked.
821/// \param Field The field being checked. This may be a member of an anonymous
822///        struct or union nested within the class being checked.
823/// \param Inits All declarations, including anonymous struct/union members and
824///        indirect members, for which any initialization was provided.
825/// \param Diagnosed Set to true if an error is produced.
826static void CheckConstexprCtorInitializer(Sema &SemaRef,
827                                          const FunctionDecl *Dcl,
828                                          FieldDecl *Field,
829                                          llvm::SmallSet<Decl*, 16> &Inits,
830                                          bool &Diagnosed) {
831  if (Field->isUnnamedBitfield())
832    return;
833
834  if (Field->isAnonymousStructOrUnion() &&
835      Field->getType()->getAsCXXRecordDecl()->isEmpty())
836    return;
837
838  if (!Inits.count(Field)) {
839    if (!Diagnosed) {
840      SemaRef.Diag(Dcl->getLocation(), diag::err_constexpr_ctor_missing_init);
841      Diagnosed = true;
842    }
843    SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);
844  } else if (Field->isAnonymousStructOrUnion()) {
845    const RecordDecl *RD = Field->getType()->castAs<RecordType>()->getDecl();
846    for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
847         I != E; ++I)
848      // If an anonymous union contains an anonymous struct of which any member
849      // is initialized, all members must be initialized.
850      if (!RD->isUnion() || Inits.count(*I))
851        CheckConstexprCtorInitializer(SemaRef, Dcl, *I, Inits, Diagnosed);
852  }
853}
854
855/// Check the body for the given constexpr function declaration only contains
856/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.
857///
858/// \return true if the body is OK, false if we have diagnosed a problem.
859bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) {
860  if (isa<CXXTryStmt>(Body)) {
861    // C++11 [dcl.constexpr]p3:
862    //  The definition of a constexpr function shall satisfy the following
863    //  constraints: [...]
864    // - its function-body shall be = delete, = default, or a
865    //   compound-statement
866    //
867    // C++11 [dcl.constexpr]p4:
868    //  In the definition of a constexpr constructor, [...]
869    // - its function-body shall not be a function-try-block;
870    Diag(Body->getLocStart(), diag::err_constexpr_function_try_block)
871      << isa<CXXConstructorDecl>(Dcl);
872    return false;
873  }
874
875  // - its function-body shall be [...] a compound-statement that contains only
876  CompoundStmt *CompBody = cast<CompoundStmt>(Body);
877
878  llvm::SmallVector<SourceLocation, 4> ReturnStmts;
879  for (CompoundStmt::body_iterator BodyIt = CompBody->body_begin(),
880         BodyEnd = CompBody->body_end(); BodyIt != BodyEnd; ++BodyIt) {
881    switch ((*BodyIt)->getStmtClass()) {
882    case Stmt::NullStmtClass:
883      //   - null statements,
884      continue;
885
886    case Stmt::DeclStmtClass:
887      //   - static_assert-declarations
888      //   - using-declarations,
889      //   - using-directives,
890      //   - typedef declarations and alias-declarations that do not define
891      //     classes or enumerations,
892      if (!CheckConstexprDeclStmt(*this, Dcl, cast<DeclStmt>(*BodyIt)))
893        return false;
894      continue;
895
896    case Stmt::ReturnStmtClass:
897      //   - and exactly one return statement;
898      if (isa<CXXConstructorDecl>(Dcl))
899        break;
900
901      ReturnStmts.push_back((*BodyIt)->getLocStart());
902      continue;
903
904    default:
905      break;
906    }
907
908    Diag((*BodyIt)->getLocStart(), diag::err_constexpr_body_invalid_stmt)
909      << isa<CXXConstructorDecl>(Dcl);
910    return false;
911  }
912
913  if (const CXXConstructorDecl *Constructor
914        = dyn_cast<CXXConstructorDecl>(Dcl)) {
915    const CXXRecordDecl *RD = Constructor->getParent();
916    // DR1359:
917    // - every non-variant non-static data member and base class sub-object
918    //   shall be initialized;
919    // - if the class is a non-empty union, or for each non-empty anonymous
920    //   union member of a non-union class, exactly one non-static data member
921    //   shall be initialized;
922    if (RD->isUnion()) {
923      if (Constructor->getNumCtorInitializers() == 0 && !RD->isEmpty()) {
924        Diag(Dcl->getLocation(), diag::err_constexpr_union_ctor_no_init);
925        return false;
926      }
927    } else if (!Constructor->isDependentContext() &&
928               !Constructor->isDelegatingConstructor()) {
929      assert(RD->getNumVBases() == 0 && "constexpr ctor with virtual bases");
930
931      // Skip detailed checking if we have enough initializers, and we would
932      // allow at most one initializer per member.
933      bool AnyAnonStructUnionMembers = false;
934      unsigned Fields = 0;
935      for (CXXRecordDecl::field_iterator I = RD->field_begin(),
936           E = RD->field_end(); I != E; ++I, ++Fields) {
937        if (I->isAnonymousStructOrUnion()) {
938          AnyAnonStructUnionMembers = true;
939          break;
940        }
941      }
942      if (AnyAnonStructUnionMembers ||
943          Constructor->getNumCtorInitializers() != RD->getNumBases() + Fields) {
944        // Check initialization of non-static data members. Base classes are
945        // always initialized so do not need to be checked. Dependent bases
946        // might not have initializers in the member initializer list.
947        llvm::SmallSet<Decl*, 16> Inits;
948        for (CXXConstructorDecl::init_const_iterator
949               I = Constructor->init_begin(), E = Constructor->init_end();
950             I != E; ++I) {
951          if (FieldDecl *FD = (*I)->getMember())
952            Inits.insert(FD);
953          else if (IndirectFieldDecl *ID = (*I)->getIndirectMember())
954            Inits.insert(ID->chain_begin(), ID->chain_end());
955        }
956
957        bool Diagnosed = false;
958        for (CXXRecordDecl::field_iterator I = RD->field_begin(),
959             E = RD->field_end(); I != E; ++I)
960          CheckConstexprCtorInitializer(*this, Dcl, *I, Inits, Diagnosed);
961        if (Diagnosed)
962          return false;
963      }
964    }
965  } else {
966    if (ReturnStmts.empty()) {
967      Diag(Dcl->getLocation(), diag::err_constexpr_body_no_return);
968      return false;
969    }
970    if (ReturnStmts.size() > 1) {
971      Diag(ReturnStmts.back(), diag::err_constexpr_body_multiple_return);
972      for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)
973        Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);
974      return false;
975    }
976  }
977
978  // C++11 [dcl.constexpr]p5:
979  //   if no function argument values exist such that the function invocation
980  //   substitution would produce a constant expression, the program is
981  //   ill-formed; no diagnostic required.
982  // C++11 [dcl.constexpr]p3:
983  //   - every constructor call and implicit conversion used in initializing the
984  //     return value shall be one of those allowed in a constant expression.
985  // C++11 [dcl.constexpr]p4:
986  //   - every constructor involved in initializing non-static data members and
987  //     base class sub-objects shall be a constexpr constructor.
988  llvm::SmallVector<PartialDiagnosticAt, 8> Diags;
989  if (!Expr::isPotentialConstantExpr(Dcl, Diags)) {
990    Diag(Dcl->getLocation(), diag::err_constexpr_function_never_constant_expr)
991      << isa<CXXConstructorDecl>(Dcl);
992    for (size_t I = 0, N = Diags.size(); I != N; ++I)
993      Diag(Diags[I].first, Diags[I].second);
994    return false;
995  }
996
997  return true;
998}
999
1000/// isCurrentClassName - Determine whether the identifier II is the
1001/// name of the class type currently being defined. In the case of
1002/// nested classes, this will only return true if II is the name of
1003/// the innermost class.
1004bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
1005                              const CXXScopeSpec *SS) {
1006  assert(getLangOpts().CPlusPlus && "No class names in C!");
1007
1008  CXXRecordDecl *CurDecl;
1009  if (SS && SS->isSet() && !SS->isInvalid()) {
1010    DeclContext *DC = computeDeclContext(*SS, true);
1011    CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
1012  } else
1013    CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
1014
1015  if (CurDecl && CurDecl->getIdentifier())
1016    return &II == CurDecl->getIdentifier();
1017  else
1018    return false;
1019}
1020
1021/// \brief Check the validity of a C++ base class specifier.
1022///
1023/// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
1024/// and returns NULL otherwise.
1025CXXBaseSpecifier *
1026Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
1027                         SourceRange SpecifierRange,
1028                         bool Virtual, AccessSpecifier Access,
1029                         TypeSourceInfo *TInfo,
1030                         SourceLocation EllipsisLoc) {
1031  QualType BaseType = TInfo->getType();
1032
1033  // C++ [class.union]p1:
1034  //   A union shall not have base classes.
1035  if (Class->isUnion()) {
1036    Diag(Class->getLocation(), diag::err_base_clause_on_union)
1037      << SpecifierRange;
1038    return 0;
1039  }
1040
1041  if (EllipsisLoc.isValid() &&
1042      !TInfo->getType()->containsUnexpandedParameterPack()) {
1043    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1044      << TInfo->getTypeLoc().getSourceRange();
1045    EllipsisLoc = SourceLocation();
1046  }
1047
1048  if (BaseType->isDependentType())
1049    return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1050                                          Class->getTagKind() == TTK_Class,
1051                                          Access, TInfo, EllipsisLoc);
1052
1053  SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
1054
1055  // Base specifiers must be record types.
1056  if (!BaseType->isRecordType()) {
1057    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
1058    return 0;
1059  }
1060
1061  // C++ [class.union]p1:
1062  //   A union shall not be used as a base class.
1063  if (BaseType->isUnionType()) {
1064    Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
1065    return 0;
1066  }
1067
1068  // C++ [class.derived]p2:
1069  //   The class-name in a base-specifier shall not be an incompletely
1070  //   defined class.
1071  if (RequireCompleteType(BaseLoc, BaseType,
1072                          diag::err_incomplete_base_class, SpecifierRange)) {
1073    Class->setInvalidDecl();
1074    return 0;
1075  }
1076
1077  // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
1078  RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
1079  assert(BaseDecl && "Record type has no declaration");
1080  BaseDecl = BaseDecl->getDefinition();
1081  assert(BaseDecl && "Base type is not incomplete, but has no definition");
1082  CXXRecordDecl * CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
1083  assert(CXXBaseDecl && "Base type is not a C++ type");
1084
1085  // C++ [class]p3:
1086  //   If a class is marked final and it appears as a base-type-specifier in
1087  //   base-clause, the program is ill-formed.
1088  if (CXXBaseDecl->hasAttr<FinalAttr>()) {
1089    Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
1090      << CXXBaseDecl->getDeclName();
1091    Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
1092      << CXXBaseDecl->getDeclName();
1093    return 0;
1094  }
1095
1096  if (BaseDecl->isInvalidDecl())
1097    Class->setInvalidDecl();
1098
1099  // Create the base specifier.
1100  return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
1101                                        Class->getTagKind() == TTK_Class,
1102                                        Access, TInfo, EllipsisLoc);
1103}
1104
1105/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
1106/// one entry in the base class list of a class specifier, for
1107/// example:
1108///    class foo : public bar, virtual private baz {
1109/// 'public bar' and 'virtual private baz' are each base-specifiers.
1110BaseResult
1111Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1112                         bool Virtual, AccessSpecifier Access,
1113                         ParsedType basetype, SourceLocation BaseLoc,
1114                         SourceLocation EllipsisLoc) {
1115  if (!classdecl)
1116    return true;
1117
1118  AdjustDeclIfTemplate(classdecl);
1119  CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1120  if (!Class)
1121    return true;
1122
1123  TypeSourceInfo *TInfo = 0;
1124  GetTypeFromParser(basetype, &TInfo);
1125
1126  if (EllipsisLoc.isInvalid() &&
1127      DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
1128                                      UPPC_BaseType))
1129    return true;
1130
1131  if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
1132                                                      Virtual, Access, TInfo,
1133                                                      EllipsisLoc))
1134    return BaseSpec;
1135  else
1136    Class->setInvalidDecl();
1137
1138  return true;
1139}
1140
1141/// \brief Performs the actual work of attaching the given base class
1142/// specifiers to a C++ class.
1143bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
1144                                unsigned NumBases) {
1145 if (NumBases == 0)
1146    return false;
1147
1148  // Used to keep track of which base types we have already seen, so
1149  // that we can properly diagnose redundant direct base types. Note
1150  // that the key is always the unqualified canonical type of the base
1151  // class.
1152  std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
1153
1154  // Copy non-redundant base specifiers into permanent storage.
1155  unsigned NumGoodBases = 0;
1156  bool Invalid = false;
1157  for (unsigned idx = 0; idx < NumBases; ++idx) {
1158    QualType NewBaseType
1159      = Context.getCanonicalType(Bases[idx]->getType());
1160    NewBaseType = NewBaseType.getLocalUnqualifiedType();
1161
1162    CXXBaseSpecifier *&KnownBase = KnownBaseTypes[NewBaseType];
1163    if (KnownBase) {
1164      // C++ [class.mi]p3:
1165      //   A class shall not be specified as a direct base class of a
1166      //   derived class more than once.
1167      Diag(Bases[idx]->getLocStart(),
1168           diag::err_duplicate_base_class)
1169        << KnownBase->getType()
1170        << Bases[idx]->getSourceRange();
1171
1172      // Delete the duplicate base class specifier; we're going to
1173      // overwrite its pointer later.
1174      Context.Deallocate(Bases[idx]);
1175
1176      Invalid = true;
1177    } else {
1178      // Okay, add this new base class.
1179      KnownBase = Bases[idx];
1180      Bases[NumGoodBases++] = Bases[idx];
1181      if (const RecordType *Record = NewBaseType->getAs<RecordType>())
1182        if (const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl()))
1183          if (RD->hasAttr<WeakAttr>())
1184            Class->addAttr(::new (Context) WeakAttr(SourceRange(), Context));
1185    }
1186  }
1187
1188  // Attach the remaining base class specifiers to the derived class.
1189  Class->setBases(Bases, NumGoodBases);
1190
1191  // Delete the remaining (good) base class specifiers, since their
1192  // data has been copied into the CXXRecordDecl.
1193  for (unsigned idx = 0; idx < NumGoodBases; ++idx)
1194    Context.Deallocate(Bases[idx]);
1195
1196  return Invalid;
1197}
1198
1199/// ActOnBaseSpecifiers - Attach the given base specifiers to the
1200/// class, after checking whether there are any duplicate base
1201/// classes.
1202void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1203                               unsigned NumBases) {
1204  if (!ClassDecl || !Bases || !NumBases)
1205    return;
1206
1207  AdjustDeclIfTemplate(ClassDecl);
1208  AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
1209                       (CXXBaseSpecifier**)(Bases), NumBases);
1210}
1211
1212static CXXRecordDecl *GetClassForType(QualType T) {
1213  if (const RecordType *RT = T->getAs<RecordType>())
1214    return cast<CXXRecordDecl>(RT->getDecl());
1215  else if (const InjectedClassNameType *ICT = T->getAs<InjectedClassNameType>())
1216    return ICT->getDecl();
1217  else
1218    return 0;
1219}
1220
1221/// \brief Determine whether the type \p Derived is a C++ class that is
1222/// derived from the type \p Base.
1223bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
1224  if (!getLangOpts().CPlusPlus)
1225    return false;
1226
1227  CXXRecordDecl *DerivedRD = GetClassForType(Derived);
1228  if (!DerivedRD)
1229    return false;
1230
1231  CXXRecordDecl *BaseRD = GetClassForType(Base);
1232  if (!BaseRD)
1233    return false;
1234
1235  // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
1236  return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
1237}
1238
1239/// \brief Determine whether the type \p Derived is a C++ class that is
1240/// derived from the type \p Base.
1241bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
1242  if (!getLangOpts().CPlusPlus)
1243    return false;
1244
1245  CXXRecordDecl *DerivedRD = GetClassForType(Derived);
1246  if (!DerivedRD)
1247    return false;
1248
1249  CXXRecordDecl *BaseRD = GetClassForType(Base);
1250  if (!BaseRD)
1251    return false;
1252
1253  return DerivedRD->isDerivedFrom(BaseRD, Paths);
1254}
1255
1256void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
1257                              CXXCastPath &BasePathArray) {
1258  assert(BasePathArray.empty() && "Base path array must be empty!");
1259  assert(Paths.isRecordingPaths() && "Must record paths!");
1260
1261  const CXXBasePath &Path = Paths.front();
1262
1263  // We first go backward and check if we have a virtual base.
1264  // FIXME: It would be better if CXXBasePath had the base specifier for
1265  // the nearest virtual base.
1266  unsigned Start = 0;
1267  for (unsigned I = Path.size(); I != 0; --I) {
1268    if (Path[I - 1].Base->isVirtual()) {
1269      Start = I - 1;
1270      break;
1271    }
1272  }
1273
1274  // Now add all bases.
1275  for (unsigned I = Start, E = Path.size(); I != E; ++I)
1276    BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
1277}
1278
1279/// \brief Determine whether the given base path includes a virtual
1280/// base class.
1281bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
1282  for (CXXCastPath::const_iterator B = BasePath.begin(),
1283                                BEnd = BasePath.end();
1284       B != BEnd; ++B)
1285    if ((*B)->isVirtual())
1286      return true;
1287
1288  return false;
1289}
1290
1291/// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
1292/// conversion (where Derived and Base are class types) is
1293/// well-formed, meaning that the conversion is unambiguous (and
1294/// that all of the base classes are accessible). Returns true
1295/// and emits a diagnostic if the code is ill-formed, returns false
1296/// otherwise. Loc is the location where this routine should point to
1297/// if there is an error, and Range is the source range to highlight
1298/// if there is an error.
1299bool
1300Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1301                                   unsigned InaccessibleBaseID,
1302                                   unsigned AmbigiousBaseConvID,
1303                                   SourceLocation Loc, SourceRange Range,
1304                                   DeclarationName Name,
1305                                   CXXCastPath *BasePath) {
1306  // First, determine whether the path from Derived to Base is
1307  // ambiguous. This is slightly more expensive than checking whether
1308  // the Derived to Base conversion exists, because here we need to
1309  // explore multiple paths to determine if there is an ambiguity.
1310  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1311                     /*DetectVirtual=*/false);
1312  bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
1313  assert(DerivationOkay &&
1314         "Can only be used with a derived-to-base conversion");
1315  (void)DerivationOkay;
1316
1317  if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
1318    if (InaccessibleBaseID) {
1319      // Check that the base class can be accessed.
1320      switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
1321                                   InaccessibleBaseID)) {
1322        case AR_inaccessible:
1323          return true;
1324        case AR_accessible:
1325        case AR_dependent:
1326        case AR_delayed:
1327          break;
1328      }
1329    }
1330
1331    // Build a base path if necessary.
1332    if (BasePath)
1333      BuildBasePathArray(Paths, *BasePath);
1334    return false;
1335  }
1336
1337  // We know that the derived-to-base conversion is ambiguous, and
1338  // we're going to produce a diagnostic. Perform the derived-to-base
1339  // search just one more time to compute all of the possible paths so
1340  // that we can print them out. This is more expensive than any of
1341  // the previous derived-to-base checks we've done, but at this point
1342  // performance isn't as much of an issue.
1343  Paths.clear();
1344  Paths.setRecordingPaths(true);
1345  bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
1346  assert(StillOkay && "Can only be used with a derived-to-base conversion");
1347  (void)StillOkay;
1348
1349  // Build up a textual representation of the ambiguous paths, e.g.,
1350  // D -> B -> A, that will be used to illustrate the ambiguous
1351  // conversions in the diagnostic. We only print one of the paths
1352  // to each base class subobject.
1353  std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1354
1355  Diag(Loc, AmbigiousBaseConvID)
1356  << Derived << Base << PathDisplayStr << Range << Name;
1357  return true;
1358}
1359
1360bool
1361Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
1362                                   SourceLocation Loc, SourceRange Range,
1363                                   CXXCastPath *BasePath,
1364                                   bool IgnoreAccess) {
1365  return CheckDerivedToBaseConversion(Derived, Base,
1366                                      IgnoreAccess ? 0
1367                                       : diag::err_upcast_to_inaccessible_base,
1368                                      diag::err_ambiguous_derived_to_base_conv,
1369                                      Loc, Range, DeclarationName(),
1370                                      BasePath);
1371}
1372
1373
1374/// @brief Builds a string representing ambiguous paths from a
1375/// specific derived class to different subobjects of the same base
1376/// class.
1377///
1378/// This function builds a string that can be used in error messages
1379/// to show the different paths that one can take through the
1380/// inheritance hierarchy to go from the derived class to different
1381/// subobjects of a base class. The result looks something like this:
1382/// @code
1383/// struct D -> struct B -> struct A
1384/// struct D -> struct C -> struct A
1385/// @endcode
1386std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
1387  std::string PathDisplayStr;
1388  std::set<unsigned> DisplayedPaths;
1389  for (CXXBasePaths::paths_iterator Path = Paths.begin();
1390       Path != Paths.end(); ++Path) {
1391    if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
1392      // We haven't displayed a path to this particular base
1393      // class subobject yet.
1394      PathDisplayStr += "\n    ";
1395      PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
1396      for (CXXBasePath::const_iterator Element = Path->begin();
1397           Element != Path->end(); ++Element)
1398        PathDisplayStr += " -> " + Element->Base->getType().getAsString();
1399    }
1400  }
1401
1402  return PathDisplayStr;
1403}
1404
1405//===----------------------------------------------------------------------===//
1406// C++ class member Handling
1407//===----------------------------------------------------------------------===//
1408
1409/// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
1410bool Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1411                                SourceLocation ASLoc,
1412                                SourceLocation ColonLoc,
1413                                AttributeList *Attrs) {
1414  assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1415  AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1416                                                  ASLoc, ColonLoc);
1417  CurContext->addHiddenDecl(ASDecl);
1418  return ProcessAccessDeclAttributeList(ASDecl, Attrs);
1419}
1420
1421/// CheckOverrideControl - Check C++11 override control semantics.
1422void Sema::CheckOverrideControl(Decl *D) {
1423  if (D->isInvalidDecl())
1424    return;
1425
1426  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1427
1428  // Do we know which functions this declaration might be overriding?
1429  bool OverridesAreKnown = !MD ||
1430      (!MD->getParent()->hasAnyDependentBases() &&
1431       !MD->getType()->isDependentType());
1432
1433  if (!MD || !MD->isVirtual()) {
1434    if (OverridesAreKnown) {
1435      if (OverrideAttr *OA = D->getAttr<OverrideAttr>()) {
1436        Diag(OA->getLocation(),
1437             diag::override_keyword_only_allowed_on_virtual_member_functions)
1438          << "override" << FixItHint::CreateRemoval(OA->getLocation());
1439        D->dropAttr<OverrideAttr>();
1440      }
1441      if (FinalAttr *FA = D->getAttr<FinalAttr>()) {
1442        Diag(FA->getLocation(),
1443             diag::override_keyword_only_allowed_on_virtual_member_functions)
1444          << "final" << FixItHint::CreateRemoval(FA->getLocation());
1445        D->dropAttr<FinalAttr>();
1446      }
1447    }
1448    return;
1449  }
1450
1451  if (!OverridesAreKnown)
1452    return;
1453
1454  // C++11 [class.virtual]p5:
1455  //   If a virtual function is marked with the virt-specifier override and
1456  //   does not override a member function of a base class, the program is
1457  //   ill-formed.
1458  bool HasOverriddenMethods =
1459    MD->begin_overridden_methods() != MD->end_overridden_methods();
1460  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)
1461    Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding)
1462      << MD->getDeclName();
1463}
1464
1465/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1466/// function overrides a virtual member function marked 'final', according to
1467/// C++11 [class.virtual]p4.
1468bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1469                                                  const CXXMethodDecl *Old) {
1470  if (!Old->hasAttr<FinalAttr>())
1471    return false;
1472
1473  Diag(New->getLocation(), diag::err_final_function_overridden)
1474    << New->getDeclName();
1475  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1476  return true;
1477}
1478
1479static bool InitializationHasSideEffects(const FieldDecl &FD) {
1480  const Type *T = FD.getType()->getBaseElementTypeUnsafe();
1481  // FIXME: Destruction of ObjC lifetime types has side-effects.
1482  if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
1483    return !RD->isCompleteDefinition() ||
1484           !RD->hasTrivialDefaultConstructor() ||
1485           !RD->hasTrivialDestructor();
1486  return false;
1487}
1488
1489/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1490/// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1491/// bitfield width if there is one, 'InitExpr' specifies the initializer if
1492/// one has been parsed, and 'InitStyle' is set if an in-class initializer is
1493/// present (but parsing it has been deferred).
1494Decl *
1495Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1496                               MultiTemplateParamsArg TemplateParameterLists,
1497                               Expr *BW, const VirtSpecifiers &VS,
1498                               InClassInitStyle InitStyle) {
1499  const DeclSpec &DS = D.getDeclSpec();
1500  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1501  DeclarationName Name = NameInfo.getName();
1502  SourceLocation Loc = NameInfo.getLoc();
1503
1504  // For anonymous bitfields, the location should point to the type.
1505  if (Loc.isInvalid())
1506    Loc = D.getLocStart();
1507
1508  Expr *BitWidth = static_cast<Expr*>(BW);
1509
1510  assert(isa<CXXRecordDecl>(CurContext));
1511  assert(!DS.isFriendSpecified());
1512
1513  bool isFunc = D.isDeclarationOfFunction();
1514
1515  // C++ 9.2p6: A member shall not be declared to have automatic storage
1516  // duration (auto, register) or with the extern storage-class-specifier.
1517  // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1518  // data members and cannot be applied to names declared const or static,
1519  // and cannot be applied to reference members.
1520  switch (DS.getStorageClassSpec()) {
1521    case DeclSpec::SCS_unspecified:
1522    case DeclSpec::SCS_typedef:
1523    case DeclSpec::SCS_static:
1524      // FALL THROUGH.
1525      break;
1526    case DeclSpec::SCS_mutable:
1527      if (isFunc) {
1528        if (DS.getStorageClassSpecLoc().isValid())
1529          Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1530        else
1531          Diag(DS.getThreadSpecLoc(), diag::err_mutable_function);
1532
1533        // FIXME: It would be nicer if the keyword was ignored only for this
1534        // declarator. Otherwise we could get follow-up errors.
1535        D.getMutableDeclSpec().ClearStorageClassSpecs();
1536      }
1537      break;
1538    default:
1539      if (DS.getStorageClassSpecLoc().isValid())
1540        Diag(DS.getStorageClassSpecLoc(),
1541             diag::err_storageclass_invalid_for_member);
1542      else
1543        Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
1544      D.getMutableDeclSpec().ClearStorageClassSpecs();
1545  }
1546
1547  bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1548                       DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1549                      !isFunc);
1550
1551  Decl *Member;
1552  if (isInstField) {
1553    CXXScopeSpec &SS = D.getCXXScopeSpec();
1554
1555    // Data members must have identifiers for names.
1556    if (!Name.isIdentifier()) {
1557      Diag(Loc, diag::err_bad_variable_name)
1558        << Name;
1559      return 0;
1560    }
1561
1562    IdentifierInfo *II = Name.getAsIdentifierInfo();
1563
1564    // Member field could not be with "template" keyword.
1565    // So TemplateParameterLists should be empty in this case.
1566    if (TemplateParameterLists.size()) {
1567      TemplateParameterList* TemplateParams = TemplateParameterLists[0];
1568      if (TemplateParams->size()) {
1569        // There is no such thing as a member field template.
1570        Diag(D.getIdentifierLoc(), diag::err_template_member)
1571            << II
1572            << SourceRange(TemplateParams->getTemplateLoc(),
1573                TemplateParams->getRAngleLoc());
1574      } else {
1575        // There is an extraneous 'template<>' for this member.
1576        Diag(TemplateParams->getTemplateLoc(),
1577            diag::err_template_member_noparams)
1578            << II
1579            << SourceRange(TemplateParams->getTemplateLoc(),
1580                TemplateParams->getRAngleLoc());
1581      }
1582      return 0;
1583    }
1584
1585    if (SS.isSet() && !SS.isInvalid()) {
1586      // The user provided a superfluous scope specifier inside a class
1587      // definition:
1588      //
1589      // class X {
1590      //   int X::member;
1591      // };
1592      if (DeclContext *DC = computeDeclContext(SS, false))
1593        diagnoseQualifiedDeclaration(SS, DC, Name, D.getIdentifierLoc());
1594      else
1595        Diag(D.getIdentifierLoc(), diag::err_member_qualification)
1596          << Name << SS.getRange();
1597
1598      SS.clear();
1599    }
1600
1601    Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth,
1602                         InitStyle, AS);
1603    assert(Member && "HandleField never returns null");
1604  } else {
1605    assert(InitStyle == ICIS_NoInit);
1606
1607    Member = HandleDeclarator(S, D, TemplateParameterLists);
1608    if (!Member) {
1609      return 0;
1610    }
1611
1612    // Non-instance-fields can't have a bitfield.
1613    if (BitWidth) {
1614      if (Member->isInvalidDecl()) {
1615        // don't emit another diagnostic.
1616      } else if (isa<VarDecl>(Member)) {
1617        // C++ 9.6p3: A bit-field shall not be a static member.
1618        // "static member 'A' cannot be a bit-field"
1619        Diag(Loc, diag::err_static_not_bitfield)
1620          << Name << BitWidth->getSourceRange();
1621      } else if (isa<TypedefDecl>(Member)) {
1622        // "typedef member 'x' cannot be a bit-field"
1623        Diag(Loc, diag::err_typedef_not_bitfield)
1624          << Name << BitWidth->getSourceRange();
1625      } else {
1626        // A function typedef ("typedef int f(); f a;").
1627        // C++ 9.6p3: A bit-field shall have integral or enumeration type.
1628        Diag(Loc, diag::err_not_integral_type_bitfield)
1629          << Name << cast<ValueDecl>(Member)->getType()
1630          << BitWidth->getSourceRange();
1631      }
1632
1633      BitWidth = 0;
1634      Member->setInvalidDecl();
1635    }
1636
1637    Member->setAccess(AS);
1638
1639    // If we have declared a member function template, set the access of the
1640    // templated declaration as well.
1641    if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
1642      FunTmpl->getTemplatedDecl()->setAccess(AS);
1643  }
1644
1645  if (VS.isOverrideSpecified())
1646    Member->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
1647  if (VS.isFinalSpecified())
1648    Member->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
1649
1650  if (VS.getLastLocation().isValid()) {
1651    // Update the end location of a method that has a virt-specifiers.
1652    if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
1653      MD->setRangeEnd(VS.getLastLocation());
1654  }
1655
1656  CheckOverrideControl(Member);
1657
1658  assert((Name || isInstField) && "No identifier for non-field ?");
1659
1660  if (isInstField) {
1661    FieldDecl *FD = cast<FieldDecl>(Member);
1662    FieldCollector->Add(FD);
1663
1664    if (Diags.getDiagnosticLevel(diag::warn_unused_private_field,
1665                                 FD->getLocation())
1666          != DiagnosticsEngine::Ignored) {
1667      // Remember all explicit private FieldDecls that have a name, no side
1668      // effects and are not part of a dependent type declaration.
1669      if (!FD->isImplicit() && FD->getDeclName() &&
1670          FD->getAccess() == AS_private &&
1671          !FD->hasAttr<UnusedAttr>() &&
1672          !FD->getParent()->isDependentContext() &&
1673          !InitializationHasSideEffects(*FD))
1674        UnusedPrivateFields.insert(FD);
1675    }
1676  }
1677
1678  return Member;
1679}
1680
1681namespace {
1682  class UninitializedFieldVisitor
1683      : public EvaluatedExprVisitor<UninitializedFieldVisitor> {
1684    Sema &S;
1685    ValueDecl *VD;
1686  public:
1687    typedef EvaluatedExprVisitor<UninitializedFieldVisitor> Inherited;
1688    UninitializedFieldVisitor(Sema &S, ValueDecl *VD) : Inherited(S.Context),
1689                                                        S(S), VD(VD) {
1690    }
1691
1692    void HandleExpr(Expr *E) {
1693      if (!E) return;
1694
1695      // Expressions like x(x) sometimes lack the surrounding expressions
1696      // but need to be checked anyways.
1697      HandleValue(E);
1698      Visit(E);
1699    }
1700
1701    void HandleValue(Expr *E) {
1702      E = E->IgnoreParens();
1703
1704      if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
1705        if (isa<EnumConstantDecl>(ME->getMemberDecl()))
1706            return;
1707        Expr *Base = E;
1708        while (isa<MemberExpr>(Base)) {
1709          ME = dyn_cast<MemberExpr>(Base);
1710          if (VarDecl *VarD = dyn_cast<VarDecl>(ME->getMemberDecl()))
1711            if (VarD->hasGlobalStorage())
1712              return;
1713          Base = ME->getBase();
1714        }
1715
1716        if (VD == ME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
1717          unsigned diag = VD->getType()->isReferenceType()
1718              ? diag::warn_reference_field_is_uninit
1719              : diag::warn_field_is_uninit;
1720          S.Diag(ME->getExprLoc(), diag) << ME->getMemberNameInfo().getName();
1721          return;
1722        }
1723      }
1724
1725      if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
1726        HandleValue(CO->getTrueExpr());
1727        HandleValue(CO->getFalseExpr());
1728        return;
1729      }
1730
1731      if (BinaryConditionalOperator *BCO =
1732              dyn_cast<BinaryConditionalOperator>(E)) {
1733        HandleValue(BCO->getCommon());
1734        HandleValue(BCO->getFalseExpr());
1735        return;
1736      }
1737
1738      if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
1739        switch (BO->getOpcode()) {
1740        default:
1741          return;
1742        case(BO_PtrMemD):
1743        case(BO_PtrMemI):
1744          HandleValue(BO->getLHS());
1745          return;
1746        case(BO_Comma):
1747          HandleValue(BO->getRHS());
1748          return;
1749        }
1750      }
1751    }
1752
1753    void VisitImplicitCastExpr(ImplicitCastExpr *E) {
1754      if (E->getCastKind() == CK_LValueToRValue)
1755        HandleValue(E->getSubExpr());
1756
1757      Inherited::VisitImplicitCastExpr(E);
1758    }
1759
1760    void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
1761      Expr *Callee = E->getCallee();
1762      if (isa<MemberExpr>(Callee))
1763        HandleValue(Callee);
1764
1765      Inherited::VisitCXXMemberCallExpr(E);
1766    }
1767  };
1768  static void CheckInitExprContainsUninitializedFields(Sema &S, Expr *E,
1769                                                       ValueDecl *VD) {
1770    UninitializedFieldVisitor(S, VD).HandleExpr(E);
1771  }
1772} // namespace
1773
1774/// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
1775/// in-class initializer for a non-static C++ class member, and after
1776/// instantiating an in-class initializer in a class template. Such actions
1777/// are deferred until the class is complete.
1778void
1779Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation InitLoc,
1780                                       Expr *InitExpr) {
1781  FieldDecl *FD = cast<FieldDecl>(D);
1782  assert(FD->getInClassInitStyle() != ICIS_NoInit &&
1783         "must set init style when field is created");
1784
1785  if (!InitExpr) {
1786    FD->setInvalidDecl();
1787    FD->removeInClassInitializer();
1788    return;
1789  }
1790
1791  if (DiagnoseUnexpandedParameterPack(InitExpr, UPPC_Initializer)) {
1792    FD->setInvalidDecl();
1793    FD->removeInClassInitializer();
1794    return;
1795  }
1796
1797  if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, InitLoc)
1798      != DiagnosticsEngine::Ignored) {
1799    CheckInitExprContainsUninitializedFields(*this, InitExpr, FD);
1800  }
1801
1802  ExprResult Init = InitExpr;
1803  if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent() &&
1804      !FD->getDeclContext()->isDependentContext()) {
1805    // Note: We don't type-check when we're in a dependent context, because
1806    // the initialization-substitution code does not properly handle direct
1807    // list initialization. We have the same hackaround for ctor-initializers.
1808    if (isa<InitListExpr>(InitExpr) && isStdInitializerList(FD->getType(), 0)) {
1809      Diag(FD->getLocation(), diag::warn_dangling_std_initializer_list)
1810        << /*at end of ctor*/1 << InitExpr->getSourceRange();
1811    }
1812    Expr **Inits = &InitExpr;
1813    unsigned NumInits = 1;
1814    InitializedEntity Entity = InitializedEntity::InitializeMember(FD);
1815    InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit
1816        ? InitializationKind::CreateDirectList(InitExpr->getLocStart())
1817        : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc);
1818    InitializationSequence Seq(*this, Entity, Kind, Inits, NumInits);
1819    Init = Seq.Perform(*this, Entity, Kind, MultiExprArg(Inits, NumInits));
1820    if (Init.isInvalid()) {
1821      FD->setInvalidDecl();
1822      return;
1823    }
1824
1825    CheckImplicitConversions(Init.get(), InitLoc);
1826  }
1827
1828  // C++0x [class.base.init]p7:
1829  //   The initialization of each base and member constitutes a
1830  //   full-expression.
1831  Init = MaybeCreateExprWithCleanups(Init);
1832  if (Init.isInvalid()) {
1833    FD->setInvalidDecl();
1834    return;
1835  }
1836
1837  InitExpr = Init.release();
1838
1839  FD->setInClassInitializer(InitExpr);
1840}
1841
1842/// \brief Find the direct and/or virtual base specifiers that
1843/// correspond to the given base type, for use in base initialization
1844/// within a constructor.
1845static bool FindBaseInitializer(Sema &SemaRef,
1846                                CXXRecordDecl *ClassDecl,
1847                                QualType BaseType,
1848                                const CXXBaseSpecifier *&DirectBaseSpec,
1849                                const CXXBaseSpecifier *&VirtualBaseSpec) {
1850  // First, check for a direct base class.
1851  DirectBaseSpec = 0;
1852  for (CXXRecordDecl::base_class_const_iterator Base
1853         = ClassDecl->bases_begin();
1854       Base != ClassDecl->bases_end(); ++Base) {
1855    if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
1856      // We found a direct base of this type. That's what we're
1857      // initializing.
1858      DirectBaseSpec = &*Base;
1859      break;
1860    }
1861  }
1862
1863  // Check for a virtual base class.
1864  // FIXME: We might be able to short-circuit this if we know in advance that
1865  // there are no virtual bases.
1866  VirtualBaseSpec = 0;
1867  if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
1868    // We haven't found a base yet; search the class hierarchy for a
1869    // virtual base class.
1870    CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1871                       /*DetectVirtual=*/false);
1872    if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
1873                              BaseType, Paths)) {
1874      for (CXXBasePaths::paths_iterator Path = Paths.begin();
1875           Path != Paths.end(); ++Path) {
1876        if (Path->back().Base->isVirtual()) {
1877          VirtualBaseSpec = Path->back().Base;
1878          break;
1879        }
1880      }
1881    }
1882  }
1883
1884  return DirectBaseSpec || VirtualBaseSpec;
1885}
1886
1887/// \brief Handle a C++ member initializer using braced-init-list syntax.
1888MemInitResult
1889Sema::ActOnMemInitializer(Decl *ConstructorD,
1890                          Scope *S,
1891                          CXXScopeSpec &SS,
1892                          IdentifierInfo *MemberOrBase,
1893                          ParsedType TemplateTypeTy,
1894                          const DeclSpec &DS,
1895                          SourceLocation IdLoc,
1896                          Expr *InitList,
1897                          SourceLocation EllipsisLoc) {
1898  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
1899                             DS, IdLoc, InitList,
1900                             EllipsisLoc);
1901}
1902
1903/// \brief Handle a C++ member initializer using parentheses syntax.
1904MemInitResult
1905Sema::ActOnMemInitializer(Decl *ConstructorD,
1906                          Scope *S,
1907                          CXXScopeSpec &SS,
1908                          IdentifierInfo *MemberOrBase,
1909                          ParsedType TemplateTypeTy,
1910                          const DeclSpec &DS,
1911                          SourceLocation IdLoc,
1912                          SourceLocation LParenLoc,
1913                          Expr **Args, unsigned NumArgs,
1914                          SourceLocation RParenLoc,
1915                          SourceLocation EllipsisLoc) {
1916  Expr *List = new (Context) ParenListExpr(Context, LParenLoc,
1917                                           llvm::makeArrayRef(Args, NumArgs),
1918                                           RParenLoc);
1919  return BuildMemInitializer(ConstructorD, S, SS, MemberOrBase, TemplateTypeTy,
1920                             DS, IdLoc, List, EllipsisLoc);
1921}
1922
1923namespace {
1924
1925// Callback to only accept typo corrections that can be a valid C++ member
1926// intializer: either a non-static field member or a base class.
1927class MemInitializerValidatorCCC : public CorrectionCandidateCallback {
1928 public:
1929  explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
1930      : ClassDecl(ClassDecl) {}
1931
1932  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
1933    if (NamedDecl *ND = candidate.getCorrectionDecl()) {
1934      if (FieldDecl *Member = dyn_cast<FieldDecl>(ND))
1935        return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
1936      else
1937        return isa<TypeDecl>(ND);
1938    }
1939    return false;
1940  }
1941
1942 private:
1943  CXXRecordDecl *ClassDecl;
1944};
1945
1946}
1947
1948/// \brief Handle a C++ member initializer.
1949MemInitResult
1950Sema::BuildMemInitializer(Decl *ConstructorD,
1951                          Scope *S,
1952                          CXXScopeSpec &SS,
1953                          IdentifierInfo *MemberOrBase,
1954                          ParsedType TemplateTypeTy,
1955                          const DeclSpec &DS,
1956                          SourceLocation IdLoc,
1957                          Expr *Init,
1958                          SourceLocation EllipsisLoc) {
1959  if (!ConstructorD)
1960    return true;
1961
1962  AdjustDeclIfTemplate(ConstructorD);
1963
1964  CXXConstructorDecl *Constructor
1965    = dyn_cast<CXXConstructorDecl>(ConstructorD);
1966  if (!Constructor) {
1967    // The user wrote a constructor initializer on a function that is
1968    // not a C++ constructor. Ignore the error for now, because we may
1969    // have more member initializers coming; we'll diagnose it just
1970    // once in ActOnMemInitializers.
1971    return true;
1972  }
1973
1974  CXXRecordDecl *ClassDecl = Constructor->getParent();
1975
1976  // C++ [class.base.init]p2:
1977  //   Names in a mem-initializer-id are looked up in the scope of the
1978  //   constructor's class and, if not found in that scope, are looked
1979  //   up in the scope containing the constructor's definition.
1980  //   [Note: if the constructor's class contains a member with the
1981  //   same name as a direct or virtual base class of the class, a
1982  //   mem-initializer-id naming the member or base class and composed
1983  //   of a single identifier refers to the class member. A
1984  //   mem-initializer-id for the hidden base class may be specified
1985  //   using a qualified name. ]
1986  if (!SS.getScopeRep() && !TemplateTypeTy) {
1987    // Look for a member, first.
1988    DeclContext::lookup_result Result
1989      = ClassDecl->lookup(MemberOrBase);
1990    if (Result.first != Result.second) {
1991      ValueDecl *Member;
1992      if ((Member = dyn_cast<FieldDecl>(*Result.first)) ||
1993          (Member = dyn_cast<IndirectFieldDecl>(*Result.first))) {
1994        if (EllipsisLoc.isValid())
1995          Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
1996            << MemberOrBase
1997            << SourceRange(IdLoc, Init->getSourceRange().getEnd());
1998
1999        return BuildMemberInitializer(Member, Init, IdLoc);
2000      }
2001    }
2002  }
2003  // It didn't name a member, so see if it names a class.
2004  QualType BaseType;
2005  TypeSourceInfo *TInfo = 0;
2006
2007  if (TemplateTypeTy) {
2008    BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
2009  } else if (DS.getTypeSpecType() == TST_decltype) {
2010    BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc());
2011  } else {
2012    LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
2013    LookupParsedName(R, S, &SS);
2014
2015    TypeDecl *TyD = R.getAsSingle<TypeDecl>();
2016    if (!TyD) {
2017      if (R.isAmbiguous()) return true;
2018
2019      // We don't want access-control diagnostics here.
2020      R.suppressDiagnostics();
2021
2022      if (SS.isSet() && isDependentScopeSpecifier(SS)) {
2023        bool NotUnknownSpecialization = false;
2024        DeclContext *DC = computeDeclContext(SS, false);
2025        if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
2026          NotUnknownSpecialization = !Record->hasAnyDependentBases();
2027
2028        if (!NotUnknownSpecialization) {
2029          // When the scope specifier can refer to a member of an unknown
2030          // specialization, we take it as a type name.
2031          BaseType = CheckTypenameType(ETK_None, SourceLocation(),
2032                                       SS.getWithLocInContext(Context),
2033                                       *MemberOrBase, IdLoc);
2034          if (BaseType.isNull())
2035            return true;
2036
2037          R.clear();
2038          R.setLookupName(MemberOrBase);
2039        }
2040      }
2041
2042      // If no results were found, try to correct typos.
2043      TypoCorrection Corr;
2044      MemInitializerValidatorCCC Validator(ClassDecl);
2045      if (R.empty() && BaseType.isNull() &&
2046          (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
2047                              Validator, ClassDecl))) {
2048        std::string CorrectedStr(Corr.getAsString(getLangOpts()));
2049        std::string CorrectedQuotedStr(Corr.getQuoted(getLangOpts()));
2050        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
2051          // We have found a non-static data member with a similar
2052          // name to what was typed; complain and initialize that
2053          // member.
2054          Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2055            << MemberOrBase << true << CorrectedQuotedStr
2056            << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2057          Diag(Member->getLocation(), diag::note_previous_decl)
2058            << CorrectedQuotedStr;
2059
2060          return BuildMemberInitializer(Member, Init, IdLoc);
2061        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
2062          const CXXBaseSpecifier *DirectBaseSpec;
2063          const CXXBaseSpecifier *VirtualBaseSpec;
2064          if (FindBaseInitializer(*this, ClassDecl,
2065                                  Context.getTypeDeclType(Type),
2066                                  DirectBaseSpec, VirtualBaseSpec)) {
2067            // We have found a direct or virtual base class with a
2068            // similar name to what was typed; complain and initialize
2069            // that base class.
2070            Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
2071              << MemberOrBase << false << CorrectedQuotedStr
2072              << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
2073
2074            const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
2075                                                             : VirtualBaseSpec;
2076            Diag(BaseSpec->getLocStart(),
2077                 diag::note_base_class_specified_here)
2078              << BaseSpec->getType()
2079              << BaseSpec->getSourceRange();
2080
2081            TyD = Type;
2082          }
2083        }
2084      }
2085
2086      if (!TyD && BaseType.isNull()) {
2087        Diag(IdLoc, diag::err_mem_init_not_member_or_class)
2088          << MemberOrBase << SourceRange(IdLoc,Init->getSourceRange().getEnd());
2089        return true;
2090      }
2091    }
2092
2093    if (BaseType.isNull()) {
2094      BaseType = Context.getTypeDeclType(TyD);
2095      if (SS.isSet()) {
2096        NestedNameSpecifier *Qualifier =
2097          static_cast<NestedNameSpecifier*>(SS.getScopeRep());
2098
2099        // FIXME: preserve source range information
2100        BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
2101      }
2102    }
2103  }
2104
2105  if (!TInfo)
2106    TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
2107
2108  return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2109}
2110
2111/// Checks a member initializer expression for cases where reference (or
2112/// pointer) members are bound to by-value parameters (or their addresses).
2113static void CheckForDanglingReferenceOrPointer(Sema &S, ValueDecl *Member,
2114                                               Expr *Init,
2115                                               SourceLocation IdLoc) {
2116  QualType MemberTy = Member->getType();
2117
2118  // We only handle pointers and references currently.
2119  // FIXME: Would this be relevant for ObjC object pointers? Or block pointers?
2120  if (!MemberTy->isReferenceType() && !MemberTy->isPointerType())
2121    return;
2122
2123  const bool IsPointer = MemberTy->isPointerType();
2124  if (IsPointer) {
2125    if (const UnaryOperator *Op
2126          = dyn_cast<UnaryOperator>(Init->IgnoreParenImpCasts())) {
2127      // The only case we're worried about with pointers requires taking the
2128      // address.
2129      if (Op->getOpcode() != UO_AddrOf)
2130        return;
2131
2132      Init = Op->getSubExpr();
2133    } else {
2134      // We only handle address-of expression initializers for pointers.
2135      return;
2136    }
2137  }
2138
2139  if (isa<MaterializeTemporaryExpr>(Init->IgnoreParens())) {
2140    // Taking the address of a temporary will be diagnosed as a hard error.
2141    if (IsPointer)
2142      return;
2143
2144    S.Diag(Init->getExprLoc(), diag::warn_bind_ref_member_to_temporary)
2145      << Member << Init->getSourceRange();
2146  } else if (const DeclRefExpr *DRE
2147               = dyn_cast<DeclRefExpr>(Init->IgnoreParens())) {
2148    // We only warn when referring to a non-reference parameter declaration.
2149    const ParmVarDecl *Parameter = dyn_cast<ParmVarDecl>(DRE->getDecl());
2150    if (!Parameter || Parameter->getType()->isReferenceType())
2151      return;
2152
2153    S.Diag(Init->getExprLoc(),
2154           IsPointer ? diag::warn_init_ptr_member_to_parameter_addr
2155                     : diag::warn_bind_ref_member_to_parameter)
2156      << Member << Parameter << Init->getSourceRange();
2157  } else {
2158    // Other initializers are fine.
2159    return;
2160  }
2161
2162  S.Diag(Member->getLocation(), diag::note_ref_or_ptr_member_declared_here)
2163    << (unsigned)IsPointer;
2164}
2165
2166MemInitResult
2167Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init,
2168                             SourceLocation IdLoc) {
2169  FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
2170  IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
2171  assert((DirectMember || IndirectMember) &&
2172         "Member must be a FieldDecl or IndirectFieldDecl");
2173
2174  if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2175    return true;
2176
2177  if (Member->isInvalidDecl())
2178    return true;
2179
2180  // Diagnose value-uses of fields to initialize themselves, e.g.
2181  //   foo(foo)
2182  // where foo is not also a parameter to the constructor.
2183  // TODO: implement -Wuninitialized and fold this into that framework.
2184  Expr **Args;
2185  unsigned NumArgs;
2186  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2187    Args = ParenList->getExprs();
2188    NumArgs = ParenList->getNumExprs();
2189  } else {
2190    InitListExpr *InitList = cast<InitListExpr>(Init);
2191    Args = InitList->getInits();
2192    NumArgs = InitList->getNumInits();
2193  }
2194
2195  if (getDiagnostics().getDiagnosticLevel(diag::warn_field_is_uninit, IdLoc)
2196        != DiagnosticsEngine::Ignored)
2197    for (unsigned i = 0; i < NumArgs; ++i)
2198      // FIXME: Warn about the case when other fields are used before being
2199      // initialized. For example, let this field be the i'th field. When
2200      // initializing the i'th field, throw a warning if any of the >= i'th
2201      // fields are used, as they are not yet initialized.
2202      // Right now we are only handling the case where the i'th field uses
2203      // itself in its initializer.
2204      // Also need to take into account that some fields may be initialized by
2205      // in-class initializers, see C++11 [class.base.init]p9.
2206      CheckInitExprContainsUninitializedFields(*this, Args[i], Member);
2207
2208  SourceRange InitRange = Init->getSourceRange();
2209
2210  if (Member->getType()->isDependentType() || Init->isTypeDependent()) {
2211    // Can't check initialization for a member of dependent type or when
2212    // any of the arguments are type-dependent expressions.
2213    DiscardCleanupsInEvaluationContext();
2214  } else {
2215    bool InitList = false;
2216    if (isa<InitListExpr>(Init)) {
2217      InitList = true;
2218      Args = &Init;
2219      NumArgs = 1;
2220
2221      if (isStdInitializerList(Member->getType(), 0)) {
2222        Diag(IdLoc, diag::warn_dangling_std_initializer_list)
2223            << /*at end of ctor*/1 << InitRange;
2224      }
2225    }
2226
2227    // Initialize the member.
2228    InitializedEntity MemberEntity =
2229      DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
2230                   : InitializedEntity::InitializeMember(IndirectMember, 0);
2231    InitializationKind Kind =
2232      InitList ? InitializationKind::CreateDirectList(IdLoc)
2233               : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(),
2234                                                  InitRange.getEnd());
2235
2236    InitializationSequence InitSeq(*this, MemberEntity, Kind, Args, NumArgs);
2237    ExprResult MemberInit = InitSeq.Perform(*this, MemberEntity, Kind,
2238                                            MultiExprArg(Args, NumArgs),
2239                                            0);
2240    if (MemberInit.isInvalid())
2241      return true;
2242
2243    CheckImplicitConversions(MemberInit.get(),
2244                             InitRange.getBegin());
2245
2246    // C++0x [class.base.init]p7:
2247    //   The initialization of each base and member constitutes a
2248    //   full-expression.
2249    MemberInit = MaybeCreateExprWithCleanups(MemberInit);
2250    if (MemberInit.isInvalid())
2251      return true;
2252
2253    // If we are in a dependent context, template instantiation will
2254    // perform this type-checking again. Just save the arguments that we
2255    // received.
2256    // FIXME: This isn't quite ideal, since our ASTs don't capture all
2257    // of the information that we have about the member
2258    // initializer. However, deconstructing the ASTs is a dicey process,
2259    // and this approach is far more likely to get the corner cases right.
2260    if (CurContext->isDependentContext()) {
2261      // The existing Init will do fine.
2262    } else {
2263      Init = MemberInit.get();
2264      CheckForDanglingReferenceOrPointer(*this, Member, Init, IdLoc);
2265    }
2266  }
2267
2268  if (DirectMember) {
2269    return new (Context) CXXCtorInitializer(Context, DirectMember, IdLoc,
2270                                            InitRange.getBegin(), Init,
2271                                            InitRange.getEnd());
2272  } else {
2273    return new (Context) CXXCtorInitializer(Context, IndirectMember, IdLoc,
2274                                            InitRange.getBegin(), Init,
2275                                            InitRange.getEnd());
2276  }
2277}
2278
2279MemInitResult
2280Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
2281                                 CXXRecordDecl *ClassDecl) {
2282  SourceLocation NameLoc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
2283  if (!LangOpts.CPlusPlus0x)
2284    return Diag(NameLoc, diag::err_delegating_ctor)
2285      << TInfo->getTypeLoc().getLocalSourceRange();
2286  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);
2287
2288  bool InitList = true;
2289  Expr **Args = &Init;
2290  unsigned NumArgs = 1;
2291  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2292    InitList = false;
2293    Args = ParenList->getExprs();
2294    NumArgs = ParenList->getNumExprs();
2295  }
2296
2297  SourceRange InitRange = Init->getSourceRange();
2298  // Initialize the object.
2299  InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
2300                                     QualType(ClassDecl->getTypeForDecl(), 0));
2301  InitializationKind Kind =
2302    InitList ? InitializationKind::CreateDirectList(NameLoc)
2303             : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(),
2304                                                InitRange.getEnd());
2305  InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args, NumArgs);
2306  ExprResult DelegationInit = InitSeq.Perform(*this, DelegationEntity, Kind,
2307                                              MultiExprArg(Args, NumArgs),
2308                                              0);
2309  if (DelegationInit.isInvalid())
2310    return true;
2311
2312  assert(cast<CXXConstructExpr>(DelegationInit.get())->getConstructor() &&
2313         "Delegating constructor with no target?");
2314
2315  CheckImplicitConversions(DelegationInit.get(), InitRange.getBegin());
2316
2317  // C++0x [class.base.init]p7:
2318  //   The initialization of each base and member constitutes a
2319  //   full-expression.
2320  DelegationInit = MaybeCreateExprWithCleanups(DelegationInit);
2321  if (DelegationInit.isInvalid())
2322    return true;
2323
2324  // If we are in a dependent context, template instantiation will
2325  // perform this type-checking again. Just save the arguments that we
2326  // received in a ParenListExpr.
2327  // FIXME: This isn't quite ideal, since our ASTs don't capture all
2328  // of the information that we have about the base
2329  // initializer. However, deconstructing the ASTs is a dicey process,
2330  // and this approach is far more likely to get the corner cases right.
2331  if (CurContext->isDependentContext())
2332    DelegationInit = Owned(Init);
2333
2334  return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
2335                                          DelegationInit.takeAs<Expr>(),
2336                                          InitRange.getEnd());
2337}
2338
2339MemInitResult
2340Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
2341                           Expr *Init, CXXRecordDecl *ClassDecl,
2342                           SourceLocation EllipsisLoc) {
2343  SourceLocation BaseLoc
2344    = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
2345
2346  if (!BaseType->isDependentType() && !BaseType->isRecordType())
2347    return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
2348             << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2349
2350  // C++ [class.base.init]p2:
2351  //   [...] Unless the mem-initializer-id names a nonstatic data
2352  //   member of the constructor's class or a direct or virtual base
2353  //   of that class, the mem-initializer is ill-formed. A
2354  //   mem-initializer-list can initialize a base class using any
2355  //   name that denotes that base class type.
2356  bool Dependent = BaseType->isDependentType() || Init->isTypeDependent();
2357
2358  SourceRange InitRange = Init->getSourceRange();
2359  if (EllipsisLoc.isValid()) {
2360    // This is a pack expansion.
2361    if (!BaseType->containsUnexpandedParameterPack())  {
2362      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
2363        << SourceRange(BaseLoc, InitRange.getEnd());
2364
2365      EllipsisLoc = SourceLocation();
2366    }
2367  } else {
2368    // Check for any unexpanded parameter packs.
2369    if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
2370      return true;
2371
2372    if (DiagnoseUnexpandedParameterPack(Init, UPPC_Initializer))
2373      return true;
2374  }
2375
2376  // Check for direct and virtual base classes.
2377  const CXXBaseSpecifier *DirectBaseSpec = 0;
2378  const CXXBaseSpecifier *VirtualBaseSpec = 0;
2379  if (!Dependent) {
2380    if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2381                                       BaseType))
2382      return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2383
2384    FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2385                        VirtualBaseSpec);
2386
2387    // C++ [base.class.init]p2:
2388    // Unless the mem-initializer-id names a nonstatic data member of the
2389    // constructor's class or a direct or virtual base of that class, the
2390    // mem-initializer is ill-formed.
2391    if (!DirectBaseSpec && !VirtualBaseSpec) {
2392      // If the class has any dependent bases, then it's possible that
2393      // one of those types will resolve to the same type as
2394      // BaseType. Therefore, just treat this as a dependent base
2395      // class initialization.  FIXME: Should we try to check the
2396      // initialization anyway? It seems odd.
2397      if (ClassDecl->hasAnyDependentBases())
2398        Dependent = true;
2399      else
2400        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
2401          << BaseType << Context.getTypeDeclType(ClassDecl)
2402          << BaseTInfo->getTypeLoc().getLocalSourceRange();
2403    }
2404  }
2405
2406  if (Dependent) {
2407    DiscardCleanupsInEvaluationContext();
2408
2409    return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2410                                            /*IsVirtual=*/false,
2411                                            InitRange.getBegin(), Init,
2412                                            InitRange.getEnd(), EllipsisLoc);
2413  }
2414
2415  // C++ [base.class.init]p2:
2416  //   If a mem-initializer-id is ambiguous because it designates both
2417  //   a direct non-virtual base class and an inherited virtual base
2418  //   class, the mem-initializer is ill-formed.
2419  if (DirectBaseSpec && VirtualBaseSpec)
2420    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
2421      << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
2422
2423  CXXBaseSpecifier *BaseSpec = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
2424  if (!BaseSpec)
2425    BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
2426
2427  // Initialize the base.
2428  bool InitList = true;
2429  Expr **Args = &Init;
2430  unsigned NumArgs = 1;
2431  if (ParenListExpr *ParenList = dyn_cast<ParenListExpr>(Init)) {
2432    InitList = false;
2433    Args = ParenList->getExprs();
2434    NumArgs = ParenList->getNumExprs();
2435  }
2436
2437  InitializedEntity BaseEntity =
2438    InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
2439  InitializationKind Kind =
2440    InitList ? InitializationKind::CreateDirectList(BaseLoc)
2441             : InitializationKind::CreateDirect(BaseLoc, InitRange.getBegin(),
2442                                                InitRange.getEnd());
2443  InitializationSequence InitSeq(*this, BaseEntity, Kind, Args, NumArgs);
2444  ExprResult BaseInit = InitSeq.Perform(*this, BaseEntity, Kind,
2445                                        MultiExprArg(Args, NumArgs), 0);
2446  if (BaseInit.isInvalid())
2447    return true;
2448
2449  CheckImplicitConversions(BaseInit.get(), InitRange.getBegin());
2450
2451  // C++0x [class.base.init]p7:
2452  //   The initialization of each base and member constitutes a
2453  //   full-expression.
2454  BaseInit = MaybeCreateExprWithCleanups(BaseInit);
2455  if (BaseInit.isInvalid())
2456    return true;
2457
2458  // If we are in a dependent context, template instantiation will
2459  // perform this type-checking again. Just save the arguments that we
2460  // received in a ParenListExpr.
2461  // FIXME: This isn't quite ideal, since our ASTs don't capture all
2462  // of the information that we have about the base
2463  // initializer. However, deconstructing the ASTs is a dicey process,
2464  // and this approach is far more likely to get the corner cases right.
2465  if (CurContext->isDependentContext())
2466    BaseInit = Owned(Init);
2467
2468  return new (Context) CXXCtorInitializer(Context, BaseTInfo,
2469                                          BaseSpec->isVirtual(),
2470                                          InitRange.getBegin(),
2471                                          BaseInit.takeAs<Expr>(),
2472                                          InitRange.getEnd(), EllipsisLoc);
2473}
2474
2475// Create a static_cast\<T&&>(expr).
2476static Expr *CastForMoving(Sema &SemaRef, Expr *E) {
2477  QualType ExprType = E->getType();
2478  QualType TargetType = SemaRef.Context.getRValueReferenceType(ExprType);
2479  SourceLocation ExprLoc = E->getLocStart();
2480  TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
2481      TargetType, ExprLoc);
2482
2483  return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
2484                                   SourceRange(ExprLoc, ExprLoc),
2485                                   E->getSourceRange()).take();
2486}
2487
2488/// ImplicitInitializerKind - How an implicit base or member initializer should
2489/// initialize its base or member.
2490enum ImplicitInitializerKind {
2491  IIK_Default,
2492  IIK_Copy,
2493  IIK_Move
2494};
2495
2496static bool
2497BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2498                             ImplicitInitializerKind ImplicitInitKind,
2499                             CXXBaseSpecifier *BaseSpec,
2500                             bool IsInheritedVirtualBase,
2501                             CXXCtorInitializer *&CXXBaseInit) {
2502  InitializedEntity InitEntity
2503    = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
2504                                        IsInheritedVirtualBase);
2505
2506  ExprResult BaseInit;
2507
2508  switch (ImplicitInitKind) {
2509  case IIK_Default: {
2510    InitializationKind InitKind
2511      = InitializationKind::CreateDefault(Constructor->getLocation());
2512    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
2513    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg());
2514    break;
2515  }
2516
2517  case IIK_Move:
2518  case IIK_Copy: {
2519    bool Moving = ImplicitInitKind == IIK_Move;
2520    ParmVarDecl *Param = Constructor->getParamDecl(0);
2521    QualType ParamType = Param->getType().getNonReferenceType();
2522
2523    Expr *CopyCtorArg =
2524      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2525                          SourceLocation(), Param, false,
2526                          Constructor->getLocation(), ParamType,
2527                          VK_LValue, 0);
2528
2529    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(CopyCtorArg));
2530
2531    // Cast to the base class to avoid ambiguities.
2532    QualType ArgTy =
2533      SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
2534                                       ParamType.getQualifiers());
2535
2536    if (Moving) {
2537      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
2538    }
2539
2540    CXXCastPath BasePath;
2541    BasePath.push_back(BaseSpec);
2542    CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
2543                                            CK_UncheckedDerivedToBase,
2544                                            Moving ? VK_XValue : VK_LValue,
2545                                            &BasePath).take();
2546
2547    InitializationKind InitKind
2548      = InitializationKind::CreateDirect(Constructor->getLocation(),
2549                                         SourceLocation(), SourceLocation());
2550    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind,
2551                                   &CopyCtorArg, 1);
2552    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
2553                               MultiExprArg(&CopyCtorArg, 1));
2554    break;
2555  }
2556  }
2557
2558  BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
2559  if (BaseInit.isInvalid())
2560    return true;
2561
2562  CXXBaseInit =
2563    new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2564               SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
2565                                                        SourceLocation()),
2566                                             BaseSpec->isVirtual(),
2567                                             SourceLocation(),
2568                                             BaseInit.takeAs<Expr>(),
2569                                             SourceLocation(),
2570                                             SourceLocation());
2571
2572  return false;
2573}
2574
2575static bool RefersToRValueRef(Expr *MemRef) {
2576  ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
2577  return Referenced->getType()->isRValueReferenceType();
2578}
2579
2580static bool
2581BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
2582                               ImplicitInitializerKind ImplicitInitKind,
2583                               FieldDecl *Field, IndirectFieldDecl *Indirect,
2584                               CXXCtorInitializer *&CXXMemberInit) {
2585  if (Field->isInvalidDecl())
2586    return true;
2587
2588  SourceLocation Loc = Constructor->getLocation();
2589
2590  if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
2591    bool Moving = ImplicitInitKind == IIK_Move;
2592    ParmVarDecl *Param = Constructor->getParamDecl(0);
2593    QualType ParamType = Param->getType().getNonReferenceType();
2594
2595    // Suppress copying zero-width bitfields.
2596    if (Field->isBitField() && Field->getBitWidthValue(SemaRef.Context) == 0)
2597      return false;
2598
2599    Expr *MemberExprBase =
2600      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(),
2601                          SourceLocation(), Param, false,
2602                          Loc, ParamType, VK_LValue, 0);
2603
2604    SemaRef.MarkDeclRefReferenced(cast<DeclRefExpr>(MemberExprBase));
2605
2606    if (Moving) {
2607      MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
2608    }
2609
2610    // Build a reference to this field within the parameter.
2611    CXXScopeSpec SS;
2612    LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
2613                              Sema::LookupMemberName);
2614    MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
2615                                  : cast<ValueDecl>(Field), AS_public);
2616    MemberLookup.resolveKind();
2617    ExprResult CtorArg
2618      = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
2619                                         ParamType, Loc,
2620                                         /*IsArrow=*/false,
2621                                         SS,
2622                                         /*TemplateKWLoc=*/SourceLocation(),
2623                                         /*FirstQualifierInScope=*/0,
2624                                         MemberLookup,
2625                                         /*TemplateArgs=*/0);
2626    if (CtorArg.isInvalid())
2627      return true;
2628
2629    // C++11 [class.copy]p15:
2630    //   - if a member m has rvalue reference type T&&, it is direct-initialized
2631    //     with static_cast<T&&>(x.m);
2632    if (RefersToRValueRef(CtorArg.get())) {
2633      CtorArg = CastForMoving(SemaRef, CtorArg.take());
2634    }
2635
2636    // When the field we are copying is an array, create index variables for
2637    // each dimension of the array. We use these index variables to subscript
2638    // the source array, and other clients (e.g., CodeGen) will perform the
2639    // necessary iteration with these index variables.
2640    SmallVector<VarDecl *, 4> IndexVariables;
2641    QualType BaseType = Field->getType();
2642    QualType SizeType = SemaRef.Context.getSizeType();
2643    bool InitializingArray = false;
2644    while (const ConstantArrayType *Array
2645                          = SemaRef.Context.getAsConstantArrayType(BaseType)) {
2646      InitializingArray = true;
2647      // Create the iteration variable for this array index.
2648      IdentifierInfo *IterationVarName = 0;
2649      {
2650        SmallString<8> Str;
2651        llvm::raw_svector_ostream OS(Str);
2652        OS << "__i" << IndexVariables.size();
2653        IterationVarName = &SemaRef.Context.Idents.get(OS.str());
2654      }
2655      VarDecl *IterationVar
2656        = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
2657                          IterationVarName, SizeType,
2658                        SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
2659                          SC_None, SC_None);
2660      IndexVariables.push_back(IterationVar);
2661
2662      // Create a reference to the iteration variable.
2663      ExprResult IterationVarRef
2664        = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc);
2665      assert(!IterationVarRef.isInvalid() &&
2666             "Reference to invented variable cannot fail!");
2667      IterationVarRef = SemaRef.DefaultLvalueConversion(IterationVarRef.take());
2668      assert(!IterationVarRef.isInvalid() &&
2669             "Conversion of invented variable cannot fail!");
2670
2671      // Subscript the array with this iteration variable.
2672      CtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CtorArg.take(), Loc,
2673                                                        IterationVarRef.take(),
2674                                                        Loc);
2675      if (CtorArg.isInvalid())
2676        return true;
2677
2678      BaseType = Array->getElementType();
2679    }
2680
2681    // The array subscript expression is an lvalue, which is wrong for moving.
2682    if (Moving && InitializingArray)
2683      CtorArg = CastForMoving(SemaRef, CtorArg.take());
2684
2685    // Construct the entity that we will be initializing. For an array, this
2686    // will be first element in the array, which may require several levels
2687    // of array-subscript entities.
2688    SmallVector<InitializedEntity, 4> Entities;
2689    Entities.reserve(1 + IndexVariables.size());
2690    if (Indirect)
2691      Entities.push_back(InitializedEntity::InitializeMember(Indirect));
2692    else
2693      Entities.push_back(InitializedEntity::InitializeMember(Field));
2694    for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
2695      Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
2696                                                              0,
2697                                                              Entities.back()));
2698
2699    // Direct-initialize to use the copy constructor.
2700    InitializationKind InitKind =
2701      InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
2702
2703    Expr *CtorArgE = CtorArg.takeAs<Expr>();
2704    InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind,
2705                                   &CtorArgE, 1);
2706
2707    ExprResult MemberInit
2708      = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
2709                        MultiExprArg(&CtorArgE, 1));
2710    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
2711    if (MemberInit.isInvalid())
2712      return true;
2713
2714    if (Indirect) {
2715      assert(IndexVariables.size() == 0 &&
2716             "Indirect field improperly initialized");
2717      CXXMemberInit
2718        = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
2719                                                   Loc, Loc,
2720                                                   MemberInit.takeAs<Expr>(),
2721                                                   Loc);
2722    } else
2723      CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
2724                                                 Loc, MemberInit.takeAs<Expr>(),
2725                                                 Loc,
2726                                                 IndexVariables.data(),
2727                                                 IndexVariables.size());
2728    return false;
2729  }
2730
2731  assert(ImplicitInitKind == IIK_Default && "Unhandled implicit init kind!");
2732
2733  QualType FieldBaseElementType =
2734    SemaRef.Context.getBaseElementType(Field->getType());
2735
2736  if (FieldBaseElementType->isRecordType()) {
2737    InitializedEntity InitEntity
2738      = Indirect? InitializedEntity::InitializeMember(Indirect)
2739                : InitializedEntity::InitializeMember(Field);
2740    InitializationKind InitKind =
2741      InitializationKind::CreateDefault(Loc);
2742
2743    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
2744    ExprResult MemberInit =
2745      InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg());
2746
2747    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
2748    if (MemberInit.isInvalid())
2749      return true;
2750
2751    if (Indirect)
2752      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2753                                                               Indirect, Loc,
2754                                                               Loc,
2755                                                               MemberInit.get(),
2756                                                               Loc);
2757    else
2758      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2759                                                               Field, Loc, Loc,
2760                                                               MemberInit.get(),
2761                                                               Loc);
2762    return false;
2763  }
2764
2765  if (!Field->getParent()->isUnion()) {
2766    if (FieldBaseElementType->isReferenceType()) {
2767      SemaRef.Diag(Constructor->getLocation(),
2768                   diag::err_uninitialized_member_in_ctor)
2769      << (int)Constructor->isImplicit()
2770      << SemaRef.Context.getTagDeclType(Constructor->getParent())
2771      << 0 << Field->getDeclName();
2772      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
2773      return true;
2774    }
2775
2776    if (FieldBaseElementType.isConstQualified()) {
2777      SemaRef.Diag(Constructor->getLocation(),
2778                   diag::err_uninitialized_member_in_ctor)
2779      << (int)Constructor->isImplicit()
2780      << SemaRef.Context.getTagDeclType(Constructor->getParent())
2781      << 1 << Field->getDeclName();
2782      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
2783      return true;
2784    }
2785  }
2786
2787  if (SemaRef.getLangOpts().ObjCAutoRefCount &&
2788      FieldBaseElementType->isObjCRetainableType() &&
2789      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
2790      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
2791    // ARC:
2792    //   Default-initialize Objective-C pointers to NULL.
2793    CXXMemberInit
2794      = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
2795                                                 Loc, Loc,
2796                 new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
2797                                                 Loc);
2798    return false;
2799  }
2800
2801  // Nothing to initialize.
2802  CXXMemberInit = 0;
2803  return false;
2804}
2805
2806namespace {
2807struct BaseAndFieldInfo {
2808  Sema &S;
2809  CXXConstructorDecl *Ctor;
2810  bool AnyErrorsInInits;
2811  ImplicitInitializerKind IIK;
2812  llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
2813  SmallVector<CXXCtorInitializer*, 8> AllToInit;
2814
2815  BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
2816    : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
2817    bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
2818    if (Generated && Ctor->isCopyConstructor())
2819      IIK = IIK_Copy;
2820    else if (Generated && Ctor->isMoveConstructor())
2821      IIK = IIK_Move;
2822    else
2823      IIK = IIK_Default;
2824  }
2825
2826  bool isImplicitCopyOrMove() const {
2827    switch (IIK) {
2828    case IIK_Copy:
2829    case IIK_Move:
2830      return true;
2831
2832    case IIK_Default:
2833      return false;
2834    }
2835
2836    llvm_unreachable("Invalid ImplicitInitializerKind!");
2837  }
2838
2839  bool addFieldInitializer(CXXCtorInitializer *Init) {
2840    AllToInit.push_back(Init);
2841
2842    // Check whether this initializer makes the field "used".
2843    if (Init->getInit() && Init->getInit()->HasSideEffects(S.Context))
2844      S.UnusedPrivateFields.remove(Init->getAnyMember());
2845
2846    return false;
2847  }
2848};
2849}
2850
2851/// \brief Determine whether the given indirect field declaration is somewhere
2852/// within an anonymous union.
2853static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
2854  for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
2855                                      CEnd = F->chain_end();
2856       C != CEnd; ++C)
2857    if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
2858      if (Record->isUnion())
2859        return true;
2860
2861  return false;
2862}
2863
2864/// \brief Determine whether the given type is an incomplete or zero-lenfgth
2865/// array type.
2866static bool isIncompleteOrZeroLengthArrayType(ASTContext &Context, QualType T) {
2867  if (T->isIncompleteArrayType())
2868    return true;
2869
2870  while (const ConstantArrayType *ArrayT = Context.getAsConstantArrayType(T)) {
2871    if (!ArrayT->getSize())
2872      return true;
2873
2874    T = ArrayT->getElementType();
2875  }
2876
2877  return false;
2878}
2879
2880static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
2881                                    FieldDecl *Field,
2882                                    IndirectFieldDecl *Indirect = 0) {
2883
2884  // Overwhelmingly common case: we have a direct initializer for this field.
2885  if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field))
2886    return Info.addFieldInitializer(Init);
2887
2888  // C++11 [class.base.init]p8: if the entity is a non-static data member that
2889  // has a brace-or-equal-initializer, the entity is initialized as specified
2890  // in [dcl.init].
2891  if (Field->hasInClassInitializer() && !Info.isImplicitCopyOrMove()) {
2892    CXXCtorInitializer *Init;
2893    if (Indirect)
2894      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
2895                                                      SourceLocation(),
2896                                                      SourceLocation(), 0,
2897                                                      SourceLocation());
2898    else
2899      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
2900                                                      SourceLocation(),
2901                                                      SourceLocation(), 0,
2902                                                      SourceLocation());
2903    return Info.addFieldInitializer(Init);
2904  }
2905
2906  // Don't build an implicit initializer for union members if none was
2907  // explicitly specified.
2908  if (Field->getParent()->isUnion() ||
2909      (Indirect && isWithinAnonymousUnion(Indirect)))
2910    return false;
2911
2912  // Don't initialize incomplete or zero-length arrays.
2913  if (isIncompleteOrZeroLengthArrayType(SemaRef.Context, Field->getType()))
2914    return false;
2915
2916  // Don't try to build an implicit initializer if there were semantic
2917  // errors in any of the initializers (and therefore we might be
2918  // missing some that the user actually wrote).
2919  if (Info.AnyErrorsInInits || Field->isInvalidDecl())
2920    return false;
2921
2922  CXXCtorInitializer *Init = 0;
2923  if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
2924                                     Indirect, Init))
2925    return true;
2926
2927  if (!Init)
2928    return false;
2929
2930  return Info.addFieldInitializer(Init);
2931}
2932
2933bool
2934Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
2935                               CXXCtorInitializer *Initializer) {
2936  assert(Initializer->isDelegatingInitializer());
2937  Constructor->setNumCtorInitializers(1);
2938  CXXCtorInitializer **initializer =
2939    new (Context) CXXCtorInitializer*[1];
2940  memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
2941  Constructor->setCtorInitializers(initializer);
2942
2943  if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
2944    MarkFunctionReferenced(Initializer->getSourceLocation(), Dtor);
2945    DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
2946  }
2947
2948  DelegatingCtorDecls.push_back(Constructor);
2949
2950  return false;
2951}
2952
2953bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor,
2954                               CXXCtorInitializer **Initializers,
2955                               unsigned NumInitializers,
2956                               bool AnyErrors) {
2957  if (Constructor->isDependentContext()) {
2958    // Just store the initializers as written, they will be checked during
2959    // instantiation.
2960    if (NumInitializers > 0) {
2961      Constructor->setNumCtorInitializers(NumInitializers);
2962      CXXCtorInitializer **baseOrMemberInitializers =
2963        new (Context) CXXCtorInitializer*[NumInitializers];
2964      memcpy(baseOrMemberInitializers, Initializers,
2965             NumInitializers * sizeof(CXXCtorInitializer*));
2966      Constructor->setCtorInitializers(baseOrMemberInitializers);
2967    }
2968
2969    // Let template instantiation know whether we had errors.
2970    if (AnyErrors)
2971      Constructor->setInvalidDecl();
2972
2973    return false;
2974  }
2975
2976  BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
2977
2978  // We need to build the initializer AST according to order of construction
2979  // and not what user specified in the Initializers list.
2980  CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
2981  if (!ClassDecl)
2982    return true;
2983
2984  bool HadError = false;
2985
2986  for (unsigned i = 0; i < NumInitializers; i++) {
2987    CXXCtorInitializer *Member = Initializers[i];
2988
2989    if (Member->isBaseInitializer())
2990      Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
2991    else
2992      Info.AllBaseFields[Member->getAnyMember()] = Member;
2993  }
2994
2995  // Keep track of the direct virtual bases.
2996  llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
2997  for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
2998       E = ClassDecl->bases_end(); I != E; ++I) {
2999    if (I->isVirtual())
3000      DirectVBases.insert(I);
3001  }
3002
3003  // Push virtual bases before others.
3004  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3005       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3006
3007    if (CXXCtorInitializer *Value
3008        = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
3009      Info.AllToInit.push_back(Value);
3010    } else if (!AnyErrors) {
3011      bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
3012      CXXCtorInitializer *CXXBaseInit;
3013      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3014                                       VBase, IsInheritedVirtualBase,
3015                                       CXXBaseInit)) {
3016        HadError = true;
3017        continue;
3018      }
3019
3020      Info.AllToInit.push_back(CXXBaseInit);
3021    }
3022  }
3023
3024  // Non-virtual bases.
3025  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3026       E = ClassDecl->bases_end(); Base != E; ++Base) {
3027    // Virtuals are in the virtual base list and already constructed.
3028    if (Base->isVirtual())
3029      continue;
3030
3031    if (CXXCtorInitializer *Value
3032          = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
3033      Info.AllToInit.push_back(Value);
3034    } else if (!AnyErrors) {
3035      CXXCtorInitializer *CXXBaseInit;
3036      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
3037                                       Base, /*IsInheritedVirtualBase=*/false,
3038                                       CXXBaseInit)) {
3039        HadError = true;
3040        continue;
3041      }
3042
3043      Info.AllToInit.push_back(CXXBaseInit);
3044    }
3045  }
3046
3047  // Fields.
3048  for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3049                               MemEnd = ClassDecl->decls_end();
3050       Mem != MemEnd; ++Mem) {
3051    if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
3052      // C++ [class.bit]p2:
3053      //   A declaration for a bit-field that omits the identifier declares an
3054      //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
3055      //   initialized.
3056      if (F->isUnnamedBitfield())
3057        continue;
3058
3059      // If we're not generating the implicit copy/move constructor, then we'll
3060      // handle anonymous struct/union fields based on their individual
3061      // indirect fields.
3062      if (F->isAnonymousStructOrUnion() && Info.IIK == IIK_Default)
3063        continue;
3064
3065      if (CollectFieldInitializer(*this, Info, F))
3066        HadError = true;
3067      continue;
3068    }
3069
3070    // Beyond this point, we only consider default initialization.
3071    if (Info.IIK != IIK_Default)
3072      continue;
3073
3074    if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
3075      if (F->getType()->isIncompleteArrayType()) {
3076        assert(ClassDecl->hasFlexibleArrayMember() &&
3077               "Incomplete array type is not valid");
3078        continue;
3079      }
3080
3081      // Initialize each field of an anonymous struct individually.
3082      if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
3083        HadError = true;
3084
3085      continue;
3086    }
3087  }
3088
3089  NumInitializers = Info.AllToInit.size();
3090  if (NumInitializers > 0) {
3091    Constructor->setNumCtorInitializers(NumInitializers);
3092    CXXCtorInitializer **baseOrMemberInitializers =
3093      new (Context) CXXCtorInitializer*[NumInitializers];
3094    memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
3095           NumInitializers * sizeof(CXXCtorInitializer*));
3096    Constructor->setCtorInitializers(baseOrMemberInitializers);
3097
3098    // Constructors implicitly reference the base and member
3099    // destructors.
3100    MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
3101                                           Constructor->getParent());
3102  }
3103
3104  return HadError;
3105}
3106
3107static void *GetKeyForTopLevelField(FieldDecl *Field) {
3108  // For anonymous unions, use the class declaration as the key.
3109  if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
3110    if (RT->getDecl()->isAnonymousStructOrUnion())
3111      return static_cast<void *>(RT->getDecl());
3112  }
3113  return static_cast<void *>(Field);
3114}
3115
3116static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
3117  return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
3118}
3119
3120static void *GetKeyForMember(ASTContext &Context,
3121                             CXXCtorInitializer *Member) {
3122  if (!Member->isAnyMemberInitializer())
3123    return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
3124
3125  // For fields injected into the class via declaration of an anonymous union,
3126  // use its anonymous union class declaration as the unique key.
3127  FieldDecl *Field = Member->getAnyMember();
3128
3129  // If the field is a member of an anonymous struct or union, our key
3130  // is the anonymous record decl that's a direct child of the class.
3131  RecordDecl *RD = Field->getParent();
3132  if (RD->isAnonymousStructOrUnion()) {
3133    while (true) {
3134      RecordDecl *Parent = cast<RecordDecl>(RD->getDeclContext());
3135      if (Parent->isAnonymousStructOrUnion())
3136        RD = Parent;
3137      else
3138        break;
3139    }
3140
3141    return static_cast<void *>(RD);
3142  }
3143
3144  return static_cast<void *>(Field);
3145}
3146
3147static void
3148DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef,
3149                                  const CXXConstructorDecl *Constructor,
3150                                  CXXCtorInitializer **Inits,
3151                                  unsigned NumInits) {
3152  if (Constructor->getDeclContext()->isDependentContext())
3153    return;
3154
3155  // Don't check initializers order unless the warning is enabled at the
3156  // location of at least one initializer.
3157  bool ShouldCheckOrder = false;
3158  for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
3159    CXXCtorInitializer *Init = Inits[InitIndex];
3160    if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
3161                                         Init->getSourceLocation())
3162          != DiagnosticsEngine::Ignored) {
3163      ShouldCheckOrder = true;
3164      break;
3165    }
3166  }
3167  if (!ShouldCheckOrder)
3168    return;
3169
3170  // Build the list of bases and members in the order that they'll
3171  // actually be initialized.  The explicit initializers should be in
3172  // this same order but may be missing things.
3173  SmallVector<const void*, 32> IdealInitKeys;
3174
3175  const CXXRecordDecl *ClassDecl = Constructor->getParent();
3176
3177  // 1. Virtual bases.
3178  for (CXXRecordDecl::base_class_const_iterator VBase =
3179       ClassDecl->vbases_begin(),
3180       E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3181    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
3182
3183  // 2. Non-virtual bases.
3184  for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3185       E = ClassDecl->bases_end(); Base != E; ++Base) {
3186    if (Base->isVirtual())
3187      continue;
3188    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
3189  }
3190
3191  // 3. Direct fields.
3192  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3193       E = ClassDecl->field_end(); Field != E; ++Field) {
3194    if (Field->isUnnamedBitfield())
3195      continue;
3196
3197    IdealInitKeys.push_back(GetKeyForTopLevelField(*Field));
3198  }
3199
3200  unsigned NumIdealInits = IdealInitKeys.size();
3201  unsigned IdealIndex = 0;
3202
3203  CXXCtorInitializer *PrevInit = 0;
3204  for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
3205    CXXCtorInitializer *Init = Inits[InitIndex];
3206    void *InitKey = GetKeyForMember(SemaRef.Context, Init);
3207
3208    // Scan forward to try to find this initializer in the idealized
3209    // initializers list.
3210    for (; IdealIndex != NumIdealInits; ++IdealIndex)
3211      if (InitKey == IdealInitKeys[IdealIndex])
3212        break;
3213
3214    // If we didn't find this initializer, it must be because we
3215    // scanned past it on a previous iteration.  That can only
3216    // happen if we're out of order;  emit a warning.
3217    if (IdealIndex == NumIdealInits && PrevInit) {
3218      Sema::SemaDiagnosticBuilder D =
3219        SemaRef.Diag(PrevInit->getSourceLocation(),
3220                     diag::warn_initializer_out_of_order);
3221
3222      if (PrevInit->isAnyMemberInitializer())
3223        D << 0 << PrevInit->getAnyMember()->getDeclName();
3224      else
3225        D << 1 << PrevInit->getTypeSourceInfo()->getType();
3226
3227      if (Init->isAnyMemberInitializer())
3228        D << 0 << Init->getAnyMember()->getDeclName();
3229      else
3230        D << 1 << Init->getTypeSourceInfo()->getType();
3231
3232      // Move back to the initializer's location in the ideal list.
3233      for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
3234        if (InitKey == IdealInitKeys[IdealIndex])
3235          break;
3236
3237      assert(IdealIndex != NumIdealInits &&
3238             "initializer not found in initializer list");
3239    }
3240
3241    PrevInit = Init;
3242  }
3243}
3244
3245namespace {
3246bool CheckRedundantInit(Sema &S,
3247                        CXXCtorInitializer *Init,
3248                        CXXCtorInitializer *&PrevInit) {
3249  if (!PrevInit) {
3250    PrevInit = Init;
3251    return false;
3252  }
3253
3254  if (FieldDecl *Field = Init->getMember())
3255    S.Diag(Init->getSourceLocation(),
3256           diag::err_multiple_mem_initialization)
3257      << Field->getDeclName()
3258      << Init->getSourceRange();
3259  else {
3260    const Type *BaseClass = Init->getBaseClass();
3261    assert(BaseClass && "neither field nor base");
3262    S.Diag(Init->getSourceLocation(),
3263           diag::err_multiple_base_initialization)
3264      << QualType(BaseClass, 0)
3265      << Init->getSourceRange();
3266  }
3267  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
3268    << 0 << PrevInit->getSourceRange();
3269
3270  return true;
3271}
3272
3273typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
3274typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
3275
3276bool CheckRedundantUnionInit(Sema &S,
3277                             CXXCtorInitializer *Init,
3278                             RedundantUnionMap &Unions) {
3279  FieldDecl *Field = Init->getAnyMember();
3280  RecordDecl *Parent = Field->getParent();
3281  NamedDecl *Child = Field;
3282
3283  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {
3284    if (Parent->isUnion()) {
3285      UnionEntry &En = Unions[Parent];
3286      if (En.first && En.first != Child) {
3287        S.Diag(Init->getSourceLocation(),
3288               diag::err_multiple_mem_union_initialization)
3289          << Field->getDeclName()
3290          << Init->getSourceRange();
3291        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
3292          << 0 << En.second->getSourceRange();
3293        return true;
3294      }
3295      if (!En.first) {
3296        En.first = Child;
3297        En.second = Init;
3298      }
3299      if (!Parent->isAnonymousStructOrUnion())
3300        return false;
3301    }
3302
3303    Child = Parent;
3304    Parent = cast<RecordDecl>(Parent->getDeclContext());
3305  }
3306
3307  return false;
3308}
3309}
3310
3311/// ActOnMemInitializers - Handle the member initializers for a constructor.
3312void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
3313                                SourceLocation ColonLoc,
3314                                CXXCtorInitializer **meminits,
3315                                unsigned NumMemInits,
3316                                bool AnyErrors) {
3317  if (!ConstructorDecl)
3318    return;
3319
3320  AdjustDeclIfTemplate(ConstructorDecl);
3321
3322  CXXConstructorDecl *Constructor
3323    = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
3324
3325  if (!Constructor) {
3326    Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
3327    return;
3328  }
3329
3330  CXXCtorInitializer **MemInits =
3331    reinterpret_cast<CXXCtorInitializer **>(meminits);
3332
3333  // Mapping for the duplicate initializers check.
3334  // For member initializers, this is keyed with a FieldDecl*.
3335  // For base initializers, this is keyed with a Type*.
3336  llvm::DenseMap<void*, CXXCtorInitializer *> Members;
3337
3338  // Mapping for the inconsistent anonymous-union initializers check.
3339  RedundantUnionMap MemberUnions;
3340
3341  bool HadError = false;
3342  for (unsigned i = 0; i < NumMemInits; i++) {
3343    CXXCtorInitializer *Init = MemInits[i];
3344
3345    // Set the source order index.
3346    Init->setSourceOrder(i);
3347
3348    if (Init->isAnyMemberInitializer()) {
3349      FieldDecl *Field = Init->getAnyMember();
3350      if (CheckRedundantInit(*this, Init, Members[Field]) ||
3351          CheckRedundantUnionInit(*this, Init, MemberUnions))
3352        HadError = true;
3353    } else if (Init->isBaseInitializer()) {
3354      void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
3355      if (CheckRedundantInit(*this, Init, Members[Key]))
3356        HadError = true;
3357    } else {
3358      assert(Init->isDelegatingInitializer());
3359      // This must be the only initializer
3360      if (NumMemInits != 1) {
3361        Diag(Init->getSourceLocation(),
3362             diag::err_delegating_initializer_alone)
3363          << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
3364        // We will treat this as being the only initializer.
3365      }
3366      SetDelegatingInitializer(Constructor, MemInits[i]);
3367      // Return immediately as the initializer is set.
3368      return;
3369    }
3370  }
3371
3372  if (HadError)
3373    return;
3374
3375  DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
3376
3377  SetCtorInitializers(Constructor, MemInits, NumMemInits, AnyErrors);
3378}
3379
3380void
3381Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
3382                                             CXXRecordDecl *ClassDecl) {
3383  // Ignore dependent contexts. Also ignore unions, since their members never
3384  // have destructors implicitly called.
3385  if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3386    return;
3387
3388  // FIXME: all the access-control diagnostics are positioned on the
3389  // field/base declaration.  That's probably good; that said, the
3390  // user might reasonably want to know why the destructor is being
3391  // emitted, and we currently don't say.
3392
3393  // Non-static data members.
3394  for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3395       E = ClassDecl->field_end(); I != E; ++I) {
3396    FieldDecl *Field = *I;
3397    if (Field->isInvalidDecl())
3398      continue;
3399
3400    // Don't destroy incomplete or zero-length arrays.
3401    if (isIncompleteOrZeroLengthArrayType(Context, Field->getType()))
3402      continue;
3403
3404    QualType FieldType = Context.getBaseElementType(Field->getType());
3405
3406    const RecordType* RT = FieldType->getAs<RecordType>();
3407    if (!RT)
3408      continue;
3409
3410    CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3411    if (FieldClassDecl->isInvalidDecl())
3412      continue;
3413    if (FieldClassDecl->hasIrrelevantDestructor())
3414      continue;
3415    // The destructor for an implicit anonymous union member is never invoked.
3416    if (FieldClassDecl->isUnion() && FieldClassDecl->isAnonymousStructOrUnion())
3417      continue;
3418
3419    CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
3420    assert(Dtor && "No dtor found for FieldClassDecl!");
3421    CheckDestructorAccess(Field->getLocation(), Dtor,
3422                          PDiag(diag::err_access_dtor_field)
3423                            << Field->getDeclName()
3424                            << FieldType);
3425
3426    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3427    DiagnoseUseOfDecl(Dtor, Location);
3428  }
3429
3430  llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
3431
3432  // Bases.
3433  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3434       E = ClassDecl->bases_end(); Base != E; ++Base) {
3435    // Bases are always records in a well-formed non-dependent class.
3436    const RecordType *RT = Base->getType()->getAs<RecordType>();
3437
3438    // Remember direct virtual bases.
3439    if (Base->isVirtual())
3440      DirectVirtualBases.insert(RT);
3441
3442    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3443    // If our base class is invalid, we probably can't get its dtor anyway.
3444    if (BaseClassDecl->isInvalidDecl())
3445      continue;
3446    if (BaseClassDecl->hasIrrelevantDestructor())
3447      continue;
3448
3449    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3450    assert(Dtor && "No dtor found for BaseClassDecl!");
3451
3452    // FIXME: caret should be on the start of the class name
3453    CheckDestructorAccess(Base->getLocStart(), Dtor,
3454                          PDiag(diag::err_access_dtor_base)
3455                            << Base->getType()
3456                            << Base->getSourceRange(),
3457                          Context.getTypeDeclType(ClassDecl));
3458
3459    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3460    DiagnoseUseOfDecl(Dtor, Location);
3461  }
3462
3463  // Virtual bases.
3464  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3465       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3466
3467    // Bases are always records in a well-formed non-dependent class.
3468    const RecordType *RT = VBase->getType()->castAs<RecordType>();
3469
3470    // Ignore direct virtual bases.
3471    if (DirectVirtualBases.count(RT))
3472      continue;
3473
3474    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
3475    // If our base class is invalid, we probably can't get its dtor anyway.
3476    if (BaseClassDecl->isInvalidDecl())
3477      continue;
3478    if (BaseClassDecl->hasIrrelevantDestructor())
3479      continue;
3480
3481    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
3482    assert(Dtor && "No dtor found for BaseClassDecl!");
3483    CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
3484                          PDiag(diag::err_access_dtor_vbase)
3485                            << VBase->getType(),
3486                          Context.getTypeDeclType(ClassDecl));
3487
3488    MarkFunctionReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
3489    DiagnoseUseOfDecl(Dtor, Location);
3490  }
3491}
3492
3493void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
3494  if (!CDtorDecl)
3495    return;
3496
3497  if (CXXConstructorDecl *Constructor
3498      = dyn_cast<CXXConstructorDecl>(CDtorDecl))
3499    SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false);
3500}
3501
3502bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3503                                  unsigned DiagID, AbstractDiagSelID SelID) {
3504  class NonAbstractTypeDiagnoser : public TypeDiagnoser {
3505    unsigned DiagID;
3506    AbstractDiagSelID SelID;
3507
3508  public:
3509    NonAbstractTypeDiagnoser(unsigned DiagID, AbstractDiagSelID SelID)
3510      : TypeDiagnoser(DiagID == 0), DiagID(DiagID), SelID(SelID) { }
3511
3512    virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
3513      if (Suppressed) return;
3514      if (SelID == -1)
3515        S.Diag(Loc, DiagID) << T;
3516      else
3517        S.Diag(Loc, DiagID) << SelID << T;
3518    }
3519  } Diagnoser(DiagID, SelID);
3520
3521  return RequireNonAbstractType(Loc, T, Diagnoser);
3522}
3523
3524bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
3525                                  TypeDiagnoser &Diagnoser) {
3526  if (!getLangOpts().CPlusPlus)
3527    return false;
3528
3529  if (const ArrayType *AT = Context.getAsArrayType(T))
3530    return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3531
3532  if (const PointerType *PT = T->getAs<PointerType>()) {
3533    // Find the innermost pointer type.
3534    while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
3535      PT = T;
3536
3537    if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
3538      return RequireNonAbstractType(Loc, AT->getElementType(), Diagnoser);
3539  }
3540
3541  const RecordType *RT = T->getAs<RecordType>();
3542  if (!RT)
3543    return false;
3544
3545  const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3546
3547  // We can't answer whether something is abstract until it has a
3548  // definition.  If it's currently being defined, we'll walk back
3549  // over all the declarations when we have a full definition.
3550  const CXXRecordDecl *Def = RD->getDefinition();
3551  if (!Def || Def->isBeingDefined())
3552    return false;
3553
3554  if (!RD->isAbstract())
3555    return false;
3556
3557  Diagnoser.diagnose(*this, Loc, T);
3558  DiagnoseAbstractType(RD);
3559
3560  return true;
3561}
3562
3563void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
3564  // Check if we've already emitted the list of pure virtual functions
3565  // for this class.
3566  if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
3567    return;
3568
3569  CXXFinalOverriderMap FinalOverriders;
3570  RD->getFinalOverriders(FinalOverriders);
3571
3572  // Keep a set of seen pure methods so we won't diagnose the same method
3573  // more than once.
3574  llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
3575
3576  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
3577                                   MEnd = FinalOverriders.end();
3578       M != MEnd;
3579       ++M) {
3580    for (OverridingMethods::iterator SO = M->second.begin(),
3581                                  SOEnd = M->second.end();
3582         SO != SOEnd; ++SO) {
3583      // C++ [class.abstract]p4:
3584      //   A class is abstract if it contains or inherits at least one
3585      //   pure virtual function for which the final overrider is pure
3586      //   virtual.
3587
3588      //
3589      if (SO->second.size() != 1)
3590        continue;
3591
3592      if (!SO->second.front().Method->isPure())
3593        continue;
3594
3595      if (!SeenPureMethods.insert(SO->second.front().Method))
3596        continue;
3597
3598      Diag(SO->second.front().Method->getLocation(),
3599           diag::note_pure_virtual_function)
3600        << SO->second.front().Method->getDeclName() << RD->getDeclName();
3601    }
3602  }
3603
3604  if (!PureVirtualClassDiagSet)
3605    PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
3606  PureVirtualClassDiagSet->insert(RD);
3607}
3608
3609namespace {
3610struct AbstractUsageInfo {
3611  Sema &S;
3612  CXXRecordDecl *Record;
3613  CanQualType AbstractType;
3614  bool Invalid;
3615
3616  AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
3617    : S(S), Record(Record),
3618      AbstractType(S.Context.getCanonicalType(
3619                   S.Context.getTypeDeclType(Record))),
3620      Invalid(false) {}
3621
3622  void DiagnoseAbstractType() {
3623    if (Invalid) return;
3624    S.DiagnoseAbstractType(Record);
3625    Invalid = true;
3626  }
3627
3628  void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
3629};
3630
3631struct CheckAbstractUsage {
3632  AbstractUsageInfo &Info;
3633  const NamedDecl *Ctx;
3634
3635  CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
3636    : Info(Info), Ctx(Ctx) {}
3637
3638  void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
3639    switch (TL.getTypeLocClass()) {
3640#define ABSTRACT_TYPELOC(CLASS, PARENT)
3641#define TYPELOC(CLASS, PARENT) \
3642    case TypeLoc::CLASS: Check(cast<CLASS##TypeLoc>(TL), Sel); break;
3643#include "clang/AST/TypeLocNodes.def"
3644    }
3645  }
3646
3647  void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3648    Visit(TL.getResultLoc(), Sema::AbstractReturnType);
3649    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3650      if (!TL.getArg(I))
3651        continue;
3652
3653      TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
3654      if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
3655    }
3656  }
3657
3658  void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3659    Visit(TL.getElementLoc(), Sema::AbstractArrayType);
3660  }
3661
3662  void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
3663    // Visit the type parameters from a permissive context.
3664    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
3665      TemplateArgumentLoc TAL = TL.getArgLoc(I);
3666      if (TAL.getArgument().getKind() == TemplateArgument::Type)
3667        if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
3668          Visit(TSI->getTypeLoc(), Sema::AbstractNone);
3669      // TODO: other template argument types?
3670    }
3671  }
3672
3673  // Visit pointee types from a permissive context.
3674#define CheckPolymorphic(Type) \
3675  void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
3676    Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
3677  }
3678  CheckPolymorphic(PointerTypeLoc)
3679  CheckPolymorphic(ReferenceTypeLoc)
3680  CheckPolymorphic(MemberPointerTypeLoc)
3681  CheckPolymorphic(BlockPointerTypeLoc)
3682  CheckPolymorphic(AtomicTypeLoc)
3683
3684  /// Handle all the types we haven't given a more specific
3685  /// implementation for above.
3686  void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
3687    // Every other kind of type that we haven't called out already
3688    // that has an inner type is either (1) sugar or (2) contains that
3689    // inner type in some way as a subobject.
3690    if (TypeLoc Next = TL.getNextTypeLoc())
3691      return Visit(Next, Sel);
3692
3693    // If there's no inner type and we're in a permissive context,
3694    // don't diagnose.
3695    if (Sel == Sema::AbstractNone) return;
3696
3697    // Check whether the type matches the abstract type.
3698    QualType T = TL.getType();
3699    if (T->isArrayType()) {
3700      Sel = Sema::AbstractArrayType;
3701      T = Info.S.Context.getBaseElementType(T);
3702    }
3703    CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
3704    if (CT != Info.AbstractType) return;
3705
3706    // It matched; do some magic.
3707    if (Sel == Sema::AbstractArrayType) {
3708      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
3709        << T << TL.getSourceRange();
3710    } else {
3711      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
3712        << Sel << T << TL.getSourceRange();
3713    }
3714    Info.DiagnoseAbstractType();
3715  }
3716};
3717
3718void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
3719                                  Sema::AbstractDiagSelID Sel) {
3720  CheckAbstractUsage(*this, D).Visit(TL, Sel);
3721}
3722
3723}
3724
3725/// Check for invalid uses of an abstract type in a method declaration.
3726static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
3727                                    CXXMethodDecl *MD) {
3728  // No need to do the check on definitions, which require that
3729  // the return/param types be complete.
3730  if (MD->doesThisDeclarationHaveABody())
3731    return;
3732
3733  // For safety's sake, just ignore it if we don't have type source
3734  // information.  This should never happen for non-implicit methods,
3735  // but...
3736  if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
3737    Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
3738}
3739
3740/// Check for invalid uses of an abstract type within a class definition.
3741static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
3742                                    CXXRecordDecl *RD) {
3743  for (CXXRecordDecl::decl_iterator
3744         I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
3745    Decl *D = *I;
3746    if (D->isImplicit()) continue;
3747
3748    // Methods and method templates.
3749    if (isa<CXXMethodDecl>(D)) {
3750      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
3751    } else if (isa<FunctionTemplateDecl>(D)) {
3752      FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
3753      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
3754
3755    // Fields and static variables.
3756    } else if (isa<FieldDecl>(D)) {
3757      FieldDecl *FD = cast<FieldDecl>(D);
3758      if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
3759        Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
3760    } else if (isa<VarDecl>(D)) {
3761      VarDecl *VD = cast<VarDecl>(D);
3762      if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
3763        Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
3764
3765    // Nested classes and class templates.
3766    } else if (isa<CXXRecordDecl>(D)) {
3767      CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
3768    } else if (isa<ClassTemplateDecl>(D)) {
3769      CheckAbstractClassUsage(Info,
3770                             cast<ClassTemplateDecl>(D)->getTemplatedDecl());
3771    }
3772  }
3773}
3774
3775/// \brief Perform semantic checks on a class definition that has been
3776/// completing, introducing implicitly-declared members, checking for
3777/// abstract types, etc.
3778void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
3779  if (!Record)
3780    return;
3781
3782  if (Record->isAbstract() && !Record->isInvalidDecl()) {
3783    AbstractUsageInfo Info(*this, Record);
3784    CheckAbstractClassUsage(Info, Record);
3785  }
3786
3787  // If this is not an aggregate type and has no user-declared constructor,
3788  // complain about any non-static data members of reference or const scalar
3789  // type, since they will never get initializers.
3790  if (!Record->isInvalidDecl() && !Record->isDependentType() &&
3791      !Record->isAggregate() && !Record->hasUserDeclaredConstructor() &&
3792      !Record->isLambda()) {
3793    bool Complained = false;
3794    for (RecordDecl::field_iterator F = Record->field_begin(),
3795                                 FEnd = Record->field_end();
3796         F != FEnd; ++F) {
3797      if (F->hasInClassInitializer() || F->isUnnamedBitfield())
3798        continue;
3799
3800      if (F->getType()->isReferenceType() ||
3801          (F->getType().isConstQualified() && F->getType()->isScalarType())) {
3802        if (!Complained) {
3803          Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
3804            << Record->getTagKind() << Record;
3805          Complained = true;
3806        }
3807
3808        Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
3809          << F->getType()->isReferenceType()
3810          << F->getDeclName();
3811      }
3812    }
3813  }
3814
3815  if (Record->isDynamicClass() && !Record->isDependentType())
3816    DynamicClasses.push_back(Record);
3817
3818  if (Record->getIdentifier()) {
3819    // C++ [class.mem]p13:
3820    //   If T is the name of a class, then each of the following shall have a
3821    //   name different from T:
3822    //     - every member of every anonymous union that is a member of class T.
3823    //
3824    // C++ [class.mem]p14:
3825    //   In addition, if class T has a user-declared constructor (12.1), every
3826    //   non-static data member of class T shall have a name different from T.
3827    for (DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
3828         R.first != R.second; ++R.first) {
3829      NamedDecl *D = *R.first;
3830      if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
3831          isa<IndirectFieldDecl>(D)) {
3832        Diag(D->getLocation(), diag::err_member_name_of_class)
3833          << D->getDeclName();
3834        break;
3835      }
3836    }
3837  }
3838
3839  // Warn if the class has virtual methods but non-virtual public destructor.
3840  if (Record->isPolymorphic() && !Record->isDependentType()) {
3841    CXXDestructorDecl *dtor = Record->getDestructor();
3842    if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
3843      Diag(dtor ? dtor->getLocation() : Record->getLocation(),
3844           diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
3845  }
3846
3847  if (Record->isAbstract() && Record->hasAttr<FinalAttr>()) {
3848    Diag(Record->getLocation(), diag::warn_abstract_final_class);
3849    DiagnoseAbstractType(Record);
3850  }
3851
3852  // See if a method overloads virtual methods in a base
3853  /// class without overriding any.
3854  if (!Record->isDependentType()) {
3855    for (CXXRecordDecl::method_iterator M = Record->method_begin(),
3856                                     MEnd = Record->method_end();
3857         M != MEnd; ++M) {
3858      if (!M->isStatic())
3859        DiagnoseHiddenVirtualMethods(Record, *M);
3860    }
3861  }
3862
3863  // C++0x [dcl.constexpr]p8: A constexpr specifier for a non-static member
3864  // function that is not a constructor declares that member function to be
3865  // const. [...] The class of which that function is a member shall be
3866  // a literal type.
3867  //
3868  // If the class has virtual bases, any constexpr members will already have
3869  // been diagnosed by the checks performed on the member declaration, so
3870  // suppress this (less useful) diagnostic.
3871  if (LangOpts.CPlusPlus0x && !Record->isDependentType() &&
3872      !Record->isLiteral() && !Record->getNumVBases()) {
3873    for (CXXRecordDecl::method_iterator M = Record->method_begin(),
3874                                     MEnd = Record->method_end();
3875         M != MEnd; ++M) {
3876      if (M->isConstexpr() && M->isInstance() && !isa<CXXConstructorDecl>(*M)) {
3877        switch (Record->getTemplateSpecializationKind()) {
3878        case TSK_ImplicitInstantiation:
3879        case TSK_ExplicitInstantiationDeclaration:
3880        case TSK_ExplicitInstantiationDefinition:
3881          // If a template instantiates to a non-literal type, but its members
3882          // instantiate to constexpr functions, the template is technically
3883          // ill-formed, but we allow it for sanity.
3884          continue;
3885
3886        case TSK_Undeclared:
3887        case TSK_ExplicitSpecialization:
3888          RequireLiteralType(M->getLocation(), Context.getRecordType(Record),
3889                             diag::err_constexpr_method_non_literal);
3890          break;
3891        }
3892
3893        // Only produce one error per class.
3894        break;
3895      }
3896    }
3897  }
3898
3899  // Declare inherited constructors. We do this eagerly here because:
3900  // - The standard requires an eager diagnostic for conflicting inherited
3901  //   constructors from different classes.
3902  // - The lazy declaration of the other implicit constructors is so as to not
3903  //   waste space and performance on classes that are not meant to be
3904  //   instantiated (e.g. meta-functions). This doesn't apply to classes that
3905  //   have inherited constructors.
3906  DeclareInheritedConstructors(Record);
3907}
3908
3909void Sema::CheckExplicitlyDefaultedMethods(CXXRecordDecl *Record) {
3910  for (CXXRecordDecl::method_iterator MI = Record->method_begin(),
3911                                      ME = Record->method_end();
3912       MI != ME; ++MI)
3913    if (!MI->isInvalidDecl() && MI->isExplicitlyDefaulted())
3914      CheckExplicitlyDefaultedSpecialMember(*MI);
3915}
3916
3917/// Is the special member function which would be selected to perform the
3918/// specified operation on the specified class type a constexpr constructor?
3919static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
3920                                     Sema::CXXSpecialMember CSM,
3921                                     bool ConstArg) {
3922  Sema::SpecialMemberOverloadResult *SMOR =
3923      S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
3924                            false, false, false, false);
3925  if (!SMOR || !SMOR->getMethod())
3926    // A constructor we wouldn't select can't be "involved in initializing"
3927    // anything.
3928    return true;
3929  return SMOR->getMethod()->isConstexpr();
3930}
3931
3932/// Determine whether the specified special member function would be constexpr
3933/// if it were implicitly defined.
3934static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
3935                                              Sema::CXXSpecialMember CSM,
3936                                              bool ConstArg) {
3937  if (!S.getLangOpts().CPlusPlus0x)
3938    return false;
3939
3940  // C++11 [dcl.constexpr]p4:
3941  // In the definition of a constexpr constructor [...]
3942  switch (CSM) {
3943  case Sema::CXXDefaultConstructor:
3944    // Since default constructor lookup is essentially trivial (and cannot
3945    // involve, for instance, template instantiation), we compute whether a
3946    // defaulted default constructor is constexpr directly within CXXRecordDecl.
3947    //
3948    // This is important for performance; we need to know whether the default
3949    // constructor is constexpr to determine whether the type is a literal type.
3950    return ClassDecl->defaultedDefaultConstructorIsConstexpr();
3951
3952  case Sema::CXXCopyConstructor:
3953  case Sema::CXXMoveConstructor:
3954    // For copy or move constructors, we need to perform overload resolution.
3955    break;
3956
3957  case Sema::CXXCopyAssignment:
3958  case Sema::CXXMoveAssignment:
3959  case Sema::CXXDestructor:
3960  case Sema::CXXInvalid:
3961    return false;
3962  }
3963
3964  //   -- if the class is a non-empty union, or for each non-empty anonymous
3965  //      union member of a non-union class, exactly one non-static data member
3966  //      shall be initialized; [DR1359]
3967  //
3968  // If we squint, this is guaranteed, since exactly one non-static data member
3969  // will be initialized (if the constructor isn't deleted), we just don't know
3970  // which one.
3971  if (ClassDecl->isUnion())
3972    return true;
3973
3974  //   -- the class shall not have any virtual base classes;
3975  if (ClassDecl->getNumVBases())
3976    return false;
3977
3978  //   -- every constructor involved in initializing [...] base class
3979  //      sub-objects shall be a constexpr constructor;
3980  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
3981                                       BEnd = ClassDecl->bases_end();
3982       B != BEnd; ++B) {
3983    const RecordType *BaseType = B->getType()->getAs<RecordType>();
3984    if (!BaseType) continue;
3985
3986    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
3987    if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, ConstArg))
3988      return false;
3989  }
3990
3991  //   -- every constructor involved in initializing non-static data members
3992  //      [...] shall be a constexpr constructor;
3993  //   -- every non-static data member and base class sub-object shall be
3994  //      initialized
3995  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
3996                               FEnd = ClassDecl->field_end();
3997       F != FEnd; ++F) {
3998    if (F->isInvalidDecl())
3999      continue;
4000    if (const RecordType *RecordTy =
4001            S.Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
4002      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
4003      if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM, ConstArg))
4004        return false;
4005    }
4006  }
4007
4008  // All OK, it's constexpr!
4009  return true;
4010}
4011
4012static Sema::ImplicitExceptionSpecification
4013computeImplicitExceptionSpec(Sema &S, SourceLocation Loc, CXXMethodDecl *MD) {
4014  switch (S.getSpecialMember(MD)) {
4015  case Sema::CXXDefaultConstructor:
4016    return S.ComputeDefaultedDefaultCtorExceptionSpec(Loc, MD);
4017  case Sema::CXXCopyConstructor:
4018    return S.ComputeDefaultedCopyCtorExceptionSpec(MD);
4019  case Sema::CXXCopyAssignment:
4020    return S.ComputeDefaultedCopyAssignmentExceptionSpec(MD);
4021  case Sema::CXXMoveConstructor:
4022    return S.ComputeDefaultedMoveCtorExceptionSpec(MD);
4023  case Sema::CXXMoveAssignment:
4024    return S.ComputeDefaultedMoveAssignmentExceptionSpec(MD);
4025  case Sema::CXXDestructor:
4026    return S.ComputeDefaultedDtorExceptionSpec(MD);
4027  case Sema::CXXInvalid:
4028    break;
4029  }
4030  llvm_unreachable("only special members have implicit exception specs");
4031}
4032
4033static void
4034updateExceptionSpec(Sema &S, FunctionDecl *FD, const FunctionProtoType *FPT,
4035                    const Sema::ImplicitExceptionSpecification &ExceptSpec) {
4036  FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
4037  ExceptSpec.getEPI(EPI);
4038  const FunctionProtoType *NewFPT = cast<FunctionProtoType>(
4039    S.Context.getFunctionType(FPT->getResultType(), FPT->arg_type_begin(),
4040                              FPT->getNumArgs(), EPI));
4041  FD->setType(QualType(NewFPT, 0));
4042}
4043
4044void Sema::EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD) {
4045  const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
4046  if (FPT->getExceptionSpecType() != EST_Unevaluated)
4047    return;
4048
4049  // Evaluate the exception specification.
4050  ImplicitExceptionSpecification ExceptSpec =
4051      computeImplicitExceptionSpec(*this, Loc, MD);
4052
4053  // Update the type of the special member to use it.
4054  updateExceptionSpec(*this, MD, FPT, ExceptSpec);
4055
4056  // A user-provided destructor can be defined outside the class. When that
4057  // happens, be sure to update the exception specification on both
4058  // declarations.
4059  const FunctionProtoType *CanonicalFPT =
4060    MD->getCanonicalDecl()->getType()->castAs<FunctionProtoType>();
4061  if (CanonicalFPT->getExceptionSpecType() == EST_Unevaluated)
4062    updateExceptionSpec(*this, MD->getCanonicalDecl(),
4063                        CanonicalFPT, ExceptSpec);
4064}
4065
4066static bool isImplicitCopyCtorArgConst(Sema &S, CXXRecordDecl *ClassDecl);
4067static bool isImplicitCopyAssignmentArgConst(Sema &S, CXXRecordDecl *ClassDecl);
4068
4069void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) {
4070  CXXRecordDecl *RD = MD->getParent();
4071  CXXSpecialMember CSM = getSpecialMember(MD);
4072
4073  assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
4074         "not an explicitly-defaulted special member");
4075
4076  // Whether this was the first-declared instance of the constructor.
4077  // This affects whether we implicitly add an exception spec and constexpr.
4078  bool First = MD == MD->getCanonicalDecl();
4079
4080  bool HadError = false;
4081
4082  // C++11 [dcl.fct.def.default]p1:
4083  //   A function that is explicitly defaulted shall
4084  //     -- be a special member function (checked elsewhere),
4085  //     -- have the same type (except for ref-qualifiers, and except that a
4086  //        copy operation can take a non-const reference) as an implicit
4087  //        declaration, and
4088  //     -- not have default arguments.
4089  unsigned ExpectedParams = 1;
4090  if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
4091    ExpectedParams = 0;
4092  if (MD->getNumParams() != ExpectedParams) {
4093    // This also checks for default arguments: a copy or move constructor with a
4094    // default argument is classified as a default constructor, and assignment
4095    // operations and destructors can't have default arguments.
4096    Diag(MD->getLocation(), diag::err_defaulted_special_member_params)
4097      << CSM << MD->getSourceRange();
4098    HadError = true;
4099  }
4100
4101  const FunctionProtoType *Type = MD->getType()->getAs<FunctionProtoType>();
4102
4103  // Compute argument constness, constexpr, and triviality.
4104  bool CanHaveConstParam = false;
4105  bool Trivial = false;
4106  switch (CSM) {
4107  case CXXDefaultConstructor:
4108    Trivial = RD->hasTrivialDefaultConstructor();
4109    break;
4110  case CXXCopyConstructor:
4111    CanHaveConstParam = isImplicitCopyCtorArgConst(*this, RD);
4112    Trivial = RD->hasTrivialCopyConstructor();
4113    break;
4114  case CXXCopyAssignment:
4115    CanHaveConstParam = isImplicitCopyAssignmentArgConst(*this, RD);
4116    Trivial = RD->hasTrivialCopyAssignment();
4117    break;
4118  case CXXMoveConstructor:
4119    Trivial = RD->hasTrivialMoveConstructor();
4120    break;
4121  case CXXMoveAssignment:
4122    Trivial = RD->hasTrivialMoveAssignment();
4123    break;
4124  case CXXDestructor:
4125    Trivial = RD->hasTrivialDestructor();
4126    break;
4127  case CXXInvalid:
4128    llvm_unreachable("non-special member explicitly defaulted!");
4129  }
4130
4131  QualType ReturnType = Context.VoidTy;
4132  if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
4133    // Check for return type matching.
4134    ReturnType = Type->getResultType();
4135    QualType ExpectedReturnType =
4136        Context.getLValueReferenceType(Context.getTypeDeclType(RD));
4137    if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {
4138      Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type)
4139        << (CSM == CXXMoveAssignment) << ExpectedReturnType;
4140      HadError = true;
4141    }
4142
4143    // A defaulted special member cannot have cv-qualifiers.
4144    if (Type->getTypeQuals()) {
4145      Diag(MD->getLocation(), diag::err_defaulted_special_member_quals)
4146        << (CSM == CXXMoveAssignment);
4147      HadError = true;
4148    }
4149  }
4150
4151  // Check for parameter type matching.
4152  QualType ArgType = ExpectedParams ? Type->getArgType(0) : QualType();
4153  bool HasConstParam = false;
4154  if (ExpectedParams && ArgType->isReferenceType()) {
4155    // Argument must be reference to possibly-const T.
4156    QualType ReferentType = ArgType->getPointeeType();
4157    HasConstParam = ReferentType.isConstQualified();
4158
4159    if (ReferentType.isVolatileQualified()) {
4160      Diag(MD->getLocation(),
4161           diag::err_defaulted_special_member_volatile_param) << CSM;
4162      HadError = true;
4163    }
4164
4165    if (HasConstParam && !CanHaveConstParam) {
4166      if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
4167        Diag(MD->getLocation(),
4168             diag::err_defaulted_special_member_copy_const_param)
4169          << (CSM == CXXCopyAssignment);
4170        // FIXME: Explain why this special member can't be const.
4171      } else {
4172        Diag(MD->getLocation(),
4173             diag::err_defaulted_special_member_move_const_param)
4174          << (CSM == CXXMoveAssignment);
4175      }
4176      HadError = true;
4177    }
4178
4179    // If a function is explicitly defaulted on its first declaration, it shall
4180    // have the same parameter type as if it had been implicitly declared.
4181    // (Presumably this is to prevent it from being trivial?)
4182    if (!HasConstParam && CanHaveConstParam && First)
4183      Diag(MD->getLocation(),
4184           diag::err_defaulted_special_member_copy_non_const_param)
4185        << (CSM == CXXCopyAssignment);
4186  } else if (ExpectedParams) {
4187    // A copy assignment operator can take its argument by value, but a
4188    // defaulted one cannot.
4189    assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
4190    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
4191    HadError = true;
4192  }
4193
4194  // Rebuild the type with the implicit exception specification added, if we
4195  // are going to need it.
4196  const FunctionProtoType *ImplicitType = 0;
4197  if (First || Type->hasExceptionSpec()) {
4198    FunctionProtoType::ExtProtoInfo EPI = Type->getExtProtoInfo();
4199    computeImplicitExceptionSpec(*this, MD->getLocation(), MD).getEPI(EPI);
4200    ImplicitType = cast<FunctionProtoType>(
4201      Context.getFunctionType(ReturnType, &ArgType, ExpectedParams, EPI));
4202  }
4203
4204  // C++11 [dcl.fct.def.default]p2:
4205  //   An explicitly-defaulted function may be declared constexpr only if it
4206  //   would have been implicitly declared as constexpr,
4207  // Do not apply this rule to members of class templates, since core issue 1358
4208  // makes such functions always instantiate to constexpr functions. For
4209  // non-constructors, this is checked elsewhere.
4210  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
4211                                                     HasConstParam);
4212  if (isa<CXXConstructorDecl>(MD) && MD->isConstexpr() && !Constexpr &&
4213      MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {
4214    Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM;
4215    // FIXME: Explain why the constructor can't be constexpr.
4216    HadError = true;
4217  }
4218  //   and may have an explicit exception-specification only if it is compatible
4219  //   with the exception-specification on the implicit declaration.
4220  if (Type->hasExceptionSpec() &&
4221      CheckEquivalentExceptionSpec(
4222        PDiag(diag::err_incorrect_defaulted_exception_spec) << CSM,
4223        PDiag(), ImplicitType, SourceLocation(), Type, MD->getLocation()))
4224    HadError = true;
4225
4226  //   If a function is explicitly defaulted on its first declaration,
4227  if (First) {
4228    //  -- it is implicitly considered to be constexpr if the implicit
4229    //     definition would be,
4230    MD->setConstexpr(Constexpr);
4231
4232    //  -- it is implicitly considered to have the same exception-specification
4233    //     as if it had been implicitly declared,
4234    MD->setType(QualType(ImplicitType, 0));
4235
4236    // Such a function is also trivial if the implicitly-declared function
4237    // would have been.
4238    MD->setTrivial(Trivial);
4239  }
4240
4241  if (ShouldDeleteSpecialMember(MD, CSM)) {
4242    if (First) {
4243      MD->setDeletedAsWritten();
4244    } else {
4245      // C++11 [dcl.fct.def.default]p4:
4246      //   [For a] user-provided explicitly-defaulted function [...] if such a
4247      //   function is implicitly defined as deleted, the program is ill-formed.
4248      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
4249      HadError = true;
4250    }
4251  }
4252
4253  if (HadError)
4254    MD->setInvalidDecl();
4255}
4256
4257namespace {
4258struct SpecialMemberDeletionInfo {
4259  Sema &S;
4260  CXXMethodDecl *MD;
4261  Sema::CXXSpecialMember CSM;
4262  bool Diagnose;
4263
4264  // Properties of the special member, computed for convenience.
4265  bool IsConstructor, IsAssignment, IsMove, ConstArg, VolatileArg;
4266  SourceLocation Loc;
4267
4268  bool AllFieldsAreConst;
4269
4270  SpecialMemberDeletionInfo(Sema &S, CXXMethodDecl *MD,
4271                            Sema::CXXSpecialMember CSM, bool Diagnose)
4272    : S(S), MD(MD), CSM(CSM), Diagnose(Diagnose),
4273      IsConstructor(false), IsAssignment(false), IsMove(false),
4274      ConstArg(false), VolatileArg(false), Loc(MD->getLocation()),
4275      AllFieldsAreConst(true) {
4276    switch (CSM) {
4277      case Sema::CXXDefaultConstructor:
4278      case Sema::CXXCopyConstructor:
4279        IsConstructor = true;
4280        break;
4281      case Sema::CXXMoveConstructor:
4282        IsConstructor = true;
4283        IsMove = true;
4284        break;
4285      case Sema::CXXCopyAssignment:
4286        IsAssignment = true;
4287        break;
4288      case Sema::CXXMoveAssignment:
4289        IsAssignment = true;
4290        IsMove = true;
4291        break;
4292      case Sema::CXXDestructor:
4293        break;
4294      case Sema::CXXInvalid:
4295        llvm_unreachable("invalid special member kind");
4296    }
4297
4298    if (MD->getNumParams()) {
4299      ConstArg = MD->getParamDecl(0)->getType().isConstQualified();
4300      VolatileArg = MD->getParamDecl(0)->getType().isVolatileQualified();
4301    }
4302  }
4303
4304  bool inUnion() const { return MD->getParent()->isUnion(); }
4305
4306  /// Look up the corresponding special member in the given class.
4307  Sema::SpecialMemberOverloadResult *lookupIn(CXXRecordDecl *Class,
4308                                              unsigned Quals) {
4309    unsigned TQ = MD->getTypeQualifiers();
4310    // cv-qualifiers on class members don't affect default ctor / dtor calls.
4311    if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
4312      Quals = 0;
4313    return S.LookupSpecialMember(Class, CSM,
4314                                 ConstArg || (Quals & Qualifiers::Const),
4315                                 VolatileArg || (Quals & Qualifiers::Volatile),
4316                                 MD->getRefQualifier() == RQ_RValue,
4317                                 TQ & Qualifiers::Const,
4318                                 TQ & Qualifiers::Volatile);
4319  }
4320
4321  typedef llvm::PointerUnion<CXXBaseSpecifier*, FieldDecl*> Subobject;
4322
4323  bool shouldDeleteForBase(CXXBaseSpecifier *Base);
4324  bool shouldDeleteForField(FieldDecl *FD);
4325  bool shouldDeleteForAllConstMembers();
4326
4327  bool shouldDeleteForClassSubobject(CXXRecordDecl *Class, Subobject Subobj,
4328                                     unsigned Quals);
4329  bool shouldDeleteForSubobjectCall(Subobject Subobj,
4330                                    Sema::SpecialMemberOverloadResult *SMOR,
4331                                    bool IsDtorCallInCtor);
4332
4333  bool isAccessible(Subobject Subobj, CXXMethodDecl *D);
4334};
4335}
4336
4337/// Is the given special member inaccessible when used on the given
4338/// sub-object.
4339bool SpecialMemberDeletionInfo::isAccessible(Subobject Subobj,
4340                                             CXXMethodDecl *target) {
4341  /// If we're operating on a base class, the object type is the
4342  /// type of this special member.
4343  QualType objectTy;
4344  AccessSpecifier access = target->getAccess();
4345  if (CXXBaseSpecifier *base = Subobj.dyn_cast<CXXBaseSpecifier*>()) {
4346    objectTy = S.Context.getTypeDeclType(MD->getParent());
4347    access = CXXRecordDecl::MergeAccess(base->getAccessSpecifier(), access);
4348
4349  // If we're operating on a field, the object type is the type of the field.
4350  } else {
4351    objectTy = S.Context.getTypeDeclType(target->getParent());
4352  }
4353
4354  return S.isSpecialMemberAccessibleForDeletion(target, access, objectTy);
4355}
4356
4357/// Check whether we should delete a special member due to the implicit
4358/// definition containing a call to a special member of a subobject.
4359bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(
4360    Subobject Subobj, Sema::SpecialMemberOverloadResult *SMOR,
4361    bool IsDtorCallInCtor) {
4362  CXXMethodDecl *Decl = SMOR->getMethod();
4363  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4364
4365  int DiagKind = -1;
4366
4367  if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::NoMemberOrDeleted)
4368    DiagKind = !Decl ? 0 : 1;
4369  else if (SMOR->getKind() == Sema::SpecialMemberOverloadResult::Ambiguous)
4370    DiagKind = 2;
4371  else if (!isAccessible(Subobj, Decl))
4372    DiagKind = 3;
4373  else if (!IsDtorCallInCtor && Field && Field->getParent()->isUnion() &&
4374           !Decl->isTrivial()) {
4375    // A member of a union must have a trivial corresponding special member.
4376    // As a weird special case, a destructor call from a union's constructor
4377    // must be accessible and non-deleted, but need not be trivial. Such a
4378    // destructor is never actually called, but is semantically checked as
4379    // if it were.
4380    DiagKind = 4;
4381  }
4382
4383  if (DiagKind == -1)
4384    return false;
4385
4386  if (Diagnose) {
4387    if (Field) {
4388      S.Diag(Field->getLocation(),
4389             diag::note_deleted_special_member_class_subobject)
4390        << CSM << MD->getParent() << /*IsField*/true
4391        << Field << DiagKind << IsDtorCallInCtor;
4392    } else {
4393      CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>();
4394      S.Diag(Base->getLocStart(),
4395             diag::note_deleted_special_member_class_subobject)
4396        << CSM << MD->getParent() << /*IsField*/false
4397        << Base->getType() << DiagKind << IsDtorCallInCtor;
4398    }
4399
4400    if (DiagKind == 1)
4401      S.NoteDeletedFunction(Decl);
4402    // FIXME: Explain inaccessibility if DiagKind == 3.
4403  }
4404
4405  return true;
4406}
4407
4408/// Check whether we should delete a special member function due to having a
4409/// direct or virtual base class or non-static data member of class type M.
4410bool SpecialMemberDeletionInfo::shouldDeleteForClassSubobject(
4411    CXXRecordDecl *Class, Subobject Subobj, unsigned Quals) {
4412  FieldDecl *Field = Subobj.dyn_cast<FieldDecl*>();
4413
4414  // C++11 [class.ctor]p5:
4415  // -- any direct or virtual base class, or non-static data member with no
4416  //    brace-or-equal-initializer, has class type M (or array thereof) and
4417  //    either M has no default constructor or overload resolution as applied
4418  //    to M's default constructor results in an ambiguity or in a function
4419  //    that is deleted or inaccessible
4420  // C++11 [class.copy]p11, C++11 [class.copy]p23:
4421  // -- a direct or virtual base class B that cannot be copied/moved because
4422  //    overload resolution, as applied to B's corresponding special member,
4423  //    results in an ambiguity or a function that is deleted or inaccessible
4424  //    from the defaulted special member
4425  // C++11 [class.dtor]p5:
4426  // -- any direct or virtual base class [...] has a type with a destructor
4427  //    that is deleted or inaccessible
4428  if (!(CSM == Sema::CXXDefaultConstructor &&
4429        Field && Field->hasInClassInitializer()) &&
4430      shouldDeleteForSubobjectCall(Subobj, lookupIn(Class, Quals), false))
4431    return true;
4432
4433  // C++11 [class.ctor]p5, C++11 [class.copy]p11:
4434  // -- any direct or virtual base class or non-static data member has a
4435  //    type with a destructor that is deleted or inaccessible
4436  if (IsConstructor) {
4437    Sema::SpecialMemberOverloadResult *SMOR =
4438        S.LookupSpecialMember(Class, Sema::CXXDestructor,
4439                              false, false, false, false, false);
4440    if (shouldDeleteForSubobjectCall(Subobj, SMOR, true))
4441      return true;
4442  }
4443
4444  return false;
4445}
4446
4447/// Check whether we should delete a special member function due to the class
4448/// having a particular direct or virtual base class.
4449bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {
4450  CXXRecordDecl *BaseClass = Base->getType()->getAsCXXRecordDecl();
4451  return shouldDeleteForClassSubobject(BaseClass, Base, 0);
4452}
4453
4454/// Check whether we should delete a special member function due to the class
4455/// having a particular non-static data member.
4456bool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {
4457  QualType FieldType = S.Context.getBaseElementType(FD->getType());
4458  CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4459
4460  if (CSM == Sema::CXXDefaultConstructor) {
4461    // For a default constructor, all references must be initialized in-class
4462    // and, if a union, it must have a non-const member.
4463    if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {
4464      if (Diagnose)
4465        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4466          << MD->getParent() << FD << FieldType << /*Reference*/0;
4467      return true;
4468    }
4469    // C++11 [class.ctor]p5: any non-variant non-static data member of
4470    // const-qualified type (or array thereof) with no
4471    // brace-or-equal-initializer does not have a user-provided default
4472    // constructor.
4473    if (!inUnion() && FieldType.isConstQualified() &&
4474        !FD->hasInClassInitializer() &&
4475        (!FieldRecord || !FieldRecord->hasUserProvidedDefaultConstructor())) {
4476      if (Diagnose)
4477        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field)
4478          << MD->getParent() << FD << FD->getType() << /*Const*/1;
4479      return true;
4480    }
4481
4482    if (inUnion() && !FieldType.isConstQualified())
4483      AllFieldsAreConst = false;
4484  } else if (CSM == Sema::CXXCopyConstructor) {
4485    // For a copy constructor, data members must not be of rvalue reference
4486    // type.
4487    if (FieldType->isRValueReferenceType()) {
4488      if (Diagnose)
4489        S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference)
4490          << MD->getParent() << FD << FieldType;
4491      return true;
4492    }
4493  } else if (IsAssignment) {
4494    // For an assignment operator, data members must not be of reference type.
4495    if (FieldType->isReferenceType()) {
4496      if (Diagnose)
4497        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4498          << IsMove << MD->getParent() << FD << FieldType << /*Reference*/0;
4499      return true;
4500    }
4501    if (!FieldRecord && FieldType.isConstQualified()) {
4502      // C++11 [class.copy]p23:
4503      // -- a non-static data member of const non-class type (or array thereof)
4504      if (Diagnose)
4505        S.Diag(FD->getLocation(), diag::note_deleted_assign_field)
4506          << IsMove << MD->getParent() << FD << FD->getType() << /*Const*/1;
4507      return true;
4508    }
4509  }
4510
4511  if (FieldRecord) {
4512    // Some additional restrictions exist on the variant members.
4513    if (!inUnion() && FieldRecord->isUnion() &&
4514        FieldRecord->isAnonymousStructOrUnion()) {
4515      bool AllVariantFieldsAreConst = true;
4516
4517      // FIXME: Handle anonymous unions declared within anonymous unions.
4518      for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4519                                         UE = FieldRecord->field_end();
4520           UI != UE; ++UI) {
4521        QualType UnionFieldType = S.Context.getBaseElementType(UI->getType());
4522
4523        if (!UnionFieldType.isConstQualified())
4524          AllVariantFieldsAreConst = false;
4525
4526        CXXRecordDecl *UnionFieldRecord = UnionFieldType->getAsCXXRecordDecl();
4527        if (UnionFieldRecord &&
4528            shouldDeleteForClassSubobject(UnionFieldRecord, *UI,
4529                                          UnionFieldType.getCVRQualifiers()))
4530          return true;
4531      }
4532
4533      // At least one member in each anonymous union must be non-const
4534      if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
4535          FieldRecord->field_begin() != FieldRecord->field_end()) {
4536        if (Diagnose)
4537          S.Diag(FieldRecord->getLocation(),
4538                 diag::note_deleted_default_ctor_all_const)
4539            << MD->getParent() << /*anonymous union*/1;
4540        return true;
4541      }
4542
4543      // Don't check the implicit member of the anonymous union type.
4544      // This is technically non-conformant, but sanity demands it.
4545      return false;
4546    }
4547
4548    if (shouldDeleteForClassSubobject(FieldRecord, FD,
4549                                      FieldType.getCVRQualifiers()))
4550      return true;
4551  }
4552
4553  return false;
4554}
4555
4556/// C++11 [class.ctor] p5:
4557///   A defaulted default constructor for a class X is defined as deleted if
4558/// X is a union and all of its variant members are of const-qualified type.
4559bool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {
4560  // This is a silly definition, because it gives an empty union a deleted
4561  // default constructor. Don't do that.
4562  if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst &&
4563      (MD->getParent()->field_begin() != MD->getParent()->field_end())) {
4564    if (Diagnose)
4565      S.Diag(MD->getParent()->getLocation(),
4566             diag::note_deleted_default_ctor_all_const)
4567        << MD->getParent() << /*not anonymous union*/0;
4568    return true;
4569  }
4570  return false;
4571}
4572
4573/// Determine whether a defaulted special member function should be defined as
4574/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,
4575/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.
4576bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
4577                                     bool Diagnose) {
4578  if (MD->isInvalidDecl())
4579    return false;
4580  CXXRecordDecl *RD = MD->getParent();
4581  assert(!RD->isDependentType() && "do deletion after instantiation");
4582  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
4583    return false;
4584
4585  // C++11 [expr.lambda.prim]p19:
4586  //   The closure type associated with a lambda-expression has a
4587  //   deleted (8.4.3) default constructor and a deleted copy
4588  //   assignment operator.
4589  if (RD->isLambda() &&
4590      (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
4591    if (Diagnose)
4592      Diag(RD->getLocation(), diag::note_lambda_decl);
4593    return true;
4594  }
4595
4596  // For an anonymous struct or union, the copy and assignment special members
4597  // will never be used, so skip the check. For an anonymous union declared at
4598  // namespace scope, the constructor and destructor are used.
4599  if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
4600      RD->isAnonymousStructOrUnion())
4601    return false;
4602
4603  // C++11 [class.copy]p7, p18:
4604  //   If the class definition declares a move constructor or move assignment
4605  //   operator, an implicitly declared copy constructor or copy assignment
4606  //   operator is defined as deleted.
4607  if (MD->isImplicit() &&
4608      (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
4609    CXXMethodDecl *UserDeclaredMove = 0;
4610
4611    // In Microsoft mode, a user-declared move only causes the deletion of the
4612    // corresponding copy operation, not both copy operations.
4613    if (RD->hasUserDeclaredMoveConstructor() &&
4614        (!getLangOpts().MicrosoftMode || CSM == CXXCopyConstructor)) {
4615      if (!Diagnose) return true;
4616      UserDeclaredMove = RD->getMoveConstructor();
4617      assert(UserDeclaredMove);
4618    } else if (RD->hasUserDeclaredMoveAssignment() &&
4619               (!getLangOpts().MicrosoftMode || CSM == CXXCopyAssignment)) {
4620      if (!Diagnose) return true;
4621      UserDeclaredMove = RD->getMoveAssignmentOperator();
4622      assert(UserDeclaredMove);
4623    }
4624
4625    if (UserDeclaredMove) {
4626      Diag(UserDeclaredMove->getLocation(),
4627           diag::note_deleted_copy_user_declared_move)
4628        << (CSM == CXXCopyAssignment) << RD
4629        << UserDeclaredMove->isMoveAssignmentOperator();
4630      return true;
4631    }
4632  }
4633
4634  // Do access control from the special member function
4635  ContextRAII MethodContext(*this, MD);
4636
4637  // C++11 [class.dtor]p5:
4638  // -- for a virtual destructor, lookup of the non-array deallocation function
4639  //    results in an ambiguity or in a function that is deleted or inaccessible
4640  if (CSM == CXXDestructor && MD->isVirtual()) {
4641    FunctionDecl *OperatorDelete = 0;
4642    DeclarationName Name =
4643      Context.DeclarationNames.getCXXOperatorName(OO_Delete);
4644    if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name,
4645                                 OperatorDelete, false)) {
4646      if (Diagnose)
4647        Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);
4648      return true;
4649    }
4650  }
4651
4652  SpecialMemberDeletionInfo SMI(*this, MD, CSM, Diagnose);
4653
4654  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
4655                                          BE = RD->bases_end(); BI != BE; ++BI)
4656    if (!BI->isVirtual() &&
4657        SMI.shouldDeleteForBase(BI))
4658      return true;
4659
4660  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
4661                                          BE = RD->vbases_end(); BI != BE; ++BI)
4662    if (SMI.shouldDeleteForBase(BI))
4663      return true;
4664
4665  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
4666                                     FE = RD->field_end(); FI != FE; ++FI)
4667    if (!FI->isInvalidDecl() && !FI->isUnnamedBitfield() &&
4668        SMI.shouldDeleteForField(*FI))
4669      return true;
4670
4671  if (SMI.shouldDeleteForAllConstMembers())
4672    return true;
4673
4674  return false;
4675}
4676
4677/// \brief Data used with FindHiddenVirtualMethod
4678namespace {
4679  struct FindHiddenVirtualMethodData {
4680    Sema *S;
4681    CXXMethodDecl *Method;
4682    llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
4683    SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
4684  };
4685}
4686
4687/// \brief Member lookup function that determines whether a given C++
4688/// method overloads virtual methods in a base class without overriding any,
4689/// to be used with CXXRecordDecl::lookupInBases().
4690static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
4691                                    CXXBasePath &Path,
4692                                    void *UserData) {
4693  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
4694
4695  FindHiddenVirtualMethodData &Data
4696    = *static_cast<FindHiddenVirtualMethodData*>(UserData);
4697
4698  DeclarationName Name = Data.Method->getDeclName();
4699  assert(Name.getNameKind() == DeclarationName::Identifier);
4700
4701  bool foundSameNameMethod = false;
4702  SmallVector<CXXMethodDecl *, 8> overloadedMethods;
4703  for (Path.Decls = BaseRecord->lookup(Name);
4704       Path.Decls.first != Path.Decls.second;
4705       ++Path.Decls.first) {
4706    NamedDecl *D = *Path.Decls.first;
4707    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
4708      MD = MD->getCanonicalDecl();
4709      foundSameNameMethod = true;
4710      // Interested only in hidden virtual methods.
4711      if (!MD->isVirtual())
4712        continue;
4713      // If the method we are checking overrides a method from its base
4714      // don't warn about the other overloaded methods.
4715      if (!Data.S->IsOverload(Data.Method, MD, false))
4716        return true;
4717      // Collect the overload only if its hidden.
4718      if (!Data.OverridenAndUsingBaseMethods.count(MD))
4719        overloadedMethods.push_back(MD);
4720    }
4721  }
4722
4723  if (foundSameNameMethod)
4724    Data.OverloadedMethods.append(overloadedMethods.begin(),
4725                                   overloadedMethods.end());
4726  return foundSameNameMethod;
4727}
4728
4729/// \brief See if a method overloads virtual methods in a base class without
4730/// overriding any.
4731void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
4732  if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
4733                               MD->getLocation()) == DiagnosticsEngine::Ignored)
4734    return;
4735  if (!MD->getDeclName().isIdentifier())
4736    return;
4737
4738  CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
4739                     /*bool RecordPaths=*/false,
4740                     /*bool DetectVirtual=*/false);
4741  FindHiddenVirtualMethodData Data;
4742  Data.Method = MD;
4743  Data.S = this;
4744
4745  // Keep the base methods that were overriden or introduced in the subclass
4746  // by 'using' in a set. A base method not in this set is hidden.
4747  for (DeclContext::lookup_result res = DC->lookup(MD->getDeclName());
4748       res.first != res.second; ++res.first) {
4749    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*res.first))
4750      for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
4751                                          E = MD->end_overridden_methods();
4752           I != E; ++I)
4753        Data.OverridenAndUsingBaseMethods.insert((*I)->getCanonicalDecl());
4754    if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*res.first))
4755      if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(shad->getTargetDecl()))
4756        Data.OverridenAndUsingBaseMethods.insert(MD->getCanonicalDecl());
4757  }
4758
4759  if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
4760      !Data.OverloadedMethods.empty()) {
4761    Diag(MD->getLocation(), diag::warn_overloaded_virtual)
4762      << MD << (Data.OverloadedMethods.size() > 1);
4763
4764    for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
4765      CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
4766      Diag(overloadedMD->getLocation(),
4767           diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
4768    }
4769  }
4770}
4771
4772void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
4773                                             Decl *TagDecl,
4774                                             SourceLocation LBrac,
4775                                             SourceLocation RBrac,
4776                                             AttributeList *AttrList) {
4777  if (!TagDecl)
4778    return;
4779
4780  AdjustDeclIfTemplate(TagDecl);
4781
4782  for (const AttributeList* l = AttrList; l; l = l->getNext()) {
4783    if (l->getKind() != AttributeList::AT_Visibility)
4784      continue;
4785    l->setInvalid();
4786    Diag(l->getLoc(), diag::warn_attribute_after_definition_ignored) <<
4787      l->getName();
4788  }
4789
4790  ActOnFields(S, RLoc, TagDecl, llvm::makeArrayRef(
4791              // strict aliasing violation!
4792              reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
4793              FieldCollector->getCurNumFields()), LBrac, RBrac, AttrList);
4794
4795  CheckCompletedCXXClass(
4796                        dyn_cast_or_null<CXXRecordDecl>(TagDecl));
4797}
4798
4799/// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
4800/// special functions, such as the default constructor, copy
4801/// constructor, or destructor, to the given C++ class (C++
4802/// [special]p1).  This routine can only be executed just before the
4803/// definition of the class is complete.
4804void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
4805  if (!ClassDecl->hasUserDeclaredConstructor())
4806    ++ASTContext::NumImplicitDefaultConstructors;
4807
4808  if (!ClassDecl->hasUserDeclaredCopyConstructor())
4809    ++ASTContext::NumImplicitCopyConstructors;
4810
4811  if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveConstructor())
4812    ++ASTContext::NumImplicitMoveConstructors;
4813
4814  if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
4815    ++ASTContext::NumImplicitCopyAssignmentOperators;
4816
4817    // If we have a dynamic class, then the copy assignment operator may be
4818    // virtual, so we have to declare it immediately. This ensures that, e.g.,
4819    // it shows up in the right place in the vtable and that we diagnose
4820    // problems with the implicit exception specification.
4821    if (ClassDecl->isDynamicClass())
4822      DeclareImplicitCopyAssignment(ClassDecl);
4823  }
4824
4825  if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveAssignment()) {
4826    ++ASTContext::NumImplicitMoveAssignmentOperators;
4827
4828    // Likewise for the move assignment operator.
4829    if (ClassDecl->isDynamicClass())
4830      DeclareImplicitMoveAssignment(ClassDecl);
4831  }
4832
4833  if (!ClassDecl->hasUserDeclaredDestructor()) {
4834    ++ASTContext::NumImplicitDestructors;
4835
4836    // If we have a dynamic class, then the destructor may be virtual, so we
4837    // have to declare the destructor immediately. This ensures that, e.g., it
4838    // shows up in the right place in the vtable and that we diagnose problems
4839    // with the implicit exception specification.
4840    if (ClassDecl->isDynamicClass())
4841      DeclareImplicitDestructor(ClassDecl);
4842  }
4843}
4844
4845void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
4846  if (!D)
4847    return;
4848
4849  int NumParamList = D->getNumTemplateParameterLists();
4850  for (int i = 0; i < NumParamList; i++) {
4851    TemplateParameterList* Params = D->getTemplateParameterList(i);
4852    for (TemplateParameterList::iterator Param = Params->begin(),
4853                                      ParamEnd = Params->end();
4854          Param != ParamEnd; ++Param) {
4855      NamedDecl *Named = cast<NamedDecl>(*Param);
4856      if (Named->getDeclName()) {
4857        S->AddDecl(Named);
4858        IdResolver.AddDecl(Named);
4859      }
4860    }
4861  }
4862}
4863
4864void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
4865  if (!D)
4866    return;
4867
4868  TemplateParameterList *Params = 0;
4869  if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
4870    Params = Template->getTemplateParameters();
4871  else if (ClassTemplatePartialSpecializationDecl *PartialSpec
4872           = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
4873    Params = PartialSpec->getTemplateParameters();
4874  else
4875    return;
4876
4877  for (TemplateParameterList::iterator Param = Params->begin(),
4878                                    ParamEnd = Params->end();
4879       Param != ParamEnd; ++Param) {
4880    NamedDecl *Named = cast<NamedDecl>(*Param);
4881    if (Named->getDeclName()) {
4882      S->AddDecl(Named);
4883      IdResolver.AddDecl(Named);
4884    }
4885  }
4886}
4887
4888void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
4889  if (!RecordD) return;
4890  AdjustDeclIfTemplate(RecordD);
4891  CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
4892  PushDeclContext(S, Record);
4893}
4894
4895void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
4896  if (!RecordD) return;
4897  PopDeclContext();
4898}
4899
4900/// ActOnStartDelayedCXXMethodDeclaration - We have completed
4901/// parsing a top-level (non-nested) C++ class, and we are now
4902/// parsing those parts of the given Method declaration that could
4903/// not be parsed earlier (C++ [class.mem]p2), such as default
4904/// arguments. This action should enter the scope of the given
4905/// Method declaration as if we had just parsed the qualified method
4906/// name. However, it should not bring the parameters into scope;
4907/// that will be performed by ActOnDelayedCXXMethodParameter.
4908void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
4909}
4910
4911/// ActOnDelayedCXXMethodParameter - We've already started a delayed
4912/// C++ method declaration. We're (re-)introducing the given
4913/// function parameter into scope for use in parsing later parts of
4914/// the method declaration. For example, we could see an
4915/// ActOnParamDefaultArgument event for this parameter.
4916void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
4917  if (!ParamD)
4918    return;
4919
4920  ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
4921
4922  // If this parameter has an unparsed default argument, clear it out
4923  // to make way for the parsed default argument.
4924  if (Param->hasUnparsedDefaultArg())
4925    Param->setDefaultArg(0);
4926
4927  S->AddDecl(Param);
4928  if (Param->getDeclName())
4929    IdResolver.AddDecl(Param);
4930}
4931
4932/// ActOnFinishDelayedCXXMethodDeclaration - We have finished
4933/// processing the delayed method declaration for Method. The method
4934/// declaration is now considered finished. There may be a separate
4935/// ActOnStartOfFunctionDef action later (not necessarily
4936/// immediately!) for this method, if it was also defined inside the
4937/// class body.
4938void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
4939  if (!MethodD)
4940    return;
4941
4942  AdjustDeclIfTemplate(MethodD);
4943
4944  FunctionDecl *Method = cast<FunctionDecl>(MethodD);
4945
4946  // Now that we have our default arguments, check the constructor
4947  // again. It could produce additional diagnostics or affect whether
4948  // the class has implicitly-declared destructors, among other
4949  // things.
4950  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
4951    CheckConstructor(Constructor);
4952
4953  // Check the default arguments, which we may have added.
4954  if (!Method->isInvalidDecl())
4955    CheckCXXDefaultArguments(Method);
4956}
4957
4958/// CheckConstructorDeclarator - Called by ActOnDeclarator to check
4959/// the well-formedness of the constructor declarator @p D with type @p
4960/// R. If there are any errors in the declarator, this routine will
4961/// emit diagnostics and set the invalid bit to true.  In any case, the type
4962/// will be updated to reflect a well-formed type for the constructor and
4963/// returned.
4964QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
4965                                          StorageClass &SC) {
4966  bool isVirtual = D.getDeclSpec().isVirtualSpecified();
4967
4968  // C++ [class.ctor]p3:
4969  //   A constructor shall not be virtual (10.3) or static (9.4). A
4970  //   constructor can be invoked for a const, volatile or const
4971  //   volatile object. A constructor shall not be declared const,
4972  //   volatile, or const volatile (9.3.2).
4973  if (isVirtual) {
4974    if (!D.isInvalidType())
4975      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
4976        << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
4977        << SourceRange(D.getIdentifierLoc());
4978    D.setInvalidType();
4979  }
4980  if (SC == SC_Static) {
4981    if (!D.isInvalidType())
4982      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
4983        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
4984        << SourceRange(D.getIdentifierLoc());
4985    D.setInvalidType();
4986    SC = SC_None;
4987  }
4988
4989  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
4990  if (FTI.TypeQuals != 0) {
4991    if (FTI.TypeQuals & Qualifiers::Const)
4992      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4993        << "const" << SourceRange(D.getIdentifierLoc());
4994    if (FTI.TypeQuals & Qualifiers::Volatile)
4995      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4996        << "volatile" << SourceRange(D.getIdentifierLoc());
4997    if (FTI.TypeQuals & Qualifiers::Restrict)
4998      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4999        << "restrict" << SourceRange(D.getIdentifierLoc());
5000    D.setInvalidType();
5001  }
5002
5003  // C++0x [class.ctor]p4:
5004  //   A constructor shall not be declared with a ref-qualifier.
5005  if (FTI.hasRefQualifier()) {
5006    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
5007      << FTI.RefQualifierIsLValueRef
5008      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5009    D.setInvalidType();
5010  }
5011
5012  // Rebuild the function type "R" without any type qualifiers (in
5013  // case any of the errors above fired) and with "void" as the
5014  // return type, since constructors don't have return types.
5015  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5016  if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
5017    return R;
5018
5019  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
5020  EPI.TypeQuals = 0;
5021  EPI.RefQualifier = RQ_None;
5022
5023  return Context.getFunctionType(Context.VoidTy, Proto->arg_type_begin(),
5024                                 Proto->getNumArgs(), EPI);
5025}
5026
5027/// CheckConstructor - Checks a fully-formed constructor for
5028/// well-formedness, issuing any diagnostics required. Returns true if
5029/// the constructor declarator is invalid.
5030void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
5031  CXXRecordDecl *ClassDecl
5032    = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
5033  if (!ClassDecl)
5034    return Constructor->setInvalidDecl();
5035
5036  // C++ [class.copy]p3:
5037  //   A declaration of a constructor for a class X is ill-formed if
5038  //   its first parameter is of type (optionally cv-qualified) X and
5039  //   either there are no other parameters or else all other
5040  //   parameters have default arguments.
5041  if (!Constructor->isInvalidDecl() &&
5042      ((Constructor->getNumParams() == 1) ||
5043       (Constructor->getNumParams() > 1 &&
5044        Constructor->getParamDecl(1)->hasDefaultArg())) &&
5045      Constructor->getTemplateSpecializationKind()
5046                                              != TSK_ImplicitInstantiation) {
5047    QualType ParamType = Constructor->getParamDecl(0)->getType();
5048    QualType ClassTy = Context.getTagDeclType(ClassDecl);
5049    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
5050      SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
5051      const char *ConstRef
5052        = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
5053                                                        : " const &";
5054      Diag(ParamLoc, diag::err_constructor_byvalue_arg)
5055        << FixItHint::CreateInsertion(ParamLoc, ConstRef);
5056
5057      // FIXME: Rather that making the constructor invalid, we should endeavor
5058      // to fix the type.
5059      Constructor->setInvalidDecl();
5060    }
5061  }
5062}
5063
5064/// CheckDestructor - Checks a fully-formed destructor definition for
5065/// well-formedness, issuing any diagnostics required.  Returns true
5066/// on error.
5067bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
5068  CXXRecordDecl *RD = Destructor->getParent();
5069
5070  if (Destructor->isVirtual()) {
5071    SourceLocation Loc;
5072
5073    if (!Destructor->isImplicit())
5074      Loc = Destructor->getLocation();
5075    else
5076      Loc = RD->getLocation();
5077
5078    // If we have a virtual destructor, look up the deallocation function
5079    FunctionDecl *OperatorDelete = 0;
5080    DeclarationName Name =
5081    Context.DeclarationNames.getCXXOperatorName(OO_Delete);
5082    if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
5083      return true;
5084
5085    MarkFunctionReferenced(Loc, OperatorDelete);
5086
5087    Destructor->setOperatorDelete(OperatorDelete);
5088  }
5089
5090  return false;
5091}
5092
5093static inline bool
5094FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
5095  return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
5096          FTI.ArgInfo[0].Param &&
5097          cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
5098}
5099
5100/// CheckDestructorDeclarator - Called by ActOnDeclarator to check
5101/// the well-formednes of the destructor declarator @p D with type @p
5102/// R. If there are any errors in the declarator, this routine will
5103/// emit diagnostics and set the declarator to invalid.  Even if this happens,
5104/// will be updated to reflect a well-formed type for the destructor and
5105/// returned.
5106QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
5107                                         StorageClass& SC) {
5108  // C++ [class.dtor]p1:
5109  //   [...] A typedef-name that names a class is a class-name
5110  //   (7.1.3); however, a typedef-name that names a class shall not
5111  //   be used as the identifier in the declarator for a destructor
5112  //   declaration.
5113  QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
5114  if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
5115    Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5116      << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
5117  else if (const TemplateSpecializationType *TST =
5118             DeclaratorType->getAs<TemplateSpecializationType>())
5119    if (TST->isTypeAlias())
5120      Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
5121        << DeclaratorType << 1;
5122
5123  // C++ [class.dtor]p2:
5124  //   A destructor is used to destroy objects of its class type. A
5125  //   destructor takes no parameters, and no return type can be
5126  //   specified for it (not even void). The address of a destructor
5127  //   shall not be taken. A destructor shall not be static. A
5128  //   destructor can be invoked for a const, volatile or const
5129  //   volatile object. A destructor shall not be declared const,
5130  //   volatile or const volatile (9.3.2).
5131  if (SC == SC_Static) {
5132    if (!D.isInvalidType())
5133      Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
5134        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5135        << SourceRange(D.getIdentifierLoc())
5136        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
5137
5138    SC = SC_None;
5139  }
5140  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
5141    // Destructors don't have return types, but the parser will
5142    // happily parse something like:
5143    //
5144    //   class X {
5145    //     float ~X();
5146    //   };
5147    //
5148    // The return type will be eliminated later.
5149    Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
5150      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5151      << SourceRange(D.getIdentifierLoc());
5152  }
5153
5154  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
5155  if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
5156    if (FTI.TypeQuals & Qualifiers::Const)
5157      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5158        << "const" << SourceRange(D.getIdentifierLoc());
5159    if (FTI.TypeQuals & Qualifiers::Volatile)
5160      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5161        << "volatile" << SourceRange(D.getIdentifierLoc());
5162    if (FTI.TypeQuals & Qualifiers::Restrict)
5163      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
5164        << "restrict" << SourceRange(D.getIdentifierLoc());
5165    D.setInvalidType();
5166  }
5167
5168  // C++0x [class.dtor]p2:
5169  //   A destructor shall not be declared with a ref-qualifier.
5170  if (FTI.hasRefQualifier()) {
5171    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
5172      << FTI.RefQualifierIsLValueRef
5173      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
5174    D.setInvalidType();
5175  }
5176
5177  // Make sure we don't have any parameters.
5178  if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
5179    Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
5180
5181    // Delete the parameters.
5182    FTI.freeArgs();
5183    D.setInvalidType();
5184  }
5185
5186  // Make sure the destructor isn't variadic.
5187  if (FTI.isVariadic) {
5188    Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
5189    D.setInvalidType();
5190  }
5191
5192  // Rebuild the function type "R" without any type qualifiers or
5193  // parameters (in case any of the errors above fired) and with
5194  // "void" as the return type, since destructors don't have return
5195  // types.
5196  if (!D.isInvalidType())
5197    return R;
5198
5199  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5200  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
5201  EPI.Variadic = false;
5202  EPI.TypeQuals = 0;
5203  EPI.RefQualifier = RQ_None;
5204  return Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
5205}
5206
5207/// CheckConversionDeclarator - Called by ActOnDeclarator to check the
5208/// well-formednes of the conversion function declarator @p D with
5209/// type @p R. If there are any errors in the declarator, this routine
5210/// will emit diagnostics and return true. Otherwise, it will return
5211/// false. Either way, the type @p R will be updated to reflect a
5212/// well-formed type for the conversion operator.
5213void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
5214                                     StorageClass& SC) {
5215  // C++ [class.conv.fct]p1:
5216  //   Neither parameter types nor return type can be specified. The
5217  //   type of a conversion function (8.3.5) is "function taking no
5218  //   parameter returning conversion-type-id."
5219  if (SC == SC_Static) {
5220    if (!D.isInvalidType())
5221      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
5222        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5223        << SourceRange(D.getIdentifierLoc());
5224    D.setInvalidType();
5225    SC = SC_None;
5226  }
5227
5228  QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
5229
5230  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
5231    // Conversion functions don't have return types, but the parser will
5232    // happily parse something like:
5233    //
5234    //   class X {
5235    //     float operator bool();
5236    //   };
5237    //
5238    // The return type will be changed later anyway.
5239    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
5240      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5241      << SourceRange(D.getIdentifierLoc());
5242    D.setInvalidType();
5243  }
5244
5245  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5246
5247  // Make sure we don't have any parameters.
5248  if (Proto->getNumArgs() > 0) {
5249    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
5250
5251    // Delete the parameters.
5252    D.getFunctionTypeInfo().freeArgs();
5253    D.setInvalidType();
5254  } else if (Proto->isVariadic()) {
5255    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
5256    D.setInvalidType();
5257  }
5258
5259  // Diagnose "&operator bool()" and other such nonsense.  This
5260  // is actually a gcc extension which we don't support.
5261  if (Proto->getResultType() != ConvType) {
5262    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
5263      << Proto->getResultType();
5264    D.setInvalidType();
5265    ConvType = Proto->getResultType();
5266  }
5267
5268  // C++ [class.conv.fct]p4:
5269  //   The conversion-type-id shall not represent a function type nor
5270  //   an array type.
5271  if (ConvType->isArrayType()) {
5272    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
5273    ConvType = Context.getPointerType(ConvType);
5274    D.setInvalidType();
5275  } else if (ConvType->isFunctionType()) {
5276    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
5277    ConvType = Context.getPointerType(ConvType);
5278    D.setInvalidType();
5279  }
5280
5281  // Rebuild the function type "R" without any parameters (in case any
5282  // of the errors above fired) and with the conversion type as the
5283  // return type.
5284  if (D.isInvalidType())
5285    R = Context.getFunctionType(ConvType, 0, 0, Proto->getExtProtoInfo());
5286
5287  // C++0x explicit conversion operators.
5288  if (D.getDeclSpec().isExplicitSpecified())
5289    Diag(D.getDeclSpec().getExplicitSpecLoc(),
5290         getLangOpts().CPlusPlus0x ?
5291           diag::warn_cxx98_compat_explicit_conversion_functions :
5292           diag::ext_explicit_conversion_functions)
5293      << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
5294}
5295
5296/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
5297/// the declaration of the given C++ conversion function. This routine
5298/// is responsible for recording the conversion function in the C++
5299/// class, if possible.
5300Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
5301  assert(Conversion && "Expected to receive a conversion function declaration");
5302
5303  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
5304
5305  // Make sure we aren't redeclaring the conversion function.
5306  QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
5307
5308  // C++ [class.conv.fct]p1:
5309  //   [...] A conversion function is never used to convert a
5310  //   (possibly cv-qualified) object to the (possibly cv-qualified)
5311  //   same object type (or a reference to it), to a (possibly
5312  //   cv-qualified) base class of that type (or a reference to it),
5313  //   or to (possibly cv-qualified) void.
5314  // FIXME: Suppress this warning if the conversion function ends up being a
5315  // virtual function that overrides a virtual function in a base class.
5316  QualType ClassType
5317    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
5318  if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
5319    ConvType = ConvTypeRef->getPointeeType();
5320  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
5321      Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
5322    /* Suppress diagnostics for instantiations. */;
5323  else if (ConvType->isRecordType()) {
5324    ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
5325    if (ConvType == ClassType)
5326      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
5327        << ClassType;
5328    else if (IsDerivedFrom(ClassType, ConvType))
5329      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
5330        <<  ClassType << ConvType;
5331  } else if (ConvType->isVoidType()) {
5332    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
5333      << ClassType << ConvType;
5334  }
5335
5336  if (FunctionTemplateDecl *ConversionTemplate
5337                                = Conversion->getDescribedFunctionTemplate())
5338    return ConversionTemplate;
5339
5340  return Conversion;
5341}
5342
5343//===----------------------------------------------------------------------===//
5344// Namespace Handling
5345//===----------------------------------------------------------------------===//
5346
5347
5348
5349/// ActOnStartNamespaceDef - This is called at the start of a namespace
5350/// definition.
5351Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
5352                                   SourceLocation InlineLoc,
5353                                   SourceLocation NamespaceLoc,
5354                                   SourceLocation IdentLoc,
5355                                   IdentifierInfo *II,
5356                                   SourceLocation LBrace,
5357                                   AttributeList *AttrList) {
5358  SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
5359  // For anonymous namespace, take the location of the left brace.
5360  SourceLocation Loc = II ? IdentLoc : LBrace;
5361  bool IsInline = InlineLoc.isValid();
5362  bool IsInvalid = false;
5363  bool IsStd = false;
5364  bool AddToKnown = false;
5365  Scope *DeclRegionScope = NamespcScope->getParent();
5366
5367  NamespaceDecl *PrevNS = 0;
5368  if (II) {
5369    // C++ [namespace.def]p2:
5370    //   The identifier in an original-namespace-definition shall not
5371    //   have been previously defined in the declarative region in
5372    //   which the original-namespace-definition appears. The
5373    //   identifier in an original-namespace-definition is the name of
5374    //   the namespace. Subsequently in that declarative region, it is
5375    //   treated as an original-namespace-name.
5376    //
5377    // Since namespace names are unique in their scope, and we don't
5378    // look through using directives, just look for any ordinary names.
5379
5380    const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
5381    Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
5382    Decl::IDNS_Namespace;
5383    NamedDecl *PrevDecl = 0;
5384    for (DeclContext::lookup_result R
5385         = CurContext->getRedeclContext()->lookup(II);
5386         R.first != R.second; ++R.first) {
5387      if ((*R.first)->getIdentifierNamespace() & IDNS) {
5388        PrevDecl = *R.first;
5389        break;
5390      }
5391    }
5392
5393    PrevNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl);
5394
5395    if (PrevNS) {
5396      // This is an extended namespace definition.
5397      if (IsInline != PrevNS->isInline()) {
5398        // inline-ness must match
5399        if (PrevNS->isInline()) {
5400          // The user probably just forgot the 'inline', so suggest that it
5401          // be added back.
5402          Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
5403            << FixItHint::CreateInsertion(NamespaceLoc, "inline ");
5404        } else {
5405          Diag(Loc, diag::err_inline_namespace_mismatch)
5406            << IsInline;
5407        }
5408        Diag(PrevNS->getLocation(), diag::note_previous_definition);
5409
5410        IsInline = PrevNS->isInline();
5411      }
5412    } else if (PrevDecl) {
5413      // This is an invalid name redefinition.
5414      Diag(Loc, diag::err_redefinition_different_kind)
5415        << II;
5416      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
5417      IsInvalid = true;
5418      // Continue on to push Namespc as current DeclContext and return it.
5419    } else if (II->isStr("std") &&
5420               CurContext->getRedeclContext()->isTranslationUnit()) {
5421      // This is the first "real" definition of the namespace "std", so update
5422      // our cache of the "std" namespace to point at this definition.
5423      PrevNS = getStdNamespace();
5424      IsStd = true;
5425      AddToKnown = !IsInline;
5426    } else {
5427      // We've seen this namespace for the first time.
5428      AddToKnown = !IsInline;
5429    }
5430  } else {
5431    // Anonymous namespaces.
5432
5433    // Determine whether the parent already has an anonymous namespace.
5434    DeclContext *Parent = CurContext->getRedeclContext();
5435    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
5436      PrevNS = TU->getAnonymousNamespace();
5437    } else {
5438      NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
5439      PrevNS = ND->getAnonymousNamespace();
5440    }
5441
5442    if (PrevNS && IsInline != PrevNS->isInline()) {
5443      // inline-ness must match
5444      Diag(Loc, diag::err_inline_namespace_mismatch)
5445        << IsInline;
5446      Diag(PrevNS->getLocation(), diag::note_previous_definition);
5447
5448      // Recover by ignoring the new namespace's inline status.
5449      IsInline = PrevNS->isInline();
5450    }
5451  }
5452
5453  NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext, IsInline,
5454                                                 StartLoc, Loc, II, PrevNS);
5455  if (IsInvalid)
5456    Namespc->setInvalidDecl();
5457
5458  ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
5459
5460  // FIXME: Should we be merging attributes?
5461  if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
5462    PushNamespaceVisibilityAttr(Attr, Loc);
5463
5464  if (IsStd)
5465    StdNamespace = Namespc;
5466  if (AddToKnown)
5467    KnownNamespaces[Namespc] = false;
5468
5469  if (II) {
5470    PushOnScopeChains(Namespc, DeclRegionScope);
5471  } else {
5472    // Link the anonymous namespace into its parent.
5473    DeclContext *Parent = CurContext->getRedeclContext();
5474    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
5475      TU->setAnonymousNamespace(Namespc);
5476    } else {
5477      cast<NamespaceDecl>(Parent)->setAnonymousNamespace(Namespc);
5478    }
5479
5480    CurContext->addDecl(Namespc);
5481
5482    // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
5483    //   behaves as if it were replaced by
5484    //     namespace unique { /* empty body */ }
5485    //     using namespace unique;
5486    //     namespace unique { namespace-body }
5487    //   where all occurrences of 'unique' in a translation unit are
5488    //   replaced by the same identifier and this identifier differs
5489    //   from all other identifiers in the entire program.
5490
5491    // We just create the namespace with an empty name and then add an
5492    // implicit using declaration, just like the standard suggests.
5493    //
5494    // CodeGen enforces the "universally unique" aspect by giving all
5495    // declarations semantically contained within an anonymous
5496    // namespace internal linkage.
5497
5498    if (!PrevNS) {
5499      UsingDirectiveDecl* UD
5500        = UsingDirectiveDecl::Create(Context, CurContext,
5501                                     /* 'using' */ LBrace,
5502                                     /* 'namespace' */ SourceLocation(),
5503                                     /* qualifier */ NestedNameSpecifierLoc(),
5504                                     /* identifier */ SourceLocation(),
5505                                     Namespc,
5506                                     /* Ancestor */ CurContext);
5507      UD->setImplicit();
5508      CurContext->addDecl(UD);
5509    }
5510  }
5511
5512  ActOnDocumentableDecl(Namespc);
5513
5514  // Although we could have an invalid decl (i.e. the namespace name is a
5515  // redefinition), push it as current DeclContext and try to continue parsing.
5516  // FIXME: We should be able to push Namespc here, so that the each DeclContext
5517  // for the namespace has the declarations that showed up in that particular
5518  // namespace definition.
5519  PushDeclContext(NamespcScope, Namespc);
5520  return Namespc;
5521}
5522
5523/// getNamespaceDecl - Returns the namespace a decl represents. If the decl
5524/// is a namespace alias, returns the namespace it points to.
5525static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
5526  if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
5527    return AD->getNamespace();
5528  return dyn_cast_or_null<NamespaceDecl>(D);
5529}
5530
5531/// ActOnFinishNamespaceDef - This callback is called after a namespace is
5532/// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
5533void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
5534  NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
5535  assert(Namespc && "Invalid parameter, expected NamespaceDecl");
5536  Namespc->setRBraceLoc(RBrace);
5537  PopDeclContext();
5538  if (Namespc->hasAttr<VisibilityAttr>())
5539    PopPragmaVisibility(true, RBrace);
5540}
5541
5542CXXRecordDecl *Sema::getStdBadAlloc() const {
5543  return cast_or_null<CXXRecordDecl>(
5544                                  StdBadAlloc.get(Context.getExternalSource()));
5545}
5546
5547NamespaceDecl *Sema::getStdNamespace() const {
5548  return cast_or_null<NamespaceDecl>(
5549                                 StdNamespace.get(Context.getExternalSource()));
5550}
5551
5552/// \brief Retrieve the special "std" namespace, which may require us to
5553/// implicitly define the namespace.
5554NamespaceDecl *Sema::getOrCreateStdNamespace() {
5555  if (!StdNamespace) {
5556    // The "std" namespace has not yet been defined, so build one implicitly.
5557    StdNamespace = NamespaceDecl::Create(Context,
5558                                         Context.getTranslationUnitDecl(),
5559                                         /*Inline=*/false,
5560                                         SourceLocation(), SourceLocation(),
5561                                         &PP.getIdentifierTable().get("std"),
5562                                         /*PrevDecl=*/0);
5563    getStdNamespace()->setImplicit(true);
5564  }
5565
5566  return getStdNamespace();
5567}
5568
5569bool Sema::isStdInitializerList(QualType Ty, QualType *Element) {
5570  assert(getLangOpts().CPlusPlus &&
5571         "Looking for std::initializer_list outside of C++.");
5572
5573  // We're looking for implicit instantiations of
5574  // template <typename E> class std::initializer_list.
5575
5576  if (!StdNamespace) // If we haven't seen namespace std yet, this can't be it.
5577    return false;
5578
5579  ClassTemplateDecl *Template = 0;
5580  const TemplateArgument *Arguments = 0;
5581
5582  if (const RecordType *RT = Ty->getAs<RecordType>()) {
5583
5584    ClassTemplateSpecializationDecl *Specialization =
5585        dyn_cast<ClassTemplateSpecializationDecl>(RT->getDecl());
5586    if (!Specialization)
5587      return false;
5588
5589    Template = Specialization->getSpecializedTemplate();
5590    Arguments = Specialization->getTemplateArgs().data();
5591  } else if (const TemplateSpecializationType *TST =
5592                 Ty->getAs<TemplateSpecializationType>()) {
5593    Template = dyn_cast_or_null<ClassTemplateDecl>(
5594        TST->getTemplateName().getAsTemplateDecl());
5595    Arguments = TST->getArgs();
5596  }
5597  if (!Template)
5598    return false;
5599
5600  if (!StdInitializerList) {
5601    // Haven't recognized std::initializer_list yet, maybe this is it.
5602    CXXRecordDecl *TemplateClass = Template->getTemplatedDecl();
5603    if (TemplateClass->getIdentifier() !=
5604            &PP.getIdentifierTable().get("initializer_list") ||
5605        !getStdNamespace()->InEnclosingNamespaceSetOf(
5606            TemplateClass->getDeclContext()))
5607      return false;
5608    // This is a template called std::initializer_list, but is it the right
5609    // template?
5610    TemplateParameterList *Params = Template->getTemplateParameters();
5611    if (Params->getMinRequiredArguments() != 1)
5612      return false;
5613    if (!isa<TemplateTypeParmDecl>(Params->getParam(0)))
5614      return false;
5615
5616    // It's the right template.
5617    StdInitializerList = Template;
5618  }
5619
5620  if (Template != StdInitializerList)
5621    return false;
5622
5623  // This is an instance of std::initializer_list. Find the argument type.
5624  if (Element)
5625    *Element = Arguments[0].getAsType();
5626  return true;
5627}
5628
5629static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc){
5630  NamespaceDecl *Std = S.getStdNamespace();
5631  if (!Std) {
5632    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
5633    return 0;
5634  }
5635
5636  LookupResult Result(S, &S.PP.getIdentifierTable().get("initializer_list"),
5637                      Loc, Sema::LookupOrdinaryName);
5638  if (!S.LookupQualifiedName(Result, Std)) {
5639    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);
5640    return 0;
5641  }
5642  ClassTemplateDecl *Template = Result.getAsSingle<ClassTemplateDecl>();
5643  if (!Template) {
5644    Result.suppressDiagnostics();
5645    // We found something weird. Complain about the first thing we found.
5646    NamedDecl *Found = *Result.begin();
5647    S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);
5648    return 0;
5649  }
5650
5651  // We found some template called std::initializer_list. Now verify that it's
5652  // correct.
5653  TemplateParameterList *Params = Template->getTemplateParameters();
5654  if (Params->getMinRequiredArguments() != 1 ||
5655      !isa<TemplateTypeParmDecl>(Params->getParam(0))) {
5656    S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);
5657    return 0;
5658  }
5659
5660  return Template;
5661}
5662
5663QualType Sema::BuildStdInitializerList(QualType Element, SourceLocation Loc) {
5664  if (!StdInitializerList) {
5665    StdInitializerList = LookupStdInitializerList(*this, Loc);
5666    if (!StdInitializerList)
5667      return QualType();
5668  }
5669
5670  TemplateArgumentListInfo Args(Loc, Loc);
5671  Args.addArgument(TemplateArgumentLoc(TemplateArgument(Element),
5672                                       Context.getTrivialTypeSourceInfo(Element,
5673                                                                        Loc)));
5674  return Context.getCanonicalType(
5675      CheckTemplateIdType(TemplateName(StdInitializerList), Loc, Args));
5676}
5677
5678bool Sema::isInitListConstructor(const CXXConstructorDecl* Ctor) {
5679  // C++ [dcl.init.list]p2:
5680  //   A constructor is an initializer-list constructor if its first parameter
5681  //   is of type std::initializer_list<E> or reference to possibly cv-qualified
5682  //   std::initializer_list<E> for some type E, and either there are no other
5683  //   parameters or else all other parameters have default arguments.
5684  if (Ctor->getNumParams() < 1 ||
5685      (Ctor->getNumParams() > 1 && !Ctor->getParamDecl(1)->hasDefaultArg()))
5686    return false;
5687
5688  QualType ArgType = Ctor->getParamDecl(0)->getType();
5689  if (const ReferenceType *RT = ArgType->getAs<ReferenceType>())
5690    ArgType = RT->getPointeeType().getUnqualifiedType();
5691
5692  return isStdInitializerList(ArgType, 0);
5693}
5694
5695/// \brief Determine whether a using statement is in a context where it will be
5696/// apply in all contexts.
5697static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
5698  switch (CurContext->getDeclKind()) {
5699    case Decl::TranslationUnit:
5700      return true;
5701    case Decl::LinkageSpec:
5702      return IsUsingDirectiveInToplevelContext(CurContext->getParent());
5703    default:
5704      return false;
5705  }
5706}
5707
5708namespace {
5709
5710// Callback to only accept typo corrections that are namespaces.
5711class NamespaceValidatorCCC : public CorrectionCandidateCallback {
5712 public:
5713  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
5714    if (NamedDecl *ND = candidate.getCorrectionDecl()) {
5715      return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
5716    }
5717    return false;
5718  }
5719};
5720
5721}
5722
5723static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
5724                                       CXXScopeSpec &SS,
5725                                       SourceLocation IdentLoc,
5726                                       IdentifierInfo *Ident) {
5727  NamespaceValidatorCCC Validator;
5728  R.clear();
5729  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
5730                                               R.getLookupKind(), Sc, &SS,
5731                                               Validator)) {
5732    std::string CorrectedStr(Corrected.getAsString(S.getLangOpts()));
5733    std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOpts()));
5734    if (DeclContext *DC = S.computeDeclContext(SS, false))
5735      S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
5736        << Ident << DC << CorrectedQuotedStr << SS.getRange()
5737        << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
5738    else
5739      S.Diag(IdentLoc, diag::err_using_directive_suggest)
5740        << Ident << CorrectedQuotedStr
5741        << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
5742
5743    S.Diag(Corrected.getCorrectionDecl()->getLocation(),
5744         diag::note_namespace_defined_here) << CorrectedQuotedStr;
5745
5746    R.addDecl(Corrected.getCorrectionDecl());
5747    return true;
5748  }
5749  return false;
5750}
5751
5752Decl *Sema::ActOnUsingDirective(Scope *S,
5753                                          SourceLocation UsingLoc,
5754                                          SourceLocation NamespcLoc,
5755                                          CXXScopeSpec &SS,
5756                                          SourceLocation IdentLoc,
5757                                          IdentifierInfo *NamespcName,
5758                                          AttributeList *AttrList) {
5759  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
5760  assert(NamespcName && "Invalid NamespcName.");
5761  assert(IdentLoc.isValid() && "Invalid NamespceName location.");
5762
5763  // This can only happen along a recovery path.
5764  while (S->getFlags() & Scope::TemplateParamScope)
5765    S = S->getParent();
5766  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
5767
5768  UsingDirectiveDecl *UDir = 0;
5769  NestedNameSpecifier *Qualifier = 0;
5770  if (SS.isSet())
5771    Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
5772
5773  // Lookup namespace name.
5774  LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
5775  LookupParsedName(R, S, &SS);
5776  if (R.isAmbiguous())
5777    return 0;
5778
5779  if (R.empty()) {
5780    R.clear();
5781    // Allow "using namespace std;" or "using namespace ::std;" even if
5782    // "std" hasn't been defined yet, for GCC compatibility.
5783    if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
5784        NamespcName->isStr("std")) {
5785      Diag(IdentLoc, diag::ext_using_undefined_std);
5786      R.addDecl(getOrCreateStdNamespace());
5787      R.resolveKind();
5788    }
5789    // Otherwise, attempt typo correction.
5790    else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
5791  }
5792
5793  if (!R.empty()) {
5794    NamedDecl *Named = R.getFoundDecl();
5795    assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
5796        && "expected namespace decl");
5797    // C++ [namespace.udir]p1:
5798    //   A using-directive specifies that the names in the nominated
5799    //   namespace can be used in the scope in which the
5800    //   using-directive appears after the using-directive. During
5801    //   unqualified name lookup (3.4.1), the names appear as if they
5802    //   were declared in the nearest enclosing namespace which
5803    //   contains both the using-directive and the nominated
5804    //   namespace. [Note: in this context, "contains" means "contains
5805    //   directly or indirectly". ]
5806
5807    // Find enclosing context containing both using-directive and
5808    // nominated namespace.
5809    NamespaceDecl *NS = getNamespaceDecl(Named);
5810    DeclContext *CommonAncestor = cast<DeclContext>(NS);
5811    while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
5812      CommonAncestor = CommonAncestor->getParent();
5813
5814    UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
5815                                      SS.getWithLocInContext(Context),
5816                                      IdentLoc, Named, CommonAncestor);
5817
5818    if (IsUsingDirectiveInToplevelContext(CurContext) &&
5819        !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
5820      Diag(IdentLoc, diag::warn_using_directive_in_header);
5821    }
5822
5823    PushUsingDirective(S, UDir);
5824  } else {
5825    Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
5826  }
5827
5828  // FIXME: We ignore attributes for now.
5829  return UDir;
5830}
5831
5832void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
5833  // If the scope has an associated entity and the using directive is at
5834  // namespace or translation unit scope, add the UsingDirectiveDecl into
5835  // its lookup structure so qualified name lookup can find it.
5836  DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
5837  if (Ctx && !Ctx->isFunctionOrMethod())
5838    Ctx->addDecl(UDir);
5839  else
5840    // Otherwise, it is at block sope. The using-directives will affect lookup
5841    // only to the end of the scope.
5842    S->PushUsingDirective(UDir);
5843}
5844
5845
5846Decl *Sema::ActOnUsingDeclaration(Scope *S,
5847                                  AccessSpecifier AS,
5848                                  bool HasUsingKeyword,
5849                                  SourceLocation UsingLoc,
5850                                  CXXScopeSpec &SS,
5851                                  UnqualifiedId &Name,
5852                                  AttributeList *AttrList,
5853                                  bool IsTypeName,
5854                                  SourceLocation TypenameLoc) {
5855  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
5856
5857  switch (Name.getKind()) {
5858  case UnqualifiedId::IK_ImplicitSelfParam:
5859  case UnqualifiedId::IK_Identifier:
5860  case UnqualifiedId::IK_OperatorFunctionId:
5861  case UnqualifiedId::IK_LiteralOperatorId:
5862  case UnqualifiedId::IK_ConversionFunctionId:
5863    break;
5864
5865  case UnqualifiedId::IK_ConstructorName:
5866  case UnqualifiedId::IK_ConstructorTemplateId:
5867    // C++11 inheriting constructors.
5868    Diag(Name.getLocStart(),
5869         getLangOpts().CPlusPlus0x ?
5870           // FIXME: Produce warn_cxx98_compat_using_decl_constructor
5871           //        instead once inheriting constructors work.
5872           diag::err_using_decl_constructor_unsupported :
5873           diag::err_using_decl_constructor)
5874      << SS.getRange();
5875
5876    if (getLangOpts().CPlusPlus0x) break;
5877
5878    return 0;
5879
5880  case UnqualifiedId::IK_DestructorName:
5881    Diag(Name.getLocStart(), diag::err_using_decl_destructor)
5882      << SS.getRange();
5883    return 0;
5884
5885  case UnqualifiedId::IK_TemplateId:
5886    Diag(Name.getLocStart(), diag::err_using_decl_template_id)
5887      << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
5888    return 0;
5889  }
5890
5891  DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
5892  DeclarationName TargetName = TargetNameInfo.getName();
5893  if (!TargetName)
5894    return 0;
5895
5896  // Warn about using declarations.
5897  // TODO: store that the declaration was written without 'using' and
5898  // talk about access decls instead of using decls in the
5899  // diagnostics.
5900  if (!HasUsingKeyword) {
5901    UsingLoc = Name.getLocStart();
5902
5903    Diag(UsingLoc, diag::warn_access_decl_deprecated)
5904      << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
5905  }
5906
5907  if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
5908      DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
5909    return 0;
5910
5911  NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
5912                                        TargetNameInfo, AttrList,
5913                                        /* IsInstantiation */ false,
5914                                        IsTypeName, TypenameLoc);
5915  if (UD)
5916    PushOnScopeChains(UD, S, /*AddToContext*/ false);
5917
5918  return UD;
5919}
5920
5921/// \brief Determine whether a using declaration considers the given
5922/// declarations as "equivalent", e.g., if they are redeclarations of
5923/// the same entity or are both typedefs of the same type.
5924static bool
5925IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
5926                         bool &SuppressRedeclaration) {
5927  if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
5928    SuppressRedeclaration = false;
5929    return true;
5930  }
5931
5932  if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
5933    if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
5934      SuppressRedeclaration = true;
5935      return Context.hasSameType(TD1->getUnderlyingType(),
5936                                 TD2->getUnderlyingType());
5937    }
5938
5939  return false;
5940}
5941
5942
5943/// Determines whether to create a using shadow decl for a particular
5944/// decl, given the set of decls existing prior to this using lookup.
5945bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
5946                                const LookupResult &Previous) {
5947  // Diagnose finding a decl which is not from a base class of the
5948  // current class.  We do this now because there are cases where this
5949  // function will silently decide not to build a shadow decl, which
5950  // will pre-empt further diagnostics.
5951  //
5952  // We don't need to do this in C++0x because we do the check once on
5953  // the qualifier.
5954  //
5955  // FIXME: diagnose the following if we care enough:
5956  //   struct A { int foo; };
5957  //   struct B : A { using A::foo; };
5958  //   template <class T> struct C : A {};
5959  //   template <class T> struct D : C<T> { using B::foo; } // <---
5960  // This is invalid (during instantiation) in C++03 because B::foo
5961  // resolves to the using decl in B, which is not a base class of D<T>.
5962  // We can't diagnose it immediately because C<T> is an unknown
5963  // specialization.  The UsingShadowDecl in D<T> then points directly
5964  // to A::foo, which will look well-formed when we instantiate.
5965  // The right solution is to not collapse the shadow-decl chain.
5966  if (!getLangOpts().CPlusPlus0x && CurContext->isRecord()) {
5967    DeclContext *OrigDC = Orig->getDeclContext();
5968
5969    // Handle enums and anonymous structs.
5970    if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
5971    CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
5972    while (OrigRec->isAnonymousStructOrUnion())
5973      OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
5974
5975    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
5976      if (OrigDC == CurContext) {
5977        Diag(Using->getLocation(),
5978             diag::err_using_decl_nested_name_specifier_is_current_class)
5979          << Using->getQualifierLoc().getSourceRange();
5980        Diag(Orig->getLocation(), diag::note_using_decl_target);
5981        return true;
5982      }
5983
5984      Diag(Using->getQualifierLoc().getBeginLoc(),
5985           diag::err_using_decl_nested_name_specifier_is_not_base_class)
5986        << Using->getQualifier()
5987        << cast<CXXRecordDecl>(CurContext)
5988        << Using->getQualifierLoc().getSourceRange();
5989      Diag(Orig->getLocation(), diag::note_using_decl_target);
5990      return true;
5991    }
5992  }
5993
5994  if (Previous.empty()) return false;
5995
5996  NamedDecl *Target = Orig;
5997  if (isa<UsingShadowDecl>(Target))
5998    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
5999
6000  // If the target happens to be one of the previous declarations, we
6001  // don't have a conflict.
6002  //
6003  // FIXME: but we might be increasing its access, in which case we
6004  // should redeclare it.
6005  NamedDecl *NonTag = 0, *Tag = 0;
6006  for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
6007         I != E; ++I) {
6008    NamedDecl *D = (*I)->getUnderlyingDecl();
6009    bool Result;
6010    if (IsEquivalentForUsingDecl(Context, D, Target, Result))
6011      return Result;
6012
6013    (isa<TagDecl>(D) ? Tag : NonTag) = D;
6014  }
6015
6016  if (Target->isFunctionOrFunctionTemplate()) {
6017    FunctionDecl *FD;
6018    if (isa<FunctionTemplateDecl>(Target))
6019      FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
6020    else
6021      FD = cast<FunctionDecl>(Target);
6022
6023    NamedDecl *OldDecl = 0;
6024    switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
6025    case Ovl_Overload:
6026      return false;
6027
6028    case Ovl_NonFunction:
6029      Diag(Using->getLocation(), diag::err_using_decl_conflict);
6030      break;
6031
6032    // We found a decl with the exact signature.
6033    case Ovl_Match:
6034      // If we're in a record, we want to hide the target, so we
6035      // return true (without a diagnostic) to tell the caller not to
6036      // build a shadow decl.
6037      if (CurContext->isRecord())
6038        return true;
6039
6040      // If we're not in a record, this is an error.
6041      Diag(Using->getLocation(), diag::err_using_decl_conflict);
6042      break;
6043    }
6044
6045    Diag(Target->getLocation(), diag::note_using_decl_target);
6046    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
6047    return true;
6048  }
6049
6050  // Target is not a function.
6051
6052  if (isa<TagDecl>(Target)) {
6053    // No conflict between a tag and a non-tag.
6054    if (!Tag) return false;
6055
6056    Diag(Using->getLocation(), diag::err_using_decl_conflict);
6057    Diag(Target->getLocation(), diag::note_using_decl_target);
6058    Diag(Tag->getLocation(), diag::note_using_decl_conflict);
6059    return true;
6060  }
6061
6062  // No conflict between a tag and a non-tag.
6063  if (!NonTag) return false;
6064
6065  Diag(Using->getLocation(), diag::err_using_decl_conflict);
6066  Diag(Target->getLocation(), diag::note_using_decl_target);
6067  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
6068  return true;
6069}
6070
6071/// Builds a shadow declaration corresponding to a 'using' declaration.
6072UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
6073                                            UsingDecl *UD,
6074                                            NamedDecl *Orig) {
6075
6076  // If we resolved to another shadow declaration, just coalesce them.
6077  NamedDecl *Target = Orig;
6078  if (isa<UsingShadowDecl>(Target)) {
6079    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
6080    assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
6081  }
6082
6083  UsingShadowDecl *Shadow
6084    = UsingShadowDecl::Create(Context, CurContext,
6085                              UD->getLocation(), UD, Target);
6086  UD->addShadowDecl(Shadow);
6087
6088  Shadow->setAccess(UD->getAccess());
6089  if (Orig->isInvalidDecl() || UD->isInvalidDecl())
6090    Shadow->setInvalidDecl();
6091
6092  if (S)
6093    PushOnScopeChains(Shadow, S);
6094  else
6095    CurContext->addDecl(Shadow);
6096
6097
6098  return Shadow;
6099}
6100
6101/// Hides a using shadow declaration.  This is required by the current
6102/// using-decl implementation when a resolvable using declaration in a
6103/// class is followed by a declaration which would hide or override
6104/// one or more of the using decl's targets; for example:
6105///
6106///   struct Base { void foo(int); };
6107///   struct Derived : Base {
6108///     using Base::foo;
6109///     void foo(int);
6110///   };
6111///
6112/// The governing language is C++03 [namespace.udecl]p12:
6113///
6114///   When a using-declaration brings names from a base class into a
6115///   derived class scope, member functions in the derived class
6116///   override and/or hide member functions with the same name and
6117///   parameter types in a base class (rather than conflicting).
6118///
6119/// There are two ways to implement this:
6120///   (1) optimistically create shadow decls when they're not hidden
6121///       by existing declarations, or
6122///   (2) don't create any shadow decls (or at least don't make them
6123///       visible) until we've fully parsed/instantiated the class.
6124/// The problem with (1) is that we might have to retroactively remove
6125/// a shadow decl, which requires several O(n) operations because the
6126/// decl structures are (very reasonably) not designed for removal.
6127/// (2) avoids this but is very fiddly and phase-dependent.
6128void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
6129  if (Shadow->getDeclName().getNameKind() ==
6130        DeclarationName::CXXConversionFunctionName)
6131    cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
6132
6133  // Remove it from the DeclContext...
6134  Shadow->getDeclContext()->removeDecl(Shadow);
6135
6136  // ...and the scope, if applicable...
6137  if (S) {
6138    S->RemoveDecl(Shadow);
6139    IdResolver.RemoveDecl(Shadow);
6140  }
6141
6142  // ...and the using decl.
6143  Shadow->getUsingDecl()->removeShadowDecl(Shadow);
6144
6145  // TODO: complain somehow if Shadow was used.  It shouldn't
6146  // be possible for this to happen, because...?
6147}
6148
6149/// Builds a using declaration.
6150///
6151/// \param IsInstantiation - Whether this call arises from an
6152///   instantiation of an unresolved using declaration.  We treat
6153///   the lookup differently for these declarations.
6154NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
6155                                       SourceLocation UsingLoc,
6156                                       CXXScopeSpec &SS,
6157                                       const DeclarationNameInfo &NameInfo,
6158                                       AttributeList *AttrList,
6159                                       bool IsInstantiation,
6160                                       bool IsTypeName,
6161                                       SourceLocation TypenameLoc) {
6162  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
6163  SourceLocation IdentLoc = NameInfo.getLoc();
6164  assert(IdentLoc.isValid() && "Invalid TargetName location.");
6165
6166  // FIXME: We ignore attributes for now.
6167
6168  if (SS.isEmpty()) {
6169    Diag(IdentLoc, diag::err_using_requires_qualname);
6170    return 0;
6171  }
6172
6173  // Do the redeclaration lookup in the current scope.
6174  LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
6175                        ForRedeclaration);
6176  Previous.setHideTags(false);
6177  if (S) {
6178    LookupName(Previous, S);
6179
6180    // It is really dumb that we have to do this.
6181    LookupResult::Filter F = Previous.makeFilter();
6182    while (F.hasNext()) {
6183      NamedDecl *D = F.next();
6184      if (!isDeclInScope(D, CurContext, S))
6185        F.erase();
6186    }
6187    F.done();
6188  } else {
6189    assert(IsInstantiation && "no scope in non-instantiation");
6190    assert(CurContext->isRecord() && "scope not record in instantiation");
6191    LookupQualifiedName(Previous, CurContext);
6192  }
6193
6194  // Check for invalid redeclarations.
6195  if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
6196    return 0;
6197
6198  // Check for bad qualifiers.
6199  if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
6200    return 0;
6201
6202  DeclContext *LookupContext = computeDeclContext(SS);
6203  NamedDecl *D;
6204  NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
6205  if (!LookupContext) {
6206    if (IsTypeName) {
6207      // FIXME: not all declaration name kinds are legal here
6208      D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
6209                                              UsingLoc, TypenameLoc,
6210                                              QualifierLoc,
6211                                              IdentLoc, NameInfo.getName());
6212    } else {
6213      D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
6214                                           QualifierLoc, NameInfo);
6215    }
6216  } else {
6217    D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
6218                          NameInfo, IsTypeName);
6219  }
6220  D->setAccess(AS);
6221  CurContext->addDecl(D);
6222
6223  if (!LookupContext) return D;
6224  UsingDecl *UD = cast<UsingDecl>(D);
6225
6226  if (RequireCompleteDeclContext(SS, LookupContext)) {
6227    UD->setInvalidDecl();
6228    return UD;
6229  }
6230
6231  // The normal rules do not apply to inheriting constructor declarations.
6232  if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
6233    if (CheckInheritingConstructorUsingDecl(UD))
6234      UD->setInvalidDecl();
6235    return UD;
6236  }
6237
6238  // Otherwise, look up the target name.
6239
6240  LookupResult R(*this, NameInfo, LookupOrdinaryName);
6241
6242  // Unlike most lookups, we don't always want to hide tag
6243  // declarations: tag names are visible through the using declaration
6244  // even if hidden by ordinary names, *except* in a dependent context
6245  // where it's important for the sanity of two-phase lookup.
6246  if (!IsInstantiation)
6247    R.setHideTags(false);
6248
6249  // For the purposes of this lookup, we have a base object type
6250  // equal to that of the current context.
6251  if (CurContext->isRecord()) {
6252    R.setBaseObjectType(
6253                   Context.getTypeDeclType(cast<CXXRecordDecl>(CurContext)));
6254  }
6255
6256  LookupQualifiedName(R, LookupContext);
6257
6258  if (R.empty()) {
6259    Diag(IdentLoc, diag::err_no_member)
6260      << NameInfo.getName() << LookupContext << SS.getRange();
6261    UD->setInvalidDecl();
6262    return UD;
6263  }
6264
6265  if (R.isAmbiguous()) {
6266    UD->setInvalidDecl();
6267    return UD;
6268  }
6269
6270  if (IsTypeName) {
6271    // If we asked for a typename and got a non-type decl, error out.
6272    if (!R.getAsSingle<TypeDecl>()) {
6273      Diag(IdentLoc, diag::err_using_typename_non_type);
6274      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
6275        Diag((*I)->getUnderlyingDecl()->getLocation(),
6276             diag::note_using_decl_target);
6277      UD->setInvalidDecl();
6278      return UD;
6279    }
6280  } else {
6281    // If we asked for a non-typename and we got a type, error out,
6282    // but only if this is an instantiation of an unresolved using
6283    // decl.  Otherwise just silently find the type name.
6284    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
6285      Diag(IdentLoc, diag::err_using_dependent_value_is_type);
6286      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
6287      UD->setInvalidDecl();
6288      return UD;
6289    }
6290  }
6291
6292  // C++0x N2914 [namespace.udecl]p6:
6293  // A using-declaration shall not name a namespace.
6294  if (R.getAsSingle<NamespaceDecl>()) {
6295    Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
6296      << SS.getRange();
6297    UD->setInvalidDecl();
6298    return UD;
6299  }
6300
6301  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
6302    if (!CheckUsingShadowDecl(UD, *I, Previous))
6303      BuildUsingShadowDecl(S, UD, *I);
6304  }
6305
6306  return UD;
6307}
6308
6309/// Additional checks for a using declaration referring to a constructor name.
6310bool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {
6311  assert(!UD->isTypeName() && "expecting a constructor name");
6312
6313  const Type *SourceType = UD->getQualifier()->getAsType();
6314  assert(SourceType &&
6315         "Using decl naming constructor doesn't have type in scope spec.");
6316  CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
6317
6318  // Check whether the named type is a direct base class.
6319  CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
6320  CXXRecordDecl::base_class_iterator BaseIt, BaseE;
6321  for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
6322       BaseIt != BaseE; ++BaseIt) {
6323    CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
6324    if (CanonicalSourceType == BaseType)
6325      break;
6326    if (BaseIt->getType()->isDependentType())
6327      break;
6328  }
6329
6330  if (BaseIt == BaseE) {
6331    // Did not find SourceType in the bases.
6332    Diag(UD->getUsingLocation(),
6333         diag::err_using_decl_constructor_not_in_direct_base)
6334      << UD->getNameInfo().getSourceRange()
6335      << QualType(SourceType, 0) << TargetClass;
6336    return true;
6337  }
6338
6339  if (!CurContext->isDependentContext())
6340    BaseIt->setInheritConstructors();
6341
6342  return false;
6343}
6344
6345/// Checks that the given using declaration is not an invalid
6346/// redeclaration.  Note that this is checking only for the using decl
6347/// itself, not for any ill-formedness among the UsingShadowDecls.
6348bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
6349                                       bool isTypeName,
6350                                       const CXXScopeSpec &SS,
6351                                       SourceLocation NameLoc,
6352                                       const LookupResult &Prev) {
6353  // C++03 [namespace.udecl]p8:
6354  // C++0x [namespace.udecl]p10:
6355  //   A using-declaration is a declaration and can therefore be used
6356  //   repeatedly where (and only where) multiple declarations are
6357  //   allowed.
6358  //
6359  // That's in non-member contexts.
6360  if (!CurContext->getRedeclContext()->isRecord())
6361    return false;
6362
6363  NestedNameSpecifier *Qual
6364    = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
6365
6366  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
6367    NamedDecl *D = *I;
6368
6369    bool DTypename;
6370    NestedNameSpecifier *DQual;
6371    if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
6372      DTypename = UD->isTypeName();
6373      DQual = UD->getQualifier();
6374    } else if (UnresolvedUsingValueDecl *UD
6375                 = dyn_cast<UnresolvedUsingValueDecl>(D)) {
6376      DTypename = false;
6377      DQual = UD->getQualifier();
6378    } else if (UnresolvedUsingTypenameDecl *UD
6379                 = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
6380      DTypename = true;
6381      DQual = UD->getQualifier();
6382    } else continue;
6383
6384    // using decls differ if one says 'typename' and the other doesn't.
6385    // FIXME: non-dependent using decls?
6386    if (isTypeName != DTypename) continue;
6387
6388    // using decls differ if they name different scopes (but note that
6389    // template instantiation can cause this check to trigger when it
6390    // didn't before instantiation).
6391    if (Context.getCanonicalNestedNameSpecifier(Qual) !=
6392        Context.getCanonicalNestedNameSpecifier(DQual))
6393      continue;
6394
6395    Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
6396    Diag(D->getLocation(), diag::note_using_decl) << 1;
6397    return true;
6398  }
6399
6400  return false;
6401}
6402
6403
6404/// Checks that the given nested-name qualifier used in a using decl
6405/// in the current context is appropriately related to the current
6406/// scope.  If an error is found, diagnoses it and returns true.
6407bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
6408                                   const CXXScopeSpec &SS,
6409                                   SourceLocation NameLoc) {
6410  DeclContext *NamedContext = computeDeclContext(SS);
6411
6412  if (!CurContext->isRecord()) {
6413    // C++03 [namespace.udecl]p3:
6414    // C++0x [namespace.udecl]p8:
6415    //   A using-declaration for a class member shall be a member-declaration.
6416
6417    // If we weren't able to compute a valid scope, it must be a
6418    // dependent class scope.
6419    if (!NamedContext || NamedContext->isRecord()) {
6420      Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
6421        << SS.getRange();
6422      return true;
6423    }
6424
6425    // Otherwise, everything is known to be fine.
6426    return false;
6427  }
6428
6429  // The current scope is a record.
6430
6431  // If the named context is dependent, we can't decide much.
6432  if (!NamedContext) {
6433    // FIXME: in C++0x, we can diagnose if we can prove that the
6434    // nested-name-specifier does not refer to a base class, which is
6435    // still possible in some cases.
6436
6437    // Otherwise we have to conservatively report that things might be
6438    // okay.
6439    return false;
6440  }
6441
6442  if (!NamedContext->isRecord()) {
6443    // Ideally this would point at the last name in the specifier,
6444    // but we don't have that level of source info.
6445    Diag(SS.getRange().getBegin(),
6446         diag::err_using_decl_nested_name_specifier_is_not_class)
6447      << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
6448    return true;
6449  }
6450
6451  if (!NamedContext->isDependentContext() &&
6452      RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
6453    return true;
6454
6455  if (getLangOpts().CPlusPlus0x) {
6456    // C++0x [namespace.udecl]p3:
6457    //   In a using-declaration used as a member-declaration, the
6458    //   nested-name-specifier shall name a base class of the class
6459    //   being defined.
6460
6461    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
6462                                 cast<CXXRecordDecl>(NamedContext))) {
6463      if (CurContext == NamedContext) {
6464        Diag(NameLoc,
6465             diag::err_using_decl_nested_name_specifier_is_current_class)
6466          << SS.getRange();
6467        return true;
6468      }
6469
6470      Diag(SS.getRange().getBegin(),
6471           diag::err_using_decl_nested_name_specifier_is_not_base_class)
6472        << (NestedNameSpecifier*) SS.getScopeRep()
6473        << cast<CXXRecordDecl>(CurContext)
6474        << SS.getRange();
6475      return true;
6476    }
6477
6478    return false;
6479  }
6480
6481  // C++03 [namespace.udecl]p4:
6482  //   A using-declaration used as a member-declaration shall refer
6483  //   to a member of a base class of the class being defined [etc.].
6484
6485  // Salient point: SS doesn't have to name a base class as long as
6486  // lookup only finds members from base classes.  Therefore we can
6487  // diagnose here only if we can prove that that can't happen,
6488  // i.e. if the class hierarchies provably don't intersect.
6489
6490  // TODO: it would be nice if "definitely valid" results were cached
6491  // in the UsingDecl and UsingShadowDecl so that these checks didn't
6492  // need to be repeated.
6493
6494  struct UserData {
6495    llvm::SmallPtrSet<const CXXRecordDecl*, 4> Bases;
6496
6497    static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
6498      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
6499      Data->Bases.insert(Base);
6500      return true;
6501    }
6502
6503    bool hasDependentBases(const CXXRecordDecl *Class) {
6504      return !Class->forallBases(collect, this);
6505    }
6506
6507    /// Returns true if the base is dependent or is one of the
6508    /// accumulated base classes.
6509    static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
6510      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
6511      return !Data->Bases.count(Base);
6512    }
6513
6514    bool mightShareBases(const CXXRecordDecl *Class) {
6515      return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
6516    }
6517  };
6518
6519  UserData Data;
6520
6521  // Returns false if we find a dependent base.
6522  if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
6523    return false;
6524
6525  // Returns false if the class has a dependent base or if it or one
6526  // of its bases is present in the base set of the current context.
6527  if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
6528    return false;
6529
6530  Diag(SS.getRange().getBegin(),
6531       diag::err_using_decl_nested_name_specifier_is_not_base_class)
6532    << (NestedNameSpecifier*) SS.getScopeRep()
6533    << cast<CXXRecordDecl>(CurContext)
6534    << SS.getRange();
6535
6536  return true;
6537}
6538
6539Decl *Sema::ActOnAliasDeclaration(Scope *S,
6540                                  AccessSpecifier AS,
6541                                  MultiTemplateParamsArg TemplateParamLists,
6542                                  SourceLocation UsingLoc,
6543                                  UnqualifiedId &Name,
6544                                  TypeResult Type) {
6545  // Skip up to the relevant declaration scope.
6546  while (S->getFlags() & Scope::TemplateParamScope)
6547    S = S->getParent();
6548  assert((S->getFlags() & Scope::DeclScope) &&
6549         "got alias-declaration outside of declaration scope");
6550
6551  if (Type.isInvalid())
6552    return 0;
6553
6554  bool Invalid = false;
6555  DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
6556  TypeSourceInfo *TInfo = 0;
6557  GetTypeFromParser(Type.get(), &TInfo);
6558
6559  if (DiagnoseClassNameShadow(CurContext, NameInfo))
6560    return 0;
6561
6562  if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
6563                                      UPPC_DeclarationType)) {
6564    Invalid = true;
6565    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
6566                                             TInfo->getTypeLoc().getBeginLoc());
6567  }
6568
6569  LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
6570  LookupName(Previous, S);
6571
6572  // Warn about shadowing the name of a template parameter.
6573  if (Previous.isSingleResult() &&
6574      Previous.getFoundDecl()->isTemplateParameter()) {
6575    DiagnoseTemplateParameterShadow(Name.StartLocation,Previous.getFoundDecl());
6576    Previous.clear();
6577  }
6578
6579  assert(Name.Kind == UnqualifiedId::IK_Identifier &&
6580         "name in alias declaration must be an identifier");
6581  TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
6582                                               Name.StartLocation,
6583                                               Name.Identifier, TInfo);
6584
6585  NewTD->setAccess(AS);
6586
6587  if (Invalid)
6588    NewTD->setInvalidDecl();
6589
6590  CheckTypedefForVariablyModifiedType(S, NewTD);
6591  Invalid |= NewTD->isInvalidDecl();
6592
6593  bool Redeclaration = false;
6594
6595  NamedDecl *NewND;
6596  if (TemplateParamLists.size()) {
6597    TypeAliasTemplateDecl *OldDecl = 0;
6598    TemplateParameterList *OldTemplateParams = 0;
6599
6600    if (TemplateParamLists.size() != 1) {
6601      Diag(UsingLoc, diag::err_alias_template_extra_headers)
6602        << SourceRange(TemplateParamLists[1]->getTemplateLoc(),
6603         TemplateParamLists[TemplateParamLists.size()-1]->getRAngleLoc());
6604    }
6605    TemplateParameterList *TemplateParams = TemplateParamLists[0];
6606
6607    // Only consider previous declarations in the same scope.
6608    FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
6609                         /*ExplicitInstantiationOrSpecialization*/false);
6610    if (!Previous.empty()) {
6611      Redeclaration = true;
6612
6613      OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
6614      if (!OldDecl && !Invalid) {
6615        Diag(UsingLoc, diag::err_redefinition_different_kind)
6616          << Name.Identifier;
6617
6618        NamedDecl *OldD = Previous.getRepresentativeDecl();
6619        if (OldD->getLocation().isValid())
6620          Diag(OldD->getLocation(), diag::note_previous_definition);
6621
6622        Invalid = true;
6623      }
6624
6625      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
6626        if (TemplateParameterListsAreEqual(TemplateParams,
6627                                           OldDecl->getTemplateParameters(),
6628                                           /*Complain=*/true,
6629                                           TPL_TemplateMatch))
6630          OldTemplateParams = OldDecl->getTemplateParameters();
6631        else
6632          Invalid = true;
6633
6634        TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
6635        if (!Invalid &&
6636            !Context.hasSameType(OldTD->getUnderlyingType(),
6637                                 NewTD->getUnderlyingType())) {
6638          // FIXME: The C++0x standard does not clearly say this is ill-formed,
6639          // but we can't reasonably accept it.
6640          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
6641            << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
6642          if (OldTD->getLocation().isValid())
6643            Diag(OldTD->getLocation(), diag::note_previous_definition);
6644          Invalid = true;
6645        }
6646      }
6647    }
6648
6649    // Merge any previous default template arguments into our parameters,
6650    // and check the parameter list.
6651    if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
6652                                   TPC_TypeAliasTemplate))
6653      return 0;
6654
6655    TypeAliasTemplateDecl *NewDecl =
6656      TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
6657                                    Name.Identifier, TemplateParams,
6658                                    NewTD);
6659
6660    NewDecl->setAccess(AS);
6661
6662    if (Invalid)
6663      NewDecl->setInvalidDecl();
6664    else if (OldDecl)
6665      NewDecl->setPreviousDeclaration(OldDecl);
6666
6667    NewND = NewDecl;
6668  } else {
6669    ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
6670    NewND = NewTD;
6671  }
6672
6673  if (!Redeclaration)
6674    PushOnScopeChains(NewND, S);
6675
6676  ActOnDocumentableDecl(NewND);
6677  return NewND;
6678}
6679
6680Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
6681                                             SourceLocation NamespaceLoc,
6682                                             SourceLocation AliasLoc,
6683                                             IdentifierInfo *Alias,
6684                                             CXXScopeSpec &SS,
6685                                             SourceLocation IdentLoc,
6686                                             IdentifierInfo *Ident) {
6687
6688  // Lookup the namespace name.
6689  LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
6690  LookupParsedName(R, S, &SS);
6691
6692  // Check if we have a previous declaration with the same name.
6693  NamedDecl *PrevDecl
6694    = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
6695                       ForRedeclaration);
6696  if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
6697    PrevDecl = 0;
6698
6699  if (PrevDecl) {
6700    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
6701      // We already have an alias with the same name that points to the same
6702      // namespace, so don't create a new one.
6703      // FIXME: At some point, we'll want to create the (redundant)
6704      // declaration to maintain better source information.
6705      if (!R.isAmbiguous() && !R.empty() &&
6706          AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
6707        return 0;
6708    }
6709
6710    unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
6711      diag::err_redefinition_different_kind;
6712    Diag(AliasLoc, DiagID) << Alias;
6713    Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6714    return 0;
6715  }
6716
6717  if (R.isAmbiguous())
6718    return 0;
6719
6720  if (R.empty()) {
6721    if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
6722      Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
6723      return 0;
6724    }
6725  }
6726
6727  NamespaceAliasDecl *AliasDecl =
6728    NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
6729                               Alias, SS.getWithLocInContext(Context),
6730                               IdentLoc, R.getFoundDecl());
6731
6732  PushOnScopeChains(AliasDecl, S);
6733  return AliasDecl;
6734}
6735
6736namespace {
6737  /// \brief Scoped object used to handle the state changes required in Sema
6738  /// to implicitly define the body of a C++ member function;
6739  class ImplicitlyDefinedFunctionScope {
6740    Sema &S;
6741    Sema::ContextRAII SavedContext;
6742
6743  public:
6744    ImplicitlyDefinedFunctionScope(Sema &S, CXXMethodDecl *Method)
6745      : S(S), SavedContext(S, Method)
6746    {
6747      S.PushFunctionScope();
6748      S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated);
6749    }
6750
6751    ~ImplicitlyDefinedFunctionScope() {
6752      S.PopExpressionEvaluationContext();
6753      S.PopFunctionScopeInfo();
6754    }
6755  };
6756}
6757
6758Sema::ImplicitExceptionSpecification
6759Sema::ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
6760                                               CXXMethodDecl *MD) {
6761  CXXRecordDecl *ClassDecl = MD->getParent();
6762
6763  // C++ [except.spec]p14:
6764  //   An implicitly declared special member function (Clause 12) shall have an
6765  //   exception-specification. [...]
6766  ImplicitExceptionSpecification ExceptSpec(*this);
6767  if (ClassDecl->isInvalidDecl())
6768    return ExceptSpec;
6769
6770  // Direct base-class constructors.
6771  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
6772                                       BEnd = ClassDecl->bases_end();
6773       B != BEnd; ++B) {
6774    if (B->isVirtual()) // Handled below.
6775      continue;
6776
6777    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
6778      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
6779      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
6780      // If this is a deleted function, add it anyway. This might be conformant
6781      // with the standard. This might not. I'm not sure. It might not matter.
6782      if (Constructor)
6783        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
6784    }
6785  }
6786
6787  // Virtual base-class constructors.
6788  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
6789                                       BEnd = ClassDecl->vbases_end();
6790       B != BEnd; ++B) {
6791    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
6792      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
6793      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
6794      // If this is a deleted function, add it anyway. This might be conformant
6795      // with the standard. This might not. I'm not sure. It might not matter.
6796      if (Constructor)
6797        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
6798    }
6799  }
6800
6801  // Field constructors.
6802  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
6803                               FEnd = ClassDecl->field_end();
6804       F != FEnd; ++F) {
6805    if (F->hasInClassInitializer()) {
6806      if (Expr *E = F->getInClassInitializer())
6807        ExceptSpec.CalledExpr(E);
6808      else if (!F->isInvalidDecl())
6809        // DR1351:
6810        //   If the brace-or-equal-initializer of a non-static data member
6811        //   invokes a defaulted default constructor of its class or of an
6812        //   enclosing class in a potentially evaluated subexpression, the
6813        //   program is ill-formed.
6814        //
6815        // This resolution is unworkable: the exception specification of the
6816        // default constructor can be needed in an unevaluated context, in
6817        // particular, in the operand of a noexcept-expression, and we can be
6818        // unable to compute an exception specification for an enclosed class.
6819        //
6820        // We do not allow an in-class initializer to require the evaluation
6821        // of the exception specification for any in-class initializer whose
6822        // definition is not lexically complete.
6823        Diag(Loc, diag::err_in_class_initializer_references_def_ctor) << MD;
6824    } else if (const RecordType *RecordTy
6825              = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
6826      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
6827      CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
6828      // If this is a deleted function, add it anyway. This might be conformant
6829      // with the standard. This might not. I'm not sure. It might not matter.
6830      // In particular, the problem is that this function never gets called. It
6831      // might just be ill-formed because this function attempts to refer to
6832      // a deleted function here.
6833      if (Constructor)
6834        ExceptSpec.CalledDecl(F->getLocation(), Constructor);
6835    }
6836  }
6837
6838  return ExceptSpec;
6839}
6840
6841CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
6842                                                     CXXRecordDecl *ClassDecl) {
6843  // C++ [class.ctor]p5:
6844  //   A default constructor for a class X is a constructor of class X
6845  //   that can be called without an argument. If there is no
6846  //   user-declared constructor for class X, a default constructor is
6847  //   implicitly declared. An implicitly-declared default constructor
6848  //   is an inline public member of its class.
6849  assert(!ClassDecl->hasUserDeclaredConstructor() &&
6850         "Should not build implicit default constructor!");
6851
6852  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
6853                                                     CXXDefaultConstructor,
6854                                                     false);
6855
6856  // Create the actual constructor declaration.
6857  CanQualType ClassType
6858    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6859  SourceLocation ClassLoc = ClassDecl->getLocation();
6860  DeclarationName Name
6861    = Context.DeclarationNames.getCXXConstructorName(ClassType);
6862  DeclarationNameInfo NameInfo(Name, ClassLoc);
6863  CXXConstructorDecl *DefaultCon = CXXConstructorDecl::Create(
6864      Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
6865      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
6866      Constexpr);
6867  DefaultCon->setAccess(AS_public);
6868  DefaultCon->setDefaulted();
6869  DefaultCon->setImplicit();
6870  DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
6871
6872  // Build an exception specification pointing back at this constructor.
6873  FunctionProtoType::ExtProtoInfo EPI;
6874  EPI.ExceptionSpecType = EST_Unevaluated;
6875  EPI.ExceptionSpecDecl = DefaultCon;
6876  DefaultCon->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
6877
6878  // Note that we have declared this constructor.
6879  ++ASTContext::NumImplicitDefaultConstructorsDeclared;
6880
6881  if (Scope *S = getScopeForContext(ClassDecl))
6882    PushOnScopeChains(DefaultCon, S, false);
6883  ClassDecl->addDecl(DefaultCon);
6884
6885  if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
6886    DefaultCon->setDeletedAsWritten();
6887
6888  return DefaultCon;
6889}
6890
6891void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
6892                                            CXXConstructorDecl *Constructor) {
6893  assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
6894          !Constructor->doesThisDeclarationHaveABody() &&
6895          !Constructor->isDeleted()) &&
6896    "DefineImplicitDefaultConstructor - call it for implicit default ctor");
6897
6898  CXXRecordDecl *ClassDecl = Constructor->getParent();
6899  assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
6900
6901  ImplicitlyDefinedFunctionScope Scope(*this, Constructor);
6902  DiagnosticErrorTrap Trap(Diags);
6903  if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) ||
6904      Trap.hasErrorOccurred()) {
6905    Diag(CurrentLocation, diag::note_member_synthesized_at)
6906      << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
6907    Constructor->setInvalidDecl();
6908    return;
6909  }
6910
6911  SourceLocation Loc = Constructor->getLocation();
6912  Constructor->setBody(new (Context) CompoundStmt(Loc));
6913
6914  Constructor->setUsed();
6915  MarkVTableUsed(CurrentLocation, ClassDecl);
6916
6917  if (ASTMutationListener *L = getASTMutationListener()) {
6918    L->CompletedImplicitDefinition(Constructor);
6919  }
6920}
6921
6922void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
6923  if (!D) return;
6924  AdjustDeclIfTemplate(D);
6925
6926  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D);
6927
6928  if (!ClassDecl->isDependentType())
6929    CheckExplicitlyDefaultedMethods(ClassDecl);
6930}
6931
6932void Sema::DeclareInheritedConstructors(CXXRecordDecl *ClassDecl) {
6933  // We start with an initial pass over the base classes to collect those that
6934  // inherit constructors from. If there are none, we can forgo all further
6935  // processing.
6936  typedef SmallVector<const RecordType *, 4> BasesVector;
6937  BasesVector BasesToInheritFrom;
6938  for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
6939                                          BaseE = ClassDecl->bases_end();
6940         BaseIt != BaseE; ++BaseIt) {
6941    if (BaseIt->getInheritConstructors()) {
6942      QualType Base = BaseIt->getType();
6943      if (Base->isDependentType()) {
6944        // If we inherit constructors from anything that is dependent, just
6945        // abort processing altogether. We'll get another chance for the
6946        // instantiations.
6947        return;
6948      }
6949      BasesToInheritFrom.push_back(Base->castAs<RecordType>());
6950    }
6951  }
6952  if (BasesToInheritFrom.empty())
6953    return;
6954
6955  // Now collect the constructors that we already have in the current class.
6956  // Those take precedence over inherited constructors.
6957  // C++0x [class.inhctor]p3: [...] a constructor is implicitly declared [...]
6958  //   unless there is a user-declared constructor with the same signature in
6959  //   the class where the using-declaration appears.
6960  llvm::SmallSet<const Type *, 8> ExistingConstructors;
6961  for (CXXRecordDecl::ctor_iterator CtorIt = ClassDecl->ctor_begin(),
6962                                    CtorE = ClassDecl->ctor_end();
6963       CtorIt != CtorE; ++CtorIt) {
6964    ExistingConstructors.insert(
6965        Context.getCanonicalType(CtorIt->getType()).getTypePtr());
6966  }
6967
6968  DeclarationName CreatedCtorName =
6969      Context.DeclarationNames.getCXXConstructorName(
6970          ClassDecl->getTypeForDecl()->getCanonicalTypeUnqualified());
6971
6972  // Now comes the true work.
6973  // First, we keep a map from constructor types to the base that introduced
6974  // them. Needed for finding conflicting constructors. We also keep the
6975  // actually inserted declarations in there, for pretty diagnostics.
6976  typedef std::pair<CanQualType, CXXConstructorDecl *> ConstructorInfo;
6977  typedef llvm::DenseMap<const Type *, ConstructorInfo> ConstructorToSourceMap;
6978  ConstructorToSourceMap InheritedConstructors;
6979  for (BasesVector::iterator BaseIt = BasesToInheritFrom.begin(),
6980                             BaseE = BasesToInheritFrom.end();
6981       BaseIt != BaseE; ++BaseIt) {
6982    const RecordType *Base = *BaseIt;
6983    CanQualType CanonicalBase = Base->getCanonicalTypeUnqualified();
6984    CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(Base->getDecl());
6985    for (CXXRecordDecl::ctor_iterator CtorIt = BaseDecl->ctor_begin(),
6986                                      CtorE = BaseDecl->ctor_end();
6987         CtorIt != CtorE; ++CtorIt) {
6988      // Find the using declaration for inheriting this base's constructors.
6989      // FIXME: Don't perform name lookup just to obtain a source location!
6990      DeclarationName Name =
6991          Context.DeclarationNames.getCXXConstructorName(CanonicalBase);
6992      LookupResult Result(*this, Name, SourceLocation(), LookupUsingDeclName);
6993      LookupQualifiedName(Result, CurContext);
6994      UsingDecl *UD = Result.getAsSingle<UsingDecl>();
6995      SourceLocation UsingLoc = UD ? UD->getLocation() :
6996                                     ClassDecl->getLocation();
6997
6998      // C++0x [class.inhctor]p1: The candidate set of inherited constructors
6999      //   from the class X named in the using-declaration consists of actual
7000      //   constructors and notional constructors that result from the
7001      //   transformation of defaulted parameters as follows:
7002      //   - all non-template default constructors of X, and
7003      //   - for each non-template constructor of X that has at least one
7004      //     parameter with a default argument, the set of constructors that
7005      //     results from omitting any ellipsis parameter specification and
7006      //     successively omitting parameters with a default argument from the
7007      //     end of the parameter-type-list.
7008      CXXConstructorDecl *BaseCtor = *CtorIt;
7009      bool CanBeCopyOrMove = BaseCtor->isCopyOrMoveConstructor();
7010      const FunctionProtoType *BaseCtorType =
7011          BaseCtor->getType()->getAs<FunctionProtoType>();
7012
7013      for (unsigned params = BaseCtor->getMinRequiredArguments(),
7014                    maxParams = BaseCtor->getNumParams();
7015           params <= maxParams; ++params) {
7016        // Skip default constructors. They're never inherited.
7017        if (params == 0)
7018          continue;
7019        // Skip copy and move constructors for the same reason.
7020        if (CanBeCopyOrMove && params == 1)
7021          continue;
7022
7023        // Build up a function type for this particular constructor.
7024        // FIXME: The working paper does not consider that the exception spec
7025        // for the inheriting constructor might be larger than that of the
7026        // source. This code doesn't yet, either. When it does, this code will
7027        // need to be delayed until after exception specifications and in-class
7028        // member initializers are attached.
7029        const Type *NewCtorType;
7030        if (params == maxParams)
7031          NewCtorType = BaseCtorType;
7032        else {
7033          SmallVector<QualType, 16> Args;
7034          for (unsigned i = 0; i < params; ++i) {
7035            Args.push_back(BaseCtorType->getArgType(i));
7036          }
7037          FunctionProtoType::ExtProtoInfo ExtInfo =
7038              BaseCtorType->getExtProtoInfo();
7039          ExtInfo.Variadic = false;
7040          NewCtorType = Context.getFunctionType(BaseCtorType->getResultType(),
7041                                                Args.data(), params, ExtInfo)
7042                       .getTypePtr();
7043        }
7044        const Type *CanonicalNewCtorType =
7045            Context.getCanonicalType(NewCtorType);
7046
7047        // Now that we have the type, first check if the class already has a
7048        // constructor with this signature.
7049        if (ExistingConstructors.count(CanonicalNewCtorType))
7050          continue;
7051
7052        // Then we check if we have already declared an inherited constructor
7053        // with this signature.
7054        std::pair<ConstructorToSourceMap::iterator, bool> result =
7055            InheritedConstructors.insert(std::make_pair(
7056                CanonicalNewCtorType,
7057                std::make_pair(CanonicalBase, (CXXConstructorDecl*)0)));
7058        if (!result.second) {
7059          // Already in the map. If it came from a different class, that's an
7060          // error. Not if it's from the same.
7061          CanQualType PreviousBase = result.first->second.first;
7062          if (CanonicalBase != PreviousBase) {
7063            const CXXConstructorDecl *PrevCtor = result.first->second.second;
7064            const CXXConstructorDecl *PrevBaseCtor =
7065                PrevCtor->getInheritedConstructor();
7066            assert(PrevBaseCtor && "Conflicting constructor was not inherited");
7067
7068            Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
7069            Diag(BaseCtor->getLocation(),
7070                 diag::note_using_decl_constructor_conflict_current_ctor);
7071            Diag(PrevBaseCtor->getLocation(),
7072                 diag::note_using_decl_constructor_conflict_previous_ctor);
7073            Diag(PrevCtor->getLocation(),
7074                 diag::note_using_decl_constructor_conflict_previous_using);
7075          }
7076          continue;
7077        }
7078
7079        // OK, we're there, now add the constructor.
7080        // C++0x [class.inhctor]p8: [...] that would be performed by a
7081        //   user-written inline constructor [...]
7082        DeclarationNameInfo DNI(CreatedCtorName, UsingLoc);
7083        CXXConstructorDecl *NewCtor = CXXConstructorDecl::Create(
7084            Context, ClassDecl, UsingLoc, DNI, QualType(NewCtorType, 0),
7085            /*TInfo=*/0, BaseCtor->isExplicit(), /*Inline=*/true,
7086            /*ImplicitlyDeclared=*/true,
7087            // FIXME: Due to a defect in the standard, we treat inherited
7088            // constructors as constexpr even if that makes them ill-formed.
7089            /*Constexpr=*/BaseCtor->isConstexpr());
7090        NewCtor->setAccess(BaseCtor->getAccess());
7091
7092        // Build up the parameter decls and add them.
7093        SmallVector<ParmVarDecl *, 16> ParamDecls;
7094        for (unsigned i = 0; i < params; ++i) {
7095          ParamDecls.push_back(ParmVarDecl::Create(Context, NewCtor,
7096                                                   UsingLoc, UsingLoc,
7097                                                   /*IdentifierInfo=*/0,
7098                                                   BaseCtorType->getArgType(i),
7099                                                   /*TInfo=*/0, SC_None,
7100                                                   SC_None, /*DefaultArg=*/0));
7101        }
7102        NewCtor->setParams(ParamDecls);
7103        NewCtor->setInheritedConstructor(BaseCtor);
7104
7105        ClassDecl->addDecl(NewCtor);
7106        result.first->second.second = NewCtor;
7107      }
7108    }
7109  }
7110}
7111
7112Sema::ImplicitExceptionSpecification
7113Sema::ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD) {
7114  CXXRecordDecl *ClassDecl = MD->getParent();
7115
7116  // C++ [except.spec]p14:
7117  //   An implicitly declared special member function (Clause 12) shall have
7118  //   an exception-specification.
7119  ImplicitExceptionSpecification ExceptSpec(*this);
7120  if (ClassDecl->isInvalidDecl())
7121    return ExceptSpec;
7122
7123  // Direct base-class destructors.
7124  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7125                                       BEnd = ClassDecl->bases_end();
7126       B != BEnd; ++B) {
7127    if (B->isVirtual()) // Handled below.
7128      continue;
7129
7130    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
7131      ExceptSpec.CalledDecl(B->getLocStart(),
7132                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
7133  }
7134
7135  // Virtual base-class destructors.
7136  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7137                                       BEnd = ClassDecl->vbases_end();
7138       B != BEnd; ++B) {
7139    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
7140      ExceptSpec.CalledDecl(B->getLocStart(),
7141                  LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
7142  }
7143
7144  // Field destructors.
7145  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7146                               FEnd = ClassDecl->field_end();
7147       F != FEnd; ++F) {
7148    if (const RecordType *RecordTy
7149        = Context.getBaseElementType(F->getType())->getAs<RecordType>())
7150      ExceptSpec.CalledDecl(F->getLocation(),
7151                  LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
7152  }
7153
7154  return ExceptSpec;
7155}
7156
7157CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
7158  // C++ [class.dtor]p2:
7159  //   If a class has no user-declared destructor, a destructor is
7160  //   declared implicitly. An implicitly-declared destructor is an
7161  //   inline public member of its class.
7162
7163  // Create the actual destructor declaration.
7164  CanQualType ClassType
7165    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7166  SourceLocation ClassLoc = ClassDecl->getLocation();
7167  DeclarationName Name
7168    = Context.DeclarationNames.getCXXDestructorName(ClassType);
7169  DeclarationNameInfo NameInfo(Name, ClassLoc);
7170  CXXDestructorDecl *Destructor
7171      = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
7172                                  QualType(), 0, /*isInline=*/true,
7173                                  /*isImplicitlyDeclared=*/true);
7174  Destructor->setAccess(AS_public);
7175  Destructor->setDefaulted();
7176  Destructor->setImplicit();
7177  Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
7178
7179  // Build an exception specification pointing back at this destructor.
7180  FunctionProtoType::ExtProtoInfo EPI;
7181  EPI.ExceptionSpecType = EST_Unevaluated;
7182  EPI.ExceptionSpecDecl = Destructor;
7183  Destructor->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
7184
7185  // Note that we have declared this destructor.
7186  ++ASTContext::NumImplicitDestructorsDeclared;
7187
7188  // Introduce this destructor into its scope.
7189  if (Scope *S = getScopeForContext(ClassDecl))
7190    PushOnScopeChains(Destructor, S, false);
7191  ClassDecl->addDecl(Destructor);
7192
7193  AddOverriddenMethods(ClassDecl, Destructor);
7194
7195  if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
7196    Destructor->setDeletedAsWritten();
7197
7198  return Destructor;
7199}
7200
7201void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
7202                                    CXXDestructorDecl *Destructor) {
7203  assert((Destructor->isDefaulted() &&
7204          !Destructor->doesThisDeclarationHaveABody() &&
7205          !Destructor->isDeleted()) &&
7206         "DefineImplicitDestructor - call it for implicit default dtor");
7207  CXXRecordDecl *ClassDecl = Destructor->getParent();
7208  assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
7209
7210  if (Destructor->isInvalidDecl())
7211    return;
7212
7213  ImplicitlyDefinedFunctionScope Scope(*this, Destructor);
7214
7215  DiagnosticErrorTrap Trap(Diags);
7216  MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
7217                                         Destructor->getParent());
7218
7219  if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
7220    Diag(CurrentLocation, diag::note_member_synthesized_at)
7221      << CXXDestructor << Context.getTagDeclType(ClassDecl);
7222
7223    Destructor->setInvalidDecl();
7224    return;
7225  }
7226
7227  SourceLocation Loc = Destructor->getLocation();
7228  Destructor->setBody(new (Context) CompoundStmt(Loc));
7229  Destructor->setImplicitlyDefined(true);
7230  Destructor->setUsed();
7231  MarkVTableUsed(CurrentLocation, ClassDecl);
7232
7233  if (ASTMutationListener *L = getASTMutationListener()) {
7234    L->CompletedImplicitDefinition(Destructor);
7235  }
7236}
7237
7238/// \brief Perform any semantic analysis which needs to be delayed until all
7239/// pending class member declarations have been parsed.
7240void Sema::ActOnFinishCXXMemberDecls() {
7241  // Perform any deferred checking of exception specifications for virtual
7242  // destructors.
7243  for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
7244       i != e; ++i) {
7245    const CXXDestructorDecl *Dtor =
7246        DelayedDestructorExceptionSpecChecks[i].first;
7247    assert(!Dtor->getParent()->isDependentType() &&
7248           "Should not ever add destructors of templates into the list.");
7249    CheckOverridingFunctionExceptionSpec(Dtor,
7250        DelayedDestructorExceptionSpecChecks[i].second);
7251  }
7252  DelayedDestructorExceptionSpecChecks.clear();
7253}
7254
7255void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
7256                                         CXXDestructorDecl *Destructor) {
7257  assert(getLangOpts().CPlusPlus0x &&
7258         "adjusting dtor exception specs was introduced in c++11");
7259
7260  // C++11 [class.dtor]p3:
7261  //   A declaration of a destructor that does not have an exception-
7262  //   specification is implicitly considered to have the same exception-
7263  //   specification as an implicit declaration.
7264  const FunctionProtoType *DtorType = Destructor->getType()->
7265                                        getAs<FunctionProtoType>();
7266  if (DtorType->hasExceptionSpec())
7267    return;
7268
7269  // Replace the destructor's type, building off the existing one. Fortunately,
7270  // the only thing of interest in the destructor type is its extended info.
7271  // The return and arguments are fixed.
7272  FunctionProtoType::ExtProtoInfo EPI = DtorType->getExtProtoInfo();
7273  EPI.ExceptionSpecType = EST_Unevaluated;
7274  EPI.ExceptionSpecDecl = Destructor;
7275  Destructor->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
7276
7277  // FIXME: If the destructor has a body that could throw, and the newly created
7278  // spec doesn't allow exceptions, we should emit a warning, because this
7279  // change in behavior can break conforming C++03 programs at runtime.
7280  // However, we don't have a body or an exception specification yet, so it
7281  // needs to be done somewhere else.
7282}
7283
7284/// \brief Builds a statement that copies/moves the given entity from \p From to
7285/// \c To.
7286///
7287/// This routine is used to copy/move the members of a class with an
7288/// implicitly-declared copy/move assignment operator. When the entities being
7289/// copied are arrays, this routine builds for loops to copy them.
7290///
7291/// \param S The Sema object used for type-checking.
7292///
7293/// \param Loc The location where the implicit copy/move is being generated.
7294///
7295/// \param T The type of the expressions being copied/moved. Both expressions
7296/// must have this type.
7297///
7298/// \param To The expression we are copying/moving to.
7299///
7300/// \param From The expression we are copying/moving from.
7301///
7302/// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
7303/// Otherwise, it's a non-static member subobject.
7304///
7305/// \param Copying Whether we're copying or moving.
7306///
7307/// \param Depth Internal parameter recording the depth of the recursion.
7308///
7309/// \returns A statement or a loop that copies the expressions.
7310static StmtResult
7311BuildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
7312                      Expr *To, Expr *From,
7313                      bool CopyingBaseSubobject, bool Copying,
7314                      unsigned Depth = 0) {
7315  // C++0x [class.copy]p28:
7316  //   Each subobject is assigned in the manner appropriate to its type:
7317  //
7318  //     - if the subobject is of class type, as if by a call to operator= with
7319  //       the subobject as the object expression and the corresponding
7320  //       subobject of x as a single function argument (as if by explicit
7321  //       qualification; that is, ignoring any possible virtual overriding
7322  //       functions in more derived classes);
7323  if (const RecordType *RecordTy = T->getAs<RecordType>()) {
7324    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7325
7326    // Look for operator=.
7327    DeclarationName Name
7328      = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
7329    LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
7330    S.LookupQualifiedName(OpLookup, ClassDecl, false);
7331
7332    // Filter out any result that isn't a copy/move-assignment operator.
7333    LookupResult::Filter F = OpLookup.makeFilter();
7334    while (F.hasNext()) {
7335      NamedDecl *D = F.next();
7336      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
7337        if (Method->isCopyAssignmentOperator() ||
7338            (!Copying && Method->isMoveAssignmentOperator()))
7339          continue;
7340
7341      F.erase();
7342    }
7343    F.done();
7344
7345    // Suppress the protected check (C++ [class.protected]) for each of the
7346    // assignment operators we found. This strange dance is required when
7347    // we're assigning via a base classes's copy-assignment operator. To
7348    // ensure that we're getting the right base class subobject (without
7349    // ambiguities), we need to cast "this" to that subobject type; to
7350    // ensure that we don't go through the virtual call mechanism, we need
7351    // to qualify the operator= name with the base class (see below). However,
7352    // this means that if the base class has a protected copy assignment
7353    // operator, the protected member access check will fail. So, we
7354    // rewrite "protected" access to "public" access in this case, since we
7355    // know by construction that we're calling from a derived class.
7356    if (CopyingBaseSubobject) {
7357      for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
7358           L != LEnd; ++L) {
7359        if (L.getAccess() == AS_protected)
7360          L.setAccess(AS_public);
7361      }
7362    }
7363
7364    // Create the nested-name-specifier that will be used to qualify the
7365    // reference to operator=; this is required to suppress the virtual
7366    // call mechanism.
7367    CXXScopeSpec SS;
7368    const Type *CanonicalT = S.Context.getCanonicalType(T.getTypePtr());
7369    SS.MakeTrivial(S.Context,
7370                   NestedNameSpecifier::Create(S.Context, 0, false,
7371                                               CanonicalT),
7372                   Loc);
7373
7374    // Create the reference to operator=.
7375    ExprResult OpEqualRef
7376      = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
7377                                   /*TemplateKWLoc=*/SourceLocation(),
7378                                   /*FirstQualifierInScope=*/0,
7379                                   OpLookup,
7380                                   /*TemplateArgs=*/0,
7381                                   /*SuppressQualifierCheck=*/true);
7382    if (OpEqualRef.isInvalid())
7383      return StmtError();
7384
7385    // Build the call to the assignment operator.
7386
7387    ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
7388                                                  OpEqualRef.takeAs<Expr>(),
7389                                                  Loc, &From, 1, Loc);
7390    if (Call.isInvalid())
7391      return StmtError();
7392
7393    return S.Owned(Call.takeAs<Stmt>());
7394  }
7395
7396  //     - if the subobject is of scalar type, the built-in assignment
7397  //       operator is used.
7398  const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
7399  if (!ArrayTy) {
7400    ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
7401    if (Assignment.isInvalid())
7402      return StmtError();
7403
7404    return S.Owned(Assignment.takeAs<Stmt>());
7405  }
7406
7407  //     - if the subobject is an array, each element is assigned, in the
7408  //       manner appropriate to the element type;
7409
7410  // Construct a loop over the array bounds, e.g.,
7411  //
7412  //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
7413  //
7414  // that will copy each of the array elements.
7415  QualType SizeType = S.Context.getSizeType();
7416
7417  // Create the iteration variable.
7418  IdentifierInfo *IterationVarName = 0;
7419  {
7420    SmallString<8> Str;
7421    llvm::raw_svector_ostream OS(Str);
7422    OS << "__i" << Depth;
7423    IterationVarName = &S.Context.Idents.get(OS.str());
7424  }
7425  VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
7426                                          IterationVarName, SizeType,
7427                            S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
7428                                          SC_None, SC_None);
7429
7430  // Initialize the iteration variable to zero.
7431  llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
7432  IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
7433
7434  // Create a reference to the iteration variable; we'll use this several
7435  // times throughout.
7436  Expr *IterationVarRef
7437    = S.BuildDeclRefExpr(IterationVar, SizeType, VK_LValue, Loc).take();
7438  assert(IterationVarRef && "Reference to invented variable cannot fail!");
7439  Expr *IterationVarRefRVal = S.DefaultLvalueConversion(IterationVarRef).take();
7440  assert(IterationVarRefRVal && "Conversion of invented variable cannot fail!");
7441
7442  // Create the DeclStmt that holds the iteration variable.
7443  Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
7444
7445  // Create the comparison against the array bound.
7446  llvm::APInt Upper
7447    = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
7448  Expr *Comparison
7449    = new (S.Context) BinaryOperator(IterationVarRefRVal,
7450                     IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
7451                                     BO_NE, S.Context.BoolTy,
7452                                     VK_RValue, OK_Ordinary, Loc);
7453
7454  // Create the pre-increment of the iteration variable.
7455  Expr *Increment
7456    = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
7457                                    VK_LValue, OK_Ordinary, Loc);
7458
7459  // Subscript the "from" and "to" expressions with the iteration variable.
7460  From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
7461                                                         IterationVarRefRVal,
7462                                                         Loc));
7463  To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
7464                                                       IterationVarRefRVal,
7465                                                       Loc));
7466  if (!Copying) // Cast to rvalue
7467    From = CastForMoving(S, From);
7468
7469  // Build the copy/move for an individual element of the array.
7470  StmtResult Copy = BuildSingleCopyAssign(S, Loc, ArrayTy->getElementType(),
7471                                          To, From, CopyingBaseSubobject,
7472                                          Copying, Depth + 1);
7473  if (Copy.isInvalid())
7474    return StmtError();
7475
7476  // Construct the loop that copies all elements of this array.
7477  return S.ActOnForStmt(Loc, Loc, InitStmt,
7478                        S.MakeFullExpr(Comparison),
7479                        0, S.MakeFullExpr(Increment),
7480                        Loc, Copy.take());
7481}
7482
7483/// Determine whether an implicit copy assignment operator for ClassDecl has a
7484/// const argument.
7485/// FIXME: It ought to be possible to store this on the record.
7486static bool isImplicitCopyAssignmentArgConst(Sema &S,
7487                                             CXXRecordDecl *ClassDecl) {
7488  if (ClassDecl->isInvalidDecl())
7489    return true;
7490
7491  // C++ [class.copy]p10:
7492  //   If the class definition does not explicitly declare a copy
7493  //   assignment operator, one is declared implicitly.
7494  //   The implicitly-defined copy assignment operator for a class X
7495  //   will have the form
7496  //
7497  //       X& X::operator=(const X&)
7498  //
7499  //   if
7500  //       -- each direct base class B of X has a copy assignment operator
7501  //          whose parameter is of type const B&, const volatile B& or B,
7502  //          and
7503  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7504                                       BaseEnd = ClassDecl->bases_end();
7505       Base != BaseEnd; ++Base) {
7506    // We'll handle this below
7507    if (S.getLangOpts().CPlusPlus0x && Base->isVirtual())
7508      continue;
7509
7510    assert(!Base->getType()->isDependentType() &&
7511           "Cannot generate implicit members for class with dependent bases.");
7512    CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
7513    if (!S.LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0))
7514      return false;
7515  }
7516
7517  // In C++11, the above citation has "or virtual" added
7518  if (S.getLangOpts().CPlusPlus0x) {
7519    for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7520                                         BaseEnd = ClassDecl->vbases_end();
7521         Base != BaseEnd; ++Base) {
7522      assert(!Base->getType()->isDependentType() &&
7523             "Cannot generate implicit members for class with dependent bases.");
7524      CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
7525      if (!S.LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const,
7526                                     false, 0))
7527        return false;
7528    }
7529  }
7530
7531  //       -- for all the nonstatic data members of X that are of a class
7532  //          type M (or array thereof), each such class type has a copy
7533  //          assignment operator whose parameter is of type const M&,
7534  //          const volatile M& or M.
7535  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7536                                  FieldEnd = ClassDecl->field_end();
7537       Field != FieldEnd; ++Field) {
7538    QualType FieldType = S.Context.getBaseElementType(Field->getType());
7539    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl())
7540      if (!S.LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const,
7541                                     false, 0))
7542        return false;
7543  }
7544
7545  //   Otherwise, the implicitly declared copy assignment operator will
7546  //   have the form
7547  //
7548  //       X& X::operator=(X&)
7549
7550  return true;
7551}
7552
7553Sema::ImplicitExceptionSpecification
7554Sema::ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD) {
7555  CXXRecordDecl *ClassDecl = MD->getParent();
7556
7557  ImplicitExceptionSpecification ExceptSpec(*this);
7558  if (ClassDecl->isInvalidDecl())
7559    return ExceptSpec;
7560
7561  const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
7562  assert(T->getNumArgs() == 1 && "not a copy assignment op");
7563  unsigned ArgQuals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
7564
7565  // C++ [except.spec]p14:
7566  //   An implicitly declared special member function (Clause 12) shall have an
7567  //   exception-specification. [...]
7568
7569  // It is unspecified whether or not an implicit copy assignment operator
7570  // attempts to deduplicate calls to assignment operators of virtual bases are
7571  // made. As such, this exception specification is effectively unspecified.
7572  // Based on a similar decision made for constness in C++0x, we're erring on
7573  // the side of assuming such calls to be made regardless of whether they
7574  // actually happen.
7575  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7576                                       BaseEnd = ClassDecl->bases_end();
7577       Base != BaseEnd; ++Base) {
7578    if (Base->isVirtual())
7579      continue;
7580
7581    CXXRecordDecl *BaseClassDecl
7582      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7583    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
7584                                                            ArgQuals, false, 0))
7585      ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
7586  }
7587
7588  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7589                                       BaseEnd = ClassDecl->vbases_end();
7590       Base != BaseEnd; ++Base) {
7591    CXXRecordDecl *BaseClassDecl
7592      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7593    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
7594                                                            ArgQuals, false, 0))
7595      ExceptSpec.CalledDecl(Base->getLocStart(), CopyAssign);
7596  }
7597
7598  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7599                                  FieldEnd = ClassDecl->field_end();
7600       Field != FieldEnd;
7601       ++Field) {
7602    QualType FieldType = Context.getBaseElementType(Field->getType());
7603    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
7604      if (CXXMethodDecl *CopyAssign =
7605          LookupCopyingAssignment(FieldClassDecl,
7606                                  ArgQuals | FieldType.getCVRQualifiers(),
7607                                  false, 0))
7608        ExceptSpec.CalledDecl(Field->getLocation(), CopyAssign);
7609    }
7610  }
7611
7612  return ExceptSpec;
7613}
7614
7615CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
7616  // Note: The following rules are largely analoguous to the copy
7617  // constructor rules. Note that virtual bases are not taken into account
7618  // for determining the argument type of the operator. Note also that
7619  // operators taking an object instead of a reference are allowed.
7620
7621  QualType ArgType = Context.getTypeDeclType(ClassDecl);
7622  QualType RetType = Context.getLValueReferenceType(ArgType);
7623  if (isImplicitCopyAssignmentArgConst(*this, ClassDecl))
7624    ArgType = ArgType.withConst();
7625  ArgType = Context.getLValueReferenceType(ArgType);
7626
7627  //   An implicitly-declared copy assignment operator is an inline public
7628  //   member of its class.
7629  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
7630  SourceLocation ClassLoc = ClassDecl->getLocation();
7631  DeclarationNameInfo NameInfo(Name, ClassLoc);
7632  CXXMethodDecl *CopyAssignment
7633    = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
7634                            /*TInfo=*/0, /*isStatic=*/false,
7635                            /*StorageClassAsWritten=*/SC_None,
7636                            /*isInline=*/true, /*isConstexpr=*/false,
7637                            SourceLocation());
7638  CopyAssignment->setAccess(AS_public);
7639  CopyAssignment->setDefaulted();
7640  CopyAssignment->setImplicit();
7641  CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
7642
7643  // Build an exception specification pointing back at this member.
7644  FunctionProtoType::ExtProtoInfo EPI;
7645  EPI.ExceptionSpecType = EST_Unevaluated;
7646  EPI.ExceptionSpecDecl = CopyAssignment;
7647  CopyAssignment->setType(Context.getFunctionType(RetType, &ArgType, 1, EPI));
7648
7649  // Add the parameter to the operator.
7650  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
7651                                               ClassLoc, ClassLoc, /*Id=*/0,
7652                                               ArgType, /*TInfo=*/0,
7653                                               SC_None,
7654                                               SC_None, 0);
7655  CopyAssignment->setParams(FromParam);
7656
7657  // Note that we have added this copy-assignment operator.
7658  ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
7659
7660  if (Scope *S = getScopeForContext(ClassDecl))
7661    PushOnScopeChains(CopyAssignment, S, false);
7662  ClassDecl->addDecl(CopyAssignment);
7663
7664  // C++0x [class.copy]p19:
7665  //   ....  If the class definition does not explicitly declare a copy
7666  //   assignment operator, there is no user-declared move constructor, and
7667  //   there is no user-declared move assignment operator, a copy assignment
7668  //   operator is implicitly declared as defaulted.
7669  if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
7670    CopyAssignment->setDeletedAsWritten();
7671
7672  AddOverriddenMethods(ClassDecl, CopyAssignment);
7673  return CopyAssignment;
7674}
7675
7676void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
7677                                        CXXMethodDecl *CopyAssignOperator) {
7678  assert((CopyAssignOperator->isDefaulted() &&
7679          CopyAssignOperator->isOverloadedOperator() &&
7680          CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
7681          !CopyAssignOperator->doesThisDeclarationHaveABody() &&
7682          !CopyAssignOperator->isDeleted()) &&
7683         "DefineImplicitCopyAssignment called for wrong function");
7684
7685  CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
7686
7687  if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
7688    CopyAssignOperator->setInvalidDecl();
7689    return;
7690  }
7691
7692  CopyAssignOperator->setUsed();
7693
7694  ImplicitlyDefinedFunctionScope Scope(*this, CopyAssignOperator);
7695  DiagnosticErrorTrap Trap(Diags);
7696
7697  // C++0x [class.copy]p30:
7698  //   The implicitly-defined or explicitly-defaulted copy assignment operator
7699  //   for a non-union class X performs memberwise copy assignment of its
7700  //   subobjects. The direct base classes of X are assigned first, in the
7701  //   order of their declaration in the base-specifier-list, and then the
7702  //   immediate non-static data members of X are assigned, in the order in
7703  //   which they were declared in the class definition.
7704
7705  // The statements that form the synthesized function body.
7706  SmallVector<Stmt*, 8> Statements;
7707
7708  // The parameter for the "other" object, which we are copying from.
7709  ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
7710  Qualifiers OtherQuals = Other->getType().getQualifiers();
7711  QualType OtherRefType = Other->getType();
7712  if (const LValueReferenceType *OtherRef
7713                                = OtherRefType->getAs<LValueReferenceType>()) {
7714    OtherRefType = OtherRef->getPointeeType();
7715    OtherQuals = OtherRefType.getQualifiers();
7716  }
7717
7718  // Our location for everything implicitly-generated.
7719  SourceLocation Loc = CopyAssignOperator->getLocation();
7720
7721  // Construct a reference to the "other" object. We'll be using this
7722  // throughout the generated ASTs.
7723  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
7724  assert(OtherRef && "Reference to parameter cannot fail!");
7725
7726  // Construct the "this" pointer. We'll be using this throughout the generated
7727  // ASTs.
7728  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
7729  assert(This && "Reference to this cannot fail!");
7730
7731  // Assign base classes.
7732  bool Invalid = false;
7733  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7734       E = ClassDecl->bases_end(); Base != E; ++Base) {
7735    // Form the assignment:
7736    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
7737    QualType BaseType = Base->getType().getUnqualifiedType();
7738    if (!BaseType->isRecordType()) {
7739      Invalid = true;
7740      continue;
7741    }
7742
7743    CXXCastPath BasePath;
7744    BasePath.push_back(Base);
7745
7746    // Construct the "from" expression, which is an implicit cast to the
7747    // appropriately-qualified base type.
7748    Expr *From = OtherRef;
7749    From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
7750                             CK_UncheckedDerivedToBase,
7751                             VK_LValue, &BasePath).take();
7752
7753    // Dereference "this".
7754    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
7755
7756    // Implicitly cast "this" to the appropriately-qualified base type.
7757    To = ImpCastExprToType(To.take(),
7758                           Context.getCVRQualifiedType(BaseType,
7759                                     CopyAssignOperator->getTypeQualifiers()),
7760                           CK_UncheckedDerivedToBase,
7761                           VK_LValue, &BasePath);
7762
7763    // Build the copy.
7764    StmtResult Copy = BuildSingleCopyAssign(*this, Loc, BaseType,
7765                                            To.get(), From,
7766                                            /*CopyingBaseSubobject=*/true,
7767                                            /*Copying=*/true);
7768    if (Copy.isInvalid()) {
7769      Diag(CurrentLocation, diag::note_member_synthesized_at)
7770        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7771      CopyAssignOperator->setInvalidDecl();
7772      return;
7773    }
7774
7775    // Success! Record the copy.
7776    Statements.push_back(Copy.takeAs<Expr>());
7777  }
7778
7779  // \brief Reference to the __builtin_memcpy function.
7780  Expr *BuiltinMemCpyRef = 0;
7781  // \brief Reference to the __builtin_objc_memmove_collectable function.
7782  Expr *CollectableMemCpyRef = 0;
7783
7784  // Assign non-static members.
7785  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7786                                  FieldEnd = ClassDecl->field_end();
7787       Field != FieldEnd; ++Field) {
7788    if (Field->isUnnamedBitfield())
7789      continue;
7790
7791    // Check for members of reference type; we can't copy those.
7792    if (Field->getType()->isReferenceType()) {
7793      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7794        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
7795      Diag(Field->getLocation(), diag::note_declared_at);
7796      Diag(CurrentLocation, diag::note_member_synthesized_at)
7797        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7798      Invalid = true;
7799      continue;
7800    }
7801
7802    // Check for members of const-qualified, non-class type.
7803    QualType BaseType = Context.getBaseElementType(Field->getType());
7804    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
7805      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7806        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
7807      Diag(Field->getLocation(), diag::note_declared_at);
7808      Diag(CurrentLocation, diag::note_member_synthesized_at)
7809        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7810      Invalid = true;
7811      continue;
7812    }
7813
7814    // Suppress assigning zero-width bitfields.
7815    if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
7816      continue;
7817
7818    QualType FieldType = Field->getType().getNonReferenceType();
7819    if (FieldType->isIncompleteArrayType()) {
7820      assert(ClassDecl->hasFlexibleArrayMember() &&
7821             "Incomplete array type is not valid");
7822      continue;
7823    }
7824
7825    // Build references to the field in the object we're copying from and to.
7826    CXXScopeSpec SS; // Intentionally empty
7827    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
7828                              LookupMemberName);
7829    MemberLookup.addDecl(*Field);
7830    MemberLookup.resolveKind();
7831    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
7832                                               Loc, /*IsArrow=*/false,
7833                                               SS, SourceLocation(), 0,
7834                                               MemberLookup, 0);
7835    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
7836                                             Loc, /*IsArrow=*/true,
7837                                             SS, SourceLocation(), 0,
7838                                             MemberLookup, 0);
7839    assert(!From.isInvalid() && "Implicit field reference cannot fail");
7840    assert(!To.isInvalid() && "Implicit field reference cannot fail");
7841
7842    // If the field should be copied with __builtin_memcpy rather than via
7843    // explicit assignments, do so. This optimization only applies for arrays
7844    // of scalars and arrays of class type with trivial copy-assignment
7845    // operators.
7846    if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
7847        && BaseType.hasTrivialAssignment(Context, /*Copying=*/true)) {
7848      // Compute the size of the memory buffer to be copied.
7849      QualType SizeType = Context.getSizeType();
7850      llvm::APInt Size(Context.getTypeSize(SizeType),
7851                       Context.getTypeSizeInChars(BaseType).getQuantity());
7852      for (const ConstantArrayType *Array
7853              = Context.getAsConstantArrayType(FieldType);
7854           Array;
7855           Array = Context.getAsConstantArrayType(Array->getElementType())) {
7856        llvm::APInt ArraySize
7857          = Array->getSize().zextOrTrunc(Size.getBitWidth());
7858        Size *= ArraySize;
7859      }
7860
7861      // Take the address of the field references for "from" and "to".
7862      From = CreateBuiltinUnaryOp(Loc, UO_AddrOf, From.get());
7863      To = CreateBuiltinUnaryOp(Loc, UO_AddrOf, To.get());
7864
7865      bool NeedsCollectableMemCpy =
7866          (BaseType->isRecordType() &&
7867           BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
7868
7869      if (NeedsCollectableMemCpy) {
7870        if (!CollectableMemCpyRef) {
7871          // Create a reference to the __builtin_objc_memmove_collectable function.
7872          LookupResult R(*this,
7873                         &Context.Idents.get("__builtin_objc_memmove_collectable"),
7874                         Loc, LookupOrdinaryName);
7875          LookupName(R, TUScope, true);
7876
7877          FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
7878          if (!CollectableMemCpy) {
7879            // Something went horribly wrong earlier, and we will have
7880            // complained about it.
7881            Invalid = true;
7882            continue;
7883          }
7884
7885          CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
7886                                                  Context.BuiltinFnTy,
7887                                                  VK_RValue, Loc, 0).take();
7888          assert(CollectableMemCpyRef && "Builtin reference cannot fail");
7889        }
7890      }
7891      // Create a reference to the __builtin_memcpy builtin function.
7892      else if (!BuiltinMemCpyRef) {
7893        LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
7894                       LookupOrdinaryName);
7895        LookupName(R, TUScope, true);
7896
7897        FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
7898        if (!BuiltinMemCpy) {
7899          // Something went horribly wrong earlier, and we will have complained
7900          // about it.
7901          Invalid = true;
7902          continue;
7903        }
7904
7905        BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
7906                                            Context.BuiltinFnTy,
7907                                            VK_RValue, Loc, 0).take();
7908        assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
7909      }
7910
7911      SmallVector<Expr*, 8> CallArgs;
7912      CallArgs.push_back(To.takeAs<Expr>());
7913      CallArgs.push_back(From.takeAs<Expr>());
7914      CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
7915      ExprResult Call = ExprError();
7916      if (NeedsCollectableMemCpy)
7917        Call = ActOnCallExpr(/*Scope=*/0,
7918                             CollectableMemCpyRef,
7919                             Loc, CallArgs,
7920                             Loc);
7921      else
7922        Call = ActOnCallExpr(/*Scope=*/0,
7923                             BuiltinMemCpyRef,
7924                             Loc, CallArgs,
7925                             Loc);
7926
7927      assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
7928      Statements.push_back(Call.takeAs<Expr>());
7929      continue;
7930    }
7931
7932    // Build the copy of this field.
7933    StmtResult Copy = BuildSingleCopyAssign(*this, Loc, FieldType,
7934                                            To.get(), From.get(),
7935                                            /*CopyingBaseSubobject=*/false,
7936                                            /*Copying=*/true);
7937    if (Copy.isInvalid()) {
7938      Diag(CurrentLocation, diag::note_member_synthesized_at)
7939        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7940      CopyAssignOperator->setInvalidDecl();
7941      return;
7942    }
7943
7944    // Success! Record the copy.
7945    Statements.push_back(Copy.takeAs<Stmt>());
7946  }
7947
7948  if (!Invalid) {
7949    // Add a "return *this;"
7950    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
7951
7952    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
7953    if (Return.isInvalid())
7954      Invalid = true;
7955    else {
7956      Statements.push_back(Return.takeAs<Stmt>());
7957
7958      if (Trap.hasErrorOccurred()) {
7959        Diag(CurrentLocation, diag::note_member_synthesized_at)
7960          << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7961        Invalid = true;
7962      }
7963    }
7964  }
7965
7966  if (Invalid) {
7967    CopyAssignOperator->setInvalidDecl();
7968    return;
7969  }
7970
7971  StmtResult Body;
7972  {
7973    CompoundScopeRAII CompoundScope(*this);
7974    Body = ActOnCompoundStmt(Loc, Loc, Statements,
7975                             /*isStmtExpr=*/false);
7976    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
7977  }
7978  CopyAssignOperator->setBody(Body.takeAs<Stmt>());
7979
7980  if (ASTMutationListener *L = getASTMutationListener()) {
7981    L->CompletedImplicitDefinition(CopyAssignOperator);
7982  }
7983}
7984
7985Sema::ImplicitExceptionSpecification
7986Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD) {
7987  CXXRecordDecl *ClassDecl = MD->getParent();
7988
7989  ImplicitExceptionSpecification ExceptSpec(*this);
7990  if (ClassDecl->isInvalidDecl())
7991    return ExceptSpec;
7992
7993  // C++0x [except.spec]p14:
7994  //   An implicitly declared special member function (Clause 12) shall have an
7995  //   exception-specification. [...]
7996
7997  // It is unspecified whether or not an implicit move assignment operator
7998  // attempts to deduplicate calls to assignment operators of virtual bases are
7999  // made. As such, this exception specification is effectively unspecified.
8000  // Based on a similar decision made for constness in C++0x, we're erring on
8001  // the side of assuming such calls to be made regardless of whether they
8002  // actually happen.
8003  // Note that a move constructor is not implicitly declared when there are
8004  // virtual bases, but it can still be user-declared and explicitly defaulted.
8005  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8006                                       BaseEnd = ClassDecl->bases_end();
8007       Base != BaseEnd; ++Base) {
8008    if (Base->isVirtual())
8009      continue;
8010
8011    CXXRecordDecl *BaseClassDecl
8012      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8013    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
8014                                                           0, false, 0))
8015      ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
8016  }
8017
8018  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8019                                       BaseEnd = ClassDecl->vbases_end();
8020       Base != BaseEnd; ++Base) {
8021    CXXRecordDecl *BaseClassDecl
8022      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8023    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
8024                                                           0, false, 0))
8025      ExceptSpec.CalledDecl(Base->getLocStart(), MoveAssign);
8026  }
8027
8028  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8029                                  FieldEnd = ClassDecl->field_end();
8030       Field != FieldEnd;
8031       ++Field) {
8032    QualType FieldType = Context.getBaseElementType(Field->getType());
8033    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8034      if (CXXMethodDecl *MoveAssign =
8035              LookupMovingAssignment(FieldClassDecl,
8036                                     FieldType.getCVRQualifiers(),
8037                                     false, 0))
8038        ExceptSpec.CalledDecl(Field->getLocation(), MoveAssign);
8039    }
8040  }
8041
8042  return ExceptSpec;
8043}
8044
8045/// Determine whether the class type has any direct or indirect virtual base
8046/// classes which have a non-trivial move assignment operator.
8047static bool
8048hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
8049  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8050                                          BaseEnd = ClassDecl->vbases_end();
8051       Base != BaseEnd; ++Base) {
8052    CXXRecordDecl *BaseClass =
8053        cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8054
8055    // Try to declare the move assignment. If it would be deleted, then the
8056    // class does not have a non-trivial move assignment.
8057    if (BaseClass->needsImplicitMoveAssignment())
8058      S.DeclareImplicitMoveAssignment(BaseClass);
8059
8060    // If the class has both a trivial move assignment and a non-trivial move
8061    // assignment, hasTrivialMoveAssignment() is false.
8062    if (BaseClass->hasDeclaredMoveAssignment() &&
8063        !BaseClass->hasTrivialMoveAssignment())
8064      return true;
8065  }
8066
8067  return false;
8068}
8069
8070/// Determine whether the given type either has a move constructor or is
8071/// trivially copyable.
8072static bool
8073hasMoveOrIsTriviallyCopyable(Sema &S, QualType Type, bool IsConstructor) {
8074  Type = S.Context.getBaseElementType(Type);
8075
8076  // FIXME: Technically, non-trivially-copyable non-class types, such as
8077  // reference types, are supposed to return false here, but that appears
8078  // to be a standard defect.
8079  CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
8080  if (!ClassDecl || !ClassDecl->getDefinition())
8081    return true;
8082
8083  if (Type.isTriviallyCopyableType(S.Context))
8084    return true;
8085
8086  if (IsConstructor) {
8087    if (ClassDecl->needsImplicitMoveConstructor())
8088      S.DeclareImplicitMoveConstructor(ClassDecl);
8089    return ClassDecl->hasDeclaredMoveConstructor();
8090  }
8091
8092  if (ClassDecl->needsImplicitMoveAssignment())
8093    S.DeclareImplicitMoveAssignment(ClassDecl);
8094  return ClassDecl->hasDeclaredMoveAssignment();
8095}
8096
8097/// Determine whether all non-static data members and direct or virtual bases
8098/// of class \p ClassDecl have either a move operation, or are trivially
8099/// copyable.
8100static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
8101                                            bool IsConstructor) {
8102  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8103                                          BaseEnd = ClassDecl->bases_end();
8104       Base != BaseEnd; ++Base) {
8105    if (Base->isVirtual())
8106      continue;
8107
8108    if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
8109      return false;
8110  }
8111
8112  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8113                                          BaseEnd = ClassDecl->vbases_end();
8114       Base != BaseEnd; ++Base) {
8115    if (!hasMoveOrIsTriviallyCopyable(S, Base->getType(), IsConstructor))
8116      return false;
8117  }
8118
8119  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8120                                     FieldEnd = ClassDecl->field_end();
8121       Field != FieldEnd; ++Field) {
8122    if (!hasMoveOrIsTriviallyCopyable(S, Field->getType(), IsConstructor))
8123      return false;
8124  }
8125
8126  return true;
8127}
8128
8129CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
8130  // C++11 [class.copy]p20:
8131  //   If the definition of a class X does not explicitly declare a move
8132  //   assignment operator, one will be implicitly declared as defaulted
8133  //   if and only if:
8134  //
8135  //   - [first 4 bullets]
8136  assert(ClassDecl->needsImplicitMoveAssignment());
8137
8138  // [Checked after we build the declaration]
8139  //   - the move assignment operator would not be implicitly defined as
8140  //     deleted,
8141
8142  // [DR1402]:
8143  //   - X has no direct or indirect virtual base class with a non-trivial
8144  //     move assignment operator, and
8145  //   - each of X's non-static data members and direct or virtual base classes
8146  //     has a type that either has a move assignment operator or is trivially
8147  //     copyable.
8148  if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
8149      !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
8150    ClassDecl->setFailedImplicitMoveAssignment();
8151    return 0;
8152  }
8153
8154  // Note: The following rules are largely analoguous to the move
8155  // constructor rules.
8156
8157  QualType ArgType = Context.getTypeDeclType(ClassDecl);
8158  QualType RetType = Context.getLValueReferenceType(ArgType);
8159  ArgType = Context.getRValueReferenceType(ArgType);
8160
8161  //   An implicitly-declared move assignment operator is an inline public
8162  //   member of its class.
8163  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
8164  SourceLocation ClassLoc = ClassDecl->getLocation();
8165  DeclarationNameInfo NameInfo(Name, ClassLoc);
8166  CXXMethodDecl *MoveAssignment
8167    = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
8168                            /*TInfo=*/0, /*isStatic=*/false,
8169                            /*StorageClassAsWritten=*/SC_None,
8170                            /*isInline=*/true,
8171                            /*isConstexpr=*/false,
8172                            SourceLocation());
8173  MoveAssignment->setAccess(AS_public);
8174  MoveAssignment->setDefaulted();
8175  MoveAssignment->setImplicit();
8176  MoveAssignment->setTrivial(ClassDecl->hasTrivialMoveAssignment());
8177
8178  // Build an exception specification pointing back at this member.
8179  FunctionProtoType::ExtProtoInfo EPI;
8180  EPI.ExceptionSpecType = EST_Unevaluated;
8181  EPI.ExceptionSpecDecl = MoveAssignment;
8182  MoveAssignment->setType(Context.getFunctionType(RetType, &ArgType, 1, EPI));
8183
8184  // Add the parameter to the operator.
8185  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
8186                                               ClassLoc, ClassLoc, /*Id=*/0,
8187                                               ArgType, /*TInfo=*/0,
8188                                               SC_None,
8189                                               SC_None, 0);
8190  MoveAssignment->setParams(FromParam);
8191
8192  // Note that we have added this copy-assignment operator.
8193  ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
8194
8195  // C++0x [class.copy]p9:
8196  //   If the definition of a class X does not explicitly declare a move
8197  //   assignment operator, one will be implicitly declared as defaulted if and
8198  //   only if:
8199  //   [...]
8200  //   - the move assignment operator would not be implicitly defined as
8201  //     deleted.
8202  if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
8203    // Cache this result so that we don't try to generate this over and over
8204    // on every lookup, leaking memory and wasting time.
8205    ClassDecl->setFailedImplicitMoveAssignment();
8206    return 0;
8207  }
8208
8209  if (Scope *S = getScopeForContext(ClassDecl))
8210    PushOnScopeChains(MoveAssignment, S, false);
8211  ClassDecl->addDecl(MoveAssignment);
8212
8213  AddOverriddenMethods(ClassDecl, MoveAssignment);
8214  return MoveAssignment;
8215}
8216
8217void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
8218                                        CXXMethodDecl *MoveAssignOperator) {
8219  assert((MoveAssignOperator->isDefaulted() &&
8220          MoveAssignOperator->isOverloadedOperator() &&
8221          MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
8222          !MoveAssignOperator->doesThisDeclarationHaveABody() &&
8223          !MoveAssignOperator->isDeleted()) &&
8224         "DefineImplicitMoveAssignment called for wrong function");
8225
8226  CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
8227
8228  if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
8229    MoveAssignOperator->setInvalidDecl();
8230    return;
8231  }
8232
8233  MoveAssignOperator->setUsed();
8234
8235  ImplicitlyDefinedFunctionScope Scope(*this, MoveAssignOperator);
8236  DiagnosticErrorTrap Trap(Diags);
8237
8238  // C++0x [class.copy]p28:
8239  //   The implicitly-defined or move assignment operator for a non-union class
8240  //   X performs memberwise move assignment of its subobjects. The direct base
8241  //   classes of X are assigned first, in the order of their declaration in the
8242  //   base-specifier-list, and then the immediate non-static data members of X
8243  //   are assigned, in the order in which they were declared in the class
8244  //   definition.
8245
8246  // The statements that form the synthesized function body.
8247  SmallVector<Stmt*, 8> Statements;
8248
8249  // The parameter for the "other" object, which we are move from.
8250  ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
8251  QualType OtherRefType = Other->getType()->
8252      getAs<RValueReferenceType>()->getPointeeType();
8253  assert(OtherRefType.getQualifiers() == 0 &&
8254         "Bad argument type of defaulted move assignment");
8255
8256  // Our location for everything implicitly-generated.
8257  SourceLocation Loc = MoveAssignOperator->getLocation();
8258
8259  // Construct a reference to the "other" object. We'll be using this
8260  // throughout the generated ASTs.
8261  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
8262  assert(OtherRef && "Reference to parameter cannot fail!");
8263  // Cast to rvalue.
8264  OtherRef = CastForMoving(*this, OtherRef);
8265
8266  // Construct the "this" pointer. We'll be using this throughout the generated
8267  // ASTs.
8268  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
8269  assert(This && "Reference to this cannot fail!");
8270
8271  // Assign base classes.
8272  bool Invalid = false;
8273  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8274       E = ClassDecl->bases_end(); Base != E; ++Base) {
8275    // Form the assignment:
8276    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
8277    QualType BaseType = Base->getType().getUnqualifiedType();
8278    if (!BaseType->isRecordType()) {
8279      Invalid = true;
8280      continue;
8281    }
8282
8283    CXXCastPath BasePath;
8284    BasePath.push_back(Base);
8285
8286    // Construct the "from" expression, which is an implicit cast to the
8287    // appropriately-qualified base type.
8288    Expr *From = OtherRef;
8289    From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
8290                             VK_XValue, &BasePath).take();
8291
8292    // Dereference "this".
8293    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
8294
8295    // Implicitly cast "this" to the appropriately-qualified base type.
8296    To = ImpCastExprToType(To.take(),
8297                           Context.getCVRQualifiedType(BaseType,
8298                                     MoveAssignOperator->getTypeQualifiers()),
8299                           CK_UncheckedDerivedToBase,
8300                           VK_LValue, &BasePath);
8301
8302    // Build the move.
8303    StmtResult Move = BuildSingleCopyAssign(*this, Loc, BaseType,
8304                                            To.get(), From,
8305                                            /*CopyingBaseSubobject=*/true,
8306                                            /*Copying=*/false);
8307    if (Move.isInvalid()) {
8308      Diag(CurrentLocation, diag::note_member_synthesized_at)
8309        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8310      MoveAssignOperator->setInvalidDecl();
8311      return;
8312    }
8313
8314    // Success! Record the move.
8315    Statements.push_back(Move.takeAs<Expr>());
8316  }
8317
8318  // \brief Reference to the __builtin_memcpy function.
8319  Expr *BuiltinMemCpyRef = 0;
8320  // \brief Reference to the __builtin_objc_memmove_collectable function.
8321  Expr *CollectableMemCpyRef = 0;
8322
8323  // Assign non-static members.
8324  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8325                                  FieldEnd = ClassDecl->field_end();
8326       Field != FieldEnd; ++Field) {
8327    if (Field->isUnnamedBitfield())
8328      continue;
8329
8330    // Check for members of reference type; we can't move those.
8331    if (Field->getType()->isReferenceType()) {
8332      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8333        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
8334      Diag(Field->getLocation(), diag::note_declared_at);
8335      Diag(CurrentLocation, diag::note_member_synthesized_at)
8336        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8337      Invalid = true;
8338      continue;
8339    }
8340
8341    // Check for members of const-qualified, non-class type.
8342    QualType BaseType = Context.getBaseElementType(Field->getType());
8343    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
8344      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8345        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
8346      Diag(Field->getLocation(), diag::note_declared_at);
8347      Diag(CurrentLocation, diag::note_member_synthesized_at)
8348        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8349      Invalid = true;
8350      continue;
8351    }
8352
8353    // Suppress assigning zero-width bitfields.
8354    if (Field->isBitField() && Field->getBitWidthValue(Context) == 0)
8355      continue;
8356
8357    QualType FieldType = Field->getType().getNonReferenceType();
8358    if (FieldType->isIncompleteArrayType()) {
8359      assert(ClassDecl->hasFlexibleArrayMember() &&
8360             "Incomplete array type is not valid");
8361      continue;
8362    }
8363
8364    // Build references to the field in the object we're copying from and to.
8365    CXXScopeSpec SS; // Intentionally empty
8366    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
8367                              LookupMemberName);
8368    MemberLookup.addDecl(*Field);
8369    MemberLookup.resolveKind();
8370    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
8371                                               Loc, /*IsArrow=*/false,
8372                                               SS, SourceLocation(), 0,
8373                                               MemberLookup, 0);
8374    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
8375                                             Loc, /*IsArrow=*/true,
8376                                             SS, SourceLocation(), 0,
8377                                             MemberLookup, 0);
8378    assert(!From.isInvalid() && "Implicit field reference cannot fail");
8379    assert(!To.isInvalid() && "Implicit field reference cannot fail");
8380
8381    assert(!From.get()->isLValue() && // could be xvalue or prvalue
8382        "Member reference with rvalue base must be rvalue except for reference "
8383        "members, which aren't allowed for move assignment.");
8384
8385    // If the field should be copied with __builtin_memcpy rather than via
8386    // explicit assignments, do so. This optimization only applies for arrays
8387    // of scalars and arrays of class type with trivial move-assignment
8388    // operators.
8389    if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
8390        && BaseType.hasTrivialAssignment(Context, /*Copying=*/false)) {
8391      // Compute the size of the memory buffer to be copied.
8392      QualType SizeType = Context.getSizeType();
8393      llvm::APInt Size(Context.getTypeSize(SizeType),
8394                       Context.getTypeSizeInChars(BaseType).getQuantity());
8395      for (const ConstantArrayType *Array
8396              = Context.getAsConstantArrayType(FieldType);
8397           Array;
8398           Array = Context.getAsConstantArrayType(Array->getElementType())) {
8399        llvm::APInt ArraySize
8400          = Array->getSize().zextOrTrunc(Size.getBitWidth());
8401        Size *= ArraySize;
8402      }
8403
8404      // Take the address of the field references for "from" and "to". We
8405      // directly construct UnaryOperators here because semantic analysis
8406      // does not permit us to take the address of an xvalue.
8407      From = new (Context) UnaryOperator(From.get(), UO_AddrOf,
8408                             Context.getPointerType(From.get()->getType()),
8409                             VK_RValue, OK_Ordinary, Loc);
8410      To = new (Context) UnaryOperator(To.get(), UO_AddrOf,
8411                           Context.getPointerType(To.get()->getType()),
8412                           VK_RValue, OK_Ordinary, Loc);
8413
8414      bool NeedsCollectableMemCpy =
8415          (BaseType->isRecordType() &&
8416           BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
8417
8418      if (NeedsCollectableMemCpy) {
8419        if (!CollectableMemCpyRef) {
8420          // Create a reference to the __builtin_objc_memmove_collectable function.
8421          LookupResult R(*this,
8422                         &Context.Idents.get("__builtin_objc_memmove_collectable"),
8423                         Loc, LookupOrdinaryName);
8424          LookupName(R, TUScope, true);
8425
8426          FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
8427          if (!CollectableMemCpy) {
8428            // Something went horribly wrong earlier, and we will have
8429            // complained about it.
8430            Invalid = true;
8431            continue;
8432          }
8433
8434          CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
8435                                                  Context.BuiltinFnTy,
8436                                                  VK_RValue, Loc, 0).take();
8437          assert(CollectableMemCpyRef && "Builtin reference cannot fail");
8438        }
8439      }
8440      // Create a reference to the __builtin_memcpy builtin function.
8441      else if (!BuiltinMemCpyRef) {
8442        LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
8443                       LookupOrdinaryName);
8444        LookupName(R, TUScope, true);
8445
8446        FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
8447        if (!BuiltinMemCpy) {
8448          // Something went horribly wrong earlier, and we will have complained
8449          // about it.
8450          Invalid = true;
8451          continue;
8452        }
8453
8454        BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
8455                                            Context.BuiltinFnTy,
8456                                            VK_RValue, Loc, 0).take();
8457        assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
8458      }
8459
8460      SmallVector<Expr*, 8> CallArgs;
8461      CallArgs.push_back(To.takeAs<Expr>());
8462      CallArgs.push_back(From.takeAs<Expr>());
8463      CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
8464      ExprResult Call = ExprError();
8465      if (NeedsCollectableMemCpy)
8466        Call = ActOnCallExpr(/*Scope=*/0,
8467                             CollectableMemCpyRef,
8468                             Loc, CallArgs,
8469                             Loc);
8470      else
8471        Call = ActOnCallExpr(/*Scope=*/0,
8472                             BuiltinMemCpyRef,
8473                             Loc, CallArgs,
8474                             Loc);
8475
8476      assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
8477      Statements.push_back(Call.takeAs<Expr>());
8478      continue;
8479    }
8480
8481    // Build the move of this field.
8482    StmtResult Move = BuildSingleCopyAssign(*this, Loc, FieldType,
8483                                            To.get(), From.get(),
8484                                            /*CopyingBaseSubobject=*/false,
8485                                            /*Copying=*/false);
8486    if (Move.isInvalid()) {
8487      Diag(CurrentLocation, diag::note_member_synthesized_at)
8488        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8489      MoveAssignOperator->setInvalidDecl();
8490      return;
8491    }
8492
8493    // Success! Record the copy.
8494    Statements.push_back(Move.takeAs<Stmt>());
8495  }
8496
8497  if (!Invalid) {
8498    // Add a "return *this;"
8499    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
8500
8501    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
8502    if (Return.isInvalid())
8503      Invalid = true;
8504    else {
8505      Statements.push_back(Return.takeAs<Stmt>());
8506
8507      if (Trap.hasErrorOccurred()) {
8508        Diag(CurrentLocation, diag::note_member_synthesized_at)
8509          << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8510        Invalid = true;
8511      }
8512    }
8513  }
8514
8515  if (Invalid) {
8516    MoveAssignOperator->setInvalidDecl();
8517    return;
8518  }
8519
8520  StmtResult Body;
8521  {
8522    CompoundScopeRAII CompoundScope(*this);
8523    Body = ActOnCompoundStmt(Loc, Loc, Statements,
8524                             /*isStmtExpr=*/false);
8525    assert(!Body.isInvalid() && "Compound statement creation cannot fail");
8526  }
8527  MoveAssignOperator->setBody(Body.takeAs<Stmt>());
8528
8529  if (ASTMutationListener *L = getASTMutationListener()) {
8530    L->CompletedImplicitDefinition(MoveAssignOperator);
8531  }
8532}
8533
8534/// Determine whether an implicit copy constructor for ClassDecl has a const
8535/// argument.
8536/// FIXME: It ought to be possible to store this on the record.
8537static bool isImplicitCopyCtorArgConst(Sema &S, CXXRecordDecl *ClassDecl) {
8538  if (ClassDecl->isInvalidDecl())
8539    return true;
8540
8541  // C++ [class.copy]p5:
8542  //   The implicitly-declared copy constructor for a class X will
8543  //   have the form
8544  //
8545  //       X::X(const X&)
8546  //
8547  //   if
8548  //     -- each direct or virtual base class B of X has a copy
8549  //        constructor whose first parameter is of type const B& or
8550  //        const volatile B&, and
8551  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8552                                       BaseEnd = ClassDecl->bases_end();
8553       Base != BaseEnd; ++Base) {
8554    // Virtual bases are handled below.
8555    if (Base->isVirtual())
8556      continue;
8557
8558    CXXRecordDecl *BaseClassDecl
8559      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8560    // FIXME: This lookup is wrong. If the copy ctor for a member or base is
8561    // ambiguous, we should still produce a constructor with a const-qualified
8562    // parameter.
8563    if (!S.LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const))
8564      return false;
8565  }
8566
8567  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8568                                       BaseEnd = ClassDecl->vbases_end();
8569       Base != BaseEnd; ++Base) {
8570    CXXRecordDecl *BaseClassDecl
8571      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8572    if (!S.LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const))
8573      return false;
8574  }
8575
8576  //     -- for all the nonstatic data members of X that are of a
8577  //        class type M (or array thereof), each such class type
8578  //        has a copy constructor whose first parameter is of type
8579  //        const M& or const volatile M&.
8580  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8581                                  FieldEnd = ClassDecl->field_end();
8582       Field != FieldEnd; ++Field) {
8583    QualType FieldType = S.Context.getBaseElementType(Field->getType());
8584    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8585      if (!S.LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const))
8586        return false;
8587    }
8588  }
8589
8590  //   Otherwise, the implicitly declared copy constructor will have
8591  //   the form
8592  //
8593  //       X::X(X&)
8594
8595  return true;
8596}
8597
8598Sema::ImplicitExceptionSpecification
8599Sema::ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD) {
8600  CXXRecordDecl *ClassDecl = MD->getParent();
8601
8602  ImplicitExceptionSpecification ExceptSpec(*this);
8603  if (ClassDecl->isInvalidDecl())
8604    return ExceptSpec;
8605
8606  const FunctionProtoType *T = MD->getType()->castAs<FunctionProtoType>();
8607  assert(T->getNumArgs() >= 1 && "not a copy ctor");
8608  unsigned Quals = T->getArgType(0).getNonReferenceType().getCVRQualifiers();
8609
8610  // C++ [except.spec]p14:
8611  //   An implicitly declared special member function (Clause 12) shall have an
8612  //   exception-specification. [...]
8613  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8614                                       BaseEnd = ClassDecl->bases_end();
8615       Base != BaseEnd;
8616       ++Base) {
8617    // Virtual bases are handled below.
8618    if (Base->isVirtual())
8619      continue;
8620
8621    CXXRecordDecl *BaseClassDecl
8622      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8623    if (CXXConstructorDecl *CopyConstructor =
8624          LookupCopyingConstructor(BaseClassDecl, Quals))
8625      ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
8626  }
8627  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8628                                       BaseEnd = ClassDecl->vbases_end();
8629       Base != BaseEnd;
8630       ++Base) {
8631    CXXRecordDecl *BaseClassDecl
8632      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8633    if (CXXConstructorDecl *CopyConstructor =
8634          LookupCopyingConstructor(BaseClassDecl, Quals))
8635      ExceptSpec.CalledDecl(Base->getLocStart(), CopyConstructor);
8636  }
8637  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8638                                  FieldEnd = ClassDecl->field_end();
8639       Field != FieldEnd;
8640       ++Field) {
8641    QualType FieldType = Context.getBaseElementType(Field->getType());
8642    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8643      if (CXXConstructorDecl *CopyConstructor =
8644              LookupCopyingConstructor(FieldClassDecl,
8645                                       Quals | FieldType.getCVRQualifiers()))
8646      ExceptSpec.CalledDecl(Field->getLocation(), CopyConstructor);
8647    }
8648  }
8649
8650  return ExceptSpec;
8651}
8652
8653CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
8654                                                    CXXRecordDecl *ClassDecl) {
8655  // C++ [class.copy]p4:
8656  //   If the class definition does not explicitly declare a copy
8657  //   constructor, one is declared implicitly.
8658
8659  QualType ClassType = Context.getTypeDeclType(ClassDecl);
8660  QualType ArgType = ClassType;
8661  bool Const = isImplicitCopyCtorArgConst(*this, ClassDecl);
8662  if (Const)
8663    ArgType = ArgType.withConst();
8664  ArgType = Context.getLValueReferenceType(ArgType);
8665
8666  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8667                                                     CXXCopyConstructor,
8668                                                     Const);
8669
8670  DeclarationName Name
8671    = Context.DeclarationNames.getCXXConstructorName(
8672                                           Context.getCanonicalType(ClassType));
8673  SourceLocation ClassLoc = ClassDecl->getLocation();
8674  DeclarationNameInfo NameInfo(Name, ClassLoc);
8675
8676  //   An implicitly-declared copy constructor is an inline public
8677  //   member of its class.
8678  CXXConstructorDecl *CopyConstructor = CXXConstructorDecl::Create(
8679      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
8680      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
8681      Constexpr);
8682  CopyConstructor->setAccess(AS_public);
8683  CopyConstructor->setDefaulted();
8684  CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
8685
8686  // Build an exception specification pointing back at this member.
8687  FunctionProtoType::ExtProtoInfo EPI;
8688  EPI.ExceptionSpecType = EST_Unevaluated;
8689  EPI.ExceptionSpecDecl = CopyConstructor;
8690  CopyConstructor->setType(
8691      Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
8692
8693  // Note that we have declared this constructor.
8694  ++ASTContext::NumImplicitCopyConstructorsDeclared;
8695
8696  // Add the parameter to the constructor.
8697  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
8698                                               ClassLoc, ClassLoc,
8699                                               /*IdentifierInfo=*/0,
8700                                               ArgType, /*TInfo=*/0,
8701                                               SC_None,
8702                                               SC_None, 0);
8703  CopyConstructor->setParams(FromParam);
8704
8705  if (Scope *S = getScopeForContext(ClassDecl))
8706    PushOnScopeChains(CopyConstructor, S, false);
8707  ClassDecl->addDecl(CopyConstructor);
8708
8709  // C++11 [class.copy]p8:
8710  //   ... If the class definition does not explicitly declare a copy
8711  //   constructor, there is no user-declared move constructor, and there is no
8712  //   user-declared move assignment operator, a copy constructor is implicitly
8713  //   declared as defaulted.
8714  if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
8715    CopyConstructor->setDeletedAsWritten();
8716
8717  return CopyConstructor;
8718}
8719
8720void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
8721                                   CXXConstructorDecl *CopyConstructor) {
8722  assert((CopyConstructor->isDefaulted() &&
8723          CopyConstructor->isCopyConstructor() &&
8724          !CopyConstructor->doesThisDeclarationHaveABody() &&
8725          !CopyConstructor->isDeleted()) &&
8726         "DefineImplicitCopyConstructor - call it for implicit copy ctor");
8727
8728  CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
8729  assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
8730
8731  ImplicitlyDefinedFunctionScope Scope(*this, CopyConstructor);
8732  DiagnosticErrorTrap Trap(Diags);
8733
8734  if (SetCtorInitializers(CopyConstructor, 0, 0, /*AnyErrors=*/false) ||
8735      Trap.hasErrorOccurred()) {
8736    Diag(CurrentLocation, diag::note_member_synthesized_at)
8737      << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
8738    CopyConstructor->setInvalidDecl();
8739  }  else {
8740    Sema::CompoundScopeRAII CompoundScope(*this);
8741    CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
8742                                               CopyConstructor->getLocation(),
8743                                               MultiStmtArg(),
8744                                               /*isStmtExpr=*/false)
8745                                                              .takeAs<Stmt>());
8746    CopyConstructor->setImplicitlyDefined(true);
8747  }
8748
8749  CopyConstructor->setUsed();
8750  if (ASTMutationListener *L = getASTMutationListener()) {
8751    L->CompletedImplicitDefinition(CopyConstructor);
8752  }
8753}
8754
8755Sema::ImplicitExceptionSpecification
8756Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD) {
8757  CXXRecordDecl *ClassDecl = MD->getParent();
8758
8759  // C++ [except.spec]p14:
8760  //   An implicitly declared special member function (Clause 12) shall have an
8761  //   exception-specification. [...]
8762  ImplicitExceptionSpecification ExceptSpec(*this);
8763  if (ClassDecl->isInvalidDecl())
8764    return ExceptSpec;
8765
8766  // Direct base-class constructors.
8767  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8768                                       BEnd = ClassDecl->bases_end();
8769       B != BEnd; ++B) {
8770    if (B->isVirtual()) // Handled below.
8771      continue;
8772
8773    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8774      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8775      CXXConstructorDecl *Constructor =
8776          LookupMovingConstructor(BaseClassDecl, 0);
8777      // If this is a deleted function, add it anyway. This might be conformant
8778      // with the standard. This might not. I'm not sure. It might not matter.
8779      if (Constructor)
8780        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
8781    }
8782  }
8783
8784  // Virtual base-class constructors.
8785  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8786                                       BEnd = ClassDecl->vbases_end();
8787       B != BEnd; ++B) {
8788    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8789      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8790      CXXConstructorDecl *Constructor =
8791          LookupMovingConstructor(BaseClassDecl, 0);
8792      // If this is a deleted function, add it anyway. This might be conformant
8793      // with the standard. This might not. I'm not sure. It might not matter.
8794      if (Constructor)
8795        ExceptSpec.CalledDecl(B->getLocStart(), Constructor);
8796    }
8797  }
8798
8799  // Field constructors.
8800  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8801                               FEnd = ClassDecl->field_end();
8802       F != FEnd; ++F) {
8803    QualType FieldType = Context.getBaseElementType(F->getType());
8804    if (CXXRecordDecl *FieldRecDecl = FieldType->getAsCXXRecordDecl()) {
8805      CXXConstructorDecl *Constructor =
8806          LookupMovingConstructor(FieldRecDecl, FieldType.getCVRQualifiers());
8807      // If this is a deleted function, add it anyway. This might be conformant
8808      // with the standard. This might not. I'm not sure. It might not matter.
8809      // In particular, the problem is that this function never gets called. It
8810      // might just be ill-formed because this function attempts to refer to
8811      // a deleted function here.
8812      if (Constructor)
8813        ExceptSpec.CalledDecl(F->getLocation(), Constructor);
8814    }
8815  }
8816
8817  return ExceptSpec;
8818}
8819
8820CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
8821                                                    CXXRecordDecl *ClassDecl) {
8822  // C++11 [class.copy]p9:
8823  //   If the definition of a class X does not explicitly declare a move
8824  //   constructor, one will be implicitly declared as defaulted if and only if:
8825  //
8826  //   - [first 4 bullets]
8827  assert(ClassDecl->needsImplicitMoveConstructor());
8828
8829  // [Checked after we build the declaration]
8830  //   - the move assignment operator would not be implicitly defined as
8831  //     deleted,
8832
8833  // [DR1402]:
8834  //   - each of X's non-static data members and direct or virtual base classes
8835  //     has a type that either has a move constructor or is trivially copyable.
8836  if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
8837    ClassDecl->setFailedImplicitMoveConstructor();
8838    return 0;
8839  }
8840
8841  QualType ClassType = Context.getTypeDeclType(ClassDecl);
8842  QualType ArgType = Context.getRValueReferenceType(ClassType);
8843
8844  bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8845                                                     CXXMoveConstructor,
8846                                                     false);
8847
8848  DeclarationName Name
8849    = Context.DeclarationNames.getCXXConstructorName(
8850                                           Context.getCanonicalType(ClassType));
8851  SourceLocation ClassLoc = ClassDecl->getLocation();
8852  DeclarationNameInfo NameInfo(Name, ClassLoc);
8853
8854  // C++0x [class.copy]p11:
8855  //   An implicitly-declared copy/move constructor is an inline public
8856  //   member of its class.
8857  CXXConstructorDecl *MoveConstructor = CXXConstructorDecl::Create(
8858      Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
8859      /*isExplicit=*/false, /*isInline=*/true, /*isImplicitlyDeclared=*/true,
8860      Constexpr);
8861  MoveConstructor->setAccess(AS_public);
8862  MoveConstructor->setDefaulted();
8863  MoveConstructor->setTrivial(ClassDecl->hasTrivialMoveConstructor());
8864
8865  // Build an exception specification pointing back at this member.
8866  FunctionProtoType::ExtProtoInfo EPI;
8867  EPI.ExceptionSpecType = EST_Unevaluated;
8868  EPI.ExceptionSpecDecl = MoveConstructor;
8869  MoveConstructor->setType(
8870      Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
8871
8872  // Add the parameter to the constructor.
8873  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
8874                                               ClassLoc, ClassLoc,
8875                                               /*IdentifierInfo=*/0,
8876                                               ArgType, /*TInfo=*/0,
8877                                               SC_None,
8878                                               SC_None, 0);
8879  MoveConstructor->setParams(FromParam);
8880
8881  // C++0x [class.copy]p9:
8882  //   If the definition of a class X does not explicitly declare a move
8883  //   constructor, one will be implicitly declared as defaulted if and only if:
8884  //   [...]
8885  //   - the move constructor would not be implicitly defined as deleted.
8886  if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
8887    // Cache this result so that we don't try to generate this over and over
8888    // on every lookup, leaking memory and wasting time.
8889    ClassDecl->setFailedImplicitMoveConstructor();
8890    return 0;
8891  }
8892
8893  // Note that we have declared this constructor.
8894  ++ASTContext::NumImplicitMoveConstructorsDeclared;
8895
8896  if (Scope *S = getScopeForContext(ClassDecl))
8897    PushOnScopeChains(MoveConstructor, S, false);
8898  ClassDecl->addDecl(MoveConstructor);
8899
8900  return MoveConstructor;
8901}
8902
8903void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
8904                                   CXXConstructorDecl *MoveConstructor) {
8905  assert((MoveConstructor->isDefaulted() &&
8906          MoveConstructor->isMoveConstructor() &&
8907          !MoveConstructor->doesThisDeclarationHaveABody() &&
8908          !MoveConstructor->isDeleted()) &&
8909         "DefineImplicitMoveConstructor - call it for implicit move ctor");
8910
8911  CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
8912  assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
8913
8914  ImplicitlyDefinedFunctionScope Scope(*this, MoveConstructor);
8915  DiagnosticErrorTrap Trap(Diags);
8916
8917  if (SetCtorInitializers(MoveConstructor, 0, 0, /*AnyErrors=*/false) ||
8918      Trap.hasErrorOccurred()) {
8919    Diag(CurrentLocation, diag::note_member_synthesized_at)
8920      << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
8921    MoveConstructor->setInvalidDecl();
8922  }  else {
8923    Sema::CompoundScopeRAII CompoundScope(*this);
8924    MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
8925                                               MoveConstructor->getLocation(),
8926                                               MultiStmtArg(),
8927                                               /*isStmtExpr=*/false)
8928                                                              .takeAs<Stmt>());
8929    MoveConstructor->setImplicitlyDefined(true);
8930  }
8931
8932  MoveConstructor->setUsed();
8933
8934  if (ASTMutationListener *L = getASTMutationListener()) {
8935    L->CompletedImplicitDefinition(MoveConstructor);
8936  }
8937}
8938
8939bool Sema::isImplicitlyDeleted(FunctionDecl *FD) {
8940  return FD->isDeleted() &&
8941         (FD->isDefaulted() || FD->isImplicit()) &&
8942         isa<CXXMethodDecl>(FD);
8943}
8944
8945/// \brief Mark the call operator of the given lambda closure type as "used".
8946static void markLambdaCallOperatorUsed(Sema &S, CXXRecordDecl *Lambda) {
8947  CXXMethodDecl *CallOperator
8948    = cast<CXXMethodDecl>(
8949        *Lambda->lookup(
8950          S.Context.DeclarationNames.getCXXOperatorName(OO_Call)).first);
8951  CallOperator->setReferenced();
8952  CallOperator->setUsed();
8953}
8954
8955void Sema::DefineImplicitLambdaToFunctionPointerConversion(
8956       SourceLocation CurrentLocation,
8957       CXXConversionDecl *Conv)
8958{
8959  CXXRecordDecl *Lambda = Conv->getParent();
8960
8961  // Make sure that the lambda call operator is marked used.
8962  markLambdaCallOperatorUsed(*this, Lambda);
8963
8964  Conv->setUsed();
8965
8966  ImplicitlyDefinedFunctionScope Scope(*this, Conv);
8967  DiagnosticErrorTrap Trap(Diags);
8968
8969  // Return the address of the __invoke function.
8970  DeclarationName InvokeName = &Context.Idents.get("__invoke");
8971  CXXMethodDecl *Invoke
8972    = cast<CXXMethodDecl>(*Lambda->lookup(InvokeName).first);
8973  Expr *FunctionRef = BuildDeclRefExpr(Invoke, Invoke->getType(),
8974                                       VK_LValue, Conv->getLocation()).take();
8975  assert(FunctionRef && "Can't refer to __invoke function?");
8976  Stmt *Return = ActOnReturnStmt(Conv->getLocation(), FunctionRef).take();
8977  Conv->setBody(new (Context) CompoundStmt(Context, &Return, 1,
8978                                           Conv->getLocation(),
8979                                           Conv->getLocation()));
8980
8981  // Fill in the __invoke function with a dummy implementation. IR generation
8982  // will fill in the actual details.
8983  Invoke->setUsed();
8984  Invoke->setReferenced();
8985  Invoke->setBody(new (Context) CompoundStmt(Conv->getLocation()));
8986
8987  if (ASTMutationListener *L = getASTMutationListener()) {
8988    L->CompletedImplicitDefinition(Conv);
8989    L->CompletedImplicitDefinition(Invoke);
8990  }
8991}
8992
8993void Sema::DefineImplicitLambdaToBlockPointerConversion(
8994       SourceLocation CurrentLocation,
8995       CXXConversionDecl *Conv)
8996{
8997  Conv->setUsed();
8998
8999  ImplicitlyDefinedFunctionScope Scope(*this, Conv);
9000  DiagnosticErrorTrap Trap(Diags);
9001
9002  // Copy-initialize the lambda object as needed to capture it.
9003  Expr *This = ActOnCXXThis(CurrentLocation).take();
9004  Expr *DerefThis =CreateBuiltinUnaryOp(CurrentLocation, UO_Deref, This).take();
9005
9006  ExprResult BuildBlock = BuildBlockForLambdaConversion(CurrentLocation,
9007                                                        Conv->getLocation(),
9008                                                        Conv, DerefThis);
9009
9010  // If we're not under ARC, make sure we still get the _Block_copy/autorelease
9011  // behavior.  Note that only the general conversion function does this
9012  // (since it's unusable otherwise); in the case where we inline the
9013  // block literal, it has block literal lifetime semantics.
9014  if (!BuildBlock.isInvalid() && !getLangOpts().ObjCAutoRefCount)
9015    BuildBlock = ImplicitCastExpr::Create(Context, BuildBlock.get()->getType(),
9016                                          CK_CopyAndAutoreleaseBlockObject,
9017                                          BuildBlock.get(), 0, VK_RValue);
9018
9019  if (BuildBlock.isInvalid()) {
9020    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
9021    Conv->setInvalidDecl();
9022    return;
9023  }
9024
9025  // Create the return statement that returns the block from the conversion
9026  // function.
9027  StmtResult Return = ActOnReturnStmt(Conv->getLocation(), BuildBlock.get());
9028  if (Return.isInvalid()) {
9029    Diag(CurrentLocation, diag::note_lambda_to_block_conv);
9030    Conv->setInvalidDecl();
9031    return;
9032  }
9033
9034  // Set the body of the conversion function.
9035  Stmt *ReturnS = Return.take();
9036  Conv->setBody(new (Context) CompoundStmt(Context, &ReturnS, 1,
9037                                           Conv->getLocation(),
9038                                           Conv->getLocation()));
9039
9040  // We're done; notify the mutation listener, if any.
9041  if (ASTMutationListener *L = getASTMutationListener()) {
9042    L->CompletedImplicitDefinition(Conv);
9043  }
9044}
9045
9046/// \brief Determine whether the given list arguments contains exactly one
9047/// "real" (non-default) argument.
9048static bool hasOneRealArgument(MultiExprArg Args) {
9049  switch (Args.size()) {
9050  case 0:
9051    return false;
9052
9053  default:
9054    if (!Args[1]->isDefaultArgument())
9055      return false;
9056
9057    // fall through
9058  case 1:
9059    return !Args[0]->isDefaultArgument();
9060  }
9061
9062  return false;
9063}
9064
9065ExprResult
9066Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
9067                            CXXConstructorDecl *Constructor,
9068                            MultiExprArg ExprArgs,
9069                            bool HadMultipleCandidates,
9070                            bool RequiresZeroInit,
9071                            unsigned ConstructKind,
9072                            SourceRange ParenRange) {
9073  bool Elidable = false;
9074
9075  // C++0x [class.copy]p34:
9076  //   When certain criteria are met, an implementation is allowed to
9077  //   omit the copy/move construction of a class object, even if the
9078  //   copy/move constructor and/or destructor for the object have
9079  //   side effects. [...]
9080  //     - when a temporary class object that has not been bound to a
9081  //       reference (12.2) would be copied/moved to a class object
9082  //       with the same cv-unqualified type, the copy/move operation
9083  //       can be omitted by constructing the temporary object
9084  //       directly into the target of the omitted copy/move
9085  if (ConstructKind == CXXConstructExpr::CK_Complete &&
9086      Constructor->isCopyOrMoveConstructor() && hasOneRealArgument(ExprArgs)) {
9087    Expr *SubExpr = ExprArgs[0];
9088    Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
9089  }
9090
9091  return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
9092                               Elidable, ExprArgs, HadMultipleCandidates,
9093                               RequiresZeroInit, ConstructKind, ParenRange);
9094}
9095
9096/// BuildCXXConstructExpr - Creates a complete call to a constructor,
9097/// including handling of its default argument expressions.
9098ExprResult
9099Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
9100                            CXXConstructorDecl *Constructor, bool Elidable,
9101                            MultiExprArg ExprArgs,
9102                            bool HadMultipleCandidates,
9103                            bool RequiresZeroInit,
9104                            unsigned ConstructKind,
9105                            SourceRange ParenRange) {
9106  MarkFunctionReferenced(ConstructLoc, Constructor);
9107  return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
9108                                        Constructor, Elidable, ExprArgs,
9109                                        HadMultipleCandidates, /*FIXME*/false,
9110                                        RequiresZeroInit,
9111              static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
9112                                        ParenRange));
9113}
9114
9115bool Sema::InitializeVarWithConstructor(VarDecl *VD,
9116                                        CXXConstructorDecl *Constructor,
9117                                        MultiExprArg Exprs,
9118                                        bool HadMultipleCandidates) {
9119  // FIXME: Provide the correct paren SourceRange when available.
9120  ExprResult TempResult =
9121    BuildCXXConstructExpr(VD->getLocation(), VD->getType(), Constructor,
9122                          Exprs, HadMultipleCandidates, false,
9123                          CXXConstructExpr::CK_Complete, SourceRange());
9124  if (TempResult.isInvalid())
9125    return true;
9126
9127  Expr *Temp = TempResult.takeAs<Expr>();
9128  CheckImplicitConversions(Temp, VD->getLocation());
9129  MarkFunctionReferenced(VD->getLocation(), Constructor);
9130  Temp = MaybeCreateExprWithCleanups(Temp);
9131  VD->setInit(Temp);
9132
9133  return false;
9134}
9135
9136void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
9137  if (VD->isInvalidDecl()) return;
9138
9139  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
9140  if (ClassDecl->isInvalidDecl()) return;
9141  if (ClassDecl->hasIrrelevantDestructor()) return;
9142  if (ClassDecl->isDependentContext()) return;
9143
9144  CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
9145  MarkFunctionReferenced(VD->getLocation(), Destructor);
9146  CheckDestructorAccess(VD->getLocation(), Destructor,
9147                        PDiag(diag::err_access_dtor_var)
9148                        << VD->getDeclName()
9149                        << VD->getType());
9150  DiagnoseUseOfDecl(Destructor, VD->getLocation());
9151
9152  if (!VD->hasGlobalStorage()) return;
9153
9154  // Emit warning for non-trivial dtor in global scope (a real global,
9155  // class-static, function-static).
9156  Diag(VD->getLocation(), diag::warn_exit_time_destructor);
9157
9158  // TODO: this should be re-enabled for static locals by !CXAAtExit
9159  if (!VD->isStaticLocal())
9160    Diag(VD->getLocation(), diag::warn_global_destructor);
9161}
9162
9163/// \brief Given a constructor and the set of arguments provided for the
9164/// constructor, convert the arguments and add any required default arguments
9165/// to form a proper call to this constructor.
9166///
9167/// \returns true if an error occurred, false otherwise.
9168bool
9169Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
9170                              MultiExprArg ArgsPtr,
9171                              SourceLocation Loc,
9172                              SmallVectorImpl<Expr*> &ConvertedArgs,
9173                              bool AllowExplicit) {
9174  // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
9175  unsigned NumArgs = ArgsPtr.size();
9176  Expr **Args = ArgsPtr.data();
9177
9178  const FunctionProtoType *Proto
9179    = Constructor->getType()->getAs<FunctionProtoType>();
9180  assert(Proto && "Constructor without a prototype?");
9181  unsigned NumArgsInProto = Proto->getNumArgs();
9182
9183  // If too few arguments are available, we'll fill in the rest with defaults.
9184  if (NumArgs < NumArgsInProto)
9185    ConvertedArgs.reserve(NumArgsInProto);
9186  else
9187    ConvertedArgs.reserve(NumArgs);
9188
9189  VariadicCallType CallType =
9190    Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
9191  SmallVector<Expr *, 8> AllArgs;
9192  bool Invalid = GatherArgumentsForCall(Loc, Constructor,
9193                                        Proto, 0, Args, NumArgs, AllArgs,
9194                                        CallType, AllowExplicit);
9195  ConvertedArgs.append(AllArgs.begin(), AllArgs.end());
9196
9197  DiagnoseSentinelCalls(Constructor, Loc, AllArgs.data(), AllArgs.size());
9198
9199  CheckConstructorCall(Constructor, AllArgs.data(), AllArgs.size(),
9200                       Proto, Loc);
9201
9202  return Invalid;
9203}
9204
9205static inline bool
9206CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
9207                                       const FunctionDecl *FnDecl) {
9208  const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
9209  if (isa<NamespaceDecl>(DC)) {
9210    return SemaRef.Diag(FnDecl->getLocation(),
9211                        diag::err_operator_new_delete_declared_in_namespace)
9212      << FnDecl->getDeclName();
9213  }
9214
9215  if (isa<TranslationUnitDecl>(DC) &&
9216      FnDecl->getStorageClass() == SC_Static) {
9217    return SemaRef.Diag(FnDecl->getLocation(),
9218                        diag::err_operator_new_delete_declared_static)
9219      << FnDecl->getDeclName();
9220  }
9221
9222  return false;
9223}
9224
9225static inline bool
9226CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
9227                            CanQualType ExpectedResultType,
9228                            CanQualType ExpectedFirstParamType,
9229                            unsigned DependentParamTypeDiag,
9230                            unsigned InvalidParamTypeDiag) {
9231  QualType ResultType =
9232    FnDecl->getType()->getAs<FunctionType>()->getResultType();
9233
9234  // Check that the result type is not dependent.
9235  if (ResultType->isDependentType())
9236    return SemaRef.Diag(FnDecl->getLocation(),
9237                        diag::err_operator_new_delete_dependent_result_type)
9238    << FnDecl->getDeclName() << ExpectedResultType;
9239
9240  // Check that the result type is what we expect.
9241  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
9242    return SemaRef.Diag(FnDecl->getLocation(),
9243                        diag::err_operator_new_delete_invalid_result_type)
9244    << FnDecl->getDeclName() << ExpectedResultType;
9245
9246  // A function template must have at least 2 parameters.
9247  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
9248    return SemaRef.Diag(FnDecl->getLocation(),
9249                      diag::err_operator_new_delete_template_too_few_parameters)
9250        << FnDecl->getDeclName();
9251
9252  // The function decl must have at least 1 parameter.
9253  if (FnDecl->getNumParams() == 0)
9254    return SemaRef.Diag(FnDecl->getLocation(),
9255                        diag::err_operator_new_delete_too_few_parameters)
9256      << FnDecl->getDeclName();
9257
9258  // Check the first parameter type is not dependent.
9259  QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
9260  if (FirstParamType->isDependentType())
9261    return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
9262      << FnDecl->getDeclName() << ExpectedFirstParamType;
9263
9264  // Check that the first parameter type is what we expect.
9265  if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
9266      ExpectedFirstParamType)
9267    return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
9268    << FnDecl->getDeclName() << ExpectedFirstParamType;
9269
9270  return false;
9271}
9272
9273static bool
9274CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
9275  // C++ [basic.stc.dynamic.allocation]p1:
9276  //   A program is ill-formed if an allocation function is declared in a
9277  //   namespace scope other than global scope or declared static in global
9278  //   scope.
9279  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
9280    return true;
9281
9282  CanQualType SizeTy =
9283    SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
9284
9285  // C++ [basic.stc.dynamic.allocation]p1:
9286  //  The return type shall be void*. The first parameter shall have type
9287  //  std::size_t.
9288  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
9289                                  SizeTy,
9290                                  diag::err_operator_new_dependent_param_type,
9291                                  diag::err_operator_new_param_type))
9292    return true;
9293
9294  // C++ [basic.stc.dynamic.allocation]p1:
9295  //  The first parameter shall not have an associated default argument.
9296  if (FnDecl->getParamDecl(0)->hasDefaultArg())
9297    return SemaRef.Diag(FnDecl->getLocation(),
9298                        diag::err_operator_new_default_arg)
9299      << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
9300
9301  return false;
9302}
9303
9304static bool
9305CheckOperatorDeleteDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
9306  // C++ [basic.stc.dynamic.deallocation]p1:
9307  //   A program is ill-formed if deallocation functions are declared in a
9308  //   namespace scope other than global scope or declared static in global
9309  //   scope.
9310  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
9311    return true;
9312
9313  // C++ [basic.stc.dynamic.deallocation]p2:
9314  //   Each deallocation function shall return void and its first parameter
9315  //   shall be void*.
9316  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
9317                                  SemaRef.Context.VoidPtrTy,
9318                                 diag::err_operator_delete_dependent_param_type,
9319                                 diag::err_operator_delete_param_type))
9320    return true;
9321
9322  return false;
9323}
9324
9325/// CheckOverloadedOperatorDeclaration - Check whether the declaration
9326/// of this overloaded operator is well-formed. If so, returns false;
9327/// otherwise, emits appropriate diagnostics and returns true.
9328bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
9329  assert(FnDecl && FnDecl->isOverloadedOperator() &&
9330         "Expected an overloaded operator declaration");
9331
9332  OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
9333
9334  // C++ [over.oper]p5:
9335  //   The allocation and deallocation functions, operator new,
9336  //   operator new[], operator delete and operator delete[], are
9337  //   described completely in 3.7.3. The attributes and restrictions
9338  //   found in the rest of this subclause do not apply to them unless
9339  //   explicitly stated in 3.7.3.
9340  if (Op == OO_Delete || Op == OO_Array_Delete)
9341    return CheckOperatorDeleteDeclaration(*this, FnDecl);
9342
9343  if (Op == OO_New || Op == OO_Array_New)
9344    return CheckOperatorNewDeclaration(*this, FnDecl);
9345
9346  // C++ [over.oper]p6:
9347  //   An operator function shall either be a non-static member
9348  //   function or be a non-member function and have at least one
9349  //   parameter whose type is a class, a reference to a class, an
9350  //   enumeration, or a reference to an enumeration.
9351  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
9352    if (MethodDecl->isStatic())
9353      return Diag(FnDecl->getLocation(),
9354                  diag::err_operator_overload_static) << FnDecl->getDeclName();
9355  } else {
9356    bool ClassOrEnumParam = false;
9357    for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
9358                                   ParamEnd = FnDecl->param_end();
9359         Param != ParamEnd; ++Param) {
9360      QualType ParamType = (*Param)->getType().getNonReferenceType();
9361      if (ParamType->isDependentType() || ParamType->isRecordType() ||
9362          ParamType->isEnumeralType()) {
9363        ClassOrEnumParam = true;
9364        break;
9365      }
9366    }
9367
9368    if (!ClassOrEnumParam)
9369      return Diag(FnDecl->getLocation(),
9370                  diag::err_operator_overload_needs_class_or_enum)
9371        << FnDecl->getDeclName();
9372  }
9373
9374  // C++ [over.oper]p8:
9375  //   An operator function cannot have default arguments (8.3.6),
9376  //   except where explicitly stated below.
9377  //
9378  // Only the function-call operator allows default arguments
9379  // (C++ [over.call]p1).
9380  if (Op != OO_Call) {
9381    for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
9382         Param != FnDecl->param_end(); ++Param) {
9383      if ((*Param)->hasDefaultArg())
9384        return Diag((*Param)->getLocation(),
9385                    diag::err_operator_overload_default_arg)
9386          << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
9387    }
9388  }
9389
9390  static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
9391    { false, false, false }
9392#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
9393    , { Unary, Binary, MemberOnly }
9394#include "clang/Basic/OperatorKinds.def"
9395  };
9396
9397  bool CanBeUnaryOperator = OperatorUses[Op][0];
9398  bool CanBeBinaryOperator = OperatorUses[Op][1];
9399  bool MustBeMemberOperator = OperatorUses[Op][2];
9400
9401  // C++ [over.oper]p8:
9402  //   [...] Operator functions cannot have more or fewer parameters
9403  //   than the number required for the corresponding operator, as
9404  //   described in the rest of this subclause.
9405  unsigned NumParams = FnDecl->getNumParams()
9406                     + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
9407  if (Op != OO_Call &&
9408      ((NumParams == 1 && !CanBeUnaryOperator) ||
9409       (NumParams == 2 && !CanBeBinaryOperator) ||
9410       (NumParams < 1) || (NumParams > 2))) {
9411    // We have the wrong number of parameters.
9412    unsigned ErrorKind;
9413    if (CanBeUnaryOperator && CanBeBinaryOperator) {
9414      ErrorKind = 2;  // 2 -> unary or binary.
9415    } else if (CanBeUnaryOperator) {
9416      ErrorKind = 0;  // 0 -> unary
9417    } else {
9418      assert(CanBeBinaryOperator &&
9419             "All non-call overloaded operators are unary or binary!");
9420      ErrorKind = 1;  // 1 -> binary
9421    }
9422
9423    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
9424      << FnDecl->getDeclName() << NumParams << ErrorKind;
9425  }
9426
9427  // Overloaded operators other than operator() cannot be variadic.
9428  if (Op != OO_Call &&
9429      FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
9430    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
9431      << FnDecl->getDeclName();
9432  }
9433
9434  // Some operators must be non-static member functions.
9435  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
9436    return Diag(FnDecl->getLocation(),
9437                diag::err_operator_overload_must_be_member)
9438      << FnDecl->getDeclName();
9439  }
9440
9441  // C++ [over.inc]p1:
9442  //   The user-defined function called operator++ implements the
9443  //   prefix and postfix ++ operator. If this function is a member
9444  //   function with no parameters, or a non-member function with one
9445  //   parameter of class or enumeration type, it defines the prefix
9446  //   increment operator ++ for objects of that type. If the function
9447  //   is a member function with one parameter (which shall be of type
9448  //   int) or a non-member function with two parameters (the second
9449  //   of which shall be of type int), it defines the postfix
9450  //   increment operator ++ for objects of that type.
9451  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
9452    ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
9453    bool ParamIsInt = false;
9454    if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
9455      ParamIsInt = BT->getKind() == BuiltinType::Int;
9456
9457    if (!ParamIsInt)
9458      return Diag(LastParam->getLocation(),
9459                  diag::err_operator_overload_post_incdec_must_be_int)
9460        << LastParam->getType() << (Op == OO_MinusMinus);
9461  }
9462
9463  return false;
9464}
9465
9466/// CheckLiteralOperatorDeclaration - Check whether the declaration
9467/// of this literal operator function is well-formed. If so, returns
9468/// false; otherwise, emits appropriate diagnostics and returns true.
9469bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
9470  if (isa<CXXMethodDecl>(FnDecl)) {
9471    Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
9472      << FnDecl->getDeclName();
9473    return true;
9474  }
9475
9476  if (FnDecl->isExternC()) {
9477    Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);
9478    return true;
9479  }
9480
9481  bool Valid = false;
9482
9483  // This might be the definition of a literal operator template.
9484  FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate();
9485  // This might be a specialization of a literal operator template.
9486  if (!TpDecl)
9487    TpDecl = FnDecl->getPrimaryTemplate();
9488
9489  // template <char...> type operator "" name() is the only valid template
9490  // signature, and the only valid signature with no parameters.
9491  if (TpDecl) {
9492    if (FnDecl->param_size() == 0) {
9493      // Must have only one template parameter
9494      TemplateParameterList *Params = TpDecl->getTemplateParameters();
9495      if (Params->size() == 1) {
9496        NonTypeTemplateParmDecl *PmDecl =
9497          dyn_cast<NonTypeTemplateParmDecl>(Params->getParam(0));
9498
9499        // The template parameter must be a char parameter pack.
9500        if (PmDecl && PmDecl->isTemplateParameterPack() &&
9501            Context.hasSameType(PmDecl->getType(), Context.CharTy))
9502          Valid = true;
9503      }
9504    }
9505  } else if (FnDecl->param_size()) {
9506    // Check the first parameter
9507    FunctionDecl::param_iterator Param = FnDecl->param_begin();
9508
9509    QualType T = (*Param)->getType().getUnqualifiedType();
9510
9511    // unsigned long long int, long double, and any character type are allowed
9512    // as the only parameters.
9513    if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
9514        Context.hasSameType(T, Context.LongDoubleTy) ||
9515        Context.hasSameType(T, Context.CharTy) ||
9516        Context.hasSameType(T, Context.WCharTy) ||
9517        Context.hasSameType(T, Context.Char16Ty) ||
9518        Context.hasSameType(T, Context.Char32Ty)) {
9519      if (++Param == FnDecl->param_end())
9520        Valid = true;
9521      goto FinishedParams;
9522    }
9523
9524    // Otherwise it must be a pointer to const; let's strip those qualifiers.
9525    const PointerType *PT = T->getAs<PointerType>();
9526    if (!PT)
9527      goto FinishedParams;
9528    T = PT->getPointeeType();
9529    if (!T.isConstQualified() || T.isVolatileQualified())
9530      goto FinishedParams;
9531    T = T.getUnqualifiedType();
9532
9533    // Move on to the second parameter;
9534    ++Param;
9535
9536    // If there is no second parameter, the first must be a const char *
9537    if (Param == FnDecl->param_end()) {
9538      if (Context.hasSameType(T, Context.CharTy))
9539        Valid = true;
9540      goto FinishedParams;
9541    }
9542
9543    // const char *, const wchar_t*, const char16_t*, and const char32_t*
9544    // are allowed as the first parameter to a two-parameter function
9545    if (!(Context.hasSameType(T, Context.CharTy) ||
9546          Context.hasSameType(T, Context.WCharTy) ||
9547          Context.hasSameType(T, Context.Char16Ty) ||
9548          Context.hasSameType(T, Context.Char32Ty)))
9549      goto FinishedParams;
9550
9551    // The second and final parameter must be an std::size_t
9552    T = (*Param)->getType().getUnqualifiedType();
9553    if (Context.hasSameType(T, Context.getSizeType()) &&
9554        ++Param == FnDecl->param_end())
9555      Valid = true;
9556  }
9557
9558  // FIXME: This diagnostic is absolutely terrible.
9559FinishedParams:
9560  if (!Valid) {
9561    Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
9562      << FnDecl->getDeclName();
9563    return true;
9564  }
9565
9566  // A parameter-declaration-clause containing a default argument is not
9567  // equivalent to any of the permitted forms.
9568  for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
9569                                    ParamEnd = FnDecl->param_end();
9570       Param != ParamEnd; ++Param) {
9571    if ((*Param)->hasDefaultArg()) {
9572      Diag((*Param)->getDefaultArgRange().getBegin(),
9573           diag::err_literal_operator_default_argument)
9574        << (*Param)->getDefaultArgRange();
9575      break;
9576    }
9577  }
9578
9579  StringRef LiteralName
9580    = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
9581  if (LiteralName[0] != '_') {
9582    // C++11 [usrlit.suffix]p1:
9583    //   Literal suffix identifiers that do not start with an underscore
9584    //   are reserved for future standardization.
9585    Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
9586  }
9587
9588  return false;
9589}
9590
9591/// ActOnStartLinkageSpecification - Parsed the beginning of a C++
9592/// linkage specification, including the language and (if present)
9593/// the '{'. ExternLoc is the location of the 'extern', LangLoc is
9594/// the location of the language string literal, which is provided
9595/// by Lang/StrSize. LBraceLoc, if valid, provides the location of
9596/// the '{' brace. Otherwise, this linkage specification does not
9597/// have any braces.
9598Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
9599                                           SourceLocation LangLoc,
9600                                           StringRef Lang,
9601                                           SourceLocation LBraceLoc) {
9602  LinkageSpecDecl::LanguageIDs Language;
9603  if (Lang == "\"C\"")
9604    Language = LinkageSpecDecl::lang_c;
9605  else if (Lang == "\"C++\"")
9606    Language = LinkageSpecDecl::lang_cxx;
9607  else {
9608    Diag(LangLoc, diag::err_bad_language);
9609    return 0;
9610  }
9611
9612  // FIXME: Add all the various semantics of linkage specifications
9613
9614  LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
9615                                               ExternLoc, LangLoc, Language);
9616  CurContext->addDecl(D);
9617  PushDeclContext(S, D);
9618  return D;
9619}
9620
9621/// ActOnFinishLinkageSpecification - Complete the definition of
9622/// the C++ linkage specification LinkageSpec. If RBraceLoc is
9623/// valid, it's the position of the closing '}' brace in a linkage
9624/// specification that uses braces.
9625Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
9626                                            Decl *LinkageSpec,
9627                                            SourceLocation RBraceLoc) {
9628  if (LinkageSpec) {
9629    if (RBraceLoc.isValid()) {
9630      LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
9631      LSDecl->setRBraceLoc(RBraceLoc);
9632    }
9633    PopDeclContext();
9634  }
9635  return LinkageSpec;
9636}
9637
9638/// \brief Perform semantic analysis for the variable declaration that
9639/// occurs within a C++ catch clause, returning the newly-created
9640/// variable.
9641VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
9642                                         TypeSourceInfo *TInfo,
9643                                         SourceLocation StartLoc,
9644                                         SourceLocation Loc,
9645                                         IdentifierInfo *Name) {
9646  bool Invalid = false;
9647  QualType ExDeclType = TInfo->getType();
9648
9649  // Arrays and functions decay.
9650  if (ExDeclType->isArrayType())
9651    ExDeclType = Context.getArrayDecayedType(ExDeclType);
9652  else if (ExDeclType->isFunctionType())
9653    ExDeclType = Context.getPointerType(ExDeclType);
9654
9655  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
9656  // The exception-declaration shall not denote a pointer or reference to an
9657  // incomplete type, other than [cv] void*.
9658  // N2844 forbids rvalue references.
9659  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
9660    Diag(Loc, diag::err_catch_rvalue_ref);
9661    Invalid = true;
9662  }
9663
9664  QualType BaseType = ExDeclType;
9665  int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
9666  unsigned DK = diag::err_catch_incomplete;
9667  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
9668    BaseType = Ptr->getPointeeType();
9669    Mode = 1;
9670    DK = diag::err_catch_incomplete_ptr;
9671  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
9672    // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
9673    BaseType = Ref->getPointeeType();
9674    Mode = 2;
9675    DK = diag::err_catch_incomplete_ref;
9676  }
9677  if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
9678      !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
9679    Invalid = true;
9680
9681  if (!Invalid && !ExDeclType->isDependentType() &&
9682      RequireNonAbstractType(Loc, ExDeclType,
9683                             diag::err_abstract_type_in_decl,
9684                             AbstractVariableType))
9685    Invalid = true;
9686
9687  // Only the non-fragile NeXT runtime currently supports C++ catches
9688  // of ObjC types, and no runtime supports catching ObjC types by value.
9689  if (!Invalid && getLangOpts().ObjC1) {
9690    QualType T = ExDeclType;
9691    if (const ReferenceType *RT = T->getAs<ReferenceType>())
9692      T = RT->getPointeeType();
9693
9694    if (T->isObjCObjectType()) {
9695      Diag(Loc, diag::err_objc_object_catch);
9696      Invalid = true;
9697    } else if (T->isObjCObjectPointerType()) {
9698      // FIXME: should this be a test for macosx-fragile specifically?
9699      if (getLangOpts().ObjCRuntime.isFragile())
9700        Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
9701    }
9702  }
9703
9704  VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
9705                                    ExDeclType, TInfo, SC_None, SC_None);
9706  ExDecl->setExceptionVariable(true);
9707
9708  // In ARC, infer 'retaining' for variables of retainable type.
9709  if (getLangOpts().ObjCAutoRefCount && inferObjCARCLifetime(ExDecl))
9710    Invalid = true;
9711
9712  if (!Invalid && !ExDeclType->isDependentType()) {
9713    if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
9714      // C++ [except.handle]p16:
9715      //   The object declared in an exception-declaration or, if the
9716      //   exception-declaration does not specify a name, a temporary (12.2) is
9717      //   copy-initialized (8.5) from the exception object. [...]
9718      //   The object is destroyed when the handler exits, after the destruction
9719      //   of any automatic objects initialized within the handler.
9720      //
9721      // We just pretend to initialize the object with itself, then make sure
9722      // it can be destroyed later.
9723      QualType initType = ExDeclType;
9724
9725      InitializedEntity entity =
9726        InitializedEntity::InitializeVariable(ExDecl);
9727      InitializationKind initKind =
9728        InitializationKind::CreateCopy(Loc, SourceLocation());
9729
9730      Expr *opaqueValue =
9731        new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
9732      InitializationSequence sequence(*this, entity, initKind, &opaqueValue, 1);
9733      ExprResult result = sequence.Perform(*this, entity, initKind,
9734                                           MultiExprArg(&opaqueValue, 1));
9735      if (result.isInvalid())
9736        Invalid = true;
9737      else {
9738        // If the constructor used was non-trivial, set this as the
9739        // "initializer".
9740        CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
9741        if (!construct->getConstructor()->isTrivial()) {
9742          Expr *init = MaybeCreateExprWithCleanups(construct);
9743          ExDecl->setInit(init);
9744        }
9745
9746        // And make sure it's destructable.
9747        FinalizeVarWithDestructor(ExDecl, recordType);
9748      }
9749    }
9750  }
9751
9752  if (Invalid)
9753    ExDecl->setInvalidDecl();
9754
9755  return ExDecl;
9756}
9757
9758/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
9759/// handler.
9760Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
9761  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9762  bool Invalid = D.isInvalidType();
9763
9764  // Check for unexpanded parameter packs.
9765  if (TInfo && DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
9766                                               UPPC_ExceptionType)) {
9767    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
9768                                             D.getIdentifierLoc());
9769    Invalid = true;
9770  }
9771
9772  IdentifierInfo *II = D.getIdentifier();
9773  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
9774                                             LookupOrdinaryName,
9775                                             ForRedeclaration)) {
9776    // The scope should be freshly made just for us. There is just no way
9777    // it contains any previous declaration.
9778    assert(!S->isDeclScope(PrevDecl));
9779    if (PrevDecl->isTemplateParameter()) {
9780      // Maybe we will complain about the shadowed template parameter.
9781      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
9782      PrevDecl = 0;
9783    }
9784  }
9785
9786  if (D.getCXXScopeSpec().isSet() && !Invalid) {
9787    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
9788      << D.getCXXScopeSpec().getRange();
9789    Invalid = true;
9790  }
9791
9792  VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
9793                                              D.getLocStart(),
9794                                              D.getIdentifierLoc(),
9795                                              D.getIdentifier());
9796  if (Invalid)
9797    ExDecl->setInvalidDecl();
9798
9799  // Add the exception declaration into this scope.
9800  if (II)
9801    PushOnScopeChains(ExDecl, S);
9802  else
9803    CurContext->addDecl(ExDecl);
9804
9805  ProcessDeclAttributes(S, ExDecl, D);
9806  return ExDecl;
9807}
9808
9809Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
9810                                         Expr *AssertExpr,
9811                                         Expr *AssertMessageExpr,
9812                                         SourceLocation RParenLoc) {
9813  StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr);
9814
9815  if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
9816    return 0;
9817
9818  return BuildStaticAssertDeclaration(StaticAssertLoc, AssertExpr,
9819                                      AssertMessage, RParenLoc, false);
9820}
9821
9822Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc,
9823                                         Expr *AssertExpr,
9824                                         StringLiteral *AssertMessage,
9825                                         SourceLocation RParenLoc,
9826                                         bool Failed) {
9827  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() &&
9828      !Failed) {
9829    // In a static_assert-declaration, the constant-expression shall be a
9830    // constant expression that can be contextually converted to bool.
9831    ExprResult Converted = PerformContextuallyConvertToBool(AssertExpr);
9832    if (Converted.isInvalid())
9833      Failed = true;
9834
9835    llvm::APSInt Cond;
9836    if (!Failed && VerifyIntegerConstantExpression(Converted.get(), &Cond,
9837          diag::err_static_assert_expression_is_not_constant,
9838          /*AllowFold=*/false).isInvalid())
9839      Failed = true;
9840
9841    if (!Failed && !Cond) {
9842      llvm::SmallString<256> MsgBuffer;
9843      llvm::raw_svector_ostream Msg(MsgBuffer);
9844      AssertMessage->printPretty(Msg, 0, getPrintingPolicy());
9845      Diag(StaticAssertLoc, diag::err_static_assert_failed)
9846        << Msg.str() << AssertExpr->getSourceRange();
9847      Failed = true;
9848    }
9849  }
9850
9851  Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
9852                                        AssertExpr, AssertMessage, RParenLoc,
9853                                        Failed);
9854
9855  CurContext->addDecl(Decl);
9856  return Decl;
9857}
9858
9859/// \brief Perform semantic analysis of the given friend type declaration.
9860///
9861/// \returns A friend declaration that.
9862FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart,
9863                                      SourceLocation FriendLoc,
9864                                      TypeSourceInfo *TSInfo) {
9865  assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
9866
9867  QualType T = TSInfo->getType();
9868  SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
9869
9870  // C++03 [class.friend]p2:
9871  //   An elaborated-type-specifier shall be used in a friend declaration
9872  //   for a class.*
9873  //
9874  //   * The class-key of the elaborated-type-specifier is required.
9875  if (!ActiveTemplateInstantiations.empty()) {
9876    // Do not complain about the form of friend template types during
9877    // template instantiation; we will already have complained when the
9878    // template was declared.
9879  } else if (!T->isElaboratedTypeSpecifier()) {
9880    // If we evaluated the type to a record type, suggest putting
9881    // a tag in front.
9882    if (const RecordType *RT = T->getAs<RecordType>()) {
9883      RecordDecl *RD = RT->getDecl();
9884
9885      std::string InsertionText = std::string(" ") + RD->getKindName();
9886
9887      Diag(TypeRange.getBegin(),
9888           getLangOpts().CPlusPlus0x ?
9889             diag::warn_cxx98_compat_unelaborated_friend_type :
9890             diag::ext_unelaborated_friend_type)
9891        << (unsigned) RD->getTagKind()
9892        << T
9893        << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
9894                                      InsertionText);
9895    } else {
9896      Diag(FriendLoc,
9897           getLangOpts().CPlusPlus0x ?
9898             diag::warn_cxx98_compat_nonclass_type_friend :
9899             diag::ext_nonclass_type_friend)
9900        << T
9901        << TypeRange;
9902    }
9903  } else if (T->getAs<EnumType>()) {
9904    Diag(FriendLoc,
9905         getLangOpts().CPlusPlus0x ?
9906           diag::warn_cxx98_compat_enum_friend :
9907           diag::ext_enum_friend)
9908      << T
9909      << TypeRange;
9910  }
9911
9912  // C++11 [class.friend]p3:
9913  //   A friend declaration that does not declare a function shall have one
9914  //   of the following forms:
9915  //     friend elaborated-type-specifier ;
9916  //     friend simple-type-specifier ;
9917  //     friend typename-specifier ;
9918  if (getLangOpts().CPlusPlus0x && LocStart != FriendLoc)
9919    Diag(FriendLoc, diag::err_friend_not_first_in_declaration) << T;
9920
9921  //   If the type specifier in a friend declaration designates a (possibly
9922  //   cv-qualified) class type, that class is declared as a friend; otherwise,
9923  //   the friend declaration is ignored.
9924  return FriendDecl::Create(Context, CurContext, LocStart, TSInfo, FriendLoc);
9925}
9926
9927/// Handle a friend tag declaration where the scope specifier was
9928/// templated.
9929Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
9930                                    unsigned TagSpec, SourceLocation TagLoc,
9931                                    CXXScopeSpec &SS,
9932                                    IdentifierInfo *Name, SourceLocation NameLoc,
9933                                    AttributeList *Attr,
9934                                    MultiTemplateParamsArg TempParamLists) {
9935  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
9936
9937  bool isExplicitSpecialization = false;
9938  bool Invalid = false;
9939
9940  if (TemplateParameterList *TemplateParams
9941        = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
9942                                                  TempParamLists.data(),
9943                                                  TempParamLists.size(),
9944                                                  /*friend*/ true,
9945                                                  isExplicitSpecialization,
9946                                                  Invalid)) {
9947    if (TemplateParams->size() > 0) {
9948      // This is a declaration of a class template.
9949      if (Invalid)
9950        return 0;
9951
9952      return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
9953                                SS, Name, NameLoc, Attr,
9954                                TemplateParams, AS_public,
9955                                /*ModulePrivateLoc=*/SourceLocation(),
9956                                TempParamLists.size() - 1,
9957                                TempParamLists.data()).take();
9958    } else {
9959      // The "template<>" header is extraneous.
9960      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
9961        << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
9962      isExplicitSpecialization = true;
9963    }
9964  }
9965
9966  if (Invalid) return 0;
9967
9968  bool isAllExplicitSpecializations = true;
9969  for (unsigned I = TempParamLists.size(); I-- > 0; ) {
9970    if (TempParamLists[I]->size()) {
9971      isAllExplicitSpecializations = false;
9972      break;
9973    }
9974  }
9975
9976  // FIXME: don't ignore attributes.
9977
9978  // If it's explicit specializations all the way down, just forget
9979  // about the template header and build an appropriate non-templated
9980  // friend.  TODO: for source fidelity, remember the headers.
9981  if (isAllExplicitSpecializations) {
9982    if (SS.isEmpty()) {
9983      bool Owned = false;
9984      bool IsDependent = false;
9985      return ActOnTag(S, TagSpec, TUK_Friend, TagLoc, SS, Name, NameLoc,
9986                      Attr, AS_public,
9987                      /*ModulePrivateLoc=*/SourceLocation(),
9988                      MultiTemplateParamsArg(), Owned, IsDependent,
9989                      /*ScopedEnumKWLoc=*/SourceLocation(),
9990                      /*ScopedEnumUsesClassTag=*/false,
9991                      /*UnderlyingType=*/TypeResult());
9992    }
9993
9994    NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
9995    ElaboratedTypeKeyword Keyword
9996      = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
9997    QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
9998                                   *Name, NameLoc);
9999    if (T.isNull())
10000      return 0;
10001
10002    TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
10003    if (isa<DependentNameType>(T)) {
10004      DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
10005      TL.setElaboratedKeywordLoc(TagLoc);
10006      TL.setQualifierLoc(QualifierLoc);
10007      TL.setNameLoc(NameLoc);
10008    } else {
10009      ElaboratedTypeLoc TL = cast<ElaboratedTypeLoc>(TSI->getTypeLoc());
10010      TL.setElaboratedKeywordLoc(TagLoc);
10011      TL.setQualifierLoc(QualifierLoc);
10012      cast<TypeSpecTypeLoc>(TL.getNamedTypeLoc()).setNameLoc(NameLoc);
10013    }
10014
10015    FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
10016                                            TSI, FriendLoc);
10017    Friend->setAccess(AS_public);
10018    CurContext->addDecl(Friend);
10019    return Friend;
10020  }
10021
10022  assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
10023
10024
10025
10026  // Handle the case of a templated-scope friend class.  e.g.
10027  //   template <class T> class A<T>::B;
10028  // FIXME: we don't support these right now.
10029  ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
10030  QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
10031  TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
10032  DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
10033  TL.setElaboratedKeywordLoc(TagLoc);
10034  TL.setQualifierLoc(SS.getWithLocInContext(Context));
10035  TL.setNameLoc(NameLoc);
10036
10037  FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
10038                                          TSI, FriendLoc);
10039  Friend->setAccess(AS_public);
10040  Friend->setUnsupportedFriend(true);
10041  CurContext->addDecl(Friend);
10042  return Friend;
10043}
10044
10045
10046/// Handle a friend type declaration.  This works in tandem with
10047/// ActOnTag.
10048///
10049/// Notes on friend class templates:
10050///
10051/// We generally treat friend class declarations as if they were
10052/// declaring a class.  So, for example, the elaborated type specifier
10053/// in a friend declaration is required to obey the restrictions of a
10054/// class-head (i.e. no typedefs in the scope chain), template
10055/// parameters are required to match up with simple template-ids, &c.
10056/// However, unlike when declaring a template specialization, it's
10057/// okay to refer to a template specialization without an empty
10058/// template parameter declaration, e.g.
10059///   friend class A<T>::B<unsigned>;
10060/// We permit this as a special case; if there are any template
10061/// parameters present at all, require proper matching, i.e.
10062///   template <> template \<class T> friend class A<int>::B;
10063Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
10064                                MultiTemplateParamsArg TempParams) {
10065  SourceLocation Loc = DS.getLocStart();
10066
10067  assert(DS.isFriendSpecified());
10068  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
10069
10070  // Try to convert the decl specifier to a type.  This works for
10071  // friend templates because ActOnTag never produces a ClassTemplateDecl
10072  // for a TUK_Friend.
10073  Declarator TheDeclarator(DS, Declarator::MemberContext);
10074  TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
10075  QualType T = TSI->getType();
10076  if (TheDeclarator.isInvalidType())
10077    return 0;
10078
10079  if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
10080    return 0;
10081
10082  // This is definitely an error in C++98.  It's probably meant to
10083  // be forbidden in C++0x, too, but the specification is just
10084  // poorly written.
10085  //
10086  // The problem is with declarations like the following:
10087  //   template <T> friend A<T>::foo;
10088  // where deciding whether a class C is a friend or not now hinges
10089  // on whether there exists an instantiation of A that causes
10090  // 'foo' to equal C.  There are restrictions on class-heads
10091  // (which we declare (by fiat) elaborated friend declarations to
10092  // be) that makes this tractable.
10093  //
10094  // FIXME: handle "template <> friend class A<T>;", which
10095  // is possibly well-formed?  Who even knows?
10096  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
10097    Diag(Loc, diag::err_tagless_friend_type_template)
10098      << DS.getSourceRange();
10099    return 0;
10100  }
10101
10102  // C++98 [class.friend]p1: A friend of a class is a function
10103  //   or class that is not a member of the class . . .
10104  // This is fixed in DR77, which just barely didn't make the C++03
10105  // deadline.  It's also a very silly restriction that seriously
10106  // affects inner classes and which nobody else seems to implement;
10107  // thus we never diagnose it, not even in -pedantic.
10108  //
10109  // But note that we could warn about it: it's always useless to
10110  // friend one of your own members (it's not, however, worthless to
10111  // friend a member of an arbitrary specialization of your template).
10112
10113  Decl *D;
10114  if (unsigned NumTempParamLists = TempParams.size())
10115    D = FriendTemplateDecl::Create(Context, CurContext, Loc,
10116                                   NumTempParamLists,
10117                                   TempParams.data(),
10118                                   TSI,
10119                                   DS.getFriendSpecLoc());
10120  else
10121    D = CheckFriendTypeDecl(Loc, DS.getFriendSpecLoc(), TSI);
10122
10123  if (!D)
10124    return 0;
10125
10126  D->setAccess(AS_public);
10127  CurContext->addDecl(D);
10128
10129  return D;
10130}
10131
10132Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
10133                                    MultiTemplateParamsArg TemplateParams) {
10134  const DeclSpec &DS = D.getDeclSpec();
10135
10136  assert(DS.isFriendSpecified());
10137  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
10138
10139  SourceLocation Loc = D.getIdentifierLoc();
10140  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
10141
10142  // C++ [class.friend]p1
10143  //   A friend of a class is a function or class....
10144  // Note that this sees through typedefs, which is intended.
10145  // It *doesn't* see through dependent types, which is correct
10146  // according to [temp.arg.type]p3:
10147  //   If a declaration acquires a function type through a
10148  //   type dependent on a template-parameter and this causes
10149  //   a declaration that does not use the syntactic form of a
10150  //   function declarator to have a function type, the program
10151  //   is ill-formed.
10152  if (!TInfo->getType()->isFunctionType()) {
10153    Diag(Loc, diag::err_unexpected_friend);
10154
10155    // It might be worthwhile to try to recover by creating an
10156    // appropriate declaration.
10157    return 0;
10158  }
10159
10160  // C++ [namespace.memdef]p3
10161  //  - If a friend declaration in a non-local class first declares a
10162  //    class or function, the friend class or function is a member
10163  //    of the innermost enclosing namespace.
10164  //  - The name of the friend is not found by simple name lookup
10165  //    until a matching declaration is provided in that namespace
10166  //    scope (either before or after the class declaration granting
10167  //    friendship).
10168  //  - If a friend function is called, its name may be found by the
10169  //    name lookup that considers functions from namespaces and
10170  //    classes associated with the types of the function arguments.
10171  //  - When looking for a prior declaration of a class or a function
10172  //    declared as a friend, scopes outside the innermost enclosing
10173  //    namespace scope are not considered.
10174
10175  CXXScopeSpec &SS = D.getCXXScopeSpec();
10176  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
10177  DeclarationName Name = NameInfo.getName();
10178  assert(Name);
10179
10180  // Check for unexpanded parameter packs.
10181  if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
10182      DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
10183      DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
10184    return 0;
10185
10186  // The context we found the declaration in, or in which we should
10187  // create the declaration.
10188  DeclContext *DC;
10189  Scope *DCScope = S;
10190  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
10191                        ForRedeclaration);
10192
10193  // FIXME: there are different rules in local classes
10194
10195  // There are four cases here.
10196  //   - There's no scope specifier, in which case we just go to the
10197  //     appropriate scope and look for a function or function template
10198  //     there as appropriate.
10199  // Recover from invalid scope qualifiers as if they just weren't there.
10200  if (SS.isInvalid() || !SS.isSet()) {
10201    // C++0x [namespace.memdef]p3:
10202    //   If the name in a friend declaration is neither qualified nor
10203    //   a template-id and the declaration is a function or an
10204    //   elaborated-type-specifier, the lookup to determine whether
10205    //   the entity has been previously declared shall not consider
10206    //   any scopes outside the innermost enclosing namespace.
10207    // C++0x [class.friend]p11:
10208    //   If a friend declaration appears in a local class and the name
10209    //   specified is an unqualified name, a prior declaration is
10210    //   looked up without considering scopes that are outside the
10211    //   innermost enclosing non-class scope. For a friend function
10212    //   declaration, if there is no prior declaration, the program is
10213    //   ill-formed.
10214    bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
10215    bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
10216
10217    // Find the appropriate context according to the above.
10218    DC = CurContext;
10219    while (true) {
10220      // Skip class contexts.  If someone can cite chapter and verse
10221      // for this behavior, that would be nice --- it's what GCC and
10222      // EDG do, and it seems like a reasonable intent, but the spec
10223      // really only says that checks for unqualified existing
10224      // declarations should stop at the nearest enclosing namespace,
10225      // not that they should only consider the nearest enclosing
10226      // namespace.
10227      while (DC->isRecord() || DC->isTransparentContext())
10228        DC = DC->getParent();
10229
10230      LookupQualifiedName(Previous, DC);
10231
10232      // TODO: decide what we think about using declarations.
10233      if (isLocal || !Previous.empty())
10234        break;
10235
10236      if (isTemplateId) {
10237        if (isa<TranslationUnitDecl>(DC)) break;
10238      } else {
10239        if (DC->isFileContext()) break;
10240      }
10241      DC = DC->getParent();
10242    }
10243
10244    // C++ [class.friend]p1: A friend of a class is a function or
10245    //   class that is not a member of the class . . .
10246    // C++11 changes this for both friend types and functions.
10247    // Most C++ 98 compilers do seem to give an error here, so
10248    // we do, too.
10249    if (!Previous.empty() && DC->Equals(CurContext))
10250      Diag(DS.getFriendSpecLoc(),
10251           getLangOpts().CPlusPlus0x ?
10252             diag::warn_cxx98_compat_friend_is_member :
10253             diag::err_friend_is_member);
10254
10255    DCScope = getScopeForDeclContext(S, DC);
10256
10257    // C++ [class.friend]p6:
10258    //   A function can be defined in a friend declaration of a class if and
10259    //   only if the class is a non-local class (9.8), the function name is
10260    //   unqualified, and the function has namespace scope.
10261    if (isLocal && D.isFunctionDefinition()) {
10262      Diag(NameInfo.getBeginLoc(), diag::err_friend_def_in_local_class);
10263    }
10264
10265  //   - There's a non-dependent scope specifier, in which case we
10266  //     compute it and do a previous lookup there for a function
10267  //     or function template.
10268  } else if (!SS.getScopeRep()->isDependent()) {
10269    DC = computeDeclContext(SS);
10270    if (!DC) return 0;
10271
10272    if (RequireCompleteDeclContext(SS, DC)) return 0;
10273
10274    LookupQualifiedName(Previous, DC);
10275
10276    // Ignore things found implicitly in the wrong scope.
10277    // TODO: better diagnostics for this case.  Suggesting the right
10278    // qualified scope would be nice...
10279    LookupResult::Filter F = Previous.makeFilter();
10280    while (F.hasNext()) {
10281      NamedDecl *D = F.next();
10282      if (!DC->InEnclosingNamespaceSetOf(
10283              D->getDeclContext()->getRedeclContext()))
10284        F.erase();
10285    }
10286    F.done();
10287
10288    if (Previous.empty()) {
10289      D.setInvalidType();
10290      Diag(Loc, diag::err_qualified_friend_not_found)
10291          << Name << TInfo->getType();
10292      return 0;
10293    }
10294
10295    // C++ [class.friend]p1: A friend of a class is a function or
10296    //   class that is not a member of the class . . .
10297    if (DC->Equals(CurContext))
10298      Diag(DS.getFriendSpecLoc(),
10299           getLangOpts().CPlusPlus0x ?
10300             diag::warn_cxx98_compat_friend_is_member :
10301             diag::err_friend_is_member);
10302
10303    if (D.isFunctionDefinition()) {
10304      // C++ [class.friend]p6:
10305      //   A function can be defined in a friend declaration of a class if and
10306      //   only if the class is a non-local class (9.8), the function name is
10307      //   unqualified, and the function has namespace scope.
10308      SemaDiagnosticBuilder DB
10309        = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);
10310
10311      DB << SS.getScopeRep();
10312      if (DC->isFileContext())
10313        DB << FixItHint::CreateRemoval(SS.getRange());
10314      SS.clear();
10315    }
10316
10317  //   - There's a scope specifier that does not match any template
10318  //     parameter lists, in which case we use some arbitrary context,
10319  //     create a method or method template, and wait for instantiation.
10320  //   - There's a scope specifier that does match some template
10321  //     parameter lists, which we don't handle right now.
10322  } else {
10323    if (D.isFunctionDefinition()) {
10324      // C++ [class.friend]p6:
10325      //   A function can be defined in a friend declaration of a class if and
10326      //   only if the class is a non-local class (9.8), the function name is
10327      //   unqualified, and the function has namespace scope.
10328      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def)
10329        << SS.getScopeRep();
10330    }
10331
10332    DC = CurContext;
10333    assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
10334  }
10335
10336  if (!DC->isRecord()) {
10337    // This implies that it has to be an operator or function.
10338    if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
10339        D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
10340        D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
10341      Diag(Loc, diag::err_introducing_special_friend) <<
10342        (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
10343         D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
10344      return 0;
10345    }
10346  }
10347
10348  // FIXME: This is an egregious hack to cope with cases where the scope stack
10349  // does not contain the declaration context, i.e., in an out-of-line
10350  // definition of a class.
10351  Scope FakeDCScope(S, Scope::DeclScope, Diags);
10352  if (!DCScope) {
10353    FakeDCScope.setEntity(DC);
10354    DCScope = &FakeDCScope;
10355  }
10356
10357  bool AddToScope = true;
10358  NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, TInfo, Previous,
10359                                          TemplateParams, AddToScope);
10360  if (!ND) return 0;
10361
10362  assert(ND->getDeclContext() == DC);
10363  assert(ND->getLexicalDeclContext() == CurContext);
10364
10365  // Add the function declaration to the appropriate lookup tables,
10366  // adjusting the redeclarations list as necessary.  We don't
10367  // want to do this yet if the friending class is dependent.
10368  //
10369  // Also update the scope-based lookup if the target context's
10370  // lookup context is in lexical scope.
10371  if (!CurContext->isDependentContext()) {
10372    DC = DC->getRedeclContext();
10373    DC->makeDeclVisibleInContext(ND);
10374    if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
10375      PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
10376  }
10377
10378  FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
10379                                       D.getIdentifierLoc(), ND,
10380                                       DS.getFriendSpecLoc());
10381  FrD->setAccess(AS_public);
10382  CurContext->addDecl(FrD);
10383
10384  if (ND->isInvalidDecl()) {
10385    FrD->setInvalidDecl();
10386  } else {
10387    if (DC->isRecord()) CheckFriendAccess(ND);
10388
10389    FunctionDecl *FD;
10390    if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
10391      FD = FTD->getTemplatedDecl();
10392    else
10393      FD = cast<FunctionDecl>(ND);
10394
10395    // Mark templated-scope function declarations as unsupported.
10396    if (FD->getNumTemplateParameterLists())
10397      FrD->setUnsupportedFriend(true);
10398  }
10399
10400  return ND;
10401}
10402
10403void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
10404  AdjustDeclIfTemplate(Dcl);
10405
10406  FunctionDecl *Fn = dyn_cast<FunctionDecl>(Dcl);
10407  if (!Fn) {
10408    Diag(DelLoc, diag::err_deleted_non_function);
10409    return;
10410  }
10411  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {
10412    // Don't consider the implicit declaration we generate for explicit
10413    // specializations. FIXME: Do not generate these implicit declarations.
10414    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization
10415        || Prev->getPreviousDecl()) && !Prev->isDefined()) {
10416      Diag(DelLoc, diag::err_deleted_decl_not_first);
10417      Diag(Prev->getLocation(), diag::note_previous_declaration);
10418    }
10419    // If the declaration wasn't the first, we delete the function anyway for
10420    // recovery.
10421  }
10422  Fn->setDeletedAsWritten();
10423
10424  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
10425  if (!MD)
10426    return;
10427
10428  // A deleted special member function is trivial if the corresponding
10429  // implicitly-declared function would have been.
10430  switch (getSpecialMember(MD)) {
10431  case CXXInvalid:
10432    break;
10433  case CXXDefaultConstructor:
10434    MD->setTrivial(MD->getParent()->hasTrivialDefaultConstructor());
10435    break;
10436  case CXXCopyConstructor:
10437    MD->setTrivial(MD->getParent()->hasTrivialCopyConstructor());
10438    break;
10439  case CXXMoveConstructor:
10440    MD->setTrivial(MD->getParent()->hasTrivialMoveConstructor());
10441    break;
10442  case CXXCopyAssignment:
10443    MD->setTrivial(MD->getParent()->hasTrivialCopyAssignment());
10444    break;
10445  case CXXMoveAssignment:
10446    MD->setTrivial(MD->getParent()->hasTrivialMoveAssignment());
10447    break;
10448  case CXXDestructor:
10449    MD->setTrivial(MD->getParent()->hasTrivialDestructor());
10450    break;
10451  }
10452}
10453
10454void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
10455  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
10456
10457  if (MD) {
10458    if (MD->getParent()->isDependentType()) {
10459      MD->setDefaulted();
10460      MD->setExplicitlyDefaulted();
10461      return;
10462    }
10463
10464    CXXSpecialMember Member = getSpecialMember(MD);
10465    if (Member == CXXInvalid) {
10466      Diag(DefaultLoc, diag::err_default_special_members);
10467      return;
10468    }
10469
10470    MD->setDefaulted();
10471    MD->setExplicitlyDefaulted();
10472
10473    // If this definition appears within the record, do the checking when
10474    // the record is complete.
10475    const FunctionDecl *Primary = MD;
10476    if (const FunctionDecl *Pattern = MD->getTemplateInstantiationPattern())
10477      // Find the uninstantiated declaration that actually had the '= default'
10478      // on it.
10479      Pattern->isDefined(Primary);
10480
10481    if (Primary == Primary->getCanonicalDecl())
10482      return;
10483
10484    CheckExplicitlyDefaultedSpecialMember(MD);
10485
10486    switch (Member) {
10487    case CXXDefaultConstructor: {
10488      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
10489      if (!CD->isInvalidDecl())
10490        DefineImplicitDefaultConstructor(DefaultLoc, CD);
10491      break;
10492    }
10493
10494    case CXXCopyConstructor: {
10495      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
10496      if (!CD->isInvalidDecl())
10497        DefineImplicitCopyConstructor(DefaultLoc, CD);
10498      break;
10499    }
10500
10501    case CXXCopyAssignment: {
10502      if (!MD->isInvalidDecl())
10503        DefineImplicitCopyAssignment(DefaultLoc, MD);
10504      break;
10505    }
10506
10507    case CXXDestructor: {
10508      CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
10509      if (!DD->isInvalidDecl())
10510        DefineImplicitDestructor(DefaultLoc, DD);
10511      break;
10512    }
10513
10514    case CXXMoveConstructor: {
10515      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
10516      if (!CD->isInvalidDecl())
10517        DefineImplicitMoveConstructor(DefaultLoc, CD);
10518      break;
10519    }
10520
10521    case CXXMoveAssignment: {
10522      if (!MD->isInvalidDecl())
10523        DefineImplicitMoveAssignment(DefaultLoc, MD);
10524      break;
10525    }
10526
10527    case CXXInvalid:
10528      llvm_unreachable("Invalid special member.");
10529    }
10530  } else {
10531    Diag(DefaultLoc, diag::err_default_special_members);
10532  }
10533}
10534
10535static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
10536  for (Stmt::child_range CI = S->children(); CI; ++CI) {
10537    Stmt *SubStmt = *CI;
10538    if (!SubStmt)
10539      continue;
10540    if (isa<ReturnStmt>(SubStmt))
10541      Self.Diag(SubStmt->getLocStart(),
10542           diag::err_return_in_constructor_handler);
10543    if (!isa<Expr>(SubStmt))
10544      SearchForReturnInStmt(Self, SubStmt);
10545  }
10546}
10547
10548void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
10549  for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
10550    CXXCatchStmt *Handler = TryBlock->getHandler(I);
10551    SearchForReturnInStmt(*this, Handler);
10552  }
10553}
10554
10555bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
10556                                             const CXXMethodDecl *Old) {
10557  QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
10558  QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
10559
10560  if (Context.hasSameType(NewTy, OldTy) ||
10561      NewTy->isDependentType() || OldTy->isDependentType())
10562    return false;
10563
10564  // Check if the return types are covariant
10565  QualType NewClassTy, OldClassTy;
10566
10567  /// Both types must be pointers or references to classes.
10568  if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
10569    if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
10570      NewClassTy = NewPT->getPointeeType();
10571      OldClassTy = OldPT->getPointeeType();
10572    }
10573  } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
10574    if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
10575      if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
10576        NewClassTy = NewRT->getPointeeType();
10577        OldClassTy = OldRT->getPointeeType();
10578      }
10579    }
10580  }
10581
10582  // The return types aren't either both pointers or references to a class type.
10583  if (NewClassTy.isNull()) {
10584    Diag(New->getLocation(),
10585         diag::err_different_return_type_for_overriding_virtual_function)
10586      << New->getDeclName() << NewTy << OldTy;
10587    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10588
10589    return true;
10590  }
10591
10592  // C++ [class.virtual]p6:
10593  //   If the return type of D::f differs from the return type of B::f, the
10594  //   class type in the return type of D::f shall be complete at the point of
10595  //   declaration of D::f or shall be the class type D.
10596  if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
10597    if (!RT->isBeingDefined() &&
10598        RequireCompleteType(New->getLocation(), NewClassTy,
10599                            diag::err_covariant_return_incomplete,
10600                            New->getDeclName()))
10601    return true;
10602  }
10603
10604  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
10605    // Check if the new class derives from the old class.
10606    if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
10607      Diag(New->getLocation(),
10608           diag::err_covariant_return_not_derived)
10609      << New->getDeclName() << NewTy << OldTy;
10610      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10611      return true;
10612    }
10613
10614    // Check if we the conversion from derived to base is valid.
10615    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
10616                    diag::err_covariant_return_inaccessible_base,
10617                    diag::err_covariant_return_ambiguous_derived_to_base_conv,
10618                    // FIXME: Should this point to the return type?
10619                    New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
10620      // FIXME: this note won't trigger for delayed access control
10621      // diagnostics, and it's impossible to get an undelayed error
10622      // here from access control during the original parse because
10623      // the ParsingDeclSpec/ParsingDeclarator are still in scope.
10624      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10625      return true;
10626    }
10627  }
10628
10629  // The qualifiers of the return types must be the same.
10630  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
10631    Diag(New->getLocation(),
10632         diag::err_covariant_return_type_different_qualifications)
10633    << New->getDeclName() << NewTy << OldTy;
10634    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10635    return true;
10636  };
10637
10638
10639  // The new class type must have the same or less qualifiers as the old type.
10640  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
10641    Diag(New->getLocation(),
10642         diag::err_covariant_return_type_class_type_more_qualified)
10643    << New->getDeclName() << NewTy << OldTy;
10644    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10645    return true;
10646  };
10647
10648  return false;
10649}
10650
10651/// \brief Mark the given method pure.
10652///
10653/// \param Method the method to be marked pure.
10654///
10655/// \param InitRange the source range that covers the "0" initializer.
10656bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
10657  SourceLocation EndLoc = InitRange.getEnd();
10658  if (EndLoc.isValid())
10659    Method->setRangeEnd(EndLoc);
10660
10661  if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
10662    Method->setPure();
10663    return false;
10664  }
10665
10666  if (!Method->isInvalidDecl())
10667    Diag(Method->getLocation(), diag::err_non_virtual_pure)
10668      << Method->getDeclName() << InitRange;
10669  return true;
10670}
10671
10672/// \brief Determine whether the given declaration is a static data member.
10673static bool isStaticDataMember(Decl *D) {
10674  VarDecl *Var = dyn_cast_or_null<VarDecl>(D);
10675  if (!Var)
10676    return false;
10677
10678  return Var->isStaticDataMember();
10679}
10680/// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
10681/// an initializer for the out-of-line declaration 'Dcl'.  The scope
10682/// is a fresh scope pushed for just this purpose.
10683///
10684/// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
10685/// static data member of class X, names should be looked up in the scope of
10686/// class X.
10687void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
10688  // If there is no declaration, there was an error parsing it.
10689  if (D == 0 || D->isInvalidDecl()) return;
10690
10691  // We should only get called for declarations with scope specifiers, like:
10692  //   int foo::bar;
10693  assert(D->isOutOfLine());
10694  EnterDeclaratorContext(S, D->getDeclContext());
10695
10696  // If we are parsing the initializer for a static data member, push a
10697  // new expression evaluation context that is associated with this static
10698  // data member.
10699  if (isStaticDataMember(D))
10700    PushExpressionEvaluationContext(PotentiallyEvaluated, D);
10701}
10702
10703/// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
10704/// initializer for the out-of-line declaration 'D'.
10705void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
10706  // If there is no declaration, there was an error parsing it.
10707  if (D == 0 || D->isInvalidDecl()) return;
10708
10709  if (isStaticDataMember(D))
10710    PopExpressionEvaluationContext();
10711
10712  assert(D->isOutOfLine());
10713  ExitDeclaratorContext(S);
10714}
10715
10716/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
10717/// C++ if/switch/while/for statement.
10718/// e.g: "if (int x = f()) {...}"
10719DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
10720  // C++ 6.4p2:
10721  // The declarator shall not specify a function or an array.
10722  // The type-specifier-seq shall not contain typedef and shall not declare a
10723  // new class or enumeration.
10724  assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
10725         "Parser allowed 'typedef' as storage class of condition decl.");
10726
10727  Decl *Dcl = ActOnDeclarator(S, D);
10728  if (!Dcl)
10729    return true;
10730
10731  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
10732    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
10733      << D.getSourceRange();
10734    return true;
10735  }
10736
10737  return Dcl;
10738}
10739
10740void Sema::LoadExternalVTableUses() {
10741  if (!ExternalSource)
10742    return;
10743
10744  SmallVector<ExternalVTableUse, 4> VTables;
10745  ExternalSource->ReadUsedVTables(VTables);
10746  SmallVector<VTableUse, 4> NewUses;
10747  for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
10748    llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
10749      = VTablesUsed.find(VTables[I].Record);
10750    // Even if a definition wasn't required before, it may be required now.
10751    if (Pos != VTablesUsed.end()) {
10752      if (!Pos->second && VTables[I].DefinitionRequired)
10753        Pos->second = true;
10754      continue;
10755    }
10756
10757    VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
10758    NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
10759  }
10760
10761  VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
10762}
10763
10764void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
10765                          bool DefinitionRequired) {
10766  // Ignore any vtable uses in unevaluated operands or for classes that do
10767  // not have a vtable.
10768  if (!Class->isDynamicClass() || Class->isDependentContext() ||
10769      CurContext->isDependentContext() ||
10770      ExprEvalContexts.back().Context == Unevaluated)
10771    return;
10772
10773  // Try to insert this class into the map.
10774  LoadExternalVTableUses();
10775  Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
10776  std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
10777    Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
10778  if (!Pos.second) {
10779    // If we already had an entry, check to see if we are promoting this vtable
10780    // to required a definition. If so, we need to reappend to the VTableUses
10781    // list, since we may have already processed the first entry.
10782    if (DefinitionRequired && !Pos.first->second) {
10783      Pos.first->second = true;
10784    } else {
10785      // Otherwise, we can early exit.
10786      return;
10787    }
10788  }
10789
10790  // Local classes need to have their virtual members marked
10791  // immediately. For all other classes, we mark their virtual members
10792  // at the end of the translation unit.
10793  if (Class->isLocalClass())
10794    MarkVirtualMembersReferenced(Loc, Class);
10795  else
10796    VTableUses.push_back(std::make_pair(Class, Loc));
10797}
10798
10799bool Sema::DefineUsedVTables() {
10800  LoadExternalVTableUses();
10801  if (VTableUses.empty())
10802    return false;
10803
10804  // Note: The VTableUses vector could grow as a result of marking
10805  // the members of a class as "used", so we check the size each
10806  // time through the loop and prefer indices (which are stable) to
10807  // iterators (which are not).
10808  bool DefinedAnything = false;
10809  for (unsigned I = 0; I != VTableUses.size(); ++I) {
10810    CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
10811    if (!Class)
10812      continue;
10813
10814    SourceLocation Loc = VTableUses[I].second;
10815
10816    bool DefineVTable = true;
10817
10818    // If this class has a key function, but that key function is
10819    // defined in another translation unit, we don't need to emit the
10820    // vtable even though we're using it.
10821    const CXXMethodDecl *KeyFunction = Context.getKeyFunction(Class);
10822    if (KeyFunction && !KeyFunction->hasBody()) {
10823      switch (KeyFunction->getTemplateSpecializationKind()) {
10824      case TSK_Undeclared:
10825      case TSK_ExplicitSpecialization:
10826      case TSK_ExplicitInstantiationDeclaration:
10827        // The key function is in another translation unit.
10828        DefineVTable = false;
10829        break;
10830
10831      case TSK_ExplicitInstantiationDefinition:
10832      case TSK_ImplicitInstantiation:
10833        // We will be instantiating the key function.
10834        break;
10835      }
10836    } else if (!KeyFunction) {
10837      // If we have a class with no key function that is the subject
10838      // of an explicit instantiation declaration, suppress the
10839      // vtable; it will live with the explicit instantiation
10840      // definition.
10841      bool IsExplicitInstantiationDeclaration
10842        = Class->getTemplateSpecializationKind()
10843                                      == TSK_ExplicitInstantiationDeclaration;
10844      for (TagDecl::redecl_iterator R = Class->redecls_begin(),
10845                                 REnd = Class->redecls_end();
10846           R != REnd; ++R) {
10847        TemplateSpecializationKind TSK
10848          = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
10849        if (TSK == TSK_ExplicitInstantiationDeclaration)
10850          IsExplicitInstantiationDeclaration = true;
10851        else if (TSK == TSK_ExplicitInstantiationDefinition) {
10852          IsExplicitInstantiationDeclaration = false;
10853          break;
10854        }
10855      }
10856
10857      if (IsExplicitInstantiationDeclaration)
10858        DefineVTable = false;
10859    }
10860
10861    // The exception specifications for all virtual members may be needed even
10862    // if we are not providing an authoritative form of the vtable in this TU.
10863    // We may choose to emit it available_externally anyway.
10864    if (!DefineVTable) {
10865      MarkVirtualMemberExceptionSpecsNeeded(Loc, Class);
10866      continue;
10867    }
10868
10869    // Mark all of the virtual members of this class as referenced, so
10870    // that we can build a vtable. Then, tell the AST consumer that a
10871    // vtable for this class is required.
10872    DefinedAnything = true;
10873    MarkVirtualMembersReferenced(Loc, Class);
10874    CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
10875    Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
10876
10877    // Optionally warn if we're emitting a weak vtable.
10878    if (Class->getLinkage() == ExternalLinkage &&
10879        Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
10880      const FunctionDecl *KeyFunctionDef = 0;
10881      if (!KeyFunction ||
10882          (KeyFunction->hasBody(KeyFunctionDef) &&
10883           KeyFunctionDef->isInlined()))
10884        Diag(Class->getLocation(), Class->getTemplateSpecializationKind() ==
10885             TSK_ExplicitInstantiationDefinition
10886             ? diag::warn_weak_template_vtable : diag::warn_weak_vtable)
10887          << Class;
10888    }
10889  }
10890  VTableUses.clear();
10891
10892  return DefinedAnything;
10893}
10894
10895void Sema::MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
10896                                                 const CXXRecordDecl *RD) {
10897  for (CXXRecordDecl::method_iterator I = RD->method_begin(),
10898                                      E = RD->method_end(); I != E; ++I)
10899    if ((*I)->isVirtual() && !(*I)->isPure())
10900      ResolveExceptionSpec(Loc, (*I)->getType()->castAs<FunctionProtoType>());
10901}
10902
10903void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
10904                                        const CXXRecordDecl *RD) {
10905  // Mark all functions which will appear in RD's vtable as used.
10906  CXXFinalOverriderMap FinalOverriders;
10907  RD->getFinalOverriders(FinalOverriders);
10908  for (CXXFinalOverriderMap::const_iterator I = FinalOverriders.begin(),
10909                                            E = FinalOverriders.end();
10910       I != E; ++I) {
10911    for (OverridingMethods::const_iterator OI = I->second.begin(),
10912                                           OE = I->second.end();
10913         OI != OE; ++OI) {
10914      assert(OI->second.size() > 0 && "no final overrider");
10915      CXXMethodDecl *Overrider = OI->second.front().Method;
10916
10917      // C++ [basic.def.odr]p2:
10918      //   [...] A virtual member function is used if it is not pure. [...]
10919      if (!Overrider->isPure())
10920        MarkFunctionReferenced(Loc, Overrider);
10921    }
10922  }
10923
10924  // Only classes that have virtual bases need a VTT.
10925  if (RD->getNumVBases() == 0)
10926    return;
10927
10928  for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
10929           e = RD->bases_end(); i != e; ++i) {
10930    const CXXRecordDecl *Base =
10931        cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
10932    if (Base->getNumVBases() == 0)
10933      continue;
10934    MarkVirtualMembersReferenced(Loc, Base);
10935  }
10936}
10937
10938/// SetIvarInitializers - This routine builds initialization ASTs for the
10939/// Objective-C implementation whose ivars need be initialized.
10940void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
10941  if (!getLangOpts().CPlusPlus)
10942    return;
10943  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
10944    SmallVector<ObjCIvarDecl*, 8> ivars;
10945    CollectIvarsToConstructOrDestruct(OID, ivars);
10946    if (ivars.empty())
10947      return;
10948    SmallVector<CXXCtorInitializer*, 32> AllToInit;
10949    for (unsigned i = 0; i < ivars.size(); i++) {
10950      FieldDecl *Field = ivars[i];
10951      if (Field->isInvalidDecl())
10952        continue;
10953
10954      CXXCtorInitializer *Member;
10955      InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
10956      InitializationKind InitKind =
10957        InitializationKind::CreateDefault(ObjCImplementation->getLocation());
10958
10959      InitializationSequence InitSeq(*this, InitEntity, InitKind, 0, 0);
10960      ExprResult MemberInit =
10961        InitSeq.Perform(*this, InitEntity, InitKind, MultiExprArg());
10962      MemberInit = MaybeCreateExprWithCleanups(MemberInit);
10963      // Note, MemberInit could actually come back empty if no initialization
10964      // is required (e.g., because it would call a trivial default constructor)
10965      if (!MemberInit.get() || MemberInit.isInvalid())
10966        continue;
10967
10968      Member =
10969        new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
10970                                         SourceLocation(),
10971                                         MemberInit.takeAs<Expr>(),
10972                                         SourceLocation());
10973      AllToInit.push_back(Member);
10974
10975      // Be sure that the destructor is accessible and is marked as referenced.
10976      if (const RecordType *RecordTy
10977                  = Context.getBaseElementType(Field->getType())
10978                                                        ->getAs<RecordType>()) {
10979                    CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
10980        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
10981          MarkFunctionReferenced(Field->getLocation(), Destructor);
10982          CheckDestructorAccess(Field->getLocation(), Destructor,
10983                            PDiag(diag::err_access_dtor_ivar)
10984                              << Context.getBaseElementType(Field->getType()));
10985        }
10986      }
10987    }
10988    ObjCImplementation->setIvarInitializers(Context,
10989                                            AllToInit.data(), AllToInit.size());
10990  }
10991}
10992
10993static
10994void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
10995                           llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
10996                           llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
10997                           llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
10998                           Sema &S) {
10999  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
11000                                                   CE = Current.end();
11001  if (Ctor->isInvalidDecl())
11002    return;
11003
11004  CXXConstructorDecl *Target = Ctor->getTargetConstructor();
11005
11006  // Target may not be determinable yet, for instance if this is a dependent
11007  // call in an uninstantiated template.
11008  if (Target) {
11009    const FunctionDecl *FNTarget = 0;
11010    (void)Target->hasBody(FNTarget);
11011    Target = const_cast<CXXConstructorDecl*>(
11012      cast_or_null<CXXConstructorDecl>(FNTarget));
11013  }
11014
11015  CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
11016                     // Avoid dereferencing a null pointer here.
11017                     *TCanonical = Target ? Target->getCanonicalDecl() : 0;
11018
11019  if (!Current.insert(Canonical))
11020    return;
11021
11022  // We know that beyond here, we aren't chaining into a cycle.
11023  if (!Target || !Target->isDelegatingConstructor() ||
11024      Target->isInvalidDecl() || Valid.count(TCanonical)) {
11025    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
11026      Valid.insert(*CI);
11027    Current.clear();
11028  // We've hit a cycle.
11029  } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
11030             Current.count(TCanonical)) {
11031    // If we haven't diagnosed this cycle yet, do so now.
11032    if (!Invalid.count(TCanonical)) {
11033      S.Diag((*Ctor->init_begin())->getSourceLocation(),
11034             diag::warn_delegating_ctor_cycle)
11035        << Ctor;
11036
11037      // Don't add a note for a function delegating directly to itself.
11038      if (TCanonical != Canonical)
11039        S.Diag(Target->getLocation(), diag::note_it_delegates_to);
11040
11041      CXXConstructorDecl *C = Target;
11042      while (C->getCanonicalDecl() != Canonical) {
11043        const FunctionDecl *FNTarget = 0;
11044        (void)C->getTargetConstructor()->hasBody(FNTarget);
11045        assert(FNTarget && "Ctor cycle through bodiless function");
11046
11047        C = const_cast<CXXConstructorDecl*>(
11048          cast<CXXConstructorDecl>(FNTarget));
11049        S.Diag(C->getLocation(), diag::note_which_delegates_to);
11050      }
11051    }
11052
11053    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
11054      Invalid.insert(*CI);
11055    Current.clear();
11056  } else {
11057    DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
11058  }
11059}
11060
11061
11062void Sema::CheckDelegatingCtorCycles() {
11063  llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
11064
11065  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
11066                                                   CE = Current.end();
11067
11068  for (DelegatingCtorDeclsType::iterator
11069         I = DelegatingCtorDecls.begin(ExternalSource),
11070         E = DelegatingCtorDecls.end();
11071       I != E; ++I)
11072    DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
11073
11074  for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
11075    (*CI)->setInvalidDecl();
11076}
11077
11078namespace {
11079  /// \brief AST visitor that finds references to the 'this' expression.
11080  class FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {
11081    Sema &S;
11082
11083  public:
11084    explicit FindCXXThisExpr(Sema &S) : S(S) { }
11085
11086    bool VisitCXXThisExpr(CXXThisExpr *E) {
11087      S.Diag(E->getLocation(), diag::err_this_static_member_func)
11088        << E->isImplicit();
11089      return false;
11090    }
11091  };
11092}
11093
11094bool Sema::checkThisInStaticMemberFunctionType(CXXMethodDecl *Method) {
11095  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
11096  if (!TSInfo)
11097    return false;
11098
11099  TypeLoc TL = TSInfo->getTypeLoc();
11100  FunctionProtoTypeLoc *ProtoTL = dyn_cast<FunctionProtoTypeLoc>(&TL);
11101  if (!ProtoTL)
11102    return false;
11103
11104  // C++11 [expr.prim.general]p3:
11105  //   [The expression this] shall not appear before the optional
11106  //   cv-qualifier-seq and it shall not appear within the declaration of a
11107  //   static member function (although its type and value category are defined
11108  //   within a static member function as they are within a non-static member
11109  //   function). [ Note: this is because declaration matching does not occur
11110  //  until the complete declarator is known. - end note ]
11111  const FunctionProtoType *Proto = ProtoTL->getTypePtr();
11112  FindCXXThisExpr Finder(*this);
11113
11114  // If the return type came after the cv-qualifier-seq, check it now.
11115  if (Proto->hasTrailingReturn() &&
11116      !Finder.TraverseTypeLoc(ProtoTL->getResultLoc()))
11117    return true;
11118
11119  // Check the exception specification.
11120  if (checkThisInStaticMemberFunctionExceptionSpec(Method))
11121    return true;
11122
11123  return checkThisInStaticMemberFunctionAttributes(Method);
11124}
11125
11126bool Sema::checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method) {
11127  TypeSourceInfo *TSInfo = Method->getTypeSourceInfo();
11128  if (!TSInfo)
11129    return false;
11130
11131  TypeLoc TL = TSInfo->getTypeLoc();
11132  FunctionProtoTypeLoc *ProtoTL = dyn_cast<FunctionProtoTypeLoc>(&TL);
11133  if (!ProtoTL)
11134    return false;
11135
11136  const FunctionProtoType *Proto = ProtoTL->getTypePtr();
11137  FindCXXThisExpr Finder(*this);
11138
11139  switch (Proto->getExceptionSpecType()) {
11140  case EST_Uninstantiated:
11141  case EST_Unevaluated:
11142  case EST_BasicNoexcept:
11143  case EST_DynamicNone:
11144  case EST_MSAny:
11145  case EST_None:
11146    break;
11147
11148  case EST_ComputedNoexcept:
11149    if (!Finder.TraverseStmt(Proto->getNoexceptExpr()))
11150      return true;
11151
11152  case EST_Dynamic:
11153    for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
11154         EEnd = Proto->exception_end();
11155         E != EEnd; ++E) {
11156      if (!Finder.TraverseType(*E))
11157        return true;
11158    }
11159    break;
11160  }
11161
11162  return false;
11163}
11164
11165bool Sema::checkThisInStaticMemberFunctionAttributes(CXXMethodDecl *Method) {
11166  FindCXXThisExpr Finder(*this);
11167
11168  // Check attributes.
11169  for (Decl::attr_iterator A = Method->attr_begin(), AEnd = Method->attr_end();
11170       A != AEnd; ++A) {
11171    // FIXME: This should be emitted by tblgen.
11172    Expr *Arg = 0;
11173    ArrayRef<Expr *> Args;
11174    if (GuardedByAttr *G = dyn_cast<GuardedByAttr>(*A))
11175      Arg = G->getArg();
11176    else if (PtGuardedByAttr *G = dyn_cast<PtGuardedByAttr>(*A))
11177      Arg = G->getArg();
11178    else if (AcquiredAfterAttr *AA = dyn_cast<AcquiredAfterAttr>(*A))
11179      Args = ArrayRef<Expr *>(AA->args_begin(), AA->args_size());
11180    else if (AcquiredBeforeAttr *AB = dyn_cast<AcquiredBeforeAttr>(*A))
11181      Args = ArrayRef<Expr *>(AB->args_begin(), AB->args_size());
11182    else if (ExclusiveLockFunctionAttr *ELF
11183               = dyn_cast<ExclusiveLockFunctionAttr>(*A))
11184      Args = ArrayRef<Expr *>(ELF->args_begin(), ELF->args_size());
11185    else if (SharedLockFunctionAttr *SLF
11186               = dyn_cast<SharedLockFunctionAttr>(*A))
11187      Args = ArrayRef<Expr *>(SLF->args_begin(), SLF->args_size());
11188    else if (ExclusiveTrylockFunctionAttr *ETLF
11189               = dyn_cast<ExclusiveTrylockFunctionAttr>(*A)) {
11190      Arg = ETLF->getSuccessValue();
11191      Args = ArrayRef<Expr *>(ETLF->args_begin(), ETLF->args_size());
11192    } else if (SharedTrylockFunctionAttr *STLF
11193                 = dyn_cast<SharedTrylockFunctionAttr>(*A)) {
11194      Arg = STLF->getSuccessValue();
11195      Args = ArrayRef<Expr *>(STLF->args_begin(), STLF->args_size());
11196    } else if (UnlockFunctionAttr *UF = dyn_cast<UnlockFunctionAttr>(*A))
11197      Args = ArrayRef<Expr *>(UF->args_begin(), UF->args_size());
11198    else if (LockReturnedAttr *LR = dyn_cast<LockReturnedAttr>(*A))
11199      Arg = LR->getArg();
11200    else if (LocksExcludedAttr *LE = dyn_cast<LocksExcludedAttr>(*A))
11201      Args = ArrayRef<Expr *>(LE->args_begin(), LE->args_size());
11202    else if (ExclusiveLocksRequiredAttr *ELR
11203               = dyn_cast<ExclusiveLocksRequiredAttr>(*A))
11204      Args = ArrayRef<Expr *>(ELR->args_begin(), ELR->args_size());
11205    else if (SharedLocksRequiredAttr *SLR
11206               = dyn_cast<SharedLocksRequiredAttr>(*A))
11207      Args = ArrayRef<Expr *>(SLR->args_begin(), SLR->args_size());
11208
11209    if (Arg && !Finder.TraverseStmt(Arg))
11210      return true;
11211
11212    for (unsigned I = 0, N = Args.size(); I != N; ++I) {
11213      if (!Finder.TraverseStmt(Args[I]))
11214        return true;
11215    }
11216  }
11217
11218  return false;
11219}
11220
11221void
11222Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
11223                                  ArrayRef<ParsedType> DynamicExceptions,
11224                                  ArrayRef<SourceRange> DynamicExceptionRanges,
11225                                  Expr *NoexceptExpr,
11226                                  llvm::SmallVectorImpl<QualType> &Exceptions,
11227                                  FunctionProtoType::ExtProtoInfo &EPI) {
11228  Exceptions.clear();
11229  EPI.ExceptionSpecType = EST;
11230  if (EST == EST_Dynamic) {
11231    Exceptions.reserve(DynamicExceptions.size());
11232    for (unsigned ei = 0, ee = DynamicExceptions.size(); ei != ee; ++ei) {
11233      // FIXME: Preserve type source info.
11234      QualType ET = GetTypeFromParser(DynamicExceptions[ei]);
11235
11236      SmallVector<UnexpandedParameterPack, 2> Unexpanded;
11237      collectUnexpandedParameterPacks(ET, Unexpanded);
11238      if (!Unexpanded.empty()) {
11239        DiagnoseUnexpandedParameterPacks(DynamicExceptionRanges[ei].getBegin(),
11240                                         UPPC_ExceptionType,
11241                                         Unexpanded);
11242        continue;
11243      }
11244
11245      // Check that the type is valid for an exception spec, and
11246      // drop it if not.
11247      if (!CheckSpecifiedExceptionType(ET, DynamicExceptionRanges[ei]))
11248        Exceptions.push_back(ET);
11249    }
11250    EPI.NumExceptions = Exceptions.size();
11251    EPI.Exceptions = Exceptions.data();
11252    return;
11253  }
11254
11255  if (EST == EST_ComputedNoexcept) {
11256    // If an error occurred, there's no expression here.
11257    if (NoexceptExpr) {
11258      assert((NoexceptExpr->isTypeDependent() ||
11259              NoexceptExpr->getType()->getCanonicalTypeUnqualified() ==
11260              Context.BoolTy) &&
11261             "Parser should have made sure that the expression is boolean");
11262      if (NoexceptExpr && DiagnoseUnexpandedParameterPack(NoexceptExpr)) {
11263        EPI.ExceptionSpecType = EST_BasicNoexcept;
11264        return;
11265      }
11266
11267      if (!NoexceptExpr->isValueDependent())
11268        NoexceptExpr = VerifyIntegerConstantExpression(NoexceptExpr, 0,
11269                         diag::err_noexcept_needs_constant_expression,
11270                         /*AllowFold*/ false).take();
11271      EPI.NoexceptExpr = NoexceptExpr;
11272    }
11273    return;
11274  }
11275}
11276
11277/// IdentifyCUDATarget - Determine the CUDA compilation target for this function
11278Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
11279  // Implicitly declared functions (e.g. copy constructors) are
11280  // __host__ __device__
11281  if (D->isImplicit())
11282    return CFT_HostDevice;
11283
11284  if (D->hasAttr<CUDAGlobalAttr>())
11285    return CFT_Global;
11286
11287  if (D->hasAttr<CUDADeviceAttr>()) {
11288    if (D->hasAttr<CUDAHostAttr>())
11289      return CFT_HostDevice;
11290    else
11291      return CFT_Device;
11292  }
11293
11294  return CFT_Host;
11295}
11296
11297bool Sema::CheckCUDATarget(CUDAFunctionTarget CallerTarget,
11298                           CUDAFunctionTarget CalleeTarget) {
11299  // CUDA B.1.1 "The __device__ qualifier declares a function that is...
11300  // Callable from the device only."
11301  if (CallerTarget == CFT_Host && CalleeTarget == CFT_Device)
11302    return true;
11303
11304  // CUDA B.1.2 "The __global__ qualifier declares a function that is...
11305  // Callable from the host only."
11306  // CUDA B.1.3 "The __host__ qualifier declares a function that is...
11307  // Callable from the host only."
11308  if ((CallerTarget == CFT_Device || CallerTarget == CFT_Global) &&
11309      (CalleeTarget == CFT_Host || CalleeTarget == CFT_Global))
11310    return true;
11311
11312  if (CallerTarget == CFT_HostDevice && CalleeTarget != CFT_HostDevice)
11313    return true;
11314
11315  return false;
11316}
11317