Home | History | Annotate | Download | only in CodeGen
      1 //===------- ItaniumCXXABI.cpp - Emit LLVM Code from ASTs for a Module ----===//
      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 provides C++ code generation targeting the Itanium C++ ABI.  The class
     11 // in this file generates structures that follow the Itanium C++ ABI, which is
     12 // documented at:
     13 //  http://www.codesourcery.com/public/cxx-abi/abi.html
     14 //  http://www.codesourcery.com/public/cxx-abi/abi-eh.html
     15 //
     16 // It also supports the closely-related ARM ABI, documented at:
     17 // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf
     18 //
     19 //===----------------------------------------------------------------------===//
     20 
     21 #include "CGCXXABI.h"
     22 #include "CGRecordLayout.h"
     23 #include "CGVTables.h"
     24 #include "CodeGenFunction.h"
     25 #include "CodeGenModule.h"
     26 #include "clang/AST/Mangle.h"
     27 #include "clang/AST/Type.h"
     28 #include "llvm/IR/CallSite.h"
     29 #include "llvm/IR/DataLayout.h"
     30 #include "llvm/IR/Intrinsics.h"
     31 #include "llvm/IR/Value.h"
     32 
     33 using namespace clang;
     34 using namespace CodeGen;
     35 
     36 namespace {
     37 class ItaniumCXXABI : public CodeGen::CGCXXABI {
     38   /// VTables - All the vtables which have been defined.
     39   llvm::DenseMap<const CXXRecordDecl *, llvm::GlobalVariable *> VTables;
     40 
     41 protected:
     42   bool UseARMMethodPtrABI;
     43   bool UseARMGuardVarABI;
     44 
     45   ItaniumMangleContext &getMangleContext() {
     46     return cast<ItaniumMangleContext>(CodeGen::CGCXXABI::getMangleContext());
     47   }
     48 
     49 public:
     50   ItaniumCXXABI(CodeGen::CodeGenModule &CGM,
     51                 bool UseARMMethodPtrABI = false,
     52                 bool UseARMGuardVarABI = false) :
     53     CGCXXABI(CGM), UseARMMethodPtrABI(UseARMMethodPtrABI),
     54     UseARMGuardVarABI(UseARMGuardVarABI) { }
     55 
     56   bool classifyReturnType(CGFunctionInfo &FI) const override;
     57 
     58   RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const override {
     59     // Structures with either a non-trivial destructor or a non-trivial
     60     // copy constructor are always indirect.
     61     // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
     62     // special members.
     63     if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor())
     64       return RAA_Indirect;
     65     return RAA_Default;
     66   }
     67 
     68   bool isZeroInitializable(const MemberPointerType *MPT) override;
     69 
     70   llvm::Type *ConvertMemberPointerType(const MemberPointerType *MPT) override;
     71 
     72   llvm::Value *
     73     EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
     74                                     const Expr *E,
     75                                     llvm::Value *&This,
     76                                     llvm::Value *MemFnPtr,
     77                                     const MemberPointerType *MPT) override;
     78 
     79   llvm::Value *
     80     EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
     81                                  llvm::Value *Base,
     82                                  llvm::Value *MemPtr,
     83                                  const MemberPointerType *MPT) override;
     84 
     85   llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
     86                                            const CastExpr *E,
     87                                            llvm::Value *Src) override;
     88   llvm::Constant *EmitMemberPointerConversion(const CastExpr *E,
     89                                               llvm::Constant *Src) override;
     90 
     91   llvm::Constant *EmitNullMemberPointer(const MemberPointerType *MPT) override;
     92 
     93   llvm::Constant *EmitMemberPointer(const CXXMethodDecl *MD) override;
     94   llvm::Constant *EmitMemberDataPointer(const MemberPointerType *MPT,
     95                                         CharUnits offset) override;
     96   llvm::Constant *EmitMemberPointer(const APValue &MP, QualType MPT) override;
     97   llvm::Constant *BuildMemberPointer(const CXXMethodDecl *MD,
     98                                      CharUnits ThisAdjustment);
     99 
    100   llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
    101                                            llvm::Value *L, llvm::Value *R,
    102                                            const MemberPointerType *MPT,
    103                                            bool Inequality) override;
    104 
    105   llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
    106                                          llvm::Value *Addr,
    107                                          const MemberPointerType *MPT) override;
    108 
    109   llvm::Value *adjustToCompleteObject(CodeGenFunction &CGF, llvm::Value *ptr,
    110                                       QualType type) override;
    111 
    112   void EmitFundamentalRTTIDescriptor(QualType Type);
    113   void EmitFundamentalRTTIDescriptors();
    114   llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) override;
    115 
    116   bool shouldTypeidBeNullChecked(bool IsDeref, QualType SrcRecordTy) override;
    117   void EmitBadTypeidCall(CodeGenFunction &CGF) override;
    118   llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
    119                           llvm::Value *ThisPtr,
    120                           llvm::Type *StdTypeInfoPtrTy) override;
    121 
    122   bool shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
    123                                           QualType SrcRecordTy) override;
    124 
    125   llvm::Value *EmitDynamicCastCall(CodeGenFunction &CGF, llvm::Value *Value,
    126                                    QualType SrcRecordTy, QualType DestTy,
    127                                    QualType DestRecordTy,
    128                                    llvm::BasicBlock *CastEnd) override;
    129 
    130   llvm::Value *EmitDynamicCastToVoid(CodeGenFunction &CGF, llvm::Value *Value,
    131                                      QualType SrcRecordTy,
    132                                      QualType DestTy) override;
    133 
    134   bool EmitBadCastCall(CodeGenFunction &CGF) override;
    135 
    136   llvm::Value *
    137     GetVirtualBaseClassOffset(CodeGenFunction &CGF, llvm::Value *This,
    138                               const CXXRecordDecl *ClassDecl,
    139                               const CXXRecordDecl *BaseClassDecl) override;
    140 
    141   void BuildConstructorSignature(const CXXConstructorDecl *Ctor,
    142                                  CXXCtorType T, CanQualType &ResTy,
    143                                  SmallVectorImpl<CanQualType> &ArgTys) override;
    144 
    145   void EmitCXXConstructors(const CXXConstructorDecl *D) override;
    146 
    147   void BuildDestructorSignature(const CXXDestructorDecl *Dtor,
    148                                 CXXDtorType T, CanQualType &ResTy,
    149                                 SmallVectorImpl<CanQualType> &ArgTys) override;
    150 
    151   bool useThunkForDtorVariant(const CXXDestructorDecl *Dtor,
    152                               CXXDtorType DT) const override {
    153     // Itanium does not emit any destructor variant as an inline thunk.
    154     // Delegating may occur as an optimization, but all variants are either
    155     // emitted with external linkage or as linkonce if they are inline and used.
    156     return false;
    157   }
    158 
    159   void EmitCXXDestructors(const CXXDestructorDecl *D) override;
    160 
    161   void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
    162                                  FunctionArgList &Params) override;
    163 
    164   void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
    165 
    166   unsigned addImplicitConstructorArgs(CodeGenFunction &CGF,
    167                                       const CXXConstructorDecl *D,
    168                                       CXXCtorType Type, bool ForVirtualBase,
    169                                       bool Delegating,
    170                                       CallArgList &Args) override;
    171 
    172   void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
    173                           CXXDtorType Type, bool ForVirtualBase,
    174                           bool Delegating, llvm::Value *This) override;
    175 
    176   void emitVTableDefinitions(CodeGenVTables &CGVT,
    177                              const CXXRecordDecl *RD) override;
    178 
    179   llvm::Value *getVTableAddressPointInStructor(
    180       CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
    181       BaseSubobject Base, const CXXRecordDecl *NearestVBase,
    182       bool &NeedsVirtualOffset) override;
    183 
    184   llvm::Constant *
    185   getVTableAddressPointForConstExpr(BaseSubobject Base,
    186                                     const CXXRecordDecl *VTableClass) override;
    187 
    188   llvm::GlobalVariable *getAddrOfVTable(const CXXRecordDecl *RD,
    189                                         CharUnits VPtrOffset) override;
    190 
    191   llvm::Value *getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
    192                                          llvm::Value *This,
    193                                          llvm::Type *Ty) override;
    194 
    195   void EmitVirtualDestructorCall(CodeGenFunction &CGF,
    196                                  const CXXDestructorDecl *Dtor,
    197                                  CXXDtorType DtorType, SourceLocation CallLoc,
    198                                  llvm::Value *This) override;
    199 
    200   void emitVirtualInheritanceTables(const CXXRecordDecl *RD) override;
    201 
    202   void setThunkLinkage(llvm::Function *Thunk, bool ForVTable, GlobalDecl GD,
    203                        bool ReturnAdjustment) override {
    204     // Allow inlining of thunks by emitting them with available_externally
    205     // linkage together with vtables when needed.
    206     if (ForVTable)
    207       Thunk->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
    208   }
    209 
    210   llvm::Value *performThisAdjustment(CodeGenFunction &CGF, llvm::Value *This,
    211                                      const ThisAdjustment &TA) override;
    212 
    213   llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, llvm::Value *Ret,
    214                                        const ReturnAdjustment &RA) override;
    215 
    216   StringRef GetPureVirtualCallName() override { return "__cxa_pure_virtual"; }
    217   StringRef GetDeletedVirtualCallName() override
    218     { return "__cxa_deleted_virtual"; }
    219 
    220   CharUnits getArrayCookieSizeImpl(QualType elementType) override;
    221   llvm::Value *InitializeArrayCookie(CodeGenFunction &CGF,
    222                                      llvm::Value *NewPtr,
    223                                      llvm::Value *NumElements,
    224                                      const CXXNewExpr *expr,
    225                                      QualType ElementType) override;
    226   llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
    227                                    llvm::Value *allocPtr,
    228                                    CharUnits cookieSize) override;
    229 
    230   void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
    231                        llvm::GlobalVariable *DeclPtr,
    232                        bool PerformInit) override;
    233   void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
    234                           llvm::Constant *dtor, llvm::Constant *addr) override;
    235 
    236   llvm::Function *getOrCreateThreadLocalWrapper(const VarDecl *VD,
    237                                                 llvm::GlobalVariable *Var);
    238   void EmitThreadLocalInitFuncs(
    239       ArrayRef<std::pair<const VarDecl *, llvm::GlobalVariable *> > Decls,
    240       llvm::Function *InitFunc) override;
    241   LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
    242                                       QualType LValType) override;
    243 
    244   bool NeedsVTTParameter(GlobalDecl GD) override;
    245 
    246   /**************************** RTTI Uniqueness ******************************/
    247 
    248 protected:
    249   /// Returns true if the ABI requires RTTI type_info objects to be unique
    250   /// across a program.
    251   virtual bool shouldRTTIBeUnique() const { return true; }
    252 
    253 public:
    254   /// What sort of unique-RTTI behavior should we use?
    255   enum RTTIUniquenessKind {
    256     /// We are guaranteeing, or need to guarantee, that the RTTI string
    257     /// is unique.
    258     RUK_Unique,
    259 
    260     /// We are not guaranteeing uniqueness for the RTTI string, so we
    261     /// can demote to hidden visibility but must use string comparisons.
    262     RUK_NonUniqueHidden,
    263 
    264     /// We are not guaranteeing uniqueness for the RTTI string, so we
    265     /// have to use string comparisons, but we also have to emit it with
    266     /// non-hidden visibility.
    267     RUK_NonUniqueVisible
    268   };
    269 
    270   /// Return the required visibility status for the given type and linkage in
    271   /// the current ABI.
    272   RTTIUniquenessKind
    273   classifyRTTIUniqueness(QualType CanTy,
    274                          llvm::GlobalValue::LinkageTypes Linkage) const;
    275   friend class ItaniumRTTIBuilder;
    276 };
    277 
    278 class ARMCXXABI : public ItaniumCXXABI {
    279 public:
    280   ARMCXXABI(CodeGen::CodeGenModule &CGM) :
    281     ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
    282                   /* UseARMGuardVarABI = */ true) {}
    283 
    284   bool HasThisReturn(GlobalDecl GD) const override {
    285     return (isa<CXXConstructorDecl>(GD.getDecl()) || (
    286               isa<CXXDestructorDecl>(GD.getDecl()) &&
    287               GD.getDtorType() != Dtor_Deleting));
    288   }
    289 
    290   void EmitReturnFromThunk(CodeGenFunction &CGF, RValue RV,
    291                            QualType ResTy) override;
    292 
    293   CharUnits getArrayCookieSizeImpl(QualType elementType) override;
    294   llvm::Value *InitializeArrayCookie(CodeGenFunction &CGF,
    295                                      llvm::Value *NewPtr,
    296                                      llvm::Value *NumElements,
    297                                      const CXXNewExpr *expr,
    298                                      QualType ElementType) override;
    299   llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF, llvm::Value *allocPtr,
    300                                    CharUnits cookieSize) override;
    301 };
    302 
    303 class iOS64CXXABI : public ARMCXXABI {
    304 public:
    305   iOS64CXXABI(CodeGen::CodeGenModule &CGM) : ARMCXXABI(CGM) {}
    306 
    307   // ARM64 libraries are prepared for non-unique RTTI.
    308   bool shouldRTTIBeUnique() const override { return false; }
    309 };
    310 }
    311 
    312 CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) {
    313   switch (CGM.getTarget().getCXXABI().getKind()) {
    314   // For IR-generation purposes, there's no significant difference
    315   // between the ARM and iOS ABIs.
    316   case TargetCXXABI::GenericARM:
    317   case TargetCXXABI::iOS:
    318     return new ARMCXXABI(CGM);
    319 
    320   case TargetCXXABI::iOS64:
    321     return new iOS64CXXABI(CGM);
    322 
    323   // Note that AArch64 uses the generic ItaniumCXXABI class since it doesn't
    324   // include the other 32-bit ARM oddities: constructor/destructor return values
    325   // and array cookies.
    326   case TargetCXXABI::GenericAArch64:
    327     return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
    328                              /* UseARMGuardVarABI = */ true);
    329 
    330   case TargetCXXABI::GenericItanium:
    331     if (CGM.getContext().getTargetInfo().getTriple().getArch()
    332         == llvm::Triple::le32) {
    333       // For PNaCl, use ARM-style method pointers so that PNaCl code
    334       // does not assume anything about the alignment of function
    335       // pointers.
    336       return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
    337                                /* UseARMGuardVarABI = */ false);
    338     }
    339     return new ItaniumCXXABI(CGM);
    340 
    341   case TargetCXXABI::Microsoft:
    342     llvm_unreachable("Microsoft ABI is not Itanium-based");
    343   }
    344   llvm_unreachable("bad ABI kind");
    345 }
    346 
    347 llvm::Type *
    348 ItaniumCXXABI::ConvertMemberPointerType(const MemberPointerType *MPT) {
    349   if (MPT->isMemberDataPointer())
    350     return CGM.PtrDiffTy;
    351   return llvm::StructType::get(CGM.PtrDiffTy, CGM.PtrDiffTy, NULL);
    352 }
    353 
    354 /// In the Itanium and ARM ABIs, method pointers have the form:
    355 ///   struct { ptrdiff_t ptr; ptrdiff_t adj; } memptr;
    356 ///
    357 /// In the Itanium ABI:
    358 ///  - method pointers are virtual if (memptr.ptr & 1) is nonzero
    359 ///  - the this-adjustment is (memptr.adj)
    360 ///  - the virtual offset is (memptr.ptr - 1)
    361 ///
    362 /// In the ARM ABI:
    363 ///  - method pointers are virtual if (memptr.adj & 1) is nonzero
    364 ///  - the this-adjustment is (memptr.adj >> 1)
    365 ///  - the virtual offset is (memptr.ptr)
    366 /// ARM uses 'adj' for the virtual flag because Thumb functions
    367 /// may be only single-byte aligned.
    368 ///
    369 /// If the member is virtual, the adjusted 'this' pointer points
    370 /// to a vtable pointer from which the virtual offset is applied.
    371 ///
    372 /// If the member is non-virtual, memptr.ptr is the address of
    373 /// the function to call.
    374 llvm::Value *ItaniumCXXABI::EmitLoadOfMemberFunctionPointer(
    375     CodeGenFunction &CGF, const Expr *E, llvm::Value *&This,
    376     llvm::Value *MemFnPtr, const MemberPointerType *MPT) {
    377   CGBuilderTy &Builder = CGF.Builder;
    378 
    379   const FunctionProtoType *FPT =
    380     MPT->getPointeeType()->getAs<FunctionProtoType>();
    381   const CXXRecordDecl *RD =
    382     cast<CXXRecordDecl>(MPT->getClass()->getAs<RecordType>()->getDecl());
    383 
    384   llvm::FunctionType *FTy =
    385     CGM.getTypes().GetFunctionType(
    386       CGM.getTypes().arrangeCXXMethodType(RD, FPT));
    387 
    388   llvm::Constant *ptrdiff_1 = llvm::ConstantInt::get(CGM.PtrDiffTy, 1);
    389 
    390   llvm::BasicBlock *FnVirtual = CGF.createBasicBlock("memptr.virtual");
    391   llvm::BasicBlock *FnNonVirtual = CGF.createBasicBlock("memptr.nonvirtual");
    392   llvm::BasicBlock *FnEnd = CGF.createBasicBlock("memptr.end");
    393 
    394   // Extract memptr.adj, which is in the second field.
    395   llvm::Value *RawAdj = Builder.CreateExtractValue(MemFnPtr, 1, "memptr.adj");
    396 
    397   // Compute the true adjustment.
    398   llvm::Value *Adj = RawAdj;
    399   if (UseARMMethodPtrABI)
    400     Adj = Builder.CreateAShr(Adj, ptrdiff_1, "memptr.adj.shifted");
    401 
    402   // Apply the adjustment and cast back to the original struct type
    403   // for consistency.
    404   llvm::Value *Ptr = Builder.CreateBitCast(This, Builder.getInt8PtrTy());
    405   Ptr = Builder.CreateInBoundsGEP(Ptr, Adj);
    406   This = Builder.CreateBitCast(Ptr, This->getType(), "this.adjusted");
    407 
    408   // Load the function pointer.
    409   llvm::Value *FnAsInt = Builder.CreateExtractValue(MemFnPtr, 0, "memptr.ptr");
    410 
    411   // If the LSB in the function pointer is 1, the function pointer points to
    412   // a virtual function.
    413   llvm::Value *IsVirtual;
    414   if (UseARMMethodPtrABI)
    415     IsVirtual = Builder.CreateAnd(RawAdj, ptrdiff_1);
    416   else
    417     IsVirtual = Builder.CreateAnd(FnAsInt, ptrdiff_1);
    418   IsVirtual = Builder.CreateIsNotNull(IsVirtual, "memptr.isvirtual");
    419   Builder.CreateCondBr(IsVirtual, FnVirtual, FnNonVirtual);
    420 
    421   // In the virtual path, the adjustment left 'This' pointing to the
    422   // vtable of the correct base subobject.  The "function pointer" is an
    423   // offset within the vtable (+1 for the virtual flag on non-ARM).
    424   CGF.EmitBlock(FnVirtual);
    425 
    426   // Cast the adjusted this to a pointer to vtable pointer and load.
    427   llvm::Type *VTableTy = Builder.getInt8PtrTy();
    428   llvm::Value *VTable = CGF.GetVTablePtr(This, VTableTy);
    429 
    430   // Apply the offset.
    431   llvm::Value *VTableOffset = FnAsInt;
    432   if (!UseARMMethodPtrABI)
    433     VTableOffset = Builder.CreateSub(VTableOffset, ptrdiff_1);
    434   VTable = Builder.CreateGEP(VTable, VTableOffset);
    435 
    436   // Load the virtual function to call.
    437   VTable = Builder.CreateBitCast(VTable, FTy->getPointerTo()->getPointerTo());
    438   llvm::Value *VirtualFn = Builder.CreateLoad(VTable, "memptr.virtualfn");
    439   CGF.EmitBranch(FnEnd);
    440 
    441   // In the non-virtual path, the function pointer is actually a
    442   // function pointer.
    443   CGF.EmitBlock(FnNonVirtual);
    444   llvm::Value *NonVirtualFn =
    445     Builder.CreateIntToPtr(FnAsInt, FTy->getPointerTo(), "memptr.nonvirtualfn");
    446 
    447   // We're done.
    448   CGF.EmitBlock(FnEnd);
    449   llvm::PHINode *Callee = Builder.CreatePHI(FTy->getPointerTo(), 2);
    450   Callee->addIncoming(VirtualFn, FnVirtual);
    451   Callee->addIncoming(NonVirtualFn, FnNonVirtual);
    452   return Callee;
    453 }
    454 
    455 /// Compute an l-value by applying the given pointer-to-member to a
    456 /// base object.
    457 llvm::Value *ItaniumCXXABI::EmitMemberDataPointerAddress(
    458     CodeGenFunction &CGF, const Expr *E, llvm::Value *Base, llvm::Value *MemPtr,
    459     const MemberPointerType *MPT) {
    460   assert(MemPtr->getType() == CGM.PtrDiffTy);
    461 
    462   CGBuilderTy &Builder = CGF.Builder;
    463 
    464   unsigned AS = Base->getType()->getPointerAddressSpace();
    465 
    466   // Cast to char*.
    467   Base = Builder.CreateBitCast(Base, Builder.getInt8Ty()->getPointerTo(AS));
    468 
    469   // Apply the offset, which we assume is non-null.
    470   llvm::Value *Addr = Builder.CreateInBoundsGEP(Base, MemPtr, "memptr.offset");
    471 
    472   // Cast the address to the appropriate pointer type, adopting the
    473   // address space of the base pointer.
    474   llvm::Type *PType
    475     = CGF.ConvertTypeForMem(MPT->getPointeeType())->getPointerTo(AS);
    476   return Builder.CreateBitCast(Addr, PType);
    477 }
    478 
    479 /// Perform a bitcast, derived-to-base, or base-to-derived member pointer
    480 /// conversion.
    481 ///
    482 /// Bitcast conversions are always a no-op under Itanium.
    483 ///
    484 /// Obligatory offset/adjustment diagram:
    485 ///         <-- offset -->          <-- adjustment -->
    486 ///   |--------------------------|----------------------|--------------------|
    487 ///   ^Derived address point     ^Base address point    ^Member address point
    488 ///
    489 /// So when converting a base member pointer to a derived member pointer,
    490 /// we add the offset to the adjustment because the address point has
    491 /// decreased;  and conversely, when converting a derived MP to a base MP
    492 /// we subtract the offset from the adjustment because the address point
    493 /// has increased.
    494 ///
    495 /// The standard forbids (at compile time) conversion to and from
    496 /// virtual bases, which is why we don't have to consider them here.
    497 ///
    498 /// The standard forbids (at run time) casting a derived MP to a base
    499 /// MP when the derived MP does not point to a member of the base.
    500 /// This is why -1 is a reasonable choice for null data member
    501 /// pointers.
    502 llvm::Value *
    503 ItaniumCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF,
    504                                            const CastExpr *E,
    505                                            llvm::Value *src) {
    506   assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
    507          E->getCastKind() == CK_BaseToDerivedMemberPointer ||
    508          E->getCastKind() == CK_ReinterpretMemberPointer);
    509 
    510   // Under Itanium, reinterprets don't require any additional processing.
    511   if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
    512 
    513   // Use constant emission if we can.
    514   if (isa<llvm::Constant>(src))
    515     return EmitMemberPointerConversion(E, cast<llvm::Constant>(src));
    516 
    517   llvm::Constant *adj = getMemberPointerAdjustment(E);
    518   if (!adj) return src;
    519 
    520   CGBuilderTy &Builder = CGF.Builder;
    521   bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
    522 
    523   const MemberPointerType *destTy =
    524     E->getType()->castAs<MemberPointerType>();
    525 
    526   // For member data pointers, this is just a matter of adding the
    527   // offset if the source is non-null.
    528   if (destTy->isMemberDataPointer()) {
    529     llvm::Value *dst;
    530     if (isDerivedToBase)
    531       dst = Builder.CreateNSWSub(src, adj, "adj");
    532     else
    533       dst = Builder.CreateNSWAdd(src, adj, "adj");
    534 
    535     // Null check.
    536     llvm::Value *null = llvm::Constant::getAllOnesValue(src->getType());
    537     llvm::Value *isNull = Builder.CreateICmpEQ(src, null, "memptr.isnull");
    538     return Builder.CreateSelect(isNull, src, dst);
    539   }
    540 
    541   // The this-adjustment is left-shifted by 1 on ARM.
    542   if (UseARMMethodPtrABI) {
    543     uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
    544     offset <<= 1;
    545     adj = llvm::ConstantInt::get(adj->getType(), offset);
    546   }
    547 
    548   llvm::Value *srcAdj = Builder.CreateExtractValue(src, 1, "src.adj");
    549   llvm::Value *dstAdj;
    550   if (isDerivedToBase)
    551     dstAdj = Builder.CreateNSWSub(srcAdj, adj, "adj");
    552   else
    553     dstAdj = Builder.CreateNSWAdd(srcAdj, adj, "adj");
    554 
    555   return Builder.CreateInsertValue(src, dstAdj, 1);
    556 }
    557 
    558 llvm::Constant *
    559 ItaniumCXXABI::EmitMemberPointerConversion(const CastExpr *E,
    560                                            llvm::Constant *src) {
    561   assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
    562          E->getCastKind() == CK_BaseToDerivedMemberPointer ||
    563          E->getCastKind() == CK_ReinterpretMemberPointer);
    564 
    565   // Under Itanium, reinterprets don't require any additional processing.
    566   if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
    567 
    568   // If the adjustment is trivial, we don't need to do anything.
    569   llvm::Constant *adj = getMemberPointerAdjustment(E);
    570   if (!adj) return src;
    571 
    572   bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
    573 
    574   const MemberPointerType *destTy =
    575     E->getType()->castAs<MemberPointerType>();
    576 
    577   // For member data pointers, this is just a matter of adding the
    578   // offset if the source is non-null.
    579   if (destTy->isMemberDataPointer()) {
    580     // null maps to null.
    581     if (src->isAllOnesValue()) return src;
    582 
    583     if (isDerivedToBase)
    584       return llvm::ConstantExpr::getNSWSub(src, adj);
    585     else
    586       return llvm::ConstantExpr::getNSWAdd(src, adj);
    587   }
    588 
    589   // The this-adjustment is left-shifted by 1 on ARM.
    590   if (UseARMMethodPtrABI) {
    591     uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
    592     offset <<= 1;
    593     adj = llvm::ConstantInt::get(adj->getType(), offset);
    594   }
    595 
    596   llvm::Constant *srcAdj = llvm::ConstantExpr::getExtractValue(src, 1);
    597   llvm::Constant *dstAdj;
    598   if (isDerivedToBase)
    599     dstAdj = llvm::ConstantExpr::getNSWSub(srcAdj, adj);
    600   else
    601     dstAdj = llvm::ConstantExpr::getNSWAdd(srcAdj, adj);
    602 
    603   return llvm::ConstantExpr::getInsertValue(src, dstAdj, 1);
    604 }
    605 
    606 llvm::Constant *
    607 ItaniumCXXABI::EmitNullMemberPointer(const MemberPointerType *MPT) {
    608   // Itanium C++ ABI 2.3:
    609   //   A NULL pointer is represented as -1.
    610   if (MPT->isMemberDataPointer())
    611     return llvm::ConstantInt::get(CGM.PtrDiffTy, -1ULL, /*isSigned=*/true);
    612 
    613   llvm::Constant *Zero = llvm::ConstantInt::get(CGM.PtrDiffTy, 0);
    614   llvm::Constant *Values[2] = { Zero, Zero };
    615   return llvm::ConstantStruct::getAnon(Values);
    616 }
    617 
    618 llvm::Constant *
    619 ItaniumCXXABI::EmitMemberDataPointer(const MemberPointerType *MPT,
    620                                      CharUnits offset) {
    621   // Itanium C++ ABI 2.3:
    622   //   A pointer to data member is an offset from the base address of
    623   //   the class object containing it, represented as a ptrdiff_t
    624   return llvm::ConstantInt::get(CGM.PtrDiffTy, offset.getQuantity());
    625 }
    626 
    627 llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const CXXMethodDecl *MD) {
    628   return BuildMemberPointer(MD, CharUnits::Zero());
    629 }
    630 
    631 llvm::Constant *ItaniumCXXABI::BuildMemberPointer(const CXXMethodDecl *MD,
    632                                                   CharUnits ThisAdjustment) {
    633   assert(MD->isInstance() && "Member function must not be static!");
    634   MD = MD->getCanonicalDecl();
    635 
    636   CodeGenTypes &Types = CGM.getTypes();
    637 
    638   // Get the function pointer (or index if this is a virtual function).
    639   llvm::Constant *MemPtr[2];
    640   if (MD->isVirtual()) {
    641     uint64_t Index = CGM.getItaniumVTableContext().getMethodVTableIndex(MD);
    642 
    643     const ASTContext &Context = getContext();
    644     CharUnits PointerWidth =
    645       Context.toCharUnitsFromBits(Context.getTargetInfo().getPointerWidth(0));
    646     uint64_t VTableOffset = (Index * PointerWidth.getQuantity());
    647 
    648     if (UseARMMethodPtrABI) {
    649       // ARM C++ ABI 3.2.1:
    650       //   This ABI specifies that adj contains twice the this
    651       //   adjustment, plus 1 if the member function is virtual. The
    652       //   least significant bit of adj then makes exactly the same
    653       //   discrimination as the least significant bit of ptr does for
    654       //   Itanium.
    655       MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset);
    656       MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
    657                                          2 * ThisAdjustment.getQuantity() + 1);
    658     } else {
    659       // Itanium C++ ABI 2.3:
    660       //   For a virtual function, [the pointer field] is 1 plus the
    661       //   virtual table offset (in bytes) of the function,
    662       //   represented as a ptrdiff_t.
    663       MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset + 1);
    664       MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
    665                                          ThisAdjustment.getQuantity());
    666     }
    667   } else {
    668     const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
    669     llvm::Type *Ty;
    670     // Check whether the function has a computable LLVM signature.
    671     if (Types.isFuncTypeConvertible(FPT)) {
    672       // The function has a computable LLVM signature; use the correct type.
    673       Ty = Types.GetFunctionType(Types.arrangeCXXMethodDeclaration(MD));
    674     } else {
    675       // Use an arbitrary non-function type to tell GetAddrOfFunction that the
    676       // function type is incomplete.
    677       Ty = CGM.PtrDiffTy;
    678     }
    679     llvm::Constant *addr = CGM.GetAddrOfFunction(MD, Ty);
    680 
    681     MemPtr[0] = llvm::ConstantExpr::getPtrToInt(addr, CGM.PtrDiffTy);
    682     MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
    683                                        (UseARMMethodPtrABI ? 2 : 1) *
    684                                        ThisAdjustment.getQuantity());
    685   }
    686 
    687   return llvm::ConstantStruct::getAnon(MemPtr);
    688 }
    689 
    690 llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const APValue &MP,
    691                                                  QualType MPType) {
    692   const MemberPointerType *MPT = MPType->castAs<MemberPointerType>();
    693   const ValueDecl *MPD = MP.getMemberPointerDecl();
    694   if (!MPD)
    695     return EmitNullMemberPointer(MPT);
    696 
    697   CharUnits ThisAdjustment = getMemberPointerPathAdjustment(MP);
    698 
    699   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MPD))
    700     return BuildMemberPointer(MD, ThisAdjustment);
    701 
    702   CharUnits FieldOffset =
    703     getContext().toCharUnitsFromBits(getContext().getFieldOffset(MPD));
    704   return EmitMemberDataPointer(MPT, ThisAdjustment + FieldOffset);
    705 }
    706 
    707 /// The comparison algorithm is pretty easy: the member pointers are
    708 /// the same if they're either bitwise identical *or* both null.
    709 ///
    710 /// ARM is different here only because null-ness is more complicated.
    711 llvm::Value *
    712 ItaniumCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF,
    713                                            llvm::Value *L,
    714                                            llvm::Value *R,
    715                                            const MemberPointerType *MPT,
    716                                            bool Inequality) {
    717   CGBuilderTy &Builder = CGF.Builder;
    718 
    719   llvm::ICmpInst::Predicate Eq;
    720   llvm::Instruction::BinaryOps And, Or;
    721   if (Inequality) {
    722     Eq = llvm::ICmpInst::ICMP_NE;
    723     And = llvm::Instruction::Or;
    724     Or = llvm::Instruction::And;
    725   } else {
    726     Eq = llvm::ICmpInst::ICMP_EQ;
    727     And = llvm::Instruction::And;
    728     Or = llvm::Instruction::Or;
    729   }
    730 
    731   // Member data pointers are easy because there's a unique null
    732   // value, so it just comes down to bitwise equality.
    733   if (MPT->isMemberDataPointer())
    734     return Builder.CreateICmp(Eq, L, R);
    735 
    736   // For member function pointers, the tautologies are more complex.
    737   // The Itanium tautology is:
    738   //   (L == R) <==> (L.ptr == R.ptr && (L.ptr == 0 || L.adj == R.adj))
    739   // The ARM tautology is:
    740   //   (L == R) <==> (L.ptr == R.ptr &&
    741   //                  (L.adj == R.adj ||
    742   //                   (L.ptr == 0 && ((L.adj|R.adj) & 1) == 0)))
    743   // The inequality tautologies have exactly the same structure, except
    744   // applying De Morgan's laws.
    745 
    746   llvm::Value *LPtr = Builder.CreateExtractValue(L, 0, "lhs.memptr.ptr");
    747   llvm::Value *RPtr = Builder.CreateExtractValue(R, 0, "rhs.memptr.ptr");
    748 
    749   // This condition tests whether L.ptr == R.ptr.  This must always be
    750   // true for equality to hold.
    751   llvm::Value *PtrEq = Builder.CreateICmp(Eq, LPtr, RPtr, "cmp.ptr");
    752 
    753   // This condition, together with the assumption that L.ptr == R.ptr,
    754   // tests whether the pointers are both null.  ARM imposes an extra
    755   // condition.
    756   llvm::Value *Zero = llvm::Constant::getNullValue(LPtr->getType());
    757   llvm::Value *EqZero = Builder.CreateICmp(Eq, LPtr, Zero, "cmp.ptr.null");
    758 
    759   // This condition tests whether L.adj == R.adj.  If this isn't
    760   // true, the pointers are unequal unless they're both null.
    761   llvm::Value *LAdj = Builder.CreateExtractValue(L, 1, "lhs.memptr.adj");
    762   llvm::Value *RAdj = Builder.CreateExtractValue(R, 1, "rhs.memptr.adj");
    763   llvm::Value *AdjEq = Builder.CreateICmp(Eq, LAdj, RAdj, "cmp.adj");
    764 
    765   // Null member function pointers on ARM clear the low bit of Adj,
    766   // so the zero condition has to check that neither low bit is set.
    767   if (UseARMMethodPtrABI) {
    768     llvm::Value *One = llvm::ConstantInt::get(LPtr->getType(), 1);
    769 
    770     // Compute (l.adj | r.adj) & 1 and test it against zero.
    771     llvm::Value *OrAdj = Builder.CreateOr(LAdj, RAdj, "or.adj");
    772     llvm::Value *OrAdjAnd1 = Builder.CreateAnd(OrAdj, One);
    773     llvm::Value *OrAdjAnd1EqZero = Builder.CreateICmp(Eq, OrAdjAnd1, Zero,
    774                                                       "cmp.or.adj");
    775     EqZero = Builder.CreateBinOp(And, EqZero, OrAdjAnd1EqZero);
    776   }
    777 
    778   // Tie together all our conditions.
    779   llvm::Value *Result = Builder.CreateBinOp(Or, EqZero, AdjEq);
    780   Result = Builder.CreateBinOp(And, PtrEq, Result,
    781                                Inequality ? "memptr.ne" : "memptr.eq");
    782   return Result;
    783 }
    784 
    785 llvm::Value *
    786 ItaniumCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
    787                                           llvm::Value *MemPtr,
    788                                           const MemberPointerType *MPT) {
    789   CGBuilderTy &Builder = CGF.Builder;
    790 
    791   /// For member data pointers, this is just a check against -1.
    792   if (MPT->isMemberDataPointer()) {
    793     assert(MemPtr->getType() == CGM.PtrDiffTy);
    794     llvm::Value *NegativeOne =
    795       llvm::Constant::getAllOnesValue(MemPtr->getType());
    796     return Builder.CreateICmpNE(MemPtr, NegativeOne, "memptr.tobool");
    797   }
    798 
    799   // In Itanium, a member function pointer is not null if 'ptr' is not null.
    800   llvm::Value *Ptr = Builder.CreateExtractValue(MemPtr, 0, "memptr.ptr");
    801 
    802   llvm::Constant *Zero = llvm::ConstantInt::get(Ptr->getType(), 0);
    803   llvm::Value *Result = Builder.CreateICmpNE(Ptr, Zero, "memptr.tobool");
    804 
    805   // On ARM, a member function pointer is also non-null if the low bit of 'adj'
    806   // (the virtual bit) is set.
    807   if (UseARMMethodPtrABI) {
    808     llvm::Constant *One = llvm::ConstantInt::get(Ptr->getType(), 1);
    809     llvm::Value *Adj = Builder.CreateExtractValue(MemPtr, 1, "memptr.adj");
    810     llvm::Value *VirtualBit = Builder.CreateAnd(Adj, One, "memptr.virtualbit");
    811     llvm::Value *IsVirtual = Builder.CreateICmpNE(VirtualBit, Zero,
    812                                                   "memptr.isvirtual");
    813     Result = Builder.CreateOr(Result, IsVirtual);
    814   }
    815 
    816   return Result;
    817 }
    818 
    819 bool ItaniumCXXABI::classifyReturnType(CGFunctionInfo &FI) const {
    820   const CXXRecordDecl *RD = FI.getReturnType()->getAsCXXRecordDecl();
    821   if (!RD)
    822     return false;
    823 
    824   // Return indirectly if we have a non-trivial copy ctor or non-trivial dtor.
    825   // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
    826   // special members.
    827   if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor()) {
    828     FI.getReturnInfo() = ABIArgInfo::getIndirect(0, /*ByVal=*/false);
    829     return true;
    830   }
    831   return false;
    832 }
    833 
    834 /// The Itanium ABI requires non-zero initialization only for data
    835 /// member pointers, for which '0' is a valid offset.
    836 bool ItaniumCXXABI::isZeroInitializable(const MemberPointerType *MPT) {
    837   return MPT->getPointeeType()->isFunctionType();
    838 }
    839 
    840 /// The Itanium ABI always places an offset to the complete object
    841 /// at entry -2 in the vtable.
    842 llvm::Value *ItaniumCXXABI::adjustToCompleteObject(CodeGenFunction &CGF,
    843                                                    llvm::Value *ptr,
    844                                                    QualType type) {
    845   // Grab the vtable pointer as an intptr_t*.
    846   llvm::Value *vtable = CGF.GetVTablePtr(ptr, CGF.IntPtrTy->getPointerTo());
    847 
    848   // Track back to entry -2 and pull out the offset there.
    849   llvm::Value *offsetPtr =
    850     CGF.Builder.CreateConstInBoundsGEP1_64(vtable, -2, "complete-offset.ptr");
    851   llvm::LoadInst *offset = CGF.Builder.CreateLoad(offsetPtr);
    852   offset->setAlignment(CGF.PointerAlignInBytes);
    853 
    854   // Apply the offset.
    855   ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8PtrTy);
    856   return CGF.Builder.CreateInBoundsGEP(ptr, offset);
    857 }
    858 
    859 static llvm::Constant *getItaniumDynamicCastFn(CodeGenFunction &CGF) {
    860   // void *__dynamic_cast(const void *sub,
    861   //                      const abi::__class_type_info *src,
    862   //                      const abi::__class_type_info *dst,
    863   //                      std::ptrdiff_t src2dst_offset);
    864 
    865   llvm::Type *Int8PtrTy = CGF.Int8PtrTy;
    866   llvm::Type *PtrDiffTy =
    867     CGF.ConvertType(CGF.getContext().getPointerDiffType());
    868 
    869   llvm::Type *Args[4] = { Int8PtrTy, Int8PtrTy, Int8PtrTy, PtrDiffTy };
    870 
    871   llvm::FunctionType *FTy = llvm::FunctionType::get(Int8PtrTy, Args, false);
    872 
    873   // Mark the function as nounwind readonly.
    874   llvm::Attribute::AttrKind FuncAttrs[] = { llvm::Attribute::NoUnwind,
    875                                             llvm::Attribute::ReadOnly };
    876   llvm::AttributeSet Attrs = llvm::AttributeSet::get(
    877       CGF.getLLVMContext(), llvm::AttributeSet::FunctionIndex, FuncAttrs);
    878 
    879   return CGF.CGM.CreateRuntimeFunction(FTy, "__dynamic_cast", Attrs);
    880 }
    881 
    882 static llvm::Constant *getBadCastFn(CodeGenFunction &CGF) {
    883   // void __cxa_bad_cast();
    884   llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
    885   return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_cast");
    886 }
    887 
    888 /// \brief Compute the src2dst_offset hint as described in the
    889 /// Itanium C++ ABI [2.9.7]
    890 static CharUnits computeOffsetHint(ASTContext &Context,
    891                                    const CXXRecordDecl *Src,
    892                                    const CXXRecordDecl *Dst) {
    893   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
    894                      /*DetectVirtual=*/false);
    895 
    896   // If Dst is not derived from Src we can skip the whole computation below and
    897   // return that Src is not a public base of Dst.  Record all inheritance paths.
    898   if (!Dst->isDerivedFrom(Src, Paths))
    899     return CharUnits::fromQuantity(-2ULL);
    900 
    901   unsigned NumPublicPaths = 0;
    902   CharUnits Offset;
    903 
    904   // Now walk all possible inheritance paths.
    905   for (CXXBasePaths::paths_iterator I = Paths.begin(), E = Paths.end(); I != E;
    906        ++I) {
    907     if (I->Access != AS_public) // Ignore non-public inheritance.
    908       continue;
    909 
    910     ++NumPublicPaths;
    911 
    912     for (CXXBasePath::iterator J = I->begin(), JE = I->end(); J != JE; ++J) {
    913       // If the path contains a virtual base class we can't give any hint.
    914       // -1: no hint.
    915       if (J->Base->isVirtual())
    916         return CharUnits::fromQuantity(-1ULL);
    917 
    918       if (NumPublicPaths > 1) // Won't use offsets, skip computation.
    919         continue;
    920 
    921       // Accumulate the base class offsets.
    922       const ASTRecordLayout &L = Context.getASTRecordLayout(J->Class);
    923       Offset += L.getBaseClassOffset(J->Base->getType()->getAsCXXRecordDecl());
    924     }
    925   }
    926 
    927   // -2: Src is not a public base of Dst.
    928   if (NumPublicPaths == 0)
    929     return CharUnits::fromQuantity(-2ULL);
    930 
    931   // -3: Src is a multiple public base type but never a virtual base type.
    932   if (NumPublicPaths > 1)
    933     return CharUnits::fromQuantity(-3ULL);
    934 
    935   // Otherwise, the Src type is a unique public nonvirtual base type of Dst.
    936   // Return the offset of Src from the origin of Dst.
    937   return Offset;
    938 }
    939 
    940 static llvm::Constant *getBadTypeidFn(CodeGenFunction &CGF) {
    941   // void __cxa_bad_typeid();
    942   llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
    943 
    944   return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid");
    945 }
    946 
    947 bool ItaniumCXXABI::shouldTypeidBeNullChecked(bool IsDeref,
    948                                               QualType SrcRecordTy) {
    949   return IsDeref;
    950 }
    951 
    952 void ItaniumCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) {
    953   llvm::Value *Fn = getBadTypeidFn(CGF);
    954   CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
    955   CGF.Builder.CreateUnreachable();
    956 }
    957 
    958 llvm::Value *ItaniumCXXABI::EmitTypeid(CodeGenFunction &CGF,
    959                                        QualType SrcRecordTy,
    960                                        llvm::Value *ThisPtr,
    961                                        llvm::Type *StdTypeInfoPtrTy) {
    962   llvm::Value *Value =
    963       CGF.GetVTablePtr(ThisPtr, StdTypeInfoPtrTy->getPointerTo());
    964 
    965   // Load the type info.
    966   Value = CGF.Builder.CreateConstInBoundsGEP1_64(Value, -1ULL);
    967   return CGF.Builder.CreateLoad(Value);
    968 }
    969 
    970 bool ItaniumCXXABI::shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
    971                                                        QualType SrcRecordTy) {
    972   return SrcIsPtr;
    973 }
    974 
    975 llvm::Value *ItaniumCXXABI::EmitDynamicCastCall(
    976     CodeGenFunction &CGF, llvm::Value *Value, QualType SrcRecordTy,
    977     QualType DestTy, QualType DestRecordTy, llvm::BasicBlock *CastEnd) {
    978   llvm::Type *PtrDiffLTy =
    979       CGF.ConvertType(CGF.getContext().getPointerDiffType());
    980   llvm::Type *DestLTy = CGF.ConvertType(DestTy);
    981 
    982   llvm::Value *SrcRTTI =
    983       CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
    984   llvm::Value *DestRTTI =
    985       CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
    986 
    987   // Compute the offset hint.
    988   const CXXRecordDecl *SrcDecl = SrcRecordTy->getAsCXXRecordDecl();
    989   const CXXRecordDecl *DestDecl = DestRecordTy->getAsCXXRecordDecl();
    990   llvm::Value *OffsetHint = llvm::ConstantInt::get(
    991       PtrDiffLTy,
    992       computeOffsetHint(CGF.getContext(), SrcDecl, DestDecl).getQuantity());
    993 
    994   // Emit the call to __dynamic_cast.
    995   Value = CGF.EmitCastToVoidPtr(Value);
    996 
    997   llvm::Value *args[] = {Value, SrcRTTI, DestRTTI, OffsetHint};
    998   Value = CGF.EmitNounwindRuntimeCall(getItaniumDynamicCastFn(CGF), args);
    999   Value = CGF.Builder.CreateBitCast(Value, DestLTy);
   1000 
   1001   /// C++ [expr.dynamic.cast]p9:
   1002   ///   A failed cast to reference type throws std::bad_cast
   1003   if (DestTy->isReferenceType()) {
   1004     llvm::BasicBlock *BadCastBlock =
   1005         CGF.createBasicBlock("dynamic_cast.bad_cast");
   1006 
   1007     llvm::Value *IsNull = CGF.Builder.CreateIsNull(Value);
   1008     CGF.Builder.CreateCondBr(IsNull, BadCastBlock, CastEnd);
   1009 
   1010     CGF.EmitBlock(BadCastBlock);
   1011     EmitBadCastCall(CGF);
   1012   }
   1013 
   1014   return Value;
   1015 }
   1016 
   1017 llvm::Value *ItaniumCXXABI::EmitDynamicCastToVoid(CodeGenFunction &CGF,
   1018                                                   llvm::Value *Value,
   1019                                                   QualType SrcRecordTy,
   1020                                                   QualType DestTy) {
   1021   llvm::Type *PtrDiffLTy =
   1022       CGF.ConvertType(CGF.getContext().getPointerDiffType());
   1023   llvm::Type *DestLTy = CGF.ConvertType(DestTy);
   1024 
   1025   // Get the vtable pointer.
   1026   llvm::Value *VTable = CGF.GetVTablePtr(Value, PtrDiffLTy->getPointerTo());
   1027 
   1028   // Get the offset-to-top from the vtable.
   1029   llvm::Value *OffsetToTop =
   1030       CGF.Builder.CreateConstInBoundsGEP1_64(VTable, -2ULL);
   1031   OffsetToTop = CGF.Builder.CreateLoad(OffsetToTop, "offset.to.top");
   1032 
   1033   // Finally, add the offset to the pointer.
   1034   Value = CGF.EmitCastToVoidPtr(Value);
   1035   Value = CGF.Builder.CreateInBoundsGEP(Value, OffsetToTop);
   1036 
   1037   return CGF.Builder.CreateBitCast(Value, DestLTy);
   1038 }
   1039 
   1040 bool ItaniumCXXABI::EmitBadCastCall(CodeGenFunction &CGF) {
   1041   llvm::Value *Fn = getBadCastFn(CGF);
   1042   CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
   1043   CGF.Builder.CreateUnreachable();
   1044   return true;
   1045 }
   1046 
   1047 llvm::Value *
   1048 ItaniumCXXABI::GetVirtualBaseClassOffset(CodeGenFunction &CGF,
   1049                                          llvm::Value *This,
   1050                                          const CXXRecordDecl *ClassDecl,
   1051                                          const CXXRecordDecl *BaseClassDecl) {
   1052   llvm::Value *VTablePtr = CGF.GetVTablePtr(This, CGM.Int8PtrTy);
   1053   CharUnits VBaseOffsetOffset =
   1054       CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(ClassDecl,
   1055                                                                BaseClassDecl);
   1056 
   1057   llvm::Value *VBaseOffsetPtr =
   1058     CGF.Builder.CreateConstGEP1_64(VTablePtr, VBaseOffsetOffset.getQuantity(),
   1059                                    "vbase.offset.ptr");
   1060   VBaseOffsetPtr = CGF.Builder.CreateBitCast(VBaseOffsetPtr,
   1061                                              CGM.PtrDiffTy->getPointerTo());
   1062 
   1063   llvm::Value *VBaseOffset =
   1064     CGF.Builder.CreateLoad(VBaseOffsetPtr, "vbase.offset");
   1065 
   1066   return VBaseOffset;
   1067 }
   1068 
   1069 /// The generic ABI passes 'this', plus a VTT if it's initializing a
   1070 /// base subobject.
   1071 void
   1072 ItaniumCXXABI::BuildConstructorSignature(const CXXConstructorDecl *Ctor,
   1073                                          CXXCtorType Type, CanQualType &ResTy,
   1074                                          SmallVectorImpl<CanQualType> &ArgTys) {
   1075   ASTContext &Context = getContext();
   1076 
   1077   // All parameters are already in place except VTT, which goes after 'this'.
   1078   // These are Clang types, so we don't need to worry about sret yet.
   1079 
   1080   // Check if we need to add a VTT parameter (which has type void **).
   1081   if (Type == Ctor_Base && Ctor->getParent()->getNumVBases() != 0)
   1082     ArgTys.insert(ArgTys.begin() + 1,
   1083                   Context.getPointerType(Context.VoidPtrTy));
   1084 }
   1085 
   1086 void ItaniumCXXABI::EmitCXXConstructors(const CXXConstructorDecl *D) {
   1087   // Just make sure we're in sync with TargetCXXABI.
   1088   assert(CGM.getTarget().getCXXABI().hasConstructorVariants());
   1089 
   1090   // The constructor used for constructing this as a base class;
   1091   // ignores virtual bases.
   1092   CGM.EmitGlobal(GlobalDecl(D, Ctor_Base));
   1093 
   1094   // The constructor used for constructing this as a complete class;
   1095   // constucts the virtual bases, then calls the base constructor.
   1096   if (!D->getParent()->isAbstract()) {
   1097     // We don't need to emit the complete ctor if the class is abstract.
   1098     CGM.EmitGlobal(GlobalDecl(D, Ctor_Complete));
   1099   }
   1100 }
   1101 
   1102 /// The generic ABI passes 'this', plus a VTT if it's destroying a
   1103 /// base subobject.
   1104 void ItaniumCXXABI::BuildDestructorSignature(const CXXDestructorDecl *Dtor,
   1105                                              CXXDtorType Type,
   1106                                              CanQualType &ResTy,
   1107                                 SmallVectorImpl<CanQualType> &ArgTys) {
   1108   ASTContext &Context = getContext();
   1109 
   1110   // 'this' parameter is already there, as well as 'this' return if
   1111   // HasThisReturn(GlobalDecl(Dtor, Type)) is true
   1112 
   1113   // Check if we need to add a VTT parameter (which has type void **).
   1114   if (Type == Dtor_Base && Dtor->getParent()->getNumVBases() != 0)
   1115     ArgTys.push_back(Context.getPointerType(Context.VoidPtrTy));
   1116 }
   1117 
   1118 void ItaniumCXXABI::EmitCXXDestructors(const CXXDestructorDecl *D) {
   1119   // The destructor used for destructing this as a base class; ignores
   1120   // virtual bases.
   1121   CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
   1122 
   1123   // The destructor used for destructing this as a most-derived class;
   1124   // call the base destructor and then destructs any virtual bases.
   1125   CGM.EmitGlobal(GlobalDecl(D, Dtor_Complete));
   1126 
   1127   // The destructor in a virtual table is always a 'deleting'
   1128   // destructor, which calls the complete destructor and then uses the
   1129   // appropriate operator delete.
   1130   if (D->isVirtual())
   1131     CGM.EmitGlobal(GlobalDecl(D, Dtor_Deleting));
   1132 }
   1133 
   1134 void ItaniumCXXABI::addImplicitStructorParams(CodeGenFunction &CGF,
   1135                                               QualType &ResTy,
   1136                                               FunctionArgList &Params) {
   1137   const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
   1138   assert(isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD));
   1139 
   1140   // Check if we need a VTT parameter as well.
   1141   if (NeedsVTTParameter(CGF.CurGD)) {
   1142     ASTContext &Context = getContext();
   1143 
   1144     // FIXME: avoid the fake decl
   1145     QualType T = Context.getPointerType(Context.VoidPtrTy);
   1146     ImplicitParamDecl *VTTDecl
   1147       = ImplicitParamDecl::Create(Context, nullptr, MD->getLocation(),
   1148                                   &Context.Idents.get("vtt"), T);
   1149     Params.insert(Params.begin() + 1, VTTDecl);
   1150     getStructorImplicitParamDecl(CGF) = VTTDecl;
   1151   }
   1152 }
   1153 
   1154 void ItaniumCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
   1155   /// Initialize the 'this' slot.
   1156   EmitThisParam(CGF);
   1157 
   1158   /// Initialize the 'vtt' slot if needed.
   1159   if (getStructorImplicitParamDecl(CGF)) {
   1160     getStructorImplicitParamValue(CGF) = CGF.Builder.CreateLoad(
   1161         CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), "vtt");
   1162   }
   1163 
   1164   /// If this is a function that the ABI specifies returns 'this', initialize
   1165   /// the return slot to 'this' at the start of the function.
   1166   ///
   1167   /// Unlike the setting of return types, this is done within the ABI
   1168   /// implementation instead of by clients of CGCXXABI because:
   1169   /// 1) getThisValue is currently protected
   1170   /// 2) in theory, an ABI could implement 'this' returns some other way;
   1171   ///    HasThisReturn only specifies a contract, not the implementation
   1172   if (HasThisReturn(CGF.CurGD))
   1173     CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue);
   1174 }
   1175 
   1176 unsigned ItaniumCXXABI::addImplicitConstructorArgs(
   1177     CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type,
   1178     bool ForVirtualBase, bool Delegating, CallArgList &Args) {
   1179   if (!NeedsVTTParameter(GlobalDecl(D, Type)))
   1180     return 0;
   1181 
   1182   // Insert the implicit 'vtt' argument as the second argument.
   1183   llvm::Value *VTT =
   1184       CGF.GetVTTParameter(GlobalDecl(D, Type), ForVirtualBase, Delegating);
   1185   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
   1186   Args.insert(Args.begin() + 1,
   1187               CallArg(RValue::get(VTT), VTTTy, /*needscopy=*/false));
   1188   return 1;  // Added one arg.
   1189 }
   1190 
   1191 void ItaniumCXXABI::EmitDestructorCall(CodeGenFunction &CGF,
   1192                                        const CXXDestructorDecl *DD,
   1193                                        CXXDtorType Type, bool ForVirtualBase,
   1194                                        bool Delegating, llvm::Value *This) {
   1195   GlobalDecl GD(DD, Type);
   1196   llvm::Value *VTT = CGF.GetVTTParameter(GD, ForVirtualBase, Delegating);
   1197   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
   1198 
   1199   llvm::Value *Callee = nullptr;
   1200   if (getContext().getLangOpts().AppleKext)
   1201     Callee = CGF.BuildAppleKextVirtualDestructorCall(DD, Type, DD->getParent());
   1202 
   1203   if (!Callee)
   1204     Callee = CGM.GetAddrOfCXXDestructor(DD, Type);
   1205 
   1206   // FIXME: Provide a source location here.
   1207   CGF.EmitCXXMemberCall(DD, SourceLocation(), Callee, ReturnValueSlot(), This,
   1208                         VTT, VTTTy, nullptr, nullptr);
   1209 }
   1210 
   1211 void ItaniumCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
   1212                                           const CXXRecordDecl *RD) {
   1213   llvm::GlobalVariable *VTable = getAddrOfVTable(RD, CharUnits());
   1214   if (VTable->hasInitializer())
   1215     return;
   1216 
   1217   ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
   1218   const VTableLayout &VTLayout = VTContext.getVTableLayout(RD);
   1219   llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
   1220   llvm::Constant *RTTI =
   1221       CGM.GetAddrOfRTTIDescriptor(CGM.getContext().getTagDeclType(RD));
   1222 
   1223   // Create and set the initializer.
   1224   llvm::Constant *Init = CGVT.CreateVTableInitializer(
   1225       RD, VTLayout.vtable_component_begin(), VTLayout.getNumVTableComponents(),
   1226       VTLayout.vtable_thunk_begin(), VTLayout.getNumVTableThunks(), RTTI);
   1227   VTable->setInitializer(Init);
   1228 
   1229   // Set the correct linkage.
   1230   VTable->setLinkage(Linkage);
   1231 
   1232   // Set the right visibility.
   1233   CGM.setGlobalVisibility(VTable, RD);
   1234 
   1235   // If this is the magic class __cxxabiv1::__fundamental_type_info,
   1236   // we will emit the typeinfo for the fundamental types. This is the
   1237   // same behaviour as GCC.
   1238   const DeclContext *DC = RD->getDeclContext();
   1239   if (RD->getIdentifier() &&
   1240       RD->getIdentifier()->isStr("__fundamental_type_info") &&
   1241       isa<NamespaceDecl>(DC) && cast<NamespaceDecl>(DC)->getIdentifier() &&
   1242       cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__cxxabiv1") &&
   1243       DC->getParent()->isTranslationUnit())
   1244     EmitFundamentalRTTIDescriptors();
   1245 }
   1246 
   1247 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructor(
   1248     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
   1249     const CXXRecordDecl *NearestVBase, bool &NeedsVirtualOffset) {
   1250   bool NeedsVTTParam = CGM.getCXXABI().NeedsVTTParameter(CGF.CurGD);
   1251   NeedsVirtualOffset = (NeedsVTTParam && NearestVBase);
   1252 
   1253   llvm::Value *VTableAddressPoint;
   1254   if (NeedsVTTParam && (Base.getBase()->getNumVBases() || NearestVBase)) {
   1255     // Get the secondary vpointer index.
   1256     uint64_t VirtualPointerIndex =
   1257         CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base);
   1258 
   1259     /// Load the VTT.
   1260     llvm::Value *VTT = CGF.LoadCXXVTT();
   1261     if (VirtualPointerIndex)
   1262       VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex);
   1263 
   1264     // And load the address point from the VTT.
   1265     VTableAddressPoint = CGF.Builder.CreateLoad(VTT);
   1266   } else {
   1267     llvm::Constant *VTable =
   1268         CGM.getCXXABI().getAddrOfVTable(VTableClass, CharUnits());
   1269     uint64_t AddressPoint = CGM.getItaniumVTableContext()
   1270                                 .getVTableLayout(VTableClass)
   1271                                 .getAddressPoint(Base);
   1272     VTableAddressPoint =
   1273         CGF.Builder.CreateConstInBoundsGEP2_64(VTable, 0, AddressPoint);
   1274   }
   1275 
   1276   return VTableAddressPoint;
   1277 }
   1278 
   1279 llvm::Constant *ItaniumCXXABI::getVTableAddressPointForConstExpr(
   1280     BaseSubobject Base, const CXXRecordDecl *VTableClass) {
   1281   llvm::Constant *VTable = getAddrOfVTable(VTableClass, CharUnits());
   1282 
   1283   // Find the appropriate vtable within the vtable group.
   1284   uint64_t AddressPoint = CGM.getItaniumVTableContext()
   1285                               .getVTableLayout(VTableClass)
   1286                               .getAddressPoint(Base);
   1287   llvm::Value *Indices[] = {
   1288     llvm::ConstantInt::get(CGM.Int64Ty, 0),
   1289     llvm::ConstantInt::get(CGM.Int64Ty, AddressPoint)
   1290   };
   1291 
   1292   return llvm::ConstantExpr::getInBoundsGetElementPtr(VTable, Indices);
   1293 }
   1294 
   1295 llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
   1296                                                      CharUnits VPtrOffset) {
   1297   assert(VPtrOffset.isZero() && "Itanium ABI only supports zero vptr offsets");
   1298 
   1299   llvm::GlobalVariable *&VTable = VTables[RD];
   1300   if (VTable)
   1301     return VTable;
   1302 
   1303   // Queue up this v-table for possible deferred emission.
   1304   CGM.addDeferredVTable(RD);
   1305 
   1306   SmallString<256> OutName;
   1307   llvm::raw_svector_ostream Out(OutName);
   1308   getMangleContext().mangleCXXVTable(RD, Out);
   1309   Out.flush();
   1310   StringRef Name = OutName.str();
   1311 
   1312   ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
   1313   llvm::ArrayType *ArrayType = llvm::ArrayType::get(
   1314       CGM.Int8PtrTy, VTContext.getVTableLayout(RD).getNumVTableComponents());
   1315 
   1316   VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
   1317       Name, ArrayType, llvm::GlobalValue::ExternalLinkage);
   1318   VTable->setUnnamedAddr(true);
   1319 
   1320   if (RD->hasAttr<DLLImportAttr>())
   1321     VTable->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
   1322   else if (RD->hasAttr<DLLExportAttr>())
   1323     VTable->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
   1324 
   1325   return VTable;
   1326 }
   1327 
   1328 llvm::Value *ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
   1329                                                       GlobalDecl GD,
   1330                                                       llvm::Value *This,
   1331                                                       llvm::Type *Ty) {
   1332   GD = GD.getCanonicalDecl();
   1333   Ty = Ty->getPointerTo()->getPointerTo();
   1334   llvm::Value *VTable = CGF.GetVTablePtr(This, Ty);
   1335 
   1336   uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
   1337   llvm::Value *VFuncPtr =
   1338       CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
   1339   return CGF.Builder.CreateLoad(VFuncPtr);
   1340 }
   1341 
   1342 void ItaniumCXXABI::EmitVirtualDestructorCall(CodeGenFunction &CGF,
   1343                                               const CXXDestructorDecl *Dtor,
   1344                                               CXXDtorType DtorType,
   1345                                               SourceLocation CallLoc,
   1346                                               llvm::Value *This) {
   1347   assert(DtorType == Dtor_Deleting || DtorType == Dtor_Complete);
   1348 
   1349   const CGFunctionInfo *FInfo
   1350     = &CGM.getTypes().arrangeCXXDestructor(Dtor, DtorType);
   1351   llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
   1352   llvm::Value *Callee =
   1353       getVirtualFunctionPointer(CGF, GlobalDecl(Dtor, DtorType), This, Ty);
   1354 
   1355   CGF.EmitCXXMemberCall(Dtor, CallLoc, Callee, ReturnValueSlot(), This,
   1356                         /*ImplicitParam=*/nullptr, QualType(), nullptr,
   1357                         nullptr);
   1358 }
   1359 
   1360 void ItaniumCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
   1361   CodeGenVTables &VTables = CGM.getVTables();
   1362   llvm::GlobalVariable *VTT = VTables.GetAddrOfVTT(RD);
   1363   VTables.EmitVTTDefinition(VTT, CGM.getVTableLinkage(RD), RD);
   1364 }
   1365 
   1366 static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF,
   1367                                           llvm::Value *Ptr,
   1368                                           int64_t NonVirtualAdjustment,
   1369                                           int64_t VirtualAdjustment,
   1370                                           bool IsReturnAdjustment) {
   1371   if (!NonVirtualAdjustment && !VirtualAdjustment)
   1372     return Ptr;
   1373 
   1374   llvm::Type *Int8PtrTy = CGF.Int8PtrTy;
   1375   llvm::Value *V = CGF.Builder.CreateBitCast(Ptr, Int8PtrTy);
   1376 
   1377   if (NonVirtualAdjustment && !IsReturnAdjustment) {
   1378     // Perform the non-virtual adjustment for a base-to-derived cast.
   1379     V = CGF.Builder.CreateConstInBoundsGEP1_64(V, NonVirtualAdjustment);
   1380   }
   1381 
   1382   if (VirtualAdjustment) {
   1383     llvm::Type *PtrDiffTy =
   1384         CGF.ConvertType(CGF.getContext().getPointerDiffType());
   1385 
   1386     // Perform the virtual adjustment.
   1387     llvm::Value *VTablePtrPtr =
   1388         CGF.Builder.CreateBitCast(V, Int8PtrTy->getPointerTo());
   1389 
   1390     llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr);
   1391 
   1392     llvm::Value *OffsetPtr =
   1393         CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment);
   1394 
   1395     OffsetPtr = CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo());
   1396 
   1397     // Load the adjustment offset from the vtable.
   1398     llvm::Value *Offset = CGF.Builder.CreateLoad(OffsetPtr);
   1399 
   1400     // Adjust our pointer.
   1401     V = CGF.Builder.CreateInBoundsGEP(V, Offset);
   1402   }
   1403 
   1404   if (NonVirtualAdjustment && IsReturnAdjustment) {
   1405     // Perform the non-virtual adjustment for a derived-to-base cast.
   1406     V = CGF.Builder.CreateConstInBoundsGEP1_64(V, NonVirtualAdjustment);
   1407   }
   1408 
   1409   // Cast back to the original type.
   1410   return CGF.Builder.CreateBitCast(V, Ptr->getType());
   1411 }
   1412 
   1413 llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF,
   1414                                                   llvm::Value *This,
   1415                                                   const ThisAdjustment &TA) {
   1416   return performTypeAdjustment(CGF, This, TA.NonVirtual,
   1417                                TA.Virtual.Itanium.VCallOffsetOffset,
   1418                                /*IsReturnAdjustment=*/false);
   1419 }
   1420 
   1421 llvm::Value *
   1422 ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, llvm::Value *Ret,
   1423                                        const ReturnAdjustment &RA) {
   1424   return performTypeAdjustment(CGF, Ret, RA.NonVirtual,
   1425                                RA.Virtual.Itanium.VBaseOffsetOffset,
   1426                                /*IsReturnAdjustment=*/true);
   1427 }
   1428 
   1429 void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF,
   1430                                     RValue RV, QualType ResultType) {
   1431   if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl()))
   1432     return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType);
   1433 
   1434   // Destructor thunks in the ARM ABI have indeterminate results.
   1435   llvm::Type *T =
   1436     cast<llvm::PointerType>(CGF.ReturnValue->getType())->getElementType();
   1437   RValue Undef = RValue::get(llvm::UndefValue::get(T));
   1438   return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType);
   1439 }
   1440 
   1441 /************************** Array allocation cookies **************************/
   1442 
   1443 CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {
   1444   // The array cookie is a size_t; pad that up to the element alignment.
   1445   // The cookie is actually right-justified in that space.
   1446   return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),
   1447                   CGM.getContext().getTypeAlignInChars(elementType));
   1448 }
   1449 
   1450 llvm::Value *ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
   1451                                                   llvm::Value *NewPtr,
   1452                                                   llvm::Value *NumElements,
   1453                                                   const CXXNewExpr *expr,
   1454                                                   QualType ElementType) {
   1455   assert(requiresArrayCookie(expr));
   1456 
   1457   unsigned AS = NewPtr->getType()->getPointerAddressSpace();
   1458 
   1459   ASTContext &Ctx = getContext();
   1460   QualType SizeTy = Ctx.getSizeType();
   1461   CharUnits SizeSize = Ctx.getTypeSizeInChars(SizeTy);
   1462 
   1463   // The size of the cookie.
   1464   CharUnits CookieSize =
   1465     std::max(SizeSize, Ctx.getTypeAlignInChars(ElementType));
   1466   assert(CookieSize == getArrayCookieSizeImpl(ElementType));
   1467 
   1468   // Compute an offset to the cookie.
   1469   llvm::Value *CookiePtr = NewPtr;
   1470   CharUnits CookieOffset = CookieSize - SizeSize;
   1471   if (!CookieOffset.isZero())
   1472     CookiePtr = CGF.Builder.CreateConstInBoundsGEP1_64(CookiePtr,
   1473                                                  CookieOffset.getQuantity());
   1474 
   1475   // Write the number of elements into the appropriate slot.
   1476   llvm::Value *NumElementsPtr
   1477     = CGF.Builder.CreateBitCast(CookiePtr,
   1478                                 CGF.ConvertType(SizeTy)->getPointerTo(AS));
   1479   CGF.Builder.CreateStore(NumElements, NumElementsPtr);
   1480 
   1481   // Finally, compute a pointer to the actual data buffer by skipping
   1482   // over the cookie completely.
   1483   return CGF.Builder.CreateConstInBoundsGEP1_64(NewPtr,
   1484                                                 CookieSize.getQuantity());
   1485 }
   1486 
   1487 llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
   1488                                                 llvm::Value *allocPtr,
   1489                                                 CharUnits cookieSize) {
   1490   // The element size is right-justified in the cookie.
   1491   llvm::Value *numElementsPtr = allocPtr;
   1492   CharUnits numElementsOffset =
   1493     cookieSize - CharUnits::fromQuantity(CGF.SizeSizeInBytes);
   1494   if (!numElementsOffset.isZero())
   1495     numElementsPtr =
   1496       CGF.Builder.CreateConstInBoundsGEP1_64(numElementsPtr,
   1497                                              numElementsOffset.getQuantity());
   1498 
   1499   unsigned AS = allocPtr->getType()->getPointerAddressSpace();
   1500   numElementsPtr =
   1501     CGF.Builder.CreateBitCast(numElementsPtr, CGF.SizeTy->getPointerTo(AS));
   1502   return CGF.Builder.CreateLoad(numElementsPtr);
   1503 }
   1504 
   1505 CharUnits ARMCXXABI::getArrayCookieSizeImpl(QualType elementType) {
   1506   // ARM says that the cookie is always:
   1507   //   struct array_cookie {
   1508   //     std::size_t element_size; // element_size != 0
   1509   //     std::size_t element_count;
   1510   //   };
   1511   // But the base ABI doesn't give anything an alignment greater than
   1512   // 8, so we can dismiss this as typical ABI-author blindness to
   1513   // actual language complexity and round up to the element alignment.
   1514   return std::max(CharUnits::fromQuantity(2 * CGM.SizeSizeInBytes),
   1515                   CGM.getContext().getTypeAlignInChars(elementType));
   1516 }
   1517 
   1518 llvm::Value *ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
   1519                                               llvm::Value *newPtr,
   1520                                               llvm::Value *numElements,
   1521                                               const CXXNewExpr *expr,
   1522                                               QualType elementType) {
   1523   assert(requiresArrayCookie(expr));
   1524 
   1525   // NewPtr is a char*, but we generalize to arbitrary addrspaces.
   1526   unsigned AS = newPtr->getType()->getPointerAddressSpace();
   1527 
   1528   // The cookie is always at the start of the buffer.
   1529   llvm::Value *cookie = newPtr;
   1530 
   1531   // The first element is the element size.
   1532   cookie = CGF.Builder.CreateBitCast(cookie, CGF.SizeTy->getPointerTo(AS));
   1533   llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy,
   1534                  getContext().getTypeSizeInChars(elementType).getQuantity());
   1535   CGF.Builder.CreateStore(elementSize, cookie);
   1536 
   1537   // The second element is the element count.
   1538   cookie = CGF.Builder.CreateConstInBoundsGEP1_32(cookie, 1);
   1539   CGF.Builder.CreateStore(numElements, cookie);
   1540 
   1541   // Finally, compute a pointer to the actual data buffer by skipping
   1542   // over the cookie completely.
   1543   CharUnits cookieSize = ARMCXXABI::getArrayCookieSizeImpl(elementType);
   1544   return CGF.Builder.CreateConstInBoundsGEP1_64(newPtr,
   1545                                                 cookieSize.getQuantity());
   1546 }
   1547 
   1548 llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
   1549                                             llvm::Value *allocPtr,
   1550                                             CharUnits cookieSize) {
   1551   // The number of elements is at offset sizeof(size_t) relative to
   1552   // the allocated pointer.
   1553   llvm::Value *numElementsPtr
   1554     = CGF.Builder.CreateConstInBoundsGEP1_64(allocPtr, CGF.SizeSizeInBytes);
   1555 
   1556   unsigned AS = allocPtr->getType()->getPointerAddressSpace();
   1557   numElementsPtr =
   1558     CGF.Builder.CreateBitCast(numElementsPtr, CGF.SizeTy->getPointerTo(AS));
   1559   return CGF.Builder.CreateLoad(numElementsPtr);
   1560 }
   1561 
   1562 /*********************** Static local initialization **************************/
   1563 
   1564 static llvm::Constant *getGuardAcquireFn(CodeGenModule &CGM,
   1565                                          llvm::PointerType *GuardPtrTy) {
   1566   // int __cxa_guard_acquire(__guard *guard_object);
   1567   llvm::FunctionType *FTy =
   1568     llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
   1569                             GuardPtrTy, /*isVarArg=*/false);
   1570   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_acquire",
   1571                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
   1572                                               llvm::AttributeSet::FunctionIndex,
   1573                                                  llvm::Attribute::NoUnwind));
   1574 }
   1575 
   1576 static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
   1577                                          llvm::PointerType *GuardPtrTy) {
   1578   // void __cxa_guard_release(__guard *guard_object);
   1579   llvm::FunctionType *FTy =
   1580     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
   1581   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_release",
   1582                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
   1583                                               llvm::AttributeSet::FunctionIndex,
   1584                                                  llvm::Attribute::NoUnwind));
   1585 }
   1586 
   1587 static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
   1588                                        llvm::PointerType *GuardPtrTy) {
   1589   // void __cxa_guard_abort(__guard *guard_object);
   1590   llvm::FunctionType *FTy =
   1591     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
   1592   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_abort",
   1593                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
   1594                                               llvm::AttributeSet::FunctionIndex,
   1595                                                  llvm::Attribute::NoUnwind));
   1596 }
   1597 
   1598 namespace {
   1599   struct CallGuardAbort : EHScopeStack::Cleanup {
   1600     llvm::GlobalVariable *Guard;
   1601     CallGuardAbort(llvm::GlobalVariable *Guard) : Guard(Guard) {}
   1602 
   1603     void Emit(CodeGenFunction &CGF, Flags flags) override {
   1604       CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()),
   1605                                   Guard);
   1606     }
   1607   };
   1608 }
   1609 
   1610 /// The ARM code here follows the Itanium code closely enough that we
   1611 /// just special-case it at particular places.
   1612 void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
   1613                                     const VarDecl &D,
   1614                                     llvm::GlobalVariable *var,
   1615                                     bool shouldPerformInit) {
   1616   CGBuilderTy &Builder = CGF.Builder;
   1617 
   1618   // We only need to use thread-safe statics for local non-TLS variables;
   1619   // global initialization is always single-threaded.
   1620   bool threadsafe = getContext().getLangOpts().ThreadsafeStatics &&
   1621                     D.isLocalVarDecl() && !D.getTLSKind();
   1622 
   1623   // If we have a global variable with internal linkage and thread-safe statics
   1624   // are disabled, we can just let the guard variable be of type i8.
   1625   bool useInt8GuardVariable = !threadsafe && var->hasInternalLinkage();
   1626 
   1627   llvm::IntegerType *guardTy;
   1628   if (useInt8GuardVariable) {
   1629     guardTy = CGF.Int8Ty;
   1630   } else {
   1631     // Guard variables are 64 bits in the generic ABI and size width on ARM
   1632     // (i.e. 32-bit on AArch32, 64-bit on AArch64).
   1633     guardTy = (UseARMGuardVarABI ? CGF.SizeTy : CGF.Int64Ty);
   1634   }
   1635   llvm::PointerType *guardPtrTy = guardTy->getPointerTo();
   1636 
   1637   // Create the guard variable if we don't already have it (as we
   1638   // might if we're double-emitting this function body).
   1639   llvm::GlobalVariable *guard = CGM.getStaticLocalDeclGuardAddress(&D);
   1640   if (!guard) {
   1641     // Mangle the name for the guard.
   1642     SmallString<256> guardName;
   1643     {
   1644       llvm::raw_svector_ostream out(guardName);
   1645       getMangleContext().mangleStaticGuardVariable(&D, out);
   1646       out.flush();
   1647     }
   1648 
   1649     // Create the guard variable with a zero-initializer.
   1650     // Just absorb linkage and visibility from the guarded variable.
   1651     guard = new llvm::GlobalVariable(CGM.getModule(), guardTy,
   1652                                      false, var->getLinkage(),
   1653                                      llvm::ConstantInt::get(guardTy, 0),
   1654                                      guardName.str());
   1655     guard->setVisibility(var->getVisibility());
   1656     // If the variable is thread-local, so is its guard variable.
   1657     guard->setThreadLocalMode(var->getThreadLocalMode());
   1658 
   1659     CGM.setStaticLocalDeclGuardAddress(&D, guard);
   1660   }
   1661 
   1662   // Test whether the variable has completed initialization.
   1663   //
   1664   // Itanium C++ ABI 3.3.2:
   1665   //   The following is pseudo-code showing how these functions can be used:
   1666   //     if (obj_guard.first_byte == 0) {
   1667   //       if ( __cxa_guard_acquire (&obj_guard) ) {
   1668   //         try {
   1669   //           ... initialize the object ...;
   1670   //         } catch (...) {
   1671   //            __cxa_guard_abort (&obj_guard);
   1672   //            throw;
   1673   //         }
   1674   //         ... queue object destructor with __cxa_atexit() ...;
   1675   //         __cxa_guard_release (&obj_guard);
   1676   //       }
   1677   //     }
   1678 
   1679   // Load the first byte of the guard variable.
   1680   llvm::LoadInst *LI =
   1681       Builder.CreateLoad(Builder.CreateBitCast(guard, CGM.Int8PtrTy));
   1682   LI->setAlignment(1);
   1683 
   1684   // Itanium ABI:
   1685   //   An implementation supporting thread-safety on multiprocessor
   1686   //   systems must also guarantee that references to the initialized
   1687   //   object do not occur before the load of the initialization flag.
   1688   //
   1689   // In LLVM, we do this by marking the load Acquire.
   1690   if (threadsafe)
   1691     LI->setAtomic(llvm::Acquire);
   1692 
   1693   // For ARM, we should only check the first bit, rather than the entire byte:
   1694   //
   1695   // ARM C++ ABI 3.2.3.1:
   1696   //   To support the potential use of initialization guard variables
   1697   //   as semaphores that are the target of ARM SWP and LDREX/STREX
   1698   //   synchronizing instructions we define a static initialization
   1699   //   guard variable to be a 4-byte aligned, 4-byte word with the
   1700   //   following inline access protocol.
   1701   //     #define INITIALIZED 1
   1702   //     if ((obj_guard & INITIALIZED) != INITIALIZED) {
   1703   //       if (__cxa_guard_acquire(&obj_guard))
   1704   //         ...
   1705   //     }
   1706   //
   1707   // and similarly for ARM64:
   1708   //
   1709   // ARM64 C++ ABI 3.2.2:
   1710   //   This ABI instead only specifies the value bit 0 of the static guard
   1711   //   variable; all other bits are platform defined. Bit 0 shall be 0 when the
   1712   //   variable is not initialized and 1 when it is.
   1713   llvm::Value *V =
   1714       (UseARMGuardVarABI && !useInt8GuardVariable)
   1715           ? Builder.CreateAnd(LI, llvm::ConstantInt::get(CGM.Int8Ty, 1))
   1716           : LI;
   1717   llvm::Value *isInitialized = Builder.CreateIsNull(V, "guard.uninitialized");
   1718 
   1719   llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check");
   1720   llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
   1721 
   1722   // Check if the first byte of the guard variable is zero.
   1723   Builder.CreateCondBr(isInitialized, InitCheckBlock, EndBlock);
   1724 
   1725   CGF.EmitBlock(InitCheckBlock);
   1726 
   1727   // Variables used when coping with thread-safe statics and exceptions.
   1728   if (threadsafe) {
   1729     // Call __cxa_guard_acquire.
   1730     llvm::Value *V
   1731       = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard);
   1732 
   1733     llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
   1734 
   1735     Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
   1736                          InitBlock, EndBlock);
   1737 
   1738     // Call __cxa_guard_abort along the exceptional edge.
   1739     CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard);
   1740 
   1741     CGF.EmitBlock(InitBlock);
   1742   }
   1743 
   1744   // Emit the initializer and add a global destructor if appropriate.
   1745   CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit);
   1746 
   1747   if (threadsafe) {
   1748     // Pop the guard-abort cleanup if we pushed one.
   1749     CGF.PopCleanupBlock();
   1750 
   1751     // Call __cxa_guard_release.  This cannot throw.
   1752     CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy), guard);
   1753   } else {
   1754     Builder.CreateStore(llvm::ConstantInt::get(guardTy, 1), guard);
   1755   }
   1756 
   1757   CGF.EmitBlock(EndBlock);
   1758 }
   1759 
   1760 /// Register a global destructor using __cxa_atexit.
   1761 static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
   1762                                         llvm::Constant *dtor,
   1763                                         llvm::Constant *addr,
   1764                                         bool TLS) {
   1765   const char *Name = "__cxa_atexit";
   1766   if (TLS) {
   1767     const llvm::Triple &T = CGF.getTarget().getTriple();
   1768     Name = T.isMacOSX() ?  "_tlv_atexit" : "__cxa_thread_atexit";
   1769   }
   1770 
   1771   // We're assuming that the destructor function is something we can
   1772   // reasonably call with the default CC.  Go ahead and cast it to the
   1773   // right prototype.
   1774   llvm::Type *dtorTy =
   1775     llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo();
   1776 
   1777   // extern "C" int __cxa_atexit(void (*f)(void *), void *p, void *d);
   1778   llvm::Type *paramTys[] = { dtorTy, CGF.Int8PtrTy, CGF.Int8PtrTy };
   1779   llvm::FunctionType *atexitTy =
   1780     llvm::FunctionType::get(CGF.IntTy, paramTys, false);
   1781 
   1782   // Fetch the actual function.
   1783   llvm::Constant *atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name);
   1784   if (llvm::Function *fn = dyn_cast<llvm::Function>(atexit))
   1785     fn->setDoesNotThrow();
   1786 
   1787   // Create a variable that binds the atexit to this shared object.
   1788   llvm::Constant *handle =
   1789     CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle");
   1790 
   1791   llvm::Value *args[] = {
   1792     llvm::ConstantExpr::getBitCast(dtor, dtorTy),
   1793     llvm::ConstantExpr::getBitCast(addr, CGF.Int8PtrTy),
   1794     handle
   1795   };
   1796   CGF.EmitNounwindRuntimeCall(atexit, args);
   1797 }
   1798 
   1799 /// Register a global destructor as best as we know how.
   1800 void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF,
   1801                                        const VarDecl &D,
   1802                                        llvm::Constant *dtor,
   1803                                        llvm::Constant *addr) {
   1804   // Use __cxa_atexit if available.
   1805   if (CGM.getCodeGenOpts().CXAAtExit)
   1806     return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind());
   1807 
   1808   if (D.getTLSKind())
   1809     CGM.ErrorUnsupported(&D, "non-trivial TLS destruction");
   1810 
   1811   // In Apple kexts, we want to add a global destructor entry.
   1812   // FIXME: shouldn't this be guarded by some variable?
   1813   if (CGM.getLangOpts().AppleKext) {
   1814     // Generate a global destructor entry.
   1815     return CGM.AddCXXDtorEntry(dtor, addr);
   1816   }
   1817 
   1818   CGF.registerGlobalDtorWithAtExit(D, dtor, addr);
   1819 }
   1820 
   1821 /// Get the appropriate linkage for the wrapper function. This is essentially
   1822 /// the weak form of the variable's linkage; every translation unit which needs
   1823 /// the wrapper emits a copy, and we want the linker to merge them.
   1824 static llvm::GlobalValue::LinkageTypes
   1825 getThreadLocalWrapperLinkage(const VarDecl *VD, CodeGen::CodeGenModule &CGM) {
   1826   llvm::GlobalValue::LinkageTypes VarLinkage =
   1827       CGM.getLLVMLinkageVarDefinition(VD, /*isConstant=*/false);
   1828 
   1829   // For internal linkage variables, we don't need an external or weak wrapper.
   1830   if (llvm::GlobalValue::isLocalLinkage(VarLinkage))
   1831     return VarLinkage;
   1832 
   1833   // All accesses to the thread_local variable go through the thread wrapper.
   1834   // However, this means that we cannot allow the thread wrapper to get inlined
   1835   // into any functions.
   1836   if (VD->getTLSKind() == VarDecl::TLS_Dynamic &&
   1837       CGM.getTarget().getTriple().isMacOSX())
   1838     return llvm::GlobalValue::WeakAnyLinkage;
   1839   return llvm::GlobalValue::WeakODRLinkage;
   1840 }
   1841 
   1842 llvm::Function *
   1843 ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD,
   1844                                              llvm::GlobalVariable *Var) {
   1845   // Mangle the name for the thread_local wrapper function.
   1846   SmallString<256> WrapperName;
   1847   {
   1848     llvm::raw_svector_ostream Out(WrapperName);
   1849     getMangleContext().mangleItaniumThreadLocalWrapper(VD, Out);
   1850     Out.flush();
   1851   }
   1852 
   1853   if (llvm::Value *V = Var->getParent()->getNamedValue(WrapperName))
   1854     return cast<llvm::Function>(V);
   1855 
   1856   llvm::Type *RetTy = Var->getType();
   1857   if (VD->getType()->isReferenceType())
   1858     RetTy = RetTy->getPointerElementType();
   1859 
   1860   llvm::FunctionType *FnTy = llvm::FunctionType::get(RetTy, false);
   1861   llvm::Function *Wrapper =
   1862       llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM),
   1863                              WrapperName.str(), &CGM.getModule());
   1864   // Always resolve references to the wrapper at link time.
   1865   if (!Wrapper->hasLocalLinkage())
   1866     Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility);
   1867   return Wrapper;
   1868 }
   1869 
   1870 void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   1871     ArrayRef<std::pair<const VarDecl *, llvm::GlobalVariable *> > Decls,
   1872     llvm::Function *InitFunc) {
   1873   for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
   1874     const VarDecl *VD = Decls[I].first;
   1875     llvm::GlobalVariable *Var = Decls[I].second;
   1876 
   1877     // Mangle the name for the thread_local initialization function.
   1878     SmallString<256> InitFnName;
   1879     {
   1880       llvm::raw_svector_ostream Out(InitFnName);
   1881       getMangleContext().mangleItaniumThreadLocalInit(VD, Out);
   1882       Out.flush();
   1883     }
   1884 
   1885     // If we have a definition for the variable, emit the initialization
   1886     // function as an alias to the global Init function (if any). Otherwise,
   1887     // produce a declaration of the initialization function.
   1888     llvm::GlobalValue *Init = nullptr;
   1889     bool InitIsInitFunc = false;
   1890     if (VD->hasDefinition()) {
   1891       InitIsInitFunc = true;
   1892       if (InitFunc)
   1893         Init = llvm::GlobalAlias::create(Var->getLinkage(), InitFnName.str(),
   1894                                          InitFunc);
   1895     } else {
   1896       // Emit a weak global function referring to the initialization function.
   1897       // This function will not exist if the TU defining the thread_local
   1898       // variable in question does not need any dynamic initialization for
   1899       // its thread_local variables.
   1900       llvm::FunctionType *FnTy = llvm::FunctionType::get(CGM.VoidTy, false);
   1901       Init = llvm::Function::Create(
   1902           FnTy, llvm::GlobalVariable::ExternalWeakLinkage, InitFnName.str(),
   1903           &CGM.getModule());
   1904     }
   1905 
   1906     if (Init)
   1907       Init->setVisibility(Var->getVisibility());
   1908 
   1909     llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Var);
   1910     llvm::LLVMContext &Context = CGM.getModule().getContext();
   1911     llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
   1912     CGBuilderTy Builder(Entry);
   1913     if (InitIsInitFunc) {
   1914       if (Init)
   1915         Builder.CreateCall(Init);
   1916     } else {
   1917       // Don't know whether we have an init function. Call it if it exists.
   1918       llvm::Value *Have = Builder.CreateIsNotNull(Init);
   1919       llvm::BasicBlock *InitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
   1920       llvm::BasicBlock *ExitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
   1921       Builder.CreateCondBr(Have, InitBB, ExitBB);
   1922 
   1923       Builder.SetInsertPoint(InitBB);
   1924       Builder.CreateCall(Init);
   1925       Builder.CreateBr(ExitBB);
   1926 
   1927       Builder.SetInsertPoint(ExitBB);
   1928     }
   1929 
   1930     // For a reference, the result of the wrapper function is a pointer to
   1931     // the referenced object.
   1932     llvm::Value *Val = Var;
   1933     if (VD->getType()->isReferenceType()) {
   1934       llvm::LoadInst *LI = Builder.CreateLoad(Val);
   1935       LI->setAlignment(CGM.getContext().getDeclAlign(VD).getQuantity());
   1936       Val = LI;
   1937     }
   1938 
   1939     Builder.CreateRet(Val);
   1940   }
   1941 }
   1942 
   1943 LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
   1944                                                    const VarDecl *VD,
   1945                                                    QualType LValType) {
   1946   QualType T = VD->getType();
   1947   llvm::Type *Ty = CGF.getTypes().ConvertTypeForMem(T);
   1948   llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD, Ty);
   1949   llvm::Function *Wrapper =
   1950       getOrCreateThreadLocalWrapper(VD, cast<llvm::GlobalVariable>(Val));
   1951 
   1952   Val = CGF.Builder.CreateCall(Wrapper);
   1953 
   1954   LValue LV;
   1955   if (VD->getType()->isReferenceType())
   1956     LV = CGF.MakeNaturalAlignAddrLValue(Val, LValType);
   1957   else
   1958     LV = CGF.MakeAddrLValue(Val, LValType, CGF.getContext().getDeclAlign(VD));
   1959   // FIXME: need setObjCGCLValueClass?
   1960   return LV;
   1961 }
   1962 
   1963 /// Return whether the given global decl needs a VTT parameter, which it does
   1964 /// if it's a base constructor or destructor with virtual bases.
   1965 bool ItaniumCXXABI::NeedsVTTParameter(GlobalDecl GD) {
   1966   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
   1967 
   1968   // We don't have any virtual bases, just return early.
   1969   if (!MD->getParent()->getNumVBases())
   1970     return false;
   1971 
   1972   // Check if we have a base constructor.
   1973   if (isa<CXXConstructorDecl>(MD) && GD.getCtorType() == Ctor_Base)
   1974     return true;
   1975 
   1976   // Check if we have a base destructor.
   1977   if (isa<CXXDestructorDecl>(MD) && GD.getDtorType() == Dtor_Base)
   1978     return true;
   1979 
   1980   return false;
   1981 }
   1982 
   1983 namespace {
   1984 class ItaniumRTTIBuilder {
   1985   CodeGenModule &CGM;  // Per-module state.
   1986   llvm::LLVMContext &VMContext;
   1987   const ItaniumCXXABI &CXXABI;  // Per-module state.
   1988 
   1989   /// Fields - The fields of the RTTI descriptor currently being built.
   1990   SmallVector<llvm::Constant *, 16> Fields;
   1991 
   1992   /// GetAddrOfTypeName - Returns the mangled type name of the given type.
   1993   llvm::GlobalVariable *
   1994   GetAddrOfTypeName(QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage);
   1995 
   1996   /// GetAddrOfExternalRTTIDescriptor - Returns the constant for the RTTI
   1997   /// descriptor of the given type.
   1998   llvm::Constant *GetAddrOfExternalRTTIDescriptor(QualType Ty);
   1999 
   2000   /// BuildVTablePointer - Build the vtable pointer for the given type.
   2001   void BuildVTablePointer(const Type *Ty);
   2002 
   2003   /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
   2004   /// inheritance, according to the Itanium C++ ABI, 2.9.5p6b.
   2005   void BuildSIClassTypeInfo(const CXXRecordDecl *RD);
   2006 
   2007   /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
   2008   /// classes with bases that do not satisfy the abi::__si_class_type_info
   2009   /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
   2010   void BuildVMIClassTypeInfo(const CXXRecordDecl *RD);
   2011 
   2012   /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct, used
   2013   /// for pointer types.
   2014   void BuildPointerTypeInfo(QualType PointeeTy);
   2015 
   2016   /// BuildObjCObjectTypeInfo - Build the appropriate kind of
   2017   /// type_info for an object type.
   2018   void BuildObjCObjectTypeInfo(const ObjCObjectType *Ty);
   2019 
   2020   /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
   2021   /// struct, used for member pointer types.
   2022   void BuildPointerToMemberTypeInfo(const MemberPointerType *Ty);
   2023 
   2024 public:
   2025   ItaniumRTTIBuilder(const ItaniumCXXABI &ABI)
   2026       : CGM(ABI.CGM), VMContext(CGM.getModule().getContext()), CXXABI(ABI) {}
   2027 
   2028   // Pointer type info flags.
   2029   enum {
   2030     /// PTI_Const - Type has const qualifier.
   2031     PTI_Const = 0x1,
   2032 
   2033     /// PTI_Volatile - Type has volatile qualifier.
   2034     PTI_Volatile = 0x2,
   2035 
   2036     /// PTI_Restrict - Type has restrict qualifier.
   2037     PTI_Restrict = 0x4,
   2038 
   2039     /// PTI_Incomplete - Type is incomplete.
   2040     PTI_Incomplete = 0x8,
   2041 
   2042     /// PTI_ContainingClassIncomplete - Containing class is incomplete.
   2043     /// (in pointer to member).
   2044     PTI_ContainingClassIncomplete = 0x10
   2045   };
   2046 
   2047   // VMI type info flags.
   2048   enum {
   2049     /// VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
   2050     VMI_NonDiamondRepeat = 0x1,
   2051 
   2052     /// VMI_DiamondShaped - Class is diamond shaped.
   2053     VMI_DiamondShaped = 0x2
   2054   };
   2055 
   2056   // Base class type info flags.
   2057   enum {
   2058     /// BCTI_Virtual - Base class is virtual.
   2059     BCTI_Virtual = 0x1,
   2060 
   2061     /// BCTI_Public - Base class is public.
   2062     BCTI_Public = 0x2
   2063   };
   2064 
   2065   /// BuildTypeInfo - Build the RTTI type info struct for the given type.
   2066   ///
   2067   /// \param Force - true to force the creation of this RTTI value
   2068   llvm::Constant *BuildTypeInfo(QualType Ty, bool Force = false);
   2069 };
   2070 }
   2071 
   2072 llvm::GlobalVariable *ItaniumRTTIBuilder::GetAddrOfTypeName(
   2073     QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage) {
   2074   SmallString<256> OutName;
   2075   llvm::raw_svector_ostream Out(OutName);
   2076   CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(Ty, Out);
   2077   Out.flush();
   2078   StringRef Name = OutName.str();
   2079 
   2080   // We know that the mangled name of the type starts at index 4 of the
   2081   // mangled name of the typename, so we can just index into it in order to
   2082   // get the mangled name of the type.
   2083   llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
   2084                                                             Name.substr(4));
   2085 
   2086   llvm::GlobalVariable *GV =
   2087     CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage);
   2088 
   2089   GV->setInitializer(Init);
   2090 
   2091   return GV;
   2092 }
   2093 
   2094 llvm::Constant *
   2095 ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
   2096   // Mangle the RTTI name.
   2097   SmallString<256> OutName;
   2098   llvm::raw_svector_ostream Out(OutName);
   2099   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
   2100   Out.flush();
   2101   StringRef Name = OutName.str();
   2102 
   2103   // Look for an existing global.
   2104   llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name);
   2105 
   2106   if (!GV) {
   2107     // Create a new global variable.
   2108     GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
   2109                                   /*Constant=*/true,
   2110                                   llvm::GlobalValue::ExternalLinkage, nullptr,
   2111                                   Name);
   2112   }
   2113 
   2114   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
   2115 }
   2116 
   2117 /// TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type
   2118 /// info for that type is defined in the standard library.
   2119 static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
   2120   // Itanium C++ ABI 2.9.2:
   2121   //   Basic type information (e.g. for "int", "bool", etc.) will be kept in
   2122   //   the run-time support library. Specifically, the run-time support
   2123   //   library should contain type_info objects for the types X, X* and
   2124   //   X const*, for every X in: void, std::nullptr_t, bool, wchar_t, char,
   2125   //   unsigned char, signed char, short, unsigned short, int, unsigned int,
   2126   //   long, unsigned long, long long, unsigned long long, float, double,
   2127   //   long double, char16_t, char32_t, and the IEEE 754r decimal and
   2128   //   half-precision floating point types.
   2129   switch (Ty->getKind()) {
   2130     case BuiltinType::Void:
   2131     case BuiltinType::NullPtr:
   2132     case BuiltinType::Bool:
   2133     case BuiltinType::WChar_S:
   2134     case BuiltinType::WChar_U:
   2135     case BuiltinType::Char_U:
   2136     case BuiltinType::Char_S:
   2137     case BuiltinType::UChar:
   2138     case BuiltinType::SChar:
   2139     case BuiltinType::Short:
   2140     case BuiltinType::UShort:
   2141     case BuiltinType::Int:
   2142     case BuiltinType::UInt:
   2143     case BuiltinType::Long:
   2144     case BuiltinType::ULong:
   2145     case BuiltinType::LongLong:
   2146     case BuiltinType::ULongLong:
   2147     case BuiltinType::Half:
   2148     case BuiltinType::Float:
   2149     case BuiltinType::Double:
   2150     case BuiltinType::LongDouble:
   2151     case BuiltinType::Char16:
   2152     case BuiltinType::Char32:
   2153     case BuiltinType::Int128:
   2154     case BuiltinType::UInt128:
   2155     case BuiltinType::OCLImage1d:
   2156     case BuiltinType::OCLImage1dArray:
   2157     case BuiltinType::OCLImage1dBuffer:
   2158     case BuiltinType::OCLImage2d:
   2159     case BuiltinType::OCLImage2dArray:
   2160     case BuiltinType::OCLImage3d:
   2161     case BuiltinType::OCLSampler:
   2162     case BuiltinType::OCLEvent:
   2163       return true;
   2164 
   2165     case BuiltinType::Dependent:
   2166 #define BUILTIN_TYPE(Id, SingletonId)
   2167 #define PLACEHOLDER_TYPE(Id, SingletonId) \
   2168     case BuiltinType::Id:
   2169 #include "clang/AST/BuiltinTypes.def"
   2170       llvm_unreachable("asking for RRTI for a placeholder type!");
   2171 
   2172     case BuiltinType::ObjCId:
   2173     case BuiltinType::ObjCClass:
   2174     case BuiltinType::ObjCSel:
   2175       llvm_unreachable("FIXME: Objective-C types are unsupported!");
   2176   }
   2177 
   2178   llvm_unreachable("Invalid BuiltinType Kind!");
   2179 }
   2180 
   2181 static bool TypeInfoIsInStandardLibrary(const PointerType *PointerTy) {
   2182   QualType PointeeTy = PointerTy->getPointeeType();
   2183   const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(PointeeTy);
   2184   if (!BuiltinTy)
   2185     return false;
   2186 
   2187   // Check the qualifiers.
   2188   Qualifiers Quals = PointeeTy.getQualifiers();
   2189   Quals.removeConst();
   2190 
   2191   if (!Quals.empty())
   2192     return false;
   2193 
   2194   return TypeInfoIsInStandardLibrary(BuiltinTy);
   2195 }
   2196 
   2197 /// IsStandardLibraryRTTIDescriptor - Returns whether the type
   2198 /// information for the given type exists in the standard library.
   2199 static bool IsStandardLibraryRTTIDescriptor(QualType Ty) {
   2200   // Type info for builtin types is defined in the standard library.
   2201   if (const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(Ty))
   2202     return TypeInfoIsInStandardLibrary(BuiltinTy);
   2203 
   2204   // Type info for some pointer types to builtin types is defined in the
   2205   // standard library.
   2206   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
   2207     return TypeInfoIsInStandardLibrary(PointerTy);
   2208 
   2209   return false;
   2210 }
   2211 
   2212 /// ShouldUseExternalRTTIDescriptor - Returns whether the type information for
   2213 /// the given type exists somewhere else, and that we should not emit the type
   2214 /// information in this translation unit.  Assumes that it is not a
   2215 /// standard-library type.
   2216 static bool ShouldUseExternalRTTIDescriptor(CodeGenModule &CGM,
   2217                                             QualType Ty) {
   2218   ASTContext &Context = CGM.getContext();
   2219 
   2220   // If RTTI is disabled, assume it might be disabled in the
   2221   // translation unit that defines any potential key function, too.
   2222   if (!Context.getLangOpts().RTTI) return false;
   2223 
   2224   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
   2225     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
   2226     if (!RD->hasDefinition())
   2227       return false;
   2228 
   2229     if (!RD->isDynamicClass())
   2230       return false;
   2231 
   2232     // FIXME: this may need to be reconsidered if the key function
   2233     // changes.
   2234     return CGM.getVTables().isVTableExternal(RD);
   2235   }
   2236 
   2237   return false;
   2238 }
   2239 
   2240 /// IsIncompleteClassType - Returns whether the given record type is incomplete.
   2241 static bool IsIncompleteClassType(const RecordType *RecordTy) {
   2242   return !RecordTy->getDecl()->isCompleteDefinition();
   2243 }
   2244 
   2245 /// ContainsIncompleteClassType - Returns whether the given type contains an
   2246 /// incomplete class type. This is true if
   2247 ///
   2248 ///   * The given type is an incomplete class type.
   2249 ///   * The given type is a pointer type whose pointee type contains an
   2250 ///     incomplete class type.
   2251 ///   * The given type is a member pointer type whose class is an incomplete
   2252 ///     class type.
   2253 ///   * The given type is a member pointer type whoise pointee type contains an
   2254 ///     incomplete class type.
   2255 /// is an indirect or direct pointer to an incomplete class type.
   2256 static bool ContainsIncompleteClassType(QualType Ty) {
   2257   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
   2258     if (IsIncompleteClassType(RecordTy))
   2259       return true;
   2260   }
   2261 
   2262   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
   2263     return ContainsIncompleteClassType(PointerTy->getPointeeType());
   2264 
   2265   if (const MemberPointerType *MemberPointerTy =
   2266       dyn_cast<MemberPointerType>(Ty)) {
   2267     // Check if the class type is incomplete.
   2268     const RecordType *ClassType = cast<RecordType>(MemberPointerTy->getClass());
   2269     if (IsIncompleteClassType(ClassType))
   2270       return true;
   2271 
   2272     return ContainsIncompleteClassType(MemberPointerTy->getPointeeType());
   2273   }
   2274 
   2275   return false;
   2276 }
   2277 
   2278 // CanUseSingleInheritance - Return whether the given record decl has a "single,
   2279 // public, non-virtual base at offset zero (i.e. the derived class is dynamic
   2280 // iff the base is)", according to Itanium C++ ABI, 2.95p6b.
   2281 static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
   2282   // Check the number of bases.
   2283   if (RD->getNumBases() != 1)
   2284     return false;
   2285 
   2286   // Get the base.
   2287   CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin();
   2288 
   2289   // Check that the base is not virtual.
   2290   if (Base->isVirtual())
   2291     return false;
   2292 
   2293   // Check that the base is public.
   2294   if (Base->getAccessSpecifier() != AS_public)
   2295     return false;
   2296 
   2297   // Check that the class is dynamic iff the base is.
   2298   const CXXRecordDecl *BaseDecl =
   2299     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   2300   if (!BaseDecl->isEmpty() &&
   2301       BaseDecl->isDynamicClass() != RD->isDynamicClass())
   2302     return false;
   2303 
   2304   return true;
   2305 }
   2306 
   2307 void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
   2308   // abi::__class_type_info.
   2309   static const char * const ClassTypeInfo =
   2310     "_ZTVN10__cxxabiv117__class_type_infoE";
   2311   // abi::__si_class_type_info.
   2312   static const char * const SIClassTypeInfo =
   2313     "_ZTVN10__cxxabiv120__si_class_type_infoE";
   2314   // abi::__vmi_class_type_info.
   2315   static const char * const VMIClassTypeInfo =
   2316     "_ZTVN10__cxxabiv121__vmi_class_type_infoE";
   2317 
   2318   const char *VTableName = nullptr;
   2319 
   2320   switch (Ty->getTypeClass()) {
   2321 #define TYPE(Class, Base)
   2322 #define ABSTRACT_TYPE(Class, Base)
   2323 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
   2324 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
   2325 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
   2326 #include "clang/AST/TypeNodes.def"
   2327     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
   2328 
   2329   case Type::LValueReference:
   2330   case Type::RValueReference:
   2331     llvm_unreachable("References shouldn't get here");
   2332 
   2333   case Type::Auto:
   2334     llvm_unreachable("Undeduced auto type shouldn't get here");
   2335 
   2336   case Type::Builtin:
   2337   // GCC treats vector and complex types as fundamental types.
   2338   case Type::Vector:
   2339   case Type::ExtVector:
   2340   case Type::Complex:
   2341   case Type::Atomic:
   2342   // FIXME: GCC treats block pointers as fundamental types?!
   2343   case Type::BlockPointer:
   2344     // abi::__fundamental_type_info.
   2345     VTableName = "_ZTVN10__cxxabiv123__fundamental_type_infoE";
   2346     break;
   2347 
   2348   case Type::ConstantArray:
   2349   case Type::IncompleteArray:
   2350   case Type::VariableArray:
   2351     // abi::__array_type_info.
   2352     VTableName = "_ZTVN10__cxxabiv117__array_type_infoE";
   2353     break;
   2354 
   2355   case Type::FunctionNoProto:
   2356   case Type::FunctionProto:
   2357     // abi::__function_type_info.
   2358     VTableName = "_ZTVN10__cxxabiv120__function_type_infoE";
   2359     break;
   2360 
   2361   case Type::Enum:
   2362     // abi::__enum_type_info.
   2363     VTableName = "_ZTVN10__cxxabiv116__enum_type_infoE";
   2364     break;
   2365 
   2366   case Type::Record: {
   2367     const CXXRecordDecl *RD =
   2368       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
   2369 
   2370     if (!RD->hasDefinition() || !RD->getNumBases()) {
   2371       VTableName = ClassTypeInfo;
   2372     } else if (CanUseSingleInheritance(RD)) {
   2373       VTableName = SIClassTypeInfo;
   2374     } else {
   2375       VTableName = VMIClassTypeInfo;
   2376     }
   2377 
   2378     break;
   2379   }
   2380 
   2381   case Type::ObjCObject:
   2382     // Ignore protocol qualifiers.
   2383     Ty = cast<ObjCObjectType>(Ty)->getBaseType().getTypePtr();
   2384 
   2385     // Handle id and Class.
   2386     if (isa<BuiltinType>(Ty)) {
   2387       VTableName = ClassTypeInfo;
   2388       break;
   2389     }
   2390 
   2391     assert(isa<ObjCInterfaceType>(Ty));
   2392     // Fall through.
   2393 
   2394   case Type::ObjCInterface:
   2395     if (cast<ObjCInterfaceType>(Ty)->getDecl()->getSuperClass()) {
   2396       VTableName = SIClassTypeInfo;
   2397     } else {
   2398       VTableName = ClassTypeInfo;
   2399     }
   2400     break;
   2401 
   2402   case Type::ObjCObjectPointer:
   2403   case Type::Pointer:
   2404     // abi::__pointer_type_info.
   2405     VTableName = "_ZTVN10__cxxabiv119__pointer_type_infoE";
   2406     break;
   2407 
   2408   case Type::MemberPointer:
   2409     // abi::__pointer_to_member_type_info.
   2410     VTableName = "_ZTVN10__cxxabiv129__pointer_to_member_type_infoE";
   2411     break;
   2412   }
   2413 
   2414   llvm::Constant *VTable =
   2415     CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
   2416 
   2417   llvm::Type *PtrDiffTy =
   2418     CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
   2419 
   2420   // The vtable address point is 2.
   2421   llvm::Constant *Two = llvm::ConstantInt::get(PtrDiffTy, 2);
   2422   VTable = llvm::ConstantExpr::getInBoundsGetElementPtr(VTable, Two);
   2423   VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
   2424 
   2425   Fields.push_back(VTable);
   2426 }
   2427 
   2428 /// \brief Return the linkage that the type info and type info name constants
   2429 /// should have for the given type.
   2430 static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
   2431                                                              QualType Ty) {
   2432   // Itanium C++ ABI 2.9.5p7:
   2433   //   In addition, it and all of the intermediate abi::__pointer_type_info
   2434   //   structs in the chain down to the abi::__class_type_info for the
   2435   //   incomplete class type must be prevented from resolving to the
   2436   //   corresponding type_info structs for the complete class type, possibly
   2437   //   by making them local static objects. Finally, a dummy class RTTI is
   2438   //   generated for the incomplete type that will not resolve to the final
   2439   //   complete class RTTI (because the latter need not exist), possibly by
   2440   //   making it a local static object.
   2441   if (ContainsIncompleteClassType(Ty))
   2442     return llvm::GlobalValue::InternalLinkage;
   2443 
   2444   switch (Ty->getLinkage()) {
   2445   case NoLinkage:
   2446   case InternalLinkage:
   2447   case UniqueExternalLinkage:
   2448     return llvm::GlobalValue::InternalLinkage;
   2449 
   2450   case VisibleNoLinkage:
   2451   case ExternalLinkage:
   2452     if (!CGM.getLangOpts().RTTI) {
   2453       // RTTI is not enabled, which means that this type info struct is going
   2454       // to be used for exception handling. Give it linkonce_odr linkage.
   2455       return llvm::GlobalValue::LinkOnceODRLinkage;
   2456     }
   2457 
   2458     if (const RecordType *Record = dyn_cast<RecordType>(Ty)) {
   2459       const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
   2460       if (RD->hasAttr<WeakAttr>())
   2461         return llvm::GlobalValue::WeakODRLinkage;
   2462       if (RD->isDynamicClass())
   2463         return CGM.getVTableLinkage(RD);
   2464     }
   2465 
   2466     return llvm::GlobalValue::LinkOnceODRLinkage;
   2467   }
   2468 
   2469   llvm_unreachable("Invalid linkage!");
   2470 }
   2471 
   2472 llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty, bool Force) {
   2473   // We want to operate on the canonical type.
   2474   Ty = CGM.getContext().getCanonicalType(Ty);
   2475 
   2476   // Check if we've already emitted an RTTI descriptor for this type.
   2477   SmallString<256> OutName;
   2478   llvm::raw_svector_ostream Out(OutName);
   2479   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
   2480   Out.flush();
   2481   StringRef Name = OutName.str();
   2482 
   2483   llvm::GlobalVariable *OldGV = CGM.getModule().getNamedGlobal(Name);
   2484   if (OldGV && !OldGV->isDeclaration()) {
   2485     assert(!OldGV->hasAvailableExternallyLinkage() &&
   2486            "available_externally typeinfos not yet implemented");
   2487 
   2488     return llvm::ConstantExpr::getBitCast(OldGV, CGM.Int8PtrTy);
   2489   }
   2490 
   2491   // Check if there is already an external RTTI descriptor for this type.
   2492   bool IsStdLib = IsStandardLibraryRTTIDescriptor(Ty);
   2493   if (!Force && (IsStdLib || ShouldUseExternalRTTIDescriptor(CGM, Ty)))
   2494     return GetAddrOfExternalRTTIDescriptor(Ty);
   2495 
   2496   // Emit the standard library with external linkage.
   2497   llvm::GlobalVariable::LinkageTypes Linkage;
   2498   if (IsStdLib)
   2499     Linkage = llvm::GlobalValue::ExternalLinkage;
   2500   else
   2501     Linkage = getTypeInfoLinkage(CGM, Ty);
   2502 
   2503   // Add the vtable pointer.
   2504   BuildVTablePointer(cast<Type>(Ty));
   2505 
   2506   // And the name.
   2507   llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
   2508   llvm::Constant *TypeNameField;
   2509 
   2510   // If we're supposed to demote the visibility, be sure to set a flag
   2511   // to use a string comparison for type_info comparisons.
   2512   ItaniumCXXABI::RTTIUniquenessKind RTTIUniqueness =
   2513       CXXABI.classifyRTTIUniqueness(Ty, Linkage);
   2514   if (RTTIUniqueness != ItaniumCXXABI::RUK_Unique) {
   2515     // The flag is the sign bit, which on ARM64 is defined to be clear
   2516     // for global pointers.  This is very ARM64-specific.
   2517     TypeNameField = llvm::ConstantExpr::getPtrToInt(TypeName, CGM.Int64Ty);
   2518     llvm::Constant *flag =
   2519         llvm::ConstantInt::get(CGM.Int64Ty, ((uint64_t)1) << 63);
   2520     TypeNameField = llvm::ConstantExpr::getAdd(TypeNameField, flag);
   2521     TypeNameField =
   2522         llvm::ConstantExpr::getIntToPtr(TypeNameField, CGM.Int8PtrTy);
   2523   } else {
   2524     TypeNameField = llvm::ConstantExpr::getBitCast(TypeName, CGM.Int8PtrTy);
   2525   }
   2526   Fields.push_back(TypeNameField);
   2527 
   2528   switch (Ty->getTypeClass()) {
   2529 #define TYPE(Class, Base)
   2530 #define ABSTRACT_TYPE(Class, Base)
   2531 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
   2532 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
   2533 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
   2534 #include "clang/AST/TypeNodes.def"
   2535     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
   2536 
   2537   // GCC treats vector types as fundamental types.
   2538   case Type::Builtin:
   2539   case Type::Vector:
   2540   case Type::ExtVector:
   2541   case Type::Complex:
   2542   case Type::BlockPointer:
   2543     // Itanium C++ ABI 2.9.5p4:
   2544     // abi::__fundamental_type_info adds no data members to std::type_info.
   2545     break;
   2546 
   2547   case Type::LValueReference:
   2548   case Type::RValueReference:
   2549     llvm_unreachable("References shouldn't get here");
   2550 
   2551   case Type::Auto:
   2552     llvm_unreachable("Undeduced auto type shouldn't get here");
   2553 
   2554   case Type::ConstantArray:
   2555   case Type::IncompleteArray:
   2556   case Type::VariableArray:
   2557     // Itanium C++ ABI 2.9.5p5:
   2558     // abi::__array_type_info adds no data members to std::type_info.
   2559     break;
   2560 
   2561   case Type::FunctionNoProto:
   2562   case Type::FunctionProto:
   2563     // Itanium C++ ABI 2.9.5p5:
   2564     // abi::__function_type_info adds no data members to std::type_info.
   2565     break;
   2566 
   2567   case Type::Enum:
   2568     // Itanium C++ ABI 2.9.5p5:
   2569     // abi::__enum_type_info adds no data members to std::type_info.
   2570     break;
   2571 
   2572   case Type::Record: {
   2573     const CXXRecordDecl *RD =
   2574       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
   2575     if (!RD->hasDefinition() || !RD->getNumBases()) {
   2576       // We don't need to emit any fields.
   2577       break;
   2578     }
   2579 
   2580     if (CanUseSingleInheritance(RD))
   2581       BuildSIClassTypeInfo(RD);
   2582     else
   2583       BuildVMIClassTypeInfo(RD);
   2584 
   2585     break;
   2586   }
   2587 
   2588   case Type::ObjCObject:
   2589   case Type::ObjCInterface:
   2590     BuildObjCObjectTypeInfo(cast<ObjCObjectType>(Ty));
   2591     break;
   2592 
   2593   case Type::ObjCObjectPointer:
   2594     BuildPointerTypeInfo(cast<ObjCObjectPointerType>(Ty)->getPointeeType());
   2595     break;
   2596 
   2597   case Type::Pointer:
   2598     BuildPointerTypeInfo(cast<PointerType>(Ty)->getPointeeType());
   2599     break;
   2600 
   2601   case Type::MemberPointer:
   2602     BuildPointerToMemberTypeInfo(cast<MemberPointerType>(Ty));
   2603     break;
   2604 
   2605   case Type::Atomic:
   2606     // No fields, at least for the moment.
   2607     break;
   2608   }
   2609 
   2610   llvm::Constant *Init = llvm::ConstantStruct::getAnon(Fields);
   2611 
   2612   llvm::GlobalVariable *GV =
   2613     new llvm::GlobalVariable(CGM.getModule(), Init->getType(),
   2614                              /*Constant=*/true, Linkage, Init, Name);
   2615 
   2616   // If there's already an old global variable, replace it with the new one.
   2617   if (OldGV) {
   2618     GV->takeName(OldGV);
   2619     llvm::Constant *NewPtr =
   2620       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
   2621     OldGV->replaceAllUsesWith(NewPtr);
   2622     OldGV->eraseFromParent();
   2623   }
   2624 
   2625   // The Itanium ABI specifies that type_info objects must be globally
   2626   // unique, with one exception: if the type is an incomplete class
   2627   // type or a (possibly indirect) pointer to one.  That exception
   2628   // affects the general case of comparing type_info objects produced
   2629   // by the typeid operator, which is why the comparison operators on
   2630   // std::type_info generally use the type_info name pointers instead
   2631   // of the object addresses.  However, the language's built-in uses
   2632   // of RTTI generally require class types to be complete, even when
   2633   // manipulating pointers to those class types.  This allows the
   2634   // implementation of dynamic_cast to rely on address equality tests,
   2635   // which is much faster.
   2636 
   2637   // All of this is to say that it's important that both the type_info
   2638   // object and the type_info name be uniqued when weakly emitted.
   2639 
   2640   // Give the type_info object and name the formal visibility of the
   2641   // type itself.
   2642   llvm::GlobalValue::VisibilityTypes llvmVisibility;
   2643   if (llvm::GlobalValue::isLocalLinkage(Linkage))
   2644     // If the linkage is local, only default visibility makes sense.
   2645     llvmVisibility = llvm::GlobalValue::DefaultVisibility;
   2646   else if (RTTIUniqueness == ItaniumCXXABI::RUK_NonUniqueHidden)
   2647     llvmVisibility = llvm::GlobalValue::HiddenVisibility;
   2648   else
   2649     llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
   2650   TypeName->setVisibility(llvmVisibility);
   2651   GV->setVisibility(llvmVisibility);
   2652 
   2653   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
   2654 }
   2655 
   2656 /// ComputeQualifierFlags - Compute the pointer type info flags from the
   2657 /// given qualifier.
   2658 static unsigned ComputeQualifierFlags(Qualifiers Quals) {
   2659   unsigned Flags = 0;
   2660 
   2661   if (Quals.hasConst())
   2662     Flags |= ItaniumRTTIBuilder::PTI_Const;
   2663   if (Quals.hasVolatile())
   2664     Flags |= ItaniumRTTIBuilder::PTI_Volatile;
   2665   if (Quals.hasRestrict())
   2666     Flags |= ItaniumRTTIBuilder::PTI_Restrict;
   2667 
   2668   return Flags;
   2669 }
   2670 
   2671 /// BuildObjCObjectTypeInfo - Build the appropriate kind of type_info
   2672 /// for the given Objective-C object type.
   2673 void ItaniumRTTIBuilder::BuildObjCObjectTypeInfo(const ObjCObjectType *OT) {
   2674   // Drop qualifiers.
   2675   const Type *T = OT->getBaseType().getTypePtr();
   2676   assert(isa<BuiltinType>(T) || isa<ObjCInterfaceType>(T));
   2677 
   2678   // The builtin types are abi::__class_type_infos and don't require
   2679   // extra fields.
   2680   if (isa<BuiltinType>(T)) return;
   2681 
   2682   ObjCInterfaceDecl *Class = cast<ObjCInterfaceType>(T)->getDecl();
   2683   ObjCInterfaceDecl *Super = Class->getSuperClass();
   2684 
   2685   // Root classes are also __class_type_info.
   2686   if (!Super) return;
   2687 
   2688   QualType SuperTy = CGM.getContext().getObjCInterfaceType(Super);
   2689 
   2690   // Everything else is single inheritance.
   2691   llvm::Constant *BaseTypeInfo =
   2692       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(SuperTy);
   2693   Fields.push_back(BaseTypeInfo);
   2694 }
   2695 
   2696 /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
   2697 /// inheritance, according to the Itanium C++ ABI, 2.95p6b.
   2698 void ItaniumRTTIBuilder::BuildSIClassTypeInfo(const CXXRecordDecl *RD) {
   2699   // Itanium C++ ABI 2.9.5p6b:
   2700   // It adds to abi::__class_type_info a single member pointing to the
   2701   // type_info structure for the base type,
   2702   llvm::Constant *BaseTypeInfo =
   2703     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(RD->bases_begin()->getType());
   2704   Fields.push_back(BaseTypeInfo);
   2705 }
   2706 
   2707 namespace {
   2708   /// SeenBases - Contains virtual and non-virtual bases seen when traversing
   2709   /// a class hierarchy.
   2710   struct SeenBases {
   2711     llvm::SmallPtrSet<const CXXRecordDecl *, 16> NonVirtualBases;
   2712     llvm::SmallPtrSet<const CXXRecordDecl *, 16> VirtualBases;
   2713   };
   2714 }
   2715 
   2716 /// ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in
   2717 /// abi::__vmi_class_type_info.
   2718 ///
   2719 static unsigned ComputeVMIClassTypeInfoFlags(const CXXBaseSpecifier *Base,
   2720                                              SeenBases &Bases) {
   2721 
   2722   unsigned Flags = 0;
   2723 
   2724   const CXXRecordDecl *BaseDecl =
   2725     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
   2726 
   2727   if (Base->isVirtual()) {
   2728     // Mark the virtual base as seen.
   2729     if (!Bases.VirtualBases.insert(BaseDecl)) {
   2730       // If this virtual base has been seen before, then the class is diamond
   2731       // shaped.
   2732       Flags |= ItaniumRTTIBuilder::VMI_DiamondShaped;
   2733     } else {
   2734       if (Bases.NonVirtualBases.count(BaseDecl))
   2735         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
   2736     }
   2737   } else {
   2738     // Mark the non-virtual base as seen.
   2739     if (!Bases.NonVirtualBases.insert(BaseDecl)) {
   2740       // If this non-virtual base has been seen before, then the class has non-
   2741       // diamond shaped repeated inheritance.
   2742       Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
   2743     } else {
   2744       if (Bases.VirtualBases.count(BaseDecl))
   2745         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
   2746     }
   2747   }
   2748 
   2749   // Walk all bases.
   2750   for (const auto &I : BaseDecl->bases())
   2751     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
   2752 
   2753   return Flags;
   2754 }
   2755 
   2756 static unsigned ComputeVMIClassTypeInfoFlags(const CXXRecordDecl *RD) {
   2757   unsigned Flags = 0;
   2758   SeenBases Bases;
   2759 
   2760   // Walk all bases.
   2761   for (const auto &I : RD->bases())
   2762     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
   2763 
   2764   return Flags;
   2765 }
   2766 
   2767 /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
   2768 /// classes with bases that do not satisfy the abi::__si_class_type_info
   2769 /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
   2770 void ItaniumRTTIBuilder::BuildVMIClassTypeInfo(const CXXRecordDecl *RD) {
   2771   llvm::Type *UnsignedIntLTy =
   2772     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
   2773 
   2774   // Itanium C++ ABI 2.9.5p6c:
   2775   //   __flags is a word with flags describing details about the class
   2776   //   structure, which may be referenced by using the __flags_masks
   2777   //   enumeration. These flags refer to both direct and indirect bases.
   2778   unsigned Flags = ComputeVMIClassTypeInfoFlags(RD);
   2779   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
   2780 
   2781   // Itanium C++ ABI 2.9.5p6c:
   2782   //   __base_count is a word with the number of direct proper base class
   2783   //   descriptions that follow.
   2784   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, RD->getNumBases()));
   2785 
   2786   if (!RD->getNumBases())
   2787     return;
   2788 
   2789   llvm::Type *LongLTy =
   2790     CGM.getTypes().ConvertType(CGM.getContext().LongTy);
   2791 
   2792   // Now add the base class descriptions.
   2793 
   2794   // Itanium C++ ABI 2.9.5p6c:
   2795   //   __base_info[] is an array of base class descriptions -- one for every
   2796   //   direct proper base. Each description is of the type:
   2797   //
   2798   //   struct abi::__base_class_type_info {
   2799   //   public:
   2800   //     const __class_type_info *__base_type;
   2801   //     long __offset_flags;
   2802   //
   2803   //     enum __offset_flags_masks {
   2804   //       __virtual_mask = 0x1,
   2805   //       __public_mask = 0x2,
   2806   //       __offset_shift = 8
   2807   //     };
   2808   //   };
   2809   for (const auto &Base : RD->bases()) {
   2810     // The __base_type member points to the RTTI for the base type.
   2811     Fields.push_back(ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(Base.getType()));
   2812 
   2813     const CXXRecordDecl *BaseDecl =
   2814       cast<CXXRecordDecl>(Base.getType()->getAs<RecordType>()->getDecl());
   2815 
   2816     int64_t OffsetFlags = 0;
   2817 
   2818     // All but the lower 8 bits of __offset_flags are a signed offset.
   2819     // For a non-virtual base, this is the offset in the object of the base
   2820     // subobject. For a virtual base, this is the offset in the virtual table of
   2821     // the virtual base offset for the virtual base referenced (negative).
   2822     CharUnits Offset;
   2823     if (Base.isVirtual())
   2824       Offset =
   2825         CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(RD, BaseDecl);
   2826     else {
   2827       const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
   2828       Offset = Layout.getBaseClassOffset(BaseDecl);
   2829     };
   2830 
   2831     OffsetFlags = uint64_t(Offset.getQuantity()) << 8;
   2832 
   2833     // The low-order byte of __offset_flags contains flags, as given by the
   2834     // masks from the enumeration __offset_flags_masks.
   2835     if (Base.isVirtual())
   2836       OffsetFlags |= BCTI_Virtual;
   2837     if (Base.getAccessSpecifier() == AS_public)
   2838       OffsetFlags |= BCTI_Public;
   2839 
   2840     Fields.push_back(llvm::ConstantInt::get(LongLTy, OffsetFlags));
   2841   }
   2842 }
   2843 
   2844 /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct,
   2845 /// used for pointer types.
   2846 void ItaniumRTTIBuilder::BuildPointerTypeInfo(QualType PointeeTy) {
   2847   Qualifiers Quals;
   2848   QualType UnqualifiedPointeeTy =
   2849     CGM.getContext().getUnqualifiedArrayType(PointeeTy, Quals);
   2850 
   2851   // Itanium C++ ABI 2.9.5p7:
   2852   //   __flags is a flag word describing the cv-qualification and other
   2853   //   attributes of the type pointed to
   2854   unsigned Flags = ComputeQualifierFlags(Quals);
   2855 
   2856   // Itanium C++ ABI 2.9.5p7:
   2857   //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
   2858   //   incomplete class type, the incomplete target type flag is set.
   2859   if (ContainsIncompleteClassType(UnqualifiedPointeeTy))
   2860     Flags |= PTI_Incomplete;
   2861 
   2862   llvm::Type *UnsignedIntLTy =
   2863     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
   2864   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
   2865 
   2866   // Itanium C++ ABI 2.9.5p7:
   2867   //  __pointee is a pointer to the std::type_info derivation for the
   2868   //  unqualified type being pointed to.
   2869   llvm::Constant *PointeeTypeInfo =
   2870     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(UnqualifiedPointeeTy);
   2871   Fields.push_back(PointeeTypeInfo);
   2872 }
   2873 
   2874 /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
   2875 /// struct, used for member pointer types.
   2876 void
   2877 ItaniumRTTIBuilder::BuildPointerToMemberTypeInfo(const MemberPointerType *Ty) {
   2878   QualType PointeeTy = Ty->getPointeeType();
   2879 
   2880   Qualifiers Quals;
   2881   QualType UnqualifiedPointeeTy =
   2882     CGM.getContext().getUnqualifiedArrayType(PointeeTy, Quals);
   2883 
   2884   // Itanium C++ ABI 2.9.5p7:
   2885   //   __flags is a flag word describing the cv-qualification and other
   2886   //   attributes of the type pointed to.
   2887   unsigned Flags = ComputeQualifierFlags(Quals);
   2888 
   2889   const RecordType *ClassType = cast<RecordType>(Ty->getClass());
   2890 
   2891   // Itanium C++ ABI 2.9.5p7:
   2892   //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
   2893   //   incomplete class type, the incomplete target type flag is set.
   2894   if (ContainsIncompleteClassType(UnqualifiedPointeeTy))
   2895     Flags |= PTI_Incomplete;
   2896 
   2897   if (IsIncompleteClassType(ClassType))
   2898     Flags |= PTI_ContainingClassIncomplete;
   2899 
   2900   llvm::Type *UnsignedIntLTy =
   2901     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
   2902   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
   2903 
   2904   // Itanium C++ ABI 2.9.5p7:
   2905   //   __pointee is a pointer to the std::type_info derivation for the
   2906   //   unqualified type being pointed to.
   2907   llvm::Constant *PointeeTypeInfo =
   2908     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(UnqualifiedPointeeTy);
   2909   Fields.push_back(PointeeTypeInfo);
   2910 
   2911   // Itanium C++ ABI 2.9.5p9:
   2912   //   __context is a pointer to an abi::__class_type_info corresponding to the
   2913   //   class type containing the member pointed to
   2914   //   (e.g., the "A" in "int A::*").
   2915   Fields.push_back(
   2916       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));
   2917 }
   2918 
   2919 llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {
   2920   return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);
   2921 }
   2922 
   2923 void ItaniumCXXABI::EmitFundamentalRTTIDescriptor(QualType Type) {
   2924   QualType PointerType = getContext().getPointerType(Type);
   2925   QualType PointerTypeConst = getContext().getPointerType(Type.withConst());
   2926   ItaniumRTTIBuilder(*this).BuildTypeInfo(Type, true);
   2927   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerType, true);
   2928   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerTypeConst, true);
   2929 }
   2930 
   2931 void ItaniumCXXABI::EmitFundamentalRTTIDescriptors() {
   2932   QualType FundamentalTypes[] = {
   2933       getContext().VoidTy,             getContext().NullPtrTy,
   2934       getContext().BoolTy,             getContext().WCharTy,
   2935       getContext().CharTy,             getContext().UnsignedCharTy,
   2936       getContext().SignedCharTy,       getContext().ShortTy,
   2937       getContext().UnsignedShortTy,    getContext().IntTy,
   2938       getContext().UnsignedIntTy,      getContext().LongTy,
   2939       getContext().UnsignedLongTy,     getContext().LongLongTy,
   2940       getContext().UnsignedLongLongTy, getContext().HalfTy,
   2941       getContext().FloatTy,            getContext().DoubleTy,
   2942       getContext().LongDoubleTy,       getContext().Char16Ty,
   2943       getContext().Char32Ty,
   2944   };
   2945   for (const QualType &FundamentalType : FundamentalTypes)
   2946     EmitFundamentalRTTIDescriptor(FundamentalType);
   2947 }
   2948 
   2949 /// What sort of uniqueness rules should we use for the RTTI for the
   2950 /// given type?
   2951 ItaniumCXXABI::RTTIUniquenessKind ItaniumCXXABI::classifyRTTIUniqueness(
   2952     QualType CanTy, llvm::GlobalValue::LinkageTypes Linkage) const {
   2953   if (shouldRTTIBeUnique())
   2954     return RUK_Unique;
   2955 
   2956   // It's only necessary for linkonce_odr or weak_odr linkage.
   2957   if (Linkage != llvm::GlobalValue::LinkOnceODRLinkage &&
   2958       Linkage != llvm::GlobalValue::WeakODRLinkage)
   2959     return RUK_Unique;
   2960 
   2961   // It's only necessary with default visibility.
   2962   if (CanTy->getVisibility() != DefaultVisibility)
   2963     return RUK_Unique;
   2964 
   2965   // If we're not required to publish this symbol, hide it.
   2966   if (Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
   2967     return RUK_NonUniqueHidden;
   2968 
   2969   // If we're required to publish this symbol, as we might be under an
   2970   // explicit instantiation, leave it with default visibility but
   2971   // enable string-comparisons.
   2972   assert(Linkage == llvm::GlobalValue::WeakODRLinkage);
   2973   return RUK_NonUniqueVisible;
   2974 }
   2975