1 //===--- DeclCXX.cpp - C++ Declaration AST Node Implementation ------------===//
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 the C++ related Decl classes.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/AST/DeclCXX.h"
15 #include "clang/AST/DeclTemplate.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/CXXInheritance.h"
19 #include "clang/AST/Expr.h"
20 #include "clang/AST/ExprCXX.h"
21 #include "clang/AST/TypeLoc.h"
22 #include "clang/Basic/IdentifierTable.h"
23 #include "llvm/ADT/STLExtras.h"
24 #include "llvm/ADT/SmallPtrSet.h"
25 using namespace clang;
26 
27 //===----------------------------------------------------------------------===//
28 // Decl Allocation/Deallocation Method Implementations
29 //===----------------------------------------------------------------------===//
30 
31 void AccessSpecDecl::anchor() { }
32 
33 AccessSpecDecl *AccessSpecDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
34   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(AccessSpecDecl));
35   return new (Mem) AccessSpecDecl(EmptyShell());
36 }
37 
38 CXXRecordDecl::DefinitionData::DefinitionData(CXXRecordDecl *D)
39   : UserDeclaredConstructor(false), UserDeclaredCopyConstructor(false),
40     UserDeclaredMoveConstructor(false), UserDeclaredCopyAssignment(false),
41     UserDeclaredMoveAssignment(false), UserDeclaredDestructor(false),
42     Aggregate(true), PlainOldData(true), Empty(true), Polymorphic(false),
43     Abstract(false), IsStandardLayout(true), HasNoNonEmptyBases(true),
44     HasPrivateFields(false), HasProtectedFields(false), HasPublicFields(false),
45     HasMutableFields(false), HasOnlyCMembers(true),
46     HasTrivialDefaultConstructor(true),
47     HasConstexprNonCopyMoveConstructor(false),
48     DefaultedDefaultConstructorIsConstexpr(true),
49     DefaultedCopyConstructorIsConstexpr(true),
50     DefaultedMoveConstructorIsConstexpr(true),
51     HasConstexprDefaultConstructor(false), HasConstexprCopyConstructor(false),
52     HasConstexprMoveConstructor(false), HasTrivialCopyConstructor(true),
53     HasTrivialMoveConstructor(true), HasTrivialCopyAssignment(true),
54     HasTrivialMoveAssignment(true), HasTrivialDestructor(true),
55     HasNonLiteralTypeFieldsOrBases(false), ComputedVisibleConversions(false),
56     UserProvidedDefaultConstructor(false), DeclaredDefaultConstructor(false),
57     DeclaredCopyConstructor(false), DeclaredMoveConstructor(false),
58     DeclaredCopyAssignment(false), DeclaredMoveAssignment(false),
59     DeclaredDestructor(false), FailedImplicitMoveConstructor(false),
60     FailedImplicitMoveAssignment(false), IsLambda(false), NumBases(0),
61     NumVBases(0), Bases(), VBases(), Definition(D), FirstFriend(0) {
62 }
63 
64 CXXRecordDecl::CXXRecordDecl(Kind K, TagKind TK, DeclContext *DC,
65                              SourceLocation StartLoc, SourceLocation IdLoc,
66                              IdentifierInfo *Id, CXXRecordDecl *PrevDecl)
67   : RecordDecl(K, TK, DC, StartLoc, IdLoc, Id, PrevDecl),
68     DefinitionData(PrevDecl ? PrevDecl->DefinitionData : 0),
69     TemplateOrInstantiation() { }
70 
71 CXXRecordDecl *CXXRecordDecl::Create(const ASTContext &C, TagKind TK,
72                                      DeclContext *DC, SourceLocation StartLoc,
73                                      SourceLocation IdLoc, IdentifierInfo *Id,
74                                      CXXRecordDecl* PrevDecl,
75                                      bool DelayTypeCreation) {
76   CXXRecordDecl* R = new (C) CXXRecordDecl(CXXRecord, TK, DC, StartLoc, IdLoc,
77                                            Id, PrevDecl);
78 
79   // FIXME: DelayTypeCreation seems like such a hack
80   if (!DelayTypeCreation)
81     C.getTypeDeclType(R, PrevDecl);
82   return R;
83 }
84 
85 CXXRecordDecl *CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC,
86                                            SourceLocation Loc, bool Dependent) {
87   CXXRecordDecl* R = new (C) CXXRecordDecl(CXXRecord, TTK_Class, DC, Loc, Loc,
88                                            0, 0);
89   R->IsBeingDefined = true;
90   R->DefinitionData = new (C) struct LambdaDefinitionData(R, Dependent);
91   C.getTypeDeclType(R, /*PrevDecl=*/0);
92   return R;
93 }
94 
95 CXXRecordDecl *
96 CXXRecordDecl::CreateDeserialized(const ASTContext &C, unsigned ID) {
97   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(CXXRecordDecl));
98   return new (Mem) CXXRecordDecl(CXXRecord, TTK_Struct, 0, SourceLocation(),
99                                  SourceLocation(), 0, 0);
100 }
101 
102 void
103 CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,
104                         unsigned NumBases) {
105   ASTContext &C = getASTContext();
106 
107   if (!data().Bases.isOffset() && data().NumBases > 0)
108     C.Deallocate(data().getBases());
109 
110   if (NumBases) {
111     // C++ [dcl.init.aggr]p1:
112     //   An aggregate is [...] a class with [...] no base classes [...].
113     data().Aggregate = false;
114 
115     // C++ [class]p4:
116     //   A POD-struct is an aggregate class...
117     data().PlainOldData = false;
118   }
119 
120   // The set of seen virtual base types.
121   llvm::SmallPtrSet<CanQualType, 8> SeenVBaseTypes;
122 
123   // The virtual bases of this class.
124   SmallVector<const CXXBaseSpecifier *, 8> VBases;
125 
126   data().Bases = new(C) CXXBaseSpecifier [NumBases];
127   data().NumBases = NumBases;
128   for (unsigned i = 0; i < NumBases; ++i) {
129     data().getBases()[i] = *Bases[i];
130     // Keep track of inherited vbases for this base class.
131     const CXXBaseSpecifier *Base = Bases[i];
132     QualType BaseType = Base->getType();
133     // Skip dependent types; we can't do any checking on them now.
134     if (BaseType->isDependentType())
135       continue;
136     CXXRecordDecl *BaseClassDecl
137       = cast<CXXRecordDecl>(BaseType->getAs<RecordType>()->getDecl());
138 
139     // A class with a non-empty base class is not empty.
140     // FIXME: Standard ref?
141     if (!BaseClassDecl->isEmpty()) {
142       if (!data().Empty) {
143         // C++0x [class]p7:
144         //   A standard-layout class is a class that:
145         //    [...]
146         //    -- either has no non-static data members in the most derived
147         //       class and at most one base class with non-static data members,
148         //       or has no base classes with non-static data members, and
149         // If this is the second non-empty base, then neither of these two
150         // clauses can be true.
151         data().IsStandardLayout = false;
152       }
153 
154       data().Empty = false;
155       data().HasNoNonEmptyBases = false;
156     }
157 
158     // C++ [class.virtual]p1:
159     //   A class that declares or inherits a virtual function is called a
160     //   polymorphic class.
161     if (BaseClassDecl->isPolymorphic())
162       data().Polymorphic = true;
163 
164     // C++0x [class]p7:
165     //   A standard-layout class is a class that: [...]
166     //    -- has no non-standard-layout base classes
167     if (!BaseClassDecl->isStandardLayout())
168       data().IsStandardLayout = false;
169 
170     // Record if this base is the first non-literal field or base.
171     if (!hasNonLiteralTypeFieldsOrBases() && !BaseType->isLiteralType())
172       data().HasNonLiteralTypeFieldsOrBases = true;
173 
174     // Now go through all virtual bases of this base and add them.
175     for (CXXRecordDecl::base_class_iterator VBase =
176           BaseClassDecl->vbases_begin(),
177          E = BaseClassDecl->vbases_end(); VBase != E; ++VBase) {
178       // Add this base if it's not already in the list.
179       if (SeenVBaseTypes.insert(C.getCanonicalType(VBase->getType())))
180         VBases.push_back(VBase);
181     }
182 
183     if (Base->isVirtual()) {
184       // Add this base if it's not already in the list.
185       if (SeenVBaseTypes.insert(C.getCanonicalType(BaseType)))
186           VBases.push_back(Base);
187 
188       // C++0x [meta.unary.prop] is_empty:
189       //    T is a class type, but not a union type, with ... no virtual base
190       //    classes
191       data().Empty = false;
192 
193       // C++ [class.ctor]p5:
194       //   A default constructor is trivial [...] if:
195       //    -- its class has [...] no virtual bases
196       data().HasTrivialDefaultConstructor = false;
197 
198       // C++0x [class.copy]p13:
199       //   A copy/move constructor for class X is trivial if it is neither
200       //   user-provided nor deleted and if
201       //    -- class X has no virtual functions and no virtual base classes, and
202       data().HasTrivialCopyConstructor = false;
203       data().HasTrivialMoveConstructor = false;
204 
205       // C++0x [class.copy]p27:
206       //   A copy/move assignment operator for class X is trivial if it is
207       //   neither user-provided nor deleted and if
208       //    -- class X has no virtual functions and no virtual base classes, and
209       data().HasTrivialCopyAssignment = false;
210       data().HasTrivialMoveAssignment = false;
211 
212       // C++0x [class]p7:
213       //   A standard-layout class is a class that: [...]
214       //    -- has [...] no virtual base classes
215       data().IsStandardLayout = false;
216 
217       // C++11 [dcl.constexpr]p4:
218       //   In the definition of a constexpr constructor [...]
219       //    -- the class shall not have any virtual base classes
220       data().DefaultedDefaultConstructorIsConstexpr = false;
221       data().DefaultedCopyConstructorIsConstexpr = false;
222       data().DefaultedMoveConstructorIsConstexpr = false;
223     } else {
224       // C++ [class.ctor]p5:
225       //   A default constructor is trivial [...] if:
226       //    -- all the direct base classes of its class have trivial default
227       //       constructors.
228       if (!BaseClassDecl->hasTrivialDefaultConstructor())
229         data().HasTrivialDefaultConstructor = false;
230 
231       // C++0x [class.copy]p13:
232       //   A copy/move constructor for class X is trivial if [...]
233       //    [...]
234       //    -- the constructor selected to copy/move each direct base class
235       //       subobject is trivial, and
236       // FIXME: C++0x: We need to only consider the selected constructor
237       // instead of all of them.
238       if (!BaseClassDecl->hasTrivialCopyConstructor())
239         data().HasTrivialCopyConstructor = false;
240       if (!BaseClassDecl->hasTrivialMoveConstructor())
241         data().HasTrivialMoveConstructor = false;
242 
243       // C++0x [class.copy]p27:
244       //   A copy/move assignment operator for class X is trivial if [...]
245       //    [...]
246       //    -- the assignment operator selected to copy/move each direct base
247       //       class subobject is trivial, and
248       // FIXME: C++0x: We need to only consider the selected operator instead
249       // of all of them.
250       if (!BaseClassDecl->hasTrivialCopyAssignment())
251         data().HasTrivialCopyAssignment = false;
252       if (!BaseClassDecl->hasTrivialMoveAssignment())
253         data().HasTrivialMoveAssignment = false;
254 
255       // C++11 [class.ctor]p6:
256       //   If that user-written default constructor would satisfy the
257       //   requirements of a constexpr constructor, the implicitly-defined
258       //   default constructor is constexpr.
259       if (!BaseClassDecl->hasConstexprDefaultConstructor())
260         data().DefaultedDefaultConstructorIsConstexpr = false;
261 
262       // C++11 [class.copy]p13:
263       //   If the implicitly-defined constructor would satisfy the requirements
264       //   of a constexpr constructor, the implicitly-defined constructor is
265       //   constexpr.
266       // C++11 [dcl.constexpr]p4:
267       //    -- every constructor involved in initializing [...] base class
268       //       sub-objects shall be a constexpr constructor
269       if (!BaseClassDecl->hasConstexprCopyConstructor())
270         data().DefaultedCopyConstructorIsConstexpr = false;
271       if (BaseClassDecl->hasDeclaredMoveConstructor() ||
272           BaseClassDecl->needsImplicitMoveConstructor())
273         // FIXME: If the implicit move constructor generated for the base class
274         // would be ill-formed, the implicit move constructor generated for the
275         // derived class calls the base class' copy constructor.
276         data().DefaultedMoveConstructorIsConstexpr &=
277           BaseClassDecl->hasConstexprMoveConstructor();
278       else if (!BaseClassDecl->hasConstexprCopyConstructor())
279         data().DefaultedMoveConstructorIsConstexpr = false;
280     }
281 
282     // C++ [class.ctor]p3:
283     //   A destructor is trivial if all the direct base classes of its class
284     //   have trivial destructors.
285     if (!BaseClassDecl->hasTrivialDestructor())
286       data().HasTrivialDestructor = false;
287 
288     // A class has an Objective-C object member if... or any of its bases
289     // has an Objective-C object member.
290     if (BaseClassDecl->hasObjectMember())
291       setHasObjectMember(true);
292 
293     // Keep track of the presence of mutable fields.
294     if (BaseClassDecl->hasMutableFields())
295       data().HasMutableFields = true;
296   }
297 
298   if (VBases.empty())
299     return;
300 
301   // Create base specifier for any direct or indirect virtual bases.
302   data().VBases = new (C) CXXBaseSpecifier[VBases.size()];
303   data().NumVBases = VBases.size();
304   for (int I = 0, E = VBases.size(); I != E; ++I)
305     data().getVBases()[I] = *VBases[I];
306 }
307 
308 /// Callback function for CXXRecordDecl::forallBases that acknowledges
309 /// that it saw a base class.
310 static bool SawBase(const CXXRecordDecl *, void *) {
311   return true;
312 }
313 
314 bool CXXRecordDecl::hasAnyDependentBases() const {
315   if (!isDependentContext())
316     return false;
317 
318   return !forallBases(SawBase, 0);
319 }
320 
321 bool CXXRecordDecl::hasConstCopyConstructor() const {
322   return getCopyConstructor(Qualifiers::Const) != 0;
323 }
324 
325 bool CXXRecordDecl::isTriviallyCopyable() const {
326   // C++0x [class]p5:
327   //   A trivially copyable class is a class that:
328   //   -- has no non-trivial copy constructors,
329   if (!hasTrivialCopyConstructor()) return false;
330   //   -- has no non-trivial move constructors,
331   if (!hasTrivialMoveConstructor()) return false;
332   //   -- has no non-trivial copy assignment operators,
333   if (!hasTrivialCopyAssignment()) return false;
334   //   -- has no non-trivial move assignment operators, and
335   if (!hasTrivialMoveAssignment()) return false;
336   //   -- has a trivial destructor.
337   if (!hasTrivialDestructor()) return false;
338 
339   return true;
340 }
341 
342 /// \brief Perform a simplistic form of overload resolution that only considers
343 /// cv-qualifiers on a single parameter, and return the best overload candidate
344 /// (if there is one).
345 static CXXMethodDecl *
346 GetBestOverloadCandidateSimple(
347   const SmallVectorImpl<std::pair<CXXMethodDecl *, Qualifiers> > &Cands) {
348   if (Cands.empty())
349     return 0;
350   if (Cands.size() == 1)
351     return Cands[0].first;
352 
353   unsigned Best = 0, N = Cands.size();
354   for (unsigned I = 1; I != N; ++I)
355     if (Cands[Best].second.compatiblyIncludes(Cands[I].second))
356       Best = I;
357 
358   for (unsigned I = 1; I != N; ++I)
359     if (Cands[Best].second.compatiblyIncludes(Cands[I].second))
360       return 0;
361 
362   return Cands[Best].first;
363 }
364 
365 CXXConstructorDecl *CXXRecordDecl::getCopyConstructor(unsigned TypeQuals) const{
366   ASTContext &Context = getASTContext();
367   QualType ClassType
368     = Context.getTypeDeclType(const_cast<CXXRecordDecl*>(this));
369   DeclarationName ConstructorName
370     = Context.DeclarationNames.getCXXConstructorName(
371                                           Context.getCanonicalType(ClassType));
372   unsigned FoundTQs;
373   SmallVector<std::pair<CXXMethodDecl *, Qualifiers>, 4> Found;
374   DeclContext::lookup_const_iterator Con, ConEnd;
375   for (llvm::tie(Con, ConEnd) = this->lookup(ConstructorName);
376        Con != ConEnd; ++Con) {
377     // C++ [class.copy]p2:
378     //   A non-template constructor for class X is a copy constructor if [...]
379     if (isa<FunctionTemplateDecl>(*Con))
380       continue;
381 
382     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con);
383     if (Constructor->isCopyConstructor(FoundTQs)) {
384       if (((TypeQuals & Qualifiers::Const) == (FoundTQs & Qualifiers::Const)) ||
385           (!(TypeQuals & Qualifiers::Const) && (FoundTQs & Qualifiers::Const)))
386         Found.push_back(std::make_pair(
387                                  const_cast<CXXConstructorDecl *>(Constructor),
388                                        Qualifiers::fromCVRMask(FoundTQs)));
389     }
390   }
391 
392   return cast_or_null<CXXConstructorDecl>(
393                                         GetBestOverloadCandidateSimple(Found));
394 }
395 
396 CXXConstructorDecl *CXXRecordDecl::getMoveConstructor() const {
397   for (ctor_iterator I = ctor_begin(), E = ctor_end(); I != E; ++I)
398     if (I->isMoveConstructor())
399       return *I;
400 
401   return 0;
402 }
403 
404 CXXMethodDecl *CXXRecordDecl::getCopyAssignmentOperator(bool ArgIsConst) const {
405   ASTContext &Context = getASTContext();
406   QualType Class = Context.getTypeDeclType(const_cast<CXXRecordDecl *>(this));
407   DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal);
408 
409   SmallVector<std::pair<CXXMethodDecl *, Qualifiers>, 4> Found;
410   DeclContext::lookup_const_iterator Op, OpEnd;
411   for (llvm::tie(Op, OpEnd) = this->lookup(Name); Op != OpEnd; ++Op) {
412     // C++ [class.copy]p9:
413     //   A user-declared copy assignment operator is a non-static non-template
414     //   member function of class X with exactly one parameter of type X, X&,
415     //   const X&, volatile X& or const volatile X&.
416     const CXXMethodDecl* Method = dyn_cast<CXXMethodDecl>(*Op);
417     if (!Method || Method->isStatic() || Method->getPrimaryTemplate())
418       continue;
419 
420     const FunctionProtoType *FnType
421       = Method->getType()->getAs<FunctionProtoType>();
422     assert(FnType && "Overloaded operator has no prototype.");
423     // Don't assert on this; an invalid decl might have been left in the AST.
424     if (FnType->getNumArgs() != 1 || FnType->isVariadic())
425       continue;
426 
427     QualType ArgType = FnType->getArgType(0);
428     Qualifiers Quals;
429     if (const LValueReferenceType *Ref = ArgType->getAs<LValueReferenceType>()) {
430       ArgType = Ref->getPointeeType();
431       // If we have a const argument and we have a reference to a non-const,
432       // this function does not match.
433       if (ArgIsConst && !ArgType.isConstQualified())
434         continue;
435 
436       Quals = ArgType.getQualifiers();
437     } else {
438       // By-value copy-assignment operators are treated like const X&
439       // copy-assignment operators.
440       Quals = Qualifiers::fromCVRMask(Qualifiers::Const);
441     }
442 
443     if (!Context.hasSameUnqualifiedType(ArgType, Class))
444       continue;
445 
446     // Save this copy-assignment operator. It might be "the one".
447     Found.push_back(std::make_pair(const_cast<CXXMethodDecl *>(Method), Quals));
448   }
449 
450   // Use a simplistic form of overload resolution to find the candidate.
451   return GetBestOverloadCandidateSimple(Found);
452 }
453 
454 CXXMethodDecl *CXXRecordDecl::getMoveAssignmentOperator() const {
455   for (method_iterator I = method_begin(), E = method_end(); I != E; ++I)
456     if (I->isMoveAssignmentOperator())
457       return *I;
458 
459   return 0;
460 }
461 
462 void CXXRecordDecl::markedVirtualFunctionPure() {
463   // C++ [class.abstract]p2:
464   //   A class is abstract if it has at least one pure virtual function.
465   data().Abstract = true;
466 }
467 
468 void CXXRecordDecl::addedMember(Decl *D) {
469   if (!D->isImplicit() &&
470       !isa<FieldDecl>(D) &&
471       !isa<IndirectFieldDecl>(D) &&
472       (!isa<TagDecl>(D) || cast<TagDecl>(D)->getTagKind() == TTK_Class))
473     data().HasOnlyCMembers = false;
474 
475   // Ignore friends and invalid declarations.
476   if (D->getFriendObjectKind() || D->isInvalidDecl())
477     return;
478 
479   FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D);
480   if (FunTmpl)
481     D = FunTmpl->getTemplatedDecl();
482 
483   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
484     if (Method->isVirtual()) {
485       // C++ [dcl.init.aggr]p1:
486       //   An aggregate is an array or a class with [...] no virtual functions.
487       data().Aggregate = false;
488 
489       // C++ [class]p4:
490       //   A POD-struct is an aggregate class...
491       data().PlainOldData = false;
492 
493       // Virtual functions make the class non-empty.
494       // FIXME: Standard ref?
495       data().Empty = false;
496 
497       // C++ [class.virtual]p1:
498       //   A class that declares or inherits a virtual function is called a
499       //   polymorphic class.
500       data().Polymorphic = true;
501 
502       // C++0x [class.ctor]p5
503       //   A default constructor is trivial [...] if:
504       //    -- its class has no virtual functions [...]
505       data().HasTrivialDefaultConstructor = false;
506 
507       // C++0x [class.copy]p13:
508       //   A copy/move constructor for class X is trivial if [...]
509       //    -- class X has no virtual functions [...]
510       data().HasTrivialCopyConstructor = false;
511       data().HasTrivialMoveConstructor = false;
512 
513       // C++0x [class.copy]p27:
514       //   A copy/move assignment operator for class X is trivial if [...]
515       //    -- class X has no virtual functions [...]
516       data().HasTrivialCopyAssignment = false;
517       data().HasTrivialMoveAssignment = false;
518 
519       // C++0x [class]p7:
520       //   A standard-layout class is a class that: [...]
521       //    -- has no virtual functions
522       data().IsStandardLayout = false;
523     }
524   }
525 
526   if (D->isImplicit()) {
527     // Notify that an implicit member was added after the definition
528     // was completed.
529     if (!isBeingDefined())
530       if (ASTMutationListener *L = getASTMutationListener())
531         L->AddedCXXImplicitMember(data().Definition, D);
532 
533     // If this is a special member function, note that it was added and then
534     // return early.
535     if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
536       if (Constructor->isDefaultConstructor()) {
537         data().DeclaredDefaultConstructor = true;
538         if (Constructor->isConstexpr()) {
539           data().HasConstexprDefaultConstructor = true;
540           data().HasConstexprNonCopyMoveConstructor = true;
541         }
542       } else if (Constructor->isCopyConstructor()) {
543         data().DeclaredCopyConstructor = true;
544         if (Constructor->isConstexpr())
545           data().HasConstexprCopyConstructor = true;
546       } else if (Constructor->isMoveConstructor()) {
547         data().DeclaredMoveConstructor = true;
548         if (Constructor->isConstexpr())
549           data().HasConstexprMoveConstructor = true;
550       } else
551         goto NotASpecialMember;
552       return;
553     } else if (isa<CXXDestructorDecl>(D)) {
554       data().DeclaredDestructor = true;
555       return;
556     } else if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
557       if (Method->isCopyAssignmentOperator())
558         data().DeclaredCopyAssignment = true;
559       else if (Method->isMoveAssignmentOperator())
560         data().DeclaredMoveAssignment = true;
561       else
562         goto NotASpecialMember;
563       return;
564     }
565 
566 NotASpecialMember:;
567     // Any other implicit declarations are handled like normal declarations.
568   }
569 
570   // Handle (user-declared) constructors.
571   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
572     // Note that we have a user-declared constructor.
573     data().UserDeclaredConstructor = true;
574 
575     // Technically, "user-provided" is only defined for special member
576     // functions, but the intent of the standard is clearly that it should apply
577     // to all functions.
578     bool UserProvided = Constructor->isUserProvided();
579 
580     if (Constructor->isDefaultConstructor()) {
581       data().DeclaredDefaultConstructor = true;
582       if (UserProvided) {
583         // C++0x [class.ctor]p5:
584         //   A default constructor is trivial if it is not user-provided [...]
585         data().HasTrivialDefaultConstructor = false;
586         data().UserProvidedDefaultConstructor = true;
587       }
588       if (Constructor->isConstexpr()) {
589         data().HasConstexprDefaultConstructor = true;
590         data().HasConstexprNonCopyMoveConstructor = true;
591       }
592     }
593 
594     // Note when we have a user-declared copy or move constructor, which will
595     // suppress the implicit declaration of those constructors.
596     if (!FunTmpl) {
597       if (Constructor->isCopyConstructor()) {
598         data().UserDeclaredCopyConstructor = true;
599         data().DeclaredCopyConstructor = true;
600 
601         // C++0x [class.copy]p13:
602         //   A copy/move constructor for class X is trivial if it is not
603         //   user-provided [...]
604         if (UserProvided)
605           data().HasTrivialCopyConstructor = false;
606 
607         if (Constructor->isConstexpr())
608           data().HasConstexprCopyConstructor = true;
609       } else if (Constructor->isMoveConstructor()) {
610         data().UserDeclaredMoveConstructor = true;
611         data().DeclaredMoveConstructor = true;
612 
613         // C++0x [class.copy]p13:
614         //   A copy/move constructor for class X is trivial if it is not
615         //   user-provided [...]
616         if (UserProvided)
617           data().HasTrivialMoveConstructor = false;
618 
619         if (Constructor->isConstexpr())
620           data().HasConstexprMoveConstructor = true;
621       }
622     }
623     if (Constructor->isConstexpr() && !Constructor->isCopyOrMoveConstructor()) {
624       // Record if we see any constexpr constructors which are neither copy
625       // nor move constructors.
626       data().HasConstexprNonCopyMoveConstructor = true;
627     }
628 
629     // C++ [dcl.init.aggr]p1:
630     //   An aggregate is an array or a class with no user-declared
631     //   constructors [...].
632     // C++0x [dcl.init.aggr]p1:
633     //   An aggregate is an array or a class with no user-provided
634     //   constructors [...].
635     if (!getASTContext().getLangOptions().CPlusPlus0x || UserProvided)
636       data().Aggregate = false;
637 
638     // C++ [class]p4:
639     //   A POD-struct is an aggregate class [...]
640     // Since the POD bit is meant to be C++03 POD-ness, clear it even if the
641     // type is technically an aggregate in C++0x since it wouldn't be in 03.
642     data().PlainOldData = false;
643 
644     return;
645   }
646 
647   // Handle (user-declared) destructors.
648   if (CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D)) {
649     data().DeclaredDestructor = true;
650     data().UserDeclaredDestructor = true;
651 
652     // C++ [class]p4:
653     //   A POD-struct is an aggregate class that has [...] no user-defined
654     //   destructor.
655     // This bit is the C++03 POD bit, not the 0x one.
656     data().PlainOldData = false;
657 
658     // C++11 [class.dtor]p5:
659     //   A destructor is trivial if it is not user-provided and if
660     //    -- the destructor is not virtual.
661     if (DD->isUserProvided() || DD->isVirtual()) {
662       data().HasTrivialDestructor = false;
663       // C++11 [dcl.constexpr]p1:
664       //   The constexpr specifier shall be applied only to [...] the
665       //   declaration of a static data member of a literal type.
666       // C++11 [basic.types]p10:
667       //   A type is a literal type if it is [...] a class type that [...] has
668       //   a trivial destructor.
669       data().DefaultedDefaultConstructorIsConstexpr = false;
670       data().DefaultedCopyConstructorIsConstexpr = false;
671       data().DefaultedMoveConstructorIsConstexpr = false;
672     }
673 
674     return;
675   }
676 
677   // Handle (user-declared) member functions.
678   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
679     if (Method->isCopyAssignmentOperator()) {
680       // C++ [class]p4:
681       //   A POD-struct is an aggregate class that [...] has no user-defined
682       //   copy assignment operator [...].
683       // This is the C++03 bit only.
684       data().PlainOldData = false;
685 
686       // This is a copy assignment operator.
687 
688       // Suppress the implicit declaration of a copy constructor.
689       data().UserDeclaredCopyAssignment = true;
690       data().DeclaredCopyAssignment = true;
691 
692       // C++0x [class.copy]p27:
693       //   A copy/move assignment operator for class X is trivial if it is
694       //   neither user-provided nor deleted [...]
695       if (Method->isUserProvided())
696         data().HasTrivialCopyAssignment = false;
697 
698       return;
699     }
700 
701     if (Method->isMoveAssignmentOperator()) {
702       // This is an extension in C++03 mode, but we'll keep consistency by
703       // taking a move assignment operator to induce non-POD-ness
704       data().PlainOldData = false;
705 
706       // This is a move assignment operator.
707       data().UserDeclaredMoveAssignment = true;
708       data().DeclaredMoveAssignment = true;
709 
710       // C++0x [class.copy]p27:
711       //   A copy/move assignment operator for class X is trivial if it is
712       //   neither user-provided nor deleted [...]
713       if (Method->isUserProvided())
714         data().HasTrivialMoveAssignment = false;
715     }
716 
717     // Keep the list of conversion functions up-to-date.
718     if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
719       // We don't record specializations.
720       if (Conversion->getPrimaryTemplate())
721         return;
722 
723       // FIXME: We intentionally don't use the decl's access here because it
724       // hasn't been set yet.  That's really just a misdesign in Sema.
725 
726       if (FunTmpl) {
727         if (FunTmpl->getPreviousDecl())
728           data().Conversions.replace(FunTmpl->getPreviousDecl(),
729                                      FunTmpl);
730         else
731           data().Conversions.addDecl(FunTmpl);
732       } else {
733         if (Conversion->getPreviousDecl())
734           data().Conversions.replace(Conversion->getPreviousDecl(),
735                                      Conversion);
736         else
737           data().Conversions.addDecl(Conversion);
738       }
739     }
740 
741     return;
742   }
743 
744   // Handle non-static data members.
745   if (FieldDecl *Field = dyn_cast<FieldDecl>(D)) {
746     // C++ [class.bit]p2:
747     //   A declaration for a bit-field that omits the identifier declares an
748     //   unnamed bit-field. Unnamed bit-fields are not members and cannot be
749     //   initialized.
750     if (Field->isUnnamedBitfield())
751       return;
752 
753     // C++ [dcl.init.aggr]p1:
754     //   An aggregate is an array or a class (clause 9) with [...] no
755     //   private or protected non-static data members (clause 11).
756     //
757     // A POD must be an aggregate.
758     if (D->getAccess() == AS_private || D->getAccess() == AS_protected) {
759       data().Aggregate = false;
760       data().PlainOldData = false;
761     }
762 
763     // C++0x [class]p7:
764     //   A standard-layout class is a class that:
765     //    [...]
766     //    -- has the same access control for all non-static data members,
767     switch (D->getAccess()) {
768     case AS_private:    data().HasPrivateFields = true;   break;
769     case AS_protected:  data().HasProtectedFields = true; break;
770     case AS_public:     data().HasPublicFields = true;    break;
771     case AS_none:       llvm_unreachable("Invalid access specifier");
772     };
773     if ((data().HasPrivateFields + data().HasProtectedFields +
774          data().HasPublicFields) > 1)
775       data().IsStandardLayout = false;
776 
777     // Keep track of the presence of mutable fields.
778     if (Field->isMutable())
779       data().HasMutableFields = true;
780 
781     // C++0x [class]p9:
782     //   A POD struct is a class that is both a trivial class and a
783     //   standard-layout class, and has no non-static data members of type
784     //   non-POD struct, non-POD union (or array of such types).
785     //
786     // Automatic Reference Counting: the presence of a member of Objective-C pointer type
787     // that does not explicitly have no lifetime makes the class a non-POD.
788     // However, we delay setting PlainOldData to false in this case so that
789     // Sema has a chance to diagnostic causes where the same class will be
790     // non-POD with Automatic Reference Counting but a POD without Instant Objects.
791     // In this case, the class will become a non-POD class when we complete
792     // the definition.
793     ASTContext &Context = getASTContext();
794     QualType T = Context.getBaseElementType(Field->getType());
795     if (T->isObjCRetainableType() || T.isObjCGCStrong()) {
796       if (!Context.getLangOptions().ObjCAutoRefCount ||
797           T.getObjCLifetime() != Qualifiers::OCL_ExplicitNone)
798         setHasObjectMember(true);
799     } else if (!T.isPODType(Context))
800       data().PlainOldData = false;
801 
802     if (T->isReferenceType()) {
803       data().HasTrivialDefaultConstructor = false;
804 
805       // C++0x [class]p7:
806       //   A standard-layout class is a class that:
807       //    -- has no non-static data members of type [...] reference,
808       data().IsStandardLayout = false;
809     }
810 
811     // Record if this field is the first non-literal or volatile field or base.
812     if (!T->isLiteralType() || T.isVolatileQualified())
813       data().HasNonLiteralTypeFieldsOrBases = true;
814 
815     if (Field->hasInClassInitializer()) {
816       // C++0x [class]p5:
817       //   A default constructor is trivial if [...] no non-static data member
818       //   of its class has a brace-or-equal-initializer.
819       data().HasTrivialDefaultConstructor = false;
820 
821       // C++0x [dcl.init.aggr]p1:
822       //   An aggregate is a [...] class with [...] no
823       //   brace-or-equal-initializers for non-static data members.
824       data().Aggregate = false;
825 
826       // C++0x [class]p10:
827       //   A POD struct is [...] a trivial class.
828       data().PlainOldData = false;
829     }
830 
831     if (const RecordType *RecordTy = T->getAs<RecordType>()) {
832       CXXRecordDecl* FieldRec = cast<CXXRecordDecl>(RecordTy->getDecl());
833       if (FieldRec->getDefinition()) {
834         // C++0x [class.ctor]p5:
835         //   A default constructor is trivial [...] if:
836         //    -- for all the non-static data members of its class that are of
837         //       class type (or array thereof), each such class has a trivial
838         //       default constructor.
839         if (!FieldRec->hasTrivialDefaultConstructor())
840           data().HasTrivialDefaultConstructor = false;
841 
842         // C++0x [class.copy]p13:
843         //   A copy/move constructor for class X is trivial if [...]
844         //    [...]
845         //    -- for each non-static data member of X that is of class type (or
846         //       an array thereof), the constructor selected to copy/move that
847         //       member is trivial;
848         // FIXME: C++0x: We don't correctly model 'selected' constructors.
849         if (!FieldRec->hasTrivialCopyConstructor())
850           data().HasTrivialCopyConstructor = false;
851         if (!FieldRec->hasTrivialMoveConstructor())
852           data().HasTrivialMoveConstructor = false;
853 
854         // C++0x [class.copy]p27:
855         //   A copy/move assignment operator for class X is trivial if [...]
856         //    [...]
857         //    -- for each non-static data member of X that is of class type (or
858         //       an array thereof), the assignment operator selected to
859         //       copy/move that member is trivial;
860         // FIXME: C++0x: We don't correctly model 'selected' operators.
861         if (!FieldRec->hasTrivialCopyAssignment())
862           data().HasTrivialCopyAssignment = false;
863         if (!FieldRec->hasTrivialMoveAssignment())
864           data().HasTrivialMoveAssignment = false;
865 
866         if (!FieldRec->hasTrivialDestructor())
867           data().HasTrivialDestructor = false;
868         if (FieldRec->hasObjectMember())
869           setHasObjectMember(true);
870 
871         // C++0x [class]p7:
872         //   A standard-layout class is a class that:
873         //    -- has no non-static data members of type non-standard-layout
874         //       class (or array of such types) [...]
875         if (!FieldRec->isStandardLayout())
876           data().IsStandardLayout = false;
877 
878         // C++0x [class]p7:
879         //   A standard-layout class is a class that:
880         //    [...]
881         //    -- has no base classes of the same type as the first non-static
882         //       data member.
883         // We don't want to expend bits in the state of the record decl
884         // tracking whether this is the first non-static data member so we
885         // cheat a bit and use some of the existing state: the empty bit.
886         // Virtual bases and virtual methods make a class non-empty, but they
887         // also make it non-standard-layout so we needn't check here.
888         // A non-empty base class may leave the class standard-layout, but not
889         // if we have arrived here, and have at least on non-static data
890         // member. If IsStandardLayout remains true, then the first non-static
891         // data member must come through here with Empty still true, and Empty
892         // will subsequently be set to false below.
893         if (data().IsStandardLayout && data().Empty) {
894           for (CXXRecordDecl::base_class_const_iterator BI = bases_begin(),
895                                                         BE = bases_end();
896                BI != BE; ++BI) {
897             if (Context.hasSameUnqualifiedType(BI->getType(), T)) {
898               data().IsStandardLayout = false;
899               break;
900             }
901           }
902         }
903 
904         // Keep track of the presence of mutable fields.
905         if (FieldRec->hasMutableFields())
906           data().HasMutableFields = true;
907 
908         // C++11 [class.copy]p13:
909         //   If the implicitly-defined constructor would satisfy the
910         //   requirements of a constexpr constructor, the implicitly-defined
911         //   constructor is constexpr.
912         // C++11 [dcl.constexpr]p4:
913         //    -- every constructor involved in initializing non-static data
914         //       members [...] shall be a constexpr constructor
915         if (!Field->hasInClassInitializer() &&
916             !FieldRec->hasConstexprDefaultConstructor())
917           // The standard requires any in-class initializer to be a constant
918           // expression. We consider this to be a defect.
919           data().DefaultedDefaultConstructorIsConstexpr = false;
920 
921         if (!FieldRec->hasConstexprCopyConstructor())
922           data().DefaultedCopyConstructorIsConstexpr = false;
923 
924         if (FieldRec->hasDeclaredMoveConstructor() ||
925             FieldRec->needsImplicitMoveConstructor())
926           // FIXME: If the implicit move constructor generated for the member's
927           // class would be ill-formed, the implicit move constructor generated
928           // for this class calls the member's copy constructor.
929           data().DefaultedMoveConstructorIsConstexpr &=
930             FieldRec->hasConstexprMoveConstructor();
931         else if (!FieldRec->hasConstexprCopyConstructor())
932           data().DefaultedMoveConstructorIsConstexpr = false;
933       }
934     } else {
935       // Base element type of field is a non-class type.
936       if (!T->isLiteralType()) {
937         data().DefaultedDefaultConstructorIsConstexpr = false;
938         data().DefaultedCopyConstructorIsConstexpr = false;
939         data().DefaultedMoveConstructorIsConstexpr = false;
940       } else if (!Field->hasInClassInitializer())
941         data().DefaultedDefaultConstructorIsConstexpr = false;
942     }
943 
944     // C++0x [class]p7:
945     //   A standard-layout class is a class that:
946     //    [...]
947     //    -- either has no non-static data members in the most derived
948     //       class and at most one base class with non-static data members,
949     //       or has no base classes with non-static data members, and
950     // At this point we know that we have a non-static data member, so the last
951     // clause holds.
952     if (!data().HasNoNonEmptyBases)
953       data().IsStandardLayout = false;
954 
955     // If this is not a zero-length bit-field, then the class is not empty.
956     if (data().Empty) {
957       if (!Field->isBitField() ||
958           (!Field->getBitWidth()->isTypeDependent() &&
959            !Field->getBitWidth()->isValueDependent() &&
960            Field->getBitWidthValue(Context) != 0))
961         data().Empty = false;
962     }
963   }
964 
965   // Handle using declarations of conversion functions.
966   if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(D))
967     if (Shadow->getDeclName().getNameKind()
968           == DeclarationName::CXXConversionFunctionName)
969       data().Conversions.addDecl(Shadow, Shadow->getAccess());
970 }
971 
972 bool CXXRecordDecl::isCLike() const {
973   if (getTagKind() == TTK_Class || !TemplateOrInstantiation.isNull())
974     return false;
975   if (!hasDefinition())
976     return true;
977 
978   return isPOD() && data().HasOnlyCMembers;
979 }
980 
981 void CXXRecordDecl::getCaptureFields(
982        llvm::DenseMap<const VarDecl *, FieldDecl *> &Captures,
983        FieldDecl *&ThisCapture) const {
984   Captures.clear();
985   ThisCapture = 0;
986 
987   LambdaDefinitionData &Lambda = getLambdaData();
988   RecordDecl::field_iterator Field = field_begin();
989   for (LambdaExpr::Capture *C = Lambda.Captures, *CEnd = C + Lambda.NumCaptures;
990        C != CEnd; ++C, ++Field) {
991     if (C->capturesThis()) {
992       ThisCapture = *Field;
993       continue;
994     }
995 
996     Captures[C->getCapturedVar()] = *Field;
997   }
998 }
999 
1000 
1001 static CanQualType GetConversionType(ASTContext &Context, NamedDecl *Conv) {
1002   QualType T;
1003   if (isa<UsingShadowDecl>(Conv))
1004     Conv = cast<UsingShadowDecl>(Conv)->getTargetDecl();
1005   if (FunctionTemplateDecl *ConvTemp = dyn_cast<FunctionTemplateDecl>(Conv))
1006     T = ConvTemp->getTemplatedDecl()->getResultType();
1007   else
1008     T = cast<CXXConversionDecl>(Conv)->getConversionType();
1009   return Context.getCanonicalType(T);
1010 }
1011 
1012 /// Collect the visible conversions of a base class.
1013 ///
1014 /// \param Base a base class of the class we're considering
1015 /// \param InVirtual whether this base class is a virtual base (or a base
1016 ///   of a virtual base)
1017 /// \param Access the access along the inheritance path to this base
1018 /// \param ParentHiddenTypes the conversions provided by the inheritors
1019 ///   of this base
1020 /// \param Output the set to which to add conversions from non-virtual bases
1021 /// \param VOutput the set to which to add conversions from virtual bases
1022 /// \param HiddenVBaseCs the set of conversions which were hidden in a
1023 ///   virtual base along some inheritance path
1024 static void CollectVisibleConversions(ASTContext &Context,
1025                                       CXXRecordDecl *Record,
1026                                       bool InVirtual,
1027                                       AccessSpecifier Access,
1028                   const llvm::SmallPtrSet<CanQualType, 8> &ParentHiddenTypes,
1029                                       UnresolvedSetImpl &Output,
1030                                       UnresolvedSetImpl &VOutput,
1031                            llvm::SmallPtrSet<NamedDecl*, 8> &HiddenVBaseCs) {
1032   // The set of types which have conversions in this class or its
1033   // subclasses.  As an optimization, we don't copy the derived set
1034   // unless it might change.
1035   const llvm::SmallPtrSet<CanQualType, 8> *HiddenTypes = &ParentHiddenTypes;
1036   llvm::SmallPtrSet<CanQualType, 8> HiddenTypesBuffer;
1037 
1038   // Collect the direct conversions and figure out which conversions
1039   // will be hidden in the subclasses.
1040   UnresolvedSetImpl &Cs = *Record->getConversionFunctions();
1041   if (!Cs.empty()) {
1042     HiddenTypesBuffer = ParentHiddenTypes;
1043     HiddenTypes = &HiddenTypesBuffer;
1044 
1045     for (UnresolvedSetIterator I = Cs.begin(), E = Cs.end(); I != E; ++I) {
1046       bool Hidden =
1047         !HiddenTypesBuffer.insert(GetConversionType(Context, I.getDecl()));
1048 
1049       // If this conversion is hidden and we're in a virtual base,
1050       // remember that it's hidden along some inheritance path.
1051       if (Hidden && InVirtual)
1052         HiddenVBaseCs.insert(cast<NamedDecl>(I.getDecl()->getCanonicalDecl()));
1053 
1054       // If this conversion isn't hidden, add it to the appropriate output.
1055       else if (!Hidden) {
1056         AccessSpecifier IAccess
1057           = CXXRecordDecl::MergeAccess(Access, I.getAccess());
1058 
1059         if (InVirtual)
1060           VOutput.addDecl(I.getDecl(), IAccess);
1061         else
1062           Output.addDecl(I.getDecl(), IAccess);
1063       }
1064     }
1065   }
1066 
1067   // Collect information recursively from any base classes.
1068   for (CXXRecordDecl::base_class_iterator
1069          I = Record->bases_begin(), E = Record->bases_end(); I != E; ++I) {
1070     const RecordType *RT = I->getType()->getAs<RecordType>();
1071     if (!RT) continue;
1072 
1073     AccessSpecifier BaseAccess
1074       = CXXRecordDecl::MergeAccess(Access, I->getAccessSpecifier());
1075     bool BaseInVirtual = InVirtual || I->isVirtual();
1076 
1077     CXXRecordDecl *Base = cast<CXXRecordDecl>(RT->getDecl());
1078     CollectVisibleConversions(Context, Base, BaseInVirtual, BaseAccess,
1079                               *HiddenTypes, Output, VOutput, HiddenVBaseCs);
1080   }
1081 }
1082 
1083 /// Collect the visible conversions of a class.
1084 ///
1085 /// This would be extremely straightforward if it weren't for virtual
1086 /// bases.  It might be worth special-casing that, really.
1087 static void CollectVisibleConversions(ASTContext &Context,
1088                                       CXXRecordDecl *Record,
1089                                       UnresolvedSetImpl &Output) {
1090   // The collection of all conversions in virtual bases that we've
1091   // found.  These will be added to the output as long as they don't
1092   // appear in the hidden-conversions set.
1093   UnresolvedSet<8> VBaseCs;
1094 
1095   // The set of conversions in virtual bases that we've determined to
1096   // be hidden.
1097   llvm::SmallPtrSet<NamedDecl*, 8> HiddenVBaseCs;
1098 
1099   // The set of types hidden by classes derived from this one.
1100   llvm::SmallPtrSet<CanQualType, 8> HiddenTypes;
1101 
1102   // Go ahead and collect the direct conversions and add them to the
1103   // hidden-types set.
1104   UnresolvedSetImpl &Cs = *Record->getConversionFunctions();
1105   Output.append(Cs.begin(), Cs.end());
1106   for (UnresolvedSetIterator I = Cs.begin(), E = Cs.end(); I != E; ++I)
1107     HiddenTypes.insert(GetConversionType(Context, I.getDecl()));
1108 
1109   // Recursively collect conversions from base classes.
1110   for (CXXRecordDecl::base_class_iterator
1111          I = Record->bases_begin(), E = Record->bases_end(); I != E; ++I) {
1112     const RecordType *RT = I->getType()->getAs<RecordType>();
1113     if (!RT) continue;
1114 
1115     CollectVisibleConversions(Context, cast<CXXRecordDecl>(RT->getDecl()),
1116                               I->isVirtual(), I->getAccessSpecifier(),
1117                               HiddenTypes, Output, VBaseCs, HiddenVBaseCs);
1118   }
1119 
1120   // Add any unhidden conversions provided by virtual bases.
1121   for (UnresolvedSetIterator I = VBaseCs.begin(), E = VBaseCs.end();
1122          I != E; ++I) {
1123     if (!HiddenVBaseCs.count(cast<NamedDecl>(I.getDecl()->getCanonicalDecl())))
1124       Output.addDecl(I.getDecl(), I.getAccess());
1125   }
1126 }
1127 
1128 /// getVisibleConversionFunctions - get all conversion functions visible
1129 /// in current class; including conversion function templates.
1130 const UnresolvedSetImpl *CXXRecordDecl::getVisibleConversionFunctions() {
1131   // If root class, all conversions are visible.
1132   if (bases_begin() == bases_end())
1133     return &data().Conversions;
1134   // If visible conversion list is already evaluated, return it.
1135   if (data().ComputedVisibleConversions)
1136     return &data().VisibleConversions;
1137   CollectVisibleConversions(getASTContext(), this, data().VisibleConversions);
1138   data().ComputedVisibleConversions = true;
1139   return &data().VisibleConversions;
1140 }
1141 
1142 void CXXRecordDecl::removeConversion(const NamedDecl *ConvDecl) {
1143   // This operation is O(N) but extremely rare.  Sema only uses it to
1144   // remove UsingShadowDecls in a class that were followed by a direct
1145   // declaration, e.g.:
1146   //   class A : B {
1147   //     using B::operator int;
1148   //     operator int();
1149   //   };
1150   // This is uncommon by itself and even more uncommon in conjunction
1151   // with sufficiently large numbers of directly-declared conversions
1152   // that asymptotic behavior matters.
1153 
1154   UnresolvedSetImpl &Convs = *getConversionFunctions();
1155   for (unsigned I = 0, E = Convs.size(); I != E; ++I) {
1156     if (Convs[I].getDecl() == ConvDecl) {
1157       Convs.erase(I);
1158       assert(std::find(Convs.begin(), Convs.end(), ConvDecl) == Convs.end()
1159              && "conversion was found multiple times in unresolved set");
1160       return;
1161     }
1162   }
1163 
1164   llvm_unreachable("conversion not found in set!");
1165 }
1166 
1167 CXXRecordDecl *CXXRecordDecl::getInstantiatedFromMemberClass() const {
1168   if (MemberSpecializationInfo *MSInfo = getMemberSpecializationInfo())
1169     return cast<CXXRecordDecl>(MSInfo->getInstantiatedFrom());
1170 
1171   return 0;
1172 }
1173 
1174 MemberSpecializationInfo *CXXRecordDecl::getMemberSpecializationInfo() const {
1175   return TemplateOrInstantiation.dyn_cast<MemberSpecializationInfo *>();
1176 }
1177 
1178 void
1179 CXXRecordDecl::setInstantiationOfMemberClass(CXXRecordDecl *RD,
1180                                              TemplateSpecializationKind TSK) {
1181   assert(TemplateOrInstantiation.isNull() &&
1182          "Previous template or instantiation?");
1183   assert(!isa<ClassTemplateSpecializationDecl>(this));
1184   TemplateOrInstantiation
1185     = new (getASTContext()) MemberSpecializationInfo(RD, TSK);
1186 }
1187 
1188 TemplateSpecializationKind CXXRecordDecl::getTemplateSpecializationKind() const{
1189   if (const ClassTemplateSpecializationDecl *Spec
1190         = dyn_cast<ClassTemplateSpecializationDecl>(this))
1191     return Spec->getSpecializationKind();
1192 
1193   if (MemberSpecializationInfo *MSInfo = getMemberSpecializationInfo())
1194     return MSInfo->getTemplateSpecializationKind();
1195 
1196   return TSK_Undeclared;
1197 }
1198 
1199 void
1200 CXXRecordDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK) {
1201   if (ClassTemplateSpecializationDecl *Spec
1202       = dyn_cast<ClassTemplateSpecializationDecl>(this)) {
1203     Spec->setSpecializationKind(TSK);
1204     return;
1205   }
1206 
1207   if (MemberSpecializationInfo *MSInfo = getMemberSpecializationInfo()) {
1208     MSInfo->setTemplateSpecializationKind(TSK);
1209     return;
1210   }
1211 
1212   llvm_unreachable("Not a class template or member class specialization");
1213 }
1214 
1215 CXXDestructorDecl *CXXRecordDecl::getDestructor() const {
1216   ASTContext &Context = getASTContext();
1217   QualType ClassType = Context.getTypeDeclType(this);
1218 
1219   DeclarationName Name
1220     = Context.DeclarationNames.getCXXDestructorName(
1221                                           Context.getCanonicalType(ClassType));
1222 
1223   DeclContext::lookup_const_iterator I, E;
1224   llvm::tie(I, E) = lookup(Name);
1225   if (I == E)
1226     return 0;
1227 
1228   CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(*I);
1229   return Dtor;
1230 }
1231 
1232 void CXXRecordDecl::completeDefinition() {
1233   completeDefinition(0);
1234 }
1235 
1236 void CXXRecordDecl::completeDefinition(CXXFinalOverriderMap *FinalOverriders) {
1237   RecordDecl::completeDefinition();
1238 
1239   if (hasObjectMember() && getASTContext().getLangOptions().ObjCAutoRefCount) {
1240     // Objective-C Automatic Reference Counting:
1241     //   If a class has a non-static data member of Objective-C pointer
1242     //   type (or array thereof), it is a non-POD type and its
1243     //   default constructor (if any), copy constructor, copy assignment
1244     //   operator, and destructor are non-trivial.
1245     struct DefinitionData &Data = data();
1246     Data.PlainOldData = false;
1247     Data.HasTrivialDefaultConstructor = false;
1248     Data.HasTrivialCopyConstructor = false;
1249     Data.HasTrivialCopyAssignment = false;
1250     Data.HasTrivialDestructor = false;
1251   }
1252 
1253   // If the class may be abstract (but hasn't been marked as such), check for
1254   // any pure final overriders.
1255   if (mayBeAbstract()) {
1256     CXXFinalOverriderMap MyFinalOverriders;
1257     if (!FinalOverriders) {
1258       getFinalOverriders(MyFinalOverriders);
1259       FinalOverriders = &MyFinalOverriders;
1260     }
1261 
1262     bool Done = false;
1263     for (CXXFinalOverriderMap::iterator M = FinalOverriders->begin(),
1264                                      MEnd = FinalOverriders->end();
1265          M != MEnd && !Done; ++M) {
1266       for (OverridingMethods::iterator SO = M->second.begin(),
1267                                     SOEnd = M->second.end();
1268            SO != SOEnd && !Done; ++SO) {
1269         assert(SO->second.size() > 0 &&
1270                "All virtual functions have overridding virtual functions");
1271 
1272         // C++ [class.abstract]p4:
1273         //   A class is abstract if it contains or inherits at least one
1274         //   pure virtual function for which the final overrider is pure
1275         //   virtual.
1276         if (SO->second.front().Method->isPure()) {
1277           data().Abstract = true;
1278           Done = true;
1279           break;
1280         }
1281       }
1282     }
1283   }
1284 
1285   // Set access bits correctly on the directly-declared conversions.
1286   for (UnresolvedSetIterator I = data().Conversions.begin(),
1287                              E = data().Conversions.end();
1288        I != E; ++I)
1289     data().Conversions.setAccess(I, (*I)->getAccess());
1290 }
1291 
1292 bool CXXRecordDecl::mayBeAbstract() const {
1293   if (data().Abstract || isInvalidDecl() || !data().Polymorphic ||
1294       isDependentContext())
1295     return false;
1296 
1297   for (CXXRecordDecl::base_class_const_iterator B = bases_begin(),
1298                                              BEnd = bases_end();
1299        B != BEnd; ++B) {
1300     CXXRecordDecl *BaseDecl
1301       = cast<CXXRecordDecl>(B->getType()->getAs<RecordType>()->getDecl());
1302     if (BaseDecl->isAbstract())
1303       return true;
1304   }
1305 
1306   return false;
1307 }
1308 
1309 void CXXMethodDecl::anchor() { }
1310 
1311 CXXMethodDecl *
1312 CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD,
1313                       SourceLocation StartLoc,
1314                       const DeclarationNameInfo &NameInfo,
1315                       QualType T, TypeSourceInfo *TInfo,
1316                       bool isStatic, StorageClass SCAsWritten, bool isInline,
1317                       bool isConstexpr, SourceLocation EndLocation) {
1318   return new (C) CXXMethodDecl(CXXMethod, RD, StartLoc, NameInfo, T, TInfo,
1319                                isStatic, SCAsWritten, isInline, isConstexpr,
1320                                EndLocation);
1321 }
1322 
1323 CXXMethodDecl *CXXMethodDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1324   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(CXXMethodDecl));
1325   return new (Mem) CXXMethodDecl(CXXMethod, 0, SourceLocation(),
1326                                  DeclarationNameInfo(), QualType(),
1327                                  0, false, SC_None, false, false,
1328                                  SourceLocation());
1329 }
1330 
1331 bool CXXMethodDecl::isUsualDeallocationFunction() const {
1332   if (getOverloadedOperator() != OO_Delete &&
1333       getOverloadedOperator() != OO_Array_Delete)
1334     return false;
1335 
1336   // C++ [basic.stc.dynamic.deallocation]p2:
1337   //   A template instance is never a usual deallocation function,
1338   //   regardless of its signature.
1339   if (getPrimaryTemplate())
1340     return false;
1341 
1342   // C++ [basic.stc.dynamic.deallocation]p2:
1343   //   If a class T has a member deallocation function named operator delete
1344   //   with exactly one parameter, then that function is a usual (non-placement)
1345   //   deallocation function. [...]
1346   if (getNumParams() == 1)
1347     return true;
1348 
1349   // C++ [basic.stc.dynamic.deallocation]p2:
1350   //   [...] If class T does not declare such an operator delete but does
1351   //   declare a member deallocation function named operator delete with
1352   //   exactly two parameters, the second of which has type std::size_t (18.1),
1353   //   then this function is a usual deallocation function.
1354   ASTContext &Context = getASTContext();
1355   if (getNumParams() != 2 ||
1356       !Context.hasSameUnqualifiedType(getParamDecl(1)->getType(),
1357                                       Context.getSizeType()))
1358     return false;
1359 
1360   // This function is a usual deallocation function if there are no
1361   // single-parameter deallocation functions of the same kind.
1362   for (DeclContext::lookup_const_result R = getDeclContext()->lookup(getDeclName());
1363        R.first != R.second; ++R.first) {
1364     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*R.first))
1365       if (FD->getNumParams() == 1)
1366         return false;
1367   }
1368 
1369   return true;
1370 }
1371 
1372 bool CXXMethodDecl::isCopyAssignmentOperator() const {
1373   // C++0x [class.copy]p17:
1374   //  A user-declared copy assignment operator X::operator= is a non-static
1375   //  non-template member function of class X with exactly one parameter of
1376   //  type X, X&, const X&, volatile X& or const volatile X&.
1377   if (/*operator=*/getOverloadedOperator() != OO_Equal ||
1378       /*non-static*/ isStatic() ||
1379       /*non-template*/getPrimaryTemplate() || getDescribedFunctionTemplate())
1380     return false;
1381 
1382   QualType ParamType = getParamDecl(0)->getType();
1383   if (const LValueReferenceType *Ref = ParamType->getAs<LValueReferenceType>())
1384     ParamType = Ref->getPointeeType();
1385 
1386   ASTContext &Context = getASTContext();
1387   QualType ClassType
1388     = Context.getCanonicalType(Context.getTypeDeclType(getParent()));
1389   return Context.hasSameUnqualifiedType(ClassType, ParamType);
1390 }
1391 
1392 bool CXXMethodDecl::isMoveAssignmentOperator() const {
1393   // C++0x [class.copy]p19:
1394   //  A user-declared move assignment operator X::operator= is a non-static
1395   //  non-template member function of class X with exactly one parameter of type
1396   //  X&&, const X&&, volatile X&&, or const volatile X&&.
1397   if (getOverloadedOperator() != OO_Equal || isStatic() ||
1398       getPrimaryTemplate() || getDescribedFunctionTemplate())
1399     return false;
1400 
1401   QualType ParamType = getParamDecl(0)->getType();
1402   if (!isa<RValueReferenceType>(ParamType))
1403     return false;
1404   ParamType = ParamType->getPointeeType();
1405 
1406   ASTContext &Context = getASTContext();
1407   QualType ClassType
1408     = Context.getCanonicalType(Context.getTypeDeclType(getParent()));
1409   return Context.hasSameUnqualifiedType(ClassType, ParamType);
1410 }
1411 
1412 void CXXMethodDecl::addOverriddenMethod(const CXXMethodDecl *MD) {
1413   assert(MD->isCanonicalDecl() && "Method is not canonical!");
1414   assert(!MD->getParent()->isDependentContext() &&
1415          "Can't add an overridden method to a class template!");
1416 
1417   getASTContext().addOverriddenMethod(this, MD);
1418 }
1419 
1420 CXXMethodDecl::method_iterator CXXMethodDecl::begin_overridden_methods() const {
1421   return getASTContext().overridden_methods_begin(this);
1422 }
1423 
1424 CXXMethodDecl::method_iterator CXXMethodDecl::end_overridden_methods() const {
1425   return getASTContext().overridden_methods_end(this);
1426 }
1427 
1428 unsigned CXXMethodDecl::size_overridden_methods() const {
1429   return getASTContext().overridden_methods_size(this);
1430 }
1431 
1432 QualType CXXMethodDecl::getThisType(ASTContext &C) const {
1433   // C++ 9.3.2p1: The type of this in a member function of a class X is X*.
1434   // If the member function is declared const, the type of this is const X*,
1435   // if the member function is declared volatile, the type of this is
1436   // volatile X*, and if the member function is declared const volatile,
1437   // the type of this is const volatile X*.
1438 
1439   assert(isInstance() && "No 'this' for static methods!");
1440 
1441   QualType ClassTy = C.getTypeDeclType(getParent());
1442   ClassTy = C.getQualifiedType(ClassTy,
1443                                Qualifiers::fromCVRMask(getTypeQualifiers()));
1444   return C.getPointerType(ClassTy);
1445 }
1446 
1447 bool CXXMethodDecl::hasInlineBody() const {
1448   // If this function is a template instantiation, look at the template from
1449   // which it was instantiated.
1450   const FunctionDecl *CheckFn = getTemplateInstantiationPattern();
1451   if (!CheckFn)
1452     CheckFn = this;
1453 
1454   const FunctionDecl *fn;
1455   return CheckFn->hasBody(fn) && !fn->isOutOfLine();
1456 }
1457 
1458 bool CXXMethodDecl::isLambdaStaticInvoker() const {
1459   return getParent()->isLambda() &&
1460          getIdentifier() && getIdentifier()->getName() == "__invoke";
1461 }
1462 
1463 
1464 CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context,
1465                                        TypeSourceInfo *TInfo, bool IsVirtual,
1466                                        SourceLocation L, Expr *Init,
1467                                        SourceLocation R,
1468                                        SourceLocation EllipsisLoc)
1469   : Initializee(TInfo), MemberOrEllipsisLocation(EllipsisLoc), Init(Init),
1470     LParenLoc(L), RParenLoc(R), IsDelegating(false), IsVirtual(IsVirtual),
1471     IsWritten(false), SourceOrderOrNumArrayIndices(0)
1472 {
1473 }
1474 
1475 CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context,
1476                                        FieldDecl *Member,
1477                                        SourceLocation MemberLoc,
1478                                        SourceLocation L, Expr *Init,
1479                                        SourceLocation R)
1480   : Initializee(Member), MemberOrEllipsisLocation(MemberLoc), Init(Init),
1481     LParenLoc(L), RParenLoc(R), IsDelegating(false), IsVirtual(false),
1482     IsWritten(false), SourceOrderOrNumArrayIndices(0)
1483 {
1484 }
1485 
1486 CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context,
1487                                        IndirectFieldDecl *Member,
1488                                        SourceLocation MemberLoc,
1489                                        SourceLocation L, Expr *Init,
1490                                        SourceLocation R)
1491   : Initializee(Member), MemberOrEllipsisLocation(MemberLoc), Init(Init),
1492     LParenLoc(L), RParenLoc(R), IsDelegating(false), IsVirtual(false),
1493     IsWritten(false), SourceOrderOrNumArrayIndices(0)
1494 {
1495 }
1496 
1497 CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context,
1498                                        TypeSourceInfo *TInfo,
1499                                        SourceLocation L, Expr *Init,
1500                                        SourceLocation R)
1501   : Initializee(TInfo), MemberOrEllipsisLocation(), Init(Init),
1502     LParenLoc(L), RParenLoc(R), IsDelegating(true), IsVirtual(false),
1503     IsWritten(false), SourceOrderOrNumArrayIndices(0)
1504 {
1505 }
1506 
1507 CXXCtorInitializer::CXXCtorInitializer(ASTContext &Context,
1508                                        FieldDecl *Member,
1509                                        SourceLocation MemberLoc,
1510                                        SourceLocation L, Expr *Init,
1511                                        SourceLocation R,
1512                                        VarDecl **Indices,
1513                                        unsigned NumIndices)
1514   : Initializee(Member), MemberOrEllipsisLocation(MemberLoc), Init(Init),
1515     LParenLoc(L), RParenLoc(R), IsVirtual(false),
1516     IsWritten(false), SourceOrderOrNumArrayIndices(NumIndices)
1517 {
1518   VarDecl **MyIndices = reinterpret_cast<VarDecl **> (this + 1);
1519   memcpy(MyIndices, Indices, NumIndices * sizeof(VarDecl *));
1520 }
1521 
1522 CXXCtorInitializer *CXXCtorInitializer::Create(ASTContext &Context,
1523                                                FieldDecl *Member,
1524                                                SourceLocation MemberLoc,
1525                                                SourceLocation L, Expr *Init,
1526                                                SourceLocation R,
1527                                                VarDecl **Indices,
1528                                                unsigned NumIndices) {
1529   void *Mem = Context.Allocate(sizeof(CXXCtorInitializer) +
1530                                sizeof(VarDecl *) * NumIndices,
1531                                llvm::alignOf<CXXCtorInitializer>());
1532   return new (Mem) CXXCtorInitializer(Context, Member, MemberLoc, L, Init, R,
1533                                       Indices, NumIndices);
1534 }
1535 
1536 TypeLoc CXXCtorInitializer::getBaseClassLoc() const {
1537   if (isBaseInitializer())
1538     return Initializee.get<TypeSourceInfo*>()->getTypeLoc();
1539   else
1540     return TypeLoc();
1541 }
1542 
1543 const Type *CXXCtorInitializer::getBaseClass() const {
1544   if (isBaseInitializer())
1545     return Initializee.get<TypeSourceInfo*>()->getType().getTypePtr();
1546   else
1547     return 0;
1548 }
1549 
1550 SourceLocation CXXCtorInitializer::getSourceLocation() const {
1551   if (isAnyMemberInitializer())
1552     return getMemberLocation();
1553 
1554   if (isInClassMemberInitializer())
1555     return getAnyMember()->getLocation();
1556 
1557   if (TypeSourceInfo *TSInfo = Initializee.get<TypeSourceInfo*>())
1558     return TSInfo->getTypeLoc().getLocalSourceRange().getBegin();
1559 
1560   return SourceLocation();
1561 }
1562 
1563 SourceRange CXXCtorInitializer::getSourceRange() const {
1564   if (isInClassMemberInitializer()) {
1565     FieldDecl *D = getAnyMember();
1566     if (Expr *I = D->getInClassInitializer())
1567       return I->getSourceRange();
1568     return SourceRange();
1569   }
1570 
1571   return SourceRange(getSourceLocation(), getRParenLoc());
1572 }
1573 
1574 void CXXConstructorDecl::anchor() { }
1575 
1576 CXXConstructorDecl *
1577 CXXConstructorDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1578   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(CXXConstructorDecl));
1579   return new (Mem) CXXConstructorDecl(0, SourceLocation(),DeclarationNameInfo(),
1580                                       QualType(), 0, false, false, false,false);
1581 }
1582 
1583 CXXConstructorDecl *
1584 CXXConstructorDecl::Create(ASTContext &C, CXXRecordDecl *RD,
1585                            SourceLocation StartLoc,
1586                            const DeclarationNameInfo &NameInfo,
1587                            QualType T, TypeSourceInfo *TInfo,
1588                            bool isExplicit, bool isInline,
1589                            bool isImplicitlyDeclared, bool isConstexpr) {
1590   assert(NameInfo.getName().getNameKind()
1591          == DeclarationName::CXXConstructorName &&
1592          "Name must refer to a constructor");
1593   return new (C) CXXConstructorDecl(RD, StartLoc, NameInfo, T, TInfo,
1594                                     isExplicit, isInline, isImplicitlyDeclared,
1595                                     isConstexpr);
1596 }
1597 
1598 CXXConstructorDecl *CXXConstructorDecl::getTargetConstructor() const {
1599   assert(isDelegatingConstructor() && "Not a delegating constructor!");
1600   Expr *E = (*init_begin())->getInit()->IgnoreImplicit();
1601   if (CXXConstructExpr *Construct = dyn_cast<CXXConstructExpr>(E))
1602     return Construct->getConstructor();
1603 
1604   return 0;
1605 }
1606 
1607 bool CXXConstructorDecl::isDefaultConstructor() const {
1608   // C++ [class.ctor]p5:
1609   //   A default constructor for a class X is a constructor of class
1610   //   X that can be called without an argument.
1611   return (getNumParams() == 0) ||
1612          (getNumParams() > 0 && getParamDecl(0)->hasDefaultArg());
1613 }
1614 
1615 bool
1616 CXXConstructorDecl::isCopyConstructor(unsigned &TypeQuals) const {
1617   return isCopyOrMoveConstructor(TypeQuals) &&
1618          getParamDecl(0)->getType()->isLValueReferenceType();
1619 }
1620 
1621 bool CXXConstructorDecl::isMoveConstructor(unsigned &TypeQuals) const {
1622   return isCopyOrMoveConstructor(TypeQuals) &&
1623     getParamDecl(0)->getType()->isRValueReferenceType();
1624 }
1625 
1626 /// \brief Determine whether this is a copy or move constructor.
1627 bool CXXConstructorDecl::isCopyOrMoveConstructor(unsigned &TypeQuals) const {
1628   // C++ [class.copy]p2:
1629   //   A non-template constructor for class X is a copy constructor
1630   //   if its first parameter is of type X&, const X&, volatile X& or
1631   //   const volatile X&, and either there are no other parameters
1632   //   or else all other parameters have default arguments (8.3.6).
1633   // C++0x [class.copy]p3:
1634   //   A non-template constructor for class X is a move constructor if its
1635   //   first parameter is of type X&&, const X&&, volatile X&&, or
1636   //   const volatile X&&, and either there are no other parameters or else
1637   //   all other parameters have default arguments.
1638   if ((getNumParams() < 1) ||
1639       (getNumParams() > 1 && !getParamDecl(1)->hasDefaultArg()) ||
1640       (getPrimaryTemplate() != 0) ||
1641       (getDescribedFunctionTemplate() != 0))
1642     return false;
1643 
1644   const ParmVarDecl *Param = getParamDecl(0);
1645 
1646   // Do we have a reference type?
1647   const ReferenceType *ParamRefType = Param->getType()->getAs<ReferenceType>();
1648   if (!ParamRefType)
1649     return false;
1650 
1651   // Is it a reference to our class type?
1652   ASTContext &Context = getASTContext();
1653 
1654   CanQualType PointeeType
1655     = Context.getCanonicalType(ParamRefType->getPointeeType());
1656   CanQualType ClassTy
1657     = Context.getCanonicalType(Context.getTagDeclType(getParent()));
1658   if (PointeeType.getUnqualifiedType() != ClassTy)
1659     return false;
1660 
1661   // FIXME: other qualifiers?
1662 
1663   // We have a copy or move constructor.
1664   TypeQuals = PointeeType.getCVRQualifiers();
1665   return true;
1666 }
1667 
1668 bool CXXConstructorDecl::isConvertingConstructor(bool AllowExplicit) const {
1669   // C++ [class.conv.ctor]p1:
1670   //   A constructor declared without the function-specifier explicit
1671   //   that can be called with a single parameter specifies a
1672   //   conversion from the type of its first parameter to the type of
1673   //   its class. Such a constructor is called a converting
1674   //   constructor.
1675   if (isExplicit() && !AllowExplicit)
1676     return false;
1677 
1678   return (getNumParams() == 0 &&
1679           getType()->getAs<FunctionProtoType>()->isVariadic()) ||
1680          (getNumParams() == 1) ||
1681          (getNumParams() > 1 && getParamDecl(1)->hasDefaultArg());
1682 }
1683 
1684 bool CXXConstructorDecl::isSpecializationCopyingObject() const {
1685   if ((getNumParams() < 1) ||
1686       (getNumParams() > 1 && !getParamDecl(1)->hasDefaultArg()) ||
1687       (getPrimaryTemplate() == 0) ||
1688       (getDescribedFunctionTemplate() != 0))
1689     return false;
1690 
1691   const ParmVarDecl *Param = getParamDecl(0);
1692 
1693   ASTContext &Context = getASTContext();
1694   CanQualType ParamType = Context.getCanonicalType(Param->getType());
1695 
1696   // Is it the same as our our class type?
1697   CanQualType ClassTy
1698     = Context.getCanonicalType(Context.getTagDeclType(getParent()));
1699   if (ParamType.getUnqualifiedType() != ClassTy)
1700     return false;
1701 
1702   return true;
1703 }
1704 
1705 const CXXConstructorDecl *CXXConstructorDecl::getInheritedConstructor() const {
1706   // Hack: we store the inherited constructor in the overridden method table
1707   method_iterator It = begin_overridden_methods();
1708   if (It == end_overridden_methods())
1709     return 0;
1710 
1711   return cast<CXXConstructorDecl>(*It);
1712 }
1713 
1714 void
1715 CXXConstructorDecl::setInheritedConstructor(const CXXConstructorDecl *BaseCtor){
1716   // Hack: we store the inherited constructor in the overridden method table
1717   assert(size_overridden_methods() == 0 && "Base ctor already set.");
1718   addOverriddenMethod(BaseCtor);
1719 }
1720 
1721 void CXXDestructorDecl::anchor() { }
1722 
1723 CXXDestructorDecl *
1724 CXXDestructorDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1725   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(CXXDestructorDecl));
1726   return new (Mem) CXXDestructorDecl(0, SourceLocation(), DeclarationNameInfo(),
1727                                    QualType(), 0, false, false);
1728 }
1729 
1730 CXXDestructorDecl *
1731 CXXDestructorDecl::Create(ASTContext &C, CXXRecordDecl *RD,
1732                           SourceLocation StartLoc,
1733                           const DeclarationNameInfo &NameInfo,
1734                           QualType T, TypeSourceInfo *TInfo,
1735                           bool isInline, bool isImplicitlyDeclared) {
1736   assert(NameInfo.getName().getNameKind()
1737          == DeclarationName::CXXDestructorName &&
1738          "Name must refer to a destructor");
1739   return new (C) CXXDestructorDecl(RD, StartLoc, NameInfo, T, TInfo, isInline,
1740                                    isImplicitlyDeclared);
1741 }
1742 
1743 void CXXConversionDecl::anchor() { }
1744 
1745 CXXConversionDecl *
1746 CXXConversionDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1747   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(CXXConversionDecl));
1748   return new (Mem) CXXConversionDecl(0, SourceLocation(), DeclarationNameInfo(),
1749                                      QualType(), 0, false, false, false,
1750                                      SourceLocation());
1751 }
1752 
1753 CXXConversionDecl *
1754 CXXConversionDecl::Create(ASTContext &C, CXXRecordDecl *RD,
1755                           SourceLocation StartLoc,
1756                           const DeclarationNameInfo &NameInfo,
1757                           QualType T, TypeSourceInfo *TInfo,
1758                           bool isInline, bool isExplicit,
1759                           bool isConstexpr, SourceLocation EndLocation) {
1760   assert(NameInfo.getName().getNameKind()
1761          == DeclarationName::CXXConversionFunctionName &&
1762          "Name must refer to a conversion function");
1763   return new (C) CXXConversionDecl(RD, StartLoc, NameInfo, T, TInfo,
1764                                    isInline, isExplicit, isConstexpr,
1765                                    EndLocation);
1766 }
1767 
1768 bool CXXConversionDecl::isLambdaToBlockPointerConversion() const {
1769   return isImplicit() && getParent()->isLambda() &&
1770          getConversionType()->isBlockPointerType();
1771 }
1772 
1773 void LinkageSpecDecl::anchor() { }
1774 
1775 LinkageSpecDecl *LinkageSpecDecl::Create(ASTContext &C,
1776                                          DeclContext *DC,
1777                                          SourceLocation ExternLoc,
1778                                          SourceLocation LangLoc,
1779                                          LanguageIDs Lang,
1780                                          SourceLocation RBraceLoc) {
1781   return new (C) LinkageSpecDecl(DC, ExternLoc, LangLoc, Lang, RBraceLoc);
1782 }
1783 
1784 LinkageSpecDecl *LinkageSpecDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1785   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(LinkageSpecDecl));
1786   return new (Mem) LinkageSpecDecl(0, SourceLocation(), SourceLocation(),
1787                                    lang_c, SourceLocation());
1788 }
1789 
1790 void UsingDirectiveDecl::anchor() { }
1791 
1792 UsingDirectiveDecl *UsingDirectiveDecl::Create(ASTContext &C, DeclContext *DC,
1793                                                SourceLocation L,
1794                                                SourceLocation NamespaceLoc,
1795                                            NestedNameSpecifierLoc QualifierLoc,
1796                                                SourceLocation IdentLoc,
1797                                                NamedDecl *Used,
1798                                                DeclContext *CommonAncestor) {
1799   if (NamespaceDecl *NS = dyn_cast_or_null<NamespaceDecl>(Used))
1800     Used = NS->getOriginalNamespace();
1801   return new (C) UsingDirectiveDecl(DC, L, NamespaceLoc, QualifierLoc,
1802                                     IdentLoc, Used, CommonAncestor);
1803 }
1804 
1805 UsingDirectiveDecl *
1806 UsingDirectiveDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1807   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(UsingDirectiveDecl));
1808   return new (Mem) UsingDirectiveDecl(0, SourceLocation(), SourceLocation(),
1809                                       NestedNameSpecifierLoc(),
1810                                       SourceLocation(), 0, 0);
1811 }
1812 
1813 NamespaceDecl *UsingDirectiveDecl::getNominatedNamespace() {
1814   if (NamespaceAliasDecl *NA =
1815         dyn_cast_or_null<NamespaceAliasDecl>(NominatedNamespace))
1816     return NA->getNamespace();
1817   return cast_or_null<NamespaceDecl>(NominatedNamespace);
1818 }
1819 
1820 void NamespaceDecl::anchor() { }
1821 
1822 NamespaceDecl::NamespaceDecl(DeclContext *DC, bool Inline,
1823                              SourceLocation StartLoc,
1824                              SourceLocation IdLoc, IdentifierInfo *Id,
1825                              NamespaceDecl *PrevDecl)
1826   : NamedDecl(Namespace, DC, IdLoc, Id), DeclContext(Namespace),
1827     LocStart(StartLoc), RBraceLoc(), AnonOrFirstNamespaceAndInline(0, Inline)
1828 {
1829   setPreviousDeclaration(PrevDecl);
1830 
1831   if (PrevDecl)
1832     AnonOrFirstNamespaceAndInline.setPointer(PrevDecl->getOriginalNamespace());
1833 }
1834 
1835 NamespaceDecl *NamespaceDecl::Create(ASTContext &C, DeclContext *DC,
1836                                      bool Inline, SourceLocation StartLoc,
1837                                      SourceLocation IdLoc, IdentifierInfo *Id,
1838                                      NamespaceDecl *PrevDecl) {
1839   return new (C) NamespaceDecl(DC, Inline, StartLoc, IdLoc, Id, PrevDecl);
1840 }
1841 
1842 NamespaceDecl *NamespaceDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1843   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(NamespaceDecl));
1844   return new (Mem) NamespaceDecl(0, false, SourceLocation(), SourceLocation(),
1845                                  0, 0);
1846 }
1847 
1848 void NamespaceAliasDecl::anchor() { }
1849 
1850 NamespaceAliasDecl *NamespaceAliasDecl::Create(ASTContext &C, DeclContext *DC,
1851                                                SourceLocation UsingLoc,
1852                                                SourceLocation AliasLoc,
1853                                                IdentifierInfo *Alias,
1854                                            NestedNameSpecifierLoc QualifierLoc,
1855                                                SourceLocation IdentLoc,
1856                                                NamedDecl *Namespace) {
1857   if (NamespaceDecl *NS = dyn_cast_or_null<NamespaceDecl>(Namespace))
1858     Namespace = NS->getOriginalNamespace();
1859   return new (C) NamespaceAliasDecl(DC, UsingLoc, AliasLoc, Alias,
1860                                     QualifierLoc, IdentLoc, Namespace);
1861 }
1862 
1863 NamespaceAliasDecl *
1864 NamespaceAliasDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1865   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(NamespaceAliasDecl));
1866   return new (Mem) NamespaceAliasDecl(0, SourceLocation(), SourceLocation(), 0,
1867                                       NestedNameSpecifierLoc(),
1868                                       SourceLocation(), 0);
1869 }
1870 
1871 void UsingShadowDecl::anchor() { }
1872 
1873 UsingShadowDecl *
1874 UsingShadowDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1875   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(UsingShadowDecl));
1876   return new (Mem) UsingShadowDecl(0, SourceLocation(), 0, 0);
1877 }
1878 
1879 UsingDecl *UsingShadowDecl::getUsingDecl() const {
1880   const UsingShadowDecl *Shadow = this;
1881   while (const UsingShadowDecl *NextShadow =
1882          dyn_cast<UsingShadowDecl>(Shadow->UsingOrNextShadow))
1883     Shadow = NextShadow;
1884   return cast<UsingDecl>(Shadow->UsingOrNextShadow);
1885 }
1886 
1887 void UsingDecl::anchor() { }
1888 
1889 void UsingDecl::addShadowDecl(UsingShadowDecl *S) {
1890   assert(std::find(shadow_begin(), shadow_end(), S) == shadow_end() &&
1891          "declaration already in set");
1892   assert(S->getUsingDecl() == this);
1893 
1894   if (FirstUsingShadow.getPointer())
1895     S->UsingOrNextShadow = FirstUsingShadow.getPointer();
1896   FirstUsingShadow.setPointer(S);
1897 }
1898 
1899 void UsingDecl::removeShadowDecl(UsingShadowDecl *S) {
1900   assert(std::find(shadow_begin(), shadow_end(), S) != shadow_end() &&
1901          "declaration not in set");
1902   assert(S->getUsingDecl() == this);
1903 
1904   // Remove S from the shadow decl chain. This is O(n) but hopefully rare.
1905 
1906   if (FirstUsingShadow.getPointer() == S) {
1907     FirstUsingShadow.setPointer(
1908       dyn_cast<UsingShadowDecl>(S->UsingOrNextShadow));
1909     S->UsingOrNextShadow = this;
1910     return;
1911   }
1912 
1913   UsingShadowDecl *Prev = FirstUsingShadow.getPointer();
1914   while (Prev->UsingOrNextShadow != S)
1915     Prev = cast<UsingShadowDecl>(Prev->UsingOrNextShadow);
1916   Prev->UsingOrNextShadow = S->UsingOrNextShadow;
1917   S->UsingOrNextShadow = this;
1918 }
1919 
1920 UsingDecl *UsingDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation UL,
1921                              NestedNameSpecifierLoc QualifierLoc,
1922                              const DeclarationNameInfo &NameInfo,
1923                              bool IsTypeNameArg) {
1924   return new (C) UsingDecl(DC, UL, QualifierLoc, NameInfo, IsTypeNameArg);
1925 }
1926 
1927 UsingDecl *UsingDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1928   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(UsingDecl));
1929   return new (Mem) UsingDecl(0, SourceLocation(), NestedNameSpecifierLoc(),
1930                              DeclarationNameInfo(), false);
1931 }
1932 
1933 void UnresolvedUsingValueDecl::anchor() { }
1934 
1935 UnresolvedUsingValueDecl *
1936 UnresolvedUsingValueDecl::Create(ASTContext &C, DeclContext *DC,
1937                                  SourceLocation UsingLoc,
1938                                  NestedNameSpecifierLoc QualifierLoc,
1939                                  const DeclarationNameInfo &NameInfo) {
1940   return new (C) UnresolvedUsingValueDecl(DC, C.DependentTy, UsingLoc,
1941                                           QualifierLoc, NameInfo);
1942 }
1943 
1944 UnresolvedUsingValueDecl *
1945 UnresolvedUsingValueDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1946   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(UnresolvedUsingValueDecl));
1947   return new (Mem) UnresolvedUsingValueDecl(0, QualType(), SourceLocation(),
1948                                             NestedNameSpecifierLoc(),
1949                                             DeclarationNameInfo());
1950 }
1951 
1952 void UnresolvedUsingTypenameDecl::anchor() { }
1953 
1954 UnresolvedUsingTypenameDecl *
1955 UnresolvedUsingTypenameDecl::Create(ASTContext &C, DeclContext *DC,
1956                                     SourceLocation UsingLoc,
1957                                     SourceLocation TypenameLoc,
1958                                     NestedNameSpecifierLoc QualifierLoc,
1959                                     SourceLocation TargetNameLoc,
1960                                     DeclarationName TargetName) {
1961   return new (C) UnresolvedUsingTypenameDecl(DC, UsingLoc, TypenameLoc,
1962                                              QualifierLoc, TargetNameLoc,
1963                                              TargetName.getAsIdentifierInfo());
1964 }
1965 
1966 UnresolvedUsingTypenameDecl *
1967 UnresolvedUsingTypenameDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
1968   void *Mem = AllocateDeserializedDecl(C, ID,
1969                                        sizeof(UnresolvedUsingTypenameDecl));
1970   return new (Mem) UnresolvedUsingTypenameDecl(0, SourceLocation(),
1971                                                SourceLocation(),
1972                                                NestedNameSpecifierLoc(),
1973                                                SourceLocation(),
1974                                                0);
1975 }
1976 
1977 void StaticAssertDecl::anchor() { }
1978 
1979 StaticAssertDecl *StaticAssertDecl::Create(ASTContext &C, DeclContext *DC,
1980                                            SourceLocation StaticAssertLoc,
1981                                            Expr *AssertExpr,
1982                                            StringLiteral *Message,
1983                                            SourceLocation RParenLoc) {
1984   return new (C) StaticAssertDecl(DC, StaticAssertLoc, AssertExpr, Message,
1985                                   RParenLoc);
1986 }
1987 
1988 StaticAssertDecl *StaticAssertDecl::CreateDeserialized(ASTContext &C,
1989                                                        unsigned ID) {
1990   void *Mem = AllocateDeserializedDecl(C, ID, sizeof(StaticAssertDecl));
1991   return new (Mem) StaticAssertDecl(0, SourceLocation(), 0, 0,SourceLocation());
1992 }
1993 
1994 static const char *getAccessName(AccessSpecifier AS) {
1995   switch (AS) {
1996     case AS_none:
1997       llvm_unreachable("Invalid access specifier!");
1998     case AS_public:
1999       return "public";
2000     case AS_private:
2001       return "private";
2002     case AS_protected:
2003       return "protected";
2004   }
2005   llvm_unreachable("Invalid access specifier!");
2006 }
2007 
2008 const DiagnosticBuilder &clang::operator<<(const DiagnosticBuilder &DB,
2009                                            AccessSpecifier AS) {
2010   return DB << getAccessName(AS);
2011 }
2012 
2013 const PartialDiagnostic &clang::operator<<(const PartialDiagnostic &DB,
2014                                            AccessSpecifier AS) {
2015   return DB << getAccessName(AS);
2016 }
2017