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