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 "CGCleanup.h"
23 #include "CGRecordLayout.h"
24 #include "CGVTables.h"
25 #include "CodeGenFunction.h"
26 #include "CodeGenModule.h"
27 #include "ConstantBuilder.h"
28 #include "TargetInfo.h"
29 #include "clang/AST/Mangle.h"
30 #include "clang/AST/Type.h"
31 #include "clang/AST/StmtCXX.h"
32 #include "llvm/IR/CallSite.h"
33 #include "llvm/IR/DataLayout.h"
34 #include "llvm/IR/Instructions.h"
35 #include "llvm/IR/Intrinsics.h"
36 #include "llvm/IR/Value.h"
37 
38 using namespace clang;
39 using namespace CodeGen;
40 
41 namespace {
42 class ItaniumCXXABI : public CodeGen::CGCXXABI {
43   /// VTables - All the vtables which have been defined.
44   llvm::DenseMap<const CXXRecordDecl *, llvm::GlobalVariable *> VTables;
45 
46 protected:
47   bool UseARMMethodPtrABI;
48   bool UseARMGuardVarABI;
49   bool Use32BitVTableOffsetABI;
50 
51   ItaniumMangleContext &getMangleContext() {
52     return cast<ItaniumMangleContext>(CodeGen::CGCXXABI::getMangleContext());
53   }
54 
55 public:
56   ItaniumCXXABI(CodeGen::CodeGenModule &CGM,
57                 bool UseARMMethodPtrABI = false,
58                 bool UseARMGuardVarABI = false) :
59     CGCXXABI(CGM), UseARMMethodPtrABI(UseARMMethodPtrABI),
60     UseARMGuardVarABI(UseARMGuardVarABI),
61     Use32BitVTableOffsetABI(false) { }
62 
63   bool classifyReturnType(CGFunctionInfo &FI) const override;
64 
65   RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const override {
66     // Structures with either a non-trivial destructor or a non-trivial
67     // copy constructor are always indirect.
68     // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
69     // special members.
70     if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor())
71       return RAA_Indirect;
72     return RAA_Default;
73   }
74 
75   bool isThisCompleteObject(GlobalDecl GD) const override {
76     // The Itanium ABI has separate complete-object vs.  base-object
77     // variants of both constructors and destructors.
78     if (isa<CXXDestructorDecl>(GD.getDecl())) {
79       switch (GD.getDtorType()) {
80       case Dtor_Complete:
81       case Dtor_Deleting:
82         return true;
83 
84       case Dtor_Base:
85         return false;
86 
87       case Dtor_Comdat:
88         llvm_unreachable("emitting dtor comdat as function?");
89       }
90       llvm_unreachable("bad dtor kind");
91     }
92     if (isa<CXXConstructorDecl>(GD.getDecl())) {
93       switch (GD.getCtorType()) {
94       case Ctor_Complete:
95         return true;
96 
97       case Ctor_Base:
98         return false;
99 
100       case Ctor_CopyingClosure:
101       case Ctor_DefaultClosure:
102         llvm_unreachable("closure ctors in Itanium ABI?");
103 
104       case Ctor_Comdat:
105         llvm_unreachable("emitting ctor comdat as function?");
106       }
107       llvm_unreachable("bad dtor kind");
108     }
109 
110     // No other kinds.
111     return false;
112   }
113 
114   bool isZeroInitializable(const MemberPointerType *MPT) override;
115 
116   llvm::Type *ConvertMemberPointerType(const MemberPointerType *MPT) override;
117 
118   CGCallee
119     EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
120                                     const Expr *E,
121                                     Address This,
122                                     llvm::Value *&ThisPtrForCall,
123                                     llvm::Value *MemFnPtr,
124                                     const MemberPointerType *MPT) override;
125 
126   llvm::Value *
127     EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
128                                  Address Base,
129                                  llvm::Value *MemPtr,
130                                  const MemberPointerType *MPT) override;
131 
132   llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
133                                            const CastExpr *E,
134                                            llvm::Value *Src) override;
135   llvm::Constant *EmitMemberPointerConversion(const CastExpr *E,
136                                               llvm::Constant *Src) override;
137 
138   llvm::Constant *EmitNullMemberPointer(const MemberPointerType *MPT) override;
139 
140   llvm::Constant *EmitMemberFunctionPointer(const CXXMethodDecl *MD) override;
141   llvm::Constant *EmitMemberDataPointer(const MemberPointerType *MPT,
142                                         CharUnits offset) override;
143   llvm::Constant *EmitMemberPointer(const APValue &MP, QualType MPT) override;
144   llvm::Constant *BuildMemberPointer(const CXXMethodDecl *MD,
145                                      CharUnits ThisAdjustment);
146 
147   llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
148                                            llvm::Value *L, llvm::Value *R,
149                                            const MemberPointerType *MPT,
150                                            bool Inequality) override;
151 
152   llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
153                                          llvm::Value *Addr,
154                                          const MemberPointerType *MPT) override;
155 
156   void emitVirtualObjectDelete(CodeGenFunction &CGF, const CXXDeleteExpr *DE,
157                                Address Ptr, QualType ElementType,
158                                const CXXDestructorDecl *Dtor) override;
159 
160   CharUnits getAlignmentOfExnObject() {
161     unsigned Align = CGM.getContext().getTargetInfo().getExnObjectAlignment();
162     return CGM.getContext().toCharUnitsFromBits(Align);
163   }
164 
165   void emitRethrow(CodeGenFunction &CGF, bool isNoReturn) override;
166   void emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) override;
167 
168   void emitBeginCatch(CodeGenFunction &CGF, const CXXCatchStmt *C) override;
169 
170   llvm::CallInst *
171   emitTerminateForUnexpectedException(CodeGenFunction &CGF,
172                                       llvm::Value *Exn) override;
173 
174   void EmitFundamentalRTTIDescriptor(QualType Type, bool DLLExport);
175   void EmitFundamentalRTTIDescriptors(bool DLLExport);
176   llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) override;
177   CatchTypeInfo
178   getAddrOfCXXCatchHandlerType(QualType Ty,
179                                QualType CatchHandlerType) override {
180     return CatchTypeInfo{getAddrOfRTTIDescriptor(Ty), 0};
181   }
182 
183   bool shouldTypeidBeNullChecked(bool IsDeref, QualType SrcRecordTy) override;
184   void EmitBadTypeidCall(CodeGenFunction &CGF) override;
185   llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
186                           Address ThisPtr,
187                           llvm::Type *StdTypeInfoPtrTy) override;
188 
189   bool shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
190                                           QualType SrcRecordTy) override;
191 
192   llvm::Value *EmitDynamicCastCall(CodeGenFunction &CGF, Address Value,
193                                    QualType SrcRecordTy, QualType DestTy,
194                                    QualType DestRecordTy,
195                                    llvm::BasicBlock *CastEnd) override;
196 
197   llvm::Value *EmitDynamicCastToVoid(CodeGenFunction &CGF, Address Value,
198                                      QualType SrcRecordTy,
199                                      QualType DestTy) override;
200 
201   bool EmitBadCastCall(CodeGenFunction &CGF) override;
202 
203   llvm::Value *
204     GetVirtualBaseClassOffset(CodeGenFunction &CGF, Address This,
205                               const CXXRecordDecl *ClassDecl,
206                               const CXXRecordDecl *BaseClassDecl) override;
207 
208   void EmitCXXConstructors(const CXXConstructorDecl *D) override;
209 
210   void buildStructorSignature(const CXXMethodDecl *MD, StructorType T,
211                               SmallVectorImpl<CanQualType> &ArgTys) override;
212 
213   bool useThunkForDtorVariant(const CXXDestructorDecl *Dtor,
214                               CXXDtorType DT) const override {
215     // Itanium does not emit any destructor variant as an inline thunk.
216     // Delegating may occur as an optimization, but all variants are either
217     // emitted with external linkage or as linkonce if they are inline and used.
218     return false;
219   }
220 
221   void EmitCXXDestructors(const CXXDestructorDecl *D) override;
222 
223   void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
224                                  FunctionArgList &Params) override;
225 
226   void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
227 
228   unsigned addImplicitConstructorArgs(CodeGenFunction &CGF,
229                                       const CXXConstructorDecl *D,
230                                       CXXCtorType Type, bool ForVirtualBase,
231                                       bool Delegating,
232                                       CallArgList &Args) override;
233 
234   void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
235                           CXXDtorType Type, bool ForVirtualBase,
236                           bool Delegating, Address This) override;
237 
238   void emitVTableDefinitions(CodeGenVTables &CGVT,
239                              const CXXRecordDecl *RD) override;
240 
241   bool isVirtualOffsetNeededForVTableField(CodeGenFunction &CGF,
242                                            CodeGenFunction::VPtr Vptr) override;
243 
244   bool doStructorsInitializeVPtrs(const CXXRecordDecl *VTableClass) override {
245     return true;
246   }
247 
248   llvm::Constant *
249   getVTableAddressPoint(BaseSubobject Base,
250                         const CXXRecordDecl *VTableClass) override;
251 
252   llvm::Value *getVTableAddressPointInStructor(
253       CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
254       BaseSubobject Base, const CXXRecordDecl *NearestVBase) override;
255 
256   llvm::Value *getVTableAddressPointInStructorWithVTT(
257       CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
258       BaseSubobject Base, const CXXRecordDecl *NearestVBase);
259 
260   llvm::Constant *
261   getVTableAddressPointForConstExpr(BaseSubobject Base,
262                                     const CXXRecordDecl *VTableClass) override;
263 
264   llvm::GlobalVariable *getAddrOfVTable(const CXXRecordDecl *RD,
265                                         CharUnits VPtrOffset) override;
266 
267   CGCallee getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
268                                      Address This, llvm::Type *Ty,
269                                      SourceLocation Loc) override;
270 
271   llvm::Value *EmitVirtualDestructorCall(CodeGenFunction &CGF,
272                                          const CXXDestructorDecl *Dtor,
273                                          CXXDtorType DtorType,
274                                          Address This,
275                                          const CXXMemberCallExpr *CE) override;
276 
277   void emitVirtualInheritanceTables(const CXXRecordDecl *RD) override;
278 
279   bool canSpeculativelyEmitVTable(const CXXRecordDecl *RD) const override;
280 
281   void setThunkLinkage(llvm::Function *Thunk, bool ForVTable, GlobalDecl GD,
282                        bool ReturnAdjustment) override {
283     // Allow inlining of thunks by emitting them with available_externally
284     // linkage together with vtables when needed.
285     if (ForVTable && !Thunk->hasLocalLinkage())
286       Thunk->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
287   }
288 
289   llvm::Value *performThisAdjustment(CodeGenFunction &CGF, Address This,
290                                      const ThisAdjustment &TA) override;
291 
292   llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
293                                        const ReturnAdjustment &RA) override;
294 
295   size_t getSrcArgforCopyCtor(const CXXConstructorDecl *,
296                               FunctionArgList &Args) const override {
297     assert(!Args.empty() && "expected the arglist to not be empty!");
298     return Args.size() - 1;
299   }
300 
301   StringRef GetPureVirtualCallName() override { return "__cxa_pure_virtual"; }
302   StringRef GetDeletedVirtualCallName() override
303     { return "__cxa_deleted_virtual"; }
304 
305   CharUnits getArrayCookieSizeImpl(QualType elementType) override;
306   Address InitializeArrayCookie(CodeGenFunction &CGF,
307                                 Address NewPtr,
308                                 llvm::Value *NumElements,
309                                 const CXXNewExpr *expr,
310                                 QualType ElementType) override;
311   llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
312                                    Address allocPtr,
313                                    CharUnits cookieSize) override;
314 
315   void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
316                        llvm::GlobalVariable *DeclPtr,
317                        bool PerformInit) override;
318   void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
319                           llvm::Constant *dtor, llvm::Constant *addr) override;
320 
321   llvm::Function *getOrCreateThreadLocalWrapper(const VarDecl *VD,
322                                                 llvm::Value *Val);
323   void EmitThreadLocalInitFuncs(
324       CodeGenModule &CGM,
325       ArrayRef<const VarDecl *> CXXThreadLocals,
326       ArrayRef<llvm::Function *> CXXThreadLocalInits,
327       ArrayRef<const VarDecl *> CXXThreadLocalInitVars) override;
328 
329   bool usesThreadWrapperFunction() const override { return true; }
330   LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
331                                       QualType LValType) override;
332 
333   bool NeedsVTTParameter(GlobalDecl GD) override;
334 
335   /**************************** RTTI Uniqueness ******************************/
336 
337 protected:
338   /// Returns true if the ABI requires RTTI type_info objects to be unique
339   /// across a program.
340   virtual bool shouldRTTIBeUnique() const { return true; }
341 
342 public:
343   /// What sort of unique-RTTI behavior should we use?
344   enum RTTIUniquenessKind {
345     /// We are guaranteeing, or need to guarantee, that the RTTI string
346     /// is unique.
347     RUK_Unique,
348 
349     /// We are not guaranteeing uniqueness for the RTTI string, so we
350     /// can demote to hidden visibility but must use string comparisons.
351     RUK_NonUniqueHidden,
352 
353     /// We are not guaranteeing uniqueness for the RTTI string, so we
354     /// have to use string comparisons, but we also have to emit it with
355     /// non-hidden visibility.
356     RUK_NonUniqueVisible
357   };
358 
359   /// Return the required visibility status for the given type and linkage in
360   /// the current ABI.
361   RTTIUniquenessKind
362   classifyRTTIUniqueness(QualType CanTy,
363                          llvm::GlobalValue::LinkageTypes Linkage) const;
364   friend class ItaniumRTTIBuilder;
365 
366   void emitCXXStructor(const CXXMethodDecl *MD, StructorType Type) override;
367 
368  private:
369    bool hasAnyVirtualInlineFunction(const CXXRecordDecl *RD) const {
370     const auto &VtableLayout =
371         CGM.getItaniumVTableContext().getVTableLayout(RD);
372 
373     for (const auto &VtableComponent : VtableLayout.vtable_components()) {
374       // Skip empty slot.
375       if (!VtableComponent.isUsedFunctionPointerKind())
376         continue;
377 
378       const CXXMethodDecl *Method = VtableComponent.getFunctionDecl();
379       if (Method->getCanonicalDecl()->isInlined())
380         return true;
381     }
382     return false;
383   }
384 
385   bool isVTableHidden(const CXXRecordDecl *RD) const {
386     const auto &VtableLayout =
387             CGM.getItaniumVTableContext().getVTableLayout(RD);
388 
389     for (const auto &VtableComponent : VtableLayout.vtable_components()) {
390       if (VtableComponent.isRTTIKind()) {
391         const CXXRecordDecl *RTTIDecl = VtableComponent.getRTTIDecl();
392         if (RTTIDecl->getVisibility() == Visibility::HiddenVisibility)
393           return true;
394       } else if (VtableComponent.isUsedFunctionPointerKind()) {
395         const CXXMethodDecl *Method = VtableComponent.getFunctionDecl();
396         if (Method->getVisibility() == Visibility::HiddenVisibility &&
397             !Method->isDefined())
398           return true;
399       }
400     }
401     return false;
402   }
403 };
404 
405 class ARMCXXABI : public ItaniumCXXABI {
406 public:
407   ARMCXXABI(CodeGen::CodeGenModule &CGM) :
408     ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
409                   /* UseARMGuardVarABI = */ true) {}
410 
411   bool HasThisReturn(GlobalDecl GD) const override {
412     return (isa<CXXConstructorDecl>(GD.getDecl()) || (
413               isa<CXXDestructorDecl>(GD.getDecl()) &&
414               GD.getDtorType() != Dtor_Deleting));
415   }
416 
417   void EmitReturnFromThunk(CodeGenFunction &CGF, RValue RV,
418                            QualType ResTy) override;
419 
420   CharUnits getArrayCookieSizeImpl(QualType elementType) override;
421   Address InitializeArrayCookie(CodeGenFunction &CGF,
422                                 Address NewPtr,
423                                 llvm::Value *NumElements,
424                                 const CXXNewExpr *expr,
425                                 QualType ElementType) override;
426   llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF, Address allocPtr,
427                                    CharUnits cookieSize) override;
428 };
429 
430 class iOS64CXXABI : public ARMCXXABI {
431 public:
432   iOS64CXXABI(CodeGen::CodeGenModule &CGM) : ARMCXXABI(CGM) {
433     Use32BitVTableOffsetABI = true;
434   }
435 
436   // ARM64 libraries are prepared for non-unique RTTI.
437   bool shouldRTTIBeUnique() const override { return false; }
438 };
439 
440 class WebAssemblyCXXABI final : public ItaniumCXXABI {
441 public:
442   explicit WebAssemblyCXXABI(CodeGen::CodeGenModule &CGM)
443       : ItaniumCXXABI(CGM, /*UseARMMethodPtrABI=*/true,
444                       /*UseARMGuardVarABI=*/true) {}
445 
446 private:
447   bool HasThisReturn(GlobalDecl GD) const override {
448     return isa<CXXConstructorDecl>(GD.getDecl()) ||
449            (isa<CXXDestructorDecl>(GD.getDecl()) &&
450             GD.getDtorType() != Dtor_Deleting);
451   }
452   bool canCallMismatchedFunctionType() const override { return false; }
453 };
454 }
455 
456 CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) {
457   switch (CGM.getTarget().getCXXABI().getKind()) {
458   // For IR-generation purposes, there's no significant difference
459   // between the ARM and iOS ABIs.
460   case TargetCXXABI::GenericARM:
461   case TargetCXXABI::iOS:
462   case TargetCXXABI::WatchOS:
463     return new ARMCXXABI(CGM);
464 
465   case TargetCXXABI::iOS64:
466     return new iOS64CXXABI(CGM);
467 
468   // Note that AArch64 uses the generic ItaniumCXXABI class since it doesn't
469   // include the other 32-bit ARM oddities: constructor/destructor return values
470   // and array cookies.
471   case TargetCXXABI::GenericAArch64:
472     return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
473                              /* UseARMGuardVarABI = */ true);
474 
475   case TargetCXXABI::GenericMIPS:
476     return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true);
477 
478   case TargetCXXABI::WebAssembly:
479     return new WebAssemblyCXXABI(CGM);
480 
481   case TargetCXXABI::GenericItanium:
482     if (CGM.getContext().getTargetInfo().getTriple().getArch()
483         == llvm::Triple::le32) {
484       // For PNaCl, use ARM-style method pointers so that PNaCl code
485       // does not assume anything about the alignment of function
486       // pointers.
487       return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
488                                /* UseARMGuardVarABI = */ false);
489     }
490     return new ItaniumCXXABI(CGM);
491 
492   case TargetCXXABI::Microsoft:
493     llvm_unreachable("Microsoft ABI is not Itanium-based");
494   }
495   llvm_unreachable("bad ABI kind");
496 }
497 
498 llvm::Type *
499 ItaniumCXXABI::ConvertMemberPointerType(const MemberPointerType *MPT) {
500   if (MPT->isMemberDataPointer())
501     return CGM.PtrDiffTy;
502   return llvm::StructType::get(CGM.PtrDiffTy, CGM.PtrDiffTy, nullptr);
503 }
504 
505 /// In the Itanium and ARM ABIs, method pointers have the form:
506 ///   struct { ptrdiff_t ptr; ptrdiff_t adj; } memptr;
507 ///
508 /// In the Itanium ABI:
509 ///  - method pointers are virtual if (memptr.ptr & 1) is nonzero
510 ///  - the this-adjustment is (memptr.adj)
511 ///  - the virtual offset is (memptr.ptr - 1)
512 ///
513 /// In the ARM ABI:
514 ///  - method pointers are virtual if (memptr.adj & 1) is nonzero
515 ///  - the this-adjustment is (memptr.adj >> 1)
516 ///  - the virtual offset is (memptr.ptr)
517 /// ARM uses 'adj' for the virtual flag because Thumb functions
518 /// may be only single-byte aligned.
519 ///
520 /// If the member is virtual, the adjusted 'this' pointer points
521 /// to a vtable pointer from which the virtual offset is applied.
522 ///
523 /// If the member is non-virtual, memptr.ptr is the address of
524 /// the function to call.
525 CGCallee ItaniumCXXABI::EmitLoadOfMemberFunctionPointer(
526     CodeGenFunction &CGF, const Expr *E, Address ThisAddr,
527     llvm::Value *&ThisPtrForCall,
528     llvm::Value *MemFnPtr, const MemberPointerType *MPT) {
529   CGBuilderTy &Builder = CGF.Builder;
530 
531   const FunctionProtoType *FPT =
532     MPT->getPointeeType()->getAs<FunctionProtoType>();
533   const CXXRecordDecl *RD =
534     cast<CXXRecordDecl>(MPT->getClass()->getAs<RecordType>()->getDecl());
535 
536   llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(
537       CGM.getTypes().arrangeCXXMethodType(RD, FPT, /*FD=*/nullptr));
538 
539   llvm::Constant *ptrdiff_1 = llvm::ConstantInt::get(CGM.PtrDiffTy, 1);
540 
541   llvm::BasicBlock *FnVirtual = CGF.createBasicBlock("memptr.virtual");
542   llvm::BasicBlock *FnNonVirtual = CGF.createBasicBlock("memptr.nonvirtual");
543   llvm::BasicBlock *FnEnd = CGF.createBasicBlock("memptr.end");
544 
545   // Extract memptr.adj, which is in the second field.
546   llvm::Value *RawAdj = Builder.CreateExtractValue(MemFnPtr, 1, "memptr.adj");
547 
548   // Compute the true adjustment.
549   llvm::Value *Adj = RawAdj;
550   if (UseARMMethodPtrABI)
551     Adj = Builder.CreateAShr(Adj, ptrdiff_1, "memptr.adj.shifted");
552 
553   // Apply the adjustment and cast back to the original struct type
554   // for consistency.
555   llvm::Value *This = ThisAddr.getPointer();
556   llvm::Value *Ptr = Builder.CreateBitCast(This, Builder.getInt8PtrTy());
557   Ptr = Builder.CreateInBoundsGEP(Ptr, Adj);
558   This = Builder.CreateBitCast(Ptr, This->getType(), "this.adjusted");
559   ThisPtrForCall = This;
560 
561   // Load the function pointer.
562   llvm::Value *FnAsInt = Builder.CreateExtractValue(MemFnPtr, 0, "memptr.ptr");
563 
564   // If the LSB in the function pointer is 1, the function pointer points to
565   // a virtual function.
566   llvm::Value *IsVirtual;
567   if (UseARMMethodPtrABI)
568     IsVirtual = Builder.CreateAnd(RawAdj, ptrdiff_1);
569   else
570     IsVirtual = Builder.CreateAnd(FnAsInt, ptrdiff_1);
571   IsVirtual = Builder.CreateIsNotNull(IsVirtual, "memptr.isvirtual");
572   Builder.CreateCondBr(IsVirtual, FnVirtual, FnNonVirtual);
573 
574   // In the virtual path, the adjustment left 'This' pointing to the
575   // vtable of the correct base subobject.  The "function pointer" is an
576   // offset within the vtable (+1 for the virtual flag on non-ARM).
577   CGF.EmitBlock(FnVirtual);
578 
579   // Cast the adjusted this to a pointer to vtable pointer and load.
580   llvm::Type *VTableTy = Builder.getInt8PtrTy();
581   CharUnits VTablePtrAlign =
582     CGF.CGM.getDynamicOffsetAlignment(ThisAddr.getAlignment(), RD,
583                                       CGF.getPointerAlign());
584   llvm::Value *VTable =
585     CGF.GetVTablePtr(Address(This, VTablePtrAlign), VTableTy, RD);
586 
587   // Apply the offset.
588   // On ARM64, to reserve extra space in virtual member function pointers,
589   // we only pay attention to the low 32 bits of the offset.
590   llvm::Value *VTableOffset = FnAsInt;
591   if (!UseARMMethodPtrABI)
592     VTableOffset = Builder.CreateSub(VTableOffset, ptrdiff_1);
593   if (Use32BitVTableOffsetABI) {
594     VTableOffset = Builder.CreateTrunc(VTableOffset, CGF.Int32Ty);
595     VTableOffset = Builder.CreateZExt(VTableOffset, CGM.PtrDiffTy);
596   }
597   VTable = Builder.CreateGEP(VTable, VTableOffset);
598 
599   // Load the virtual function to call.
600   VTable = Builder.CreateBitCast(VTable, FTy->getPointerTo()->getPointerTo());
601   llvm::Value *VirtualFn =
602     Builder.CreateAlignedLoad(VTable, CGF.getPointerAlign(),
603                               "memptr.virtualfn");
604   CGF.EmitBranch(FnEnd);
605 
606   // In the non-virtual path, the function pointer is actually a
607   // function pointer.
608   CGF.EmitBlock(FnNonVirtual);
609   llvm::Value *NonVirtualFn =
610     Builder.CreateIntToPtr(FnAsInt, FTy->getPointerTo(), "memptr.nonvirtualfn");
611 
612   // We're done.
613   CGF.EmitBlock(FnEnd);
614   llvm::PHINode *CalleePtr = Builder.CreatePHI(FTy->getPointerTo(), 2);
615   CalleePtr->addIncoming(VirtualFn, FnVirtual);
616   CalleePtr->addIncoming(NonVirtualFn, FnNonVirtual);
617 
618   CGCallee Callee(FPT, CalleePtr);
619   return Callee;
620 }
621 
622 /// Compute an l-value by applying the given pointer-to-member to a
623 /// base object.
624 llvm::Value *ItaniumCXXABI::EmitMemberDataPointerAddress(
625     CodeGenFunction &CGF, const Expr *E, Address Base, llvm::Value *MemPtr,
626     const MemberPointerType *MPT) {
627   assert(MemPtr->getType() == CGM.PtrDiffTy);
628 
629   CGBuilderTy &Builder = CGF.Builder;
630 
631   // Cast to char*.
632   Base = Builder.CreateElementBitCast(Base, CGF.Int8Ty);
633 
634   // Apply the offset, which we assume is non-null.
635   llvm::Value *Addr =
636     Builder.CreateInBoundsGEP(Base.getPointer(), MemPtr, "memptr.offset");
637 
638   // Cast the address to the appropriate pointer type, adopting the
639   // address space of the base pointer.
640   llvm::Type *PType = CGF.ConvertTypeForMem(MPT->getPointeeType())
641                             ->getPointerTo(Base.getAddressSpace());
642   return Builder.CreateBitCast(Addr, PType);
643 }
644 
645 /// Perform a bitcast, derived-to-base, or base-to-derived member pointer
646 /// conversion.
647 ///
648 /// Bitcast conversions are always a no-op under Itanium.
649 ///
650 /// Obligatory offset/adjustment diagram:
651 ///         <-- offset -->          <-- adjustment -->
652 ///   |--------------------------|----------------------|--------------------|
653 ///   ^Derived address point     ^Base address point    ^Member address point
654 ///
655 /// So when converting a base member pointer to a derived member pointer,
656 /// we add the offset to the adjustment because the address point has
657 /// decreased;  and conversely, when converting a derived MP to a base MP
658 /// we subtract the offset from the adjustment because the address point
659 /// has increased.
660 ///
661 /// The standard forbids (at compile time) conversion to and from
662 /// virtual bases, which is why we don't have to consider them here.
663 ///
664 /// The standard forbids (at run time) casting a derived MP to a base
665 /// MP when the derived MP does not point to a member of the base.
666 /// This is why -1 is a reasonable choice for null data member
667 /// pointers.
668 llvm::Value *
669 ItaniumCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF,
670                                            const CastExpr *E,
671                                            llvm::Value *src) {
672   assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
673          E->getCastKind() == CK_BaseToDerivedMemberPointer ||
674          E->getCastKind() == CK_ReinterpretMemberPointer);
675 
676   // Under Itanium, reinterprets don't require any additional processing.
677   if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
678 
679   // Use constant emission if we can.
680   if (isa<llvm::Constant>(src))
681     return EmitMemberPointerConversion(E, cast<llvm::Constant>(src));
682 
683   llvm::Constant *adj = getMemberPointerAdjustment(E);
684   if (!adj) return src;
685 
686   CGBuilderTy &Builder = CGF.Builder;
687   bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
688 
689   const MemberPointerType *destTy =
690     E->getType()->castAs<MemberPointerType>();
691 
692   // For member data pointers, this is just a matter of adding the
693   // offset if the source is non-null.
694   if (destTy->isMemberDataPointer()) {
695     llvm::Value *dst;
696     if (isDerivedToBase)
697       dst = Builder.CreateNSWSub(src, adj, "adj");
698     else
699       dst = Builder.CreateNSWAdd(src, adj, "adj");
700 
701     // Null check.
702     llvm::Value *null = llvm::Constant::getAllOnesValue(src->getType());
703     llvm::Value *isNull = Builder.CreateICmpEQ(src, null, "memptr.isnull");
704     return Builder.CreateSelect(isNull, src, dst);
705   }
706 
707   // The this-adjustment is left-shifted by 1 on ARM.
708   if (UseARMMethodPtrABI) {
709     uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
710     offset <<= 1;
711     adj = llvm::ConstantInt::get(adj->getType(), offset);
712   }
713 
714   llvm::Value *srcAdj = Builder.CreateExtractValue(src, 1, "src.adj");
715   llvm::Value *dstAdj;
716   if (isDerivedToBase)
717     dstAdj = Builder.CreateNSWSub(srcAdj, adj, "adj");
718   else
719     dstAdj = Builder.CreateNSWAdd(srcAdj, adj, "adj");
720 
721   return Builder.CreateInsertValue(src, dstAdj, 1);
722 }
723 
724 llvm::Constant *
725 ItaniumCXXABI::EmitMemberPointerConversion(const CastExpr *E,
726                                            llvm::Constant *src) {
727   assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
728          E->getCastKind() == CK_BaseToDerivedMemberPointer ||
729          E->getCastKind() == CK_ReinterpretMemberPointer);
730 
731   // Under Itanium, reinterprets don't require any additional processing.
732   if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
733 
734   // If the adjustment is trivial, we don't need to do anything.
735   llvm::Constant *adj = getMemberPointerAdjustment(E);
736   if (!adj) return src;
737 
738   bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
739 
740   const MemberPointerType *destTy =
741     E->getType()->castAs<MemberPointerType>();
742 
743   // For member data pointers, this is just a matter of adding the
744   // offset if the source is non-null.
745   if (destTy->isMemberDataPointer()) {
746     // null maps to null.
747     if (src->isAllOnesValue()) return src;
748 
749     if (isDerivedToBase)
750       return llvm::ConstantExpr::getNSWSub(src, adj);
751     else
752       return llvm::ConstantExpr::getNSWAdd(src, adj);
753   }
754 
755   // The this-adjustment is left-shifted by 1 on ARM.
756   if (UseARMMethodPtrABI) {
757     uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
758     offset <<= 1;
759     adj = llvm::ConstantInt::get(adj->getType(), offset);
760   }
761 
762   llvm::Constant *srcAdj = llvm::ConstantExpr::getExtractValue(src, 1);
763   llvm::Constant *dstAdj;
764   if (isDerivedToBase)
765     dstAdj = llvm::ConstantExpr::getNSWSub(srcAdj, adj);
766   else
767     dstAdj = llvm::ConstantExpr::getNSWAdd(srcAdj, adj);
768 
769   return llvm::ConstantExpr::getInsertValue(src, dstAdj, 1);
770 }
771 
772 llvm::Constant *
773 ItaniumCXXABI::EmitNullMemberPointer(const MemberPointerType *MPT) {
774   // Itanium C++ ABI 2.3:
775   //   A NULL pointer is represented as -1.
776   if (MPT->isMemberDataPointer())
777     return llvm::ConstantInt::get(CGM.PtrDiffTy, -1ULL, /*isSigned=*/true);
778 
779   llvm::Constant *Zero = llvm::ConstantInt::get(CGM.PtrDiffTy, 0);
780   llvm::Constant *Values[2] = { Zero, Zero };
781   return llvm::ConstantStruct::getAnon(Values);
782 }
783 
784 llvm::Constant *
785 ItaniumCXXABI::EmitMemberDataPointer(const MemberPointerType *MPT,
786                                      CharUnits offset) {
787   // Itanium C++ ABI 2.3:
788   //   A pointer to data member is an offset from the base address of
789   //   the class object containing it, represented as a ptrdiff_t
790   return llvm::ConstantInt::get(CGM.PtrDiffTy, offset.getQuantity());
791 }
792 
793 llvm::Constant *
794 ItaniumCXXABI::EmitMemberFunctionPointer(const CXXMethodDecl *MD) {
795   return BuildMemberPointer(MD, CharUnits::Zero());
796 }
797 
798 llvm::Constant *ItaniumCXXABI::BuildMemberPointer(const CXXMethodDecl *MD,
799                                                   CharUnits ThisAdjustment) {
800   assert(MD->isInstance() && "Member function must not be static!");
801   MD = MD->getCanonicalDecl();
802 
803   CodeGenTypes &Types = CGM.getTypes();
804 
805   // Get the function pointer (or index if this is a virtual function).
806   llvm::Constant *MemPtr[2];
807   if (MD->isVirtual()) {
808     uint64_t Index = CGM.getItaniumVTableContext().getMethodVTableIndex(MD);
809 
810     const ASTContext &Context = getContext();
811     CharUnits PointerWidth =
812       Context.toCharUnitsFromBits(Context.getTargetInfo().getPointerWidth(0));
813     uint64_t VTableOffset = (Index * PointerWidth.getQuantity());
814 
815     if (UseARMMethodPtrABI) {
816       // ARM C++ ABI 3.2.1:
817       //   This ABI specifies that adj contains twice the this
818       //   adjustment, plus 1 if the member function is virtual. The
819       //   least significant bit of adj then makes exactly the same
820       //   discrimination as the least significant bit of ptr does for
821       //   Itanium.
822       MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset);
823       MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
824                                          2 * ThisAdjustment.getQuantity() + 1);
825     } else {
826       // Itanium C++ ABI 2.3:
827       //   For a virtual function, [the pointer field] is 1 plus the
828       //   virtual table offset (in bytes) of the function,
829       //   represented as a ptrdiff_t.
830       MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset + 1);
831       MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
832                                          ThisAdjustment.getQuantity());
833     }
834   } else {
835     const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
836     llvm::Type *Ty;
837     // Check whether the function has a computable LLVM signature.
838     if (Types.isFuncTypeConvertible(FPT)) {
839       // The function has a computable LLVM signature; use the correct type.
840       Ty = Types.GetFunctionType(Types.arrangeCXXMethodDeclaration(MD));
841     } else {
842       // Use an arbitrary non-function type to tell GetAddrOfFunction that the
843       // function type is incomplete.
844       Ty = CGM.PtrDiffTy;
845     }
846     llvm::Constant *addr = CGM.GetAddrOfFunction(MD, Ty);
847 
848     MemPtr[0] = llvm::ConstantExpr::getPtrToInt(addr, CGM.PtrDiffTy);
849     MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
850                                        (UseARMMethodPtrABI ? 2 : 1) *
851                                        ThisAdjustment.getQuantity());
852   }
853 
854   return llvm::ConstantStruct::getAnon(MemPtr);
855 }
856 
857 llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const APValue &MP,
858                                                  QualType MPType) {
859   const MemberPointerType *MPT = MPType->castAs<MemberPointerType>();
860   const ValueDecl *MPD = MP.getMemberPointerDecl();
861   if (!MPD)
862     return EmitNullMemberPointer(MPT);
863 
864   CharUnits ThisAdjustment = getMemberPointerPathAdjustment(MP);
865 
866   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MPD))
867     return BuildMemberPointer(MD, ThisAdjustment);
868 
869   CharUnits FieldOffset =
870     getContext().toCharUnitsFromBits(getContext().getFieldOffset(MPD));
871   return EmitMemberDataPointer(MPT, ThisAdjustment + FieldOffset);
872 }
873 
874 /// The comparison algorithm is pretty easy: the member pointers are
875 /// the same if they're either bitwise identical *or* both null.
876 ///
877 /// ARM is different here only because null-ness is more complicated.
878 llvm::Value *
879 ItaniumCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF,
880                                            llvm::Value *L,
881                                            llvm::Value *R,
882                                            const MemberPointerType *MPT,
883                                            bool Inequality) {
884   CGBuilderTy &Builder = CGF.Builder;
885 
886   llvm::ICmpInst::Predicate Eq;
887   llvm::Instruction::BinaryOps And, Or;
888   if (Inequality) {
889     Eq = llvm::ICmpInst::ICMP_NE;
890     And = llvm::Instruction::Or;
891     Or = llvm::Instruction::And;
892   } else {
893     Eq = llvm::ICmpInst::ICMP_EQ;
894     And = llvm::Instruction::And;
895     Or = llvm::Instruction::Or;
896   }
897 
898   // Member data pointers are easy because there's a unique null
899   // value, so it just comes down to bitwise equality.
900   if (MPT->isMemberDataPointer())
901     return Builder.CreateICmp(Eq, L, R);
902 
903   // For member function pointers, the tautologies are more complex.
904   // The Itanium tautology is:
905   //   (L == R) <==> (L.ptr == R.ptr && (L.ptr == 0 || L.adj == R.adj))
906   // The ARM tautology is:
907   //   (L == R) <==> (L.ptr == R.ptr &&
908   //                  (L.adj == R.adj ||
909   //                   (L.ptr == 0 && ((L.adj|R.adj) & 1) == 0)))
910   // The inequality tautologies have exactly the same structure, except
911   // applying De Morgan's laws.
912 
913   llvm::Value *LPtr = Builder.CreateExtractValue(L, 0, "lhs.memptr.ptr");
914   llvm::Value *RPtr = Builder.CreateExtractValue(R, 0, "rhs.memptr.ptr");
915 
916   // This condition tests whether L.ptr == R.ptr.  This must always be
917   // true for equality to hold.
918   llvm::Value *PtrEq = Builder.CreateICmp(Eq, LPtr, RPtr, "cmp.ptr");
919 
920   // This condition, together with the assumption that L.ptr == R.ptr,
921   // tests whether the pointers are both null.  ARM imposes an extra
922   // condition.
923   llvm::Value *Zero = llvm::Constant::getNullValue(LPtr->getType());
924   llvm::Value *EqZero = Builder.CreateICmp(Eq, LPtr, Zero, "cmp.ptr.null");
925 
926   // This condition tests whether L.adj == R.adj.  If this isn't
927   // true, the pointers are unequal unless they're both null.
928   llvm::Value *LAdj = Builder.CreateExtractValue(L, 1, "lhs.memptr.adj");
929   llvm::Value *RAdj = Builder.CreateExtractValue(R, 1, "rhs.memptr.adj");
930   llvm::Value *AdjEq = Builder.CreateICmp(Eq, LAdj, RAdj, "cmp.adj");
931 
932   // Null member function pointers on ARM clear the low bit of Adj,
933   // so the zero condition has to check that neither low bit is set.
934   if (UseARMMethodPtrABI) {
935     llvm::Value *One = llvm::ConstantInt::get(LPtr->getType(), 1);
936 
937     // Compute (l.adj | r.adj) & 1 and test it against zero.
938     llvm::Value *OrAdj = Builder.CreateOr(LAdj, RAdj, "or.adj");
939     llvm::Value *OrAdjAnd1 = Builder.CreateAnd(OrAdj, One);
940     llvm::Value *OrAdjAnd1EqZero = Builder.CreateICmp(Eq, OrAdjAnd1, Zero,
941                                                       "cmp.or.adj");
942     EqZero = Builder.CreateBinOp(And, EqZero, OrAdjAnd1EqZero);
943   }
944 
945   // Tie together all our conditions.
946   llvm::Value *Result = Builder.CreateBinOp(Or, EqZero, AdjEq);
947   Result = Builder.CreateBinOp(And, PtrEq, Result,
948                                Inequality ? "memptr.ne" : "memptr.eq");
949   return Result;
950 }
951 
952 llvm::Value *
953 ItaniumCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
954                                           llvm::Value *MemPtr,
955                                           const MemberPointerType *MPT) {
956   CGBuilderTy &Builder = CGF.Builder;
957 
958   /// For member data pointers, this is just a check against -1.
959   if (MPT->isMemberDataPointer()) {
960     assert(MemPtr->getType() == CGM.PtrDiffTy);
961     llvm::Value *NegativeOne =
962       llvm::Constant::getAllOnesValue(MemPtr->getType());
963     return Builder.CreateICmpNE(MemPtr, NegativeOne, "memptr.tobool");
964   }
965 
966   // In Itanium, a member function pointer is not null if 'ptr' is not null.
967   llvm::Value *Ptr = Builder.CreateExtractValue(MemPtr, 0, "memptr.ptr");
968 
969   llvm::Constant *Zero = llvm::ConstantInt::get(Ptr->getType(), 0);
970   llvm::Value *Result = Builder.CreateICmpNE(Ptr, Zero, "memptr.tobool");
971 
972   // On ARM, a member function pointer is also non-null if the low bit of 'adj'
973   // (the virtual bit) is set.
974   if (UseARMMethodPtrABI) {
975     llvm::Constant *One = llvm::ConstantInt::get(Ptr->getType(), 1);
976     llvm::Value *Adj = Builder.CreateExtractValue(MemPtr, 1, "memptr.adj");
977     llvm::Value *VirtualBit = Builder.CreateAnd(Adj, One, "memptr.virtualbit");
978     llvm::Value *IsVirtual = Builder.CreateICmpNE(VirtualBit, Zero,
979                                                   "memptr.isvirtual");
980     Result = Builder.CreateOr(Result, IsVirtual);
981   }
982 
983   return Result;
984 }
985 
986 bool ItaniumCXXABI::classifyReturnType(CGFunctionInfo &FI) const {
987   const CXXRecordDecl *RD = FI.getReturnType()->getAsCXXRecordDecl();
988   if (!RD)
989     return false;
990 
991   // Return indirectly if we have a non-trivial copy ctor or non-trivial dtor.
992   // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
993   // special members.
994   if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor()) {
995     auto Align = CGM.getContext().getTypeAlignInChars(FI.getReturnType());
996     FI.getReturnInfo() = ABIArgInfo::getIndirect(Align, /*ByVal=*/false);
997     return true;
998   }
999   return false;
1000 }
1001 
1002 /// The Itanium ABI requires non-zero initialization only for data
1003 /// member pointers, for which '0' is a valid offset.
1004 bool ItaniumCXXABI::isZeroInitializable(const MemberPointerType *MPT) {
1005   return MPT->isMemberFunctionPointer();
1006 }
1007 
1008 /// The Itanium ABI always places an offset to the complete object
1009 /// at entry -2 in the vtable.
1010 void ItaniumCXXABI::emitVirtualObjectDelete(CodeGenFunction &CGF,
1011                                             const CXXDeleteExpr *DE,
1012                                             Address Ptr,
1013                                             QualType ElementType,
1014                                             const CXXDestructorDecl *Dtor) {
1015   bool UseGlobalDelete = DE->isGlobalDelete();
1016   if (UseGlobalDelete) {
1017     // Derive the complete-object pointer, which is what we need
1018     // to pass to the deallocation function.
1019 
1020     // Grab the vtable pointer as an intptr_t*.
1021     auto *ClassDecl =
1022         cast<CXXRecordDecl>(ElementType->getAs<RecordType>()->getDecl());
1023     llvm::Value *VTable =
1024         CGF.GetVTablePtr(Ptr, CGF.IntPtrTy->getPointerTo(), ClassDecl);
1025 
1026     // Track back to entry -2 and pull out the offset there.
1027     llvm::Value *OffsetPtr = CGF.Builder.CreateConstInBoundsGEP1_64(
1028         VTable, -2, "complete-offset.ptr");
1029     llvm::Value *Offset =
1030       CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign());
1031 
1032     // Apply the offset.
1033     llvm::Value *CompletePtr =
1034       CGF.Builder.CreateBitCast(Ptr.getPointer(), CGF.Int8PtrTy);
1035     CompletePtr = CGF.Builder.CreateInBoundsGEP(CompletePtr, Offset);
1036 
1037     // If we're supposed to call the global delete, make sure we do so
1038     // even if the destructor throws.
1039     CGF.pushCallObjectDeleteCleanup(DE->getOperatorDelete(), CompletePtr,
1040                                     ElementType);
1041   }
1042 
1043   // FIXME: Provide a source location here even though there's no
1044   // CXXMemberCallExpr for dtor call.
1045   CXXDtorType DtorType = UseGlobalDelete ? Dtor_Complete : Dtor_Deleting;
1046   EmitVirtualDestructorCall(CGF, Dtor, DtorType, Ptr, /*CE=*/nullptr);
1047 
1048   if (UseGlobalDelete)
1049     CGF.PopCleanupBlock();
1050 }
1051 
1052 void ItaniumCXXABI::emitRethrow(CodeGenFunction &CGF, bool isNoReturn) {
1053   // void __cxa_rethrow();
1054 
1055   llvm::FunctionType *FTy =
1056     llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
1057 
1058   llvm::Constant *Fn = CGM.CreateRuntimeFunction(FTy, "__cxa_rethrow");
1059 
1060   if (isNoReturn)
1061     CGF.EmitNoreturnRuntimeCallOrInvoke(Fn, None);
1062   else
1063     CGF.EmitRuntimeCallOrInvoke(Fn);
1064 }
1065 
1066 static llvm::Constant *getAllocateExceptionFn(CodeGenModule &CGM) {
1067   // void *__cxa_allocate_exception(size_t thrown_size);
1068 
1069   llvm::FunctionType *FTy =
1070     llvm::FunctionType::get(CGM.Int8PtrTy, CGM.SizeTy, /*IsVarArgs=*/false);
1071 
1072   return CGM.CreateRuntimeFunction(FTy, "__cxa_allocate_exception");
1073 }
1074 
1075 static llvm::Constant *getThrowFn(CodeGenModule &CGM) {
1076   // void __cxa_throw(void *thrown_exception, std::type_info *tinfo,
1077   //                  void (*dest) (void *));
1078 
1079   llvm::Type *Args[3] = { CGM.Int8PtrTy, CGM.Int8PtrTy, CGM.Int8PtrTy };
1080   llvm::FunctionType *FTy =
1081     llvm::FunctionType::get(CGM.VoidTy, Args, /*IsVarArgs=*/false);
1082 
1083   return CGM.CreateRuntimeFunction(FTy, "__cxa_throw");
1084 }
1085 
1086 void ItaniumCXXABI::emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) {
1087   QualType ThrowType = E->getSubExpr()->getType();
1088   // Now allocate the exception object.
1089   llvm::Type *SizeTy = CGF.ConvertType(getContext().getSizeType());
1090   uint64_t TypeSize = getContext().getTypeSizeInChars(ThrowType).getQuantity();
1091 
1092   llvm::Constant *AllocExceptionFn = getAllocateExceptionFn(CGM);
1093   llvm::CallInst *ExceptionPtr = CGF.EmitNounwindRuntimeCall(
1094       AllocExceptionFn, llvm::ConstantInt::get(SizeTy, TypeSize), "exception");
1095 
1096   CharUnits ExnAlign = getAlignmentOfExnObject();
1097   CGF.EmitAnyExprToExn(E->getSubExpr(), Address(ExceptionPtr, ExnAlign));
1098 
1099   // Now throw the exception.
1100   llvm::Constant *TypeInfo = CGM.GetAddrOfRTTIDescriptor(ThrowType,
1101                                                          /*ForEH=*/true);
1102 
1103   // The address of the destructor.  If the exception type has a
1104   // trivial destructor (or isn't a record), we just pass null.
1105   llvm::Constant *Dtor = nullptr;
1106   if (const RecordType *RecordTy = ThrowType->getAs<RecordType>()) {
1107     CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordTy->getDecl());
1108     if (!Record->hasTrivialDestructor()) {
1109       CXXDestructorDecl *DtorD = Record->getDestructor();
1110       Dtor = CGM.getAddrOfCXXStructor(DtorD, StructorType::Complete);
1111       Dtor = llvm::ConstantExpr::getBitCast(Dtor, CGM.Int8PtrTy);
1112     }
1113   }
1114   if (!Dtor) Dtor = llvm::Constant::getNullValue(CGM.Int8PtrTy);
1115 
1116   llvm::Value *args[] = { ExceptionPtr, TypeInfo, Dtor };
1117   CGF.EmitNoreturnRuntimeCallOrInvoke(getThrowFn(CGM), args);
1118 }
1119 
1120 static llvm::Constant *getItaniumDynamicCastFn(CodeGenFunction &CGF) {
1121   // void *__dynamic_cast(const void *sub,
1122   //                      const abi::__class_type_info *src,
1123   //                      const abi::__class_type_info *dst,
1124   //                      std::ptrdiff_t src2dst_offset);
1125 
1126   llvm::Type *Int8PtrTy = CGF.Int8PtrTy;
1127   llvm::Type *PtrDiffTy =
1128     CGF.ConvertType(CGF.getContext().getPointerDiffType());
1129 
1130   llvm::Type *Args[4] = { Int8PtrTy, Int8PtrTy, Int8PtrTy, PtrDiffTy };
1131 
1132   llvm::FunctionType *FTy = llvm::FunctionType::get(Int8PtrTy, Args, false);
1133 
1134   // Mark the function as nounwind readonly.
1135   llvm::Attribute::AttrKind FuncAttrs[] = { llvm::Attribute::NoUnwind,
1136                                             llvm::Attribute::ReadOnly };
1137   llvm::AttributeSet Attrs = llvm::AttributeSet::get(
1138       CGF.getLLVMContext(), llvm::AttributeSet::FunctionIndex, FuncAttrs);
1139 
1140   return CGF.CGM.CreateRuntimeFunction(FTy, "__dynamic_cast", Attrs);
1141 }
1142 
1143 static llvm::Constant *getBadCastFn(CodeGenFunction &CGF) {
1144   // void __cxa_bad_cast();
1145   llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
1146   return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_cast");
1147 }
1148 
1149 /// \brief Compute the src2dst_offset hint as described in the
1150 /// Itanium C++ ABI [2.9.7]
1151 static CharUnits computeOffsetHint(ASTContext &Context,
1152                                    const CXXRecordDecl *Src,
1153                                    const CXXRecordDecl *Dst) {
1154   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
1155                      /*DetectVirtual=*/false);
1156 
1157   // If Dst is not derived from Src we can skip the whole computation below and
1158   // return that Src is not a public base of Dst.  Record all inheritance paths.
1159   if (!Dst->isDerivedFrom(Src, Paths))
1160     return CharUnits::fromQuantity(-2ULL);
1161 
1162   unsigned NumPublicPaths = 0;
1163   CharUnits Offset;
1164 
1165   // Now walk all possible inheritance paths.
1166   for (const CXXBasePath &Path : Paths) {
1167     if (Path.Access != AS_public)  // Ignore non-public inheritance.
1168       continue;
1169 
1170     ++NumPublicPaths;
1171 
1172     for (const CXXBasePathElement &PathElement : Path) {
1173       // If the path contains a virtual base class we can't give any hint.
1174       // -1: no hint.
1175       if (PathElement.Base->isVirtual())
1176         return CharUnits::fromQuantity(-1ULL);
1177 
1178       if (NumPublicPaths > 1) // Won't use offsets, skip computation.
1179         continue;
1180 
1181       // Accumulate the base class offsets.
1182       const ASTRecordLayout &L = Context.getASTRecordLayout(PathElement.Class);
1183       Offset += L.getBaseClassOffset(
1184           PathElement.Base->getType()->getAsCXXRecordDecl());
1185     }
1186   }
1187 
1188   // -2: Src is not a public base of Dst.
1189   if (NumPublicPaths == 0)
1190     return CharUnits::fromQuantity(-2ULL);
1191 
1192   // -3: Src is a multiple public base type but never a virtual base type.
1193   if (NumPublicPaths > 1)
1194     return CharUnits::fromQuantity(-3ULL);
1195 
1196   // Otherwise, the Src type is a unique public nonvirtual base type of Dst.
1197   // Return the offset of Src from the origin of Dst.
1198   return Offset;
1199 }
1200 
1201 static llvm::Constant *getBadTypeidFn(CodeGenFunction &CGF) {
1202   // void __cxa_bad_typeid();
1203   llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
1204 
1205   return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid");
1206 }
1207 
1208 bool ItaniumCXXABI::shouldTypeidBeNullChecked(bool IsDeref,
1209                                               QualType SrcRecordTy) {
1210   return IsDeref;
1211 }
1212 
1213 void ItaniumCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) {
1214   llvm::Value *Fn = getBadTypeidFn(CGF);
1215   CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
1216   CGF.Builder.CreateUnreachable();
1217 }
1218 
1219 llvm::Value *ItaniumCXXABI::EmitTypeid(CodeGenFunction &CGF,
1220                                        QualType SrcRecordTy,
1221                                        Address ThisPtr,
1222                                        llvm::Type *StdTypeInfoPtrTy) {
1223   auto *ClassDecl =
1224       cast<CXXRecordDecl>(SrcRecordTy->getAs<RecordType>()->getDecl());
1225   llvm::Value *Value =
1226       CGF.GetVTablePtr(ThisPtr, StdTypeInfoPtrTy->getPointerTo(), ClassDecl);
1227 
1228   // Load the type info.
1229   Value = CGF.Builder.CreateConstInBoundsGEP1_64(Value, -1ULL);
1230   return CGF.Builder.CreateAlignedLoad(Value, CGF.getPointerAlign());
1231 }
1232 
1233 bool ItaniumCXXABI::shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
1234                                                        QualType SrcRecordTy) {
1235   return SrcIsPtr;
1236 }
1237 
1238 llvm::Value *ItaniumCXXABI::EmitDynamicCastCall(
1239     CodeGenFunction &CGF, Address ThisAddr, QualType SrcRecordTy,
1240     QualType DestTy, QualType DestRecordTy, llvm::BasicBlock *CastEnd) {
1241   llvm::Type *PtrDiffLTy =
1242       CGF.ConvertType(CGF.getContext().getPointerDiffType());
1243   llvm::Type *DestLTy = CGF.ConvertType(DestTy);
1244 
1245   llvm::Value *SrcRTTI =
1246       CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
1247   llvm::Value *DestRTTI =
1248       CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
1249 
1250   // Compute the offset hint.
1251   const CXXRecordDecl *SrcDecl = SrcRecordTy->getAsCXXRecordDecl();
1252   const CXXRecordDecl *DestDecl = DestRecordTy->getAsCXXRecordDecl();
1253   llvm::Value *OffsetHint = llvm::ConstantInt::get(
1254       PtrDiffLTy,
1255       computeOffsetHint(CGF.getContext(), SrcDecl, DestDecl).getQuantity());
1256 
1257   // Emit the call to __dynamic_cast.
1258   llvm::Value *Value = ThisAddr.getPointer();
1259   Value = CGF.EmitCastToVoidPtr(Value);
1260 
1261   llvm::Value *args[] = {Value, SrcRTTI, DestRTTI, OffsetHint};
1262   Value = CGF.EmitNounwindRuntimeCall(getItaniumDynamicCastFn(CGF), args);
1263   Value = CGF.Builder.CreateBitCast(Value, DestLTy);
1264 
1265   /// C++ [expr.dynamic.cast]p9:
1266   ///   A failed cast to reference type throws std::bad_cast
1267   if (DestTy->isReferenceType()) {
1268     llvm::BasicBlock *BadCastBlock =
1269         CGF.createBasicBlock("dynamic_cast.bad_cast");
1270 
1271     llvm::Value *IsNull = CGF.Builder.CreateIsNull(Value);
1272     CGF.Builder.CreateCondBr(IsNull, BadCastBlock, CastEnd);
1273 
1274     CGF.EmitBlock(BadCastBlock);
1275     EmitBadCastCall(CGF);
1276   }
1277 
1278   return Value;
1279 }
1280 
1281 llvm::Value *ItaniumCXXABI::EmitDynamicCastToVoid(CodeGenFunction &CGF,
1282                                                   Address ThisAddr,
1283                                                   QualType SrcRecordTy,
1284                                                   QualType DestTy) {
1285   llvm::Type *PtrDiffLTy =
1286       CGF.ConvertType(CGF.getContext().getPointerDiffType());
1287   llvm::Type *DestLTy = CGF.ConvertType(DestTy);
1288 
1289   auto *ClassDecl =
1290       cast<CXXRecordDecl>(SrcRecordTy->getAs<RecordType>()->getDecl());
1291   // Get the vtable pointer.
1292   llvm::Value *VTable = CGF.GetVTablePtr(ThisAddr, PtrDiffLTy->getPointerTo(),
1293       ClassDecl);
1294 
1295   // Get the offset-to-top from the vtable.
1296   llvm::Value *OffsetToTop =
1297       CGF.Builder.CreateConstInBoundsGEP1_64(VTable, -2ULL);
1298   OffsetToTop =
1299     CGF.Builder.CreateAlignedLoad(OffsetToTop, CGF.getPointerAlign(),
1300                                   "offset.to.top");
1301 
1302   // Finally, add the offset to the pointer.
1303   llvm::Value *Value = ThisAddr.getPointer();
1304   Value = CGF.EmitCastToVoidPtr(Value);
1305   Value = CGF.Builder.CreateInBoundsGEP(Value, OffsetToTop);
1306 
1307   return CGF.Builder.CreateBitCast(Value, DestLTy);
1308 }
1309 
1310 bool ItaniumCXXABI::EmitBadCastCall(CodeGenFunction &CGF) {
1311   llvm::Value *Fn = getBadCastFn(CGF);
1312   CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
1313   CGF.Builder.CreateUnreachable();
1314   return true;
1315 }
1316 
1317 llvm::Value *
1318 ItaniumCXXABI::GetVirtualBaseClassOffset(CodeGenFunction &CGF,
1319                                          Address This,
1320                                          const CXXRecordDecl *ClassDecl,
1321                                          const CXXRecordDecl *BaseClassDecl) {
1322   llvm::Value *VTablePtr = CGF.GetVTablePtr(This, CGM.Int8PtrTy, ClassDecl);
1323   CharUnits VBaseOffsetOffset =
1324       CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(ClassDecl,
1325                                                                BaseClassDecl);
1326 
1327   llvm::Value *VBaseOffsetPtr =
1328     CGF.Builder.CreateConstGEP1_64(VTablePtr, VBaseOffsetOffset.getQuantity(),
1329                                    "vbase.offset.ptr");
1330   VBaseOffsetPtr = CGF.Builder.CreateBitCast(VBaseOffsetPtr,
1331                                              CGM.PtrDiffTy->getPointerTo());
1332 
1333   llvm::Value *VBaseOffset =
1334     CGF.Builder.CreateAlignedLoad(VBaseOffsetPtr, CGF.getPointerAlign(),
1335                                   "vbase.offset");
1336 
1337   return VBaseOffset;
1338 }
1339 
1340 void ItaniumCXXABI::EmitCXXConstructors(const CXXConstructorDecl *D) {
1341   // Just make sure we're in sync with TargetCXXABI.
1342   assert(CGM.getTarget().getCXXABI().hasConstructorVariants());
1343 
1344   // The constructor used for constructing this as a base class;
1345   // ignores virtual bases.
1346   CGM.EmitGlobal(GlobalDecl(D, Ctor_Base));
1347 
1348   // The constructor used for constructing this as a complete class;
1349   // constructs the virtual bases, then calls the base constructor.
1350   if (!D->getParent()->isAbstract()) {
1351     // We don't need to emit the complete ctor if the class is abstract.
1352     CGM.EmitGlobal(GlobalDecl(D, Ctor_Complete));
1353   }
1354 }
1355 
1356 void
1357 ItaniumCXXABI::buildStructorSignature(const CXXMethodDecl *MD, StructorType T,
1358                                       SmallVectorImpl<CanQualType> &ArgTys) {
1359   ASTContext &Context = getContext();
1360 
1361   // All parameters are already in place except VTT, which goes after 'this'.
1362   // These are Clang types, so we don't need to worry about sret yet.
1363 
1364   // Check if we need to add a VTT parameter (which has type void **).
1365   if (T == StructorType::Base && MD->getParent()->getNumVBases() != 0)
1366     ArgTys.insert(ArgTys.begin() + 1,
1367                   Context.getPointerType(Context.VoidPtrTy));
1368 }
1369 
1370 void ItaniumCXXABI::EmitCXXDestructors(const CXXDestructorDecl *D) {
1371   // The destructor used for destructing this as a base class; ignores
1372   // virtual bases.
1373   CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
1374 
1375   // The destructor used for destructing this as a most-derived class;
1376   // call the base destructor and then destructs any virtual bases.
1377   CGM.EmitGlobal(GlobalDecl(D, Dtor_Complete));
1378 
1379   // The destructor in a virtual table is always a 'deleting'
1380   // destructor, which calls the complete destructor and then uses the
1381   // appropriate operator delete.
1382   if (D->isVirtual())
1383     CGM.EmitGlobal(GlobalDecl(D, Dtor_Deleting));
1384 }
1385 
1386 void ItaniumCXXABI::addImplicitStructorParams(CodeGenFunction &CGF,
1387                                               QualType &ResTy,
1388                                               FunctionArgList &Params) {
1389   const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
1390   assert(isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD));
1391 
1392   // Check if we need a VTT parameter as well.
1393   if (NeedsVTTParameter(CGF.CurGD)) {
1394     ASTContext &Context = getContext();
1395 
1396     // FIXME: avoid the fake decl
1397     QualType T = Context.getPointerType(Context.VoidPtrTy);
1398     ImplicitParamDecl *VTTDecl
1399       = ImplicitParamDecl::Create(Context, nullptr, MD->getLocation(),
1400                                   &Context.Idents.get("vtt"), T);
1401     Params.insert(Params.begin() + 1, VTTDecl);
1402     getStructorImplicitParamDecl(CGF) = VTTDecl;
1403   }
1404 }
1405 
1406 void ItaniumCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
1407   // Naked functions have no prolog.
1408   if (CGF.CurFuncDecl && CGF.CurFuncDecl->hasAttr<NakedAttr>())
1409     return;
1410 
1411   /// Initialize the 'this' slot.
1412   EmitThisParam(CGF);
1413 
1414   /// Initialize the 'vtt' slot if needed.
1415   if (getStructorImplicitParamDecl(CGF)) {
1416     getStructorImplicitParamValue(CGF) = CGF.Builder.CreateLoad(
1417         CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), "vtt");
1418   }
1419 
1420   /// If this is a function that the ABI specifies returns 'this', initialize
1421   /// the return slot to 'this' at the start of the function.
1422   ///
1423   /// Unlike the setting of return types, this is done within the ABI
1424   /// implementation instead of by clients of CGCXXABI because:
1425   /// 1) getThisValue is currently protected
1426   /// 2) in theory, an ABI could implement 'this' returns some other way;
1427   ///    HasThisReturn only specifies a contract, not the implementation
1428   if (HasThisReturn(CGF.CurGD))
1429     CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue);
1430 }
1431 
1432 unsigned ItaniumCXXABI::addImplicitConstructorArgs(
1433     CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type,
1434     bool ForVirtualBase, bool Delegating, CallArgList &Args) {
1435   if (!NeedsVTTParameter(GlobalDecl(D, Type)))
1436     return 0;
1437 
1438   // Insert the implicit 'vtt' argument as the second argument.
1439   llvm::Value *VTT =
1440       CGF.GetVTTParameter(GlobalDecl(D, Type), ForVirtualBase, Delegating);
1441   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1442   Args.insert(Args.begin() + 1,
1443               CallArg(RValue::get(VTT), VTTTy, /*needscopy=*/false));
1444   return 1;  // Added one arg.
1445 }
1446 
1447 void ItaniumCXXABI::EmitDestructorCall(CodeGenFunction &CGF,
1448                                        const CXXDestructorDecl *DD,
1449                                        CXXDtorType Type, bool ForVirtualBase,
1450                                        bool Delegating, Address This) {
1451   GlobalDecl GD(DD, Type);
1452   llvm::Value *VTT = CGF.GetVTTParameter(GD, ForVirtualBase, Delegating);
1453   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1454 
1455   CGCallee Callee;
1456   if (getContext().getLangOpts().AppleKext &&
1457       Type != Dtor_Base && DD->isVirtual())
1458     Callee = CGF.BuildAppleKextVirtualDestructorCall(DD, Type, DD->getParent());
1459   else
1460     Callee =
1461       CGCallee::forDirect(CGM.getAddrOfCXXStructor(DD, getFromDtorType(Type)),
1462                           DD);
1463 
1464   CGF.EmitCXXMemberOrOperatorCall(DD, Callee, ReturnValueSlot(),
1465                                   This.getPointer(), VTT, VTTTy,
1466                                   nullptr, nullptr);
1467 }
1468 
1469 void ItaniumCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
1470                                           const CXXRecordDecl *RD) {
1471   llvm::GlobalVariable *VTable = getAddrOfVTable(RD, CharUnits());
1472   if (VTable->hasInitializer())
1473     return;
1474 
1475   ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
1476   const VTableLayout &VTLayout = VTContext.getVTableLayout(RD);
1477   llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
1478   llvm::Constant *RTTI =
1479       CGM.GetAddrOfRTTIDescriptor(CGM.getContext().getTagDeclType(RD));
1480 
1481   // Create and set the initializer.
1482   ConstantInitBuilder Builder(CGM);
1483   auto Components = Builder.beginStruct();
1484   CGVT.createVTableInitializer(Components, VTLayout, RTTI);
1485   Components.finishAndSetAsInitializer(VTable);
1486 
1487   // Set the correct linkage.
1488   VTable->setLinkage(Linkage);
1489 
1490   if (CGM.supportsCOMDAT() && VTable->isWeakForLinker())
1491     VTable->setComdat(CGM.getModule().getOrInsertComdat(VTable->getName()));
1492 
1493   // Set the right visibility.
1494   CGM.setGlobalVisibility(VTable, RD);
1495 
1496   // Use pointer alignment for the vtable. Otherwise we would align them based
1497   // on the size of the initializer which doesn't make sense as only single
1498   // values are read.
1499   unsigned PAlign = CGM.getTarget().getPointerAlign(0);
1500   VTable->setAlignment(getContext().toCharUnitsFromBits(PAlign).getQuantity());
1501 
1502   // If this is the magic class __cxxabiv1::__fundamental_type_info,
1503   // we will emit the typeinfo for the fundamental types. This is the
1504   // same behaviour as GCC.
1505   const DeclContext *DC = RD->getDeclContext();
1506   if (RD->getIdentifier() &&
1507       RD->getIdentifier()->isStr("__fundamental_type_info") &&
1508       isa<NamespaceDecl>(DC) && cast<NamespaceDecl>(DC)->getIdentifier() &&
1509       cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__cxxabiv1") &&
1510       DC->getParent()->isTranslationUnit())
1511     EmitFundamentalRTTIDescriptors(RD->hasAttr<DLLExportAttr>());
1512 
1513   if (!VTable->isDeclarationForLinker())
1514     CGM.EmitVTableTypeMetadata(VTable, VTLayout);
1515 }
1516 
1517 bool ItaniumCXXABI::isVirtualOffsetNeededForVTableField(
1518     CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) {
1519   if (Vptr.NearestVBase == nullptr)
1520     return false;
1521   return NeedsVTTParameter(CGF.CurGD);
1522 }
1523 
1524 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructor(
1525     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1526     const CXXRecordDecl *NearestVBase) {
1527 
1528   if ((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1529       NeedsVTTParameter(CGF.CurGD)) {
1530     return getVTableAddressPointInStructorWithVTT(CGF, VTableClass, Base,
1531                                                   NearestVBase);
1532   }
1533   return getVTableAddressPoint(Base, VTableClass);
1534 }
1535 
1536 llvm::Constant *
1537 ItaniumCXXABI::getVTableAddressPoint(BaseSubobject Base,
1538                                      const CXXRecordDecl *VTableClass) {
1539   llvm::GlobalValue *VTable = getAddrOfVTable(VTableClass, CharUnits());
1540 
1541   // Find the appropriate vtable within the vtable group, and the address point
1542   // within that vtable.
1543   VTableLayout::AddressPointLocation AddressPoint =
1544       CGM.getItaniumVTableContext()
1545           .getVTableLayout(VTableClass)
1546           .getAddressPoint(Base);
1547   llvm::Value *Indices[] = {
1548     llvm::ConstantInt::get(CGM.Int32Ty, 0),
1549     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.VTableIndex),
1550     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.AddressPointIndex),
1551   };
1552 
1553   return llvm::ConstantExpr::getGetElementPtr(VTable->getValueType(), VTable,
1554                                               Indices, /*InBounds=*/true,
1555                                               /*InRangeIndex=*/1);
1556 }
1557 
1558 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructorWithVTT(
1559     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1560     const CXXRecordDecl *NearestVBase) {
1561   assert((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1562          NeedsVTTParameter(CGF.CurGD) && "This class doesn't have VTT");
1563 
1564   // Get the secondary vpointer index.
1565   uint64_t VirtualPointerIndex =
1566       CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base);
1567 
1568   /// Load the VTT.
1569   llvm::Value *VTT = CGF.LoadCXXVTT();
1570   if (VirtualPointerIndex)
1571     VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex);
1572 
1573   // And load the address point from the VTT.
1574   return CGF.Builder.CreateAlignedLoad(VTT, CGF.getPointerAlign());
1575 }
1576 
1577 llvm::Constant *ItaniumCXXABI::getVTableAddressPointForConstExpr(
1578     BaseSubobject Base, const CXXRecordDecl *VTableClass) {
1579   return getVTableAddressPoint(Base, VTableClass);
1580 }
1581 
1582 llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1583                                                      CharUnits VPtrOffset) {
1584   assert(VPtrOffset.isZero() && "Itanium ABI only supports zero vptr offsets");
1585 
1586   llvm::GlobalVariable *&VTable = VTables[RD];
1587   if (VTable)
1588     return VTable;
1589 
1590   // Queue up this vtable for possible deferred emission.
1591   CGM.addDeferredVTable(RD);
1592 
1593   SmallString<256> Name;
1594   llvm::raw_svector_ostream Out(Name);
1595   getMangleContext().mangleCXXVTable(RD, Out);
1596 
1597   const VTableLayout &VTLayout =
1598       CGM.getItaniumVTableContext().getVTableLayout(RD);
1599   llvm::Type *VTableType = CGM.getVTables().getVTableType(VTLayout);
1600 
1601   VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
1602       Name, VTableType, llvm::GlobalValue::ExternalLinkage);
1603   VTable->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
1604 
1605   if (RD->hasAttr<DLLImportAttr>())
1606     VTable->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
1607   else if (RD->hasAttr<DLLExportAttr>())
1608     VTable->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
1609 
1610   return VTable;
1611 }
1612 
1613 CGCallee ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
1614                                                   GlobalDecl GD,
1615                                                   Address This,
1616                                                   llvm::Type *Ty,
1617                                                   SourceLocation Loc) {
1618   GD = GD.getCanonicalDecl();
1619   Ty = Ty->getPointerTo()->getPointerTo();
1620   auto *MethodDecl = cast<CXXMethodDecl>(GD.getDecl());
1621   llvm::Value *VTable = CGF.GetVTablePtr(This, Ty, MethodDecl->getParent());
1622 
1623   uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
1624   llvm::Value *VFunc;
1625   if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) {
1626     VFunc = CGF.EmitVTableTypeCheckedLoad(
1627         MethodDecl->getParent(), VTable,
1628         VTableIndex * CGM.getContext().getTargetInfo().getPointerWidth(0) / 8);
1629   } else {
1630     CGF.EmitTypeMetadataCodeForVCall(MethodDecl->getParent(), VTable, Loc);
1631 
1632     llvm::Value *VFuncPtr =
1633         CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
1634     auto *VFuncLoad =
1635         CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign());
1636 
1637     // Add !invariant.load md to virtual function load to indicate that
1638     // function didn't change inside vtable.
1639     // It's safe to add it without -fstrict-vtable-pointers, but it would not
1640     // help in devirtualization because it will only matter if we will have 2
1641     // the same virtual function loads from the same vtable load, which won't
1642     // happen without enabled devirtualization with -fstrict-vtable-pointers.
1643     if (CGM.getCodeGenOpts().OptimizationLevel > 0 &&
1644         CGM.getCodeGenOpts().StrictVTablePointers)
1645       VFuncLoad->setMetadata(
1646           llvm::LLVMContext::MD_invariant_load,
1647           llvm::MDNode::get(CGM.getLLVMContext(),
1648                             llvm::ArrayRef<llvm::Metadata *>()));
1649     VFunc = VFuncLoad;
1650   }
1651 
1652   CGCallee Callee(MethodDecl, VFunc);
1653   return Callee;
1654 }
1655 
1656 llvm::Value *ItaniumCXXABI::EmitVirtualDestructorCall(
1657     CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType,
1658     Address This, const CXXMemberCallExpr *CE) {
1659   assert(CE == nullptr || CE->arg_begin() == CE->arg_end());
1660   assert(DtorType == Dtor_Deleting || DtorType == Dtor_Complete);
1661 
1662   const CGFunctionInfo *FInfo = &CGM.getTypes().arrangeCXXStructorDeclaration(
1663       Dtor, getFromDtorType(DtorType));
1664   llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1665   CGCallee Callee =
1666       getVirtualFunctionPointer(CGF, GlobalDecl(Dtor, DtorType), This, Ty,
1667                                 CE ? CE->getLocStart() : SourceLocation());
1668 
1669   CGF.EmitCXXMemberOrOperatorCall(Dtor, Callee, ReturnValueSlot(),
1670                                   This.getPointer(), /*ImplicitParam=*/nullptr,
1671                                   QualType(), CE, nullptr);
1672   return nullptr;
1673 }
1674 
1675 void ItaniumCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
1676   CodeGenVTables &VTables = CGM.getVTables();
1677   llvm::GlobalVariable *VTT = VTables.GetAddrOfVTT(RD);
1678   VTables.EmitVTTDefinition(VTT, CGM.getVTableLinkage(RD), RD);
1679 }
1680 
1681 bool ItaniumCXXABI::canSpeculativelyEmitVTable(const CXXRecordDecl *RD) const {
1682   // We don't emit available_externally vtables if we are in -fapple-kext mode
1683   // because kext mode does not permit devirtualization.
1684   if (CGM.getLangOpts().AppleKext)
1685     return false;
1686 
1687   // If we don't have any inline virtual functions, and if vtable is not hidden,
1688   // then we are safe to emit available_externally copy of vtable.
1689   // FIXME we can still emit a copy of the vtable if we
1690   // can emit definition of the inline functions.
1691   return !hasAnyVirtualInlineFunction(RD) && !isVTableHidden(RD);
1692 }
1693 static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF,
1694                                           Address InitialPtr,
1695                                           int64_t NonVirtualAdjustment,
1696                                           int64_t VirtualAdjustment,
1697                                           bool IsReturnAdjustment) {
1698   if (!NonVirtualAdjustment && !VirtualAdjustment)
1699     return InitialPtr.getPointer();
1700 
1701   Address V = CGF.Builder.CreateElementBitCast(InitialPtr, CGF.Int8Ty);
1702 
1703   // In a base-to-derived cast, the non-virtual adjustment is applied first.
1704   if (NonVirtualAdjustment && !IsReturnAdjustment) {
1705     V = CGF.Builder.CreateConstInBoundsByteGEP(V,
1706                               CharUnits::fromQuantity(NonVirtualAdjustment));
1707   }
1708 
1709   // Perform the virtual adjustment if we have one.
1710   llvm::Value *ResultPtr;
1711   if (VirtualAdjustment) {
1712     llvm::Type *PtrDiffTy =
1713         CGF.ConvertType(CGF.getContext().getPointerDiffType());
1714 
1715     Address VTablePtrPtr = CGF.Builder.CreateElementBitCast(V, CGF.Int8PtrTy);
1716     llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr);
1717 
1718     llvm::Value *OffsetPtr =
1719         CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment);
1720 
1721     OffsetPtr = CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo());
1722 
1723     // Load the adjustment offset from the vtable.
1724     llvm::Value *Offset =
1725       CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign());
1726 
1727     // Adjust our pointer.
1728     ResultPtr = CGF.Builder.CreateInBoundsGEP(V.getPointer(), Offset);
1729   } else {
1730     ResultPtr = V.getPointer();
1731   }
1732 
1733   // In a derived-to-base conversion, the non-virtual adjustment is
1734   // applied second.
1735   if (NonVirtualAdjustment && IsReturnAdjustment) {
1736     ResultPtr = CGF.Builder.CreateConstInBoundsGEP1_64(ResultPtr,
1737                                                        NonVirtualAdjustment);
1738   }
1739 
1740   // Cast back to the original type.
1741   return CGF.Builder.CreateBitCast(ResultPtr, InitialPtr.getType());
1742 }
1743 
1744 llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF,
1745                                                   Address This,
1746                                                   const ThisAdjustment &TA) {
1747   return performTypeAdjustment(CGF, This, TA.NonVirtual,
1748                                TA.Virtual.Itanium.VCallOffsetOffset,
1749                                /*IsReturnAdjustment=*/false);
1750 }
1751 
1752 llvm::Value *
1753 ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
1754                                        const ReturnAdjustment &RA) {
1755   return performTypeAdjustment(CGF, Ret, RA.NonVirtual,
1756                                RA.Virtual.Itanium.VBaseOffsetOffset,
1757                                /*IsReturnAdjustment=*/true);
1758 }
1759 
1760 void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF,
1761                                     RValue RV, QualType ResultType) {
1762   if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl()))
1763     return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType);
1764 
1765   // Destructor thunks in the ARM ABI have indeterminate results.
1766   llvm::Type *T = CGF.ReturnValue.getElementType();
1767   RValue Undef = RValue::get(llvm::UndefValue::get(T));
1768   return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType);
1769 }
1770 
1771 /************************** Array allocation cookies **************************/
1772 
1773 CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1774   // The array cookie is a size_t; pad that up to the element alignment.
1775   // The cookie is actually right-justified in that space.
1776   return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),
1777                   CGM.getContext().getTypeAlignInChars(elementType));
1778 }
1779 
1780 Address ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1781                                              Address NewPtr,
1782                                              llvm::Value *NumElements,
1783                                              const CXXNewExpr *expr,
1784                                              QualType ElementType) {
1785   assert(requiresArrayCookie(expr));
1786 
1787   unsigned AS = NewPtr.getAddressSpace();
1788 
1789   ASTContext &Ctx = getContext();
1790   CharUnits SizeSize = CGF.getSizeSize();
1791 
1792   // The size of the cookie.
1793   CharUnits CookieSize =
1794     std::max(SizeSize, Ctx.getTypeAlignInChars(ElementType));
1795   assert(CookieSize == getArrayCookieSizeImpl(ElementType));
1796 
1797   // Compute an offset to the cookie.
1798   Address CookiePtr = NewPtr;
1799   CharUnits CookieOffset = CookieSize - SizeSize;
1800   if (!CookieOffset.isZero())
1801     CookiePtr = CGF.Builder.CreateConstInBoundsByteGEP(CookiePtr, CookieOffset);
1802 
1803   // Write the number of elements into the appropriate slot.
1804   Address NumElementsPtr =
1805       CGF.Builder.CreateElementBitCast(CookiePtr, CGF.SizeTy);
1806   llvm::Instruction *SI = CGF.Builder.CreateStore(NumElements, NumElementsPtr);
1807 
1808   // Handle the array cookie specially in ASan.
1809   if (CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) && AS == 0 &&
1810       expr->getOperatorNew()->isReplaceableGlobalAllocationFunction()) {
1811     // The store to the CookiePtr does not need to be instrumented.
1812     CGM.getSanitizerMetadata()->disableSanitizerForInstruction(SI);
1813     llvm::FunctionType *FTy =
1814         llvm::FunctionType::get(CGM.VoidTy, NumElementsPtr.getType(), false);
1815     llvm::Constant *F =
1816         CGM.CreateRuntimeFunction(FTy, "__asan_poison_cxx_array_cookie");
1817     CGF.Builder.CreateCall(F, NumElementsPtr.getPointer());
1818   }
1819 
1820   // Finally, compute a pointer to the actual data buffer by skipping
1821   // over the cookie completely.
1822   return CGF.Builder.CreateConstInBoundsByteGEP(NewPtr, CookieSize);
1823 }
1824 
1825 llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1826                                                 Address allocPtr,
1827                                                 CharUnits cookieSize) {
1828   // The element size is right-justified in the cookie.
1829   Address numElementsPtr = allocPtr;
1830   CharUnits numElementsOffset = cookieSize - CGF.getSizeSize();
1831   if (!numElementsOffset.isZero())
1832     numElementsPtr =
1833       CGF.Builder.CreateConstInBoundsByteGEP(numElementsPtr, numElementsOffset);
1834 
1835   unsigned AS = allocPtr.getAddressSpace();
1836   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
1837   if (!CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) || AS != 0)
1838     return CGF.Builder.CreateLoad(numElementsPtr);
1839   // In asan mode emit a function call instead of a regular load and let the
1840   // run-time deal with it: if the shadow is properly poisoned return the
1841   // cookie, otherwise return 0 to avoid an infinite loop calling DTORs.
1842   // We can't simply ignore this load using nosanitize metadata because
1843   // the metadata may be lost.
1844   llvm::FunctionType *FTy =
1845       llvm::FunctionType::get(CGF.SizeTy, CGF.SizeTy->getPointerTo(0), false);
1846   llvm::Constant *F =
1847       CGM.CreateRuntimeFunction(FTy, "__asan_load_cxx_array_cookie");
1848   return CGF.Builder.CreateCall(F, numElementsPtr.getPointer());
1849 }
1850 
1851 CharUnits ARMCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1852   // ARM says that the cookie is always:
1853   //   struct array_cookie {
1854   //     std::size_t element_size; // element_size != 0
1855   //     std::size_t element_count;
1856   //   };
1857   // But the base ABI doesn't give anything an alignment greater than
1858   // 8, so we can dismiss this as typical ABI-author blindness to
1859   // actual language complexity and round up to the element alignment.
1860   return std::max(CharUnits::fromQuantity(2 * CGM.SizeSizeInBytes),
1861                   CGM.getContext().getTypeAlignInChars(elementType));
1862 }
1863 
1864 Address ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1865                                          Address newPtr,
1866                                          llvm::Value *numElements,
1867                                          const CXXNewExpr *expr,
1868                                          QualType elementType) {
1869   assert(requiresArrayCookie(expr));
1870 
1871   // The cookie is always at the start of the buffer.
1872   Address cookie = newPtr;
1873 
1874   // The first element is the element size.
1875   cookie = CGF.Builder.CreateElementBitCast(cookie, CGF.SizeTy);
1876   llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy,
1877                  getContext().getTypeSizeInChars(elementType).getQuantity());
1878   CGF.Builder.CreateStore(elementSize, cookie);
1879 
1880   // The second element is the element count.
1881   cookie = CGF.Builder.CreateConstInBoundsGEP(cookie, 1, CGF.getSizeSize());
1882   CGF.Builder.CreateStore(numElements, cookie);
1883 
1884   // Finally, compute a pointer to the actual data buffer by skipping
1885   // over the cookie completely.
1886   CharUnits cookieSize = ARMCXXABI::getArrayCookieSizeImpl(elementType);
1887   return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize);
1888 }
1889 
1890 llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1891                                             Address allocPtr,
1892                                             CharUnits cookieSize) {
1893   // The number of elements is at offset sizeof(size_t) relative to
1894   // the allocated pointer.
1895   Address numElementsPtr
1896     = CGF.Builder.CreateConstInBoundsByteGEP(allocPtr, CGF.getSizeSize());
1897 
1898   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
1899   return CGF.Builder.CreateLoad(numElementsPtr);
1900 }
1901 
1902 /*********************** Static local initialization **************************/
1903 
1904 static llvm::Constant *getGuardAcquireFn(CodeGenModule &CGM,
1905                                          llvm::PointerType *GuardPtrTy) {
1906   // int __cxa_guard_acquire(__guard *guard_object);
1907   llvm::FunctionType *FTy =
1908     llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
1909                             GuardPtrTy, /*isVarArg=*/false);
1910   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_acquire",
1911                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1912                                               llvm::AttributeSet::FunctionIndex,
1913                                                  llvm::Attribute::NoUnwind));
1914 }
1915 
1916 static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
1917                                          llvm::PointerType *GuardPtrTy) {
1918   // void __cxa_guard_release(__guard *guard_object);
1919   llvm::FunctionType *FTy =
1920     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1921   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_release",
1922                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1923                                               llvm::AttributeSet::FunctionIndex,
1924                                                  llvm::Attribute::NoUnwind));
1925 }
1926 
1927 static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
1928                                        llvm::PointerType *GuardPtrTy) {
1929   // void __cxa_guard_abort(__guard *guard_object);
1930   llvm::FunctionType *FTy =
1931     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1932   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_abort",
1933                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1934                                               llvm::AttributeSet::FunctionIndex,
1935                                                  llvm::Attribute::NoUnwind));
1936 }
1937 
1938 namespace {
1939   struct CallGuardAbort final : EHScopeStack::Cleanup {
1940     llvm::GlobalVariable *Guard;
1941     CallGuardAbort(llvm::GlobalVariable *Guard) : Guard(Guard) {}
1942 
1943     void Emit(CodeGenFunction &CGF, Flags flags) override {
1944       CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()),
1945                                   Guard);
1946     }
1947   };
1948 }
1949 
1950 /// The ARM code here follows the Itanium code closely enough that we
1951 /// just special-case it at particular places.
1952 void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
1953                                     const VarDecl &D,
1954                                     llvm::GlobalVariable *var,
1955                                     bool shouldPerformInit) {
1956   CGBuilderTy &Builder = CGF.Builder;
1957 
1958   // Inline variables that weren't instantiated from variable templates have
1959   // partially-ordered initialization within their translation unit.
1960   bool NonTemplateInline =
1961       D.isInline() &&
1962       !isTemplateInstantiation(D.getTemplateSpecializationKind());
1963 
1964   // We only need to use thread-safe statics for local non-TLS variables and
1965   // inline variables; other global initialization is always single-threaded
1966   // or (through lazy dynamic loading in multiple threads) unsequenced.
1967   bool threadsafe = getContext().getLangOpts().ThreadsafeStatics &&
1968                     (D.isLocalVarDecl() || NonTemplateInline) &&
1969                     !D.getTLSKind();
1970 
1971   // If we have a global variable with internal linkage and thread-safe statics
1972   // are disabled, we can just let the guard variable be of type i8.
1973   bool useInt8GuardVariable = !threadsafe && var->hasInternalLinkage();
1974 
1975   llvm::IntegerType *guardTy;
1976   CharUnits guardAlignment;
1977   if (useInt8GuardVariable) {
1978     guardTy = CGF.Int8Ty;
1979     guardAlignment = CharUnits::One();
1980   } else {
1981     // Guard variables are 64 bits in the generic ABI and size width on ARM
1982     // (i.e. 32-bit on AArch32, 64-bit on AArch64).
1983     if (UseARMGuardVarABI) {
1984       guardTy = CGF.SizeTy;
1985       guardAlignment = CGF.getSizeAlign();
1986     } else {
1987       guardTy = CGF.Int64Ty;
1988       guardAlignment = CharUnits::fromQuantity(
1989                              CGM.getDataLayout().getABITypeAlignment(guardTy));
1990     }
1991   }
1992   llvm::PointerType *guardPtrTy = guardTy->getPointerTo();
1993 
1994   // Create the guard variable if we don't already have it (as we
1995   // might if we're double-emitting this function body).
1996   llvm::GlobalVariable *guard = CGM.getStaticLocalDeclGuardAddress(&D);
1997   if (!guard) {
1998     // Mangle the name for the guard.
1999     SmallString<256> guardName;
2000     {
2001       llvm::raw_svector_ostream out(guardName);
2002       getMangleContext().mangleStaticGuardVariable(&D, out);
2003     }
2004 
2005     // Create the guard variable with a zero-initializer.
2006     // Just absorb linkage and visibility from the guarded variable.
2007     guard = new llvm::GlobalVariable(CGM.getModule(), guardTy,
2008                                      false, var->getLinkage(),
2009                                      llvm::ConstantInt::get(guardTy, 0),
2010                                      guardName.str());
2011     guard->setVisibility(var->getVisibility());
2012     // If the variable is thread-local, so is its guard variable.
2013     guard->setThreadLocalMode(var->getThreadLocalMode());
2014     guard->setAlignment(guardAlignment.getQuantity());
2015 
2016     // The ABI says: "It is suggested that it be emitted in the same COMDAT
2017     // group as the associated data object." In practice, this doesn't work for
2018     // non-ELF and non-Wasm object formats, so only do it for ELF and Wasm.
2019     llvm::Comdat *C = var->getComdat();
2020     if (!D.isLocalVarDecl() && C &&
2021         (CGM.getTarget().getTriple().isOSBinFormatELF() ||
2022          CGM.getTarget().getTriple().isOSBinFormatWasm())) {
2023       guard->setComdat(C);
2024       // An inline variable's guard function is run from the per-TU
2025       // initialization function, not via a dedicated global ctor function, so
2026       // we can't put it in a comdat.
2027       if (!NonTemplateInline)
2028         CGF.CurFn->setComdat(C);
2029     } else if (CGM.supportsCOMDAT() && guard->isWeakForLinker()) {
2030       guard->setComdat(CGM.getModule().getOrInsertComdat(guard->getName()));
2031     }
2032 
2033     CGM.setStaticLocalDeclGuardAddress(&D, guard);
2034   }
2035 
2036   Address guardAddr = Address(guard, guardAlignment);
2037 
2038   // Test whether the variable has completed initialization.
2039   //
2040   // Itanium C++ ABI 3.3.2:
2041   //   The following is pseudo-code showing how these functions can be used:
2042   //     if (obj_guard.first_byte == 0) {
2043   //       if ( __cxa_guard_acquire (&obj_guard) ) {
2044   //         try {
2045   //           ... initialize the object ...;
2046   //         } catch (...) {
2047   //            __cxa_guard_abort (&obj_guard);
2048   //            throw;
2049   //         }
2050   //         ... queue object destructor with __cxa_atexit() ...;
2051   //         __cxa_guard_release (&obj_guard);
2052   //       }
2053   //     }
2054 
2055   // Load the first byte of the guard variable.
2056   llvm::LoadInst *LI =
2057       Builder.CreateLoad(Builder.CreateElementBitCast(guardAddr, CGM.Int8Ty));
2058 
2059   // Itanium ABI:
2060   //   An implementation supporting thread-safety on multiprocessor
2061   //   systems must also guarantee that references to the initialized
2062   //   object do not occur before the load of the initialization flag.
2063   //
2064   // In LLVM, we do this by marking the load Acquire.
2065   if (threadsafe)
2066     LI->setAtomic(llvm::AtomicOrdering::Acquire);
2067 
2068   // For ARM, we should only check the first bit, rather than the entire byte:
2069   //
2070   // ARM C++ ABI 3.2.3.1:
2071   //   To support the potential use of initialization guard variables
2072   //   as semaphores that are the target of ARM SWP and LDREX/STREX
2073   //   synchronizing instructions we define a static initialization
2074   //   guard variable to be a 4-byte aligned, 4-byte word with the
2075   //   following inline access protocol.
2076   //     #define INITIALIZED 1
2077   //     if ((obj_guard & INITIALIZED) != INITIALIZED) {
2078   //       if (__cxa_guard_acquire(&obj_guard))
2079   //         ...
2080   //     }
2081   //
2082   // and similarly for ARM64:
2083   //
2084   // ARM64 C++ ABI 3.2.2:
2085   //   This ABI instead only specifies the value bit 0 of the static guard
2086   //   variable; all other bits are platform defined. Bit 0 shall be 0 when the
2087   //   variable is not initialized and 1 when it is.
2088   llvm::Value *V =
2089       (UseARMGuardVarABI && !useInt8GuardVariable)
2090           ? Builder.CreateAnd(LI, llvm::ConstantInt::get(CGM.Int8Ty, 1))
2091           : LI;
2092   llvm::Value *isInitialized = Builder.CreateIsNull(V, "guard.uninitialized");
2093 
2094   llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check");
2095   llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
2096 
2097   // Check if the first byte of the guard variable is zero.
2098   Builder.CreateCondBr(isInitialized, InitCheckBlock, EndBlock);
2099 
2100   CGF.EmitBlock(InitCheckBlock);
2101 
2102   // Variables used when coping with thread-safe statics and exceptions.
2103   if (threadsafe) {
2104     // Call __cxa_guard_acquire.
2105     llvm::Value *V
2106       = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard);
2107 
2108     llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
2109 
2110     Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
2111                          InitBlock, EndBlock);
2112 
2113     // Call __cxa_guard_abort along the exceptional edge.
2114     CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard);
2115 
2116     CGF.EmitBlock(InitBlock);
2117   }
2118 
2119   // Emit the initializer and add a global destructor if appropriate.
2120   CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit);
2121 
2122   if (threadsafe) {
2123     // Pop the guard-abort cleanup if we pushed one.
2124     CGF.PopCleanupBlock();
2125 
2126     // Call __cxa_guard_release.  This cannot throw.
2127     CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy),
2128                                 guardAddr.getPointer());
2129   } else {
2130     Builder.CreateStore(llvm::ConstantInt::get(guardTy, 1), guardAddr);
2131   }
2132 
2133   CGF.EmitBlock(EndBlock);
2134 }
2135 
2136 /// Register a global destructor using __cxa_atexit.
2137 static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
2138                                         llvm::Constant *dtor,
2139                                         llvm::Constant *addr,
2140                                         bool TLS) {
2141   const char *Name = "__cxa_atexit";
2142   if (TLS) {
2143     const llvm::Triple &T = CGF.getTarget().getTriple();
2144     Name = T.isOSDarwin() ?  "_tlv_atexit" : "__cxa_thread_atexit";
2145   }
2146 
2147   // We're assuming that the destructor function is something we can
2148   // reasonably call with the default CC.  Go ahead and cast it to the
2149   // right prototype.
2150   llvm::Type *dtorTy =
2151     llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo();
2152 
2153   // extern "C" int __cxa_atexit(void (*f)(void *), void *p, void *d);
2154   llvm::Type *paramTys[] = { dtorTy, CGF.Int8PtrTy, CGF.Int8PtrTy };
2155   llvm::FunctionType *atexitTy =
2156     llvm::FunctionType::get(CGF.IntTy, paramTys, false);
2157 
2158   // Fetch the actual function.
2159   llvm::Constant *atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name);
2160   if (llvm::Function *fn = dyn_cast<llvm::Function>(atexit))
2161     fn->setDoesNotThrow();
2162 
2163   // Create a variable that binds the atexit to this shared object.
2164   llvm::Constant *handle =
2165     CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle");
2166 
2167   llvm::Value *args[] = {
2168     llvm::ConstantExpr::getBitCast(dtor, dtorTy),
2169     llvm::ConstantExpr::getBitCast(addr, CGF.Int8PtrTy),
2170     handle
2171   };
2172   CGF.EmitNounwindRuntimeCall(atexit, args);
2173 }
2174 
2175 /// Register a global destructor as best as we know how.
2176 void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF,
2177                                        const VarDecl &D,
2178                                        llvm::Constant *dtor,
2179                                        llvm::Constant *addr) {
2180   // Use __cxa_atexit if available.
2181   if (CGM.getCodeGenOpts().CXAAtExit)
2182     return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind());
2183 
2184   if (D.getTLSKind())
2185     CGM.ErrorUnsupported(&D, "non-trivial TLS destruction");
2186 
2187   // In Apple kexts, we want to add a global destructor entry.
2188   // FIXME: shouldn't this be guarded by some variable?
2189   if (CGM.getLangOpts().AppleKext) {
2190     // Generate a global destructor entry.
2191     return CGM.AddCXXDtorEntry(dtor, addr);
2192   }
2193 
2194   CGF.registerGlobalDtorWithAtExit(D, dtor, addr);
2195 }
2196 
2197 static bool isThreadWrapperReplaceable(const VarDecl *VD,
2198                                        CodeGen::CodeGenModule &CGM) {
2199   assert(!VD->isStaticLocal() && "static local VarDecls don't need wrappers!");
2200   // Darwin prefers to have references to thread local variables to go through
2201   // the thread wrapper instead of directly referencing the backing variable.
2202   return VD->getTLSKind() == VarDecl::TLS_Dynamic &&
2203          CGM.getTarget().getTriple().isOSDarwin();
2204 }
2205 
2206 /// Get the appropriate linkage for the wrapper function. This is essentially
2207 /// the weak form of the variable's linkage; every translation unit which needs
2208 /// the wrapper emits a copy, and we want the linker to merge them.
2209 static llvm::GlobalValue::LinkageTypes
2210 getThreadLocalWrapperLinkage(const VarDecl *VD, CodeGen::CodeGenModule &CGM) {
2211   llvm::GlobalValue::LinkageTypes VarLinkage =
2212       CGM.getLLVMLinkageVarDefinition(VD, /*isConstant=*/false);
2213 
2214   // For internal linkage variables, we don't need an external or weak wrapper.
2215   if (llvm::GlobalValue::isLocalLinkage(VarLinkage))
2216     return VarLinkage;
2217 
2218   // If the thread wrapper is replaceable, give it appropriate linkage.
2219   if (isThreadWrapperReplaceable(VD, CGM))
2220     if (!llvm::GlobalVariable::isLinkOnceLinkage(VarLinkage) &&
2221         !llvm::GlobalVariable::isWeakODRLinkage(VarLinkage))
2222       return VarLinkage;
2223   return llvm::GlobalValue::WeakODRLinkage;
2224 }
2225 
2226 llvm::Function *
2227 ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD,
2228                                              llvm::Value *Val) {
2229   // Mangle the name for the thread_local wrapper function.
2230   SmallString<256> WrapperName;
2231   {
2232     llvm::raw_svector_ostream Out(WrapperName);
2233     getMangleContext().mangleItaniumThreadLocalWrapper(VD, Out);
2234   }
2235 
2236   // FIXME: If VD is a definition, we should regenerate the function attributes
2237   // before returning.
2238   if (llvm::Value *V = CGM.getModule().getNamedValue(WrapperName))
2239     return cast<llvm::Function>(V);
2240 
2241   QualType RetQT = VD->getType();
2242   if (RetQT->isReferenceType())
2243     RetQT = RetQT.getNonReferenceType();
2244 
2245   const CGFunctionInfo &FI = CGM.getTypes().arrangeBuiltinFunctionDeclaration(
2246       getContext().getPointerType(RetQT), FunctionArgList());
2247 
2248   llvm::FunctionType *FnTy = CGM.getTypes().GetFunctionType(FI);
2249   llvm::Function *Wrapper =
2250       llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM),
2251                              WrapperName.str(), &CGM.getModule());
2252 
2253   CGM.SetLLVMFunctionAttributes(nullptr, FI, Wrapper);
2254 
2255   if (VD->hasDefinition())
2256     CGM.SetLLVMFunctionAttributesForDefinition(nullptr, Wrapper);
2257 
2258   // Always resolve references to the wrapper at link time.
2259   if (!Wrapper->hasLocalLinkage() && !(isThreadWrapperReplaceable(VD, CGM) &&
2260       !llvm::GlobalVariable::isLinkOnceLinkage(Wrapper->getLinkage()) &&
2261       !llvm::GlobalVariable::isWeakODRLinkage(Wrapper->getLinkage())))
2262     Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility);
2263 
2264   if (isThreadWrapperReplaceable(VD, CGM)) {
2265     Wrapper->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2266     Wrapper->addFnAttr(llvm::Attribute::NoUnwind);
2267   }
2268   return Wrapper;
2269 }
2270 
2271 void ItaniumCXXABI::EmitThreadLocalInitFuncs(
2272     CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals,
2273     ArrayRef<llvm::Function *> CXXThreadLocalInits,
2274     ArrayRef<const VarDecl *> CXXThreadLocalInitVars) {
2275   llvm::Function *InitFunc = nullptr;
2276 
2277   // Separate initializers into those with ordered (or partially-ordered)
2278   // initialization and those with unordered initialization.
2279   llvm::SmallVector<llvm::Function *, 8> OrderedInits;
2280   llvm::SmallDenseMap<const VarDecl *, llvm::Function *> UnorderedInits;
2281   for (unsigned I = 0; I != CXXThreadLocalInits.size(); ++I) {
2282     if (isTemplateInstantiation(
2283             CXXThreadLocalInitVars[I]->getTemplateSpecializationKind()))
2284       UnorderedInits[CXXThreadLocalInitVars[I]->getCanonicalDecl()] =
2285           CXXThreadLocalInits[I];
2286     else
2287       OrderedInits.push_back(CXXThreadLocalInits[I]);
2288   }
2289 
2290   if (!OrderedInits.empty()) {
2291     // Generate a guarded initialization function.
2292     llvm::FunctionType *FTy =
2293         llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
2294     const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2295     InitFunc = CGM.CreateGlobalInitOrDestructFunction(FTy, "__tls_init", FI,
2296                                                       SourceLocation(),
2297                                                       /*TLS=*/true);
2298     llvm::GlobalVariable *Guard = new llvm::GlobalVariable(
2299         CGM.getModule(), CGM.Int8Ty, /*isConstant=*/false,
2300         llvm::GlobalVariable::InternalLinkage,
2301         llvm::ConstantInt::get(CGM.Int8Ty, 0), "__tls_guard");
2302     Guard->setThreadLocal(true);
2303 
2304     CharUnits GuardAlign = CharUnits::One();
2305     Guard->setAlignment(GuardAlign.getQuantity());
2306 
2307     CodeGenFunction(CGM).GenerateCXXGlobalInitFunc(InitFunc, OrderedInits,
2308                                                    Address(Guard, GuardAlign));
2309     // On Darwin platforms, use CXX_FAST_TLS calling convention.
2310     if (CGM.getTarget().getTriple().isOSDarwin()) {
2311       InitFunc->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2312       InitFunc->addFnAttr(llvm::Attribute::NoUnwind);
2313     }
2314   }
2315 
2316   // Emit thread wrappers.
2317   for (const VarDecl *VD : CXXThreadLocals) {
2318     llvm::GlobalVariable *Var =
2319         cast<llvm::GlobalVariable>(CGM.GetGlobalValue(CGM.getMangledName(VD)));
2320     llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Var);
2321 
2322     // Some targets require that all access to thread local variables go through
2323     // the thread wrapper.  This means that we cannot attempt to create a thread
2324     // wrapper or a thread helper.
2325     if (isThreadWrapperReplaceable(VD, CGM) && !VD->hasDefinition()) {
2326       Wrapper->setLinkage(llvm::Function::ExternalLinkage);
2327       continue;
2328     }
2329 
2330     // Mangle the name for the thread_local initialization function.
2331     SmallString<256> InitFnName;
2332     {
2333       llvm::raw_svector_ostream Out(InitFnName);
2334       getMangleContext().mangleItaniumThreadLocalInit(VD, Out);
2335     }
2336 
2337     // If we have a definition for the variable, emit the initialization
2338     // function as an alias to the global Init function (if any). Otherwise,
2339     // produce a declaration of the initialization function.
2340     llvm::GlobalValue *Init = nullptr;
2341     bool InitIsInitFunc = false;
2342     if (VD->hasDefinition()) {
2343       InitIsInitFunc = true;
2344       llvm::Function *InitFuncToUse = InitFunc;
2345       if (isTemplateInstantiation(VD->getTemplateSpecializationKind()))
2346         InitFuncToUse = UnorderedInits.lookup(VD->getCanonicalDecl());
2347       if (InitFuncToUse)
2348         Init = llvm::GlobalAlias::create(Var->getLinkage(), InitFnName.str(),
2349                                          InitFuncToUse);
2350     } else {
2351       // Emit a weak global function referring to the initialization function.
2352       // This function will not exist if the TU defining the thread_local
2353       // variable in question does not need any dynamic initialization for
2354       // its thread_local variables.
2355       llvm::FunctionType *FnTy = llvm::FunctionType::get(CGM.VoidTy, false);
2356       Init = llvm::Function::Create(FnTy,
2357                                     llvm::GlobalVariable::ExternalWeakLinkage,
2358                                     InitFnName.str(), &CGM.getModule());
2359       const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2360       CGM.SetLLVMFunctionAttributes(nullptr, FI, cast<llvm::Function>(Init));
2361     }
2362 
2363     if (Init)
2364       Init->setVisibility(Var->getVisibility());
2365 
2366     llvm::LLVMContext &Context = CGM.getModule().getContext();
2367     llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
2368     CGBuilderTy Builder(CGM, Entry);
2369     if (InitIsInitFunc) {
2370       if (Init) {
2371         llvm::CallInst *CallVal = Builder.CreateCall(Init);
2372         if (isThreadWrapperReplaceable(VD, CGM))
2373           CallVal->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2374       }
2375     } else {
2376       // Don't know whether we have an init function. Call it if it exists.
2377       llvm::Value *Have = Builder.CreateIsNotNull(Init);
2378       llvm::BasicBlock *InitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2379       llvm::BasicBlock *ExitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2380       Builder.CreateCondBr(Have, InitBB, ExitBB);
2381 
2382       Builder.SetInsertPoint(InitBB);
2383       Builder.CreateCall(Init);
2384       Builder.CreateBr(ExitBB);
2385 
2386       Builder.SetInsertPoint(ExitBB);
2387     }
2388 
2389     // For a reference, the result of the wrapper function is a pointer to
2390     // the referenced object.
2391     llvm::Value *Val = Var;
2392     if (VD->getType()->isReferenceType()) {
2393       CharUnits Align = CGM.getContext().getDeclAlign(VD);
2394       Val = Builder.CreateAlignedLoad(Val, Align);
2395     }
2396     if (Val->getType() != Wrapper->getReturnType())
2397       Val = Builder.CreatePointerBitCastOrAddrSpaceCast(
2398           Val, Wrapper->getReturnType(), "");
2399     Builder.CreateRet(Val);
2400   }
2401 }
2402 
2403 LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
2404                                                    const VarDecl *VD,
2405                                                    QualType LValType) {
2406   llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD);
2407   llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Val);
2408 
2409   llvm::CallInst *CallVal = CGF.Builder.CreateCall(Wrapper);
2410   CallVal->setCallingConv(Wrapper->getCallingConv());
2411 
2412   LValue LV;
2413   if (VD->getType()->isReferenceType())
2414     LV = CGF.MakeNaturalAlignAddrLValue(CallVal, LValType);
2415   else
2416     LV = CGF.MakeAddrLValue(CallVal, LValType,
2417                             CGF.getContext().getDeclAlign(VD));
2418   // FIXME: need setObjCGCLValueClass?
2419   return LV;
2420 }
2421 
2422 /// Return whether the given global decl needs a VTT parameter, which it does
2423 /// if it's a base constructor or destructor with virtual bases.
2424 bool ItaniumCXXABI::NeedsVTTParameter(GlobalDecl GD) {
2425   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
2426 
2427   // We don't have any virtual bases, just return early.
2428   if (!MD->getParent()->getNumVBases())
2429     return false;
2430 
2431   // Check if we have a base constructor.
2432   if (isa<CXXConstructorDecl>(MD) && GD.getCtorType() == Ctor_Base)
2433     return true;
2434 
2435   // Check if we have a base destructor.
2436   if (isa<CXXDestructorDecl>(MD) && GD.getDtorType() == Dtor_Base)
2437     return true;
2438 
2439   return false;
2440 }
2441 
2442 namespace {
2443 class ItaniumRTTIBuilder {
2444   CodeGenModule &CGM;  // Per-module state.
2445   llvm::LLVMContext &VMContext;
2446   const ItaniumCXXABI &CXXABI;  // Per-module state.
2447 
2448   /// Fields - The fields of the RTTI descriptor currently being built.
2449   SmallVector<llvm::Constant *, 16> Fields;
2450 
2451   /// GetAddrOfTypeName - Returns the mangled type name of the given type.
2452   llvm::GlobalVariable *
2453   GetAddrOfTypeName(QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage);
2454 
2455   /// GetAddrOfExternalRTTIDescriptor - Returns the constant for the RTTI
2456   /// descriptor of the given type.
2457   llvm::Constant *GetAddrOfExternalRTTIDescriptor(QualType Ty);
2458 
2459   /// BuildVTablePointer - Build the vtable pointer for the given type.
2460   void BuildVTablePointer(const Type *Ty);
2461 
2462   /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
2463   /// inheritance, according to the Itanium C++ ABI, 2.9.5p6b.
2464   void BuildSIClassTypeInfo(const CXXRecordDecl *RD);
2465 
2466   /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
2467   /// classes with bases that do not satisfy the abi::__si_class_type_info
2468   /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
2469   void BuildVMIClassTypeInfo(const CXXRecordDecl *RD);
2470 
2471   /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct, used
2472   /// for pointer types.
2473   void BuildPointerTypeInfo(QualType PointeeTy);
2474 
2475   /// BuildObjCObjectTypeInfo - Build the appropriate kind of
2476   /// type_info for an object type.
2477   void BuildObjCObjectTypeInfo(const ObjCObjectType *Ty);
2478 
2479   /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
2480   /// struct, used for member pointer types.
2481   void BuildPointerToMemberTypeInfo(const MemberPointerType *Ty);
2482 
2483 public:
2484   ItaniumRTTIBuilder(const ItaniumCXXABI &ABI)
2485       : CGM(ABI.CGM), VMContext(CGM.getModule().getContext()), CXXABI(ABI) {}
2486 
2487   // Pointer type info flags.
2488   enum {
2489     /// PTI_Const - Type has const qualifier.
2490     PTI_Const = 0x1,
2491 
2492     /// PTI_Volatile - Type has volatile qualifier.
2493     PTI_Volatile = 0x2,
2494 
2495     /// PTI_Restrict - Type has restrict qualifier.
2496     PTI_Restrict = 0x4,
2497 
2498     /// PTI_Incomplete - Type is incomplete.
2499     PTI_Incomplete = 0x8,
2500 
2501     /// PTI_ContainingClassIncomplete - Containing class is incomplete.
2502     /// (in pointer to member).
2503     PTI_ContainingClassIncomplete = 0x10,
2504 
2505     /// PTI_TransactionSafe - Pointee is transaction_safe function (C++ TM TS).
2506     //PTI_TransactionSafe = 0x20,
2507 
2508     /// PTI_Noexcept - Pointee is noexcept function (C++1z).
2509     PTI_Noexcept = 0x40,
2510   };
2511 
2512   // VMI type info flags.
2513   enum {
2514     /// VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
2515     VMI_NonDiamondRepeat = 0x1,
2516 
2517     /// VMI_DiamondShaped - Class is diamond shaped.
2518     VMI_DiamondShaped = 0x2
2519   };
2520 
2521   // Base class type info flags.
2522   enum {
2523     /// BCTI_Virtual - Base class is virtual.
2524     BCTI_Virtual = 0x1,
2525 
2526     /// BCTI_Public - Base class is public.
2527     BCTI_Public = 0x2
2528   };
2529 
2530   /// BuildTypeInfo - Build the RTTI type info struct for the given type.
2531   ///
2532   /// \param Force - true to force the creation of this RTTI value
2533   /// \param DLLExport - true to mark the RTTI value as DLLExport
2534   llvm::Constant *BuildTypeInfo(QualType Ty, bool Force = false,
2535                                 bool DLLExport = false);
2536 };
2537 }
2538 
2539 llvm::GlobalVariable *ItaniumRTTIBuilder::GetAddrOfTypeName(
2540     QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage) {
2541   SmallString<256> Name;
2542   llvm::raw_svector_ostream Out(Name);
2543   CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(Ty, Out);
2544 
2545   // We know that the mangled name of the type starts at index 4 of the
2546   // mangled name of the typename, so we can just index into it in order to
2547   // get the mangled name of the type.
2548   llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
2549                                                             Name.substr(4));
2550 
2551   llvm::GlobalVariable *GV =
2552     CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage);
2553 
2554   GV->setInitializer(Init);
2555 
2556   return GV;
2557 }
2558 
2559 llvm::Constant *
2560 ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
2561   // Mangle the RTTI name.
2562   SmallString<256> Name;
2563   llvm::raw_svector_ostream Out(Name);
2564   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2565 
2566   // Look for an existing global.
2567   llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name);
2568 
2569   if (!GV) {
2570     // Create a new global variable.
2571     GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
2572                                   /*Constant=*/true,
2573                                   llvm::GlobalValue::ExternalLinkage, nullptr,
2574                                   Name);
2575     if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2576       const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
2577       if (RD->hasAttr<DLLImportAttr>())
2578         GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
2579     }
2580   }
2581 
2582   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
2583 }
2584 
2585 /// TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type
2586 /// info for that type is defined in the standard library.
2587 static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
2588   // Itanium C++ ABI 2.9.2:
2589   //   Basic type information (e.g. for "int", "bool", etc.) will be kept in
2590   //   the run-time support library. Specifically, the run-time support
2591   //   library should contain type_info objects for the types X, X* and
2592   //   X const*, for every X in: void, std::nullptr_t, bool, wchar_t, char,
2593   //   unsigned char, signed char, short, unsigned short, int, unsigned int,
2594   //   long, unsigned long, long long, unsigned long long, float, double,
2595   //   long double, char16_t, char32_t, and the IEEE 754r decimal and
2596   //   half-precision floating point types.
2597   //
2598   // GCC also emits RTTI for __int128.
2599   // FIXME: We do not emit RTTI information for decimal types here.
2600 
2601   // Types added here must also be added to EmitFundamentalRTTIDescriptors.
2602   switch (Ty->getKind()) {
2603     case BuiltinType::Void:
2604     case BuiltinType::NullPtr:
2605     case BuiltinType::Bool:
2606     case BuiltinType::WChar_S:
2607     case BuiltinType::WChar_U:
2608     case BuiltinType::Char_U:
2609     case BuiltinType::Char_S:
2610     case BuiltinType::UChar:
2611     case BuiltinType::SChar:
2612     case BuiltinType::Short:
2613     case BuiltinType::UShort:
2614     case BuiltinType::Int:
2615     case BuiltinType::UInt:
2616     case BuiltinType::Long:
2617     case BuiltinType::ULong:
2618     case BuiltinType::LongLong:
2619     case BuiltinType::ULongLong:
2620     case BuiltinType::Half:
2621     case BuiltinType::Float:
2622     case BuiltinType::Double:
2623     case BuiltinType::LongDouble:
2624     case BuiltinType::Float128:
2625     case BuiltinType::Char16:
2626     case BuiltinType::Char32:
2627     case BuiltinType::Int128:
2628     case BuiltinType::UInt128:
2629       return true;
2630 
2631 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
2632     case BuiltinType::Id:
2633 #include "clang/Basic/OpenCLImageTypes.def"
2634     case BuiltinType::OCLSampler:
2635     case BuiltinType::OCLEvent:
2636     case BuiltinType::OCLClkEvent:
2637     case BuiltinType::OCLQueue:
2638     case BuiltinType::OCLNDRange:
2639     case BuiltinType::OCLReserveID:
2640       return false;
2641 
2642     case BuiltinType::Dependent:
2643 #define BUILTIN_TYPE(Id, SingletonId)
2644 #define PLACEHOLDER_TYPE(Id, SingletonId) \
2645     case BuiltinType::Id:
2646 #include "clang/AST/BuiltinTypes.def"
2647       llvm_unreachable("asking for RRTI for a placeholder type!");
2648 
2649     case BuiltinType::ObjCId:
2650     case BuiltinType::ObjCClass:
2651     case BuiltinType::ObjCSel:
2652       llvm_unreachable("FIXME: Objective-C types are unsupported!");
2653   }
2654 
2655   llvm_unreachable("Invalid BuiltinType Kind!");
2656 }
2657 
2658 static bool TypeInfoIsInStandardLibrary(const PointerType *PointerTy) {
2659   QualType PointeeTy = PointerTy->getPointeeType();
2660   const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(PointeeTy);
2661   if (!BuiltinTy)
2662     return false;
2663 
2664   // Check the qualifiers.
2665   Qualifiers Quals = PointeeTy.getQualifiers();
2666   Quals.removeConst();
2667 
2668   if (!Quals.empty())
2669     return false;
2670 
2671   return TypeInfoIsInStandardLibrary(BuiltinTy);
2672 }
2673 
2674 /// IsStandardLibraryRTTIDescriptor - Returns whether the type
2675 /// information for the given type exists in the standard library.
2676 static bool IsStandardLibraryRTTIDescriptor(QualType Ty) {
2677   // Type info for builtin types is defined in the standard library.
2678   if (const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(Ty))
2679     return TypeInfoIsInStandardLibrary(BuiltinTy);
2680 
2681   // Type info for some pointer types to builtin types is defined in the
2682   // standard library.
2683   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2684     return TypeInfoIsInStandardLibrary(PointerTy);
2685 
2686   return false;
2687 }
2688 
2689 /// ShouldUseExternalRTTIDescriptor - Returns whether the type information for
2690 /// the given type exists somewhere else, and that we should not emit the type
2691 /// information in this translation unit.  Assumes that it is not a
2692 /// standard-library type.
2693 static bool ShouldUseExternalRTTIDescriptor(CodeGenModule &CGM,
2694                                             QualType Ty) {
2695   ASTContext &Context = CGM.getContext();
2696 
2697   // If RTTI is disabled, assume it might be disabled in the
2698   // translation unit that defines any potential key function, too.
2699   if (!Context.getLangOpts().RTTI) return false;
2700 
2701   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2702     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
2703     if (!RD->hasDefinition())
2704       return false;
2705 
2706     if (!RD->isDynamicClass())
2707       return false;
2708 
2709     // FIXME: this may need to be reconsidered if the key function
2710     // changes.
2711     // N.B. We must always emit the RTTI data ourselves if there exists a key
2712     // function.
2713     bool IsDLLImport = RD->hasAttr<DLLImportAttr>();
2714     if (CGM.getVTables().isVTableExternal(RD))
2715       return IsDLLImport ? false : true;
2716 
2717     if (IsDLLImport)
2718       return true;
2719   }
2720 
2721   return false;
2722 }
2723 
2724 /// IsIncompleteClassType - Returns whether the given record type is incomplete.
2725 static bool IsIncompleteClassType(const RecordType *RecordTy) {
2726   return !RecordTy->getDecl()->isCompleteDefinition();
2727 }
2728 
2729 /// ContainsIncompleteClassType - Returns whether the given type contains an
2730 /// incomplete class type. This is true if
2731 ///
2732 ///   * The given type is an incomplete class type.
2733 ///   * The given type is a pointer type whose pointee type contains an
2734 ///     incomplete class type.
2735 ///   * The given type is a member pointer type whose class is an incomplete
2736 ///     class type.
2737 ///   * The given type is a member pointer type whoise pointee type contains an
2738 ///     incomplete class type.
2739 /// is an indirect or direct pointer to an incomplete class type.
2740 static bool ContainsIncompleteClassType(QualType Ty) {
2741   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2742     if (IsIncompleteClassType(RecordTy))
2743       return true;
2744   }
2745 
2746   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2747     return ContainsIncompleteClassType(PointerTy->getPointeeType());
2748 
2749   if (const MemberPointerType *MemberPointerTy =
2750       dyn_cast<MemberPointerType>(Ty)) {
2751     // Check if the class type is incomplete.
2752     const RecordType *ClassType = cast<RecordType>(MemberPointerTy->getClass());
2753     if (IsIncompleteClassType(ClassType))
2754       return true;
2755 
2756     return ContainsIncompleteClassType(MemberPointerTy->getPointeeType());
2757   }
2758 
2759   return false;
2760 }
2761 
2762 // CanUseSingleInheritance - Return whether the given record decl has a "single,
2763 // public, non-virtual base at offset zero (i.e. the derived class is dynamic
2764 // iff the base is)", according to Itanium C++ ABI, 2.95p6b.
2765 static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
2766   // Check the number of bases.
2767   if (RD->getNumBases() != 1)
2768     return false;
2769 
2770   // Get the base.
2771   CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin();
2772 
2773   // Check that the base is not virtual.
2774   if (Base->isVirtual())
2775     return false;
2776 
2777   // Check that the base is public.
2778   if (Base->getAccessSpecifier() != AS_public)
2779     return false;
2780 
2781   // Check that the class is dynamic iff the base is.
2782   const CXXRecordDecl *BaseDecl =
2783     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2784   if (!BaseDecl->isEmpty() &&
2785       BaseDecl->isDynamicClass() != RD->isDynamicClass())
2786     return false;
2787 
2788   return true;
2789 }
2790 
2791 void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
2792   // abi::__class_type_info.
2793   static const char * const ClassTypeInfo =
2794     "_ZTVN10__cxxabiv117__class_type_infoE";
2795   // abi::__si_class_type_info.
2796   static const char * const SIClassTypeInfo =
2797     "_ZTVN10__cxxabiv120__si_class_type_infoE";
2798   // abi::__vmi_class_type_info.
2799   static const char * const VMIClassTypeInfo =
2800     "_ZTVN10__cxxabiv121__vmi_class_type_infoE";
2801 
2802   const char *VTableName = nullptr;
2803 
2804   switch (Ty->getTypeClass()) {
2805 #define TYPE(Class, Base)
2806 #define ABSTRACT_TYPE(Class, Base)
2807 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
2808 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
2809 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
2810 #include "clang/AST/TypeNodes.def"
2811     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
2812 
2813   case Type::LValueReference:
2814   case Type::RValueReference:
2815     llvm_unreachable("References shouldn't get here");
2816 
2817   case Type::Auto:
2818   case Type::DeducedTemplateSpecialization:
2819     llvm_unreachable("Undeduced type shouldn't get here");
2820 
2821   case Type::Pipe:
2822     llvm_unreachable("Pipe types shouldn't get here");
2823 
2824   case Type::Builtin:
2825   // GCC treats vector and complex types as fundamental types.
2826   case Type::Vector:
2827   case Type::ExtVector:
2828   case Type::Complex:
2829   case Type::Atomic:
2830   // FIXME: GCC treats block pointers as fundamental types?!
2831   case Type::BlockPointer:
2832     // abi::__fundamental_type_info.
2833     VTableName = "_ZTVN10__cxxabiv123__fundamental_type_infoE";
2834     break;
2835 
2836   case Type::ConstantArray:
2837   case Type::IncompleteArray:
2838   case Type::VariableArray:
2839     // abi::__array_type_info.
2840     VTableName = "_ZTVN10__cxxabiv117__array_type_infoE";
2841     break;
2842 
2843   case Type::FunctionNoProto:
2844   case Type::FunctionProto:
2845     // abi::__function_type_info.
2846     VTableName = "_ZTVN10__cxxabiv120__function_type_infoE";
2847     break;
2848 
2849   case Type::Enum:
2850     // abi::__enum_type_info.
2851     VTableName = "_ZTVN10__cxxabiv116__enum_type_infoE";
2852     break;
2853 
2854   case Type::Record: {
2855     const CXXRecordDecl *RD =
2856       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
2857 
2858     if (!RD->hasDefinition() || !RD->getNumBases()) {
2859       VTableName = ClassTypeInfo;
2860     } else if (CanUseSingleInheritance(RD)) {
2861       VTableName = SIClassTypeInfo;
2862     } else {
2863       VTableName = VMIClassTypeInfo;
2864     }
2865 
2866     break;
2867   }
2868 
2869   case Type::ObjCObject:
2870     // Ignore protocol qualifiers.
2871     Ty = cast<ObjCObjectType>(Ty)->getBaseType().getTypePtr();
2872 
2873     // Handle id and Class.
2874     if (isa<BuiltinType>(Ty)) {
2875       VTableName = ClassTypeInfo;
2876       break;
2877     }
2878 
2879     assert(isa<ObjCInterfaceType>(Ty));
2880     // Fall through.
2881 
2882   case Type::ObjCInterface:
2883     if (cast<ObjCInterfaceType>(Ty)->getDecl()->getSuperClass()) {
2884       VTableName = SIClassTypeInfo;
2885     } else {
2886       VTableName = ClassTypeInfo;
2887     }
2888     break;
2889 
2890   case Type::ObjCObjectPointer:
2891   case Type::Pointer:
2892     // abi::__pointer_type_info.
2893     VTableName = "_ZTVN10__cxxabiv119__pointer_type_infoE";
2894     break;
2895 
2896   case Type::MemberPointer:
2897     // abi::__pointer_to_member_type_info.
2898     VTableName = "_ZTVN10__cxxabiv129__pointer_to_member_type_infoE";
2899     break;
2900   }
2901 
2902   llvm::Constant *VTable =
2903     CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
2904 
2905   llvm::Type *PtrDiffTy =
2906     CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
2907 
2908   // The vtable address point is 2.
2909   llvm::Constant *Two = llvm::ConstantInt::get(PtrDiffTy, 2);
2910   VTable =
2911       llvm::ConstantExpr::getInBoundsGetElementPtr(CGM.Int8PtrTy, VTable, Two);
2912   VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
2913 
2914   Fields.push_back(VTable);
2915 }
2916 
2917 /// \brief Return the linkage that the type info and type info name constants
2918 /// should have for the given type.
2919 static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
2920                                                              QualType Ty) {
2921   // Itanium C++ ABI 2.9.5p7:
2922   //   In addition, it and all of the intermediate abi::__pointer_type_info
2923   //   structs in the chain down to the abi::__class_type_info for the
2924   //   incomplete class type must be prevented from resolving to the
2925   //   corresponding type_info structs for the complete class type, possibly
2926   //   by making them local static objects. Finally, a dummy class RTTI is
2927   //   generated for the incomplete type that will not resolve to the final
2928   //   complete class RTTI (because the latter need not exist), possibly by
2929   //   making it a local static object.
2930   if (ContainsIncompleteClassType(Ty))
2931     return llvm::GlobalValue::InternalLinkage;
2932 
2933   switch (Ty->getLinkage()) {
2934   case NoLinkage:
2935   case InternalLinkage:
2936   case UniqueExternalLinkage:
2937     return llvm::GlobalValue::InternalLinkage;
2938 
2939   case VisibleNoLinkage:
2940   case ExternalLinkage:
2941     // RTTI is not enabled, which means that this type info struct is going
2942     // to be used for exception handling. Give it linkonce_odr linkage.
2943     if (!CGM.getLangOpts().RTTI)
2944       return llvm::GlobalValue::LinkOnceODRLinkage;
2945 
2946     if (const RecordType *Record = dyn_cast<RecordType>(Ty)) {
2947       const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
2948       if (RD->hasAttr<WeakAttr>())
2949         return llvm::GlobalValue::WeakODRLinkage;
2950       if (CGM.getTriple().isWindowsItaniumEnvironment())
2951         if (RD->hasAttr<DLLImportAttr>())
2952           return llvm::GlobalValue::ExternalLinkage;
2953       if (RD->isDynamicClass()) {
2954         llvm::GlobalValue::LinkageTypes LT = CGM.getVTableLinkage(RD);
2955         // MinGW won't export the RTTI information when there is a key function.
2956         // Make sure we emit our own copy instead of attempting to dllimport it.
2957         if (RD->hasAttr<DLLImportAttr>() &&
2958             llvm::GlobalValue::isAvailableExternallyLinkage(LT))
2959           LT = llvm::GlobalValue::LinkOnceODRLinkage;
2960         return LT;
2961       }
2962     }
2963 
2964     return llvm::GlobalValue::LinkOnceODRLinkage;
2965   }
2966 
2967   llvm_unreachable("Invalid linkage!");
2968 }
2969 
2970 llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty, bool Force,
2971                                                   bool DLLExport) {
2972   // We want to operate on the canonical type.
2973   Ty = Ty.getCanonicalType();
2974 
2975   // Check if we've already emitted an RTTI descriptor for this type.
2976   SmallString<256> Name;
2977   llvm::raw_svector_ostream Out(Name);
2978   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2979 
2980   llvm::GlobalVariable *OldGV = CGM.getModule().getNamedGlobal(Name);
2981   if (OldGV && !OldGV->isDeclaration()) {
2982     assert(!OldGV->hasAvailableExternallyLinkage() &&
2983            "available_externally typeinfos not yet implemented");
2984 
2985     return llvm::ConstantExpr::getBitCast(OldGV, CGM.Int8PtrTy);
2986   }
2987 
2988   // Check if there is already an external RTTI descriptor for this type.
2989   bool IsStdLib = IsStandardLibraryRTTIDescriptor(Ty);
2990   if (!Force && (IsStdLib || ShouldUseExternalRTTIDescriptor(CGM, Ty)))
2991     return GetAddrOfExternalRTTIDescriptor(Ty);
2992 
2993   // Emit the standard library with external linkage.
2994   llvm::GlobalVariable::LinkageTypes Linkage;
2995   if (IsStdLib)
2996     Linkage = llvm::GlobalValue::ExternalLinkage;
2997   else
2998     Linkage = getTypeInfoLinkage(CGM, Ty);
2999 
3000   // Add the vtable pointer.
3001   BuildVTablePointer(cast<Type>(Ty));
3002 
3003   // And the name.
3004   llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
3005   llvm::Constant *TypeNameField;
3006 
3007   // If we're supposed to demote the visibility, be sure to set a flag
3008   // to use a string comparison for type_info comparisons.
3009   ItaniumCXXABI::RTTIUniquenessKind RTTIUniqueness =
3010       CXXABI.classifyRTTIUniqueness(Ty, Linkage);
3011   if (RTTIUniqueness != ItaniumCXXABI::RUK_Unique) {
3012     // The flag is the sign bit, which on ARM64 is defined to be clear
3013     // for global pointers.  This is very ARM64-specific.
3014     TypeNameField = llvm::ConstantExpr::getPtrToInt(TypeName, CGM.Int64Ty);
3015     llvm::Constant *flag =
3016         llvm::ConstantInt::get(CGM.Int64Ty, ((uint64_t)1) << 63);
3017     TypeNameField = llvm::ConstantExpr::getAdd(TypeNameField, flag);
3018     TypeNameField =
3019         llvm::ConstantExpr::getIntToPtr(TypeNameField, CGM.Int8PtrTy);
3020   } else {
3021     TypeNameField = llvm::ConstantExpr::getBitCast(TypeName, CGM.Int8PtrTy);
3022   }
3023   Fields.push_back(TypeNameField);
3024 
3025   switch (Ty->getTypeClass()) {
3026 #define TYPE(Class, Base)
3027 #define ABSTRACT_TYPE(Class, Base)
3028 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
3029 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
3030 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
3031 #include "clang/AST/TypeNodes.def"
3032     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
3033 
3034   // GCC treats vector types as fundamental types.
3035   case Type::Builtin:
3036   case Type::Vector:
3037   case Type::ExtVector:
3038   case Type::Complex:
3039   case Type::BlockPointer:
3040     // Itanium C++ ABI 2.9.5p4:
3041     // abi::__fundamental_type_info adds no data members to std::type_info.
3042     break;
3043 
3044   case Type::LValueReference:
3045   case Type::RValueReference:
3046     llvm_unreachable("References shouldn't get here");
3047 
3048   case Type::Auto:
3049   case Type::DeducedTemplateSpecialization:
3050     llvm_unreachable("Undeduced type shouldn't get here");
3051 
3052   case Type::Pipe:
3053     llvm_unreachable("Pipe type shouldn't get here");
3054 
3055   case Type::ConstantArray:
3056   case Type::IncompleteArray:
3057   case Type::VariableArray:
3058     // Itanium C++ ABI 2.9.5p5:
3059     // abi::__array_type_info adds no data members to std::type_info.
3060     break;
3061 
3062   case Type::FunctionNoProto:
3063   case Type::FunctionProto:
3064     // Itanium C++ ABI 2.9.5p5:
3065     // abi::__function_type_info adds no data members to std::type_info.
3066     break;
3067 
3068   case Type::Enum:
3069     // Itanium C++ ABI 2.9.5p5:
3070     // abi::__enum_type_info adds no data members to std::type_info.
3071     break;
3072 
3073   case Type::Record: {
3074     const CXXRecordDecl *RD =
3075       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
3076     if (!RD->hasDefinition() || !RD->getNumBases()) {
3077       // We don't need to emit any fields.
3078       break;
3079     }
3080 
3081     if (CanUseSingleInheritance(RD))
3082       BuildSIClassTypeInfo(RD);
3083     else
3084       BuildVMIClassTypeInfo(RD);
3085 
3086     break;
3087   }
3088 
3089   case Type::ObjCObject:
3090   case Type::ObjCInterface:
3091     BuildObjCObjectTypeInfo(cast<ObjCObjectType>(Ty));
3092     break;
3093 
3094   case Type::ObjCObjectPointer:
3095     BuildPointerTypeInfo(cast<ObjCObjectPointerType>(Ty)->getPointeeType());
3096     break;
3097 
3098   case Type::Pointer:
3099     BuildPointerTypeInfo(cast<PointerType>(Ty)->getPointeeType());
3100     break;
3101 
3102   case Type::MemberPointer:
3103     BuildPointerToMemberTypeInfo(cast<MemberPointerType>(Ty));
3104     break;
3105 
3106   case Type::Atomic:
3107     // No fields, at least for the moment.
3108     break;
3109   }
3110 
3111   llvm::Constant *Init = llvm::ConstantStruct::getAnon(Fields);
3112 
3113   llvm::Module &M = CGM.getModule();
3114   llvm::GlobalVariable *GV =
3115       new llvm::GlobalVariable(M, Init->getType(),
3116                                /*Constant=*/true, Linkage, Init, Name);
3117 
3118   // If there's already an old global variable, replace it with the new one.
3119   if (OldGV) {
3120     GV->takeName(OldGV);
3121     llvm::Constant *NewPtr =
3122       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
3123     OldGV->replaceAllUsesWith(NewPtr);
3124     OldGV->eraseFromParent();
3125   }
3126 
3127   if (CGM.supportsCOMDAT() && GV->isWeakForLinker())
3128     GV->setComdat(M.getOrInsertComdat(GV->getName()));
3129 
3130   // The Itanium ABI specifies that type_info objects must be globally
3131   // unique, with one exception: if the type is an incomplete class
3132   // type or a (possibly indirect) pointer to one.  That exception
3133   // affects the general case of comparing type_info objects produced
3134   // by the typeid operator, which is why the comparison operators on
3135   // std::type_info generally use the type_info name pointers instead
3136   // of the object addresses.  However, the language's built-in uses
3137   // of RTTI generally require class types to be complete, even when
3138   // manipulating pointers to those class types.  This allows the
3139   // implementation of dynamic_cast to rely on address equality tests,
3140   // which is much faster.
3141 
3142   // All of this is to say that it's important that both the type_info
3143   // object and the type_info name be uniqued when weakly emitted.
3144 
3145   // Give the type_info object and name the formal visibility of the
3146   // type itself.
3147   llvm::GlobalValue::VisibilityTypes llvmVisibility;
3148   if (llvm::GlobalValue::isLocalLinkage(Linkage))
3149     // If the linkage is local, only default visibility makes sense.
3150     llvmVisibility = llvm::GlobalValue::DefaultVisibility;
3151   else if (RTTIUniqueness == ItaniumCXXABI::RUK_NonUniqueHidden)
3152     llvmVisibility = llvm::GlobalValue::HiddenVisibility;
3153   else
3154     llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
3155 
3156   TypeName->setVisibility(llvmVisibility);
3157   GV->setVisibility(llvmVisibility);
3158 
3159   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
3160     auto RD = Ty->getAsCXXRecordDecl();
3161     if (DLLExport || (RD && RD->hasAttr<DLLExportAttr>())) {
3162       TypeName->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
3163       GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
3164     } else if (CGM.getLangOpts().RTTI && RD && RD->hasAttr<DLLImportAttr>()) {
3165       TypeName->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
3166       GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
3167 
3168       // Because the typename and the typeinfo are DLL import, convert them to
3169       // declarations rather than definitions.  The initializers still need to
3170       // be constructed to calculate the type for the declarations.
3171       TypeName->setInitializer(nullptr);
3172       GV->setInitializer(nullptr);
3173     }
3174   }
3175 
3176   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3177 }
3178 
3179 /// BuildObjCObjectTypeInfo - Build the appropriate kind of type_info
3180 /// for the given Objective-C object type.
3181 void ItaniumRTTIBuilder::BuildObjCObjectTypeInfo(const ObjCObjectType *OT) {
3182   // Drop qualifiers.
3183   const Type *T = OT->getBaseType().getTypePtr();
3184   assert(isa<BuiltinType>(T) || isa<ObjCInterfaceType>(T));
3185 
3186   // The builtin types are abi::__class_type_infos and don't require
3187   // extra fields.
3188   if (isa<BuiltinType>(T)) return;
3189 
3190   ObjCInterfaceDecl *Class = cast<ObjCInterfaceType>(T)->getDecl();
3191   ObjCInterfaceDecl *Super = Class->getSuperClass();
3192 
3193   // Root classes are also __class_type_info.
3194   if (!Super) return;
3195 
3196   QualType SuperTy = CGM.getContext().getObjCInterfaceType(Super);
3197 
3198   // Everything else is single inheritance.
3199   llvm::Constant *BaseTypeInfo =
3200       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(SuperTy);
3201   Fields.push_back(BaseTypeInfo);
3202 }
3203 
3204 /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
3205 /// inheritance, according to the Itanium C++ ABI, 2.95p6b.
3206 void ItaniumRTTIBuilder::BuildSIClassTypeInfo(const CXXRecordDecl *RD) {
3207   // Itanium C++ ABI 2.9.5p6b:
3208   // It adds to abi::__class_type_info a single member pointing to the
3209   // type_info structure for the base type,
3210   llvm::Constant *BaseTypeInfo =
3211     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(RD->bases_begin()->getType());
3212   Fields.push_back(BaseTypeInfo);
3213 }
3214 
3215 namespace {
3216   /// SeenBases - Contains virtual and non-virtual bases seen when traversing
3217   /// a class hierarchy.
3218   struct SeenBases {
3219     llvm::SmallPtrSet<const CXXRecordDecl *, 16> NonVirtualBases;
3220     llvm::SmallPtrSet<const CXXRecordDecl *, 16> VirtualBases;
3221   };
3222 }
3223 
3224 /// ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in
3225 /// abi::__vmi_class_type_info.
3226 ///
3227 static unsigned ComputeVMIClassTypeInfoFlags(const CXXBaseSpecifier *Base,
3228                                              SeenBases &Bases) {
3229 
3230   unsigned Flags = 0;
3231 
3232   const CXXRecordDecl *BaseDecl =
3233     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
3234 
3235   if (Base->isVirtual()) {
3236     // Mark the virtual base as seen.
3237     if (!Bases.VirtualBases.insert(BaseDecl).second) {
3238       // If this virtual base has been seen before, then the class is diamond
3239       // shaped.
3240       Flags |= ItaniumRTTIBuilder::VMI_DiamondShaped;
3241     } else {
3242       if (Bases.NonVirtualBases.count(BaseDecl))
3243         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3244     }
3245   } else {
3246     // Mark the non-virtual base as seen.
3247     if (!Bases.NonVirtualBases.insert(BaseDecl).second) {
3248       // If this non-virtual base has been seen before, then the class has non-
3249       // diamond shaped repeated inheritance.
3250       Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3251     } else {
3252       if (Bases.VirtualBases.count(BaseDecl))
3253         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3254     }
3255   }
3256 
3257   // Walk all bases.
3258   for (const auto &I : BaseDecl->bases())
3259     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3260 
3261   return Flags;
3262 }
3263 
3264 static unsigned ComputeVMIClassTypeInfoFlags(const CXXRecordDecl *RD) {
3265   unsigned Flags = 0;
3266   SeenBases Bases;
3267 
3268   // Walk all bases.
3269   for (const auto &I : RD->bases())
3270     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3271 
3272   return Flags;
3273 }
3274 
3275 /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
3276 /// classes with bases that do not satisfy the abi::__si_class_type_info
3277 /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
3278 void ItaniumRTTIBuilder::BuildVMIClassTypeInfo(const CXXRecordDecl *RD) {
3279   llvm::Type *UnsignedIntLTy =
3280     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3281 
3282   // Itanium C++ ABI 2.9.5p6c:
3283   //   __flags is a word with flags describing details about the class
3284   //   structure, which may be referenced by using the __flags_masks
3285   //   enumeration. These flags refer to both direct and indirect bases.
3286   unsigned Flags = ComputeVMIClassTypeInfoFlags(RD);
3287   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3288 
3289   // Itanium C++ ABI 2.9.5p6c:
3290   //   __base_count is a word with the number of direct proper base class
3291   //   descriptions that follow.
3292   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, RD->getNumBases()));
3293 
3294   if (!RD->getNumBases())
3295     return;
3296 
3297   // Now add the base class descriptions.
3298 
3299   // Itanium C++ ABI 2.9.5p6c:
3300   //   __base_info[] is an array of base class descriptions -- one for every
3301   //   direct proper base. Each description is of the type:
3302   //
3303   //   struct abi::__base_class_type_info {
3304   //   public:
3305   //     const __class_type_info *__base_type;
3306   //     long __offset_flags;
3307   //
3308   //     enum __offset_flags_masks {
3309   //       __virtual_mask = 0x1,
3310   //       __public_mask = 0x2,
3311   //       __offset_shift = 8
3312   //     };
3313   //   };
3314 
3315   // If we're in mingw and 'long' isn't wide enough for a pointer, use 'long
3316   // long' instead of 'long' for __offset_flags. libstdc++abi uses long long on
3317   // LLP64 platforms.
3318   // FIXME: Consider updating libc++abi to match, and extend this logic to all
3319   // LLP64 platforms.
3320   QualType OffsetFlagsTy = CGM.getContext().LongTy;
3321   const TargetInfo &TI = CGM.getContext().getTargetInfo();
3322   if (TI.getTriple().isOSCygMing() && TI.getPointerWidth(0) > TI.getLongWidth())
3323     OffsetFlagsTy = CGM.getContext().LongLongTy;
3324   llvm::Type *OffsetFlagsLTy =
3325       CGM.getTypes().ConvertType(OffsetFlagsTy);
3326 
3327   for (const auto &Base : RD->bases()) {
3328     // The __base_type member points to the RTTI for the base type.
3329     Fields.push_back(ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(Base.getType()));
3330 
3331     const CXXRecordDecl *BaseDecl =
3332       cast<CXXRecordDecl>(Base.getType()->getAs<RecordType>()->getDecl());
3333 
3334     int64_t OffsetFlags = 0;
3335 
3336     // All but the lower 8 bits of __offset_flags are a signed offset.
3337     // For a non-virtual base, this is the offset in the object of the base
3338     // subobject. For a virtual base, this is the offset in the virtual table of
3339     // the virtual base offset for the virtual base referenced (negative).
3340     CharUnits Offset;
3341     if (Base.isVirtual())
3342       Offset =
3343         CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(RD, BaseDecl);
3344     else {
3345       const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
3346       Offset = Layout.getBaseClassOffset(BaseDecl);
3347     };
3348 
3349     OffsetFlags = uint64_t(Offset.getQuantity()) << 8;
3350 
3351     // The low-order byte of __offset_flags contains flags, as given by the
3352     // masks from the enumeration __offset_flags_masks.
3353     if (Base.isVirtual())
3354       OffsetFlags |= BCTI_Virtual;
3355     if (Base.getAccessSpecifier() == AS_public)
3356       OffsetFlags |= BCTI_Public;
3357 
3358     Fields.push_back(llvm::ConstantInt::get(OffsetFlagsLTy, OffsetFlags));
3359   }
3360 }
3361 
3362 /// Compute the flags for a __pbase_type_info, and remove the corresponding
3363 /// pieces from \p Type.
3364 static unsigned extractPBaseFlags(ASTContext &Ctx, QualType &Type) {
3365   unsigned Flags = 0;
3366 
3367   if (Type.isConstQualified())
3368     Flags |= ItaniumRTTIBuilder::PTI_Const;
3369   if (Type.isVolatileQualified())
3370     Flags |= ItaniumRTTIBuilder::PTI_Volatile;
3371   if (Type.isRestrictQualified())
3372     Flags |= ItaniumRTTIBuilder::PTI_Restrict;
3373   Type = Type.getUnqualifiedType();
3374 
3375   // Itanium C++ ABI 2.9.5p7:
3376   //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
3377   //   incomplete class type, the incomplete target type flag is set.
3378   if (ContainsIncompleteClassType(Type))
3379     Flags |= ItaniumRTTIBuilder::PTI_Incomplete;
3380 
3381   if (auto *Proto = Type->getAs<FunctionProtoType>()) {
3382     if (Proto->isNothrow(Ctx)) {
3383       Flags |= ItaniumRTTIBuilder::PTI_Noexcept;
3384       Type = Ctx.getFunctionType(
3385           Proto->getReturnType(), Proto->getParamTypes(),
3386           Proto->getExtProtoInfo().withExceptionSpec(EST_None));
3387     }
3388   }
3389 
3390   return Flags;
3391 }
3392 
3393 /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct,
3394 /// used for pointer types.
3395 void ItaniumRTTIBuilder::BuildPointerTypeInfo(QualType PointeeTy) {
3396   // Itanium C++ ABI 2.9.5p7:
3397   //   __flags is a flag word describing the cv-qualification and other
3398   //   attributes of the type pointed to
3399   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
3400 
3401   llvm::Type *UnsignedIntLTy =
3402     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3403   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3404 
3405   // Itanium C++ ABI 2.9.5p7:
3406   //  __pointee is a pointer to the std::type_info derivation for the
3407   //  unqualified type being pointed to.
3408   llvm::Constant *PointeeTypeInfo =
3409       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
3410   Fields.push_back(PointeeTypeInfo);
3411 }
3412 
3413 /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
3414 /// struct, used for member pointer types.
3415 void
3416 ItaniumRTTIBuilder::BuildPointerToMemberTypeInfo(const MemberPointerType *Ty) {
3417   QualType PointeeTy = Ty->getPointeeType();
3418 
3419   // Itanium C++ ABI 2.9.5p7:
3420   //   __flags is a flag word describing the cv-qualification and other
3421   //   attributes of the type pointed to.
3422   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
3423 
3424   const RecordType *ClassType = cast<RecordType>(Ty->getClass());
3425   if (IsIncompleteClassType(ClassType))
3426     Flags |= PTI_ContainingClassIncomplete;
3427 
3428   llvm::Type *UnsignedIntLTy =
3429     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3430   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3431 
3432   // Itanium C++ ABI 2.9.5p7:
3433   //   __pointee is a pointer to the std::type_info derivation for the
3434   //   unqualified type being pointed to.
3435   llvm::Constant *PointeeTypeInfo =
3436       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
3437   Fields.push_back(PointeeTypeInfo);
3438 
3439   // Itanium C++ ABI 2.9.5p9:
3440   //   __context is a pointer to an abi::__class_type_info corresponding to the
3441   //   class type containing the member pointed to
3442   //   (e.g., the "A" in "int A::*").
3443   Fields.push_back(
3444       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));
3445 }
3446 
3447 llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {
3448   return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);
3449 }
3450 
3451 void ItaniumCXXABI::EmitFundamentalRTTIDescriptor(QualType Type,
3452                                                   bool DLLExport) {
3453   QualType PointerType = getContext().getPointerType(Type);
3454   QualType PointerTypeConst = getContext().getPointerType(Type.withConst());
3455   ItaniumRTTIBuilder(*this).BuildTypeInfo(Type, /*Force=*/true, DLLExport);
3456   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerType, /*Force=*/true,
3457                                           DLLExport);
3458   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerTypeConst, /*Force=*/true,
3459                                           DLLExport);
3460 }
3461 
3462 void ItaniumCXXABI::EmitFundamentalRTTIDescriptors(bool DLLExport) {
3463   // Types added here must also be added to TypeInfoIsInStandardLibrary.
3464   QualType FundamentalTypes[] = {
3465       getContext().VoidTy,             getContext().NullPtrTy,
3466       getContext().BoolTy,             getContext().WCharTy,
3467       getContext().CharTy,             getContext().UnsignedCharTy,
3468       getContext().SignedCharTy,       getContext().ShortTy,
3469       getContext().UnsignedShortTy,    getContext().IntTy,
3470       getContext().UnsignedIntTy,      getContext().LongTy,
3471       getContext().UnsignedLongTy,     getContext().LongLongTy,
3472       getContext().UnsignedLongLongTy, getContext().Int128Ty,
3473       getContext().UnsignedInt128Ty,   getContext().HalfTy,
3474       getContext().FloatTy,            getContext().DoubleTy,
3475       getContext().LongDoubleTy,       getContext().Float128Ty,
3476       getContext().Char16Ty,           getContext().Char32Ty
3477   };
3478   for (const QualType &FundamentalType : FundamentalTypes)
3479     EmitFundamentalRTTIDescriptor(FundamentalType, DLLExport);
3480 }
3481 
3482 /// What sort of uniqueness rules should we use for the RTTI for the
3483 /// given type?
3484 ItaniumCXXABI::RTTIUniquenessKind ItaniumCXXABI::classifyRTTIUniqueness(
3485     QualType CanTy, llvm::GlobalValue::LinkageTypes Linkage) const {
3486   if (shouldRTTIBeUnique())
3487     return RUK_Unique;
3488 
3489   // It's only necessary for linkonce_odr or weak_odr linkage.
3490   if (Linkage != llvm::GlobalValue::LinkOnceODRLinkage &&
3491       Linkage != llvm::GlobalValue::WeakODRLinkage)
3492     return RUK_Unique;
3493 
3494   // It's only necessary with default visibility.
3495   if (CanTy->getVisibility() != DefaultVisibility)
3496     return RUK_Unique;
3497 
3498   // If we're not required to publish this symbol, hide it.
3499   if (Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
3500     return RUK_NonUniqueHidden;
3501 
3502   // If we're required to publish this symbol, as we might be under an
3503   // explicit instantiation, leave it with default visibility but
3504   // enable string-comparisons.
3505   assert(Linkage == llvm::GlobalValue::WeakODRLinkage);
3506   return RUK_NonUniqueVisible;
3507 }
3508 
3509 // Find out how to codegen the complete destructor and constructor
3510 namespace {
3511 enum class StructorCodegen { Emit, RAUW, Alias, COMDAT };
3512 }
3513 static StructorCodegen getCodegenToUse(CodeGenModule &CGM,
3514                                        const CXXMethodDecl *MD) {
3515   if (!CGM.getCodeGenOpts().CXXCtorDtorAliases)
3516     return StructorCodegen::Emit;
3517 
3518   // The complete and base structors are not equivalent if there are any virtual
3519   // bases, so emit separate functions.
3520   if (MD->getParent()->getNumVBases())
3521     return StructorCodegen::Emit;
3522 
3523   GlobalDecl AliasDecl;
3524   if (const auto *DD = dyn_cast<CXXDestructorDecl>(MD)) {
3525     AliasDecl = GlobalDecl(DD, Dtor_Complete);
3526   } else {
3527     const auto *CD = cast<CXXConstructorDecl>(MD);
3528     AliasDecl = GlobalDecl(CD, Ctor_Complete);
3529   }
3530   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
3531 
3532   if (llvm::GlobalValue::isDiscardableIfUnused(Linkage))
3533     return StructorCodegen::RAUW;
3534 
3535   // FIXME: Should we allow available_externally aliases?
3536   if (!llvm::GlobalAlias::isValidLinkage(Linkage))
3537     return StructorCodegen::RAUW;
3538 
3539   if (llvm::GlobalValue::isWeakForLinker(Linkage)) {
3540     // Only ELF and wasm support COMDATs with arbitrary names (C5/D5).
3541     if (CGM.getTarget().getTriple().isOSBinFormatELF() ||
3542         CGM.getTarget().getTriple().isOSBinFormatWasm())
3543       return StructorCodegen::COMDAT;
3544     return StructorCodegen::Emit;
3545   }
3546 
3547   return StructorCodegen::Alias;
3548 }
3549 
3550 static void emitConstructorDestructorAlias(CodeGenModule &CGM,
3551                                            GlobalDecl AliasDecl,
3552                                            GlobalDecl TargetDecl) {
3553   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
3554 
3555   StringRef MangledName = CGM.getMangledName(AliasDecl);
3556   llvm::GlobalValue *Entry = CGM.GetGlobalValue(MangledName);
3557   if (Entry && !Entry->isDeclaration())
3558     return;
3559 
3560   auto *Aliasee = cast<llvm::GlobalValue>(CGM.GetAddrOfGlobal(TargetDecl));
3561 
3562   // Create the alias with no name.
3563   auto *Alias = llvm::GlobalAlias::create(Linkage, "", Aliasee);
3564 
3565   // Switch any previous uses to the alias.
3566   if (Entry) {
3567     assert(Entry->getType() == Aliasee->getType() &&
3568            "declaration exists with different type");
3569     Alias->takeName(Entry);
3570     Entry->replaceAllUsesWith(Alias);
3571     Entry->eraseFromParent();
3572   } else {
3573     Alias->setName(MangledName);
3574   }
3575 
3576   // Finally, set up the alias with its proper name and attributes.
3577   CGM.setAliasAttributes(cast<NamedDecl>(AliasDecl.getDecl()), Alias);
3578 }
3579 
3580 void ItaniumCXXABI::emitCXXStructor(const CXXMethodDecl *MD,
3581                                     StructorType Type) {
3582   auto *CD = dyn_cast<CXXConstructorDecl>(MD);
3583   const CXXDestructorDecl *DD = CD ? nullptr : cast<CXXDestructorDecl>(MD);
3584 
3585   StructorCodegen CGType = getCodegenToUse(CGM, MD);
3586 
3587   if (Type == StructorType::Complete) {
3588     GlobalDecl CompleteDecl;
3589     GlobalDecl BaseDecl;
3590     if (CD) {
3591       CompleteDecl = GlobalDecl(CD, Ctor_Complete);
3592       BaseDecl = GlobalDecl(CD, Ctor_Base);
3593     } else {
3594       CompleteDecl = GlobalDecl(DD, Dtor_Complete);
3595       BaseDecl = GlobalDecl(DD, Dtor_Base);
3596     }
3597 
3598     if (CGType == StructorCodegen::Alias || CGType == StructorCodegen::COMDAT) {
3599       emitConstructorDestructorAlias(CGM, CompleteDecl, BaseDecl);
3600       return;
3601     }
3602 
3603     if (CGType == StructorCodegen::RAUW) {
3604       StringRef MangledName = CGM.getMangledName(CompleteDecl);
3605       auto *Aliasee = CGM.GetAddrOfGlobal(BaseDecl);
3606       CGM.addReplacement(MangledName, Aliasee);
3607       return;
3608     }
3609   }
3610 
3611   // The base destructor is equivalent to the base destructor of its
3612   // base class if there is exactly one non-virtual base class with a
3613   // non-trivial destructor, there are no fields with a non-trivial
3614   // destructor, and the body of the destructor is trivial.
3615   if (DD && Type == StructorType::Base && CGType != StructorCodegen::COMDAT &&
3616       !CGM.TryEmitBaseDestructorAsAlias(DD))
3617     return;
3618 
3619   llvm::Function *Fn = CGM.codegenCXXStructor(MD, Type);
3620 
3621   if (CGType == StructorCodegen::COMDAT) {
3622     SmallString<256> Buffer;
3623     llvm::raw_svector_ostream Out(Buffer);
3624     if (DD)
3625       getMangleContext().mangleCXXDtorComdat(DD, Out);
3626     else
3627       getMangleContext().mangleCXXCtorComdat(CD, Out);
3628     llvm::Comdat *C = CGM.getModule().getOrInsertComdat(Out.str());
3629     Fn->setComdat(C);
3630   } else {
3631     CGM.maybeSetTrivialComdat(*MD, *Fn);
3632   }
3633 }
3634 
3635 static llvm::Constant *getBeginCatchFn(CodeGenModule &CGM) {
3636   // void *__cxa_begin_catch(void*);
3637   llvm::FunctionType *FTy = llvm::FunctionType::get(
3638       CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3639 
3640   return CGM.CreateRuntimeFunction(FTy, "__cxa_begin_catch");
3641 }
3642 
3643 static llvm::Constant *getEndCatchFn(CodeGenModule &CGM) {
3644   // void __cxa_end_catch();
3645   llvm::FunctionType *FTy =
3646       llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
3647 
3648   return CGM.CreateRuntimeFunction(FTy, "__cxa_end_catch");
3649 }
3650 
3651 static llvm::Constant *getGetExceptionPtrFn(CodeGenModule &CGM) {
3652   // void *__cxa_get_exception_ptr(void*);
3653   llvm::FunctionType *FTy = llvm::FunctionType::get(
3654       CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3655 
3656   return CGM.CreateRuntimeFunction(FTy, "__cxa_get_exception_ptr");
3657 }
3658 
3659 namespace {
3660   /// A cleanup to call __cxa_end_catch.  In many cases, the caught
3661   /// exception type lets us state definitively that the thrown exception
3662   /// type does not have a destructor.  In particular:
3663   ///   - Catch-alls tell us nothing, so we have to conservatively
3664   ///     assume that the thrown exception might have a destructor.
3665   ///   - Catches by reference behave according to their base types.
3666   ///   - Catches of non-record types will only trigger for exceptions
3667   ///     of non-record types, which never have destructors.
3668   ///   - Catches of record types can trigger for arbitrary subclasses
3669   ///     of the caught type, so we have to assume the actual thrown
3670   ///     exception type might have a throwing destructor, even if the
3671   ///     caught type's destructor is trivial or nothrow.
3672   struct CallEndCatch final : EHScopeStack::Cleanup {
3673     CallEndCatch(bool MightThrow) : MightThrow(MightThrow) {}
3674     bool MightThrow;
3675 
3676     void Emit(CodeGenFunction &CGF, Flags flags) override {
3677       if (!MightThrow) {
3678         CGF.EmitNounwindRuntimeCall(getEndCatchFn(CGF.CGM));
3679         return;
3680       }
3681 
3682       CGF.EmitRuntimeCallOrInvoke(getEndCatchFn(CGF.CGM));
3683     }
3684   };
3685 }
3686 
3687 /// Emits a call to __cxa_begin_catch and enters a cleanup to call
3688 /// __cxa_end_catch.
3689 ///
3690 /// \param EndMightThrow - true if __cxa_end_catch might throw
3691 static llvm::Value *CallBeginCatch(CodeGenFunction &CGF,
3692                                    llvm::Value *Exn,
3693                                    bool EndMightThrow) {
3694   llvm::CallInst *call =
3695     CGF.EmitNounwindRuntimeCall(getBeginCatchFn(CGF.CGM), Exn);
3696 
3697   CGF.EHStack.pushCleanup<CallEndCatch>(NormalAndEHCleanup, EndMightThrow);
3698 
3699   return call;
3700 }
3701 
3702 /// A "special initializer" callback for initializing a catch
3703 /// parameter during catch initialization.
3704 static void InitCatchParam(CodeGenFunction &CGF,
3705                            const VarDecl &CatchParam,
3706                            Address ParamAddr,
3707                            SourceLocation Loc) {
3708   // Load the exception from where the landing pad saved it.
3709   llvm::Value *Exn = CGF.getExceptionFromSlot();
3710 
3711   CanQualType CatchType =
3712     CGF.CGM.getContext().getCanonicalType(CatchParam.getType());
3713   llvm::Type *LLVMCatchTy = CGF.ConvertTypeForMem(CatchType);
3714 
3715   // If we're catching by reference, we can just cast the object
3716   // pointer to the appropriate pointer.
3717   if (isa<ReferenceType>(CatchType)) {
3718     QualType CaughtType = cast<ReferenceType>(CatchType)->getPointeeType();
3719     bool EndCatchMightThrow = CaughtType->isRecordType();
3720 
3721     // __cxa_begin_catch returns the adjusted object pointer.
3722     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, EndCatchMightThrow);
3723 
3724     // We have no way to tell the personality function that we're
3725     // catching by reference, so if we're catching a pointer,
3726     // __cxa_begin_catch will actually return that pointer by value.
3727     if (const PointerType *PT = dyn_cast<PointerType>(CaughtType)) {
3728       QualType PointeeType = PT->getPointeeType();
3729 
3730       // When catching by reference, generally we should just ignore
3731       // this by-value pointer and use the exception object instead.
3732       if (!PointeeType->isRecordType()) {
3733 
3734         // Exn points to the struct _Unwind_Exception header, which
3735         // we have to skip past in order to reach the exception data.
3736         unsigned HeaderSize =
3737           CGF.CGM.getTargetCodeGenInfo().getSizeOfUnwindException();
3738         AdjustedExn = CGF.Builder.CreateConstGEP1_32(Exn, HeaderSize);
3739 
3740       // However, if we're catching a pointer-to-record type that won't
3741       // work, because the personality function might have adjusted
3742       // the pointer.  There's actually no way for us to fully satisfy
3743       // the language/ABI contract here:  we can't use Exn because it
3744       // might have the wrong adjustment, but we can't use the by-value
3745       // pointer because it's off by a level of abstraction.
3746       //
3747       // The current solution is to dump the adjusted pointer into an
3748       // alloca, which breaks language semantics (because changing the
3749       // pointer doesn't change the exception) but at least works.
3750       // The better solution would be to filter out non-exact matches
3751       // and rethrow them, but this is tricky because the rethrow
3752       // really needs to be catchable by other sites at this landing
3753       // pad.  The best solution is to fix the personality function.
3754       } else {
3755         // Pull the pointer for the reference type off.
3756         llvm::Type *PtrTy =
3757           cast<llvm::PointerType>(LLVMCatchTy)->getElementType();
3758 
3759         // Create the temporary and write the adjusted pointer into it.
3760         Address ExnPtrTmp =
3761           CGF.CreateTempAlloca(PtrTy, CGF.getPointerAlign(), "exn.byref.tmp");
3762         llvm::Value *Casted = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
3763         CGF.Builder.CreateStore(Casted, ExnPtrTmp);
3764 
3765         // Bind the reference to the temporary.
3766         AdjustedExn = ExnPtrTmp.getPointer();
3767       }
3768     }
3769 
3770     llvm::Value *ExnCast =
3771       CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.byref");
3772     CGF.Builder.CreateStore(ExnCast, ParamAddr);
3773     return;
3774   }
3775 
3776   // Scalars and complexes.
3777   TypeEvaluationKind TEK = CGF.getEvaluationKind(CatchType);
3778   if (TEK != TEK_Aggregate) {
3779     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, false);
3780 
3781     // If the catch type is a pointer type, __cxa_begin_catch returns
3782     // the pointer by value.
3783     if (CatchType->hasPointerRepresentation()) {
3784       llvm::Value *CastExn =
3785         CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.casted");
3786 
3787       switch (CatchType.getQualifiers().getObjCLifetime()) {
3788       case Qualifiers::OCL_Strong:
3789         CastExn = CGF.EmitARCRetainNonBlock(CastExn);
3790         // fallthrough
3791 
3792       case Qualifiers::OCL_None:
3793       case Qualifiers::OCL_ExplicitNone:
3794       case Qualifiers::OCL_Autoreleasing:
3795         CGF.Builder.CreateStore(CastExn, ParamAddr);
3796         return;
3797 
3798       case Qualifiers::OCL_Weak:
3799         CGF.EmitARCInitWeak(ParamAddr, CastExn);
3800         return;
3801       }
3802       llvm_unreachable("bad ownership qualifier!");
3803     }
3804 
3805     // Otherwise, it returns a pointer into the exception object.
3806 
3807     llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
3808     llvm::Value *Cast = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
3809 
3810     LValue srcLV = CGF.MakeNaturalAlignAddrLValue(Cast, CatchType);
3811     LValue destLV = CGF.MakeAddrLValue(ParamAddr, CatchType);
3812     switch (TEK) {
3813     case TEK_Complex:
3814       CGF.EmitStoreOfComplex(CGF.EmitLoadOfComplex(srcLV, Loc), destLV,
3815                              /*init*/ true);
3816       return;
3817     case TEK_Scalar: {
3818       llvm::Value *ExnLoad = CGF.EmitLoadOfScalar(srcLV, Loc);
3819       CGF.EmitStoreOfScalar(ExnLoad, destLV, /*init*/ true);
3820       return;
3821     }
3822     case TEK_Aggregate:
3823       llvm_unreachable("evaluation kind filtered out!");
3824     }
3825     llvm_unreachable("bad evaluation kind");
3826   }
3827 
3828   assert(isa<RecordType>(CatchType) && "unexpected catch type!");
3829   auto catchRD = CatchType->getAsCXXRecordDecl();
3830   CharUnits caughtExnAlignment = CGF.CGM.getClassPointerAlignment(catchRD);
3831 
3832   llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
3833 
3834   // Check for a copy expression.  If we don't have a copy expression,
3835   // that means a trivial copy is okay.
3836   const Expr *copyExpr = CatchParam.getInit();
3837   if (!copyExpr) {
3838     llvm::Value *rawAdjustedExn = CallBeginCatch(CGF, Exn, true);
3839     Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
3840                         caughtExnAlignment);
3841     CGF.EmitAggregateCopy(ParamAddr, adjustedExn, CatchType);
3842     return;
3843   }
3844 
3845   // We have to call __cxa_get_exception_ptr to get the adjusted
3846   // pointer before copying.
3847   llvm::CallInst *rawAdjustedExn =
3848     CGF.EmitNounwindRuntimeCall(getGetExceptionPtrFn(CGF.CGM), Exn);
3849 
3850   // Cast that to the appropriate type.
3851   Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
3852                       caughtExnAlignment);
3853 
3854   // The copy expression is defined in terms of an OpaqueValueExpr.
3855   // Find it and map it to the adjusted expression.
3856   CodeGenFunction::OpaqueValueMapping
3857     opaque(CGF, OpaqueValueExpr::findInCopyConstruct(copyExpr),
3858            CGF.MakeAddrLValue(adjustedExn, CatchParam.getType()));
3859 
3860   // Call the copy ctor in a terminate scope.
3861   CGF.EHStack.pushTerminate();
3862 
3863   // Perform the copy construction.
3864   CGF.EmitAggExpr(copyExpr,
3865                   AggValueSlot::forAddr(ParamAddr, Qualifiers(),
3866                                         AggValueSlot::IsNotDestructed,
3867                                         AggValueSlot::DoesNotNeedGCBarriers,
3868                                         AggValueSlot::IsNotAliased));
3869 
3870   // Leave the terminate scope.
3871   CGF.EHStack.popTerminate();
3872 
3873   // Undo the opaque value mapping.
3874   opaque.pop();
3875 
3876   // Finally we can call __cxa_begin_catch.
3877   CallBeginCatch(CGF, Exn, true);
3878 }
3879 
3880 /// Begins a catch statement by initializing the catch variable and
3881 /// calling __cxa_begin_catch.
3882 void ItaniumCXXABI::emitBeginCatch(CodeGenFunction &CGF,
3883                                    const CXXCatchStmt *S) {
3884   // We have to be very careful with the ordering of cleanups here:
3885   //   C++ [except.throw]p4:
3886   //     The destruction [of the exception temporary] occurs
3887   //     immediately after the destruction of the object declared in
3888   //     the exception-declaration in the handler.
3889   //
3890   // So the precise ordering is:
3891   //   1.  Construct catch variable.
3892   //   2.  __cxa_begin_catch
3893   //   3.  Enter __cxa_end_catch cleanup
3894   //   4.  Enter dtor cleanup
3895   //
3896   // We do this by using a slightly abnormal initialization process.
3897   // Delegation sequence:
3898   //   - ExitCXXTryStmt opens a RunCleanupsScope
3899   //     - EmitAutoVarAlloca creates the variable and debug info
3900   //       - InitCatchParam initializes the variable from the exception
3901   //       - CallBeginCatch calls __cxa_begin_catch
3902   //       - CallBeginCatch enters the __cxa_end_catch cleanup
3903   //     - EmitAutoVarCleanups enters the variable destructor cleanup
3904   //   - EmitCXXTryStmt emits the code for the catch body
3905   //   - EmitCXXTryStmt close the RunCleanupsScope
3906 
3907   VarDecl *CatchParam = S->getExceptionDecl();
3908   if (!CatchParam) {
3909     llvm::Value *Exn = CGF.getExceptionFromSlot();
3910     CallBeginCatch(CGF, Exn, true);
3911     return;
3912   }
3913 
3914   // Emit the local.
3915   CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam);
3916   InitCatchParam(CGF, *CatchParam, var.getObjectAddress(CGF), S->getLocStart());
3917   CGF.EmitAutoVarCleanups(var);
3918 }
3919 
3920 /// Get or define the following function:
3921 ///   void @__clang_call_terminate(i8* %exn) nounwind noreturn
3922 /// This code is used only in C++.
3923 static llvm::Constant *getClangCallTerminateFn(CodeGenModule &CGM) {
3924   llvm::FunctionType *fnTy =
3925     llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3926   llvm::Constant *fnRef =
3927       CGM.CreateRuntimeFunction(fnTy, "__clang_call_terminate",
3928                                 llvm::AttributeSet(), /*Local=*/true);
3929 
3930   llvm::Function *fn = dyn_cast<llvm::Function>(fnRef);
3931   if (fn && fn->empty()) {
3932     fn->setDoesNotThrow();
3933     fn->setDoesNotReturn();
3934 
3935     // What we really want is to massively penalize inlining without
3936     // forbidding it completely.  The difference between that and
3937     // 'noinline' is negligible.
3938     fn->addFnAttr(llvm::Attribute::NoInline);
3939 
3940     // Allow this function to be shared across translation units, but
3941     // we don't want it to turn into an exported symbol.
3942     fn->setLinkage(llvm::Function::LinkOnceODRLinkage);
3943     fn->setVisibility(llvm::Function::HiddenVisibility);
3944     if (CGM.supportsCOMDAT())
3945       fn->setComdat(CGM.getModule().getOrInsertComdat(fn->getName()));
3946 
3947     // Set up the function.
3948     llvm::BasicBlock *entry =
3949       llvm::BasicBlock::Create(CGM.getLLVMContext(), "", fn);
3950     CGBuilderTy builder(CGM, entry);
3951 
3952     // Pull the exception pointer out of the parameter list.
3953     llvm::Value *exn = &*fn->arg_begin();
3954 
3955     // Call __cxa_begin_catch(exn).
3956     llvm::CallInst *catchCall = builder.CreateCall(getBeginCatchFn(CGM), exn);
3957     catchCall->setDoesNotThrow();
3958     catchCall->setCallingConv(CGM.getRuntimeCC());
3959 
3960     // Call std::terminate().
3961     llvm::CallInst *termCall = builder.CreateCall(CGM.getTerminateFn());
3962     termCall->setDoesNotThrow();
3963     termCall->setDoesNotReturn();
3964     termCall->setCallingConv(CGM.getRuntimeCC());
3965 
3966     // std::terminate cannot return.
3967     builder.CreateUnreachable();
3968   }
3969 
3970   return fnRef;
3971 }
3972 
3973 llvm::CallInst *
3974 ItaniumCXXABI::emitTerminateForUnexpectedException(CodeGenFunction &CGF,
3975                                                    llvm::Value *Exn) {
3976   // In C++, we want to call __cxa_begin_catch() before terminating.
3977   if (Exn) {
3978     assert(CGF.CGM.getLangOpts().CPlusPlus);
3979     return CGF.EmitNounwindRuntimeCall(getClangCallTerminateFn(CGF.CGM), Exn);
3980   }
3981   return CGF.EmitNounwindRuntimeCall(CGF.CGM.getTerminateFn());
3982 }
3983