1 //===--- ASTContext.cpp - Context to hold long-lived AST nodes ------------===//
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 ASTContext interface.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/AST/ASTContext.h"
15 #include "clang/AST/CharUnits.h"
16 #include "clang/AST/DeclCXX.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/DeclTemplate.h"
19 #include "clang/AST/TypeLoc.h"
20 #include "clang/AST/Expr.h"
21 #include "clang/AST/ExprCXX.h"
22 #include "clang/AST/ExternalASTSource.h"
23 #include "clang/AST/ASTMutationListener.h"
24 #include "clang/AST/RecordLayout.h"
25 #include "clang/AST/Mangle.h"
26 #include "clang/Basic/Builtins.h"
27 #include "clang/Basic/SourceManager.h"
28 #include "clang/Basic/TargetInfo.h"
29 #include "llvm/ADT/SmallString.h"
30 #include "llvm/ADT/StringExtras.h"
31 #include "llvm/Support/MathExtras.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include "llvm/Support/Capacity.h"
34 #include "CXXABI.h"
35 #include <map>
36 
37 using namespace clang;
38 
39 unsigned ASTContext::NumImplicitDefaultConstructors;
40 unsigned ASTContext::NumImplicitDefaultConstructorsDeclared;
41 unsigned ASTContext::NumImplicitCopyConstructors;
42 unsigned ASTContext::NumImplicitCopyConstructorsDeclared;
43 unsigned ASTContext::NumImplicitMoveConstructors;
44 unsigned ASTContext::NumImplicitMoveConstructorsDeclared;
45 unsigned ASTContext::NumImplicitCopyAssignmentOperators;
46 unsigned ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
47 unsigned ASTContext::NumImplicitMoveAssignmentOperators;
48 unsigned ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
49 unsigned ASTContext::NumImplicitDestructors;
50 unsigned ASTContext::NumImplicitDestructorsDeclared;
51 
52 enum FloatingRank {
53   FloatRank, DoubleRank, LongDoubleRank
54 };
55 
56 void
57 ASTContext::CanonicalTemplateTemplateParm::Profile(llvm::FoldingSetNodeID &ID,
58                                                TemplateTemplateParmDecl *Parm) {
59   ID.AddInteger(Parm->getDepth());
60   ID.AddInteger(Parm->getPosition());
61   ID.AddBoolean(Parm->isParameterPack());
62 
63   TemplateParameterList *Params = Parm->getTemplateParameters();
64   ID.AddInteger(Params->size());
65   for (TemplateParameterList::const_iterator P = Params->begin(),
66                                           PEnd = Params->end();
67        P != PEnd; ++P) {
68     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
69       ID.AddInteger(0);
70       ID.AddBoolean(TTP->isParameterPack());
71       continue;
72     }
73 
74     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
75       ID.AddInteger(1);
76       ID.AddBoolean(NTTP->isParameterPack());
77       ID.AddPointer(NTTP->getType().getAsOpaquePtr());
78       if (NTTP->isExpandedParameterPack()) {
79         ID.AddBoolean(true);
80         ID.AddInteger(NTTP->getNumExpansionTypes());
81         for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I)
82           ID.AddPointer(NTTP->getExpansionType(I).getAsOpaquePtr());
83       } else
84         ID.AddBoolean(false);
85       continue;
86     }
87 
88     TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
89     ID.AddInteger(2);
90     Profile(ID, TTP);
91   }
92 }
93 
94 TemplateTemplateParmDecl *
95 ASTContext::getCanonicalTemplateTemplateParmDecl(
96                                           TemplateTemplateParmDecl *TTP) const {
97   // Check if we already have a canonical template template parameter.
98   llvm::FoldingSetNodeID ID;
99   CanonicalTemplateTemplateParm::Profile(ID, TTP);
100   void *InsertPos = 0;
101   CanonicalTemplateTemplateParm *Canonical
102     = CanonTemplateTemplateParms.FindNodeOrInsertPos(ID, InsertPos);
103   if (Canonical)
104     return Canonical->getParam();
105 
106   // Build a canonical template parameter list.
107   TemplateParameterList *Params = TTP->getTemplateParameters();
108   SmallVector<NamedDecl *, 4> CanonParams;
109   CanonParams.reserve(Params->size());
110   for (TemplateParameterList::const_iterator P = Params->begin(),
111                                           PEnd = Params->end();
112        P != PEnd; ++P) {
113     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P))
114       CanonParams.push_back(
115                   TemplateTypeParmDecl::Create(*this, getTranslationUnitDecl(),
116                                                SourceLocation(),
117                                                SourceLocation(),
118                                                TTP->getDepth(),
119                                                TTP->getIndex(), 0, false,
120                                                TTP->isParameterPack()));
121     else if (NonTypeTemplateParmDecl *NTTP
122              = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
123       QualType T = getCanonicalType(NTTP->getType());
124       TypeSourceInfo *TInfo = getTrivialTypeSourceInfo(T);
125       NonTypeTemplateParmDecl *Param;
126       if (NTTP->isExpandedParameterPack()) {
127         SmallVector<QualType, 2> ExpandedTypes;
128         SmallVector<TypeSourceInfo *, 2> ExpandedTInfos;
129         for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I) {
130           ExpandedTypes.push_back(getCanonicalType(NTTP->getExpansionType(I)));
131           ExpandedTInfos.push_back(
132                                 getTrivialTypeSourceInfo(ExpandedTypes.back()));
133         }
134 
135         Param = NonTypeTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
136                                                 SourceLocation(),
137                                                 SourceLocation(),
138                                                 NTTP->getDepth(),
139                                                 NTTP->getPosition(), 0,
140                                                 T,
141                                                 TInfo,
142                                                 ExpandedTypes.data(),
143                                                 ExpandedTypes.size(),
144                                                 ExpandedTInfos.data());
145       } else {
146         Param = NonTypeTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
147                                                 SourceLocation(),
148                                                 SourceLocation(),
149                                                 NTTP->getDepth(),
150                                                 NTTP->getPosition(), 0,
151                                                 T,
152                                                 NTTP->isParameterPack(),
153                                                 TInfo);
154       }
155       CanonParams.push_back(Param);
156 
157     } else
158       CanonParams.push_back(getCanonicalTemplateTemplateParmDecl(
159                                            cast<TemplateTemplateParmDecl>(*P)));
160   }
161 
162   TemplateTemplateParmDecl *CanonTTP
163     = TemplateTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
164                                        SourceLocation(), TTP->getDepth(),
165                                        TTP->getPosition(),
166                                        TTP->isParameterPack(),
167                                        0,
168                          TemplateParameterList::Create(*this, SourceLocation(),
169                                                        SourceLocation(),
170                                                        CanonParams.data(),
171                                                        CanonParams.size(),
172                                                        SourceLocation()));
173 
174   // Get the new insert position for the node we care about.
175   Canonical = CanonTemplateTemplateParms.FindNodeOrInsertPos(ID, InsertPos);
176   assert(Canonical == 0 && "Shouldn't be in the map!");
177   (void)Canonical;
178 
179   // Create the canonical template template parameter entry.
180   Canonical = new (*this) CanonicalTemplateTemplateParm(CanonTTP);
181   CanonTemplateTemplateParms.InsertNode(Canonical, InsertPos);
182   return CanonTTP;
183 }
184 
185 CXXABI *ASTContext::createCXXABI(const TargetInfo &T) {
186   if (!LangOpts.CPlusPlus) return 0;
187 
188   switch (T.getCXXABI()) {
189   case CXXABI_ARM:
190     return CreateARMCXXABI(*this);
191   case CXXABI_Itanium:
192     return CreateItaniumCXXABI(*this);
193   case CXXABI_Microsoft:
194     return CreateMicrosoftCXXABI(*this);
195   }
196   return 0;
197 }
198 
199 static const LangAS::Map *getAddressSpaceMap(const TargetInfo &T,
200                                              const LangOptions &LOpts) {
201   if (LOpts.FakeAddressSpaceMap) {
202     // The fake address space map must have a distinct entry for each
203     // language-specific address space.
204     static const unsigned FakeAddrSpaceMap[] = {
205       1, // opencl_global
206       2, // opencl_local
207       3  // opencl_constant
208     };
209     return &FakeAddrSpaceMap;
210   } else {
211     return &T.getAddressSpaceMap();
212   }
213 }
214 
215 ASTContext::ASTContext(LangOptions& LOpts, SourceManager &SM,
216                        const TargetInfo *t,
217                        IdentifierTable &idents, SelectorTable &sels,
218                        Builtin::Context &builtins,
219                        unsigned size_reserve,
220                        bool DelayInitialization)
221   : FunctionProtoTypes(this_()),
222     TemplateSpecializationTypes(this_()),
223     DependentTemplateSpecializationTypes(this_()),
224     SubstTemplateTemplateParmPacks(this_()),
225     GlobalNestedNameSpecifier(0),
226     Int128Decl(0), UInt128Decl(0),
227     ObjCIdDecl(0), ObjCSelDecl(0), ObjCClassDecl(0),
228     CFConstantStringTypeDecl(0), ObjCInstanceTypeDecl(0),
229     FILEDecl(0),
230     jmp_bufDecl(0), sigjmp_bufDecl(0), BlockDescriptorType(0),
231     BlockDescriptorExtendedType(0), cudaConfigureCallDecl(0),
232     NullTypeSourceInfo(QualType()),
233     SourceMgr(SM), LangOpts(LOpts),
234     AddrSpaceMap(0), Target(t), PrintingPolicy(LOpts),
235     Idents(idents), Selectors(sels),
236     BuiltinInfo(builtins),
237     DeclarationNames(*this),
238     ExternalSource(0), Listener(0),
239     LastSDM(0, 0),
240     UniqueBlockByRefTypeID(0)
241 {
242   if (size_reserve > 0) Types.reserve(size_reserve);
243   TUDecl = TranslationUnitDecl::Create(*this);
244 
245   if (!DelayInitialization) {
246     assert(t && "No target supplied for ASTContext initialization");
247     InitBuiltinTypes(*t);
248   }
249 }
250 
251 ASTContext::~ASTContext() {
252   // Release the DenseMaps associated with DeclContext objects.
253   // FIXME: Is this the ideal solution?
254   ReleaseDeclContextMaps();
255 
256   // Call all of the deallocation functions.
257   for (unsigned I = 0, N = Deallocations.size(); I != N; ++I)
258     Deallocations[I].first(Deallocations[I].second);
259 
260   // Release all of the memory associated with overridden C++ methods.
261   for (llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::iterator
262          OM = OverriddenMethods.begin(), OMEnd = OverriddenMethods.end();
263        OM != OMEnd; ++OM)
264     OM->second.Destroy();
265 
266   // ASTRecordLayout objects in ASTRecordLayouts must always be destroyed
267   // because they can contain DenseMaps.
268   for (llvm::DenseMap<const ObjCContainerDecl*,
269        const ASTRecordLayout*>::iterator
270        I = ObjCLayouts.begin(), E = ObjCLayouts.end(); I != E; )
271     // Increment in loop to prevent using deallocated memory.
272     if (ASTRecordLayout *R = const_cast<ASTRecordLayout*>((I++)->second))
273       R->Destroy(*this);
274 
275   for (llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*>::iterator
276        I = ASTRecordLayouts.begin(), E = ASTRecordLayouts.end(); I != E; ) {
277     // Increment in loop to prevent using deallocated memory.
278     if (ASTRecordLayout *R = const_cast<ASTRecordLayout*>((I++)->second))
279       R->Destroy(*this);
280   }
281 
282   for (llvm::DenseMap<const Decl*, AttrVec*>::iterator A = DeclAttrs.begin(),
283                                                     AEnd = DeclAttrs.end();
284        A != AEnd; ++A)
285     A->second->~AttrVec();
286 }
287 
288 void ASTContext::AddDeallocation(void (*Callback)(void*), void *Data) {
289   Deallocations.push_back(std::make_pair(Callback, Data));
290 }
291 
292 void
293 ASTContext::setExternalSource(llvm::OwningPtr<ExternalASTSource> &Source) {
294   ExternalSource.reset(Source.take());
295 }
296 
297 void ASTContext::PrintStats() const {
298   llvm::errs() << "\n*** AST Context Stats:\n";
299   llvm::errs() << "  " << Types.size() << " types total.\n";
300 
301   unsigned counts[] = {
302 #define TYPE(Name, Parent) 0,
303 #define ABSTRACT_TYPE(Name, Parent)
304 #include "clang/AST/TypeNodes.def"
305     0 // Extra
306   };
307 
308   for (unsigned i = 0, e = Types.size(); i != e; ++i) {
309     Type *T = Types[i];
310     counts[(unsigned)T->getTypeClass()]++;
311   }
312 
313   unsigned Idx = 0;
314   unsigned TotalBytes = 0;
315 #define TYPE(Name, Parent)                                              \
316   if (counts[Idx])                                                      \
317     llvm::errs() << "    " << counts[Idx] << " " << #Name               \
318                  << " types\n";                                         \
319   TotalBytes += counts[Idx] * sizeof(Name##Type);                       \
320   ++Idx;
321 #define ABSTRACT_TYPE(Name, Parent)
322 #include "clang/AST/TypeNodes.def"
323 
324   llvm::errs() << "Total bytes = " << TotalBytes << "\n";
325 
326   // Implicit special member functions.
327   llvm::errs() << NumImplicitDefaultConstructorsDeclared << "/"
328                << NumImplicitDefaultConstructors
329                << " implicit default constructors created\n";
330   llvm::errs() << NumImplicitCopyConstructorsDeclared << "/"
331                << NumImplicitCopyConstructors
332                << " implicit copy constructors created\n";
333   if (getLangOptions().CPlusPlus)
334     llvm::errs() << NumImplicitMoveConstructorsDeclared << "/"
335                  << NumImplicitMoveConstructors
336                  << " implicit move constructors created\n";
337   llvm::errs() << NumImplicitCopyAssignmentOperatorsDeclared << "/"
338                << NumImplicitCopyAssignmentOperators
339                << " implicit copy assignment operators created\n";
340   if (getLangOptions().CPlusPlus)
341     llvm::errs() << NumImplicitMoveAssignmentOperatorsDeclared << "/"
342                  << NumImplicitMoveAssignmentOperators
343                  << " implicit move assignment operators created\n";
344   llvm::errs() << NumImplicitDestructorsDeclared << "/"
345                << NumImplicitDestructors
346                << " implicit destructors created\n";
347 
348   if (ExternalSource.get()) {
349     llvm::errs() << "\n";
350     ExternalSource->PrintStats();
351   }
352 
353   BumpAlloc.PrintStats();
354 }
355 
356 TypedefDecl *ASTContext::getInt128Decl() const {
357   if (!Int128Decl) {
358     TypeSourceInfo *TInfo = getTrivialTypeSourceInfo(Int128Ty);
359     Int128Decl = TypedefDecl::Create(const_cast<ASTContext &>(*this),
360                                      getTranslationUnitDecl(),
361                                      SourceLocation(),
362                                      SourceLocation(),
363                                      &Idents.get("__int128_t"),
364                                      TInfo);
365   }
366 
367   return Int128Decl;
368 }
369 
370 TypedefDecl *ASTContext::getUInt128Decl() const {
371   if (!UInt128Decl) {
372     TypeSourceInfo *TInfo = getTrivialTypeSourceInfo(UnsignedInt128Ty);
373     UInt128Decl = TypedefDecl::Create(const_cast<ASTContext &>(*this),
374                                      getTranslationUnitDecl(),
375                                      SourceLocation(),
376                                      SourceLocation(),
377                                      &Idents.get("__uint128_t"),
378                                      TInfo);
379   }
380 
381   return UInt128Decl;
382 }
383 
384 void ASTContext::InitBuiltinType(CanQualType &R, BuiltinType::Kind K) {
385   BuiltinType *Ty = new (*this, TypeAlignment) BuiltinType(K);
386   R = CanQualType::CreateUnsafe(QualType(Ty, 0));
387   Types.push_back(Ty);
388 }
389 
390 void ASTContext::InitBuiltinTypes(const TargetInfo &Target) {
391   assert((!this->Target || this->Target == &Target) &&
392          "Incorrect target reinitialization");
393   assert(VoidTy.isNull() && "Context reinitialized?");
394 
395   this->Target = &Target;
396 
397   ABI.reset(createCXXABI(Target));
398   AddrSpaceMap = getAddressSpaceMap(Target, LangOpts);
399 
400   // C99 6.2.5p19.
401   InitBuiltinType(VoidTy,              BuiltinType::Void);
402 
403   // C99 6.2.5p2.
404   InitBuiltinType(BoolTy,              BuiltinType::Bool);
405   // C99 6.2.5p3.
406   if (LangOpts.CharIsSigned)
407     InitBuiltinType(CharTy,            BuiltinType::Char_S);
408   else
409     InitBuiltinType(CharTy,            BuiltinType::Char_U);
410   // C99 6.2.5p4.
411   InitBuiltinType(SignedCharTy,        BuiltinType::SChar);
412   InitBuiltinType(ShortTy,             BuiltinType::Short);
413   InitBuiltinType(IntTy,               BuiltinType::Int);
414   InitBuiltinType(LongTy,              BuiltinType::Long);
415   InitBuiltinType(LongLongTy,          BuiltinType::LongLong);
416 
417   // C99 6.2.5p6.
418   InitBuiltinType(UnsignedCharTy,      BuiltinType::UChar);
419   InitBuiltinType(UnsignedShortTy,     BuiltinType::UShort);
420   InitBuiltinType(UnsignedIntTy,       BuiltinType::UInt);
421   InitBuiltinType(UnsignedLongTy,      BuiltinType::ULong);
422   InitBuiltinType(UnsignedLongLongTy,  BuiltinType::ULongLong);
423 
424   // C99 6.2.5p10.
425   InitBuiltinType(FloatTy,             BuiltinType::Float);
426   InitBuiltinType(DoubleTy,            BuiltinType::Double);
427   InitBuiltinType(LongDoubleTy,        BuiltinType::LongDouble);
428 
429   // GNU extension, 128-bit integers.
430   InitBuiltinType(Int128Ty,            BuiltinType::Int128);
431   InitBuiltinType(UnsignedInt128Ty,    BuiltinType::UInt128);
432 
433   if (LangOpts.CPlusPlus) { // C++ 3.9.1p5
434     if (TargetInfo::isTypeSigned(Target.getWCharType()))
435       InitBuiltinType(WCharTy,           BuiltinType::WChar_S);
436     else  // -fshort-wchar makes wchar_t be unsigned.
437       InitBuiltinType(WCharTy,           BuiltinType::WChar_U);
438   } else // C99
439     WCharTy = getFromTargetType(Target.getWCharType());
440 
441   if (LangOpts.CPlusPlus) // C++0x 3.9.1p5, extension for C++
442     InitBuiltinType(Char16Ty,           BuiltinType::Char16);
443   else // C99
444     Char16Ty = getFromTargetType(Target.getChar16Type());
445 
446   if (LangOpts.CPlusPlus) // C++0x 3.9.1p5, extension for C++
447     InitBuiltinType(Char32Ty,           BuiltinType::Char32);
448   else // C99
449     Char32Ty = getFromTargetType(Target.getChar32Type());
450 
451   // Placeholder type for type-dependent expressions whose type is
452   // completely unknown. No code should ever check a type against
453   // DependentTy and users should never see it; however, it is here to
454   // help diagnose failures to properly check for type-dependent
455   // expressions.
456   InitBuiltinType(DependentTy,         BuiltinType::Dependent);
457 
458   // Placeholder type for functions.
459   InitBuiltinType(OverloadTy,          BuiltinType::Overload);
460 
461   // Placeholder type for bound members.
462   InitBuiltinType(BoundMemberTy,       BuiltinType::BoundMember);
463 
464   // "any" type; useful for debugger-like clients.
465   InitBuiltinType(UnknownAnyTy,        BuiltinType::UnknownAny);
466 
467   // C99 6.2.5p11.
468   FloatComplexTy      = getComplexType(FloatTy);
469   DoubleComplexTy     = getComplexType(DoubleTy);
470   LongDoubleComplexTy = getComplexType(LongDoubleTy);
471 
472   BuiltinVaListType = QualType();
473 
474   // Builtin types for 'id', 'Class', and 'SEL'.
475   InitBuiltinType(ObjCBuiltinIdTy, BuiltinType::ObjCId);
476   InitBuiltinType(ObjCBuiltinClassTy, BuiltinType::ObjCClass);
477   InitBuiltinType(ObjCBuiltinSelTy, BuiltinType::ObjCSel);
478 
479   ObjCConstantStringType = QualType();
480 
481   // void * type
482   VoidPtrTy = getPointerType(VoidTy);
483 
484   // nullptr type (C++0x 2.14.7)
485   InitBuiltinType(NullPtrTy,           BuiltinType::NullPtr);
486 }
487 
488 DiagnosticsEngine &ASTContext::getDiagnostics() const {
489   return SourceMgr.getDiagnostics();
490 }
491 
492 AttrVec& ASTContext::getDeclAttrs(const Decl *D) {
493   AttrVec *&Result = DeclAttrs[D];
494   if (!Result) {
495     void *Mem = Allocate(sizeof(AttrVec));
496     Result = new (Mem) AttrVec;
497   }
498 
499   return *Result;
500 }
501 
502 /// \brief Erase the attributes corresponding to the given declaration.
503 void ASTContext::eraseDeclAttrs(const Decl *D) {
504   llvm::DenseMap<const Decl*, AttrVec*>::iterator Pos = DeclAttrs.find(D);
505   if (Pos != DeclAttrs.end()) {
506     Pos->second->~AttrVec();
507     DeclAttrs.erase(Pos);
508   }
509 }
510 
511 MemberSpecializationInfo *
512 ASTContext::getInstantiatedFromStaticDataMember(const VarDecl *Var) {
513   assert(Var->isStaticDataMember() && "Not a static data member");
514   llvm::DenseMap<const VarDecl *, MemberSpecializationInfo *>::iterator Pos
515     = InstantiatedFromStaticDataMember.find(Var);
516   if (Pos == InstantiatedFromStaticDataMember.end())
517     return 0;
518 
519   return Pos->second;
520 }
521 
522 void
523 ASTContext::setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl,
524                                                 TemplateSpecializationKind TSK,
525                                           SourceLocation PointOfInstantiation) {
526   assert(Inst->isStaticDataMember() && "Not a static data member");
527   assert(Tmpl->isStaticDataMember() && "Not a static data member");
528   assert(!InstantiatedFromStaticDataMember[Inst] &&
529          "Already noted what static data member was instantiated from");
530   InstantiatedFromStaticDataMember[Inst]
531     = new (*this) MemberSpecializationInfo(Tmpl, TSK, PointOfInstantiation);
532 }
533 
534 FunctionDecl *ASTContext::getClassScopeSpecializationPattern(
535                                                      const FunctionDecl *FD){
536   assert(FD && "Specialization is 0");
537   llvm::DenseMap<const FunctionDecl*, FunctionDecl *>::const_iterator Pos
538     = ClassScopeSpecializationPattern.find(FD);
539   if (Pos == ClassScopeSpecializationPattern.end())
540     return 0;
541 
542   return Pos->second;
543 }
544 
545 void ASTContext::setClassScopeSpecializationPattern(FunctionDecl *FD,
546                                         FunctionDecl *Pattern) {
547   assert(FD && "Specialization is 0");
548   assert(Pattern && "Class scope specialization pattern is 0");
549   ClassScopeSpecializationPattern[FD] = Pattern;
550 }
551 
552 NamedDecl *
553 ASTContext::getInstantiatedFromUsingDecl(UsingDecl *UUD) {
554   llvm::DenseMap<UsingDecl *, NamedDecl *>::const_iterator Pos
555     = InstantiatedFromUsingDecl.find(UUD);
556   if (Pos == InstantiatedFromUsingDecl.end())
557     return 0;
558 
559   return Pos->second;
560 }
561 
562 void
563 ASTContext::setInstantiatedFromUsingDecl(UsingDecl *Inst, NamedDecl *Pattern) {
564   assert((isa<UsingDecl>(Pattern) ||
565           isa<UnresolvedUsingValueDecl>(Pattern) ||
566           isa<UnresolvedUsingTypenameDecl>(Pattern)) &&
567          "pattern decl is not a using decl");
568   assert(!InstantiatedFromUsingDecl[Inst] && "pattern already exists");
569   InstantiatedFromUsingDecl[Inst] = Pattern;
570 }
571 
572 UsingShadowDecl *
573 ASTContext::getInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst) {
574   llvm::DenseMap<UsingShadowDecl*, UsingShadowDecl*>::const_iterator Pos
575     = InstantiatedFromUsingShadowDecl.find(Inst);
576   if (Pos == InstantiatedFromUsingShadowDecl.end())
577     return 0;
578 
579   return Pos->second;
580 }
581 
582 void
583 ASTContext::setInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst,
584                                                UsingShadowDecl *Pattern) {
585   assert(!InstantiatedFromUsingShadowDecl[Inst] && "pattern already exists");
586   InstantiatedFromUsingShadowDecl[Inst] = Pattern;
587 }
588 
589 FieldDecl *ASTContext::getInstantiatedFromUnnamedFieldDecl(FieldDecl *Field) {
590   llvm::DenseMap<FieldDecl *, FieldDecl *>::iterator Pos
591     = InstantiatedFromUnnamedFieldDecl.find(Field);
592   if (Pos == InstantiatedFromUnnamedFieldDecl.end())
593     return 0;
594 
595   return Pos->second;
596 }
597 
598 void ASTContext::setInstantiatedFromUnnamedFieldDecl(FieldDecl *Inst,
599                                                      FieldDecl *Tmpl) {
600   assert(!Inst->getDeclName() && "Instantiated field decl is not unnamed");
601   assert(!Tmpl->getDeclName() && "Template field decl is not unnamed");
602   assert(!InstantiatedFromUnnamedFieldDecl[Inst] &&
603          "Already noted what unnamed field was instantiated from");
604 
605   InstantiatedFromUnnamedFieldDecl[Inst] = Tmpl;
606 }
607 
608 bool ASTContext::ZeroBitfieldFollowsNonBitfield(const FieldDecl *FD,
609                                     const FieldDecl *LastFD) const {
610   return (FD->isBitField() && LastFD && !LastFD->isBitField() &&
611           FD->getBitWidth()->EvaluateAsInt(*this).getZExtValue() == 0);
612 }
613 
614 bool ASTContext::ZeroBitfieldFollowsBitfield(const FieldDecl *FD,
615                                              const FieldDecl *LastFD) const {
616   return (FD->isBitField() && LastFD && LastFD->isBitField() &&
617           FD->getBitWidth()->EvaluateAsInt(*this).getZExtValue() == 0 &&
618           LastFD->getBitWidth()->EvaluateAsInt(*this).getZExtValue() != 0);
619 }
620 
621 bool ASTContext::BitfieldFollowsBitfield(const FieldDecl *FD,
622                                          const FieldDecl *LastFD) const {
623   return (FD->isBitField() && LastFD && LastFD->isBitField() &&
624           FD->getBitWidth()->EvaluateAsInt(*this).getZExtValue() &&
625           LastFD->getBitWidth()->EvaluateAsInt(*this).getZExtValue());
626 }
627 
628 bool ASTContext::NonBitfieldFollowsBitfield(const FieldDecl *FD,
629                                          const FieldDecl *LastFD) const {
630   return (!FD->isBitField() && LastFD && LastFD->isBitField() &&
631           LastFD->getBitWidth()->EvaluateAsInt(*this).getZExtValue());
632 }
633 
634 bool ASTContext::BitfieldFollowsNonBitfield(const FieldDecl *FD,
635                                              const FieldDecl *LastFD) const {
636   return (FD->isBitField() && LastFD && !LastFD->isBitField() &&
637           FD->getBitWidth()->EvaluateAsInt(*this).getZExtValue());
638 }
639 
640 ASTContext::overridden_cxx_method_iterator
641 ASTContext::overridden_methods_begin(const CXXMethodDecl *Method) const {
642   llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::const_iterator Pos
643     = OverriddenMethods.find(Method);
644   if (Pos == OverriddenMethods.end())
645     return 0;
646 
647   return Pos->second.begin();
648 }
649 
650 ASTContext::overridden_cxx_method_iterator
651 ASTContext::overridden_methods_end(const CXXMethodDecl *Method) const {
652   llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::const_iterator Pos
653     = OverriddenMethods.find(Method);
654   if (Pos == OverriddenMethods.end())
655     return 0;
656 
657   return Pos->second.end();
658 }
659 
660 unsigned
661 ASTContext::overridden_methods_size(const CXXMethodDecl *Method) const {
662   llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::const_iterator Pos
663     = OverriddenMethods.find(Method);
664   if (Pos == OverriddenMethods.end())
665     return 0;
666 
667   return Pos->second.size();
668 }
669 
670 void ASTContext::addOverriddenMethod(const CXXMethodDecl *Method,
671                                      const CXXMethodDecl *Overridden) {
672   OverriddenMethods[Method].push_back(Overridden);
673 }
674 
675 //===----------------------------------------------------------------------===//
676 //                         Type Sizing and Analysis
677 //===----------------------------------------------------------------------===//
678 
679 /// getFloatTypeSemantics - Return the APFloat 'semantics' for the specified
680 /// scalar floating point type.
681 const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const {
682   const BuiltinType *BT = T->getAs<BuiltinType>();
683   assert(BT && "Not a floating point type!");
684   switch (BT->getKind()) {
685   default: llvm_unreachable("Not a floating point type!");
686   case BuiltinType::Float:      return Target->getFloatFormat();
687   case BuiltinType::Double:     return Target->getDoubleFormat();
688   case BuiltinType::LongDouble: return Target->getLongDoubleFormat();
689   }
690 }
691 
692 /// getDeclAlign - Return a conservative estimate of the alignment of the
693 /// specified decl.  Note that bitfields do not have a valid alignment, so
694 /// this method will assert on them.
695 /// If @p RefAsPointee, references are treated like their underlying type
696 /// (for alignof), else they're treated like pointers (for CodeGen).
697 CharUnits ASTContext::getDeclAlign(const Decl *D, bool RefAsPointee) const {
698   unsigned Align = Target->getCharWidth();
699 
700   bool UseAlignAttrOnly = false;
701   if (unsigned AlignFromAttr = D->getMaxAlignment()) {
702     Align = AlignFromAttr;
703 
704     // __attribute__((aligned)) can increase or decrease alignment
705     // *except* on a struct or struct member, where it only increases
706     // alignment unless 'packed' is also specified.
707     //
708     // It is an error for alignas to decrease alignment, so we can
709     // ignore that possibility;  Sema should diagnose it.
710     if (isa<FieldDecl>(D)) {
711       UseAlignAttrOnly = D->hasAttr<PackedAttr>() ||
712         cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
713     } else {
714       UseAlignAttrOnly = true;
715     }
716   }
717   else if (isa<FieldDecl>(D))
718       UseAlignAttrOnly =
719         D->hasAttr<PackedAttr>() ||
720         cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
721 
722   // If we're using the align attribute only, just ignore everything
723   // else about the declaration and its type.
724   if (UseAlignAttrOnly) {
725     // do nothing
726 
727   } else if (const ValueDecl *VD = dyn_cast<ValueDecl>(D)) {
728     QualType T = VD->getType();
729     if (const ReferenceType* RT = T->getAs<ReferenceType>()) {
730       if (RefAsPointee)
731         T = RT->getPointeeType();
732       else
733         T = getPointerType(RT->getPointeeType());
734     }
735     if (!T->isIncompleteType() && !T->isFunctionType()) {
736       // Adjust alignments of declarations with array type by the
737       // large-array alignment on the target.
738       unsigned MinWidth = Target->getLargeArrayMinWidth();
739       const ArrayType *arrayType;
740       if (MinWidth && (arrayType = getAsArrayType(T))) {
741         if (isa<VariableArrayType>(arrayType))
742           Align = std::max(Align, Target->getLargeArrayAlign());
743         else if (isa<ConstantArrayType>(arrayType) &&
744                  MinWidth <= getTypeSize(cast<ConstantArrayType>(arrayType)))
745           Align = std::max(Align, Target->getLargeArrayAlign());
746 
747         // Walk through any array types while we're at it.
748         T = getBaseElementType(arrayType);
749       }
750       Align = std::max(Align, getPreferredTypeAlign(T.getTypePtr()));
751     }
752 
753     // Fields can be subject to extra alignment constraints, like if
754     // the field is packed, the struct is packed, or the struct has a
755     // a max-field-alignment constraint (#pragma pack).  So calculate
756     // the actual alignment of the field within the struct, and then
757     // (as we're expected to) constrain that by the alignment of the type.
758     if (const FieldDecl *field = dyn_cast<FieldDecl>(VD)) {
759       // So calculate the alignment of the field.
760       const ASTRecordLayout &layout = getASTRecordLayout(field->getParent());
761 
762       // Start with the record's overall alignment.
763       unsigned fieldAlign = toBits(layout.getAlignment());
764 
765       // Use the GCD of that and the offset within the record.
766       uint64_t offset = layout.getFieldOffset(field->getFieldIndex());
767       if (offset > 0) {
768         // Alignment is always a power of 2, so the GCD will be a power of 2,
769         // which means we get to do this crazy thing instead of Euclid's.
770         uint64_t lowBitOfOffset = offset & (~offset + 1);
771         if (lowBitOfOffset < fieldAlign)
772           fieldAlign = static_cast<unsigned>(lowBitOfOffset);
773       }
774 
775       Align = std::min(Align, fieldAlign);
776     }
777   }
778 
779   return toCharUnitsFromBits(Align);
780 }
781 
782 std::pair<CharUnits, CharUnits>
783 ASTContext::getTypeInfoInChars(const Type *T) const {
784   std::pair<uint64_t, unsigned> Info = getTypeInfo(T);
785   return std::make_pair(toCharUnitsFromBits(Info.first),
786                         toCharUnitsFromBits(Info.second));
787 }
788 
789 std::pair<CharUnits, CharUnits>
790 ASTContext::getTypeInfoInChars(QualType T) const {
791   return getTypeInfoInChars(T.getTypePtr());
792 }
793 
794 /// getTypeSize - Return the size of the specified type, in bits.  This method
795 /// does not work on incomplete types.
796 ///
797 /// FIXME: Pointers into different addr spaces could have different sizes and
798 /// alignment requirements: getPointerInfo should take an AddrSpace, this
799 /// should take a QualType, &c.
800 std::pair<uint64_t, unsigned>
801 ASTContext::getTypeInfo(const Type *T) const {
802   uint64_t Width=0;
803   unsigned Align=8;
804   switch (T->getTypeClass()) {
805 #define TYPE(Class, Base)
806 #define ABSTRACT_TYPE(Class, Base)
807 #define NON_CANONICAL_TYPE(Class, Base)
808 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
809 #include "clang/AST/TypeNodes.def"
810     llvm_unreachable("Should not see dependent types");
811     break;
812 
813   case Type::FunctionNoProto:
814   case Type::FunctionProto:
815     // GCC extension: alignof(function) = 32 bits
816     Width = 0;
817     Align = 32;
818     break;
819 
820   case Type::IncompleteArray:
821   case Type::VariableArray:
822     Width = 0;
823     Align = getTypeAlign(cast<ArrayType>(T)->getElementType());
824     break;
825 
826   case Type::ConstantArray: {
827     const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
828 
829     std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(CAT->getElementType());
830     Width = EltInfo.first*CAT->getSize().getZExtValue();
831     Align = EltInfo.second;
832     Width = llvm::RoundUpToAlignment(Width, Align);
833     break;
834   }
835   case Type::ExtVector:
836   case Type::Vector: {
837     const VectorType *VT = cast<VectorType>(T);
838     std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(VT->getElementType());
839     Width = EltInfo.first*VT->getNumElements();
840     Align = Width;
841     // If the alignment is not a power of 2, round up to the next power of 2.
842     // This happens for non-power-of-2 length vectors.
843     if (Align & (Align-1)) {
844       Align = llvm::NextPowerOf2(Align);
845       Width = llvm::RoundUpToAlignment(Width, Align);
846     }
847     break;
848   }
849 
850   case Type::Builtin:
851     switch (cast<BuiltinType>(T)->getKind()) {
852     default: llvm_unreachable("Unknown builtin type!");
853     case BuiltinType::Void:
854       // GCC extension: alignof(void) = 8 bits.
855       Width = 0;
856       Align = 8;
857       break;
858 
859     case BuiltinType::Bool:
860       Width = Target->getBoolWidth();
861       Align = Target->getBoolAlign();
862       break;
863     case BuiltinType::Char_S:
864     case BuiltinType::Char_U:
865     case BuiltinType::UChar:
866     case BuiltinType::SChar:
867       Width = Target->getCharWidth();
868       Align = Target->getCharAlign();
869       break;
870     case BuiltinType::WChar_S:
871     case BuiltinType::WChar_U:
872       Width = Target->getWCharWidth();
873       Align = Target->getWCharAlign();
874       break;
875     case BuiltinType::Char16:
876       Width = Target->getChar16Width();
877       Align = Target->getChar16Align();
878       break;
879     case BuiltinType::Char32:
880       Width = Target->getChar32Width();
881       Align = Target->getChar32Align();
882       break;
883     case BuiltinType::UShort:
884     case BuiltinType::Short:
885       Width = Target->getShortWidth();
886       Align = Target->getShortAlign();
887       break;
888     case BuiltinType::UInt:
889     case BuiltinType::Int:
890       Width = Target->getIntWidth();
891       Align = Target->getIntAlign();
892       break;
893     case BuiltinType::ULong:
894     case BuiltinType::Long:
895       Width = Target->getLongWidth();
896       Align = Target->getLongAlign();
897       break;
898     case BuiltinType::ULongLong:
899     case BuiltinType::LongLong:
900       Width = Target->getLongLongWidth();
901       Align = Target->getLongLongAlign();
902       break;
903     case BuiltinType::Int128:
904     case BuiltinType::UInt128:
905       Width = 128;
906       Align = 128; // int128_t is 128-bit aligned on all targets.
907       break;
908     case BuiltinType::Float:
909       Width = Target->getFloatWidth();
910       Align = Target->getFloatAlign();
911       break;
912     case BuiltinType::Double:
913       Width = Target->getDoubleWidth();
914       Align = Target->getDoubleAlign();
915       break;
916     case BuiltinType::LongDouble:
917       Width = Target->getLongDoubleWidth();
918       Align = Target->getLongDoubleAlign();
919       break;
920     case BuiltinType::NullPtr:
921       Width = Target->getPointerWidth(0); // C++ 3.9.1p11: sizeof(nullptr_t)
922       Align = Target->getPointerAlign(0); //   == sizeof(void*)
923       break;
924     case BuiltinType::ObjCId:
925     case BuiltinType::ObjCClass:
926     case BuiltinType::ObjCSel:
927       Width = Target->getPointerWidth(0);
928       Align = Target->getPointerAlign(0);
929       break;
930     }
931     break;
932   case Type::ObjCObjectPointer:
933     Width = Target->getPointerWidth(0);
934     Align = Target->getPointerAlign(0);
935     break;
936   case Type::BlockPointer: {
937     unsigned AS = getTargetAddressSpace(
938         cast<BlockPointerType>(T)->getPointeeType());
939     Width = Target->getPointerWidth(AS);
940     Align = Target->getPointerAlign(AS);
941     break;
942   }
943   case Type::LValueReference:
944   case Type::RValueReference: {
945     // alignof and sizeof should never enter this code path here, so we go
946     // the pointer route.
947     unsigned AS = getTargetAddressSpace(
948         cast<ReferenceType>(T)->getPointeeType());
949     Width = Target->getPointerWidth(AS);
950     Align = Target->getPointerAlign(AS);
951     break;
952   }
953   case Type::Pointer: {
954     unsigned AS = getTargetAddressSpace(cast<PointerType>(T)->getPointeeType());
955     Width = Target->getPointerWidth(AS);
956     Align = Target->getPointerAlign(AS);
957     break;
958   }
959   case Type::MemberPointer: {
960     const MemberPointerType *MPT = cast<MemberPointerType>(T);
961     std::pair<uint64_t, unsigned> PtrDiffInfo =
962       getTypeInfo(getPointerDiffType());
963     Width = PtrDiffInfo.first * ABI->getMemberPointerSize(MPT);
964     Align = PtrDiffInfo.second;
965     break;
966   }
967   case Type::Complex: {
968     // Complex types have the same alignment as their elements, but twice the
969     // size.
970     std::pair<uint64_t, unsigned> EltInfo =
971       getTypeInfo(cast<ComplexType>(T)->getElementType());
972     Width = EltInfo.first*2;
973     Align = EltInfo.second;
974     break;
975   }
976   case Type::ObjCObject:
977     return getTypeInfo(cast<ObjCObjectType>(T)->getBaseType().getTypePtr());
978   case Type::ObjCInterface: {
979     const ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T);
980     const ASTRecordLayout &Layout = getASTObjCInterfaceLayout(ObjCI->getDecl());
981     Width = toBits(Layout.getSize());
982     Align = toBits(Layout.getAlignment());
983     break;
984   }
985   case Type::Record:
986   case Type::Enum: {
987     const TagType *TT = cast<TagType>(T);
988 
989     if (TT->getDecl()->isInvalidDecl()) {
990       Width = 8;
991       Align = 8;
992       break;
993     }
994 
995     if (const EnumType *ET = dyn_cast<EnumType>(TT))
996       return getTypeInfo(ET->getDecl()->getIntegerType());
997 
998     const RecordType *RT = cast<RecordType>(TT);
999     const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl());
1000     Width = toBits(Layout.getSize());
1001     Align = toBits(Layout.getAlignment());
1002     break;
1003   }
1004 
1005   case Type::SubstTemplateTypeParm:
1006     return getTypeInfo(cast<SubstTemplateTypeParmType>(T)->
1007                        getReplacementType().getTypePtr());
1008 
1009   case Type::Auto: {
1010     const AutoType *A = cast<AutoType>(T);
1011     assert(A->isDeduced() && "Cannot request the size of a dependent type");
1012     return getTypeInfo(A->getDeducedType().getTypePtr());
1013   }
1014 
1015   case Type::Paren:
1016     return getTypeInfo(cast<ParenType>(T)->getInnerType().getTypePtr());
1017 
1018   case Type::Typedef: {
1019     const TypedefNameDecl *Typedef = cast<TypedefType>(T)->getDecl();
1020     std::pair<uint64_t, unsigned> Info
1021       = getTypeInfo(Typedef->getUnderlyingType().getTypePtr());
1022     // If the typedef has an aligned attribute on it, it overrides any computed
1023     // alignment we have.  This violates the GCC documentation (which says that
1024     // attribute(aligned) can only round up) but matches its implementation.
1025     if (unsigned AttrAlign = Typedef->getMaxAlignment())
1026       Align = AttrAlign;
1027     else
1028       Align = Info.second;
1029     Width = Info.first;
1030     break;
1031   }
1032 
1033   case Type::TypeOfExpr:
1034     return getTypeInfo(cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType()
1035                          .getTypePtr());
1036 
1037   case Type::TypeOf:
1038     return getTypeInfo(cast<TypeOfType>(T)->getUnderlyingType().getTypePtr());
1039 
1040   case Type::Decltype:
1041     return getTypeInfo(cast<DecltypeType>(T)->getUnderlyingExpr()->getType()
1042                         .getTypePtr());
1043 
1044   case Type::UnaryTransform:
1045     return getTypeInfo(cast<UnaryTransformType>(T)->getUnderlyingType());
1046 
1047   case Type::Elaborated:
1048     return getTypeInfo(cast<ElaboratedType>(T)->getNamedType().getTypePtr());
1049 
1050   case Type::Attributed:
1051     return getTypeInfo(
1052                   cast<AttributedType>(T)->getEquivalentType().getTypePtr());
1053 
1054   case Type::TemplateSpecialization: {
1055     assert(getCanonicalType(T) != T &&
1056            "Cannot request the size of a dependent type");
1057     const TemplateSpecializationType *TST = cast<TemplateSpecializationType>(T);
1058     // A type alias template specialization may refer to a typedef with the
1059     // aligned attribute on it.
1060     if (TST->isTypeAlias())
1061       return getTypeInfo(TST->getAliasedType().getTypePtr());
1062     else
1063       return getTypeInfo(getCanonicalType(T));
1064   }
1065 
1066   }
1067 
1068   assert(Align && (Align & (Align-1)) == 0 && "Alignment must be power of 2");
1069   return std::make_pair(Width, Align);
1070 }
1071 
1072 /// toCharUnitsFromBits - Convert a size in bits to a size in characters.
1073 CharUnits ASTContext::toCharUnitsFromBits(int64_t BitSize) const {
1074   return CharUnits::fromQuantity(BitSize / getCharWidth());
1075 }
1076 
1077 /// toBits - Convert a size in characters to a size in characters.
1078 int64_t ASTContext::toBits(CharUnits CharSize) const {
1079   return CharSize.getQuantity() * getCharWidth();
1080 }
1081 
1082 /// getTypeSizeInChars - Return the size of the specified type, in characters.
1083 /// This method does not work on incomplete types.
1084 CharUnits ASTContext::getTypeSizeInChars(QualType T) const {
1085   return toCharUnitsFromBits(getTypeSize(T));
1086 }
1087 CharUnits ASTContext::getTypeSizeInChars(const Type *T) const {
1088   return toCharUnitsFromBits(getTypeSize(T));
1089 }
1090 
1091 /// getTypeAlignInChars - Return the ABI-specified alignment of a type, in
1092 /// characters. This method does not work on incomplete types.
1093 CharUnits ASTContext::getTypeAlignInChars(QualType T) const {
1094   return toCharUnitsFromBits(getTypeAlign(T));
1095 }
1096 CharUnits ASTContext::getTypeAlignInChars(const Type *T) const {
1097   return toCharUnitsFromBits(getTypeAlign(T));
1098 }
1099 
1100 /// getPreferredTypeAlign - Return the "preferred" alignment of the specified
1101 /// type for the current target in bits.  This can be different than the ABI
1102 /// alignment in cases where it is beneficial for performance to overalign
1103 /// a data type.
1104 unsigned ASTContext::getPreferredTypeAlign(const Type *T) const {
1105   unsigned ABIAlign = getTypeAlign(T);
1106 
1107   // Double and long long should be naturally aligned if possible.
1108   if (const ComplexType* CT = T->getAs<ComplexType>())
1109     T = CT->getElementType().getTypePtr();
1110   if (T->isSpecificBuiltinType(BuiltinType::Double) ||
1111       T->isSpecificBuiltinType(BuiltinType::LongLong))
1112     return std::max(ABIAlign, (unsigned)getTypeSize(T));
1113 
1114   return ABIAlign;
1115 }
1116 
1117 /// DeepCollectObjCIvars -
1118 /// This routine first collects all declared, but not synthesized, ivars in
1119 /// super class and then collects all ivars, including those synthesized for
1120 /// current class. This routine is used for implementation of current class
1121 /// when all ivars, declared and synthesized are known.
1122 ///
1123 void ASTContext::DeepCollectObjCIvars(const ObjCInterfaceDecl *OI,
1124                                       bool leafClass,
1125                             SmallVectorImpl<const ObjCIvarDecl*> &Ivars) const {
1126   if (const ObjCInterfaceDecl *SuperClass = OI->getSuperClass())
1127     DeepCollectObjCIvars(SuperClass, false, Ivars);
1128   if (!leafClass) {
1129     for (ObjCInterfaceDecl::ivar_iterator I = OI->ivar_begin(),
1130          E = OI->ivar_end(); I != E; ++I)
1131       Ivars.push_back(*I);
1132   } else {
1133     ObjCInterfaceDecl *IDecl = const_cast<ObjCInterfaceDecl *>(OI);
1134     for (const ObjCIvarDecl *Iv = IDecl->all_declared_ivar_begin(); Iv;
1135          Iv= Iv->getNextIvar())
1136       Ivars.push_back(Iv);
1137   }
1138 }
1139 
1140 /// CollectInheritedProtocols - Collect all protocols in current class and
1141 /// those inherited by it.
1142 void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
1143                           llvm::SmallPtrSet<ObjCProtocolDecl*, 8> &Protocols) {
1144   if (const ObjCInterfaceDecl *OI = dyn_cast<ObjCInterfaceDecl>(CDecl)) {
1145     // We can use protocol_iterator here instead of
1146     // all_referenced_protocol_iterator since we are walking all categories.
1147     for (ObjCInterfaceDecl::all_protocol_iterator P = OI->all_referenced_protocol_begin(),
1148          PE = OI->all_referenced_protocol_end(); P != PE; ++P) {
1149       ObjCProtocolDecl *Proto = (*P);
1150       Protocols.insert(Proto);
1151       for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
1152            PE = Proto->protocol_end(); P != PE; ++P) {
1153         Protocols.insert(*P);
1154         CollectInheritedProtocols(*P, Protocols);
1155       }
1156     }
1157 
1158     // Categories of this Interface.
1159     for (const ObjCCategoryDecl *CDeclChain = OI->getCategoryList();
1160          CDeclChain; CDeclChain = CDeclChain->getNextClassCategory())
1161       CollectInheritedProtocols(CDeclChain, Protocols);
1162     if (ObjCInterfaceDecl *SD = OI->getSuperClass())
1163       while (SD) {
1164         CollectInheritedProtocols(SD, Protocols);
1165         SD = SD->getSuperClass();
1166       }
1167   } else if (const ObjCCategoryDecl *OC = dyn_cast<ObjCCategoryDecl>(CDecl)) {
1168     for (ObjCCategoryDecl::protocol_iterator P = OC->protocol_begin(),
1169          PE = OC->protocol_end(); P != PE; ++P) {
1170       ObjCProtocolDecl *Proto = (*P);
1171       Protocols.insert(Proto);
1172       for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
1173            PE = Proto->protocol_end(); P != PE; ++P)
1174         CollectInheritedProtocols(*P, Protocols);
1175     }
1176   } else if (const ObjCProtocolDecl *OP = dyn_cast<ObjCProtocolDecl>(CDecl)) {
1177     for (ObjCProtocolDecl::protocol_iterator P = OP->protocol_begin(),
1178          PE = OP->protocol_end(); P != PE; ++P) {
1179       ObjCProtocolDecl *Proto = (*P);
1180       Protocols.insert(Proto);
1181       for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
1182            PE = Proto->protocol_end(); P != PE; ++P)
1183         CollectInheritedProtocols(*P, Protocols);
1184     }
1185   }
1186 }
1187 
1188 unsigned ASTContext::CountNonClassIvars(const ObjCInterfaceDecl *OI) const {
1189   unsigned count = 0;
1190   // Count ivars declared in class extension.
1191   for (const ObjCCategoryDecl *CDecl = OI->getFirstClassExtension(); CDecl;
1192        CDecl = CDecl->getNextClassExtension())
1193     count += CDecl->ivar_size();
1194 
1195   // Count ivar defined in this class's implementation.  This
1196   // includes synthesized ivars.
1197   if (ObjCImplementationDecl *ImplDecl = OI->getImplementation())
1198     count += ImplDecl->ivar_size();
1199 
1200   return count;
1201 }
1202 
1203 /// \brief Get the implementation of ObjCInterfaceDecl,or NULL if none exists.
1204 ObjCImplementationDecl *ASTContext::getObjCImplementation(ObjCInterfaceDecl *D) {
1205   llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*>::iterator
1206     I = ObjCImpls.find(D);
1207   if (I != ObjCImpls.end())
1208     return cast<ObjCImplementationDecl>(I->second);
1209   return 0;
1210 }
1211 /// \brief Get the implementation of ObjCCategoryDecl, or NULL if none exists.
1212 ObjCCategoryImplDecl *ASTContext::getObjCImplementation(ObjCCategoryDecl *D) {
1213   llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*>::iterator
1214     I = ObjCImpls.find(D);
1215   if (I != ObjCImpls.end())
1216     return cast<ObjCCategoryImplDecl>(I->second);
1217   return 0;
1218 }
1219 
1220 /// \brief Set the implementation of ObjCInterfaceDecl.
1221 void ASTContext::setObjCImplementation(ObjCInterfaceDecl *IFaceD,
1222                            ObjCImplementationDecl *ImplD) {
1223   assert(IFaceD && ImplD && "Passed null params");
1224   ObjCImpls[IFaceD] = ImplD;
1225 }
1226 /// \brief Set the implementation of ObjCCategoryDecl.
1227 void ASTContext::setObjCImplementation(ObjCCategoryDecl *CatD,
1228                            ObjCCategoryImplDecl *ImplD) {
1229   assert(CatD && ImplD && "Passed null params");
1230   ObjCImpls[CatD] = ImplD;
1231 }
1232 
1233 /// \brief Get the copy initialization expression of VarDecl,or NULL if
1234 /// none exists.
1235 Expr *ASTContext::getBlockVarCopyInits(const VarDecl*VD) {
1236   assert(VD && "Passed null params");
1237   assert(VD->hasAttr<BlocksAttr>() &&
1238          "getBlockVarCopyInits - not __block var");
1239   llvm::DenseMap<const VarDecl*, Expr*>::iterator
1240     I = BlockVarCopyInits.find(VD);
1241   return (I != BlockVarCopyInits.end()) ? cast<Expr>(I->second) : 0;
1242 }
1243 
1244 /// \brief Set the copy inialization expression of a block var decl.
1245 void ASTContext::setBlockVarCopyInits(VarDecl*VD, Expr* Init) {
1246   assert(VD && Init && "Passed null params");
1247   assert(VD->hasAttr<BlocksAttr>() &&
1248          "setBlockVarCopyInits - not __block var");
1249   BlockVarCopyInits[VD] = Init;
1250 }
1251 
1252 /// \brief Allocate an uninitialized TypeSourceInfo.
1253 ///
1254 /// The caller should initialize the memory held by TypeSourceInfo using
1255 /// the TypeLoc wrappers.
1256 ///
1257 /// \param T the type that will be the basis for type source info. This type
1258 /// should refer to how the declarator was written in source code, not to
1259 /// what type semantic analysis resolved the declarator to.
1260 TypeSourceInfo *ASTContext::CreateTypeSourceInfo(QualType T,
1261                                                  unsigned DataSize) const {
1262   if (!DataSize)
1263     DataSize = TypeLoc::getFullDataSizeForType(T);
1264   else
1265     assert(DataSize == TypeLoc::getFullDataSizeForType(T) &&
1266            "incorrect data size provided to CreateTypeSourceInfo!");
1267 
1268   TypeSourceInfo *TInfo =
1269     (TypeSourceInfo*)BumpAlloc.Allocate(sizeof(TypeSourceInfo) + DataSize, 8);
1270   new (TInfo) TypeSourceInfo(T);
1271   return TInfo;
1272 }
1273 
1274 TypeSourceInfo *ASTContext::getTrivialTypeSourceInfo(QualType T,
1275                                                      SourceLocation L) const {
1276   TypeSourceInfo *DI = CreateTypeSourceInfo(T);
1277   DI->getTypeLoc().initialize(const_cast<ASTContext &>(*this), L);
1278   return DI;
1279 }
1280 
1281 const ASTRecordLayout &
1282 ASTContext::getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D) const {
1283   return getObjCLayout(D, 0);
1284 }
1285 
1286 const ASTRecordLayout &
1287 ASTContext::getASTObjCImplementationLayout(
1288                                         const ObjCImplementationDecl *D) const {
1289   return getObjCLayout(D->getClassInterface(), D);
1290 }
1291 
1292 //===----------------------------------------------------------------------===//
1293 //                   Type creation/memoization methods
1294 //===----------------------------------------------------------------------===//
1295 
1296 QualType
1297 ASTContext::getExtQualType(const Type *baseType, Qualifiers quals) const {
1298   unsigned fastQuals = quals.getFastQualifiers();
1299   quals.removeFastQualifiers();
1300 
1301   // Check if we've already instantiated this type.
1302   llvm::FoldingSetNodeID ID;
1303   ExtQuals::Profile(ID, baseType, quals);
1304   void *insertPos = 0;
1305   if (ExtQuals *eq = ExtQualNodes.FindNodeOrInsertPos(ID, insertPos)) {
1306     assert(eq->getQualifiers() == quals);
1307     return QualType(eq, fastQuals);
1308   }
1309 
1310   // If the base type is not canonical, make the appropriate canonical type.
1311   QualType canon;
1312   if (!baseType->isCanonicalUnqualified()) {
1313     SplitQualType canonSplit = baseType->getCanonicalTypeInternal().split();
1314     canonSplit.second.addConsistentQualifiers(quals);
1315     canon = getExtQualType(canonSplit.first, canonSplit.second);
1316 
1317     // Re-find the insert position.
1318     (void) ExtQualNodes.FindNodeOrInsertPos(ID, insertPos);
1319   }
1320 
1321   ExtQuals *eq = new (*this, TypeAlignment) ExtQuals(baseType, canon, quals);
1322   ExtQualNodes.InsertNode(eq, insertPos);
1323   return QualType(eq, fastQuals);
1324 }
1325 
1326 QualType
1327 ASTContext::getAddrSpaceQualType(QualType T, unsigned AddressSpace) const {
1328   QualType CanT = getCanonicalType(T);
1329   if (CanT.getAddressSpace() == AddressSpace)
1330     return T;
1331 
1332   // If we are composing extended qualifiers together, merge together
1333   // into one ExtQuals node.
1334   QualifierCollector Quals;
1335   const Type *TypeNode = Quals.strip(T);
1336 
1337   // If this type already has an address space specified, it cannot get
1338   // another one.
1339   assert(!Quals.hasAddressSpace() &&
1340          "Type cannot be in multiple addr spaces!");
1341   Quals.addAddressSpace(AddressSpace);
1342 
1343   return getExtQualType(TypeNode, Quals);
1344 }
1345 
1346 QualType ASTContext::getObjCGCQualType(QualType T,
1347                                        Qualifiers::GC GCAttr) const {
1348   QualType CanT = getCanonicalType(T);
1349   if (CanT.getObjCGCAttr() == GCAttr)
1350     return T;
1351 
1352   if (const PointerType *ptr = T->getAs<PointerType>()) {
1353     QualType Pointee = ptr->getPointeeType();
1354     if (Pointee->isAnyPointerType()) {
1355       QualType ResultType = getObjCGCQualType(Pointee, GCAttr);
1356       return getPointerType(ResultType);
1357     }
1358   }
1359 
1360   // If we are composing extended qualifiers together, merge together
1361   // into one ExtQuals node.
1362   QualifierCollector Quals;
1363   const Type *TypeNode = Quals.strip(T);
1364 
1365   // If this type already has an ObjCGC specified, it cannot get
1366   // another one.
1367   assert(!Quals.hasObjCGCAttr() &&
1368          "Type cannot have multiple ObjCGCs!");
1369   Quals.addObjCGCAttr(GCAttr);
1370 
1371   return getExtQualType(TypeNode, Quals);
1372 }
1373 
1374 const FunctionType *ASTContext::adjustFunctionType(const FunctionType *T,
1375                                                    FunctionType::ExtInfo Info) {
1376   if (T->getExtInfo() == Info)
1377     return T;
1378 
1379   QualType Result;
1380   if (const FunctionNoProtoType *FNPT = dyn_cast<FunctionNoProtoType>(T)) {
1381     Result = getFunctionNoProtoType(FNPT->getResultType(), Info);
1382   } else {
1383     const FunctionProtoType *FPT = cast<FunctionProtoType>(T);
1384     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
1385     EPI.ExtInfo = Info;
1386     Result = getFunctionType(FPT->getResultType(), FPT->arg_type_begin(),
1387                              FPT->getNumArgs(), EPI);
1388   }
1389 
1390   return cast<FunctionType>(Result.getTypePtr());
1391 }
1392 
1393 /// getComplexType - Return the uniqued reference to the type for a complex
1394 /// number with the specified element type.
1395 QualType ASTContext::getComplexType(QualType T) const {
1396   // Unique pointers, to guarantee there is only one pointer of a particular
1397   // structure.
1398   llvm::FoldingSetNodeID ID;
1399   ComplexType::Profile(ID, T);
1400 
1401   void *InsertPos = 0;
1402   if (ComplexType *CT = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos))
1403     return QualType(CT, 0);
1404 
1405   // If the pointee type isn't canonical, this won't be a canonical type either,
1406   // so fill in the canonical type field.
1407   QualType Canonical;
1408   if (!T.isCanonical()) {
1409     Canonical = getComplexType(getCanonicalType(T));
1410 
1411     // Get the new insert position for the node we care about.
1412     ComplexType *NewIP = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos);
1413     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1414   }
1415   ComplexType *New = new (*this, TypeAlignment) ComplexType(T, Canonical);
1416   Types.push_back(New);
1417   ComplexTypes.InsertNode(New, InsertPos);
1418   return QualType(New, 0);
1419 }
1420 
1421 /// getPointerType - Return the uniqued reference to the type for a pointer to
1422 /// the specified type.
1423 QualType ASTContext::getPointerType(QualType T) const {
1424   // Unique pointers, to guarantee there is only one pointer of a particular
1425   // structure.
1426   llvm::FoldingSetNodeID ID;
1427   PointerType::Profile(ID, T);
1428 
1429   void *InsertPos = 0;
1430   if (PointerType *PT = PointerTypes.FindNodeOrInsertPos(ID, InsertPos))
1431     return QualType(PT, 0);
1432 
1433   // If the pointee type isn't canonical, this won't be a canonical type either,
1434   // so fill in the canonical type field.
1435   QualType Canonical;
1436   if (!T.isCanonical()) {
1437     Canonical = getPointerType(getCanonicalType(T));
1438 
1439     // Get the new insert position for the node we care about.
1440     PointerType *NewIP = PointerTypes.FindNodeOrInsertPos(ID, InsertPos);
1441     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1442   }
1443   PointerType *New = new (*this, TypeAlignment) PointerType(T, Canonical);
1444   Types.push_back(New);
1445   PointerTypes.InsertNode(New, InsertPos);
1446   return QualType(New, 0);
1447 }
1448 
1449 /// getBlockPointerType - Return the uniqued reference to the type for
1450 /// a pointer to the specified block.
1451 QualType ASTContext::getBlockPointerType(QualType T) const {
1452   assert(T->isFunctionType() && "block of function types only");
1453   // Unique pointers, to guarantee there is only one block of a particular
1454   // structure.
1455   llvm::FoldingSetNodeID ID;
1456   BlockPointerType::Profile(ID, T);
1457 
1458   void *InsertPos = 0;
1459   if (BlockPointerType *PT =
1460         BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
1461     return QualType(PT, 0);
1462 
1463   // If the block pointee type isn't canonical, this won't be a canonical
1464   // type either so fill in the canonical type field.
1465   QualType Canonical;
1466   if (!T.isCanonical()) {
1467     Canonical = getBlockPointerType(getCanonicalType(T));
1468 
1469     // Get the new insert position for the node we care about.
1470     BlockPointerType *NewIP =
1471       BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
1472     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1473   }
1474   BlockPointerType *New
1475     = new (*this, TypeAlignment) BlockPointerType(T, Canonical);
1476   Types.push_back(New);
1477   BlockPointerTypes.InsertNode(New, InsertPos);
1478   return QualType(New, 0);
1479 }
1480 
1481 /// getLValueReferenceType - Return the uniqued reference to the type for an
1482 /// lvalue reference to the specified type.
1483 QualType
1484 ASTContext::getLValueReferenceType(QualType T, bool SpelledAsLValue) const {
1485   assert(getCanonicalType(T) != OverloadTy &&
1486          "Unresolved overloaded function type");
1487 
1488   // Unique pointers, to guarantee there is only one pointer of a particular
1489   // structure.
1490   llvm::FoldingSetNodeID ID;
1491   ReferenceType::Profile(ID, T, SpelledAsLValue);
1492 
1493   void *InsertPos = 0;
1494   if (LValueReferenceType *RT =
1495         LValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos))
1496     return QualType(RT, 0);
1497 
1498   const ReferenceType *InnerRef = T->getAs<ReferenceType>();
1499 
1500   // If the referencee type isn't canonical, this won't be a canonical type
1501   // either, so fill in the canonical type field.
1502   QualType Canonical;
1503   if (!SpelledAsLValue || InnerRef || !T.isCanonical()) {
1504     QualType PointeeType = (InnerRef ? InnerRef->getPointeeType() : T);
1505     Canonical = getLValueReferenceType(getCanonicalType(PointeeType));
1506 
1507     // Get the new insert position for the node we care about.
1508     LValueReferenceType *NewIP =
1509       LValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos);
1510     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1511   }
1512 
1513   LValueReferenceType *New
1514     = new (*this, TypeAlignment) LValueReferenceType(T, Canonical,
1515                                                      SpelledAsLValue);
1516   Types.push_back(New);
1517   LValueReferenceTypes.InsertNode(New, InsertPos);
1518 
1519   return QualType(New, 0);
1520 }
1521 
1522 /// getRValueReferenceType - Return the uniqued reference to the type for an
1523 /// rvalue reference to the specified type.
1524 QualType ASTContext::getRValueReferenceType(QualType T) const {
1525   // Unique pointers, to guarantee there is only one pointer of a particular
1526   // structure.
1527   llvm::FoldingSetNodeID ID;
1528   ReferenceType::Profile(ID, T, false);
1529 
1530   void *InsertPos = 0;
1531   if (RValueReferenceType *RT =
1532         RValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos))
1533     return QualType(RT, 0);
1534 
1535   const ReferenceType *InnerRef = T->getAs<ReferenceType>();
1536 
1537   // If the referencee type isn't canonical, this won't be a canonical type
1538   // either, so fill in the canonical type field.
1539   QualType Canonical;
1540   if (InnerRef || !T.isCanonical()) {
1541     QualType PointeeType = (InnerRef ? InnerRef->getPointeeType() : T);
1542     Canonical = getRValueReferenceType(getCanonicalType(PointeeType));
1543 
1544     // Get the new insert position for the node we care about.
1545     RValueReferenceType *NewIP =
1546       RValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos);
1547     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1548   }
1549 
1550   RValueReferenceType *New
1551     = new (*this, TypeAlignment) RValueReferenceType(T, Canonical);
1552   Types.push_back(New);
1553   RValueReferenceTypes.InsertNode(New, InsertPos);
1554   return QualType(New, 0);
1555 }
1556 
1557 /// getMemberPointerType - Return the uniqued reference to the type for a
1558 /// member pointer to the specified type, in the specified class.
1559 QualType ASTContext::getMemberPointerType(QualType T, const Type *Cls) const {
1560   // Unique pointers, to guarantee there is only one pointer of a particular
1561   // structure.
1562   llvm::FoldingSetNodeID ID;
1563   MemberPointerType::Profile(ID, T, Cls);
1564 
1565   void *InsertPos = 0;
1566   if (MemberPointerType *PT =
1567       MemberPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
1568     return QualType(PT, 0);
1569 
1570   // If the pointee or class type isn't canonical, this won't be a canonical
1571   // type either, so fill in the canonical type field.
1572   QualType Canonical;
1573   if (!T.isCanonical() || !Cls->isCanonicalUnqualified()) {
1574     Canonical = getMemberPointerType(getCanonicalType(T),getCanonicalType(Cls));
1575 
1576     // Get the new insert position for the node we care about.
1577     MemberPointerType *NewIP =
1578       MemberPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
1579     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1580   }
1581   MemberPointerType *New
1582     = new (*this, TypeAlignment) MemberPointerType(T, Cls, Canonical);
1583   Types.push_back(New);
1584   MemberPointerTypes.InsertNode(New, InsertPos);
1585   return QualType(New, 0);
1586 }
1587 
1588 /// getConstantArrayType - Return the unique reference to the type for an
1589 /// array of the specified element type.
1590 QualType ASTContext::getConstantArrayType(QualType EltTy,
1591                                           const llvm::APInt &ArySizeIn,
1592                                           ArrayType::ArraySizeModifier ASM,
1593                                           unsigned IndexTypeQuals) const {
1594   assert((EltTy->isDependentType() ||
1595           EltTy->isIncompleteType() || EltTy->isConstantSizeType()) &&
1596          "Constant array of VLAs is illegal!");
1597 
1598   // Convert the array size into a canonical width matching the pointer size for
1599   // the target.
1600   llvm::APInt ArySize(ArySizeIn);
1601   ArySize =
1602     ArySize.zextOrTrunc(Target->getPointerWidth(getTargetAddressSpace(EltTy)));
1603 
1604   llvm::FoldingSetNodeID ID;
1605   ConstantArrayType::Profile(ID, EltTy, ArySize, ASM, IndexTypeQuals);
1606 
1607   void *InsertPos = 0;
1608   if (ConstantArrayType *ATP =
1609       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos))
1610     return QualType(ATP, 0);
1611 
1612   // If the element type isn't canonical or has qualifiers, this won't
1613   // be a canonical type either, so fill in the canonical type field.
1614   QualType Canon;
1615   if (!EltTy.isCanonical() || EltTy.hasLocalQualifiers()) {
1616     SplitQualType canonSplit = getCanonicalType(EltTy).split();
1617     Canon = getConstantArrayType(QualType(canonSplit.first, 0), ArySize,
1618                                  ASM, IndexTypeQuals);
1619     Canon = getQualifiedType(Canon, canonSplit.second);
1620 
1621     // Get the new insert position for the node we care about.
1622     ConstantArrayType *NewIP =
1623       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos);
1624     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1625   }
1626 
1627   ConstantArrayType *New = new(*this,TypeAlignment)
1628     ConstantArrayType(EltTy, Canon, ArySize, ASM, IndexTypeQuals);
1629   ConstantArrayTypes.InsertNode(New, InsertPos);
1630   Types.push_back(New);
1631   return QualType(New, 0);
1632 }
1633 
1634 /// getVariableArrayDecayedType - Turns the given type, which may be
1635 /// variably-modified, into the corresponding type with all the known
1636 /// sizes replaced with [*].
1637 QualType ASTContext::getVariableArrayDecayedType(QualType type) const {
1638   // Vastly most common case.
1639   if (!type->isVariablyModifiedType()) return type;
1640 
1641   QualType result;
1642 
1643   SplitQualType split = type.getSplitDesugaredType();
1644   const Type *ty = split.first;
1645   switch (ty->getTypeClass()) {
1646 #define TYPE(Class, Base)
1647 #define ABSTRACT_TYPE(Class, Base)
1648 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
1649 #include "clang/AST/TypeNodes.def"
1650     llvm_unreachable("didn't desugar past all non-canonical types?");
1651 
1652   // These types should never be variably-modified.
1653   case Type::Builtin:
1654   case Type::Complex:
1655   case Type::Vector:
1656   case Type::ExtVector:
1657   case Type::DependentSizedExtVector:
1658   case Type::ObjCObject:
1659   case Type::ObjCInterface:
1660   case Type::ObjCObjectPointer:
1661   case Type::Record:
1662   case Type::Enum:
1663   case Type::UnresolvedUsing:
1664   case Type::TypeOfExpr:
1665   case Type::TypeOf:
1666   case Type::Decltype:
1667   case Type::UnaryTransform:
1668   case Type::DependentName:
1669   case Type::InjectedClassName:
1670   case Type::TemplateSpecialization:
1671   case Type::DependentTemplateSpecialization:
1672   case Type::TemplateTypeParm:
1673   case Type::SubstTemplateTypeParmPack:
1674   case Type::Auto:
1675   case Type::PackExpansion:
1676     llvm_unreachable("type should never be variably-modified");
1677 
1678   // These types can be variably-modified but should never need to
1679   // further decay.
1680   case Type::FunctionNoProto:
1681   case Type::FunctionProto:
1682   case Type::BlockPointer:
1683   case Type::MemberPointer:
1684     return type;
1685 
1686   // These types can be variably-modified.  All these modifications
1687   // preserve structure except as noted by comments.
1688   // TODO: if we ever care about optimizing VLAs, there are no-op
1689   // optimizations available here.
1690   case Type::Pointer:
1691     result = getPointerType(getVariableArrayDecayedType(
1692                               cast<PointerType>(ty)->getPointeeType()));
1693     break;
1694 
1695   case Type::LValueReference: {
1696     const LValueReferenceType *lv = cast<LValueReferenceType>(ty);
1697     result = getLValueReferenceType(
1698                  getVariableArrayDecayedType(lv->getPointeeType()),
1699                                     lv->isSpelledAsLValue());
1700     break;
1701   }
1702 
1703   case Type::RValueReference: {
1704     const RValueReferenceType *lv = cast<RValueReferenceType>(ty);
1705     result = getRValueReferenceType(
1706                  getVariableArrayDecayedType(lv->getPointeeType()));
1707     break;
1708   }
1709 
1710   case Type::ConstantArray: {
1711     const ConstantArrayType *cat = cast<ConstantArrayType>(ty);
1712     result = getConstantArrayType(
1713                  getVariableArrayDecayedType(cat->getElementType()),
1714                                   cat->getSize(),
1715                                   cat->getSizeModifier(),
1716                                   cat->getIndexTypeCVRQualifiers());
1717     break;
1718   }
1719 
1720   case Type::DependentSizedArray: {
1721     const DependentSizedArrayType *dat = cast<DependentSizedArrayType>(ty);
1722     result = getDependentSizedArrayType(
1723                  getVariableArrayDecayedType(dat->getElementType()),
1724                                         dat->getSizeExpr(),
1725                                         dat->getSizeModifier(),
1726                                         dat->getIndexTypeCVRQualifiers(),
1727                                         dat->getBracketsRange());
1728     break;
1729   }
1730 
1731   // Turn incomplete types into [*] types.
1732   case Type::IncompleteArray: {
1733     const IncompleteArrayType *iat = cast<IncompleteArrayType>(ty);
1734     result = getVariableArrayType(
1735                  getVariableArrayDecayedType(iat->getElementType()),
1736                                   /*size*/ 0,
1737                                   ArrayType::Normal,
1738                                   iat->getIndexTypeCVRQualifiers(),
1739                                   SourceRange());
1740     break;
1741   }
1742 
1743   // Turn VLA types into [*] types.
1744   case Type::VariableArray: {
1745     const VariableArrayType *vat = cast<VariableArrayType>(ty);
1746     result = getVariableArrayType(
1747                  getVariableArrayDecayedType(vat->getElementType()),
1748                                   /*size*/ 0,
1749                                   ArrayType::Star,
1750                                   vat->getIndexTypeCVRQualifiers(),
1751                                   vat->getBracketsRange());
1752     break;
1753   }
1754   }
1755 
1756   // Apply the top-level qualifiers from the original.
1757   return getQualifiedType(result, split.second);
1758 }
1759 
1760 /// getVariableArrayType - Returns a non-unique reference to the type for a
1761 /// variable array of the specified element type.
1762 QualType ASTContext::getVariableArrayType(QualType EltTy,
1763                                           Expr *NumElts,
1764                                           ArrayType::ArraySizeModifier ASM,
1765                                           unsigned IndexTypeQuals,
1766                                           SourceRange Brackets) const {
1767   // Since we don't unique expressions, it isn't possible to unique VLA's
1768   // that have an expression provided for their size.
1769   QualType Canon;
1770 
1771   // Be sure to pull qualifiers off the element type.
1772   if (!EltTy.isCanonical() || EltTy.hasLocalQualifiers()) {
1773     SplitQualType canonSplit = getCanonicalType(EltTy).split();
1774     Canon = getVariableArrayType(QualType(canonSplit.first, 0), NumElts, ASM,
1775                                  IndexTypeQuals, Brackets);
1776     Canon = getQualifiedType(Canon, canonSplit.second);
1777   }
1778 
1779   VariableArrayType *New = new(*this, TypeAlignment)
1780     VariableArrayType(EltTy, Canon, NumElts, ASM, IndexTypeQuals, Brackets);
1781 
1782   VariableArrayTypes.push_back(New);
1783   Types.push_back(New);
1784   return QualType(New, 0);
1785 }
1786 
1787 /// getDependentSizedArrayType - Returns a non-unique reference to
1788 /// the type for a dependently-sized array of the specified element
1789 /// type.
1790 QualType ASTContext::getDependentSizedArrayType(QualType elementType,
1791                                                 Expr *numElements,
1792                                                 ArrayType::ArraySizeModifier ASM,
1793                                                 unsigned elementTypeQuals,
1794                                                 SourceRange brackets) const {
1795   assert((!numElements || numElements->isTypeDependent() ||
1796           numElements->isValueDependent()) &&
1797          "Size must be type- or value-dependent!");
1798 
1799   // Dependently-sized array types that do not have a specified number
1800   // of elements will have their sizes deduced from a dependent
1801   // initializer.  We do no canonicalization here at all, which is okay
1802   // because they can't be used in most locations.
1803   if (!numElements) {
1804     DependentSizedArrayType *newType
1805       = new (*this, TypeAlignment)
1806           DependentSizedArrayType(*this, elementType, QualType(),
1807                                   numElements, ASM, elementTypeQuals,
1808                                   brackets);
1809     Types.push_back(newType);
1810     return QualType(newType, 0);
1811   }
1812 
1813   // Otherwise, we actually build a new type every time, but we
1814   // also build a canonical type.
1815 
1816   SplitQualType canonElementType = getCanonicalType(elementType).split();
1817 
1818   void *insertPos = 0;
1819   llvm::FoldingSetNodeID ID;
1820   DependentSizedArrayType::Profile(ID, *this,
1821                                    QualType(canonElementType.first, 0),
1822                                    ASM, elementTypeQuals, numElements);
1823 
1824   // Look for an existing type with these properties.
1825   DependentSizedArrayType *canonTy =
1826     DependentSizedArrayTypes.FindNodeOrInsertPos(ID, insertPos);
1827 
1828   // If we don't have one, build one.
1829   if (!canonTy) {
1830     canonTy = new (*this, TypeAlignment)
1831       DependentSizedArrayType(*this, QualType(canonElementType.first, 0),
1832                               QualType(), numElements, ASM, elementTypeQuals,
1833                               brackets);
1834     DependentSizedArrayTypes.InsertNode(canonTy, insertPos);
1835     Types.push_back(canonTy);
1836   }
1837 
1838   // Apply qualifiers from the element type to the array.
1839   QualType canon = getQualifiedType(QualType(canonTy,0),
1840                                     canonElementType.second);
1841 
1842   // If we didn't need extra canonicalization for the element type,
1843   // then just use that as our result.
1844   if (QualType(canonElementType.first, 0) == elementType)
1845     return canon;
1846 
1847   // Otherwise, we need to build a type which follows the spelling
1848   // of the element type.
1849   DependentSizedArrayType *sugaredType
1850     = new (*this, TypeAlignment)
1851         DependentSizedArrayType(*this, elementType, canon, numElements,
1852                                 ASM, elementTypeQuals, brackets);
1853   Types.push_back(sugaredType);
1854   return QualType(sugaredType, 0);
1855 }
1856 
1857 QualType ASTContext::getIncompleteArrayType(QualType elementType,
1858                                             ArrayType::ArraySizeModifier ASM,
1859                                             unsigned elementTypeQuals) const {
1860   llvm::FoldingSetNodeID ID;
1861   IncompleteArrayType::Profile(ID, elementType, ASM, elementTypeQuals);
1862 
1863   void *insertPos = 0;
1864   if (IncompleteArrayType *iat =
1865        IncompleteArrayTypes.FindNodeOrInsertPos(ID, insertPos))
1866     return QualType(iat, 0);
1867 
1868   // If the element type isn't canonical, this won't be a canonical type
1869   // either, so fill in the canonical type field.  We also have to pull
1870   // qualifiers off the element type.
1871   QualType canon;
1872 
1873   if (!elementType.isCanonical() || elementType.hasLocalQualifiers()) {
1874     SplitQualType canonSplit = getCanonicalType(elementType).split();
1875     canon = getIncompleteArrayType(QualType(canonSplit.first, 0),
1876                                    ASM, elementTypeQuals);
1877     canon = getQualifiedType(canon, canonSplit.second);
1878 
1879     // Get the new insert position for the node we care about.
1880     IncompleteArrayType *existing =
1881       IncompleteArrayTypes.FindNodeOrInsertPos(ID, insertPos);
1882     assert(!existing && "Shouldn't be in the map!"); (void) existing;
1883   }
1884 
1885   IncompleteArrayType *newType = new (*this, TypeAlignment)
1886     IncompleteArrayType(elementType, canon, ASM, elementTypeQuals);
1887 
1888   IncompleteArrayTypes.InsertNode(newType, insertPos);
1889   Types.push_back(newType);
1890   return QualType(newType, 0);
1891 }
1892 
1893 /// getVectorType - Return the unique reference to a vector type of
1894 /// the specified element type and size. VectorType must be a built-in type.
1895 QualType ASTContext::getVectorType(QualType vecType, unsigned NumElts,
1896                                    VectorType::VectorKind VecKind) const {
1897   assert(vecType->isBuiltinType());
1898 
1899   // Check if we've already instantiated a vector of this type.
1900   llvm::FoldingSetNodeID ID;
1901   VectorType::Profile(ID, vecType, NumElts, Type::Vector, VecKind);
1902 
1903   void *InsertPos = 0;
1904   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
1905     return QualType(VTP, 0);
1906 
1907   // If the element type isn't canonical, this won't be a canonical type either,
1908   // so fill in the canonical type field.
1909   QualType Canonical;
1910   if (!vecType.isCanonical()) {
1911     Canonical = getVectorType(getCanonicalType(vecType), NumElts, VecKind);
1912 
1913     // Get the new insert position for the node we care about.
1914     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
1915     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1916   }
1917   VectorType *New = new (*this, TypeAlignment)
1918     VectorType(vecType, NumElts, Canonical, VecKind);
1919   VectorTypes.InsertNode(New, InsertPos);
1920   Types.push_back(New);
1921   return QualType(New, 0);
1922 }
1923 
1924 /// getExtVectorType - Return the unique reference to an extended vector type of
1925 /// the specified element type and size. VectorType must be a built-in type.
1926 QualType
1927 ASTContext::getExtVectorType(QualType vecType, unsigned NumElts) const {
1928   assert(vecType->isBuiltinType() || vecType->isDependentType());
1929 
1930   // Check if we've already instantiated a vector of this type.
1931   llvm::FoldingSetNodeID ID;
1932   VectorType::Profile(ID, vecType, NumElts, Type::ExtVector,
1933                       VectorType::GenericVector);
1934   void *InsertPos = 0;
1935   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
1936     return QualType(VTP, 0);
1937 
1938   // If the element type isn't canonical, this won't be a canonical type either,
1939   // so fill in the canonical type field.
1940   QualType Canonical;
1941   if (!vecType.isCanonical()) {
1942     Canonical = getExtVectorType(getCanonicalType(vecType), NumElts);
1943 
1944     // Get the new insert position for the node we care about.
1945     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
1946     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
1947   }
1948   ExtVectorType *New = new (*this, TypeAlignment)
1949     ExtVectorType(vecType, NumElts, Canonical);
1950   VectorTypes.InsertNode(New, InsertPos);
1951   Types.push_back(New);
1952   return QualType(New, 0);
1953 }
1954 
1955 QualType
1956 ASTContext::getDependentSizedExtVectorType(QualType vecType,
1957                                            Expr *SizeExpr,
1958                                            SourceLocation AttrLoc) const {
1959   llvm::FoldingSetNodeID ID;
1960   DependentSizedExtVectorType::Profile(ID, *this, getCanonicalType(vecType),
1961                                        SizeExpr);
1962 
1963   void *InsertPos = 0;
1964   DependentSizedExtVectorType *Canon
1965     = DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
1966   DependentSizedExtVectorType *New;
1967   if (Canon) {
1968     // We already have a canonical version of this array type; use it as
1969     // the canonical type for a newly-built type.
1970     New = new (*this, TypeAlignment)
1971       DependentSizedExtVectorType(*this, vecType, QualType(Canon, 0),
1972                                   SizeExpr, AttrLoc);
1973   } else {
1974     QualType CanonVecTy = getCanonicalType(vecType);
1975     if (CanonVecTy == vecType) {
1976       New = new (*this, TypeAlignment)
1977         DependentSizedExtVectorType(*this, vecType, QualType(), SizeExpr,
1978                                     AttrLoc);
1979 
1980       DependentSizedExtVectorType *CanonCheck
1981         = DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
1982       assert(!CanonCheck && "Dependent-sized ext_vector canonical type broken");
1983       (void)CanonCheck;
1984       DependentSizedExtVectorTypes.InsertNode(New, InsertPos);
1985     } else {
1986       QualType Canon = getDependentSizedExtVectorType(CanonVecTy, SizeExpr,
1987                                                       SourceLocation());
1988       New = new (*this, TypeAlignment)
1989         DependentSizedExtVectorType(*this, vecType, Canon, SizeExpr, AttrLoc);
1990     }
1991   }
1992 
1993   Types.push_back(New);
1994   return QualType(New, 0);
1995 }
1996 
1997 /// getFunctionNoProtoType - Return a K&R style C function type like 'int()'.
1998 ///
1999 QualType
2000 ASTContext::getFunctionNoProtoType(QualType ResultTy,
2001                                    const FunctionType::ExtInfo &Info) const {
2002   const CallingConv DefaultCC = Info.getCC();
2003   const CallingConv CallConv = (LangOpts.MRTD && DefaultCC == CC_Default) ?
2004                                CC_X86StdCall : DefaultCC;
2005   // Unique functions, to guarantee there is only one function of a particular
2006   // structure.
2007   llvm::FoldingSetNodeID ID;
2008   FunctionNoProtoType::Profile(ID, ResultTy, Info);
2009 
2010   void *InsertPos = 0;
2011   if (FunctionNoProtoType *FT =
2012         FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos))
2013     return QualType(FT, 0);
2014 
2015   QualType Canonical;
2016   if (!ResultTy.isCanonical() ||
2017       getCanonicalCallConv(CallConv) != CallConv) {
2018     Canonical =
2019       getFunctionNoProtoType(getCanonicalType(ResultTy),
2020                      Info.withCallingConv(getCanonicalCallConv(CallConv)));
2021 
2022     // Get the new insert position for the node we care about.
2023     FunctionNoProtoType *NewIP =
2024       FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos);
2025     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
2026   }
2027 
2028   FunctionProtoType::ExtInfo newInfo = Info.withCallingConv(CallConv);
2029   FunctionNoProtoType *New = new (*this, TypeAlignment)
2030     FunctionNoProtoType(ResultTy, Canonical, newInfo);
2031   Types.push_back(New);
2032   FunctionNoProtoTypes.InsertNode(New, InsertPos);
2033   return QualType(New, 0);
2034 }
2035 
2036 /// getFunctionType - Return a normal function type with a typed argument
2037 /// list.  isVariadic indicates whether the argument list includes '...'.
2038 QualType
2039 ASTContext::getFunctionType(QualType ResultTy,
2040                             const QualType *ArgArray, unsigned NumArgs,
2041                             const FunctionProtoType::ExtProtoInfo &EPI) const {
2042   // Unique functions, to guarantee there is only one function of a particular
2043   // structure.
2044   llvm::FoldingSetNodeID ID;
2045   FunctionProtoType::Profile(ID, ResultTy, ArgArray, NumArgs, EPI, *this);
2046 
2047   void *InsertPos = 0;
2048   if (FunctionProtoType *FTP =
2049         FunctionProtoTypes.FindNodeOrInsertPos(ID, InsertPos))
2050     return QualType(FTP, 0);
2051 
2052   // Determine whether the type being created is already canonical or not.
2053   bool isCanonical= EPI.ExceptionSpecType == EST_None && ResultTy.isCanonical();
2054   for (unsigned i = 0; i != NumArgs && isCanonical; ++i)
2055     if (!ArgArray[i].isCanonicalAsParam())
2056       isCanonical = false;
2057 
2058   const CallingConv DefaultCC = EPI.ExtInfo.getCC();
2059   const CallingConv CallConv = (LangOpts.MRTD && DefaultCC == CC_Default) ?
2060                                CC_X86StdCall : DefaultCC;
2061 
2062   // If this type isn't canonical, get the canonical version of it.
2063   // The exception spec is not part of the canonical type.
2064   QualType Canonical;
2065   if (!isCanonical || getCanonicalCallConv(CallConv) != CallConv) {
2066     SmallVector<QualType, 16> CanonicalArgs;
2067     CanonicalArgs.reserve(NumArgs);
2068     for (unsigned i = 0; i != NumArgs; ++i)
2069       CanonicalArgs.push_back(getCanonicalParamType(ArgArray[i]));
2070 
2071     FunctionProtoType::ExtProtoInfo CanonicalEPI = EPI;
2072     CanonicalEPI.ExceptionSpecType = EST_None;
2073     CanonicalEPI.NumExceptions = 0;
2074     CanonicalEPI.ExtInfo
2075       = CanonicalEPI.ExtInfo.withCallingConv(getCanonicalCallConv(CallConv));
2076 
2077     Canonical = getFunctionType(getCanonicalType(ResultTy),
2078                                 CanonicalArgs.data(), NumArgs,
2079                                 CanonicalEPI);
2080 
2081     // Get the new insert position for the node we care about.
2082     FunctionProtoType *NewIP =
2083       FunctionProtoTypes.FindNodeOrInsertPos(ID, InsertPos);
2084     assert(NewIP == 0 && "Shouldn't be in the map!"); (void)NewIP;
2085   }
2086 
2087   // FunctionProtoType objects are allocated with extra bytes after
2088   // them for three variable size arrays at the end:
2089   //  - parameter types
2090   //  - exception types
2091   //  - consumed-arguments flags
2092   // Instead of the exception types, there could be a noexcept
2093   // expression.
2094   size_t Size = sizeof(FunctionProtoType) +
2095                 NumArgs * sizeof(QualType);
2096   if (EPI.ExceptionSpecType == EST_Dynamic)
2097     Size += EPI.NumExceptions * sizeof(QualType);
2098   else if (EPI.ExceptionSpecType == EST_ComputedNoexcept) {
2099     Size += sizeof(Expr*);
2100   }
2101   if (EPI.ConsumedArguments)
2102     Size += NumArgs * sizeof(bool);
2103 
2104   FunctionProtoType *FTP = (FunctionProtoType*) Allocate(Size, TypeAlignment);
2105   FunctionProtoType::ExtProtoInfo newEPI = EPI;
2106   newEPI.ExtInfo = EPI.ExtInfo.withCallingConv(CallConv);
2107   new (FTP) FunctionProtoType(ResultTy, ArgArray, NumArgs, Canonical, newEPI);
2108   Types.push_back(FTP);
2109   FunctionProtoTypes.InsertNode(FTP, InsertPos);
2110   return QualType(FTP, 0);
2111 }
2112 
2113 #ifndef NDEBUG
2114 static bool NeedsInjectedClassNameType(const RecordDecl *D) {
2115   if (!isa<CXXRecordDecl>(D)) return false;
2116   const CXXRecordDecl *RD = cast<CXXRecordDecl>(D);
2117   if (isa<ClassTemplatePartialSpecializationDecl>(RD))
2118     return true;
2119   if (RD->getDescribedClassTemplate() &&
2120       !isa<ClassTemplateSpecializationDecl>(RD))
2121     return true;
2122   return false;
2123 }
2124 #endif
2125 
2126 /// getInjectedClassNameType - Return the unique reference to the
2127 /// injected class name type for the specified templated declaration.
2128 QualType ASTContext::getInjectedClassNameType(CXXRecordDecl *Decl,
2129                                               QualType TST) const {
2130   assert(NeedsInjectedClassNameType(Decl));
2131   if (Decl->TypeForDecl) {
2132     assert(isa<InjectedClassNameType>(Decl->TypeForDecl));
2133   } else if (CXXRecordDecl *PrevDecl = Decl->getPreviousDeclaration()) {
2134     assert(PrevDecl->TypeForDecl && "previous declaration has no type");
2135     Decl->TypeForDecl = PrevDecl->TypeForDecl;
2136     assert(isa<InjectedClassNameType>(Decl->TypeForDecl));
2137   } else {
2138     Type *newType =
2139       new (*this, TypeAlignment) InjectedClassNameType(Decl, TST);
2140     Decl->TypeForDecl = newType;
2141     Types.push_back(newType);
2142   }
2143   return QualType(Decl->TypeForDecl, 0);
2144 }
2145 
2146 /// getTypeDeclType - Return the unique reference to the type for the
2147 /// specified type declaration.
2148 QualType ASTContext::getTypeDeclTypeSlow(const TypeDecl *Decl) const {
2149   assert(Decl && "Passed null for Decl param");
2150   assert(!Decl->TypeForDecl && "TypeForDecl present in slow case");
2151 
2152   if (const TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Decl))
2153     return getTypedefType(Typedef);
2154 
2155   assert(!isa<TemplateTypeParmDecl>(Decl) &&
2156          "Template type parameter types are always available.");
2157 
2158   if (const RecordDecl *Record = dyn_cast<RecordDecl>(Decl)) {
2159     assert(!Record->getPreviousDeclaration() &&
2160            "struct/union has previous declaration");
2161     assert(!NeedsInjectedClassNameType(Record));
2162     return getRecordType(Record);
2163   } else if (const EnumDecl *Enum = dyn_cast<EnumDecl>(Decl)) {
2164     assert(!Enum->getPreviousDeclaration() &&
2165            "enum has previous declaration");
2166     return getEnumType(Enum);
2167   } else if (const UnresolvedUsingTypenameDecl *Using =
2168                dyn_cast<UnresolvedUsingTypenameDecl>(Decl)) {
2169     Type *newType = new (*this, TypeAlignment) UnresolvedUsingType(Using);
2170     Decl->TypeForDecl = newType;
2171     Types.push_back(newType);
2172   } else
2173     llvm_unreachable("TypeDecl without a type?");
2174 
2175   return QualType(Decl->TypeForDecl, 0);
2176 }
2177 
2178 /// getTypedefType - Return the unique reference to the type for the
2179 /// specified typedef name decl.
2180 QualType
2181 ASTContext::getTypedefType(const TypedefNameDecl *Decl,
2182                            QualType Canonical) const {
2183   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
2184 
2185   if (Canonical.isNull())
2186     Canonical = getCanonicalType(Decl->getUnderlyingType());
2187   TypedefType *newType = new(*this, TypeAlignment)
2188     TypedefType(Type::Typedef, Decl, Canonical);
2189   Decl->TypeForDecl = newType;
2190   Types.push_back(newType);
2191   return QualType(newType, 0);
2192 }
2193 
2194 QualType ASTContext::getRecordType(const RecordDecl *Decl) const {
2195   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
2196 
2197   if (const RecordDecl *PrevDecl = Decl->getPreviousDeclaration())
2198     if (PrevDecl->TypeForDecl)
2199       return QualType(Decl->TypeForDecl = PrevDecl->TypeForDecl, 0);
2200 
2201   RecordType *newType = new (*this, TypeAlignment) RecordType(Decl);
2202   Decl->TypeForDecl = newType;
2203   Types.push_back(newType);
2204   return QualType(newType, 0);
2205 }
2206 
2207 QualType ASTContext::getEnumType(const EnumDecl *Decl) const {
2208   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
2209 
2210   if (const EnumDecl *PrevDecl = Decl->getPreviousDeclaration())
2211     if (PrevDecl->TypeForDecl)
2212       return QualType(Decl->TypeForDecl = PrevDecl->TypeForDecl, 0);
2213 
2214   EnumType *newType = new (*this, TypeAlignment) EnumType(Decl);
2215   Decl->TypeForDecl = newType;
2216   Types.push_back(newType);
2217   return QualType(newType, 0);
2218 }
2219 
2220 QualType ASTContext::getAttributedType(AttributedType::Kind attrKind,
2221                                        QualType modifiedType,
2222                                        QualType equivalentType) {
2223   llvm::FoldingSetNodeID id;
2224   AttributedType::Profile(id, attrKind, modifiedType, equivalentType);
2225 
2226   void *insertPos = 0;
2227   AttributedType *type = AttributedTypes.FindNodeOrInsertPos(id, insertPos);
2228   if (type) return QualType(type, 0);
2229 
2230   QualType canon = getCanonicalType(equivalentType);
2231   type = new (*this, TypeAlignment)
2232            AttributedType(canon, attrKind, modifiedType, equivalentType);
2233 
2234   Types.push_back(type);
2235   AttributedTypes.InsertNode(type, insertPos);
2236 
2237   return QualType(type, 0);
2238 }
2239 
2240 
2241 /// \brief Retrieve a substitution-result type.
2242 QualType
2243 ASTContext::getSubstTemplateTypeParmType(const TemplateTypeParmType *Parm,
2244                                          QualType Replacement) const {
2245   assert(Replacement.isCanonical()
2246          && "replacement types must always be canonical");
2247 
2248   llvm::FoldingSetNodeID ID;
2249   SubstTemplateTypeParmType::Profile(ID, Parm, Replacement);
2250   void *InsertPos = 0;
2251   SubstTemplateTypeParmType *SubstParm
2252     = SubstTemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
2253 
2254   if (!SubstParm) {
2255     SubstParm = new (*this, TypeAlignment)
2256       SubstTemplateTypeParmType(Parm, Replacement);
2257     Types.push_back(SubstParm);
2258     SubstTemplateTypeParmTypes.InsertNode(SubstParm, InsertPos);
2259   }
2260 
2261   return QualType(SubstParm, 0);
2262 }
2263 
2264 /// \brief Retrieve a
2265 QualType ASTContext::getSubstTemplateTypeParmPackType(
2266                                           const TemplateTypeParmType *Parm,
2267                                               const TemplateArgument &ArgPack) {
2268 #ifndef NDEBUG
2269   for (TemplateArgument::pack_iterator P = ArgPack.pack_begin(),
2270                                     PEnd = ArgPack.pack_end();
2271        P != PEnd; ++P) {
2272     assert(P->getKind() == TemplateArgument::Type &&"Pack contains a non-type");
2273     assert(P->getAsType().isCanonical() && "Pack contains non-canonical type");
2274   }
2275 #endif
2276 
2277   llvm::FoldingSetNodeID ID;
2278   SubstTemplateTypeParmPackType::Profile(ID, Parm, ArgPack);
2279   void *InsertPos = 0;
2280   if (SubstTemplateTypeParmPackType *SubstParm
2281         = SubstTemplateTypeParmPackTypes.FindNodeOrInsertPos(ID, InsertPos))
2282     return QualType(SubstParm, 0);
2283 
2284   QualType Canon;
2285   if (!Parm->isCanonicalUnqualified()) {
2286     Canon = getCanonicalType(QualType(Parm, 0));
2287     Canon = getSubstTemplateTypeParmPackType(cast<TemplateTypeParmType>(Canon),
2288                                              ArgPack);
2289     SubstTemplateTypeParmPackTypes.FindNodeOrInsertPos(ID, InsertPos);
2290   }
2291 
2292   SubstTemplateTypeParmPackType *SubstParm
2293     = new (*this, TypeAlignment) SubstTemplateTypeParmPackType(Parm, Canon,
2294                                                                ArgPack);
2295   Types.push_back(SubstParm);
2296   SubstTemplateTypeParmTypes.InsertNode(SubstParm, InsertPos);
2297   return QualType(SubstParm, 0);
2298 }
2299 
2300 /// \brief Retrieve the template type parameter type for a template
2301 /// parameter or parameter pack with the given depth, index, and (optionally)
2302 /// name.
2303 QualType ASTContext::getTemplateTypeParmType(unsigned Depth, unsigned Index,
2304                                              bool ParameterPack,
2305                                              TemplateTypeParmDecl *TTPDecl) const {
2306   llvm::FoldingSetNodeID ID;
2307   TemplateTypeParmType::Profile(ID, Depth, Index, ParameterPack, TTPDecl);
2308   void *InsertPos = 0;
2309   TemplateTypeParmType *TypeParm
2310     = TemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
2311 
2312   if (TypeParm)
2313     return QualType(TypeParm, 0);
2314 
2315   if (TTPDecl) {
2316     QualType Canon = getTemplateTypeParmType(Depth, Index, ParameterPack);
2317     TypeParm = new (*this, TypeAlignment) TemplateTypeParmType(TTPDecl, Canon);
2318 
2319     TemplateTypeParmType *TypeCheck
2320       = TemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
2321     assert(!TypeCheck && "Template type parameter canonical type broken");
2322     (void)TypeCheck;
2323   } else
2324     TypeParm = new (*this, TypeAlignment)
2325       TemplateTypeParmType(Depth, Index, ParameterPack);
2326 
2327   Types.push_back(TypeParm);
2328   TemplateTypeParmTypes.InsertNode(TypeParm, InsertPos);
2329 
2330   return QualType(TypeParm, 0);
2331 }
2332 
2333 TypeSourceInfo *
2334 ASTContext::getTemplateSpecializationTypeInfo(TemplateName Name,
2335                                               SourceLocation NameLoc,
2336                                         const TemplateArgumentListInfo &Args,
2337                                               QualType Underlying) const {
2338   assert(!Name.getAsDependentTemplateName() &&
2339          "No dependent template names here!");
2340   QualType TST = getTemplateSpecializationType(Name, Args, Underlying);
2341 
2342   TypeSourceInfo *DI = CreateTypeSourceInfo(TST);
2343   TemplateSpecializationTypeLoc TL
2344     = cast<TemplateSpecializationTypeLoc>(DI->getTypeLoc());
2345   TL.setTemplateNameLoc(NameLoc);
2346   TL.setLAngleLoc(Args.getLAngleLoc());
2347   TL.setRAngleLoc(Args.getRAngleLoc());
2348   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
2349     TL.setArgLocInfo(i, Args[i].getLocInfo());
2350   return DI;
2351 }
2352 
2353 QualType
2354 ASTContext::getTemplateSpecializationType(TemplateName Template,
2355                                           const TemplateArgumentListInfo &Args,
2356                                           QualType Underlying) const {
2357   assert(!Template.getAsDependentTemplateName() &&
2358          "No dependent template names here!");
2359 
2360   unsigned NumArgs = Args.size();
2361 
2362   SmallVector<TemplateArgument, 4> ArgVec;
2363   ArgVec.reserve(NumArgs);
2364   for (unsigned i = 0; i != NumArgs; ++i)
2365     ArgVec.push_back(Args[i].getArgument());
2366 
2367   return getTemplateSpecializationType(Template, ArgVec.data(), NumArgs,
2368                                        Underlying);
2369 }
2370 
2371 QualType
2372 ASTContext::getTemplateSpecializationType(TemplateName Template,
2373                                           const TemplateArgument *Args,
2374                                           unsigned NumArgs,
2375                                           QualType Underlying) const {
2376   assert(!Template.getAsDependentTemplateName() &&
2377          "No dependent template names here!");
2378   // Look through qualified template names.
2379   if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
2380     Template = TemplateName(QTN->getTemplateDecl());
2381 
2382   bool isTypeAlias =
2383     Template.getAsTemplateDecl() &&
2384     isa<TypeAliasTemplateDecl>(Template.getAsTemplateDecl());
2385 
2386   QualType CanonType;
2387   if (!Underlying.isNull())
2388     CanonType = getCanonicalType(Underlying);
2389   else {
2390     assert(!isTypeAlias &&
2391            "Underlying type for template alias must be computed by caller");
2392     CanonType = getCanonicalTemplateSpecializationType(Template, Args,
2393                                                        NumArgs);
2394   }
2395 
2396   // Allocate the (non-canonical) template specialization type, but don't
2397   // try to unique it: these types typically have location information that
2398   // we don't unique and don't want to lose.
2399   void *Mem = Allocate(sizeof(TemplateSpecializationType) +
2400                        sizeof(TemplateArgument) * NumArgs +
2401                        (isTypeAlias ? sizeof(QualType) : 0),
2402                        TypeAlignment);
2403   TemplateSpecializationType *Spec
2404     = new (Mem) TemplateSpecializationType(Template,
2405                                            Args, NumArgs,
2406                                            CanonType,
2407                                          isTypeAlias ? Underlying : QualType());
2408 
2409   Types.push_back(Spec);
2410   return QualType(Spec, 0);
2411 }
2412 
2413 QualType
2414 ASTContext::getCanonicalTemplateSpecializationType(TemplateName Template,
2415                                                    const TemplateArgument *Args,
2416                                                    unsigned NumArgs) const {
2417   assert(!Template.getAsDependentTemplateName() &&
2418          "No dependent template names here!");
2419   assert((!Template.getAsTemplateDecl() ||
2420           !isa<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) &&
2421          "Underlying type for template alias must be computed by caller");
2422 
2423   // Look through qualified template names.
2424   if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
2425     Template = TemplateName(QTN->getTemplateDecl());
2426 
2427   // Build the canonical template specialization type.
2428   TemplateName CanonTemplate = getCanonicalTemplateName(Template);
2429   SmallVector<TemplateArgument, 4> CanonArgs;
2430   CanonArgs.reserve(NumArgs);
2431   for (unsigned I = 0; I != NumArgs; ++I)
2432     CanonArgs.push_back(getCanonicalTemplateArgument(Args[I]));
2433 
2434   // Determine whether this canonical template specialization type already
2435   // exists.
2436   llvm::FoldingSetNodeID ID;
2437   TemplateSpecializationType::Profile(ID, CanonTemplate,
2438                                       CanonArgs.data(), NumArgs, *this);
2439 
2440   void *InsertPos = 0;
2441   TemplateSpecializationType *Spec
2442     = TemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
2443 
2444   if (!Spec) {
2445     // Allocate a new canonical template specialization type.
2446     void *Mem = Allocate((sizeof(TemplateSpecializationType) +
2447                           sizeof(TemplateArgument) * NumArgs),
2448                          TypeAlignment);
2449     Spec = new (Mem) TemplateSpecializationType(CanonTemplate,
2450                                                 CanonArgs.data(), NumArgs,
2451                                                 QualType(), QualType());
2452     Types.push_back(Spec);
2453     TemplateSpecializationTypes.InsertNode(Spec, InsertPos);
2454   }
2455 
2456   assert(Spec->isDependentType() &&
2457          "Non-dependent template-id type must have a canonical type");
2458   return QualType(Spec, 0);
2459 }
2460 
2461 QualType
2462 ASTContext::getElaboratedType(ElaboratedTypeKeyword Keyword,
2463                               NestedNameSpecifier *NNS,
2464                               QualType NamedType) const {
2465   llvm::FoldingSetNodeID ID;
2466   ElaboratedType::Profile(ID, Keyword, NNS, NamedType);
2467 
2468   void *InsertPos = 0;
2469   ElaboratedType *T = ElaboratedTypes.FindNodeOrInsertPos(ID, InsertPos);
2470   if (T)
2471     return QualType(T, 0);
2472 
2473   QualType Canon = NamedType;
2474   if (!Canon.isCanonical()) {
2475     Canon = getCanonicalType(NamedType);
2476     ElaboratedType *CheckT = ElaboratedTypes.FindNodeOrInsertPos(ID, InsertPos);
2477     assert(!CheckT && "Elaborated canonical type broken");
2478     (void)CheckT;
2479   }
2480 
2481   T = new (*this) ElaboratedType(Keyword, NNS, NamedType, Canon);
2482   Types.push_back(T);
2483   ElaboratedTypes.InsertNode(T, InsertPos);
2484   return QualType(T, 0);
2485 }
2486 
2487 QualType
2488 ASTContext::getParenType(QualType InnerType) const {
2489   llvm::FoldingSetNodeID ID;
2490   ParenType::Profile(ID, InnerType);
2491 
2492   void *InsertPos = 0;
2493   ParenType *T = ParenTypes.FindNodeOrInsertPos(ID, InsertPos);
2494   if (T)
2495     return QualType(T, 0);
2496 
2497   QualType Canon = InnerType;
2498   if (!Canon.isCanonical()) {
2499     Canon = getCanonicalType(InnerType);
2500     ParenType *CheckT = ParenTypes.FindNodeOrInsertPos(ID, InsertPos);
2501     assert(!CheckT && "Paren canonical type broken");
2502     (void)CheckT;
2503   }
2504 
2505   T = new (*this) ParenType(InnerType, Canon);
2506   Types.push_back(T);
2507   ParenTypes.InsertNode(T, InsertPos);
2508   return QualType(T, 0);
2509 }
2510 
2511 QualType ASTContext::getDependentNameType(ElaboratedTypeKeyword Keyword,
2512                                           NestedNameSpecifier *NNS,
2513                                           const IdentifierInfo *Name,
2514                                           QualType Canon) const {
2515   assert(NNS->isDependent() && "nested-name-specifier must be dependent");
2516 
2517   if (Canon.isNull()) {
2518     NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
2519     ElaboratedTypeKeyword CanonKeyword = Keyword;
2520     if (Keyword == ETK_None)
2521       CanonKeyword = ETK_Typename;
2522 
2523     if (CanonNNS != NNS || CanonKeyword != Keyword)
2524       Canon = getDependentNameType(CanonKeyword, CanonNNS, Name);
2525   }
2526 
2527   llvm::FoldingSetNodeID ID;
2528   DependentNameType::Profile(ID, Keyword, NNS, Name);
2529 
2530   void *InsertPos = 0;
2531   DependentNameType *T
2532     = DependentNameTypes.FindNodeOrInsertPos(ID, InsertPos);
2533   if (T)
2534     return QualType(T, 0);
2535 
2536   T = new (*this) DependentNameType(Keyword, NNS, Name, Canon);
2537   Types.push_back(T);
2538   DependentNameTypes.InsertNode(T, InsertPos);
2539   return QualType(T, 0);
2540 }
2541 
2542 QualType
2543 ASTContext::getDependentTemplateSpecializationType(
2544                                  ElaboratedTypeKeyword Keyword,
2545                                  NestedNameSpecifier *NNS,
2546                                  const IdentifierInfo *Name,
2547                                  const TemplateArgumentListInfo &Args) const {
2548   // TODO: avoid this copy
2549   SmallVector<TemplateArgument, 16> ArgCopy;
2550   for (unsigned I = 0, E = Args.size(); I != E; ++I)
2551     ArgCopy.push_back(Args[I].getArgument());
2552   return getDependentTemplateSpecializationType(Keyword, NNS, Name,
2553                                                 ArgCopy.size(),
2554                                                 ArgCopy.data());
2555 }
2556 
2557 QualType
2558 ASTContext::getDependentTemplateSpecializationType(
2559                                  ElaboratedTypeKeyword Keyword,
2560                                  NestedNameSpecifier *NNS,
2561                                  const IdentifierInfo *Name,
2562                                  unsigned NumArgs,
2563                                  const TemplateArgument *Args) const {
2564   assert((!NNS || NNS->isDependent()) &&
2565          "nested-name-specifier must be dependent");
2566 
2567   llvm::FoldingSetNodeID ID;
2568   DependentTemplateSpecializationType::Profile(ID, *this, Keyword, NNS,
2569                                                Name, NumArgs, Args);
2570 
2571   void *InsertPos = 0;
2572   DependentTemplateSpecializationType *T
2573     = DependentTemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
2574   if (T)
2575     return QualType(T, 0);
2576 
2577   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
2578 
2579   ElaboratedTypeKeyword CanonKeyword = Keyword;
2580   if (Keyword == ETK_None) CanonKeyword = ETK_Typename;
2581 
2582   bool AnyNonCanonArgs = false;
2583   SmallVector<TemplateArgument, 16> CanonArgs(NumArgs);
2584   for (unsigned I = 0; I != NumArgs; ++I) {
2585     CanonArgs[I] = getCanonicalTemplateArgument(Args[I]);
2586     if (!CanonArgs[I].structurallyEquals(Args[I]))
2587       AnyNonCanonArgs = true;
2588   }
2589 
2590   QualType Canon;
2591   if (AnyNonCanonArgs || CanonNNS != NNS || CanonKeyword != Keyword) {
2592     Canon = getDependentTemplateSpecializationType(CanonKeyword, CanonNNS,
2593                                                    Name, NumArgs,
2594                                                    CanonArgs.data());
2595 
2596     // Find the insert position again.
2597     DependentTemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
2598   }
2599 
2600   void *Mem = Allocate((sizeof(DependentTemplateSpecializationType) +
2601                         sizeof(TemplateArgument) * NumArgs),
2602                        TypeAlignment);
2603   T = new (Mem) DependentTemplateSpecializationType(Keyword, NNS,
2604                                                     Name, NumArgs, Args, Canon);
2605   Types.push_back(T);
2606   DependentTemplateSpecializationTypes.InsertNode(T, InsertPos);
2607   return QualType(T, 0);
2608 }
2609 
2610 QualType ASTContext::getPackExpansionType(QualType Pattern,
2611                                       llvm::Optional<unsigned> NumExpansions) {
2612   llvm::FoldingSetNodeID ID;
2613   PackExpansionType::Profile(ID, Pattern, NumExpansions);
2614 
2615   assert(Pattern->containsUnexpandedParameterPack() &&
2616          "Pack expansions must expand one or more parameter packs");
2617   void *InsertPos = 0;
2618   PackExpansionType *T
2619     = PackExpansionTypes.FindNodeOrInsertPos(ID, InsertPos);
2620   if (T)
2621     return QualType(T, 0);
2622 
2623   QualType Canon;
2624   if (!Pattern.isCanonical()) {
2625     Canon = getPackExpansionType(getCanonicalType(Pattern), NumExpansions);
2626 
2627     // Find the insert position again.
2628     PackExpansionTypes.FindNodeOrInsertPos(ID, InsertPos);
2629   }
2630 
2631   T = new (*this) PackExpansionType(Pattern, Canon, NumExpansions);
2632   Types.push_back(T);
2633   PackExpansionTypes.InsertNode(T, InsertPos);
2634   return QualType(T, 0);
2635 }
2636 
2637 /// CmpProtocolNames - Comparison predicate for sorting protocols
2638 /// alphabetically.
2639 static bool CmpProtocolNames(const ObjCProtocolDecl *LHS,
2640                             const ObjCProtocolDecl *RHS) {
2641   return LHS->getDeclName() < RHS->getDeclName();
2642 }
2643 
2644 static bool areSortedAndUniqued(ObjCProtocolDecl * const *Protocols,
2645                                 unsigned NumProtocols) {
2646   if (NumProtocols == 0) return true;
2647 
2648   for (unsigned i = 1; i != NumProtocols; ++i)
2649     if (!CmpProtocolNames(Protocols[i-1], Protocols[i]))
2650       return false;
2651   return true;
2652 }
2653 
2654 static void SortAndUniqueProtocols(ObjCProtocolDecl **Protocols,
2655                                    unsigned &NumProtocols) {
2656   ObjCProtocolDecl **ProtocolsEnd = Protocols+NumProtocols;
2657 
2658   // Sort protocols, keyed by name.
2659   std::sort(Protocols, Protocols+NumProtocols, CmpProtocolNames);
2660 
2661   // Remove duplicates.
2662   ProtocolsEnd = std::unique(Protocols, ProtocolsEnd);
2663   NumProtocols = ProtocolsEnd-Protocols;
2664 }
2665 
2666 QualType ASTContext::getObjCObjectType(QualType BaseType,
2667                                        ObjCProtocolDecl * const *Protocols,
2668                                        unsigned NumProtocols) const {
2669   // If the base type is an interface and there aren't any protocols
2670   // to add, then the interface type will do just fine.
2671   if (!NumProtocols && isa<ObjCInterfaceType>(BaseType))
2672     return BaseType;
2673 
2674   // Look in the folding set for an existing type.
2675   llvm::FoldingSetNodeID ID;
2676   ObjCObjectTypeImpl::Profile(ID, BaseType, Protocols, NumProtocols);
2677   void *InsertPos = 0;
2678   if (ObjCObjectType *QT = ObjCObjectTypes.FindNodeOrInsertPos(ID, InsertPos))
2679     return QualType(QT, 0);
2680 
2681   // Build the canonical type, which has the canonical base type and
2682   // a sorted-and-uniqued list of protocols.
2683   QualType Canonical;
2684   bool ProtocolsSorted = areSortedAndUniqued(Protocols, NumProtocols);
2685   if (!ProtocolsSorted || !BaseType.isCanonical()) {
2686     if (!ProtocolsSorted) {
2687       SmallVector<ObjCProtocolDecl*, 8> Sorted(Protocols,
2688                                                      Protocols + NumProtocols);
2689       unsigned UniqueCount = NumProtocols;
2690 
2691       SortAndUniqueProtocols(&Sorted[0], UniqueCount);
2692       Canonical = getObjCObjectType(getCanonicalType(BaseType),
2693                                     &Sorted[0], UniqueCount);
2694     } else {
2695       Canonical = getObjCObjectType(getCanonicalType(BaseType),
2696                                     Protocols, NumProtocols);
2697     }
2698 
2699     // Regenerate InsertPos.
2700     ObjCObjectTypes.FindNodeOrInsertPos(ID, InsertPos);
2701   }
2702 
2703   unsigned Size = sizeof(ObjCObjectTypeImpl);
2704   Size += NumProtocols * sizeof(ObjCProtocolDecl *);
2705   void *Mem = Allocate(Size, TypeAlignment);
2706   ObjCObjectTypeImpl *T =
2707     new (Mem) ObjCObjectTypeImpl(Canonical, BaseType, Protocols, NumProtocols);
2708 
2709   Types.push_back(T);
2710   ObjCObjectTypes.InsertNode(T, InsertPos);
2711   return QualType(T, 0);
2712 }
2713 
2714 /// getObjCObjectPointerType - Return a ObjCObjectPointerType type for
2715 /// the given object type.
2716 QualType ASTContext::getObjCObjectPointerType(QualType ObjectT) const {
2717   llvm::FoldingSetNodeID ID;
2718   ObjCObjectPointerType::Profile(ID, ObjectT);
2719 
2720   void *InsertPos = 0;
2721   if (ObjCObjectPointerType *QT =
2722               ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
2723     return QualType(QT, 0);
2724 
2725   // Find the canonical object type.
2726   QualType Canonical;
2727   if (!ObjectT.isCanonical()) {
2728     Canonical = getObjCObjectPointerType(getCanonicalType(ObjectT));
2729 
2730     // Regenerate InsertPos.
2731     ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
2732   }
2733 
2734   // No match.
2735   void *Mem = Allocate(sizeof(ObjCObjectPointerType), TypeAlignment);
2736   ObjCObjectPointerType *QType =
2737     new (Mem) ObjCObjectPointerType(Canonical, ObjectT);
2738 
2739   Types.push_back(QType);
2740   ObjCObjectPointerTypes.InsertNode(QType, InsertPos);
2741   return QualType(QType, 0);
2742 }
2743 
2744 /// getObjCInterfaceType - Return the unique reference to the type for the
2745 /// specified ObjC interface decl. The list of protocols is optional.
2746 QualType ASTContext::getObjCInterfaceType(const ObjCInterfaceDecl *Decl) const {
2747   if (Decl->TypeForDecl)
2748     return QualType(Decl->TypeForDecl, 0);
2749 
2750   // FIXME: redeclarations?
2751   void *Mem = Allocate(sizeof(ObjCInterfaceType), TypeAlignment);
2752   ObjCInterfaceType *T = new (Mem) ObjCInterfaceType(Decl);
2753   Decl->TypeForDecl = T;
2754   Types.push_back(T);
2755   return QualType(T, 0);
2756 }
2757 
2758 /// getTypeOfExprType - Unlike many "get<Type>" functions, we can't unique
2759 /// TypeOfExprType AST's (since expression's are never shared). For example,
2760 /// multiple declarations that refer to "typeof(x)" all contain different
2761 /// DeclRefExpr's. This doesn't effect the type checker, since it operates
2762 /// on canonical type's (which are always unique).
2763 QualType ASTContext::getTypeOfExprType(Expr *tofExpr) const {
2764   TypeOfExprType *toe;
2765   if (tofExpr->isTypeDependent()) {
2766     llvm::FoldingSetNodeID ID;
2767     DependentTypeOfExprType::Profile(ID, *this, tofExpr);
2768 
2769     void *InsertPos = 0;
2770     DependentTypeOfExprType *Canon
2771       = DependentTypeOfExprTypes.FindNodeOrInsertPos(ID, InsertPos);
2772     if (Canon) {
2773       // We already have a "canonical" version of an identical, dependent
2774       // typeof(expr) type. Use that as our canonical type.
2775       toe = new (*this, TypeAlignment) TypeOfExprType(tofExpr,
2776                                           QualType((TypeOfExprType*)Canon, 0));
2777     } else {
2778       // Build a new, canonical typeof(expr) type.
2779       Canon
2780         = new (*this, TypeAlignment) DependentTypeOfExprType(*this, tofExpr);
2781       DependentTypeOfExprTypes.InsertNode(Canon, InsertPos);
2782       toe = Canon;
2783     }
2784   } else {
2785     QualType Canonical = getCanonicalType(tofExpr->getType());
2786     toe = new (*this, TypeAlignment) TypeOfExprType(tofExpr, Canonical);
2787   }
2788   Types.push_back(toe);
2789   return QualType(toe, 0);
2790 }
2791 
2792 /// getTypeOfType -  Unlike many "get<Type>" functions, we don't unique
2793 /// TypeOfType AST's. The only motivation to unique these nodes would be
2794 /// memory savings. Since typeof(t) is fairly uncommon, space shouldn't be
2795 /// an issue. This doesn't effect the type checker, since it operates
2796 /// on canonical type's (which are always unique).
2797 QualType ASTContext::getTypeOfType(QualType tofType) const {
2798   QualType Canonical = getCanonicalType(tofType);
2799   TypeOfType *tot = new (*this, TypeAlignment) TypeOfType(tofType, Canonical);
2800   Types.push_back(tot);
2801   return QualType(tot, 0);
2802 }
2803 
2804 /// getDecltypeForExpr - Given an expr, will return the decltype for that
2805 /// expression, according to the rules in C++0x [dcl.type.simple]p4
2806 static QualType getDecltypeForExpr(const Expr *e, const ASTContext &Context) {
2807   if (e->isTypeDependent())
2808     return Context.DependentTy;
2809 
2810   // If e is an id expression or a class member access, decltype(e) is defined
2811   // as the type of the entity named by e.
2812   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(e)) {
2813     if (const ValueDecl *VD = dyn_cast<ValueDecl>(DRE->getDecl()))
2814       return VD->getType();
2815   }
2816   if (const MemberExpr *ME = dyn_cast<MemberExpr>(e)) {
2817     if (const FieldDecl *FD = dyn_cast<FieldDecl>(ME->getMemberDecl()))
2818       return FD->getType();
2819   }
2820   // If e is a function call or an invocation of an overloaded operator,
2821   // (parentheses around e are ignored), decltype(e) is defined as the
2822   // return type of that function.
2823   if (const CallExpr *CE = dyn_cast<CallExpr>(e->IgnoreParens()))
2824     return CE->getCallReturnType();
2825 
2826   QualType T = e->getType();
2827 
2828   // Otherwise, where T is the type of e, if e is an lvalue, decltype(e) is
2829   // defined as T&, otherwise decltype(e) is defined as T.
2830   if (e->isLValue())
2831     T = Context.getLValueReferenceType(T);
2832 
2833   return T;
2834 }
2835 
2836 /// getDecltypeType -  Unlike many "get<Type>" functions, we don't unique
2837 /// DecltypeType AST's. The only motivation to unique these nodes would be
2838 /// memory savings. Since decltype(t) is fairly uncommon, space shouldn't be
2839 /// an issue. This doesn't effect the type checker, since it operates
2840 /// on canonical type's (which are always unique).
2841 QualType ASTContext::getDecltypeType(Expr *e) const {
2842   DecltypeType *dt;
2843 
2844   // C++0x [temp.type]p2:
2845   //   If an expression e involves a template parameter, decltype(e) denotes a
2846   //   unique dependent type. Two such decltype-specifiers refer to the same
2847   //   type only if their expressions are equivalent (14.5.6.1).
2848   if (e->isInstantiationDependent()) {
2849     llvm::FoldingSetNodeID ID;
2850     DependentDecltypeType::Profile(ID, *this, e);
2851 
2852     void *InsertPos = 0;
2853     DependentDecltypeType *Canon
2854       = DependentDecltypeTypes.FindNodeOrInsertPos(ID, InsertPos);
2855     if (Canon) {
2856       // We already have a "canonical" version of an equivalent, dependent
2857       // decltype type. Use that as our canonical type.
2858       dt = new (*this, TypeAlignment) DecltypeType(e, DependentTy,
2859                                        QualType((DecltypeType*)Canon, 0));
2860     } else {
2861       // Build a new, canonical typeof(expr) type.
2862       Canon = new (*this, TypeAlignment) DependentDecltypeType(*this, e);
2863       DependentDecltypeTypes.InsertNode(Canon, InsertPos);
2864       dt = Canon;
2865     }
2866   } else {
2867     QualType T = getDecltypeForExpr(e, *this);
2868     dt = new (*this, TypeAlignment) DecltypeType(e, T, getCanonicalType(T));
2869   }
2870   Types.push_back(dt);
2871   return QualType(dt, 0);
2872 }
2873 
2874 /// getUnaryTransformationType - We don't unique these, since the memory
2875 /// savings are minimal and these are rare.
2876 QualType ASTContext::getUnaryTransformType(QualType BaseType,
2877                                            QualType UnderlyingType,
2878                                            UnaryTransformType::UTTKind Kind)
2879     const {
2880   UnaryTransformType *Ty =
2881     new (*this, TypeAlignment) UnaryTransformType (BaseType, UnderlyingType,
2882                                                    Kind,
2883                                  UnderlyingType->isDependentType() ?
2884                                     QualType() : UnderlyingType);
2885   Types.push_back(Ty);
2886   return QualType(Ty, 0);
2887 }
2888 
2889 /// getAutoType - We only unique auto types after they've been deduced.
2890 QualType ASTContext::getAutoType(QualType DeducedType) const {
2891   void *InsertPos = 0;
2892   if (!DeducedType.isNull()) {
2893     // Look in the folding set for an existing type.
2894     llvm::FoldingSetNodeID ID;
2895     AutoType::Profile(ID, DeducedType);
2896     if (AutoType *AT = AutoTypes.FindNodeOrInsertPos(ID, InsertPos))
2897       return QualType(AT, 0);
2898   }
2899 
2900   AutoType *AT = new (*this, TypeAlignment) AutoType(DeducedType);
2901   Types.push_back(AT);
2902   if (InsertPos)
2903     AutoTypes.InsertNode(AT, InsertPos);
2904   return QualType(AT, 0);
2905 }
2906 
2907 /// getAutoDeductType - Get type pattern for deducing against 'auto'.
2908 QualType ASTContext::getAutoDeductType() const {
2909   if (AutoDeductTy.isNull())
2910     AutoDeductTy = getAutoType(QualType());
2911   assert(!AutoDeductTy.isNull() && "can't build 'auto' pattern");
2912   return AutoDeductTy;
2913 }
2914 
2915 /// getAutoRRefDeductType - Get type pattern for deducing against 'auto &&'.
2916 QualType ASTContext::getAutoRRefDeductType() const {
2917   if (AutoRRefDeductTy.isNull())
2918     AutoRRefDeductTy = getRValueReferenceType(getAutoDeductType());
2919   assert(!AutoRRefDeductTy.isNull() && "can't build 'auto &&' pattern");
2920   return AutoRRefDeductTy;
2921 }
2922 
2923 /// getTagDeclType - Return the unique reference to the type for the
2924 /// specified TagDecl (struct/union/class/enum) decl.
2925 QualType ASTContext::getTagDeclType(const TagDecl *Decl) const {
2926   assert (Decl);
2927   // FIXME: What is the design on getTagDeclType when it requires casting
2928   // away const?  mutable?
2929   return getTypeDeclType(const_cast<TagDecl*>(Decl));
2930 }
2931 
2932 /// getSizeType - Return the unique type for "size_t" (C99 7.17), the result
2933 /// of the sizeof operator (C99 6.5.3.4p4). The value is target dependent and
2934 /// needs to agree with the definition in <stddef.h>.
2935 CanQualType ASTContext::getSizeType() const {
2936   return getFromTargetType(Target->getSizeType());
2937 }
2938 
2939 /// getSignedWCharType - Return the type of "signed wchar_t".
2940 /// Used when in C++, as a GCC extension.
2941 QualType ASTContext::getSignedWCharType() const {
2942   // FIXME: derive from "Target" ?
2943   return WCharTy;
2944 }
2945 
2946 /// getUnsignedWCharType - Return the type of "unsigned wchar_t".
2947 /// Used when in C++, as a GCC extension.
2948 QualType ASTContext::getUnsignedWCharType() const {
2949   // FIXME: derive from "Target" ?
2950   return UnsignedIntTy;
2951 }
2952 
2953 /// getPointerDiffType - Return the unique type for "ptrdiff_t" (ref?)
2954 /// defined in <stddef.h>. Pointer - pointer requires this (C99 6.5.6p9).
2955 QualType ASTContext::getPointerDiffType() const {
2956   return getFromTargetType(Target->getPtrDiffType(0));
2957 }
2958 
2959 //===----------------------------------------------------------------------===//
2960 //                              Type Operators
2961 //===----------------------------------------------------------------------===//
2962 
2963 CanQualType ASTContext::getCanonicalParamType(QualType T) const {
2964   // Push qualifiers into arrays, and then discard any remaining
2965   // qualifiers.
2966   T = getCanonicalType(T);
2967   T = getVariableArrayDecayedType(T);
2968   const Type *Ty = T.getTypePtr();
2969   QualType Result;
2970   if (isa<ArrayType>(Ty)) {
2971     Result = getArrayDecayedType(QualType(Ty,0));
2972   } else if (isa<FunctionType>(Ty)) {
2973     Result = getPointerType(QualType(Ty, 0));
2974   } else {
2975     Result = QualType(Ty, 0);
2976   }
2977 
2978   return CanQualType::CreateUnsafe(Result);
2979 }
2980 
2981 QualType ASTContext::getUnqualifiedArrayType(QualType type,
2982                                              Qualifiers &quals) {
2983   SplitQualType splitType = type.getSplitUnqualifiedType();
2984 
2985   // FIXME: getSplitUnqualifiedType() actually walks all the way to
2986   // the unqualified desugared type and then drops it on the floor.
2987   // We then have to strip that sugar back off with
2988   // getUnqualifiedDesugaredType(), which is silly.
2989   const ArrayType *AT =
2990     dyn_cast<ArrayType>(splitType.first->getUnqualifiedDesugaredType());
2991 
2992   // If we don't have an array, just use the results in splitType.
2993   if (!AT) {
2994     quals = splitType.second;
2995     return QualType(splitType.first, 0);
2996   }
2997 
2998   // Otherwise, recurse on the array's element type.
2999   QualType elementType = AT->getElementType();
3000   QualType unqualElementType = getUnqualifiedArrayType(elementType, quals);
3001 
3002   // If that didn't change the element type, AT has no qualifiers, so we
3003   // can just use the results in splitType.
3004   if (elementType == unqualElementType) {
3005     assert(quals.empty()); // from the recursive call
3006     quals = splitType.second;
3007     return QualType(splitType.first, 0);
3008   }
3009 
3010   // Otherwise, add in the qualifiers from the outermost type, then
3011   // build the type back up.
3012   quals.addConsistentQualifiers(splitType.second);
3013 
3014   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT)) {
3015     return getConstantArrayType(unqualElementType, CAT->getSize(),
3016                                 CAT->getSizeModifier(), 0);
3017   }
3018 
3019   if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
3020     return getIncompleteArrayType(unqualElementType, IAT->getSizeModifier(), 0);
3021   }
3022 
3023   if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(AT)) {
3024     return getVariableArrayType(unqualElementType,
3025                                 VAT->getSizeExpr(),
3026                                 VAT->getSizeModifier(),
3027                                 VAT->getIndexTypeCVRQualifiers(),
3028                                 VAT->getBracketsRange());
3029   }
3030 
3031   const DependentSizedArrayType *DSAT = cast<DependentSizedArrayType>(AT);
3032   return getDependentSizedArrayType(unqualElementType, DSAT->getSizeExpr(),
3033                                     DSAT->getSizeModifier(), 0,
3034                                     SourceRange());
3035 }
3036 
3037 /// UnwrapSimilarPointerTypes - If T1 and T2 are pointer types  that
3038 /// may be similar (C++ 4.4), replaces T1 and T2 with the type that
3039 /// they point to and return true. If T1 and T2 aren't pointer types
3040 /// or pointer-to-member types, or if they are not similar at this
3041 /// level, returns false and leaves T1 and T2 unchanged. Top-level
3042 /// qualifiers on T1 and T2 are ignored. This function will typically
3043 /// be called in a loop that successively "unwraps" pointer and
3044 /// pointer-to-member types to compare them at each level.
3045 bool ASTContext::UnwrapSimilarPointerTypes(QualType &T1, QualType &T2) {
3046   const PointerType *T1PtrType = T1->getAs<PointerType>(),
3047                     *T2PtrType = T2->getAs<PointerType>();
3048   if (T1PtrType && T2PtrType) {
3049     T1 = T1PtrType->getPointeeType();
3050     T2 = T2PtrType->getPointeeType();
3051     return true;
3052   }
3053 
3054   const MemberPointerType *T1MPType = T1->getAs<MemberPointerType>(),
3055                           *T2MPType = T2->getAs<MemberPointerType>();
3056   if (T1MPType && T2MPType &&
3057       hasSameUnqualifiedType(QualType(T1MPType->getClass(), 0),
3058                              QualType(T2MPType->getClass(), 0))) {
3059     T1 = T1MPType->getPointeeType();
3060     T2 = T2MPType->getPointeeType();
3061     return true;
3062   }
3063 
3064   if (getLangOptions().ObjC1) {
3065     const ObjCObjectPointerType *T1OPType = T1->getAs<ObjCObjectPointerType>(),
3066                                 *T2OPType = T2->getAs<ObjCObjectPointerType>();
3067     if (T1OPType && T2OPType) {
3068       T1 = T1OPType->getPointeeType();
3069       T2 = T2OPType->getPointeeType();
3070       return true;
3071     }
3072   }
3073 
3074   // FIXME: Block pointers, too?
3075 
3076   return false;
3077 }
3078 
3079 DeclarationNameInfo
3080 ASTContext::getNameForTemplate(TemplateName Name,
3081                                SourceLocation NameLoc) const {
3082   switch (Name.getKind()) {
3083   case TemplateName::QualifiedTemplate:
3084   case TemplateName::Template:
3085     // DNInfo work in progress: CHECKME: what about DNLoc?
3086     return DeclarationNameInfo(Name.getAsTemplateDecl()->getDeclName(),
3087                                NameLoc);
3088 
3089   case TemplateName::OverloadedTemplate: {
3090     OverloadedTemplateStorage *Storage = Name.getAsOverloadedTemplate();
3091     // DNInfo work in progress: CHECKME: what about DNLoc?
3092     return DeclarationNameInfo((*Storage->begin())->getDeclName(), NameLoc);
3093   }
3094 
3095   case TemplateName::DependentTemplate: {
3096     DependentTemplateName *DTN = Name.getAsDependentTemplateName();
3097     DeclarationName DName;
3098     if (DTN->isIdentifier()) {
3099       DName = DeclarationNames.getIdentifier(DTN->getIdentifier());
3100       return DeclarationNameInfo(DName, NameLoc);
3101     } else {
3102       DName = DeclarationNames.getCXXOperatorName(DTN->getOperator());
3103       // DNInfo work in progress: FIXME: source locations?
3104       DeclarationNameLoc DNLoc;
3105       DNLoc.CXXOperatorName.BeginOpNameLoc = SourceLocation().getRawEncoding();
3106       DNLoc.CXXOperatorName.EndOpNameLoc = SourceLocation().getRawEncoding();
3107       return DeclarationNameInfo(DName, NameLoc, DNLoc);
3108     }
3109   }
3110 
3111   case TemplateName::SubstTemplateTemplateParm: {
3112     SubstTemplateTemplateParmStorage *subst
3113       = Name.getAsSubstTemplateTemplateParm();
3114     return DeclarationNameInfo(subst->getParameter()->getDeclName(),
3115                                NameLoc);
3116   }
3117 
3118   case TemplateName::SubstTemplateTemplateParmPack: {
3119     SubstTemplateTemplateParmPackStorage *subst
3120       = Name.getAsSubstTemplateTemplateParmPack();
3121     return DeclarationNameInfo(subst->getParameterPack()->getDeclName(),
3122                                NameLoc);
3123   }
3124   }
3125 
3126   llvm_unreachable("bad template name kind!");
3127 }
3128 
3129 TemplateName ASTContext::getCanonicalTemplateName(TemplateName Name) const {
3130   switch (Name.getKind()) {
3131   case TemplateName::QualifiedTemplate:
3132   case TemplateName::Template: {
3133     TemplateDecl *Template = Name.getAsTemplateDecl();
3134     if (TemplateTemplateParmDecl *TTP
3135           = dyn_cast<TemplateTemplateParmDecl>(Template))
3136       Template = getCanonicalTemplateTemplateParmDecl(TTP);
3137 
3138     // The canonical template name is the canonical template declaration.
3139     return TemplateName(cast<TemplateDecl>(Template->getCanonicalDecl()));
3140   }
3141 
3142   case TemplateName::OverloadedTemplate:
3143     llvm_unreachable("cannot canonicalize overloaded template");
3144 
3145   case TemplateName::DependentTemplate: {
3146     DependentTemplateName *DTN = Name.getAsDependentTemplateName();
3147     assert(DTN && "Non-dependent template names must refer to template decls.");
3148     return DTN->CanonicalTemplateName;
3149   }
3150 
3151   case TemplateName::SubstTemplateTemplateParm: {
3152     SubstTemplateTemplateParmStorage *subst
3153       = Name.getAsSubstTemplateTemplateParm();
3154     return getCanonicalTemplateName(subst->getReplacement());
3155   }
3156 
3157   case TemplateName::SubstTemplateTemplateParmPack: {
3158     SubstTemplateTemplateParmPackStorage *subst
3159                                   = Name.getAsSubstTemplateTemplateParmPack();
3160     TemplateTemplateParmDecl *canonParameter
3161       = getCanonicalTemplateTemplateParmDecl(subst->getParameterPack());
3162     TemplateArgument canonArgPack
3163       = getCanonicalTemplateArgument(subst->getArgumentPack());
3164     return getSubstTemplateTemplateParmPack(canonParameter, canonArgPack);
3165   }
3166   }
3167 
3168   llvm_unreachable("bad template name!");
3169 }
3170 
3171 bool ASTContext::hasSameTemplateName(TemplateName X, TemplateName Y) {
3172   X = getCanonicalTemplateName(X);
3173   Y = getCanonicalTemplateName(Y);
3174   return X.getAsVoidPointer() == Y.getAsVoidPointer();
3175 }
3176 
3177 TemplateArgument
3178 ASTContext::getCanonicalTemplateArgument(const TemplateArgument &Arg) const {
3179   switch (Arg.getKind()) {
3180     case TemplateArgument::Null:
3181       return Arg;
3182 
3183     case TemplateArgument::Expression:
3184       return Arg;
3185 
3186     case TemplateArgument::Declaration:
3187       return TemplateArgument(Arg.getAsDecl()->getCanonicalDecl());
3188 
3189     case TemplateArgument::Template:
3190       return TemplateArgument(getCanonicalTemplateName(Arg.getAsTemplate()));
3191 
3192     case TemplateArgument::TemplateExpansion:
3193       return TemplateArgument(getCanonicalTemplateName(
3194                                          Arg.getAsTemplateOrTemplatePattern()),
3195                               Arg.getNumTemplateExpansions());
3196 
3197     case TemplateArgument::Integral:
3198       return TemplateArgument(*Arg.getAsIntegral(),
3199                               getCanonicalType(Arg.getIntegralType()));
3200 
3201     case TemplateArgument::Type:
3202       return TemplateArgument(getCanonicalType(Arg.getAsType()));
3203 
3204     case TemplateArgument::Pack: {
3205       if (Arg.pack_size() == 0)
3206         return Arg;
3207 
3208       TemplateArgument *CanonArgs
3209         = new (*this) TemplateArgument[Arg.pack_size()];
3210       unsigned Idx = 0;
3211       for (TemplateArgument::pack_iterator A = Arg.pack_begin(),
3212                                         AEnd = Arg.pack_end();
3213            A != AEnd; (void)++A, ++Idx)
3214         CanonArgs[Idx] = getCanonicalTemplateArgument(*A);
3215 
3216       return TemplateArgument(CanonArgs, Arg.pack_size());
3217     }
3218   }
3219 
3220   // Silence GCC warning
3221   llvm_unreachable("Unhandled template argument kind");
3222 }
3223 
3224 NestedNameSpecifier *
3225 ASTContext::getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const {
3226   if (!NNS)
3227     return 0;
3228 
3229   switch (NNS->getKind()) {
3230   case NestedNameSpecifier::Identifier:
3231     // Canonicalize the prefix but keep the identifier the same.
3232     return NestedNameSpecifier::Create(*this,
3233                          getCanonicalNestedNameSpecifier(NNS->getPrefix()),
3234                                        NNS->getAsIdentifier());
3235 
3236   case NestedNameSpecifier::Namespace:
3237     // A namespace is canonical; build a nested-name-specifier with
3238     // this namespace and no prefix.
3239     return NestedNameSpecifier::Create(*this, 0,
3240                                  NNS->getAsNamespace()->getOriginalNamespace());
3241 
3242   case NestedNameSpecifier::NamespaceAlias:
3243     // A namespace is canonical; build a nested-name-specifier with
3244     // this namespace and no prefix.
3245     return NestedNameSpecifier::Create(*this, 0,
3246                                     NNS->getAsNamespaceAlias()->getNamespace()
3247                                                       ->getOriginalNamespace());
3248 
3249   case NestedNameSpecifier::TypeSpec:
3250   case NestedNameSpecifier::TypeSpecWithTemplate: {
3251     QualType T = getCanonicalType(QualType(NNS->getAsType(), 0));
3252 
3253     // If we have some kind of dependent-named type (e.g., "typename T::type"),
3254     // break it apart into its prefix and identifier, then reconsititute those
3255     // as the canonical nested-name-specifier. This is required to canonicalize
3256     // a dependent nested-name-specifier involving typedefs of dependent-name
3257     // types, e.g.,
3258     //   typedef typename T::type T1;
3259     //   typedef typename T1::type T2;
3260     if (const DependentNameType *DNT = T->getAs<DependentNameType>()) {
3261       NestedNameSpecifier *Prefix
3262         = getCanonicalNestedNameSpecifier(DNT->getQualifier());
3263       return NestedNameSpecifier::Create(*this, Prefix,
3264                            const_cast<IdentifierInfo *>(DNT->getIdentifier()));
3265     }
3266 
3267     // Do the same thing as above, but with dependent-named specializations.
3268     if (const DependentTemplateSpecializationType *DTST
3269           = T->getAs<DependentTemplateSpecializationType>()) {
3270       NestedNameSpecifier *Prefix
3271         = getCanonicalNestedNameSpecifier(DTST->getQualifier());
3272 
3273       T = getDependentTemplateSpecializationType(DTST->getKeyword(),
3274                                                  Prefix, DTST->getIdentifier(),
3275                                                  DTST->getNumArgs(),
3276                                                  DTST->getArgs());
3277       T = getCanonicalType(T);
3278     }
3279 
3280     return NestedNameSpecifier::Create(*this, 0, false,
3281                                        const_cast<Type*>(T.getTypePtr()));
3282   }
3283 
3284   case NestedNameSpecifier::Global:
3285     // The global specifier is canonical and unique.
3286     return NNS;
3287   }
3288 
3289   // Required to silence a GCC warning
3290   return 0;
3291 }
3292 
3293 
3294 const ArrayType *ASTContext::getAsArrayType(QualType T) const {
3295   // Handle the non-qualified case efficiently.
3296   if (!T.hasLocalQualifiers()) {
3297     // Handle the common positive case fast.
3298     if (const ArrayType *AT = dyn_cast<ArrayType>(T))
3299       return AT;
3300   }
3301 
3302   // Handle the common negative case fast.
3303   if (!isa<ArrayType>(T.getCanonicalType()))
3304     return 0;
3305 
3306   // Apply any qualifiers from the array type to the element type.  This
3307   // implements C99 6.7.3p8: "If the specification of an array type includes
3308   // any type qualifiers, the element type is so qualified, not the array type."
3309 
3310   // If we get here, we either have type qualifiers on the type, or we have
3311   // sugar such as a typedef in the way.  If we have type qualifiers on the type
3312   // we must propagate them down into the element type.
3313 
3314   SplitQualType split = T.getSplitDesugaredType();
3315   Qualifiers qs = split.second;
3316 
3317   // If we have a simple case, just return now.
3318   const ArrayType *ATy = dyn_cast<ArrayType>(split.first);
3319   if (ATy == 0 || qs.empty())
3320     return ATy;
3321 
3322   // Otherwise, we have an array and we have qualifiers on it.  Push the
3323   // qualifiers into the array element type and return a new array type.
3324   QualType NewEltTy = getQualifiedType(ATy->getElementType(), qs);
3325 
3326   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(ATy))
3327     return cast<ArrayType>(getConstantArrayType(NewEltTy, CAT->getSize(),
3328                                                 CAT->getSizeModifier(),
3329                                            CAT->getIndexTypeCVRQualifiers()));
3330   if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(ATy))
3331     return cast<ArrayType>(getIncompleteArrayType(NewEltTy,
3332                                                   IAT->getSizeModifier(),
3333                                            IAT->getIndexTypeCVRQualifiers()));
3334 
3335   if (const DependentSizedArrayType *DSAT
3336         = dyn_cast<DependentSizedArrayType>(ATy))
3337     return cast<ArrayType>(
3338                      getDependentSizedArrayType(NewEltTy,
3339                                                 DSAT->getSizeExpr(),
3340                                                 DSAT->getSizeModifier(),
3341                                               DSAT->getIndexTypeCVRQualifiers(),
3342                                                 DSAT->getBracketsRange()));
3343 
3344   const VariableArrayType *VAT = cast<VariableArrayType>(ATy);
3345   return cast<ArrayType>(getVariableArrayType(NewEltTy,
3346                                               VAT->getSizeExpr(),
3347                                               VAT->getSizeModifier(),
3348                                               VAT->getIndexTypeCVRQualifiers(),
3349                                               VAT->getBracketsRange()));
3350 }
3351 
3352 QualType ASTContext::getAdjustedParameterType(QualType T) {
3353   // C99 6.7.5.3p7:
3354   //   A declaration of a parameter as "array of type" shall be
3355   //   adjusted to "qualified pointer to type", where the type
3356   //   qualifiers (if any) are those specified within the [ and ] of
3357   //   the array type derivation.
3358   if (T->isArrayType())
3359     return getArrayDecayedType(T);
3360 
3361   // C99 6.7.5.3p8:
3362   //   A declaration of a parameter as "function returning type"
3363   //   shall be adjusted to "pointer to function returning type", as
3364   //   in 6.3.2.1.
3365   if (T->isFunctionType())
3366     return getPointerType(T);
3367 
3368   return T;
3369 }
3370 
3371 QualType ASTContext::getSignatureParameterType(QualType T) {
3372   T = getVariableArrayDecayedType(T);
3373   T = getAdjustedParameterType(T);
3374   return T.getUnqualifiedType();
3375 }
3376 
3377 /// getArrayDecayedType - Return the properly qualified result of decaying the
3378 /// specified array type to a pointer.  This operation is non-trivial when
3379 /// handling typedefs etc.  The canonical type of "T" must be an array type,
3380 /// this returns a pointer to a properly qualified element of the array.
3381 ///
3382 /// See C99 6.7.5.3p7 and C99 6.3.2.1p3.
3383 QualType ASTContext::getArrayDecayedType(QualType Ty) const {
3384   // Get the element type with 'getAsArrayType' so that we don't lose any
3385   // typedefs in the element type of the array.  This also handles propagation
3386   // of type qualifiers from the array type into the element type if present
3387   // (C99 6.7.3p8).
3388   const ArrayType *PrettyArrayType = getAsArrayType(Ty);
3389   assert(PrettyArrayType && "Not an array type!");
3390 
3391   QualType PtrTy = getPointerType(PrettyArrayType->getElementType());
3392 
3393   // int x[restrict 4] ->  int *restrict
3394   return getQualifiedType(PtrTy, PrettyArrayType->getIndexTypeQualifiers());
3395 }
3396 
3397 QualType ASTContext::getBaseElementType(const ArrayType *array) const {
3398   return getBaseElementType(array->getElementType());
3399 }
3400 
3401 QualType ASTContext::getBaseElementType(QualType type) const {
3402   Qualifiers qs;
3403   while (true) {
3404     SplitQualType split = type.getSplitDesugaredType();
3405     const ArrayType *array = split.first->getAsArrayTypeUnsafe();
3406     if (!array) break;
3407 
3408     type = array->getElementType();
3409     qs.addConsistentQualifiers(split.second);
3410   }
3411 
3412   return getQualifiedType(type, qs);
3413 }
3414 
3415 /// getConstantArrayElementCount - Returns number of constant array elements.
3416 uint64_t
3417 ASTContext::getConstantArrayElementCount(const ConstantArrayType *CA)  const {
3418   uint64_t ElementCount = 1;
3419   do {
3420     ElementCount *= CA->getSize().getZExtValue();
3421     CA = dyn_cast<ConstantArrayType>(CA->getElementType());
3422   } while (CA);
3423   return ElementCount;
3424 }
3425 
3426 /// getFloatingRank - Return a relative rank for floating point types.
3427 /// This routine will assert if passed a built-in type that isn't a float.
3428 static FloatingRank getFloatingRank(QualType T) {
3429   if (const ComplexType *CT = T->getAs<ComplexType>())
3430     return getFloatingRank(CT->getElementType());
3431 
3432   assert(T->getAs<BuiltinType>() && "getFloatingRank(): not a floating type");
3433   switch (T->getAs<BuiltinType>()->getKind()) {
3434   default: llvm_unreachable("getFloatingRank(): not a floating type");
3435   case BuiltinType::Float:      return FloatRank;
3436   case BuiltinType::Double:     return DoubleRank;
3437   case BuiltinType::LongDouble: return LongDoubleRank;
3438   }
3439 }
3440 
3441 /// getFloatingTypeOfSizeWithinDomain - Returns a real floating
3442 /// point or a complex type (based on typeDomain/typeSize).
3443 /// 'typeDomain' is a real floating point or complex type.
3444 /// 'typeSize' is a real floating point or complex type.
3445 QualType ASTContext::getFloatingTypeOfSizeWithinDomain(QualType Size,
3446                                                        QualType Domain) const {
3447   FloatingRank EltRank = getFloatingRank(Size);
3448   if (Domain->isComplexType()) {
3449     switch (EltRank) {
3450     default: llvm_unreachable("getFloatingRank(): illegal value for rank");
3451     case FloatRank:      return FloatComplexTy;
3452     case DoubleRank:     return DoubleComplexTy;
3453     case LongDoubleRank: return LongDoubleComplexTy;
3454     }
3455   }
3456 
3457   assert(Domain->isRealFloatingType() && "Unknown domain!");
3458   switch (EltRank) {
3459   default: llvm_unreachable("getFloatingRank(): illegal value for rank");
3460   case FloatRank:      return FloatTy;
3461   case DoubleRank:     return DoubleTy;
3462   case LongDoubleRank: return LongDoubleTy;
3463   }
3464 }
3465 
3466 /// getFloatingTypeOrder - Compare the rank of the two specified floating
3467 /// point types, ignoring the domain of the type (i.e. 'double' ==
3468 /// '_Complex double').  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
3469 /// LHS < RHS, return -1.
3470 int ASTContext::getFloatingTypeOrder(QualType LHS, QualType RHS) const {
3471   FloatingRank LHSR = getFloatingRank(LHS);
3472   FloatingRank RHSR = getFloatingRank(RHS);
3473 
3474   if (LHSR == RHSR)
3475     return 0;
3476   if (LHSR > RHSR)
3477     return 1;
3478   return -1;
3479 }
3480 
3481 /// getIntegerRank - Return an integer conversion rank (C99 6.3.1.1p1). This
3482 /// routine will assert if passed a built-in type that isn't an integer or enum,
3483 /// or if it is not canonicalized.
3484 unsigned ASTContext::getIntegerRank(const Type *T) const {
3485   assert(T->isCanonicalUnqualified() && "T should be canonicalized");
3486   if (const EnumType* ET = dyn_cast<EnumType>(T))
3487     T = ET->getDecl()->getPromotionType().getTypePtr();
3488 
3489   if (T->isSpecificBuiltinType(BuiltinType::WChar_S) ||
3490       T->isSpecificBuiltinType(BuiltinType::WChar_U))
3491     T = getFromTargetType(Target->getWCharType()).getTypePtr();
3492 
3493   if (T->isSpecificBuiltinType(BuiltinType::Char16))
3494     T = getFromTargetType(Target->getChar16Type()).getTypePtr();
3495 
3496   if (T->isSpecificBuiltinType(BuiltinType::Char32))
3497     T = getFromTargetType(Target->getChar32Type()).getTypePtr();
3498 
3499   switch (cast<BuiltinType>(T)->getKind()) {
3500   default: llvm_unreachable("getIntegerRank(): not a built-in integer");
3501   case BuiltinType::Bool:
3502     return 1 + (getIntWidth(BoolTy) << 3);
3503   case BuiltinType::Char_S:
3504   case BuiltinType::Char_U:
3505   case BuiltinType::SChar:
3506   case BuiltinType::UChar:
3507     return 2 + (getIntWidth(CharTy) << 3);
3508   case BuiltinType::Short:
3509   case BuiltinType::UShort:
3510     return 3 + (getIntWidth(ShortTy) << 3);
3511   case BuiltinType::Int:
3512   case BuiltinType::UInt:
3513     return 4 + (getIntWidth(IntTy) << 3);
3514   case BuiltinType::Long:
3515   case BuiltinType::ULong:
3516     return 5 + (getIntWidth(LongTy) << 3);
3517   case BuiltinType::LongLong:
3518   case BuiltinType::ULongLong:
3519     return 6 + (getIntWidth(LongLongTy) << 3);
3520   case BuiltinType::Int128:
3521   case BuiltinType::UInt128:
3522     return 7 + (getIntWidth(Int128Ty) << 3);
3523   }
3524 }
3525 
3526 /// \brief Whether this is a promotable bitfield reference according
3527 /// to C99 6.3.1.1p2, bullet 2 (and GCC extensions).
3528 ///
3529 /// \returns the type this bit-field will promote to, or NULL if no
3530 /// promotion occurs.
3531 QualType ASTContext::isPromotableBitField(Expr *E) const {
3532   if (E->isTypeDependent() || E->isValueDependent())
3533     return QualType();
3534 
3535   FieldDecl *Field = E->getBitField();
3536   if (!Field)
3537     return QualType();
3538 
3539   QualType FT = Field->getType();
3540 
3541   llvm::APSInt BitWidthAP = Field->getBitWidth()->EvaluateAsInt(*this);
3542   uint64_t BitWidth = BitWidthAP.getZExtValue();
3543   uint64_t IntSize = getTypeSize(IntTy);
3544   // GCC extension compatibility: if the bit-field size is less than or equal
3545   // to the size of int, it gets promoted no matter what its type is.
3546   // For instance, unsigned long bf : 4 gets promoted to signed int.
3547   if (BitWidth < IntSize)
3548     return IntTy;
3549 
3550   if (BitWidth == IntSize)
3551     return FT->isSignedIntegerType() ? IntTy : UnsignedIntTy;
3552 
3553   // Types bigger than int are not subject to promotions, and therefore act
3554   // like the base type.
3555   // FIXME: This doesn't quite match what gcc does, but what gcc does here
3556   // is ridiculous.
3557   return QualType();
3558 }
3559 
3560 /// getPromotedIntegerType - Returns the type that Promotable will
3561 /// promote to: C99 6.3.1.1p2, assuming that Promotable is a promotable
3562 /// integer type.
3563 QualType ASTContext::getPromotedIntegerType(QualType Promotable) const {
3564   assert(!Promotable.isNull());
3565   assert(Promotable->isPromotableIntegerType());
3566   if (const EnumType *ET = Promotable->getAs<EnumType>())
3567     return ET->getDecl()->getPromotionType();
3568   if (Promotable->isSignedIntegerType())
3569     return IntTy;
3570   uint64_t PromotableSize = getTypeSize(Promotable);
3571   uint64_t IntSize = getTypeSize(IntTy);
3572   assert(Promotable->isUnsignedIntegerType() && PromotableSize <= IntSize);
3573   return (PromotableSize != IntSize) ? IntTy : UnsignedIntTy;
3574 }
3575 
3576 /// \brief Recurses in pointer/array types until it finds an objc retainable
3577 /// type and returns its ownership.
3578 Qualifiers::ObjCLifetime ASTContext::getInnerObjCOwnership(QualType T) const {
3579   while (!T.isNull()) {
3580     if (T.getObjCLifetime() != Qualifiers::OCL_None)
3581       return T.getObjCLifetime();
3582     if (T->isArrayType())
3583       T = getBaseElementType(T);
3584     else if (const PointerType *PT = T->getAs<PointerType>())
3585       T = PT->getPointeeType();
3586     else if (const ReferenceType *RT = T->getAs<ReferenceType>())
3587       T = RT->getPointeeType();
3588     else
3589       break;
3590   }
3591 
3592   return Qualifiers::OCL_None;
3593 }
3594 
3595 /// getIntegerTypeOrder - Returns the highest ranked integer type:
3596 /// C99 6.3.1.8p1.  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
3597 /// LHS < RHS, return -1.
3598 int ASTContext::getIntegerTypeOrder(QualType LHS, QualType RHS) const {
3599   const Type *LHSC = getCanonicalType(LHS).getTypePtr();
3600   const Type *RHSC = getCanonicalType(RHS).getTypePtr();
3601   if (LHSC == RHSC) return 0;
3602 
3603   bool LHSUnsigned = LHSC->isUnsignedIntegerType();
3604   bool RHSUnsigned = RHSC->isUnsignedIntegerType();
3605 
3606   unsigned LHSRank = getIntegerRank(LHSC);
3607   unsigned RHSRank = getIntegerRank(RHSC);
3608 
3609   if (LHSUnsigned == RHSUnsigned) {  // Both signed or both unsigned.
3610     if (LHSRank == RHSRank) return 0;
3611     return LHSRank > RHSRank ? 1 : -1;
3612   }
3613 
3614   // Otherwise, the LHS is signed and the RHS is unsigned or visa versa.
3615   if (LHSUnsigned) {
3616     // If the unsigned [LHS] type is larger, return it.
3617     if (LHSRank >= RHSRank)
3618       return 1;
3619 
3620     // If the signed type can represent all values of the unsigned type, it
3621     // wins.  Because we are dealing with 2's complement and types that are
3622     // powers of two larger than each other, this is always safe.
3623     return -1;
3624   }
3625 
3626   // If the unsigned [RHS] type is larger, return it.
3627   if (RHSRank >= LHSRank)
3628     return -1;
3629 
3630   // If the signed type can represent all values of the unsigned type, it
3631   // wins.  Because we are dealing with 2's complement and types that are
3632   // powers of two larger than each other, this is always safe.
3633   return 1;
3634 }
3635 
3636 static RecordDecl *
3637 CreateRecordDecl(const ASTContext &Ctx, RecordDecl::TagKind TK,
3638                  DeclContext *DC, IdentifierInfo *Id) {
3639   SourceLocation Loc;
3640   if (Ctx.getLangOptions().CPlusPlus)
3641     return CXXRecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
3642   else
3643     return RecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
3644 }
3645 
3646 // getCFConstantStringType - Return the type used for constant CFStrings.
3647 QualType ASTContext::getCFConstantStringType() const {
3648   if (!CFConstantStringTypeDecl) {
3649     CFConstantStringTypeDecl =
3650       CreateRecordDecl(*this, TTK_Struct, TUDecl,
3651                        &Idents.get("NSConstantString"));
3652     CFConstantStringTypeDecl->startDefinition();
3653 
3654     QualType FieldTypes[4];
3655 
3656     // const int *isa;
3657     FieldTypes[0] = getPointerType(IntTy.withConst());
3658     // int flags;
3659     FieldTypes[1] = IntTy;
3660     // const char *str;
3661     FieldTypes[2] = getPointerType(CharTy.withConst());
3662     // long length;
3663     FieldTypes[3] = LongTy;
3664 
3665     // Create fields
3666     for (unsigned i = 0; i < 4; ++i) {
3667       FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTypeDecl,
3668                                            SourceLocation(),
3669                                            SourceLocation(), 0,
3670                                            FieldTypes[i], /*TInfo=*/0,
3671                                            /*BitWidth=*/0,
3672                                            /*Mutable=*/false,
3673                                            /*HasInit=*/false);
3674       Field->setAccess(AS_public);
3675       CFConstantStringTypeDecl->addDecl(Field);
3676     }
3677 
3678     CFConstantStringTypeDecl->completeDefinition();
3679   }
3680 
3681   return getTagDeclType(CFConstantStringTypeDecl);
3682 }
3683 
3684 void ASTContext::setCFConstantStringType(QualType T) {
3685   const RecordType *Rec = T->getAs<RecordType>();
3686   assert(Rec && "Invalid CFConstantStringType");
3687   CFConstantStringTypeDecl = Rec->getDecl();
3688 }
3689 
3690 QualType ASTContext::getBlockDescriptorType() const {
3691   if (BlockDescriptorType)
3692     return getTagDeclType(BlockDescriptorType);
3693 
3694   RecordDecl *T;
3695   // FIXME: Needs the FlagAppleBlock bit.
3696   T = CreateRecordDecl(*this, TTK_Struct, TUDecl,
3697                        &Idents.get("__block_descriptor"));
3698   T->startDefinition();
3699 
3700   QualType FieldTypes[] = {
3701     UnsignedLongTy,
3702     UnsignedLongTy,
3703   };
3704 
3705   const char *FieldNames[] = {
3706     "reserved",
3707     "Size"
3708   };
3709 
3710   for (size_t i = 0; i < 2; ++i) {
3711     FieldDecl *Field = FieldDecl::Create(*this, T, SourceLocation(),
3712                                          SourceLocation(),
3713                                          &Idents.get(FieldNames[i]),
3714                                          FieldTypes[i], /*TInfo=*/0,
3715                                          /*BitWidth=*/0,
3716                                          /*Mutable=*/false,
3717                                          /*HasInit=*/false);
3718     Field->setAccess(AS_public);
3719     T->addDecl(Field);
3720   }
3721 
3722   T->completeDefinition();
3723 
3724   BlockDescriptorType = T;
3725 
3726   return getTagDeclType(BlockDescriptorType);
3727 }
3728 
3729 QualType ASTContext::getBlockDescriptorExtendedType() const {
3730   if (BlockDescriptorExtendedType)
3731     return getTagDeclType(BlockDescriptorExtendedType);
3732 
3733   RecordDecl *T;
3734   // FIXME: Needs the FlagAppleBlock bit.
3735   T = CreateRecordDecl(*this, TTK_Struct, TUDecl,
3736                        &Idents.get("__block_descriptor_withcopydispose"));
3737   T->startDefinition();
3738 
3739   QualType FieldTypes[] = {
3740     UnsignedLongTy,
3741     UnsignedLongTy,
3742     getPointerType(VoidPtrTy),
3743     getPointerType(VoidPtrTy)
3744   };
3745 
3746   const char *FieldNames[] = {
3747     "reserved",
3748     "Size",
3749     "CopyFuncPtr",
3750     "DestroyFuncPtr"
3751   };
3752 
3753   for (size_t i = 0; i < 4; ++i) {
3754     FieldDecl *Field = FieldDecl::Create(*this, T, SourceLocation(),
3755                                          SourceLocation(),
3756                                          &Idents.get(FieldNames[i]),
3757                                          FieldTypes[i], /*TInfo=*/0,
3758                                          /*BitWidth=*/0,
3759                                          /*Mutable=*/false,
3760                                          /*HasInit=*/false);
3761     Field->setAccess(AS_public);
3762     T->addDecl(Field);
3763   }
3764 
3765   T->completeDefinition();
3766 
3767   BlockDescriptorExtendedType = T;
3768 
3769   return getTagDeclType(BlockDescriptorExtendedType);
3770 }
3771 
3772 bool ASTContext::BlockRequiresCopying(QualType Ty) const {
3773   if (Ty->isObjCRetainableType())
3774     return true;
3775   if (getLangOptions().CPlusPlus) {
3776     if (const RecordType *RT = Ty->getAs<RecordType>()) {
3777       CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
3778       return RD->hasConstCopyConstructor();
3779 
3780     }
3781   }
3782   return false;
3783 }
3784 
3785 QualType
3786 ASTContext::BuildByRefType(StringRef DeclName, QualType Ty) const {
3787   //  type = struct __Block_byref_1_X {
3788   //    void *__isa;
3789   //    struct __Block_byref_1_X *__forwarding;
3790   //    unsigned int __flags;
3791   //    unsigned int __size;
3792   //    void *__copy_helper;            // as needed
3793   //    void *__destroy_help            // as needed
3794   //    int X;
3795   //  } *
3796 
3797   bool HasCopyAndDispose = BlockRequiresCopying(Ty);
3798 
3799   // FIXME: Move up
3800   llvm::SmallString<36> Name;
3801   llvm::raw_svector_ostream(Name) << "__Block_byref_" <<
3802                                   ++UniqueBlockByRefTypeID << '_' << DeclName;
3803   RecordDecl *T;
3804   T = CreateRecordDecl(*this, TTK_Struct, TUDecl, &Idents.get(Name.str()));
3805   T->startDefinition();
3806   QualType Int32Ty = IntTy;
3807   assert(getIntWidth(IntTy) == 32 && "non-32bit int not supported");
3808   QualType FieldTypes[] = {
3809     getPointerType(VoidPtrTy),
3810     getPointerType(getTagDeclType(T)),
3811     Int32Ty,
3812     Int32Ty,
3813     getPointerType(VoidPtrTy),
3814     getPointerType(VoidPtrTy),
3815     Ty
3816   };
3817 
3818   StringRef FieldNames[] = {
3819     "__isa",
3820     "__forwarding",
3821     "__flags",
3822     "__size",
3823     "__copy_helper",
3824     "__destroy_helper",
3825     DeclName,
3826   };
3827 
3828   for (size_t i = 0; i < 7; ++i) {
3829     if (!HasCopyAndDispose && i >=4 && i <= 5)
3830       continue;
3831     FieldDecl *Field = FieldDecl::Create(*this, T, SourceLocation(),
3832                                          SourceLocation(),
3833                                          &Idents.get(FieldNames[i]),
3834                                          FieldTypes[i], /*TInfo=*/0,
3835                                          /*BitWidth=*/0, /*Mutable=*/false,
3836                                          /*HasInit=*/false);
3837     Field->setAccess(AS_public);
3838     T->addDecl(Field);
3839   }
3840 
3841   T->completeDefinition();
3842 
3843   return getPointerType(getTagDeclType(T));
3844 }
3845 
3846 TypedefDecl *ASTContext::getObjCInstanceTypeDecl() {
3847   if (!ObjCInstanceTypeDecl)
3848     ObjCInstanceTypeDecl = TypedefDecl::Create(*this,
3849                                                getTranslationUnitDecl(),
3850                                                SourceLocation(),
3851                                                SourceLocation(),
3852                                                &Idents.get("instancetype"),
3853                                      getTrivialTypeSourceInfo(getObjCIdType()));
3854   return ObjCInstanceTypeDecl;
3855 }
3856 
3857 // This returns true if a type has been typedefed to BOOL:
3858 // typedef <type> BOOL;
3859 static bool isTypeTypedefedAsBOOL(QualType T) {
3860   if (const TypedefType *TT = dyn_cast<TypedefType>(T))
3861     if (IdentifierInfo *II = TT->getDecl()->getIdentifier())
3862       return II->isStr("BOOL");
3863 
3864   return false;
3865 }
3866 
3867 /// getObjCEncodingTypeSize returns size of type for objective-c encoding
3868 /// purpose.
3869 CharUnits ASTContext::getObjCEncodingTypeSize(QualType type) const {
3870   if (!type->isIncompleteArrayType() && type->isIncompleteType())
3871     return CharUnits::Zero();
3872 
3873   CharUnits sz = getTypeSizeInChars(type);
3874 
3875   // Make all integer and enum types at least as large as an int
3876   if (sz.isPositive() && type->isIntegralOrEnumerationType())
3877     sz = std::max(sz, getTypeSizeInChars(IntTy));
3878   // Treat arrays as pointers, since that's how they're passed in.
3879   else if (type->isArrayType())
3880     sz = getTypeSizeInChars(VoidPtrTy);
3881   return sz;
3882 }
3883 
3884 static inline
3885 std::string charUnitsToString(const CharUnits &CU) {
3886   return llvm::itostr(CU.getQuantity());
3887 }
3888 
3889 /// getObjCEncodingForBlock - Return the encoded type for this block
3890 /// declaration.
3891 std::string ASTContext::getObjCEncodingForBlock(const BlockExpr *Expr) const {
3892   std::string S;
3893 
3894   const BlockDecl *Decl = Expr->getBlockDecl();
3895   QualType BlockTy =
3896       Expr->getType()->getAs<BlockPointerType>()->getPointeeType();
3897   // Encode result type.
3898   getObjCEncodingForType(BlockTy->getAs<FunctionType>()->getResultType(), S);
3899   // Compute size of all parameters.
3900   // Start with computing size of a pointer in number of bytes.
3901   // FIXME: There might(should) be a better way of doing this computation!
3902   SourceLocation Loc;
3903   CharUnits PtrSize = getTypeSizeInChars(VoidPtrTy);
3904   CharUnits ParmOffset = PtrSize;
3905   for (BlockDecl::param_const_iterator PI = Decl->param_begin(),
3906        E = Decl->param_end(); PI != E; ++PI) {
3907     QualType PType = (*PI)->getType();
3908     CharUnits sz = getObjCEncodingTypeSize(PType);
3909     assert (sz.isPositive() && "BlockExpr - Incomplete param type");
3910     ParmOffset += sz;
3911   }
3912   // Size of the argument frame
3913   S += charUnitsToString(ParmOffset);
3914   // Block pointer and offset.
3915   S += "@?0";
3916 
3917   // Argument types.
3918   ParmOffset = PtrSize;
3919   for (BlockDecl::param_const_iterator PI = Decl->param_begin(), E =
3920        Decl->param_end(); PI != E; ++PI) {
3921     ParmVarDecl *PVDecl = *PI;
3922     QualType PType = PVDecl->getOriginalType();
3923     if (const ArrayType *AT =
3924           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
3925       // Use array's original type only if it has known number of
3926       // elements.
3927       if (!isa<ConstantArrayType>(AT))
3928         PType = PVDecl->getType();
3929     } else if (PType->isFunctionType())
3930       PType = PVDecl->getType();
3931     getObjCEncodingForType(PType, S);
3932     S += charUnitsToString(ParmOffset);
3933     ParmOffset += getObjCEncodingTypeSize(PType);
3934   }
3935 
3936   return S;
3937 }
3938 
3939 bool ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl,
3940                                                 std::string& S) {
3941   // Encode result type.
3942   getObjCEncodingForType(Decl->getResultType(), S);
3943   CharUnits ParmOffset;
3944   // Compute size of all parameters.
3945   for (FunctionDecl::param_const_iterator PI = Decl->param_begin(),
3946        E = Decl->param_end(); PI != E; ++PI) {
3947     QualType PType = (*PI)->getType();
3948     CharUnits sz = getObjCEncodingTypeSize(PType);
3949     if (sz.isZero())
3950       return true;
3951 
3952     assert (sz.isPositive() &&
3953         "getObjCEncodingForFunctionDecl - Incomplete param type");
3954     ParmOffset += sz;
3955   }
3956   S += charUnitsToString(ParmOffset);
3957   ParmOffset = CharUnits::Zero();
3958 
3959   // Argument types.
3960   for (FunctionDecl::param_const_iterator PI = Decl->param_begin(),
3961        E = Decl->param_end(); PI != E; ++PI) {
3962     ParmVarDecl *PVDecl = *PI;
3963     QualType PType = PVDecl->getOriginalType();
3964     if (const ArrayType *AT =
3965           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
3966       // Use array's original type only if it has known number of
3967       // elements.
3968       if (!isa<ConstantArrayType>(AT))
3969         PType = PVDecl->getType();
3970     } else if (PType->isFunctionType())
3971       PType = PVDecl->getType();
3972     getObjCEncodingForType(PType, S);
3973     S += charUnitsToString(ParmOffset);
3974     ParmOffset += getObjCEncodingTypeSize(PType);
3975   }
3976 
3977   return false;
3978 }
3979 
3980 /// getObjCEncodingForMethodDecl - Return the encoded type for this method
3981 /// declaration.
3982 bool ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl,
3983                                               std::string& S) const {
3984   // FIXME: This is not very efficient.
3985   // Encode type qualifer, 'in', 'inout', etc. for the return type.
3986   getObjCEncodingForTypeQualifier(Decl->getObjCDeclQualifier(), S);
3987   // Encode result type.
3988   getObjCEncodingForType(Decl->getResultType(), S);
3989   // Compute size of all parameters.
3990   // Start with computing size of a pointer in number of bytes.
3991   // FIXME: There might(should) be a better way of doing this computation!
3992   SourceLocation Loc;
3993   CharUnits PtrSize = getTypeSizeInChars(VoidPtrTy);
3994   // The first two arguments (self and _cmd) are pointers; account for
3995   // their size.
3996   CharUnits ParmOffset = 2 * PtrSize;
3997   for (ObjCMethodDecl::param_const_iterator PI = Decl->param_begin(),
3998        E = Decl->sel_param_end(); PI != E; ++PI) {
3999     QualType PType = (*PI)->getType();
4000     CharUnits sz = getObjCEncodingTypeSize(PType);
4001     if (sz.isZero())
4002       return true;
4003 
4004     assert (sz.isPositive() &&
4005         "getObjCEncodingForMethodDecl - Incomplete param type");
4006     ParmOffset += sz;
4007   }
4008   S += charUnitsToString(ParmOffset);
4009   S += "@0:";
4010   S += charUnitsToString(PtrSize);
4011 
4012   // Argument types.
4013   ParmOffset = 2 * PtrSize;
4014   for (ObjCMethodDecl::param_const_iterator PI = Decl->param_begin(),
4015        E = Decl->sel_param_end(); PI != E; ++PI) {
4016     const ParmVarDecl *PVDecl = *PI;
4017     QualType PType = PVDecl->getOriginalType();
4018     if (const ArrayType *AT =
4019           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
4020       // Use array's original type only if it has known number of
4021       // elements.
4022       if (!isa<ConstantArrayType>(AT))
4023         PType = PVDecl->getType();
4024     } else if (PType->isFunctionType())
4025       PType = PVDecl->getType();
4026     // Process argument qualifiers for user supplied arguments; such as,
4027     // 'in', 'inout', etc.
4028     getObjCEncodingForTypeQualifier(PVDecl->getObjCDeclQualifier(), S);
4029     getObjCEncodingForType(PType, S);
4030     S += charUnitsToString(ParmOffset);
4031     ParmOffset += getObjCEncodingTypeSize(PType);
4032   }
4033 
4034   return false;
4035 }
4036 
4037 /// getObjCEncodingForPropertyDecl - Return the encoded type for this
4038 /// property declaration. If non-NULL, Container must be either an
4039 /// ObjCCategoryImplDecl or ObjCImplementationDecl; it should only be
4040 /// NULL when getting encodings for protocol properties.
4041 /// Property attributes are stored as a comma-delimited C string. The simple
4042 /// attributes readonly and bycopy are encoded as single characters. The
4043 /// parametrized attributes, getter=name, setter=name, and ivar=name, are
4044 /// encoded as single characters, followed by an identifier. Property types
4045 /// are also encoded as a parametrized attribute. The characters used to encode
4046 /// these attributes are defined by the following enumeration:
4047 /// @code
4048 /// enum PropertyAttributes {
4049 /// kPropertyReadOnly = 'R',   // property is read-only.
4050 /// kPropertyBycopy = 'C',     // property is a copy of the value last assigned
4051 /// kPropertyByref = '&',  // property is a reference to the value last assigned
4052 /// kPropertyDynamic = 'D',    // property is dynamic
4053 /// kPropertyGetter = 'G',     // followed by getter selector name
4054 /// kPropertySetter = 'S',     // followed by setter selector name
4055 /// kPropertyInstanceVariable = 'V'  // followed by instance variable  name
4056 /// kPropertyType = 't'              // followed by old-style type encoding.
4057 /// kPropertyWeak = 'W'              // 'weak' property
4058 /// kPropertyStrong = 'P'            // property GC'able
4059 /// kPropertyNonAtomic = 'N'         // property non-atomic
4060 /// };
4061 /// @endcode
4062 void ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD,
4063                                                 const Decl *Container,
4064                                                 std::string& S) const {
4065   // Collect information from the property implementation decl(s).
4066   bool Dynamic = false;
4067   ObjCPropertyImplDecl *SynthesizePID = 0;
4068 
4069   // FIXME: Duplicated code due to poor abstraction.
4070   if (Container) {
4071     if (const ObjCCategoryImplDecl *CID =
4072         dyn_cast<ObjCCategoryImplDecl>(Container)) {
4073       for (ObjCCategoryImplDecl::propimpl_iterator
4074              i = CID->propimpl_begin(), e = CID->propimpl_end();
4075            i != e; ++i) {
4076         ObjCPropertyImplDecl *PID = *i;
4077         if (PID->getPropertyDecl() == PD) {
4078           if (PID->getPropertyImplementation()==ObjCPropertyImplDecl::Dynamic) {
4079             Dynamic = true;
4080           } else {
4081             SynthesizePID = PID;
4082           }
4083         }
4084       }
4085     } else {
4086       const ObjCImplementationDecl *OID=cast<ObjCImplementationDecl>(Container);
4087       for (ObjCCategoryImplDecl::propimpl_iterator
4088              i = OID->propimpl_begin(), e = OID->propimpl_end();
4089            i != e; ++i) {
4090         ObjCPropertyImplDecl *PID = *i;
4091         if (PID->getPropertyDecl() == PD) {
4092           if (PID->getPropertyImplementation()==ObjCPropertyImplDecl::Dynamic) {
4093             Dynamic = true;
4094           } else {
4095             SynthesizePID = PID;
4096           }
4097         }
4098       }
4099     }
4100   }
4101 
4102   // FIXME: This is not very efficient.
4103   S = "T";
4104 
4105   // Encode result type.
4106   // GCC has some special rules regarding encoding of properties which
4107   // closely resembles encoding of ivars.
4108   getObjCEncodingForTypeImpl(PD->getType(), S, true, true, 0,
4109                              true /* outermost type */,
4110                              true /* encoding for property */);
4111 
4112   if (PD->isReadOnly()) {
4113     S += ",R";
4114   } else {
4115     switch (PD->getSetterKind()) {
4116     case ObjCPropertyDecl::Assign: break;
4117     case ObjCPropertyDecl::Copy:   S += ",C"; break;
4118     case ObjCPropertyDecl::Retain: S += ",&"; break;
4119     case ObjCPropertyDecl::Weak:   S += ",W"; break;
4120     }
4121   }
4122 
4123   // It really isn't clear at all what this means, since properties
4124   // are "dynamic by default".
4125   if (Dynamic)
4126     S += ",D";
4127 
4128   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_nonatomic)
4129     S += ",N";
4130 
4131   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) {
4132     S += ",G";
4133     S += PD->getGetterName().getAsString();
4134   }
4135 
4136   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_setter) {
4137     S += ",S";
4138     S += PD->getSetterName().getAsString();
4139   }
4140 
4141   if (SynthesizePID) {
4142     const ObjCIvarDecl *OID = SynthesizePID->getPropertyIvarDecl();
4143     S += ",V";
4144     S += OID->getNameAsString();
4145   }
4146 
4147   // FIXME: OBJCGC: weak & strong
4148 }
4149 
4150 /// getLegacyIntegralTypeEncoding -
4151 /// Another legacy compatibility encoding: 32-bit longs are encoded as
4152 /// 'l' or 'L' , but not always.  For typedefs, we need to use
4153 /// 'i' or 'I' instead if encoding a struct field, or a pointer!
4154 ///
4155 void ASTContext::getLegacyIntegralTypeEncoding (QualType &PointeeTy) const {
4156   if (isa<TypedefType>(PointeeTy.getTypePtr())) {
4157     if (const BuiltinType *BT = PointeeTy->getAs<BuiltinType>()) {
4158       if (BT->getKind() == BuiltinType::ULong && getIntWidth(PointeeTy) == 32)
4159         PointeeTy = UnsignedIntTy;
4160       else
4161         if (BT->getKind() == BuiltinType::Long && getIntWidth(PointeeTy) == 32)
4162           PointeeTy = IntTy;
4163     }
4164   }
4165 }
4166 
4167 void ASTContext::getObjCEncodingForType(QualType T, std::string& S,
4168                                         const FieldDecl *Field) const {
4169   // We follow the behavior of gcc, expanding structures which are
4170   // directly pointed to, and expanding embedded structures. Note that
4171   // these rules are sufficient to prevent recursive encoding of the
4172   // same type.
4173   getObjCEncodingForTypeImpl(T, S, true, true, Field,
4174                              true /* outermost type */);
4175 }
4176 
4177 static char ObjCEncodingForPrimitiveKind(const ASTContext *C, QualType T) {
4178     switch (T->getAs<BuiltinType>()->getKind()) {
4179     default: llvm_unreachable("Unhandled builtin type kind");
4180     case BuiltinType::Void:       return 'v';
4181     case BuiltinType::Bool:       return 'B';
4182     case BuiltinType::Char_U:
4183     case BuiltinType::UChar:      return 'C';
4184     case BuiltinType::UShort:     return 'S';
4185     case BuiltinType::UInt:       return 'I';
4186     case BuiltinType::ULong:
4187         return C->getIntWidth(T) == 32 ? 'L' : 'Q';
4188     case BuiltinType::UInt128:    return 'T';
4189     case BuiltinType::ULongLong:  return 'Q';
4190     case BuiltinType::Char_S:
4191     case BuiltinType::SChar:      return 'c';
4192     case BuiltinType::Short:      return 's';
4193     case BuiltinType::WChar_S:
4194     case BuiltinType::WChar_U:
4195     case BuiltinType::Int:        return 'i';
4196     case BuiltinType::Long:
4197       return C->getIntWidth(T) == 32 ? 'l' : 'q';
4198     case BuiltinType::LongLong:   return 'q';
4199     case BuiltinType::Int128:     return 't';
4200     case BuiltinType::Float:      return 'f';
4201     case BuiltinType::Double:     return 'd';
4202     case BuiltinType::LongDouble: return 'D';
4203     }
4204 }
4205 
4206 static char ObjCEncodingForEnumType(const ASTContext *C, const EnumType *ET) {
4207   EnumDecl *Enum = ET->getDecl();
4208 
4209   // The encoding of an non-fixed enum type is always 'i', regardless of size.
4210   if (!Enum->isFixed())
4211     return 'i';
4212 
4213   // The encoding of a fixed enum type matches its fixed underlying type.
4214   return ObjCEncodingForPrimitiveKind(C, Enum->getIntegerType());
4215 }
4216 
4217 static void EncodeBitField(const ASTContext *Ctx, std::string& S,
4218                            QualType T, const FieldDecl *FD) {
4219   const Expr *E = FD->getBitWidth();
4220   assert(E && "bitfield width not there - getObjCEncodingForTypeImpl");
4221   S += 'b';
4222   // The NeXT runtime encodes bit fields as b followed by the number of bits.
4223   // The GNU runtime requires more information; bitfields are encoded as b,
4224   // then the offset (in bits) of the first element, then the type of the
4225   // bitfield, then the size in bits.  For example, in this structure:
4226   //
4227   // struct
4228   // {
4229   //    int integer;
4230   //    int flags:2;
4231   // };
4232   // On a 32-bit system, the encoding for flags would be b2 for the NeXT
4233   // runtime, but b32i2 for the GNU runtime.  The reason for this extra
4234   // information is not especially sensible, but we're stuck with it for
4235   // compatibility with GCC, although providing it breaks anything that
4236   // actually uses runtime introspection and wants to work on both runtimes...
4237   if (!Ctx->getLangOptions().NeXTRuntime) {
4238     const RecordDecl *RD = FD->getParent();
4239     const ASTRecordLayout &RL = Ctx->getASTRecordLayout(RD);
4240     S += llvm::utostr(RL.getFieldOffset(FD->getFieldIndex()));
4241     if (const EnumType *ET = T->getAs<EnumType>())
4242       S += ObjCEncodingForEnumType(Ctx, ET);
4243     else
4244       S += ObjCEncodingForPrimitiveKind(Ctx, T);
4245   }
4246   unsigned N = E->EvaluateAsInt(*Ctx).getZExtValue();
4247   S += llvm::utostr(N);
4248 }
4249 
4250 // FIXME: Use SmallString for accumulating string.
4251 void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S,
4252                                             bool ExpandPointedToStructures,
4253                                             bool ExpandStructures,
4254                                             const FieldDecl *FD,
4255                                             bool OutermostType,
4256                                             bool EncodingProperty,
4257                                             bool StructField) const {
4258   if (T->getAs<BuiltinType>()) {
4259     if (FD && FD->isBitField())
4260       return EncodeBitField(this, S, T, FD);
4261     S += ObjCEncodingForPrimitiveKind(this, T);
4262     return;
4263   }
4264 
4265   if (const ComplexType *CT = T->getAs<ComplexType>()) {
4266     S += 'j';
4267     getObjCEncodingForTypeImpl(CT->getElementType(), S, false, false, 0, false,
4268                                false);
4269     return;
4270   }
4271 
4272   // encoding for pointer or r3eference types.
4273   QualType PointeeTy;
4274   if (const PointerType *PT = T->getAs<PointerType>()) {
4275     if (PT->isObjCSelType()) {
4276       S += ':';
4277       return;
4278     }
4279     PointeeTy = PT->getPointeeType();
4280   }
4281   else if (const ReferenceType *RT = T->getAs<ReferenceType>())
4282     PointeeTy = RT->getPointeeType();
4283   if (!PointeeTy.isNull()) {
4284     bool isReadOnly = false;
4285     // For historical/compatibility reasons, the read-only qualifier of the
4286     // pointee gets emitted _before_ the '^'.  The read-only qualifier of
4287     // the pointer itself gets ignored, _unless_ we are looking at a typedef!
4288     // Also, do not emit the 'r' for anything but the outermost type!
4289     if (isa<TypedefType>(T.getTypePtr())) {
4290       if (OutermostType && T.isConstQualified()) {
4291         isReadOnly = true;
4292         S += 'r';
4293       }
4294     } else if (OutermostType) {
4295       QualType P = PointeeTy;
4296       while (P->getAs<PointerType>())
4297         P = P->getAs<PointerType>()->getPointeeType();
4298       if (P.isConstQualified()) {
4299         isReadOnly = true;
4300         S += 'r';
4301       }
4302     }
4303     if (isReadOnly) {
4304       // Another legacy compatibility encoding. Some ObjC qualifier and type
4305       // combinations need to be rearranged.
4306       // Rewrite "in const" from "nr" to "rn"
4307       if (StringRef(S).endswith("nr"))
4308         S.replace(S.end()-2, S.end(), "rn");
4309     }
4310 
4311     if (PointeeTy->isCharType()) {
4312       // char pointer types should be encoded as '*' unless it is a
4313       // type that has been typedef'd to 'BOOL'.
4314       if (!isTypeTypedefedAsBOOL(PointeeTy)) {
4315         S += '*';
4316         return;
4317       }
4318     } else if (const RecordType *RTy = PointeeTy->getAs<RecordType>()) {
4319       // GCC binary compat: Need to convert "struct objc_class *" to "#".
4320       if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_class")) {
4321         S += '#';
4322         return;
4323       }
4324       // GCC binary compat: Need to convert "struct objc_object *" to "@".
4325       if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_object")) {
4326         S += '@';
4327         return;
4328       }
4329       // fall through...
4330     }
4331     S += '^';
4332     getLegacyIntegralTypeEncoding(PointeeTy);
4333 
4334     getObjCEncodingForTypeImpl(PointeeTy, S, false, ExpandPointedToStructures,
4335                                NULL);
4336     return;
4337   }
4338 
4339   if (const ArrayType *AT =
4340       // Ignore type qualifiers etc.
4341         dyn_cast<ArrayType>(T->getCanonicalTypeInternal())) {
4342     if (isa<IncompleteArrayType>(AT) && !StructField) {
4343       // Incomplete arrays are encoded as a pointer to the array element.
4344       S += '^';
4345 
4346       getObjCEncodingForTypeImpl(AT->getElementType(), S,
4347                                  false, ExpandStructures, FD);
4348     } else {
4349       S += '[';
4350 
4351       if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT)) {
4352         if (getTypeSize(CAT->getElementType()) == 0)
4353           S += '0';
4354         else
4355           S += llvm::utostr(CAT->getSize().getZExtValue());
4356       } else {
4357         //Variable length arrays are encoded as a regular array with 0 elements.
4358         assert((isa<VariableArrayType>(AT) || isa<IncompleteArrayType>(AT)) &&
4359                "Unknown array type!");
4360         S += '0';
4361       }
4362 
4363       getObjCEncodingForTypeImpl(AT->getElementType(), S,
4364                                  false, ExpandStructures, FD);
4365       S += ']';
4366     }
4367     return;
4368   }
4369 
4370   if (T->getAs<FunctionType>()) {
4371     S += '?';
4372     return;
4373   }
4374 
4375   if (const RecordType *RTy = T->getAs<RecordType>()) {
4376     RecordDecl *RDecl = RTy->getDecl();
4377     S += RDecl->isUnion() ? '(' : '{';
4378     // Anonymous structures print as '?'
4379     if (const IdentifierInfo *II = RDecl->getIdentifier()) {
4380       S += II->getName();
4381       if (ClassTemplateSpecializationDecl *Spec
4382           = dyn_cast<ClassTemplateSpecializationDecl>(RDecl)) {
4383         const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
4384         std::string TemplateArgsStr
4385           = TemplateSpecializationType::PrintTemplateArgumentList(
4386                                             TemplateArgs.data(),
4387                                             TemplateArgs.size(),
4388                                             (*this).getPrintingPolicy());
4389 
4390         S += TemplateArgsStr;
4391       }
4392     } else {
4393       S += '?';
4394     }
4395     if (ExpandStructures) {
4396       S += '=';
4397       if (!RDecl->isUnion()) {
4398         getObjCEncodingForStructureImpl(RDecl, S, FD);
4399       } else {
4400         for (RecordDecl::field_iterator Field = RDecl->field_begin(),
4401                                      FieldEnd = RDecl->field_end();
4402              Field != FieldEnd; ++Field) {
4403           if (FD) {
4404             S += '"';
4405             S += Field->getNameAsString();
4406             S += '"';
4407           }
4408 
4409           // Special case bit-fields.
4410           if (Field->isBitField()) {
4411             getObjCEncodingForTypeImpl(Field->getType(), S, false, true,
4412                                        (*Field));
4413           } else {
4414             QualType qt = Field->getType();
4415             getLegacyIntegralTypeEncoding(qt);
4416             getObjCEncodingForTypeImpl(qt, S, false, true,
4417                                        FD, /*OutermostType*/false,
4418                                        /*EncodingProperty*/false,
4419                                        /*StructField*/true);
4420           }
4421         }
4422       }
4423     }
4424     S += RDecl->isUnion() ? ')' : '}';
4425     return;
4426   }
4427 
4428   if (const EnumType *ET = T->getAs<EnumType>()) {
4429     if (FD && FD->isBitField())
4430       EncodeBitField(this, S, T, FD);
4431     else
4432       S += ObjCEncodingForEnumType(this, ET);
4433     return;
4434   }
4435 
4436   if (T->isBlockPointerType()) {
4437     S += "@?"; // Unlike a pointer-to-function, which is "^?".
4438     return;
4439   }
4440 
4441   // Ignore protocol qualifiers when mangling at this level.
4442   if (const ObjCObjectType *OT = T->getAs<ObjCObjectType>())
4443     T = OT->getBaseType();
4444 
4445   if (const ObjCInterfaceType *OIT = T->getAs<ObjCInterfaceType>()) {
4446     // @encode(class_name)
4447     ObjCInterfaceDecl *OI = OIT->getDecl();
4448     S += '{';
4449     const IdentifierInfo *II = OI->getIdentifier();
4450     S += II->getName();
4451     S += '=';
4452     SmallVector<const ObjCIvarDecl*, 32> Ivars;
4453     DeepCollectObjCIvars(OI, true, Ivars);
4454     for (unsigned i = 0, e = Ivars.size(); i != e; ++i) {
4455       const FieldDecl *Field = cast<FieldDecl>(Ivars[i]);
4456       if (Field->isBitField())
4457         getObjCEncodingForTypeImpl(Field->getType(), S, false, true, Field);
4458       else
4459         getObjCEncodingForTypeImpl(Field->getType(), S, false, true, FD);
4460     }
4461     S += '}';
4462     return;
4463   }
4464 
4465   if (const ObjCObjectPointerType *OPT = T->getAs<ObjCObjectPointerType>()) {
4466     if (OPT->isObjCIdType()) {
4467       S += '@';
4468       return;
4469     }
4470 
4471     if (OPT->isObjCClassType() || OPT->isObjCQualifiedClassType()) {
4472       // FIXME: Consider if we need to output qualifiers for 'Class<p>'.
4473       // Since this is a binary compatibility issue, need to consult with runtime
4474       // folks. Fortunately, this is a *very* obsure construct.
4475       S += '#';
4476       return;
4477     }
4478 
4479     if (OPT->isObjCQualifiedIdType()) {
4480       getObjCEncodingForTypeImpl(getObjCIdType(), S,
4481                                  ExpandPointedToStructures,
4482                                  ExpandStructures, FD);
4483       if (FD || EncodingProperty) {
4484         // Note that we do extended encoding of protocol qualifer list
4485         // Only when doing ivar or property encoding.
4486         S += '"';
4487         for (ObjCObjectPointerType::qual_iterator I = OPT->qual_begin(),
4488              E = OPT->qual_end(); I != E; ++I) {
4489           S += '<';
4490           S += (*I)->getNameAsString();
4491           S += '>';
4492         }
4493         S += '"';
4494       }
4495       return;
4496     }
4497 
4498     QualType PointeeTy = OPT->getPointeeType();
4499     if (!EncodingProperty &&
4500         isa<TypedefType>(PointeeTy.getTypePtr())) {
4501       // Another historical/compatibility reason.
4502       // We encode the underlying type which comes out as
4503       // {...};
4504       S += '^';
4505       getObjCEncodingForTypeImpl(PointeeTy, S,
4506                                  false, ExpandPointedToStructures,
4507                                  NULL);
4508       return;
4509     }
4510 
4511     S += '@';
4512     if (OPT->getInterfaceDecl() && (FD || EncodingProperty)) {
4513       S += '"';
4514       S += OPT->getInterfaceDecl()->getIdentifier()->getName();
4515       for (ObjCObjectPointerType::qual_iterator I = OPT->qual_begin(),
4516            E = OPT->qual_end(); I != E; ++I) {
4517         S += '<';
4518         S += (*I)->getNameAsString();
4519         S += '>';
4520       }
4521       S += '"';
4522     }
4523     return;
4524   }
4525 
4526   // gcc just blithely ignores member pointers.
4527   // TODO: maybe there should be a mangling for these
4528   if (T->getAs<MemberPointerType>())
4529     return;
4530 
4531   if (T->isVectorType()) {
4532     // This matches gcc's encoding, even though technically it is
4533     // insufficient.
4534     // FIXME. We should do a better job than gcc.
4535     return;
4536   }
4537 
4538   llvm_unreachable("@encode for type not implemented!");
4539 }
4540 
4541 void ASTContext::getObjCEncodingForStructureImpl(RecordDecl *RDecl,
4542                                                  std::string &S,
4543                                                  const FieldDecl *FD,
4544                                                  bool includeVBases) const {
4545   assert(RDecl && "Expected non-null RecordDecl");
4546   assert(!RDecl->isUnion() && "Should not be called for unions");
4547   if (!RDecl->getDefinition())
4548     return;
4549 
4550   CXXRecordDecl *CXXRec = dyn_cast<CXXRecordDecl>(RDecl);
4551   std::multimap<uint64_t, NamedDecl *> FieldOrBaseOffsets;
4552   const ASTRecordLayout &layout = getASTRecordLayout(RDecl);
4553 
4554   if (CXXRec) {
4555     for (CXXRecordDecl::base_class_iterator
4556            BI = CXXRec->bases_begin(),
4557            BE = CXXRec->bases_end(); BI != BE; ++BI) {
4558       if (!BI->isVirtual()) {
4559         CXXRecordDecl *base = BI->getType()->getAsCXXRecordDecl();
4560         if (base->isEmpty())
4561           continue;
4562         uint64_t offs = layout.getBaseClassOffsetInBits(base);
4563         FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
4564                                   std::make_pair(offs, base));
4565       }
4566     }
4567   }
4568 
4569   unsigned i = 0;
4570   for (RecordDecl::field_iterator Field = RDecl->field_begin(),
4571                                FieldEnd = RDecl->field_end();
4572        Field != FieldEnd; ++Field, ++i) {
4573     uint64_t offs = layout.getFieldOffset(i);
4574     FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
4575                               std::make_pair(offs, *Field));
4576   }
4577 
4578   if (CXXRec && includeVBases) {
4579     for (CXXRecordDecl::base_class_iterator
4580            BI = CXXRec->vbases_begin(),
4581            BE = CXXRec->vbases_end(); BI != BE; ++BI) {
4582       CXXRecordDecl *base = BI->getType()->getAsCXXRecordDecl();
4583       if (base->isEmpty())
4584         continue;
4585       uint64_t offs = layout.getVBaseClassOffsetInBits(base);
4586       if (FieldOrBaseOffsets.find(offs) == FieldOrBaseOffsets.end())
4587         FieldOrBaseOffsets.insert(FieldOrBaseOffsets.end(),
4588                                   std::make_pair(offs, base));
4589     }
4590   }
4591 
4592   CharUnits size;
4593   if (CXXRec) {
4594     size = includeVBases ? layout.getSize() : layout.getNonVirtualSize();
4595   } else {
4596     size = layout.getSize();
4597   }
4598 
4599   uint64_t CurOffs = 0;
4600   std::multimap<uint64_t, NamedDecl *>::iterator
4601     CurLayObj = FieldOrBaseOffsets.begin();
4602 
4603   if ((CurLayObj != FieldOrBaseOffsets.end() && CurLayObj->first != 0) ||
4604       (CurLayObj == FieldOrBaseOffsets.end() &&
4605          CXXRec && CXXRec->isDynamicClass())) {
4606     assert(CXXRec && CXXRec->isDynamicClass() &&
4607            "Offset 0 was empty but no VTable ?");
4608     if (FD) {
4609       S += "\"_vptr$";
4610       std::string recname = CXXRec->getNameAsString();
4611       if (recname.empty()) recname = "?";
4612       S += recname;
4613       S += '"';
4614     }
4615     S += "^^?";
4616     CurOffs += getTypeSize(VoidPtrTy);
4617   }
4618 
4619   if (!RDecl->hasFlexibleArrayMember()) {
4620     // Mark the end of the structure.
4621     uint64_t offs = toBits(size);
4622     FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
4623                               std::make_pair(offs, (NamedDecl*)0));
4624   }
4625 
4626   for (; CurLayObj != FieldOrBaseOffsets.end(); ++CurLayObj) {
4627     assert(CurOffs <= CurLayObj->first);
4628 
4629     if (CurOffs < CurLayObj->first) {
4630       uint64_t padding = CurLayObj->first - CurOffs;
4631       // FIXME: There doesn't seem to be a way to indicate in the encoding that
4632       // packing/alignment of members is different that normal, in which case
4633       // the encoding will be out-of-sync with the real layout.
4634       // If the runtime switches to just consider the size of types without
4635       // taking into account alignment, we could make padding explicit in the
4636       // encoding (e.g. using arrays of chars). The encoding strings would be
4637       // longer then though.
4638       CurOffs += padding;
4639     }
4640 
4641     NamedDecl *dcl = CurLayObj->second;
4642     if (dcl == 0)
4643       break; // reached end of structure.
4644 
4645     if (CXXRecordDecl *base = dyn_cast<CXXRecordDecl>(dcl)) {
4646       // We expand the bases without their virtual bases since those are going
4647       // in the initial structure. Note that this differs from gcc which
4648       // expands virtual bases each time one is encountered in the hierarchy,
4649       // making the encoding type bigger than it really is.
4650       getObjCEncodingForStructureImpl(base, S, FD, /*includeVBases*/false);
4651       assert(!base->isEmpty());
4652       CurOffs += toBits(getASTRecordLayout(base).getNonVirtualSize());
4653     } else {
4654       FieldDecl *field = cast<FieldDecl>(dcl);
4655       if (FD) {
4656         S += '"';
4657         S += field->getNameAsString();
4658         S += '"';
4659       }
4660 
4661       if (field->isBitField()) {
4662         EncodeBitField(this, S, field->getType(), field);
4663         CurOffs += field->getBitWidth()->EvaluateAsInt(*this).getZExtValue();
4664       } else {
4665         QualType qt = field->getType();
4666         getLegacyIntegralTypeEncoding(qt);
4667         getObjCEncodingForTypeImpl(qt, S, false, true, FD,
4668                                    /*OutermostType*/false,
4669                                    /*EncodingProperty*/false,
4670                                    /*StructField*/true);
4671         CurOffs += getTypeSize(field->getType());
4672       }
4673     }
4674   }
4675 }
4676 
4677 void ASTContext::getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT,
4678                                                  std::string& S) const {
4679   if (QT & Decl::OBJC_TQ_In)
4680     S += 'n';
4681   if (QT & Decl::OBJC_TQ_Inout)
4682     S += 'N';
4683   if (QT & Decl::OBJC_TQ_Out)
4684     S += 'o';
4685   if (QT & Decl::OBJC_TQ_Bycopy)
4686     S += 'O';
4687   if (QT & Decl::OBJC_TQ_Byref)
4688     S += 'R';
4689   if (QT & Decl::OBJC_TQ_Oneway)
4690     S += 'V';
4691 }
4692 
4693 void ASTContext::setBuiltinVaListType(QualType T) {
4694   assert(BuiltinVaListType.isNull() && "__builtin_va_list type already set!");
4695 
4696   BuiltinVaListType = T;
4697 }
4698 
4699 TypedefDecl *ASTContext::getObjCIdDecl() const {
4700   if (!ObjCIdDecl) {
4701     QualType T = getObjCObjectType(ObjCBuiltinIdTy, 0, 0);
4702     T = getObjCObjectPointerType(T);
4703     TypeSourceInfo *IdInfo = getTrivialTypeSourceInfo(T);
4704     ObjCIdDecl = TypedefDecl::Create(const_cast<ASTContext &>(*this),
4705                                      getTranslationUnitDecl(),
4706                                      SourceLocation(), SourceLocation(),
4707                                      &Idents.get("id"), IdInfo);
4708   }
4709 
4710   return ObjCIdDecl;
4711 }
4712 
4713 TypedefDecl *ASTContext::getObjCSelDecl() const {
4714   if (!ObjCSelDecl) {
4715     QualType SelT = getPointerType(ObjCBuiltinSelTy);
4716     TypeSourceInfo *SelInfo = getTrivialTypeSourceInfo(SelT);
4717     ObjCSelDecl = TypedefDecl::Create(const_cast<ASTContext &>(*this),
4718                                       getTranslationUnitDecl(),
4719                                       SourceLocation(), SourceLocation(),
4720                                       &Idents.get("SEL"), SelInfo);
4721   }
4722   return ObjCSelDecl;
4723 }
4724 
4725 void ASTContext::setObjCProtoType(QualType QT) {
4726   ObjCProtoType = QT;
4727 }
4728 
4729 TypedefDecl *ASTContext::getObjCClassDecl() const {
4730   if (!ObjCClassDecl) {
4731     QualType T = getObjCObjectType(ObjCBuiltinClassTy, 0, 0);
4732     T = getObjCObjectPointerType(T);
4733     TypeSourceInfo *ClassInfo = getTrivialTypeSourceInfo(T);
4734     ObjCClassDecl = TypedefDecl::Create(const_cast<ASTContext &>(*this),
4735                                         getTranslationUnitDecl(),
4736                                         SourceLocation(), SourceLocation(),
4737                                         &Idents.get("Class"), ClassInfo);
4738   }
4739 
4740   return ObjCClassDecl;
4741 }
4742 
4743 void ASTContext::setObjCConstantStringInterface(ObjCInterfaceDecl *Decl) {
4744   assert(ObjCConstantStringType.isNull() &&
4745          "'NSConstantString' type already set!");
4746 
4747   ObjCConstantStringType = getObjCInterfaceType(Decl);
4748 }
4749 
4750 /// \brief Retrieve the template name that corresponds to a non-empty
4751 /// lookup.
4752 TemplateName
4753 ASTContext::getOverloadedTemplateName(UnresolvedSetIterator Begin,
4754                                       UnresolvedSetIterator End) const {
4755   unsigned size = End - Begin;
4756   assert(size > 1 && "set is not overloaded!");
4757 
4758   void *memory = Allocate(sizeof(OverloadedTemplateStorage) +
4759                           size * sizeof(FunctionTemplateDecl*));
4760   OverloadedTemplateStorage *OT = new(memory) OverloadedTemplateStorage(size);
4761 
4762   NamedDecl **Storage = OT->getStorage();
4763   for (UnresolvedSetIterator I = Begin; I != End; ++I) {
4764     NamedDecl *D = *I;
4765     assert(isa<FunctionTemplateDecl>(D) ||
4766            (isa<UsingShadowDecl>(D) &&
4767             isa<FunctionTemplateDecl>(D->getUnderlyingDecl())));
4768     *Storage++ = D;
4769   }
4770 
4771   return TemplateName(OT);
4772 }
4773 
4774 /// \brief Retrieve the template name that represents a qualified
4775 /// template name such as \c std::vector.
4776 TemplateName
4777 ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS,
4778                                      bool TemplateKeyword,
4779                                      TemplateDecl *Template) const {
4780   assert(NNS && "Missing nested-name-specifier in qualified template name");
4781 
4782   // FIXME: Canonicalization?
4783   llvm::FoldingSetNodeID ID;
4784   QualifiedTemplateName::Profile(ID, NNS, TemplateKeyword, Template);
4785 
4786   void *InsertPos = 0;
4787   QualifiedTemplateName *QTN =
4788     QualifiedTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
4789   if (!QTN) {
4790     QTN = new (*this,4) QualifiedTemplateName(NNS, TemplateKeyword, Template);
4791     QualifiedTemplateNames.InsertNode(QTN, InsertPos);
4792   }
4793 
4794   return TemplateName(QTN);
4795 }
4796 
4797 /// \brief Retrieve the template name that represents a dependent
4798 /// template name such as \c MetaFun::template apply.
4799 TemplateName
4800 ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS,
4801                                      const IdentifierInfo *Name) const {
4802   assert((!NNS || NNS->isDependent()) &&
4803          "Nested name specifier must be dependent");
4804 
4805   llvm::FoldingSetNodeID ID;
4806   DependentTemplateName::Profile(ID, NNS, Name);
4807 
4808   void *InsertPos = 0;
4809   DependentTemplateName *QTN =
4810     DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
4811 
4812   if (QTN)
4813     return TemplateName(QTN);
4814 
4815   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
4816   if (CanonNNS == NNS) {
4817     QTN = new (*this,4) DependentTemplateName(NNS, Name);
4818   } else {
4819     TemplateName Canon = getDependentTemplateName(CanonNNS, Name);
4820     QTN = new (*this,4) DependentTemplateName(NNS, Name, Canon);
4821     DependentTemplateName *CheckQTN =
4822       DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
4823     assert(!CheckQTN && "Dependent type name canonicalization broken");
4824     (void)CheckQTN;
4825   }
4826 
4827   DependentTemplateNames.InsertNode(QTN, InsertPos);
4828   return TemplateName(QTN);
4829 }
4830 
4831 /// \brief Retrieve the template name that represents a dependent
4832 /// template name such as \c MetaFun::template operator+.
4833 TemplateName
4834 ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS,
4835                                      OverloadedOperatorKind Operator) const {
4836   assert((!NNS || NNS->isDependent()) &&
4837          "Nested name specifier must be dependent");
4838 
4839   llvm::FoldingSetNodeID ID;
4840   DependentTemplateName::Profile(ID, NNS, Operator);
4841 
4842   void *InsertPos = 0;
4843   DependentTemplateName *QTN
4844     = DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
4845 
4846   if (QTN)
4847     return TemplateName(QTN);
4848 
4849   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
4850   if (CanonNNS == NNS) {
4851     QTN = new (*this,4) DependentTemplateName(NNS, Operator);
4852   } else {
4853     TemplateName Canon = getDependentTemplateName(CanonNNS, Operator);
4854     QTN = new (*this,4) DependentTemplateName(NNS, Operator, Canon);
4855 
4856     DependentTemplateName *CheckQTN
4857       = DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
4858     assert(!CheckQTN && "Dependent template name canonicalization broken");
4859     (void)CheckQTN;
4860   }
4861 
4862   DependentTemplateNames.InsertNode(QTN, InsertPos);
4863   return TemplateName(QTN);
4864 }
4865 
4866 TemplateName
4867 ASTContext::getSubstTemplateTemplateParm(TemplateTemplateParmDecl *param,
4868                                          TemplateName replacement) const {
4869   llvm::FoldingSetNodeID ID;
4870   SubstTemplateTemplateParmStorage::Profile(ID, param, replacement);
4871 
4872   void *insertPos = 0;
4873   SubstTemplateTemplateParmStorage *subst
4874     = SubstTemplateTemplateParms.FindNodeOrInsertPos(ID, insertPos);
4875 
4876   if (!subst) {
4877     subst = new (*this) SubstTemplateTemplateParmStorage(param, replacement);
4878     SubstTemplateTemplateParms.InsertNode(subst, insertPos);
4879   }
4880 
4881   return TemplateName(subst);
4882 }
4883 
4884 TemplateName
4885 ASTContext::getSubstTemplateTemplateParmPack(TemplateTemplateParmDecl *Param,
4886                                        const TemplateArgument &ArgPack) const {
4887   ASTContext &Self = const_cast<ASTContext &>(*this);
4888   llvm::FoldingSetNodeID ID;
4889   SubstTemplateTemplateParmPackStorage::Profile(ID, Self, Param, ArgPack);
4890 
4891   void *InsertPos = 0;
4892   SubstTemplateTemplateParmPackStorage *Subst
4893     = SubstTemplateTemplateParmPacks.FindNodeOrInsertPos(ID, InsertPos);
4894 
4895   if (!Subst) {
4896     Subst = new (*this) SubstTemplateTemplateParmPackStorage(Param,
4897                                                            ArgPack.pack_size(),
4898                                                          ArgPack.pack_begin());
4899     SubstTemplateTemplateParmPacks.InsertNode(Subst, InsertPos);
4900   }
4901 
4902   return TemplateName(Subst);
4903 }
4904 
4905 /// getFromTargetType - Given one of the integer types provided by
4906 /// TargetInfo, produce the corresponding type. The unsigned @p Type
4907 /// is actually a value of type @c TargetInfo::IntType.
4908 CanQualType ASTContext::getFromTargetType(unsigned Type) const {
4909   switch (Type) {
4910   case TargetInfo::NoInt: return CanQualType();
4911   case TargetInfo::SignedShort: return ShortTy;
4912   case TargetInfo::UnsignedShort: return UnsignedShortTy;
4913   case TargetInfo::SignedInt: return IntTy;
4914   case TargetInfo::UnsignedInt: return UnsignedIntTy;
4915   case TargetInfo::SignedLong: return LongTy;
4916   case TargetInfo::UnsignedLong: return UnsignedLongTy;
4917   case TargetInfo::SignedLongLong: return LongLongTy;
4918   case TargetInfo::UnsignedLongLong: return UnsignedLongLongTy;
4919   }
4920 
4921   llvm_unreachable("Unhandled TargetInfo::IntType value");
4922 }
4923 
4924 //===----------------------------------------------------------------------===//
4925 //                        Type Predicates.
4926 //===----------------------------------------------------------------------===//
4927 
4928 /// getObjCGCAttr - Returns one of GCNone, Weak or Strong objc's
4929 /// garbage collection attribute.
4930 ///
4931 Qualifiers::GC ASTContext::getObjCGCAttrKind(QualType Ty) const {
4932   if (getLangOptions().getGC() == LangOptions::NonGC)
4933     return Qualifiers::GCNone;
4934 
4935   assert(getLangOptions().ObjC1);
4936   Qualifiers::GC GCAttrs = Ty.getObjCGCAttr();
4937 
4938   // Default behaviour under objective-C's gc is for ObjC pointers
4939   // (or pointers to them) be treated as though they were declared
4940   // as __strong.
4941   if (GCAttrs == Qualifiers::GCNone) {
4942     if (Ty->isObjCObjectPointerType() || Ty->isBlockPointerType())
4943       return Qualifiers::Strong;
4944     else if (Ty->isPointerType())
4945       return getObjCGCAttrKind(Ty->getAs<PointerType>()->getPointeeType());
4946   } else {
4947     // It's not valid to set GC attributes on anything that isn't a
4948     // pointer.
4949 #ifndef NDEBUG
4950     QualType CT = Ty->getCanonicalTypeInternal();
4951     while (const ArrayType *AT = dyn_cast<ArrayType>(CT))
4952       CT = AT->getElementType();
4953     assert(CT->isAnyPointerType() || CT->isBlockPointerType());
4954 #endif
4955   }
4956   return GCAttrs;
4957 }
4958 
4959 //===----------------------------------------------------------------------===//
4960 //                        Type Compatibility Testing
4961 //===----------------------------------------------------------------------===//
4962 
4963 /// areCompatVectorTypes - Return true if the two specified vector types are
4964 /// compatible.
4965 static bool areCompatVectorTypes(const VectorType *LHS,
4966                                  const VectorType *RHS) {
4967   assert(LHS->isCanonicalUnqualified() && RHS->isCanonicalUnqualified());
4968   return LHS->getElementType() == RHS->getElementType() &&
4969          LHS->getNumElements() == RHS->getNumElements();
4970 }
4971 
4972 bool ASTContext::areCompatibleVectorTypes(QualType FirstVec,
4973                                           QualType SecondVec) {
4974   assert(FirstVec->isVectorType() && "FirstVec should be a vector type");
4975   assert(SecondVec->isVectorType() && "SecondVec should be a vector type");
4976 
4977   if (hasSameUnqualifiedType(FirstVec, SecondVec))
4978     return true;
4979 
4980   // Treat Neon vector types and most AltiVec vector types as if they are the
4981   // equivalent GCC vector types.
4982   const VectorType *First = FirstVec->getAs<VectorType>();
4983   const VectorType *Second = SecondVec->getAs<VectorType>();
4984   if (First->getNumElements() == Second->getNumElements() &&
4985       hasSameType(First->getElementType(), Second->getElementType()) &&
4986       First->getVectorKind() != VectorType::AltiVecPixel &&
4987       First->getVectorKind() != VectorType::AltiVecBool &&
4988       Second->getVectorKind() != VectorType::AltiVecPixel &&
4989       Second->getVectorKind() != VectorType::AltiVecBool)
4990     return true;
4991 
4992   return false;
4993 }
4994 
4995 //===----------------------------------------------------------------------===//
4996 // ObjCQualifiedIdTypesAreCompatible - Compatibility testing for qualified id's.
4997 //===----------------------------------------------------------------------===//
4998 
4999 /// ProtocolCompatibleWithProtocol - return 'true' if 'lProto' is in the
5000 /// inheritance hierarchy of 'rProto'.
5001 bool
5002 ASTContext::ProtocolCompatibleWithProtocol(ObjCProtocolDecl *lProto,
5003                                            ObjCProtocolDecl *rProto) const {
5004   if (lProto == rProto)
5005     return true;
5006   for (ObjCProtocolDecl::protocol_iterator PI = rProto->protocol_begin(),
5007        E = rProto->protocol_end(); PI != E; ++PI)
5008     if (ProtocolCompatibleWithProtocol(lProto, *PI))
5009       return true;
5010   return false;
5011 }
5012 
5013 /// QualifiedIdConformsQualifiedId - compare id<p,...> with id<p1,...>
5014 /// return true if lhs's protocols conform to rhs's protocol; false
5015 /// otherwise.
5016 bool ASTContext::QualifiedIdConformsQualifiedId(QualType lhs, QualType rhs) {
5017   if (lhs->isObjCQualifiedIdType() && rhs->isObjCQualifiedIdType())
5018     return ObjCQualifiedIdTypesAreCompatible(lhs, rhs, false);
5019   return false;
5020 }
5021 
5022 /// ObjCQualifiedClassTypesAreCompatible - compare  Class<p,...> and
5023 /// Class<p1, ...>.
5024 bool ASTContext::ObjCQualifiedClassTypesAreCompatible(QualType lhs,
5025                                                       QualType rhs) {
5026   const ObjCObjectPointerType *lhsQID = lhs->getAs<ObjCObjectPointerType>();
5027   const ObjCObjectPointerType *rhsOPT = rhs->getAs<ObjCObjectPointerType>();
5028   assert ((lhsQID && rhsOPT) && "ObjCQualifiedClassTypesAreCompatible");
5029 
5030   for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
5031        E = lhsQID->qual_end(); I != E; ++I) {
5032     bool match = false;
5033     ObjCProtocolDecl *lhsProto = *I;
5034     for (ObjCObjectPointerType::qual_iterator J = rhsOPT->qual_begin(),
5035          E = rhsOPT->qual_end(); J != E; ++J) {
5036       ObjCProtocolDecl *rhsProto = *J;
5037       if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto)) {
5038         match = true;
5039         break;
5040       }
5041     }
5042     if (!match)
5043       return false;
5044   }
5045   return true;
5046 }
5047 
5048 /// ObjCQualifiedIdTypesAreCompatible - We know that one of lhs/rhs is an
5049 /// ObjCQualifiedIDType.
5050 bool ASTContext::ObjCQualifiedIdTypesAreCompatible(QualType lhs, QualType rhs,
5051                                                    bool compare) {
5052   // Allow id<P..> and an 'id' or void* type in all cases.
5053   if (lhs->isVoidPointerType() ||
5054       lhs->isObjCIdType() || lhs->isObjCClassType())
5055     return true;
5056   else if (rhs->isVoidPointerType() ||
5057            rhs->isObjCIdType() || rhs->isObjCClassType())
5058     return true;
5059 
5060   if (const ObjCObjectPointerType *lhsQID = lhs->getAsObjCQualifiedIdType()) {
5061     const ObjCObjectPointerType *rhsOPT = rhs->getAs<ObjCObjectPointerType>();
5062 
5063     if (!rhsOPT) return false;
5064 
5065     if (rhsOPT->qual_empty()) {
5066       // If the RHS is a unqualified interface pointer "NSString*",
5067       // make sure we check the class hierarchy.
5068       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
5069         for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
5070              E = lhsQID->qual_end(); I != E; ++I) {
5071           // when comparing an id<P> on lhs with a static type on rhs,
5072           // see if static class implements all of id's protocols, directly or
5073           // through its super class and categories.
5074           if (!rhsID->ClassImplementsProtocol(*I, true))
5075             return false;
5076         }
5077       }
5078       // If there are no qualifiers and no interface, we have an 'id'.
5079       return true;
5080     }
5081     // Both the right and left sides have qualifiers.
5082     for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
5083          E = lhsQID->qual_end(); I != E; ++I) {
5084       ObjCProtocolDecl *lhsProto = *I;
5085       bool match = false;
5086 
5087       // when comparing an id<P> on lhs with a static type on rhs,
5088       // see if static class implements all of id's protocols, directly or
5089       // through its super class and categories.
5090       for (ObjCObjectPointerType::qual_iterator J = rhsOPT->qual_begin(),
5091            E = rhsOPT->qual_end(); J != E; ++J) {
5092         ObjCProtocolDecl *rhsProto = *J;
5093         if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
5094             (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
5095           match = true;
5096           break;
5097         }
5098       }
5099       // If the RHS is a qualified interface pointer "NSString<P>*",
5100       // make sure we check the class hierarchy.
5101       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
5102         for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
5103              E = lhsQID->qual_end(); I != E; ++I) {
5104           // when comparing an id<P> on lhs with a static type on rhs,
5105           // see if static class implements all of id's protocols, directly or
5106           // through its super class and categories.
5107           if (rhsID->ClassImplementsProtocol(*I, true)) {
5108             match = true;
5109             break;
5110           }
5111         }
5112       }
5113       if (!match)
5114         return false;
5115     }
5116 
5117     return true;
5118   }
5119 
5120   const ObjCObjectPointerType *rhsQID = rhs->getAsObjCQualifiedIdType();
5121   assert(rhsQID && "One of the LHS/RHS should be id<x>");
5122 
5123   if (const ObjCObjectPointerType *lhsOPT =
5124         lhs->getAsObjCInterfacePointerType()) {
5125     // If both the right and left sides have qualifiers.
5126     for (ObjCObjectPointerType::qual_iterator I = lhsOPT->qual_begin(),
5127          E = lhsOPT->qual_end(); I != E; ++I) {
5128       ObjCProtocolDecl *lhsProto = *I;
5129       bool match = false;
5130 
5131       // when comparing an id<P> on rhs with a static type on lhs,
5132       // see if static class implements all of id's protocols, directly or
5133       // through its super class and categories.
5134       // First, lhs protocols in the qualifier list must be found, direct
5135       // or indirect in rhs's qualifier list or it is a mismatch.
5136       for (ObjCObjectPointerType::qual_iterator J = rhsQID->qual_begin(),
5137            E = rhsQID->qual_end(); J != E; ++J) {
5138         ObjCProtocolDecl *rhsProto = *J;
5139         if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
5140             (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
5141           match = true;
5142           break;
5143         }
5144       }
5145       if (!match)
5146         return false;
5147     }
5148 
5149     // Static class's protocols, or its super class or category protocols
5150     // must be found, direct or indirect in rhs's qualifier list or it is a mismatch.
5151     if (ObjCInterfaceDecl *lhsID = lhsOPT->getInterfaceDecl()) {
5152       llvm::SmallPtrSet<ObjCProtocolDecl *, 8> LHSInheritedProtocols;
5153       CollectInheritedProtocols(lhsID, LHSInheritedProtocols);
5154       // This is rather dubious but matches gcc's behavior. If lhs has
5155       // no type qualifier and its class has no static protocol(s)
5156       // assume that it is mismatch.
5157       if (LHSInheritedProtocols.empty() && lhsOPT->qual_empty())
5158         return false;
5159       for (llvm::SmallPtrSet<ObjCProtocolDecl*,8>::iterator I =
5160            LHSInheritedProtocols.begin(),
5161            E = LHSInheritedProtocols.end(); I != E; ++I) {
5162         bool match = false;
5163         ObjCProtocolDecl *lhsProto = (*I);
5164         for (ObjCObjectPointerType::qual_iterator J = rhsQID->qual_begin(),
5165              E = rhsQID->qual_end(); J != E; ++J) {
5166           ObjCProtocolDecl *rhsProto = *J;
5167           if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
5168               (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
5169             match = true;
5170             break;
5171           }
5172         }
5173         if (!match)
5174           return false;
5175       }
5176     }
5177     return true;
5178   }
5179   return false;
5180 }
5181 
5182 /// canAssignObjCInterfaces - Return true if the two interface types are
5183 /// compatible for assignment from RHS to LHS.  This handles validation of any
5184 /// protocol qualifiers on the LHS or RHS.
5185 ///
5186 bool ASTContext::canAssignObjCInterfaces(const ObjCObjectPointerType *LHSOPT,
5187                                          const ObjCObjectPointerType *RHSOPT) {
5188   const ObjCObjectType* LHS = LHSOPT->getObjectType();
5189   const ObjCObjectType* RHS = RHSOPT->getObjectType();
5190 
5191   // If either type represents the built-in 'id' or 'Class' types, return true.
5192   if (LHS->isObjCUnqualifiedIdOrClass() ||
5193       RHS->isObjCUnqualifiedIdOrClass())
5194     return true;
5195 
5196   if (LHS->isObjCQualifiedId() || RHS->isObjCQualifiedId())
5197     return ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
5198                                              QualType(RHSOPT,0),
5199                                              false);
5200 
5201   if (LHS->isObjCQualifiedClass() && RHS->isObjCQualifiedClass())
5202     return ObjCQualifiedClassTypesAreCompatible(QualType(LHSOPT,0),
5203                                                 QualType(RHSOPT,0));
5204 
5205   // If we have 2 user-defined types, fall into that path.
5206   if (LHS->getInterface() && RHS->getInterface())
5207     return canAssignObjCInterfaces(LHS, RHS);
5208 
5209   return false;
5210 }
5211 
5212 /// canAssignObjCInterfacesInBlockPointer - This routine is specifically written
5213 /// for providing type-safety for objective-c pointers used to pass/return
5214 /// arguments in block literals. When passed as arguments, passing 'A*' where
5215 /// 'id' is expected is not OK. Passing 'Sub *" where 'Super *" is expected is
5216 /// not OK. For the return type, the opposite is not OK.
5217 bool ASTContext::canAssignObjCInterfacesInBlockPointer(
5218                                          const ObjCObjectPointerType *LHSOPT,
5219                                          const ObjCObjectPointerType *RHSOPT,
5220                                          bool BlockReturnType) {
5221   if (RHSOPT->isObjCBuiltinType() || LHSOPT->isObjCIdType())
5222     return true;
5223 
5224   if (LHSOPT->isObjCBuiltinType()) {
5225     return RHSOPT->isObjCBuiltinType() || RHSOPT->isObjCQualifiedIdType();
5226   }
5227 
5228   if (LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType())
5229     return ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
5230                                              QualType(RHSOPT,0),
5231                                              false);
5232 
5233   const ObjCInterfaceType* LHS = LHSOPT->getInterfaceType();
5234   const ObjCInterfaceType* RHS = RHSOPT->getInterfaceType();
5235   if (LHS && RHS)  { // We have 2 user-defined types.
5236     if (LHS != RHS) {
5237       if (LHS->getDecl()->isSuperClassOf(RHS->getDecl()))
5238         return BlockReturnType;
5239       if (RHS->getDecl()->isSuperClassOf(LHS->getDecl()))
5240         return !BlockReturnType;
5241     }
5242     else
5243       return true;
5244   }
5245   return false;
5246 }
5247 
5248 /// getIntersectionOfProtocols - This routine finds the intersection of set
5249 /// of protocols inherited from two distinct objective-c pointer objects.
5250 /// It is used to build composite qualifier list of the composite type of
5251 /// the conditional expression involving two objective-c pointer objects.
5252 static
5253 void getIntersectionOfProtocols(ASTContext &Context,
5254                                 const ObjCObjectPointerType *LHSOPT,
5255                                 const ObjCObjectPointerType *RHSOPT,
5256       SmallVectorImpl<ObjCProtocolDecl *> &IntersectionOfProtocols) {
5257 
5258   const ObjCObjectType* LHS = LHSOPT->getObjectType();
5259   const ObjCObjectType* RHS = RHSOPT->getObjectType();
5260   assert(LHS->getInterface() && "LHS must have an interface base");
5261   assert(RHS->getInterface() && "RHS must have an interface base");
5262 
5263   llvm::SmallPtrSet<ObjCProtocolDecl *, 8> InheritedProtocolSet;
5264   unsigned LHSNumProtocols = LHS->getNumProtocols();
5265   if (LHSNumProtocols > 0)
5266     InheritedProtocolSet.insert(LHS->qual_begin(), LHS->qual_end());
5267   else {
5268     llvm::SmallPtrSet<ObjCProtocolDecl *, 8> LHSInheritedProtocols;
5269     Context.CollectInheritedProtocols(LHS->getInterface(),
5270                                       LHSInheritedProtocols);
5271     InheritedProtocolSet.insert(LHSInheritedProtocols.begin(),
5272                                 LHSInheritedProtocols.end());
5273   }
5274 
5275   unsigned RHSNumProtocols = RHS->getNumProtocols();
5276   if (RHSNumProtocols > 0) {
5277     ObjCProtocolDecl **RHSProtocols =
5278       const_cast<ObjCProtocolDecl **>(RHS->qual_begin());
5279     for (unsigned i = 0; i < RHSNumProtocols; ++i)
5280       if (InheritedProtocolSet.count(RHSProtocols[i]))
5281         IntersectionOfProtocols.push_back(RHSProtocols[i]);
5282   } else {
5283     llvm::SmallPtrSet<ObjCProtocolDecl *, 8> RHSInheritedProtocols;
5284     Context.CollectInheritedProtocols(RHS->getInterface(),
5285                                       RHSInheritedProtocols);
5286     for (llvm::SmallPtrSet<ObjCProtocolDecl*,8>::iterator I =
5287          RHSInheritedProtocols.begin(),
5288          E = RHSInheritedProtocols.end(); I != E; ++I)
5289       if (InheritedProtocolSet.count((*I)))
5290         IntersectionOfProtocols.push_back((*I));
5291   }
5292 }
5293 
5294 /// areCommonBaseCompatible - Returns common base class of the two classes if
5295 /// one found. Note that this is O'2 algorithm. But it will be called as the
5296 /// last type comparison in a ?-exp of ObjC pointer types before a
5297 /// warning is issued. So, its invokation is extremely rare.
5298 QualType ASTContext::areCommonBaseCompatible(
5299                                           const ObjCObjectPointerType *Lptr,
5300                                           const ObjCObjectPointerType *Rptr) {
5301   const ObjCObjectType *LHS = Lptr->getObjectType();
5302   const ObjCObjectType *RHS = Rptr->getObjectType();
5303   const ObjCInterfaceDecl* LDecl = LHS->getInterface();
5304   const ObjCInterfaceDecl* RDecl = RHS->getInterface();
5305   if (!LDecl || !RDecl || (LDecl == RDecl))
5306     return QualType();
5307 
5308   do {
5309     LHS = cast<ObjCInterfaceType>(getObjCInterfaceType(LDecl));
5310     if (canAssignObjCInterfaces(LHS, RHS)) {
5311       SmallVector<ObjCProtocolDecl *, 8> Protocols;
5312       getIntersectionOfProtocols(*this, Lptr, Rptr, Protocols);
5313 
5314       QualType Result = QualType(LHS, 0);
5315       if (!Protocols.empty())
5316         Result = getObjCObjectType(Result, Protocols.data(), Protocols.size());
5317       Result = getObjCObjectPointerType(Result);
5318       return Result;
5319     }
5320   } while ((LDecl = LDecl->getSuperClass()));
5321 
5322   return QualType();
5323 }
5324 
5325 bool ASTContext::canAssignObjCInterfaces(const ObjCObjectType *LHS,
5326                                          const ObjCObjectType *RHS) {
5327   assert(LHS->getInterface() && "LHS is not an interface type");
5328   assert(RHS->getInterface() && "RHS is not an interface type");
5329 
5330   // Verify that the base decls are compatible: the RHS must be a subclass of
5331   // the LHS.
5332   if (!LHS->getInterface()->isSuperClassOf(RHS->getInterface()))
5333     return false;
5334 
5335   // RHS must have a superset of the protocols in the LHS.  If the LHS is not
5336   // protocol qualified at all, then we are good.
5337   if (LHS->getNumProtocols() == 0)
5338     return true;
5339 
5340   // Okay, we know the LHS has protocol qualifiers.  If the RHS doesn't,
5341   // more detailed analysis is required.
5342   if (RHS->getNumProtocols() == 0) {
5343     // OK, if LHS is a superclass of RHS *and*
5344     // this superclass is assignment compatible with LHS.
5345     // false otherwise.
5346     bool IsSuperClass =
5347       LHS->getInterface()->isSuperClassOf(RHS->getInterface());
5348     if (IsSuperClass) {
5349       // OK if conversion of LHS to SuperClass results in narrowing of types
5350       // ; i.e., SuperClass may implement at least one of the protocols
5351       // in LHS's protocol list. Example, SuperObj<P1> = lhs<P1,P2> is ok.
5352       // But not SuperObj<P1,P2,P3> = lhs<P1,P2>.
5353       llvm::SmallPtrSet<ObjCProtocolDecl *, 8> SuperClassInheritedProtocols;
5354       CollectInheritedProtocols(RHS->getInterface(), SuperClassInheritedProtocols);
5355       // If super class has no protocols, it is not a match.
5356       if (SuperClassInheritedProtocols.empty())
5357         return false;
5358 
5359       for (ObjCObjectType::qual_iterator LHSPI = LHS->qual_begin(),
5360            LHSPE = LHS->qual_end();
5361            LHSPI != LHSPE; LHSPI++) {
5362         bool SuperImplementsProtocol = false;
5363         ObjCProtocolDecl *LHSProto = (*LHSPI);
5364 
5365         for (llvm::SmallPtrSet<ObjCProtocolDecl*,8>::iterator I =
5366              SuperClassInheritedProtocols.begin(),
5367              E = SuperClassInheritedProtocols.end(); I != E; ++I) {
5368           ObjCProtocolDecl *SuperClassProto = (*I);
5369           if (SuperClassProto->lookupProtocolNamed(LHSProto->getIdentifier())) {
5370             SuperImplementsProtocol = true;
5371             break;
5372           }
5373         }
5374         if (!SuperImplementsProtocol)
5375           return false;
5376       }
5377       return true;
5378     }
5379     return false;
5380   }
5381 
5382   for (ObjCObjectType::qual_iterator LHSPI = LHS->qual_begin(),
5383                                      LHSPE = LHS->qual_end();
5384        LHSPI != LHSPE; LHSPI++) {
5385     bool RHSImplementsProtocol = false;
5386 
5387     // If the RHS doesn't implement the protocol on the left, the types
5388     // are incompatible.
5389     for (ObjCObjectType::qual_iterator RHSPI = RHS->qual_begin(),
5390                                        RHSPE = RHS->qual_end();
5391          RHSPI != RHSPE; RHSPI++) {
5392       if ((*RHSPI)->lookupProtocolNamed((*LHSPI)->getIdentifier())) {
5393         RHSImplementsProtocol = true;
5394         break;
5395       }
5396     }
5397     // FIXME: For better diagnostics, consider passing back the protocol name.
5398     if (!RHSImplementsProtocol)
5399       return false;
5400   }
5401   // The RHS implements all protocols listed on the LHS.
5402   return true;
5403 }
5404 
5405 bool ASTContext::areComparableObjCPointerTypes(QualType LHS, QualType RHS) {
5406   // get the "pointed to" types
5407   const ObjCObjectPointerType *LHSOPT = LHS->getAs<ObjCObjectPointerType>();
5408   const ObjCObjectPointerType *RHSOPT = RHS->getAs<ObjCObjectPointerType>();
5409 
5410   if (!LHSOPT || !RHSOPT)
5411     return false;
5412 
5413   return canAssignObjCInterfaces(LHSOPT, RHSOPT) ||
5414          canAssignObjCInterfaces(RHSOPT, LHSOPT);
5415 }
5416 
5417 bool ASTContext::canBindObjCObjectType(QualType To, QualType From) {
5418   return canAssignObjCInterfaces(
5419                 getObjCObjectPointerType(To)->getAs<ObjCObjectPointerType>(),
5420                 getObjCObjectPointerType(From)->getAs<ObjCObjectPointerType>());
5421 }
5422 
5423 /// typesAreCompatible - C99 6.7.3p9: For two qualified types to be compatible,
5424 /// both shall have the identically qualified version of a compatible type.
5425 /// C99 6.2.7p1: Two types have compatible types if their types are the
5426 /// same. See 6.7.[2,3,5] for additional rules.
5427 bool ASTContext::typesAreCompatible(QualType LHS, QualType RHS,
5428                                     bool CompareUnqualified) {
5429   if (getLangOptions().CPlusPlus)
5430     return hasSameType(LHS, RHS);
5431 
5432   return !mergeTypes(LHS, RHS, false, CompareUnqualified).isNull();
5433 }
5434 
5435 bool ASTContext::propertyTypesAreCompatible(QualType LHS, QualType RHS) {
5436   return typesAreCompatible(LHS, RHS);
5437 }
5438 
5439 bool ASTContext::typesAreBlockPointerCompatible(QualType LHS, QualType RHS) {
5440   return !mergeTypes(LHS, RHS, true).isNull();
5441 }
5442 
5443 /// mergeTransparentUnionType - if T is a transparent union type and a member
5444 /// of T is compatible with SubType, return the merged type, else return
5445 /// QualType()
5446 QualType ASTContext::mergeTransparentUnionType(QualType T, QualType SubType,
5447                                                bool OfBlockPointer,
5448                                                bool Unqualified) {
5449   if (const RecordType *UT = T->getAsUnionType()) {
5450     RecordDecl *UD = UT->getDecl();
5451     if (UD->hasAttr<TransparentUnionAttr>()) {
5452       for (RecordDecl::field_iterator it = UD->field_begin(),
5453            itend = UD->field_end(); it != itend; ++it) {
5454         QualType ET = it->getType().getUnqualifiedType();
5455         QualType MT = mergeTypes(ET, SubType, OfBlockPointer, Unqualified);
5456         if (!MT.isNull())
5457           return MT;
5458       }
5459     }
5460   }
5461 
5462   return QualType();
5463 }
5464 
5465 /// mergeFunctionArgumentTypes - merge two types which appear as function
5466 /// argument types
5467 QualType ASTContext::mergeFunctionArgumentTypes(QualType lhs, QualType rhs,
5468                                                 bool OfBlockPointer,
5469                                                 bool Unqualified) {
5470   // GNU extension: two types are compatible if they appear as a function
5471   // argument, one of the types is a transparent union type and the other
5472   // type is compatible with a union member
5473   QualType lmerge = mergeTransparentUnionType(lhs, rhs, OfBlockPointer,
5474                                               Unqualified);
5475   if (!lmerge.isNull())
5476     return lmerge;
5477 
5478   QualType rmerge = mergeTransparentUnionType(rhs, lhs, OfBlockPointer,
5479                                               Unqualified);
5480   if (!rmerge.isNull())
5481     return rmerge;
5482 
5483   return mergeTypes(lhs, rhs, OfBlockPointer, Unqualified);
5484 }
5485 
5486 QualType ASTContext::mergeFunctionTypes(QualType lhs, QualType rhs,
5487                                         bool OfBlockPointer,
5488                                         bool Unqualified) {
5489   const FunctionType *lbase = lhs->getAs<FunctionType>();
5490   const FunctionType *rbase = rhs->getAs<FunctionType>();
5491   const FunctionProtoType *lproto = dyn_cast<FunctionProtoType>(lbase);
5492   const FunctionProtoType *rproto = dyn_cast<FunctionProtoType>(rbase);
5493   bool allLTypes = true;
5494   bool allRTypes = true;
5495 
5496   // Check return type
5497   QualType retType;
5498   if (OfBlockPointer) {
5499     QualType RHS = rbase->getResultType();
5500     QualType LHS = lbase->getResultType();
5501     bool UnqualifiedResult = Unqualified;
5502     if (!UnqualifiedResult)
5503       UnqualifiedResult = (!RHS.hasQualifiers() && LHS.hasQualifiers());
5504     retType = mergeTypes(LHS, RHS, true, UnqualifiedResult, true);
5505   }
5506   else
5507     retType = mergeTypes(lbase->getResultType(), rbase->getResultType(), false,
5508                          Unqualified);
5509   if (retType.isNull()) return QualType();
5510 
5511   if (Unqualified)
5512     retType = retType.getUnqualifiedType();
5513 
5514   CanQualType LRetType = getCanonicalType(lbase->getResultType());
5515   CanQualType RRetType = getCanonicalType(rbase->getResultType());
5516   if (Unqualified) {
5517     LRetType = LRetType.getUnqualifiedType();
5518     RRetType = RRetType.getUnqualifiedType();
5519   }
5520 
5521   if (getCanonicalType(retType) != LRetType)
5522     allLTypes = false;
5523   if (getCanonicalType(retType) != RRetType)
5524     allRTypes = false;
5525 
5526   // FIXME: double check this
5527   // FIXME: should we error if lbase->getRegParmAttr() != 0 &&
5528   //                           rbase->getRegParmAttr() != 0 &&
5529   //                           lbase->getRegParmAttr() != rbase->getRegParmAttr()?
5530   FunctionType::ExtInfo lbaseInfo = lbase->getExtInfo();
5531   FunctionType::ExtInfo rbaseInfo = rbase->getExtInfo();
5532 
5533   // Compatible functions must have compatible calling conventions
5534   if (!isSameCallConv(lbaseInfo.getCC(), rbaseInfo.getCC()))
5535     return QualType();
5536 
5537   // Regparm is part of the calling convention.
5538   if (lbaseInfo.getHasRegParm() != rbaseInfo.getHasRegParm())
5539     return QualType();
5540   if (lbaseInfo.getRegParm() != rbaseInfo.getRegParm())
5541     return QualType();
5542 
5543   if (lbaseInfo.getProducesResult() != rbaseInfo.getProducesResult())
5544     return QualType();
5545 
5546   // It's noreturn if either type is.
5547   // FIXME: some uses, e.g. conditional exprs, really want this to be 'both'.
5548   bool NoReturn = lbaseInfo.getNoReturn() || rbaseInfo.getNoReturn();
5549   if (NoReturn != lbaseInfo.getNoReturn())
5550     allLTypes = false;
5551   if (NoReturn != rbaseInfo.getNoReturn())
5552     allRTypes = false;
5553 
5554   FunctionType::ExtInfo einfo = lbaseInfo.withNoReturn(NoReturn);
5555 
5556   if (lproto && rproto) { // two C99 style function prototypes
5557     assert(!lproto->hasExceptionSpec() && !rproto->hasExceptionSpec() &&
5558            "C++ shouldn't be here");
5559     unsigned lproto_nargs = lproto->getNumArgs();
5560     unsigned rproto_nargs = rproto->getNumArgs();
5561 
5562     // Compatible functions must have the same number of arguments
5563     if (lproto_nargs != rproto_nargs)
5564       return QualType();
5565 
5566     // Variadic and non-variadic functions aren't compatible
5567     if (lproto->isVariadic() != rproto->isVariadic())
5568       return QualType();
5569 
5570     if (lproto->getTypeQuals() != rproto->getTypeQuals())
5571       return QualType();
5572 
5573     if (LangOpts.ObjCAutoRefCount &&
5574         !FunctionTypesMatchOnNSConsumedAttrs(rproto, lproto))
5575       return QualType();
5576 
5577     // Check argument compatibility
5578     SmallVector<QualType, 10> types;
5579     for (unsigned i = 0; i < lproto_nargs; i++) {
5580       QualType largtype = lproto->getArgType(i).getUnqualifiedType();
5581       QualType rargtype = rproto->getArgType(i).getUnqualifiedType();
5582       QualType argtype = mergeFunctionArgumentTypes(largtype, rargtype,
5583                                                     OfBlockPointer,
5584                                                     Unqualified);
5585       if (argtype.isNull()) return QualType();
5586 
5587       if (Unqualified)
5588         argtype = argtype.getUnqualifiedType();
5589 
5590       types.push_back(argtype);
5591       if (Unqualified) {
5592         largtype = largtype.getUnqualifiedType();
5593         rargtype = rargtype.getUnqualifiedType();
5594       }
5595 
5596       if (getCanonicalType(argtype) != getCanonicalType(largtype))
5597         allLTypes = false;
5598       if (getCanonicalType(argtype) != getCanonicalType(rargtype))
5599         allRTypes = false;
5600     }
5601 
5602     if (allLTypes) return lhs;
5603     if (allRTypes) return rhs;
5604 
5605     FunctionProtoType::ExtProtoInfo EPI = lproto->getExtProtoInfo();
5606     EPI.ExtInfo = einfo;
5607     return getFunctionType(retType, types.begin(), types.size(), EPI);
5608   }
5609 
5610   if (lproto) allRTypes = false;
5611   if (rproto) allLTypes = false;
5612 
5613   const FunctionProtoType *proto = lproto ? lproto : rproto;
5614   if (proto) {
5615     assert(!proto->hasExceptionSpec() && "C++ shouldn't be here");
5616     if (proto->isVariadic()) return QualType();
5617     // Check that the types are compatible with the types that
5618     // would result from default argument promotions (C99 6.7.5.3p15).
5619     // The only types actually affected are promotable integer
5620     // types and floats, which would be passed as a different
5621     // type depending on whether the prototype is visible.
5622     unsigned proto_nargs = proto->getNumArgs();
5623     for (unsigned i = 0; i < proto_nargs; ++i) {
5624       QualType argTy = proto->getArgType(i);
5625 
5626       // Look at the promotion type of enum types, since that is the type used
5627       // to pass enum values.
5628       if (const EnumType *Enum = argTy->getAs<EnumType>())
5629         argTy = Enum->getDecl()->getPromotionType();
5630 
5631       if (argTy->isPromotableIntegerType() ||
5632           getCanonicalType(argTy).getUnqualifiedType() == FloatTy)
5633         return QualType();
5634     }
5635 
5636     if (allLTypes) return lhs;
5637     if (allRTypes) return rhs;
5638 
5639     FunctionProtoType::ExtProtoInfo EPI = proto->getExtProtoInfo();
5640     EPI.ExtInfo = einfo;
5641     return getFunctionType(retType, proto->arg_type_begin(),
5642                            proto->getNumArgs(), EPI);
5643   }
5644 
5645   if (allLTypes) return lhs;
5646   if (allRTypes) return rhs;
5647   return getFunctionNoProtoType(retType, einfo);
5648 }
5649 
5650 QualType ASTContext::mergeTypes(QualType LHS, QualType RHS,
5651                                 bool OfBlockPointer,
5652                                 bool Unqualified, bool BlockReturnType) {
5653   // C++ [expr]: If an expression initially has the type "reference to T", the
5654   // type is adjusted to "T" prior to any further analysis, the expression
5655   // designates the object or function denoted by the reference, and the
5656   // expression is an lvalue unless the reference is an rvalue reference and
5657   // the expression is a function call (possibly inside parentheses).
5658   assert(!LHS->getAs<ReferenceType>() && "LHS is a reference type?");
5659   assert(!RHS->getAs<ReferenceType>() && "RHS is a reference type?");
5660 
5661   if (Unqualified) {
5662     LHS = LHS.getUnqualifiedType();
5663     RHS = RHS.getUnqualifiedType();
5664   }
5665 
5666   QualType LHSCan = getCanonicalType(LHS),
5667            RHSCan = getCanonicalType(RHS);
5668 
5669   // If two types are identical, they are compatible.
5670   if (LHSCan == RHSCan)
5671     return LHS;
5672 
5673   // If the qualifiers are different, the types aren't compatible... mostly.
5674   Qualifiers LQuals = LHSCan.getLocalQualifiers();
5675   Qualifiers RQuals = RHSCan.getLocalQualifiers();
5676   if (LQuals != RQuals) {
5677     // If any of these qualifiers are different, we have a type
5678     // mismatch.
5679     if (LQuals.getCVRQualifiers() != RQuals.getCVRQualifiers() ||
5680         LQuals.getAddressSpace() != RQuals.getAddressSpace() ||
5681         LQuals.getObjCLifetime() != RQuals.getObjCLifetime())
5682       return QualType();
5683 
5684     // Exactly one GC qualifier difference is allowed: __strong is
5685     // okay if the other type has no GC qualifier but is an Objective
5686     // C object pointer (i.e. implicitly strong by default).  We fix
5687     // this by pretending that the unqualified type was actually
5688     // qualified __strong.
5689     Qualifiers::GC GC_L = LQuals.getObjCGCAttr();
5690     Qualifiers::GC GC_R = RQuals.getObjCGCAttr();
5691     assert((GC_L != GC_R) && "unequal qualifier sets had only equal elements");
5692 
5693     if (GC_L == Qualifiers::Weak || GC_R == Qualifiers::Weak)
5694       return QualType();
5695 
5696     if (GC_L == Qualifiers::Strong && RHSCan->isObjCObjectPointerType()) {
5697       return mergeTypes(LHS, getObjCGCQualType(RHS, Qualifiers::Strong));
5698     }
5699     if (GC_R == Qualifiers::Strong && LHSCan->isObjCObjectPointerType()) {
5700       return mergeTypes(getObjCGCQualType(LHS, Qualifiers::Strong), RHS);
5701     }
5702     return QualType();
5703   }
5704 
5705   // Okay, qualifiers are equal.
5706 
5707   Type::TypeClass LHSClass = LHSCan->getTypeClass();
5708   Type::TypeClass RHSClass = RHSCan->getTypeClass();
5709 
5710   // We want to consider the two function types to be the same for these
5711   // comparisons, just force one to the other.
5712   if (LHSClass == Type::FunctionProto) LHSClass = Type::FunctionNoProto;
5713   if (RHSClass == Type::FunctionProto) RHSClass = Type::FunctionNoProto;
5714 
5715   // Same as above for arrays
5716   if (LHSClass == Type::VariableArray || LHSClass == Type::IncompleteArray)
5717     LHSClass = Type::ConstantArray;
5718   if (RHSClass == Type::VariableArray || RHSClass == Type::IncompleteArray)
5719     RHSClass = Type::ConstantArray;
5720 
5721   // ObjCInterfaces are just specialized ObjCObjects.
5722   if (LHSClass == Type::ObjCInterface) LHSClass = Type::ObjCObject;
5723   if (RHSClass == Type::ObjCInterface) RHSClass = Type::ObjCObject;
5724 
5725   // Canonicalize ExtVector -> Vector.
5726   if (LHSClass == Type::ExtVector) LHSClass = Type::Vector;
5727   if (RHSClass == Type::ExtVector) RHSClass = Type::Vector;
5728 
5729   // If the canonical type classes don't match.
5730   if (LHSClass != RHSClass) {
5731     // C99 6.7.2.2p4: Each enumerated type shall be compatible with char,
5732     // a signed integer type, or an unsigned integer type.
5733     // Compatibility is based on the underlying type, not the promotion
5734     // type.
5735     if (const EnumType* ETy = LHS->getAs<EnumType>()) {
5736       if (ETy->getDecl()->getIntegerType() == RHSCan.getUnqualifiedType())
5737         return RHS;
5738     }
5739     if (const EnumType* ETy = RHS->getAs<EnumType>()) {
5740       if (ETy->getDecl()->getIntegerType() == LHSCan.getUnqualifiedType())
5741         return LHS;
5742     }
5743 
5744     return QualType();
5745   }
5746 
5747   // The canonical type classes match.
5748   switch (LHSClass) {
5749 #define TYPE(Class, Base)
5750 #define ABSTRACT_TYPE(Class, Base)
5751 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
5752 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
5753 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
5754 #include "clang/AST/TypeNodes.def"
5755     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
5756 
5757   case Type::LValueReference:
5758   case Type::RValueReference:
5759   case Type::MemberPointer:
5760     llvm_unreachable("C++ should never be in mergeTypes");
5761 
5762   case Type::ObjCInterface:
5763   case Type::IncompleteArray:
5764   case Type::VariableArray:
5765   case Type::FunctionProto:
5766   case Type::ExtVector:
5767     llvm_unreachable("Types are eliminated above");
5768 
5769   case Type::Pointer:
5770   {
5771     // Merge two pointer types, while trying to preserve typedef info
5772     QualType LHSPointee = LHS->getAs<PointerType>()->getPointeeType();
5773     QualType RHSPointee = RHS->getAs<PointerType>()->getPointeeType();
5774     if (Unqualified) {
5775       LHSPointee = LHSPointee.getUnqualifiedType();
5776       RHSPointee = RHSPointee.getUnqualifiedType();
5777     }
5778     QualType ResultType = mergeTypes(LHSPointee, RHSPointee, false,
5779                                      Unqualified);
5780     if (ResultType.isNull()) return QualType();
5781     if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType))
5782       return LHS;
5783     if (getCanonicalType(RHSPointee) == getCanonicalType(ResultType))
5784       return RHS;
5785     return getPointerType(ResultType);
5786   }
5787   case Type::BlockPointer:
5788   {
5789     // Merge two block pointer types, while trying to preserve typedef info
5790     QualType LHSPointee = LHS->getAs<BlockPointerType>()->getPointeeType();
5791     QualType RHSPointee = RHS->getAs<BlockPointerType>()->getPointeeType();
5792     if (Unqualified) {
5793       LHSPointee = LHSPointee.getUnqualifiedType();
5794       RHSPointee = RHSPointee.getUnqualifiedType();
5795     }
5796     QualType ResultType = mergeTypes(LHSPointee, RHSPointee, OfBlockPointer,
5797                                      Unqualified);
5798     if (ResultType.isNull()) return QualType();
5799     if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType))
5800       return LHS;
5801     if (getCanonicalType(RHSPointee) == getCanonicalType(ResultType))
5802       return RHS;
5803     return getBlockPointerType(ResultType);
5804   }
5805   case Type::ConstantArray:
5806   {
5807     const ConstantArrayType* LCAT = getAsConstantArrayType(LHS);
5808     const ConstantArrayType* RCAT = getAsConstantArrayType(RHS);
5809     if (LCAT && RCAT && RCAT->getSize() != LCAT->getSize())
5810       return QualType();
5811 
5812     QualType LHSElem = getAsArrayType(LHS)->getElementType();
5813     QualType RHSElem = getAsArrayType(RHS)->getElementType();
5814     if (Unqualified) {
5815       LHSElem = LHSElem.getUnqualifiedType();
5816       RHSElem = RHSElem.getUnqualifiedType();
5817     }
5818 
5819     QualType ResultType = mergeTypes(LHSElem, RHSElem, false, Unqualified);
5820     if (ResultType.isNull()) return QualType();
5821     if (LCAT && getCanonicalType(LHSElem) == getCanonicalType(ResultType))
5822       return LHS;
5823     if (RCAT && getCanonicalType(RHSElem) == getCanonicalType(ResultType))
5824       return RHS;
5825     if (LCAT) return getConstantArrayType(ResultType, LCAT->getSize(),
5826                                           ArrayType::ArraySizeModifier(), 0);
5827     if (RCAT) return getConstantArrayType(ResultType, RCAT->getSize(),
5828                                           ArrayType::ArraySizeModifier(), 0);
5829     const VariableArrayType* LVAT = getAsVariableArrayType(LHS);
5830     const VariableArrayType* RVAT = getAsVariableArrayType(RHS);
5831     if (LVAT && getCanonicalType(LHSElem) == getCanonicalType(ResultType))
5832       return LHS;
5833     if (RVAT && getCanonicalType(RHSElem) == getCanonicalType(ResultType))
5834       return RHS;
5835     if (LVAT) {
5836       // FIXME: This isn't correct! But tricky to implement because
5837       // the array's size has to be the size of LHS, but the type
5838       // has to be different.
5839       return LHS;
5840     }
5841     if (RVAT) {
5842       // FIXME: This isn't correct! But tricky to implement because
5843       // the array's size has to be the size of RHS, but the type
5844       // has to be different.
5845       return RHS;
5846     }
5847     if (getCanonicalType(LHSElem) == getCanonicalType(ResultType)) return LHS;
5848     if (getCanonicalType(RHSElem) == getCanonicalType(ResultType)) return RHS;
5849     return getIncompleteArrayType(ResultType,
5850                                   ArrayType::ArraySizeModifier(), 0);
5851   }
5852   case Type::FunctionNoProto:
5853     return mergeFunctionTypes(LHS, RHS, OfBlockPointer, Unqualified);
5854   case Type::Record:
5855   case Type::Enum:
5856     return QualType();
5857   case Type::Builtin:
5858     // Only exactly equal builtin types are compatible, which is tested above.
5859     return QualType();
5860   case Type::Complex:
5861     // Distinct complex types are incompatible.
5862     return QualType();
5863   case Type::Vector:
5864     // FIXME: The merged type should be an ExtVector!
5865     if (areCompatVectorTypes(LHSCan->getAs<VectorType>(),
5866                              RHSCan->getAs<VectorType>()))
5867       return LHS;
5868     return QualType();
5869   case Type::ObjCObject: {
5870     // Check if the types are assignment compatible.
5871     // FIXME: This should be type compatibility, e.g. whether
5872     // "LHS x; RHS x;" at global scope is legal.
5873     const ObjCObjectType* LHSIface = LHS->getAs<ObjCObjectType>();
5874     const ObjCObjectType* RHSIface = RHS->getAs<ObjCObjectType>();
5875     if (canAssignObjCInterfaces(LHSIface, RHSIface))
5876       return LHS;
5877 
5878     return QualType();
5879   }
5880   case Type::ObjCObjectPointer: {
5881     if (OfBlockPointer) {
5882       if (canAssignObjCInterfacesInBlockPointer(
5883                                           LHS->getAs<ObjCObjectPointerType>(),
5884                                           RHS->getAs<ObjCObjectPointerType>(),
5885                                           BlockReturnType))
5886       return LHS;
5887       return QualType();
5888     }
5889     if (canAssignObjCInterfaces(LHS->getAs<ObjCObjectPointerType>(),
5890                                 RHS->getAs<ObjCObjectPointerType>()))
5891       return LHS;
5892 
5893     return QualType();
5894     }
5895   }
5896 
5897   return QualType();
5898 }
5899 
5900 bool ASTContext::FunctionTypesMatchOnNSConsumedAttrs(
5901                    const FunctionProtoType *FromFunctionType,
5902                    const FunctionProtoType *ToFunctionType) {
5903   if (FromFunctionType->hasAnyConsumedArgs() !=
5904       ToFunctionType->hasAnyConsumedArgs())
5905     return false;
5906   FunctionProtoType::ExtProtoInfo FromEPI =
5907     FromFunctionType->getExtProtoInfo();
5908   FunctionProtoType::ExtProtoInfo ToEPI =
5909     ToFunctionType->getExtProtoInfo();
5910   if (FromEPI.ConsumedArguments && ToEPI.ConsumedArguments)
5911     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
5912          ArgIdx != NumArgs; ++ArgIdx)  {
5913       if (FromEPI.ConsumedArguments[ArgIdx] !=
5914           ToEPI.ConsumedArguments[ArgIdx])
5915         return false;
5916     }
5917   return true;
5918 }
5919 
5920 /// mergeObjCGCQualifiers - This routine merges ObjC's GC attribute of 'LHS' and
5921 /// 'RHS' attributes and returns the merged version; including for function
5922 /// return types.
5923 QualType ASTContext::mergeObjCGCQualifiers(QualType LHS, QualType RHS) {
5924   QualType LHSCan = getCanonicalType(LHS),
5925   RHSCan = getCanonicalType(RHS);
5926   // If two types are identical, they are compatible.
5927   if (LHSCan == RHSCan)
5928     return LHS;
5929   if (RHSCan->isFunctionType()) {
5930     if (!LHSCan->isFunctionType())
5931       return QualType();
5932     QualType OldReturnType =
5933       cast<FunctionType>(RHSCan.getTypePtr())->getResultType();
5934     QualType NewReturnType =
5935       cast<FunctionType>(LHSCan.getTypePtr())->getResultType();
5936     QualType ResReturnType =
5937       mergeObjCGCQualifiers(NewReturnType, OldReturnType);
5938     if (ResReturnType.isNull())
5939       return QualType();
5940     if (ResReturnType == NewReturnType || ResReturnType == OldReturnType) {
5941       // id foo(); ... __strong id foo(); or: __strong id foo(); ... id foo();
5942       // In either case, use OldReturnType to build the new function type.
5943       const FunctionType *F = LHS->getAs<FunctionType>();
5944       if (const FunctionProtoType *FPT = cast<FunctionProtoType>(F)) {
5945         FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
5946         EPI.ExtInfo = getFunctionExtInfo(LHS);
5947         QualType ResultType
5948           = getFunctionType(OldReturnType, FPT->arg_type_begin(),
5949                             FPT->getNumArgs(), EPI);
5950         return ResultType;
5951       }
5952     }
5953     return QualType();
5954   }
5955 
5956   // If the qualifiers are different, the types can still be merged.
5957   Qualifiers LQuals = LHSCan.getLocalQualifiers();
5958   Qualifiers RQuals = RHSCan.getLocalQualifiers();
5959   if (LQuals != RQuals) {
5960     // If any of these qualifiers are different, we have a type mismatch.
5961     if (LQuals.getCVRQualifiers() != RQuals.getCVRQualifiers() ||
5962         LQuals.getAddressSpace() != RQuals.getAddressSpace())
5963       return QualType();
5964 
5965     // Exactly one GC qualifier difference is allowed: __strong is
5966     // okay if the other type has no GC qualifier but is an Objective
5967     // C object pointer (i.e. implicitly strong by default).  We fix
5968     // this by pretending that the unqualified type was actually
5969     // qualified __strong.
5970     Qualifiers::GC GC_L = LQuals.getObjCGCAttr();
5971     Qualifiers::GC GC_R = RQuals.getObjCGCAttr();
5972     assert((GC_L != GC_R) && "unequal qualifier sets had only equal elements");
5973 
5974     if (GC_L == Qualifiers::Weak || GC_R == Qualifiers::Weak)
5975       return QualType();
5976 
5977     if (GC_L == Qualifiers::Strong)
5978       return LHS;
5979     if (GC_R == Qualifiers::Strong)
5980       return RHS;
5981     return QualType();
5982   }
5983 
5984   if (LHSCan->isObjCObjectPointerType() && RHSCan->isObjCObjectPointerType()) {
5985     QualType LHSBaseQT = LHS->getAs<ObjCObjectPointerType>()->getPointeeType();
5986     QualType RHSBaseQT = RHS->getAs<ObjCObjectPointerType>()->getPointeeType();
5987     QualType ResQT = mergeObjCGCQualifiers(LHSBaseQT, RHSBaseQT);
5988     if (ResQT == LHSBaseQT)
5989       return LHS;
5990     if (ResQT == RHSBaseQT)
5991       return RHS;
5992   }
5993   return QualType();
5994 }
5995 
5996 //===----------------------------------------------------------------------===//
5997 //                         Integer Predicates
5998 //===----------------------------------------------------------------------===//
5999 
6000 unsigned ASTContext::getIntWidth(QualType T) const {
6001   if (const EnumType *ET = dyn_cast<EnumType>(T))
6002     T = ET->getDecl()->getIntegerType();
6003   if (T->isBooleanType())
6004     return 1;
6005   // For builtin types, just use the standard type sizing method
6006   return (unsigned)getTypeSize(T);
6007 }
6008 
6009 QualType ASTContext::getCorrespondingUnsignedType(QualType T) {
6010   assert(T->hasSignedIntegerRepresentation() && "Unexpected type");
6011 
6012   // Turn <4 x signed int> -> <4 x unsigned int>
6013   if (const VectorType *VTy = T->getAs<VectorType>())
6014     return getVectorType(getCorrespondingUnsignedType(VTy->getElementType()),
6015                          VTy->getNumElements(), VTy->getVectorKind());
6016 
6017   // For enums, we return the unsigned version of the base type.
6018   if (const EnumType *ETy = T->getAs<EnumType>())
6019     T = ETy->getDecl()->getIntegerType();
6020 
6021   const BuiltinType *BTy = T->getAs<BuiltinType>();
6022   assert(BTy && "Unexpected signed integer type");
6023   switch (BTy->getKind()) {
6024   case BuiltinType::Char_S:
6025   case BuiltinType::SChar:
6026     return UnsignedCharTy;
6027   case BuiltinType::Short:
6028     return UnsignedShortTy;
6029   case BuiltinType::Int:
6030     return UnsignedIntTy;
6031   case BuiltinType::Long:
6032     return UnsignedLongTy;
6033   case BuiltinType::LongLong:
6034     return UnsignedLongLongTy;
6035   case BuiltinType::Int128:
6036     return UnsignedInt128Ty;
6037   default:
6038     llvm_unreachable("Unexpected signed integer type");
6039   }
6040 }
6041 
6042 ASTMutationListener::~ASTMutationListener() { }
6043 
6044 
6045 //===----------------------------------------------------------------------===//
6046 //                          Builtin Type Computation
6047 //===----------------------------------------------------------------------===//
6048 
6049 /// DecodeTypeFromStr - This decodes one type descriptor from Str, advancing the
6050 /// pointer over the consumed characters.  This returns the resultant type.  If
6051 /// AllowTypeModifiers is false then modifier like * are not parsed, just basic
6052 /// types.  This allows "v2i*" to be parsed as a pointer to a v2i instead of
6053 /// a vector of "i*".
6054 ///
6055 /// RequiresICE is filled in on return to indicate whether the value is required
6056 /// to be an Integer Constant Expression.
6057 static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context,
6058                                   ASTContext::GetBuiltinTypeError &Error,
6059                                   bool &RequiresICE,
6060                                   bool AllowTypeModifiers) {
6061   // Modifiers.
6062   int HowLong = 0;
6063   bool Signed = false, Unsigned = false;
6064   RequiresICE = false;
6065 
6066   // Read the prefixed modifiers first.
6067   bool Done = false;
6068   while (!Done) {
6069     switch (*Str++) {
6070     default: Done = true; --Str; break;
6071     case 'I':
6072       RequiresICE = true;
6073       break;
6074     case 'S':
6075       assert(!Unsigned && "Can't use both 'S' and 'U' modifiers!");
6076       assert(!Signed && "Can't use 'S' modifier multiple times!");
6077       Signed = true;
6078       break;
6079     case 'U':
6080       assert(!Signed && "Can't use both 'S' and 'U' modifiers!");
6081       assert(!Unsigned && "Can't use 'S' modifier multiple times!");
6082       Unsigned = true;
6083       break;
6084     case 'L':
6085       assert(HowLong <= 2 && "Can't have LLLL modifier");
6086       ++HowLong;
6087       break;
6088     }
6089   }
6090 
6091   QualType Type;
6092 
6093   // Read the base type.
6094   switch (*Str++) {
6095   default: llvm_unreachable("Unknown builtin type letter!");
6096   case 'v':
6097     assert(HowLong == 0 && !Signed && !Unsigned &&
6098            "Bad modifiers used with 'v'!");
6099     Type = Context.VoidTy;
6100     break;
6101   case 'f':
6102     assert(HowLong == 0 && !Signed && !Unsigned &&
6103            "Bad modifiers used with 'f'!");
6104     Type = Context.FloatTy;
6105     break;
6106   case 'd':
6107     assert(HowLong < 2 && !Signed && !Unsigned &&
6108            "Bad modifiers used with 'd'!");
6109     if (HowLong)
6110       Type = Context.LongDoubleTy;
6111     else
6112       Type = Context.DoubleTy;
6113     break;
6114   case 's':
6115     assert(HowLong == 0 && "Bad modifiers used with 's'!");
6116     if (Unsigned)
6117       Type = Context.UnsignedShortTy;
6118     else
6119       Type = Context.ShortTy;
6120     break;
6121   case 'i':
6122     if (HowLong == 3)
6123       Type = Unsigned ? Context.UnsignedInt128Ty : Context.Int128Ty;
6124     else if (HowLong == 2)
6125       Type = Unsigned ? Context.UnsignedLongLongTy : Context.LongLongTy;
6126     else if (HowLong == 1)
6127       Type = Unsigned ? Context.UnsignedLongTy : Context.LongTy;
6128     else
6129       Type = Unsigned ? Context.UnsignedIntTy : Context.IntTy;
6130     break;
6131   case 'c':
6132     assert(HowLong == 0 && "Bad modifiers used with 'c'!");
6133     if (Signed)
6134       Type = Context.SignedCharTy;
6135     else if (Unsigned)
6136       Type = Context.UnsignedCharTy;
6137     else
6138       Type = Context.CharTy;
6139     break;
6140   case 'b': // boolean
6141     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'b'!");
6142     Type = Context.BoolTy;
6143     break;
6144   case 'z':  // size_t.
6145     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'z'!");
6146     Type = Context.getSizeType();
6147     break;
6148   case 'F':
6149     Type = Context.getCFConstantStringType();
6150     break;
6151   case 'G':
6152     Type = Context.getObjCIdType();
6153     break;
6154   case 'H':
6155     Type = Context.getObjCSelType();
6156     break;
6157   case 'a':
6158     Type = Context.getBuiltinVaListType();
6159     assert(!Type.isNull() && "builtin va list type not initialized!");
6160     break;
6161   case 'A':
6162     // This is a "reference" to a va_list; however, what exactly
6163     // this means depends on how va_list is defined. There are two
6164     // different kinds of va_list: ones passed by value, and ones
6165     // passed by reference.  An example of a by-value va_list is
6166     // x86, where va_list is a char*. An example of by-ref va_list
6167     // is x86-64, where va_list is a __va_list_tag[1]. For x86,
6168     // we want this argument to be a char*&; for x86-64, we want
6169     // it to be a __va_list_tag*.
6170     Type = Context.getBuiltinVaListType();
6171     assert(!Type.isNull() && "builtin va list type not initialized!");
6172     if (Type->isArrayType())
6173       Type = Context.getArrayDecayedType(Type);
6174     else
6175       Type = Context.getLValueReferenceType(Type);
6176     break;
6177   case 'V': {
6178     char *End;
6179     unsigned NumElements = strtoul(Str, &End, 10);
6180     assert(End != Str && "Missing vector size");
6181     Str = End;
6182 
6183     QualType ElementType = DecodeTypeFromStr(Str, Context, Error,
6184                                              RequiresICE, false);
6185     assert(!RequiresICE && "Can't require vector ICE");
6186 
6187     // TODO: No way to make AltiVec vectors in builtins yet.
6188     Type = Context.getVectorType(ElementType, NumElements,
6189                                  VectorType::GenericVector);
6190     break;
6191   }
6192   case 'X': {
6193     QualType ElementType = DecodeTypeFromStr(Str, Context, Error, RequiresICE,
6194                                              false);
6195     assert(!RequiresICE && "Can't require complex ICE");
6196     Type = Context.getComplexType(ElementType);
6197     break;
6198   }
6199   case 'Y' : {
6200     Type = Context.getPointerDiffType();
6201     break;
6202   }
6203   case 'P':
6204     Type = Context.getFILEType();
6205     if (Type.isNull()) {
6206       Error = ASTContext::GE_Missing_stdio;
6207       return QualType();
6208     }
6209     break;
6210   case 'J':
6211     if (Signed)
6212       Type = Context.getsigjmp_bufType();
6213     else
6214       Type = Context.getjmp_bufType();
6215 
6216     if (Type.isNull()) {
6217       Error = ASTContext::GE_Missing_setjmp;
6218       return QualType();
6219     }
6220     break;
6221   }
6222 
6223   // If there are modifiers and if we're allowed to parse them, go for it.
6224   Done = !AllowTypeModifiers;
6225   while (!Done) {
6226     switch (char c = *Str++) {
6227     default: Done = true; --Str; break;
6228     case '*':
6229     case '&': {
6230       // Both pointers and references can have their pointee types
6231       // qualified with an address space.
6232       char *End;
6233       unsigned AddrSpace = strtoul(Str, &End, 10);
6234       if (End != Str && AddrSpace != 0) {
6235         Type = Context.getAddrSpaceQualType(Type, AddrSpace);
6236         Str = End;
6237       }
6238       if (c == '*')
6239         Type = Context.getPointerType(Type);
6240       else
6241         Type = Context.getLValueReferenceType(Type);
6242       break;
6243     }
6244     // FIXME: There's no way to have a built-in with an rvalue ref arg.
6245     case 'C':
6246       Type = Type.withConst();
6247       break;
6248     case 'D':
6249       Type = Context.getVolatileType(Type);
6250       break;
6251     }
6252   }
6253 
6254   assert((!RequiresICE || Type->isIntegralOrEnumerationType()) &&
6255          "Integer constant 'I' type must be an integer");
6256 
6257   return Type;
6258 }
6259 
6260 /// GetBuiltinType - Return the type for the specified builtin.
6261 QualType ASTContext::GetBuiltinType(unsigned Id,
6262                                     GetBuiltinTypeError &Error,
6263                                     unsigned *IntegerConstantArgs) const {
6264   const char *TypeStr = BuiltinInfo.GetTypeString(Id);
6265 
6266   SmallVector<QualType, 8> ArgTypes;
6267 
6268   bool RequiresICE = false;
6269   Error = GE_None;
6270   QualType ResType = DecodeTypeFromStr(TypeStr, *this, Error,
6271                                        RequiresICE, true);
6272   if (Error != GE_None)
6273     return QualType();
6274 
6275   assert(!RequiresICE && "Result of intrinsic cannot be required to be an ICE");
6276 
6277   while (TypeStr[0] && TypeStr[0] != '.') {
6278     QualType Ty = DecodeTypeFromStr(TypeStr, *this, Error, RequiresICE, true);
6279     if (Error != GE_None)
6280       return QualType();
6281 
6282     // If this argument is required to be an IntegerConstantExpression and the
6283     // caller cares, fill in the bitmask we return.
6284     if (RequiresICE && IntegerConstantArgs)
6285       *IntegerConstantArgs |= 1 << ArgTypes.size();
6286 
6287     // Do array -> pointer decay.  The builtin should use the decayed type.
6288     if (Ty->isArrayType())
6289       Ty = getArrayDecayedType(Ty);
6290 
6291     ArgTypes.push_back(Ty);
6292   }
6293 
6294   assert((TypeStr[0] != '.' || TypeStr[1] == 0) &&
6295          "'.' should only occur at end of builtin type list!");
6296 
6297   FunctionType::ExtInfo EI;
6298   if (BuiltinInfo.isNoReturn(Id)) EI = EI.withNoReturn(true);
6299 
6300   bool Variadic = (TypeStr[0] == '.');
6301 
6302   // We really shouldn't be making a no-proto type here, especially in C++.
6303   if (ArgTypes.empty() && Variadic)
6304     return getFunctionNoProtoType(ResType, EI);
6305 
6306   FunctionProtoType::ExtProtoInfo EPI;
6307   EPI.ExtInfo = EI;
6308   EPI.Variadic = Variadic;
6309 
6310   return getFunctionType(ResType, ArgTypes.data(), ArgTypes.size(), EPI);
6311 }
6312 
6313 GVALinkage ASTContext::GetGVALinkageForFunction(const FunctionDecl *FD) {
6314   GVALinkage External = GVA_StrongExternal;
6315 
6316   Linkage L = FD->getLinkage();
6317   switch (L) {
6318   case NoLinkage:
6319   case InternalLinkage:
6320   case UniqueExternalLinkage:
6321     return GVA_Internal;
6322 
6323   case ExternalLinkage:
6324     switch (FD->getTemplateSpecializationKind()) {
6325     case TSK_Undeclared:
6326     case TSK_ExplicitSpecialization:
6327       External = GVA_StrongExternal;
6328       break;
6329 
6330     case TSK_ExplicitInstantiationDefinition:
6331       return GVA_ExplicitTemplateInstantiation;
6332 
6333     case TSK_ExplicitInstantiationDeclaration:
6334     case TSK_ImplicitInstantiation:
6335       External = GVA_TemplateInstantiation;
6336       break;
6337     }
6338   }
6339 
6340   if (!FD->isInlined())
6341     return External;
6342 
6343   if (!getLangOptions().CPlusPlus || FD->hasAttr<GNUInlineAttr>()) {
6344     // GNU or C99 inline semantics. Determine whether this symbol should be
6345     // externally visible.
6346     if (FD->isInlineDefinitionExternallyVisible())
6347       return External;
6348 
6349     // C99 inline semantics, where the symbol is not externally visible.
6350     return GVA_C99Inline;
6351   }
6352 
6353   // C++0x [temp.explicit]p9:
6354   //   [ Note: The intent is that an inline function that is the subject of
6355   //   an explicit instantiation declaration will still be implicitly
6356   //   instantiated when used so that the body can be considered for
6357   //   inlining, but that no out-of-line copy of the inline function would be
6358   //   generated in the translation unit. -- end note ]
6359   if (FD->getTemplateSpecializationKind()
6360                                        == TSK_ExplicitInstantiationDeclaration)
6361     return GVA_C99Inline;
6362 
6363   return GVA_CXXInline;
6364 }
6365 
6366 GVALinkage ASTContext::GetGVALinkageForVariable(const VarDecl *VD) {
6367   // If this is a static data member, compute the kind of template
6368   // specialization. Otherwise, this variable is not part of a
6369   // template.
6370   TemplateSpecializationKind TSK = TSK_Undeclared;
6371   if (VD->isStaticDataMember())
6372     TSK = VD->getTemplateSpecializationKind();
6373 
6374   Linkage L = VD->getLinkage();
6375   if (L == ExternalLinkage && getLangOptions().CPlusPlus &&
6376       VD->getType()->getLinkage() == UniqueExternalLinkage)
6377     L = UniqueExternalLinkage;
6378 
6379   switch (L) {
6380   case NoLinkage:
6381   case InternalLinkage:
6382   case UniqueExternalLinkage:
6383     return GVA_Internal;
6384 
6385   case ExternalLinkage:
6386     switch (TSK) {
6387     case TSK_Undeclared:
6388     case TSK_ExplicitSpecialization:
6389       return GVA_StrongExternal;
6390 
6391     case TSK_ExplicitInstantiationDeclaration:
6392       llvm_unreachable("Variable should not be instantiated");
6393       // Fall through to treat this like any other instantiation.
6394 
6395     case TSK_ExplicitInstantiationDefinition:
6396       return GVA_ExplicitTemplateInstantiation;
6397 
6398     case TSK_ImplicitInstantiation:
6399       return GVA_TemplateInstantiation;
6400     }
6401   }
6402 
6403   return GVA_StrongExternal;
6404 }
6405 
6406 bool ASTContext::DeclMustBeEmitted(const Decl *D) {
6407   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
6408     if (!VD->isFileVarDecl())
6409       return false;
6410   } else if (!isa<FunctionDecl>(D))
6411     return false;
6412 
6413   // Weak references don't produce any output by themselves.
6414   if (D->hasAttr<WeakRefAttr>())
6415     return false;
6416 
6417   // Aliases and used decls are required.
6418   if (D->hasAttr<AliasAttr>() || D->hasAttr<UsedAttr>())
6419     return true;
6420 
6421   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
6422     // Forward declarations aren't required.
6423     if (!FD->doesThisDeclarationHaveABody())
6424       return FD->doesDeclarationForceExternallyVisibleDefinition();
6425 
6426     // Constructors and destructors are required.
6427     if (FD->hasAttr<ConstructorAttr>() || FD->hasAttr<DestructorAttr>())
6428       return true;
6429 
6430     // The key function for a class is required.
6431     if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
6432       const CXXRecordDecl *RD = MD->getParent();
6433       if (MD->isOutOfLine() && RD->isDynamicClass()) {
6434         const CXXMethodDecl *KeyFunc = getKeyFunction(RD);
6435         if (KeyFunc && KeyFunc->getCanonicalDecl() == MD->getCanonicalDecl())
6436           return true;
6437       }
6438     }
6439 
6440     GVALinkage Linkage = GetGVALinkageForFunction(FD);
6441 
6442     // static, static inline, always_inline, and extern inline functions can
6443     // always be deferred.  Normal inline functions can be deferred in C99/C++.
6444     // Implicit template instantiations can also be deferred in C++.
6445     if (Linkage == GVA_Internal  || Linkage == GVA_C99Inline ||
6446         Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation)
6447       return false;
6448     return true;
6449   }
6450 
6451   const VarDecl *VD = cast<VarDecl>(D);
6452   assert(VD->isFileVarDecl() && "Expected file scoped var");
6453 
6454   if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly)
6455     return false;
6456 
6457   // Structs that have non-trivial constructors or destructors are required.
6458 
6459   // FIXME: Handle references.
6460   // FIXME: Be more selective about which constructors we care about.
6461   if (const RecordType *RT = VD->getType()->getAs<RecordType>()) {
6462     if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl())) {
6463       if (RD->hasDefinition() && !(RD->hasTrivialDefaultConstructor() &&
6464                                    RD->hasTrivialCopyConstructor() &&
6465                                    RD->hasTrivialMoveConstructor() &&
6466                                    RD->hasTrivialDestructor()))
6467         return true;
6468     }
6469   }
6470 
6471   GVALinkage L = GetGVALinkageForVariable(VD);
6472   if (L == GVA_Internal || L == GVA_TemplateInstantiation) {
6473     if (!(VD->getInit() && VD->getInit()->HasSideEffects(*this)))
6474       return false;
6475   }
6476 
6477   return true;
6478 }
6479 
6480 CallingConv ASTContext::getDefaultMethodCallConv() {
6481   // Pass through to the C++ ABI object
6482   return ABI->getDefaultMethodCallConv();
6483 }
6484 
6485 bool ASTContext::isNearlyEmpty(const CXXRecordDecl *RD) const {
6486   // Pass through to the C++ ABI object
6487   return ABI->isNearlyEmpty(RD);
6488 }
6489 
6490 MangleContext *ASTContext::createMangleContext() {
6491   switch (Target->getCXXABI()) {
6492   case CXXABI_ARM:
6493   case CXXABI_Itanium:
6494     return createItaniumMangleContext(*this, getDiagnostics());
6495   case CXXABI_Microsoft:
6496     return createMicrosoftMangleContext(*this, getDiagnostics());
6497   }
6498   llvm_unreachable("Unsupported ABI");
6499 }
6500 
6501 CXXABI::~CXXABI() {}
6502 
6503 size_t ASTContext::getSideTableAllocatedMemory() const {
6504   return ASTRecordLayouts.getMemorySize()
6505     + llvm::capacity_in_bytes(ObjCLayouts)
6506     + llvm::capacity_in_bytes(KeyFunctions)
6507     + llvm::capacity_in_bytes(ObjCImpls)
6508     + llvm::capacity_in_bytes(BlockVarCopyInits)
6509     + llvm::capacity_in_bytes(DeclAttrs)
6510     + llvm::capacity_in_bytes(InstantiatedFromStaticDataMember)
6511     + llvm::capacity_in_bytes(InstantiatedFromUsingDecl)
6512     + llvm::capacity_in_bytes(InstantiatedFromUsingShadowDecl)
6513     + llvm::capacity_in_bytes(InstantiatedFromUnnamedFieldDecl)
6514     + llvm::capacity_in_bytes(OverriddenMethods)
6515     + llvm::capacity_in_bytes(Types)
6516     + llvm::capacity_in_bytes(VariableArrayTypes)
6517     + llvm::capacity_in_bytes(ClassScopeSpecializationPattern);
6518 }
6519