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