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