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