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 "Sema.h"
15 #include "SemaInherit.h"
16 #include "clang/AST/ASTConsumer.h"
17 #include "clang/AST/ASTContext.h"
18 #include "clang/AST/DeclVisitor.h"
19 #include "clang/AST/TypeOrdering.h"
20 #include "clang/AST/StmtVisitor.h"
21 #include "clang/Lex/Preprocessor.h"
22 #include "clang/Parse/DeclSpec.h"
23 #include "llvm/ADT/STLExtras.h"
24 #include "llvm/Support/Compiler.h"
25 #include <algorithm> // for std::equal
26 #include <map>
27 
28 using namespace clang;
29 
30 //===----------------------------------------------------------------------===//
31 // CheckDefaultArgumentVisitor
32 //===----------------------------------------------------------------------===//
33 
34 namespace {
35   /// CheckDefaultArgumentVisitor - C++ [dcl.fct.default] Traverses
36   /// the default argument of a parameter to determine whether it
37   /// contains any ill-formed subexpressions. For example, this will
38   /// diagnose the use of local variables or parameters within the
39   /// default argument expression.
40   class VISIBILITY_HIDDEN CheckDefaultArgumentVisitor
41     : public StmtVisitor<CheckDefaultArgumentVisitor, bool> {
42     Expr *DefaultArg;
43     Sema *S;
44 
45   public:
46     CheckDefaultArgumentVisitor(Expr *defarg, Sema *s)
47       : DefaultArg(defarg), S(s) {}
48 
49     bool VisitExpr(Expr *Node);
50     bool VisitDeclRefExpr(DeclRefExpr *DRE);
51     bool VisitCXXThisExpr(CXXThisExpr *ThisE);
52   };
53 
54   /// VisitExpr - Visit all of the children of this expression.
55   bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) {
56     bool IsInvalid = false;
57     for (Stmt::child_iterator I = Node->child_begin(),
58          E = Node->child_end(); I != E; ++I)
59       IsInvalid |= Visit(*I);
60     return IsInvalid;
61   }
62 
63   /// VisitDeclRefExpr - Visit a reference to a declaration, to
64   /// determine whether this declaration can be used in the default
65   /// argument expression.
66   bool CheckDefaultArgumentVisitor::VisitDeclRefExpr(DeclRefExpr *DRE) {
67     NamedDecl *Decl = DRE->getDecl();
68     if (ParmVarDecl *Param = dyn_cast<ParmVarDecl>(Decl)) {
69       // C++ [dcl.fct.default]p9
70       //   Default arguments are evaluated each time the function is
71       //   called. The order of evaluation of function arguments is
72       //   unspecified. Consequently, parameters of a function shall not
73       //   be used in default argument expressions, even if they are not
74       //   evaluated. Parameters of a function declared before a default
75       //   argument expression are in scope and can hide namespace and
76       //   class member names.
77       return S->Diag(DRE->getSourceRange().getBegin(),
78                      diag::err_param_default_argument_references_param)
79          << Param->getDeclName() << DefaultArg->getSourceRange();
80     } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) {
81       // C++ [dcl.fct.default]p7
82       //   Local variables shall not be used in default argument
83       //   expressions.
84       if (VDecl->isBlockVarDecl())
85         return S->Diag(DRE->getSourceRange().getBegin(),
86                        diag::err_param_default_argument_references_local)
87           << VDecl->getDeclName() << DefaultArg->getSourceRange();
88     }
89 
90     return false;
91   }
92 
93   /// VisitCXXThisExpr - Visit a C++ "this" expression.
94   bool CheckDefaultArgumentVisitor::VisitCXXThisExpr(CXXThisExpr *ThisE) {
95     // C++ [dcl.fct.default]p8:
96     //   The keyword this shall not be used in a default argument of a
97     //   member function.
98     return S->Diag(ThisE->getSourceRange().getBegin(),
99                    diag::err_param_default_argument_references_this)
100                << ThisE->getSourceRange();
101   }
102 }
103 
104 /// ActOnParamDefaultArgument - Check whether the default argument
105 /// provided for a function parameter is well-formed. If so, attach it
106 /// to the parameter declaration.
107 void
108 Sema::ActOnParamDefaultArgument(DeclPtrTy param, SourceLocation EqualLoc,
109                                 ExprArg defarg) {
110   if (!param || !defarg.get())
111     return;
112 
113   ParmVarDecl *Param = cast<ParmVarDecl>(param.getAs<Decl>());
114   UnparsedDefaultArgLocs.erase(Param);
115 
116   ExprOwningPtr<Expr> DefaultArg(this, defarg.takeAs<Expr>());
117   QualType ParamType = Param->getType();
118 
119   // Default arguments are only permitted in C++
120   if (!getLangOptions().CPlusPlus) {
121     Diag(EqualLoc, diag::err_param_default_argument)
122       << DefaultArg->getSourceRange();
123     Param->setInvalidDecl();
124     return;
125   }
126 
127   // C++ [dcl.fct.default]p5
128   //   A default argument expression is implicitly converted (clause
129   //   4) to the parameter type. The default argument expression has
130   //   the same semantic constraints as the initializer expression in
131   //   a declaration of a variable of the parameter type, using the
132   //   copy-initialization semantics (8.5).
133   Expr *DefaultArgPtr = DefaultArg.get();
134   bool DefaultInitFailed = CheckInitializerTypes(DefaultArgPtr, ParamType,
135                                                  EqualLoc,
136                                                  Param->getDeclName(),
137                                                  /*DirectInit=*/false);
138   if (DefaultArgPtr != DefaultArg.get()) {
139     DefaultArg.take();
140     DefaultArg.reset(DefaultArgPtr);
141   }
142   if (DefaultInitFailed) {
143     return;
144   }
145 
146   // Check that the default argument is well-formed
147   CheckDefaultArgumentVisitor DefaultArgChecker(DefaultArg.get(), this);
148   if (DefaultArgChecker.Visit(DefaultArg.get())) {
149     Param->setInvalidDecl();
150     return;
151   }
152 
153   DefaultArgPtr = MaybeCreateCXXExprWithTemporaries(DefaultArg.take(),
154                                                     /*DestroyTemps=*/false);
155 
156   // Okay: add the default argument to the parameter
157   Param->setDefaultArg(DefaultArgPtr);
158 }
159 
160 /// ActOnParamUnparsedDefaultArgument - We've seen a default
161 /// argument for a function parameter, but we can't parse it yet
162 /// because we're inside a class definition. Note that this default
163 /// argument will be parsed later.
164 void Sema::ActOnParamUnparsedDefaultArgument(DeclPtrTy param,
165                                              SourceLocation EqualLoc,
166                                              SourceLocation ArgLoc) {
167   if (!param)
168     return;
169 
170   ParmVarDecl *Param = cast<ParmVarDecl>(param.getAs<Decl>());
171   if (Param)
172     Param->setUnparsedDefaultArg();
173 
174   UnparsedDefaultArgLocs[Param] = ArgLoc;
175 }
176 
177 /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of
178 /// the default argument for the parameter param failed.
179 void Sema::ActOnParamDefaultArgumentError(DeclPtrTy param) {
180   if (!param)
181     return;
182 
183   ParmVarDecl *Param = cast<ParmVarDecl>(param.getAs<Decl>());
184 
185   Param->setInvalidDecl();
186 
187   UnparsedDefaultArgLocs.erase(Param);
188 }
189 
190 /// CheckExtraCXXDefaultArguments - Check for any extra default
191 /// arguments in the declarator, which is not a function declaration
192 /// or definition and therefore is not permitted to have default
193 /// arguments. This routine should be invoked for every declarator
194 /// that is not a function declaration or definition.
195 void Sema::CheckExtraCXXDefaultArguments(Declarator &D) {
196   // C++ [dcl.fct.default]p3
197   //   A default argument expression shall be specified only in the
198   //   parameter-declaration-clause of a function declaration or in a
199   //   template-parameter (14.1). It shall not be specified for a
200   //   parameter pack. If it is specified in a
201   //   parameter-declaration-clause, it shall not occur within a
202   //   declarator or abstract-declarator of a parameter-declaration.
203   for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
204     DeclaratorChunk &chunk = D.getTypeObject(i);
205     if (chunk.Kind == DeclaratorChunk::Function) {
206       for (unsigned argIdx = 0, e = chunk.Fun.NumArgs; argIdx != e; ++argIdx) {
207         ParmVarDecl *Param =
208           cast<ParmVarDecl>(chunk.Fun.ArgInfo[argIdx].Param.getAs<Decl>());
209         if (Param->hasUnparsedDefaultArg()) {
210           CachedTokens *Toks = chunk.Fun.ArgInfo[argIdx].DefaultArgTokens;
211           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
212             << SourceRange((*Toks)[1].getLocation(), Toks->back().getLocation());
213           delete Toks;
214           chunk.Fun.ArgInfo[argIdx].DefaultArgTokens = 0;
215         } else if (Param->getDefaultArg()) {
216           Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc)
217             << Param->getDefaultArg()->getSourceRange();
218           Param->setDefaultArg(0);
219         }
220       }
221     }
222   }
223 }
224 
225 // MergeCXXFunctionDecl - Merge two declarations of the same C++
226 // function, once we already know that they have the same
227 // type. Subroutine of MergeFunctionDecl. Returns true if there was an
228 // error, false otherwise.
229 bool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old) {
230   bool Invalid = false;
231 
232   // C++ [dcl.fct.default]p4:
233   //
234   //   For non-template functions, default arguments can be added in
235   //   later declarations of a function in the same
236   //   scope. Declarations in different scopes have completely
237   //   distinct sets of default arguments. That is, declarations in
238   //   inner scopes do not acquire default arguments from
239   //   declarations in outer scopes, and vice versa. In a given
240   //   function declaration, all parameters subsequent to a
241   //   parameter with a default argument shall have default
242   //   arguments supplied in this or previous declarations. A
243   //   default argument shall not be redefined by a later
244   //   declaration (not even to the same value).
245   for (unsigned p = 0, NumParams = Old->getNumParams(); p < NumParams; ++p) {
246     ParmVarDecl *OldParam = Old->getParamDecl(p);
247     ParmVarDecl *NewParam = New->getParamDecl(p);
248 
249     if(OldParam->getDefaultArg() && NewParam->getDefaultArg()) {
250       Diag(NewParam->getLocation(),
251            diag::err_param_default_argument_redefinition)
252         << NewParam->getDefaultArg()->getSourceRange();
253       Diag(OldParam->getLocation(), diag::note_previous_definition);
254       Invalid = true;
255     } else if (OldParam->getDefaultArg()) {
256       // Merge the old default argument into the new parameter
257       NewParam->setDefaultArg(OldParam->getDefaultArg());
258     }
259   }
260 
261   if (CheckEquivalentExceptionSpec(
262           Old->getType()->getAsFunctionProtoType(), Old->getLocation(),
263           New->getType()->getAsFunctionProtoType(), New->getLocation())) {
264     Invalid = true;
265   }
266 
267   return Invalid;
268 }
269 
270 /// CheckCXXDefaultArguments - Verify that the default arguments for a
271 /// function declaration are well-formed according to C++
272 /// [dcl.fct.default].
273 void Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {
274   unsigned NumParams = FD->getNumParams();
275   unsigned p;
276 
277   // Find first parameter with a default argument
278   for (p = 0; p < NumParams; ++p) {
279     ParmVarDecl *Param = FD->getParamDecl(p);
280     if (Param->getDefaultArg())
281       break;
282   }
283 
284   // C++ [dcl.fct.default]p4:
285   //   In a given function declaration, all parameters
286   //   subsequent to a parameter with a default argument shall
287   //   have default arguments supplied in this or previous
288   //   declarations. A default argument shall not be redefined
289   //   by a later declaration (not even to the same value).
290   unsigned LastMissingDefaultArg = 0;
291   for(; p < NumParams; ++p) {
292     ParmVarDecl *Param = FD->getParamDecl(p);
293     if (!Param->getDefaultArg()) {
294       if (Param->isInvalidDecl())
295         /* We already complained about this parameter. */;
296       else if (Param->getIdentifier())
297         Diag(Param->getLocation(),
298              diag::err_param_default_argument_missing_name)
299           << Param->getIdentifier();
300       else
301         Diag(Param->getLocation(),
302              diag::err_param_default_argument_missing);
303 
304       LastMissingDefaultArg = p;
305     }
306   }
307 
308   if (LastMissingDefaultArg > 0) {
309     // Some default arguments were missing. Clear out all of the
310     // default arguments up to (and including) the last missing
311     // default argument, so that we leave the function parameters
312     // in a semantically valid state.
313     for (p = 0; p <= LastMissingDefaultArg; ++p) {
314       ParmVarDecl *Param = FD->getParamDecl(p);
315       if (Param->hasDefaultArg()) {
316         if (!Param->hasUnparsedDefaultArg())
317           Param->getDefaultArg()->Destroy(Context);
318         Param->setDefaultArg(0);
319       }
320     }
321   }
322 }
323 
324 /// isCurrentClassName - Determine whether the identifier II is the
325 /// name of the class type currently being defined. In the case of
326 /// nested classes, this will only return true if II is the name of
327 /// the innermost class.
328 bool Sema::isCurrentClassName(const IdentifierInfo &II, Scope *,
329                               const CXXScopeSpec *SS) {
330   CXXRecordDecl *CurDecl;
331   if (SS && SS->isSet() && !SS->isInvalid()) {
332     DeclContext *DC = computeDeclContext(*SS);
333     CurDecl = dyn_cast_or_null<CXXRecordDecl>(DC);
334   } else
335     CurDecl = dyn_cast_or_null<CXXRecordDecl>(CurContext);
336 
337   if (CurDecl)
338     return &II == CurDecl->getIdentifier();
339   else
340     return false;
341 }
342 
343 /// \brief Check the validity of a C++ base class specifier.
344 ///
345 /// \returns a new CXXBaseSpecifier if well-formed, emits diagnostics
346 /// and returns NULL otherwise.
347 CXXBaseSpecifier *
348 Sema::CheckBaseSpecifier(CXXRecordDecl *Class,
349                          SourceRange SpecifierRange,
350                          bool Virtual, AccessSpecifier Access,
351                          QualType BaseType,
352                          SourceLocation BaseLoc) {
353   // C++ [class.union]p1:
354   //   A union shall not have base classes.
355   if (Class->isUnion()) {
356     Diag(Class->getLocation(), diag::err_base_clause_on_union)
357       << SpecifierRange;
358     return 0;
359   }
360 
361   if (BaseType->isDependentType())
362     return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
363                                 Class->getTagKind() == RecordDecl::TK_class,
364                                 Access, BaseType);
365 
366   // Base specifiers must be record types.
367   if (!BaseType->isRecordType()) {
368     Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;
369     return 0;
370   }
371 
372   // C++ [class.union]p1:
373   //   A union shall not be used as a base class.
374   if (BaseType->isUnionType()) {
375     Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;
376     return 0;
377   }
378 
379   // C++ [class.derived]p2:
380   //   The class-name in a base-specifier shall not be an incompletely
381   //   defined class.
382   if (RequireCompleteType(BaseLoc, BaseType, diag::err_incomplete_base_class,
383                           SpecifierRange))
384     return 0;
385 
386   // If the base class is polymorphic, the new one is, too.
387   RecordDecl *BaseDecl = BaseType->getAs<RecordType>()->getDecl();
388   assert(BaseDecl && "Record type has no declaration");
389   BaseDecl = BaseDecl->getDefinition(Context);
390   assert(BaseDecl && "Base type is not incomplete, but has no definition");
391   if (cast<CXXRecordDecl>(BaseDecl)->isPolymorphic())
392     Class->setPolymorphic(true);
393 
394   // C++ [dcl.init.aggr]p1:
395   //   An aggregate is [...] a class with [...] no base classes [...].
396   Class->setAggregate(false);
397   Class->setPOD(false);
398 
399   if (Virtual) {
400     // C++ [class.ctor]p5:
401     //   A constructor is trivial if its class has no virtual base classes.
402     Class->setHasTrivialConstructor(false);
403 
404     // C++ [class.copy]p6:
405     //   A copy constructor is trivial if its class has no virtual base classes.
406     Class->setHasTrivialCopyConstructor(false);
407 
408     // C++ [class.copy]p11:
409     //   A copy assignment operator is trivial if its class has no virtual
410     //   base classes.
411     Class->setHasTrivialCopyAssignment(false);
412   } else {
413     // C++ [class.ctor]p5:
414     //   A constructor is trivial if all the direct base classes of its
415     //   class have trivial constructors.
416     if (!cast<CXXRecordDecl>(BaseDecl)->hasTrivialConstructor())
417       Class->setHasTrivialConstructor(false);
418 
419     // C++ [class.copy]p6:
420     //   A copy constructor is trivial if all the direct base classes of its
421     //   class have trivial copy constructors.
422     if (!cast<CXXRecordDecl>(BaseDecl)->hasTrivialCopyConstructor())
423       Class->setHasTrivialCopyConstructor(false);
424 
425     // C++ [class.copy]p11:
426     //   A copy assignment operator is trivial if all the direct base classes
427     //   of its class have trivial copy assignment operators.
428     if (!cast<CXXRecordDecl>(BaseDecl)->hasTrivialCopyAssignment())
429       Class->setHasTrivialCopyAssignment(false);
430   }
431 
432   // C++ [class.ctor]p3:
433   //   A destructor is trivial if all the direct base classes of its class
434   //   have trivial destructors.
435   if (!cast<CXXRecordDecl>(BaseDecl)->hasTrivialDestructor())
436     Class->setHasTrivialDestructor(false);
437 
438   // Create the base specifier.
439   // FIXME: Allocate via ASTContext?
440   return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual,
441                               Class->getTagKind() == RecordDecl::TK_class,
442                               Access, BaseType);
443 }
444 
445 /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is
446 /// one entry in the base class list of a class specifier, for
447 /// example:
448 ///    class foo : public bar, virtual private baz {
449 /// 'public bar' and 'virtual private baz' are each base-specifiers.
450 Sema::BaseResult
451 Sema::ActOnBaseSpecifier(DeclPtrTy classdecl, SourceRange SpecifierRange,
452                          bool Virtual, AccessSpecifier Access,
453                          TypeTy *basetype, SourceLocation BaseLoc) {
454   if (!classdecl)
455     return true;
456 
457   AdjustDeclIfTemplate(classdecl);
458   CXXRecordDecl *Class = cast<CXXRecordDecl>(classdecl.getAs<Decl>());
459   QualType BaseType = QualType::getFromOpaquePtr(basetype);
460   if (CXXBaseSpecifier *BaseSpec = CheckBaseSpecifier(Class, SpecifierRange,
461                                                       Virtual, Access,
462                                                       BaseType, BaseLoc))
463     return BaseSpec;
464 
465   return true;
466 }
467 
468 /// \brief Performs the actual work of attaching the given base class
469 /// specifiers to a C++ class.
470 bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, CXXBaseSpecifier **Bases,
471                                 unsigned NumBases) {
472  if (NumBases == 0)
473     return false;
474 
475   // Used to keep track of which base types we have already seen, so
476   // that we can properly diagnose redundant direct base types. Note
477   // that the key is always the unqualified canonical type of the base
478   // class.
479   std::map<QualType, CXXBaseSpecifier*, QualTypeOrdering> KnownBaseTypes;
480 
481   // Copy non-redundant base specifiers into permanent storage.
482   unsigned NumGoodBases = 0;
483   bool Invalid = false;
484   for (unsigned idx = 0; idx < NumBases; ++idx) {
485     QualType NewBaseType
486       = Context.getCanonicalType(Bases[idx]->getType());
487     NewBaseType = NewBaseType.getUnqualifiedType();
488 
489     if (KnownBaseTypes[NewBaseType]) {
490       // C++ [class.mi]p3:
491       //   A class shall not be specified as a direct base class of a
492       //   derived class more than once.
493       Diag(Bases[idx]->getSourceRange().getBegin(),
494            diag::err_duplicate_base_class)
495         << KnownBaseTypes[NewBaseType]->getType()
496         << Bases[idx]->getSourceRange();
497 
498       // Delete the duplicate base class specifier; we're going to
499       // overwrite its pointer later.
500       Context.Deallocate(Bases[idx]);
501 
502       Invalid = true;
503     } else {
504       // Okay, add this new base class.
505       KnownBaseTypes[NewBaseType] = Bases[idx];
506       Bases[NumGoodBases++] = Bases[idx];
507     }
508   }
509 
510   // Attach the remaining base class specifiers to the derived class.
511   Class->setBases(Context, Bases, NumGoodBases);
512 
513   // Delete the remaining (good) base class specifiers, since their
514   // data has been copied into the CXXRecordDecl.
515   for (unsigned idx = 0; idx < NumGoodBases; ++idx)
516     Context.Deallocate(Bases[idx]);
517 
518   return Invalid;
519 }
520 
521 /// ActOnBaseSpecifiers - Attach the given base specifiers to the
522 /// class, after checking whether there are any duplicate base
523 /// classes.
524 void Sema::ActOnBaseSpecifiers(DeclPtrTy ClassDecl, BaseTy **Bases,
525                                unsigned NumBases) {
526   if (!ClassDecl || !Bases || !NumBases)
527     return;
528 
529   AdjustDeclIfTemplate(ClassDecl);
530   AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl.getAs<Decl>()),
531                        (CXXBaseSpecifier**)(Bases), NumBases);
532 }
533 
534 //===----------------------------------------------------------------------===//
535 // C++ class member Handling
536 //===----------------------------------------------------------------------===//
537 
538 /// ActOnCXXMemberDeclarator - This is invoked when a C++ class member
539 /// declarator is parsed. 'AS' is the access specifier, 'BW' specifies the
540 /// bitfield width if there is one and 'InitExpr' specifies the initializer if
541 /// any.
542 Sema::DeclPtrTy
543 Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
544                                ExprTy *BW, ExprTy *InitExpr, bool Deleted) {
545   const DeclSpec &DS = D.getDeclSpec();
546   DeclarationName Name = GetNameForDeclarator(D);
547   Expr *BitWidth = static_cast<Expr*>(BW);
548   Expr *Init = static_cast<Expr*>(InitExpr);
549   SourceLocation Loc = D.getIdentifierLoc();
550 
551   bool isFunc = D.isFunctionDeclarator();
552 
553   // C++ 9.2p6: A member shall not be declared to have automatic storage
554   // duration (auto, register) or with the extern storage-class-specifier.
555   // C++ 7.1.1p8: The mutable specifier can be applied only to names of class
556   // data members and cannot be applied to names declared const or static,
557   // and cannot be applied to reference members.
558   switch (DS.getStorageClassSpec()) {
559     case DeclSpec::SCS_unspecified:
560     case DeclSpec::SCS_typedef:
561     case DeclSpec::SCS_static:
562       // FALL THROUGH.
563       break;
564     case DeclSpec::SCS_mutable:
565       if (isFunc) {
566         if (DS.getStorageClassSpecLoc().isValid())
567           Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);
568         else
569           Diag(DS.getThreadSpecLoc(), diag::err_mutable_function);
570 
571         // FIXME: It would be nicer if the keyword was ignored only for this
572         // declarator. Otherwise we could get follow-up errors.
573         D.getMutableDeclSpec().ClearStorageClassSpecs();
574       } else {
575         QualType T = GetTypeForDeclarator(D, S);
576         diag::kind err = static_cast<diag::kind>(0);
577         if (T->isReferenceType())
578           err = diag::err_mutable_reference;
579         else if (T.isConstQualified())
580           err = diag::err_mutable_const;
581         if (err != 0) {
582           if (DS.getStorageClassSpecLoc().isValid())
583             Diag(DS.getStorageClassSpecLoc(), err);
584           else
585             Diag(DS.getThreadSpecLoc(), err);
586           // FIXME: It would be nicer if the keyword was ignored only for this
587           // declarator. Otherwise we could get follow-up errors.
588           D.getMutableDeclSpec().ClearStorageClassSpecs();
589         }
590       }
591       break;
592     default:
593       if (DS.getStorageClassSpecLoc().isValid())
594         Diag(DS.getStorageClassSpecLoc(),
595              diag::err_storageclass_invalid_for_member);
596       else
597         Diag(DS.getThreadSpecLoc(), diag::err_storageclass_invalid_for_member);
598       D.getMutableDeclSpec().ClearStorageClassSpecs();
599   }
600 
601   if (!isFunc &&
602       D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_typename &&
603       D.getNumTypeObjects() == 0) {
604     // Check also for this case:
605     //
606     // typedef int f();
607     // f a;
608     //
609     QualType TDType = QualType::getFromOpaquePtr(DS.getTypeRep());
610     isFunc = TDType->isFunctionType();
611   }
612 
613   bool isInstField = ((DS.getStorageClassSpec() == DeclSpec::SCS_unspecified ||
614                        DS.getStorageClassSpec() == DeclSpec::SCS_mutable) &&
615                       !isFunc);
616 
617   Decl *Member;
618   if (isInstField) {
619     Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth,
620                          AS);
621     assert(Member && "HandleField never returns null");
622   } else {
623     Member = ActOnDeclarator(S, D).getAs<Decl>();
624     if (!Member) {
625       if (BitWidth) DeleteExpr(BitWidth);
626       return DeclPtrTy();
627     }
628 
629     // Non-instance-fields can't have a bitfield.
630     if (BitWidth) {
631       if (Member->isInvalidDecl()) {
632         // don't emit another diagnostic.
633       } else if (isa<VarDecl>(Member)) {
634         // C++ 9.6p3: A bit-field shall not be a static member.
635         // "static member 'A' cannot be a bit-field"
636         Diag(Loc, diag::err_static_not_bitfield)
637           << Name << BitWidth->getSourceRange();
638       } else if (isa<TypedefDecl>(Member)) {
639         // "typedef member 'x' cannot be a bit-field"
640         Diag(Loc, diag::err_typedef_not_bitfield)
641           << Name << BitWidth->getSourceRange();
642       } else {
643         // A function typedef ("typedef int f(); f a;").
644         // C++ 9.6p3: A bit-field shall have integral or enumeration type.
645         Diag(Loc, diag::err_not_integral_type_bitfield)
646           << Name << cast<ValueDecl>(Member)->getType()
647           << BitWidth->getSourceRange();
648       }
649 
650       DeleteExpr(BitWidth);
651       BitWidth = 0;
652       Member->setInvalidDecl();
653     }
654 
655     Member->setAccess(AS);
656   }
657 
658   assert((Name || isInstField) && "No identifier for non-field ?");
659 
660   if (Init)
661     AddInitializerToDecl(DeclPtrTy::make(Member), ExprArg(*this, Init), false);
662   if (Deleted) // FIXME: Source location is not very good.
663     SetDeclDeleted(DeclPtrTy::make(Member), D.getSourceRange().getBegin());
664 
665   if (isInstField) {
666     FieldCollector->Add(cast<FieldDecl>(Member));
667     return DeclPtrTy();
668   }
669   return DeclPtrTy::make(Member);
670 }
671 
672 /// ActOnMemInitializer - Handle a C++ member initializer.
673 Sema::MemInitResult
674 Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,
675                           Scope *S,
676                           const CXXScopeSpec &SS,
677                           IdentifierInfo *MemberOrBase,
678                           TypeTy *TemplateTypeTy,
679                           SourceLocation IdLoc,
680                           SourceLocation LParenLoc,
681                           ExprTy **Args, unsigned NumArgs,
682                           SourceLocation *CommaLocs,
683                           SourceLocation RParenLoc) {
684   if (!ConstructorD)
685     return true;
686 
687   CXXConstructorDecl *Constructor
688     = dyn_cast<CXXConstructorDecl>(ConstructorD.getAs<Decl>());
689   if (!Constructor) {
690     // The user wrote a constructor initializer on a function that is
691     // not a C++ constructor. Ignore the error for now, because we may
692     // have more member initializers coming; we'll diagnose it just
693     // once in ActOnMemInitializers.
694     return true;
695   }
696 
697   CXXRecordDecl *ClassDecl = Constructor->getParent();
698 
699   // C++ [class.base.init]p2:
700   //   Names in a mem-initializer-id are looked up in the scope of the
701   //   constructor’s class and, if not found in that scope, are looked
702   //   up in the scope containing the constructor’s
703   //   definition. [Note: if the constructor’s class contains a member
704   //   with the same name as a direct or virtual base class of the
705   //   class, a mem-initializer-id naming the member or base class and
706   //   composed of a single identifier refers to the class member. A
707   //   mem-initializer-id for the hidden base class may be specified
708   //   using a qualified name. ]
709   if (!SS.getScopeRep() && !TemplateTypeTy) {
710     // Look for a member, first.
711     FieldDecl *Member = 0;
712     DeclContext::lookup_result Result
713       = ClassDecl->lookup(MemberOrBase);
714     if (Result.first != Result.second)
715       Member = dyn_cast<FieldDecl>(*Result.first);
716 
717     // FIXME: Handle members of an anonymous union.
718 
719     if (Member)
720       return BuildMemberInitializer(Member, (Expr**)Args, NumArgs, IdLoc,
721                                     RParenLoc);
722   }
723   // It didn't name a member, so see if it names a class.
724   TypeTy *BaseTy = TemplateTypeTy ? TemplateTypeTy
725                      : getTypeName(*MemberOrBase, IdLoc, S, &SS);
726   if (!BaseTy)
727     return Diag(IdLoc, diag::err_mem_init_not_member_or_class)
728       << MemberOrBase << SourceRange(IdLoc, RParenLoc);
729 
730   QualType BaseType = QualType::getFromOpaquePtr(BaseTy);
731 
732   return BuildBaseInitializer(BaseType, (Expr **)Args, NumArgs, IdLoc,
733                               RParenLoc, ClassDecl);
734 }
735 
736 Sema::MemInitResult
737 Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args,
738                              unsigned NumArgs, SourceLocation IdLoc,
739                              SourceLocation RParenLoc) {
740   bool HasDependentArg = false;
741   for (unsigned i = 0; i < NumArgs; i++)
742     HasDependentArg |= Args[i]->isTypeDependent();
743 
744   CXXConstructorDecl *C = 0;
745   QualType FieldType = Member->getType();
746   if (const ArrayType *Array = Context.getAsArrayType(FieldType))
747     FieldType = Array->getElementType();
748   if (FieldType->isDependentType()) {
749     // Can't check init for dependent type.
750   } else if (FieldType->getAs<RecordType>()) {
751     if (!HasDependentArg)
752       C = PerformInitializationByConstructor(
753             FieldType, (Expr **)Args, NumArgs, IdLoc,
754             SourceRange(IdLoc, RParenLoc), Member->getDeclName(), IK_Direct);
755   } else if (NumArgs != 1) {
756     return Diag(IdLoc, diag::err_mem_initializer_mismatch)
757                 << Member->getDeclName() << SourceRange(IdLoc, RParenLoc);
758   } else if (!HasDependentArg) {
759     Expr *NewExp = (Expr*)Args[0];
760     if (PerformCopyInitialization(NewExp, FieldType, "passing"))
761       return true;
762     Args[0] = NewExp;
763   }
764   // FIXME: Perform direct initialization of the member.
765   return new (Context) CXXBaseOrMemberInitializer(Member, (Expr **)Args,
766                                                   NumArgs, C, IdLoc);
767 }
768 
769 Sema::MemInitResult
770 Sema::BuildBaseInitializer(QualType BaseType, Expr **Args,
771                            unsigned NumArgs, SourceLocation IdLoc,
772                            SourceLocation RParenLoc, CXXRecordDecl *ClassDecl) {
773   bool HasDependentArg = false;
774   for (unsigned i = 0; i < NumArgs; i++)
775     HasDependentArg |= Args[i]->isTypeDependent();
776 
777   if (!BaseType->isDependentType()) {
778     if (!BaseType->isRecordType())
779       return Diag(IdLoc, diag::err_base_init_does_not_name_class)
780         << BaseType << SourceRange(IdLoc, RParenLoc);
781 
782     // C++ [class.base.init]p2:
783     //   [...] Unless the mem-initializer-id names a nonstatic data
784     //   member of the constructor’s class or a direct or virtual base
785     //   of that class, the mem-initializer is ill-formed. A
786     //   mem-initializer-list can initialize a base class using any
787     //   name that denotes that base class type.
788 
789     // First, check for a direct base class.
790     const CXXBaseSpecifier *DirectBaseSpec = 0;
791     for (CXXRecordDecl::base_class_const_iterator Base =
792          ClassDecl->bases_begin(); Base != ClassDecl->bases_end(); ++Base) {
793       if (Context.getCanonicalType(BaseType).getUnqualifiedType() ==
794           Context.getCanonicalType(Base->getType()).getUnqualifiedType()) {
795         // We found a direct base of this type. That's what we're
796         // initializing.
797         DirectBaseSpec = &*Base;
798         break;
799       }
800     }
801 
802     // Check for a virtual base class.
803     // FIXME: We might be able to short-circuit this if we know in advance that
804     // there are no virtual bases.
805     const CXXBaseSpecifier *VirtualBaseSpec = 0;
806     if (!DirectBaseSpec || !DirectBaseSpec->isVirtual()) {
807       // We haven't found a base yet; search the class hierarchy for a
808       // virtual base class.
809       BasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
810                       /*DetectVirtual=*/false);
811       if (IsDerivedFrom(Context.getTypeDeclType(ClassDecl), BaseType, Paths)) {
812         for (BasePaths::paths_iterator Path = Paths.begin();
813              Path != Paths.end(); ++Path) {
814           if (Path->back().Base->isVirtual()) {
815             VirtualBaseSpec = Path->back().Base;
816             break;
817           }
818         }
819       }
820     }
821 
822     // C++ [base.class.init]p2:
823     //   If a mem-initializer-id is ambiguous because it designates both
824     //   a direct non-virtual base class and an inherited virtual base
825     //   class, the mem-initializer is ill-formed.
826     if (DirectBaseSpec && VirtualBaseSpec)
827       return Diag(IdLoc, diag::err_base_init_direct_and_virtual)
828         << BaseType << SourceRange(IdLoc, RParenLoc);
829     // C++ [base.class.init]p2:
830     // Unless the mem-initializer-id names a nonstatic data membeer of the
831     // constructor's class ot a direst or virtual base of that class, the
832     // mem-initializer is ill-formed.
833     if (!DirectBaseSpec && !VirtualBaseSpec)
834       return Diag(IdLoc, diag::err_not_direct_base_or_virtual)
835       << BaseType << ClassDecl->getNameAsCString()
836       << SourceRange(IdLoc, RParenLoc);
837   }
838 
839   CXXConstructorDecl *C = 0;
840   if (!BaseType->isDependentType() && !HasDependentArg) {
841     DeclarationName Name = Context.DeclarationNames.getCXXConstructorName(
842                                             Context.getCanonicalType(BaseType));
843     C = PerformInitializationByConstructor(BaseType, (Expr **)Args, NumArgs,
844                                            IdLoc, SourceRange(IdLoc, RParenLoc),
845                                            Name, IK_Direct);
846   }
847 
848   return new (Context) CXXBaseOrMemberInitializer(BaseType, (Expr **)Args,
849                                                   NumArgs, C, IdLoc);
850 }
851 
852 void
853 Sema::BuildBaseOrMemberInitializers(ASTContext &C,
854                                  CXXConstructorDecl *Constructor,
855                                  CXXBaseOrMemberInitializer **Initializers,
856                                  unsigned NumInitializers
857                                  ) {
858   llvm::SmallVector<CXXBaseSpecifier *, 4>Bases;
859   llvm::SmallVector<FieldDecl *, 4>Members;
860 
861   Constructor->setBaseOrMemberInitializers(C,
862                                            Initializers, NumInitializers,
863                                            Bases, Members);
864   for (unsigned int i = 0; i < Bases.size(); i++)
865     Diag(Bases[i]->getSourceRange().getBegin(),
866          diag::err_missing_default_constructor) << 0 << Bases[i]->getType();
867   for (unsigned int i = 0; i < Members.size(); i++)
868     Diag(Members[i]->getLocation(), diag::err_missing_default_constructor)
869           << 1 << Members[i]->getType();
870 }
871 
872 static void *GetKeyForTopLevelField(FieldDecl *Field) {
873   // For anonymous unions, use the class declaration as the key.
874   if (const RecordType *RT = Field->getType()->getAs<RecordType>()) {
875     if (RT->getDecl()->isAnonymousStructOrUnion())
876       return static_cast<void *>(RT->getDecl());
877   }
878   return static_cast<void *>(Field);
879 }
880 
881 static void *GetKeyForMember(CXXBaseOrMemberInitializer *Member) {
882   // For fields injected into the class via declaration of an anonymous union,
883   // use its anonymous union class declaration as the unique key.
884   if (FieldDecl *Field = Member->getMember()) {
885     if (Field->getDeclContext()->isRecord()) {
886       RecordDecl *RD = cast<RecordDecl>(Field->getDeclContext());
887       if (RD->isAnonymousStructOrUnion())
888         return static_cast<void *>(RD);
889     }
890     return static_cast<void *>(Field);
891   }
892   return static_cast<RecordType *>(Member->getBaseClass());
893 }
894 
895 void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl,
896                                 SourceLocation ColonLoc,
897                                 MemInitTy **MemInits, unsigned NumMemInits) {
898   if (!ConstructorDecl)
899     return;
900 
901   CXXConstructorDecl *Constructor
902     = dyn_cast<CXXConstructorDecl>(ConstructorDecl.getAs<Decl>());
903 
904   if (!Constructor) {
905     Diag(ColonLoc, diag::err_only_constructors_take_base_inits);
906     return;
907   }
908   llvm::DenseMap<void*, CXXBaseOrMemberInitializer *>Members;
909   bool err = false;
910   for (unsigned i = 0; i < NumMemInits; i++) {
911     CXXBaseOrMemberInitializer *Member =
912       static_cast<CXXBaseOrMemberInitializer*>(MemInits[i]);
913     void *KeyToMember = GetKeyForMember(Member);
914     CXXBaseOrMemberInitializer *&PrevMember = Members[KeyToMember];
915     if (!PrevMember) {
916       PrevMember = Member;
917       continue;
918     }
919     if (FieldDecl *Field = Member->getMember())
920       Diag(Member->getSourceLocation(),
921            diag::error_multiple_mem_initialization)
922       << Field->getNameAsString();
923     else {
924       Type *BaseClass = Member->getBaseClass();
925       assert(BaseClass && "ActOnMemInitializers - neither field or base");
926       Diag(Member->getSourceLocation(),
927            diag::error_multiple_base_initialization)
928         << BaseClass->getDesugaredType(true);
929     }
930     Diag(PrevMember->getSourceLocation(), diag::note_previous_initializer)
931       << 0;
932     err = true;
933   }
934   if (!err)
935     BuildBaseOrMemberInitializers(Context, Constructor,
936                       reinterpret_cast<CXXBaseOrMemberInitializer **>(MemInits),
937                       NumMemInits);
938 
939   if (!err && (Diags.getDiagnosticLevel(diag::warn_base_initialized)
940                != Diagnostic::Ignored ||
941                Diags.getDiagnosticLevel(diag::warn_field_initialized)
942                != Diagnostic::Ignored)) {
943     // Also issue warning if order of ctor-initializer list does not match order
944     // of 1) base class declarations and 2) order of non-static data members.
945     llvm::SmallVector<const void*, 32> AllBaseOrMembers;
946 
947     CXXRecordDecl *ClassDecl
948       = cast<CXXRecordDecl>(Constructor->getDeclContext());
949     // Push virtual bases before others.
950     for (CXXRecordDecl::base_class_iterator VBase =
951          ClassDecl->vbases_begin(),
952          E = ClassDecl->vbases_end(); VBase != E; ++VBase)
953       AllBaseOrMembers.push_back(VBase->getType()->getAs<RecordType>());
954 
955     for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
956          E = ClassDecl->bases_end(); Base != E; ++Base) {
957       // Virtuals are alread in the virtual base list and are constructed
958       // first.
959       if (Base->isVirtual())
960         continue;
961       AllBaseOrMembers.push_back(Base->getType()->getAs<RecordType>());
962     }
963 
964     for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
965          E = ClassDecl->field_end(); Field != E; ++Field)
966       AllBaseOrMembers.push_back(GetKeyForTopLevelField(*Field));
967 
968     int Last = AllBaseOrMembers.size();
969     int curIndex = 0;
970     CXXBaseOrMemberInitializer *PrevMember = 0;
971     for (unsigned i = 0; i < NumMemInits; i++) {
972       CXXBaseOrMemberInitializer *Member =
973         static_cast<CXXBaseOrMemberInitializer*>(MemInits[i]);
974       void *MemberInCtorList = GetKeyForMember(Member);
975 
976       for (; curIndex < Last; curIndex++)
977         if (MemberInCtorList == AllBaseOrMembers[curIndex])
978           break;
979       if (curIndex == Last) {
980         assert(PrevMember && "Member not in member list?!");
981         // Initializer as specified in ctor-initializer list is out of order.
982         // Issue a warning diagnostic.
983         if (PrevMember->isBaseInitializer()) {
984           // Diagnostics is for an initialized base class.
985           Type *BaseClass = PrevMember->getBaseClass();
986           Diag(PrevMember->getSourceLocation(),
987                diag::warn_base_initialized)
988                 << BaseClass->getDesugaredType(true);
989         }
990         else {
991           FieldDecl *Field = PrevMember->getMember();
992           Diag(PrevMember->getSourceLocation(),
993                diag::warn_field_initialized)
994             << Field->getNameAsString();
995         }
996         // Also the note!
997         if (FieldDecl *Field = Member->getMember())
998           Diag(Member->getSourceLocation(),
999                diag::note_fieldorbase_initialized_here) << 0
1000             << Field->getNameAsString();
1001         else {
1002           Type *BaseClass = Member->getBaseClass();
1003           Diag(Member->getSourceLocation(),
1004                diag::note_fieldorbase_initialized_here) << 1
1005             << BaseClass->getDesugaredType(true);
1006         }
1007         for (curIndex = 0; curIndex < Last; curIndex++)
1008           if (MemberInCtorList == AllBaseOrMembers[curIndex])
1009             break;
1010       }
1011       PrevMember = Member;
1012     }
1013   }
1014 }
1015 
1016 void Sema::ActOnDefaultCtorInitializers(DeclPtrTy CDtorDecl) {
1017   if (!CDtorDecl)
1018     return;
1019 
1020   if (CXXConstructorDecl *Constructor
1021       = dyn_cast<CXXConstructorDecl>(CDtorDecl.getAs<Decl>()))
1022     BuildBaseOrMemberInitializers(Context,
1023                                      Constructor,
1024                                      (CXXBaseOrMemberInitializer **)0, 0);
1025 }
1026 
1027 namespace {
1028   /// PureVirtualMethodCollector - traverses a class and its superclasses
1029   /// and determines if it has any pure virtual methods.
1030   class VISIBILITY_HIDDEN PureVirtualMethodCollector {
1031     ASTContext &Context;
1032 
1033   public:
1034     typedef llvm::SmallVector<const CXXMethodDecl*, 8> MethodList;
1035 
1036   private:
1037     MethodList Methods;
1038 
1039     void Collect(const CXXRecordDecl* RD, MethodList& Methods);
1040 
1041   public:
1042     PureVirtualMethodCollector(ASTContext &Ctx, const CXXRecordDecl* RD)
1043       : Context(Ctx) {
1044 
1045       MethodList List;
1046       Collect(RD, List);
1047 
1048       // Copy the temporary list to methods, and make sure to ignore any
1049       // null entries.
1050       for (size_t i = 0, e = List.size(); i != e; ++i) {
1051         if (List[i])
1052           Methods.push_back(List[i]);
1053       }
1054     }
1055 
1056     bool empty() const { return Methods.empty(); }
1057 
1058     MethodList::const_iterator methods_begin() { return Methods.begin(); }
1059     MethodList::const_iterator methods_end() { return Methods.end(); }
1060   };
1061 
1062   void PureVirtualMethodCollector::Collect(const CXXRecordDecl* RD,
1063                                            MethodList& Methods) {
1064     // First, collect the pure virtual methods for the base classes.
1065     for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(),
1066          BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base) {
1067       if (const RecordType *RT = Base->getType()->getAs<RecordType>()) {
1068         const CXXRecordDecl *BaseDecl = cast<CXXRecordDecl>(RT->getDecl());
1069         if (BaseDecl && BaseDecl->isAbstract())
1070           Collect(BaseDecl, Methods);
1071       }
1072     }
1073 
1074     // Next, zero out any pure virtual methods that this class overrides.
1075     typedef llvm::SmallPtrSet<const CXXMethodDecl*, 4> MethodSetTy;
1076 
1077     MethodSetTy OverriddenMethods;
1078     size_t MethodsSize = Methods.size();
1079 
1080     for (RecordDecl::decl_iterator i = RD->decls_begin(), e = RD->decls_end();
1081          i != e; ++i) {
1082       // Traverse the record, looking for methods.
1083       if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*i)) {
1084         // If the method is pure virtual, add it to the methods vector.
1085         if (MD->isPure()) {
1086           Methods.push_back(MD);
1087           continue;
1088         }
1089 
1090         // Otherwise, record all the overridden methods in our set.
1091         for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(),
1092              E = MD->end_overridden_methods(); I != E; ++I) {
1093           // Keep track of the overridden methods.
1094           OverriddenMethods.insert(*I);
1095         }
1096       }
1097     }
1098 
1099     // Now go through the methods and zero out all the ones we know are
1100     // overridden.
1101     for (size_t i = 0, e = MethodsSize; i != e; ++i) {
1102       if (OverriddenMethods.count(Methods[i]))
1103         Methods[i] = 0;
1104     }
1105 
1106   }
1107 }
1108 
1109 bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
1110                                   unsigned DiagID, AbstractDiagSelID SelID,
1111                                   const CXXRecordDecl *CurrentRD) {
1112 
1113   if (!getLangOptions().CPlusPlus)
1114     return false;
1115 
1116   if (const ArrayType *AT = Context.getAsArrayType(T))
1117     return RequireNonAbstractType(Loc, AT->getElementType(), DiagID, SelID,
1118                                   CurrentRD);
1119 
1120   if (const PointerType *PT = T->getAs<PointerType>()) {
1121     // Find the innermost pointer type.
1122     while (const PointerType *T = PT->getPointeeType()->getAs<PointerType>())
1123       PT = T;
1124 
1125     if (const ArrayType *AT = Context.getAsArrayType(PT->getPointeeType()))
1126       return RequireNonAbstractType(Loc, AT->getElementType(), DiagID, SelID,
1127                                     CurrentRD);
1128   }
1129 
1130   const RecordType *RT = T->getAs<RecordType>();
1131   if (!RT)
1132     return false;
1133 
1134   const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl());
1135   if (!RD)
1136     return false;
1137 
1138   if (CurrentRD && CurrentRD != RD)
1139     return false;
1140 
1141   if (!RD->isAbstract())
1142     return false;
1143 
1144   Diag(Loc, DiagID) << RD->getDeclName() << SelID;
1145 
1146   // Check if we've already emitted the list of pure virtual functions for this
1147   // class.
1148   if (PureVirtualClassDiagSet && PureVirtualClassDiagSet->count(RD))
1149     return true;
1150 
1151   PureVirtualMethodCollector Collector(Context, RD);
1152 
1153   for (PureVirtualMethodCollector::MethodList::const_iterator I =
1154        Collector.methods_begin(), E = Collector.methods_end(); I != E; ++I) {
1155     const CXXMethodDecl *MD = *I;
1156 
1157     Diag(MD->getLocation(), diag::note_pure_virtual_function) <<
1158       MD->getDeclName();
1159   }
1160 
1161   if (!PureVirtualClassDiagSet)
1162     PureVirtualClassDiagSet.reset(new RecordDeclSetTy);
1163   PureVirtualClassDiagSet->insert(RD);
1164 
1165   return true;
1166 }
1167 
1168 namespace {
1169   class VISIBILITY_HIDDEN AbstractClassUsageDiagnoser
1170     : public DeclVisitor<AbstractClassUsageDiagnoser, bool> {
1171     Sema &SemaRef;
1172     CXXRecordDecl *AbstractClass;
1173 
1174     bool VisitDeclContext(const DeclContext *DC) {
1175       bool Invalid = false;
1176 
1177       for (CXXRecordDecl::decl_iterator I = DC->decls_begin(),
1178            E = DC->decls_end(); I != E; ++I)
1179         Invalid |= Visit(*I);
1180 
1181       return Invalid;
1182     }
1183 
1184   public:
1185     AbstractClassUsageDiagnoser(Sema& SemaRef, CXXRecordDecl *ac)
1186       : SemaRef(SemaRef), AbstractClass(ac) {
1187         Visit(SemaRef.Context.getTranslationUnitDecl());
1188     }
1189 
1190     bool VisitFunctionDecl(const FunctionDecl *FD) {
1191       if (FD->isThisDeclarationADefinition()) {
1192         // No need to do the check if we're in a definition, because it requires
1193         // that the return/param types are complete.
1194         // because that requires
1195         return VisitDeclContext(FD);
1196       }
1197 
1198       // Check the return type.
1199       QualType RTy = FD->getType()->getAsFunctionType()->getResultType();
1200       bool Invalid =
1201         SemaRef.RequireNonAbstractType(FD->getLocation(), RTy,
1202                                        diag::err_abstract_type_in_decl,
1203                                        Sema::AbstractReturnType,
1204                                        AbstractClass);
1205 
1206       for (FunctionDecl::param_const_iterator I = FD->param_begin(),
1207            E = FD->param_end(); I != E; ++I) {
1208         const ParmVarDecl *VD = *I;
1209         Invalid |=
1210           SemaRef.RequireNonAbstractType(VD->getLocation(),
1211                                          VD->getOriginalType(),
1212                                          diag::err_abstract_type_in_decl,
1213                                          Sema::AbstractParamType,
1214                                          AbstractClass);
1215       }
1216 
1217       return Invalid;
1218     }
1219 
1220     bool VisitDecl(const Decl* D) {
1221       if (const DeclContext *DC = dyn_cast<DeclContext>(D))
1222         return VisitDeclContext(DC);
1223 
1224       return false;
1225     }
1226   };
1227 }
1228 
1229 void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
1230                                              DeclPtrTy TagDecl,
1231                                              SourceLocation LBrac,
1232                                              SourceLocation RBrac) {
1233   if (!TagDecl)
1234     return;
1235 
1236   AdjustDeclIfTemplate(TagDecl);
1237   ActOnFields(S, RLoc, TagDecl,
1238               (DeclPtrTy*)FieldCollector->getCurFields(),
1239               FieldCollector->getCurNumFields(), LBrac, RBrac, 0);
1240 
1241   CXXRecordDecl *RD = cast<CXXRecordDecl>(TagDecl.getAs<Decl>());
1242   if (!RD->isAbstract()) {
1243     // Collect all the pure virtual methods and see if this is an abstract
1244     // class after all.
1245     PureVirtualMethodCollector Collector(Context, RD);
1246     if (!Collector.empty())
1247       RD->setAbstract(true);
1248   }
1249 
1250   if (RD->isAbstract())
1251     AbstractClassUsageDiagnoser(*this, RD);
1252 
1253   if (!RD->isDependentType())
1254     AddImplicitlyDeclaredMembersToClass(RD);
1255 }
1256 
1257 /// AddImplicitlyDeclaredMembersToClass - Adds any implicitly-declared
1258 /// special functions, such as the default constructor, copy
1259 /// constructor, or destructor, to the given C++ class (C++
1260 /// [special]p1).  This routine can only be executed just before the
1261 /// definition of the class is complete.
1262 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
1263   QualType ClassType = Context.getTypeDeclType(ClassDecl);
1264   ClassType = Context.getCanonicalType(ClassType);
1265 
1266   // FIXME: Implicit declarations have exception specifications, which are
1267   // the union of the specifications of the implicitly called functions.
1268 
1269   if (!ClassDecl->hasUserDeclaredConstructor()) {
1270     // C++ [class.ctor]p5:
1271     //   A default constructor for a class X is a constructor of class X
1272     //   that can be called without an argument. If there is no
1273     //   user-declared constructor for class X, a default constructor is
1274     //   implicitly declared. An implicitly-declared default constructor
1275     //   is an inline public member of its class.
1276     DeclarationName Name
1277       = Context.DeclarationNames.getCXXConstructorName(ClassType);
1278     CXXConstructorDecl *DefaultCon =
1279       CXXConstructorDecl::Create(Context, ClassDecl,
1280                                  ClassDecl->getLocation(), Name,
1281                                  Context.getFunctionType(Context.VoidTy,
1282                                                          0, 0, false, 0),
1283                                  /*isExplicit=*/false,
1284                                  /*isInline=*/true,
1285                                  /*isImplicitlyDeclared=*/true);
1286     DefaultCon->setAccess(AS_public);
1287     DefaultCon->setImplicit();
1288     DefaultCon->setTrivial(ClassDecl->hasTrivialConstructor());
1289     ClassDecl->addDecl(DefaultCon);
1290   }
1291 
1292   if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
1293     // C++ [class.copy]p4:
1294     //   If the class definition does not explicitly declare a copy
1295     //   constructor, one is declared implicitly.
1296 
1297     // C++ [class.copy]p5:
1298     //   The implicitly-declared copy constructor for a class X will
1299     //   have the form
1300     //
1301     //       X::X(const X&)
1302     //
1303     //   if
1304     bool HasConstCopyConstructor = true;
1305 
1306     //     -- each direct or virtual base class B of X has a copy
1307     //        constructor whose first parameter is of type const B& or
1308     //        const volatile B&, and
1309     for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin();
1310          HasConstCopyConstructor && Base != ClassDecl->bases_end(); ++Base) {
1311       const CXXRecordDecl *BaseClassDecl
1312         = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
1313       HasConstCopyConstructor
1314         = BaseClassDecl->hasConstCopyConstructor(Context);
1315     }
1316 
1317     //     -- for all the nonstatic data members of X that are of a
1318     //        class type M (or array thereof), each such class type
1319     //        has a copy constructor whose first parameter is of type
1320     //        const M& or const volatile M&.
1321     for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin();
1322          HasConstCopyConstructor && Field != ClassDecl->field_end();
1323          ++Field) {
1324       QualType FieldType = (*Field)->getType();
1325       if (const ArrayType *Array = Context.getAsArrayType(FieldType))
1326         FieldType = Array->getElementType();
1327       if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
1328         const CXXRecordDecl *FieldClassDecl
1329           = cast<CXXRecordDecl>(FieldClassType->getDecl());
1330         HasConstCopyConstructor
1331           = FieldClassDecl->hasConstCopyConstructor(Context);
1332       }
1333     }
1334 
1335     //   Otherwise, the implicitly declared copy constructor will have
1336     //   the form
1337     //
1338     //       X::X(X&)
1339     QualType ArgType = ClassType;
1340     if (HasConstCopyConstructor)
1341       ArgType = ArgType.withConst();
1342     ArgType = Context.getLValueReferenceType(ArgType);
1343 
1344     //   An implicitly-declared copy constructor is an inline public
1345     //   member of its class.
1346     DeclarationName Name
1347       = Context.DeclarationNames.getCXXConstructorName(ClassType);
1348     CXXConstructorDecl *CopyConstructor
1349       = CXXConstructorDecl::Create(Context, ClassDecl,
1350                                    ClassDecl->getLocation(), Name,
1351                                    Context.getFunctionType(Context.VoidTy,
1352                                                            &ArgType, 1,
1353                                                            false, 0),
1354                                    /*isExplicit=*/false,
1355                                    /*isInline=*/true,
1356                                    /*isImplicitlyDeclared=*/true);
1357     CopyConstructor->setAccess(AS_public);
1358     CopyConstructor->setImplicit();
1359     CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
1360 
1361     // Add the parameter to the constructor.
1362     ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyConstructor,
1363                                                  ClassDecl->getLocation(),
1364                                                  /*IdentifierInfo=*/0,
1365                                                  ArgType, VarDecl::None, 0);
1366     CopyConstructor->setParams(Context, &FromParam, 1);
1367     ClassDecl->addDecl(CopyConstructor);
1368   }
1369 
1370   if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
1371     // Note: The following rules are largely analoguous to the copy
1372     // constructor rules. Note that virtual bases are not taken into account
1373     // for determining the argument type of the operator. Note also that
1374     // operators taking an object instead of a reference are allowed.
1375     //
1376     // C++ [class.copy]p10:
1377     //   If the class definition does not explicitly declare a copy
1378     //   assignment operator, one is declared implicitly.
1379     //   The implicitly-defined copy assignment operator for a class X
1380     //   will have the form
1381     //
1382     //       X& X::operator=(const X&)
1383     //
1384     //   if
1385     bool HasConstCopyAssignment = true;
1386 
1387     //       -- each direct base class B of X has a copy assignment operator
1388     //          whose parameter is of type const B&, const volatile B& or B,
1389     //          and
1390     for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin();
1391          HasConstCopyAssignment && Base != ClassDecl->bases_end(); ++Base) {
1392       const CXXRecordDecl *BaseClassDecl
1393         = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
1394       HasConstCopyAssignment = BaseClassDecl->hasConstCopyAssignment(Context);
1395     }
1396 
1397     //       -- for all the nonstatic data members of X that are of a class
1398     //          type M (or array thereof), each such class type has a copy
1399     //          assignment operator whose parameter is of type const M&,
1400     //          const volatile M& or M.
1401     for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin();
1402          HasConstCopyAssignment && Field != ClassDecl->field_end();
1403          ++Field) {
1404       QualType FieldType = (*Field)->getType();
1405       if (const ArrayType *Array = Context.getAsArrayType(FieldType))
1406         FieldType = Array->getElementType();
1407       if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
1408         const CXXRecordDecl *FieldClassDecl
1409           = cast<CXXRecordDecl>(FieldClassType->getDecl());
1410         HasConstCopyAssignment
1411           = FieldClassDecl->hasConstCopyAssignment(Context);
1412       }
1413     }
1414 
1415     //   Otherwise, the implicitly declared copy assignment operator will
1416     //   have the form
1417     //
1418     //       X& X::operator=(X&)
1419     QualType ArgType = ClassType;
1420     QualType RetType = Context.getLValueReferenceType(ArgType);
1421     if (HasConstCopyAssignment)
1422       ArgType = ArgType.withConst();
1423     ArgType = Context.getLValueReferenceType(ArgType);
1424 
1425     //   An implicitly-declared copy assignment operator is an inline public
1426     //   member of its class.
1427     DeclarationName Name =
1428       Context.DeclarationNames.getCXXOperatorName(OO_Equal);
1429     CXXMethodDecl *CopyAssignment =
1430       CXXMethodDecl::Create(Context, ClassDecl, ClassDecl->getLocation(), Name,
1431                             Context.getFunctionType(RetType, &ArgType, 1,
1432                                                     false, 0),
1433                             /*isStatic=*/false, /*isInline=*/true);
1434     CopyAssignment->setAccess(AS_public);
1435     CopyAssignment->setImplicit();
1436     CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
1437 
1438     // Add the parameter to the operator.
1439     ParmVarDecl *FromParam = ParmVarDecl::Create(Context, CopyAssignment,
1440                                                  ClassDecl->getLocation(),
1441                                                  /*IdentifierInfo=*/0,
1442                                                  ArgType, VarDecl::None, 0);
1443     CopyAssignment->setParams(Context, &FromParam, 1);
1444 
1445     // Don't call addedAssignmentOperator. There is no way to distinguish an
1446     // implicit from an explicit assignment operator.
1447     ClassDecl->addDecl(CopyAssignment);
1448   }
1449 
1450   if (!ClassDecl->hasUserDeclaredDestructor()) {
1451     // C++ [class.dtor]p2:
1452     //   If a class has no user-declared destructor, a destructor is
1453     //   declared implicitly. An implicitly-declared destructor is an
1454     //   inline public member of its class.
1455     DeclarationName Name
1456       = Context.DeclarationNames.getCXXDestructorName(ClassType);
1457     CXXDestructorDecl *Destructor
1458       = CXXDestructorDecl::Create(Context, ClassDecl,
1459                                   ClassDecl->getLocation(), Name,
1460                                   Context.getFunctionType(Context.VoidTy,
1461                                                           0, 0, false, 0),
1462                                   /*isInline=*/true,
1463                                   /*isImplicitlyDeclared=*/true);
1464     Destructor->setAccess(AS_public);
1465     Destructor->setImplicit();
1466     Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
1467     ClassDecl->addDecl(Destructor);
1468   }
1469 }
1470 
1471 void Sema::ActOnReenterTemplateScope(Scope *S, DeclPtrTy TemplateD) {
1472   TemplateDecl *Template = TemplateD.getAs<TemplateDecl>();
1473   if (!Template)
1474     return;
1475 
1476   TemplateParameterList *Params = Template->getTemplateParameters();
1477   for (TemplateParameterList::iterator Param = Params->begin(),
1478                                     ParamEnd = Params->end();
1479        Param != ParamEnd; ++Param) {
1480     NamedDecl *Named = cast<NamedDecl>(*Param);
1481     if (Named->getDeclName()) {
1482       S->AddDecl(DeclPtrTy::make(Named));
1483       IdResolver.AddDecl(Named);
1484     }
1485   }
1486 }
1487 
1488 /// ActOnStartDelayedCXXMethodDeclaration - We have completed
1489 /// parsing a top-level (non-nested) C++ class, and we are now
1490 /// parsing those parts of the given Method declaration that could
1491 /// not be parsed earlier (C++ [class.mem]p2), such as default
1492 /// arguments. This action should enter the scope of the given
1493 /// Method declaration as if we had just parsed the qualified method
1494 /// name. However, it should not bring the parameters into scope;
1495 /// that will be performed by ActOnDelayedCXXMethodParameter.
1496 void Sema::ActOnStartDelayedCXXMethodDeclaration(Scope *S, DeclPtrTy MethodD) {
1497   if (!MethodD)
1498     return;
1499 
1500   CXXScopeSpec SS;
1501   FunctionDecl *Method = cast<FunctionDecl>(MethodD.getAs<Decl>());
1502   QualType ClassTy
1503     = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
1504   SS.setScopeRep(
1505     NestedNameSpecifier::Create(Context, 0, false, ClassTy.getTypePtr()));
1506   ActOnCXXEnterDeclaratorScope(S, SS);
1507 }
1508 
1509 /// ActOnDelayedCXXMethodParameter - We've already started a delayed
1510 /// C++ method declaration. We're (re-)introducing the given
1511 /// function parameter into scope for use in parsing later parts of
1512 /// the method declaration. For example, we could see an
1513 /// ActOnParamDefaultArgument event for this parameter.
1514 void Sema::ActOnDelayedCXXMethodParameter(Scope *S, DeclPtrTy ParamD) {
1515   if (!ParamD)
1516     return;
1517 
1518   ParmVarDecl *Param = cast<ParmVarDecl>(ParamD.getAs<Decl>());
1519 
1520   // If this parameter has an unparsed default argument, clear it out
1521   // to make way for the parsed default argument.
1522   if (Param->hasUnparsedDefaultArg())
1523     Param->setDefaultArg(0);
1524 
1525   S->AddDecl(DeclPtrTy::make(Param));
1526   if (Param->getDeclName())
1527     IdResolver.AddDecl(Param);
1528 }
1529 
1530 /// ActOnFinishDelayedCXXMethodDeclaration - We have finished
1531 /// processing the delayed method declaration for Method. The method
1532 /// declaration is now considered finished. There may be a separate
1533 /// ActOnStartOfFunctionDef action later (not necessarily
1534 /// immediately!) for this method, if it was also defined inside the
1535 /// class body.
1536 void Sema::ActOnFinishDelayedCXXMethodDeclaration(Scope *S, DeclPtrTy MethodD) {
1537   if (!MethodD)
1538     return;
1539 
1540   FunctionDecl *Method = cast<FunctionDecl>(MethodD.getAs<Decl>());
1541   CXXScopeSpec SS;
1542   QualType ClassTy
1543     = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
1544   SS.setScopeRep(
1545     NestedNameSpecifier::Create(Context, 0, false, ClassTy.getTypePtr()));
1546   ActOnCXXExitDeclaratorScope(S, SS);
1547 
1548   // Now that we have our default arguments, check the constructor
1549   // again. It could produce additional diagnostics or affect whether
1550   // the class has implicitly-declared destructors, among other
1551   // things.
1552   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Method))
1553     CheckConstructor(Constructor);
1554 
1555   // Check the default arguments, which we may have added.
1556   if (!Method->isInvalidDecl())
1557     CheckCXXDefaultArguments(Method);
1558 }
1559 
1560 /// CheckConstructorDeclarator - Called by ActOnDeclarator to check
1561 /// the well-formedness of the constructor declarator @p D with type @p
1562 /// R. If there are any errors in the declarator, this routine will
1563 /// emit diagnostics and set the invalid bit to true.  In any case, the type
1564 /// will be updated to reflect a well-formed type for the constructor and
1565 /// returned.
1566 QualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R,
1567                                           FunctionDecl::StorageClass &SC) {
1568   bool isVirtual = D.getDeclSpec().isVirtualSpecified();
1569 
1570   // C++ [class.ctor]p3:
1571   //   A constructor shall not be virtual (10.3) or static (9.4). A
1572   //   constructor can be invoked for a const, volatile or const
1573   //   volatile object. A constructor shall not be declared const,
1574   //   volatile, or const volatile (9.3.2).
1575   if (isVirtual) {
1576     if (!D.isInvalidType())
1577       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
1578         << "virtual" << SourceRange(D.getDeclSpec().getVirtualSpecLoc())
1579         << SourceRange(D.getIdentifierLoc());
1580     D.setInvalidType();
1581   }
1582   if (SC == FunctionDecl::Static) {
1583     if (!D.isInvalidType())
1584       Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be)
1585         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
1586         << SourceRange(D.getIdentifierLoc());
1587     D.setInvalidType();
1588     SC = FunctionDecl::None;
1589   }
1590 
1591   DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
1592   if (FTI.TypeQuals != 0) {
1593     if (FTI.TypeQuals & QualType::Const)
1594       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
1595         << "const" << SourceRange(D.getIdentifierLoc());
1596     if (FTI.TypeQuals & QualType::Volatile)
1597       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
1598         << "volatile" << SourceRange(D.getIdentifierLoc());
1599     if (FTI.TypeQuals & QualType::Restrict)
1600       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_constructor)
1601         << "restrict" << SourceRange(D.getIdentifierLoc());
1602   }
1603 
1604   // Rebuild the function type "R" without any type qualifiers (in
1605   // case any of the errors above fired) and with "void" as the
1606   // return type, since constructors don't have return types. We
1607   // *always* have to do this, because GetTypeForDeclarator will
1608   // put in a result type of "int" when none was specified.
1609   const FunctionProtoType *Proto = R->getAsFunctionProtoType();
1610   return Context.getFunctionType(Context.VoidTy, Proto->arg_type_begin(),
1611                                  Proto->getNumArgs(),
1612                                  Proto->isVariadic(), 0);
1613 }
1614 
1615 /// CheckConstructor - Checks a fully-formed constructor for
1616 /// well-formedness, issuing any diagnostics required. Returns true if
1617 /// the constructor declarator is invalid.
1618 void Sema::CheckConstructor(CXXConstructorDecl *Constructor) {
1619   CXXRecordDecl *ClassDecl
1620     = dyn_cast<CXXRecordDecl>(Constructor->getDeclContext());
1621   if (!ClassDecl)
1622     return Constructor->setInvalidDecl();
1623 
1624   // C++ [class.copy]p3:
1625   //   A declaration of a constructor for a class X is ill-formed if
1626   //   its first parameter is of type (optionally cv-qualified) X and
1627   //   either there are no other parameters or else all other
1628   //   parameters have default arguments.
1629   if (!Constructor->isInvalidDecl() &&
1630       ((Constructor->getNumParams() == 1) ||
1631        (Constructor->getNumParams() > 1 &&
1632         Constructor->getParamDecl(1)->hasDefaultArg()))) {
1633     QualType ParamType = Constructor->getParamDecl(0)->getType();
1634     QualType ClassTy = Context.getTagDeclType(ClassDecl);
1635     if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {
1636       SourceLocation ParamLoc = Constructor->getParamDecl(0)->getLocation();
1637       Diag(ParamLoc, diag::err_constructor_byvalue_arg)
1638         << CodeModificationHint::CreateInsertion(ParamLoc, " const &");
1639       Constructor->setInvalidDecl();
1640     }
1641   }
1642 
1643   // Notify the class that we've added a constructor.
1644   ClassDecl->addedConstructor(Context, Constructor);
1645 }
1646 
1647 static inline bool
1648 FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
1649   return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
1650           FTI.ArgInfo[0].Param &&
1651           FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType()->isVoidType());
1652 }
1653 
1654 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
1655 /// the well-formednes of the destructor declarator @p D with type @p
1656 /// R. If there are any errors in the declarator, this routine will
1657 /// emit diagnostics and set the declarator to invalid.  Even if this happens,
1658 /// will be updated to reflect a well-formed type for the destructor and
1659 /// returned.
1660 QualType Sema::CheckDestructorDeclarator(Declarator &D,
1661                                          FunctionDecl::StorageClass& SC) {
1662   // C++ [class.dtor]p1:
1663   //   [...] A typedef-name that names a class is a class-name
1664   //   (7.1.3); however, a typedef-name that names a class shall not
1665   //   be used as the identifier in the declarator for a destructor
1666   //   declaration.
1667   QualType DeclaratorType = QualType::getFromOpaquePtr(D.getDeclaratorIdType());
1668   if (isa<TypedefType>(DeclaratorType)) {
1669     Diag(D.getIdentifierLoc(), diag::err_destructor_typedef_name)
1670       << DeclaratorType;
1671     D.setInvalidType();
1672   }
1673 
1674   // C++ [class.dtor]p2:
1675   //   A destructor is used to destroy objects of its class type. A
1676   //   destructor takes no parameters, and no return type can be
1677   //   specified for it (not even void). The address of a destructor
1678   //   shall not be taken. A destructor shall not be static. A
1679   //   destructor can be invoked for a const, volatile or const
1680   //   volatile object. A destructor shall not be declared const,
1681   //   volatile or const volatile (9.3.2).
1682   if (SC == FunctionDecl::Static) {
1683     if (!D.isInvalidType())
1684       Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be)
1685         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
1686         << SourceRange(D.getIdentifierLoc());
1687     SC = FunctionDecl::None;
1688     D.setInvalidType();
1689   }
1690   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
1691     // Destructors don't have return types, but the parser will
1692     // happily parse something like:
1693     //
1694     //   class X {
1695     //     float ~X();
1696     //   };
1697     //
1698     // The return type will be eliminated later.
1699     Diag(D.getIdentifierLoc(), diag::err_destructor_return_type)
1700       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
1701       << SourceRange(D.getIdentifierLoc());
1702   }
1703 
1704   DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
1705   if (FTI.TypeQuals != 0 && !D.isInvalidType()) {
1706     if (FTI.TypeQuals & QualType::Const)
1707       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
1708         << "const" << SourceRange(D.getIdentifierLoc());
1709     if (FTI.TypeQuals & QualType::Volatile)
1710       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
1711         << "volatile" << SourceRange(D.getIdentifierLoc());
1712     if (FTI.TypeQuals & QualType::Restrict)
1713       Diag(D.getIdentifierLoc(), diag::err_invalid_qualified_destructor)
1714         << "restrict" << SourceRange(D.getIdentifierLoc());
1715     D.setInvalidType();
1716   }
1717 
1718   // Make sure we don't have any parameters.
1719   if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
1720     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
1721 
1722     // Delete the parameters.
1723     FTI.freeArgs();
1724     D.setInvalidType();
1725   }
1726 
1727   // Make sure the destructor isn't variadic.
1728   if (FTI.isVariadic) {
1729     Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);
1730     D.setInvalidType();
1731   }
1732 
1733   // Rebuild the function type "R" without any type qualifiers or
1734   // parameters (in case any of the errors above fired) and with
1735   // "void" as the return type, since destructors don't have return
1736   // types. We *always* have to do this, because GetTypeForDeclarator
1737   // will put in a result type of "int" when none was specified.
1738   return Context.getFunctionType(Context.VoidTy, 0, 0, false, 0);
1739 }
1740 
1741 /// CheckConversionDeclarator - Called by ActOnDeclarator to check the
1742 /// well-formednes of the conversion function declarator @p D with
1743 /// type @p R. If there are any errors in the declarator, this routine
1744 /// will emit diagnostics and return true. Otherwise, it will return
1745 /// false. Either way, the type @p R will be updated to reflect a
1746 /// well-formed type for the conversion operator.
1747 void Sema::CheckConversionDeclarator(Declarator &D, QualType &R,
1748                                      FunctionDecl::StorageClass& SC) {
1749   // C++ [class.conv.fct]p1:
1750   //   Neither parameter types nor return type can be specified. The
1751   //   type of a conversion function (8.3.5) is “function taking no
1752   //   parameter returning conversion-type-id.”
1753   if (SC == FunctionDecl::Static) {
1754     if (!D.isInvalidType())
1755       Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member)
1756         << "static" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc())
1757         << SourceRange(D.getIdentifierLoc());
1758     D.setInvalidType();
1759     SC = FunctionDecl::None;
1760   }
1761   if (D.getDeclSpec().hasTypeSpecifier() && !D.isInvalidType()) {
1762     // Conversion functions don't have return types, but the parser will
1763     // happily parse something like:
1764     //
1765     //   class X {
1766     //     float operator bool();
1767     //   };
1768     //
1769     // The return type will be changed later anyway.
1770     Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type)
1771       << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc())
1772       << SourceRange(D.getIdentifierLoc());
1773   }
1774 
1775   // Make sure we don't have any parameters.
1776   if (R->getAsFunctionProtoType()->getNumArgs() > 0) {
1777     Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);
1778 
1779     // Delete the parameters.
1780     D.getTypeObject(0).Fun.freeArgs();
1781     D.setInvalidType();
1782   }
1783 
1784   // Make sure the conversion function isn't variadic.
1785   if (R->getAsFunctionProtoType()->isVariadic() && !D.isInvalidType()) {
1786     Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);
1787     D.setInvalidType();
1788   }
1789 
1790   // C++ [class.conv.fct]p4:
1791   //   The conversion-type-id shall not represent a function type nor
1792   //   an array type.
1793   QualType ConvType = QualType::getFromOpaquePtr(D.getDeclaratorIdType());
1794   if (ConvType->isArrayType()) {
1795     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);
1796     ConvType = Context.getPointerType(ConvType);
1797     D.setInvalidType();
1798   } else if (ConvType->isFunctionType()) {
1799     Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);
1800     ConvType = Context.getPointerType(ConvType);
1801     D.setInvalidType();
1802   }
1803 
1804   // Rebuild the function type "R" without any parameters (in case any
1805   // of the errors above fired) and with the conversion type as the
1806   // return type.
1807   R = Context.getFunctionType(ConvType, 0, 0, false,
1808                               R->getAsFunctionProtoType()->getTypeQuals());
1809 
1810   // C++0x explicit conversion operators.
1811   if (D.getDeclSpec().isExplicitSpecified() && !getLangOptions().CPlusPlus0x)
1812     Diag(D.getDeclSpec().getExplicitSpecLoc(),
1813          diag::warn_explicit_conversion_functions)
1814       << SourceRange(D.getDeclSpec().getExplicitSpecLoc());
1815 }
1816 
1817 /// ActOnConversionDeclarator - Called by ActOnDeclarator to complete
1818 /// the declaration of the given C++ conversion function. This routine
1819 /// is responsible for recording the conversion function in the C++
1820 /// class, if possible.
1821 Sema::DeclPtrTy Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {
1822   assert(Conversion && "Expected to receive a conversion function declaration");
1823 
1824   // Set the lexical context of this conversion function
1825   Conversion->setLexicalDeclContext(CurContext);
1826 
1827   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
1828 
1829   // Make sure we aren't redeclaring the conversion function.
1830   QualType ConvType = Context.getCanonicalType(Conversion->getConversionType());
1831 
1832   // C++ [class.conv.fct]p1:
1833   //   [...] A conversion function is never used to convert a
1834   //   (possibly cv-qualified) object to the (possibly cv-qualified)
1835   //   same object type (or a reference to it), to a (possibly
1836   //   cv-qualified) base class of that type (or a reference to it),
1837   //   or to (possibly cv-qualified) void.
1838   // FIXME: Suppress this warning if the conversion function ends up being a
1839   // virtual function that overrides a virtual function in a base class.
1840   QualType ClassType
1841     = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
1842   if (const ReferenceType *ConvTypeRef = ConvType->getAs<ReferenceType>())
1843     ConvType = ConvTypeRef->getPointeeType();
1844   if (ConvType->isRecordType()) {
1845     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
1846     if (ConvType == ClassType)
1847       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
1848         << ClassType;
1849     else if (IsDerivedFrom(ClassType, ConvType))
1850       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
1851         <<  ClassType << ConvType;
1852   } else if (ConvType->isVoidType()) {
1853     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
1854       << ClassType << ConvType;
1855   }
1856 
1857   if (Conversion->getPreviousDeclaration()) {
1858     OverloadedFunctionDecl *Conversions = ClassDecl->getConversionFunctions();
1859     for (OverloadedFunctionDecl::function_iterator
1860            Conv = Conversions->function_begin(),
1861            ConvEnd = Conversions->function_end();
1862          Conv != ConvEnd; ++Conv) {
1863       if (*Conv
1864             == cast_or_null<NamedDecl>(Conversion->getPreviousDeclaration())) {
1865         *Conv = Conversion;
1866         return DeclPtrTy::make(Conversion);
1867       }
1868     }
1869     assert(Conversion->isInvalidDecl() && "Conversion should not get here.");
1870   } else
1871     ClassDecl->addConversionFunction(Context, Conversion);
1872 
1873   return DeclPtrTy::make(Conversion);
1874 }
1875 
1876 //===----------------------------------------------------------------------===//
1877 // Namespace Handling
1878 //===----------------------------------------------------------------------===//
1879 
1880 /// ActOnStartNamespaceDef - This is called at the start of a namespace
1881 /// definition.
1882 Sema::DeclPtrTy Sema::ActOnStartNamespaceDef(Scope *NamespcScope,
1883                                              SourceLocation IdentLoc,
1884                                              IdentifierInfo *II,
1885                                              SourceLocation LBrace) {
1886   NamespaceDecl *Namespc =
1887       NamespaceDecl::Create(Context, CurContext, IdentLoc, II);
1888   Namespc->setLBracLoc(LBrace);
1889 
1890   Scope *DeclRegionScope = NamespcScope->getParent();
1891 
1892   if (II) {
1893     // C++ [namespace.def]p2:
1894     // The identifier in an original-namespace-definition shall not have been
1895     // previously defined in the declarative region in which the
1896     // original-namespace-definition appears. The identifier in an
1897     // original-namespace-definition is the name of the namespace. Subsequently
1898     // in that declarative region, it is treated as an original-namespace-name.
1899 
1900     NamedDecl *PrevDecl = LookupName(DeclRegionScope, II, LookupOrdinaryName,
1901                                      true);
1902 
1903     if (NamespaceDecl *OrigNS = dyn_cast_or_null<NamespaceDecl>(PrevDecl)) {
1904       // This is an extended namespace definition.
1905       // Attach this namespace decl to the chain of extended namespace
1906       // definitions.
1907       OrigNS->setNextNamespace(Namespc);
1908       Namespc->setOriginalNamespace(OrigNS->getOriginalNamespace());
1909 
1910       // Remove the previous declaration from the scope.
1911       if (DeclRegionScope->isDeclScope(DeclPtrTy::make(OrigNS))) {
1912         IdResolver.RemoveDecl(OrigNS);
1913         DeclRegionScope->RemoveDecl(DeclPtrTy::make(OrigNS));
1914       }
1915     } else if (PrevDecl) {
1916       // This is an invalid name redefinition.
1917       Diag(Namespc->getLocation(), diag::err_redefinition_different_kind)
1918        << Namespc->getDeclName();
1919       Diag(PrevDecl->getLocation(), diag::note_previous_definition);
1920       Namespc->setInvalidDecl();
1921       // Continue on to push Namespc as current DeclContext and return it.
1922     }
1923 
1924     PushOnScopeChains(Namespc, DeclRegionScope);
1925   } else {
1926     // FIXME: Handle anonymous namespaces
1927   }
1928 
1929   // Although we could have an invalid decl (i.e. the namespace name is a
1930   // redefinition), push it as current DeclContext and try to continue parsing.
1931   // FIXME: We should be able to push Namespc here, so that the each DeclContext
1932   // for the namespace has the declarations that showed up in that particular
1933   // namespace definition.
1934   PushDeclContext(NamespcScope, Namespc);
1935   return DeclPtrTy::make(Namespc);
1936 }
1937 
1938 /// ActOnFinishNamespaceDef - This callback is called after a namespace is
1939 /// exited. Decl is the DeclTy returned by ActOnStartNamespaceDef.
1940 void Sema::ActOnFinishNamespaceDef(DeclPtrTy D, SourceLocation RBrace) {
1941   Decl *Dcl = D.getAs<Decl>();
1942   NamespaceDecl *Namespc = dyn_cast_or_null<NamespaceDecl>(Dcl);
1943   assert(Namespc && "Invalid parameter, expected NamespaceDecl");
1944   Namespc->setRBracLoc(RBrace);
1945   PopDeclContext();
1946 }
1947 
1948 Sema::DeclPtrTy Sema::ActOnUsingDirective(Scope *S,
1949                                           SourceLocation UsingLoc,
1950                                           SourceLocation NamespcLoc,
1951                                           const CXXScopeSpec &SS,
1952                                           SourceLocation IdentLoc,
1953                                           IdentifierInfo *NamespcName,
1954                                           AttributeList *AttrList) {
1955   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
1956   assert(NamespcName && "Invalid NamespcName.");
1957   assert(IdentLoc.isValid() && "Invalid NamespceName location.");
1958   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
1959 
1960   UsingDirectiveDecl *UDir = 0;
1961 
1962   // Lookup namespace name.
1963   LookupResult R = LookupParsedName(S, &SS, NamespcName,
1964                                     LookupNamespaceName, false);
1965   if (R.isAmbiguous()) {
1966     DiagnoseAmbiguousLookup(R, NamespcName, IdentLoc);
1967     return DeclPtrTy();
1968   }
1969   if (NamedDecl *NS = R) {
1970     assert(isa<NamespaceDecl>(NS) && "expected namespace decl");
1971     // C++ [namespace.udir]p1:
1972     //   A using-directive specifies that the names in the nominated
1973     //   namespace can be used in the scope in which the
1974     //   using-directive appears after the using-directive. During
1975     //   unqualified name lookup (3.4.1), the names appear as if they
1976     //   were declared in the nearest enclosing namespace which
1977     //   contains both the using-directive and the nominated
1978     //   namespace. [Note: in this context, “contains” means “contains
1979     //   directly or indirectly”. ]
1980 
1981     // Find enclosing context containing both using-directive and
1982     // nominated namespace.
1983     DeclContext *CommonAncestor = cast<DeclContext>(NS);
1984     while (CommonAncestor && !CommonAncestor->Encloses(CurContext))
1985       CommonAncestor = CommonAncestor->getParent();
1986 
1987     UDir = UsingDirectiveDecl::Create(Context,
1988                                       CurContext, UsingLoc,
1989                                       NamespcLoc,
1990                                       SS.getRange(),
1991                                       (NestedNameSpecifier *)SS.getScopeRep(),
1992                                       IdentLoc,
1993                                       cast<NamespaceDecl>(NS),
1994                                       CommonAncestor);
1995     PushUsingDirective(S, UDir);
1996   } else {
1997     Diag(IdentLoc, diag::err_expected_namespace_name) << SS.getRange();
1998   }
1999 
2000   // FIXME: We ignore attributes for now.
2001   delete AttrList;
2002   return DeclPtrTy::make(UDir);
2003 }
2004 
2005 void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) {
2006   // If scope has associated entity, then using directive is at namespace
2007   // or translation unit scope. We add UsingDirectiveDecls, into
2008   // it's lookup structure.
2009   if (DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity()))
2010     Ctx->addDecl(UDir);
2011   else
2012     // Otherwise it is block-sope. using-directives will affect lookup
2013     // only to the end of scope.
2014     S->PushUsingDirective(DeclPtrTy::make(UDir));
2015 }
2016 
2017 
2018 Sema::DeclPtrTy Sema::ActOnUsingDeclaration(Scope *S,
2019                                           SourceLocation UsingLoc,
2020                                           const CXXScopeSpec &SS,
2021                                           SourceLocation IdentLoc,
2022                                           IdentifierInfo *TargetName,
2023                                           OverloadedOperatorKind Op,
2024                                           AttributeList *AttrList,
2025                                           bool IsTypeName) {
2026   assert(!SS.isInvalid() && "Invalid CXXScopeSpec.");
2027   assert((TargetName || Op) && "Invalid TargetName.");
2028   assert(IdentLoc.isValid() && "Invalid TargetName location.");
2029   assert(S->getFlags() & Scope::DeclScope && "Invalid Scope.");
2030 
2031   UsingDecl *UsingAlias = 0;
2032 
2033   DeclarationName Name;
2034   if (TargetName)
2035     Name = TargetName;
2036   else
2037     Name = Context.DeclarationNames.getCXXOperatorName(Op);
2038 
2039   // Lookup target name.
2040   LookupResult R = LookupParsedName(S, &SS, Name, LookupOrdinaryName, false);
2041 
2042   if (NamedDecl *NS = R) {
2043     if (IsTypeName && !isa<TypeDecl>(NS)) {
2044       Diag(IdentLoc, diag::err_using_typename_non_type);
2045     }
2046     UsingAlias = UsingDecl::Create(Context, CurContext, IdentLoc, SS.getRange(),
2047         NS->getLocation(), UsingLoc, NS,
2048         static_cast<NestedNameSpecifier *>(SS.getScopeRep()),
2049         IsTypeName);
2050     PushOnScopeChains(UsingAlias, S);
2051   } else {
2052     Diag(IdentLoc, diag::err_using_requires_qualname) << SS.getRange();
2053   }
2054 
2055   // FIXME: We ignore attributes for now.
2056   delete AttrList;
2057   return DeclPtrTy::make(UsingAlias);
2058 }
2059 
2060 /// getNamespaceDecl - Returns the namespace a decl represents. If the decl
2061 /// is a namespace alias, returns the namespace it points to.
2062 static inline NamespaceDecl *getNamespaceDecl(NamedDecl *D) {
2063   if (NamespaceAliasDecl *AD = dyn_cast_or_null<NamespaceAliasDecl>(D))
2064     return AD->getNamespace();
2065   return dyn_cast_or_null<NamespaceDecl>(D);
2066 }
2067 
2068 Sema::DeclPtrTy Sema::ActOnNamespaceAliasDef(Scope *S,
2069                                              SourceLocation NamespaceLoc,
2070                                              SourceLocation AliasLoc,
2071                                              IdentifierInfo *Alias,
2072                                              const CXXScopeSpec &SS,
2073                                              SourceLocation IdentLoc,
2074                                              IdentifierInfo *Ident) {
2075 
2076   // Lookup the namespace name.
2077   LookupResult R = LookupParsedName(S, &SS, Ident, LookupNamespaceName, false);
2078 
2079   // Check if we have a previous declaration with the same name.
2080   if (NamedDecl *PrevDecl = LookupName(S, Alias, LookupOrdinaryName, true)) {
2081     if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {
2082       // We already have an alias with the same name that points to the same
2083       // namespace, so don't create a new one.
2084       if (!R.isAmbiguous() && AD->getNamespace() == getNamespaceDecl(R))
2085         return DeclPtrTy();
2086     }
2087 
2088     unsigned DiagID = isa<NamespaceDecl>(PrevDecl) ? diag::err_redefinition :
2089       diag::err_redefinition_different_kind;
2090     Diag(AliasLoc, DiagID) << Alias;
2091     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
2092     return DeclPtrTy();
2093   }
2094 
2095   if (R.isAmbiguous()) {
2096     DiagnoseAmbiguousLookup(R, Ident, IdentLoc);
2097     return DeclPtrTy();
2098   }
2099 
2100   if (!R) {
2101     Diag(NamespaceLoc, diag::err_expected_namespace_name) << SS.getRange();
2102     return DeclPtrTy();
2103   }
2104 
2105   NamespaceAliasDecl *AliasDecl =
2106     NamespaceAliasDecl::Create(Context, CurContext, NamespaceLoc, AliasLoc,
2107                                Alias, SS.getRange(),
2108                                (NestedNameSpecifier *)SS.getScopeRep(),
2109                                IdentLoc, R);
2110 
2111   CurContext->addDecl(AliasDecl);
2112   return DeclPtrTy::make(AliasDecl);
2113 }
2114 
2115 void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
2116                                             CXXConstructorDecl *Constructor) {
2117   assert((Constructor->isImplicit() && Constructor->isDefaultConstructor() &&
2118           !Constructor->isUsed()) &&
2119     "DefineImplicitDefaultConstructor - call it for implicit default ctor");
2120 
2121   CXXRecordDecl *ClassDecl
2122     = cast<CXXRecordDecl>(Constructor->getDeclContext());
2123   assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
2124   // Before the implicitly-declared default constructor for a class is
2125   // implicitly defined, all the implicitly-declared default constructors
2126   // for its base class and its non-static data members shall have been
2127   // implicitly defined.
2128   bool err = false;
2129   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2130        E = ClassDecl->bases_end(); Base != E; ++Base) {
2131     CXXRecordDecl *BaseClassDecl
2132       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2133     if (!BaseClassDecl->hasTrivialConstructor()) {
2134       if (CXXConstructorDecl *BaseCtor =
2135             BaseClassDecl->getDefaultConstructor(Context))
2136         MarkDeclarationReferenced(CurrentLocation, BaseCtor);
2137       else {
2138         Diag(CurrentLocation, diag::err_defining_default_ctor)
2139           << Context.getTagDeclType(ClassDecl) << 1
2140           << Context.getTagDeclType(BaseClassDecl);
2141         Diag(BaseClassDecl->getLocation(), diag::note_previous_class_decl)
2142               << Context.getTagDeclType(BaseClassDecl);
2143         err = true;
2144       }
2145     }
2146   }
2147   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
2148        E = ClassDecl->field_end(); Field != E; ++Field) {
2149     QualType FieldType = Context.getCanonicalType((*Field)->getType());
2150     if (const ArrayType *Array = Context.getAsArrayType(FieldType))
2151       FieldType = Array->getElementType();
2152     if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
2153       CXXRecordDecl *FieldClassDecl
2154         = cast<CXXRecordDecl>(FieldClassType->getDecl());
2155       if (!FieldClassDecl->hasTrivialConstructor()) {
2156         if (CXXConstructorDecl *FieldCtor =
2157             FieldClassDecl->getDefaultConstructor(Context))
2158           MarkDeclarationReferenced(CurrentLocation, FieldCtor);
2159         else {
2160           Diag(CurrentLocation, diag::err_defining_default_ctor)
2161           << Context.getTagDeclType(ClassDecl) << 0 <<
2162               Context.getTagDeclType(FieldClassDecl);
2163           Diag(FieldClassDecl->getLocation(), diag::note_previous_class_decl)
2164           << Context.getTagDeclType(FieldClassDecl);
2165           err = true;
2166         }
2167       }
2168     }
2169     else if (FieldType->isReferenceType()) {
2170       Diag(CurrentLocation, diag::err_unintialized_member)
2171         << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
2172       Diag((*Field)->getLocation(), diag::note_declared_at);
2173       err = true;
2174     }
2175     else if (FieldType.isConstQualified()) {
2176       Diag(CurrentLocation, diag::err_unintialized_member)
2177         << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
2178        Diag((*Field)->getLocation(), diag::note_declared_at);
2179       err = true;
2180     }
2181   }
2182   if (!err)
2183     Constructor->setUsed();
2184   else
2185     Constructor->setInvalidDecl();
2186 }
2187 
2188 void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
2189                                             CXXDestructorDecl *Destructor) {
2190   assert((Destructor->isImplicit() && !Destructor->isUsed()) &&
2191          "DefineImplicitDestructor - call it for implicit default dtor");
2192 
2193   CXXRecordDecl *ClassDecl
2194   = cast<CXXRecordDecl>(Destructor->getDeclContext());
2195   assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
2196   // C++ [class.dtor] p5
2197   // Before the implicitly-declared default destructor for a class is
2198   // implicitly defined, all the implicitly-declared default destructors
2199   // for its base class and its non-static data members shall have been
2200   // implicitly defined.
2201   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2202        E = ClassDecl->bases_end(); Base != E; ++Base) {
2203     CXXRecordDecl *BaseClassDecl
2204       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2205     if (!BaseClassDecl->hasTrivialDestructor()) {
2206       if (CXXDestructorDecl *BaseDtor =
2207           const_cast<CXXDestructorDecl*>(BaseClassDecl->getDestructor(Context)))
2208         MarkDeclarationReferenced(CurrentLocation, BaseDtor);
2209       else
2210         assert(false &&
2211                "DefineImplicitDestructor - missing dtor in a base class");
2212     }
2213   }
2214 
2215   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
2216        E = ClassDecl->field_end(); Field != E; ++Field) {
2217     QualType FieldType = Context.getCanonicalType((*Field)->getType());
2218     if (const ArrayType *Array = Context.getAsArrayType(FieldType))
2219       FieldType = Array->getElementType();
2220     if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
2221       CXXRecordDecl *FieldClassDecl
2222         = cast<CXXRecordDecl>(FieldClassType->getDecl());
2223       if (!FieldClassDecl->hasTrivialDestructor()) {
2224         if (CXXDestructorDecl *FieldDtor =
2225             const_cast<CXXDestructorDecl*>(
2226                                         FieldClassDecl->getDestructor(Context)))
2227           MarkDeclarationReferenced(CurrentLocation, FieldDtor);
2228         else
2229           assert(false &&
2230           "DefineImplicitDestructor - missing dtor in class of a data member");
2231       }
2232     }
2233   }
2234   Destructor->setUsed();
2235 }
2236 
2237 void Sema::DefineImplicitOverloadedAssign(SourceLocation CurrentLocation,
2238                                           CXXMethodDecl *MethodDecl) {
2239   assert((MethodDecl->isImplicit() && MethodDecl->isOverloadedOperator() &&
2240           MethodDecl->getOverloadedOperator() == OO_Equal &&
2241           !MethodDecl->isUsed()) &&
2242          "DefineImplicitOverloadedAssign - call it for implicit assignment op");
2243 
2244   CXXRecordDecl *ClassDecl
2245     = cast<CXXRecordDecl>(MethodDecl->getDeclContext());
2246 
2247   // C++[class.copy] p12
2248   // Before the implicitly-declared copy assignment operator for a class is
2249   // implicitly defined, all implicitly-declared copy assignment operators
2250   // for its direct base classes and its nonstatic data members shall have
2251   // been implicitly defined.
2252   bool err = false;
2253   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2254        E = ClassDecl->bases_end(); Base != E; ++Base) {
2255     CXXRecordDecl *BaseClassDecl
2256       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2257     if (CXXMethodDecl *BaseAssignOpMethod =
2258           getAssignOperatorMethod(MethodDecl->getParamDecl(0), BaseClassDecl))
2259       MarkDeclarationReferenced(CurrentLocation, BaseAssignOpMethod);
2260   }
2261   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
2262        E = ClassDecl->field_end(); Field != E; ++Field) {
2263     QualType FieldType = Context.getCanonicalType((*Field)->getType());
2264     if (const ArrayType *Array = Context.getAsArrayType(FieldType))
2265       FieldType = Array->getElementType();
2266     if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
2267       CXXRecordDecl *FieldClassDecl
2268         = cast<CXXRecordDecl>(FieldClassType->getDecl());
2269       if (CXXMethodDecl *FieldAssignOpMethod =
2270           getAssignOperatorMethod(MethodDecl->getParamDecl(0), FieldClassDecl))
2271         MarkDeclarationReferenced(CurrentLocation, FieldAssignOpMethod);
2272     }
2273     else if (FieldType->isReferenceType()) {
2274       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
2275       << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
2276       Diag(Field->getLocation(), diag::note_declared_at);
2277       Diag(CurrentLocation, diag::note_first_required_here);
2278       err = true;
2279     }
2280     else if (FieldType.isConstQualified()) {
2281       Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
2282       << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
2283       Diag(Field->getLocation(), diag::note_declared_at);
2284       Diag(CurrentLocation, diag::note_first_required_here);
2285       err = true;
2286     }
2287   }
2288   if (!err)
2289     MethodDecl->setUsed();
2290 }
2291 
2292 CXXMethodDecl *
2293 Sema::getAssignOperatorMethod(ParmVarDecl *ParmDecl,
2294                               CXXRecordDecl *ClassDecl) {
2295   QualType LHSType = Context.getTypeDeclType(ClassDecl);
2296   QualType RHSType(LHSType);
2297   // If class's assignment operator argument is const/volatile qualified,
2298   // look for operator = (const/volatile B&). Otherwise, look for
2299   // operator = (B&).
2300   if (ParmDecl->getType().isConstQualified())
2301     RHSType.addConst();
2302   if (ParmDecl->getType().isVolatileQualified())
2303     RHSType.addVolatile();
2304   ExprOwningPtr<Expr> LHS(this,  new (Context) DeclRefExpr(ParmDecl,
2305                                                           LHSType,
2306                                                           SourceLocation()));
2307   ExprOwningPtr<Expr> RHS(this,  new (Context) DeclRefExpr(ParmDecl,
2308                                                           RHSType,
2309                                                           SourceLocation()));
2310   Expr *Args[2] = { &*LHS, &*RHS };
2311   OverloadCandidateSet CandidateSet;
2312   AddMemberOperatorCandidates(clang::OO_Equal, SourceLocation(), Args, 2,
2313                               CandidateSet);
2314   OverloadCandidateSet::iterator Best;
2315   if (BestViableFunction(CandidateSet,
2316                          ClassDecl->getLocation(), Best) == OR_Success)
2317     return cast<CXXMethodDecl>(Best->Function);
2318   assert(false &&
2319          "getAssignOperatorMethod - copy assignment operator method not found");
2320   return 0;
2321 }
2322 
2323 void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
2324                                    CXXConstructorDecl *CopyConstructor,
2325                                    unsigned TypeQuals) {
2326   assert((CopyConstructor->isImplicit() &&
2327           CopyConstructor->isCopyConstructor(Context, TypeQuals) &&
2328           !CopyConstructor->isUsed()) &&
2329          "DefineImplicitCopyConstructor - call it for implicit copy ctor");
2330 
2331   CXXRecordDecl *ClassDecl
2332     = cast<CXXRecordDecl>(CopyConstructor->getDeclContext());
2333   assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
2334   // C++ [class.copy] p209
2335   // Before the implicitly-declared copy constructor for a class is
2336   // implicitly defined, all the implicitly-declared copy constructors
2337   // for its base class and its non-static data members shall have been
2338   // implicitly defined.
2339   for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin();
2340        Base != ClassDecl->bases_end(); ++Base) {
2341     CXXRecordDecl *BaseClassDecl
2342       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2343     if (CXXConstructorDecl *BaseCopyCtor =
2344         BaseClassDecl->getCopyConstructor(Context, TypeQuals))
2345       MarkDeclarationReferenced(CurrentLocation, BaseCopyCtor);
2346   }
2347   for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
2348                                   FieldEnd = ClassDecl->field_end();
2349        Field != FieldEnd; ++Field) {
2350     QualType FieldType = Context.getCanonicalType((*Field)->getType());
2351     if (const ArrayType *Array = Context.getAsArrayType(FieldType))
2352       FieldType = Array->getElementType();
2353     if (const RecordType *FieldClassType = FieldType->getAs<RecordType>()) {
2354       CXXRecordDecl *FieldClassDecl
2355         = cast<CXXRecordDecl>(FieldClassType->getDecl());
2356       if (CXXConstructorDecl *FieldCopyCtor =
2357           FieldClassDecl->getCopyConstructor(Context, TypeQuals))
2358         MarkDeclarationReferenced(CurrentLocation, FieldCopyCtor);
2359     }
2360   }
2361   CopyConstructor->setUsed();
2362 }
2363 
2364 void Sema::InitializeVarWithConstructor(VarDecl *VD,
2365                                         CXXConstructorDecl *Constructor,
2366                                         QualType DeclInitType,
2367                                         Expr **Exprs, unsigned NumExprs) {
2368   Expr *Temp = CXXConstructExpr::Create(Context, DeclInitType, Constructor,
2369                                         false, Exprs, NumExprs);
2370   MarkDeclarationReferenced(VD->getLocation(), Constructor);
2371   VD->setInit(Context, Temp);
2372 }
2373 
2374 void Sema::FinalizeVarWithDestructor(VarDecl *VD, QualType DeclInitType)
2375 {
2376   CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(
2377                                   DeclInitType->getAs<RecordType>()->getDecl());
2378   if (!ClassDecl->hasTrivialDestructor())
2379     if (CXXDestructorDecl *Destructor =
2380         const_cast<CXXDestructorDecl*>(ClassDecl->getDestructor(Context)))
2381       MarkDeclarationReferenced(VD->getLocation(), Destructor);
2382 }
2383 
2384 /// AddCXXDirectInitializerToDecl - This action is called immediately after
2385 /// ActOnDeclarator, when a C++ direct initializer is present.
2386 /// e.g: "int x(1);"
2387 void Sema::AddCXXDirectInitializerToDecl(DeclPtrTy Dcl,
2388                                          SourceLocation LParenLoc,
2389                                          MultiExprArg Exprs,
2390                                          SourceLocation *CommaLocs,
2391                                          SourceLocation RParenLoc) {
2392   unsigned NumExprs = Exprs.size();
2393   assert(NumExprs != 0 && Exprs.get() && "missing expressions");
2394   Decl *RealDecl = Dcl.getAs<Decl>();
2395 
2396   // If there is no declaration, there was an error parsing it.  Just ignore
2397   // the initializer.
2398   if (RealDecl == 0)
2399     return;
2400 
2401   VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
2402   if (!VDecl) {
2403     Diag(RealDecl->getLocation(), diag::err_illegal_initializer);
2404     RealDecl->setInvalidDecl();
2405     return;
2406   }
2407 
2408   // FIXME: Need to handle dependent types and expressions here.
2409 
2410   // We will treat direct-initialization as a copy-initialization:
2411   //    int x(1);  -as-> int x = 1;
2412   //    ClassType x(a,b,c); -as-> ClassType x = ClassType(a,b,c);
2413   //
2414   // Clients that want to distinguish between the two forms, can check for
2415   // direct initializer using VarDecl::hasCXXDirectInitializer().
2416   // A major benefit is that clients that don't particularly care about which
2417   // exactly form was it (like the CodeGen) can handle both cases without
2418   // special case code.
2419 
2420   // C++ 8.5p11:
2421   // The form of initialization (using parentheses or '=') is generally
2422   // insignificant, but does matter when the entity being initialized has a
2423   // class type.
2424   QualType DeclInitType = VDecl->getType();
2425   if (const ArrayType *Array = Context.getAsArrayType(DeclInitType))
2426     DeclInitType = Array->getElementType();
2427 
2428   // FIXME: This isn't the right place to complete the type.
2429   if (RequireCompleteType(VDecl->getLocation(), VDecl->getType(),
2430                           diag::err_typecheck_decl_incomplete_type)) {
2431     VDecl->setInvalidDecl();
2432     return;
2433   }
2434 
2435   if (VDecl->getType()->isRecordType()) {
2436     CXXConstructorDecl *Constructor
2437       = PerformInitializationByConstructor(DeclInitType,
2438                                            (Expr **)Exprs.get(), NumExprs,
2439                                            VDecl->getLocation(),
2440                                            SourceRange(VDecl->getLocation(),
2441                                                        RParenLoc),
2442                                            VDecl->getDeclName(),
2443                                            IK_Direct);
2444     if (!Constructor)
2445       RealDecl->setInvalidDecl();
2446     else {
2447       VDecl->setCXXDirectInitializer(true);
2448       InitializeVarWithConstructor(VDecl, Constructor, DeclInitType,
2449                                    (Expr**)Exprs.release(), NumExprs);
2450       FinalizeVarWithDestructor(VDecl, DeclInitType);
2451     }
2452     return;
2453   }
2454 
2455   if (NumExprs > 1) {
2456     Diag(CommaLocs[0], diag::err_builtin_direct_init_more_than_one_arg)
2457       << SourceRange(VDecl->getLocation(), RParenLoc);
2458     RealDecl->setInvalidDecl();
2459     return;
2460   }
2461 
2462   // Let clients know that initialization was done with a direct initializer.
2463   VDecl->setCXXDirectInitializer(true);
2464 
2465   assert(NumExprs == 1 && "Expected 1 expression");
2466   // Set the init expression, handles conversions.
2467   AddInitializerToDecl(Dcl, ExprArg(*this, Exprs.release()[0]),
2468                        /*DirectInit=*/true);
2469 }
2470 
2471 /// PerformInitializationByConstructor - Perform initialization by
2472 /// constructor (C++ [dcl.init]p14), which may occur as part of
2473 /// direct-initialization or copy-initialization. We are initializing
2474 /// an object of type @p ClassType with the given arguments @p
2475 /// Args. @p Loc is the location in the source code where the
2476 /// initializer occurs (e.g., a declaration, member initializer,
2477 /// functional cast, etc.) while @p Range covers the whole
2478 /// initialization. @p InitEntity is the entity being initialized,
2479 /// which may by the name of a declaration or a type. @p Kind is the
2480 /// kind of initialization we're performing, which affects whether
2481 /// explicit constructors will be considered. When successful, returns
2482 /// the constructor that will be used to perform the initialization;
2483 /// when the initialization fails, emits a diagnostic and returns
2484 /// null.
2485 CXXConstructorDecl *
2486 Sema::PerformInitializationByConstructor(QualType ClassType,
2487                                          Expr **Args, unsigned NumArgs,
2488                                          SourceLocation Loc, SourceRange Range,
2489                                          DeclarationName InitEntity,
2490                                          InitializationKind Kind) {
2491   const RecordType *ClassRec = ClassType->getAs<RecordType>();
2492   assert(ClassRec && "Can only initialize a class type here");
2493 
2494   // C++ [dcl.init]p14:
2495   //
2496   //   If the initialization is direct-initialization, or if it is
2497   //   copy-initialization where the cv-unqualified version of the
2498   //   source type is the same class as, or a derived class of, the
2499   //   class of the destination, constructors are considered. The
2500   //   applicable constructors are enumerated (13.3.1.3), and the
2501   //   best one is chosen through overload resolution (13.3). The
2502   //   constructor so selected is called to initialize the object,
2503   //   with the initializer expression(s) as its argument(s). If no
2504   //   constructor applies, or the overload resolution is ambiguous,
2505   //   the initialization is ill-formed.
2506   const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(ClassRec->getDecl());
2507   OverloadCandidateSet CandidateSet;
2508 
2509   // Add constructors to the overload set.
2510   DeclarationName ConstructorName
2511     = Context.DeclarationNames.getCXXConstructorName(
2512                        Context.getCanonicalType(ClassType.getUnqualifiedType()));
2513   DeclContext::lookup_const_iterator Con, ConEnd;
2514   for (llvm::tie(Con, ConEnd) = ClassDecl->lookup(ConstructorName);
2515        Con != ConEnd; ++Con) {
2516     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
2517     if ((Kind == IK_Direct) ||
2518         (Kind == IK_Copy && Constructor->isConvertingConstructor()) ||
2519         (Kind == IK_Default && Constructor->isDefaultConstructor()))
2520       AddOverloadCandidate(Constructor, Args, NumArgs, CandidateSet);
2521   }
2522 
2523   // FIXME: When we decide not to synthesize the implicitly-declared
2524   // constructors, we'll need to make them appear here.
2525 
2526   OverloadCandidateSet::iterator Best;
2527   switch (BestViableFunction(CandidateSet, Loc, Best)) {
2528   case OR_Success:
2529     // We found a constructor. Return it.
2530     return cast<CXXConstructorDecl>(Best->Function);
2531 
2532   case OR_No_Viable_Function:
2533     if (InitEntity)
2534       Diag(Loc, diag::err_ovl_no_viable_function_in_init)
2535         << InitEntity << Range;
2536     else
2537       Diag(Loc, diag::err_ovl_no_viable_function_in_init)
2538         << ClassType << Range;
2539     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
2540     return 0;
2541 
2542   case OR_Ambiguous:
2543     if (InitEntity)
2544       Diag(Loc, diag::err_ovl_ambiguous_init) << InitEntity << Range;
2545     else
2546       Diag(Loc, diag::err_ovl_ambiguous_init) << ClassType << Range;
2547     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
2548     return 0;
2549 
2550   case OR_Deleted:
2551     if (InitEntity)
2552       Diag(Loc, diag::err_ovl_deleted_init)
2553         << Best->Function->isDeleted()
2554         << InitEntity << Range;
2555     else
2556       Diag(Loc, diag::err_ovl_deleted_init)
2557         << Best->Function->isDeleted()
2558         << InitEntity << Range;
2559     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
2560     return 0;
2561   }
2562 
2563   return 0;
2564 }
2565 
2566 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
2567 /// determine whether they are reference-related,
2568 /// reference-compatible, reference-compatible with added
2569 /// qualification, or incompatible, for use in C++ initialization by
2570 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
2571 /// type, and the first type (T1) is the pointee type of the reference
2572 /// type being initialized.
2573 Sema::ReferenceCompareResult
2574 Sema::CompareReferenceRelationship(QualType T1, QualType T2,
2575                                    bool& DerivedToBase) {
2576   assert(!T1->isReferenceType() &&
2577     "T1 must be the pointee type of the reference type");
2578   assert(!T2->isReferenceType() && "T2 cannot be a reference type");
2579 
2580   T1 = Context.getCanonicalType(T1);
2581   T2 = Context.getCanonicalType(T2);
2582   QualType UnqualT1 = T1.getUnqualifiedType();
2583   QualType UnqualT2 = T2.getUnqualifiedType();
2584 
2585   // C++ [dcl.init.ref]p4:
2586   //   Given types “cv1 T1” and “cv2 T2,” “cv1 T1” is
2587   //   reference-related to “cv2 T2” if T1 is the same type as T2, or
2588   //   T1 is a base class of T2.
2589   if (UnqualT1 == UnqualT2)
2590     DerivedToBase = false;
2591   else if (IsDerivedFrom(UnqualT2, UnqualT1))
2592     DerivedToBase = true;
2593   else
2594     return Ref_Incompatible;
2595 
2596   // At this point, we know that T1 and T2 are reference-related (at
2597   // least).
2598 
2599   // C++ [dcl.init.ref]p4:
2600   //   "cv1 T1” is reference-compatible with “cv2 T2” if T1 is
2601   //   reference-related to T2 and cv1 is the same cv-qualification
2602   //   as, or greater cv-qualification than, cv2. For purposes of
2603   //   overload resolution, cases for which cv1 is greater
2604   //   cv-qualification than cv2 are identified as
2605   //   reference-compatible with added qualification (see 13.3.3.2).
2606   if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
2607     return Ref_Compatible;
2608   else if (T1.isMoreQualifiedThan(T2))
2609     return Ref_Compatible_With_Added_Qualification;
2610   else
2611     return Ref_Related;
2612 }
2613 
2614 /// CheckReferenceInit - Check the initialization of a reference
2615 /// variable with the given initializer (C++ [dcl.init.ref]). Init is
2616 /// the initializer (either a simple initializer or an initializer
2617 /// list), and DeclType is the type of the declaration. When ICS is
2618 /// non-null, this routine will compute the implicit conversion
2619 /// sequence according to C++ [over.ics.ref] and will not produce any
2620 /// diagnostics; when ICS is null, it will emit diagnostics when any
2621 /// errors are found. Either way, a return value of true indicates
2622 /// that there was a failure, a return value of false indicates that
2623 /// the reference initialization succeeded.
2624 ///
2625 /// When @p SuppressUserConversions, user-defined conversions are
2626 /// suppressed.
2627 /// When @p AllowExplicit, we also permit explicit user-defined
2628 /// conversion functions.
2629 /// When @p ForceRValue, we unconditionally treat the initializer as an rvalue.
2630 bool
2631 Sema::CheckReferenceInit(Expr *&Init, QualType DeclType,
2632                          ImplicitConversionSequence *ICS,
2633                          bool SuppressUserConversions,
2634                          bool AllowExplicit, bool ForceRValue) {
2635   assert(DeclType->isReferenceType() && "Reference init needs a reference");
2636 
2637   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
2638   QualType T2 = Init->getType();
2639 
2640   // If the initializer is the address of an overloaded function, try
2641   // to resolve the overloaded function. If all goes well, T2 is the
2642   // type of the resulting function.
2643   if (Context.getCanonicalType(T2) == Context.OverloadTy) {
2644     FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(Init, DeclType,
2645                                                           ICS != 0);
2646     if (Fn) {
2647       // Since we're performing this reference-initialization for
2648       // real, update the initializer with the resulting function.
2649       if (!ICS) {
2650         if (DiagnoseUseOfDecl(Fn, Init->getSourceRange().getBegin()))
2651           return true;
2652 
2653         FixOverloadedFunctionReference(Init, Fn);
2654       }
2655 
2656       T2 = Fn->getType();
2657     }
2658   }
2659 
2660   // Compute some basic properties of the types and the initializer.
2661   bool isRValRef = DeclType->isRValueReferenceType();
2662   bool DerivedToBase = false;
2663   Expr::isLvalueResult InitLvalue = ForceRValue ? Expr::LV_InvalidExpression :
2664                                                   Init->isLvalue(Context);
2665   ReferenceCompareResult RefRelationship
2666     = CompareReferenceRelationship(T1, T2, DerivedToBase);
2667 
2668   // Most paths end in a failed conversion.
2669   if (ICS)
2670     ICS->ConversionKind = ImplicitConversionSequence::BadConversion;
2671 
2672   // C++ [dcl.init.ref]p5:
2673   //   A reference to type “cv1 T1” is initialized by an expression
2674   //   of type “cv2 T2” as follows:
2675 
2676   //     -- If the initializer expression
2677 
2678   // Rvalue references cannot bind to lvalues (N2812).
2679   // There is absolutely no situation where they can. In particular, note that
2680   // this is ill-formed, even if B has a user-defined conversion to A&&:
2681   //   B b;
2682   //   A&& r = b;
2683   if (isRValRef && InitLvalue == Expr::LV_Valid) {
2684     if (!ICS)
2685       Diag(Init->getSourceRange().getBegin(), diag::err_lvalue_to_rvalue_ref)
2686         << Init->getSourceRange();
2687     return true;
2688   }
2689 
2690   bool BindsDirectly = false;
2691   //       -- is an lvalue (but is not a bit-field), and “cv1 T1” is
2692   //          reference-compatible with “cv2 T2,” or
2693   //
2694   // Note that the bit-field check is skipped if we are just computing
2695   // the implicit conversion sequence (C++ [over.best.ics]p2).
2696   if (InitLvalue == Expr::LV_Valid && (ICS || !Init->getBitField()) &&
2697       RefRelationship >= Ref_Compatible_With_Added_Qualification) {
2698     BindsDirectly = true;
2699 
2700     if (ICS) {
2701       // C++ [over.ics.ref]p1:
2702       //   When a parameter of reference type binds directly (8.5.3)
2703       //   to an argument expression, the implicit conversion sequence
2704       //   is the identity conversion, unless the argument expression
2705       //   has a type that is a derived class of the parameter type,
2706       //   in which case the implicit conversion sequence is a
2707       //   derived-to-base Conversion (13.3.3.1).
2708       ICS->ConversionKind = ImplicitConversionSequence::StandardConversion;
2709       ICS->Standard.First = ICK_Identity;
2710       ICS->Standard.Second = DerivedToBase? ICK_Derived_To_Base : ICK_Identity;
2711       ICS->Standard.Third = ICK_Identity;
2712       ICS->Standard.FromTypePtr = T2.getAsOpaquePtr();
2713       ICS->Standard.ToTypePtr = T1.getAsOpaquePtr();
2714       ICS->Standard.ReferenceBinding = true;
2715       ICS->Standard.DirectBinding = true;
2716       ICS->Standard.RRefBinding = false;
2717       ICS->Standard.CopyConstructor = 0;
2718 
2719       // Nothing more to do: the inaccessibility/ambiguity check for
2720       // derived-to-base conversions is suppressed when we're
2721       // computing the implicit conversion sequence (C++
2722       // [over.best.ics]p2).
2723       return false;
2724     } else {
2725       // Perform the conversion.
2726       // FIXME: Binding to a subobject of the lvalue is going to require more
2727       // AST annotation than this.
2728       ImpCastExprToType(Init, T1, CastExpr::CK_Unknown, /*isLvalue=*/true);
2729     }
2730   }
2731 
2732   //       -- has a class type (i.e., T2 is a class type) and can be
2733   //          implicitly converted to an lvalue of type “cv3 T3,”
2734   //          where “cv1 T1” is reference-compatible with “cv3 T3”
2735   //          92) (this conversion is selected by enumerating the
2736   //          applicable conversion functions (13.3.1.6) and choosing
2737   //          the best one through overload resolution (13.3)),
2738   if (!isRValRef && !SuppressUserConversions && T2->isRecordType()) {
2739     // FIXME: Look for conversions in base classes!
2740     CXXRecordDecl *T2RecordDecl
2741       = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
2742 
2743     OverloadCandidateSet CandidateSet;
2744     OverloadedFunctionDecl *Conversions
2745       = T2RecordDecl->getConversionFunctions();
2746     for (OverloadedFunctionDecl::function_iterator Func
2747            = Conversions->function_begin();
2748          Func != Conversions->function_end(); ++Func) {
2749       CXXConversionDecl *Conv = cast<CXXConversionDecl>(*Func);
2750 
2751       // If the conversion function doesn't return a reference type,
2752       // it can't be considered for this conversion.
2753       if (Conv->getConversionType()->isLValueReferenceType() &&
2754           (AllowExplicit || !Conv->isExplicit()))
2755         AddConversionCandidate(Conv, Init, DeclType, CandidateSet);
2756     }
2757 
2758     OverloadCandidateSet::iterator Best;
2759     switch (BestViableFunction(CandidateSet, Init->getLocStart(), Best)) {
2760     case OR_Success:
2761       // This is a direct binding.
2762       BindsDirectly = true;
2763 
2764       if (ICS) {
2765         // C++ [over.ics.ref]p1:
2766         //
2767         //   [...] If the parameter binds directly to the result of
2768         //   applying a conversion function to the argument
2769         //   expression, the implicit conversion sequence is a
2770         //   user-defined conversion sequence (13.3.3.1.2), with the
2771         //   second standard conversion sequence either an identity
2772         //   conversion or, if the conversion function returns an
2773         //   entity of a type that is a derived class of the parameter
2774         //   type, a derived-to-base Conversion.
2775         ICS->ConversionKind = ImplicitConversionSequence::UserDefinedConversion;
2776         ICS->UserDefined.Before = Best->Conversions[0].Standard;
2777         ICS->UserDefined.After = Best->FinalConversion;
2778         ICS->UserDefined.ConversionFunction = Best->Function;
2779         assert(ICS->UserDefined.After.ReferenceBinding &&
2780                ICS->UserDefined.After.DirectBinding &&
2781                "Expected a direct reference binding!");
2782         return false;
2783       } else {
2784         // Perform the conversion.
2785         // FIXME: Binding to a subobject of the lvalue is going to require more
2786         // AST annotation than this.
2787         ImpCastExprToType(Init, T1, CastExpr::CK_Unknown, /*isLvalue=*/true);
2788       }
2789       break;
2790 
2791     case OR_Ambiguous:
2792       assert(false && "Ambiguous reference binding conversions not implemented.");
2793       return true;
2794 
2795     case OR_No_Viable_Function:
2796     case OR_Deleted:
2797       // There was no suitable conversion, or we found a deleted
2798       // conversion; continue with other checks.
2799       break;
2800     }
2801   }
2802 
2803   if (BindsDirectly) {
2804     // C++ [dcl.init.ref]p4:
2805     //   [...] In all cases where the reference-related or
2806     //   reference-compatible relationship of two types is used to
2807     //   establish the validity of a reference binding, and T1 is a
2808     //   base class of T2, a program that necessitates such a binding
2809     //   is ill-formed if T1 is an inaccessible (clause 11) or
2810     //   ambiguous (10.2) base class of T2.
2811     //
2812     // Note that we only check this condition when we're allowed to
2813     // complain about errors, because we should not be checking for
2814     // ambiguity (or inaccessibility) unless the reference binding
2815     // actually happens.
2816     if (DerivedToBase)
2817       return CheckDerivedToBaseConversion(T2, T1,
2818                                           Init->getSourceRange().getBegin(),
2819                                           Init->getSourceRange());
2820     else
2821       return false;
2822   }
2823 
2824   //     -- Otherwise, the reference shall be to a non-volatile const
2825   //        type (i.e., cv1 shall be const), or the reference shall be an
2826   //        rvalue reference and the initializer expression shall be an rvalue.
2827   if (!isRValRef && T1.getCVRQualifiers() != QualType::Const) {
2828     if (!ICS)
2829       Diag(Init->getSourceRange().getBegin(),
2830            diag::err_not_reference_to_const_init)
2831         << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
2832         << T2 << Init->getSourceRange();
2833     return true;
2834   }
2835 
2836   //       -- If the initializer expression is an rvalue, with T2 a
2837   //          class type, and “cv1 T1” is reference-compatible with
2838   //          “cv2 T2,” the reference is bound in one of the
2839   //          following ways (the choice is implementation-defined):
2840   //
2841   //          -- The reference is bound to the object represented by
2842   //             the rvalue (see 3.10) or to a sub-object within that
2843   //             object.
2844   //
2845   //          -- A temporary of type “cv1 T2” [sic] is created, and
2846   //             a constructor is called to copy the entire rvalue
2847   //             object into the temporary. The reference is bound to
2848   //             the temporary or to a sub-object within the
2849   //             temporary.
2850   //
2851   //          The constructor that would be used to make the copy
2852   //          shall be callable whether or not the copy is actually
2853   //          done.
2854   //
2855   // Note that C++0x [dcl.init.ref]p5 takes away this implementation
2856   // freedom, so we will always take the first option and never build
2857   // a temporary in this case. FIXME: We will, however, have to check
2858   // for the presence of a copy constructor in C++98/03 mode.
2859   if (InitLvalue != Expr::LV_Valid && T2->isRecordType() &&
2860       RefRelationship >= Ref_Compatible_With_Added_Qualification) {
2861     if (ICS) {
2862       ICS->ConversionKind = ImplicitConversionSequence::StandardConversion;
2863       ICS->Standard.First = ICK_Identity;
2864       ICS->Standard.Second = DerivedToBase? ICK_Derived_To_Base : ICK_Identity;
2865       ICS->Standard.Third = ICK_Identity;
2866       ICS->Standard.FromTypePtr = T2.getAsOpaquePtr();
2867       ICS->Standard.ToTypePtr = T1.getAsOpaquePtr();
2868       ICS->Standard.ReferenceBinding = true;
2869       ICS->Standard.DirectBinding = false;
2870       ICS->Standard.RRefBinding = isRValRef;
2871       ICS->Standard.CopyConstructor = 0;
2872     } else {
2873       // FIXME: Binding to a subobject of the rvalue is going to require more
2874       // AST annotation than this.
2875       ImpCastExprToType(Init, T1, CastExpr::CK_Unknown, /*isLvalue=*/false);
2876     }
2877     return false;
2878   }
2879 
2880   //       -- Otherwise, a temporary of type “cv1 T1” is created and
2881   //          initialized from the initializer expression using the
2882   //          rules for a non-reference copy initialization (8.5). The
2883   //          reference is then bound to the temporary. If T1 is
2884   //          reference-related to T2, cv1 must be the same
2885   //          cv-qualification as, or greater cv-qualification than,
2886   //          cv2; otherwise, the program is ill-formed.
2887   if (RefRelationship == Ref_Related) {
2888     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
2889     // we would be reference-compatible or reference-compatible with
2890     // added qualification. But that wasn't the case, so the reference
2891     // initialization fails.
2892     if (!ICS)
2893       Diag(Init->getSourceRange().getBegin(),
2894            diag::err_reference_init_drops_quals)
2895         << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
2896         << T2 << Init->getSourceRange();
2897     return true;
2898   }
2899 
2900   // If at least one of the types is a class type, the types are not
2901   // related, and we aren't allowed any user conversions, the
2902   // reference binding fails. This case is important for breaking
2903   // recursion, since TryImplicitConversion below will attempt to
2904   // create a temporary through the use of a copy constructor.
2905   if (SuppressUserConversions && RefRelationship == Ref_Incompatible &&
2906       (T1->isRecordType() || T2->isRecordType())) {
2907     if (!ICS)
2908       Diag(Init->getSourceRange().getBegin(),
2909            diag::err_typecheck_convert_incompatible)
2910         << DeclType << Init->getType() << "initializing" << Init->getSourceRange();
2911     return true;
2912   }
2913 
2914   // Actually try to convert the initializer to T1.
2915   if (ICS) {
2916     // C++ [over.ics.ref]p2:
2917     //
2918     //   When a parameter of reference type is not bound directly to
2919     //   an argument expression, the conversion sequence is the one
2920     //   required to convert the argument expression to the
2921     //   underlying type of the reference according to
2922     //   13.3.3.1. Conceptually, this conversion sequence corresponds
2923     //   to copy-initializing a temporary of the underlying type with
2924     //   the argument expression. Any difference in top-level
2925     //   cv-qualification is subsumed by the initialization itself
2926     //   and does not constitute a conversion.
2927     *ICS = TryImplicitConversion(Init, T1, SuppressUserConversions);
2928     // Of course, that's still a reference binding.
2929     if (ICS->ConversionKind == ImplicitConversionSequence::StandardConversion) {
2930       ICS->Standard.ReferenceBinding = true;
2931       ICS->Standard.RRefBinding = isRValRef;
2932     } else if(ICS->ConversionKind ==
2933               ImplicitConversionSequence::UserDefinedConversion) {
2934       ICS->UserDefined.After.ReferenceBinding = true;
2935       ICS->UserDefined.After.RRefBinding = isRValRef;
2936     }
2937     return ICS->ConversionKind == ImplicitConversionSequence::BadConversion;
2938   } else {
2939     return PerformImplicitConversion(Init, T1, "initializing");
2940   }
2941 }
2942 
2943 /// CheckOverloadedOperatorDeclaration - Check whether the declaration
2944 /// of this overloaded operator is well-formed. If so, returns false;
2945 /// otherwise, emits appropriate diagnostics and returns true.
2946 bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
2947   assert(FnDecl && FnDecl->isOverloadedOperator() &&
2948          "Expected an overloaded operator declaration");
2949 
2950   OverloadedOperatorKind Op = FnDecl->getOverloadedOperator();
2951 
2952   // C++ [over.oper]p5:
2953   //   The allocation and deallocation functions, operator new,
2954   //   operator new[], operator delete and operator delete[], are
2955   //   described completely in 3.7.3. The attributes and restrictions
2956   //   found in the rest of this subclause do not apply to them unless
2957   //   explicitly stated in 3.7.3.
2958   // FIXME: Write a separate routine for checking this. For now, just allow it.
2959   if (Op == OO_New || Op == OO_Array_New ||
2960       Op == OO_Delete || Op == OO_Array_Delete)
2961     return false;
2962 
2963   // C++ [over.oper]p6:
2964   //   An operator function shall either be a non-static member
2965   //   function or be a non-member function and have at least one
2966   //   parameter whose type is a class, a reference to a class, an
2967   //   enumeration, or a reference to an enumeration.
2968   if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {
2969     if (MethodDecl->isStatic())
2970       return Diag(FnDecl->getLocation(),
2971                   diag::err_operator_overload_static) << FnDecl->getDeclName();
2972   } else {
2973     bool ClassOrEnumParam = false;
2974     for (FunctionDecl::param_iterator Param = FnDecl->param_begin(),
2975                                    ParamEnd = FnDecl->param_end();
2976          Param != ParamEnd; ++Param) {
2977       QualType ParamType = (*Param)->getType().getNonReferenceType();
2978       if (ParamType->isDependentType() || ParamType->isRecordType() ||
2979           ParamType->isEnumeralType()) {
2980         ClassOrEnumParam = true;
2981         break;
2982       }
2983     }
2984 
2985     if (!ClassOrEnumParam)
2986       return Diag(FnDecl->getLocation(),
2987                   diag::err_operator_overload_needs_class_or_enum)
2988         << FnDecl->getDeclName();
2989   }
2990 
2991   // C++ [over.oper]p8:
2992   //   An operator function cannot have default arguments (8.3.6),
2993   //   except where explicitly stated below.
2994   //
2995   // Only the function-call operator allows default arguments
2996   // (C++ [over.call]p1).
2997   if (Op != OO_Call) {
2998     for (FunctionDecl::param_iterator Param = FnDecl->param_begin();
2999          Param != FnDecl->param_end(); ++Param) {
3000       if ((*Param)->hasUnparsedDefaultArg())
3001         return Diag((*Param)->getLocation(),
3002                     diag::err_operator_overload_default_arg)
3003           << FnDecl->getDeclName();
3004       else if (Expr *DefArg = (*Param)->getDefaultArg())
3005         return Diag((*Param)->getLocation(),
3006                     diag::err_operator_overload_default_arg)
3007           << FnDecl->getDeclName() << DefArg->getSourceRange();
3008     }
3009   }
3010 
3011   static const bool OperatorUses[NUM_OVERLOADED_OPERATORS][3] = {
3012     { false, false, false }
3013 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
3014     , { Unary, Binary, MemberOnly }
3015 #include "clang/Basic/OperatorKinds.def"
3016   };
3017 
3018   bool CanBeUnaryOperator = OperatorUses[Op][0];
3019   bool CanBeBinaryOperator = OperatorUses[Op][1];
3020   bool MustBeMemberOperator = OperatorUses[Op][2];
3021 
3022   // C++ [over.oper]p8:
3023   //   [...] Operator functions cannot have more or fewer parameters
3024   //   than the number required for the corresponding operator, as
3025   //   described in the rest of this subclause.
3026   unsigned NumParams = FnDecl->getNumParams()
3027                      + (isa<CXXMethodDecl>(FnDecl)? 1 : 0);
3028   if (Op != OO_Call &&
3029       ((NumParams == 1 && !CanBeUnaryOperator) ||
3030        (NumParams == 2 && !CanBeBinaryOperator) ||
3031        (NumParams < 1) || (NumParams > 2))) {
3032     // We have the wrong number of parameters.
3033     unsigned ErrorKind;
3034     if (CanBeUnaryOperator && CanBeBinaryOperator) {
3035       ErrorKind = 2;  // 2 -> unary or binary.
3036     } else if (CanBeUnaryOperator) {
3037       ErrorKind = 0;  // 0 -> unary
3038     } else {
3039       assert(CanBeBinaryOperator &&
3040              "All non-call overloaded operators are unary or binary!");
3041       ErrorKind = 1;  // 1 -> binary
3042     }
3043 
3044     return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be)
3045       << FnDecl->getDeclName() << NumParams << ErrorKind;
3046   }
3047 
3048   // Overloaded operators other than operator() cannot be variadic.
3049   if (Op != OO_Call &&
3050       FnDecl->getType()->getAsFunctionProtoType()->isVariadic()) {
3051     return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic)
3052       << FnDecl->getDeclName();
3053   }
3054 
3055   // Some operators must be non-static member functions.
3056   if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {
3057     return Diag(FnDecl->getLocation(),
3058                 diag::err_operator_overload_must_be_member)
3059       << FnDecl->getDeclName();
3060   }
3061 
3062   // C++ [over.inc]p1:
3063   //   The user-defined function called operator++ implements the
3064   //   prefix and postfix ++ operator. If this function is a member
3065   //   function with no parameters, or a non-member function with one
3066   //   parameter of class or enumeration type, it defines the prefix
3067   //   increment operator ++ for objects of that type. If the function
3068   //   is a member function with one parameter (which shall be of type
3069   //   int) or a non-member function with two parameters (the second
3070   //   of which shall be of type int), it defines the postfix
3071   //   increment operator ++ for objects of that type.
3072   if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {
3073     ParmVarDecl *LastParam = FnDecl->getParamDecl(FnDecl->getNumParams() - 1);
3074     bool ParamIsInt = false;
3075     if (const BuiltinType *BT = LastParam->getType()->getAsBuiltinType())
3076       ParamIsInt = BT->getKind() == BuiltinType::Int;
3077 
3078     if (!ParamIsInt)
3079       return Diag(LastParam->getLocation(),
3080                   diag::err_operator_overload_post_incdec_must_be_int)
3081         << LastParam->getType() << (Op == OO_MinusMinus);
3082   }
3083 
3084   // Notify the class if it got an assignment operator.
3085   if (Op == OO_Equal) {
3086     // Would have returned earlier otherwise.
3087     assert(isa<CXXMethodDecl>(FnDecl) &&
3088       "Overloaded = not member, but not filtered.");
3089     CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
3090     Method->getParent()->addedAssignmentOperator(Context, Method);
3091   }
3092 
3093   return false;
3094 }
3095 
3096 /// ActOnStartLinkageSpecification - Parsed the beginning of a C++
3097 /// linkage specification, including the language and (if present)
3098 /// the '{'. ExternLoc is the location of the 'extern', LangLoc is
3099 /// the location of the language string literal, which is provided
3100 /// by Lang/StrSize. LBraceLoc, if valid, provides the location of
3101 /// the '{' brace. Otherwise, this linkage specification does not
3102 /// have any braces.
3103 Sema::DeclPtrTy Sema::ActOnStartLinkageSpecification(Scope *S,
3104                                                      SourceLocation ExternLoc,
3105                                                      SourceLocation LangLoc,
3106                                                      const char *Lang,
3107                                                      unsigned StrSize,
3108                                                      SourceLocation LBraceLoc) {
3109   LinkageSpecDecl::LanguageIDs Language;
3110   if (strncmp(Lang, "\"C\"", StrSize) == 0)
3111     Language = LinkageSpecDecl::lang_c;
3112   else if (strncmp(Lang, "\"C++\"", StrSize) == 0)
3113     Language = LinkageSpecDecl::lang_cxx;
3114   else {
3115     Diag(LangLoc, diag::err_bad_language);
3116     return DeclPtrTy();
3117   }
3118 
3119   // FIXME: Add all the various semantics of linkage specifications
3120 
3121   LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext,
3122                                                LangLoc, Language,
3123                                                LBraceLoc.isValid());
3124   CurContext->addDecl(D);
3125   PushDeclContext(S, D);
3126   return DeclPtrTy::make(D);
3127 }
3128 
3129 /// ActOnFinishLinkageSpecification - Completely the definition of
3130 /// the C++ linkage specification LinkageSpec. If RBraceLoc is
3131 /// valid, it's the position of the closing '}' brace in a linkage
3132 /// specification that uses braces.
3133 Sema::DeclPtrTy Sema::ActOnFinishLinkageSpecification(Scope *S,
3134                                                       DeclPtrTy LinkageSpec,
3135                                                       SourceLocation RBraceLoc) {
3136   if (LinkageSpec)
3137     PopDeclContext();
3138   return LinkageSpec;
3139 }
3140 
3141 /// \brief Perform semantic analysis for the variable declaration that
3142 /// occurs within a C++ catch clause, returning the newly-created
3143 /// variable.
3144 VarDecl *Sema::BuildExceptionDeclaration(Scope *S, QualType ExDeclType,
3145                                          IdentifierInfo *Name,
3146                                          SourceLocation Loc,
3147                                          SourceRange Range) {
3148   bool Invalid = false;
3149 
3150   // Arrays and functions decay.
3151   if (ExDeclType->isArrayType())
3152     ExDeclType = Context.getArrayDecayedType(ExDeclType);
3153   else if (ExDeclType->isFunctionType())
3154     ExDeclType = Context.getPointerType(ExDeclType);
3155 
3156   // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.
3157   // The exception-declaration shall not denote a pointer or reference to an
3158   // incomplete type, other than [cv] void*.
3159   // N2844 forbids rvalue references.
3160   if(!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {
3161     Diag(Loc, diag::err_catch_rvalue_ref) << Range;
3162     Invalid = true;
3163   }
3164 
3165   QualType BaseType = ExDeclType;
3166   int Mode = 0; // 0 for direct type, 1 for pointer, 2 for reference
3167   unsigned DK = diag::err_catch_incomplete;
3168   if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
3169     BaseType = Ptr->getPointeeType();
3170     Mode = 1;
3171     DK = diag::err_catch_incomplete_ptr;
3172   } else if(const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {
3173     // For the purpose of error recovery, we treat rvalue refs like lvalue refs.
3174     BaseType = Ref->getPointeeType();
3175     Mode = 2;
3176     DK = diag::err_catch_incomplete_ref;
3177   }
3178   if (!Invalid && (Mode == 0 || !BaseType->isVoidType()) &&
3179       !BaseType->isDependentType() && RequireCompleteType(Loc, BaseType, DK))
3180     Invalid = true;
3181 
3182   if (!Invalid && !ExDeclType->isDependentType() &&
3183       RequireNonAbstractType(Loc, ExDeclType,
3184                              diag::err_abstract_type_in_decl,
3185                              AbstractVariableType))
3186     Invalid = true;
3187 
3188   // FIXME: Need to test for ability to copy-construct and destroy the
3189   // exception variable.
3190 
3191   // FIXME: Need to check for abstract classes.
3192 
3193   VarDecl *ExDecl = VarDecl::Create(Context, CurContext, Loc,
3194                                     Name, ExDeclType, VarDecl::None,
3195                                     Range.getBegin());
3196 
3197   if (Invalid)
3198     ExDecl->setInvalidDecl();
3199 
3200   return ExDecl;
3201 }
3202 
3203 /// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch
3204 /// handler.
3205 Sema::DeclPtrTy Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {
3206   QualType ExDeclType = GetTypeForDeclarator(D, S);
3207 
3208   bool Invalid = D.isInvalidType();
3209   IdentifierInfo *II = D.getIdentifier();
3210   if (NamedDecl *PrevDecl = LookupName(S, II, LookupOrdinaryName)) {
3211     // The scope should be freshly made just for us. There is just no way
3212     // it contains any previous declaration.
3213     assert(!S->isDeclScope(DeclPtrTy::make(PrevDecl)));
3214     if (PrevDecl->isTemplateParameter()) {
3215       // Maybe we will complain about the shadowed template parameter.
3216       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
3217     }
3218   }
3219 
3220   if (D.getCXXScopeSpec().isSet() && !Invalid) {
3221     Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator)
3222       << D.getCXXScopeSpec().getRange();
3223     Invalid = true;
3224   }
3225 
3226   VarDecl *ExDecl = BuildExceptionDeclaration(S, ExDeclType,
3227                                               D.getIdentifier(),
3228                                               D.getIdentifierLoc(),
3229                                             D.getDeclSpec().getSourceRange());
3230 
3231   if (Invalid)
3232     ExDecl->setInvalidDecl();
3233 
3234   // Add the exception declaration into this scope.
3235   if (II)
3236     PushOnScopeChains(ExDecl, S);
3237   else
3238     CurContext->addDecl(ExDecl);
3239 
3240   ProcessDeclAttributes(S, ExDecl, D);
3241   return DeclPtrTy::make(ExDecl);
3242 }
3243 
3244 Sema::DeclPtrTy Sema::ActOnStaticAssertDeclaration(SourceLocation AssertLoc,
3245                                                    ExprArg assertexpr,
3246                                                    ExprArg assertmessageexpr) {
3247   Expr *AssertExpr = (Expr *)assertexpr.get();
3248   StringLiteral *AssertMessage =
3249     cast<StringLiteral>((Expr *)assertmessageexpr.get());
3250 
3251   if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) {
3252     llvm::APSInt Value(32);
3253     if (!AssertExpr->isIntegerConstantExpr(Value, Context)) {
3254       Diag(AssertLoc, diag::err_static_assert_expression_is_not_constant) <<
3255         AssertExpr->getSourceRange();
3256       return DeclPtrTy();
3257     }
3258 
3259     if (Value == 0) {
3260       std::string str(AssertMessage->getStrData(),
3261                       AssertMessage->getByteLength());
3262       Diag(AssertLoc, diag::err_static_assert_failed)
3263         << str << AssertExpr->getSourceRange();
3264     }
3265   }
3266 
3267   assertexpr.release();
3268   assertmessageexpr.release();
3269   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, AssertLoc,
3270                                         AssertExpr, AssertMessage);
3271 
3272   CurContext->addDecl(Decl);
3273   return DeclPtrTy::make(Decl);
3274 }
3275 
3276 bool Sema::ActOnFriendDecl(Scope *S, SourceLocation FriendLoc, DeclPtrTy Dcl) {
3277   if (!(S->getFlags() & Scope::ClassScope)) {
3278     Diag(FriendLoc, diag::err_friend_decl_outside_class);
3279     return true;
3280   }
3281 
3282   return false;
3283 }
3284 
3285 void Sema::SetDeclDeleted(DeclPtrTy dcl, SourceLocation DelLoc) {
3286   Decl *Dcl = dcl.getAs<Decl>();
3287   FunctionDecl *Fn = dyn_cast<FunctionDecl>(Dcl);
3288   if (!Fn) {
3289     Diag(DelLoc, diag::err_deleted_non_function);
3290     return;
3291   }
3292   if (const FunctionDecl *Prev = Fn->getPreviousDeclaration()) {
3293     Diag(DelLoc, diag::err_deleted_decl_not_first);
3294     Diag(Prev->getLocation(), diag::note_previous_declaration);
3295     // If the declaration wasn't the first, we delete the function anyway for
3296     // recovery.
3297   }
3298   Fn->setDeleted();
3299 }
3300 
3301 static void SearchForReturnInStmt(Sema &Self, Stmt *S) {
3302   for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); CI != E;
3303        ++CI) {
3304     Stmt *SubStmt = *CI;
3305     if (!SubStmt)
3306       continue;
3307     if (isa<ReturnStmt>(SubStmt))
3308       Self.Diag(SubStmt->getSourceRange().getBegin(),
3309            diag::err_return_in_constructor_handler);
3310     if (!isa<Expr>(SubStmt))
3311       SearchForReturnInStmt(Self, SubStmt);
3312   }
3313 }
3314 
3315 void Sema::DiagnoseReturnInConstructorExceptionHandler(CXXTryStmt *TryBlock) {
3316   for (unsigned I = 0, E = TryBlock->getNumHandlers(); I != E; ++I) {
3317     CXXCatchStmt *Handler = TryBlock->getHandler(I);
3318     SearchForReturnInStmt(*this, Handler);
3319   }
3320 }
3321 
3322 bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
3323                                              const CXXMethodDecl *Old) {
3324   QualType NewTy = New->getType()->getAsFunctionType()->getResultType();
3325   QualType OldTy = Old->getType()->getAsFunctionType()->getResultType();
3326 
3327   QualType CNewTy = Context.getCanonicalType(NewTy);
3328   QualType COldTy = Context.getCanonicalType(OldTy);
3329 
3330   if (CNewTy == COldTy &&
3331       CNewTy.getCVRQualifiers() == COldTy.getCVRQualifiers())
3332     return false;
3333 
3334   // Check if the return types are covariant
3335   QualType NewClassTy, OldClassTy;
3336 
3337   /// Both types must be pointers or references to classes.
3338   if (PointerType *NewPT = dyn_cast<PointerType>(NewTy)) {
3339     if (PointerType *OldPT = dyn_cast<PointerType>(OldTy)) {
3340       NewClassTy = NewPT->getPointeeType();
3341       OldClassTy = OldPT->getPointeeType();
3342     }
3343   } else if (ReferenceType *NewRT = dyn_cast<ReferenceType>(NewTy)) {
3344     if (ReferenceType *OldRT = dyn_cast<ReferenceType>(OldTy)) {
3345       NewClassTy = NewRT->getPointeeType();
3346       OldClassTy = OldRT->getPointeeType();
3347     }
3348   }
3349 
3350   // The return types aren't either both pointers or references to a class type.
3351   if (NewClassTy.isNull()) {
3352     Diag(New->getLocation(),
3353          diag::err_different_return_type_for_overriding_virtual_function)
3354       << New->getDeclName() << NewTy << OldTy;
3355     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3356 
3357     return true;
3358   }
3359 
3360   if (NewClassTy.getUnqualifiedType() != OldClassTy.getUnqualifiedType()) {
3361     // Check if the new class derives from the old class.
3362     if (!IsDerivedFrom(NewClassTy, OldClassTy)) {
3363       Diag(New->getLocation(),
3364            diag::err_covariant_return_not_derived)
3365       << New->getDeclName() << NewTy << OldTy;
3366       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3367       return true;
3368     }
3369 
3370     // Check if we the conversion from derived to base is valid.
3371     if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy,
3372                       diag::err_covariant_return_inaccessible_base,
3373                       diag::err_covariant_return_ambiguous_derived_to_base_conv,
3374                       // FIXME: Should this point to the return type?
3375                       New->getLocation(), SourceRange(), New->getDeclName())) {
3376       Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3377       return true;
3378     }
3379   }
3380 
3381   // The qualifiers of the return types must be the same.
3382   if (CNewTy.getCVRQualifiers() != COldTy.getCVRQualifiers()) {
3383     Diag(New->getLocation(),
3384          diag::err_covariant_return_type_different_qualifications)
3385     << New->getDeclName() << NewTy << OldTy;
3386     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3387     return true;
3388   };
3389 
3390 
3391   // The new class type must have the same or less qualifiers as the old type.
3392   if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {
3393     Diag(New->getLocation(),
3394          diag::err_covariant_return_type_class_type_more_qualified)
3395     << New->getDeclName() << NewTy << OldTy;
3396     Diag(Old->getLocation(), diag::note_overridden_virtual_function);
3397     return true;
3398   };
3399 
3400   return false;
3401 }
3402 
3403 bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
3404                                                 const CXXMethodDecl *Old)
3405 {
3406   return CheckExceptionSpecSubset(diag::err_override_exception_spec,
3407                                   diag::note_overridden_virtual_function,
3408                                   Old->getType()->getAsFunctionProtoType(),
3409                                   Old->getLocation(),
3410                                   New->getType()->getAsFunctionProtoType(),
3411                                   New->getLocation());
3412 }
3413 
3414 /// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
3415 /// initializer for the declaration 'Dcl'.
3416 /// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
3417 /// static data member of class X, names should be looked up in the scope of
3418 /// class X.
3419 void Sema::ActOnCXXEnterDeclInitializer(Scope *S, DeclPtrTy Dcl) {
3420   Decl *D = Dcl.getAs<Decl>();
3421   // If there is no declaration, there was an error parsing it.
3422   if (D == 0)
3423     return;
3424 
3425   // Check whether it is a declaration with a nested name specifier like
3426   // int foo::bar;
3427   if (!D->isOutOfLine())
3428     return;
3429 
3430   // C++ [basic.lookup.unqual]p13
3431   //
3432   // A name used in the definition of a static data member of class X
3433   // (after the qualified-id of the static member) is looked up as if the name
3434   // was used in a member function of X.
3435 
3436   // Change current context into the context of the initializing declaration.
3437   EnterDeclaratorContext(S, D->getDeclContext());
3438 }
3439 
3440 /// ActOnCXXExitDeclInitializer - Invoked after we are finished parsing an
3441 /// initializer for the declaration 'Dcl'.
3442 void Sema::ActOnCXXExitDeclInitializer(Scope *S, DeclPtrTy Dcl) {
3443   Decl *D = Dcl.getAs<Decl>();
3444   // If there is no declaration, there was an error parsing it.
3445   if (D == 0)
3446     return;
3447 
3448   // Check whether it is a declaration with a nested name specifier like
3449   // int foo::bar;
3450   if (!D->isOutOfLine())
3451     return;
3452 
3453   assert(S->getEntity() == D->getDeclContext() && "Context imbalance!");
3454   ExitDeclaratorContext(S);
3455 }
3456