SemaDeclCXX.cpp revision 45d3d716622f12f9d8e77f2e4c8ffddf4bfe3559
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/AST/ASTConsumer.h"
20#include "clang/AST/ASTContext.h"
21#include "clang/AST/ASTMutationListener.h"
22#include "clang/AST/CharUnits.h"
23#include "clang/AST/CXXInheritance.h"
24#include "clang/AST/DeclVisitor.h"
25#include "clang/AST/ExprCXX.h"
26#include "clang/AST/RecordLayout.h"
27#include "clang/AST/StmtVisitor.h"
28#include "clang/AST/TypeLoc.h"
29#include "clang/AST/TypeOrdering.h"
30#include "clang/Sema/DeclSpec.h"
31#include "clang/Sema/ParsedTemplate.h"
32#include "clang/Basic/PartialDiagnostic.h"
33#include "clang/Lex/Preprocessor.h"
34#include "llvm/ADT/DenseSet.h"
35#include "llvm/ADT/STLExtras.h"
36#include <map>
37#include <set>
38
39using namespace clang;
40
41//===----------------------------------------------------------------------===//
42// CheckDefaultArgumentVisitor
43//===----------------------------------------------------------------------===//
44
45namespace {
46  /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
47  /// the default argument of a parameter to determine whether it
48  /// contains any ill-formed subexpressions. For example, this will
49  /// diagnose the use of local variables or parameters within the
50  /// default argument expression.
51  class CheckDefaultArgumentVisitor
52    : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
53    Expr *DefaultArg;
54    Sema *S;
55
56  public:
57    CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
58      : DefaultArg(defarg), S(s) {}
59
60    bool VisitExpr(Expr *Node);
61    bool VisitDeclRefExpr(DeclRefExpr *DRE);
62    bool VisitCXXThisExpr(CXXThisExpr *ThisE);
63  };
64
65  /// VisitExpr - Visit all of the children of this expression.
66  bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
67    bool IsInvalid = false;
68    for (Stmt::child_range I = Node->children(); I; ++I)
69      IsInvalid |= Visit(*I);
70    return IsInvalid;
71  }
72
73  /// VisitDeclRefExpr - Visit a reference to a declaration, to
74  /// determine whether this declaration can be used in the default
75  /// argument expression.
76  bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
77    NamedDecl *Decl = DRE->getDecl();
78    if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
79      // C++ [dcl.fct.default]p9
80      //   Default arguments are evaluated each time the function is
81      //   called. The order of evaluation of function arguments is
82      //   unspecified. Consequently, parameters of a function shall not
83      //   be used in default argument expressions, even if they are not
84      //   evaluated. Parameters of a function declared before a default
85      //   argument expression are in scope and can hide namespace and
86      //   class member names.
87      return S->Diag(DRE->getSourceRange().getBegin(),
88                     diag::err_param_default_argument_references_param)
89         << Param->getDeclName() << DefaultArg->getSourceRange();
90    } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
91      // C++ [dcl.fct.default]p7
92      //   Local variables shall not be used in default argument
93      //   expressions.
94      if (VDecl->isLocalVarDecl())
95        return S->Diag(DRE->getSourceRange().getBegin(),
96                       diag::err_param_default_argument_references_local)
97          << VDecl->getDeclName() << DefaultArg->getSourceRange();
98    }
99
100    return false;
101  }
102
103  /// VisitCXXThisExpr - Visit a C++ "this" expression.
104  bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
105    // C++ [dcl.fct.default]p8:
106    //   The keyword this shall not be used in a default argument of a
107    //   member function.
108    return S->Diag(ThisE->getSourceRange().getBegin(),
109                   diag::err_param_default_argument_references_this)
110               << ThisE->getSourceRange();
111  }
112}
113
114void Sema::ImplicitExceptionSpecification::CalledDecl(CXXMethodDecl *Method) {
115  assert(Context && "ImplicitExceptionSpecification without an ASTContext");
116  // If we have an MSAny or unknown spec already, don't bother.
117  if (!Method || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
118    return;
119
120  const FunctionProtoType *Proto
121    = Method->getType()->getAs<FunctionProtoType>();
122
123  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
124
125  // If this function can throw any exceptions, make a note of that.
126  if (EST == EST_Delayed || EST == EST_MSAny || EST == EST_None) {
127    ClearExceptions();
128    ComputedEST = EST;
129    return;
130  }
131
132  // FIXME: If the call to this decl is using any of its default arguments, we
133  // need to search them for potentially-throwing calls.
134
135  // If this function has a basic noexcept, it doesn't affect the outcome.
136  if (EST == EST_BasicNoexcept)
137    return;
138
139  // If we have a throw-all spec at this point, ignore the function.
140  if (ComputedEST == EST_None)
141    return;
142
143  // If we're still at noexcept(true) and there's a nothrow() callee,
144  // change to that specification.
145  if (EST == EST_DynamicNone) {
146    if (ComputedEST == EST_BasicNoexcept)
147      ComputedEST = EST_DynamicNone;
148    return;
149  }
150
151  // Check out noexcept specs.
152  if (EST == EST_ComputedNoexcept) {
153    FunctionProtoType::NoexceptResult NR = Proto->getNoexceptSpec(*Context);
154    assert(NR != FunctionProtoType::NR_NoNoexcept &&
155           "Must have noexcept result for EST_ComputedNoexcept.");
156    assert(NR != FunctionProtoType::NR_Dependent &&
157           "Should not generate implicit declarations for dependent cases, "
158           "and don't know how to handle them anyway.");
159
160    // noexcept(false) -> no spec on the new function
161    if (NR == FunctionProtoType::NR_Throw) {
162      ClearExceptions();
163      ComputedEST = EST_None;
164    }
165    // noexcept(true) won't change anything either.
166    return;
167  }
168
169  assert(EST == EST_Dynamic && "EST case not considered earlier.");
170  assert(ComputedEST != EST_None &&
171         "Shouldn't collect exceptions when throw-all is guaranteed.");
172  ComputedEST = EST_Dynamic;
173  // Record the exceptions in this function's exception specification.
174  for (FunctionProtoType::exception_iterator E = Proto->exception_begin(),
175                                          EEnd = Proto->exception_end();
176       E != EEnd; ++E)
177    if (ExceptionsSeen.insert(Context->getCanonicalType(*E)))
178      Exceptions.push_back(*E);
179}
180
181void Sema::ImplicitExceptionSpecification::CalledExpr(Expr *E) {
182  if (!E || ComputedEST == EST_MSAny || ComputedEST == EST_Delayed)
183    return;
184
185  // FIXME:
186  //
187  // C++0x [except.spec]p14:
188  //   [An] implicit exception-specification specifies the type-id T if and
189  // only if T is allowed by the exception-specification of a function directly
190  // invoked by f's implicit definition; f shall allow all exceptions if any
191  // function it directly invokes allows all exceptions, and f shall allow no
192  // exceptions if every function it directly invokes allows no exceptions.
193  //
194  // Note in particular that if an implicit exception-specification is generated
195  // for a function containing a throw-expression, that specification can still
196  // be noexcept(true).
197  //
198  // Note also that 'directly invoked' is not defined in the standard, and there
199  // is no indication that we should only consider potentially-evaluated calls.
200  //
201  // Ultimately we should implement the intent of the standard: the exception
202  // specification should be the set of exceptions which can be thrown by the
203  // implicit definition. For now, we assume that any non-nothrow expression can
204  // throw any exception.
205
206  if (E->CanThrow(*Context))
207    ComputedEST = EST_None;
208}
209
210bool
211Sema::SetParamDefaultArgument(ParmVarDecl *Param, Expr *Arg,
212                              SourceLocation EqualLoc) {
213  if (RequireCompleteType(Param->getLocation(), Param->getType(),
214                          diag::err_typecheck_decl_incomplete_type)) {
215    Param->setInvalidDecl();
216    return true;
217  }
218
219  // C++ [dcl.fct.default]p5
220  //   A default argument expression is implicitly converted (clause
221  //   4) to the parameter type. The default argument expression has
222  //   the same semantic constraints as the initializer expression in
223  //   a declaration of a variable of the parameter type, using the
224  //   copy-initialization semantics (8.5).
225  InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
226                                                                    Param);
227  InitializationKind Kind = InitializationKind::CreateCopy(Param->getLocation(),
228                                                           EqualLoc);
229  InitializationSequence InitSeq(*this, Entity, Kind, &Arg, 1);
230  ExprResult Result = InitSeq.Perform(*this, Entity, Kind,
231                                      MultiExprArg(*this, &Arg, 1));
232  if (Result.isInvalid())
233    return true;
234  Arg = Result.takeAs<Expr>();
235
236  CheckImplicitConversions(Arg, EqualLoc);
237  Arg = MaybeCreateExprWithCleanups(Arg);
238
239  // Okay: add the default argument to the parameter
240  Param->setDefaultArg(Arg);
241
242  // We have already instantiated this parameter; provide each of the
243  // instantiations with the uninstantiated default argument.
244  UnparsedDefaultArgInstantiationsMap::iterator InstPos
245    = UnparsedDefaultArgInstantiations.find(Param);
246  if (InstPos != UnparsedDefaultArgInstantiations.end()) {
247    for (unsigned I = 0, N = InstPos->second.size(); I != N; ++I)
248      InstPos->second[I]->setUninstantiatedDefaultArg(Arg);
249
250    // We're done tracking this parameter's instantiations.
251    UnparsedDefaultArgInstantiations.erase(InstPos);
252  }
253
254  return false;
255}
256
257/// ActOnParamDefaultArgument - Check whether the default argument
258/// provided for a function parameter is well-formed. If so, attach it
259/// to the parameter declaration.
260void
261Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc,
262                                Expr *DefaultArg) {
263  if (!param || !DefaultArg)
264    return;
265
266  ParmVarDecl *Param = cast<ParmVarDecl>(param);
267  UnparsedDefaultArgLocs.erase(Param);
268
269  // Default arguments are only permitted in C++
270  if (!getLangOptions().CPlusPlus) {
271    Diag(EqualLoc, diag::err_param_default_argument)
272      << DefaultArg->getSourceRange();
273    Param->setInvalidDecl();
274    return;
275  }
276
277  // Check for unexpanded parameter packs.
278  if (DiagnoseUnexpandedParameterPack(DefaultArg, UPPC_DefaultArgument)) {
279    Param->setInvalidDecl();
280    return;
281  }
282
283  // Check that the default argument is well-formed
284  CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg, this);
285  if (DefaultArgChecker.Visit(DefaultArg)) {
286    Param->setInvalidDecl();
287    return;
288  }
289
290  SetParamDefaultArgument(Param, DefaultArg, EqualLoc);
291}
292
293/// ActOnParamUnparsedDefaultArgument - We've seen a default
294/// argument for a function parameter, but we can't parse it yet
295/// because we're inside a class definition. Note that this default
296/// argument will be parsed later.
297void Sema::ActOnParamUnparsedDefaultArgument(Decl *param,
298                                             SourceLocation EqualLoc,
299                                             SourceLocation ArgLoc) {
300  if (!param)
301    return;
302
303  ParmVarDecl *Param = cast<ParmVarDecl>(param);
304  if (Param)
305    Param->setUnparsedDefaultArg();
306
307  UnparsedDefaultArgLocs[Param] = ArgLoc;
308}
309
310/// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
311/// the default argument for the parameter param failed.
312void Sema::ActOnParamDefaultArgumentError(Decl *param) {
313  if (!param)
314    return;
315
316  ParmVarDecl *Param = cast<ParmVarDecl>(param);
317
318  Param->setInvalidDecl();
319
320  UnparsedDefaultArgLocs.erase(Param);
321}
322
323/// CheckExtraCXXDefaultArguments - Check for any extra default
324/// arguments in the declarator, which is not a function declaration
325/// or definition and therefore is not permitted to have default
326/// arguments. This routine should be invoked for every declarator
327/// that is not a function declaration or definition.
328void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
329  // C++ [dcl.fct.default]p3
330  //   A default argument expression shall be specified only in the
331  //   parameter-declaration-clause of a function declaration or in a
332  //   template-parameter (14.1). It shall not be specified for a
333  //   parameter pack. If it is specified in a
334  //   parameter-declaration-clause, it shall not occur within a
335  //   declarator or abstract-declarator of a parameter-declaration.
336  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
337    DeclaratorChunk &chunk = D.getTypeObject(i);
338    if (chunk.Kind == DeclaratorChunk::Function) {
339      for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
340        ParmVarDecl *Param =
341          cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param);
342        if (Param->hasUnparsedDefaultArg()) {
343          CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
344          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
345            << SourceRange((*Toks)[1].getLocation(), Toks->back().getLocation());
346          delete Toks;
347          chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
348        } else if (Param->getDefaultArg()) {
349          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
350            << Param->getDefaultArg()->getSourceRange();
351          Param->setDefaultArg(0);
352        }
353      }
354    }
355  }
356}
357
358// MergeCXXFunctionDecl - Merge two declarations of the same C++
359// function, once we already know that they have the same
360// type. Subroutine of MergeFunctionDecl. Returns true if there was an
361// error, false otherwise.
362bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
363  bool Invalid = false;
364
365  // C++ [dcl.fct.default]p4:
366  //   For non-template functions, default arguments can be added in
367  //   later declarations of a function in the same
368  //   scope. Declarations in different scopes have completely
369  //   distinct sets of default arguments. That is, declarations in
370  //   inner scopes do not acquire default arguments from
371  //   declarations in outer scopes, and vice versa. In a given
372  //   function declaration, all parameters subsequent to a
373  //   parameter with a default argument shall have default
374  //   arguments supplied in this or previous declarations. A
375  //   default argument shall not be redefined by a later
376  //   declaration (not even to the same value).
377  //
378  // C++ [dcl.fct.default]p6:
379  //   Except for member functions of class templates, the default arguments
380  //   in a member function definition that appears outside of the class
381  //   definition are added to the set of default arguments provided by the
382  //   member function declaration in the class definition.
383  for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
384    ParmVarDecl *OldParam = Old->getParamDecl(p);
385    ParmVarDecl *NewParam = New->getParamDecl(p);
386
387    if (OldParam->hasDefaultArg() && NewParam->hasDefaultArg()) {
388
389      unsigned DiagDefaultParamID =
390        diag::err_param_default_argument_redefinition;
391
392      // MSVC accepts that default parameters be redefined for member functions
393      // of template class. The new default parameter's value is ignored.
394      Invalid = true;
395      if (getLangOptions().Microsoft) {
396        CXXMethodDecl* MD = dyn_cast<CXXMethodDecl>(New);
397        if (MD && MD->getParent()->getDescribedClassTemplate()) {
398          // Merge the old default argument into the new parameter.
399          NewParam->setHasInheritedDefaultArg();
400          if (OldParam->hasUninstantiatedDefaultArg())
401            NewParam->setUninstantiatedDefaultArg(
402                                      OldParam->getUninstantiatedDefaultArg());
403          else
404            NewParam->setDefaultArg(OldParam->getInit());
405          DiagDefaultParamID = diag::warn_param_default_argument_redefinition;
406          Invalid = false;
407        }
408      }
409
410      // FIXME: If we knew where the '=' was, we could easily provide a fix-it
411      // hint here. Alternatively, we could walk the type-source information
412      // for NewParam to find the last source location in the type... but it
413      // isn't worth the effort right now. This is the kind of test case that
414      // is hard to get right:
415      //   int f(int);
416      //   void g(int (*fp)(int) = f);
417      //   void g(int (*fp)(int) = &f);
418      Diag(NewParam->getLocation(), DiagDefaultParamID)
419        << NewParam->getDefaultArgRange();
420
421      // Look for the function declaration where the default argument was
422      // actually written, which may be a declaration prior to Old.
423      for (FunctionDecl *Older = Old->getPreviousDeclaration();
424           Older; Older = Older->getPreviousDeclaration()) {
425        if (!Older->getParamDecl(p)->hasDefaultArg())
426          break;
427
428        OldParam = Older->getParamDecl(p);
429      }
430
431      Diag(OldParam->getLocation(), diag::note_previous_definition)
432        << OldParam->getDefaultArgRange();
433    } else if (OldParam->hasDefaultArg()) {
434      // Merge the old default argument into the new parameter.
435      // It's important to use getInit() here;  getDefaultArg()
436      // strips off any top-level ExprWithCleanups.
437      NewParam->setHasInheritedDefaultArg();
438      if (OldParam->hasUninstantiatedDefaultArg())
439        NewParam->setUninstantiatedDefaultArg(
440                                      OldParam->getUninstantiatedDefaultArg());
441      else
442        NewParam->setDefaultArg(OldParam->getInit());
443    } else if (NewParam->hasDefaultArg()) {
444      if (New->getDescribedFunctionTemplate()) {
445        // Paragraph 4, quoted above, only applies to non-template functions.
446        Diag(NewParam->getLocation(),
447             diag::err_param_default_argument_template_redecl)
448          << NewParam->getDefaultArgRange();
449        Diag(Old->getLocation(), diag::note_template_prev_declaration)
450          << false;
451      } else if (New->getTemplateSpecializationKind()
452                   != TSK_ImplicitInstantiation &&
453                 New->getTemplateSpecializationKind() != TSK_Undeclared) {
454        // C++ [temp.expr.spec]p21:
455        //   Default function arguments shall not be specified in a declaration
456        //   or a definition for one of the following explicit specializations:
457        //     - the explicit specialization of a function template;
458        //     - the explicit specialization of a member function template;
459        //     - the explicit specialization of a member function of a class
460        //       template where the class template specialization to which the
461        //       member function specialization belongs is implicitly
462        //       instantiated.
463        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg)
464          << (New->getTemplateSpecializationKind() ==TSK_ExplicitSpecialization)
465          << New->getDeclName()
466          << NewParam->getDefaultArgRange();
467      } else if (New->getDeclContext()->isDependentContext()) {
468        // C++ [dcl.fct.default]p6 (DR217):
469        //   Default arguments for a member function of a class template shall
470        //   be specified on the initial declaration of the member function
471        //   within the class template.
472        //
473        // Reading the tea leaves a bit in DR217 and its reference to DR205
474        // leads me to the conclusion that one cannot add default function
475        // arguments for an out-of-line definition of a member function of a
476        // dependent type.
477        int WhichKind = 2;
478        if (CXXRecordDecl *Record
479              = dyn_cast<CXXRecordDecl>(New->getDeclContext())) {
480          if (Record->getDescribedClassTemplate())
481            WhichKind = 0;
482          else if (isa<ClassTemplatePartialSpecializationDecl>(Record))
483            WhichKind = 1;
484          else
485            WhichKind = 2;
486        }
487
488        Diag(NewParam->getLocation(),
489             diag::err_param_default_argument_member_template_redecl)
490          << WhichKind
491          << NewParam->getDefaultArgRange();
492      } else if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(New)) {
493        CXXSpecialMember NewSM = getSpecialMember(Ctor),
494                         OldSM = getSpecialMember(cast<CXXConstructorDecl>(Old));
495        if (NewSM != OldSM) {
496          Diag(NewParam->getLocation(),diag::warn_default_arg_makes_ctor_special)
497            << NewParam->getDefaultArgRange() << NewSM;
498          Diag(Old->getLocation(), diag::note_previous_declaration_special)
499            << OldSM;
500        }
501      }
502    }
503  }
504
505  if (CheckEquivalentExceptionSpec(Old, New))
506    Invalid = true;
507
508  return Invalid;
509}
510
511/// \brief Merge the exception specifications of two variable declarations.
512///
513/// This is called when there's a redeclaration of a VarDecl. The function
514/// checks if the redeclaration might have an exception specification and
515/// validates compatibility and merges the specs if necessary.
516void Sema::MergeVarDeclExceptionSpecs(VarDecl *New, VarDecl *Old) {
517  // Shortcut if exceptions are disabled.
518  if (!getLangOptions().CXXExceptions)
519    return;
520
521  assert(Context.hasSameType(New->getType(), Old->getType()) &&
522         "Should only be called if types are otherwise the same.");
523
524  QualType NewType = New->getType();
525  QualType OldType = Old->getType();
526
527  // We're only interested in pointers and references to functions, as well
528  // as pointers to member functions.
529  if (const ReferenceType *R = NewType->getAs<ReferenceType>()) {
530    NewType = R->getPointeeType();
531    OldType = OldType->getAs<ReferenceType>()->getPointeeType();
532  } else if (const PointerType *P = NewType->getAs<PointerType>()) {
533    NewType = P->getPointeeType();
534    OldType = OldType->getAs<PointerType>()->getPointeeType();
535  } else if (const MemberPointerType *M = NewType->getAs<MemberPointerType>()) {
536    NewType = M->getPointeeType();
537    OldType = OldType->getAs<MemberPointerType>()->getPointeeType();
538  }
539
540  if (!NewType->isFunctionProtoType())
541    return;
542
543  // There's lots of special cases for functions. For function pointers, system
544  // libraries are hopefully not as broken so that we don't need these
545  // workarounds.
546  if (CheckEquivalentExceptionSpec(
547        OldType->getAs<FunctionProtoType>(), Old->getLocation(),
548        NewType->getAs<FunctionProtoType>(), New->getLocation())) {
549    New->setInvalidDecl();
550  }
551}
552
553/// CheckCXXDefaultArguments - Verify that the default arguments for a
554/// function declaration are well-formed according to C++
555/// [dcl.fct.default].
556void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
557  unsigned NumParams = FD->getNumParams();
558  unsigned p;
559
560  // Find first parameter with a default argument
561  for (p = 0; p < NumParams; ++p) {
562    ParmVarDecl *Param = FD->getParamDecl(p);
563    if (Param->hasDefaultArg())
564      break;
565  }
566
567  // C++ [dcl.fct.default]p4:
568  //   In a given function declaration, all parameters
569  //   subsequent to a parameter with a default argument shall
570  //   have default arguments supplied in this or previous
571  //   declarations. A default argument shall not be redefined
572  //   by a later declaration (not even to the same value).
573  unsigned LastMissingDefaultArg = 0;
574  for (; p < NumParams; ++p) {
575    ParmVarDecl *Param = FD->getParamDecl(p);
576    if (!Param->hasDefaultArg()) {
577      if (Param->isInvalidDecl())
578        /* We already complained about this parameter. */;
579      else if (Param->getIdentifier())
580        Diag(Param->getLocation(),
581             diag::err_param_default_argument_missing_name)
582          << Param->getIdentifier();
583      else
584        Diag(Param->getLocation(),
585             diag::err_param_default_argument_missing);
586
587      LastMissingDefaultArg = p;
588    }
589  }
590
591  if (LastMissingDefaultArg > 0) {
592    // Some default arguments were missing. Clear out all of the
593    // default arguments up to (and including) the last missing
594    // default argument, so that we leave the function parameters
595    // in a semantically valid state.
596    for (p = 0; p <= LastMissingDefaultArg; ++p) {
597      ParmVarDecl *Param = FD->getParamDecl(p);
598      if (Param->hasDefaultArg()) {
599        Param->setDefaultArg(0);
600      }
601    }
602  }
603}
604
605/// isCurrentClassName - Determine whether the identifier II is the
606/// name of the class type currently being defined. In the case of
607/// nested classes, this will only return true if II is the name of
608/// the innermost class.
609bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
610                              const CXXScopeSpec *SS) {
611  assert(getLangOptions().CPlusPlus && "No class names in C!");
612
613  CXXRecordDecl *CurDecl;
614  if (SS && SS->isSet() && !SS->isInvalid()) {
615    DeclContext *DC = computeDeclContext(*SS, true);
616    CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
617  } else
618    CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
619
620  if (CurDecl && CurDecl->getIdentifier())
621    return &II == CurDecl->getIdentifier();
622  else
623    return false;
624}
625
626/// \brief Check the validity of a C++ base class specifier.
627///
628/// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
629/// and returns NULL otherwise.
630CXXBaseSpecifier *
631Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
632                         SourceRange SpecifierRange,
633                         bool Virtual, AccessSpecifier Access,
634                         TypeSourceInfo *TInfo,
635                         SourceLocation EllipsisLoc) {
636  QualType BaseType = TInfo->getType();
637
638  // C++ [class.union]p1:
639  //   A union shall not have base classes.
640  if (Class->isUnion()) {
641    Diag(Class->getLocation(), diag::err_base_clause_on_union)
642      << SpecifierRange;
643    return 0;
644  }
645
646  if (EllipsisLoc.isValid() &&
647      !TInfo->getType()->containsUnexpandedParameterPack()) {
648    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
649      << TInfo->getTypeLoc().getSourceRange();
650    EllipsisLoc = SourceLocation();
651  }
652
653  if (BaseType->isDependentType())
654    return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
655                                          Class->getTagKind() == TTK_Class,
656                                          Access, TInfo, EllipsisLoc);
657
658  SourceLocation BaseLoc = TInfo->getTypeLoc().getBeginLoc();
659
660  // Base specifiers must be record types.
661  if (!BaseType->isRecordType()) {
662    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
663    return 0;
664  }
665
666  // C++ [class.union]p1:
667  //   A union shall not be used as a base class.
668  if (BaseType->isUnionType()) {
669    Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
670    return 0;
671  }
672
673  // C++ [class.derived]p2:
674  //   The class-name in a base-specifier shall not be an incompletely
675  //   defined class.
676  if (RequireCompleteType(BaseLoc, BaseType,
677                          PDiag(diag::err_incomplete_base_class)
678                            << SpecifierRange)) {
679    Class->setInvalidDecl();
680    return 0;
681  }
682
683  // If the base class is polymorphic or isn't empty, the new one is/isn't, too.
684  RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
685  assert(BaseDecl && "Record type has no declaration");
686  BaseDecl = BaseDecl->getDefinition();
687  assert(BaseDecl && "Base type is not incomplete, but has no definition");
688  CXXRecordDecl * CXXBaseDecl = cast<CXXRecordDecl>(BaseDecl);
689  assert(CXXBaseDecl && "Base type is not a C++ type");
690
691  // C++ [class]p3:
692  //   If a class is marked final and it appears as a base-type-specifier in
693  //   base-clause, the program is ill-formed.
694  if (CXXBaseDecl->hasAttr<FinalAttr>()) {
695    Diag(BaseLoc, diag::err_class_marked_final_used_as_base)
696      << CXXBaseDecl->getDeclName();
697    Diag(CXXBaseDecl->getLocation(), diag::note_previous_decl)
698      << CXXBaseDecl->getDeclName();
699    return 0;
700  }
701
702  if (BaseDecl->isInvalidDecl())
703    Class->setInvalidDecl();
704
705  // Create the base specifier.
706  return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
707                                        Class->getTagKind() == TTK_Class,
708                                        Access, TInfo, EllipsisLoc);
709}
710
711/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
712/// one entry in the base class list of a class specifier, for
713/// example:
714///    class foo : public bar, virtual private baz {
715/// 'public bar' and 'virtual private baz' are each base-specifiers.
716BaseResult
717Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
718                         bool Virtual, AccessSpecifier Access,
719                         ParsedType basetype, SourceLocation BaseLoc,
720                         SourceLocation EllipsisLoc) {
721  if (!classdecl)
722    return true;
723
724  AdjustDeclIfTemplate(classdecl);
725  CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
726  if (!Class)
727    return true;
728
729  TypeSourceInfo *TInfo = 0;
730  GetTypeFromParser(basetype, &TInfo);
731
732  if (EllipsisLoc.isInvalid() &&
733      DiagnoseUnexpandedParameterPack(SpecifierRange.getBegin(), TInfo,
734                                      UPPC_BaseType))
735    return true;
736
737  if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
738                                                      Virtual, Access, TInfo,
739                                                      EllipsisLoc))
740    return BaseSpec;
741
742  return true;
743}
744
745/// \brief Performs the actual work of attaching the given base class
746/// specifiers to a C++ class.
747bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
748                                unsigned NumBases) {
749 if (NumBases == 0)
750    return false;
751
752  // Used to keep track of which base types we have already seen, so
753  // that we can properly diagnose redundant direct base types. Note
754  // that the key is always the unqualified canonical type of the base
755  // class.
756  std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
757
758  // Copy non-redundant base specifiers into permanent storage.
759  unsigned NumGoodBases = 0;
760  bool Invalid = false;
761  for (unsigned idx = 0; idx < NumBases; ++idx) {
762    QualType NewBaseType
763      = Context.getCanonicalType(Bases[idx]->getType());
764    NewBaseType = NewBaseType.getLocalUnqualifiedType();
765    if (KnownBaseTypes[NewBaseType]) {
766      // C++ [class.mi]p3:
767      //   A class shall not be specified as a direct base class of a
768      //   derived class more than once.
769      Diag(Bases[idx]->getSourceRange().getBegin(),
770           diag::err_duplicate_base_class)
771        << KnownBaseTypes[NewBaseType]->getType()
772        << Bases[idx]->getSourceRange();
773
774      // Delete the duplicate base class specifier; we're going to
775      // overwrite its pointer later.
776      Context.Deallocate(Bases[idx]);
777
778      Invalid = true;
779    } else {
780      // Okay, add this new base class.
781      KnownBaseTypes[NewBaseType] = Bases[idx];
782      Bases[NumGoodBases++] = Bases[idx];
783    }
784  }
785
786  // Attach the remaining base class specifiers to the derived class.
787  Class->setBases(Bases, NumGoodBases);
788
789  // Delete the remaining (good) base class specifiers, since their
790  // data has been copied into the CXXRecordDecl.
791  for (unsigned idx = 0; idx < NumGoodBases; ++idx)
792    Context.Deallocate(Bases[idx]);
793
794  return Invalid;
795}
796
797/// ActOnBaseSpecifiers - Attach the given base specifiers to the
798/// class, after checking whether there are any duplicate base
799/// classes.
800void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, BaseTy **Bases,
801                               unsigned NumBases) {
802  if (!ClassDecl || !Bases || !NumBases)
803    return;
804
805  AdjustDeclIfTemplate(ClassDecl);
806  AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
807                       (CXXBaseSpecifier**)(Bases), NumBases);
808}
809
810static CXXRecordDecl *GetClassForType(QualType T) {
811  if (const RecordType *RT = T->getAs<RecordType>())
812    return cast<CXXRecordDecl>(RT->getDecl());
813  else if (const InjectedClassNameType *ICT = T->getAs<InjectedClassNameType>())
814    return ICT->getDecl();
815  else
816    return 0;
817}
818
819/// \brief Determine whether the type \p Derived is a C++ class that is
820/// derived from the type \p Base.
821bool Sema::IsDerivedFrom(QualType Derived, QualType Base) {
822  if (!getLangOptions().CPlusPlus)
823    return false;
824
825  CXXRecordDecl *DerivedRD = GetClassForType(Derived);
826  if (!DerivedRD)
827    return false;
828
829  CXXRecordDecl *BaseRD = GetClassForType(Base);
830  if (!BaseRD)
831    return false;
832
833  // FIXME: instantiate DerivedRD if necessary.  We need a PoI for this.
834  return DerivedRD->hasDefinition() && DerivedRD->isDerivedFrom(BaseRD);
835}
836
837/// \brief Determine whether the type \p Derived is a C++ class that is
838/// derived from the type \p Base.
839bool Sema::IsDerivedFrom(QualType Derived, QualType Base, CXXBasePaths &Paths) {
840  if (!getLangOptions().CPlusPlus)
841    return false;
842
843  CXXRecordDecl *DerivedRD = GetClassForType(Derived);
844  if (!DerivedRD)
845    return false;
846
847  CXXRecordDecl *BaseRD = GetClassForType(Base);
848  if (!BaseRD)
849    return false;
850
851  return DerivedRD->isDerivedFrom(BaseRD, Paths);
852}
853
854void Sema::BuildBasePathArray(const CXXBasePaths &Paths,
855                              CXXCastPath &BasePathArray) {
856  assert(BasePathArray.empty() && "Base path array must be empty!");
857  assert(Paths.isRecordingPaths() && "Must record paths!");
858
859  const CXXBasePath &Path = Paths.front();
860
861  // We first go backward and check if we have a virtual base.
862  // FIXME: It would be better if CXXBasePath had the base specifier for
863  // the nearest virtual base.
864  unsigned Start = 0;
865  for (unsigned I = Path.size(); I != 0; --I) {
866    if (Path[I - 1].Base->isVirtual()) {
867      Start = I - 1;
868      break;
869    }
870  }
871
872  // Now add all bases.
873  for (unsigned I = Start, E = Path.size(); I != E; ++I)
874    BasePathArray.push_back(const_cast<CXXBaseSpecifier*>(Path[I].Base));
875}
876
877/// \brief Determine whether the given base path includes a virtual
878/// base class.
879bool Sema::BasePathInvolvesVirtualBase(const CXXCastPath &BasePath) {
880  for (CXXCastPath::const_iterator B = BasePath.begin(),
881                                BEnd = BasePath.end();
882       B != BEnd; ++B)
883    if ((*B)->isVirtual())
884      return true;
885
886  return false;
887}
888
889/// CheckDerivedToBaseConversion - Check whether the Derived-to-Base
890/// conversion (where Derived and Base are class types) is
891/// well-formed, meaning that the conversion is unambiguous (and
892/// that all of the base classes are accessible). Returns true
893/// and emits a diagnostic if the code is ill-formed, returns false
894/// otherwise. Loc is the location where this routine should point to
895/// if there is an error, and Range is the source range to highlight
896/// if there is an error.
897bool
898Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
899                                   unsigned InaccessibleBaseID,
900                                   unsigned AmbigiousBaseConvID,
901                                   SourceLocation Loc, SourceRange Range,
902                                   DeclarationName Name,
903                                   CXXCastPath *BasePath) {
904  // First, determine whether the path from Derived to Base is
905  // ambiguous. This is slightly more expensive than checking whether
906  // the Derived to Base conversion exists, because here we need to
907  // explore multiple paths to determine if there is an ambiguity.
908  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
909                     /*DetectVirtual=*/false);
910  bool DerivationOkay = IsDerivedFrom(Derived, Base, Paths);
911  assert(DerivationOkay &&
912         "Can only be used with a derived-to-base conversion");
913  (void)DerivationOkay;
914
915  if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) {
916    if (InaccessibleBaseID) {
917      // Check that the base class can be accessed.
918      switch (CheckBaseClassAccess(Loc, Base, Derived, Paths.front(),
919                                   InaccessibleBaseID)) {
920        case AR_inaccessible:
921          return true;
922        case AR_accessible:
923        case AR_dependent:
924        case AR_delayed:
925          break;
926      }
927    }
928
929    // Build a base path if necessary.
930    if (BasePath)
931      BuildBasePathArray(Paths, *BasePath);
932    return false;
933  }
934
935  // We know that the derived-to-base conversion is ambiguous, and
936  // we're going to produce a diagnostic. Perform the derived-to-base
937  // search just one more time to compute all of the possible paths so
938  // that we can print them out. This is more expensive than any of
939  // the previous derived-to-base checks we've done, but at this point
940  // performance isn't as much of an issue.
941  Paths.clear();
942  Paths.setRecordingPaths(true);
943  bool StillOkay = IsDerivedFrom(Derived, Base, Paths);
944  assert(StillOkay && "Can only be used with a derived-to-base conversion");
945  (void)StillOkay;
946
947  // Build up a textual representation of the ambiguous paths, e.g.,
948  // D -> B -> A, that will be used to illustrate the ambiguous
949  // conversions in the diagnostic. We only print one of the paths
950  // to each base class subobject.
951  std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
952
953  Diag(Loc, AmbigiousBaseConvID)
954  << Derived << Base << PathDisplayStr << Range << Name;
955  return true;
956}
957
958bool
959Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base,
960                                   SourceLocation Loc, SourceRange Range,
961                                   CXXCastPath *BasePath,
962                                   bool IgnoreAccess) {
963  return CheckDerivedToBaseConversion(Derived, Base,
964                                      IgnoreAccess ? 0
965                                       : diag::err_upcast_to_inaccessible_base,
966                                      diag::err_ambiguous_derived_to_base_conv,
967                                      Loc, Range, DeclarationName(),
968                                      BasePath);
969}
970
971
972/// @brief Builds a string representing ambiguous paths from a
973/// specific derived class to different subobjects of the same base
974/// class.
975///
976/// This function builds a string that can be used in error messages
977/// to show the different paths that one can take through the
978/// inheritance hierarchy to go from the derived class to different
979/// subobjects of a base class. The result looks something like this:
980/// @code
981/// struct D -> struct B -> struct A
982/// struct D -> struct C -> struct A
983/// @endcode
984std::string Sema::getAmbiguousPathsDisplayString(CXXBasePaths &Paths) {
985  std::string PathDisplayStr;
986  std::set<unsigned> DisplayedPaths;
987  for (CXXBasePaths::paths_iterator Path = Paths.begin();
988       Path != Paths.end(); ++Path) {
989    if (DisplayedPaths.insert(Path->back().SubobjectNumber).second) {
990      // We haven't displayed a path to this particular base
991      // class subobject yet.
992      PathDisplayStr += "\n    ";
993      PathDisplayStr += Context.getTypeDeclType(Paths.getOrigin()).getAsString();
994      for (CXXBasePath::const_iterator Element = Path->begin();
995           Element != Path->end(); ++Element)
996        PathDisplayStr += " -> " + Element->Base->getType().getAsString();
997    }
998  }
999
1000  return PathDisplayStr;
1001}
1002
1003//===----------------------------------------------------------------------===//
1004// C++ class member Handling
1005//===----------------------------------------------------------------------===//
1006
1007/// ActOnAccessSpecifier - Parsed an access specifier followed by a colon.
1008Decl *Sema::ActOnAccessSpecifier(AccessSpecifier Access,
1009                                 SourceLocation ASLoc,
1010                                 SourceLocation ColonLoc) {
1011  assert(Access != AS_none && "Invalid kind for syntactic access specifier!");
1012  AccessSpecDecl *ASDecl = AccessSpecDecl::Create(Context, Access, CurContext,
1013                                                  ASLoc, ColonLoc);
1014  CurContext->addHiddenDecl(ASDecl);
1015  return ASDecl;
1016}
1017
1018/// CheckOverrideControl - Check C++0x override control semantics.
1019void Sema::CheckOverrideControl(const Decl *D) {
1020  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D);
1021  if (!MD || !MD->isVirtual())
1022    return;
1023
1024  if (MD->isDependentContext())
1025    return;
1026
1027  // C++0x [class.virtual]p3:
1028  //   If a virtual function is marked with the virt-specifier override and does
1029  //   not override a member function of a base class,
1030  //   the program is ill-formed.
1031  bool HasOverriddenMethods =
1032    MD->begin_overridden_methods() != MD->end_overridden_methods();
1033  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods) {
1034    Diag(MD->getLocation(),
1035                 diag::err_function_marked_override_not_overriding)
1036      << MD->getDeclName();
1037    return;
1038  }
1039}
1040
1041/// CheckIfOverriddenFunctionIsMarkedFinal - Checks whether a virtual member
1042/// function overrides a virtual member function marked 'final', according to
1043/// C++0x [class.virtual]p3.
1044bool Sema::CheckIfOverriddenFunctionIsMarkedFinal(const CXXMethodDecl *New,
1045                                                  const CXXMethodDecl *Old) {
1046  if (!Old->hasAttr<FinalAttr>())
1047    return false;
1048
1049  Diag(New->getLocation(), diag::err_final_function_overridden)
1050    << New->getDeclName();
1051  Diag(Old->getLocation(), diag::note_overridden_virtual_function);
1052  return true;
1053}
1054
1055/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
1056/// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
1057/// bitfield width if there is one, 'InitExpr' specifies the initializer if
1058/// one has been parsed, and 'HasDeferredInit' is true if an initializer is
1059/// present but parsing it has been deferred.
1060Decl *
1061Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
1062                               MultiTemplateParamsArg TemplateParameterLists,
1063                               ExprTy *BW, const VirtSpecifiers &VS,
1064                               ExprTy *InitExpr, bool HasDeferredInit,
1065                               bool IsDefinition) {
1066  const DeclSpec &DS = D.getDeclSpec();
1067  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
1068  DeclarationName Name = NameInfo.getName();
1069  SourceLocation Loc = NameInfo.getLoc();
1070
1071  // For anonymous bitfields, the location should point to the type.
1072  if (Loc.isInvalid())
1073    Loc = D.getSourceRange().getBegin();
1074
1075  Expr *BitWidth = static_cast<Expr*>(BW);
1076  Expr *Init = static_cast<Expr*>(InitExpr);
1077
1078  assert(isa<CXXRecordDecl>(CurContext));
1079  assert(!DS.isFriendSpecified());
1080  assert(!Init || !HasDeferredInit);
1081
1082  bool isFunc = D.isDeclarationOfFunction();
1083
1084  // C++ 9.2p6: A member shall not be declared to have automatic storage
1085  // duration (auto, register) or with the extern storage-class-specifier.
1086  // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
1087  // data members and cannot be applied to names declared const or static,
1088  // and cannot be applied to reference members.
1089  switch (DS.getStorageClassSpec()) {
1090    case DeclSpec::SCS_unspecified:
1091    case DeclSpec::SCS_typedef:
1092    case DeclSpec::SCS_static:
1093      // FALL THROUGH.
1094      break;
1095    case DeclSpec::SCS_mutable:
1096      if (isFunc) {
1097        if (DS.getStorageClassSpecLoc().isValid())
1098          Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
1099        else
1100          Diag(DS.getThreadSpecLoc(), diag::err_mutable_function);
1101
1102        // FIXME: It would be nicer if the keyword was ignored only for this
1103        // declarator. Otherwise we could get follow-up errors.
1104        D.getMutableDeclSpec().ClearStorageClassSpecs();
1105      }
1106      break;
1107    default:
1108      if (DS.getStorageClassSpecLoc().isValid())
1109        Diag(DS.getStorageClassSpecLoc(),
1110             diag::err_storageclass_invalid_for_member);
1111      else
1112        Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
1113      D.getMutableDeclSpec().ClearStorageClassSpecs();
1114  }
1115
1116  bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
1117                       DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
1118                      !isFunc);
1119
1120  Decl *Member;
1121  if (isInstField) {
1122    CXXScopeSpec &SS = D.getCXXScopeSpec();
1123
1124    if (SS.isSet() && !SS.isInvalid()) {
1125      // The user provided a superfluous scope specifier inside a class
1126      // definition:
1127      //
1128      // class X {
1129      //   int X::member;
1130      // };
1131      DeclContext *DC = 0;
1132      if ((DC = computeDeclContext(SS, false)) && DC->Equals(CurContext))
1133        Diag(D.getIdentifierLoc(), diag::warn_member_extra_qualification)
1134        << Name << FixItHint::CreateRemoval(SS.getRange());
1135      else
1136        Diag(D.getIdentifierLoc(), diag::err_member_qualification)
1137          << Name << SS.getRange();
1138
1139      SS.clear();
1140    }
1141
1142    // FIXME: Check for template parameters!
1143    // FIXME: Check that the name is an identifier!
1144    Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth,
1145                         HasDeferredInit, AS);
1146    assert(Member && "HandleField never returns null");
1147  } else {
1148    assert(!HasDeferredInit);
1149
1150    Member = HandleDeclarator(S, D, move(TemplateParameterLists), IsDefinition);
1151    if (!Member) {
1152      return 0;
1153    }
1154
1155    // Non-instance-fields can't have a bitfield.
1156    if (BitWidth) {
1157      if (Member->isInvalidDecl()) {
1158        // don't emit another diagnostic.
1159      } else if (isa<VarDecl>(Member)) {
1160        // C++ 9.6p3: A bit-field shall not be a static member.
1161        // "static member 'A' cannot be a bit-field"
1162        Diag(Loc, diag::err_static_not_bitfield)
1163          << Name << BitWidth->getSourceRange();
1164      } else if (isa<TypedefDecl>(Member)) {
1165        // "typedef member 'x' cannot be a bit-field"
1166        Diag(Loc, diag::err_typedef_not_bitfield)
1167          << Name << BitWidth->getSourceRange();
1168      } else {
1169        // A function typedef ("typedef int f(); f a;").
1170        // C++ 9.6p3: A bit-field shall have integral or enumeration type.
1171        Diag(Loc, diag::err_not_integral_type_bitfield)
1172          << Name << cast<ValueDecl>(Member)->getType()
1173          << BitWidth->getSourceRange();
1174      }
1175
1176      BitWidth = 0;
1177      Member->setInvalidDecl();
1178    }
1179
1180    Member->setAccess(AS);
1181
1182    // If we have declared a member function template, set the access of the
1183    // templated declaration as well.
1184    if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Member))
1185      FunTmpl->getTemplatedDecl()->setAccess(AS);
1186  }
1187
1188  if (VS.isOverrideSpecified()) {
1189    CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
1190    if (!MD || !MD->isVirtual()) {
1191      Diag(Member->getLocStart(),
1192           diag::override_keyword_only_allowed_on_virtual_member_functions)
1193        << "override" << FixItHint::CreateRemoval(VS.getOverrideLoc());
1194    } else
1195      MD->addAttr(new (Context) OverrideAttr(VS.getOverrideLoc(), Context));
1196  }
1197  if (VS.isFinalSpecified()) {
1198    CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Member);
1199    if (!MD || !MD->isVirtual()) {
1200      Diag(Member->getLocStart(),
1201           diag::override_keyword_only_allowed_on_virtual_member_functions)
1202      << "final" << FixItHint::CreateRemoval(VS.getFinalLoc());
1203    } else
1204      MD->addAttr(new (Context) FinalAttr(VS.getFinalLoc(), Context));
1205  }
1206
1207  if (VS.getLastLocation().isValid()) {
1208    // Update the end location of a method that has a virt-specifiers.
1209    if (CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(Member))
1210      MD->setRangeEnd(VS.getLastLocation());
1211  }
1212
1213  CheckOverrideControl(Member);
1214
1215  assert((Name || isInstField) && "No identifier for non-field ?");
1216
1217  if (Init)
1218    AddInitializerToDecl(Member, Init, false,
1219                         DS.getTypeSpecType() == DeclSpec::TST_auto);
1220  else if (DS.getTypeSpecType() == DeclSpec::TST_auto &&
1221           DS.getStorageClassSpec() == DeclSpec::SCS_static) {
1222    // C++0x [dcl.spec.auto]p4: 'auto' can only be used in the type of a static
1223    // data member if a brace-or-equal-initializer is provided.
1224    Diag(Loc, diag::err_auto_var_requires_init)
1225      << Name << cast<ValueDecl>(Member)->getType();
1226    Member->setInvalidDecl();
1227  }
1228
1229  FinalizeDeclaration(Member);
1230
1231  if (isInstField)
1232    FieldCollector->Add(cast<FieldDecl>(Member));
1233  return Member;
1234}
1235
1236/// ActOnCXXInClassMemberInitializer - This is invoked after parsing an
1237/// in-class initializer for a non-static C++ class member, and after
1238/// instantiating an in-class initializer in a class template. Such actions
1239/// are deferred until the class is complete.
1240void
1241Sema::ActOnCXXInClassMemberInitializer(Decl *D, SourceLocation EqualLoc,
1242                                       Expr *InitExpr) {
1243  FieldDecl *FD = cast<FieldDecl>(D);
1244
1245  if (!InitExpr) {
1246    FD->setInvalidDecl();
1247    FD->removeInClassInitializer();
1248    return;
1249  }
1250
1251  ExprResult Init = InitExpr;
1252  if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
1253    // FIXME: if there is no EqualLoc, this is list-initialization.
1254    Init = PerformCopyInitialization(
1255      InitializedEntity::InitializeMember(FD), EqualLoc, InitExpr);
1256    if (Init.isInvalid()) {
1257      FD->setInvalidDecl();
1258      return;
1259    }
1260
1261    CheckImplicitConversions(Init.get(), EqualLoc);
1262  }
1263
1264  // C++0x [class.base.init]p7:
1265  //   The initialization of each base and member constitutes a
1266  //   full-expression.
1267  Init = MaybeCreateExprWithCleanups(Init);
1268  if (Init.isInvalid()) {
1269    FD->setInvalidDecl();
1270    return;
1271  }
1272
1273  InitExpr = Init.release();
1274
1275  FD->setInClassInitializer(InitExpr);
1276}
1277
1278/// \brief Find the direct and/or virtual base specifiers that
1279/// correspond to the given base type, for use in base initialization
1280/// within a constructor.
1281static bool FindBaseInitializer(Sema &SemaRef,
1282                                CXXRecordDecl *ClassDecl,
1283                                QualType BaseType,
1284                                const CXXBaseSpecifier *&DirectBaseSpec,
1285                                const CXXBaseSpecifier *&VirtualBaseSpec) {
1286  // First, check for a direct base class.
1287  DirectBaseSpec = 0;
1288  for (CXXRecordDecl::base_class_const_iterator Base
1289         = ClassDecl->bases_begin();
1290       Base != ClassDecl->bases_end(); ++Base) {
1291    if (SemaRef.Context.hasSameUnqualifiedType(BaseType, Base->getType())) {
1292      // We found a direct base of this type. That's what we're
1293      // initializing.
1294      DirectBaseSpec = &*Base;
1295      break;
1296    }
1297  }
1298
1299  // Check for a virtual base class.
1300  // FIXME: We might be able to short-circuit this if we know in advance that
1301  // there are no virtual bases.
1302  VirtualBaseSpec = 0;
1303  if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
1304    // We haven't found a base yet; search the class hierarchy for a
1305    // virtual base class.
1306    CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1307                       /*DetectVirtual=*/false);
1308    if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
1309                              BaseType, Paths)) {
1310      for (CXXBasePaths::paths_iterator Path = Paths.begin();
1311           Path != Paths.end(); ++Path) {
1312        if (Path->back().Base->isVirtual()) {
1313          VirtualBaseSpec = Path->back().Base;
1314          break;
1315        }
1316      }
1317    }
1318  }
1319
1320  return DirectBaseSpec || VirtualBaseSpec;
1321}
1322
1323/// ActOnMemInitializer - Handle a C++ member initializer.
1324MemInitResult
1325Sema::ActOnMemInitializer(Decl *ConstructorD,
1326                          Scope *S,
1327                          CXXScopeSpec &SS,
1328                          IdentifierInfo *MemberOrBase,
1329                          ParsedType TemplateTypeTy,
1330                          SourceLocation IdLoc,
1331                          SourceLocation LParenLoc,
1332                          ExprTy **Args, unsigned NumArgs,
1333                          SourceLocation RParenLoc,
1334                          SourceLocation EllipsisLoc) {
1335  if (!ConstructorD)
1336    return true;
1337
1338  AdjustDeclIfTemplate(ConstructorD);
1339
1340  CXXConstructorDecl *Constructor
1341    = dyn_cast<CXXConstructorDecl>(ConstructorD);
1342  if (!Constructor) {
1343    // The user wrote a constructor initializer on a function that is
1344    // not a C++ constructor. Ignore the error for now, because we may
1345    // have more member initializers coming; we'll diagnose it just
1346    // once in ActOnMemInitializers.
1347    return true;
1348  }
1349
1350  CXXRecordDecl *ClassDecl = Constructor->getParent();
1351
1352  // C++ [class.base.init]p2:
1353  //   Names in a mem-initializer-id are looked up in the scope of the
1354  //   constructor's class and, if not found in that scope, are looked
1355  //   up in the scope containing the constructor's definition.
1356  //   [Note: if the constructor's class contains a member with the
1357  //   same name as a direct or virtual base class of the class, a
1358  //   mem-initializer-id naming the member or base class and composed
1359  //   of a single identifier refers to the class member. A
1360  //   mem-initializer-id for the hidden base class may be specified
1361  //   using a qualified name. ]
1362  if (!SS.getScopeRep() && !TemplateTypeTy) {
1363    // Look for a member, first.
1364    FieldDecl *Member = 0;
1365    DeclContext::lookup_result Result
1366      = ClassDecl->lookup(MemberOrBase);
1367    if (Result.first != Result.second) {
1368      Member = dyn_cast<FieldDecl>(*Result.first);
1369
1370      if (Member) {
1371        if (EllipsisLoc.isValid())
1372          Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
1373            << MemberOrBase << SourceRange(IdLoc, RParenLoc);
1374
1375        return BuildMemberInitializer(Member, (Expr**)Args, NumArgs, IdLoc,
1376                                    LParenLoc, RParenLoc);
1377      }
1378
1379      // Handle anonymous union case.
1380      if (IndirectFieldDecl* IndirectField
1381            = dyn_cast<IndirectFieldDecl>(*Result.first)) {
1382        if (EllipsisLoc.isValid())
1383          Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
1384            << MemberOrBase << SourceRange(IdLoc, RParenLoc);
1385
1386         return BuildMemberInitializer(IndirectField, (Expr**)Args,
1387                                       NumArgs, IdLoc,
1388                                       LParenLoc, RParenLoc);
1389      }
1390    }
1391  }
1392  // It didn't name a member, so see if it names a class.
1393  QualType BaseType;
1394  TypeSourceInfo *TInfo = 0;
1395
1396  if (TemplateTypeTy) {
1397    BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo);
1398  } else {
1399    LookupResult R(*this, MemberOrBase, IdLoc, LookupOrdinaryName);
1400    LookupParsedName(R, S, &SS);
1401
1402    TypeDecl *TyD = R.getAsSingle<TypeDecl>();
1403    if (!TyD) {
1404      if (R.isAmbiguous()) return true;
1405
1406      // We don't want access-control diagnostics here.
1407      R.suppressDiagnostics();
1408
1409      if (SS.isSet() && isDependentScopeSpecifier(SS)) {
1410        bool NotUnknownSpecialization = false;
1411        DeclContext *DC = computeDeclContext(SS, false);
1412        if (CXXRecordDecl *Record = dyn_cast_or_null<CXXRecordDecl>(DC))
1413          NotUnknownSpecialization = !Record->hasAnyDependentBases();
1414
1415        if (!NotUnknownSpecialization) {
1416          // When the scope specifier can refer to a member of an unknown
1417          // specialization, we take it as a type name.
1418          BaseType = CheckTypenameType(ETK_None, SourceLocation(),
1419                                       SS.getWithLocInContext(Context),
1420                                       *MemberOrBase, IdLoc);
1421          if (BaseType.isNull())
1422            return true;
1423
1424          R.clear();
1425          R.setLookupName(MemberOrBase);
1426        }
1427      }
1428
1429      // If no results were found, try to correct typos.
1430      TypoCorrection Corr;
1431      if (R.empty() && BaseType.isNull() &&
1432          (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS,
1433                              ClassDecl, false, CTC_NoKeywords))) {
1434        std::string CorrectedStr(Corr.getAsString(getLangOptions()));
1435        std::string CorrectedQuotedStr(Corr.getQuoted(getLangOptions()));
1436        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {
1437          if (Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl)) {
1438            // We have found a non-static data member with a similar
1439            // name to what was typed; complain and initialize that
1440            // member.
1441            Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
1442              << MemberOrBase << true << CorrectedQuotedStr
1443              << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
1444            Diag(Member->getLocation(), diag::note_previous_decl)
1445              << CorrectedQuotedStr;
1446
1447            return BuildMemberInitializer(Member, (Expr**)Args, NumArgs, IdLoc,
1448                                          LParenLoc, RParenLoc);
1449          }
1450        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {
1451          const CXXBaseSpecifier *DirectBaseSpec;
1452          const CXXBaseSpecifier *VirtualBaseSpec;
1453          if (FindBaseInitializer(*this, ClassDecl,
1454                                  Context.getTypeDeclType(Type),
1455                                  DirectBaseSpec, VirtualBaseSpec)) {
1456            // We have found a direct or virtual base class with a
1457            // similar name to what was typed; complain and initialize
1458            // that base class.
1459            Diag(R.getNameLoc(), diag::err_mem_init_not_member_or_class_suggest)
1460              << MemberOrBase << false << CorrectedQuotedStr
1461              << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr);
1462
1463            const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
1464                                                             : VirtualBaseSpec;
1465            Diag(BaseSpec->getSourceRange().getBegin(),
1466                 diag::note_base_class_specified_here)
1467              << BaseSpec->getType()
1468              << BaseSpec->getSourceRange();
1469
1470            TyD = Type;
1471          }
1472        }
1473      }
1474
1475      if (!TyD && BaseType.isNull()) {
1476        Diag(IdLoc, diag::err_mem_init_not_member_or_class)
1477          << MemberOrBase << SourceRange(IdLoc, RParenLoc);
1478        return true;
1479      }
1480    }
1481
1482    if (BaseType.isNull()) {
1483      BaseType = Context.getTypeDeclType(TyD);
1484      if (SS.isSet()) {
1485        NestedNameSpecifier *Qualifier =
1486          static_cast<NestedNameSpecifier*>(SS.getScopeRep());
1487
1488        // FIXME: preserve source range information
1489        BaseType = Context.getElaboratedType(ETK_None, Qualifier, BaseType);
1490      }
1491    }
1492  }
1493
1494  if (!TInfo)
1495    TInfo = Context.getTrivialTypeSourceInfo(BaseType, IdLoc);
1496
1497  return BuildBaseInitializer(BaseType, TInfo, (Expr **)Args, NumArgs,
1498                              LParenLoc, RParenLoc, ClassDecl, EllipsisLoc);
1499}
1500
1501/// Checks an initializer expression for use of uninitialized fields, such as
1502/// containing the field that is being initialized. Returns true if there is an
1503/// uninitialized field was used an updates the SourceLocation parameter; false
1504/// otherwise.
1505static bool InitExprContainsUninitializedFields(const Stmt *S,
1506                                                const ValueDecl *LhsField,
1507                                                SourceLocation *L) {
1508  assert(isa<FieldDecl>(LhsField) || isa<IndirectFieldDecl>(LhsField));
1509
1510  if (isa<CallExpr>(S)) {
1511    // Do not descend into function calls or constructors, as the use
1512    // of an uninitialized field may be valid. One would have to inspect
1513    // the contents of the function/ctor to determine if it is safe or not.
1514    // i.e. Pass-by-value is never safe, but pass-by-reference and pointers
1515    // may be safe, depending on what the function/ctor does.
1516    return false;
1517  }
1518  if (const MemberExpr *ME = dyn_cast<MemberExpr>(S)) {
1519    const NamedDecl *RhsField = ME->getMemberDecl();
1520
1521    if (const VarDecl *VD = dyn_cast<VarDecl>(RhsField)) {
1522      // The member expression points to a static data member.
1523      assert(VD->isStaticDataMember() &&
1524             "Member points to non-static data member!");
1525      (void)VD;
1526      return false;
1527    }
1528
1529    if (isa<EnumConstantDecl>(RhsField)) {
1530      // The member expression points to an enum.
1531      return false;
1532    }
1533
1534    if (RhsField == LhsField) {
1535      // Initializing a field with itself. Throw a warning.
1536      // But wait; there are exceptions!
1537      // Exception #1:  The field may not belong to this record.
1538      // e.g. Foo(const Foo& rhs) : A(rhs.A) {}
1539      const Expr *base = ME->getBase();
1540      if (base != NULL && !isa<CXXThisExpr>(base->IgnoreParenCasts())) {
1541        // Even though the field matches, it does not belong to this record.
1542        return false;
1543      }
1544      // None of the exceptions triggered; return true to indicate an
1545      // uninitialized field was used.
1546      *L = ME->getMemberLoc();
1547      return true;
1548    }
1549  } else if (isa<UnaryExprOrTypeTraitExpr>(S)) {
1550    // sizeof/alignof doesn't reference contents, do not warn.
1551    return false;
1552  } else if (const UnaryOperator *UOE = dyn_cast<UnaryOperator>(S)) {
1553    // address-of doesn't reference contents (the pointer may be dereferenced
1554    // in the same expression but it would be rare; and weird).
1555    if (UOE->getOpcode() == UO_AddrOf)
1556      return false;
1557  }
1558  for (Stmt::const_child_range it = S->children(); it; ++it) {
1559    if (!*it) {
1560      // An expression such as 'member(arg ?: "")' may trigger this.
1561      continue;
1562    }
1563    if (InitExprContainsUninitializedFields(*it, LhsField, L))
1564      return true;
1565  }
1566  return false;
1567}
1568
1569MemInitResult
1570Sema::BuildMemberInitializer(ValueDecl *Member, Expr **Args,
1571                             unsigned NumArgs, SourceLocation IdLoc,
1572                             SourceLocation LParenLoc,
1573                             SourceLocation RParenLoc) {
1574  FieldDecl *DirectMember = dyn_cast<FieldDecl>(Member);
1575  IndirectFieldDecl *IndirectMember = dyn_cast<IndirectFieldDecl>(Member);
1576  assert((DirectMember || IndirectMember) &&
1577         "Member must be a FieldDecl or IndirectFieldDecl");
1578
1579  if (Member->isInvalidDecl())
1580    return true;
1581
1582  // Diagnose value-uses of fields to initialize themselves, e.g.
1583  //   foo(foo)
1584  // where foo is not also a parameter to the constructor.
1585  // TODO: implement -Wuninitialized and fold this into that framework.
1586  for (unsigned i = 0; i < NumArgs; ++i) {
1587    SourceLocation L;
1588    if (InitExprContainsUninitializedFields(Args[i], Member, &L)) {
1589      // FIXME: Return true in the case when other fields are used before being
1590      // uninitialized. For example, let this field be the i'th field. When
1591      // initializing the i'th field, throw a warning if any of the >= i'th
1592      // fields are used, as they are not yet initialized.
1593      // Right now we are only handling the case where the i'th field uses
1594      // itself in its initializer.
1595      Diag(L, diag::warn_field_is_uninit);
1596    }
1597  }
1598
1599  bool HasDependentArg = false;
1600  for (unsigned i = 0; i < NumArgs; i++)
1601    HasDependentArg |= Args[i]->isTypeDependent();
1602
1603  Expr *Init;
1604  if (Member->getType()->isDependentType() || HasDependentArg) {
1605    // Can't check initialization for a member of dependent type or when
1606    // any of the arguments are type-dependent expressions.
1607    Init = new (Context) ParenListExpr(Context, LParenLoc, Args, NumArgs,
1608                                       RParenLoc,
1609                                       Member->getType().getNonReferenceType());
1610
1611    DiscardCleanupsInEvaluationContext();
1612  } else {
1613    // Initialize the member.
1614    InitializedEntity MemberEntity =
1615      DirectMember ? InitializedEntity::InitializeMember(DirectMember, 0)
1616                   : InitializedEntity::InitializeMember(IndirectMember, 0);
1617    InitializationKind Kind =
1618      InitializationKind::CreateDirect(IdLoc, LParenLoc, RParenLoc);
1619
1620    InitializationSequence InitSeq(*this, MemberEntity, Kind, Args, NumArgs);
1621
1622    ExprResult MemberInit =
1623      InitSeq.Perform(*this, MemberEntity, Kind,
1624                      MultiExprArg(*this, Args, NumArgs), 0);
1625    if (MemberInit.isInvalid())
1626      return true;
1627
1628    CheckImplicitConversions(MemberInit.get(), LParenLoc);
1629
1630    // C++0x [class.base.init]p7:
1631    //   The initialization of each base and member constitutes a
1632    //   full-expression.
1633    MemberInit = MaybeCreateExprWithCleanups(MemberInit);
1634    if (MemberInit.isInvalid())
1635      return true;
1636
1637    // If we are in a dependent context, template instantiation will
1638    // perform this type-checking again. Just save the arguments that we
1639    // received in a ParenListExpr.
1640    // FIXME: This isn't quite ideal, since our ASTs don't capture all
1641    // of the information that we have about the member
1642    // initializer. However, deconstructing the ASTs is a dicey process,
1643    // and this approach is far more likely to get the corner cases right.
1644    if (CurContext->isDependentContext())
1645      Init = new (Context) ParenListExpr(
1646          Context, LParenLoc, Args, NumArgs, RParenLoc,
1647          Member->getType().getNonReferenceType());
1648    else
1649      Init = MemberInit.get();
1650  }
1651
1652  if (DirectMember) {
1653    return new (Context) CXXCtorInitializer(Context, DirectMember,
1654                                                    IdLoc, LParenLoc, Init,
1655                                                    RParenLoc);
1656  } else {
1657    return new (Context) CXXCtorInitializer(Context, IndirectMember,
1658                                                    IdLoc, LParenLoc, Init,
1659                                                    RParenLoc);
1660  }
1661}
1662
1663MemInitResult
1664Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo,
1665                                 Expr **Args, unsigned NumArgs,
1666                                 SourceLocation NameLoc,
1667                                 SourceLocation LParenLoc,
1668                                 SourceLocation RParenLoc,
1669                                 CXXRecordDecl *ClassDecl) {
1670  SourceLocation Loc = TInfo->getTypeLoc().getLocalSourceRange().getBegin();
1671  if (!LangOpts.CPlusPlus0x)
1672    return Diag(Loc, diag::err_delegation_0x_only)
1673      << TInfo->getTypeLoc().getLocalSourceRange();
1674
1675  // Initialize the object.
1676  InitializedEntity DelegationEntity = InitializedEntity::InitializeDelegation(
1677                                     QualType(ClassDecl->getTypeForDecl(), 0));
1678  InitializationKind Kind =
1679    InitializationKind::CreateDirect(NameLoc, LParenLoc, RParenLoc);
1680
1681  InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args, NumArgs);
1682
1683  ExprResult DelegationInit =
1684    InitSeq.Perform(*this, DelegationEntity, Kind,
1685                    MultiExprArg(*this, Args, NumArgs), 0);
1686  if (DelegationInit.isInvalid())
1687    return true;
1688
1689  CXXConstructExpr *ConExpr = cast<CXXConstructExpr>(DelegationInit.get());
1690  CXXConstructorDecl *Constructor
1691    = ConExpr->getConstructor();
1692  assert(Constructor && "Delegating constructor with no target?");
1693
1694  CheckImplicitConversions(DelegationInit.get(), LParenLoc);
1695
1696  // C++0x [class.base.init]p7:
1697  //   The initialization of each base and member constitutes a
1698  //   full-expression.
1699  DelegationInit = MaybeCreateExprWithCleanups(DelegationInit);
1700  if (DelegationInit.isInvalid())
1701    return true;
1702
1703  assert(!CurContext->isDependentContext());
1704  return new (Context) CXXCtorInitializer(Context, Loc, LParenLoc, Constructor,
1705                                          DelegationInit.takeAs<Expr>(),
1706                                          RParenLoc);
1707}
1708
1709MemInitResult
1710Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo,
1711                           Expr **Args, unsigned NumArgs,
1712                           SourceLocation LParenLoc, SourceLocation RParenLoc,
1713                           CXXRecordDecl *ClassDecl,
1714                           SourceLocation EllipsisLoc) {
1715  bool HasDependentArg = false;
1716  for (unsigned i = 0; i < NumArgs; i++)
1717    HasDependentArg |= Args[i]->isTypeDependent();
1718
1719  SourceLocation BaseLoc
1720    = BaseTInfo->getTypeLoc().getLocalSourceRange().getBegin();
1721
1722  if (!BaseType->isDependentType() && !BaseType->isRecordType())
1723    return Diag(BaseLoc, diag::err_base_init_does_not_name_class)
1724             << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
1725
1726  // C++ [class.base.init]p2:
1727  //   [...] Unless the mem-initializer-id names a nonstatic data
1728  //   member of the constructor's class or a direct or virtual base
1729  //   of that class, the mem-initializer is ill-formed. A
1730  //   mem-initializer-list can initialize a base class using any
1731  //   name that denotes that base class type.
1732  bool Dependent = BaseType->isDependentType() || HasDependentArg;
1733
1734  if (EllipsisLoc.isValid()) {
1735    // This is a pack expansion.
1736    if (!BaseType->containsUnexpandedParameterPack())  {
1737      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)
1738        << SourceRange(BaseLoc, RParenLoc);
1739
1740      EllipsisLoc = SourceLocation();
1741    }
1742  } else {
1743    // Check for any unexpanded parameter packs.
1744    if (DiagnoseUnexpandedParameterPack(BaseLoc, BaseTInfo, UPPC_Initializer))
1745      return true;
1746
1747    for (unsigned I = 0; I != NumArgs; ++I)
1748      if (DiagnoseUnexpandedParameterPack(Args[I]))
1749        return true;
1750  }
1751
1752  // Check for direct and virtual base classes.
1753  const CXXBaseSpecifier *DirectBaseSpec = 0;
1754  const CXXBaseSpecifier *VirtualBaseSpec = 0;
1755  if (!Dependent) {
1756    if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
1757                                       BaseType))
1758      return BuildDelegatingInitializer(BaseTInfo, Args, NumArgs, BaseLoc,
1759                                        LParenLoc, RParenLoc, ClassDecl);
1760
1761    FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
1762                        VirtualBaseSpec);
1763
1764    // C++ [base.class.init]p2:
1765    // Unless the mem-initializer-id names a nonstatic data member of the
1766    // constructor's class or a direct or virtual base of that class, the
1767    // mem-initializer is ill-formed.
1768    if (!DirectBaseSpec && !VirtualBaseSpec) {
1769      // If the class has any dependent bases, then it's possible that
1770      // one of those types will resolve to the same type as
1771      // BaseType. Therefore, just treat this as a dependent base
1772      // class initialization.  FIXME: Should we try to check the
1773      // initialization anyway? It seems odd.
1774      if (ClassDecl->hasAnyDependentBases())
1775        Dependent = true;
1776      else
1777        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual)
1778          << BaseType << Context.getTypeDeclType(ClassDecl)
1779          << BaseTInfo->getTypeLoc().getLocalSourceRange();
1780    }
1781  }
1782
1783  if (Dependent) {
1784    // Can't check initialization for a base of dependent type or when
1785    // any of the arguments are type-dependent expressions.
1786    ExprResult BaseInit
1787      = Owned(new (Context) ParenListExpr(Context, LParenLoc, Args, NumArgs,
1788                                          RParenLoc, BaseType));
1789
1790    DiscardCleanupsInEvaluationContext();
1791
1792    return new (Context) CXXCtorInitializer(Context, BaseTInfo,
1793                                                    /*IsVirtual=*/false,
1794                                                    LParenLoc,
1795                                                    BaseInit.takeAs<Expr>(),
1796                                                    RParenLoc,
1797                                                    EllipsisLoc);
1798  }
1799
1800  // C++ [base.class.init]p2:
1801  //   If a mem-initializer-id is ambiguous because it designates both
1802  //   a direct non-virtual base class and an inherited virtual base
1803  //   class, the mem-initializer is ill-formed.
1804  if (DirectBaseSpec && VirtualBaseSpec)
1805    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual)
1806      << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();
1807
1808  CXXBaseSpecifier *BaseSpec
1809    = const_cast<CXXBaseSpecifier *>(DirectBaseSpec);
1810  if (!BaseSpec)
1811    BaseSpec = const_cast<CXXBaseSpecifier *>(VirtualBaseSpec);
1812
1813  // Initialize the base.
1814  InitializedEntity BaseEntity =
1815    InitializedEntity::InitializeBase(Context, BaseSpec, VirtualBaseSpec);
1816  InitializationKind Kind =
1817    InitializationKind::CreateDirect(BaseLoc, LParenLoc, RParenLoc);
1818
1819  InitializationSequence InitSeq(*this, BaseEntity, Kind, Args, NumArgs);
1820
1821  ExprResult BaseInit =
1822    InitSeq.Perform(*this, BaseEntity, Kind,
1823                    MultiExprArg(*this, Args, NumArgs), 0);
1824  if (BaseInit.isInvalid())
1825    return true;
1826
1827  CheckImplicitConversions(BaseInit.get(), LParenLoc);
1828
1829  // C++0x [class.base.init]p7:
1830  //   The initialization of each base and member constitutes a
1831  //   full-expression.
1832  BaseInit = MaybeCreateExprWithCleanups(BaseInit);
1833  if (BaseInit.isInvalid())
1834    return true;
1835
1836  // If we are in a dependent context, template instantiation will
1837  // perform this type-checking again. Just save the arguments that we
1838  // received in a ParenListExpr.
1839  // FIXME: This isn't quite ideal, since our ASTs don't capture all
1840  // of the information that we have about the base
1841  // initializer. However, deconstructing the ASTs is a dicey process,
1842  // and this approach is far more likely to get the corner cases right.
1843  if (CurContext->isDependentContext()) {
1844    ExprResult Init
1845      = Owned(new (Context) ParenListExpr(Context, LParenLoc, Args, NumArgs,
1846                                          RParenLoc, BaseType));
1847    return new (Context) CXXCtorInitializer(Context, BaseTInfo,
1848                                                    BaseSpec->isVirtual(),
1849                                                    LParenLoc,
1850                                                    Init.takeAs<Expr>(),
1851                                                    RParenLoc,
1852                                                    EllipsisLoc);
1853  }
1854
1855  return new (Context) CXXCtorInitializer(Context, BaseTInfo,
1856                                                  BaseSpec->isVirtual(),
1857                                                  LParenLoc,
1858                                                  BaseInit.takeAs<Expr>(),
1859                                                  RParenLoc,
1860                                                  EllipsisLoc);
1861}
1862
1863// Create a static_cast\<T&&>(expr).
1864static Expr *CastForMoving(Sema &SemaRef, Expr *E) {
1865  QualType ExprType = E->getType();
1866  QualType TargetType = SemaRef.Context.getRValueReferenceType(ExprType);
1867  SourceLocation ExprLoc = E->getLocStart();
1868  TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo(
1869      TargetType, ExprLoc);
1870
1871  return SemaRef.BuildCXXNamedCast(ExprLoc, tok::kw_static_cast, TargetLoc, E,
1872                                   SourceRange(ExprLoc, ExprLoc),
1873                                   E->getSourceRange()).take();
1874}
1875
1876/// ImplicitInitializerKind - How an implicit base or member initializer should
1877/// initialize its base or member.
1878enum ImplicitInitializerKind {
1879  IIK_Default,
1880  IIK_Copy,
1881  IIK_Move
1882};
1883
1884static bool
1885BuildImplicitBaseInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
1886                             ImplicitInitializerKind ImplicitInitKind,
1887                             CXXBaseSpecifier *BaseSpec,
1888                             bool IsInheritedVirtualBase,
1889                             CXXCtorInitializer *&CXXBaseInit) {
1890  InitializedEntity InitEntity
1891    = InitializedEntity::InitializeBase(SemaRef.Context, BaseSpec,
1892                                        IsInheritedVirtualBase);
1893
1894  ExprResult BaseInit;
1895
1896  switch (ImplicitInitKind) {
1897  case IIK_Default: {
1898    InitializationKind InitKind
1899      = InitializationKind::CreateDefault(Constructor->getLocation());
1900    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
1901    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
1902                               MultiExprArg(SemaRef, 0, 0));
1903    break;
1904  }
1905
1906  case IIK_Move:
1907  case IIK_Copy: {
1908    bool Moving = ImplicitInitKind == IIK_Move;
1909    ParmVarDecl *Param = Constructor->getParamDecl(0);
1910    QualType ParamType = Param->getType().getNonReferenceType();
1911
1912    Expr *CopyCtorArg =
1913      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), Param,
1914                          Constructor->getLocation(), ParamType,
1915                          VK_LValue, 0);
1916
1917    // Cast to the base class to avoid ambiguities.
1918    QualType ArgTy =
1919      SemaRef.Context.getQualifiedType(BaseSpec->getType().getUnqualifiedType(),
1920                                       ParamType.getQualifiers());
1921
1922    if (Moving) {
1923      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg);
1924    }
1925
1926    CXXCastPath BasePath;
1927    BasePath.push_back(BaseSpec);
1928    CopyCtorArg = SemaRef.ImpCastExprToType(CopyCtorArg, ArgTy,
1929                                            CK_UncheckedDerivedToBase,
1930                                            Moving ? VK_RValue : VK_LValue,
1931                                            &BasePath).take();
1932
1933    InitializationKind InitKind
1934      = InitializationKind::CreateDirect(Constructor->getLocation(),
1935                                         SourceLocation(), SourceLocation());
1936    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind,
1937                                   &CopyCtorArg, 1);
1938    BaseInit = InitSeq.Perform(SemaRef, InitEntity, InitKind,
1939                               MultiExprArg(&CopyCtorArg, 1));
1940    break;
1941  }
1942  }
1943
1944  BaseInit = SemaRef.MaybeCreateExprWithCleanups(BaseInit);
1945  if (BaseInit.isInvalid())
1946    return true;
1947
1948  CXXBaseInit =
1949    new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
1950               SemaRef.Context.getTrivialTypeSourceInfo(BaseSpec->getType(),
1951                                                        SourceLocation()),
1952                                             BaseSpec->isVirtual(),
1953                                             SourceLocation(),
1954                                             BaseInit.takeAs<Expr>(),
1955                                             SourceLocation(),
1956                                             SourceLocation());
1957
1958  return false;
1959}
1960
1961static bool RefersToRValueRef(Expr *MemRef) {
1962  ValueDecl *Referenced = cast<MemberExpr>(MemRef)->getMemberDecl();
1963  return Referenced->getType()->isRValueReferenceType();
1964}
1965
1966static bool
1967BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
1968                               ImplicitInitializerKind ImplicitInitKind,
1969                               FieldDecl *Field, IndirectFieldDecl *Indirect,
1970                               CXXCtorInitializer *&CXXMemberInit) {
1971  if (Field->isInvalidDecl())
1972    return true;
1973
1974  SourceLocation Loc = Constructor->getLocation();
1975
1976  if (ImplicitInitKind == IIK_Copy || ImplicitInitKind == IIK_Move) {
1977    bool Moving = ImplicitInitKind == IIK_Move;
1978    ParmVarDecl *Param = Constructor->getParamDecl(0);
1979    QualType ParamType = Param->getType().getNonReferenceType();
1980
1981    // Suppress copying zero-width bitfields.
1982    if (const Expr *Width = Field->getBitWidth())
1983      if (Width->EvaluateAsInt(SemaRef.Context) == 0)
1984        return false;
1985
1986    Expr *MemberExprBase =
1987      DeclRefExpr::Create(SemaRef.Context, NestedNameSpecifierLoc(), Param,
1988                          Loc, ParamType, VK_LValue, 0);
1989
1990    if (Moving) {
1991      MemberExprBase = CastForMoving(SemaRef, MemberExprBase);
1992    }
1993
1994    // Build a reference to this field within the parameter.
1995    CXXScopeSpec SS;
1996    LookupResult MemberLookup(SemaRef, Field->getDeclName(), Loc,
1997                              Sema::LookupMemberName);
1998    MemberLookup.addDecl(Indirect ? cast<ValueDecl>(Indirect)
1999                                  : cast<ValueDecl>(Field), AS_public);
2000    MemberLookup.resolveKind();
2001    ExprResult CopyCtorArg
2002      = SemaRef.BuildMemberReferenceExpr(MemberExprBase,
2003                                         ParamType, Loc,
2004                                         /*IsArrow=*/false,
2005                                         SS,
2006                                         /*FirstQualifierInScope=*/0,
2007                                         MemberLookup,
2008                                         /*TemplateArgs=*/0);
2009    if (CopyCtorArg.isInvalid())
2010      return true;
2011
2012    // C++11 [class.copy]p15:
2013    //   - if a member m has rvalue reference type T&&, it is direct-initialized
2014    //     with static_cast<T&&>(x.m);
2015    if (RefersToRValueRef(CopyCtorArg.get())) {
2016      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg.take());
2017    }
2018
2019    // When the field we are copying is an array, create index variables for
2020    // each dimension of the array. We use these index variables to subscript
2021    // the source array, and other clients (e.g., CodeGen) will perform the
2022    // necessary iteration with these index variables.
2023    SmallVector<VarDecl *, 4> IndexVariables;
2024    QualType BaseType = Field->getType();
2025    QualType SizeType = SemaRef.Context.getSizeType();
2026    bool InitializingArray = false;
2027    while (const ConstantArrayType *Array
2028                          = SemaRef.Context.getAsConstantArrayType(BaseType)) {
2029      InitializingArray = true;
2030      // Create the iteration variable for this array index.
2031      IdentifierInfo *IterationVarName = 0;
2032      {
2033        llvm::SmallString<8> Str;
2034        llvm::raw_svector_ostream OS(Str);
2035        OS << "__i" << IndexVariables.size();
2036        IterationVarName = &SemaRef.Context.Idents.get(OS.str());
2037      }
2038      VarDecl *IterationVar
2039        = VarDecl::Create(SemaRef.Context, SemaRef.CurContext, Loc, Loc,
2040                          IterationVarName, SizeType,
2041                        SemaRef.Context.getTrivialTypeSourceInfo(SizeType, Loc),
2042                          SC_None, SC_None);
2043      IndexVariables.push_back(IterationVar);
2044
2045      // Create a reference to the iteration variable.
2046      ExprResult IterationVarRef
2047        = SemaRef.BuildDeclRefExpr(IterationVar, SizeType, VK_RValue, Loc);
2048      assert(!IterationVarRef.isInvalid() &&
2049             "Reference to invented variable cannot fail!");
2050
2051      // Subscript the array with this iteration variable.
2052      CopyCtorArg = SemaRef.CreateBuiltinArraySubscriptExpr(CopyCtorArg.take(),
2053                                                            Loc,
2054                                                        IterationVarRef.take(),
2055                                                            Loc);
2056      if (CopyCtorArg.isInvalid())
2057        return true;
2058
2059      BaseType = Array->getElementType();
2060    }
2061
2062    // The array subscript expression is an lvalue, which is wrong for moving.
2063    if (Moving && InitializingArray)
2064      CopyCtorArg = CastForMoving(SemaRef, CopyCtorArg.take());
2065
2066    // Construct the entity that we will be initializing. For an array, this
2067    // will be first element in the array, which may require several levels
2068    // of array-subscript entities.
2069    SmallVector<InitializedEntity, 4> Entities;
2070    Entities.reserve(1 + IndexVariables.size());
2071    if (Indirect)
2072      Entities.push_back(InitializedEntity::InitializeMember(Indirect));
2073    else
2074      Entities.push_back(InitializedEntity::InitializeMember(Field));
2075    for (unsigned I = 0, N = IndexVariables.size(); I != N; ++I)
2076      Entities.push_back(InitializedEntity::InitializeElement(SemaRef.Context,
2077                                                              0,
2078                                                              Entities.back()));
2079
2080    // Direct-initialize to use the copy constructor.
2081    InitializationKind InitKind =
2082      InitializationKind::CreateDirect(Loc, SourceLocation(), SourceLocation());
2083
2084    Expr *CopyCtorArgE = CopyCtorArg.takeAs<Expr>();
2085    InitializationSequence InitSeq(SemaRef, Entities.back(), InitKind,
2086                                   &CopyCtorArgE, 1);
2087
2088    ExprResult MemberInit
2089      = InitSeq.Perform(SemaRef, Entities.back(), InitKind,
2090                        MultiExprArg(&CopyCtorArgE, 1));
2091    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
2092    if (MemberInit.isInvalid())
2093      return true;
2094
2095    if (Indirect) {
2096      assert(IndexVariables.size() == 0 &&
2097             "Indirect field improperly initialized");
2098      CXXMemberInit
2099        = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
2100                                                   Loc, Loc,
2101                                                   MemberInit.takeAs<Expr>(),
2102                                                   Loc);
2103    } else
2104      CXXMemberInit = CXXCtorInitializer::Create(SemaRef.Context, Field, Loc,
2105                                                 Loc, MemberInit.takeAs<Expr>(),
2106                                                 Loc,
2107                                                 IndexVariables.data(),
2108                                                 IndexVariables.size());
2109    return false;
2110  }
2111
2112  assert(ImplicitInitKind == IIK_Default && "Unhandled implicit init kind!");
2113
2114  QualType FieldBaseElementType =
2115    SemaRef.Context.getBaseElementType(Field->getType());
2116
2117  if (FieldBaseElementType->isRecordType()) {
2118    InitializedEntity InitEntity
2119      = Indirect? InitializedEntity::InitializeMember(Indirect)
2120                : InitializedEntity::InitializeMember(Field);
2121    InitializationKind InitKind =
2122      InitializationKind::CreateDefault(Loc);
2123
2124    InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
2125    ExprResult MemberInit =
2126      InitSeq.Perform(SemaRef, InitEntity, InitKind, MultiExprArg());
2127
2128    MemberInit = SemaRef.MaybeCreateExprWithCleanups(MemberInit);
2129    if (MemberInit.isInvalid())
2130      return true;
2131
2132    if (Indirect)
2133      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2134                                                               Indirect, Loc,
2135                                                               Loc,
2136                                                               MemberInit.get(),
2137                                                               Loc);
2138    else
2139      CXXMemberInit = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context,
2140                                                               Field, Loc, Loc,
2141                                                               MemberInit.get(),
2142                                                               Loc);
2143    return false;
2144  }
2145
2146  if (!Field->getParent()->isUnion()) {
2147    if (FieldBaseElementType->isReferenceType()) {
2148      SemaRef.Diag(Constructor->getLocation(),
2149                   diag::err_uninitialized_member_in_ctor)
2150      << (int)Constructor->isImplicit()
2151      << SemaRef.Context.getTagDeclType(Constructor->getParent())
2152      << 0 << Field->getDeclName();
2153      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
2154      return true;
2155    }
2156
2157    if (FieldBaseElementType.isConstQualified()) {
2158      SemaRef.Diag(Constructor->getLocation(),
2159                   diag::err_uninitialized_member_in_ctor)
2160      << (int)Constructor->isImplicit()
2161      << SemaRef.Context.getTagDeclType(Constructor->getParent())
2162      << 1 << Field->getDeclName();
2163      SemaRef.Diag(Field->getLocation(), diag::note_declared_at);
2164      return true;
2165    }
2166  }
2167
2168  if (SemaRef.getLangOptions().ObjCAutoRefCount &&
2169      FieldBaseElementType->isObjCRetainableType() &&
2170      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_None &&
2171      FieldBaseElementType.getObjCLifetime() != Qualifiers::OCL_ExplicitNone) {
2172    // Instant objects:
2173    //   Default-initialize Objective-C pointers to NULL.
2174    CXXMemberInit
2175      = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
2176                                                 Loc, Loc,
2177                 new (SemaRef.Context) ImplicitValueInitExpr(Field->getType()),
2178                                                 Loc);
2179    return false;
2180  }
2181
2182  // Nothing to initialize.
2183  CXXMemberInit = 0;
2184  return false;
2185}
2186
2187namespace {
2188struct BaseAndFieldInfo {
2189  Sema &S;
2190  CXXConstructorDecl *Ctor;
2191  bool AnyErrorsInInits;
2192  ImplicitInitializerKind IIK;
2193  llvm::DenseMap<const void *, CXXCtorInitializer*> AllBaseFields;
2194  SmallVector<CXXCtorInitializer*, 8> AllToInit;
2195
2196  BaseAndFieldInfo(Sema &S, CXXConstructorDecl *Ctor, bool ErrorsInInits)
2197    : S(S), Ctor(Ctor), AnyErrorsInInits(ErrorsInInits) {
2198    bool Generated = Ctor->isImplicit() || Ctor->isDefaulted();
2199    if (Generated && Ctor->isCopyConstructor())
2200      IIK = IIK_Copy;
2201    else if (Generated && Ctor->isMoveConstructor())
2202      IIK = IIK_Move;
2203    else
2204      IIK = IIK_Default;
2205  }
2206};
2207}
2208
2209static bool CollectFieldInitializer(Sema &SemaRef, BaseAndFieldInfo &Info,
2210                                    FieldDecl *Field,
2211                                    IndirectFieldDecl *Indirect = 0) {
2212
2213  // Overwhelmingly common case: we have a direct initializer for this field.
2214  if (CXXCtorInitializer *Init = Info.AllBaseFields.lookup(Field)) {
2215    Info.AllToInit.push_back(Init);
2216    return false;
2217  }
2218
2219  // C++0x [class.base.init]p8: if the entity is a non-static data member that
2220  // has a brace-or-equal-initializer, the entity is initialized as specified
2221  // in [dcl.init].
2222  if (Field->hasInClassInitializer()) {
2223    CXXCtorInitializer *Init;
2224    if (Indirect)
2225      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Indirect,
2226                                                      SourceLocation(),
2227                                                      SourceLocation(), 0,
2228                                                      SourceLocation());
2229    else
2230      Init = new (SemaRef.Context) CXXCtorInitializer(SemaRef.Context, Field,
2231                                                      SourceLocation(),
2232                                                      SourceLocation(), 0,
2233                                                      SourceLocation());
2234    Info.AllToInit.push_back(Init);
2235    return false;
2236  }
2237
2238  // Don't try to build an implicit initializer if there were semantic
2239  // errors in any of the initializers (and therefore we might be
2240  // missing some that the user actually wrote).
2241  if (Info.AnyErrorsInInits || Field->isInvalidDecl())
2242    return false;
2243
2244  CXXCtorInitializer *Init = 0;
2245  if (BuildImplicitMemberInitializer(Info.S, Info.Ctor, Info.IIK, Field,
2246                                     Indirect, Init))
2247    return true;
2248
2249  if (Init)
2250    Info.AllToInit.push_back(Init);
2251
2252  return false;
2253}
2254
2255bool
2256Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor,
2257                               CXXCtorInitializer *Initializer) {
2258  assert(Initializer->isDelegatingInitializer());
2259  Constructor->setNumCtorInitializers(1);
2260  CXXCtorInitializer **initializer =
2261    new (Context) CXXCtorInitializer*[1];
2262  memcpy(initializer, &Initializer, sizeof (CXXCtorInitializer*));
2263  Constructor->setCtorInitializers(initializer);
2264
2265  if (CXXDestructorDecl *Dtor = LookupDestructor(Constructor->getParent())) {
2266    MarkDeclarationReferenced(Initializer->getSourceLocation(), Dtor);
2267    DiagnoseUseOfDecl(Dtor, Initializer->getSourceLocation());
2268  }
2269
2270  DelegatingCtorDecls.push_back(Constructor);
2271
2272  return false;
2273}
2274
2275/// \brief Determine whether the given indirect field declaration is somewhere
2276/// within an anonymous union.
2277static bool isWithinAnonymousUnion(IndirectFieldDecl *F) {
2278  for (IndirectFieldDecl::chain_iterator C = F->chain_begin(),
2279                                      CEnd = F->chain_end();
2280       C != CEnd; ++C)
2281    if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>((*C)->getDeclContext()))
2282      if (Record->isUnion())
2283        return true;
2284
2285  return false;
2286}
2287
2288bool Sema::SetCtorInitializers(CXXConstructorDecl *Constructor,
2289                               CXXCtorInitializer **Initializers,
2290                               unsigned NumInitializers,
2291                               bool AnyErrors) {
2292  if (Constructor->getDeclContext()->isDependentContext()) {
2293    // Just store the initializers as written, they will be checked during
2294    // instantiation.
2295    if (NumInitializers > 0) {
2296      Constructor->setNumCtorInitializers(NumInitializers);
2297      CXXCtorInitializer **baseOrMemberInitializers =
2298        new (Context) CXXCtorInitializer*[NumInitializers];
2299      memcpy(baseOrMemberInitializers, Initializers,
2300             NumInitializers * sizeof(CXXCtorInitializer*));
2301      Constructor->setCtorInitializers(baseOrMemberInitializers);
2302    }
2303
2304    return false;
2305  }
2306
2307  BaseAndFieldInfo Info(*this, Constructor, AnyErrors);
2308
2309  // We need to build the initializer AST according to order of construction
2310  // and not what user specified in the Initializers list.
2311  CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
2312  if (!ClassDecl)
2313    return true;
2314
2315  bool HadError = false;
2316
2317  for (unsigned i = 0; i < NumInitializers; i++) {
2318    CXXCtorInitializer *Member = Initializers[i];
2319
2320    if (Member->isBaseInitializer())
2321      Info.AllBaseFields[Member->getBaseClass()->getAs<RecordType>()] = Member;
2322    else
2323      Info.AllBaseFields[Member->getAnyMember()] = Member;
2324  }
2325
2326  // Keep track of the direct virtual bases.
2327  llvm::SmallPtrSet<CXXBaseSpecifier *, 16> DirectVBases;
2328  for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
2329       E = ClassDecl->bases_end(); I != E; ++I) {
2330    if (I->isVirtual())
2331      DirectVBases.insert(I);
2332  }
2333
2334  // Push virtual bases before others.
2335  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
2336       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
2337
2338    if (CXXCtorInitializer *Value
2339        = Info.AllBaseFields.lookup(VBase->getType()->getAs<RecordType>())) {
2340      Info.AllToInit.push_back(Value);
2341    } else if (!AnyErrors) {
2342      bool IsInheritedVirtualBase = !DirectVBases.count(VBase);
2343      CXXCtorInitializer *CXXBaseInit;
2344      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
2345                                       VBase, IsInheritedVirtualBase,
2346                                       CXXBaseInit)) {
2347        HadError = true;
2348        continue;
2349      }
2350
2351      Info.AllToInit.push_back(CXXBaseInit);
2352    }
2353  }
2354
2355  // Non-virtual bases.
2356  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2357       E = ClassDecl->bases_end(); Base != E; ++Base) {
2358    // Virtuals are in the virtual base list and already constructed.
2359    if (Base->isVirtual())
2360      continue;
2361
2362    if (CXXCtorInitializer *Value
2363          = Info.AllBaseFields.lookup(Base->getType()->getAs<RecordType>())) {
2364      Info.AllToInit.push_back(Value);
2365    } else if (!AnyErrors) {
2366      CXXCtorInitializer *CXXBaseInit;
2367      if (BuildImplicitBaseInitializer(*this, Constructor, Info.IIK,
2368                                       Base, /*IsInheritedVirtualBase=*/false,
2369                                       CXXBaseInit)) {
2370        HadError = true;
2371        continue;
2372      }
2373
2374      Info.AllToInit.push_back(CXXBaseInit);
2375    }
2376  }
2377
2378  // Fields.
2379  for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
2380                               MemEnd = ClassDecl->decls_end();
2381       Mem != MemEnd; ++Mem) {
2382    if (FieldDecl *F = dyn_cast<FieldDecl>(*Mem)) {
2383      if (F->getType()->isIncompleteArrayType()) {
2384        assert(ClassDecl->hasFlexibleArrayMember() &&
2385               "Incomplete array type is not valid");
2386        continue;
2387      }
2388
2389      // If we're not generating the implicit copy/move constructor, then we'll
2390      // handle anonymous struct/union fields based on their individual
2391      // indirect fields.
2392      if (F->isAnonymousStructOrUnion() && Info.IIK == IIK_Default)
2393        continue;
2394
2395      if (CollectFieldInitializer(*this, Info, F))
2396        HadError = true;
2397      continue;
2398    }
2399
2400    // Beyond this point, we only consider default initialization.
2401    if (Info.IIK != IIK_Default)
2402      continue;
2403
2404    if (IndirectFieldDecl *F = dyn_cast<IndirectFieldDecl>(*Mem)) {
2405      if (F->getType()->isIncompleteArrayType()) {
2406        assert(ClassDecl->hasFlexibleArrayMember() &&
2407               "Incomplete array type is not valid");
2408        continue;
2409      }
2410
2411      // If this field is somewhere within an anonymous union, we only
2412      // initialize it if there's an explicit initializer.
2413      if (isWithinAnonymousUnion(F)) {
2414        if (CXXCtorInitializer *Init
2415              = Info.AllBaseFields.lookup(F->getAnonField())) {
2416          Info.AllToInit.push_back(Init);
2417        }
2418
2419        continue;
2420      }
2421
2422      // Initialize each field of an anonymous struct individually.
2423      if (CollectFieldInitializer(*this, Info, F->getAnonField(), F))
2424        HadError = true;
2425
2426      continue;
2427    }
2428  }
2429
2430  NumInitializers = Info.AllToInit.size();
2431  if (NumInitializers > 0) {
2432    Constructor->setNumCtorInitializers(NumInitializers);
2433    CXXCtorInitializer **baseOrMemberInitializers =
2434      new (Context) CXXCtorInitializer*[NumInitializers];
2435    memcpy(baseOrMemberInitializers, Info.AllToInit.data(),
2436           NumInitializers * sizeof(CXXCtorInitializer*));
2437    Constructor->setCtorInitializers(baseOrMemberInitializers);
2438
2439    // Constructors implicitly reference the base and member
2440    // destructors.
2441    MarkBaseAndMemberDestructorsReferenced(Constructor->getLocation(),
2442                                           Constructor->getParent());
2443  }
2444
2445  return HadError;
2446}
2447
2448static void *GetKeyForTopLevelField(FieldDecl *Field) {
2449  // For anonymous unions, use the class declaration as the key.
2450  if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
2451    if (RT->getDecl()->isAnonymousStructOrUnion())
2452      return static_cast<void *>(RT->getDecl());
2453  }
2454  return static_cast<void *>(Field);
2455}
2456
2457static void *GetKeyForBase(ASTContext &Context, QualType BaseType) {
2458  return const_cast<Type*>(Context.getCanonicalType(BaseType).getTypePtr());
2459}
2460
2461static void *GetKeyForMember(ASTContext &Context,
2462                             CXXCtorInitializer *Member) {
2463  if (!Member->isAnyMemberInitializer())
2464    return GetKeyForBase(Context, QualType(Member->getBaseClass(), 0));
2465
2466  // For fields injected into the class via declaration of an anonymous union,
2467  // use its anonymous union class declaration as the unique key.
2468  FieldDecl *Field = Member->getAnyMember();
2469
2470  // If the field is a member of an anonymous struct or union, our key
2471  // is the anonymous record decl that's a direct child of the class.
2472  RecordDecl *RD = Field->getParent();
2473  if (RD->isAnonymousStructOrUnion()) {
2474    while (true) {
2475      RecordDecl *Parent = cast<RecordDecl>(RD->getDeclContext());
2476      if (Parent->isAnonymousStructOrUnion())
2477        RD = Parent;
2478      else
2479        break;
2480    }
2481
2482    return static_cast<void *>(RD);
2483  }
2484
2485  return static_cast<void *>(Field);
2486}
2487
2488static void
2489DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef,
2490                                  const CXXConstructorDecl *Constructor,
2491                                  CXXCtorInitializer **Inits,
2492                                  unsigned NumInits) {
2493  if (Constructor->getDeclContext()->isDependentContext())
2494    return;
2495
2496  // Don't check initializers order unless the warning is enabled at the
2497  // location of at least one initializer.
2498  bool ShouldCheckOrder = false;
2499  for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
2500    CXXCtorInitializer *Init = Inits[InitIndex];
2501    if (SemaRef.Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
2502                                         Init->getSourceLocation())
2503          != Diagnostic::Ignored) {
2504      ShouldCheckOrder = true;
2505      break;
2506    }
2507  }
2508  if (!ShouldCheckOrder)
2509    return;
2510
2511  // Build the list of bases and members in the order that they'll
2512  // actually be initialized.  The explicit initializers should be in
2513  // this same order but may be missing things.
2514  SmallVector<const void*, 32> IdealInitKeys;
2515
2516  const CXXRecordDecl *ClassDecl = Constructor->getParent();
2517
2518  // 1. Virtual bases.
2519  for (CXXRecordDecl::base_class_const_iterator VBase =
2520       ClassDecl->vbases_begin(),
2521       E = ClassDecl->vbases_end(); VBase != E; ++VBase)
2522    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, VBase->getType()));
2523
2524  // 2. Non-virtual bases.
2525  for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
2526       E = ClassDecl->bases_end(); Base != E; ++Base) {
2527    if (Base->isVirtual())
2528      continue;
2529    IdealInitKeys.push_back(GetKeyForBase(SemaRef.Context, Base->getType()));
2530  }
2531
2532  // 3. Direct fields.
2533  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
2534       E = ClassDecl->field_end(); Field != E; ++Field)
2535    IdealInitKeys.push_back(GetKeyForTopLevelField(*Field));
2536
2537  unsigned NumIdealInits = IdealInitKeys.size();
2538  unsigned IdealIndex = 0;
2539
2540  CXXCtorInitializer *PrevInit = 0;
2541  for (unsigned InitIndex = 0; InitIndex != NumInits; ++InitIndex) {
2542    CXXCtorInitializer *Init = Inits[InitIndex];
2543    void *InitKey = GetKeyForMember(SemaRef.Context, Init);
2544
2545    // Scan forward to try to find this initializer in the idealized
2546    // initializers list.
2547    for (; IdealIndex != NumIdealInits; ++IdealIndex)
2548      if (InitKey == IdealInitKeys[IdealIndex])
2549        break;
2550
2551    // If we didn't find this initializer, it must be because we
2552    // scanned past it on a previous iteration.  That can only
2553    // happen if we're out of order;  emit a warning.
2554    if (IdealIndex == NumIdealInits && PrevInit) {
2555      Sema::SemaDiagnosticBuilder D =
2556        SemaRef.Diag(PrevInit->getSourceLocation(),
2557                     diag::warn_initializer_out_of_order);
2558
2559      if (PrevInit->isAnyMemberInitializer())
2560        D << 0 << PrevInit->getAnyMember()->getDeclName();
2561      else
2562        D << 1 << PrevInit->getBaseClassInfo()->getType();
2563
2564      if (Init->isAnyMemberInitializer())
2565        D << 0 << Init->getAnyMember()->getDeclName();
2566      else
2567        D << 1 << Init->getBaseClassInfo()->getType();
2568
2569      // Move back to the initializer's location in the ideal list.
2570      for (IdealIndex = 0; IdealIndex != NumIdealInits; ++IdealIndex)
2571        if (InitKey == IdealInitKeys[IdealIndex])
2572          break;
2573
2574      assert(IdealIndex != NumIdealInits &&
2575             "initializer not found in initializer list");
2576    }
2577
2578    PrevInit = Init;
2579  }
2580}
2581
2582namespace {
2583bool CheckRedundantInit(Sema &S,
2584                        CXXCtorInitializer *Init,
2585                        CXXCtorInitializer *&PrevInit) {
2586  if (!PrevInit) {
2587    PrevInit = Init;
2588    return false;
2589  }
2590
2591  if (FieldDecl *Field = Init->getMember())
2592    S.Diag(Init->getSourceLocation(),
2593           diag::err_multiple_mem_initialization)
2594      << Field->getDeclName()
2595      << Init->getSourceRange();
2596  else {
2597    const Type *BaseClass = Init->getBaseClass();
2598    assert(BaseClass && "neither field nor base");
2599    S.Diag(Init->getSourceLocation(),
2600           diag::err_multiple_base_initialization)
2601      << QualType(BaseClass, 0)
2602      << Init->getSourceRange();
2603  }
2604  S.Diag(PrevInit->getSourceLocation(), diag::note_previous_initializer)
2605    << 0 << PrevInit->getSourceRange();
2606
2607  return true;
2608}
2609
2610typedef std::pair<NamedDecl *, CXXCtorInitializer *> UnionEntry;
2611typedef llvm::DenseMap<RecordDecl*, UnionEntry> RedundantUnionMap;
2612
2613bool CheckRedundantUnionInit(Sema &S,
2614                             CXXCtorInitializer *Init,
2615                             RedundantUnionMap &Unions) {
2616  FieldDecl *Field = Init->getAnyMember();
2617  RecordDecl *Parent = Field->getParent();
2618  if (!Parent->isAnonymousStructOrUnion())
2619    return false;
2620
2621  NamedDecl *Child = Field;
2622  do {
2623    if (Parent->isUnion()) {
2624      UnionEntry &En = Unions[Parent];
2625      if (En.first && En.first != Child) {
2626        S.Diag(Init->getSourceLocation(),
2627               diag::err_multiple_mem_union_initialization)
2628          << Field->getDeclName()
2629          << Init->getSourceRange();
2630        S.Diag(En.second->getSourceLocation(), diag::note_previous_initializer)
2631          << 0 << En.second->getSourceRange();
2632        return true;
2633      } else if (!En.first) {
2634        En.first = Child;
2635        En.second = Init;
2636      }
2637    }
2638
2639    Child = Parent;
2640    Parent = cast<RecordDecl>(Parent->getDeclContext());
2641  } while (Parent->isAnonymousStructOrUnion());
2642
2643  return false;
2644}
2645}
2646
2647/// ActOnMemInitializers - Handle the member initializers for a constructor.
2648void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
2649                                SourceLocation ColonLoc,
2650                                MemInitTy **meminits, unsigned NumMemInits,
2651                                bool AnyErrors) {
2652  if (!ConstructorDecl)
2653    return;
2654
2655  AdjustDeclIfTemplate(ConstructorDecl);
2656
2657  CXXConstructorDecl *Constructor
2658    = dyn_cast<CXXConstructorDecl>(ConstructorDecl);
2659
2660  if (!Constructor) {
2661    Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
2662    return;
2663  }
2664
2665  CXXCtorInitializer **MemInits =
2666    reinterpret_cast<CXXCtorInitializer **>(meminits);
2667
2668  // Mapping for the duplicate initializers check.
2669  // For member initializers, this is keyed with a FieldDecl*.
2670  // For base initializers, this is keyed with a Type*.
2671  llvm::DenseMap<void*, CXXCtorInitializer *> Members;
2672
2673  // Mapping for the inconsistent anonymous-union initializers check.
2674  RedundantUnionMap MemberUnions;
2675
2676  bool HadError = false;
2677  for (unsigned i = 0; i < NumMemInits; i++) {
2678    CXXCtorInitializer *Init = MemInits[i];
2679
2680    // Set the source order index.
2681    Init->setSourceOrder(i);
2682
2683    if (Init->isAnyMemberInitializer()) {
2684      FieldDecl *Field = Init->getAnyMember();
2685      if (CheckRedundantInit(*this, Init, Members[Field]) ||
2686          CheckRedundantUnionInit(*this, Init, MemberUnions))
2687        HadError = true;
2688    } else if (Init->isBaseInitializer()) {
2689      void *Key = GetKeyForBase(Context, QualType(Init->getBaseClass(), 0));
2690      if (CheckRedundantInit(*this, Init, Members[Key]))
2691        HadError = true;
2692    } else {
2693      assert(Init->isDelegatingInitializer());
2694      // This must be the only initializer
2695      if (i != 0 || NumMemInits > 1) {
2696        Diag(MemInits[0]->getSourceLocation(),
2697             diag::err_delegating_initializer_alone)
2698          << MemInits[0]->getSourceRange();
2699        HadError = true;
2700        // We will treat this as being the only initializer.
2701      }
2702      SetDelegatingInitializer(Constructor, MemInits[i]);
2703      // Return immediately as the initializer is set.
2704      return;
2705    }
2706  }
2707
2708  if (HadError)
2709    return;
2710
2711  DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
2712
2713  SetCtorInitializers(Constructor, MemInits, NumMemInits, AnyErrors);
2714}
2715
2716void
2717Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,
2718                                             CXXRecordDecl *ClassDecl) {
2719  // Ignore dependent contexts.
2720  if (ClassDecl->isDependentContext())
2721    return;
2722
2723  // FIXME: all the access-control diagnostics are positioned on the
2724  // field/base declaration.  That's probably good; that said, the
2725  // user might reasonably want to know why the destructor is being
2726  // emitted, and we currently don't say.
2727
2728  // Non-static data members.
2729  for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
2730       E = ClassDecl->field_end(); I != E; ++I) {
2731    FieldDecl *Field = *I;
2732    if (Field->isInvalidDecl())
2733      continue;
2734    QualType FieldType = Context.getBaseElementType(Field->getType());
2735
2736    const RecordType* RT = FieldType->getAs<RecordType>();
2737    if (!RT)
2738      continue;
2739
2740    CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
2741    if (FieldClassDecl->isInvalidDecl())
2742      continue;
2743    if (FieldClassDecl->hasTrivialDestructor())
2744      continue;
2745
2746    CXXDestructorDecl *Dtor = LookupDestructor(FieldClassDecl);
2747    assert(Dtor && "No dtor found for FieldClassDecl!");
2748    CheckDestructorAccess(Field->getLocation(), Dtor,
2749                          PDiag(diag::err_access_dtor_field)
2750                            << Field->getDeclName()
2751                            << FieldType);
2752
2753    MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
2754  }
2755
2756  llvm::SmallPtrSet<const RecordType *, 8> DirectVirtualBases;
2757
2758  // Bases.
2759  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2760       E = ClassDecl->bases_end(); Base != E; ++Base) {
2761    // Bases are always records in a well-formed non-dependent class.
2762    const RecordType *RT = Base->getType()->getAs<RecordType>();
2763
2764    // Remember direct virtual bases.
2765    if (Base->isVirtual())
2766      DirectVirtualBases.insert(RT);
2767
2768    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
2769    // If our base class is invalid, we probably can't get its dtor anyway.
2770    if (BaseClassDecl->isInvalidDecl())
2771      continue;
2772    // Ignore trivial destructors.
2773    if (BaseClassDecl->hasTrivialDestructor())
2774      continue;
2775
2776    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
2777    assert(Dtor && "No dtor found for BaseClassDecl!");
2778
2779    // FIXME: caret should be on the start of the class name
2780    CheckDestructorAccess(Base->getSourceRange().getBegin(), Dtor,
2781                          PDiag(diag::err_access_dtor_base)
2782                            << Base->getType()
2783                            << Base->getSourceRange());
2784
2785    MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
2786  }
2787
2788  // Virtual bases.
2789  for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
2790       E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
2791
2792    // Bases are always records in a well-formed non-dependent class.
2793    const RecordType *RT = VBase->getType()->getAs<RecordType>();
2794
2795    // Ignore direct virtual bases.
2796    if (DirectVirtualBases.count(RT))
2797      continue;
2798
2799    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(RT->getDecl());
2800    // If our base class is invalid, we probably can't get its dtor anyway.
2801    if (BaseClassDecl->isInvalidDecl())
2802      continue;
2803    // Ignore trivial destructors.
2804    if (BaseClassDecl->hasTrivialDestructor())
2805      continue;
2806
2807    CXXDestructorDecl *Dtor = LookupDestructor(BaseClassDecl);
2808    assert(Dtor && "No dtor found for BaseClassDecl!");
2809    CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
2810                          PDiag(diag::err_access_dtor_vbase)
2811                            << VBase->getType());
2812
2813    MarkDeclarationReferenced(Location, const_cast<CXXDestructorDecl*>(Dtor));
2814  }
2815}
2816
2817void Sema::ActOnDefaultCtorInitializers(Decl *CDtorDecl) {
2818  if (!CDtorDecl)
2819    return;
2820
2821  if (CXXConstructorDecl *Constructor
2822      = dyn_cast<CXXConstructorDecl>(CDtorDecl))
2823    SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false);
2824}
2825
2826bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
2827                                  unsigned DiagID, AbstractDiagSelID SelID) {
2828  if (SelID == -1)
2829    return RequireNonAbstractType(Loc, T, PDiag(DiagID));
2830  else
2831    return RequireNonAbstractType(Loc, T, PDiag(DiagID) << SelID);
2832}
2833
2834bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
2835                                  const PartialDiagnostic &PD) {
2836  if (!getLangOptions().CPlusPlus)
2837    return false;
2838
2839  if (const ArrayType *AT = Context.getAsArrayType(T))
2840    return RequireNonAbstractType(Loc, AT->getElementType(), PD);
2841
2842  if (const PointerType *PT = T->getAs<PointerType>()) {
2843    // Find the innermost pointer type.
2844    while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
2845      PT = T;
2846
2847    if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
2848      return RequireNonAbstractType(Loc, AT->getElementType(), PD);
2849  }
2850
2851  const RecordType *RT = T->getAs<RecordType>();
2852  if (!RT)
2853    return false;
2854
2855  const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
2856
2857  // We can't answer whether something is abstract until it has a
2858  // definition.  If it's currently being defined, we'll walk back
2859  // over all the declarations when we have a full definition.
2860  const CXXRecordDecl *Def = RD->getDefinition();
2861  if (!Def || Def->isBeingDefined())
2862    return false;
2863
2864  if (!RD->isAbstract())
2865    return false;
2866
2867  Diag(Loc, PD) << RD->getDeclName();
2868  DiagnoseAbstractType(RD);
2869
2870  return true;
2871}
2872
2873void Sema::DiagnoseAbstractType(const CXXRecordDecl *RD) {
2874  // Check if we've already emitted the list of pure virtual functions
2875  // for this class.
2876  if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
2877    return;
2878
2879  CXXFinalOverriderMap FinalOverriders;
2880  RD->getFinalOverriders(FinalOverriders);
2881
2882  // Keep a set of seen pure methods so we won't diagnose the same method
2883  // more than once.
2884  llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods;
2885
2886  for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),
2887                                   MEnd = FinalOverriders.end();
2888       M != MEnd;
2889       ++M) {
2890    for (OverridingMethods::iterator SO = M->second.begin(),
2891                                  SOEnd = M->second.end();
2892         SO != SOEnd; ++SO) {
2893      // C++ [class.abstract]p4:
2894      //   A class is abstract if it contains or inherits at least one
2895      //   pure virtual function for which the final overrider is pure
2896      //   virtual.
2897
2898      //
2899      if (SO->second.size() != 1)
2900        continue;
2901
2902      if (!SO->second.front().Method->isPure())
2903        continue;
2904
2905      if (!SeenPureMethods.insert(SO->second.front().Method))
2906        continue;
2907
2908      Diag(SO->second.front().Method->getLocation(),
2909           diag::note_pure_virtual_function)
2910        << SO->second.front().Method->getDeclName() << RD->getDeclName();
2911    }
2912  }
2913
2914  if (!PureVirtualClassDiagSet)
2915    PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
2916  PureVirtualClassDiagSet->insert(RD);
2917}
2918
2919namespace {
2920struct AbstractUsageInfo {
2921  Sema &S;
2922  CXXRecordDecl *Record;
2923  CanQualType AbstractType;
2924  bool Invalid;
2925
2926  AbstractUsageInfo(Sema &S, CXXRecordDecl *Record)
2927    : S(S), Record(Record),
2928      AbstractType(S.Context.getCanonicalType(
2929                   S.Context.getTypeDeclType(Record))),
2930      Invalid(false) {}
2931
2932  void DiagnoseAbstractType() {
2933    if (Invalid) return;
2934    S.DiagnoseAbstractType(Record);
2935    Invalid = true;
2936  }
2937
2938  void CheckType(const NamedDecl *D, TypeLoc TL, Sema::AbstractDiagSelID Sel);
2939};
2940
2941struct CheckAbstractUsage {
2942  AbstractUsageInfo &Info;
2943  const NamedDecl *Ctx;
2944
2945  CheckAbstractUsage(AbstractUsageInfo &Info, const NamedDecl *Ctx)
2946    : Info(Info), Ctx(Ctx) {}
2947
2948  void Visit(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
2949    switch (TL.getTypeLocClass()) {
2950#define ABSTRACT_TYPELOC(CLASS, PARENT)
2951#define TYPELOC(CLASS, PARENT) \
2952    case TypeLoc::CLASS: Check(cast<CLASS##TypeLoc>(TL), Sel); break;
2953#include "clang/AST/TypeLocNodes.def"
2954    }
2955  }
2956
2957  void Check(FunctionProtoTypeLoc TL, Sema::AbstractDiagSelID Sel) {
2958    Visit(TL.getResultLoc(), Sema::AbstractReturnType);
2959    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
2960      if (!TL.getArg(I))
2961        continue;
2962
2963      TypeSourceInfo *TSI = TL.getArg(I)->getTypeSourceInfo();
2964      if (TSI) Visit(TSI->getTypeLoc(), Sema::AbstractParamType);
2965    }
2966  }
2967
2968  void Check(ArrayTypeLoc TL, Sema::AbstractDiagSelID Sel) {
2969    Visit(TL.getElementLoc(), Sema::AbstractArrayType);
2970  }
2971
2972  void Check(TemplateSpecializationTypeLoc TL, Sema::AbstractDiagSelID Sel) {
2973    // Visit the type parameters from a permissive context.
2974    for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
2975      TemplateArgumentLoc TAL = TL.getArgLoc(I);
2976      if (TAL.getArgument().getKind() == TemplateArgument::Type)
2977        if (TypeSourceInfo *TSI = TAL.getTypeSourceInfo())
2978          Visit(TSI->getTypeLoc(), Sema::AbstractNone);
2979      // TODO: other template argument types?
2980    }
2981  }
2982
2983  // Visit pointee types from a permissive context.
2984#define CheckPolymorphic(Type) \
2985  void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
2986    Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
2987  }
2988  CheckPolymorphic(PointerTypeLoc)
2989  CheckPolymorphic(ReferenceTypeLoc)
2990  CheckPolymorphic(MemberPointerTypeLoc)
2991  CheckPolymorphic(BlockPointerTypeLoc)
2992
2993  /// Handle all the types we haven't given a more specific
2994  /// implementation for above.
2995  void Check(TypeLoc TL, Sema::AbstractDiagSelID Sel) {
2996    // Every other kind of type that we haven't called out already
2997    // that has an inner type is either (1) sugar or (2) contains that
2998    // inner type in some way as a subobject.
2999    if (TypeLoc Next = TL.getNextTypeLoc())
3000      return Visit(Next, Sel);
3001
3002    // If there's no inner type and we're in a permissive context,
3003    // don't diagnose.
3004    if (Sel == Sema::AbstractNone) return;
3005
3006    // Check whether the type matches the abstract type.
3007    QualType T = TL.getType();
3008    if (T->isArrayType()) {
3009      Sel = Sema::AbstractArrayType;
3010      T = Info.S.Context.getBaseElementType(T);
3011    }
3012    CanQualType CT = T->getCanonicalTypeUnqualified().getUnqualifiedType();
3013    if (CT != Info.AbstractType) return;
3014
3015    // It matched; do some magic.
3016    if (Sel == Sema::AbstractArrayType) {
3017      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type)
3018        << T << TL.getSourceRange();
3019    } else {
3020      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl)
3021        << Sel << T << TL.getSourceRange();
3022    }
3023    Info.DiagnoseAbstractType();
3024  }
3025};
3026
3027void AbstractUsageInfo::CheckType(const NamedDecl *D, TypeLoc TL,
3028                                  Sema::AbstractDiagSelID Sel) {
3029  CheckAbstractUsage(*this, D).Visit(TL, Sel);
3030}
3031
3032}
3033
3034/// Check for invalid uses of an abstract type in a method declaration.
3035static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
3036                                    CXXMethodDecl *MD) {
3037  // No need to do the check on definitions, which require that
3038  // the return/param types be complete.
3039  if (MD->doesThisDeclarationHaveABody())
3040    return;
3041
3042  // For safety's sake, just ignore it if we don't have type source
3043  // information.  This should never happen for non-implicit methods,
3044  // but...
3045  if (TypeSourceInfo *TSI = MD->getTypeSourceInfo())
3046    Info.CheckType(MD, TSI->getTypeLoc(), Sema::AbstractNone);
3047}
3048
3049/// Check for invalid uses of an abstract type within a class definition.
3050static void CheckAbstractClassUsage(AbstractUsageInfo &Info,
3051                                    CXXRecordDecl *RD) {
3052  for (CXXRecordDecl::decl_iterator
3053         I = RD->decls_begin(), E = RD->decls_end(); I != E; ++I) {
3054    Decl *D = *I;
3055    if (D->isImplicit()) continue;
3056
3057    // Methods and method templates.
3058    if (isa<CXXMethodDecl>(D)) {
3059      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(D));
3060    } else if (isa<FunctionTemplateDecl>(D)) {
3061      FunctionDecl *FD = cast<FunctionTemplateDecl>(D)->getTemplatedDecl();
3062      CheckAbstractClassUsage(Info, cast<CXXMethodDecl>(FD));
3063
3064    // Fields and static variables.
3065    } else if (isa<FieldDecl>(D)) {
3066      FieldDecl *FD = cast<FieldDecl>(D);
3067      if (TypeSourceInfo *TSI = FD->getTypeSourceInfo())
3068        Info.CheckType(FD, TSI->getTypeLoc(), Sema::AbstractFieldType);
3069    } else if (isa<VarDecl>(D)) {
3070      VarDecl *VD = cast<VarDecl>(D);
3071      if (TypeSourceInfo *TSI = VD->getTypeSourceInfo())
3072        Info.CheckType(VD, TSI->getTypeLoc(), Sema::AbstractVariableType);
3073
3074    // Nested classes and class templates.
3075    } else if (isa<CXXRecordDecl>(D)) {
3076      CheckAbstractClassUsage(Info, cast<CXXRecordDecl>(D));
3077    } else if (isa<ClassTemplateDecl>(D)) {
3078      CheckAbstractClassUsage(Info,
3079                             cast<ClassTemplateDecl>(D)->getTemplatedDecl());
3080    }
3081  }
3082}
3083
3084/// \brief Perform semantic checks on a class definition that has been
3085/// completing, introducing implicitly-declared members, checking for
3086/// abstract types, etc.
3087void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
3088  if (!Record)
3089    return;
3090
3091  if (Record->isAbstract() && !Record->isInvalidDecl()) {
3092    AbstractUsageInfo Info(*this, Record);
3093    CheckAbstractClassUsage(Info, Record);
3094  }
3095
3096  // If this is not an aggregate type and has no user-declared constructor,
3097  // complain about any non-static data members of reference or const scalar
3098  // type, since they will never get initializers.
3099  if (!Record->isInvalidDecl() && !Record->isDependentType() &&
3100      !Record->isAggregate() && !Record->hasUserDeclaredConstructor()) {
3101    bool Complained = false;
3102    for (RecordDecl::field_iterator F = Record->field_begin(),
3103                                 FEnd = Record->field_end();
3104         F != FEnd; ++F) {
3105      if (F->hasInClassInitializer())
3106        continue;
3107
3108      if (F->getType()->isReferenceType() ||
3109          (F->getType().isConstQualified() && F->getType()->isScalarType())) {
3110        if (!Complained) {
3111          Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst)
3112            << Record->getTagKind() << Record;
3113          Complained = true;
3114        }
3115
3116        Diag(F->getLocation(), diag::note_refconst_member_not_initialized)
3117          << F->getType()->isReferenceType()
3118          << F->getDeclName();
3119      }
3120    }
3121  }
3122
3123  if (Record->isDynamicClass() && !Record->isDependentType())
3124    DynamicClasses.push_back(Record);
3125
3126  if (Record->getIdentifier()) {
3127    // C++ [class.mem]p13:
3128    //   If T is the name of a class, then each of the following shall have a
3129    //   name different from T:
3130    //     - every member of every anonymous union that is a member of class T.
3131    //
3132    // C++ [class.mem]p14:
3133    //   In addition, if class T has a user-declared constructor (12.1), every
3134    //   non-static data member of class T shall have a name different from T.
3135    for (DeclContext::lookup_result R = Record->lookup(Record->getDeclName());
3136         R.first != R.second; ++R.first) {
3137      NamedDecl *D = *R.first;
3138      if ((isa<FieldDecl>(D) && Record->hasUserDeclaredConstructor()) ||
3139          isa<IndirectFieldDecl>(D)) {
3140        Diag(D->getLocation(), diag::err_member_name_of_class)
3141          << D->getDeclName();
3142        break;
3143      }
3144    }
3145  }
3146
3147  // Warn if the class has virtual methods but non-virtual public destructor.
3148  if (Record->isPolymorphic() && !Record->isDependentType()) {
3149    CXXDestructorDecl *dtor = Record->getDestructor();
3150    if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public))
3151      Diag(dtor ? dtor->getLocation() : Record->getLocation(),
3152           diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
3153  }
3154
3155  // See if a method overloads virtual methods in a base
3156  /// class without overriding any.
3157  if (!Record->isDependentType()) {
3158    for (CXXRecordDecl::method_iterator M = Record->method_begin(),
3159                                     MEnd = Record->method_end();
3160         M != MEnd; ++M) {
3161      if (!(*M)->isStatic())
3162        DiagnoseHiddenVirtualMethods(Record, *M);
3163    }
3164  }
3165
3166  // Declare inherited constructors. We do this eagerly here because:
3167  // - The standard requires an eager diagnostic for conflicting inherited
3168  //   constructors from different classes.
3169  // - The lazy declaration of the other implicit constructors is so as to not
3170  //   waste space and performance on classes that are not meant to be
3171  //   instantiated (e.g. meta-functions). This doesn't apply to classes that
3172  //   have inherited constructors.
3173  DeclareInheritedConstructors(Record);
3174
3175  if (!Record->isDependentType())
3176    CheckExplicitlyDefaultedMethods(Record);
3177}
3178
3179void Sema::CheckExplicitlyDefaultedMethods(CXXRecordDecl *Record) {
3180  for (CXXRecordDecl::method_iterator MI = Record->method_begin(),
3181                                      ME = Record->method_end();
3182       MI != ME; ++MI) {
3183    if (!MI->isInvalidDecl() && MI->isExplicitlyDefaulted()) {
3184      switch (getSpecialMember(*MI)) {
3185      case CXXDefaultConstructor:
3186        CheckExplicitlyDefaultedDefaultConstructor(
3187                                                  cast<CXXConstructorDecl>(*MI));
3188        break;
3189
3190      case CXXDestructor:
3191        CheckExplicitlyDefaultedDestructor(cast<CXXDestructorDecl>(*MI));
3192        break;
3193
3194      case CXXCopyConstructor:
3195        CheckExplicitlyDefaultedCopyConstructor(cast<CXXConstructorDecl>(*MI));
3196        break;
3197
3198      case CXXCopyAssignment:
3199        CheckExplicitlyDefaultedCopyAssignment(*MI);
3200        break;
3201
3202      case CXXMoveConstructor:
3203        CheckExplicitlyDefaultedMoveConstructor(cast<CXXConstructorDecl>(*MI));
3204        break;
3205
3206      case CXXMoveAssignment:
3207        CheckExplicitlyDefaultedMoveAssignment(*MI);
3208        break;
3209
3210      case CXXInvalid:
3211        llvm_unreachable("non-special member explicitly defaulted!");
3212      }
3213    }
3214  }
3215
3216}
3217
3218void Sema::CheckExplicitlyDefaultedDefaultConstructor(CXXConstructorDecl *CD) {
3219  assert(CD->isExplicitlyDefaulted() && CD->isDefaultConstructor());
3220
3221  // Whether this was the first-declared instance of the constructor.
3222  // This affects whether we implicitly add an exception spec (and, eventually,
3223  // constexpr). It is also ill-formed to explicitly default a constructor such
3224  // that it would be deleted. (C++0x [decl.fct.def.default])
3225  bool First = CD == CD->getCanonicalDecl();
3226
3227  bool HadError = false;
3228  if (CD->getNumParams() != 0) {
3229    Diag(CD->getLocation(), diag::err_defaulted_default_ctor_params)
3230      << CD->getSourceRange();
3231    HadError = true;
3232  }
3233
3234  ImplicitExceptionSpecification Spec
3235    = ComputeDefaultedDefaultCtorExceptionSpec(CD->getParent());
3236  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3237  if (EPI.ExceptionSpecType == EST_Delayed) {
3238    // Exception specification depends on some deferred part of the class. We'll
3239    // try again when the class's definition has been fully processed.
3240    return;
3241  }
3242  const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
3243                          *ExceptionType = Context.getFunctionType(
3244                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3245
3246  if (CtorType->hasExceptionSpec()) {
3247    if (CheckEquivalentExceptionSpec(
3248          PDiag(diag::err_incorrect_defaulted_exception_spec)
3249            << CXXDefaultConstructor,
3250          PDiag(),
3251          ExceptionType, SourceLocation(),
3252          CtorType, CD->getLocation())) {
3253      HadError = true;
3254    }
3255  } else if (First) {
3256    // We set the declaration to have the computed exception spec here.
3257    // We know there are no parameters.
3258    EPI.ExtInfo = CtorType->getExtInfo();
3259    CD->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
3260  }
3261
3262  if (HadError) {
3263    CD->setInvalidDecl();
3264    return;
3265  }
3266
3267  if (ShouldDeleteDefaultConstructor(CD)) {
3268    if (First) {
3269      CD->setDeletedAsWritten();
3270    } else {
3271      Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
3272        << CXXDefaultConstructor;
3273      CD->setInvalidDecl();
3274    }
3275  }
3276}
3277
3278void Sema::CheckExplicitlyDefaultedCopyConstructor(CXXConstructorDecl *CD) {
3279  assert(CD->isExplicitlyDefaulted() && CD->isCopyConstructor());
3280
3281  // Whether this was the first-declared instance of the constructor.
3282  bool First = CD == CD->getCanonicalDecl();
3283
3284  bool HadError = false;
3285  if (CD->getNumParams() != 1) {
3286    Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_params)
3287      << CD->getSourceRange();
3288    HadError = true;
3289  }
3290
3291  ImplicitExceptionSpecification Spec(Context);
3292  bool Const;
3293  llvm::tie(Spec, Const) =
3294    ComputeDefaultedCopyCtorExceptionSpecAndConst(CD->getParent());
3295
3296  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3297  const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
3298                          *ExceptionType = Context.getFunctionType(
3299                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3300
3301  // Check for parameter type matching.
3302  // This is a copy ctor so we know it's a cv-qualified reference to T.
3303  QualType ArgType = CtorType->getArgType(0);
3304  if (ArgType->getPointeeType().isVolatileQualified()) {
3305    Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_volatile_param);
3306    HadError = true;
3307  }
3308  if (ArgType->getPointeeType().isConstQualified() && !Const) {
3309    Diag(CD->getLocation(), diag::err_defaulted_copy_ctor_const_param);
3310    HadError = true;
3311  }
3312
3313  if (CtorType->hasExceptionSpec()) {
3314    if (CheckEquivalentExceptionSpec(
3315          PDiag(diag::err_incorrect_defaulted_exception_spec)
3316            << CXXCopyConstructor,
3317          PDiag(),
3318          ExceptionType, SourceLocation(),
3319          CtorType, CD->getLocation())) {
3320      HadError = true;
3321    }
3322  } else if (First) {
3323    // We set the declaration to have the computed exception spec here.
3324    // We duplicate the one parameter type.
3325    EPI.ExtInfo = CtorType->getExtInfo();
3326    CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
3327  }
3328
3329  if (HadError) {
3330    CD->setInvalidDecl();
3331    return;
3332  }
3333
3334  if (ShouldDeleteCopyConstructor(CD)) {
3335    if (First) {
3336      CD->setDeletedAsWritten();
3337    } else {
3338      Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
3339        << CXXCopyConstructor;
3340      CD->setInvalidDecl();
3341    }
3342  }
3343}
3344
3345void Sema::CheckExplicitlyDefaultedCopyAssignment(CXXMethodDecl *MD) {
3346  assert(MD->isExplicitlyDefaulted());
3347
3348  // Whether this was the first-declared instance of the operator
3349  bool First = MD == MD->getCanonicalDecl();
3350
3351  bool HadError = false;
3352  if (MD->getNumParams() != 1) {
3353    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_params)
3354      << MD->getSourceRange();
3355    HadError = true;
3356  }
3357
3358  QualType ReturnType =
3359    MD->getType()->getAs<FunctionType>()->getResultType();
3360  if (!ReturnType->isLValueReferenceType() ||
3361      !Context.hasSameType(
3362        Context.getCanonicalType(ReturnType->getPointeeType()),
3363        Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
3364    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_return_type);
3365    HadError = true;
3366  }
3367
3368  ImplicitExceptionSpecification Spec(Context);
3369  bool Const;
3370  llvm::tie(Spec, Const) =
3371    ComputeDefaultedCopyCtorExceptionSpecAndConst(MD->getParent());
3372
3373  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3374  const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
3375                          *ExceptionType = Context.getFunctionType(
3376                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3377
3378  QualType ArgType = OperType->getArgType(0);
3379  if (!ArgType->isLValueReferenceType()) {
3380    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);
3381    HadError = true;
3382  } else {
3383    if (ArgType->getPointeeType().isVolatileQualified()) {
3384      Diag(MD->getLocation(), diag::err_defaulted_copy_assign_volatile_param);
3385      HadError = true;
3386    }
3387    if (ArgType->getPointeeType().isConstQualified() && !Const) {
3388      Diag(MD->getLocation(), diag::err_defaulted_copy_assign_const_param);
3389      HadError = true;
3390    }
3391  }
3392
3393  if (OperType->getTypeQuals()) {
3394    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_quals);
3395    HadError = true;
3396  }
3397
3398  if (OperType->hasExceptionSpec()) {
3399    if (CheckEquivalentExceptionSpec(
3400          PDiag(diag::err_incorrect_defaulted_exception_spec)
3401            << CXXCopyAssignment,
3402          PDiag(),
3403          ExceptionType, SourceLocation(),
3404          OperType, MD->getLocation())) {
3405      HadError = true;
3406    }
3407  } else if (First) {
3408    // We set the declaration to have the computed exception spec here.
3409    // We duplicate the one parameter type.
3410    EPI.RefQualifier = OperType->getRefQualifier();
3411    EPI.ExtInfo = OperType->getExtInfo();
3412    MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
3413  }
3414
3415  if (HadError) {
3416    MD->setInvalidDecl();
3417    return;
3418  }
3419
3420  if (ShouldDeleteCopyAssignmentOperator(MD)) {
3421    if (First) {
3422      MD->setDeletedAsWritten();
3423    } else {
3424      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
3425        << CXXCopyAssignment;
3426      MD->setInvalidDecl();
3427    }
3428  }
3429}
3430
3431void Sema::CheckExplicitlyDefaultedMoveConstructor(CXXConstructorDecl *CD) {
3432  assert(CD->isExplicitlyDefaulted() && CD->isMoveConstructor());
3433
3434  // Whether this was the first-declared instance of the constructor.
3435  bool First = CD == CD->getCanonicalDecl();
3436
3437  bool HadError = false;
3438  if (CD->getNumParams() != 1) {
3439    Diag(CD->getLocation(), diag::err_defaulted_move_ctor_params)
3440      << CD->getSourceRange();
3441    HadError = true;
3442  }
3443
3444  ImplicitExceptionSpecification Spec(
3445      ComputeDefaultedMoveCtorExceptionSpec(CD->getParent()));
3446
3447  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3448  const FunctionProtoType *CtorType = CD->getType()->getAs<FunctionProtoType>(),
3449                          *ExceptionType = Context.getFunctionType(
3450                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3451
3452  // Check for parameter type matching.
3453  // This is a move ctor so we know it's a cv-qualified rvalue reference to T.
3454  QualType ArgType = CtorType->getArgType(0);
3455  if (ArgType->getPointeeType().isVolatileQualified()) {
3456    Diag(CD->getLocation(), diag::err_defaulted_move_ctor_volatile_param);
3457    HadError = true;
3458  }
3459  if (ArgType->getPointeeType().isConstQualified()) {
3460    Diag(CD->getLocation(), diag::err_defaulted_move_ctor_const_param);
3461    HadError = true;
3462  }
3463
3464  if (CtorType->hasExceptionSpec()) {
3465    if (CheckEquivalentExceptionSpec(
3466          PDiag(diag::err_incorrect_defaulted_exception_spec)
3467            << CXXMoveConstructor,
3468          PDiag(),
3469          ExceptionType, SourceLocation(),
3470          CtorType, CD->getLocation())) {
3471      HadError = true;
3472    }
3473  } else if (First) {
3474    // We set the declaration to have the computed exception spec here.
3475    // We duplicate the one parameter type.
3476    EPI.ExtInfo = CtorType->getExtInfo();
3477    CD->setType(Context.getFunctionType(Context.VoidTy, &ArgType, 1, EPI));
3478  }
3479
3480  if (HadError) {
3481    CD->setInvalidDecl();
3482    return;
3483  }
3484
3485  if (ShouldDeleteMoveConstructor(CD)) {
3486    if (First) {
3487      CD->setDeletedAsWritten();
3488    } else {
3489      Diag(CD->getLocation(), diag::err_out_of_line_default_deletes)
3490        << CXXMoveConstructor;
3491      CD->setInvalidDecl();
3492    }
3493  }
3494}
3495
3496void Sema::CheckExplicitlyDefaultedMoveAssignment(CXXMethodDecl *MD) {
3497  assert(MD->isExplicitlyDefaulted());
3498
3499  // Whether this was the first-declared instance of the operator
3500  bool First = MD == MD->getCanonicalDecl();
3501
3502  bool HadError = false;
3503  if (MD->getNumParams() != 1) {
3504    Diag(MD->getLocation(), diag::err_defaulted_move_assign_params)
3505      << MD->getSourceRange();
3506    HadError = true;
3507  }
3508
3509  QualType ReturnType =
3510    MD->getType()->getAs<FunctionType>()->getResultType();
3511  if (!ReturnType->isLValueReferenceType() ||
3512      !Context.hasSameType(
3513        Context.getCanonicalType(ReturnType->getPointeeType()),
3514        Context.getCanonicalType(Context.getTypeDeclType(MD->getParent())))) {
3515    Diag(MD->getLocation(), diag::err_defaulted_move_assign_return_type);
3516    HadError = true;
3517  }
3518
3519  ImplicitExceptionSpecification Spec(
3520      ComputeDefaultedMoveCtorExceptionSpec(MD->getParent()));
3521
3522  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3523  const FunctionProtoType *OperType = MD->getType()->getAs<FunctionProtoType>(),
3524                          *ExceptionType = Context.getFunctionType(
3525                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3526
3527  QualType ArgType = OperType->getArgType(0);
3528  if (!ArgType->isRValueReferenceType()) {
3529    Diag(MD->getLocation(), diag::err_defaulted_move_assign_not_ref);
3530    HadError = true;
3531  } else {
3532    if (ArgType->getPointeeType().isVolatileQualified()) {
3533      Diag(MD->getLocation(), diag::err_defaulted_move_assign_volatile_param);
3534      HadError = true;
3535    }
3536    if (ArgType->getPointeeType().isConstQualified()) {
3537      Diag(MD->getLocation(), diag::err_defaulted_move_assign_const_param);
3538      HadError = true;
3539    }
3540  }
3541
3542  if (OperType->getTypeQuals()) {
3543    Diag(MD->getLocation(), diag::err_defaulted_move_assign_quals);
3544    HadError = true;
3545  }
3546
3547  if (OperType->hasExceptionSpec()) {
3548    if (CheckEquivalentExceptionSpec(
3549          PDiag(diag::err_incorrect_defaulted_exception_spec)
3550            << CXXMoveAssignment,
3551          PDiag(),
3552          ExceptionType, SourceLocation(),
3553          OperType, MD->getLocation())) {
3554      HadError = true;
3555    }
3556  } else if (First) {
3557    // We set the declaration to have the computed exception spec here.
3558    // We duplicate the one parameter type.
3559    EPI.RefQualifier = OperType->getRefQualifier();
3560    EPI.ExtInfo = OperType->getExtInfo();
3561    MD->setType(Context.getFunctionType(ReturnType, &ArgType, 1, EPI));
3562  }
3563
3564  if (HadError) {
3565    MD->setInvalidDecl();
3566    return;
3567  }
3568
3569  if (ShouldDeleteMoveAssignmentOperator(MD)) {
3570    if (First) {
3571      MD->setDeletedAsWritten();
3572    } else {
3573      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes)
3574        << CXXMoveAssignment;
3575      MD->setInvalidDecl();
3576    }
3577  }
3578}
3579
3580void Sema::CheckExplicitlyDefaultedDestructor(CXXDestructorDecl *DD) {
3581  assert(DD->isExplicitlyDefaulted());
3582
3583  // Whether this was the first-declared instance of the destructor.
3584  bool First = DD == DD->getCanonicalDecl();
3585
3586  ImplicitExceptionSpecification Spec
3587    = ComputeDefaultedDtorExceptionSpec(DD->getParent());
3588  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
3589  const FunctionProtoType *DtorType = DD->getType()->getAs<FunctionProtoType>(),
3590                          *ExceptionType = Context.getFunctionType(
3591                         Context.VoidTy, 0, 0, EPI)->getAs<FunctionProtoType>();
3592
3593  if (DtorType->hasExceptionSpec()) {
3594    if (CheckEquivalentExceptionSpec(
3595          PDiag(diag::err_incorrect_defaulted_exception_spec)
3596            << CXXDestructor,
3597          PDiag(),
3598          ExceptionType, SourceLocation(),
3599          DtorType, DD->getLocation())) {
3600      DD->setInvalidDecl();
3601      return;
3602    }
3603  } else if (First) {
3604    // We set the declaration to have the computed exception spec here.
3605    // There are no parameters.
3606    EPI.ExtInfo = DtorType->getExtInfo();
3607    DD->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
3608  }
3609
3610  if (ShouldDeleteDestructor(DD)) {
3611    if (First) {
3612      DD->setDeletedAsWritten();
3613    } else {
3614      Diag(DD->getLocation(), diag::err_out_of_line_default_deletes)
3615        << CXXDestructor;
3616      DD->setInvalidDecl();
3617    }
3618  }
3619}
3620
3621bool Sema::ShouldDeleteDefaultConstructor(CXXConstructorDecl *CD) {
3622  CXXRecordDecl *RD = CD->getParent();
3623  assert(!RD->isDependentType() && "do deletion after instantiation");
3624  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
3625    return false;
3626
3627  SourceLocation Loc = CD->getLocation();
3628
3629  // Do access control from the constructor
3630  ContextRAII CtorContext(*this, CD);
3631
3632  bool Union = RD->isUnion();
3633  bool AllConst = true;
3634
3635  // We do this because we should never actually use an anonymous
3636  // union's constructor.
3637  if (Union && RD->isAnonymousStructOrUnion())
3638    return false;
3639
3640  // FIXME: We should put some diagnostic logic right into this function.
3641
3642  // C++0x [class.ctor]/5
3643  //    A defaulted default constructor for class X is defined as deleted if:
3644
3645  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
3646                                          BE = RD->bases_end();
3647       BI != BE; ++BI) {
3648    // We'll handle this one later
3649    if (BI->isVirtual())
3650      continue;
3651
3652    CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
3653    assert(BaseDecl && "base isn't a CXXRecordDecl");
3654
3655    // -- any [direct base class] has a type with a destructor that is
3656    //    deleted or inaccessible from the defaulted default constructor
3657    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
3658    if (BaseDtor->isDeleted())
3659      return true;
3660    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
3661        AR_accessible)
3662      return true;
3663
3664    // -- any [direct base class either] has no default constructor or
3665    //    overload resolution as applied to [its] default constructor
3666    //    results in an ambiguity or in a function that is deleted or
3667    //    inaccessible from the defaulted default constructor
3668    CXXConstructorDecl *BaseDefault = LookupDefaultConstructor(BaseDecl);
3669    if (!BaseDefault || BaseDefault->isDeleted())
3670      return true;
3671
3672    if (CheckConstructorAccess(Loc, BaseDefault, BaseDefault->getAccess(),
3673                               PDiag()) != AR_accessible)
3674      return true;
3675  }
3676
3677  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
3678                                          BE = RD->vbases_end();
3679       BI != BE; ++BI) {
3680    CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
3681    assert(BaseDecl && "base isn't a CXXRecordDecl");
3682
3683    // -- any [virtual base class] has a type with a destructor that is
3684    //    delete or inaccessible from the defaulted default constructor
3685    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
3686    if (BaseDtor->isDeleted())
3687      return true;
3688    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
3689        AR_accessible)
3690      return true;
3691
3692    // -- any [virtual base class either] has no default constructor or
3693    //    overload resolution as applied to [its] default constructor
3694    //    results in an ambiguity or in a function that is deleted or
3695    //    inaccessible from the defaulted default constructor
3696    CXXConstructorDecl *BaseDefault = LookupDefaultConstructor(BaseDecl);
3697    if (!BaseDefault || BaseDefault->isDeleted())
3698      return true;
3699
3700    if (CheckConstructorAccess(Loc, BaseDefault, BaseDefault->getAccess(),
3701                               PDiag()) != AR_accessible)
3702      return true;
3703  }
3704
3705  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
3706                                     FE = RD->field_end();
3707       FI != FE; ++FI) {
3708    if (FI->isInvalidDecl())
3709      continue;
3710
3711    QualType FieldType = Context.getBaseElementType(FI->getType());
3712    CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
3713
3714    // -- any non-static data member with no brace-or-equal-initializer is of
3715    //    reference type
3716    if (FieldType->isReferenceType() && !FI->hasInClassInitializer())
3717      return true;
3718
3719    // -- X is a union and all its variant members are of const-qualified type
3720    //    (or array thereof)
3721    if (Union && !FieldType.isConstQualified())
3722      AllConst = false;
3723
3724    if (FieldRecord) {
3725      // -- X is a union-like class that has a variant member with a non-trivial
3726      //    default constructor
3727      if (Union && !FieldRecord->hasTrivialDefaultConstructor())
3728        return true;
3729
3730      CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
3731      if (FieldDtor->isDeleted())
3732        return true;
3733      if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
3734          AR_accessible)
3735        return true;
3736
3737      // -- any non-variant non-static data member of const-qualified type (or
3738      //    array thereof) with no brace-or-equal-initializer does not have a
3739      //    user-provided default constructor
3740      if (FieldType.isConstQualified() &&
3741          !FI->hasInClassInitializer() &&
3742          !FieldRecord->hasUserProvidedDefaultConstructor())
3743        return true;
3744
3745      if (!Union && FieldRecord->isUnion() &&
3746          FieldRecord->isAnonymousStructOrUnion()) {
3747        // We're okay to reuse AllConst here since we only care about the
3748        // value otherwise if we're in a union.
3749        AllConst = true;
3750
3751        for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
3752                                           UE = FieldRecord->field_end();
3753             UI != UE; ++UI) {
3754          QualType UnionFieldType = Context.getBaseElementType(UI->getType());
3755          CXXRecordDecl *UnionFieldRecord =
3756            UnionFieldType->getAsCXXRecordDecl();
3757
3758          if (!UnionFieldType.isConstQualified())
3759            AllConst = false;
3760
3761          if (UnionFieldRecord &&
3762              !UnionFieldRecord->hasTrivialDefaultConstructor())
3763            return true;
3764        }
3765
3766        if (AllConst)
3767          return true;
3768
3769        // Don't try to initialize the anonymous union
3770        // This is technically non-conformant, but sanity demands it.
3771        continue;
3772      }
3773
3774      // -- any non-static data member with no brace-or-equal-initializer has
3775      //    class type M (or array thereof) and either M has no default
3776      //    constructor or overload resolution as applied to M's default
3777      //    constructor results in an ambiguity or in a function that is deleted
3778      //    or inaccessible from the defaulted default constructor.
3779      if (!FI->hasInClassInitializer()) {
3780        CXXConstructorDecl *FieldDefault = LookupDefaultConstructor(FieldRecord);
3781        if (!FieldDefault || FieldDefault->isDeleted())
3782          return true;
3783        if (CheckConstructorAccess(Loc, FieldDefault, FieldDefault->getAccess(),
3784                                   PDiag()) != AR_accessible)
3785          return true;
3786      }
3787    } else if (!Union && FieldType.isConstQualified() &&
3788               !FI->hasInClassInitializer()) {
3789      // -- any non-variant non-static data member of const-qualified type (or
3790      //    array thereof) with no brace-or-equal-initializer does not have a
3791      //    user-provided default constructor
3792      return true;
3793    }
3794  }
3795
3796  if (Union && AllConst)
3797    return true;
3798
3799  return false;
3800}
3801
3802bool Sema::ShouldDeleteCopyConstructor(CXXConstructorDecl *CD) {
3803  CXXRecordDecl *RD = CD->getParent();
3804  assert(!RD->isDependentType() && "do deletion after instantiation");
3805  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
3806    return false;
3807
3808  SourceLocation Loc = CD->getLocation();
3809
3810  // Do access control from the constructor
3811  ContextRAII CtorContext(*this, CD);
3812
3813  bool Union = RD->isUnion();
3814
3815  assert(!CD->getParamDecl(0)->getType()->getPointeeType().isNull() &&
3816         "copy assignment arg has no pointee type");
3817  unsigned ArgQuals =
3818    CD->getParamDecl(0)->getType()->getPointeeType().isConstQualified() ?
3819      Qualifiers::Const : 0;
3820
3821  // We do this because we should never actually use an anonymous
3822  // union's constructor.
3823  if (Union && RD->isAnonymousStructOrUnion())
3824    return false;
3825
3826  // FIXME: We should put some diagnostic logic right into this function.
3827
3828  // C++0x [class.copy]/11
3829  //    A defaulted [copy] constructor for class X is defined as delete if X has:
3830
3831  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
3832                                          BE = RD->bases_end();
3833       BI != BE; ++BI) {
3834    // We'll handle this one later
3835    if (BI->isVirtual())
3836      continue;
3837
3838    QualType BaseType = BI->getType();
3839    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
3840    assert(BaseDecl && "base isn't a CXXRecordDecl");
3841
3842    // -- any [direct base class] of a type with a destructor that is deleted or
3843    //    inaccessible from the defaulted constructor
3844    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
3845    if (BaseDtor->isDeleted())
3846      return true;
3847    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
3848        AR_accessible)
3849      return true;
3850
3851    // -- a [direct base class] B that cannot be [copied] because overload
3852    //    resolution, as applied to B's [copy] constructor, results in an
3853    //    ambiguity or a function that is deleted or inaccessible from the
3854    //    defaulted constructor
3855    CXXConstructorDecl *BaseCtor = LookupCopyingConstructor(BaseDecl, ArgQuals);
3856    if (!BaseCtor || BaseCtor->isDeleted())
3857      return true;
3858    if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(), PDiag()) !=
3859        AR_accessible)
3860      return true;
3861  }
3862
3863  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
3864                                          BE = RD->vbases_end();
3865       BI != BE; ++BI) {
3866    QualType BaseType = BI->getType();
3867    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
3868    assert(BaseDecl && "base isn't a CXXRecordDecl");
3869
3870    // -- any [virtual base class] of a type with a destructor that is deleted or
3871    //    inaccessible from the defaulted constructor
3872    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
3873    if (BaseDtor->isDeleted())
3874      return true;
3875    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
3876        AR_accessible)
3877      return true;
3878
3879    // -- a [virtual base class] B that cannot be [copied] because overload
3880    //    resolution, as applied to B's [copy] constructor, results in an
3881    //    ambiguity or a function that is deleted or inaccessible from the
3882    //    defaulted constructor
3883    CXXConstructorDecl *BaseCtor = LookupCopyingConstructor(BaseDecl, ArgQuals);
3884    if (!BaseCtor || BaseCtor->isDeleted())
3885      return true;
3886    if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(), PDiag()) !=
3887        AR_accessible)
3888      return true;
3889  }
3890
3891  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
3892                                     FE = RD->field_end();
3893       FI != FE; ++FI) {
3894    QualType FieldType = Context.getBaseElementType(FI->getType());
3895
3896    // -- for a copy constructor, a non-static data member of rvalue reference
3897    //    type
3898    if (FieldType->isRValueReferenceType())
3899      return true;
3900
3901    CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
3902
3903    if (FieldRecord) {
3904      // This is an anonymous union
3905      if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
3906        // Anonymous unions inside unions do not variant members create
3907        if (!Union) {
3908          for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
3909                                             UE = FieldRecord->field_end();
3910               UI != UE; ++UI) {
3911            QualType UnionFieldType = Context.getBaseElementType(UI->getType());
3912            CXXRecordDecl *UnionFieldRecord =
3913              UnionFieldType->getAsCXXRecordDecl();
3914
3915            // -- a variant member with a non-trivial [copy] constructor and X
3916            //    is a union-like class
3917            if (UnionFieldRecord &&
3918                !UnionFieldRecord->hasTrivialCopyConstructor())
3919              return true;
3920          }
3921        }
3922
3923        // Don't try to initalize an anonymous union
3924        continue;
3925      } else {
3926         // -- a variant member with a non-trivial [copy] constructor and X is a
3927         //    union-like class
3928        if (Union && !FieldRecord->hasTrivialCopyConstructor())
3929          return true;
3930
3931        // -- any [non-static data member] of a type with a destructor that is
3932        //    deleted or inaccessible from the defaulted constructor
3933        CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
3934        if (FieldDtor->isDeleted())
3935          return true;
3936        if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
3937            AR_accessible)
3938          return true;
3939      }
3940
3941    // -- a [non-static data member of class type (or array thereof)] B that
3942    //    cannot be [copied] because overload resolution, as applied to B's
3943    //    [copy] constructor, results in an ambiguity or a function that is
3944    //    deleted or inaccessible from the defaulted constructor
3945      CXXConstructorDecl *FieldCtor = LookupCopyingConstructor(FieldRecord,
3946                                                               ArgQuals);
3947      if (!FieldCtor || FieldCtor->isDeleted())
3948        return true;
3949      if (CheckConstructorAccess(Loc, FieldCtor, FieldCtor->getAccess(),
3950                                 PDiag()) != AR_accessible)
3951        return true;
3952    }
3953  }
3954
3955  return false;
3956}
3957
3958bool Sema::ShouldDeleteCopyAssignmentOperator(CXXMethodDecl *MD) {
3959  CXXRecordDecl *RD = MD->getParent();
3960  assert(!RD->isDependentType() && "do deletion after instantiation");
3961  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
3962    return false;
3963
3964  SourceLocation Loc = MD->getLocation();
3965
3966  // Do access control from the constructor
3967  ContextRAII MethodContext(*this, MD);
3968
3969  bool Union = RD->isUnion();
3970
3971  unsigned ArgQuals =
3972    MD->getParamDecl(0)->getType()->getPointeeType().isConstQualified() ?
3973      Qualifiers::Const : 0;
3974
3975  // We do this because we should never actually use an anonymous
3976  // union's constructor.
3977  if (Union && RD->isAnonymousStructOrUnion())
3978    return false;
3979
3980  // FIXME: We should put some diagnostic logic right into this function.
3981
3982  // C++0x [class.copy]/20
3983  //    A defaulted [copy] assignment operator for class X is defined as deleted
3984  //    if X has:
3985
3986  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
3987                                          BE = RD->bases_end();
3988       BI != BE; ++BI) {
3989    // We'll handle this one later
3990    if (BI->isVirtual())
3991      continue;
3992
3993    QualType BaseType = BI->getType();
3994    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
3995    assert(BaseDecl && "base isn't a CXXRecordDecl");
3996
3997    // -- a [direct base class] B that cannot be [copied] because overload
3998    //    resolution, as applied to B's [copy] assignment operator, results in
3999    //    an ambiguity or a function that is deleted or inaccessible from the
4000    //    assignment operator
4001    CXXMethodDecl *CopyOper = LookupCopyingAssignment(BaseDecl, ArgQuals, false,
4002                                                      0);
4003    if (!CopyOper || CopyOper->isDeleted())
4004      return true;
4005    if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
4006      return true;
4007  }
4008
4009  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
4010                                          BE = RD->vbases_end();
4011       BI != BE; ++BI) {
4012    QualType BaseType = BI->getType();
4013    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
4014    assert(BaseDecl && "base isn't a CXXRecordDecl");
4015
4016    // -- a [virtual base class] B that cannot be [copied] because overload
4017    //    resolution, as applied to B's [copy] assignment operator, results in
4018    //    an ambiguity or a function that is deleted or inaccessible from the
4019    //    assignment operator
4020    CXXMethodDecl *CopyOper = LookupCopyingAssignment(BaseDecl, ArgQuals, false,
4021                                                      0);
4022    if (!CopyOper || CopyOper->isDeleted())
4023      return true;
4024    if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
4025      return true;
4026  }
4027
4028  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
4029                                     FE = RD->field_end();
4030       FI != FE; ++FI) {
4031    QualType FieldType = Context.getBaseElementType(FI->getType());
4032
4033    // -- a non-static data member of reference type
4034    if (FieldType->isReferenceType())
4035      return true;
4036
4037    // -- a non-static data member of const non-class type (or array thereof)
4038    if (FieldType.isConstQualified() && !FieldType->isRecordType())
4039      return true;
4040
4041    CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4042
4043    if (FieldRecord) {
4044      // This is an anonymous union
4045      if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
4046        // Anonymous unions inside unions do not variant members create
4047        if (!Union) {
4048          for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4049                                             UE = FieldRecord->field_end();
4050               UI != UE; ++UI) {
4051            QualType UnionFieldType = Context.getBaseElementType(UI->getType());
4052            CXXRecordDecl *UnionFieldRecord =
4053              UnionFieldType->getAsCXXRecordDecl();
4054
4055            // -- a variant member with a non-trivial [copy] assignment operator
4056            //    and X is a union-like class
4057            if (UnionFieldRecord &&
4058                !UnionFieldRecord->hasTrivialCopyAssignment())
4059              return true;
4060          }
4061        }
4062
4063        // Don't try to initalize an anonymous union
4064        continue;
4065      // -- a variant member with a non-trivial [copy] assignment operator
4066      //    and X is a union-like class
4067      } else if (Union && !FieldRecord->hasTrivialCopyAssignment()) {
4068          return true;
4069      }
4070
4071      CXXMethodDecl *CopyOper = LookupCopyingAssignment(FieldRecord, ArgQuals,
4072                                                        false, 0);
4073      if (!CopyOper || CopyOper->isDeleted())
4074        return true;
4075      if (CheckDirectMemberAccess(Loc, CopyOper, PDiag()) != AR_accessible)
4076        return true;
4077    }
4078  }
4079
4080  return false;
4081}
4082
4083bool Sema::ShouldDeleteMoveConstructor(CXXConstructorDecl *CD) {
4084  CXXRecordDecl *RD = CD->getParent();
4085  assert(!RD->isDependentType() && "do deletion after instantiation");
4086  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
4087    return false;
4088
4089  SourceLocation Loc = CD->getLocation();
4090
4091  // Do access control from the constructor
4092  ContextRAII CtorContext(*this, CD);
4093
4094  bool Union = RD->isUnion();
4095
4096  assert(!CD->getParamDecl(0)->getType()->getPointeeType().isNull() &&
4097         "copy assignment arg has no pointee type");
4098
4099  // We do this because we should never actually use an anonymous
4100  // union's constructor.
4101  if (Union && RD->isAnonymousStructOrUnion())
4102    return false;
4103
4104  // C++0x [class.copy]/11
4105  //    A defaulted [move] constructor for class X is defined as deleted
4106  //    if X has:
4107
4108  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
4109                                          BE = RD->bases_end();
4110       BI != BE; ++BI) {
4111    // We'll handle this one later
4112    if (BI->isVirtual())
4113      continue;
4114
4115    QualType BaseType = BI->getType();
4116    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
4117    assert(BaseDecl && "base isn't a CXXRecordDecl");
4118
4119    // -- any [direct base class] of a type with a destructor that is deleted or
4120    //    inaccessible from the defaulted constructor
4121    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
4122    if (BaseDtor->isDeleted())
4123      return true;
4124    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
4125        AR_accessible)
4126      return true;
4127
4128    // -- a [direct base class] B that cannot be [moved] because overload
4129    //    resolution, as applied to B's [move] constructor, results in an
4130    //    ambiguity or a function that is deleted or inaccessible from the
4131    //    defaulted constructor
4132    CXXConstructorDecl *BaseCtor = LookupMovingConstructor(BaseDecl);
4133    if (!BaseCtor || BaseCtor->isDeleted())
4134      return true;
4135    if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(), PDiag()) !=
4136        AR_accessible)
4137      return true;
4138
4139    // -- for a move constructor, a [direct base class] with a type that
4140    //    does not have a move constructor and is not trivially copyable.
4141    // If the field isn't a record, it's always trivially copyable.
4142    // A moving constructor could be a copy constructor instead.
4143    if (!BaseCtor->isMoveConstructor() &&
4144        !BaseDecl->isTriviallyCopyable())
4145      return true;
4146  }
4147
4148  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
4149                                          BE = RD->vbases_end();
4150       BI != BE; ++BI) {
4151    QualType BaseType = BI->getType();
4152    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
4153    assert(BaseDecl && "base isn't a CXXRecordDecl");
4154
4155    // -- any [virtual base class] of a type with a destructor that is deleted
4156    //    or inaccessible from the defaulted constructor
4157    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
4158    if (BaseDtor->isDeleted())
4159      return true;
4160    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
4161        AR_accessible)
4162      return true;
4163
4164    // -- a [virtual base class] B that cannot be [moved] because overload
4165    //    resolution, as applied to B's [move] constructor, results in an
4166    //    ambiguity or a function that is deleted or inaccessible from the
4167    //    defaulted constructor
4168    CXXConstructorDecl *BaseCtor = LookupMovingConstructor(BaseDecl);
4169    if (!BaseCtor || BaseCtor->isDeleted())
4170      return true;
4171    if (CheckConstructorAccess(Loc, BaseCtor, BaseCtor->getAccess(), PDiag()) !=
4172        AR_accessible)
4173      return true;
4174
4175    // -- for a move constructor, a [virtual base class] with a type that
4176    //    does not have a move constructor and is not trivially copyable.
4177    // If the field isn't a record, it's always trivially copyable.
4178    // A moving constructor could be a copy constructor instead.
4179    if (!BaseCtor->isMoveConstructor() &&
4180        !BaseDecl->isTriviallyCopyable())
4181      return true;
4182  }
4183
4184  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
4185                                     FE = RD->field_end();
4186       FI != FE; ++FI) {
4187    QualType FieldType = Context.getBaseElementType(FI->getType());
4188
4189    if (CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl()) {
4190      // This is an anonymous union
4191      if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
4192        // Anonymous unions inside unions do not variant members create
4193        if (!Union) {
4194          for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4195                                             UE = FieldRecord->field_end();
4196               UI != UE; ++UI) {
4197            QualType UnionFieldType = Context.getBaseElementType(UI->getType());
4198            CXXRecordDecl *UnionFieldRecord =
4199              UnionFieldType->getAsCXXRecordDecl();
4200
4201            // -- a variant member with a non-trivial [move] constructor and X
4202            //    is a union-like class
4203            if (UnionFieldRecord &&
4204                !UnionFieldRecord->hasTrivialMoveConstructor())
4205              return true;
4206          }
4207        }
4208
4209        // Don't try to initalize an anonymous union
4210        continue;
4211      } else {
4212         // -- a variant member with a non-trivial [move] constructor and X is a
4213         //    union-like class
4214        if (Union && !FieldRecord->hasTrivialMoveConstructor())
4215          return true;
4216
4217        // -- any [non-static data member] of a type with a destructor that is
4218        //    deleted or inaccessible from the defaulted constructor
4219        CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
4220        if (FieldDtor->isDeleted())
4221          return true;
4222        if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
4223            AR_accessible)
4224          return true;
4225      }
4226
4227      // -- a [non-static data member of class type (or array thereof)] B that
4228      //    cannot be [moved] because overload resolution, as applied to B's
4229      //    [move] constructor, results in an ambiguity or a function that is
4230      //    deleted or inaccessible from the defaulted constructor
4231      CXXConstructorDecl *FieldCtor = LookupMovingConstructor(FieldRecord);
4232      if (!FieldCtor || FieldCtor->isDeleted())
4233        return true;
4234      if (CheckConstructorAccess(Loc, FieldCtor, FieldCtor->getAccess(),
4235                                 PDiag()) != AR_accessible)
4236        return true;
4237
4238      // -- for a move constructor, a [non-static data member] with a type that
4239      //    does not have a move constructor and is not trivially copyable.
4240      // If the field isn't a record, it's always trivially copyable.
4241      // A moving constructor could be a copy constructor instead.
4242      if (!FieldCtor->isMoveConstructor() &&
4243          !FieldRecord->isTriviallyCopyable())
4244        return true;
4245    }
4246  }
4247
4248  return false;
4249}
4250
4251bool Sema::ShouldDeleteMoveAssignmentOperator(CXXMethodDecl *MD) {
4252  CXXRecordDecl *RD = MD->getParent();
4253  assert(!RD->isDependentType() && "do deletion after instantiation");
4254  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
4255    return false;
4256
4257  SourceLocation Loc = MD->getLocation();
4258
4259  // Do access control from the constructor
4260  ContextRAII MethodContext(*this, MD);
4261
4262  bool Union = RD->isUnion();
4263
4264  // We do this because we should never actually use an anonymous
4265  // union's constructor.
4266  if (Union && RD->isAnonymousStructOrUnion())
4267    return false;
4268
4269  // C++0x [class.copy]/20
4270  //    A defaulted [move] assignment operator for class X is defined as deleted
4271  //    if X has:
4272
4273  //    -- for the move constructor, [...] any direct or indirect virtual base
4274  //       class.
4275  if (RD->getNumVBases() != 0)
4276    return true;
4277
4278  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
4279                                          BE = RD->bases_end();
4280       BI != BE; ++BI) {
4281
4282    QualType BaseType = BI->getType();
4283    CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl();
4284    assert(BaseDecl && "base isn't a CXXRecordDecl");
4285
4286    // -- a [direct base class] B that cannot be [moved] because overload
4287    //    resolution, as applied to B's [move] assignment operator, results in
4288    //    an ambiguity or a function that is deleted or inaccessible from the
4289    //    assignment operator
4290    CXXMethodDecl *MoveOper = LookupMovingAssignment(BaseDecl, false, 0);
4291    if (!MoveOper || MoveOper->isDeleted())
4292      return true;
4293    if (CheckDirectMemberAccess(Loc, MoveOper, PDiag()) != AR_accessible)
4294      return true;
4295
4296    // -- for the move assignment operator, a [direct base class] with a type
4297    //    that does not have a move assignment operator and is not trivially
4298    //    copyable.
4299    if (!MoveOper->isMoveAssignmentOperator() &&
4300        !BaseDecl->isTriviallyCopyable())
4301      return true;
4302  }
4303
4304  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
4305                                     FE = RD->field_end();
4306       FI != FE; ++FI) {
4307    QualType FieldType = Context.getBaseElementType(FI->getType());
4308
4309    // -- a non-static data member of reference type
4310    if (FieldType->isReferenceType())
4311      return true;
4312
4313    // -- a non-static data member of const non-class type (or array thereof)
4314    if (FieldType.isConstQualified() && !FieldType->isRecordType())
4315      return true;
4316
4317    CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4318
4319    if (FieldRecord) {
4320      // This is an anonymous union
4321      if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
4322        // Anonymous unions inside unions do not variant members create
4323        if (!Union) {
4324          for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4325                                             UE = FieldRecord->field_end();
4326               UI != UE; ++UI) {
4327            QualType UnionFieldType = Context.getBaseElementType(UI->getType());
4328            CXXRecordDecl *UnionFieldRecord =
4329              UnionFieldType->getAsCXXRecordDecl();
4330
4331            // -- a variant member with a non-trivial [move] assignment operator
4332            //    and X is a union-like class
4333            if (UnionFieldRecord &&
4334                !UnionFieldRecord->hasTrivialMoveAssignment())
4335              return true;
4336          }
4337        }
4338
4339        // Don't try to initalize an anonymous union
4340        continue;
4341      // -- a variant member with a non-trivial [move] assignment operator
4342      //    and X is a union-like class
4343      } else if (Union && !FieldRecord->hasTrivialMoveAssignment()) {
4344          return true;
4345      }
4346
4347      CXXMethodDecl *MoveOper = LookupMovingAssignment(FieldRecord, false, 0);
4348      if (!MoveOper || MoveOper->isDeleted())
4349        return true;
4350      if (CheckDirectMemberAccess(Loc, MoveOper, PDiag()) != AR_accessible)
4351        return true;
4352
4353      // -- for the move assignment operator, a [non-static data member] with a
4354      //    type that does not have a move assignment operator and is not
4355      //    trivially copyable.
4356      if (!MoveOper->isMoveAssignmentOperator() &&
4357          !FieldRecord->isTriviallyCopyable())
4358        return true;
4359    }
4360  }
4361
4362  return false;
4363}
4364
4365bool Sema::ShouldDeleteDestructor(CXXDestructorDecl *DD) {
4366  CXXRecordDecl *RD = DD->getParent();
4367  assert(!RD->isDependentType() && "do deletion after instantiation");
4368  if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
4369    return false;
4370
4371  SourceLocation Loc = DD->getLocation();
4372
4373  // Do access control from the destructor
4374  ContextRAII CtorContext(*this, DD);
4375
4376  bool Union = RD->isUnion();
4377
4378  // We do this because we should never actually use an anonymous
4379  // union's destructor.
4380  if (Union && RD->isAnonymousStructOrUnion())
4381    return false;
4382
4383  // C++0x [class.dtor]p5
4384  //    A defaulted destructor for a class X is defined as deleted if:
4385  for (CXXRecordDecl::base_class_iterator BI = RD->bases_begin(),
4386                                          BE = RD->bases_end();
4387       BI != BE; ++BI) {
4388    // We'll handle this one later
4389    if (BI->isVirtual())
4390      continue;
4391
4392    CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
4393    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
4394    assert(BaseDtor && "base has no destructor");
4395
4396    // -- any direct or virtual base class has a deleted destructor or
4397    //    a destructor that is inaccessible from the defaulted destructor
4398    if (BaseDtor->isDeleted())
4399      return true;
4400    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
4401        AR_accessible)
4402      return true;
4403  }
4404
4405  for (CXXRecordDecl::base_class_iterator BI = RD->vbases_begin(),
4406                                          BE = RD->vbases_end();
4407       BI != BE; ++BI) {
4408    CXXRecordDecl *BaseDecl = BI->getType()->getAsCXXRecordDecl();
4409    CXXDestructorDecl *BaseDtor = LookupDestructor(BaseDecl);
4410    assert(BaseDtor && "base has no destructor");
4411
4412    // -- any direct or virtual base class has a deleted destructor or
4413    //    a destructor that is inaccessible from the defaulted destructor
4414    if (BaseDtor->isDeleted())
4415      return true;
4416    if (CheckDestructorAccess(Loc, BaseDtor, PDiag()) !=
4417        AR_accessible)
4418      return true;
4419  }
4420
4421  for (CXXRecordDecl::field_iterator FI = RD->field_begin(),
4422                                     FE = RD->field_end();
4423       FI != FE; ++FI) {
4424    QualType FieldType = Context.getBaseElementType(FI->getType());
4425    CXXRecordDecl *FieldRecord = FieldType->getAsCXXRecordDecl();
4426    if (FieldRecord) {
4427      if (FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {
4428         for (CXXRecordDecl::field_iterator UI = FieldRecord->field_begin(),
4429                                            UE = FieldRecord->field_end();
4430              UI != UE; ++UI) {
4431           QualType UnionFieldType = Context.getBaseElementType(FI->getType());
4432           CXXRecordDecl *UnionFieldRecord =
4433             UnionFieldType->getAsCXXRecordDecl();
4434
4435           // -- X is a union-like class that has a variant member with a non-
4436           //    trivial destructor.
4437           if (UnionFieldRecord && !UnionFieldRecord->hasTrivialDestructor())
4438             return true;
4439         }
4440      // Technically we are supposed to do this next check unconditionally.
4441      // But that makes absolutely no sense.
4442      } else {
4443        CXXDestructorDecl *FieldDtor = LookupDestructor(FieldRecord);
4444
4445        // -- any of the non-static data members has class type M (or array
4446        //    thereof) and M has a deleted destructor or a destructor that is
4447        //    inaccessible from the defaulted destructor
4448        if (FieldDtor->isDeleted())
4449          return true;
4450        if (CheckDestructorAccess(Loc, FieldDtor, PDiag()) !=
4451          AR_accessible)
4452        return true;
4453
4454        // -- X is a union-like class that has a variant member with a non-
4455        //    trivial destructor.
4456        if (Union && !FieldDtor->isTrivial())
4457          return true;
4458      }
4459    }
4460  }
4461
4462  if (DD->isVirtual()) {
4463    FunctionDecl *OperatorDelete = 0;
4464    DeclarationName Name =
4465      Context.DeclarationNames.getCXXOperatorName(OO_Delete);
4466    if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete,
4467          false))
4468      return true;
4469  }
4470
4471
4472  return false;
4473}
4474
4475/// \brief Data used with FindHiddenVirtualMethod
4476namespace {
4477  struct FindHiddenVirtualMethodData {
4478    Sema *S;
4479    CXXMethodDecl *Method;
4480    llvm::SmallPtrSet<const CXXMethodDecl *, 8> OverridenAndUsingBaseMethods;
4481    SmallVector<CXXMethodDecl *, 8> OverloadedMethods;
4482  };
4483}
4484
4485/// \brief Member lookup function that determines whether a given C++
4486/// method overloads virtual methods in a base class without overriding any,
4487/// to be used with CXXRecordDecl::lookupInBases().
4488static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
4489                                    CXXBasePath &Path,
4490                                    void *UserData) {
4491  RecordDecl *BaseRecord = Specifier->getType()->getAs<RecordType>()->getDecl();
4492
4493  FindHiddenVirtualMethodData &Data
4494    = *static_cast<FindHiddenVirtualMethodData*>(UserData);
4495
4496  DeclarationName Name = Data.Method->getDeclName();
4497  assert(Name.getNameKind() == DeclarationName::Identifier);
4498
4499  bool foundSameNameMethod = false;
4500  SmallVector<CXXMethodDecl *, 8> overloadedMethods;
4501  for (Path.Decls = BaseRecord->lookup(Name);
4502       Path.Decls.first != Path.Decls.second;
4503       ++Path.Decls.first) {
4504    NamedDecl *D = *Path.Decls.first;
4505    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
4506      MD = MD->getCanonicalDecl();
4507      foundSameNameMethod = true;
4508      // Interested only in hidden virtual methods.
4509      if (!MD->isVirtual())
4510        continue;
4511      // If the method we are checking overrides a method from its base
4512      // don't warn about the other overloaded methods.
4513      if (!Data.S->IsOverload(Data.Method, MD, false))
4514        return true;
4515      // Collect the overload only if its hidden.
4516      if (!Data.OverridenAndUsingBaseMethods.count(MD))
4517        overloadedMethods.push_back(MD);
4518    }
4519  }
4520
4521  if (foundSameNameMethod)
4522    Data.OverloadedMethods.append(overloadedMethods.begin(),
4523                                   overloadedMethods.end());
4524  return foundSameNameMethod;
4525}
4526
4527/// \brief See if a method overloads virtual methods in a base class without
4528/// overriding any.
4529void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) {
4530  if (Diags.getDiagnosticLevel(diag::warn_overloaded_virtual,
4531                               MD->getLocation()) == Diagnostic::Ignored)
4532    return;
4533  if (MD->getDeclName().getNameKind() != DeclarationName::Identifier)
4534    return;
4535
4536  CXXBasePaths Paths(/*FindAmbiguities=*/true, // true to look in all bases.
4537                     /*bool RecordPaths=*/false,
4538                     /*bool DetectVirtual=*/false);
4539  FindHiddenVirtualMethodData Data;
4540  Data.Method = MD;
4541  Data.S = this;
4542
4543  // Keep the base methods that were overriden or introduced in the subclass
4544  // by 'using' in a set. A base method not in this set is hidden.
4545  for (DeclContext::lookup_result res = DC->lookup(MD->getDeclName());
4546       res.first != res.second; ++res.first) {
4547    if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*res.first))
4548      for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
4549                                          E = MD->end_overridden_methods();
4550           I != E; ++I)
4551        Data.OverridenAndUsingBaseMethods.insert((*I)->getCanonicalDecl());
4552    if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*res.first))
4553      if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(shad->getTargetDecl()))
4554        Data.OverridenAndUsingBaseMethods.insert(MD->getCanonicalDecl());
4555  }
4556
4557  if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) &&
4558      !Data.OverloadedMethods.empty()) {
4559    Diag(MD->getLocation(), diag::warn_overloaded_virtual)
4560      << MD << (Data.OverloadedMethods.size() > 1);
4561
4562    for (unsigned i = 0, e = Data.OverloadedMethods.size(); i != e; ++i) {
4563      CXXMethodDecl *overloadedMD = Data.OverloadedMethods[i];
4564      Diag(overloadedMD->getLocation(),
4565           diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;
4566    }
4567  }
4568}
4569
4570void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
4571                                             Decl *TagDecl,
4572                                             SourceLocation LBrac,
4573                                             SourceLocation RBrac,
4574                                             AttributeList *AttrList) {
4575  if (!TagDecl)
4576    return;
4577
4578  AdjustDeclIfTemplate(TagDecl);
4579
4580  ActOnFields(S, RLoc, TagDecl,
4581              // strict aliasing violation!
4582              reinterpret_cast<Decl**>(FieldCollector->getCurFields()),
4583              FieldCollector->getCurNumFields(), LBrac, RBrac, AttrList);
4584
4585  CheckCompletedCXXClass(
4586                        dyn_cast_or_null<CXXRecordDecl>(TagDecl));
4587}
4588
4589/// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
4590/// special functions, such as the default constructor, copy
4591/// constructor, or destructor, to the given C++ class (C++
4592/// [special]p1).  This routine can only be executed just before the
4593/// definition of the class is complete.
4594void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
4595  if (!ClassDecl->hasUserDeclaredConstructor())
4596    ++ASTContext::NumImplicitDefaultConstructors;
4597
4598  if (!ClassDecl->hasUserDeclaredCopyConstructor())
4599    ++ASTContext::NumImplicitCopyConstructors;
4600
4601  if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
4602    ++ASTContext::NumImplicitCopyAssignmentOperators;
4603
4604    // If we have a dynamic class, then the copy assignment operator may be
4605    // virtual, so we have to declare it immediately. This ensures that, e.g.,
4606    // it shows up in the right place in the vtable and that we diagnose
4607    // problems with the implicit exception specification.
4608    if (ClassDecl->isDynamicClass())
4609      DeclareImplicitCopyAssignment(ClassDecl);
4610  }
4611
4612  if (!ClassDecl->hasUserDeclaredDestructor()) {
4613    ++ASTContext::NumImplicitDestructors;
4614
4615    // If we have a dynamic class, then the destructor may be virtual, so we
4616    // have to declare the destructor immediately. This ensures that, e.g., it
4617    // shows up in the right place in the vtable and that we diagnose problems
4618    // with the implicit exception specification.
4619    if (ClassDecl->isDynamicClass())
4620      DeclareImplicitDestructor(ClassDecl);
4621  }
4622}
4623
4624void Sema::ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D) {
4625  if (!D)
4626    return;
4627
4628  int NumParamList = D->getNumTemplateParameterLists();
4629  for (int i = 0; i < NumParamList; i++) {
4630    TemplateParameterList* Params = D->getTemplateParameterList(i);
4631    for (TemplateParameterList::iterator Param = Params->begin(),
4632                                      ParamEnd = Params->end();
4633          Param != ParamEnd; ++Param) {
4634      NamedDecl *Named = cast<NamedDecl>(*Param);
4635      if (Named->getDeclName()) {
4636        S->AddDecl(Named);
4637        IdResolver.AddDecl(Named);
4638      }
4639    }
4640  }
4641}
4642
4643void Sema::ActOnReenterTemplateScope(Scope *S, Decl *D) {
4644  if (!D)
4645    return;
4646
4647  TemplateParameterList *Params = 0;
4648  if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D))
4649    Params = Template->getTemplateParameters();
4650  else if (ClassTemplatePartialSpecializationDecl *PartialSpec
4651           = dyn_cast<ClassTemplatePartialSpecializationDecl>(D))
4652    Params = PartialSpec->getTemplateParameters();
4653  else
4654    return;
4655
4656  for (TemplateParameterList::iterator Param = Params->begin(),
4657                                    ParamEnd = Params->end();
4658       Param != ParamEnd; ++Param) {
4659    NamedDecl *Named = cast<NamedDecl>(*Param);
4660    if (Named->getDeclName()) {
4661      S->AddDecl(Named);
4662      IdResolver.AddDecl(Named);
4663    }
4664  }
4665}
4666
4667void Sema::ActOnStartDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
4668  if (!RecordD) return;
4669  AdjustDeclIfTemplate(RecordD);
4670  CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordD);
4671  PushDeclContext(S, Record);
4672}
4673
4674void Sema::ActOnFinishDelayedMemberDeclarations(Scope *S, Decl *RecordD) {
4675  if (!RecordD) return;
4676  PopDeclContext();
4677}
4678
4679/// ActOnStartDelayedCXXMethodDeclaration - We have completed
4680/// parsing a top-level (non-nested) C++ class, and we are now
4681/// parsing those parts of the given Method declaration that could
4682/// not be parsed earlier (C++ [class.mem]p2), such as default
4683/// arguments. This action should enter the scope of the given
4684/// Method declaration as if we had just parsed the qualified method
4685/// name. However, it should not bring the parameters into scope;
4686/// that will be performed by ActOnDelayedCXXMethodParameter.
4687void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
4688}
4689
4690/// ActOnDelayedCXXMethodParameter - We've already started a delayed
4691/// C++ method declaration. We're (re-)introducing the given
4692/// function parameter into scope for use in parsing later parts of
4693/// the method declaration. For example, we could see an
4694/// ActOnParamDefaultArgument event for this parameter.
4695void Sema::ActOnDelayedCXXMethodParameter(Scope *S, Decl *ParamD) {
4696  if (!ParamD)
4697    return;
4698
4699  ParmVarDecl *Param = cast<ParmVarDecl>(ParamD);
4700
4701  // If this parameter has an unparsed default argument, clear it out
4702  // to make way for the parsed default argument.
4703  if (Param->hasUnparsedDefaultArg())
4704    Param->setDefaultArg(0);
4705
4706  S->AddDecl(Param);
4707  if (Param->getDeclName())
4708    IdResolver.AddDecl(Param);
4709}
4710
4711/// ActOnFinishDelayedCXXMethodDeclaration - We have finished
4712/// processing the delayed method declaration for Method. The method
4713/// declaration is now considered finished. There may be a separate
4714/// ActOnStartOfFunctionDef action later (not necessarily
4715/// immediately!) for this method, if it was also defined inside the
4716/// class body.
4717void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, Decl *MethodD) {
4718  if (!MethodD)
4719    return;
4720
4721  AdjustDeclIfTemplate(MethodD);
4722
4723  FunctionDecl *Method = cast<FunctionDecl>(MethodD);
4724
4725  // Now that we have our default arguments, check the constructor
4726  // again. It could produce additional diagnostics or affect whether
4727  // the class has implicitly-declared destructors, among other
4728  // things.
4729  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
4730    CheckConstructor(Constructor);
4731
4732  // Check the default arguments, which we may have added.
4733  if (!Method->isInvalidDecl())
4734    CheckCXXDefaultArguments(Method);
4735}
4736
4737/// CheckConstructorDeclarator - Called by ActOnDeclarator to check
4738/// the well-formedness of the constructor declarator @p D with type @p
4739/// R. If there are any errors in the declarator, this routine will
4740/// emit diagnostics and set the invalid bit to true.  In any case, the type
4741/// will be updated to reflect a well-formed type for the constructor and
4742/// returned.
4743QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
4744                                          StorageClass &SC) {
4745  bool isVirtual = D.getDeclSpec().isVirtualSpecified();
4746
4747  // C++ [class.ctor]p3:
4748  //   A constructor shall not be virtual (10.3) or static (9.4). A
4749  //   constructor can be invoked for a const, volatile or const
4750  //   volatile object. A constructor shall not be declared const,
4751  //   volatile, or const volatile (9.3.2).
4752  if (isVirtual) {
4753    if (!D.isInvalidType())
4754      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
4755        << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
4756        << SourceRange(D.getIdentifierLoc());
4757    D.setInvalidType();
4758  }
4759  if (SC == SC_Static) {
4760    if (!D.isInvalidType())
4761      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
4762        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
4763        << SourceRange(D.getIdentifierLoc());
4764    D.setInvalidType();
4765    SC = SC_None;
4766  }
4767
4768  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
4769  if (FTI.TypeQuals != 0) {
4770    if (FTI.TypeQuals & Qualifiers::Const)
4771      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4772        << "const" << SourceRange(D.getIdentifierLoc());
4773    if (FTI.TypeQuals & Qualifiers::Volatile)
4774      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4775        << "volatile" << SourceRange(D.getIdentifierLoc());
4776    if (FTI.TypeQuals & Qualifiers::Restrict)
4777      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
4778        << "restrict" << SourceRange(D.getIdentifierLoc());
4779    D.setInvalidType();
4780  }
4781
4782  // C++0x [class.ctor]p4:
4783  //   A constructor shall not be declared with a ref-qualifier.
4784  if (FTI.hasRefQualifier()) {
4785    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor)
4786      << FTI.RefQualifierIsLValueRef
4787      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
4788    D.setInvalidType();
4789  }
4790
4791  // Rebuild the function type "R" without any type qualifiers (in
4792  // case any of the errors above fired) and with "void" as the
4793  // return type, since constructors don't have return types.
4794  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
4795  if (Proto->getResultType() == Context.VoidTy && !D.isInvalidType())
4796    return R;
4797
4798  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
4799  EPI.TypeQuals = 0;
4800  EPI.RefQualifier = RQ_None;
4801
4802  return Context.getFunctionType(Context.VoidTy, Proto->arg_type_begin(),
4803                                 Proto->getNumArgs(), EPI);
4804}
4805
4806/// CheckConstructor - Checks a fully-formed constructor for
4807/// well-formedness, issuing any diagnostics required. Returns true if
4808/// the constructor declarator is invalid.
4809void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
4810  CXXRecordDecl *ClassDecl
4811    = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
4812  if (!ClassDecl)
4813    return Constructor->setInvalidDecl();
4814
4815  // C++ [class.copy]p3:
4816  //   A declaration of a constructor for a class X is ill-formed if
4817  //   its first parameter is of type (optionally cv-qualified) X and
4818  //   either there are no other parameters or else all other
4819  //   parameters have default arguments.
4820  if (!Constructor->isInvalidDecl() &&
4821      ((Constructor->getNumParams() == 1) ||
4822       (Constructor->getNumParams() > 1 &&
4823        Constructor->getParamDecl(1)->hasDefaultArg())) &&
4824      Constructor->getTemplateSpecializationKind()
4825                                              != TSK_ImplicitInstantiation) {
4826    QualType ParamType = Constructor->getParamDecl(0)->getType();
4827    QualType ClassTy = Context.getTagDeclType(ClassDecl);
4828    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
4829      SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
4830      const char *ConstRef
4831        = Constructor->getParamDecl(0)->getIdentifier() ? "const &"
4832                                                        : " const &";
4833      Diag(ParamLoc, diag::err_constructor_byvalue_arg)
4834        << FixItHint::CreateInsertion(ParamLoc, ConstRef);
4835
4836      // FIXME: Rather that making the constructor invalid, we should endeavor
4837      // to fix the type.
4838      Constructor->setInvalidDecl();
4839    }
4840  }
4841}
4842
4843/// CheckDestructor - Checks a fully-formed destructor definition for
4844/// well-formedness, issuing any diagnostics required.  Returns true
4845/// on error.
4846bool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {
4847  CXXRecordDecl *RD = Destructor->getParent();
4848
4849  if (Destructor->isVirtual()) {
4850    SourceLocation Loc;
4851
4852    if (!Destructor->isImplicit())
4853      Loc = Destructor->getLocation();
4854    else
4855      Loc = RD->getLocation();
4856
4857    // If we have a virtual destructor, look up the deallocation function
4858    FunctionDecl *OperatorDelete = 0;
4859    DeclarationName Name =
4860    Context.DeclarationNames.getCXXOperatorName(OO_Delete);
4861    if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
4862      return true;
4863
4864    MarkDeclarationReferenced(Loc, OperatorDelete);
4865
4866    Destructor->setOperatorDelete(OperatorDelete);
4867  }
4868
4869  return false;
4870}
4871
4872static inline bool
4873FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
4874  return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
4875          FTI.ArgInfo[0].Param &&
4876          cast<ParmVarDecl>(FTI.ArgInfo[0].Param)->getType()->isVoidType());
4877}
4878
4879/// CheckDestructorDeclarator - Called by ActOnDeclarator to check
4880/// the well-formednes of the destructor declarator @p D with type @p
4881/// R. If there are any errors in the declarator, this routine will
4882/// emit diagnostics and set the declarator to invalid.  Even if this happens,
4883/// will be updated to reflect a well-formed type for the destructor and
4884/// returned.
4885QualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R,
4886                                         StorageClass& SC) {
4887  // C++ [class.dtor]p1:
4888  //   [...] A typedef-name that names a class is a class-name
4889  //   (7.1.3); however, a typedef-name that names a class shall not
4890  //   be used as the identifier in the declarator for a destructor
4891  //   declaration.
4892  QualType DeclaratorType = GetTypeFromParser(D.getName().DestructorName);
4893  if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())
4894    Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
4895      << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());
4896  else if (const TemplateSpecializationType *TST =
4897             DeclaratorType->getAs<TemplateSpecializationType>())
4898    if (TST->isTypeAlias())
4899      Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
4900        << DeclaratorType << 1;
4901
4902  // C++ [class.dtor]p2:
4903  //   A destructor is used to destroy objects of its class type. A
4904  //   destructor takes no parameters, and no return type can be
4905  //   specified for it (not even void). The address of a destructor
4906  //   shall not be taken. A destructor shall not be static. A
4907  //   destructor can be invoked for a const, volatile or const
4908  //   volatile object. A destructor shall not be declared const,
4909  //   volatile or const volatile (9.3.2).
4910  if (SC == SC_Static) {
4911    if (!D.isInvalidType())
4912      Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
4913        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
4914        << SourceRange(D.getIdentifierLoc())
4915        << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
4916
4917    SC = SC_None;
4918  }
4919  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
4920    // Destructors don't have return types, but the parser will
4921    // happily parse something like:
4922    //
4923    //   class X {
4924    //     float ~X();
4925    //   };
4926    //
4927    // The return type will be eliminated later.
4928    Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
4929      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
4930      << SourceRange(D.getIdentifierLoc());
4931  }
4932
4933  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
4934  if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
4935    if (FTI.TypeQuals & Qualifiers::Const)
4936      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
4937        << "const" << SourceRange(D.getIdentifierLoc());
4938    if (FTI.TypeQuals & Qualifiers::Volatile)
4939      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
4940        << "volatile" << SourceRange(D.getIdentifierLoc());
4941    if (FTI.TypeQuals & Qualifiers::Restrict)
4942      Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
4943        << "restrict" << SourceRange(D.getIdentifierLoc());
4944    D.setInvalidType();
4945  }
4946
4947  // C++0x [class.dtor]p2:
4948  //   A destructor shall not be declared with a ref-qualifier.
4949  if (FTI.hasRefQualifier()) {
4950    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor)
4951      << FTI.RefQualifierIsLValueRef
4952      << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());
4953    D.setInvalidType();
4954  }
4955
4956  // Make sure we don't have any parameters.
4957  if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
4958    Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
4959
4960    // Delete the parameters.
4961    FTI.freeArgs();
4962    D.setInvalidType();
4963  }
4964
4965  // Make sure the destructor isn't variadic.
4966  if (FTI.isVariadic) {
4967    Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
4968    D.setInvalidType();
4969  }
4970
4971  // Rebuild the function type "R" without any type qualifiers or
4972  // parameters (in case any of the errors above fired) and with
4973  // "void" as the return type, since destructors don't have return
4974  // types.
4975  if (!D.isInvalidType())
4976    return R;
4977
4978  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
4979  FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
4980  EPI.Variadic = false;
4981  EPI.TypeQuals = 0;
4982  EPI.RefQualifier = RQ_None;
4983  return Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
4984}
4985
4986/// CheckConversionDeclarator - Called by ActOnDeclarator to check the
4987/// well-formednes of the conversion function declarator @p D with
4988/// type @p R. If there are any errors in the declarator, this routine
4989/// will emit diagnostics and return true. Otherwise, it will return
4990/// false. Either way, the type @p R will be updated to reflect a
4991/// well-formed type for the conversion operator.
4992void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
4993                                     StorageClass& SC) {
4994  // C++ [class.conv.fct]p1:
4995  //   Neither parameter types nor return type can be specified. The
4996  //   type of a conversion function (8.3.5) is "function taking no
4997  //   parameter returning conversion-type-id."
4998  if (SC == SC_Static) {
4999    if (!D.isInvalidType())
5000      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
5001        << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
5002        << SourceRange(D.getIdentifierLoc());
5003    D.setInvalidType();
5004    SC = SC_None;
5005  }
5006
5007  QualType ConvType = GetTypeFromParser(D.getName().ConversionFunctionId);
5008
5009  if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
5010    // Conversion functions don't have return types, but the parser will
5011    // happily parse something like:
5012    //
5013    //   class X {
5014    //     float operator bool();
5015    //   };
5016    //
5017    // The return type will be changed later anyway.
5018    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
5019      << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
5020      << SourceRange(D.getIdentifierLoc());
5021    D.setInvalidType();
5022  }
5023
5024  const FunctionProtoType *Proto = R->getAs<FunctionProtoType>();
5025
5026  // Make sure we don't have any parameters.
5027  if (Proto->getNumArgs() > 0) {
5028    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
5029
5030    // Delete the parameters.
5031    D.getFunctionTypeInfo().freeArgs();
5032    D.setInvalidType();
5033  } else if (Proto->isVariadic()) {
5034    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
5035    D.setInvalidType();
5036  }
5037
5038  // Diagnose "&operator bool()" and other such nonsense.  This
5039  // is actually a gcc extension which we don't support.
5040  if (Proto->getResultType() != ConvType) {
5041    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl)
5042      << Proto->getResultType();
5043    D.setInvalidType();
5044    ConvType = Proto->getResultType();
5045  }
5046
5047  // C++ [class.conv.fct]p4:
5048  //   The conversion-type-id shall not represent a function type nor
5049  //   an array type.
5050  if (ConvType->isArrayType()) {
5051    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
5052    ConvType = Context.getPointerType(ConvType);
5053    D.setInvalidType();
5054  } else if (ConvType->isFunctionType()) {
5055    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
5056    ConvType = Context.getPointerType(ConvType);
5057    D.setInvalidType();
5058  }
5059
5060  // Rebuild the function type "R" without any parameters (in case any
5061  // of the errors above fired) and with the conversion type as the
5062  // return type.
5063  if (D.isInvalidType())
5064    R = Context.getFunctionType(ConvType, 0, 0, Proto->getExtProtoInfo());
5065
5066  // C++0x explicit conversion operators.
5067  if (D.getDeclSpec().isExplicitSpecified() && !getLangOptions().CPlusPlus0x)
5068    Diag(D.getDeclSpec().getExplicitSpecLoc(),
5069         diag::warn_explicit_conversion_functions)
5070      << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
5071}
5072
5073/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
5074/// the declaration of the given C++ conversion function. This routine
5075/// is responsible for recording the conversion function in the C++
5076/// class, if possible.
5077Decl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
5078  assert(Conversion && "Expected to receive a conversion function declaration");
5079
5080  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
5081
5082  // Make sure we aren't redeclaring the conversion function.
5083  QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
5084
5085  // C++ [class.conv.fct]p1:
5086  //   [...] A conversion function is never used to convert a
5087  //   (possibly cv-qualified) object to the (possibly cv-qualified)
5088  //   same object type (or a reference to it), to a (possibly
5089  //   cv-qualified) base class of that type (or a reference to it),
5090  //   or to (possibly cv-qualified) void.
5091  // FIXME: Suppress this warning if the conversion function ends up being a
5092  // virtual function that overrides a virtual function in a base class.
5093  QualType ClassType
5094    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
5095  if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
5096    ConvType = ConvTypeRef->getPointeeType();
5097  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared &&
5098      Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)
5099    /* Suppress diagnostics for instantiations. */;
5100  else if (ConvType->isRecordType()) {
5101    ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
5102    if (ConvType == ClassType)
5103      Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
5104        << ClassType;
5105    else if (IsDerivedFrom(ClassType, ConvType))
5106      Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
5107        <<  ClassType << ConvType;
5108  } else if (ConvType->isVoidType()) {
5109    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
5110      << ClassType << ConvType;
5111  }
5112
5113  if (FunctionTemplateDecl *ConversionTemplate
5114                                = Conversion->getDescribedFunctionTemplate())
5115    return ConversionTemplate;
5116
5117  return Conversion;
5118}
5119
5120//===----------------------------------------------------------------------===//
5121// Namespace Handling
5122//===----------------------------------------------------------------------===//
5123
5124
5125
5126/// ActOnStartNamespaceDef - This is called at the start of a namespace
5127/// definition.
5128Decl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
5129                                   SourceLocation InlineLoc,
5130                                   SourceLocation NamespaceLoc,
5131                                   SourceLocation IdentLoc,
5132                                   IdentifierInfo *II,
5133                                   SourceLocation LBrace,
5134                                   AttributeList *AttrList) {
5135  SourceLocation StartLoc = InlineLoc.isValid() ? InlineLoc : NamespaceLoc;
5136  // For anonymous namespace, take the location of the left brace.
5137  SourceLocation Loc = II ? IdentLoc : LBrace;
5138  NamespaceDecl *Namespc = NamespaceDecl::Create(Context, CurContext,
5139                                                 StartLoc, Loc, II);
5140  Namespc->setInline(InlineLoc.isValid());
5141
5142  Scope *DeclRegionScope = NamespcScope->getParent();
5143
5144  ProcessDeclAttributeList(DeclRegionScope, Namespc, AttrList);
5145
5146  if (const VisibilityAttr *Attr = Namespc->getAttr<VisibilityAttr>())
5147    PushNamespaceVisibilityAttr(Attr);
5148
5149  if (II) {
5150    // C++ [namespace.def]p2:
5151    //   The identifier in an original-namespace-definition shall not
5152    //   have been previously defined in the declarative region in
5153    //   which the original-namespace-definition appears. The
5154    //   identifier in an original-namespace-definition is the name of
5155    //   the namespace. Subsequently in that declarative region, it is
5156    //   treated as an original-namespace-name.
5157    //
5158    // Since namespace names are unique in their scope, and we don't
5159    // look through using directives, just look for any ordinary names.
5160
5161    const unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_Member |
5162      Decl::IDNS_Type | Decl::IDNS_Using | Decl::IDNS_Tag |
5163      Decl::IDNS_Namespace;
5164    NamedDecl *PrevDecl = 0;
5165    for (DeclContext::lookup_result R
5166            = CurContext->getRedeclContext()->lookup(II);
5167         R.first != R.second; ++R.first) {
5168      if ((*R.first)->getIdentifierNamespace() & IDNS) {
5169        PrevDecl = *R.first;
5170        break;
5171      }
5172    }
5173
5174    if (NamespaceDecl *OrigNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl)) {
5175      // This is an extended namespace definition.
5176      if (Namespc->isInline() != OrigNS->isInline()) {
5177        // inline-ness must match
5178        if (OrigNS->isInline()) {
5179          // The user probably just forgot the 'inline', so suggest that it
5180          // be added back.
5181          Diag(Namespc->getLocation(),
5182               diag::warn_inline_namespace_reopened_noninline)
5183            << FixItHint::CreateInsertion(NamespaceLoc, "inline ");
5184        } else {
5185          Diag(Namespc->getLocation(), diag::err_inline_namespace_mismatch)
5186            << Namespc->isInline();
5187        }
5188        Diag(OrigNS->getLocation(), diag::note_previous_definition);
5189
5190        // Recover by ignoring the new namespace's inline status.
5191        Namespc->setInline(OrigNS->isInline());
5192      }
5193
5194      // Attach this namespace decl to the chain of extended namespace
5195      // definitions.
5196      OrigNS->setNextNamespace(Namespc);
5197      Namespc->setOriginalNamespace(OrigNS->getOriginalNamespace());
5198
5199      // Remove the previous declaration from the scope.
5200      if (DeclRegionScope->isDeclScope(OrigNS)) {
5201        IdResolver.RemoveDecl(OrigNS);
5202        DeclRegionScope->RemoveDecl(OrigNS);
5203      }
5204    } else if (PrevDecl) {
5205      // This is an invalid name redefinition.
5206      Diag(Namespc->getLocation(), diag::err_redefinition_different_kind)
5207       << Namespc->getDeclName();
5208      Diag(PrevDecl->getLocation(), diag::note_previous_definition);
5209      Namespc->setInvalidDecl();
5210      // Continue on to push Namespc as current DeclContext and return it.
5211    } else if (II->isStr("std") &&
5212               CurContext->getRedeclContext()->isTranslationUnit()) {
5213      // This is the first "real" definition of the namespace "std", so update
5214      // our cache of the "std" namespace to point at this definition.
5215      if (NamespaceDecl *StdNS = getStdNamespace()) {
5216        // We had already defined a dummy namespace "std". Link this new
5217        // namespace definition to the dummy namespace "std".
5218        StdNS->setNextNamespace(Namespc);
5219        StdNS->setLocation(IdentLoc);
5220        Namespc->setOriginalNamespace(StdNS->getOriginalNamespace());
5221      }
5222
5223      // Make our StdNamespace cache point at the first real definition of the
5224      // "std" namespace.
5225      StdNamespace = Namespc;
5226
5227      // Add this instance of "std" to the set of known namespaces
5228      KnownNamespaces[Namespc] = false;
5229    } else if (!Namespc->isInline()) {
5230      // Since this is an "original" namespace, add it to the known set of
5231      // namespaces if it is not an inline namespace.
5232      KnownNamespaces[Namespc] = false;
5233    }
5234
5235    PushOnScopeChains(Namespc, DeclRegionScope);
5236  } else {
5237    // Anonymous namespaces.
5238    assert(Namespc->isAnonymousNamespace());
5239
5240    // Link the anonymous namespace into its parent.
5241    NamespaceDecl *PrevDecl;
5242    DeclContext *Parent = CurContext->getRedeclContext();
5243    if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(Parent)) {
5244      PrevDecl = TU->getAnonymousNamespace();
5245      TU->setAnonymousNamespace(Namespc);
5246    } else {
5247      NamespaceDecl *ND = cast<NamespaceDecl>(Parent);
5248      PrevDecl = ND->getAnonymousNamespace();
5249      ND->setAnonymousNamespace(Namespc);
5250    }
5251
5252    // Link the anonymous namespace with its previous declaration.
5253    if (PrevDecl) {
5254      assert(PrevDecl->isAnonymousNamespace());
5255      assert(!PrevDecl->getNextNamespace());
5256      Namespc->setOriginalNamespace(PrevDecl->getOriginalNamespace());
5257      PrevDecl->setNextNamespace(Namespc);
5258
5259      if (Namespc->isInline() != PrevDecl->isInline()) {
5260        // inline-ness must match
5261        Diag(Namespc->getLocation(), diag::err_inline_namespace_mismatch)
5262          << Namespc->isInline();
5263        Diag(PrevDecl->getLocation(), diag::note_previous_definition);
5264        Namespc->setInvalidDecl();
5265        // Recover by ignoring the new namespace's inline status.
5266        Namespc->setInline(PrevDecl->isInline());
5267      }
5268    }
5269
5270    CurContext->addDecl(Namespc);
5271
5272    // C++ [namespace.unnamed]p1.  An unnamed-namespace-definition
5273    //   behaves as if it were replaced by
5274    //     namespace unique { /* empty body */ }
5275    //     using namespace unique;
5276    //     namespace unique { namespace-body }
5277    //   where all occurrences of 'unique' in a translation unit are
5278    //   replaced by the same identifier and this identifier differs
5279    //   from all other identifiers in the entire program.
5280
5281    // We just create the namespace with an empty name and then add an
5282    // implicit using declaration, just like the standard suggests.
5283    //
5284    // CodeGen enforces the "universally unique" aspect by giving all
5285    // declarations semantically contained within an anonymous
5286    // namespace internal linkage.
5287
5288    if (!PrevDecl) {
5289      UsingDirectiveDecl* UD
5290        = UsingDirectiveDecl::Create(Context, CurContext,
5291                                     /* 'using' */ LBrace,
5292                                     /* 'namespace' */ SourceLocation(),
5293                                     /* qualifier */ NestedNameSpecifierLoc(),
5294                                     /* identifier */ SourceLocation(),
5295                                     Namespc,
5296                                     /* Ancestor */ CurContext);
5297      UD->setImplicit();
5298      CurContext->addDecl(UD);
5299    }
5300  }
5301
5302  // Although we could have an invalid decl (i.e. the namespace name is a
5303  // redefinition), push it as current DeclContext and try to continue parsing.
5304  // FIXME: We should be able to push Namespc here, so that the each DeclContext
5305  // for the namespace has the declarations that showed up in that particular
5306  // namespace definition.
5307  PushDeclContext(NamespcScope, Namespc);
5308  return Namespc;
5309}
5310
5311/// getNamespaceDecl - Returns the namespace a decl represents. If the decl
5312/// is a namespace alias, returns the namespace it points to.
5313static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
5314  if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
5315    return AD->getNamespace();
5316  return dyn_cast_or_null<NamespaceDecl>(D);
5317}
5318
5319/// ActOnFinishNamespaceDef - This callback is called after a namespace is
5320/// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
5321void Sema::ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace) {
5322  NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
5323  assert(Namespc && "Invalid parameter, expected NamespaceDecl");
5324  Namespc->setRBraceLoc(RBrace);
5325  PopDeclContext();
5326  if (Namespc->hasAttr<VisibilityAttr>())
5327    PopPragmaVisibility();
5328}
5329
5330CXXRecordDecl *Sema::getStdBadAlloc() const {
5331  return cast_or_null<CXXRecordDecl>(
5332                                  StdBadAlloc.get(Context.getExternalSource()));
5333}
5334
5335NamespaceDecl *Sema::getStdNamespace() const {
5336  return cast_or_null<NamespaceDecl>(
5337                                 StdNamespace.get(Context.getExternalSource()));
5338}
5339
5340/// \brief Retrieve the special "std" namespace, which may require us to
5341/// implicitly define the namespace.
5342NamespaceDecl *Sema::getOrCreateStdNamespace() {
5343  if (!StdNamespace) {
5344    // The "std" namespace has not yet been defined, so build one implicitly.
5345    StdNamespace = NamespaceDecl::Create(Context,
5346                                         Context.getTranslationUnitDecl(),
5347                                         SourceLocation(), SourceLocation(),
5348                                         &PP.getIdentifierTable().get("std"));
5349    getStdNamespace()->setImplicit(true);
5350  }
5351
5352  return getStdNamespace();
5353}
5354
5355/// \brief Determine whether a using statement is in a context where it will be
5356/// apply in all contexts.
5357static bool IsUsingDirectiveInToplevelContext(DeclContext *CurContext) {
5358  switch (CurContext->getDeclKind()) {
5359    case Decl::TranslationUnit:
5360      return true;
5361    case Decl::LinkageSpec:
5362      return IsUsingDirectiveInToplevelContext(CurContext->getParent());
5363    default:
5364      return false;
5365  }
5366}
5367
5368static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc,
5369                                       CXXScopeSpec &SS,
5370                                       SourceLocation IdentLoc,
5371                                       IdentifierInfo *Ident) {
5372  R.clear();
5373  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(),
5374                                               R.getLookupKind(), Sc, &SS, NULL,
5375                                               false, S.CTC_NoKeywords, NULL)) {
5376    if (Corrected.getCorrectionDeclAs<NamespaceDecl>() ||
5377        Corrected.getCorrectionDeclAs<NamespaceAliasDecl>()) {
5378      std::string CorrectedStr(Corrected.getAsString(S.getLangOptions()));
5379      std::string CorrectedQuotedStr(Corrected.getQuoted(S.getLangOptions()));
5380      if (DeclContext *DC = S.computeDeclContext(SS, false))
5381        S.Diag(IdentLoc, diag::err_using_directive_member_suggest)
5382          << Ident << DC << CorrectedQuotedStr << SS.getRange()
5383          << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
5384      else
5385        S.Diag(IdentLoc, diag::err_using_directive_suggest)
5386          << Ident << CorrectedQuotedStr
5387          << FixItHint::CreateReplacement(IdentLoc, CorrectedStr);
5388
5389      S.Diag(Corrected.getCorrectionDecl()->getLocation(),
5390           diag::note_namespace_defined_here) << CorrectedQuotedStr;
5391
5392      Ident = Corrected.getCorrectionAsIdentifierInfo();
5393      R.addDecl(Corrected.getCorrectionDecl());
5394      return true;
5395    }
5396    R.setLookupName(Ident);
5397  }
5398  return false;
5399}
5400
5401Decl *Sema::ActOnUsingDirective(Scope *S,
5402                                          SourceLocation UsingLoc,
5403                                          SourceLocation NamespcLoc,
5404                                          CXXScopeSpec &SS,
5405                                          SourceLocation IdentLoc,
5406                                          IdentifierInfo *NamespcName,
5407                                          AttributeList *AttrList) {
5408  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
5409  assert(NamespcName && "Invalid NamespcName.");
5410  assert(IdentLoc.isValid() && "Invalid NamespceName location.");
5411
5412  // This can only happen along a recovery path.
5413  while (S->getFlags() & Scope::TemplateParamScope)
5414    S = S->getParent();
5415  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
5416
5417  UsingDirectiveDecl *UDir = 0;
5418  NestedNameSpecifier *Qualifier = 0;
5419  if (SS.isSet())
5420    Qualifier = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
5421
5422  // Lookup namespace name.
5423  LookupResult R(*this, NamespcName, IdentLoc, LookupNamespaceName);
5424  LookupParsedName(R, S, &SS);
5425  if (R.isAmbiguous())
5426    return 0;
5427
5428  if (R.empty()) {
5429    R.clear();
5430    // Allow "using namespace std;" or "using namespace ::std;" even if
5431    // "std" hasn't been defined yet, for GCC compatibility.
5432    if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) &&
5433        NamespcName->isStr("std")) {
5434      Diag(IdentLoc, diag::ext_using_undefined_std);
5435      R.addDecl(getOrCreateStdNamespace());
5436      R.resolveKind();
5437    }
5438    // Otherwise, attempt typo correction.
5439    else TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, NamespcName);
5440  }
5441
5442  if (!R.empty()) {
5443    NamedDecl *Named = R.getFoundDecl();
5444    assert((isa<NamespaceDecl>(Named) || isa<NamespaceAliasDecl>(Named))
5445        && "expected namespace decl");
5446    // C++ [namespace.udir]p1:
5447    //   A using-directive specifies that the names in the nominated
5448    //   namespace can be used in the scope in which the
5449    //   using-directive appears after the using-directive. During
5450    //   unqualified name lookup (3.4.1), the names appear as if they
5451    //   were declared in the nearest enclosing namespace which
5452    //   contains both the using-directive and the nominated
5453    //   namespace. [Note: in this context, "contains" means "contains
5454    //   directly or indirectly". ]
5455
5456    // Find enclosing context containing both using-directive and
5457    // nominated namespace.
5458    NamespaceDecl *NS = getNamespaceDecl(Named);
5459    DeclContext *CommonAncestor = cast<DeclContext>(NS);
5460    while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
5461      CommonAncestor = CommonAncestor->getParent();
5462
5463    UDir = UsingDirectiveDecl::Create(Context, CurContext, UsingLoc, NamespcLoc,
5464                                      SS.getWithLocInContext(Context),
5465                                      IdentLoc, Named, CommonAncestor);
5466
5467    if (IsUsingDirectiveInToplevelContext(CurContext) &&
5468        !SourceMgr.isFromMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {
5469      Diag(IdentLoc, diag::warn_using_directive_in_header);
5470    }
5471
5472    PushUsingDirective(S, UDir);
5473  } else {
5474    Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
5475  }
5476
5477  // FIXME: We ignore attributes for now.
5478  return UDir;
5479}
5480
5481void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
5482  // If scope has associated entity, then using directive is at namespace
5483  // or translation unit scope. We add UsingDirectiveDecls, into
5484  // it's lookup structure.
5485  if (DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity()))
5486    Ctx->addDecl(UDir);
5487  else
5488    // Otherwise it is block-sope. using-directives will affect lookup
5489    // only to the end of scope.
5490    S->PushUsingDirective(UDir);
5491}
5492
5493
5494Decl *Sema::ActOnUsingDeclaration(Scope *S,
5495                                  AccessSpecifier AS,
5496                                  bool HasUsingKeyword,
5497                                  SourceLocation UsingLoc,
5498                                  CXXScopeSpec &SS,
5499                                  UnqualifiedId &Name,
5500                                  AttributeList *AttrList,
5501                                  bool IsTypeName,
5502                                  SourceLocation TypenameLoc) {
5503  assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
5504
5505  switch (Name.getKind()) {
5506  case UnqualifiedId::IK_ImplicitSelfParam:
5507  case UnqualifiedId::IK_Identifier:
5508  case UnqualifiedId::IK_OperatorFunctionId:
5509  case UnqualifiedId::IK_LiteralOperatorId:
5510  case UnqualifiedId::IK_ConversionFunctionId:
5511    break;
5512
5513  case UnqualifiedId::IK_ConstructorName:
5514  case UnqualifiedId::IK_ConstructorTemplateId:
5515    // C++0x inherited constructors.
5516    if (getLangOptions().CPlusPlus0x) break;
5517
5518    Diag(Name.getSourceRange().getBegin(), diag::err_using_decl_constructor)
5519      << SS.getRange();
5520    return 0;
5521
5522  case UnqualifiedId::IK_DestructorName:
5523    Diag(Name.getSourceRange().getBegin(), diag::err_using_decl_destructor)
5524      << SS.getRange();
5525    return 0;
5526
5527  case UnqualifiedId::IK_TemplateId:
5528    Diag(Name.getSourceRange().getBegin(), diag::err_using_decl_template_id)
5529      << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);
5530    return 0;
5531  }
5532
5533  DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name);
5534  DeclarationName TargetName = TargetNameInfo.getName();
5535  if (!TargetName)
5536    return 0;
5537
5538  // Warn about using declarations.
5539  // TODO: store that the declaration was written without 'using' and
5540  // talk about access decls instead of using decls in the
5541  // diagnostics.
5542  if (!HasUsingKeyword) {
5543    UsingLoc = Name.getSourceRange().getBegin();
5544
5545    Diag(UsingLoc, diag::warn_access_decl_deprecated)
5546      << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using ");
5547  }
5548
5549  if (DiagnoseUnexpandedParameterPack(SS, UPPC_UsingDeclaration) ||
5550      DiagnoseUnexpandedParameterPack(TargetNameInfo, UPPC_UsingDeclaration))
5551    return 0;
5552
5553  NamedDecl *UD = BuildUsingDeclaration(S, AS, UsingLoc, SS,
5554                                        TargetNameInfo, AttrList,
5555                                        /* IsInstantiation */ false,
5556                                        IsTypeName, TypenameLoc);
5557  if (UD)
5558    PushOnScopeChains(UD, S, /*AddToContext*/ false);
5559
5560  return UD;
5561}
5562
5563/// \brief Determine whether a using declaration considers the given
5564/// declarations as "equivalent", e.g., if they are redeclarations of
5565/// the same entity or are both typedefs of the same type.
5566static bool
5567IsEquivalentForUsingDecl(ASTContext &Context, NamedDecl *D1, NamedDecl *D2,
5568                         bool &SuppressRedeclaration) {
5569  if (D1->getCanonicalDecl() == D2->getCanonicalDecl()) {
5570    SuppressRedeclaration = false;
5571    return true;
5572  }
5573
5574  if (TypedefNameDecl *TD1 = dyn_cast<TypedefNameDecl>(D1))
5575    if (TypedefNameDecl *TD2 = dyn_cast<TypedefNameDecl>(D2)) {
5576      SuppressRedeclaration = true;
5577      return Context.hasSameType(TD1->getUnderlyingType(),
5578                                 TD2->getUnderlyingType());
5579    }
5580
5581  return false;
5582}
5583
5584
5585/// Determines whether to create a using shadow decl for a particular
5586/// decl, given the set of decls existing prior to this using lookup.
5587bool Sema::CheckUsingShadowDecl(UsingDecl *Using, NamedDecl *Orig,
5588                                const LookupResult &Previous) {
5589  // Diagnose finding a decl which is not from a base class of the
5590  // current class.  We do this now because there are cases where this
5591  // function will silently decide not to build a shadow decl, which
5592  // will pre-empt further diagnostics.
5593  //
5594  // We don't need to do this in C++0x because we do the check once on
5595  // the qualifier.
5596  //
5597  // FIXME: diagnose the following if we care enough:
5598  //   struct A { int foo; };
5599  //   struct B : A { using A::foo; };
5600  //   template <class T> struct C : A {};
5601  //   template <class T> struct D : C<T> { using B::foo; } // <---
5602  // This is invalid (during instantiation) in C++03 because B::foo
5603  // resolves to the using decl in B, which is not a base class of D<T>.
5604  // We can't diagnose it immediately because C<T> is an unknown
5605  // specialization.  The UsingShadowDecl in D<T> then points directly
5606  // to A::foo, which will look well-formed when we instantiate.
5607  // The right solution is to not collapse the shadow-decl chain.
5608  if (!getLangOptions().CPlusPlus0x && CurContext->isRecord()) {
5609    DeclContext *OrigDC = Orig->getDeclContext();
5610
5611    // Handle enums and anonymous structs.
5612    if (isa<EnumDecl>(OrigDC)) OrigDC = OrigDC->getParent();
5613    CXXRecordDecl *OrigRec = cast<CXXRecordDecl>(OrigDC);
5614    while (OrigRec->isAnonymousStructOrUnion())
5615      OrigRec = cast<CXXRecordDecl>(OrigRec->getDeclContext());
5616
5617    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {
5618      if (OrigDC == CurContext) {
5619        Diag(Using->getLocation(),
5620             diag::err_using_decl_nested_name_specifier_is_current_class)
5621          << Using->getQualifierLoc().getSourceRange();
5622        Diag(Orig->getLocation(), diag::note_using_decl_target);
5623        return true;
5624      }
5625
5626      Diag(Using->getQualifierLoc().getBeginLoc(),
5627           diag::err_using_decl_nested_name_specifier_is_not_base_class)
5628        << Using->getQualifier()
5629        << cast<CXXRecordDecl>(CurContext)
5630        << Using->getQualifierLoc().getSourceRange();
5631      Diag(Orig->getLocation(), diag::note_using_decl_target);
5632      return true;
5633    }
5634  }
5635
5636  if (Previous.empty()) return false;
5637
5638  NamedDecl *Target = Orig;
5639  if (isa<UsingShadowDecl>(Target))
5640    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
5641
5642  // If the target happens to be one of the previous declarations, we
5643  // don't have a conflict.
5644  //
5645  // FIXME: but we might be increasing its access, in which case we
5646  // should redeclare it.
5647  NamedDecl *NonTag = 0, *Tag = 0;
5648  for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
5649         I != E; ++I) {
5650    NamedDecl *D = (*I)->getUnderlyingDecl();
5651    bool Result;
5652    if (IsEquivalentForUsingDecl(Context, D, Target, Result))
5653      return Result;
5654
5655    (isa<TagDecl>(D) ? Tag : NonTag) = D;
5656  }
5657
5658  if (Target->isFunctionOrFunctionTemplate()) {
5659    FunctionDecl *FD;
5660    if (isa<FunctionTemplateDecl>(Target))
5661      FD = cast<FunctionTemplateDecl>(Target)->getTemplatedDecl();
5662    else
5663      FD = cast<FunctionDecl>(Target);
5664
5665    NamedDecl *OldDecl = 0;
5666    switch (CheckOverload(0, FD, Previous, OldDecl, /*IsForUsingDecl*/ true)) {
5667    case Ovl_Overload:
5668      return false;
5669
5670    case Ovl_NonFunction:
5671      Diag(Using->getLocation(), diag::err_using_decl_conflict);
5672      break;
5673
5674    // We found a decl with the exact signature.
5675    case Ovl_Match:
5676      // If we're in a record, we want to hide the target, so we
5677      // return true (without a diagnostic) to tell the caller not to
5678      // build a shadow decl.
5679      if (CurContext->isRecord())
5680        return true;
5681
5682      // If we're not in a record, this is an error.
5683      Diag(Using->getLocation(), diag::err_using_decl_conflict);
5684      break;
5685    }
5686
5687    Diag(Target->getLocation(), diag::note_using_decl_target);
5688    Diag(OldDecl->getLocation(), diag::note_using_decl_conflict);
5689    return true;
5690  }
5691
5692  // Target is not a function.
5693
5694  if (isa<TagDecl>(Target)) {
5695    // No conflict between a tag and a non-tag.
5696    if (!Tag) return false;
5697
5698    Diag(Using->getLocation(), diag::err_using_decl_conflict);
5699    Diag(Target->getLocation(), diag::note_using_decl_target);
5700    Diag(Tag->getLocation(), diag::note_using_decl_conflict);
5701    return true;
5702  }
5703
5704  // No conflict between a tag and a non-tag.
5705  if (!NonTag) return false;
5706
5707  Diag(Using->getLocation(), diag::err_using_decl_conflict);
5708  Diag(Target->getLocation(), diag::note_using_decl_target);
5709  Diag(NonTag->getLocation(), diag::note_using_decl_conflict);
5710  return true;
5711}
5712
5713/// Builds a shadow declaration corresponding to a 'using' declaration.
5714UsingShadowDecl *Sema::BuildUsingShadowDecl(Scope *S,
5715                                            UsingDecl *UD,
5716                                            NamedDecl *Orig) {
5717
5718  // If we resolved to another shadow declaration, just coalesce them.
5719  NamedDecl *Target = Orig;
5720  if (isa<UsingShadowDecl>(Target)) {
5721    Target = cast<UsingShadowDecl>(Target)->getTargetDecl();
5722    assert(!isa<UsingShadowDecl>(Target) && "nested shadow declaration");
5723  }
5724
5725  UsingShadowDecl *Shadow
5726    = UsingShadowDecl::Create(Context, CurContext,
5727                              UD->getLocation(), UD, Target);
5728  UD->addShadowDecl(Shadow);
5729
5730  Shadow->setAccess(UD->getAccess());
5731  if (Orig->isInvalidDecl() || UD->isInvalidDecl())
5732    Shadow->setInvalidDecl();
5733
5734  if (S)
5735    PushOnScopeChains(Shadow, S);
5736  else
5737    CurContext->addDecl(Shadow);
5738
5739
5740  return Shadow;
5741}
5742
5743/// Hides a using shadow declaration.  This is required by the current
5744/// using-decl implementation when a resolvable using declaration in a
5745/// class is followed by a declaration which would hide or override
5746/// one or more of the using decl's targets; for example:
5747///
5748///   struct Base { void foo(int); };
5749///   struct Derived : Base {
5750///     using Base::foo;
5751///     void foo(int);
5752///   };
5753///
5754/// The governing language is C++03 [namespace.udecl]p12:
5755///
5756///   When a using-declaration brings names from a base class into a
5757///   derived class scope, member functions in the derived class
5758///   override and/or hide member functions with the same name and
5759///   parameter types in a base class (rather than conflicting).
5760///
5761/// There are two ways to implement this:
5762///   (1) optimistically create shadow decls when they're not hidden
5763///       by existing declarations, or
5764///   (2) don't create any shadow decls (or at least don't make them
5765///       visible) until we've fully parsed/instantiated the class.
5766/// The problem with (1) is that we might have to retroactively remove
5767/// a shadow decl, which requires several O(n) operations because the
5768/// decl structures are (very reasonably) not designed for removal.
5769/// (2) avoids this but is very fiddly and phase-dependent.
5770void Sema::HideUsingShadowDecl(Scope *S, UsingShadowDecl *Shadow) {
5771  if (Shadow->getDeclName().getNameKind() ==
5772        DeclarationName::CXXConversionFunctionName)
5773    cast<CXXRecordDecl>(Shadow->getDeclContext())->removeConversion(Shadow);
5774
5775  // Remove it from the DeclContext...
5776  Shadow->getDeclContext()->removeDecl(Shadow);
5777
5778  // ...and the scope, if applicable...
5779  if (S) {
5780    S->RemoveDecl(Shadow);
5781    IdResolver.RemoveDecl(Shadow);
5782  }
5783
5784  // ...and the using decl.
5785  Shadow->getUsingDecl()->removeShadowDecl(Shadow);
5786
5787  // TODO: complain somehow if Shadow was used.  It shouldn't
5788  // be possible for this to happen, because...?
5789}
5790
5791/// Builds a using declaration.
5792///
5793/// \param IsInstantiation - Whether this call arises from an
5794///   instantiation of an unresolved using declaration.  We treat
5795///   the lookup differently for these declarations.
5796NamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
5797                                       SourceLocation UsingLoc,
5798                                       CXXScopeSpec &SS,
5799                                       const DeclarationNameInfo &NameInfo,
5800                                       AttributeList *AttrList,
5801                                       bool IsInstantiation,
5802                                       bool IsTypeName,
5803                                       SourceLocation TypenameLoc) {
5804  assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
5805  SourceLocation IdentLoc = NameInfo.getLoc();
5806  assert(IdentLoc.isValid() && "Invalid TargetName location.");
5807
5808  // FIXME: We ignore attributes for now.
5809
5810  if (SS.isEmpty()) {
5811    Diag(IdentLoc, diag::err_using_requires_qualname);
5812    return 0;
5813  }
5814
5815  // Do the redeclaration lookup in the current scope.
5816  LookupResult Previous(*this, NameInfo, LookupUsingDeclName,
5817                        ForRedeclaration);
5818  Previous.setHideTags(false);
5819  if (S) {
5820    LookupName(Previous, S);
5821
5822    // It is really dumb that we have to do this.
5823    LookupResult::Filter F = Previous.makeFilter();
5824    while (F.hasNext()) {
5825      NamedDecl *D = F.next();
5826      if (!isDeclInScope(D, CurContext, S))
5827        F.erase();
5828    }
5829    F.done();
5830  } else {
5831    assert(IsInstantiation && "no scope in non-instantiation");
5832    assert(CurContext->isRecord() && "scope not record in instantiation");
5833    LookupQualifiedName(Previous, CurContext);
5834  }
5835
5836  // Check for invalid redeclarations.
5837  if (CheckUsingDeclRedeclaration(UsingLoc, IsTypeName, SS, IdentLoc, Previous))
5838    return 0;
5839
5840  // Check for bad qualifiers.
5841  if (CheckUsingDeclQualifier(UsingLoc, SS, IdentLoc))
5842    return 0;
5843
5844  DeclContext *LookupContext = computeDeclContext(SS);
5845  NamedDecl *D;
5846  NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
5847  if (!LookupContext) {
5848    if (IsTypeName) {
5849      // FIXME: not all declaration name kinds are legal here
5850      D = UnresolvedUsingTypenameDecl::Create(Context, CurContext,
5851                                              UsingLoc, TypenameLoc,
5852                                              QualifierLoc,
5853                                              IdentLoc, NameInfo.getName());
5854    } else {
5855      D = UnresolvedUsingValueDecl::Create(Context, CurContext, UsingLoc,
5856                                           QualifierLoc, NameInfo);
5857    }
5858  } else {
5859    D = UsingDecl::Create(Context, CurContext, UsingLoc, QualifierLoc,
5860                          NameInfo, IsTypeName);
5861  }
5862  D->setAccess(AS);
5863  CurContext->addDecl(D);
5864
5865  if (!LookupContext) return D;
5866  UsingDecl *UD = cast<UsingDecl>(D);
5867
5868  if (RequireCompleteDeclContext(SS, LookupContext)) {
5869    UD->setInvalidDecl();
5870    return UD;
5871  }
5872
5873  // Constructor inheriting using decls get special treatment.
5874  if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
5875    if (CheckInheritedConstructorUsingDecl(UD))
5876      UD->setInvalidDecl();
5877    return UD;
5878  }
5879
5880  // Otherwise, look up the target name.
5881
5882  LookupResult R(*this, NameInfo, LookupOrdinaryName);
5883  R.setUsingDeclaration(true);
5884
5885  // Unlike most lookups, we don't always want to hide tag
5886  // declarations: tag names are visible through the using declaration
5887  // even if hidden by ordinary names, *except* in a dependent context
5888  // where it's important for the sanity of two-phase lookup.
5889  if (!IsInstantiation)
5890    R.setHideTags(false);
5891
5892  LookupQualifiedName(R, LookupContext);
5893
5894  if (R.empty()) {
5895    Diag(IdentLoc, diag::err_no_member)
5896      << NameInfo.getName() << LookupContext << SS.getRange();
5897    UD->setInvalidDecl();
5898    return UD;
5899  }
5900
5901  if (R.isAmbiguous()) {
5902    UD->setInvalidDecl();
5903    return UD;
5904  }
5905
5906  if (IsTypeName) {
5907    // If we asked for a typename and got a non-type decl, error out.
5908    if (!R.getAsSingle<TypeDecl>()) {
5909      Diag(IdentLoc, diag::err_using_typename_non_type);
5910      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
5911        Diag((*I)->getUnderlyingDecl()->getLocation(),
5912             diag::note_using_decl_target);
5913      UD->setInvalidDecl();
5914      return UD;
5915    }
5916  } else {
5917    // If we asked for a non-typename and we got a type, error out,
5918    // but only if this is an instantiation of an unresolved using
5919    // decl.  Otherwise just silently find the type name.
5920    if (IsInstantiation && R.getAsSingle<TypeDecl>()) {
5921      Diag(IdentLoc, diag::err_using_dependent_value_is_type);
5922      Diag(R.getFoundDecl()->getLocation(), diag::note_using_decl_target);
5923      UD->setInvalidDecl();
5924      return UD;
5925    }
5926  }
5927
5928  // C++0x N2914 [namespace.udecl]p6:
5929  // A using-declaration shall not name a namespace.
5930  if (R.getAsSingle<NamespaceDecl>()) {
5931    Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace)
5932      << SS.getRange();
5933    UD->setInvalidDecl();
5934    return UD;
5935  }
5936
5937  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
5938    if (!CheckUsingShadowDecl(UD, *I, Previous))
5939      BuildUsingShadowDecl(S, UD, *I);
5940  }
5941
5942  return UD;
5943}
5944
5945/// Additional checks for a using declaration referring to a constructor name.
5946bool Sema::CheckInheritedConstructorUsingDecl(UsingDecl *UD) {
5947  if (UD->isTypeName()) {
5948    // FIXME: Cannot specify typename when specifying constructor
5949    return true;
5950  }
5951
5952  const Type *SourceType = UD->getQualifier()->getAsType();
5953  assert(SourceType &&
5954         "Using decl naming constructor doesn't have type in scope spec.");
5955  CXXRecordDecl *TargetClass = cast<CXXRecordDecl>(CurContext);
5956
5957  // Check whether the named type is a direct base class.
5958  CanQualType CanonicalSourceType = SourceType->getCanonicalTypeUnqualified();
5959  CXXRecordDecl::base_class_iterator BaseIt, BaseE;
5960  for (BaseIt = TargetClass->bases_begin(), BaseE = TargetClass->bases_end();
5961       BaseIt != BaseE; ++BaseIt) {
5962    CanQualType BaseType = BaseIt->getType()->getCanonicalTypeUnqualified();
5963    if (CanonicalSourceType == BaseType)
5964      break;
5965  }
5966
5967  if (BaseIt == BaseE) {
5968    // Did not find SourceType in the bases.
5969    Diag(UD->getUsingLocation(),
5970         diag::err_using_decl_constructor_not_in_direct_base)
5971      << UD->getNameInfo().getSourceRange()
5972      << QualType(SourceType, 0) << TargetClass;
5973    return true;
5974  }
5975
5976  BaseIt->setInheritConstructors();
5977
5978  return false;
5979}
5980
5981/// Checks that the given using declaration is not an invalid
5982/// redeclaration.  Note that this is checking only for the using decl
5983/// itself, not for any ill-formedness among the UsingShadowDecls.
5984bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc,
5985                                       bool isTypeName,
5986                                       const CXXScopeSpec &SS,
5987                                       SourceLocation NameLoc,
5988                                       const LookupResult &Prev) {
5989  // C++03 [namespace.udecl]p8:
5990  // C++0x [namespace.udecl]p10:
5991  //   A using-declaration is a declaration and can therefore be used
5992  //   repeatedly where (and only where) multiple declarations are
5993  //   allowed.
5994  //
5995  // That's in non-member contexts.
5996  if (!CurContext->getRedeclContext()->isRecord())
5997    return false;
5998
5999  NestedNameSpecifier *Qual
6000    = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
6001
6002  for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {
6003    NamedDecl *D = *I;
6004
6005    bool DTypename;
6006    NestedNameSpecifier *DQual;
6007    if (UsingDecl *UD = dyn_cast<UsingDecl>(D)) {
6008      DTypename = UD->isTypeName();
6009      DQual = UD->getQualifier();
6010    } else if (UnresolvedUsingValueDecl *UD
6011                 = dyn_cast<UnresolvedUsingValueDecl>(D)) {
6012      DTypename = false;
6013      DQual = UD->getQualifier();
6014    } else if (UnresolvedUsingTypenameDecl *UD
6015                 = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
6016      DTypename = true;
6017      DQual = UD->getQualifier();
6018    } else continue;
6019
6020    // using decls differ if one says 'typename' and the other doesn't.
6021    // FIXME: non-dependent using decls?
6022    if (isTypeName != DTypename) continue;
6023
6024    // using decls differ if they name different scopes (but note that
6025    // template instantiation can cause this check to trigger when it
6026    // didn't before instantiation).
6027    if (Context.getCanonicalNestedNameSpecifier(Qual) !=
6028        Context.getCanonicalNestedNameSpecifier(DQual))
6029      continue;
6030
6031    Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();
6032    Diag(D->getLocation(), diag::note_using_decl) << 1;
6033    return true;
6034  }
6035
6036  return false;
6037}
6038
6039
6040/// Checks that the given nested-name qualifier used in a using decl
6041/// in the current context is appropriately related to the current
6042/// scope.  If an error is found, diagnoses it and returns true.
6043bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc,
6044                                   const CXXScopeSpec &SS,
6045                                   SourceLocation NameLoc) {
6046  DeclContext *NamedContext = computeDeclContext(SS);
6047
6048  if (!CurContext->isRecord()) {
6049    // C++03 [namespace.udecl]p3:
6050    // C++0x [namespace.udecl]p8:
6051    //   A using-declaration for a class member shall be a member-declaration.
6052
6053    // If we weren't able to compute a valid scope, it must be a
6054    // dependent class scope.
6055    if (!NamedContext || NamedContext->isRecord()) {
6056      Diag(NameLoc, diag::err_using_decl_can_not_refer_to_class_member)
6057        << SS.getRange();
6058      return true;
6059    }
6060
6061    // Otherwise, everything is known to be fine.
6062    return false;
6063  }
6064
6065  // The current scope is a record.
6066
6067  // If the named context is dependent, we can't decide much.
6068  if (!NamedContext) {
6069    // FIXME: in C++0x, we can diagnose if we can prove that the
6070    // nested-name-specifier does not refer to a base class, which is
6071    // still possible in some cases.
6072
6073    // Otherwise we have to conservatively report that things might be
6074    // okay.
6075    return false;
6076  }
6077
6078  if (!NamedContext->isRecord()) {
6079    // Ideally this would point at the last name in the specifier,
6080    // but we don't have that level of source info.
6081    Diag(SS.getRange().getBegin(),
6082         diag::err_using_decl_nested_name_specifier_is_not_class)
6083      << (NestedNameSpecifier*) SS.getScopeRep() << SS.getRange();
6084    return true;
6085  }
6086
6087  if (!NamedContext->isDependentContext() &&
6088      RequireCompleteDeclContext(const_cast<CXXScopeSpec&>(SS), NamedContext))
6089    return true;
6090
6091  if (getLangOptions().CPlusPlus0x) {
6092    // C++0x [namespace.udecl]p3:
6093    //   In a using-declaration used as a member-declaration, the
6094    //   nested-name-specifier shall name a base class of the class
6095    //   being defined.
6096
6097    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(
6098                                 cast<CXXRecordDecl>(NamedContext))) {
6099      if (CurContext == NamedContext) {
6100        Diag(NameLoc,
6101             diag::err_using_decl_nested_name_specifier_is_current_class)
6102          << SS.getRange();
6103        return true;
6104      }
6105
6106      Diag(SS.getRange().getBegin(),
6107           diag::err_using_decl_nested_name_specifier_is_not_base_class)
6108        << (NestedNameSpecifier*) SS.getScopeRep()
6109        << cast<CXXRecordDecl>(CurContext)
6110        << SS.getRange();
6111      return true;
6112    }
6113
6114    return false;
6115  }
6116
6117  // C++03 [namespace.udecl]p4:
6118  //   A using-declaration used as a member-declaration shall refer
6119  //   to a member of a base class of the class being defined [etc.].
6120
6121  // Salient point: SS doesn't have to name a base class as long as
6122  // lookup only finds members from base classes.  Therefore we can
6123  // diagnose here only if we can prove that that can't happen,
6124  // i.e. if the class hierarchies provably don't intersect.
6125
6126  // TODO: it would be nice if "definitely valid" results were cached
6127  // in the UsingDecl and UsingShadowDecl so that these checks didn't
6128  // need to be repeated.
6129
6130  struct UserData {
6131    llvm::DenseSet<const CXXRecordDecl*> Bases;
6132
6133    static bool collect(const CXXRecordDecl *Base, void *OpaqueData) {
6134      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
6135      Data->Bases.insert(Base);
6136      return true;
6137    }
6138
6139    bool hasDependentBases(const CXXRecordDecl *Class) {
6140      return !Class->forallBases(collect, this);
6141    }
6142
6143    /// Returns true if the base is dependent or is one of the
6144    /// accumulated base classes.
6145    static bool doesNotContain(const CXXRecordDecl *Base, void *OpaqueData) {
6146      UserData *Data = reinterpret_cast<UserData*>(OpaqueData);
6147      return !Data->Bases.count(Base);
6148    }
6149
6150    bool mightShareBases(const CXXRecordDecl *Class) {
6151      return Bases.count(Class) || !Class->forallBases(doesNotContain, this);
6152    }
6153  };
6154
6155  UserData Data;
6156
6157  // Returns false if we find a dependent base.
6158  if (Data.hasDependentBases(cast<CXXRecordDecl>(CurContext)))
6159    return false;
6160
6161  // Returns false if the class has a dependent base or if it or one
6162  // of its bases is present in the base set of the current context.
6163  if (Data.mightShareBases(cast<CXXRecordDecl>(NamedContext)))
6164    return false;
6165
6166  Diag(SS.getRange().getBegin(),
6167       diag::err_using_decl_nested_name_specifier_is_not_base_class)
6168    << (NestedNameSpecifier*) SS.getScopeRep()
6169    << cast<CXXRecordDecl>(CurContext)
6170    << SS.getRange();
6171
6172  return true;
6173}
6174
6175Decl *Sema::ActOnAliasDeclaration(Scope *S,
6176                                  AccessSpecifier AS,
6177                                  MultiTemplateParamsArg TemplateParamLists,
6178                                  SourceLocation UsingLoc,
6179                                  UnqualifiedId &Name,
6180                                  TypeResult Type) {
6181  // Skip up to the relevant declaration scope.
6182  while (S->getFlags() & Scope::TemplateParamScope)
6183    S = S->getParent();
6184  assert((S->getFlags() & Scope::DeclScope) &&
6185         "got alias-declaration outside of declaration scope");
6186
6187  if (Type.isInvalid())
6188    return 0;
6189
6190  bool Invalid = false;
6191  DeclarationNameInfo NameInfo = GetNameFromUnqualifiedId(Name);
6192  TypeSourceInfo *TInfo = 0;
6193  GetTypeFromParser(Type.get(), &TInfo);
6194
6195  if (DiagnoseClassNameShadow(CurContext, NameInfo))
6196    return 0;
6197
6198  if (DiagnoseUnexpandedParameterPack(Name.StartLocation, TInfo,
6199                                      UPPC_DeclarationType)) {
6200    Invalid = true;
6201    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
6202                                             TInfo->getTypeLoc().getBeginLoc());
6203  }
6204
6205  LookupResult Previous(*this, NameInfo, LookupOrdinaryName, ForRedeclaration);
6206  LookupName(Previous, S);
6207
6208  // Warn about shadowing the name of a template parameter.
6209  if (Previous.isSingleResult() &&
6210      Previous.getFoundDecl()->isTemplateParameter()) {
6211    if (DiagnoseTemplateParameterShadow(Name.StartLocation,
6212                                        Previous.getFoundDecl()))
6213      Invalid = true;
6214    Previous.clear();
6215  }
6216
6217  assert(Name.Kind == UnqualifiedId::IK_Identifier &&
6218         "name in alias declaration must be an identifier");
6219  TypeAliasDecl *NewTD = TypeAliasDecl::Create(Context, CurContext, UsingLoc,
6220                                               Name.StartLocation,
6221                                               Name.Identifier, TInfo);
6222
6223  NewTD->setAccess(AS);
6224
6225  if (Invalid)
6226    NewTD->setInvalidDecl();
6227
6228  CheckTypedefForVariablyModifiedType(S, NewTD);
6229  Invalid |= NewTD->isInvalidDecl();
6230
6231  bool Redeclaration = false;
6232
6233  NamedDecl *NewND;
6234  if (TemplateParamLists.size()) {
6235    TypeAliasTemplateDecl *OldDecl = 0;
6236    TemplateParameterList *OldTemplateParams = 0;
6237
6238    if (TemplateParamLists.size() != 1) {
6239      Diag(UsingLoc, diag::err_alias_template_extra_headers)
6240        << SourceRange(TemplateParamLists.get()[1]->getTemplateLoc(),
6241         TemplateParamLists.get()[TemplateParamLists.size()-1]->getRAngleLoc());
6242    }
6243    TemplateParameterList *TemplateParams = TemplateParamLists.get()[0];
6244
6245    // Only consider previous declarations in the same scope.
6246    FilterLookupForScope(Previous, CurContext, S, /*ConsiderLinkage*/false,
6247                         /*ExplicitInstantiationOrSpecialization*/false);
6248    if (!Previous.empty()) {
6249      Redeclaration = true;
6250
6251      OldDecl = Previous.getAsSingle<TypeAliasTemplateDecl>();
6252      if (!OldDecl && !Invalid) {
6253        Diag(UsingLoc, diag::err_redefinition_different_kind)
6254          << Name.Identifier;
6255
6256        NamedDecl *OldD = Previous.getRepresentativeDecl();
6257        if (OldD->getLocation().isValid())
6258          Diag(OldD->getLocation(), diag::note_previous_definition);
6259
6260        Invalid = true;
6261      }
6262
6263      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {
6264        if (TemplateParameterListsAreEqual(TemplateParams,
6265                                           OldDecl->getTemplateParameters(),
6266                                           /*Complain=*/true,
6267                                           TPL_TemplateMatch))
6268          OldTemplateParams = OldDecl->getTemplateParameters();
6269        else
6270          Invalid = true;
6271
6272        TypeAliasDecl *OldTD = OldDecl->getTemplatedDecl();
6273        if (!Invalid &&
6274            !Context.hasSameType(OldTD->getUnderlyingType(),
6275                                 NewTD->getUnderlyingType())) {
6276          // FIXME: The C++0x standard does not clearly say this is ill-formed,
6277          // but we can't reasonably accept it.
6278          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef)
6279            << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();
6280          if (OldTD->getLocation().isValid())
6281            Diag(OldTD->getLocation(), diag::note_previous_definition);
6282          Invalid = true;
6283        }
6284      }
6285    }
6286
6287    // Merge any previous default template arguments into our parameters,
6288    // and check the parameter list.
6289    if (CheckTemplateParameterList(TemplateParams, OldTemplateParams,
6290                                   TPC_TypeAliasTemplate))
6291      return 0;
6292
6293    TypeAliasTemplateDecl *NewDecl =
6294      TypeAliasTemplateDecl::Create(Context, CurContext, UsingLoc,
6295                                    Name.Identifier, TemplateParams,
6296                                    NewTD);
6297
6298    NewDecl->setAccess(AS);
6299
6300    if (Invalid)
6301      NewDecl->setInvalidDecl();
6302    else if (OldDecl)
6303      NewDecl->setPreviousDeclaration(OldDecl);
6304
6305    NewND = NewDecl;
6306  } else {
6307    ActOnTypedefNameDecl(S, CurContext, NewTD, Previous, Redeclaration);
6308    NewND = NewTD;
6309  }
6310
6311  if (!Redeclaration)
6312    PushOnScopeChains(NewND, S);
6313
6314  return NewND;
6315}
6316
6317Decl *Sema::ActOnNamespaceAliasDef(Scope *S,
6318                                             SourceLocation NamespaceLoc,
6319                                             SourceLocation AliasLoc,
6320                                             IdentifierInfo *Alias,
6321                                             CXXScopeSpec &SS,
6322                                             SourceLocation IdentLoc,
6323                                             IdentifierInfo *Ident) {
6324
6325  // Lookup the namespace name.
6326  LookupResult R(*this, Ident, IdentLoc, LookupNamespaceName);
6327  LookupParsedName(R, S, &SS);
6328
6329  // Check if we have a previous declaration with the same name.
6330  NamedDecl *PrevDecl
6331    = LookupSingleName(S, Alias, AliasLoc, LookupOrdinaryName,
6332                       ForRedeclaration);
6333  if (PrevDecl && !isDeclInScope(PrevDecl, CurContext, S))
6334    PrevDecl = 0;
6335
6336  if (PrevDecl) {
6337    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
6338      // We already have an alias with the same name that points to the same
6339      // namespace, so don't create a new one.
6340      // FIXME: At some point, we'll want to create the (redundant)
6341      // declaration to maintain better source information.
6342      if (!R.isAmbiguous() && !R.empty() &&
6343          AD->getNamespace()->Equals(getNamespaceDecl(R.getFoundDecl())))
6344        return 0;
6345    }
6346
6347    unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
6348      diag::err_redefinition_different_kind;
6349    Diag(AliasLoc, DiagID) << Alias;
6350    Diag(PrevDecl->getLocation(), diag::note_previous_definition);
6351    return 0;
6352  }
6353
6354  if (R.isAmbiguous())
6355    return 0;
6356
6357  if (R.empty()) {
6358    if (!TryNamespaceTypoCorrection(*this, R, S, SS, IdentLoc, Ident)) {
6359      Diag(NamespaceLoc, diag::err_expected_namespace_name) << SS.getRange();
6360      return 0;
6361    }
6362  }
6363
6364  NamespaceAliasDecl *AliasDecl =
6365    NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
6366                               Alias, SS.getWithLocInContext(Context),
6367                               IdentLoc, R.getFoundDecl());
6368
6369  PushOnScopeChains(AliasDecl, S);
6370  return AliasDecl;
6371}
6372
6373namespace {
6374  /// \brief Scoped object used to handle the state changes required in Sema
6375  /// to implicitly define the body of a C++ member function;
6376  class ImplicitlyDefinedFunctionScope {
6377    Sema &S;
6378    Sema::ContextRAII SavedContext;
6379
6380  public:
6381    ImplicitlyDefinedFunctionScope(Sema &S, CXXMethodDecl *Method)
6382      : S(S), SavedContext(S, Method)
6383    {
6384      S.PushFunctionScope();
6385      S.PushExpressionEvaluationContext(Sema::PotentiallyEvaluated);
6386    }
6387
6388    ~ImplicitlyDefinedFunctionScope() {
6389      S.PopExpressionEvaluationContext();
6390      S.PopFunctionOrBlockScope();
6391    }
6392  };
6393}
6394
6395Sema::ImplicitExceptionSpecification
6396Sema::ComputeDefaultedDefaultCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
6397  // C++ [except.spec]p14:
6398  //   An implicitly declared special member function (Clause 12) shall have an
6399  //   exception-specification. [...]
6400  ImplicitExceptionSpecification ExceptSpec(Context);
6401  if (ClassDecl->isInvalidDecl())
6402    return ExceptSpec;
6403
6404  // Direct base-class constructors.
6405  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
6406                                       BEnd = ClassDecl->bases_end();
6407       B != BEnd; ++B) {
6408    if (B->isVirtual()) // Handled below.
6409      continue;
6410
6411    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
6412      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
6413      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
6414      // If this is a deleted function, add it anyway. This might be conformant
6415      // with the standard. This might not. I'm not sure. It might not matter.
6416      if (Constructor)
6417        ExceptSpec.CalledDecl(Constructor);
6418    }
6419  }
6420
6421  // Virtual base-class constructors.
6422  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
6423                                       BEnd = ClassDecl->vbases_end();
6424       B != BEnd; ++B) {
6425    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
6426      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
6427      CXXConstructorDecl *Constructor = LookupDefaultConstructor(BaseClassDecl);
6428      // If this is a deleted function, add it anyway. This might be conformant
6429      // with the standard. This might not. I'm not sure. It might not matter.
6430      if (Constructor)
6431        ExceptSpec.CalledDecl(Constructor);
6432    }
6433  }
6434
6435  // Field constructors.
6436  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
6437                               FEnd = ClassDecl->field_end();
6438       F != FEnd; ++F) {
6439    if (F->hasInClassInitializer()) {
6440      if (Expr *E = F->getInClassInitializer())
6441        ExceptSpec.CalledExpr(E);
6442      else if (!F->isInvalidDecl())
6443        ExceptSpec.SetDelayed();
6444    } else if (const RecordType *RecordTy
6445              = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
6446      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
6447      CXXConstructorDecl *Constructor = LookupDefaultConstructor(FieldRecDecl);
6448      // If this is a deleted function, add it anyway. This might be conformant
6449      // with the standard. This might not. I'm not sure. It might not matter.
6450      // In particular, the problem is that this function never gets called. It
6451      // might just be ill-formed because this function attempts to refer to
6452      // a deleted function here.
6453      if (Constructor)
6454        ExceptSpec.CalledDecl(Constructor);
6455    }
6456  }
6457
6458  return ExceptSpec;
6459}
6460
6461CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
6462                                                     CXXRecordDecl *ClassDecl) {
6463  // C++ [class.ctor]p5:
6464  //   A default constructor for a class X is a constructor of class X
6465  //   that can be called without an argument. If there is no
6466  //   user-declared constructor for class X, a default constructor is
6467  //   implicitly declared. An implicitly-declared default constructor
6468  //   is an inline public member of its class.
6469  assert(!ClassDecl->hasUserDeclaredConstructor() &&
6470         "Should not build implicit default constructor!");
6471
6472  ImplicitExceptionSpecification Spec =
6473    ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
6474  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
6475
6476  // Create the actual constructor declaration.
6477  CanQualType ClassType
6478    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6479  SourceLocation ClassLoc = ClassDecl->getLocation();
6480  DeclarationName Name
6481    = Context.DeclarationNames.getCXXConstructorName(ClassType);
6482  DeclarationNameInfo NameInfo(Name, ClassLoc);
6483  CXXConstructorDecl *DefaultCon
6484    = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
6485                                 Context.getFunctionType(Context.VoidTy,
6486                                                         0, 0, EPI),
6487                                 /*TInfo=*/0,
6488                                 /*isExplicit=*/false,
6489                                 /*isInline=*/true,
6490                                 /*isImplicitlyDeclared=*/true,
6491                                 // FIXME: apply the rules for definitions here
6492                                 /*isConstexpr=*/false);
6493  DefaultCon->setAccess(AS_public);
6494  DefaultCon->setDefaulted();
6495  DefaultCon->setImplicit();
6496  DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
6497
6498  // Note that we have declared this constructor.
6499  ++ASTContext::NumImplicitDefaultConstructorsDeclared;
6500
6501  if (Scope *S = getScopeForContext(ClassDecl))
6502    PushOnScopeChains(DefaultCon, S, false);
6503  ClassDecl->addDecl(DefaultCon);
6504
6505  if (ShouldDeleteDefaultConstructor(DefaultCon))
6506    DefaultCon->setDeletedAsWritten();
6507
6508  return DefaultCon;
6509}
6510
6511void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
6512                                            CXXConstructorDecl *Constructor) {
6513  assert((Constructor->isDefaulted() && Constructor->isDefaultConstructor() &&
6514          !Constructor->doesThisDeclarationHaveABody() &&
6515          !Constructor->isDeleted()) &&
6516    "DefineImplicitDefaultConstructor - call it for implicit default ctor");
6517
6518  CXXRecordDecl *ClassDecl = Constructor->getParent();
6519  assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
6520
6521  ImplicitlyDefinedFunctionScope Scope(*this, Constructor);
6522  DiagnosticErrorTrap Trap(Diags);
6523  if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) ||
6524      Trap.hasErrorOccurred()) {
6525    Diag(CurrentLocation, diag::note_member_synthesized_at)
6526      << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
6527    Constructor->setInvalidDecl();
6528    return;
6529  }
6530
6531  SourceLocation Loc = Constructor->getLocation();
6532  Constructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
6533
6534  Constructor->setUsed();
6535  MarkVTableUsed(CurrentLocation, ClassDecl);
6536
6537  if (ASTMutationListener *L = getASTMutationListener()) {
6538    L->CompletedImplicitDefinition(Constructor);
6539  }
6540}
6541
6542/// Get any existing defaulted default constructor for the given class. Do not
6543/// implicitly define one if it does not exist.
6544static CXXConstructorDecl *getDefaultedDefaultConstructorUnsafe(Sema &Self,
6545                                                             CXXRecordDecl *D) {
6546  ASTContext &Context = Self.Context;
6547  QualType ClassType = Context.getTypeDeclType(D);
6548  DeclarationName ConstructorName
6549    = Context.DeclarationNames.getCXXConstructorName(
6550                      Context.getCanonicalType(ClassType.getUnqualifiedType()));
6551
6552  DeclContext::lookup_const_iterator Con, ConEnd;
6553  for (llvm::tie(Con, ConEnd) = D->lookup(ConstructorName);
6554       Con != ConEnd; ++Con) {
6555    // A function template cannot be defaulted.
6556    if (isa<FunctionTemplateDecl>(*Con))
6557      continue;
6558
6559    CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
6560    if (Constructor->isDefaultConstructor())
6561      return Constructor->isDefaulted() ? Constructor : 0;
6562  }
6563  return 0;
6564}
6565
6566void Sema::ActOnFinishDelayedMemberInitializers(Decl *D) {
6567  if (!D) return;
6568  AdjustDeclIfTemplate(D);
6569
6570  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D);
6571  CXXConstructorDecl *CtorDecl
6572    = getDefaultedDefaultConstructorUnsafe(*this, ClassDecl);
6573
6574  if (!CtorDecl) return;
6575
6576  // Compute the exception specification for the default constructor.
6577  const FunctionProtoType *CtorTy =
6578    CtorDecl->getType()->castAs<FunctionProtoType>();
6579  if (CtorTy->getExceptionSpecType() == EST_Delayed) {
6580    ImplicitExceptionSpecification Spec =
6581      ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
6582    FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
6583    assert(EPI.ExceptionSpecType != EST_Delayed);
6584
6585    CtorDecl->setType(Context.getFunctionType(Context.VoidTy, 0, 0, EPI));
6586  }
6587
6588  // If the default constructor is explicitly defaulted, checking the exception
6589  // specification is deferred until now.
6590  if (!CtorDecl->isInvalidDecl() && CtorDecl->isExplicitlyDefaulted() &&
6591      !ClassDecl->isDependentType())
6592    CheckExplicitlyDefaultedDefaultConstructor(CtorDecl);
6593}
6594
6595void Sema::DeclareInheritedConstructors(CXXRecordDecl *ClassDecl) {
6596  // We start with an initial pass over the base classes to collect those that
6597  // inherit constructors from. If there are none, we can forgo all further
6598  // processing.
6599  typedef SmallVector<const RecordType *, 4> BasesVector;
6600  BasesVector BasesToInheritFrom;
6601  for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
6602                                          BaseE = ClassDecl->bases_end();
6603         BaseIt != BaseE; ++BaseIt) {
6604    if (BaseIt->getInheritConstructors()) {
6605      QualType Base = BaseIt->getType();
6606      if (Base->isDependentType()) {
6607        // If we inherit constructors from anything that is dependent, just
6608        // abort processing altogether. We'll get another chance for the
6609        // instantiations.
6610        return;
6611      }
6612      BasesToInheritFrom.push_back(Base->castAs<RecordType>());
6613    }
6614  }
6615  if (BasesToInheritFrom.empty())
6616    return;
6617
6618  // Now collect the constructors that we already have in the current class.
6619  // Those take precedence over inherited constructors.
6620  // C++0x [class.inhctor]p3: [...] a constructor is implicitly declared [...]
6621  //   unless there is a user-declared constructor with the same signature in
6622  //   the class where the using-declaration appears.
6623  llvm::SmallSet<const Type *, 8> ExistingConstructors;
6624  for (CXXRecordDecl::ctor_iterator CtorIt = ClassDecl->ctor_begin(),
6625                                    CtorE = ClassDecl->ctor_end();
6626       CtorIt != CtorE; ++CtorIt) {
6627    ExistingConstructors.insert(
6628        Context.getCanonicalType(CtorIt->getType()).getTypePtr());
6629  }
6630
6631  Scope *S = getScopeForContext(ClassDecl);
6632  DeclarationName CreatedCtorName =
6633      Context.DeclarationNames.getCXXConstructorName(
6634          ClassDecl->getTypeForDecl()->getCanonicalTypeUnqualified());
6635
6636  // Now comes the true work.
6637  // First, we keep a map from constructor types to the base that introduced
6638  // them. Needed for finding conflicting constructors. We also keep the
6639  // actually inserted declarations in there, for pretty diagnostics.
6640  typedef std::pair<CanQualType, CXXConstructorDecl *> ConstructorInfo;
6641  typedef llvm::DenseMap<const Type *, ConstructorInfo> ConstructorToSourceMap;
6642  ConstructorToSourceMap InheritedConstructors;
6643  for (BasesVector::iterator BaseIt = BasesToInheritFrom.begin(),
6644                             BaseE = BasesToInheritFrom.end();
6645       BaseIt != BaseE; ++BaseIt) {
6646    const RecordType *Base = *BaseIt;
6647    CanQualType CanonicalBase = Base->getCanonicalTypeUnqualified();
6648    CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(Base->getDecl());
6649    for (CXXRecordDecl::ctor_iterator CtorIt = BaseDecl->ctor_begin(),
6650                                      CtorE = BaseDecl->ctor_end();
6651         CtorIt != CtorE; ++CtorIt) {
6652      // Find the using declaration for inheriting this base's constructors.
6653      DeclarationName Name =
6654          Context.DeclarationNames.getCXXConstructorName(CanonicalBase);
6655      UsingDecl *UD = dyn_cast_or_null<UsingDecl>(
6656          LookupSingleName(S, Name,SourceLocation(), LookupUsingDeclName));
6657      SourceLocation UsingLoc = UD ? UD->getLocation() :
6658                                     ClassDecl->getLocation();
6659
6660      // C++0x [class.inhctor]p1: The candidate set of inherited constructors
6661      //   from the class X named in the using-declaration consists of actual
6662      //   constructors and notional constructors that result from the
6663      //   transformation of defaulted parameters as follows:
6664      //   - all non-template default constructors of X, and
6665      //   - for each non-template constructor of X that has at least one
6666      //     parameter with a default argument, the set of constructors that
6667      //     results from omitting any ellipsis parameter specification and
6668      //     successively omitting parameters with a default argument from the
6669      //     end of the parameter-type-list.
6670      CXXConstructorDecl *BaseCtor = *CtorIt;
6671      bool CanBeCopyOrMove = BaseCtor->isCopyOrMoveConstructor();
6672      const FunctionProtoType *BaseCtorType =
6673          BaseCtor->getType()->getAs<FunctionProtoType>();
6674
6675      for (unsigned params = BaseCtor->getMinRequiredArguments(),
6676                    maxParams = BaseCtor->getNumParams();
6677           params <= maxParams; ++params) {
6678        // Skip default constructors. They're never inherited.
6679        if (params == 0)
6680          continue;
6681        // Skip copy and move constructors for the same reason.
6682        if (CanBeCopyOrMove && params == 1)
6683          continue;
6684
6685        // Build up a function type for this particular constructor.
6686        // FIXME: The working paper does not consider that the exception spec
6687        // for the inheriting constructor might be larger than that of the
6688        // source. This code doesn't yet, either. When it does, this code will
6689        // need to be delayed until after exception specifications and in-class
6690        // member initializers are attached.
6691        const Type *NewCtorType;
6692        if (params == maxParams)
6693          NewCtorType = BaseCtorType;
6694        else {
6695          SmallVector<QualType, 16> Args;
6696          for (unsigned i = 0; i < params; ++i) {
6697            Args.push_back(BaseCtorType->getArgType(i));
6698          }
6699          FunctionProtoType::ExtProtoInfo ExtInfo =
6700              BaseCtorType->getExtProtoInfo();
6701          ExtInfo.Variadic = false;
6702          NewCtorType = Context.getFunctionType(BaseCtorType->getResultType(),
6703                                                Args.data(), params, ExtInfo)
6704                       .getTypePtr();
6705        }
6706        const Type *CanonicalNewCtorType =
6707            Context.getCanonicalType(NewCtorType);
6708
6709        // Now that we have the type, first check if the class already has a
6710        // constructor with this signature.
6711        if (ExistingConstructors.count(CanonicalNewCtorType))
6712          continue;
6713
6714        // Then we check if we have already declared an inherited constructor
6715        // with this signature.
6716        std::pair<ConstructorToSourceMap::iterator, bool> result =
6717            InheritedConstructors.insert(std::make_pair(
6718                CanonicalNewCtorType,
6719                std::make_pair(CanonicalBase, (CXXConstructorDecl*)0)));
6720        if (!result.second) {
6721          // Already in the map. If it came from a different class, that's an
6722          // error. Not if it's from the same.
6723          CanQualType PreviousBase = result.first->second.first;
6724          if (CanonicalBase != PreviousBase) {
6725            const CXXConstructorDecl *PrevCtor = result.first->second.second;
6726            const CXXConstructorDecl *PrevBaseCtor =
6727                PrevCtor->getInheritedConstructor();
6728            assert(PrevBaseCtor && "Conflicting constructor was not inherited");
6729
6730            Diag(UsingLoc, diag::err_using_decl_constructor_conflict);
6731            Diag(BaseCtor->getLocation(),
6732                 diag::note_using_decl_constructor_conflict_current_ctor);
6733            Diag(PrevBaseCtor->getLocation(),
6734                 diag::note_using_decl_constructor_conflict_previous_ctor);
6735            Diag(PrevCtor->getLocation(),
6736                 diag::note_using_decl_constructor_conflict_previous_using);
6737          }
6738          continue;
6739        }
6740
6741        // OK, we're there, now add the constructor.
6742        // C++0x [class.inhctor]p8: [...] that would be performed by a
6743        //   user-written inline constructor [...]
6744        DeclarationNameInfo DNI(CreatedCtorName, UsingLoc);
6745        CXXConstructorDecl *NewCtor = CXXConstructorDecl::Create(
6746            Context, ClassDecl, UsingLoc, DNI, QualType(NewCtorType, 0),
6747            /*TInfo=*/0, BaseCtor->isExplicit(), /*Inline=*/true,
6748            /*ImplicitlyDeclared=*/true,
6749            // FIXME: Due to a defect in the standard, we treat inherited
6750            // constructors as constexpr even if that makes them ill-formed.
6751            /*Constexpr=*/BaseCtor->isConstexpr());
6752        NewCtor->setAccess(BaseCtor->getAccess());
6753
6754        // Build up the parameter decls and add them.
6755        SmallVector<ParmVarDecl *, 16> ParamDecls;
6756        for (unsigned i = 0; i < params; ++i) {
6757          ParamDecls.push_back(ParmVarDecl::Create(Context, NewCtor,
6758                                                   UsingLoc, UsingLoc,
6759                                                   /*IdentifierInfo=*/0,
6760                                                   BaseCtorType->getArgType(i),
6761                                                   /*TInfo=*/0, SC_None,
6762                                                   SC_None, /*DefaultArg=*/0));
6763        }
6764        NewCtor->setParams(ParamDecls.data(), ParamDecls.size());
6765        NewCtor->setInheritedConstructor(BaseCtor);
6766
6767        PushOnScopeChains(NewCtor, S, false);
6768        ClassDecl->addDecl(NewCtor);
6769        result.first->second.second = NewCtor;
6770      }
6771    }
6772  }
6773}
6774
6775Sema::ImplicitExceptionSpecification
6776Sema::ComputeDefaultedDtorExceptionSpec(CXXRecordDecl *ClassDecl) {
6777  // C++ [except.spec]p14:
6778  //   An implicitly declared special member function (Clause 12) shall have
6779  //   an exception-specification.
6780  ImplicitExceptionSpecification ExceptSpec(Context);
6781  if (ClassDecl->isInvalidDecl())
6782    return ExceptSpec;
6783
6784  // Direct base-class destructors.
6785  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
6786                                       BEnd = ClassDecl->bases_end();
6787       B != BEnd; ++B) {
6788    if (B->isVirtual()) // Handled below.
6789      continue;
6790
6791    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
6792      ExceptSpec.CalledDecl(
6793                   LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
6794  }
6795
6796  // Virtual base-class destructors.
6797  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
6798                                       BEnd = ClassDecl->vbases_end();
6799       B != BEnd; ++B) {
6800    if (const RecordType *BaseType = B->getType()->getAs<RecordType>())
6801      ExceptSpec.CalledDecl(
6802                  LookupDestructor(cast<CXXRecordDecl>(BaseType->getDecl())));
6803  }
6804
6805  // Field destructors.
6806  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
6807                               FEnd = ClassDecl->field_end();
6808       F != FEnd; ++F) {
6809    if (const RecordType *RecordTy
6810        = Context.getBaseElementType(F->getType())->getAs<RecordType>())
6811      ExceptSpec.CalledDecl(
6812                  LookupDestructor(cast<CXXRecordDecl>(RecordTy->getDecl())));
6813  }
6814
6815  return ExceptSpec;
6816}
6817
6818CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
6819  // C++ [class.dtor]p2:
6820  //   If a class has no user-declared destructor, a destructor is
6821  //   declared implicitly. An implicitly-declared destructor is an
6822  //   inline public member of its class.
6823
6824  ImplicitExceptionSpecification Spec =
6825      ComputeDefaultedDtorExceptionSpec(ClassDecl);
6826  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
6827
6828  // Create the actual destructor declaration.
6829  QualType Ty = Context.getFunctionType(Context.VoidTy, 0, 0, EPI);
6830
6831  CanQualType ClassType
6832    = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6833  SourceLocation ClassLoc = ClassDecl->getLocation();
6834  DeclarationName Name
6835    = Context.DeclarationNames.getCXXDestructorName(ClassType);
6836  DeclarationNameInfo NameInfo(Name, ClassLoc);
6837  CXXDestructorDecl *Destructor
6838      = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, Ty, 0,
6839                                  /*isInline=*/true,
6840                                  /*isImplicitlyDeclared=*/true);
6841  Destructor->setAccess(AS_public);
6842  Destructor->setDefaulted();
6843  Destructor->setImplicit();
6844  Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
6845
6846  // Note that we have declared this destructor.
6847  ++ASTContext::NumImplicitDestructorsDeclared;
6848
6849  // Introduce this destructor into its scope.
6850  if (Scope *S = getScopeForContext(ClassDecl))
6851    PushOnScopeChains(Destructor, S, false);
6852  ClassDecl->addDecl(Destructor);
6853
6854  // This could be uniqued if it ever proves significant.
6855  Destructor->setTypeSourceInfo(Context.getTrivialTypeSourceInfo(Ty));
6856
6857  if (ShouldDeleteDestructor(Destructor))
6858    Destructor->setDeletedAsWritten();
6859
6860  AddOverriddenMethods(ClassDecl, Destructor);
6861
6862  return Destructor;
6863}
6864
6865void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
6866                                    CXXDestructorDecl *Destructor) {
6867  assert((Destructor->isDefaulted() &&
6868          !Destructor->doesThisDeclarationHaveABody()) &&
6869         "DefineImplicitDestructor - call it for implicit default dtor");
6870  CXXRecordDecl *ClassDecl = Destructor->getParent();
6871  assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
6872
6873  if (Destructor->isInvalidDecl())
6874    return;
6875
6876  ImplicitlyDefinedFunctionScope Scope(*this, Destructor);
6877
6878  DiagnosticErrorTrap Trap(Diags);
6879  MarkBaseAndMemberDestructorsReferenced(Destructor->getLocation(),
6880                                         Destructor->getParent());
6881
6882  if (CheckDestructor(Destructor) || Trap.hasErrorOccurred()) {
6883    Diag(CurrentLocation, diag::note_member_synthesized_at)
6884      << CXXDestructor << Context.getTagDeclType(ClassDecl);
6885
6886    Destructor->setInvalidDecl();
6887    return;
6888  }
6889
6890  SourceLocation Loc = Destructor->getLocation();
6891  Destructor->setBody(new (Context) CompoundStmt(Context, 0, 0, Loc, Loc));
6892
6893  Destructor->setUsed();
6894  MarkVTableUsed(CurrentLocation, ClassDecl);
6895
6896  if (ASTMutationListener *L = getASTMutationListener()) {
6897    L->CompletedImplicitDefinition(Destructor);
6898  }
6899}
6900
6901void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
6902                                         CXXDestructorDecl *destructor) {
6903  // C++11 [class.dtor]p3:
6904  //   A declaration of a destructor that does not have an exception-
6905  //   specification is implicitly considered to have the same exception-
6906  //   specification as an implicit declaration.
6907  const FunctionProtoType *dtorType = destructor->getType()->
6908                                        getAs<FunctionProtoType>();
6909  if (dtorType->hasExceptionSpec())
6910    return;
6911
6912  ImplicitExceptionSpecification exceptSpec =
6913      ComputeDefaultedDtorExceptionSpec(classDecl);
6914
6915  // Replace the destructor's type.
6916  FunctionProtoType::ExtProtoInfo epi;
6917  epi.ExceptionSpecType = exceptSpec.getExceptionSpecType();
6918  epi.NumExceptions = exceptSpec.size();
6919  epi.Exceptions = exceptSpec.data();
6920  QualType ty = Context.getFunctionType(Context.VoidTy, 0, 0, epi);
6921
6922  destructor->setType(ty);
6923
6924  // FIXME: If the destructor has a body that could throw, and the newly created
6925  // spec doesn't allow exceptions, we should emit a warning, because this
6926  // change in behavior can break conforming C++03 programs at runtime.
6927  // However, we don't have a body yet, so it needs to be done somewhere else.
6928}
6929
6930/// \brief Builds a statement that copies/moves the given entity from \p From to
6931/// \c To.
6932///
6933/// This routine is used to copy/move the members of a class with an
6934/// implicitly-declared copy/move assignment operator. When the entities being
6935/// copied are arrays, this routine builds for loops to copy them.
6936///
6937/// \param S The Sema object used for type-checking.
6938///
6939/// \param Loc The location where the implicit copy/move is being generated.
6940///
6941/// \param T The type of the expressions being copied/moved. Both expressions
6942/// must have this type.
6943///
6944/// \param To The expression we are copying/moving to.
6945///
6946/// \param From The expression we are copying/moving from.
6947///
6948/// \param CopyingBaseSubobject Whether we're copying/moving a base subobject.
6949/// Otherwise, it's a non-static member subobject.
6950///
6951/// \param Copying Whether we're copying or moving.
6952///
6953/// \param Depth Internal parameter recording the depth of the recursion.
6954///
6955/// \returns A statement or a loop that copies the expressions.
6956static StmtResult
6957BuildSingleCopyAssign(Sema &S, SourceLocation Loc, QualType T,
6958                      Expr *To, Expr *From,
6959                      bool CopyingBaseSubobject, bool Copying,
6960                      unsigned Depth = 0) {
6961  // C++0x [class.copy]p28:
6962  //   Each subobject is assigned in the manner appropriate to its type:
6963  //
6964  //     - if the subobject is of class type, as if by a call to operator= with
6965  //       the subobject as the object expression and the corresponding
6966  //       subobject of x as a single function argument (as if by explicit
6967  //       qualification; that is, ignoring any possible virtual overriding
6968  //       functions in more derived classes);
6969  if (const RecordType *RecordTy = T->getAs<RecordType>()) {
6970    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
6971
6972    // Look for operator=.
6973    DeclarationName Name
6974      = S.Context.DeclarationNames.getCXXOperatorName(OO_Equal);
6975    LookupResult OpLookup(S, Name, Loc, Sema::LookupOrdinaryName);
6976    S.LookupQualifiedName(OpLookup, ClassDecl, false);
6977
6978    // Filter out any result that isn't a copy/move-assignment operator.
6979    LookupResult::Filter F = OpLookup.makeFilter();
6980    while (F.hasNext()) {
6981      NamedDecl *D = F.next();
6982      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D))
6983        if (Copying ? Method->isCopyAssignmentOperator() :
6984                      Method->isMoveAssignmentOperator())
6985          continue;
6986
6987      F.erase();
6988    }
6989    F.done();
6990
6991    // Suppress the protected check (C++ [class.protected]) for each of the
6992    // assignment operators we found. This strange dance is required when
6993    // we're assigning via a base classes's copy-assignment operator. To
6994    // ensure that we're getting the right base class subobject (without
6995    // ambiguities), we need to cast "this" to that subobject type; to
6996    // ensure that we don't go through the virtual call mechanism, we need
6997    // to qualify the operator= name with the base class (see below). However,
6998    // this means that if the base class has a protected copy assignment
6999    // operator, the protected member access check will fail. So, we
7000    // rewrite "protected" access to "public" access in this case, since we
7001    // know by construction that we're calling from a derived class.
7002    if (CopyingBaseSubobject) {
7003      for (LookupResult::iterator L = OpLookup.begin(), LEnd = OpLookup.end();
7004           L != LEnd; ++L) {
7005        if (L.getAccess() == AS_protected)
7006          L.setAccess(AS_public);
7007      }
7008    }
7009
7010    // Create the nested-name-specifier that will be used to qualify the
7011    // reference to operator=; this is required to suppress the virtual
7012    // call mechanism.
7013    CXXScopeSpec SS;
7014    SS.MakeTrivial(S.Context,
7015                   NestedNameSpecifier::Create(S.Context, 0, false,
7016                                               T.getTypePtr()),
7017                   Loc);
7018
7019    // Create the reference to operator=.
7020    ExprResult OpEqualRef
7021      = S.BuildMemberReferenceExpr(To, T, Loc, /*isArrow=*/false, SS,
7022                                   /*FirstQualifierInScope=*/0, OpLookup,
7023                                   /*TemplateArgs=*/0,
7024                                   /*SuppressQualifierCheck=*/true);
7025    if (OpEqualRef.isInvalid())
7026      return StmtError();
7027
7028    // Build the call to the assignment operator.
7029
7030    ExprResult Call = S.BuildCallToMemberFunction(/*Scope=*/0,
7031                                                  OpEqualRef.takeAs<Expr>(),
7032                                                  Loc, &From, 1, Loc);
7033    if (Call.isInvalid())
7034      return StmtError();
7035
7036    return S.Owned(Call.takeAs<Stmt>());
7037  }
7038
7039  //     - if the subobject is of scalar type, the built-in assignment
7040  //       operator is used.
7041  const ConstantArrayType *ArrayTy = S.Context.getAsConstantArrayType(T);
7042  if (!ArrayTy) {
7043    ExprResult Assignment = S.CreateBuiltinBinOp(Loc, BO_Assign, To, From);
7044    if (Assignment.isInvalid())
7045      return StmtError();
7046
7047    return S.Owned(Assignment.takeAs<Stmt>());
7048  }
7049
7050  //     - if the subobject is an array, each element is assigned, in the
7051  //       manner appropriate to the element type;
7052
7053  // Construct a loop over the array bounds, e.g.,
7054  //
7055  //   for (__SIZE_TYPE__ i0 = 0; i0 != array-size; ++i0)
7056  //
7057  // that will copy each of the array elements.
7058  QualType SizeType = S.Context.getSizeType();
7059
7060  // Create the iteration variable.
7061  IdentifierInfo *IterationVarName = 0;
7062  {
7063    llvm::SmallString<8> Str;
7064    llvm::raw_svector_ostream OS(Str);
7065    OS << "__i" << Depth;
7066    IterationVarName = &S.Context.Idents.get(OS.str());
7067  }
7068  VarDecl *IterationVar = VarDecl::Create(S.Context, S.CurContext, Loc, Loc,
7069                                          IterationVarName, SizeType,
7070                            S.Context.getTrivialTypeSourceInfo(SizeType, Loc),
7071                                          SC_None, SC_None);
7072
7073  // Initialize the iteration variable to zero.
7074  llvm::APInt Zero(S.Context.getTypeSize(SizeType), 0);
7075  IterationVar->setInit(IntegerLiteral::Create(S.Context, Zero, SizeType, Loc));
7076
7077  // Create a reference to the iteration variable; we'll use this several
7078  // times throughout.
7079  Expr *IterationVarRef
7080    = S.BuildDeclRefExpr(IterationVar, SizeType, VK_RValue, Loc).take();
7081  assert(IterationVarRef && "Reference to invented variable cannot fail!");
7082
7083  // Create the DeclStmt that holds the iteration variable.
7084  Stmt *InitStmt = new (S.Context) DeclStmt(DeclGroupRef(IterationVar),Loc,Loc);
7085
7086  // Create the comparison against the array bound.
7087  llvm::APInt Upper
7088    = ArrayTy->getSize().zextOrTrunc(S.Context.getTypeSize(SizeType));
7089  Expr *Comparison
7090    = new (S.Context) BinaryOperator(IterationVarRef,
7091                     IntegerLiteral::Create(S.Context, Upper, SizeType, Loc),
7092                                     BO_NE, S.Context.BoolTy,
7093                                     VK_RValue, OK_Ordinary, Loc);
7094
7095  // Create the pre-increment of the iteration variable.
7096  Expr *Increment
7097    = new (S.Context) UnaryOperator(IterationVarRef, UO_PreInc, SizeType,
7098                                    VK_LValue, OK_Ordinary, Loc);
7099
7100  // Subscript the "from" and "to" expressions with the iteration variable.
7101  From = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(From, Loc,
7102                                                         IterationVarRef, Loc));
7103  To = AssertSuccess(S.CreateBuiltinArraySubscriptExpr(To, Loc,
7104                                                       IterationVarRef, Loc));
7105  if (!Copying) // Cast to rvalue
7106    From = CastForMoving(S, From);
7107
7108  // Build the copy/move for an individual element of the array.
7109  StmtResult Copy = BuildSingleCopyAssign(S, Loc, ArrayTy->getElementType(),
7110                                          To, From, CopyingBaseSubobject,
7111                                          Copying, Depth + 1);
7112  if (Copy.isInvalid())
7113    return StmtError();
7114
7115  // Construct the loop that copies all elements of this array.
7116  return S.ActOnForStmt(Loc, Loc, InitStmt,
7117                        S.MakeFullExpr(Comparison),
7118                        0, S.MakeFullExpr(Increment),
7119                        Loc, Copy.take());
7120}
7121
7122std::pair<Sema::ImplicitExceptionSpecification, bool>
7123Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
7124                                                   CXXRecordDecl *ClassDecl) {
7125  if (ClassDecl->isInvalidDecl())
7126    return std::make_pair(ImplicitExceptionSpecification(Context), false);
7127
7128  // C++ [class.copy]p10:
7129  //   If the class definition does not explicitly declare a copy
7130  //   assignment operator, one is declared implicitly.
7131  //   The implicitly-defined copy assignment operator for a class X
7132  //   will have the form
7133  //
7134  //       X& X::operator=(const X&)
7135  //
7136  //   if
7137  bool HasConstCopyAssignment = true;
7138
7139  //       -- each direct base class B of X has a copy assignment operator
7140  //          whose parameter is of type const B&, const volatile B& or B,
7141  //          and
7142  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7143                                       BaseEnd = ClassDecl->bases_end();
7144       HasConstCopyAssignment && Base != BaseEnd; ++Base) {
7145    // We'll handle this below
7146    if (LangOpts.CPlusPlus0x && Base->isVirtual())
7147      continue;
7148
7149    assert(!Base->getType()->isDependentType() &&
7150           "Cannot generate implicit members for class with dependent bases.");
7151    CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
7152    LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
7153                            &HasConstCopyAssignment);
7154  }
7155
7156  // In C++0x, the above citation has "or virtual added"
7157  if (LangOpts.CPlusPlus0x) {
7158    for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7159                                         BaseEnd = ClassDecl->vbases_end();
7160         HasConstCopyAssignment && Base != BaseEnd; ++Base) {
7161      assert(!Base->getType()->isDependentType() &&
7162             "Cannot generate implicit members for class with dependent bases.");
7163      CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
7164      LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
7165                              &HasConstCopyAssignment);
7166    }
7167  }
7168
7169  //       -- for all the nonstatic data members of X that are of a class
7170  //          type M (or array thereof), each such class type has a copy
7171  //          assignment operator whose parameter is of type const M&,
7172  //          const volatile M& or M.
7173  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7174                                  FieldEnd = ClassDecl->field_end();
7175       HasConstCopyAssignment && Field != FieldEnd;
7176       ++Field) {
7177    QualType FieldType = Context.getBaseElementType((*Field)->getType());
7178    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
7179      LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const, false, 0,
7180                              &HasConstCopyAssignment);
7181    }
7182  }
7183
7184  //   Otherwise, the implicitly declared copy assignment operator will
7185  //   have the form
7186  //
7187  //       X& X::operator=(X&)
7188
7189  // C++ [except.spec]p14:
7190  //   An implicitly declared special member function (Clause 12) shall have an
7191  //   exception-specification. [...]
7192
7193  // It is unspecified whether or not an implicit copy assignment operator
7194  // attempts to deduplicate calls to assignment operators of virtual bases are
7195  // made. As such, this exception specification is effectively unspecified.
7196  // Based on a similar decision made for constness in C++0x, we're erring on
7197  // the side of assuming such calls to be made regardless of whether they
7198  // actually happen.
7199  ImplicitExceptionSpecification ExceptSpec(Context);
7200  unsigned ArgQuals = HasConstCopyAssignment ? Qualifiers::Const : 0;
7201  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7202                                       BaseEnd = ClassDecl->bases_end();
7203       Base != BaseEnd; ++Base) {
7204    if (Base->isVirtual())
7205      continue;
7206
7207    CXXRecordDecl *BaseClassDecl
7208      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7209    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
7210                                                            ArgQuals, false, 0))
7211      ExceptSpec.CalledDecl(CopyAssign);
7212  }
7213
7214  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7215                                       BaseEnd = ClassDecl->vbases_end();
7216       Base != BaseEnd; ++Base) {
7217    CXXRecordDecl *BaseClassDecl
7218      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7219    if (CXXMethodDecl *CopyAssign = LookupCopyingAssignment(BaseClassDecl,
7220                                                            ArgQuals, false, 0))
7221      ExceptSpec.CalledDecl(CopyAssign);
7222  }
7223
7224  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7225                                  FieldEnd = ClassDecl->field_end();
7226       Field != FieldEnd;
7227       ++Field) {
7228    QualType FieldType = Context.getBaseElementType((*Field)->getType());
7229    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
7230      if (CXXMethodDecl *CopyAssign =
7231          LookupCopyingAssignment(FieldClassDecl, ArgQuals, false, 0))
7232        ExceptSpec.CalledDecl(CopyAssign);
7233    }
7234  }
7235
7236  return std::make_pair(ExceptSpec, HasConstCopyAssignment);
7237}
7238
7239CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
7240  // Note: The following rules are largely analoguous to the copy
7241  // constructor rules. Note that virtual bases are not taken into account
7242  // for determining the argument type of the operator. Note also that
7243  // operators taking an object instead of a reference are allowed.
7244
7245  ImplicitExceptionSpecification Spec(Context);
7246  bool Const;
7247  llvm::tie(Spec, Const) =
7248    ComputeDefaultedCopyAssignmentExceptionSpecAndConst(ClassDecl);
7249
7250  QualType ArgType = Context.getTypeDeclType(ClassDecl);
7251  QualType RetType = Context.getLValueReferenceType(ArgType);
7252  if (Const)
7253    ArgType = ArgType.withConst();
7254  ArgType = Context.getLValueReferenceType(ArgType);
7255
7256  //   An implicitly-declared copy assignment operator is an inline public
7257  //   member of its class.
7258  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
7259  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
7260  SourceLocation ClassLoc = ClassDecl->getLocation();
7261  DeclarationNameInfo NameInfo(Name, ClassLoc);
7262  CXXMethodDecl *CopyAssignment
7263    = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
7264                            Context.getFunctionType(RetType, &ArgType, 1, EPI),
7265                            /*TInfo=*/0, /*isStatic=*/false,
7266                            /*StorageClassAsWritten=*/SC_None,
7267                            /*isInline=*/true, /*isConstexpr=*/false,
7268                            SourceLocation());
7269  CopyAssignment->setAccess(AS_public);
7270  CopyAssignment->setDefaulted();
7271  CopyAssignment->setImplicit();
7272  CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
7273
7274  // Add the parameter to the operator.
7275  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
7276                                               ClassLoc, ClassLoc, /*Id=*/0,
7277                                               ArgType, /*TInfo=*/0,
7278                                               SC_None,
7279                                               SC_None, 0);
7280  CopyAssignment->setParams(&FromParam, 1);
7281
7282  // Note that we have added this copy-assignment operator.
7283  ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
7284
7285  if (Scope *S = getScopeForContext(ClassDecl))
7286    PushOnScopeChains(CopyAssignment, S, false);
7287  ClassDecl->addDecl(CopyAssignment);
7288
7289  // C++0x [class.copy]p18:
7290  //   ... If the class definition declares a move constructor or move
7291  //   assignment operator, the implicitly declared copy assignment operator is
7292  //   defined as deleted; ...
7293  if (ClassDecl->hasUserDeclaredMoveConstructor() ||
7294      ClassDecl->hasUserDeclaredMoveAssignment() ||
7295      ShouldDeleteCopyAssignmentOperator(CopyAssignment))
7296    CopyAssignment->setDeletedAsWritten();
7297
7298  AddOverriddenMethods(ClassDecl, CopyAssignment);
7299  return CopyAssignment;
7300}
7301
7302void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
7303                                        CXXMethodDecl *CopyAssignOperator) {
7304  assert((CopyAssignOperator->isDefaulted() &&
7305          CopyAssignOperator->isOverloadedOperator() &&
7306          CopyAssignOperator->getOverloadedOperator() == OO_Equal &&
7307          !CopyAssignOperator->doesThisDeclarationHaveABody()) &&
7308         "DefineImplicitCopyAssignment called for wrong function");
7309
7310  CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
7311
7312  if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
7313    CopyAssignOperator->setInvalidDecl();
7314    return;
7315  }
7316
7317  CopyAssignOperator->setUsed();
7318
7319  ImplicitlyDefinedFunctionScope Scope(*this, CopyAssignOperator);
7320  DiagnosticErrorTrap Trap(Diags);
7321
7322  // C++0x [class.copy]p30:
7323  //   The implicitly-defined or explicitly-defaulted copy assignment operator
7324  //   for a non-union class X performs memberwise copy assignment of its
7325  //   subobjects. The direct base classes of X are assigned first, in the
7326  //   order of their declaration in the base-specifier-list, and then the
7327  //   immediate non-static data members of X are assigned, in the order in
7328  //   which they were declared in the class definition.
7329
7330  // The statements that form the synthesized function body.
7331  ASTOwningVector<Stmt*> Statements(*this);
7332
7333  // The parameter for the "other" object, which we are copying from.
7334  ParmVarDecl *Other = CopyAssignOperator->getParamDecl(0);
7335  Qualifiers OtherQuals = Other->getType().getQualifiers();
7336  QualType OtherRefType = Other->getType();
7337  if (const LValueReferenceType *OtherRef
7338                                = OtherRefType->getAs<LValueReferenceType>()) {
7339    OtherRefType = OtherRef->getPointeeType();
7340    OtherQuals = OtherRefType.getQualifiers();
7341  }
7342
7343  // Our location for everything implicitly-generated.
7344  SourceLocation Loc = CopyAssignOperator->getLocation();
7345
7346  // Construct a reference to the "other" object. We'll be using this
7347  // throughout the generated ASTs.
7348  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
7349  assert(OtherRef && "Reference to parameter cannot fail!");
7350
7351  // Construct the "this" pointer. We'll be using this throughout the generated
7352  // ASTs.
7353  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
7354  assert(This && "Reference to this cannot fail!");
7355
7356  // Assign base classes.
7357  bool Invalid = false;
7358  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7359       E = ClassDecl->bases_end(); Base != E; ++Base) {
7360    // Form the assignment:
7361    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&>(other));
7362    QualType BaseType = Base->getType().getUnqualifiedType();
7363    if (!BaseType->isRecordType()) {
7364      Invalid = true;
7365      continue;
7366    }
7367
7368    CXXCastPath BasePath;
7369    BasePath.push_back(Base);
7370
7371    // Construct the "from" expression, which is an implicit cast to the
7372    // appropriately-qualified base type.
7373    Expr *From = OtherRef;
7374    From = ImpCastExprToType(From, Context.getQualifiedType(BaseType, OtherQuals),
7375                             CK_UncheckedDerivedToBase,
7376                             VK_LValue, &BasePath).take();
7377
7378    // Dereference "this".
7379    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
7380
7381    // Implicitly cast "this" to the appropriately-qualified base type.
7382    To = ImpCastExprToType(To.take(),
7383                           Context.getCVRQualifiedType(BaseType,
7384                                     CopyAssignOperator->getTypeQualifiers()),
7385                           CK_UncheckedDerivedToBase,
7386                           VK_LValue, &BasePath);
7387
7388    // Build the copy.
7389    StmtResult Copy = BuildSingleCopyAssign(*this, Loc, BaseType,
7390                                            To.get(), From,
7391                                            /*CopyingBaseSubobject=*/true,
7392                                            /*Copying=*/true);
7393    if (Copy.isInvalid()) {
7394      Diag(CurrentLocation, diag::note_member_synthesized_at)
7395        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7396      CopyAssignOperator->setInvalidDecl();
7397      return;
7398    }
7399
7400    // Success! Record the copy.
7401    Statements.push_back(Copy.takeAs<Expr>());
7402  }
7403
7404  // \brief Reference to the __builtin_memcpy function.
7405  Expr *BuiltinMemCpyRef = 0;
7406  // \brief Reference to the __builtin_objc_memmove_collectable function.
7407  Expr *CollectableMemCpyRef = 0;
7408
7409  // Assign non-static members.
7410  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7411                                  FieldEnd = ClassDecl->field_end();
7412       Field != FieldEnd; ++Field) {
7413    // Check for members of reference type; we can't copy those.
7414    if (Field->getType()->isReferenceType()) {
7415      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7416        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
7417      Diag(Field->getLocation(), diag::note_declared_at);
7418      Diag(CurrentLocation, diag::note_member_synthesized_at)
7419        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7420      Invalid = true;
7421      continue;
7422    }
7423
7424    // Check for members of const-qualified, non-class type.
7425    QualType BaseType = Context.getBaseElementType(Field->getType());
7426    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
7427      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7428        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
7429      Diag(Field->getLocation(), diag::note_declared_at);
7430      Diag(CurrentLocation, diag::note_member_synthesized_at)
7431        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7432      Invalid = true;
7433      continue;
7434    }
7435
7436    // Suppress assigning zero-width bitfields.
7437    if (const Expr *Width = Field->getBitWidth())
7438      if (Width->EvaluateAsInt(Context) == 0)
7439        continue;
7440
7441    QualType FieldType = Field->getType().getNonReferenceType();
7442    if (FieldType->isIncompleteArrayType()) {
7443      assert(ClassDecl->hasFlexibleArrayMember() &&
7444             "Incomplete array type is not valid");
7445      continue;
7446    }
7447
7448    // Build references to the field in the object we're copying from and to.
7449    CXXScopeSpec SS; // Intentionally empty
7450    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
7451                              LookupMemberName);
7452    MemberLookup.addDecl(*Field);
7453    MemberLookup.resolveKind();
7454    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
7455                                               Loc, /*IsArrow=*/false,
7456                                               SS, 0, MemberLookup, 0);
7457    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
7458                                             Loc, /*IsArrow=*/true,
7459                                             SS, 0, MemberLookup, 0);
7460    assert(!From.isInvalid() && "Implicit field reference cannot fail");
7461    assert(!To.isInvalid() && "Implicit field reference cannot fail");
7462
7463    // If the field should be copied with __builtin_memcpy rather than via
7464    // explicit assignments, do so. This optimization only applies for arrays
7465    // of scalars and arrays of class type with trivial copy-assignment
7466    // operators.
7467    if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
7468        && BaseType.hasTrivialAssignment(Context, /*Copying=*/true)) {
7469      // Compute the size of the memory buffer to be copied.
7470      QualType SizeType = Context.getSizeType();
7471      llvm::APInt Size(Context.getTypeSize(SizeType),
7472                       Context.getTypeSizeInChars(BaseType).getQuantity());
7473      for (const ConstantArrayType *Array
7474              = Context.getAsConstantArrayType(FieldType);
7475           Array;
7476           Array = Context.getAsConstantArrayType(Array->getElementType())) {
7477        llvm::APInt ArraySize
7478          = Array->getSize().zextOrTrunc(Size.getBitWidth());
7479        Size *= ArraySize;
7480      }
7481
7482      // Take the address of the field references for "from" and "to".
7483      From = CreateBuiltinUnaryOp(Loc, UO_AddrOf, From.get());
7484      To = CreateBuiltinUnaryOp(Loc, UO_AddrOf, To.get());
7485
7486      bool NeedsCollectableMemCpy =
7487          (BaseType->isRecordType() &&
7488           BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
7489
7490      if (NeedsCollectableMemCpy) {
7491        if (!CollectableMemCpyRef) {
7492          // Create a reference to the __builtin_objc_memmove_collectable function.
7493          LookupResult R(*this,
7494                         &Context.Idents.get("__builtin_objc_memmove_collectable"),
7495                         Loc, LookupOrdinaryName);
7496          LookupName(R, TUScope, true);
7497
7498          FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
7499          if (!CollectableMemCpy) {
7500            // Something went horribly wrong earlier, and we will have
7501            // complained about it.
7502            Invalid = true;
7503            continue;
7504          }
7505
7506          CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
7507                                                  CollectableMemCpy->getType(),
7508                                                  VK_LValue, Loc, 0).take();
7509          assert(CollectableMemCpyRef && "Builtin reference cannot fail");
7510        }
7511      }
7512      // Create a reference to the __builtin_memcpy builtin function.
7513      else if (!BuiltinMemCpyRef) {
7514        LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
7515                       LookupOrdinaryName);
7516        LookupName(R, TUScope, true);
7517
7518        FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
7519        if (!BuiltinMemCpy) {
7520          // Something went horribly wrong earlier, and we will have complained
7521          // about it.
7522          Invalid = true;
7523          continue;
7524        }
7525
7526        BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
7527                                            BuiltinMemCpy->getType(),
7528                                            VK_LValue, Loc, 0).take();
7529        assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
7530      }
7531
7532      ASTOwningVector<Expr*> CallArgs(*this);
7533      CallArgs.push_back(To.takeAs<Expr>());
7534      CallArgs.push_back(From.takeAs<Expr>());
7535      CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
7536      ExprResult Call = ExprError();
7537      if (NeedsCollectableMemCpy)
7538        Call = ActOnCallExpr(/*Scope=*/0,
7539                             CollectableMemCpyRef,
7540                             Loc, move_arg(CallArgs),
7541                             Loc);
7542      else
7543        Call = ActOnCallExpr(/*Scope=*/0,
7544                             BuiltinMemCpyRef,
7545                             Loc, move_arg(CallArgs),
7546                             Loc);
7547
7548      assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
7549      Statements.push_back(Call.takeAs<Expr>());
7550      continue;
7551    }
7552
7553    // Build the copy of this field.
7554    StmtResult Copy = BuildSingleCopyAssign(*this, Loc, FieldType,
7555                                            To.get(), From.get(),
7556                                            /*CopyingBaseSubobject=*/false,
7557                                            /*Copying=*/true);
7558    if (Copy.isInvalid()) {
7559      Diag(CurrentLocation, diag::note_member_synthesized_at)
7560        << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7561      CopyAssignOperator->setInvalidDecl();
7562      return;
7563    }
7564
7565    // Success! Record the copy.
7566    Statements.push_back(Copy.takeAs<Stmt>());
7567  }
7568
7569  if (!Invalid) {
7570    // Add a "return *this;"
7571    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
7572
7573    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
7574    if (Return.isInvalid())
7575      Invalid = true;
7576    else {
7577      Statements.push_back(Return.takeAs<Stmt>());
7578
7579      if (Trap.hasErrorOccurred()) {
7580        Diag(CurrentLocation, diag::note_member_synthesized_at)
7581          << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7582        Invalid = true;
7583      }
7584    }
7585  }
7586
7587  if (Invalid) {
7588    CopyAssignOperator->setInvalidDecl();
7589    return;
7590  }
7591
7592  StmtResult Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
7593                                            /*isStmtExpr=*/false);
7594  assert(!Body.isInvalid() && "Compound statement creation cannot fail");
7595  CopyAssignOperator->setBody(Body.takeAs<Stmt>());
7596
7597  if (ASTMutationListener *L = getASTMutationListener()) {
7598    L->CompletedImplicitDefinition(CopyAssignOperator);
7599  }
7600}
7601
7602Sema::ImplicitExceptionSpecification
7603Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXRecordDecl *ClassDecl) {
7604  ImplicitExceptionSpecification ExceptSpec(Context);
7605
7606  if (ClassDecl->isInvalidDecl())
7607    return ExceptSpec;
7608
7609  // C++0x [except.spec]p14:
7610  //   An implicitly declared special member function (Clause 12) shall have an
7611  //   exception-specification. [...]
7612
7613  // It is unspecified whether or not an implicit move assignment operator
7614  // attempts to deduplicate calls to assignment operators of virtual bases are
7615  // made. As such, this exception specification is effectively unspecified.
7616  // Based on a similar decision made for constness in C++0x, we're erring on
7617  // the side of assuming such calls to be made regardless of whether they
7618  // actually happen.
7619  // Note that a move constructor is not implicitly declared when there are
7620  // virtual bases, but it can still be user-declared and explicitly defaulted.
7621  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7622                                       BaseEnd = ClassDecl->bases_end();
7623       Base != BaseEnd; ++Base) {
7624    if (Base->isVirtual())
7625      continue;
7626
7627    CXXRecordDecl *BaseClassDecl
7628      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7629    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
7630                                                           false, 0))
7631      ExceptSpec.CalledDecl(MoveAssign);
7632  }
7633
7634  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7635                                       BaseEnd = ClassDecl->vbases_end();
7636       Base != BaseEnd; ++Base) {
7637    CXXRecordDecl *BaseClassDecl
7638      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
7639    if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(BaseClassDecl,
7640                                                           false, 0))
7641      ExceptSpec.CalledDecl(MoveAssign);
7642  }
7643
7644  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7645                                  FieldEnd = ClassDecl->field_end();
7646       Field != FieldEnd;
7647       ++Field) {
7648    QualType FieldType = Context.getBaseElementType((*Field)->getType());
7649    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
7650      if (CXXMethodDecl *MoveAssign = LookupMovingAssignment(FieldClassDecl,
7651                                                             false, 0))
7652        ExceptSpec.CalledDecl(MoveAssign);
7653    }
7654  }
7655
7656  return ExceptSpec;
7657}
7658
7659CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
7660  // Note: The following rules are largely analoguous to the move
7661  // constructor rules.
7662
7663  ImplicitExceptionSpecification Spec(
7664      ComputeDefaultedMoveAssignmentExceptionSpec(ClassDecl));
7665
7666  QualType ArgType = Context.getTypeDeclType(ClassDecl);
7667  QualType RetType = Context.getLValueReferenceType(ArgType);
7668  ArgType = Context.getRValueReferenceType(ArgType);
7669
7670  //   An implicitly-declared move assignment operator is an inline public
7671  //   member of its class.
7672  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
7673  DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
7674  SourceLocation ClassLoc = ClassDecl->getLocation();
7675  DeclarationNameInfo NameInfo(Name, ClassLoc);
7676  CXXMethodDecl *MoveAssignment
7677    = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
7678                            Context.getFunctionType(RetType, &ArgType, 1, EPI),
7679                            /*TInfo=*/0, /*isStatic=*/false,
7680                            /*StorageClassAsWritten=*/SC_None,
7681                            /*isInline=*/true,
7682                            /*isConstexpr=*/false,
7683                            SourceLocation());
7684  MoveAssignment->setAccess(AS_public);
7685  MoveAssignment->setDefaulted();
7686  MoveAssignment->setImplicit();
7687  MoveAssignment->setTrivial(ClassDecl->hasTrivialMoveAssignment());
7688
7689  // Add the parameter to the operator.
7690  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveAssignment,
7691                                               ClassLoc, ClassLoc, /*Id=*/0,
7692                                               ArgType, /*TInfo=*/0,
7693                                               SC_None,
7694                                               SC_None, 0);
7695  MoveAssignment->setParams(&FromParam, 1);
7696
7697  // Note that we have added this copy-assignment operator.
7698  ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
7699
7700  // C++0x [class.copy]p9:
7701  //   If the definition of a class X does not explicitly declare a move
7702  //   assignment operator, one will be implicitly declared as defaulted if and
7703  //   only if:
7704  //   [...]
7705  //   - the move assignment operator would not be implicitly defined as
7706  //     deleted.
7707  if (ShouldDeleteMoveAssignmentOperator(MoveAssignment)) {
7708    // Cache this result so that we don't try to generate this over and over
7709    // on every lookup, leaking memory and wasting time.
7710    ClassDecl->setFailedImplicitMoveAssignment();
7711    return 0;
7712  }
7713
7714  if (Scope *S = getScopeForContext(ClassDecl))
7715    PushOnScopeChains(MoveAssignment, S, false);
7716  ClassDecl->addDecl(MoveAssignment);
7717
7718  AddOverriddenMethods(ClassDecl, MoveAssignment);
7719  return MoveAssignment;
7720}
7721
7722void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
7723                                        CXXMethodDecl *MoveAssignOperator) {
7724  assert((MoveAssignOperator->isDefaulted() &&
7725          MoveAssignOperator->isOverloadedOperator() &&
7726          MoveAssignOperator->getOverloadedOperator() == OO_Equal &&
7727          !MoveAssignOperator->doesThisDeclarationHaveABody()) &&
7728         "DefineImplicitMoveAssignment called for wrong function");
7729
7730  CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
7731
7732  if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
7733    MoveAssignOperator->setInvalidDecl();
7734    return;
7735  }
7736
7737  MoveAssignOperator->setUsed();
7738
7739  ImplicitlyDefinedFunctionScope Scope(*this, MoveAssignOperator);
7740  DiagnosticErrorTrap Trap(Diags);
7741
7742  // C++0x [class.copy]p28:
7743  //   The implicitly-defined or move assignment operator for a non-union class
7744  //   X performs memberwise move assignment of its subobjects. The direct base
7745  //   classes of X are assigned first, in the order of their declaration in the
7746  //   base-specifier-list, and then the immediate non-static data members of X
7747  //   are assigned, in the order in which they were declared in the class
7748  //   definition.
7749
7750  // The statements that form the synthesized function body.
7751  ASTOwningVector<Stmt*> Statements(*this);
7752
7753  // The parameter for the "other" object, which we are move from.
7754  ParmVarDecl *Other = MoveAssignOperator->getParamDecl(0);
7755  QualType OtherRefType = Other->getType()->
7756      getAs<RValueReferenceType>()->getPointeeType();
7757  assert(OtherRefType.getQualifiers() == 0 &&
7758         "Bad argument type of defaulted move assignment");
7759
7760  // Our location for everything implicitly-generated.
7761  SourceLocation Loc = MoveAssignOperator->getLocation();
7762
7763  // Construct a reference to the "other" object. We'll be using this
7764  // throughout the generated ASTs.
7765  Expr *OtherRef = BuildDeclRefExpr(Other, OtherRefType, VK_LValue, Loc).take();
7766  assert(OtherRef && "Reference to parameter cannot fail!");
7767  // Cast to rvalue.
7768  OtherRef = CastForMoving(*this, OtherRef);
7769
7770  // Construct the "this" pointer. We'll be using this throughout the generated
7771  // ASTs.
7772  Expr *This = ActOnCXXThis(Loc).takeAs<Expr>();
7773  assert(This && "Reference to this cannot fail!");
7774
7775  // Assign base classes.
7776  bool Invalid = false;
7777  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7778       E = ClassDecl->bases_end(); Base != E; ++Base) {
7779    // Form the assignment:
7780    //   static_cast<Base*>(this)->Base::operator=(static_cast<Base&&>(other));
7781    QualType BaseType = Base->getType().getUnqualifiedType();
7782    if (!BaseType->isRecordType()) {
7783      Invalid = true;
7784      continue;
7785    }
7786
7787    CXXCastPath BasePath;
7788    BasePath.push_back(Base);
7789
7790    // Construct the "from" expression, which is an implicit cast to the
7791    // appropriately-qualified base type.
7792    Expr *From = OtherRef;
7793    From = ImpCastExprToType(From, BaseType, CK_UncheckedDerivedToBase,
7794                             VK_RValue, &BasePath).take();
7795
7796    // Dereference "this".
7797    ExprResult To = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
7798
7799    // Implicitly cast "this" to the appropriately-qualified base type.
7800    To = ImpCastExprToType(To.take(),
7801                           Context.getCVRQualifiedType(BaseType,
7802                                     MoveAssignOperator->getTypeQualifiers()),
7803                           CK_UncheckedDerivedToBase,
7804                           VK_LValue, &BasePath);
7805
7806    // Build the move.
7807    StmtResult Move = BuildSingleCopyAssign(*this, Loc, BaseType,
7808                                            To.get(), From,
7809                                            /*CopyingBaseSubobject=*/true,
7810                                            /*Copying=*/false);
7811    if (Move.isInvalid()) {
7812      Diag(CurrentLocation, diag::note_member_synthesized_at)
7813        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
7814      MoveAssignOperator->setInvalidDecl();
7815      return;
7816    }
7817
7818    // Success! Record the move.
7819    Statements.push_back(Move.takeAs<Expr>());
7820  }
7821
7822  // \brief Reference to the __builtin_memcpy function.
7823  Expr *BuiltinMemCpyRef = 0;
7824  // \brief Reference to the __builtin_objc_memmove_collectable function.
7825  Expr *CollectableMemCpyRef = 0;
7826
7827  // Assign non-static members.
7828  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7829                                  FieldEnd = ClassDecl->field_end();
7830       Field != FieldEnd; ++Field) {
7831    // Check for members of reference type; we can't move those.
7832    if (Field->getType()->isReferenceType()) {
7833      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7834        << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
7835      Diag(Field->getLocation(), diag::note_declared_at);
7836      Diag(CurrentLocation, diag::note_member_synthesized_at)
7837        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
7838      Invalid = true;
7839      continue;
7840    }
7841
7842    // Check for members of const-qualified, non-class type.
7843    QualType BaseType = Context.getBaseElementType(Field->getType());
7844    if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {
7845      Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7846        << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
7847      Diag(Field->getLocation(), diag::note_declared_at);
7848      Diag(CurrentLocation, diag::note_member_synthesized_at)
7849        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
7850      Invalid = true;
7851      continue;
7852    }
7853
7854    // Suppress assigning zero-width bitfields.
7855    if (const Expr *Width = Field->getBitWidth())
7856      if (Width->EvaluateAsInt(Context) == 0)
7857        continue;
7858
7859    QualType FieldType = Field->getType().getNonReferenceType();
7860    if (FieldType->isIncompleteArrayType()) {
7861      assert(ClassDecl->hasFlexibleArrayMember() &&
7862             "Incomplete array type is not valid");
7863      continue;
7864    }
7865
7866    // Build references to the field in the object we're copying from and to.
7867    CXXScopeSpec SS; // Intentionally empty
7868    LookupResult MemberLookup(*this, Field->getDeclName(), Loc,
7869                              LookupMemberName);
7870    MemberLookup.addDecl(*Field);
7871    MemberLookup.resolveKind();
7872    ExprResult From = BuildMemberReferenceExpr(OtherRef, OtherRefType,
7873                                               Loc, /*IsArrow=*/false,
7874                                               SS, 0, MemberLookup, 0);
7875    ExprResult To = BuildMemberReferenceExpr(This, This->getType(),
7876                                             Loc, /*IsArrow=*/true,
7877                                             SS, 0, MemberLookup, 0);
7878    assert(!From.isInvalid() && "Implicit field reference cannot fail");
7879    assert(!To.isInvalid() && "Implicit field reference cannot fail");
7880
7881    assert(!From.get()->isLValue() && // could be xvalue or prvalue
7882        "Member reference with rvalue base must be rvalue except for reference "
7883        "members, which aren't allowed for move assignment.");
7884
7885    // If the field should be copied with __builtin_memcpy rather than via
7886    // explicit assignments, do so. This optimization only applies for arrays
7887    // of scalars and arrays of class type with trivial move-assignment
7888    // operators.
7889    if (FieldType->isArrayType() && !FieldType.isVolatileQualified()
7890        && BaseType.hasTrivialAssignment(Context, /*Copying=*/false)) {
7891      // Compute the size of the memory buffer to be copied.
7892      QualType SizeType = Context.getSizeType();
7893      llvm::APInt Size(Context.getTypeSize(SizeType),
7894                       Context.getTypeSizeInChars(BaseType).getQuantity());
7895      for (const ConstantArrayType *Array
7896              = Context.getAsConstantArrayType(FieldType);
7897           Array;
7898           Array = Context.getAsConstantArrayType(Array->getElementType())) {
7899        llvm::APInt ArraySize
7900          = Array->getSize().zextOrTrunc(Size.getBitWidth());
7901        Size *= ArraySize;
7902      }
7903
7904      // Take the address of the field references for "from" and "to". We
7905      // directly construct UnaryOperators here because semantic analysis
7906      // does not permit us to take the address of an xvalue.
7907      From = new (Context) UnaryOperator(From.get(), UO_AddrOf,
7908                             Context.getPointerType(From.get()->getType()),
7909                             VK_RValue, OK_Ordinary, Loc);
7910      To = new (Context) UnaryOperator(To.get(), UO_AddrOf,
7911                           Context.getPointerType(To.get()->getType()),
7912                           VK_RValue, OK_Ordinary, Loc);
7913
7914      bool NeedsCollectableMemCpy =
7915          (BaseType->isRecordType() &&
7916           BaseType->getAs<RecordType>()->getDecl()->hasObjectMember());
7917
7918      if (NeedsCollectableMemCpy) {
7919        if (!CollectableMemCpyRef) {
7920          // Create a reference to the __builtin_objc_memmove_collectable function.
7921          LookupResult R(*this,
7922                         &Context.Idents.get("__builtin_objc_memmove_collectable"),
7923                         Loc, LookupOrdinaryName);
7924          LookupName(R, TUScope, true);
7925
7926          FunctionDecl *CollectableMemCpy = R.getAsSingle<FunctionDecl>();
7927          if (!CollectableMemCpy) {
7928            // Something went horribly wrong earlier, and we will have
7929            // complained about it.
7930            Invalid = true;
7931            continue;
7932          }
7933
7934          CollectableMemCpyRef = BuildDeclRefExpr(CollectableMemCpy,
7935                                                  CollectableMemCpy->getType(),
7936                                                  VK_LValue, Loc, 0).take();
7937          assert(CollectableMemCpyRef && "Builtin reference cannot fail");
7938        }
7939      }
7940      // Create a reference to the __builtin_memcpy builtin function.
7941      else if (!BuiltinMemCpyRef) {
7942        LookupResult R(*this, &Context.Idents.get("__builtin_memcpy"), Loc,
7943                       LookupOrdinaryName);
7944        LookupName(R, TUScope, true);
7945
7946        FunctionDecl *BuiltinMemCpy = R.getAsSingle<FunctionDecl>();
7947        if (!BuiltinMemCpy) {
7948          // Something went horribly wrong earlier, and we will have complained
7949          // about it.
7950          Invalid = true;
7951          continue;
7952        }
7953
7954        BuiltinMemCpyRef = BuildDeclRefExpr(BuiltinMemCpy,
7955                                            BuiltinMemCpy->getType(),
7956                                            VK_LValue, Loc, 0).take();
7957        assert(BuiltinMemCpyRef && "Builtin reference cannot fail");
7958      }
7959
7960      ASTOwningVector<Expr*> CallArgs(*this);
7961      CallArgs.push_back(To.takeAs<Expr>());
7962      CallArgs.push_back(From.takeAs<Expr>());
7963      CallArgs.push_back(IntegerLiteral::Create(Context, Size, SizeType, Loc));
7964      ExprResult Call = ExprError();
7965      if (NeedsCollectableMemCpy)
7966        Call = ActOnCallExpr(/*Scope=*/0,
7967                             CollectableMemCpyRef,
7968                             Loc, move_arg(CallArgs),
7969                             Loc);
7970      else
7971        Call = ActOnCallExpr(/*Scope=*/0,
7972                             BuiltinMemCpyRef,
7973                             Loc, move_arg(CallArgs),
7974                             Loc);
7975
7976      assert(!Call.isInvalid() && "Call to __builtin_memcpy cannot fail!");
7977      Statements.push_back(Call.takeAs<Expr>());
7978      continue;
7979    }
7980
7981    // Build the move of this field.
7982    StmtResult Move = BuildSingleCopyAssign(*this, Loc, FieldType,
7983                                            To.get(), From.get(),
7984                                            /*CopyingBaseSubobject=*/false,
7985                                            /*Copying=*/false);
7986    if (Move.isInvalid()) {
7987      Diag(CurrentLocation, diag::note_member_synthesized_at)
7988        << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
7989      MoveAssignOperator->setInvalidDecl();
7990      return;
7991    }
7992
7993    // Success! Record the copy.
7994    Statements.push_back(Move.takeAs<Stmt>());
7995  }
7996
7997  if (!Invalid) {
7998    // Add a "return *this;"
7999    ExprResult ThisObj = CreateBuiltinUnaryOp(Loc, UO_Deref, This);
8000
8001    StmtResult Return = ActOnReturnStmt(Loc, ThisObj.get());
8002    if (Return.isInvalid())
8003      Invalid = true;
8004    else {
8005      Statements.push_back(Return.takeAs<Stmt>());
8006
8007      if (Trap.hasErrorOccurred()) {
8008        Diag(CurrentLocation, diag::note_member_synthesized_at)
8009          << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8010        Invalid = true;
8011      }
8012    }
8013  }
8014
8015  if (Invalid) {
8016    MoveAssignOperator->setInvalidDecl();
8017    return;
8018  }
8019
8020  StmtResult Body = ActOnCompoundStmt(Loc, Loc, move_arg(Statements),
8021                                            /*isStmtExpr=*/false);
8022  assert(!Body.isInvalid() && "Compound statement creation cannot fail");
8023  MoveAssignOperator->setBody(Body.takeAs<Stmt>());
8024
8025  if (ASTMutationListener *L = getASTMutationListener()) {
8026    L->CompletedImplicitDefinition(MoveAssignOperator);
8027  }
8028}
8029
8030std::pair<Sema::ImplicitExceptionSpecification, bool>
8031Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
8032  if (ClassDecl->isInvalidDecl())
8033    return std::make_pair(ImplicitExceptionSpecification(Context), false);
8034
8035  // C++ [class.copy]p5:
8036  //   The implicitly-declared copy constructor for a class X will
8037  //   have the form
8038  //
8039  //       X::X(const X&)
8040  //
8041  //   if
8042  // FIXME: It ought to be possible to store this on the record.
8043  bool HasConstCopyConstructor = true;
8044
8045  //     -- each direct or virtual base class B of X has a copy
8046  //        constructor whose first parameter is of type const B& or
8047  //        const volatile B&, and
8048  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8049                                       BaseEnd = ClassDecl->bases_end();
8050       HasConstCopyConstructor && Base != BaseEnd;
8051       ++Base) {
8052    // Virtual bases are handled below.
8053    if (Base->isVirtual())
8054      continue;
8055
8056    CXXRecordDecl *BaseClassDecl
8057      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8058    LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
8059                             &HasConstCopyConstructor);
8060  }
8061
8062  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8063                                       BaseEnd = ClassDecl->vbases_end();
8064       HasConstCopyConstructor && Base != BaseEnd;
8065       ++Base) {
8066    CXXRecordDecl *BaseClassDecl
8067      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8068    LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
8069                             &HasConstCopyConstructor);
8070  }
8071
8072  //     -- for all the nonstatic data members of X that are of a
8073  //        class type M (or array thereof), each such class type
8074  //        has a copy constructor whose first parameter is of type
8075  //        const M& or const volatile M&.
8076  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8077                                  FieldEnd = ClassDecl->field_end();
8078       HasConstCopyConstructor && Field != FieldEnd;
8079       ++Field) {
8080    QualType FieldType = Context.getBaseElementType((*Field)->getType());
8081    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8082      LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const,
8083                               &HasConstCopyConstructor);
8084    }
8085  }
8086  //   Otherwise, the implicitly declared copy constructor will have
8087  //   the form
8088  //
8089  //       X::X(X&)
8090
8091  // C++ [except.spec]p14:
8092  //   An implicitly declared special member function (Clause 12) shall have an
8093  //   exception-specification. [...]
8094  ImplicitExceptionSpecification ExceptSpec(Context);
8095  unsigned Quals = HasConstCopyConstructor? Qualifiers::Const : 0;
8096  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8097                                       BaseEnd = ClassDecl->bases_end();
8098       Base != BaseEnd;
8099       ++Base) {
8100    // Virtual bases are handled below.
8101    if (Base->isVirtual())
8102      continue;
8103
8104    CXXRecordDecl *BaseClassDecl
8105      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8106    if (CXXConstructorDecl *CopyConstructor =
8107          LookupCopyingConstructor(BaseClassDecl, Quals))
8108      ExceptSpec.CalledDecl(CopyConstructor);
8109  }
8110  for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8111                                       BaseEnd = ClassDecl->vbases_end();
8112       Base != BaseEnd;
8113       ++Base) {
8114    CXXRecordDecl *BaseClassDecl
8115      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
8116    if (CXXConstructorDecl *CopyConstructor =
8117          LookupCopyingConstructor(BaseClassDecl, Quals))
8118      ExceptSpec.CalledDecl(CopyConstructor);
8119  }
8120  for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8121                                  FieldEnd = ClassDecl->field_end();
8122       Field != FieldEnd;
8123       ++Field) {
8124    QualType FieldType = Context.getBaseElementType((*Field)->getType());
8125    if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
8126      if (CXXConstructorDecl *CopyConstructor =
8127        LookupCopyingConstructor(FieldClassDecl, Quals))
8128      ExceptSpec.CalledDecl(CopyConstructor);
8129    }
8130  }
8131
8132  return std::make_pair(ExceptSpec, HasConstCopyConstructor);
8133}
8134
8135CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
8136                                                    CXXRecordDecl *ClassDecl) {
8137  // C++ [class.copy]p4:
8138  //   If the class definition does not explicitly declare a copy
8139  //   constructor, one is declared implicitly.
8140
8141  ImplicitExceptionSpecification Spec(Context);
8142  bool Const;
8143  llvm::tie(Spec, Const) =
8144    ComputeDefaultedCopyCtorExceptionSpecAndConst(ClassDecl);
8145
8146  QualType ClassType = Context.getTypeDeclType(ClassDecl);
8147  QualType ArgType = ClassType;
8148  if (Const)
8149    ArgType = ArgType.withConst();
8150  ArgType = Context.getLValueReferenceType(ArgType);
8151
8152  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
8153
8154  DeclarationName Name
8155    = Context.DeclarationNames.getCXXConstructorName(
8156                                           Context.getCanonicalType(ClassType));
8157  SourceLocation ClassLoc = ClassDecl->getLocation();
8158  DeclarationNameInfo NameInfo(Name, ClassLoc);
8159
8160  //   An implicitly-declared copy constructor is an inline public
8161  //   member of its class.
8162  CXXConstructorDecl *CopyConstructor
8163    = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8164                                 Context.getFunctionType(Context.VoidTy,
8165                                                         &ArgType, 1, EPI),
8166                                 /*TInfo=*/0,
8167                                 /*isExplicit=*/false,
8168                                 /*isInline=*/true,
8169                                 /*isImplicitlyDeclared=*/true,
8170                                 // FIXME: apply the rules for definitions here
8171                                 /*isConstexpr=*/false);
8172  CopyConstructor->setAccess(AS_public);
8173  CopyConstructor->setDefaulted();
8174  CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
8175
8176  // Note that we have declared this constructor.
8177  ++ASTContext::NumImplicitCopyConstructorsDeclared;
8178
8179  // Add the parameter to the constructor.
8180  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
8181                                               ClassLoc, ClassLoc,
8182                                               /*IdentifierInfo=*/0,
8183                                               ArgType, /*TInfo=*/0,
8184                                               SC_None,
8185                                               SC_None, 0);
8186  CopyConstructor->setParams(&FromParam, 1);
8187
8188  if (Scope *S = getScopeForContext(ClassDecl))
8189    PushOnScopeChains(CopyConstructor, S, false);
8190  ClassDecl->addDecl(CopyConstructor);
8191
8192  // C++0x [class.copy]p7:
8193  //   ... If the class definition declares a move constructor or move
8194  //   assignment operator, the implicitly declared constructor is defined as
8195  //   deleted; ...
8196  if (ClassDecl->hasUserDeclaredMoveConstructor() ||
8197      ClassDecl->hasUserDeclaredMoveAssignment() ||
8198      ShouldDeleteCopyConstructor(CopyConstructor))
8199    CopyConstructor->setDeletedAsWritten();
8200
8201  return CopyConstructor;
8202}
8203
8204void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
8205                                   CXXConstructorDecl *CopyConstructor) {
8206  assert((CopyConstructor->isDefaulted() &&
8207          CopyConstructor->isCopyConstructor() &&
8208          !CopyConstructor->doesThisDeclarationHaveABody()) &&
8209         "DefineImplicitCopyConstructor - call it for implicit copy ctor");
8210
8211  CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
8212  assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
8213
8214  ImplicitlyDefinedFunctionScope Scope(*this, CopyConstructor);
8215  DiagnosticErrorTrap Trap(Diags);
8216
8217  if (SetCtorInitializers(CopyConstructor, 0, 0, /*AnyErrors=*/false) ||
8218      Trap.hasErrorOccurred()) {
8219    Diag(CurrentLocation, diag::note_member_synthesized_at)
8220      << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
8221    CopyConstructor->setInvalidDecl();
8222  }  else {
8223    CopyConstructor->setBody(ActOnCompoundStmt(CopyConstructor->getLocation(),
8224                                               CopyConstructor->getLocation(),
8225                                               MultiStmtArg(*this, 0, 0),
8226                                               /*isStmtExpr=*/false)
8227                                                              .takeAs<Stmt>());
8228  }
8229
8230  CopyConstructor->setUsed();
8231
8232  if (ASTMutationListener *L = getASTMutationListener()) {
8233    L->CompletedImplicitDefinition(CopyConstructor);
8234  }
8235}
8236
8237Sema::ImplicitExceptionSpecification
8238Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
8239  // C++ [except.spec]p14:
8240  //   An implicitly declared special member function (Clause 12) shall have an
8241  //   exception-specification. [...]
8242  ImplicitExceptionSpecification ExceptSpec(Context);
8243  if (ClassDecl->isInvalidDecl())
8244    return ExceptSpec;
8245
8246  // Direct base-class constructors.
8247  for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8248                                       BEnd = ClassDecl->bases_end();
8249       B != BEnd; ++B) {
8250    if (B->isVirtual()) // Handled below.
8251      continue;
8252
8253    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8254      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8255      CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
8256      // If this is a deleted function, add it anyway. This might be conformant
8257      // with the standard. This might not. I'm not sure. It might not matter.
8258      if (Constructor)
8259        ExceptSpec.CalledDecl(Constructor);
8260    }
8261  }
8262
8263  // Virtual base-class constructors.
8264  for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8265                                       BEnd = ClassDecl->vbases_end();
8266       B != BEnd; ++B) {
8267    if (const RecordType *BaseType = B->getType()->getAs<RecordType>()) {
8268      CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseType->getDecl());
8269      CXXConstructorDecl *Constructor = LookupMovingConstructor(BaseClassDecl);
8270      // If this is a deleted function, add it anyway. This might be conformant
8271      // with the standard. This might not. I'm not sure. It might not matter.
8272      if (Constructor)
8273        ExceptSpec.CalledDecl(Constructor);
8274    }
8275  }
8276
8277  // Field constructors.
8278  for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8279                               FEnd = ClassDecl->field_end();
8280       F != FEnd; ++F) {
8281    if (F->hasInClassInitializer()) {
8282      if (Expr *E = F->getInClassInitializer())
8283        ExceptSpec.CalledExpr(E);
8284      else if (!F->isInvalidDecl())
8285        ExceptSpec.SetDelayed();
8286    } else if (const RecordType *RecordTy
8287              = Context.getBaseElementType(F->getType())->getAs<RecordType>()) {
8288      CXXRecordDecl *FieldRecDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8289      CXXConstructorDecl *Constructor = LookupMovingConstructor(FieldRecDecl);
8290      // If this is a deleted function, add it anyway. This might be conformant
8291      // with the standard. This might not. I'm not sure. It might not matter.
8292      // In particular, the problem is that this function never gets called. It
8293      // might just be ill-formed because this function attempts to refer to
8294      // a deleted function here.
8295      if (Constructor)
8296        ExceptSpec.CalledDecl(Constructor);
8297    }
8298  }
8299
8300  return ExceptSpec;
8301}
8302
8303CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
8304                                                    CXXRecordDecl *ClassDecl) {
8305  ImplicitExceptionSpecification Spec(
8306      ComputeDefaultedMoveCtorExceptionSpec(ClassDecl));
8307
8308  QualType ClassType = Context.getTypeDeclType(ClassDecl);
8309  QualType ArgType = Context.getRValueReferenceType(ClassType);
8310
8311  FunctionProtoType::ExtProtoInfo EPI = Spec.getEPI();
8312
8313  DeclarationName Name
8314    = Context.DeclarationNames.getCXXConstructorName(
8315                                           Context.getCanonicalType(ClassType));
8316  SourceLocation ClassLoc = ClassDecl->getLocation();
8317  DeclarationNameInfo NameInfo(Name, ClassLoc);
8318
8319  // C++0x [class.copy]p11:
8320  //   An implicitly-declared copy/move constructor is an inline public
8321  //   member of its class.
8322  CXXConstructorDecl *MoveConstructor
8323    = CXXConstructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8324                                 Context.getFunctionType(Context.VoidTy,
8325                                                         &ArgType, 1, EPI),
8326                                 /*TInfo=*/0,
8327                                 /*isExplicit=*/false,
8328                                 /*isInline=*/true,
8329                                 /*isImplicitlyDeclared=*/true,
8330                                 // FIXME: apply the rules for definitions here
8331                                 /*isConstexpr=*/false);
8332  MoveConstructor->setAccess(AS_public);
8333  MoveConstructor->setDefaulted();
8334  MoveConstructor->setTrivial(ClassDecl->hasTrivialMoveConstructor());
8335
8336  // Add the parameter to the constructor.
8337  ParmVarDecl *FromParam = ParmVarDecl::Create(Context, MoveConstructor,
8338                                               ClassLoc, ClassLoc,
8339                                               /*IdentifierInfo=*/0,
8340                                               ArgType, /*TInfo=*/0,
8341                                               SC_None,
8342                                               SC_None, 0);
8343  MoveConstructor->setParams(&FromParam, 1);
8344
8345  // C++0x [class.copy]p9:
8346  //   If the definition of a class X does not explicitly declare a move
8347  //   constructor, one will be implicitly declared as defaulted if and only if:
8348  //   [...]
8349  //   - the move constructor would not be implicitly defined as deleted.
8350  if (ShouldDeleteMoveConstructor(MoveConstructor)) {
8351    // Cache this result so that we don't try to generate this over and over
8352    // on every lookup, leaking memory and wasting time.
8353    ClassDecl->setFailedImplicitMoveConstructor();
8354    return 0;
8355  }
8356
8357  // Note that we have declared this constructor.
8358  ++ASTContext::NumImplicitMoveConstructorsDeclared;
8359
8360  if (Scope *S = getScopeForContext(ClassDecl))
8361    PushOnScopeChains(MoveConstructor, S, false);
8362  ClassDecl->addDecl(MoveConstructor);
8363
8364  return MoveConstructor;
8365}
8366
8367void Sema::DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
8368                                   CXXConstructorDecl *MoveConstructor) {
8369  assert((MoveConstructor->isDefaulted() &&
8370          MoveConstructor->isMoveConstructor() &&
8371          !MoveConstructor->doesThisDeclarationHaveABody()) &&
8372         "DefineImplicitMoveConstructor - call it for implicit move ctor");
8373
8374  CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
8375  assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
8376
8377  ImplicitlyDefinedFunctionScope Scope(*this, MoveConstructor);
8378  DiagnosticErrorTrap Trap(Diags);
8379
8380  if (SetCtorInitializers(MoveConstructor, 0, 0, /*AnyErrors=*/false) ||
8381      Trap.hasErrorOccurred()) {
8382    Diag(CurrentLocation, diag::note_member_synthesized_at)
8383      << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
8384    MoveConstructor->setInvalidDecl();
8385  }  else {
8386    MoveConstructor->setBody(ActOnCompoundStmt(MoveConstructor->getLocation(),
8387                                               MoveConstructor->getLocation(),
8388                                               MultiStmtArg(*this, 0, 0),
8389                                               /*isStmtExpr=*/false)
8390                                                              .takeAs<Stmt>());
8391  }
8392
8393  MoveConstructor->setUsed();
8394
8395  if (ASTMutationListener *L = getASTMutationListener()) {
8396    L->CompletedImplicitDefinition(MoveConstructor);
8397  }
8398}
8399
8400ExprResult
8401Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
8402                            CXXConstructorDecl *Constructor,
8403                            MultiExprArg ExprArgs,
8404                            bool RequiresZeroInit,
8405                            unsigned ConstructKind,
8406                            SourceRange ParenRange) {
8407  bool Elidable = false;
8408
8409  // C++0x [class.copy]p34:
8410  //   When certain criteria are met, an implementation is allowed to
8411  //   omit the copy/move construction of a class object, even if the
8412  //   copy/move constructor and/or destructor for the object have
8413  //   side effects. [...]
8414  //     - when a temporary class object that has not been bound to a
8415  //       reference (12.2) would be copied/moved to a class object
8416  //       with the same cv-unqualified type, the copy/move operation
8417  //       can be omitted by constructing the temporary object
8418  //       directly into the target of the omitted copy/move
8419  if (ConstructKind == CXXConstructExpr::CK_Complete &&
8420      Constructor->isCopyOrMoveConstructor() && ExprArgs.size() >= 1) {
8421    Expr *SubExpr = ((Expr **)ExprArgs.get())[0];
8422    Elidable = SubExpr->isTemporaryObject(Context, Constructor->getParent());
8423  }
8424
8425  return BuildCXXConstructExpr(ConstructLoc, DeclInitType, Constructor,
8426                               Elidable, move(ExprArgs), RequiresZeroInit,
8427                               ConstructKind, ParenRange);
8428}
8429
8430/// BuildCXXConstructExpr - Creates a complete call to a constructor,
8431/// including handling of its default argument expressions.
8432ExprResult
8433Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
8434                            CXXConstructorDecl *Constructor, bool Elidable,
8435                            MultiExprArg ExprArgs,
8436                            bool RequiresZeroInit,
8437                            unsigned ConstructKind,
8438                            SourceRange ParenRange) {
8439  unsigned NumExprs = ExprArgs.size();
8440  Expr **Exprs = (Expr **)ExprArgs.release();
8441
8442  for (specific_attr_iterator<NonNullAttr>
8443           i = Constructor->specific_attr_begin<NonNullAttr>(),
8444           e = Constructor->specific_attr_end<NonNullAttr>(); i != e; ++i) {
8445    const NonNullAttr *NonNull = *i;
8446    CheckNonNullArguments(NonNull, ExprArgs.get(), ConstructLoc);
8447  }
8448
8449  MarkDeclarationReferenced(ConstructLoc, Constructor);
8450  return Owned(CXXConstructExpr::Create(Context, DeclInitType, ConstructLoc,
8451                                        Constructor, Elidable, Exprs, NumExprs,
8452                                        RequiresZeroInit,
8453              static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind),
8454                                        ParenRange));
8455}
8456
8457bool Sema::InitializeVarWithConstructor(VarDecl *VD,
8458                                        CXXConstructorDecl *Constructor,
8459                                        MultiExprArg Exprs) {
8460  // FIXME: Provide the correct paren SourceRange when available.
8461  ExprResult TempResult =
8462    BuildCXXConstructExpr(VD->getLocation(), VD->getType(), Constructor,
8463                          move(Exprs), false, CXXConstructExpr::CK_Complete,
8464                          SourceRange());
8465  if (TempResult.isInvalid())
8466    return true;
8467
8468  Expr *Temp = TempResult.takeAs<Expr>();
8469  CheckImplicitConversions(Temp, VD->getLocation());
8470  MarkDeclarationReferenced(VD->getLocation(), Constructor);
8471  Temp = MaybeCreateExprWithCleanups(Temp);
8472  VD->setInit(Temp);
8473
8474  return false;
8475}
8476
8477void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
8478  if (VD->isInvalidDecl()) return;
8479
8480  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
8481  if (ClassDecl->isInvalidDecl()) return;
8482  if (ClassDecl->hasTrivialDestructor()) return;
8483  if (ClassDecl->isDependentContext()) return;
8484
8485  CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
8486  MarkDeclarationReferenced(VD->getLocation(), Destructor);
8487  CheckDestructorAccess(VD->getLocation(), Destructor,
8488                        PDiag(diag::err_access_dtor_var)
8489                        << VD->getDeclName()
8490                        << VD->getType());
8491
8492  if (!VD->hasGlobalStorage()) return;
8493
8494  // Emit warning for non-trivial dtor in global scope (a real global,
8495  // class-static, function-static).
8496  Diag(VD->getLocation(), diag::warn_exit_time_destructor);
8497
8498  // TODO: this should be re-enabled for static locals by !CXAAtExit
8499  if (!VD->isStaticLocal())
8500    Diag(VD->getLocation(), diag::warn_global_destructor);
8501}
8502
8503/// AddCXXDirectInitializerToDecl - This action is called immediately after
8504/// ActOnDeclarator, when a C++ direct initializer is present.
8505/// e.g: "int x(1);"
8506void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl,
8507                                         SourceLocation LParenLoc,
8508                                         MultiExprArg Exprs,
8509                                         SourceLocation RParenLoc,
8510                                         bool TypeMayContainAuto) {
8511  assert(Exprs.size() != 0 && Exprs.get() && "missing expressions");
8512
8513  // If there is no declaration, there was an error parsing it.  Just ignore
8514  // the initializer.
8515  if (RealDecl == 0)
8516    return;
8517
8518  VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
8519  if (!VDecl) {
8520    Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
8521    RealDecl->setInvalidDecl();
8522    return;
8523  }
8524
8525  // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for.
8526  if (TypeMayContainAuto && VDecl->getType()->getContainedAutoType()) {
8527    // FIXME: n3225 doesn't actually seem to indicate this is ill-formed
8528    if (Exprs.size() > 1) {
8529      Diag(Exprs.get()[1]->getSourceRange().getBegin(),
8530           diag::err_auto_var_init_multiple_expressions)
8531        << VDecl->getDeclName() << VDecl->getType()
8532        << VDecl->getSourceRange();
8533      RealDecl->setInvalidDecl();
8534      return;
8535    }
8536
8537    Expr *Init = Exprs.get()[0];
8538    TypeSourceInfo *DeducedType = 0;
8539    if (!DeduceAutoType(VDecl->getTypeSourceInfo(), Init, DeducedType))
8540      Diag(VDecl->getLocation(), diag::err_auto_var_deduction_failure)
8541        << VDecl->getDeclName() << VDecl->getType() << Init->getType()
8542        << Init->getSourceRange();
8543    if (!DeducedType) {
8544      RealDecl->setInvalidDecl();
8545      return;
8546    }
8547    VDecl->setTypeSourceInfo(DeducedType);
8548    VDecl->setType(DeducedType->getType());
8549
8550    // In ARC, infer lifetime.
8551    if (getLangOptions().ObjCAutoRefCount && inferObjCARCLifetime(VDecl))
8552      VDecl->setInvalidDecl();
8553
8554    // If this is a redeclaration, check that the type we just deduced matches
8555    // the previously declared type.
8556    if (VarDecl *Old = VDecl->getPreviousDeclaration())
8557      MergeVarDeclTypes(VDecl, Old);
8558  }
8559
8560  // We will represent direct-initialization similarly to copy-initialization:
8561  //    int x(1);  -as-> int x = 1;
8562  //    ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
8563  //
8564  // Clients that want to distinguish between the two forms, can check for
8565  // direct initializer using VarDecl::hasCXXDirectInitializer().
8566  // A major benefit is that clients that don't particularly care about which
8567  // exactly form was it (like the CodeGen) can handle both cases without
8568  // special case code.
8569
8570  // C++ 8.5p11:
8571  // The form of initialization (using parentheses or '=') is generally
8572  // insignificant, but does matter when the entity being initialized has a
8573  // class type.
8574
8575  if (!VDecl->getType()->isDependentType() &&
8576      RequireCompleteType(VDecl->getLocation(), VDecl->getType(),
8577                          diag::err_typecheck_decl_incomplete_type)) {
8578    VDecl->setInvalidDecl();
8579    return;
8580  }
8581
8582  // The variable can not have an abstract class type.
8583  if (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(),
8584                             diag::err_abstract_type_in_decl,
8585                             AbstractVariableType))
8586    VDecl->setInvalidDecl();
8587
8588  const VarDecl *Def;
8589  if ((Def = VDecl->getDefinition()) && Def != VDecl) {
8590    Diag(VDecl->getLocation(), diag::err_redefinition)
8591    << VDecl->getDeclName();
8592    Diag(Def->getLocation(), diag::note_previous_definition);
8593    VDecl->setInvalidDecl();
8594    return;
8595  }
8596
8597  // C++ [class.static.data]p4
8598  //   If a static data member is of const integral or const
8599  //   enumeration type, its declaration in the class definition can
8600  //   specify a constant-initializer which shall be an integral
8601  //   constant expression (5.19). In that case, the member can appear
8602  //   in integral constant expressions. The member shall still be
8603  //   defined in a namespace scope if it is used in the program and the
8604  //   namespace scope definition shall not contain an initializer.
8605  //
8606  // We already performed a redefinition check above, but for static
8607  // data members we also need to check whether there was an in-class
8608  // declaration with an initializer.
8609  const VarDecl* PrevInit = 0;
8610  if (VDecl->isStaticDataMember() && VDecl->getAnyInitializer(PrevInit)) {
8611    Diag(VDecl->getLocation(), diag::err_redefinition) << VDecl->getDeclName();
8612    Diag(PrevInit->getLocation(), diag::note_previous_definition);
8613    return;
8614  }
8615
8616  bool IsDependent = false;
8617  for (unsigned I = 0, N = Exprs.size(); I != N; ++I) {
8618    if (DiagnoseUnexpandedParameterPack(Exprs.get()[I], UPPC_Expression)) {
8619      VDecl->setInvalidDecl();
8620      return;
8621    }
8622
8623    if (Exprs.get()[I]->isTypeDependent())
8624      IsDependent = true;
8625  }
8626
8627  // If either the declaration has a dependent type or if any of the
8628  // expressions is type-dependent, we represent the initialization
8629  // via a ParenListExpr for later use during template instantiation.
8630  if (VDecl->getType()->isDependentType() || IsDependent) {
8631    // Let clients know that initialization was done with a direct initializer.
8632    VDecl->setCXXDirectInitializer(true);
8633
8634    // Store the initialization expressions as a ParenListExpr.
8635    unsigned NumExprs = Exprs.size();
8636    VDecl->setInit(new (Context) ParenListExpr(
8637        Context, LParenLoc, (Expr **)Exprs.release(), NumExprs, RParenLoc,
8638        VDecl->getType().getNonReferenceType()));
8639    return;
8640  }
8641
8642  // Capture the variable that is being initialized and the style of
8643  // initialization.
8644  InitializedEntity Entity = InitializedEntity::InitializeVariable(VDecl);
8645
8646  // FIXME: Poor source location information.
8647  InitializationKind Kind
8648    = InitializationKind::CreateDirect(VDecl->getLocation(),
8649                                       LParenLoc, RParenLoc);
8650
8651  InitializationSequence InitSeq(*this, Entity, Kind,
8652                                 Exprs.get(), Exprs.size());
8653  ExprResult Result = InitSeq.Perform(*this, Entity, Kind, move(Exprs));
8654  if (Result.isInvalid()) {
8655    VDecl->setInvalidDecl();
8656    return;
8657  }
8658
8659  CheckImplicitConversions(Result.get(), LParenLoc);
8660
8661  Result = MaybeCreateExprWithCleanups(Result);
8662  VDecl->setInit(Result.takeAs<Expr>());
8663  VDecl->setCXXDirectInitializer(true);
8664
8665  CheckCompleteVariableDeclaration(VDecl);
8666}
8667
8668/// \brief Given a constructor and the set of arguments provided for the
8669/// constructor, convert the arguments and add any required default arguments
8670/// to form a proper call to this constructor.
8671///
8672/// \returns true if an error occurred, false otherwise.
8673bool
8674Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
8675                              MultiExprArg ArgsPtr,
8676                              SourceLocation Loc,
8677                              ASTOwningVector<Expr*> &ConvertedArgs) {
8678  // FIXME: This duplicates a lot of code from Sema::ConvertArgumentsForCall.
8679  unsigned NumArgs = ArgsPtr.size();
8680  Expr **Args = (Expr **)ArgsPtr.get();
8681
8682  const FunctionProtoType *Proto
8683    = Constructor->getType()->getAs<FunctionProtoType>();
8684  assert(Proto && "Constructor without a prototype?");
8685  unsigned NumArgsInProto = Proto->getNumArgs();
8686
8687  // If too few arguments are available, we'll fill in the rest with defaults.
8688  if (NumArgs < NumArgsInProto)
8689    ConvertedArgs.reserve(NumArgsInProto);
8690  else
8691    ConvertedArgs.reserve(NumArgs);
8692
8693  VariadicCallType CallType =
8694    Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
8695  SmallVector<Expr *, 8> AllArgs;
8696  bool Invalid = GatherArgumentsForCall(Loc, Constructor,
8697                                        Proto, 0, Args, NumArgs, AllArgs,
8698                                        CallType);
8699  for (unsigned i =0, size = AllArgs.size(); i < size; i++)
8700    ConvertedArgs.push_back(AllArgs[i]);
8701  return Invalid;
8702}
8703
8704static inline bool
8705CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef,
8706                                       const FunctionDecl *FnDecl) {
8707  const DeclContext *DC = FnDecl->getDeclContext()->getRedeclContext();
8708  if (isa<NamespaceDecl>(DC)) {
8709    return SemaRef.Diag(FnDecl->getLocation(),
8710                        diag::err_operator_new_delete_declared_in_namespace)
8711      << FnDecl->getDeclName();
8712  }
8713
8714  if (isa<TranslationUnitDecl>(DC) &&
8715      FnDecl->getStorageClass() == SC_Static) {
8716    return SemaRef.Diag(FnDecl->getLocation(),
8717                        diag::err_operator_new_delete_declared_static)
8718      << FnDecl->getDeclName();
8719  }
8720
8721  return false;
8722}
8723
8724static inline bool
8725CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl,
8726                            CanQualType ExpectedResultType,
8727                            CanQualType ExpectedFirstParamType,
8728                            unsigned DependentParamTypeDiag,
8729                            unsigned InvalidParamTypeDiag) {
8730  QualType ResultType =
8731    FnDecl->getType()->getAs<FunctionType>()->getResultType();
8732
8733  // Check that the result type is not dependent.
8734  if (ResultType->isDependentType())
8735    return SemaRef.Diag(FnDecl->getLocation(),
8736                        diag::err_operator_new_delete_dependent_result_type)
8737    << FnDecl->getDeclName() << ExpectedResultType;
8738
8739  // Check that the result type is what we expect.
8740  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType)
8741    return SemaRef.Diag(FnDecl->getLocation(),
8742                        diag::err_operator_new_delete_invalid_result_type)
8743    << FnDecl->getDeclName() << ExpectedResultType;
8744
8745  // A function template must have at least 2 parameters.
8746  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)
8747    return SemaRef.Diag(FnDecl->getLocation(),
8748                      diag::err_operator_new_delete_template_too_few_parameters)
8749        << FnDecl->getDeclName();
8750
8751  // The function decl must have at least 1 parameter.
8752  if (FnDecl->getNumParams() == 0)
8753    return SemaRef.Diag(FnDecl->getLocation(),
8754                        diag::err_operator_new_delete_too_few_parameters)
8755      << FnDecl->getDeclName();
8756
8757  // Check the the first parameter type is not dependent.
8758  QualType FirstParamType = FnDecl->getParamDecl(0)->getType();
8759  if (FirstParamType->isDependentType())
8760    return SemaRef.Diag(FnDecl->getLocation(), DependentParamTypeDiag)
8761      << FnDecl->getDeclName() << ExpectedFirstParamType;
8762
8763  // Check that the first parameter type is what we expect.
8764  if (SemaRef.Context.getCanonicalType(FirstParamType).getUnqualifiedType() !=
8765      ExpectedFirstParamType)
8766    return SemaRef.Diag(FnDecl->getLocation(), InvalidParamTypeDiag)
8767    << FnDecl->getDeclName() << ExpectedFirstParamType;
8768
8769  return false;
8770}
8771
8772static bool
8773CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
8774  // C++ [basic.stc.dynamic.allocation]p1:
8775  //   A program is ill-formed if an allocation function is declared in a
8776  //   namespace scope other than global scope or declared static in global
8777  //   scope.
8778  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
8779    return true;
8780
8781  CanQualType SizeTy =
8782    SemaRef.Context.getCanonicalType(SemaRef.Context.getSizeType());
8783
8784  // C++ [basic.stc.dynamic.allocation]p1:
8785  //  The return type shall be void*. The first parameter shall have type
8786  //  std::size_t.
8787  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy,
8788                                  SizeTy,
8789                                  diag::err_operator_new_dependent_param_type,
8790                                  diag::err_operator_new_param_type))
8791    return true;
8792
8793  // C++ [basic.stc.dynamic.allocation]p1:
8794  //  The first parameter shall not have an associated default argument.
8795  if (FnDecl->getParamDecl(0)->hasDefaultArg())
8796    return SemaRef.Diag(FnDecl->getLocation(),
8797                        diag::err_operator_new_default_arg)
8798      << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();
8799
8800  return false;
8801}
8802
8803static bool
8804CheckOperatorDeleteDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {
8805  // C++ [basic.stc.dynamic.deallocation]p1:
8806  //   A program is ill-formed if deallocation functions are declared in a
8807  //   namespace scope other than global scope or declared static in global
8808  //   scope.
8809  if (CheckOperatorNewDeleteDeclarationScope(SemaRef, FnDecl))
8810    return true;
8811
8812  // C++ [basic.stc.dynamic.deallocation]p2:
8813  //   Each deallocation function shall return void and its first parameter
8814  //   shall be void*.
8815  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy,
8816                                  SemaRef.Context.VoidPtrTy,
8817                                 diag::err_operator_delete_dependent_param_type,
8818                                 diag::err_operator_delete_param_type))
8819    return true;
8820
8821  return false;
8822}
8823
8824/// CheckOverloadedOperatorDeclaration - Check whether the declaration
8825/// of this overloaded operator is well-formed. If so, returns false;
8826/// otherwise, emits appropriate diagnostics and returns true.
8827bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
8828  assert(FnDecl && FnDecl->isOverloadedOperator() &&
8829         "Expected an overloaded operator declaration");
8830
8831  OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
8832
8833  // C++ [over.oper]p5:
8834  //   The allocation and deallocation functions, operator new,
8835  //   operator new[], operator delete and operator delete[], are
8836  //   described completely in 3.7.3. The attributes and restrictions
8837  //   found in the rest of this subclause do not apply to them unless
8838  //   explicitly stated in 3.7.3.
8839  if (Op == OO_Delete || Op == OO_Array_Delete)
8840    return CheckOperatorDeleteDeclaration(*this, FnDecl);
8841
8842  if (Op == OO_New || Op == OO_Array_New)
8843    return CheckOperatorNewDeclaration(*this, FnDecl);
8844
8845  // C++ [over.oper]p6:
8846  //   An operator function shall either be a non-static member
8847  //   function or be a non-member function and have at least one
8848  //   parameter whose type is a class, a reference to a class, an
8849  //   enumeration, or a reference to an enumeration.
8850  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
8851    if (MethodDecl->isStatic())
8852      return Diag(FnDecl->getLocation(),
8853                  diag::err_operator_overload_static) << FnDecl->getDeclName();
8854  } else {
8855    bool ClassOrEnumParam = false;
8856    for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
8857                                   ParamEnd = FnDecl->param_end();
8858         Param != ParamEnd; ++Param) {
8859      QualType ParamType = (*Param)->getType().getNonReferenceType();
8860      if (ParamType->isDependentType() || ParamType->isRecordType() ||
8861          ParamType->isEnumeralType()) {
8862        ClassOrEnumParam = true;
8863        break;
8864      }
8865    }
8866
8867    if (!ClassOrEnumParam)
8868      return Diag(FnDecl->getLocation(),
8869                  diag::err_operator_overload_needs_class_or_enum)
8870        << FnDecl->getDeclName();
8871  }
8872
8873  // C++ [over.oper]p8:
8874  //   An operator function cannot have default arguments (8.3.6),
8875  //   except where explicitly stated below.
8876  //
8877  // Only the function-call operator allows default arguments
8878  // (C++ [over.call]p1).
8879  if (Op != OO_Call) {
8880    for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
8881         Param != FnDecl->param_end(); ++Param) {
8882      if ((*Param)->hasDefaultArg())
8883        return Diag((*Param)->getLocation(),
8884                    diag::err_operator_overload_default_arg)
8885          << FnDecl->getDeclName() << (*Param)->getDefaultArgRange();
8886    }
8887  }
8888
8889  static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
8890    { false, false, false }
8891#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
8892    , { Unary, Binary, MemberOnly }
8893#include "clang/Basic/OperatorKinds.def"
8894  };
8895
8896  bool CanBeUnaryOperator = OperatorUses[Op][0];
8897  bool CanBeBinaryOperator = OperatorUses[Op][1];
8898  bool MustBeMemberOperator = OperatorUses[Op][2];
8899
8900  // C++ [over.oper]p8:
8901  //   [...] Operator functions cannot have more or fewer parameters
8902  //   than the number required for the corresponding operator, as
8903  //   described in the rest of this subclause.
8904  unsigned NumParams = FnDecl->getNumParams()
8905                     + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
8906  if (Op != OO_Call &&
8907      ((NumParams == 1 && !CanBeUnaryOperator) ||
8908       (NumParams == 2 && !CanBeBinaryOperator) ||
8909       (NumParams < 1) || (NumParams > 2))) {
8910    // We have the wrong number of parameters.
8911    unsigned ErrorKind;
8912    if (CanBeUnaryOperator && CanBeBinaryOperator) {
8913      ErrorKind = 2;  // 2 -> unary or binary.
8914    } else if (CanBeUnaryOperator) {
8915      ErrorKind = 0;  // 0 -> unary
8916    } else {
8917      assert(CanBeBinaryOperator &&
8918             "All non-call overloaded operators are unary or binary!");
8919      ErrorKind = 1;  // 1 -> binary
8920    }
8921
8922    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
8923      << FnDecl->getDeclName() << NumParams << ErrorKind;
8924  }
8925
8926  // Overloaded operators other than operator() cannot be variadic.
8927  if (Op != OO_Call &&
8928      FnDecl->getType()->getAs<FunctionProtoType>()->isVariadic()) {
8929    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
8930      << FnDecl->getDeclName();
8931  }
8932
8933  // Some operators must be non-static member functions.
8934  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
8935    return Diag(FnDecl->getLocation(),
8936                diag::err_operator_overload_must_be_member)
8937      << FnDecl->getDeclName();
8938  }
8939
8940  // C++ [over.inc]p1:
8941  //   The user-defined function called operator++ implements the
8942  //   prefix and postfix ++ operator. If this function is a member
8943  //   function with no parameters, or a non-member function with one
8944  //   parameter of class or enumeration type, it defines the prefix
8945  //   increment operator ++ for objects of that type. If the function
8946  //   is a member function with one parameter (which shall be of type
8947  //   int) or a non-member function with two parameters (the second
8948  //   of which shall be of type int), it defines the postfix
8949  //   increment operator ++ for objects of that type.
8950  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
8951    ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
8952    bool ParamIsInt = false;
8953    if (const BuiltinType *BT = LastParam->getType()->getAs<BuiltinType>())
8954      ParamIsInt = BT->getKind() == BuiltinType::Int;
8955
8956    if (!ParamIsInt)
8957      return Diag(LastParam->getLocation(),
8958                  diag::err_operator_overload_post_incdec_must_be_int)
8959        << LastParam->getType() << (Op == OO_MinusMinus);
8960  }
8961
8962  return false;
8963}
8964
8965/// CheckLiteralOperatorDeclaration - Check whether the declaration
8966/// of this literal operator function is well-formed. If so, returns
8967/// false; otherwise, emits appropriate diagnostics and returns true.
8968bool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {
8969  DeclContext *DC = FnDecl->getDeclContext();
8970  Decl::Kind Kind = DC->getDeclKind();
8971  if (Kind != Decl::TranslationUnit && Kind != Decl::Namespace &&
8972      Kind != Decl::LinkageSpec) {
8973    Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace)
8974      << FnDecl->getDeclName();
8975    return true;
8976  }
8977
8978  bool Valid = false;
8979
8980  // template <char...> type operator "" name() is the only valid template
8981  // signature, and the only valid signature with no parameters.
8982  if (FnDecl->param_size() == 0) {
8983    if (FunctionTemplateDecl *TpDecl = FnDecl->getDescribedFunctionTemplate()) {
8984      // Must have only one template parameter
8985      TemplateParameterList *Params = TpDecl->getTemplateParameters();
8986      if (Params->size() == 1) {
8987        NonTypeTemplateParmDecl *PmDecl =
8988          cast<NonTypeTemplateParmDecl>(Params->getParam(0));
8989
8990        // The template parameter must be a char parameter pack.
8991        if (PmDecl && PmDecl->isTemplateParameterPack() &&
8992            Context.hasSameType(PmDecl->getType(), Context.CharTy))
8993          Valid = true;
8994      }
8995    }
8996  } else {
8997    // Check the first parameter
8998    FunctionDecl::param_iterator Param = FnDecl->param_begin();
8999
9000    QualType T = (*Param)->getType();
9001
9002    // unsigned long long int, long double, and any character type are allowed
9003    // as the only parameters.
9004    if (Context.hasSameType(T, Context.UnsignedLongLongTy) ||
9005        Context.hasSameType(T, Context.LongDoubleTy) ||
9006        Context.hasSameType(T, Context.CharTy) ||
9007        Context.hasSameType(T, Context.WCharTy) ||
9008        Context.hasSameType(T, Context.Char16Ty) ||
9009        Context.hasSameType(T, Context.Char32Ty)) {
9010      if (++Param == FnDecl->param_end())
9011        Valid = true;
9012      goto FinishedParams;
9013    }
9014
9015    // Otherwise it must be a pointer to const; let's strip those qualifiers.
9016    const PointerType *PT = T->getAs<PointerType>();
9017    if (!PT)
9018      goto FinishedParams;
9019    T = PT->getPointeeType();
9020    if (!T.isConstQualified())
9021      goto FinishedParams;
9022    T = T.getUnqualifiedType();
9023
9024    // Move on to the second parameter;
9025    ++Param;
9026
9027    // If there is no second parameter, the first must be a const char *
9028    if (Param == FnDecl->param_end()) {
9029      if (Context.hasSameType(T, Context.CharTy))
9030        Valid = true;
9031      goto FinishedParams;
9032    }
9033
9034    // const char *, const wchar_t*, const char16_t*, and const char32_t*
9035    // are allowed as the first parameter to a two-parameter function
9036    if (!(Context.hasSameType(T, Context.CharTy) ||
9037          Context.hasSameType(T, Context.WCharTy) ||
9038          Context.hasSameType(T, Context.Char16Ty) ||
9039          Context.hasSameType(T, Context.Char32Ty)))
9040      goto FinishedParams;
9041
9042    // The second and final parameter must be an std::size_t
9043    T = (*Param)->getType().getUnqualifiedType();
9044    if (Context.hasSameType(T, Context.getSizeType()) &&
9045        ++Param == FnDecl->param_end())
9046      Valid = true;
9047  }
9048
9049  // FIXME: This diagnostic is absolutely terrible.
9050FinishedParams:
9051  if (!Valid) {
9052    Diag(FnDecl->getLocation(), diag::err_literal_operator_params)
9053      << FnDecl->getDeclName();
9054    return true;
9055  }
9056
9057  StringRef LiteralName
9058    = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
9059  if (LiteralName[0] != '_') {
9060    // C++0x [usrlit.suffix]p1:
9061    //   Literal suffix identifiers that do not start with an underscore are
9062    //   reserved for future standardization.
9063    bool IsHexFloat = true;
9064    if (LiteralName.size() > 1 &&
9065        (LiteralName[0] == 'P' || LiteralName[0] == 'p')) {
9066      for (unsigned I = 1, N = LiteralName.size(); I < N; ++I) {
9067        if (!isdigit(LiteralName[I])) {
9068          IsHexFloat = false;
9069          break;
9070        }
9071      }
9072    }
9073
9074    if (IsHexFloat)
9075      Diag(FnDecl->getLocation(), diag::warn_user_literal_hexfloat)
9076        << LiteralName;
9077    else
9078      Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved);
9079  }
9080
9081  return false;
9082}
9083
9084/// ActOnStartLinkageSpecification - Parsed the beginning of a C++
9085/// linkage specification, including the language and (if present)
9086/// the '{'. ExternLoc is the location of the 'extern', LangLoc is
9087/// the location of the language string literal, which is provided
9088/// by Lang/StrSize. LBraceLoc, if valid, provides the location of
9089/// the '{' brace. Otherwise, this linkage specification does not
9090/// have any braces.
9091Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
9092                                           SourceLocation LangLoc,
9093                                           StringRef Lang,
9094                                           SourceLocation LBraceLoc) {
9095  LinkageSpecDecl::LanguageIDs Language;
9096  if (Lang == "\"C\"")
9097    Language = LinkageSpecDecl::lang_c;
9098  else if (Lang == "\"C++\"")
9099    Language = LinkageSpecDecl::lang_cxx;
9100  else {
9101    Diag(LangLoc, diag::err_bad_language);
9102    return 0;
9103  }
9104
9105  // FIXME: Add all the various semantics of linkage specifications
9106
9107  LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
9108                                               ExternLoc, LangLoc, Language);
9109  CurContext->addDecl(D);
9110  PushDeclContext(S, D);
9111  return D;
9112}
9113
9114/// ActOnFinishLinkageSpecification - Complete the definition of
9115/// the C++ linkage specification LinkageSpec. If RBraceLoc is
9116/// valid, it's the position of the closing '}' brace in a linkage
9117/// specification that uses braces.
9118Decl *Sema::ActOnFinishLinkageSpecification(Scope *S,
9119                                            Decl *LinkageSpec,
9120                                            SourceLocation RBraceLoc) {
9121  if (LinkageSpec) {
9122    if (RBraceLoc.isValid()) {
9123      LinkageSpecDecl* LSDecl = cast<LinkageSpecDecl>(LinkageSpec);
9124      LSDecl->setRBraceLoc(RBraceLoc);
9125    }
9126    PopDeclContext();
9127  }
9128  return LinkageSpec;
9129}
9130
9131/// \brief Perform semantic analysis for the variable declaration that
9132/// occurs within a C++ catch clause, returning the newly-created
9133/// variable.
9134VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
9135                                         TypeSourceInfo *TInfo,
9136                                         SourceLocation StartLoc,
9137                                         SourceLocation Loc,
9138                                         IdentifierInfo *Name) {
9139  bool Invalid = false;
9140  QualType ExDeclType = TInfo->getType();
9141
9142  // Arrays and functions decay.
9143  if (ExDeclType->isArrayType())
9144    ExDeclType = Context.getArrayDecayedType(ExDeclType);
9145  else if (ExDeclType->isFunctionType())
9146    ExDeclType = Context.getPointerType(ExDeclType);
9147
9148  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
9149  // The exception-declaration shall not denote a pointer or reference to an
9150  // incomplete type, other than [cv] void*.
9151  // N2844 forbids rvalue references.
9152  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
9153    Diag(Loc, diag::err_catch_rvalue_ref);
9154    Invalid = true;
9155  }
9156
9157  // GCC allows catching pointers and references to incomplete types
9158  // as an extension; so do we, but we warn by default.
9159
9160  QualType BaseType = ExDeclType;
9161  int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
9162  unsigned DK = diag::err_catch_incomplete;
9163  bool IncompleteCatchIsInvalid = true;
9164  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
9165    BaseType = Ptr->getPointeeType();
9166    Mode = 1;
9167    DK = diag::ext_catch_incomplete_ptr;
9168    IncompleteCatchIsInvalid = false;
9169  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
9170    // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
9171    BaseType = Ref->getPointeeType();
9172    Mode = 2;
9173    DK = diag::ext_catch_incomplete_ref;
9174    IncompleteCatchIsInvalid = false;
9175  }
9176  if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
9177      !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK) &&
9178      IncompleteCatchIsInvalid)
9179    Invalid = true;
9180
9181  if (!Invalid && !ExDeclType->isDependentType() &&
9182      RequireNonAbstractType(Loc, ExDeclType,
9183                             diag::err_abstract_type_in_decl,
9184                             AbstractVariableType))
9185    Invalid = true;
9186
9187  // Only the non-fragile NeXT runtime currently supports C++ catches
9188  // of ObjC types, and no runtime supports catching ObjC types by value.
9189  if (!Invalid && getLangOptions().ObjC1) {
9190    QualType T = ExDeclType;
9191    if (const ReferenceType *RT = T->getAs<ReferenceType>())
9192      T = RT->getPointeeType();
9193
9194    if (T->isObjCObjectType()) {
9195      Diag(Loc, diag::err_objc_object_catch);
9196      Invalid = true;
9197    } else if (T->isObjCObjectPointerType()) {
9198      if (!getLangOptions().ObjCNonFragileABI)
9199        Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);
9200    }
9201  }
9202
9203  VarDecl *ExDecl = VarDecl::Create(Context, CurContext, StartLoc, Loc, Name,
9204                                    ExDeclType, TInfo, SC_None, SC_None);
9205  ExDecl->setExceptionVariable(true);
9206
9207  if (!Invalid && !ExDeclType->isDependentType()) {
9208    if (const RecordType *recordType = ExDeclType->getAs<RecordType>()) {
9209      // C++ [except.handle]p16:
9210      //   The object declared in an exception-declaration or, if the
9211      //   exception-declaration does not specify a name, a temporary (12.2) is
9212      //   copy-initialized (8.5) from the exception object. [...]
9213      //   The object is destroyed when the handler exits, after the destruction
9214      //   of any automatic objects initialized within the handler.
9215      //
9216      // We just pretend to initialize the object with itself, then make sure
9217      // it can be destroyed later.
9218      QualType initType = ExDeclType;
9219
9220      InitializedEntity entity =
9221        InitializedEntity::InitializeVariable(ExDecl);
9222      InitializationKind initKind =
9223        InitializationKind::CreateCopy(Loc, SourceLocation());
9224
9225      Expr *opaqueValue =
9226        new (Context) OpaqueValueExpr(Loc, initType, VK_LValue, OK_Ordinary);
9227      InitializationSequence sequence(*this, entity, initKind, &opaqueValue, 1);
9228      ExprResult result = sequence.Perform(*this, entity, initKind,
9229                                           MultiExprArg(&opaqueValue, 1));
9230      if (result.isInvalid())
9231        Invalid = true;
9232      else {
9233        // If the constructor used was non-trivial, set this as the
9234        // "initializer".
9235        CXXConstructExpr *construct = cast<CXXConstructExpr>(result.take());
9236        if (!construct->getConstructor()->isTrivial()) {
9237          Expr *init = MaybeCreateExprWithCleanups(construct);
9238          ExDecl->setInit(init);
9239        }
9240
9241        // And make sure it's destructable.
9242        FinalizeVarWithDestructor(ExDecl, recordType);
9243      }
9244    }
9245  }
9246
9247  if (Invalid)
9248    ExDecl->setInvalidDecl();
9249
9250  return ExDecl;
9251}
9252
9253/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
9254/// handler.
9255Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
9256  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9257  bool Invalid = D.isInvalidType();
9258
9259  // Check for unexpanded parameter packs.
9260  if (TInfo && DiagnoseUnexpandedParameterPack(D.getIdentifierLoc(), TInfo,
9261                                               UPPC_ExceptionType)) {
9262    TInfo = Context.getTrivialTypeSourceInfo(Context.IntTy,
9263                                             D.getIdentifierLoc());
9264    Invalid = true;
9265  }
9266
9267  IdentifierInfo *II = D.getIdentifier();
9268  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(),
9269                                             LookupOrdinaryName,
9270                                             ForRedeclaration)) {
9271    // The scope should be freshly made just for us. There is just no way
9272    // it contains any previous declaration.
9273    assert(!S->isDeclScope(PrevDecl));
9274    if (PrevDecl->isTemplateParameter()) {
9275      // Maybe we will complain about the shadowed template parameter.
9276      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
9277    }
9278  }
9279
9280  if (D.getCXXScopeSpec().isSet() && !Invalid) {
9281    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
9282      << D.getCXXScopeSpec().getRange();
9283    Invalid = true;
9284  }
9285
9286  VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo,
9287                                              D.getSourceRange().getBegin(),
9288                                              D.getIdentifierLoc(),
9289                                              D.getIdentifier());
9290  if (Invalid)
9291    ExDecl->setInvalidDecl();
9292
9293  // Add the exception declaration into this scope.
9294  if (II)
9295    PushOnScopeChains(ExDecl, S);
9296  else
9297    CurContext->addDecl(ExDecl);
9298
9299  ProcessDeclAttributes(S, ExDecl, D);
9300  return ExDecl;
9301}
9302
9303Decl *Sema::ActOnStaticAssertDeclaration(SourceLocation StaticAssertLoc,
9304                                         Expr *AssertExpr,
9305                                         Expr *AssertMessageExpr_,
9306                                         SourceLocation RParenLoc) {
9307  StringLiteral *AssertMessage = cast<StringLiteral>(AssertMessageExpr_);
9308
9309  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) {
9310    llvm::APSInt Value(32);
9311    if (!AssertExpr->isIntegerConstantExpr(Value, Context)) {
9312      Diag(StaticAssertLoc,
9313           diag::err_static_assert_expression_is_not_constant) <<
9314        AssertExpr->getSourceRange();
9315      return 0;
9316    }
9317
9318    if (Value == 0) {
9319      Diag(StaticAssertLoc, diag::err_static_assert_failed)
9320        << AssertMessage->getString() << AssertExpr->getSourceRange();
9321    }
9322  }
9323
9324  if (DiagnoseUnexpandedParameterPack(AssertExpr, UPPC_StaticAssertExpression))
9325    return 0;
9326
9327  Decl *Decl = StaticAssertDecl::Create(Context, CurContext, StaticAssertLoc,
9328                                        AssertExpr, AssertMessage, RParenLoc);
9329
9330  CurContext->addDecl(Decl);
9331  return Decl;
9332}
9333
9334/// \brief Perform semantic analysis of the given friend type declaration.
9335///
9336/// \returns A friend declaration that.
9337FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation FriendLoc,
9338                                      TypeSourceInfo *TSInfo) {
9339  assert(TSInfo && "NULL TypeSourceInfo for friend type declaration");
9340
9341  QualType T = TSInfo->getType();
9342  SourceRange TypeRange = TSInfo->getTypeLoc().getLocalSourceRange();
9343
9344  if (!getLangOptions().CPlusPlus0x) {
9345    // C++03 [class.friend]p2:
9346    //   An elaborated-type-specifier shall be used in a friend declaration
9347    //   for a class.*
9348    //
9349    //   * The class-key of the elaborated-type-specifier is required.
9350    if (!ActiveTemplateInstantiations.empty()) {
9351      // Do not complain about the form of friend template types during
9352      // template instantiation; we will already have complained when the
9353      // template was declared.
9354    } else if (!T->isElaboratedTypeSpecifier()) {
9355      // If we evaluated the type to a record type, suggest putting
9356      // a tag in front.
9357      if (const RecordType *RT = T->getAs<RecordType>()) {
9358        RecordDecl *RD = RT->getDecl();
9359
9360        std::string InsertionText = std::string(" ") + RD->getKindName();
9361
9362        Diag(TypeRange.getBegin(), diag::ext_unelaborated_friend_type)
9363          << (unsigned) RD->getTagKind()
9364          << T
9365          << FixItHint::CreateInsertion(PP.getLocForEndOfToken(FriendLoc),
9366                                        InsertionText);
9367      } else {
9368        Diag(FriendLoc, diag::ext_nonclass_type_friend)
9369          << T
9370          << SourceRange(FriendLoc, TypeRange.getEnd());
9371      }
9372    } else if (T->getAs<EnumType>()) {
9373      Diag(FriendLoc, diag::ext_enum_friend)
9374        << T
9375        << SourceRange(FriendLoc, TypeRange.getEnd());
9376    }
9377  }
9378
9379  // C++0x [class.friend]p3:
9380  //   If the type specifier in a friend declaration designates a (possibly
9381  //   cv-qualified) class type, that class is declared as a friend; otherwise,
9382  //   the friend declaration is ignored.
9383
9384  // FIXME: C++0x has some syntactic restrictions on friend type declarations
9385  // in [class.friend]p3 that we do not implement.
9386
9387  return FriendDecl::Create(Context, CurContext, FriendLoc, TSInfo, FriendLoc);
9388}
9389
9390/// Handle a friend tag declaration where the scope specifier was
9391/// templated.
9392Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
9393                                    unsigned TagSpec, SourceLocation TagLoc,
9394                                    CXXScopeSpec &SS,
9395                                    IdentifierInfo *Name, SourceLocation NameLoc,
9396                                    AttributeList *Attr,
9397                                    MultiTemplateParamsArg TempParamLists) {
9398  TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
9399
9400  bool isExplicitSpecialization = false;
9401  bool Invalid = false;
9402
9403  if (TemplateParameterList *TemplateParams
9404        = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS,
9405                                                  TempParamLists.get(),
9406                                                  TempParamLists.size(),
9407                                                  /*friend*/ true,
9408                                                  isExplicitSpecialization,
9409                                                  Invalid)) {
9410    if (TemplateParams->size() > 0) {
9411      // This is a declaration of a class template.
9412      if (Invalid)
9413        return 0;
9414
9415      return CheckClassTemplate(S, TagSpec, TUK_Friend, TagLoc,
9416                                SS, Name, NameLoc, Attr,
9417                                TemplateParams, AS_public,
9418                                TempParamLists.size() - 1,
9419                   (TemplateParameterList**) TempParamLists.release()).take();
9420    } else {
9421      // The "template<>" header is extraneous.
9422      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams)
9423        << TypeWithKeyword::getTagTypeKindName(Kind) << Name;
9424      isExplicitSpecialization = true;
9425    }
9426  }
9427
9428  if (Invalid) return 0;
9429
9430  assert(SS.isNotEmpty() && "valid templated tag with no SS and no direct?");
9431
9432  bool isAllExplicitSpecializations = true;
9433  for (unsigned I = TempParamLists.size(); I-- > 0; ) {
9434    if (TempParamLists.get()[I]->size()) {
9435      isAllExplicitSpecializations = false;
9436      break;
9437    }
9438  }
9439
9440  // FIXME: don't ignore attributes.
9441
9442  // If it's explicit specializations all the way down, just forget
9443  // about the template header and build an appropriate non-templated
9444  // friend.  TODO: for source fidelity, remember the headers.
9445  if (isAllExplicitSpecializations) {
9446    NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
9447    ElaboratedTypeKeyword Keyword
9448      = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
9449    QualType T = CheckTypenameType(Keyword, TagLoc, QualifierLoc,
9450                                   *Name, NameLoc);
9451    if (T.isNull())
9452      return 0;
9453
9454    TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
9455    if (isa<DependentNameType>(T)) {
9456      DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
9457      TL.setKeywordLoc(TagLoc);
9458      TL.setQualifierLoc(QualifierLoc);
9459      TL.setNameLoc(NameLoc);
9460    } else {
9461      ElaboratedTypeLoc TL = cast<ElaboratedTypeLoc>(TSI->getTypeLoc());
9462      TL.setKeywordLoc(TagLoc);
9463      TL.setQualifierLoc(QualifierLoc);
9464      cast<TypeSpecTypeLoc>(TL.getNamedTypeLoc()).setNameLoc(NameLoc);
9465    }
9466
9467    FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
9468                                            TSI, FriendLoc);
9469    Friend->setAccess(AS_public);
9470    CurContext->addDecl(Friend);
9471    return Friend;
9472  }
9473
9474  // Handle the case of a templated-scope friend class.  e.g.
9475  //   template <class T> class A<T>::B;
9476  // FIXME: we don't support these right now.
9477  ElaboratedTypeKeyword ETK = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
9478  QualType T = Context.getDependentNameType(ETK, SS.getScopeRep(), Name);
9479  TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
9480  DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc());
9481  TL.setKeywordLoc(TagLoc);
9482  TL.setQualifierLoc(SS.getWithLocInContext(Context));
9483  TL.setNameLoc(NameLoc);
9484
9485  FriendDecl *Friend = FriendDecl::Create(Context, CurContext, NameLoc,
9486                                          TSI, FriendLoc);
9487  Friend->setAccess(AS_public);
9488  Friend->setUnsupportedFriend(true);
9489  CurContext->addDecl(Friend);
9490  return Friend;
9491}
9492
9493
9494/// Handle a friend type declaration.  This works in tandem with
9495/// ActOnTag.
9496///
9497/// Notes on friend class templates:
9498///
9499/// We generally treat friend class declarations as if they were
9500/// declaring a class.  So, for example, the elaborated type specifier
9501/// in a friend declaration is required to obey the restrictions of a
9502/// class-head (i.e. no typedefs in the scope chain), template
9503/// parameters are required to match up with simple template-ids, &c.
9504/// However, unlike when declaring a template specialization, it's
9505/// okay to refer to a template specialization without an empty
9506/// template parameter declaration, e.g.
9507///   friend class A<T>::B<unsigned>;
9508/// We permit this as a special case; if there are any template
9509/// parameters present at all, require proper matching, i.e.
9510///   template <> template <class T> friend class A<int>::B;
9511Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS,
9512                                MultiTemplateParamsArg TempParams) {
9513  SourceLocation Loc = DS.getSourceRange().getBegin();
9514
9515  assert(DS.isFriendSpecified());
9516  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
9517
9518  // Try to convert the decl specifier to a type.  This works for
9519  // friend templates because ActOnTag never produces a ClassTemplateDecl
9520  // for a TUK_Friend.
9521  Declarator TheDeclarator(DS, Declarator::MemberContext);
9522  TypeSourceInfo *TSI = GetTypeForDeclarator(TheDeclarator, S);
9523  QualType T = TSI->getType();
9524  if (TheDeclarator.isInvalidType())
9525    return 0;
9526
9527  if (DiagnoseUnexpandedParameterPack(Loc, TSI, UPPC_FriendDeclaration))
9528    return 0;
9529
9530  // This is definitely an error in C++98.  It's probably meant to
9531  // be forbidden in C++0x, too, but the specification is just
9532  // poorly written.
9533  //
9534  // The problem is with declarations like the following:
9535  //   template <T> friend A<T>::foo;
9536  // where deciding whether a class C is a friend or not now hinges
9537  // on whether there exists an instantiation of A that causes
9538  // 'foo' to equal C.  There are restrictions on class-heads
9539  // (which we declare (by fiat) elaborated friend declarations to
9540  // be) that makes this tractable.
9541  //
9542  // FIXME: handle "template <> friend class A<T>;", which
9543  // is possibly well-formed?  Who even knows?
9544  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {
9545    Diag(Loc, diag::err_tagless_friend_type_template)
9546      << DS.getSourceRange();
9547    return 0;
9548  }
9549
9550  // C++98 [class.friend]p1: A friend of a class is a function
9551  //   or class that is not a member of the class . . .
9552  // This is fixed in DR77, which just barely didn't make the C++03
9553  // deadline.  It's also a very silly restriction that seriously
9554  // affects inner classes and which nobody else seems to implement;
9555  // thus we never diagnose it, not even in -pedantic.
9556  //
9557  // But note that we could warn about it: it's always useless to
9558  // friend one of your own members (it's not, however, worthless to
9559  // friend a member of an arbitrary specialization of your template).
9560
9561  Decl *D;
9562  if (unsigned NumTempParamLists = TempParams.size())
9563    D = FriendTemplateDecl::Create(Context, CurContext, Loc,
9564                                   NumTempParamLists,
9565                                   TempParams.release(),
9566                                   TSI,
9567                                   DS.getFriendSpecLoc());
9568  else
9569    D = CheckFriendTypeDecl(DS.getFriendSpecLoc(), TSI);
9570
9571  if (!D)
9572    return 0;
9573
9574  D->setAccess(AS_public);
9575  CurContext->addDecl(D);
9576
9577  return D;
9578}
9579
9580Decl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, bool IsDefinition,
9581                                    MultiTemplateParamsArg TemplateParams) {
9582  const DeclSpec &DS = D.getDeclSpec();
9583
9584  assert(DS.isFriendSpecified());
9585  assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified);
9586
9587  SourceLocation Loc = D.getIdentifierLoc();
9588  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
9589  QualType T = TInfo->getType();
9590
9591  // C++ [class.friend]p1
9592  //   A friend of a class is a function or class....
9593  // Note that this sees through typedefs, which is intended.
9594  // It *doesn't* see through dependent types, which is correct
9595  // according to [temp.arg.type]p3:
9596  //   If a declaration acquires a function type through a
9597  //   type dependent on a template-parameter and this causes
9598  //   a declaration that does not use the syntactic form of a
9599  //   function declarator to have a function type, the program
9600  //   is ill-formed.
9601  if (!T->isFunctionType()) {
9602    Diag(Loc, diag::err_unexpected_friend);
9603
9604    // It might be worthwhile to try to recover by creating an
9605    // appropriate declaration.
9606    return 0;
9607  }
9608
9609  // C++ [namespace.memdef]p3
9610  //  - If a friend declaration in a non-local class first declares a
9611  //    class or function, the friend class or function is a member
9612  //    of the innermost enclosing namespace.
9613  //  - The name of the friend is not found by simple name lookup
9614  //    until a matching declaration is provided in that namespace
9615  //    scope (either before or after the class declaration granting
9616  //    friendship).
9617  //  - If a friend function is called, its name may be found by the
9618  //    name lookup that considers functions from namespaces and
9619  //    classes associated with the types of the function arguments.
9620  //  - When looking for a prior declaration of a class or a function
9621  //    declared as a friend, scopes outside the innermost enclosing
9622  //    namespace scope are not considered.
9623
9624  CXXScopeSpec &SS = D.getCXXScopeSpec();
9625  DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
9626  DeclarationName Name = NameInfo.getName();
9627  assert(Name);
9628
9629  // Check for unexpanded parameter packs.
9630  if (DiagnoseUnexpandedParameterPack(Loc, TInfo, UPPC_FriendDeclaration) ||
9631      DiagnoseUnexpandedParameterPack(NameInfo, UPPC_FriendDeclaration) ||
9632      DiagnoseUnexpandedParameterPack(SS, UPPC_FriendDeclaration))
9633    return 0;
9634
9635  // The context we found the declaration in, or in which we should
9636  // create the declaration.
9637  DeclContext *DC;
9638  Scope *DCScope = S;
9639  LookupResult Previous(*this, NameInfo, LookupOrdinaryName,
9640                        ForRedeclaration);
9641
9642  // FIXME: there are different rules in local classes
9643
9644  // There are four cases here.
9645  //   - There's no scope specifier, in which case we just go to the
9646  //     appropriate scope and look for a function or function template
9647  //     there as appropriate.
9648  // Recover from invalid scope qualifiers as if they just weren't there.
9649  if (SS.isInvalid() || !SS.isSet()) {
9650    // C++0x [namespace.memdef]p3:
9651    //   If the name in a friend declaration is neither qualified nor
9652    //   a template-id and the declaration is a function or an
9653    //   elaborated-type-specifier, the lookup to determine whether
9654    //   the entity has been previously declared shall not consider
9655    //   any scopes outside the innermost enclosing namespace.
9656    // C++0x [class.friend]p11:
9657    //   If a friend declaration appears in a local class and the name
9658    //   specified is an unqualified name, a prior declaration is
9659    //   looked up without considering scopes that are outside the
9660    //   innermost enclosing non-class scope. For a friend function
9661    //   declaration, if there is no prior declaration, the program is
9662    //   ill-formed.
9663    bool isLocal = cast<CXXRecordDecl>(CurContext)->isLocalClass();
9664    bool isTemplateId = D.getName().getKind() == UnqualifiedId::IK_TemplateId;
9665
9666    // Find the appropriate context according to the above.
9667    DC = CurContext;
9668    while (true) {
9669      // Skip class contexts.  If someone can cite chapter and verse
9670      // for this behavior, that would be nice --- it's what GCC and
9671      // EDG do, and it seems like a reasonable intent, but the spec
9672      // really only says that checks for unqualified existing
9673      // declarations should stop at the nearest enclosing namespace,
9674      // not that they should only consider the nearest enclosing
9675      // namespace.
9676      while (DC->isRecord())
9677        DC = DC->getParent();
9678
9679      LookupQualifiedName(Previous, DC);
9680
9681      // TODO: decide what we think about using declarations.
9682      if (isLocal || !Previous.empty())
9683        break;
9684
9685      if (isTemplateId) {
9686        if (isa<TranslationUnitDecl>(DC)) break;
9687      } else {
9688        if (DC->isFileContext()) break;
9689      }
9690      DC = DC->getParent();
9691    }
9692
9693    // C++ [class.friend]p1: A friend of a class is a function or
9694    //   class that is not a member of the class . . .
9695    // C++0x changes this for both friend types and functions.
9696    // Most C++ 98 compilers do seem to give an error here, so
9697    // we do, too.
9698    if (!Previous.empty() && DC->Equals(CurContext)
9699        && !getLangOptions().CPlusPlus0x)
9700      Diag(DS.getFriendSpecLoc(), diag::err_friend_is_member);
9701
9702    DCScope = getScopeForDeclContext(S, DC);
9703
9704  //   - There's a non-dependent scope specifier, in which case we
9705  //     compute it and do a previous lookup there for a function
9706  //     or function template.
9707  } else if (!SS.getScopeRep()->isDependent()) {
9708    DC = computeDeclContext(SS);
9709    if (!DC) return 0;
9710
9711    if (RequireCompleteDeclContext(SS, DC)) return 0;
9712
9713    LookupQualifiedName(Previous, DC);
9714
9715    // Ignore things found implicitly in the wrong scope.
9716    // TODO: better diagnostics for this case.  Suggesting the right
9717    // qualified scope would be nice...
9718    LookupResult::Filter F = Previous.makeFilter();
9719    while (F.hasNext()) {
9720      NamedDecl *D = F.next();
9721      if (!DC->InEnclosingNamespaceSetOf(
9722              D->getDeclContext()->getRedeclContext()))
9723        F.erase();
9724    }
9725    F.done();
9726
9727    if (Previous.empty()) {
9728      D.setInvalidType();
9729      Diag(Loc, diag::err_qualified_friend_not_found) << Name << T;
9730      return 0;
9731    }
9732
9733    // C++ [class.friend]p1: A friend of a class is a function or
9734    //   class that is not a member of the class . . .
9735    if (DC->Equals(CurContext))
9736      Diag(DS.getFriendSpecLoc(), diag::err_friend_is_member);
9737
9738  //   - There's a scope specifier that does not match any template
9739  //     parameter lists, in which case we use some arbitrary context,
9740  //     create a method or method template, and wait for instantiation.
9741  //   - There's a scope specifier that does match some template
9742  //     parameter lists, which we don't handle right now.
9743  } else {
9744    DC = CurContext;
9745    assert(isa<CXXRecordDecl>(DC) && "friend declaration not in class?");
9746  }
9747
9748  if (!DC->isRecord()) {
9749    // This implies that it has to be an operator or function.
9750    if (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ||
9751        D.getName().getKind() == UnqualifiedId::IK_DestructorName ||
9752        D.getName().getKind() == UnqualifiedId::IK_ConversionFunctionId) {
9753      Diag(Loc, diag::err_introducing_special_friend) <<
9754        (D.getName().getKind() == UnqualifiedId::IK_ConstructorName ? 0 :
9755         D.getName().getKind() == UnqualifiedId::IK_DestructorName ? 1 : 2);
9756      return 0;
9757    }
9758  }
9759
9760  bool Redeclaration = false;
9761  bool AddToScope = true;
9762  NamedDecl *ND = ActOnFunctionDeclarator(DCScope, D, DC, T, TInfo, Previous,
9763                                          move(TemplateParams),
9764                                          IsDefinition,
9765                                          Redeclaration, AddToScope);
9766  if (!ND) return 0;
9767
9768  assert(ND->getDeclContext() == DC);
9769  assert(ND->getLexicalDeclContext() == CurContext);
9770
9771  // Add the function declaration to the appropriate lookup tables,
9772  // adjusting the redeclarations list as necessary.  We don't
9773  // want to do this yet if the friending class is dependent.
9774  //
9775  // Also update the scope-based lookup if the target context's
9776  // lookup context is in lexical scope.
9777  if (!CurContext->isDependentContext()) {
9778    DC = DC->getRedeclContext();
9779    DC->makeDeclVisibleInContext(ND, /* Recoverable=*/ false);
9780    if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
9781      PushOnScopeChains(ND, EnclosingScope, /*AddToContext=*/ false);
9782  }
9783
9784  FriendDecl *FrD = FriendDecl::Create(Context, CurContext,
9785                                       D.getIdentifierLoc(), ND,
9786                                       DS.getFriendSpecLoc());
9787  FrD->setAccess(AS_public);
9788  CurContext->addDecl(FrD);
9789
9790  if (ND->isInvalidDecl())
9791    FrD->setInvalidDecl();
9792  else {
9793    FunctionDecl *FD;
9794    if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9795      FD = FTD->getTemplatedDecl();
9796    else
9797      FD = cast<FunctionDecl>(ND);
9798
9799    // Mark templated-scope function declarations as unsupported.
9800    if (FD->getNumTemplateParameterLists())
9801      FrD->setUnsupportedFriend(true);
9802  }
9803
9804  return ND;
9805}
9806
9807void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
9808  AdjustDeclIfTemplate(Dcl);
9809
9810  FunctionDecl *Fn = dyn_cast<FunctionDecl>(Dcl);
9811  if (!Fn) {
9812    Diag(DelLoc, diag::err_deleted_non_function);
9813    return;
9814  }
9815  if (const FunctionDecl *Prev = Fn->getPreviousDeclaration()) {
9816    Diag(DelLoc, diag::err_deleted_decl_not_first);
9817    Diag(Prev->getLocation(), diag::note_previous_declaration);
9818    // If the declaration wasn't the first, we delete the function anyway for
9819    // recovery.
9820  }
9821  Fn->setDeletedAsWritten();
9822}
9823
9824void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
9825  CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Dcl);
9826
9827  if (MD) {
9828    if (MD->getParent()->isDependentType()) {
9829      MD->setDefaulted();
9830      MD->setExplicitlyDefaulted();
9831      return;
9832    }
9833
9834    CXXSpecialMember Member = getSpecialMember(MD);
9835    if (Member == CXXInvalid) {
9836      Diag(DefaultLoc, diag::err_default_special_members);
9837      return;
9838    }
9839
9840    MD->setDefaulted();
9841    MD->setExplicitlyDefaulted();
9842
9843    // If this definition appears within the record, do the checking when
9844    // the record is complete.
9845    const FunctionDecl *Primary = MD;
9846    if (MD->getTemplatedKind() != FunctionDecl::TK_NonTemplate)
9847      // Find the uninstantiated declaration that actually had the '= default'
9848      // on it.
9849      MD->getTemplateInstantiationPattern()->isDefined(Primary);
9850
9851    if (Primary == Primary->getCanonicalDecl())
9852      return;
9853
9854    switch (Member) {
9855    case CXXDefaultConstructor: {
9856      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
9857      CheckExplicitlyDefaultedDefaultConstructor(CD);
9858      if (!CD->isInvalidDecl())
9859        DefineImplicitDefaultConstructor(DefaultLoc, CD);
9860      break;
9861    }
9862
9863    case CXXCopyConstructor: {
9864      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
9865      CheckExplicitlyDefaultedCopyConstructor(CD);
9866      if (!CD->isInvalidDecl())
9867        DefineImplicitCopyConstructor(DefaultLoc, CD);
9868      break;
9869    }
9870
9871    case CXXCopyAssignment: {
9872      CheckExplicitlyDefaultedCopyAssignment(MD);
9873      if (!MD->isInvalidDecl())
9874        DefineImplicitCopyAssignment(DefaultLoc, MD);
9875      break;
9876    }
9877
9878    case CXXDestructor: {
9879      CXXDestructorDecl *DD = cast<CXXDestructorDecl>(MD);
9880      CheckExplicitlyDefaultedDestructor(DD);
9881      if (!DD->isInvalidDecl())
9882        DefineImplicitDestructor(DefaultLoc, DD);
9883      break;
9884    }
9885
9886    case CXXMoveConstructor: {
9887      CXXConstructorDecl *CD = cast<CXXConstructorDecl>(MD);
9888      CheckExplicitlyDefaultedMoveConstructor(CD);
9889      if (!CD->isInvalidDecl())
9890        DefineImplicitMoveConstructor(DefaultLoc, CD);
9891      break;
9892    }
9893
9894    case CXXMoveAssignment: {
9895      CheckExplicitlyDefaultedMoveAssignment(MD);
9896      if (!MD->isInvalidDecl())
9897        DefineImplicitMoveAssignment(DefaultLoc, MD);
9898      break;
9899    }
9900
9901    case CXXInvalid:
9902      assert(false && "Invalid special member.");
9903      break;
9904    }
9905  } else {
9906    Diag(DefaultLoc, diag::err_default_special_members);
9907  }
9908}
9909
9910static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
9911  for (Stmt::child_range CI = S->children(); CI; ++CI) {
9912    Stmt *SubStmt = *CI;
9913    if (!SubStmt)
9914      continue;
9915    if (isa<ReturnStmt>(SubStmt))
9916      Self.Diag(SubStmt->getSourceRange().getBegin(),
9917           diag::err_return_in_constructor_handler);
9918    if (!isa<Expr>(SubStmt))
9919      SearchForReturnInStmt(Self, SubStmt);
9920  }
9921}
9922
9923void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
9924  for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
9925    CXXCatchStmt *Handler = TryBlock->getHandler(I);
9926    SearchForReturnInStmt(*this, Handler);
9927  }
9928}
9929
9930bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
9931                                             const CXXMethodDecl *Old) {
9932  QualType NewTy = New->getType()->getAs<FunctionType>()->getResultType();
9933  QualType OldTy = Old->getType()->getAs<FunctionType>()->getResultType();
9934
9935  if (Context.hasSameType(NewTy, OldTy) ||
9936      NewTy->isDependentType() || OldTy->isDependentType())
9937    return false;
9938
9939  // Check if the return types are covariant
9940  QualType NewClassTy, OldClassTy;
9941
9942  /// Both types must be pointers or references to classes.
9943  if (const PointerType *NewPT = NewTy->getAs<PointerType>()) {
9944    if (const PointerType *OldPT = OldTy->getAs<PointerType>()) {
9945      NewClassTy = NewPT->getPointeeType();
9946      OldClassTy = OldPT->getPointeeType();
9947    }
9948  } else if (const ReferenceType *NewRT = NewTy->getAs<ReferenceType>()) {
9949    if (const ReferenceType *OldRT = OldTy->getAs<ReferenceType>()) {
9950      if (NewRT->getTypeClass() == OldRT->getTypeClass()) {
9951        NewClassTy = NewRT->getPointeeType();
9952        OldClassTy = OldRT->getPointeeType();
9953      }
9954    }
9955  }
9956
9957  // The return types aren't either both pointers or references to a class type.
9958  if (NewClassTy.isNull()) {
9959    Diag(New->getLocation(),
9960         diag::err_different_return_type_for_overriding_virtual_function)
9961      << New->getDeclName() << NewTy << OldTy;
9962    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
9963
9964    return true;
9965  }
9966
9967  // C++ [class.virtual]p6:
9968  //   If the return type of D::f differs from the return type of B::f, the
9969  //   class type in the return type of D::f shall be complete at the point of
9970  //   declaration of D::f or shall be the class type D.
9971  if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {
9972    if (!RT->isBeingDefined() &&
9973        RequireCompleteType(New->getLocation(), NewClassTy,
9974                            PDiag(diag::err_covariant_return_incomplete)
9975                              << New->getDeclName()))
9976    return true;
9977  }
9978
9979  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {
9980    // Check if the new class derives from the old class.
9981    if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
9982      Diag(New->getLocation(),
9983           diag::err_covariant_return_not_derived)
9984      << New->getDeclName() << NewTy << OldTy;
9985      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
9986      return true;
9987    }
9988
9989    // Check if we the conversion from derived to base is valid.
9990    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
9991                    diag::err_covariant_return_inaccessible_base,
9992                    diag::err_covariant_return_ambiguous_derived_to_base_conv,
9993                    // FIXME: Should this point to the return type?
9994                    New->getLocation(), SourceRange(), New->getDeclName(), 0)) {
9995      // FIXME: this note won't trigger for delayed access control
9996      // diagnostics, and it's impossible to get an undelayed error
9997      // here from access control during the original parse because
9998      // the ParsingDeclSpec/ParsingDeclarator are still in scope.
9999      Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10000      return true;
10001    }
10002  }
10003
10004  // The qualifiers of the return types must be the same.
10005  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {
10006    Diag(New->getLocation(),
10007         diag::err_covariant_return_type_different_qualifications)
10008    << New->getDeclName() << NewTy << OldTy;
10009    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10010    return true;
10011  };
10012
10013
10014  // The new class type must have the same or less qualifiers as the old type.
10015  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
10016    Diag(New->getLocation(),
10017         diag::err_covariant_return_type_class_type_more_qualified)
10018    << New->getDeclName() << NewTy << OldTy;
10019    Diag(Old->getLocation(), diag::note_overridden_virtual_function);
10020    return true;
10021  };
10022
10023  return false;
10024}
10025
10026/// \brief Mark the given method pure.
10027///
10028/// \param Method the method to be marked pure.
10029///
10030/// \param InitRange the source range that covers the "0" initializer.
10031bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {
10032  SourceLocation EndLoc = InitRange.getEnd();
10033  if (EndLoc.isValid())
10034    Method->setRangeEnd(EndLoc);
10035
10036  if (Method->isVirtual() || Method->getParent()->isDependentContext()) {
10037    Method->setPure();
10038    return false;
10039  }
10040
10041  if (!Method->isInvalidDecl())
10042    Diag(Method->getLocation(), diag::err_non_virtual_pure)
10043      << Method->getDeclName() << InitRange;
10044  return true;
10045}
10046
10047/// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse
10048/// an initializer for the out-of-line declaration 'Dcl'.  The scope
10049/// is a fresh scope pushed for just this purpose.
10050///
10051/// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
10052/// static data member of class X, names should be looked up in the scope of
10053/// class X.
10054void Sema::ActOnCXXEnterDeclInitializer(Scope *S, Decl *D) {
10055  // If there is no declaration, there was an error parsing it.
10056  if (D == 0 || D->isInvalidDecl()) return;
10057
10058  // We should only get called for declarations with scope specifiers, like:
10059  //   int foo::bar;
10060  assert(D->isOutOfLine());
10061  EnterDeclaratorContext(S, D->getDeclContext());
10062}
10063
10064/// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
10065/// initializer for the out-of-line declaration 'D'.
10066void Sema::ActOnCXXExitDeclInitializer(Scope *S, Decl *D) {
10067  // If there is no declaration, there was an error parsing it.
10068  if (D == 0 || D->isInvalidDecl()) return;
10069
10070  assert(D->isOutOfLine());
10071  ExitDeclaratorContext(S);
10072}
10073
10074/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a
10075/// C++ if/switch/while/for statement.
10076/// e.g: "if (int x = f()) {...}"
10077DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {
10078  // C++ 6.4p2:
10079  // The declarator shall not specify a function or an array.
10080  // The type-specifier-seq shall not contain typedef and shall not declare a
10081  // new class or enumeration.
10082  assert(D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
10083         "Parser allowed 'typedef' as storage class of condition decl.");
10084
10085  Decl *Dcl = ActOnDeclarator(S, D);
10086  if (!Dcl)
10087    return true;
10088
10089  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.
10090    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type)
10091      << D.getSourceRange();
10092    return true;
10093  }
10094
10095  return Dcl;
10096}
10097
10098void Sema::LoadExternalVTableUses() {
10099  if (!ExternalSource)
10100    return;
10101
10102  SmallVector<ExternalVTableUse, 4> VTables;
10103  ExternalSource->ReadUsedVTables(VTables);
10104  SmallVector<VTableUse, 4> NewUses;
10105  for (unsigned I = 0, N = VTables.size(); I != N; ++I) {
10106    llvm::DenseMap<CXXRecordDecl *, bool>::iterator Pos
10107      = VTablesUsed.find(VTables[I].Record);
10108    // Even if a definition wasn't required before, it may be required now.
10109    if (Pos != VTablesUsed.end()) {
10110      if (!Pos->second && VTables[I].DefinitionRequired)
10111        Pos->second = true;
10112      continue;
10113    }
10114
10115    VTablesUsed[VTables[I].Record] = VTables[I].DefinitionRequired;
10116    NewUses.push_back(VTableUse(VTables[I].Record, VTables[I].Location));
10117  }
10118
10119  VTableUses.insert(VTableUses.begin(), NewUses.begin(), NewUses.end());
10120}
10121
10122void Sema::MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
10123                          bool DefinitionRequired) {
10124  // Ignore any vtable uses in unevaluated operands or for classes that do
10125  // not have a vtable.
10126  if (!Class->isDynamicClass() || Class->isDependentContext() ||
10127      CurContext->isDependentContext() ||
10128      ExprEvalContexts.back().Context == Unevaluated)
10129    return;
10130
10131  // Try to insert this class into the map.
10132  LoadExternalVTableUses();
10133  Class = cast<CXXRecordDecl>(Class->getCanonicalDecl());
10134  std::pair<llvm::DenseMap<CXXRecordDecl *, bool>::iterator, bool>
10135    Pos = VTablesUsed.insert(std::make_pair(Class, DefinitionRequired));
10136  if (!Pos.second) {
10137    // If we already had an entry, check to see if we are promoting this vtable
10138    // to required a definition. If so, we need to reappend to the VTableUses
10139    // list, since we may have already processed the first entry.
10140    if (DefinitionRequired && !Pos.first->second) {
10141      Pos.first->second = true;
10142    } else {
10143      // Otherwise, we can early exit.
10144      return;
10145    }
10146  }
10147
10148  // Local classes need to have their virtual members marked
10149  // immediately. For all other classes, we mark their virtual members
10150  // at the end of the translation unit.
10151  if (Class->isLocalClass())
10152    MarkVirtualMembersReferenced(Loc, Class);
10153  else
10154    VTableUses.push_back(std::make_pair(Class, Loc));
10155}
10156
10157bool Sema::DefineUsedVTables() {
10158  LoadExternalVTableUses();
10159  if (VTableUses.empty())
10160    return false;
10161
10162  // Note: The VTableUses vector could grow as a result of marking
10163  // the members of a class as "used", so we check the size each
10164  // time through the loop and prefer indices (with are stable) to
10165  // iterators (which are not).
10166  bool DefinedAnything = false;
10167  for (unsigned I = 0; I != VTableUses.size(); ++I) {
10168    CXXRecordDecl *Class = VTableUses[I].first->getDefinition();
10169    if (!Class)
10170      continue;
10171
10172    SourceLocation Loc = VTableUses[I].second;
10173
10174    // If this class has a key function, but that key function is
10175    // defined in another translation unit, we don't need to emit the
10176    // vtable even though we're using it.
10177    const CXXMethodDecl *KeyFunction = Context.getKeyFunction(Class);
10178    if (KeyFunction && !KeyFunction->hasBody()) {
10179      switch (KeyFunction->getTemplateSpecializationKind()) {
10180      case TSK_Undeclared:
10181      case TSK_ExplicitSpecialization:
10182      case TSK_ExplicitInstantiationDeclaration:
10183        // The key function is in another translation unit.
10184        continue;
10185
10186      case TSK_ExplicitInstantiationDefinition:
10187      case TSK_ImplicitInstantiation:
10188        // We will be instantiating the key function.
10189        break;
10190      }
10191    } else if (!KeyFunction) {
10192      // If we have a class with no key function that is the subject
10193      // of an explicit instantiation declaration, suppress the
10194      // vtable; it will live with the explicit instantiation
10195      // definition.
10196      bool IsExplicitInstantiationDeclaration
10197        = Class->getTemplateSpecializationKind()
10198                                      == TSK_ExplicitInstantiationDeclaration;
10199      for (TagDecl::redecl_iterator R = Class->redecls_begin(),
10200                                 REnd = Class->redecls_end();
10201           R != REnd; ++R) {
10202        TemplateSpecializationKind TSK
10203          = cast<CXXRecordDecl>(*R)->getTemplateSpecializationKind();
10204        if (TSK == TSK_ExplicitInstantiationDeclaration)
10205          IsExplicitInstantiationDeclaration = true;
10206        else if (TSK == TSK_ExplicitInstantiationDefinition) {
10207          IsExplicitInstantiationDeclaration = false;
10208          break;
10209        }
10210      }
10211
10212      if (IsExplicitInstantiationDeclaration)
10213        continue;
10214    }
10215
10216    // Mark all of the virtual members of this class as referenced, so
10217    // that we can build a vtable. Then, tell the AST consumer that a
10218    // vtable for this class is required.
10219    DefinedAnything = true;
10220    MarkVirtualMembersReferenced(Loc, Class);
10221    CXXRecordDecl *Canonical = cast<CXXRecordDecl>(Class->getCanonicalDecl());
10222    Consumer.HandleVTable(Class, VTablesUsed[Canonical]);
10223
10224    // Optionally warn if we're emitting a weak vtable.
10225    if (Class->getLinkage() == ExternalLinkage &&
10226        Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
10227      if (!KeyFunction || (KeyFunction->hasBody() && KeyFunction->isInlined()))
10228        Diag(Class->getLocation(), diag::warn_weak_vtable) << Class;
10229    }
10230  }
10231  VTableUses.clear();
10232
10233  return DefinedAnything;
10234}
10235
10236void Sema::MarkVirtualMembersReferenced(SourceLocation Loc,
10237                                        const CXXRecordDecl *RD) {
10238  for (CXXRecordDecl::method_iterator i = RD->method_begin(),
10239       e = RD->method_end(); i != e; ++i) {
10240    CXXMethodDecl *MD = *i;
10241
10242    // C++ [basic.def.odr]p2:
10243    //   [...] A virtual member function is used if it is not pure. [...]
10244    if (MD->isVirtual() && !MD->isPure())
10245      MarkDeclarationReferenced(Loc, MD);
10246  }
10247
10248  // Only classes that have virtual bases need a VTT.
10249  if (RD->getNumVBases() == 0)
10250    return;
10251
10252  for (CXXRecordDecl::base_class_const_iterator i = RD->bases_begin(),
10253           e = RD->bases_end(); i != e; ++i) {
10254    const CXXRecordDecl *Base =
10255        cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
10256    if (Base->getNumVBases() == 0)
10257      continue;
10258    MarkVirtualMembersReferenced(Loc, Base);
10259  }
10260}
10261
10262/// SetIvarInitializers - This routine builds initialization ASTs for the
10263/// Objective-C implementation whose ivars need be initialized.
10264void Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {
10265  if (!getLangOptions().CPlusPlus)
10266    return;
10267  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {
10268    SmallVector<ObjCIvarDecl*, 8> ivars;
10269    CollectIvarsToConstructOrDestruct(OID, ivars);
10270    if (ivars.empty())
10271      return;
10272    SmallVector<CXXCtorInitializer*, 32> AllToInit;
10273    for (unsigned i = 0; i < ivars.size(); i++) {
10274      FieldDecl *Field = ivars[i];
10275      if (Field->isInvalidDecl())
10276        continue;
10277
10278      CXXCtorInitializer *Member;
10279      InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
10280      InitializationKind InitKind =
10281        InitializationKind::CreateDefault(ObjCImplementation->getLocation());
10282
10283      InitializationSequence InitSeq(*this, InitEntity, InitKind, 0, 0);
10284      ExprResult MemberInit =
10285        InitSeq.Perform(*this, InitEntity, InitKind, MultiExprArg());
10286      MemberInit = MaybeCreateExprWithCleanups(MemberInit);
10287      // Note, MemberInit could actually come back empty if no initialization
10288      // is required (e.g., because it would call a trivial default constructor)
10289      if (!MemberInit.get() || MemberInit.isInvalid())
10290        continue;
10291
10292      Member =
10293        new (Context) CXXCtorInitializer(Context, Field, SourceLocation(),
10294                                         SourceLocation(),
10295                                         MemberInit.takeAs<Expr>(),
10296                                         SourceLocation());
10297      AllToInit.push_back(Member);
10298
10299      // Be sure that the destructor is accessible and is marked as referenced.
10300      if (const RecordType *RecordTy
10301                  = Context.getBaseElementType(Field->getType())
10302                                                        ->getAs<RecordType>()) {
10303                    CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
10304        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {
10305          MarkDeclarationReferenced(Field->getLocation(), Destructor);
10306          CheckDestructorAccess(Field->getLocation(), Destructor,
10307                            PDiag(diag::err_access_dtor_ivar)
10308                              << Context.getBaseElementType(Field->getType()));
10309        }
10310      }
10311    }
10312    ObjCImplementation->setIvarInitializers(Context,
10313                                            AllToInit.data(), AllToInit.size());
10314  }
10315}
10316
10317static
10318void DelegatingCycleHelper(CXXConstructorDecl* Ctor,
10319                           llvm::SmallSet<CXXConstructorDecl*, 4> &Valid,
10320                           llvm::SmallSet<CXXConstructorDecl*, 4> &Invalid,
10321                           llvm::SmallSet<CXXConstructorDecl*, 4> &Current,
10322                           Sema &S) {
10323  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
10324                                                   CE = Current.end();
10325  if (Ctor->isInvalidDecl())
10326    return;
10327
10328  const FunctionDecl *FNTarget = 0;
10329  CXXConstructorDecl *Target;
10330
10331  // We ignore the result here since if we don't have a body, Target will be
10332  // null below.
10333  (void)Ctor->getTargetConstructor()->hasBody(FNTarget);
10334  Target
10335= const_cast<CXXConstructorDecl*>(cast_or_null<CXXConstructorDecl>(FNTarget));
10336
10337  CXXConstructorDecl *Canonical = Ctor->getCanonicalDecl(),
10338                     // Avoid dereferencing a null pointer here.
10339                     *TCanonical = Target ? Target->getCanonicalDecl() : 0;
10340
10341  if (!Current.insert(Canonical))
10342    return;
10343
10344  // We know that beyond here, we aren't chaining into a cycle.
10345  if (!Target || !Target->isDelegatingConstructor() ||
10346      Target->isInvalidDecl() || Valid.count(TCanonical)) {
10347    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
10348      Valid.insert(*CI);
10349    Current.clear();
10350  // We've hit a cycle.
10351  } else if (TCanonical == Canonical || Invalid.count(TCanonical) ||
10352             Current.count(TCanonical)) {
10353    // If we haven't diagnosed this cycle yet, do so now.
10354    if (!Invalid.count(TCanonical)) {
10355      S.Diag((*Ctor->init_begin())->getSourceLocation(),
10356             diag::warn_delegating_ctor_cycle)
10357        << Ctor;
10358
10359      // Don't add a note for a function delegating directo to itself.
10360      if (TCanonical != Canonical)
10361        S.Diag(Target->getLocation(), diag::note_it_delegates_to);
10362
10363      CXXConstructorDecl *C = Target;
10364      while (C->getCanonicalDecl() != Canonical) {
10365        (void)C->getTargetConstructor()->hasBody(FNTarget);
10366        assert(FNTarget && "Ctor cycle through bodiless function");
10367
10368        C
10369       = const_cast<CXXConstructorDecl*>(cast<CXXConstructorDecl>(FNTarget));
10370        S.Diag(C->getLocation(), diag::note_which_delegates_to);
10371      }
10372    }
10373
10374    for (CI = Current.begin(), CE = Current.end(); CI != CE; ++CI)
10375      Invalid.insert(*CI);
10376    Current.clear();
10377  } else {
10378    DelegatingCycleHelper(Target, Valid, Invalid, Current, S);
10379  }
10380}
10381
10382
10383void Sema::CheckDelegatingCtorCycles() {
10384  llvm::SmallSet<CXXConstructorDecl*, 4> Valid, Invalid, Current;
10385
10386  llvm::SmallSet<CXXConstructorDecl*, 4>::iterator CI = Current.begin(),
10387                                                   CE = Current.end();
10388
10389  for (DelegatingCtorDeclsType::iterator
10390         I = DelegatingCtorDecls.begin(ExternalSource),
10391         E = DelegatingCtorDecls.end();
10392       I != E; ++I) {
10393   DelegatingCycleHelper(*I, Valid, Invalid, Current, *this);
10394  }
10395
10396  for (CI = Invalid.begin(), CE = Invalid.end(); CI != CE; ++CI)
10397    (*CI)->setInvalidDecl();
10398}
10399