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 "TargetInfo.h"
28 #include "clang/CodeGen/ConstantInitBuilder.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   AddedStructorArgs
211   buildStructorSignature(const CXXMethodDecl *MD, StructorType T,
212                          SmallVectorImpl<CanQualType> &ArgTys) override;
213 
214   bool useThunkForDtorVariant(const CXXDestructorDecl *Dtor,
215                               CXXDtorType DT) const override {
216     // Itanium does not emit any destructor variant as an inline thunk.
217     // Delegating may occur as an optimization, but all variants are either
218     // emitted with external linkage or as linkonce if they are inline and used.
219     return false;
220   }
221 
222   void EmitCXXDestructors(const CXXDestructorDecl *D) override;
223 
224   void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
225                                  FunctionArgList &Params) override;
226 
227   void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
228 
229   AddedStructorArgs
230   addImplicitConstructorArgs(CodeGenFunction &CGF, const CXXConstructorDecl *D,
231                              CXXCtorType Type, bool ForVirtualBase,
232                              bool Delegating, 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 CGCXXABI::AddedStructorArgs
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     return AddedStructorArgs::prefix(1);
1369   }
1370   return AddedStructorArgs{};
1371 }
1372 
1373 void ItaniumCXXABI::EmitCXXDestructors(const CXXDestructorDecl *D) {
1374   // The destructor used for destructing this as a base class; ignores
1375   // virtual bases.
1376   CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
1377 
1378   // The destructor used for destructing this as a most-derived class;
1379   // call the base destructor and then destructs any virtual bases.
1380   CGM.EmitGlobal(GlobalDecl(D, Dtor_Complete));
1381 
1382   // The destructor in a virtual table is always a 'deleting'
1383   // destructor, which calls the complete destructor and then uses the
1384   // appropriate operator delete.
1385   if (D->isVirtual())
1386     CGM.EmitGlobal(GlobalDecl(D, Dtor_Deleting));
1387 }
1388 
1389 void ItaniumCXXABI::addImplicitStructorParams(CodeGenFunction &CGF,
1390                                               QualType &ResTy,
1391                                               FunctionArgList &Params) {
1392   const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
1393   assert(isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD));
1394 
1395   // Check if we need a VTT parameter as well.
1396   if (NeedsVTTParameter(CGF.CurGD)) {
1397     ASTContext &Context = getContext();
1398 
1399     // FIXME: avoid the fake decl
1400     QualType T = Context.getPointerType(Context.VoidPtrTy);
1401     ImplicitParamDecl *VTTDecl
1402       = ImplicitParamDecl::Create(Context, nullptr, MD->getLocation(),
1403                                   &Context.Idents.get("vtt"), T);
1404     Params.insert(Params.begin() + 1, VTTDecl);
1405     getStructorImplicitParamDecl(CGF) = VTTDecl;
1406   }
1407 }
1408 
1409 void ItaniumCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
1410   // Naked functions have no prolog.
1411   if (CGF.CurFuncDecl && CGF.CurFuncDecl->hasAttr<NakedAttr>())
1412     return;
1413 
1414   /// Initialize the 'this' slot.
1415   EmitThisParam(CGF);
1416 
1417   /// Initialize the 'vtt' slot if needed.
1418   if (getStructorImplicitParamDecl(CGF)) {
1419     getStructorImplicitParamValue(CGF) = CGF.Builder.CreateLoad(
1420         CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), "vtt");
1421   }
1422 
1423   /// If this is a function that the ABI specifies returns 'this', initialize
1424   /// the return slot to 'this' at the start of the function.
1425   ///
1426   /// Unlike the setting of return types, this is done within the ABI
1427   /// implementation instead of by clients of CGCXXABI because:
1428   /// 1) getThisValue is currently protected
1429   /// 2) in theory, an ABI could implement 'this' returns some other way;
1430   ///    HasThisReturn only specifies a contract, not the implementation
1431   if (HasThisReturn(CGF.CurGD))
1432     CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue);
1433 }
1434 
1435 CGCXXABI::AddedStructorArgs ItaniumCXXABI::addImplicitConstructorArgs(
1436     CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type,
1437     bool ForVirtualBase, bool Delegating, CallArgList &Args) {
1438   if (!NeedsVTTParameter(GlobalDecl(D, Type)))
1439     return AddedStructorArgs{};
1440 
1441   // Insert the implicit 'vtt' argument as the second argument.
1442   llvm::Value *VTT =
1443       CGF.GetVTTParameter(GlobalDecl(D, Type), ForVirtualBase, Delegating);
1444   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1445   Args.insert(Args.begin() + 1,
1446               CallArg(RValue::get(VTT), VTTTy, /*needscopy=*/false));
1447   return AddedStructorArgs::prefix(1);  // Added one arg.
1448 }
1449 
1450 void ItaniumCXXABI::EmitDestructorCall(CodeGenFunction &CGF,
1451                                        const CXXDestructorDecl *DD,
1452                                        CXXDtorType Type, bool ForVirtualBase,
1453                                        bool Delegating, Address This) {
1454   GlobalDecl GD(DD, Type);
1455   llvm::Value *VTT = CGF.GetVTTParameter(GD, ForVirtualBase, Delegating);
1456   QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1457 
1458   CGCallee Callee;
1459   if (getContext().getLangOpts().AppleKext &&
1460       Type != Dtor_Base && DD->isVirtual())
1461     Callee = CGF.BuildAppleKextVirtualDestructorCall(DD, Type, DD->getParent());
1462   else
1463     Callee =
1464       CGCallee::forDirect(CGM.getAddrOfCXXStructor(DD, getFromDtorType(Type)),
1465                           DD);
1466 
1467   CGF.EmitCXXMemberOrOperatorCall(DD, Callee, ReturnValueSlot(),
1468                                   This.getPointer(), VTT, VTTTy,
1469                                   nullptr, nullptr);
1470 }
1471 
1472 void ItaniumCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
1473                                           const CXXRecordDecl *RD) {
1474   llvm::GlobalVariable *VTable = getAddrOfVTable(RD, CharUnits());
1475   if (VTable->hasInitializer())
1476     return;
1477 
1478   ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
1479   const VTableLayout &VTLayout = VTContext.getVTableLayout(RD);
1480   llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
1481   llvm::Constant *RTTI =
1482       CGM.GetAddrOfRTTIDescriptor(CGM.getContext().getTagDeclType(RD));
1483 
1484   // Create and set the initializer.
1485   ConstantInitBuilder Builder(CGM);
1486   auto Components = Builder.beginStruct();
1487   CGVT.createVTableInitializer(Components, VTLayout, RTTI);
1488   Components.finishAndSetAsInitializer(VTable);
1489 
1490   // Set the correct linkage.
1491   VTable->setLinkage(Linkage);
1492 
1493   if (CGM.supportsCOMDAT() && VTable->isWeakForLinker())
1494     VTable->setComdat(CGM.getModule().getOrInsertComdat(VTable->getName()));
1495 
1496   // Set the right visibility.
1497   CGM.setGlobalVisibility(VTable, RD);
1498 
1499   // Use pointer alignment for the vtable. Otherwise we would align them based
1500   // on the size of the initializer which doesn't make sense as only single
1501   // values are read.
1502   unsigned PAlign = CGM.getTarget().getPointerAlign(0);
1503   VTable->setAlignment(getContext().toCharUnitsFromBits(PAlign).getQuantity());
1504 
1505   // If this is the magic class __cxxabiv1::__fundamental_type_info,
1506   // we will emit the typeinfo for the fundamental types. This is the
1507   // same behaviour as GCC.
1508   const DeclContext *DC = RD->getDeclContext();
1509   if (RD->getIdentifier() &&
1510       RD->getIdentifier()->isStr("__fundamental_type_info") &&
1511       isa<NamespaceDecl>(DC) && cast<NamespaceDecl>(DC)->getIdentifier() &&
1512       cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__cxxabiv1") &&
1513       DC->getParent()->isTranslationUnit())
1514     EmitFundamentalRTTIDescriptors(RD->hasAttr<DLLExportAttr>());
1515 
1516   if (!VTable->isDeclarationForLinker())
1517     CGM.EmitVTableTypeMetadata(VTable, VTLayout);
1518 }
1519 
1520 bool ItaniumCXXABI::isVirtualOffsetNeededForVTableField(
1521     CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) {
1522   if (Vptr.NearestVBase == nullptr)
1523     return false;
1524   return NeedsVTTParameter(CGF.CurGD);
1525 }
1526 
1527 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructor(
1528     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1529     const CXXRecordDecl *NearestVBase) {
1530 
1531   if ((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1532       NeedsVTTParameter(CGF.CurGD)) {
1533     return getVTableAddressPointInStructorWithVTT(CGF, VTableClass, Base,
1534                                                   NearestVBase);
1535   }
1536   return getVTableAddressPoint(Base, VTableClass);
1537 }
1538 
1539 llvm::Constant *
1540 ItaniumCXXABI::getVTableAddressPoint(BaseSubobject Base,
1541                                      const CXXRecordDecl *VTableClass) {
1542   llvm::GlobalValue *VTable = getAddrOfVTable(VTableClass, CharUnits());
1543 
1544   // Find the appropriate vtable within the vtable group, and the address point
1545   // within that vtable.
1546   VTableLayout::AddressPointLocation AddressPoint =
1547       CGM.getItaniumVTableContext()
1548           .getVTableLayout(VTableClass)
1549           .getAddressPoint(Base);
1550   llvm::Value *Indices[] = {
1551     llvm::ConstantInt::get(CGM.Int32Ty, 0),
1552     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.VTableIndex),
1553     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.AddressPointIndex),
1554   };
1555 
1556   return llvm::ConstantExpr::getGetElementPtr(VTable->getValueType(), VTable,
1557                                               Indices, /*InBounds=*/true,
1558                                               /*InRangeIndex=*/1);
1559 }
1560 
1561 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructorWithVTT(
1562     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1563     const CXXRecordDecl *NearestVBase) {
1564   assert((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1565          NeedsVTTParameter(CGF.CurGD) && "This class doesn't have VTT");
1566 
1567   // Get the secondary vpointer index.
1568   uint64_t VirtualPointerIndex =
1569       CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base);
1570 
1571   /// Load the VTT.
1572   llvm::Value *VTT = CGF.LoadCXXVTT();
1573   if (VirtualPointerIndex)
1574     VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex);
1575 
1576   // And load the address point from the VTT.
1577   return CGF.Builder.CreateAlignedLoad(VTT, CGF.getPointerAlign());
1578 }
1579 
1580 llvm::Constant *ItaniumCXXABI::getVTableAddressPointForConstExpr(
1581     BaseSubobject Base, const CXXRecordDecl *VTableClass) {
1582   return getVTableAddressPoint(Base, VTableClass);
1583 }
1584 
1585 llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1586                                                      CharUnits VPtrOffset) {
1587   assert(VPtrOffset.isZero() && "Itanium ABI only supports zero vptr offsets");
1588 
1589   llvm::GlobalVariable *&VTable = VTables[RD];
1590   if (VTable)
1591     return VTable;
1592 
1593   // Queue up this vtable for possible deferred emission.
1594   CGM.addDeferredVTable(RD);
1595 
1596   SmallString<256> Name;
1597   llvm::raw_svector_ostream Out(Name);
1598   getMangleContext().mangleCXXVTable(RD, Out);
1599 
1600   const VTableLayout &VTLayout =
1601       CGM.getItaniumVTableContext().getVTableLayout(RD);
1602   llvm::Type *VTableType = CGM.getVTables().getVTableType(VTLayout);
1603 
1604   VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
1605       Name, VTableType, llvm::GlobalValue::ExternalLinkage);
1606   VTable->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
1607 
1608   if (RD->hasAttr<DLLImportAttr>())
1609     VTable->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
1610   else if (RD->hasAttr<DLLExportAttr>())
1611     VTable->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
1612 
1613   return VTable;
1614 }
1615 
1616 CGCallee ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
1617                                                   GlobalDecl GD,
1618                                                   Address This,
1619                                                   llvm::Type *Ty,
1620                                                   SourceLocation Loc) {
1621   GD = GD.getCanonicalDecl();
1622   Ty = Ty->getPointerTo()->getPointerTo();
1623   auto *MethodDecl = cast<CXXMethodDecl>(GD.getDecl());
1624   llvm::Value *VTable = CGF.GetVTablePtr(This, Ty, MethodDecl->getParent());
1625 
1626   uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
1627   llvm::Value *VFunc;
1628   if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) {
1629     VFunc = CGF.EmitVTableTypeCheckedLoad(
1630         MethodDecl->getParent(), VTable,
1631         VTableIndex * CGM.getContext().getTargetInfo().getPointerWidth(0) / 8);
1632   } else {
1633     CGF.EmitTypeMetadataCodeForVCall(MethodDecl->getParent(), VTable, Loc);
1634 
1635     llvm::Value *VFuncPtr =
1636         CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
1637     auto *VFuncLoad =
1638         CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign());
1639 
1640     // Add !invariant.load md to virtual function load to indicate that
1641     // function didn't change inside vtable.
1642     // It's safe to add it without -fstrict-vtable-pointers, but it would not
1643     // help in devirtualization because it will only matter if we will have 2
1644     // the same virtual function loads from the same vtable load, which won't
1645     // happen without enabled devirtualization with -fstrict-vtable-pointers.
1646     if (CGM.getCodeGenOpts().OptimizationLevel > 0 &&
1647         CGM.getCodeGenOpts().StrictVTablePointers)
1648       VFuncLoad->setMetadata(
1649           llvm::LLVMContext::MD_invariant_load,
1650           llvm::MDNode::get(CGM.getLLVMContext(),
1651                             llvm::ArrayRef<llvm::Metadata *>()));
1652     VFunc = VFuncLoad;
1653   }
1654 
1655   CGCallee Callee(MethodDecl, VFunc);
1656   return Callee;
1657 }
1658 
1659 llvm::Value *ItaniumCXXABI::EmitVirtualDestructorCall(
1660     CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType,
1661     Address This, const CXXMemberCallExpr *CE) {
1662   assert(CE == nullptr || CE->arg_begin() == CE->arg_end());
1663   assert(DtorType == Dtor_Deleting || DtorType == Dtor_Complete);
1664 
1665   const CGFunctionInfo *FInfo = &CGM.getTypes().arrangeCXXStructorDeclaration(
1666       Dtor, getFromDtorType(DtorType));
1667   llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1668   CGCallee Callee =
1669       getVirtualFunctionPointer(CGF, GlobalDecl(Dtor, DtorType), This, Ty,
1670                                 CE ? CE->getLocStart() : SourceLocation());
1671 
1672   CGF.EmitCXXMemberOrOperatorCall(Dtor, Callee, ReturnValueSlot(),
1673                                   This.getPointer(), /*ImplicitParam=*/nullptr,
1674                                   QualType(), CE, nullptr);
1675   return nullptr;
1676 }
1677 
1678 void ItaniumCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
1679   CodeGenVTables &VTables = CGM.getVTables();
1680   llvm::GlobalVariable *VTT = VTables.GetAddrOfVTT(RD);
1681   VTables.EmitVTTDefinition(VTT, CGM.getVTableLinkage(RD), RD);
1682 }
1683 
1684 bool ItaniumCXXABI::canSpeculativelyEmitVTable(const CXXRecordDecl *RD) const {
1685   // We don't emit available_externally vtables if we are in -fapple-kext mode
1686   // because kext mode does not permit devirtualization.
1687   if (CGM.getLangOpts().AppleKext)
1688     return false;
1689 
1690   // If we don't have any inline virtual functions, and if vtable is not hidden,
1691   // then we are safe to emit available_externally copy of vtable.
1692   // FIXME we can still emit a copy of the vtable if we
1693   // can emit definition of the inline functions.
1694   return !hasAnyVirtualInlineFunction(RD) && !isVTableHidden(RD);
1695 }
1696 static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF,
1697                                           Address InitialPtr,
1698                                           int64_t NonVirtualAdjustment,
1699                                           int64_t VirtualAdjustment,
1700                                           bool IsReturnAdjustment) {
1701   if (!NonVirtualAdjustment && !VirtualAdjustment)
1702     return InitialPtr.getPointer();
1703 
1704   Address V = CGF.Builder.CreateElementBitCast(InitialPtr, CGF.Int8Ty);
1705 
1706   // In a base-to-derived cast, the non-virtual adjustment is applied first.
1707   if (NonVirtualAdjustment && !IsReturnAdjustment) {
1708     V = CGF.Builder.CreateConstInBoundsByteGEP(V,
1709                               CharUnits::fromQuantity(NonVirtualAdjustment));
1710   }
1711 
1712   // Perform the virtual adjustment if we have one.
1713   llvm::Value *ResultPtr;
1714   if (VirtualAdjustment) {
1715     llvm::Type *PtrDiffTy =
1716         CGF.ConvertType(CGF.getContext().getPointerDiffType());
1717 
1718     Address VTablePtrPtr = CGF.Builder.CreateElementBitCast(V, CGF.Int8PtrTy);
1719     llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr);
1720 
1721     llvm::Value *OffsetPtr =
1722         CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment);
1723 
1724     OffsetPtr = CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo());
1725 
1726     // Load the adjustment offset from the vtable.
1727     llvm::Value *Offset =
1728       CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign());
1729 
1730     // Adjust our pointer.
1731     ResultPtr = CGF.Builder.CreateInBoundsGEP(V.getPointer(), Offset);
1732   } else {
1733     ResultPtr = V.getPointer();
1734   }
1735 
1736   // In a derived-to-base conversion, the non-virtual adjustment is
1737   // applied second.
1738   if (NonVirtualAdjustment && IsReturnAdjustment) {
1739     ResultPtr = CGF.Builder.CreateConstInBoundsGEP1_64(ResultPtr,
1740                                                        NonVirtualAdjustment);
1741   }
1742 
1743   // Cast back to the original type.
1744   return CGF.Builder.CreateBitCast(ResultPtr, InitialPtr.getType());
1745 }
1746 
1747 llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF,
1748                                                   Address This,
1749                                                   const ThisAdjustment &TA) {
1750   return performTypeAdjustment(CGF, This, TA.NonVirtual,
1751                                TA.Virtual.Itanium.VCallOffsetOffset,
1752                                /*IsReturnAdjustment=*/false);
1753 }
1754 
1755 llvm::Value *
1756 ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
1757                                        const ReturnAdjustment &RA) {
1758   return performTypeAdjustment(CGF, Ret, RA.NonVirtual,
1759                                RA.Virtual.Itanium.VBaseOffsetOffset,
1760                                /*IsReturnAdjustment=*/true);
1761 }
1762 
1763 void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF,
1764                                     RValue RV, QualType ResultType) {
1765   if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl()))
1766     return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType);
1767 
1768   // Destructor thunks in the ARM ABI have indeterminate results.
1769   llvm::Type *T = CGF.ReturnValue.getElementType();
1770   RValue Undef = RValue::get(llvm::UndefValue::get(T));
1771   return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType);
1772 }
1773 
1774 /************************** Array allocation cookies **************************/
1775 
1776 CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1777   // The array cookie is a size_t; pad that up to the element alignment.
1778   // The cookie is actually right-justified in that space.
1779   return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),
1780                   CGM.getContext().getTypeAlignInChars(elementType));
1781 }
1782 
1783 Address ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1784                                              Address NewPtr,
1785                                              llvm::Value *NumElements,
1786                                              const CXXNewExpr *expr,
1787                                              QualType ElementType) {
1788   assert(requiresArrayCookie(expr));
1789 
1790   unsigned AS = NewPtr.getAddressSpace();
1791 
1792   ASTContext &Ctx = getContext();
1793   CharUnits SizeSize = CGF.getSizeSize();
1794 
1795   // The size of the cookie.
1796   CharUnits CookieSize =
1797     std::max(SizeSize, Ctx.getTypeAlignInChars(ElementType));
1798   assert(CookieSize == getArrayCookieSizeImpl(ElementType));
1799 
1800   // Compute an offset to the cookie.
1801   Address CookiePtr = NewPtr;
1802   CharUnits CookieOffset = CookieSize - SizeSize;
1803   if (!CookieOffset.isZero())
1804     CookiePtr = CGF.Builder.CreateConstInBoundsByteGEP(CookiePtr, CookieOffset);
1805 
1806   // Write the number of elements into the appropriate slot.
1807   Address NumElementsPtr =
1808       CGF.Builder.CreateElementBitCast(CookiePtr, CGF.SizeTy);
1809   llvm::Instruction *SI = CGF.Builder.CreateStore(NumElements, NumElementsPtr);
1810 
1811   // Handle the array cookie specially in ASan.
1812   if (CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) && AS == 0 &&
1813       expr->getOperatorNew()->isReplaceableGlobalAllocationFunction()) {
1814     // The store to the CookiePtr does not need to be instrumented.
1815     CGM.getSanitizerMetadata()->disableSanitizerForInstruction(SI);
1816     llvm::FunctionType *FTy =
1817         llvm::FunctionType::get(CGM.VoidTy, NumElementsPtr.getType(), false);
1818     llvm::Constant *F =
1819         CGM.CreateRuntimeFunction(FTy, "__asan_poison_cxx_array_cookie");
1820     CGF.Builder.CreateCall(F, NumElementsPtr.getPointer());
1821   }
1822 
1823   // Finally, compute a pointer to the actual data buffer by skipping
1824   // over the cookie completely.
1825   return CGF.Builder.CreateConstInBoundsByteGEP(NewPtr, CookieSize);
1826 }
1827 
1828 llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1829                                                 Address allocPtr,
1830                                                 CharUnits cookieSize) {
1831   // The element size is right-justified in the cookie.
1832   Address numElementsPtr = allocPtr;
1833   CharUnits numElementsOffset = cookieSize - CGF.getSizeSize();
1834   if (!numElementsOffset.isZero())
1835     numElementsPtr =
1836       CGF.Builder.CreateConstInBoundsByteGEP(numElementsPtr, numElementsOffset);
1837 
1838   unsigned AS = allocPtr.getAddressSpace();
1839   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
1840   if (!CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) || AS != 0)
1841     return CGF.Builder.CreateLoad(numElementsPtr);
1842   // In asan mode emit a function call instead of a regular load and let the
1843   // run-time deal with it: if the shadow is properly poisoned return the
1844   // cookie, otherwise return 0 to avoid an infinite loop calling DTORs.
1845   // We can't simply ignore this load using nosanitize metadata because
1846   // the metadata may be lost.
1847   llvm::FunctionType *FTy =
1848       llvm::FunctionType::get(CGF.SizeTy, CGF.SizeTy->getPointerTo(0), false);
1849   llvm::Constant *F =
1850       CGM.CreateRuntimeFunction(FTy, "__asan_load_cxx_array_cookie");
1851   return CGF.Builder.CreateCall(F, numElementsPtr.getPointer());
1852 }
1853 
1854 CharUnits ARMCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1855   // ARM says that the cookie is always:
1856   //   struct array_cookie {
1857   //     std::size_t element_size; // element_size != 0
1858   //     std::size_t element_count;
1859   //   };
1860   // But the base ABI doesn't give anything an alignment greater than
1861   // 8, so we can dismiss this as typical ABI-author blindness to
1862   // actual language complexity and round up to the element alignment.
1863   return std::max(CharUnits::fromQuantity(2 * CGM.SizeSizeInBytes),
1864                   CGM.getContext().getTypeAlignInChars(elementType));
1865 }
1866 
1867 Address ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1868                                          Address newPtr,
1869                                          llvm::Value *numElements,
1870                                          const CXXNewExpr *expr,
1871                                          QualType elementType) {
1872   assert(requiresArrayCookie(expr));
1873 
1874   // The cookie is always at the start of the buffer.
1875   Address cookie = newPtr;
1876 
1877   // The first element is the element size.
1878   cookie = CGF.Builder.CreateElementBitCast(cookie, CGF.SizeTy);
1879   llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy,
1880                  getContext().getTypeSizeInChars(elementType).getQuantity());
1881   CGF.Builder.CreateStore(elementSize, cookie);
1882 
1883   // The second element is the element count.
1884   cookie = CGF.Builder.CreateConstInBoundsGEP(cookie, 1, CGF.getSizeSize());
1885   CGF.Builder.CreateStore(numElements, cookie);
1886 
1887   // Finally, compute a pointer to the actual data buffer by skipping
1888   // over the cookie completely.
1889   CharUnits cookieSize = ARMCXXABI::getArrayCookieSizeImpl(elementType);
1890   return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize);
1891 }
1892 
1893 llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1894                                             Address allocPtr,
1895                                             CharUnits cookieSize) {
1896   // The number of elements is at offset sizeof(size_t) relative to
1897   // the allocated pointer.
1898   Address numElementsPtr
1899     = CGF.Builder.CreateConstInBoundsByteGEP(allocPtr, CGF.getSizeSize());
1900 
1901   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
1902   return CGF.Builder.CreateLoad(numElementsPtr);
1903 }
1904 
1905 /*********************** Static local initialization **************************/
1906 
1907 static llvm::Constant *getGuardAcquireFn(CodeGenModule &CGM,
1908                                          llvm::PointerType *GuardPtrTy) {
1909   // int __cxa_guard_acquire(__guard *guard_object);
1910   llvm::FunctionType *FTy =
1911     llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
1912                             GuardPtrTy, /*isVarArg=*/false);
1913   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_acquire",
1914                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1915                                               llvm::AttributeSet::FunctionIndex,
1916                                                  llvm::Attribute::NoUnwind));
1917 }
1918 
1919 static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
1920                                          llvm::PointerType *GuardPtrTy) {
1921   // void __cxa_guard_release(__guard *guard_object);
1922   llvm::FunctionType *FTy =
1923     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1924   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_release",
1925                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1926                                               llvm::AttributeSet::FunctionIndex,
1927                                                  llvm::Attribute::NoUnwind));
1928 }
1929 
1930 static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
1931                                        llvm::PointerType *GuardPtrTy) {
1932   // void __cxa_guard_abort(__guard *guard_object);
1933   llvm::FunctionType *FTy =
1934     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1935   return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_abort",
1936                                    llvm::AttributeSet::get(CGM.getLLVMContext(),
1937                                               llvm::AttributeSet::FunctionIndex,
1938                                                  llvm::Attribute::NoUnwind));
1939 }
1940 
1941 namespace {
1942   struct CallGuardAbort final : EHScopeStack::Cleanup {
1943     llvm::GlobalVariable *Guard;
1944     CallGuardAbort(llvm::GlobalVariable *Guard) : Guard(Guard) {}
1945 
1946     void Emit(CodeGenFunction &CGF, Flags flags) override {
1947       CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()),
1948                                   Guard);
1949     }
1950   };
1951 }
1952 
1953 /// The ARM code here follows the Itanium code closely enough that we
1954 /// just special-case it at particular places.
1955 void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
1956                                     const VarDecl &D,
1957                                     llvm::GlobalVariable *var,
1958                                     bool shouldPerformInit) {
1959   CGBuilderTy &Builder = CGF.Builder;
1960 
1961   // Inline variables that weren't instantiated from variable templates have
1962   // partially-ordered initialization within their translation unit.
1963   bool NonTemplateInline =
1964       D.isInline() &&
1965       !isTemplateInstantiation(D.getTemplateSpecializationKind());
1966 
1967   // We only need to use thread-safe statics for local non-TLS variables and
1968   // inline variables; other global initialization is always single-threaded
1969   // or (through lazy dynamic loading in multiple threads) unsequenced.
1970   bool threadsafe = getContext().getLangOpts().ThreadsafeStatics &&
1971                     (D.isLocalVarDecl() || NonTemplateInline) &&
1972                     !D.getTLSKind();
1973 
1974   // If we have a global variable with internal linkage and thread-safe statics
1975   // are disabled, we can just let the guard variable be of type i8.
1976   bool useInt8GuardVariable = !threadsafe && var->hasInternalLinkage();
1977 
1978   llvm::IntegerType *guardTy;
1979   CharUnits guardAlignment;
1980   if (useInt8GuardVariable) {
1981     guardTy = CGF.Int8Ty;
1982     guardAlignment = CharUnits::One();
1983   } else {
1984     // Guard variables are 64 bits in the generic ABI and size width on ARM
1985     // (i.e. 32-bit on AArch32, 64-bit on AArch64).
1986     if (UseARMGuardVarABI) {
1987       guardTy = CGF.SizeTy;
1988       guardAlignment = CGF.getSizeAlign();
1989     } else {
1990       guardTy = CGF.Int64Ty;
1991       guardAlignment = CharUnits::fromQuantity(
1992                              CGM.getDataLayout().getABITypeAlignment(guardTy));
1993     }
1994   }
1995   llvm::PointerType *guardPtrTy = guardTy->getPointerTo();
1996 
1997   // Create the guard variable if we don't already have it (as we
1998   // might if we're double-emitting this function body).
1999   llvm::GlobalVariable *guard = CGM.getStaticLocalDeclGuardAddress(&D);
2000   if (!guard) {
2001     // Mangle the name for the guard.
2002     SmallString<256> guardName;
2003     {
2004       llvm::raw_svector_ostream out(guardName);
2005       getMangleContext().mangleStaticGuardVariable(&D, out);
2006     }
2007 
2008     // Create the guard variable with a zero-initializer.
2009     // Just absorb linkage and visibility from the guarded variable.
2010     guard = new llvm::GlobalVariable(CGM.getModule(), guardTy,
2011                                      false, var->getLinkage(),
2012                                      llvm::ConstantInt::get(guardTy, 0),
2013                                      guardName.str());
2014     guard->setVisibility(var->getVisibility());
2015     // If the variable is thread-local, so is its guard variable.
2016     guard->setThreadLocalMode(var->getThreadLocalMode());
2017     guard->setAlignment(guardAlignment.getQuantity());
2018 
2019     // The ABI says: "It is suggested that it be emitted in the same COMDAT
2020     // group as the associated data object." In practice, this doesn't work for
2021     // non-ELF and non-Wasm object formats, so only do it for ELF and Wasm.
2022     llvm::Comdat *C = var->getComdat();
2023     if (!D.isLocalVarDecl() && C &&
2024         (CGM.getTarget().getTriple().isOSBinFormatELF() ||
2025          CGM.getTarget().getTriple().isOSBinFormatWasm())) {
2026       guard->setComdat(C);
2027       // An inline variable's guard function is run from the per-TU
2028       // initialization function, not via a dedicated global ctor function, so
2029       // we can't put it in a comdat.
2030       if (!NonTemplateInline)
2031         CGF.CurFn->setComdat(C);
2032     } else if (CGM.supportsCOMDAT() && guard->isWeakForLinker()) {
2033       guard->setComdat(CGM.getModule().getOrInsertComdat(guard->getName()));
2034     }
2035 
2036     CGM.setStaticLocalDeclGuardAddress(&D, guard);
2037   }
2038 
2039   Address guardAddr = Address(guard, guardAlignment);
2040 
2041   // Test whether the variable has completed initialization.
2042   //
2043   // Itanium C++ ABI 3.3.2:
2044   //   The following is pseudo-code showing how these functions can be used:
2045   //     if (obj_guard.first_byte == 0) {
2046   //       if ( __cxa_guard_acquire (&obj_guard) ) {
2047   //         try {
2048   //           ... initialize the object ...;
2049   //         } catch (...) {
2050   //            __cxa_guard_abort (&obj_guard);
2051   //            throw;
2052   //         }
2053   //         ... queue object destructor with __cxa_atexit() ...;
2054   //         __cxa_guard_release (&obj_guard);
2055   //       }
2056   //     }
2057 
2058   // Load the first byte of the guard variable.
2059   llvm::LoadInst *LI =
2060       Builder.CreateLoad(Builder.CreateElementBitCast(guardAddr, CGM.Int8Ty));
2061 
2062   // Itanium ABI:
2063   //   An implementation supporting thread-safety on multiprocessor
2064   //   systems must also guarantee that references to the initialized
2065   //   object do not occur before the load of the initialization flag.
2066   //
2067   // In LLVM, we do this by marking the load Acquire.
2068   if (threadsafe)
2069     LI->setAtomic(llvm::AtomicOrdering::Acquire);
2070 
2071   // For ARM, we should only check the first bit, rather than the entire byte:
2072   //
2073   // ARM C++ ABI 3.2.3.1:
2074   //   To support the potential use of initialization guard variables
2075   //   as semaphores that are the target of ARM SWP and LDREX/STREX
2076   //   synchronizing instructions we define a static initialization
2077   //   guard variable to be a 4-byte aligned, 4-byte word with the
2078   //   following inline access protocol.
2079   //     #define INITIALIZED 1
2080   //     if ((obj_guard & INITIALIZED) != INITIALIZED) {
2081   //       if (__cxa_guard_acquire(&obj_guard))
2082   //         ...
2083   //     }
2084   //
2085   // and similarly for ARM64:
2086   //
2087   // ARM64 C++ ABI 3.2.2:
2088   //   This ABI instead only specifies the value bit 0 of the static guard
2089   //   variable; all other bits are platform defined. Bit 0 shall be 0 when the
2090   //   variable is not initialized and 1 when it is.
2091   llvm::Value *V =
2092       (UseARMGuardVarABI && !useInt8GuardVariable)
2093           ? Builder.CreateAnd(LI, llvm::ConstantInt::get(CGM.Int8Ty, 1))
2094           : LI;
2095   llvm::Value *isInitialized = Builder.CreateIsNull(V, "guard.uninitialized");
2096 
2097   llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check");
2098   llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
2099 
2100   // Check if the first byte of the guard variable is zero.
2101   Builder.CreateCondBr(isInitialized, InitCheckBlock, EndBlock);
2102 
2103   CGF.EmitBlock(InitCheckBlock);
2104 
2105   // Variables used when coping with thread-safe statics and exceptions.
2106   if (threadsafe) {
2107     // Call __cxa_guard_acquire.
2108     llvm::Value *V
2109       = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard);
2110 
2111     llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
2112 
2113     Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
2114                          InitBlock, EndBlock);
2115 
2116     // Call __cxa_guard_abort along the exceptional edge.
2117     CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard);
2118 
2119     CGF.EmitBlock(InitBlock);
2120   }
2121 
2122   // Emit the initializer and add a global destructor if appropriate.
2123   CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit);
2124 
2125   if (threadsafe) {
2126     // Pop the guard-abort cleanup if we pushed one.
2127     CGF.PopCleanupBlock();
2128 
2129     // Call __cxa_guard_release.  This cannot throw.
2130     CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy),
2131                                 guardAddr.getPointer());
2132   } else {
2133     Builder.CreateStore(llvm::ConstantInt::get(guardTy, 1), guardAddr);
2134   }
2135 
2136   CGF.EmitBlock(EndBlock);
2137 }
2138 
2139 /// Register a global destructor using __cxa_atexit.
2140 static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
2141                                         llvm::Constant *dtor,
2142                                         llvm::Constant *addr,
2143                                         bool TLS) {
2144   const char *Name = "__cxa_atexit";
2145   if (TLS) {
2146     const llvm::Triple &T = CGF.getTarget().getTriple();
2147     Name = T.isOSDarwin() ?  "_tlv_atexit" : "__cxa_thread_atexit";
2148   }
2149 
2150   // We're assuming that the destructor function is something we can
2151   // reasonably call with the default CC.  Go ahead and cast it to the
2152   // right prototype.
2153   llvm::Type *dtorTy =
2154     llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo();
2155 
2156   // extern "C" int __cxa_atexit(void (*f)(void *), void *p, void *d);
2157   llvm::Type *paramTys[] = { dtorTy, CGF.Int8PtrTy, CGF.Int8PtrTy };
2158   llvm::FunctionType *atexitTy =
2159     llvm::FunctionType::get(CGF.IntTy, paramTys, false);
2160 
2161   // Fetch the actual function.
2162   llvm::Constant *atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name);
2163   if (llvm::Function *fn = dyn_cast<llvm::Function>(atexit))
2164     fn->setDoesNotThrow();
2165 
2166   // Create a variable that binds the atexit to this shared object.
2167   llvm::Constant *handle =
2168       CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle");
2169   auto *GV = cast<llvm::GlobalValue>(handle->stripPointerCasts());
2170   GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
2171 
2172   llvm::Value *args[] = {
2173     llvm::ConstantExpr::getBitCast(dtor, dtorTy),
2174     llvm::ConstantExpr::getBitCast(addr, CGF.Int8PtrTy),
2175     handle
2176   };
2177   CGF.EmitNounwindRuntimeCall(atexit, args);
2178 }
2179 
2180 /// Register a global destructor as best as we know how.
2181 void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF,
2182                                        const VarDecl &D,
2183                                        llvm::Constant *dtor,
2184                                        llvm::Constant *addr) {
2185   // Use __cxa_atexit if available.
2186   if (CGM.getCodeGenOpts().CXAAtExit)
2187     return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind());
2188 
2189   if (D.getTLSKind())
2190     CGM.ErrorUnsupported(&D, "non-trivial TLS destruction");
2191 
2192   // In Apple kexts, we want to add a global destructor entry.
2193   // FIXME: shouldn't this be guarded by some variable?
2194   if (CGM.getLangOpts().AppleKext) {
2195     // Generate a global destructor entry.
2196     return CGM.AddCXXDtorEntry(dtor, addr);
2197   }
2198 
2199   CGF.registerGlobalDtorWithAtExit(D, dtor, addr);
2200 }
2201 
2202 static bool isThreadWrapperReplaceable(const VarDecl *VD,
2203                                        CodeGen::CodeGenModule &CGM) {
2204   assert(!VD->isStaticLocal() && "static local VarDecls don't need wrappers!");
2205   // Darwin prefers to have references to thread local variables to go through
2206   // the thread wrapper instead of directly referencing the backing variable.
2207   return VD->getTLSKind() == VarDecl::TLS_Dynamic &&
2208          CGM.getTarget().getTriple().isOSDarwin();
2209 }
2210 
2211 /// Get the appropriate linkage for the wrapper function. This is essentially
2212 /// the weak form of the variable's linkage; every translation unit which needs
2213 /// the wrapper emits a copy, and we want the linker to merge them.
2214 static llvm::GlobalValue::LinkageTypes
2215 getThreadLocalWrapperLinkage(const VarDecl *VD, CodeGen::CodeGenModule &CGM) {
2216   llvm::GlobalValue::LinkageTypes VarLinkage =
2217       CGM.getLLVMLinkageVarDefinition(VD, /*isConstant=*/false);
2218 
2219   // For internal linkage variables, we don't need an external or weak wrapper.
2220   if (llvm::GlobalValue::isLocalLinkage(VarLinkage))
2221     return VarLinkage;
2222 
2223   // If the thread wrapper is replaceable, give it appropriate linkage.
2224   if (isThreadWrapperReplaceable(VD, CGM))
2225     if (!llvm::GlobalVariable::isLinkOnceLinkage(VarLinkage) &&
2226         !llvm::GlobalVariable::isWeakODRLinkage(VarLinkage))
2227       return VarLinkage;
2228   return llvm::GlobalValue::WeakODRLinkage;
2229 }
2230 
2231 llvm::Function *
2232 ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD,
2233                                              llvm::Value *Val) {
2234   // Mangle the name for the thread_local wrapper function.
2235   SmallString<256> WrapperName;
2236   {
2237     llvm::raw_svector_ostream Out(WrapperName);
2238     getMangleContext().mangleItaniumThreadLocalWrapper(VD, Out);
2239   }
2240 
2241   // FIXME: If VD is a definition, we should regenerate the function attributes
2242   // before returning.
2243   if (llvm::Value *V = CGM.getModule().getNamedValue(WrapperName))
2244     return cast<llvm::Function>(V);
2245 
2246   QualType RetQT = VD->getType();
2247   if (RetQT->isReferenceType())
2248     RetQT = RetQT.getNonReferenceType();
2249 
2250   const CGFunctionInfo &FI = CGM.getTypes().arrangeBuiltinFunctionDeclaration(
2251       getContext().getPointerType(RetQT), FunctionArgList());
2252 
2253   llvm::FunctionType *FnTy = CGM.getTypes().GetFunctionType(FI);
2254   llvm::Function *Wrapper =
2255       llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM),
2256                              WrapperName.str(), &CGM.getModule());
2257 
2258   CGM.SetLLVMFunctionAttributes(nullptr, FI, Wrapper);
2259 
2260   if (VD->hasDefinition())
2261     CGM.SetLLVMFunctionAttributesForDefinition(nullptr, Wrapper);
2262 
2263   // Always resolve references to the wrapper at link time.
2264   if (!Wrapper->hasLocalLinkage() && !(isThreadWrapperReplaceable(VD, CGM) &&
2265       !llvm::GlobalVariable::isLinkOnceLinkage(Wrapper->getLinkage()) &&
2266       !llvm::GlobalVariable::isWeakODRLinkage(Wrapper->getLinkage())))
2267     Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility);
2268 
2269   if (isThreadWrapperReplaceable(VD, CGM)) {
2270     Wrapper->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2271     Wrapper->addFnAttr(llvm::Attribute::NoUnwind);
2272   }
2273   return Wrapper;
2274 }
2275 
2276 void ItaniumCXXABI::EmitThreadLocalInitFuncs(
2277     CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals,
2278     ArrayRef<llvm::Function *> CXXThreadLocalInits,
2279     ArrayRef<const VarDecl *> CXXThreadLocalInitVars) {
2280   llvm::Function *InitFunc = nullptr;
2281 
2282   // Separate initializers into those with ordered (or partially-ordered)
2283   // initialization and those with unordered initialization.
2284   llvm::SmallVector<llvm::Function *, 8> OrderedInits;
2285   llvm::SmallDenseMap<const VarDecl *, llvm::Function *> UnorderedInits;
2286   for (unsigned I = 0; I != CXXThreadLocalInits.size(); ++I) {
2287     if (isTemplateInstantiation(
2288             CXXThreadLocalInitVars[I]->getTemplateSpecializationKind()))
2289       UnorderedInits[CXXThreadLocalInitVars[I]->getCanonicalDecl()] =
2290           CXXThreadLocalInits[I];
2291     else
2292       OrderedInits.push_back(CXXThreadLocalInits[I]);
2293   }
2294 
2295   if (!OrderedInits.empty()) {
2296     // Generate a guarded initialization function.
2297     llvm::FunctionType *FTy =
2298         llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
2299     const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2300     InitFunc = CGM.CreateGlobalInitOrDestructFunction(FTy, "__tls_init", FI,
2301                                                       SourceLocation(),
2302                                                       /*TLS=*/true);
2303     llvm::GlobalVariable *Guard = new llvm::GlobalVariable(
2304         CGM.getModule(), CGM.Int8Ty, /*isConstant=*/false,
2305         llvm::GlobalVariable::InternalLinkage,
2306         llvm::ConstantInt::get(CGM.Int8Ty, 0), "__tls_guard");
2307     Guard->setThreadLocal(true);
2308 
2309     CharUnits GuardAlign = CharUnits::One();
2310     Guard->setAlignment(GuardAlign.getQuantity());
2311 
2312     CodeGenFunction(CGM).GenerateCXXGlobalInitFunc(InitFunc, OrderedInits,
2313                                                    Address(Guard, GuardAlign));
2314     // On Darwin platforms, use CXX_FAST_TLS calling convention.
2315     if (CGM.getTarget().getTriple().isOSDarwin()) {
2316       InitFunc->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2317       InitFunc->addFnAttr(llvm::Attribute::NoUnwind);
2318     }
2319   }
2320 
2321   // Emit thread wrappers.
2322   for (const VarDecl *VD : CXXThreadLocals) {
2323     llvm::GlobalVariable *Var =
2324         cast<llvm::GlobalVariable>(CGM.GetGlobalValue(CGM.getMangledName(VD)));
2325     llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Var);
2326 
2327     // Some targets require that all access to thread local variables go through
2328     // the thread wrapper.  This means that we cannot attempt to create a thread
2329     // wrapper or a thread helper.
2330     if (isThreadWrapperReplaceable(VD, CGM) && !VD->hasDefinition()) {
2331       Wrapper->setLinkage(llvm::Function::ExternalLinkage);
2332       continue;
2333     }
2334 
2335     // Mangle the name for the thread_local initialization function.
2336     SmallString<256> InitFnName;
2337     {
2338       llvm::raw_svector_ostream Out(InitFnName);
2339       getMangleContext().mangleItaniumThreadLocalInit(VD, Out);
2340     }
2341 
2342     // If we have a definition for the variable, emit the initialization
2343     // function as an alias to the global Init function (if any). Otherwise,
2344     // produce a declaration of the initialization function.
2345     llvm::GlobalValue *Init = nullptr;
2346     bool InitIsInitFunc = false;
2347     if (VD->hasDefinition()) {
2348       InitIsInitFunc = true;
2349       llvm::Function *InitFuncToUse = InitFunc;
2350       if (isTemplateInstantiation(VD->getTemplateSpecializationKind()))
2351         InitFuncToUse = UnorderedInits.lookup(VD->getCanonicalDecl());
2352       if (InitFuncToUse)
2353         Init = llvm::GlobalAlias::create(Var->getLinkage(), InitFnName.str(),
2354                                          InitFuncToUse);
2355     } else {
2356       // Emit a weak global function referring to the initialization function.
2357       // This function will not exist if the TU defining the thread_local
2358       // variable in question does not need any dynamic initialization for
2359       // its thread_local variables.
2360       llvm::FunctionType *FnTy = llvm::FunctionType::get(CGM.VoidTy, false);
2361       Init = llvm::Function::Create(FnTy,
2362                                     llvm::GlobalVariable::ExternalWeakLinkage,
2363                                     InitFnName.str(), &CGM.getModule());
2364       const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2365       CGM.SetLLVMFunctionAttributes(nullptr, FI, cast<llvm::Function>(Init));
2366     }
2367 
2368     if (Init)
2369       Init->setVisibility(Var->getVisibility());
2370 
2371     llvm::LLVMContext &Context = CGM.getModule().getContext();
2372     llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
2373     CGBuilderTy Builder(CGM, Entry);
2374     if (InitIsInitFunc) {
2375       if (Init) {
2376         llvm::CallInst *CallVal = Builder.CreateCall(Init);
2377         if (isThreadWrapperReplaceable(VD, CGM))
2378           CallVal->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2379       }
2380     } else {
2381       // Don't know whether we have an init function. Call it if it exists.
2382       llvm::Value *Have = Builder.CreateIsNotNull(Init);
2383       llvm::BasicBlock *InitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2384       llvm::BasicBlock *ExitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2385       Builder.CreateCondBr(Have, InitBB, ExitBB);
2386 
2387       Builder.SetInsertPoint(InitBB);
2388       Builder.CreateCall(Init);
2389       Builder.CreateBr(ExitBB);
2390 
2391       Builder.SetInsertPoint(ExitBB);
2392     }
2393 
2394     // For a reference, the result of the wrapper function is a pointer to
2395     // the referenced object.
2396     llvm::Value *Val = Var;
2397     if (VD->getType()->isReferenceType()) {
2398       CharUnits Align = CGM.getContext().getDeclAlign(VD);
2399       Val = Builder.CreateAlignedLoad(Val, Align);
2400     }
2401     if (Val->getType() != Wrapper->getReturnType())
2402       Val = Builder.CreatePointerBitCastOrAddrSpaceCast(
2403           Val, Wrapper->getReturnType(), "");
2404     Builder.CreateRet(Val);
2405   }
2406 }
2407 
2408 LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
2409                                                    const VarDecl *VD,
2410                                                    QualType LValType) {
2411   llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD);
2412   llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Val);
2413 
2414   llvm::CallInst *CallVal = CGF.Builder.CreateCall(Wrapper);
2415   CallVal->setCallingConv(Wrapper->getCallingConv());
2416 
2417   LValue LV;
2418   if (VD->getType()->isReferenceType())
2419     LV = CGF.MakeNaturalAlignAddrLValue(CallVal, LValType);
2420   else
2421     LV = CGF.MakeAddrLValue(CallVal, LValType,
2422                             CGF.getContext().getDeclAlign(VD));
2423   // FIXME: need setObjCGCLValueClass?
2424   return LV;
2425 }
2426 
2427 /// Return whether the given global decl needs a VTT parameter, which it does
2428 /// if it's a base constructor or destructor with virtual bases.
2429 bool ItaniumCXXABI::NeedsVTTParameter(GlobalDecl GD) {
2430   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
2431 
2432   // We don't have any virtual bases, just return early.
2433   if (!MD->getParent()->getNumVBases())
2434     return false;
2435 
2436   // Check if we have a base constructor.
2437   if (isa<CXXConstructorDecl>(MD) && GD.getCtorType() == Ctor_Base)
2438     return true;
2439 
2440   // Check if we have a base destructor.
2441   if (isa<CXXDestructorDecl>(MD) && GD.getDtorType() == Dtor_Base)
2442     return true;
2443 
2444   return false;
2445 }
2446 
2447 namespace {
2448 class ItaniumRTTIBuilder {
2449   CodeGenModule &CGM;  // Per-module state.
2450   llvm::LLVMContext &VMContext;
2451   const ItaniumCXXABI &CXXABI;  // Per-module state.
2452 
2453   /// Fields - The fields of the RTTI descriptor currently being built.
2454   SmallVector<llvm::Constant *, 16> Fields;
2455 
2456   /// GetAddrOfTypeName - Returns the mangled type name of the given type.
2457   llvm::GlobalVariable *
2458   GetAddrOfTypeName(QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage);
2459 
2460   /// GetAddrOfExternalRTTIDescriptor - Returns the constant for the RTTI
2461   /// descriptor of the given type.
2462   llvm::Constant *GetAddrOfExternalRTTIDescriptor(QualType Ty);
2463 
2464   /// BuildVTablePointer - Build the vtable pointer for the given type.
2465   void BuildVTablePointer(const Type *Ty);
2466 
2467   /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
2468   /// inheritance, according to the Itanium C++ ABI, 2.9.5p6b.
2469   void BuildSIClassTypeInfo(const CXXRecordDecl *RD);
2470 
2471   /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
2472   /// classes with bases that do not satisfy the abi::__si_class_type_info
2473   /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
2474   void BuildVMIClassTypeInfo(const CXXRecordDecl *RD);
2475 
2476   /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct, used
2477   /// for pointer types.
2478   void BuildPointerTypeInfo(QualType PointeeTy);
2479 
2480   /// BuildObjCObjectTypeInfo - Build the appropriate kind of
2481   /// type_info for an object type.
2482   void BuildObjCObjectTypeInfo(const ObjCObjectType *Ty);
2483 
2484   /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
2485   /// struct, used for member pointer types.
2486   void BuildPointerToMemberTypeInfo(const MemberPointerType *Ty);
2487 
2488 public:
2489   ItaniumRTTIBuilder(const ItaniumCXXABI &ABI)
2490       : CGM(ABI.CGM), VMContext(CGM.getModule().getContext()), CXXABI(ABI) {}
2491 
2492   // Pointer type info flags.
2493   enum {
2494     /// PTI_Const - Type has const qualifier.
2495     PTI_Const = 0x1,
2496 
2497     /// PTI_Volatile - Type has volatile qualifier.
2498     PTI_Volatile = 0x2,
2499 
2500     /// PTI_Restrict - Type has restrict qualifier.
2501     PTI_Restrict = 0x4,
2502 
2503     /// PTI_Incomplete - Type is incomplete.
2504     PTI_Incomplete = 0x8,
2505 
2506     /// PTI_ContainingClassIncomplete - Containing class is incomplete.
2507     /// (in pointer to member).
2508     PTI_ContainingClassIncomplete = 0x10,
2509 
2510     /// PTI_TransactionSafe - Pointee is transaction_safe function (C++ TM TS).
2511     //PTI_TransactionSafe = 0x20,
2512 
2513     /// PTI_Noexcept - Pointee is noexcept function (C++1z).
2514     PTI_Noexcept = 0x40,
2515   };
2516 
2517   // VMI type info flags.
2518   enum {
2519     /// VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
2520     VMI_NonDiamondRepeat = 0x1,
2521 
2522     /// VMI_DiamondShaped - Class is diamond shaped.
2523     VMI_DiamondShaped = 0x2
2524   };
2525 
2526   // Base class type info flags.
2527   enum {
2528     /// BCTI_Virtual - Base class is virtual.
2529     BCTI_Virtual = 0x1,
2530 
2531     /// BCTI_Public - Base class is public.
2532     BCTI_Public = 0x2
2533   };
2534 
2535   /// BuildTypeInfo - Build the RTTI type info struct for the given type.
2536   ///
2537   /// \param Force - true to force the creation of this RTTI value
2538   /// \param DLLExport - true to mark the RTTI value as DLLExport
2539   llvm::Constant *BuildTypeInfo(QualType Ty, bool Force = false,
2540                                 bool DLLExport = false);
2541 };
2542 }
2543 
2544 llvm::GlobalVariable *ItaniumRTTIBuilder::GetAddrOfTypeName(
2545     QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage) {
2546   SmallString<256> Name;
2547   llvm::raw_svector_ostream Out(Name);
2548   CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(Ty, Out);
2549 
2550   // We know that the mangled name of the type starts at index 4 of the
2551   // mangled name of the typename, so we can just index into it in order to
2552   // get the mangled name of the type.
2553   llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
2554                                                             Name.substr(4));
2555 
2556   llvm::GlobalVariable *GV =
2557     CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage);
2558 
2559   GV->setInitializer(Init);
2560 
2561   return GV;
2562 }
2563 
2564 llvm::Constant *
2565 ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
2566   // Mangle the RTTI name.
2567   SmallString<256> Name;
2568   llvm::raw_svector_ostream Out(Name);
2569   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2570 
2571   // Look for an existing global.
2572   llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name);
2573 
2574   if (!GV) {
2575     // Create a new global variable.
2576     GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
2577                                   /*Constant=*/true,
2578                                   llvm::GlobalValue::ExternalLinkage, nullptr,
2579                                   Name);
2580     if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2581       const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
2582       if (RD->hasAttr<DLLImportAttr>())
2583         GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
2584     }
2585   }
2586 
2587   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
2588 }
2589 
2590 /// TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type
2591 /// info for that type is defined in the standard library.
2592 static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
2593   // Itanium C++ ABI 2.9.2:
2594   //   Basic type information (e.g. for "int", "bool", etc.) will be kept in
2595   //   the run-time support library. Specifically, the run-time support
2596   //   library should contain type_info objects for the types X, X* and
2597   //   X const*, for every X in: void, std::nullptr_t, bool, wchar_t, char,
2598   //   unsigned char, signed char, short, unsigned short, int, unsigned int,
2599   //   long, unsigned long, long long, unsigned long long, float, double,
2600   //   long double, char16_t, char32_t, and the IEEE 754r decimal and
2601   //   half-precision floating point types.
2602   //
2603   // GCC also emits RTTI for __int128.
2604   // FIXME: We do not emit RTTI information for decimal types here.
2605 
2606   // Types added here must also be added to EmitFundamentalRTTIDescriptors.
2607   switch (Ty->getKind()) {
2608     case BuiltinType::Void:
2609     case BuiltinType::NullPtr:
2610     case BuiltinType::Bool:
2611     case BuiltinType::WChar_S:
2612     case BuiltinType::WChar_U:
2613     case BuiltinType::Char_U:
2614     case BuiltinType::Char_S:
2615     case BuiltinType::UChar:
2616     case BuiltinType::SChar:
2617     case BuiltinType::Short:
2618     case BuiltinType::UShort:
2619     case BuiltinType::Int:
2620     case BuiltinType::UInt:
2621     case BuiltinType::Long:
2622     case BuiltinType::ULong:
2623     case BuiltinType::LongLong:
2624     case BuiltinType::ULongLong:
2625     case BuiltinType::Half:
2626     case BuiltinType::Float:
2627     case BuiltinType::Double:
2628     case BuiltinType::LongDouble:
2629     case BuiltinType::Float128:
2630     case BuiltinType::Char16:
2631     case BuiltinType::Char32:
2632     case BuiltinType::Int128:
2633     case BuiltinType::UInt128:
2634       return true;
2635 
2636 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
2637     case BuiltinType::Id:
2638 #include "clang/Basic/OpenCLImageTypes.def"
2639     case BuiltinType::OCLSampler:
2640     case BuiltinType::OCLEvent:
2641     case BuiltinType::OCLClkEvent:
2642     case BuiltinType::OCLQueue:
2643     case BuiltinType::OCLReserveID:
2644       return false;
2645 
2646     case BuiltinType::Dependent:
2647 #define BUILTIN_TYPE(Id, SingletonId)
2648 #define PLACEHOLDER_TYPE(Id, SingletonId) \
2649     case BuiltinType::Id:
2650 #include "clang/AST/BuiltinTypes.def"
2651       llvm_unreachable("asking for RRTI for a placeholder type!");
2652 
2653     case BuiltinType::ObjCId:
2654     case BuiltinType::ObjCClass:
2655     case BuiltinType::ObjCSel:
2656       llvm_unreachable("FIXME: Objective-C types are unsupported!");
2657   }
2658 
2659   llvm_unreachable("Invalid BuiltinType Kind!");
2660 }
2661 
2662 static bool TypeInfoIsInStandardLibrary(const PointerType *PointerTy) {
2663   QualType PointeeTy = PointerTy->getPointeeType();
2664   const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(PointeeTy);
2665   if (!BuiltinTy)
2666     return false;
2667 
2668   // Check the qualifiers.
2669   Qualifiers Quals = PointeeTy.getQualifiers();
2670   Quals.removeConst();
2671 
2672   if (!Quals.empty())
2673     return false;
2674 
2675   return TypeInfoIsInStandardLibrary(BuiltinTy);
2676 }
2677 
2678 /// IsStandardLibraryRTTIDescriptor - Returns whether the type
2679 /// information for the given type exists in the standard library.
2680 static bool IsStandardLibraryRTTIDescriptor(QualType Ty) {
2681   // Type info for builtin types is defined in the standard library.
2682   if (const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(Ty))
2683     return TypeInfoIsInStandardLibrary(BuiltinTy);
2684 
2685   // Type info for some pointer types to builtin types is defined in the
2686   // standard library.
2687   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2688     return TypeInfoIsInStandardLibrary(PointerTy);
2689 
2690   return false;
2691 }
2692 
2693 /// ShouldUseExternalRTTIDescriptor - Returns whether the type information for
2694 /// the given type exists somewhere else, and that we should not emit the type
2695 /// information in this translation unit.  Assumes that it is not a
2696 /// standard-library type.
2697 static bool ShouldUseExternalRTTIDescriptor(CodeGenModule &CGM,
2698                                             QualType Ty) {
2699   ASTContext &Context = CGM.getContext();
2700 
2701   // If RTTI is disabled, assume it might be disabled in the
2702   // translation unit that defines any potential key function, too.
2703   if (!Context.getLangOpts().RTTI) return false;
2704 
2705   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2706     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
2707     if (!RD->hasDefinition())
2708       return false;
2709 
2710     if (!RD->isDynamicClass())
2711       return false;
2712 
2713     // FIXME: this may need to be reconsidered if the key function
2714     // changes.
2715     // N.B. We must always emit the RTTI data ourselves if there exists a key
2716     // function.
2717     bool IsDLLImport = RD->hasAttr<DLLImportAttr>();
2718     if (CGM.getVTables().isVTableExternal(RD))
2719       return IsDLLImport ? false : true;
2720 
2721     if (IsDLLImport)
2722       return true;
2723   }
2724 
2725   return false;
2726 }
2727 
2728 /// IsIncompleteClassType - Returns whether the given record type is incomplete.
2729 static bool IsIncompleteClassType(const RecordType *RecordTy) {
2730   return !RecordTy->getDecl()->isCompleteDefinition();
2731 }
2732 
2733 /// ContainsIncompleteClassType - Returns whether the given type contains an
2734 /// incomplete class type. This is true if
2735 ///
2736 ///   * The given type is an incomplete class type.
2737 ///   * The given type is a pointer type whose pointee type contains an
2738 ///     incomplete class type.
2739 ///   * The given type is a member pointer type whose class is an incomplete
2740 ///     class type.
2741 ///   * The given type is a member pointer type whoise pointee type contains an
2742 ///     incomplete class type.
2743 /// is an indirect or direct pointer to an incomplete class type.
2744 static bool ContainsIncompleteClassType(QualType Ty) {
2745   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2746     if (IsIncompleteClassType(RecordTy))
2747       return true;
2748   }
2749 
2750   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2751     return ContainsIncompleteClassType(PointerTy->getPointeeType());
2752 
2753   if (const MemberPointerType *MemberPointerTy =
2754       dyn_cast<MemberPointerType>(Ty)) {
2755     // Check if the class type is incomplete.
2756     const RecordType *ClassType = cast<RecordType>(MemberPointerTy->getClass());
2757     if (IsIncompleteClassType(ClassType))
2758       return true;
2759 
2760     return ContainsIncompleteClassType(MemberPointerTy->getPointeeType());
2761   }
2762 
2763   return false;
2764 }
2765 
2766 // CanUseSingleInheritance - Return whether the given record decl has a "single,
2767 // public, non-virtual base at offset zero (i.e. the derived class is dynamic
2768 // iff the base is)", according to Itanium C++ ABI, 2.95p6b.
2769 static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
2770   // Check the number of bases.
2771   if (RD->getNumBases() != 1)
2772     return false;
2773 
2774   // Get the base.
2775   CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin();
2776 
2777   // Check that the base is not virtual.
2778   if (Base->isVirtual())
2779     return false;
2780 
2781   // Check that the base is public.
2782   if (Base->getAccessSpecifier() != AS_public)
2783     return false;
2784 
2785   // Check that the class is dynamic iff the base is.
2786   const CXXRecordDecl *BaseDecl =
2787     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2788   if (!BaseDecl->isEmpty() &&
2789       BaseDecl->isDynamicClass() != RD->isDynamicClass())
2790     return false;
2791 
2792   return true;
2793 }
2794 
2795 void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
2796   // abi::__class_type_info.
2797   static const char * const ClassTypeInfo =
2798     "_ZTVN10__cxxabiv117__class_type_infoE";
2799   // abi::__si_class_type_info.
2800   static const char * const SIClassTypeInfo =
2801     "_ZTVN10__cxxabiv120__si_class_type_infoE";
2802   // abi::__vmi_class_type_info.
2803   static const char * const VMIClassTypeInfo =
2804     "_ZTVN10__cxxabiv121__vmi_class_type_infoE";
2805 
2806   const char *VTableName = nullptr;
2807 
2808   switch (Ty->getTypeClass()) {
2809 #define TYPE(Class, Base)
2810 #define ABSTRACT_TYPE(Class, Base)
2811 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
2812 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
2813 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
2814 #include "clang/AST/TypeNodes.def"
2815     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
2816 
2817   case Type::LValueReference:
2818   case Type::RValueReference:
2819     llvm_unreachable("References shouldn't get here");
2820 
2821   case Type::Auto:
2822   case Type::DeducedTemplateSpecialization:
2823     llvm_unreachable("Undeduced type shouldn't get here");
2824 
2825   case Type::Pipe:
2826     llvm_unreachable("Pipe types shouldn't get here");
2827 
2828   case Type::Builtin:
2829   // GCC treats vector and complex types as fundamental types.
2830   case Type::Vector:
2831   case Type::ExtVector:
2832   case Type::Complex:
2833   case Type::Atomic:
2834   // FIXME: GCC treats block pointers as fundamental types?!
2835   case Type::BlockPointer:
2836     // abi::__fundamental_type_info.
2837     VTableName = "_ZTVN10__cxxabiv123__fundamental_type_infoE";
2838     break;
2839 
2840   case Type::ConstantArray:
2841   case Type::IncompleteArray:
2842   case Type::VariableArray:
2843     // abi::__array_type_info.
2844     VTableName = "_ZTVN10__cxxabiv117__array_type_infoE";
2845     break;
2846 
2847   case Type::FunctionNoProto:
2848   case Type::FunctionProto:
2849     // abi::__function_type_info.
2850     VTableName = "_ZTVN10__cxxabiv120__function_type_infoE";
2851     break;
2852 
2853   case Type::Enum:
2854     // abi::__enum_type_info.
2855     VTableName = "_ZTVN10__cxxabiv116__enum_type_infoE";
2856     break;
2857 
2858   case Type::Record: {
2859     const CXXRecordDecl *RD =
2860       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
2861 
2862     if (!RD->hasDefinition() || !RD->getNumBases()) {
2863       VTableName = ClassTypeInfo;
2864     } else if (CanUseSingleInheritance(RD)) {
2865       VTableName = SIClassTypeInfo;
2866     } else {
2867       VTableName = VMIClassTypeInfo;
2868     }
2869 
2870     break;
2871   }
2872 
2873   case Type::ObjCObject:
2874     // Ignore protocol qualifiers.
2875     Ty = cast<ObjCObjectType>(Ty)->getBaseType().getTypePtr();
2876 
2877     // Handle id and Class.
2878     if (isa<BuiltinType>(Ty)) {
2879       VTableName = ClassTypeInfo;
2880       break;
2881     }
2882 
2883     assert(isa<ObjCInterfaceType>(Ty));
2884     // Fall through.
2885 
2886   case Type::ObjCInterface:
2887     if (cast<ObjCInterfaceType>(Ty)->getDecl()->getSuperClass()) {
2888       VTableName = SIClassTypeInfo;
2889     } else {
2890       VTableName = ClassTypeInfo;
2891     }
2892     break;
2893 
2894   case Type::ObjCObjectPointer:
2895   case Type::Pointer:
2896     // abi::__pointer_type_info.
2897     VTableName = "_ZTVN10__cxxabiv119__pointer_type_infoE";
2898     break;
2899 
2900   case Type::MemberPointer:
2901     // abi::__pointer_to_member_type_info.
2902     VTableName = "_ZTVN10__cxxabiv129__pointer_to_member_type_infoE";
2903     break;
2904   }
2905 
2906   llvm::Constant *VTable =
2907     CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
2908 
2909   llvm::Type *PtrDiffTy =
2910     CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
2911 
2912   // The vtable address point is 2.
2913   llvm::Constant *Two = llvm::ConstantInt::get(PtrDiffTy, 2);
2914   VTable =
2915       llvm::ConstantExpr::getInBoundsGetElementPtr(CGM.Int8PtrTy, VTable, Two);
2916   VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
2917 
2918   Fields.push_back(VTable);
2919 }
2920 
2921 /// \brief Return the linkage that the type info and type info name constants
2922 /// should have for the given type.
2923 static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
2924                                                              QualType Ty) {
2925   // Itanium C++ ABI 2.9.5p7:
2926   //   In addition, it and all of the intermediate abi::__pointer_type_info
2927   //   structs in the chain down to the abi::__class_type_info for the
2928   //   incomplete class type must be prevented from resolving to the
2929   //   corresponding type_info structs for the complete class type, possibly
2930   //   by making them local static objects. Finally, a dummy class RTTI is
2931   //   generated for the incomplete type that will not resolve to the final
2932   //   complete class RTTI (because the latter need not exist), possibly by
2933   //   making it a local static object.
2934   if (ContainsIncompleteClassType(Ty))
2935     return llvm::GlobalValue::InternalLinkage;
2936 
2937   switch (Ty->getLinkage()) {
2938   case NoLinkage:
2939   case InternalLinkage:
2940   case UniqueExternalLinkage:
2941     return llvm::GlobalValue::InternalLinkage;
2942 
2943   case VisibleNoLinkage:
2944   case ExternalLinkage:
2945     // RTTI is not enabled, which means that this type info struct is going
2946     // to be used for exception handling. Give it linkonce_odr linkage.
2947     if (!CGM.getLangOpts().RTTI)
2948       return llvm::GlobalValue::LinkOnceODRLinkage;
2949 
2950     if (const RecordType *Record = dyn_cast<RecordType>(Ty)) {
2951       const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
2952       if (RD->hasAttr<WeakAttr>())
2953         return llvm::GlobalValue::WeakODRLinkage;
2954       if (CGM.getTriple().isWindowsItaniumEnvironment())
2955         if (RD->hasAttr<DLLImportAttr>())
2956           return llvm::GlobalValue::ExternalLinkage;
2957       if (RD->isDynamicClass()) {
2958         llvm::GlobalValue::LinkageTypes LT = CGM.getVTableLinkage(RD);
2959         // MinGW won't export the RTTI information when there is a key function.
2960         // Make sure we emit our own copy instead of attempting to dllimport it.
2961         if (RD->hasAttr<DLLImportAttr>() &&
2962             llvm::GlobalValue::isAvailableExternallyLinkage(LT))
2963           LT = llvm::GlobalValue::LinkOnceODRLinkage;
2964         return LT;
2965       }
2966     }
2967 
2968     return llvm::GlobalValue::LinkOnceODRLinkage;
2969   }
2970 
2971   llvm_unreachable("Invalid linkage!");
2972 }
2973 
2974 llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty, bool Force,
2975                                                   bool DLLExport) {
2976   // We want to operate on the canonical type.
2977   Ty = Ty.getCanonicalType();
2978 
2979   // Check if we've already emitted an RTTI descriptor for this type.
2980   SmallString<256> Name;
2981   llvm::raw_svector_ostream Out(Name);
2982   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2983 
2984   llvm::GlobalVariable *OldGV = CGM.getModule().getNamedGlobal(Name);
2985   if (OldGV && !OldGV->isDeclaration()) {
2986     assert(!OldGV->hasAvailableExternallyLinkage() &&
2987            "available_externally typeinfos not yet implemented");
2988 
2989     return llvm::ConstantExpr::getBitCast(OldGV, CGM.Int8PtrTy);
2990   }
2991 
2992   // Check if there is already an external RTTI descriptor for this type.
2993   bool IsStdLib = IsStandardLibraryRTTIDescriptor(Ty);
2994   if (!Force && (IsStdLib || ShouldUseExternalRTTIDescriptor(CGM, Ty)))
2995     return GetAddrOfExternalRTTIDescriptor(Ty);
2996 
2997   // Emit the standard library with external linkage.
2998   llvm::GlobalVariable::LinkageTypes Linkage;
2999   if (IsStdLib)
3000     Linkage = llvm::GlobalValue::ExternalLinkage;
3001   else
3002     Linkage = getTypeInfoLinkage(CGM, Ty);
3003 
3004   // Add the vtable pointer.
3005   BuildVTablePointer(cast<Type>(Ty));
3006 
3007   // And the name.
3008   llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
3009   llvm::Constant *TypeNameField;
3010 
3011   // If we're supposed to demote the visibility, be sure to set a flag
3012   // to use a string comparison for type_info comparisons.
3013   ItaniumCXXABI::RTTIUniquenessKind RTTIUniqueness =
3014       CXXABI.classifyRTTIUniqueness(Ty, Linkage);
3015   if (RTTIUniqueness != ItaniumCXXABI::RUK_Unique) {
3016     // The flag is the sign bit, which on ARM64 is defined to be clear
3017     // for global pointers.  This is very ARM64-specific.
3018     TypeNameField = llvm::ConstantExpr::getPtrToInt(TypeName, CGM.Int64Ty);
3019     llvm::Constant *flag =
3020         llvm::ConstantInt::get(CGM.Int64Ty, ((uint64_t)1) << 63);
3021     TypeNameField = llvm::ConstantExpr::getAdd(TypeNameField, flag);
3022     TypeNameField =
3023         llvm::ConstantExpr::getIntToPtr(TypeNameField, CGM.Int8PtrTy);
3024   } else {
3025     TypeNameField = llvm::ConstantExpr::getBitCast(TypeName, CGM.Int8PtrTy);
3026   }
3027   Fields.push_back(TypeNameField);
3028 
3029   switch (Ty->getTypeClass()) {
3030 #define TYPE(Class, Base)
3031 #define ABSTRACT_TYPE(Class, Base)
3032 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
3033 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
3034 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
3035 #include "clang/AST/TypeNodes.def"
3036     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
3037 
3038   // GCC treats vector types as fundamental types.
3039   case Type::Builtin:
3040   case Type::Vector:
3041   case Type::ExtVector:
3042   case Type::Complex:
3043   case Type::BlockPointer:
3044     // Itanium C++ ABI 2.9.5p4:
3045     // abi::__fundamental_type_info adds no data members to std::type_info.
3046     break;
3047 
3048   case Type::LValueReference:
3049   case Type::RValueReference:
3050     llvm_unreachable("References shouldn't get here");
3051 
3052   case Type::Auto:
3053   case Type::DeducedTemplateSpecialization:
3054     llvm_unreachable("Undeduced type shouldn't get here");
3055 
3056   case Type::Pipe:
3057     llvm_unreachable("Pipe type shouldn't get here");
3058 
3059   case Type::ConstantArray:
3060   case Type::IncompleteArray:
3061   case Type::VariableArray:
3062     // Itanium C++ ABI 2.9.5p5:
3063     // abi::__array_type_info adds no data members to std::type_info.
3064     break;
3065 
3066   case Type::FunctionNoProto:
3067   case Type::FunctionProto:
3068     // Itanium C++ ABI 2.9.5p5:
3069     // abi::__function_type_info adds no data members to std::type_info.
3070     break;
3071 
3072   case Type::Enum:
3073     // Itanium C++ ABI 2.9.5p5:
3074     // abi::__enum_type_info adds no data members to std::type_info.
3075     break;
3076 
3077   case Type::Record: {
3078     const CXXRecordDecl *RD =
3079       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
3080     if (!RD->hasDefinition() || !RD->getNumBases()) {
3081       // We don't need to emit any fields.
3082       break;
3083     }
3084 
3085     if (CanUseSingleInheritance(RD))
3086       BuildSIClassTypeInfo(RD);
3087     else
3088       BuildVMIClassTypeInfo(RD);
3089 
3090     break;
3091   }
3092 
3093   case Type::ObjCObject:
3094   case Type::ObjCInterface:
3095     BuildObjCObjectTypeInfo(cast<ObjCObjectType>(Ty));
3096     break;
3097 
3098   case Type::ObjCObjectPointer:
3099     BuildPointerTypeInfo(cast<ObjCObjectPointerType>(Ty)->getPointeeType());
3100     break;
3101 
3102   case Type::Pointer:
3103     BuildPointerTypeInfo(cast<PointerType>(Ty)->getPointeeType());
3104     break;
3105 
3106   case Type::MemberPointer:
3107     BuildPointerToMemberTypeInfo(cast<MemberPointerType>(Ty));
3108     break;
3109 
3110   case Type::Atomic:
3111     // No fields, at least for the moment.
3112     break;
3113   }
3114 
3115   llvm::Constant *Init = llvm::ConstantStruct::getAnon(Fields);
3116 
3117   llvm::Module &M = CGM.getModule();
3118   llvm::GlobalVariable *GV =
3119       new llvm::GlobalVariable(M, Init->getType(),
3120                                /*Constant=*/true, Linkage, Init, Name);
3121 
3122   // If there's already an old global variable, replace it with the new one.
3123   if (OldGV) {
3124     GV->takeName(OldGV);
3125     llvm::Constant *NewPtr =
3126       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
3127     OldGV->replaceAllUsesWith(NewPtr);
3128     OldGV->eraseFromParent();
3129   }
3130 
3131   if (CGM.supportsCOMDAT() && GV->isWeakForLinker())
3132     GV->setComdat(M.getOrInsertComdat(GV->getName()));
3133 
3134   // The Itanium ABI specifies that type_info objects must be globally
3135   // unique, with one exception: if the type is an incomplete class
3136   // type or a (possibly indirect) pointer to one.  That exception
3137   // affects the general case of comparing type_info objects produced
3138   // by the typeid operator, which is why the comparison operators on
3139   // std::type_info generally use the type_info name pointers instead
3140   // of the object addresses.  However, the language's built-in uses
3141   // of RTTI generally require class types to be complete, even when
3142   // manipulating pointers to those class types.  This allows the
3143   // implementation of dynamic_cast to rely on address equality tests,
3144   // which is much faster.
3145 
3146   // All of this is to say that it's important that both the type_info
3147   // object and the type_info name be uniqued when weakly emitted.
3148 
3149   // Give the type_info object and name the formal visibility of the
3150   // type itself.
3151   llvm::GlobalValue::VisibilityTypes llvmVisibility;
3152   if (llvm::GlobalValue::isLocalLinkage(Linkage))
3153     // If the linkage is local, only default visibility makes sense.
3154     llvmVisibility = llvm::GlobalValue::DefaultVisibility;
3155   else if (RTTIUniqueness == ItaniumCXXABI::RUK_NonUniqueHidden)
3156     llvmVisibility = llvm::GlobalValue::HiddenVisibility;
3157   else
3158     llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
3159 
3160   TypeName->setVisibility(llvmVisibility);
3161   GV->setVisibility(llvmVisibility);
3162 
3163   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
3164     auto RD = Ty->getAsCXXRecordDecl();
3165     if (DLLExport || (RD && RD->hasAttr<DLLExportAttr>())) {
3166       TypeName->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
3167       GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
3168     } else if (CGM.getLangOpts().RTTI && RD && RD->hasAttr<DLLImportAttr>()) {
3169       TypeName->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
3170       GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
3171 
3172       // Because the typename and the typeinfo are DLL import, convert them to
3173       // declarations rather than definitions.  The initializers still need to
3174       // be constructed to calculate the type for the declarations.
3175       TypeName->setInitializer(nullptr);
3176       GV->setInitializer(nullptr);
3177     }
3178   }
3179 
3180   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3181 }
3182 
3183 /// BuildObjCObjectTypeInfo - Build the appropriate kind of type_info
3184 /// for the given Objective-C object type.
3185 void ItaniumRTTIBuilder::BuildObjCObjectTypeInfo(const ObjCObjectType *OT) {
3186   // Drop qualifiers.
3187   const Type *T = OT->getBaseType().getTypePtr();
3188   assert(isa<BuiltinType>(T) || isa<ObjCInterfaceType>(T));
3189 
3190   // The builtin types are abi::__class_type_infos and don't require
3191   // extra fields.
3192   if (isa<BuiltinType>(T)) return;
3193 
3194   ObjCInterfaceDecl *Class = cast<ObjCInterfaceType>(T)->getDecl();
3195   ObjCInterfaceDecl *Super = Class->getSuperClass();
3196 
3197   // Root classes are also __class_type_info.
3198   if (!Super) return;
3199 
3200   QualType SuperTy = CGM.getContext().getObjCInterfaceType(Super);
3201 
3202   // Everything else is single inheritance.
3203   llvm::Constant *BaseTypeInfo =
3204       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(SuperTy);
3205   Fields.push_back(BaseTypeInfo);
3206 }
3207 
3208 /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
3209 /// inheritance, according to the Itanium C++ ABI, 2.95p6b.
3210 void ItaniumRTTIBuilder::BuildSIClassTypeInfo(const CXXRecordDecl *RD) {
3211   // Itanium C++ ABI 2.9.5p6b:
3212   // It adds to abi::__class_type_info a single member pointing to the
3213   // type_info structure for the base type,
3214   llvm::Constant *BaseTypeInfo =
3215     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(RD->bases_begin()->getType());
3216   Fields.push_back(BaseTypeInfo);
3217 }
3218 
3219 namespace {
3220   /// SeenBases - Contains virtual and non-virtual bases seen when traversing
3221   /// a class hierarchy.
3222   struct SeenBases {
3223     llvm::SmallPtrSet<const CXXRecordDecl *, 16> NonVirtualBases;
3224     llvm::SmallPtrSet<const CXXRecordDecl *, 16> VirtualBases;
3225   };
3226 }
3227 
3228 /// ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in
3229 /// abi::__vmi_class_type_info.
3230 ///
3231 static unsigned ComputeVMIClassTypeInfoFlags(const CXXBaseSpecifier *Base,
3232                                              SeenBases &Bases) {
3233 
3234   unsigned Flags = 0;
3235 
3236   const CXXRecordDecl *BaseDecl =
3237     cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
3238 
3239   if (Base->isVirtual()) {
3240     // Mark the virtual base as seen.
3241     if (!Bases.VirtualBases.insert(BaseDecl).second) {
3242       // If this virtual base has been seen before, then the class is diamond
3243       // shaped.
3244       Flags |= ItaniumRTTIBuilder::VMI_DiamondShaped;
3245     } else {
3246       if (Bases.NonVirtualBases.count(BaseDecl))
3247         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3248     }
3249   } else {
3250     // Mark the non-virtual base as seen.
3251     if (!Bases.NonVirtualBases.insert(BaseDecl).second) {
3252       // If this non-virtual base has been seen before, then the class has non-
3253       // diamond shaped repeated inheritance.
3254       Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3255     } else {
3256       if (Bases.VirtualBases.count(BaseDecl))
3257         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3258     }
3259   }
3260 
3261   // Walk all bases.
3262   for (const auto &I : BaseDecl->bases())
3263     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3264 
3265   return Flags;
3266 }
3267 
3268 static unsigned ComputeVMIClassTypeInfoFlags(const CXXRecordDecl *RD) {
3269   unsigned Flags = 0;
3270   SeenBases Bases;
3271 
3272   // Walk all bases.
3273   for (const auto &I : RD->bases())
3274     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3275 
3276   return Flags;
3277 }
3278 
3279 /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
3280 /// classes with bases that do not satisfy the abi::__si_class_type_info
3281 /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
3282 void ItaniumRTTIBuilder::BuildVMIClassTypeInfo(const CXXRecordDecl *RD) {
3283   llvm::Type *UnsignedIntLTy =
3284     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3285 
3286   // Itanium C++ ABI 2.9.5p6c:
3287   //   __flags is a word with flags describing details about the class
3288   //   structure, which may be referenced by using the __flags_masks
3289   //   enumeration. These flags refer to both direct and indirect bases.
3290   unsigned Flags = ComputeVMIClassTypeInfoFlags(RD);
3291   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3292 
3293   // Itanium C++ ABI 2.9.5p6c:
3294   //   __base_count is a word with the number of direct proper base class
3295   //   descriptions that follow.
3296   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, RD->getNumBases()));
3297 
3298   if (!RD->getNumBases())
3299     return;
3300 
3301   // Now add the base class descriptions.
3302 
3303   // Itanium C++ ABI 2.9.5p6c:
3304   //   __base_info[] is an array of base class descriptions -- one for every
3305   //   direct proper base. Each description is of the type:
3306   //
3307   //   struct abi::__base_class_type_info {
3308   //   public:
3309   //     const __class_type_info *__base_type;
3310   //     long __offset_flags;
3311   //
3312   //     enum __offset_flags_masks {
3313   //       __virtual_mask = 0x1,
3314   //       __public_mask = 0x2,
3315   //       __offset_shift = 8
3316   //     };
3317   //   };
3318 
3319   // If we're in mingw and 'long' isn't wide enough for a pointer, use 'long
3320   // long' instead of 'long' for __offset_flags. libstdc++abi uses long long on
3321   // LLP64 platforms.
3322   // FIXME: Consider updating libc++abi to match, and extend this logic to all
3323   // LLP64 platforms.
3324   QualType OffsetFlagsTy = CGM.getContext().LongTy;
3325   const TargetInfo &TI = CGM.getContext().getTargetInfo();
3326   if (TI.getTriple().isOSCygMing() && TI.getPointerWidth(0) > TI.getLongWidth())
3327     OffsetFlagsTy = CGM.getContext().LongLongTy;
3328   llvm::Type *OffsetFlagsLTy =
3329       CGM.getTypes().ConvertType(OffsetFlagsTy);
3330 
3331   for (const auto &Base : RD->bases()) {
3332     // The __base_type member points to the RTTI for the base type.
3333     Fields.push_back(ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(Base.getType()));
3334 
3335     const CXXRecordDecl *BaseDecl =
3336       cast<CXXRecordDecl>(Base.getType()->getAs<RecordType>()->getDecl());
3337 
3338     int64_t OffsetFlags = 0;
3339 
3340     // All but the lower 8 bits of __offset_flags are a signed offset.
3341     // For a non-virtual base, this is the offset in the object of the base
3342     // subobject. For a virtual base, this is the offset in the virtual table of
3343     // the virtual base offset for the virtual base referenced (negative).
3344     CharUnits Offset;
3345     if (Base.isVirtual())
3346       Offset =
3347         CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(RD, BaseDecl);
3348     else {
3349       const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
3350       Offset = Layout.getBaseClassOffset(BaseDecl);
3351     };
3352 
3353     OffsetFlags = uint64_t(Offset.getQuantity()) << 8;
3354 
3355     // The low-order byte of __offset_flags contains flags, as given by the
3356     // masks from the enumeration __offset_flags_masks.
3357     if (Base.isVirtual())
3358       OffsetFlags |= BCTI_Virtual;
3359     if (Base.getAccessSpecifier() == AS_public)
3360       OffsetFlags |= BCTI_Public;
3361 
3362     Fields.push_back(llvm::ConstantInt::get(OffsetFlagsLTy, OffsetFlags));
3363   }
3364 }
3365 
3366 /// Compute the flags for a __pbase_type_info, and remove the corresponding
3367 /// pieces from \p Type.
3368 static unsigned extractPBaseFlags(ASTContext &Ctx, QualType &Type) {
3369   unsigned Flags = 0;
3370 
3371   if (Type.isConstQualified())
3372     Flags |= ItaniumRTTIBuilder::PTI_Const;
3373   if (Type.isVolatileQualified())
3374     Flags |= ItaniumRTTIBuilder::PTI_Volatile;
3375   if (Type.isRestrictQualified())
3376     Flags |= ItaniumRTTIBuilder::PTI_Restrict;
3377   Type = Type.getUnqualifiedType();
3378 
3379   // Itanium C++ ABI 2.9.5p7:
3380   //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
3381   //   incomplete class type, the incomplete target type flag is set.
3382   if (ContainsIncompleteClassType(Type))
3383     Flags |= ItaniumRTTIBuilder::PTI_Incomplete;
3384 
3385   if (auto *Proto = Type->getAs<FunctionProtoType>()) {
3386     if (Proto->isNothrow(Ctx)) {
3387       Flags |= ItaniumRTTIBuilder::PTI_Noexcept;
3388       Type = Ctx.getFunctionType(
3389           Proto->getReturnType(), Proto->getParamTypes(),
3390           Proto->getExtProtoInfo().withExceptionSpec(EST_None));
3391     }
3392   }
3393 
3394   return Flags;
3395 }
3396 
3397 /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct,
3398 /// used for pointer types.
3399 void ItaniumRTTIBuilder::BuildPointerTypeInfo(QualType PointeeTy) {
3400   // Itanium C++ ABI 2.9.5p7:
3401   //   __flags is a flag word describing the cv-qualification and other
3402   //   attributes of the type pointed to
3403   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
3404 
3405   llvm::Type *UnsignedIntLTy =
3406     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3407   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3408 
3409   // Itanium C++ ABI 2.9.5p7:
3410   //  __pointee is a pointer to the std::type_info derivation for the
3411   //  unqualified type being pointed to.
3412   llvm::Constant *PointeeTypeInfo =
3413       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
3414   Fields.push_back(PointeeTypeInfo);
3415 }
3416 
3417 /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
3418 /// struct, used for member pointer types.
3419 void
3420 ItaniumRTTIBuilder::BuildPointerToMemberTypeInfo(const MemberPointerType *Ty) {
3421   QualType PointeeTy = Ty->getPointeeType();
3422 
3423   // Itanium C++ ABI 2.9.5p7:
3424   //   __flags is a flag word describing the cv-qualification and other
3425   //   attributes of the type pointed to.
3426   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
3427 
3428   const RecordType *ClassType = cast<RecordType>(Ty->getClass());
3429   if (IsIncompleteClassType(ClassType))
3430     Flags |= PTI_ContainingClassIncomplete;
3431 
3432   llvm::Type *UnsignedIntLTy =
3433     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3434   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3435 
3436   // Itanium C++ ABI 2.9.5p7:
3437   //   __pointee is a pointer to the std::type_info derivation for the
3438   //   unqualified type being pointed to.
3439   llvm::Constant *PointeeTypeInfo =
3440       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
3441   Fields.push_back(PointeeTypeInfo);
3442 
3443   // Itanium C++ ABI 2.9.5p9:
3444   //   __context is a pointer to an abi::__class_type_info corresponding to the
3445   //   class type containing the member pointed to
3446   //   (e.g., the "A" in "int A::*").
3447   Fields.push_back(
3448       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));
3449 }
3450 
3451 llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {
3452   return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);
3453 }
3454 
3455 void ItaniumCXXABI::EmitFundamentalRTTIDescriptor(QualType Type,
3456                                                   bool DLLExport) {
3457   QualType PointerType = getContext().getPointerType(Type);
3458   QualType PointerTypeConst = getContext().getPointerType(Type.withConst());
3459   ItaniumRTTIBuilder(*this).BuildTypeInfo(Type, /*Force=*/true, DLLExport);
3460   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerType, /*Force=*/true,
3461                                           DLLExport);
3462   ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerTypeConst, /*Force=*/true,
3463                                           DLLExport);
3464 }
3465 
3466 void ItaniumCXXABI::EmitFundamentalRTTIDescriptors(bool DLLExport) {
3467   // Types added here must also be added to TypeInfoIsInStandardLibrary.
3468   QualType FundamentalTypes[] = {
3469       getContext().VoidTy,             getContext().NullPtrTy,
3470       getContext().BoolTy,             getContext().WCharTy,
3471       getContext().CharTy,             getContext().UnsignedCharTy,
3472       getContext().SignedCharTy,       getContext().ShortTy,
3473       getContext().UnsignedShortTy,    getContext().IntTy,
3474       getContext().UnsignedIntTy,      getContext().LongTy,
3475       getContext().UnsignedLongTy,     getContext().LongLongTy,
3476       getContext().UnsignedLongLongTy, getContext().Int128Ty,
3477       getContext().UnsignedInt128Ty,   getContext().HalfTy,
3478       getContext().FloatTy,            getContext().DoubleTy,
3479       getContext().LongDoubleTy,       getContext().Float128Ty,
3480       getContext().Char16Ty,           getContext().Char32Ty
3481   };
3482   for (const QualType &FundamentalType : FundamentalTypes)
3483     EmitFundamentalRTTIDescriptor(FundamentalType, DLLExport);
3484 }
3485 
3486 /// What sort of uniqueness rules should we use for the RTTI for the
3487 /// given type?
3488 ItaniumCXXABI::RTTIUniquenessKind ItaniumCXXABI::classifyRTTIUniqueness(
3489     QualType CanTy, llvm::GlobalValue::LinkageTypes Linkage) const {
3490   if (shouldRTTIBeUnique())
3491     return RUK_Unique;
3492 
3493   // It's only necessary for linkonce_odr or weak_odr linkage.
3494   if (Linkage != llvm::GlobalValue::LinkOnceODRLinkage &&
3495       Linkage != llvm::GlobalValue::WeakODRLinkage)
3496     return RUK_Unique;
3497 
3498   // It's only necessary with default visibility.
3499   if (CanTy->getVisibility() != DefaultVisibility)
3500     return RUK_Unique;
3501 
3502   // If we're not required to publish this symbol, hide it.
3503   if (Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
3504     return RUK_NonUniqueHidden;
3505 
3506   // If we're required to publish this symbol, as we might be under an
3507   // explicit instantiation, leave it with default visibility but
3508   // enable string-comparisons.
3509   assert(Linkage == llvm::GlobalValue::WeakODRLinkage);
3510   return RUK_NonUniqueVisible;
3511 }
3512 
3513 // Find out how to codegen the complete destructor and constructor
3514 namespace {
3515 enum class StructorCodegen { Emit, RAUW, Alias, COMDAT };
3516 }
3517 static StructorCodegen getCodegenToUse(CodeGenModule &CGM,
3518                                        const CXXMethodDecl *MD) {
3519   if (!CGM.getCodeGenOpts().CXXCtorDtorAliases)
3520     return StructorCodegen::Emit;
3521 
3522   // The complete and base structors are not equivalent if there are any virtual
3523   // bases, so emit separate functions.
3524   if (MD->getParent()->getNumVBases())
3525     return StructorCodegen::Emit;
3526 
3527   GlobalDecl AliasDecl;
3528   if (const auto *DD = dyn_cast<CXXDestructorDecl>(MD)) {
3529     AliasDecl = GlobalDecl(DD, Dtor_Complete);
3530   } else {
3531     const auto *CD = cast<CXXConstructorDecl>(MD);
3532     AliasDecl = GlobalDecl(CD, Ctor_Complete);
3533   }
3534   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
3535 
3536   if (llvm::GlobalValue::isDiscardableIfUnused(Linkage))
3537     return StructorCodegen::RAUW;
3538 
3539   // FIXME: Should we allow available_externally aliases?
3540   if (!llvm::GlobalAlias::isValidLinkage(Linkage))
3541     return StructorCodegen::RAUW;
3542 
3543   if (llvm::GlobalValue::isWeakForLinker(Linkage)) {
3544     // Only ELF and wasm support COMDATs with arbitrary names (C5/D5).
3545     if (CGM.getTarget().getTriple().isOSBinFormatELF() ||
3546         CGM.getTarget().getTriple().isOSBinFormatWasm())
3547       return StructorCodegen::COMDAT;
3548     return StructorCodegen::Emit;
3549   }
3550 
3551   return StructorCodegen::Alias;
3552 }
3553 
3554 static void emitConstructorDestructorAlias(CodeGenModule &CGM,
3555                                            GlobalDecl AliasDecl,
3556                                            GlobalDecl TargetDecl) {
3557   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
3558 
3559   StringRef MangledName = CGM.getMangledName(AliasDecl);
3560   llvm::GlobalValue *Entry = CGM.GetGlobalValue(MangledName);
3561   if (Entry && !Entry->isDeclaration())
3562     return;
3563 
3564   auto *Aliasee = cast<llvm::GlobalValue>(CGM.GetAddrOfGlobal(TargetDecl));
3565 
3566   // Create the alias with no name.
3567   auto *Alias = llvm::GlobalAlias::create(Linkage, "", Aliasee);
3568 
3569   // Switch any previous uses to the alias.
3570   if (Entry) {
3571     assert(Entry->getType() == Aliasee->getType() &&
3572            "declaration exists with different type");
3573     Alias->takeName(Entry);
3574     Entry->replaceAllUsesWith(Alias);
3575     Entry->eraseFromParent();
3576   } else {
3577     Alias->setName(MangledName);
3578   }
3579 
3580   // Finally, set up the alias with its proper name and attributes.
3581   CGM.setAliasAttributes(cast<NamedDecl>(AliasDecl.getDecl()), Alias);
3582 }
3583 
3584 void ItaniumCXXABI::emitCXXStructor(const CXXMethodDecl *MD,
3585                                     StructorType Type) {
3586   auto *CD = dyn_cast<CXXConstructorDecl>(MD);
3587   const CXXDestructorDecl *DD = CD ? nullptr : cast<CXXDestructorDecl>(MD);
3588 
3589   StructorCodegen CGType = getCodegenToUse(CGM, MD);
3590 
3591   if (Type == StructorType::Complete) {
3592     GlobalDecl CompleteDecl;
3593     GlobalDecl BaseDecl;
3594     if (CD) {
3595       CompleteDecl = GlobalDecl(CD, Ctor_Complete);
3596       BaseDecl = GlobalDecl(CD, Ctor_Base);
3597     } else {
3598       CompleteDecl = GlobalDecl(DD, Dtor_Complete);
3599       BaseDecl = GlobalDecl(DD, Dtor_Base);
3600     }
3601 
3602     if (CGType == StructorCodegen::Alias || CGType == StructorCodegen::COMDAT) {
3603       emitConstructorDestructorAlias(CGM, CompleteDecl, BaseDecl);
3604       return;
3605     }
3606 
3607     if (CGType == StructorCodegen::RAUW) {
3608       StringRef MangledName = CGM.getMangledName(CompleteDecl);
3609       auto *Aliasee = CGM.GetAddrOfGlobal(BaseDecl);
3610       CGM.addReplacement(MangledName, Aliasee);
3611       return;
3612     }
3613   }
3614 
3615   // The base destructor is equivalent to the base destructor of its
3616   // base class if there is exactly one non-virtual base class with a
3617   // non-trivial destructor, there are no fields with a non-trivial
3618   // destructor, and the body of the destructor is trivial.
3619   if (DD && Type == StructorType::Base && CGType != StructorCodegen::COMDAT &&
3620       !CGM.TryEmitBaseDestructorAsAlias(DD))
3621     return;
3622 
3623   llvm::Function *Fn = CGM.codegenCXXStructor(MD, Type);
3624 
3625   if (CGType == StructorCodegen::COMDAT) {
3626     SmallString<256> Buffer;
3627     llvm::raw_svector_ostream Out(Buffer);
3628     if (DD)
3629       getMangleContext().mangleCXXDtorComdat(DD, Out);
3630     else
3631       getMangleContext().mangleCXXCtorComdat(CD, Out);
3632     llvm::Comdat *C = CGM.getModule().getOrInsertComdat(Out.str());
3633     Fn->setComdat(C);
3634   } else {
3635     CGM.maybeSetTrivialComdat(*MD, *Fn);
3636   }
3637 }
3638 
3639 static llvm::Constant *getBeginCatchFn(CodeGenModule &CGM) {
3640   // void *__cxa_begin_catch(void*);
3641   llvm::FunctionType *FTy = llvm::FunctionType::get(
3642       CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3643 
3644   return CGM.CreateRuntimeFunction(FTy, "__cxa_begin_catch");
3645 }
3646 
3647 static llvm::Constant *getEndCatchFn(CodeGenModule &CGM) {
3648   // void __cxa_end_catch();
3649   llvm::FunctionType *FTy =
3650       llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
3651 
3652   return CGM.CreateRuntimeFunction(FTy, "__cxa_end_catch");
3653 }
3654 
3655 static llvm::Constant *getGetExceptionPtrFn(CodeGenModule &CGM) {
3656   // void *__cxa_get_exception_ptr(void*);
3657   llvm::FunctionType *FTy = llvm::FunctionType::get(
3658       CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3659 
3660   return CGM.CreateRuntimeFunction(FTy, "__cxa_get_exception_ptr");
3661 }
3662 
3663 namespace {
3664   /// A cleanup to call __cxa_end_catch.  In many cases, the caught
3665   /// exception type lets us state definitively that the thrown exception
3666   /// type does not have a destructor.  In particular:
3667   ///   - Catch-alls tell us nothing, so we have to conservatively
3668   ///     assume that the thrown exception might have a destructor.
3669   ///   - Catches by reference behave according to their base types.
3670   ///   - Catches of non-record types will only trigger for exceptions
3671   ///     of non-record types, which never have destructors.
3672   ///   - Catches of record types can trigger for arbitrary subclasses
3673   ///     of the caught type, so we have to assume the actual thrown
3674   ///     exception type might have a throwing destructor, even if the
3675   ///     caught type's destructor is trivial or nothrow.
3676   struct CallEndCatch final : EHScopeStack::Cleanup {
3677     CallEndCatch(bool MightThrow) : MightThrow(MightThrow) {}
3678     bool MightThrow;
3679 
3680     void Emit(CodeGenFunction &CGF, Flags flags) override {
3681       if (!MightThrow) {
3682         CGF.EmitNounwindRuntimeCall(getEndCatchFn(CGF.CGM));
3683         return;
3684       }
3685 
3686       CGF.EmitRuntimeCallOrInvoke(getEndCatchFn(CGF.CGM));
3687     }
3688   };
3689 }
3690 
3691 /// Emits a call to __cxa_begin_catch and enters a cleanup to call
3692 /// __cxa_end_catch.
3693 ///
3694 /// \param EndMightThrow - true if __cxa_end_catch might throw
3695 static llvm::Value *CallBeginCatch(CodeGenFunction &CGF,
3696                                    llvm::Value *Exn,
3697                                    bool EndMightThrow) {
3698   llvm::CallInst *call =
3699     CGF.EmitNounwindRuntimeCall(getBeginCatchFn(CGF.CGM), Exn);
3700 
3701   CGF.EHStack.pushCleanup<CallEndCatch>(NormalAndEHCleanup, EndMightThrow);
3702 
3703   return call;
3704 }
3705 
3706 /// A "special initializer" callback for initializing a catch
3707 /// parameter during catch initialization.
3708 static void InitCatchParam(CodeGenFunction &CGF,
3709                            const VarDecl &CatchParam,
3710                            Address ParamAddr,
3711                            SourceLocation Loc) {
3712   // Load the exception from where the landing pad saved it.
3713   llvm::Value *Exn = CGF.getExceptionFromSlot();
3714 
3715   CanQualType CatchType =
3716     CGF.CGM.getContext().getCanonicalType(CatchParam.getType());
3717   llvm::Type *LLVMCatchTy = CGF.ConvertTypeForMem(CatchType);
3718 
3719   // If we're catching by reference, we can just cast the object
3720   // pointer to the appropriate pointer.
3721   if (isa<ReferenceType>(CatchType)) {
3722     QualType CaughtType = cast<ReferenceType>(CatchType)->getPointeeType();
3723     bool EndCatchMightThrow = CaughtType->isRecordType();
3724 
3725     // __cxa_begin_catch returns the adjusted object pointer.
3726     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, EndCatchMightThrow);
3727 
3728     // We have no way to tell the personality function that we're
3729     // catching by reference, so if we're catching a pointer,
3730     // __cxa_begin_catch will actually return that pointer by value.
3731     if (const PointerType *PT = dyn_cast<PointerType>(CaughtType)) {
3732       QualType PointeeType = PT->getPointeeType();
3733 
3734       // When catching by reference, generally we should just ignore
3735       // this by-value pointer and use the exception object instead.
3736       if (!PointeeType->isRecordType()) {
3737 
3738         // Exn points to the struct _Unwind_Exception header, which
3739         // we have to skip past in order to reach the exception data.
3740         unsigned HeaderSize =
3741           CGF.CGM.getTargetCodeGenInfo().getSizeOfUnwindException();
3742         AdjustedExn = CGF.Builder.CreateConstGEP1_32(Exn, HeaderSize);
3743 
3744       // However, if we're catching a pointer-to-record type that won't
3745       // work, because the personality function might have adjusted
3746       // the pointer.  There's actually no way for us to fully satisfy
3747       // the language/ABI contract here:  we can't use Exn because it
3748       // might have the wrong adjustment, but we can't use the by-value
3749       // pointer because it's off by a level of abstraction.
3750       //
3751       // The current solution is to dump the adjusted pointer into an
3752       // alloca, which breaks language semantics (because changing the
3753       // pointer doesn't change the exception) but at least works.
3754       // The better solution would be to filter out non-exact matches
3755       // and rethrow them, but this is tricky because the rethrow
3756       // really needs to be catchable by other sites at this landing
3757       // pad.  The best solution is to fix the personality function.
3758       } else {
3759         // Pull the pointer for the reference type off.
3760         llvm::Type *PtrTy =
3761           cast<llvm::PointerType>(LLVMCatchTy)->getElementType();
3762 
3763         // Create the temporary and write the adjusted pointer into it.
3764         Address ExnPtrTmp =
3765           CGF.CreateTempAlloca(PtrTy, CGF.getPointerAlign(), "exn.byref.tmp");
3766         llvm::Value *Casted = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
3767         CGF.Builder.CreateStore(Casted, ExnPtrTmp);
3768 
3769         // Bind the reference to the temporary.
3770         AdjustedExn = ExnPtrTmp.getPointer();
3771       }
3772     }
3773 
3774     llvm::Value *ExnCast =
3775       CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.byref");
3776     CGF.Builder.CreateStore(ExnCast, ParamAddr);
3777     return;
3778   }
3779 
3780   // Scalars and complexes.
3781   TypeEvaluationKind TEK = CGF.getEvaluationKind(CatchType);
3782   if (TEK != TEK_Aggregate) {
3783     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, false);
3784 
3785     // If the catch type is a pointer type, __cxa_begin_catch returns
3786     // the pointer by value.
3787     if (CatchType->hasPointerRepresentation()) {
3788       llvm::Value *CastExn =
3789         CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.casted");
3790 
3791       switch (CatchType.getQualifiers().getObjCLifetime()) {
3792       case Qualifiers::OCL_Strong:
3793         CastExn = CGF.EmitARCRetainNonBlock(CastExn);
3794         // fallthrough
3795 
3796       case Qualifiers::OCL_None:
3797       case Qualifiers::OCL_ExplicitNone:
3798       case Qualifiers::OCL_Autoreleasing:
3799         CGF.Builder.CreateStore(CastExn, ParamAddr);
3800         return;
3801 
3802       case Qualifiers::OCL_Weak:
3803         CGF.EmitARCInitWeak(ParamAddr, CastExn);
3804         return;
3805       }
3806       llvm_unreachable("bad ownership qualifier!");
3807     }
3808 
3809     // Otherwise, it returns a pointer into the exception object.
3810 
3811     llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
3812     llvm::Value *Cast = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
3813 
3814     LValue srcLV = CGF.MakeNaturalAlignAddrLValue(Cast, CatchType);
3815     LValue destLV = CGF.MakeAddrLValue(ParamAddr, CatchType);
3816     switch (TEK) {
3817     case TEK_Complex:
3818       CGF.EmitStoreOfComplex(CGF.EmitLoadOfComplex(srcLV, Loc), destLV,
3819                              /*init*/ true);
3820       return;
3821     case TEK_Scalar: {
3822       llvm::Value *ExnLoad = CGF.EmitLoadOfScalar(srcLV, Loc);
3823       CGF.EmitStoreOfScalar(ExnLoad, destLV, /*init*/ true);
3824       return;
3825     }
3826     case TEK_Aggregate:
3827       llvm_unreachable("evaluation kind filtered out!");
3828     }
3829     llvm_unreachable("bad evaluation kind");
3830   }
3831 
3832   assert(isa<RecordType>(CatchType) && "unexpected catch type!");
3833   auto catchRD = CatchType->getAsCXXRecordDecl();
3834   CharUnits caughtExnAlignment = CGF.CGM.getClassPointerAlignment(catchRD);
3835 
3836   llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
3837 
3838   // Check for a copy expression.  If we don't have a copy expression,
3839   // that means a trivial copy is okay.
3840   const Expr *copyExpr = CatchParam.getInit();
3841   if (!copyExpr) {
3842     llvm::Value *rawAdjustedExn = CallBeginCatch(CGF, Exn, true);
3843     Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
3844                         caughtExnAlignment);
3845     CGF.EmitAggregateCopy(ParamAddr, adjustedExn, CatchType);
3846     return;
3847   }
3848 
3849   // We have to call __cxa_get_exception_ptr to get the adjusted
3850   // pointer before copying.
3851   llvm::CallInst *rawAdjustedExn =
3852     CGF.EmitNounwindRuntimeCall(getGetExceptionPtrFn(CGF.CGM), Exn);
3853 
3854   // Cast that to the appropriate type.
3855   Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
3856                       caughtExnAlignment);
3857 
3858   // The copy expression is defined in terms of an OpaqueValueExpr.
3859   // Find it and map it to the adjusted expression.
3860   CodeGenFunction::OpaqueValueMapping
3861     opaque(CGF, OpaqueValueExpr::findInCopyConstruct(copyExpr),
3862            CGF.MakeAddrLValue(adjustedExn, CatchParam.getType()));
3863 
3864   // Call the copy ctor in a terminate scope.
3865   CGF.EHStack.pushTerminate();
3866 
3867   // Perform the copy construction.
3868   CGF.EmitAggExpr(copyExpr,
3869                   AggValueSlot::forAddr(ParamAddr, Qualifiers(),
3870                                         AggValueSlot::IsNotDestructed,
3871                                         AggValueSlot::DoesNotNeedGCBarriers,
3872                                         AggValueSlot::IsNotAliased));
3873 
3874   // Leave the terminate scope.
3875   CGF.EHStack.popTerminate();
3876 
3877   // Undo the opaque value mapping.
3878   opaque.pop();
3879 
3880   // Finally we can call __cxa_begin_catch.
3881   CallBeginCatch(CGF, Exn, true);
3882 }
3883 
3884 /// Begins a catch statement by initializing the catch variable and
3885 /// calling __cxa_begin_catch.
3886 void ItaniumCXXABI::emitBeginCatch(CodeGenFunction &CGF,
3887                                    const CXXCatchStmt *S) {
3888   // We have to be very careful with the ordering of cleanups here:
3889   //   C++ [except.throw]p4:
3890   //     The destruction [of the exception temporary] occurs
3891   //     immediately after the destruction of the object declared in
3892   //     the exception-declaration in the handler.
3893   //
3894   // So the precise ordering is:
3895   //   1.  Construct catch variable.
3896   //   2.  __cxa_begin_catch
3897   //   3.  Enter __cxa_end_catch cleanup
3898   //   4.  Enter dtor cleanup
3899   //
3900   // We do this by using a slightly abnormal initialization process.
3901   // Delegation sequence:
3902   //   - ExitCXXTryStmt opens a RunCleanupsScope
3903   //     - EmitAutoVarAlloca creates the variable and debug info
3904   //       - InitCatchParam initializes the variable from the exception
3905   //       - CallBeginCatch calls __cxa_begin_catch
3906   //       - CallBeginCatch enters the __cxa_end_catch cleanup
3907   //     - EmitAutoVarCleanups enters the variable destructor cleanup
3908   //   - EmitCXXTryStmt emits the code for the catch body
3909   //   - EmitCXXTryStmt close the RunCleanupsScope
3910 
3911   VarDecl *CatchParam = S->getExceptionDecl();
3912   if (!CatchParam) {
3913     llvm::Value *Exn = CGF.getExceptionFromSlot();
3914     CallBeginCatch(CGF, Exn, true);
3915     return;
3916   }
3917 
3918   // Emit the local.
3919   CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam);
3920   InitCatchParam(CGF, *CatchParam, var.getObjectAddress(CGF), S->getLocStart());
3921   CGF.EmitAutoVarCleanups(var);
3922 }
3923 
3924 /// Get or define the following function:
3925 ///   void @__clang_call_terminate(i8* %exn) nounwind noreturn
3926 /// This code is used only in C++.
3927 static llvm::Constant *getClangCallTerminateFn(CodeGenModule &CGM) {
3928   llvm::FunctionType *fnTy =
3929     llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
3930   llvm::Constant *fnRef =
3931       CGM.CreateRuntimeFunction(fnTy, "__clang_call_terminate",
3932                                 llvm::AttributeSet(), /*Local=*/true);
3933 
3934   llvm::Function *fn = dyn_cast<llvm::Function>(fnRef);
3935   if (fn && fn->empty()) {
3936     fn->setDoesNotThrow();
3937     fn->setDoesNotReturn();
3938 
3939     // What we really want is to massively penalize inlining without
3940     // forbidding it completely.  The difference between that and
3941     // 'noinline' is negligible.
3942     fn->addFnAttr(llvm::Attribute::NoInline);
3943 
3944     // Allow this function to be shared across translation units, but
3945     // we don't want it to turn into an exported symbol.
3946     fn->setLinkage(llvm::Function::LinkOnceODRLinkage);
3947     fn->setVisibility(llvm::Function::HiddenVisibility);
3948     if (CGM.supportsCOMDAT())
3949       fn->setComdat(CGM.getModule().getOrInsertComdat(fn->getName()));
3950 
3951     // Set up the function.
3952     llvm::BasicBlock *entry =
3953       llvm::BasicBlock::Create(CGM.getLLVMContext(), "", fn);
3954     CGBuilderTy builder(CGM, entry);
3955 
3956     // Pull the exception pointer out of the parameter list.
3957     llvm::Value *exn = &*fn->arg_begin();
3958 
3959     // Call __cxa_begin_catch(exn).
3960     llvm::CallInst *catchCall = builder.CreateCall(getBeginCatchFn(CGM), exn);
3961     catchCall->setDoesNotThrow();
3962     catchCall->setCallingConv(CGM.getRuntimeCC());
3963 
3964     // Call std::terminate().
3965     llvm::CallInst *termCall = builder.CreateCall(CGM.getTerminateFn());
3966     termCall->setDoesNotThrow();
3967     termCall->setDoesNotReturn();
3968     termCall->setCallingConv(CGM.getRuntimeCC());
3969 
3970     // std::terminate cannot return.
3971     builder.CreateUnreachable();
3972   }
3973 
3974   return fnRef;
3975 }
3976 
3977 llvm::CallInst *
3978 ItaniumCXXABI::emitTerminateForUnexpectedException(CodeGenFunction &CGF,
3979                                                    llvm::Value *Exn) {
3980   // In C++, we want to call __cxa_begin_catch() before terminating.
3981   if (Exn) {
3982     assert(CGF.CGM.getLangOpts().CPlusPlus);
3983     return CGF.EmitNounwindRuntimeCall(getClangCallTerminateFn(CGF.CGM), Exn);
3984   }
3985   return CGF.EmitNounwindRuntimeCall(CGF.CGM.getTerminateFn());
3986 }
3987