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