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