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   if (!VTable->isDeclarationForLinker())
1771     CGM.EmitVTableTypeMetadata(RD, VTable, VTLayout);
1772 
1773   if (VTContext.isRelativeLayout() && !VTable->isDSOLocal())
1774     CGVT.GenerateRelativeVTableAlias(VTable, VTable->getName());
1775 }
1776 
1777 bool ItaniumCXXABI::isVirtualOffsetNeededForVTableField(
1778     CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) {
1779   if (Vptr.NearestVBase == nullptr)
1780     return false;
1781   return NeedsVTTParameter(CGF.CurGD);
1782 }
1783 
1784 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructor(
1785     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1786     const CXXRecordDecl *NearestVBase) {
1787 
1788   if ((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1789       NeedsVTTParameter(CGF.CurGD)) {
1790     return getVTableAddressPointInStructorWithVTT(CGF, VTableClass, Base,
1791                                                   NearestVBase);
1792   }
1793   return getVTableAddressPoint(Base, VTableClass);
1794 }
1795 
1796 llvm::Constant *
1797 ItaniumCXXABI::getVTableAddressPoint(BaseSubobject Base,
1798                                      const CXXRecordDecl *VTableClass) {
1799   llvm::GlobalValue *VTable = getAddrOfVTable(VTableClass, CharUnits());
1800 
1801   // Find the appropriate vtable within the vtable group, and the address point
1802   // within that vtable.
1803   VTableLayout::AddressPointLocation AddressPoint =
1804       CGM.getItaniumVTableContext()
1805           .getVTableLayout(VTableClass)
1806           .getAddressPoint(Base);
1807   llvm::Value *Indices[] = {
1808     llvm::ConstantInt::get(CGM.Int32Ty, 0),
1809     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.VTableIndex),
1810     llvm::ConstantInt::get(CGM.Int32Ty, AddressPoint.AddressPointIndex),
1811   };
1812 
1813   return llvm::ConstantExpr::getGetElementPtr(VTable->getValueType(), VTable,
1814                                               Indices, /*InBounds=*/true,
1815                                               /*InRangeIndex=*/1);
1816 }
1817 
1818 llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructorWithVTT(
1819     CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1820     const CXXRecordDecl *NearestVBase) {
1821   assert((Base.getBase()->getNumVBases() || NearestVBase != nullptr) &&
1822          NeedsVTTParameter(CGF.CurGD) && "This class doesn't have VTT");
1823 
1824   // Get the secondary vpointer index.
1825   uint64_t VirtualPointerIndex =
1826       CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base);
1827 
1828   /// Load the VTT.
1829   llvm::Value *VTT = CGF.LoadCXXVTT();
1830   if (VirtualPointerIndex)
1831     VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex);
1832 
1833   // And load the address point from the VTT.
1834   return CGF.Builder.CreateAlignedLoad(VTT, CGF.getPointerAlign());
1835 }
1836 
1837 llvm::Constant *ItaniumCXXABI::getVTableAddressPointForConstExpr(
1838     BaseSubobject Base, const CXXRecordDecl *VTableClass) {
1839   return getVTableAddressPoint(Base, VTableClass);
1840 }
1841 
1842 llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1843                                                      CharUnits VPtrOffset) {
1844   assert(VPtrOffset.isZero() && "Itanium ABI only supports zero vptr offsets");
1845 
1846   llvm::GlobalVariable *&VTable = VTables[RD];
1847   if (VTable)
1848     return VTable;
1849 
1850   // Queue up this vtable for possible deferred emission.
1851   CGM.addDeferredVTable(RD);
1852 
1853   SmallString<256> Name;
1854   llvm::raw_svector_ostream Out(Name);
1855   getMangleContext().mangleCXXVTable(RD, Out);
1856 
1857   const VTableLayout &VTLayout =
1858       CGM.getItaniumVTableContext().getVTableLayout(RD);
1859   llvm::Type *VTableType = CGM.getVTables().getVTableType(VTLayout);
1860 
1861   // Use pointer alignment for the vtable. Otherwise we would align them based
1862   // on the size of the initializer which doesn't make sense as only single
1863   // values are read.
1864   unsigned PAlign = CGM.getItaniumVTableContext().isRelativeLayout()
1865                         ? 32
1866                         : CGM.getTarget().getPointerAlign(0);
1867 
1868   VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
1869       Name, VTableType, llvm::GlobalValue::ExternalLinkage,
1870       getContext().toCharUnitsFromBits(PAlign).getQuantity());
1871   VTable->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
1872 
1873   CGM.setGVProperties(VTable, RD);
1874 
1875   return VTable;
1876 }
1877 
1878 CGCallee ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
1879                                                   GlobalDecl GD,
1880                                                   Address This,
1881                                                   llvm::Type *Ty,
1882                                                   SourceLocation Loc) {
1883   auto *MethodDecl = cast<CXXMethodDecl>(GD.getDecl());
1884   llvm::Value *VTable = CGF.GetVTablePtr(
1885       This, Ty->getPointerTo()->getPointerTo(), MethodDecl->getParent());
1886 
1887   uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
1888   llvm::Value *VFunc;
1889   if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) {
1890     VFunc = CGF.EmitVTableTypeCheckedLoad(
1891         MethodDecl->getParent(), VTable,
1892         VTableIndex * CGM.getContext().getTargetInfo().getPointerWidth(0) / 8);
1893   } else {
1894     CGF.EmitTypeMetadataCodeForVCall(MethodDecl->getParent(), VTable, Loc);
1895 
1896     llvm::Value *VFuncLoad;
1897     if (CGM.getItaniumVTableContext().isRelativeLayout()) {
1898       VTable = CGF.Builder.CreateBitCast(VTable, CGM.Int8PtrTy);
1899       llvm::Value *Load = CGF.Builder.CreateCall(
1900           CGM.getIntrinsic(llvm::Intrinsic::load_relative, {CGM.Int32Ty}),
1901           {VTable, llvm::ConstantInt::get(CGM.Int32Ty, 4 * VTableIndex)});
1902       VFuncLoad = CGF.Builder.CreateBitCast(Load, Ty->getPointerTo());
1903     } else {
1904       VTable =
1905           CGF.Builder.CreateBitCast(VTable, Ty->getPointerTo()->getPointerTo());
1906       llvm::Value *VTableSlotPtr =
1907           CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
1908       VFuncLoad =
1909           CGF.Builder.CreateAlignedLoad(VTableSlotPtr, CGF.getPointerAlign());
1910     }
1911 
1912     // Add !invariant.load md to virtual function load to indicate that
1913     // function didn't change inside vtable.
1914     // It's safe to add it without -fstrict-vtable-pointers, but it would not
1915     // help in devirtualization because it will only matter if we will have 2
1916     // the same virtual function loads from the same vtable load, which won't
1917     // happen without enabled devirtualization with -fstrict-vtable-pointers.
1918     if (CGM.getCodeGenOpts().OptimizationLevel > 0 &&
1919         CGM.getCodeGenOpts().StrictVTablePointers) {
1920       if (auto *VFuncLoadInstr = dyn_cast<llvm::Instruction>(VFuncLoad)) {
1921         VFuncLoadInstr->setMetadata(
1922             llvm::LLVMContext::MD_invariant_load,
1923             llvm::MDNode::get(CGM.getLLVMContext(),
1924                               llvm::ArrayRef<llvm::Metadata *>()));
1925       }
1926     }
1927     VFunc = VFuncLoad;
1928   }
1929 
1930   CGCallee Callee(GD, VFunc);
1931   return Callee;
1932 }
1933 
1934 llvm::Value *ItaniumCXXABI::EmitVirtualDestructorCall(
1935     CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType,
1936     Address This, DeleteOrMemberCallExpr E) {
1937   auto *CE = E.dyn_cast<const CXXMemberCallExpr *>();
1938   auto *D = E.dyn_cast<const CXXDeleteExpr *>();
1939   assert((CE != nullptr) ^ (D != nullptr));
1940   assert(CE == nullptr || CE->arg_begin() == CE->arg_end());
1941   assert(DtorType == Dtor_Deleting || DtorType == Dtor_Complete);
1942 
1943   GlobalDecl GD(Dtor, DtorType);
1944   const CGFunctionInfo *FInfo =
1945       &CGM.getTypes().arrangeCXXStructorDeclaration(GD);
1946   llvm::FunctionType *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1947   CGCallee Callee = CGCallee::forVirtual(CE, GD, This, Ty);
1948 
1949   QualType ThisTy;
1950   if (CE) {
1951     ThisTy = CE->getObjectType();
1952   } else {
1953     ThisTy = D->getDestroyedType();
1954   }
1955 
1956   CGF.EmitCXXDestructorCall(GD, Callee, This.getPointer(), ThisTy, nullptr,
1957                             QualType(), nullptr);
1958   return nullptr;
1959 }
1960 
1961 void ItaniumCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
1962   CodeGenVTables &VTables = CGM.getVTables();
1963   llvm::GlobalVariable *VTT = VTables.GetAddrOfVTT(RD);
1964   VTables.EmitVTTDefinition(VTT, CGM.getVTableLinkage(RD), RD);
1965 }
1966 
1967 bool ItaniumCXXABI::canSpeculativelyEmitVTableAsBaseClass(
1968     const CXXRecordDecl *RD) const {
1969   // We don't emit available_externally vtables if we are in -fapple-kext mode
1970   // because kext mode does not permit devirtualization.
1971   if (CGM.getLangOpts().AppleKext)
1972     return false;
1973 
1974   // If the vtable is hidden then it is not safe to emit an available_externally
1975   // copy of vtable.
1976   if (isVTableHidden(RD))
1977     return false;
1978 
1979   if (CGM.getCodeGenOpts().ForceEmitVTables)
1980     return true;
1981 
1982   // If we don't have any not emitted inline virtual function then we are safe
1983   // to emit an available_externally copy of vtable.
1984   // FIXME we can still emit a copy of the vtable if we
1985   // can emit definition of the inline functions.
1986   if (hasAnyUnusedVirtualInlineFunction(RD))
1987     return false;
1988 
1989   // For a class with virtual bases, we must also be able to speculatively
1990   // emit the VTT, because CodeGen doesn't have separate notions of "can emit
1991   // the vtable" and "can emit the VTT". For a base subobject, this means we
1992   // need to be able to emit non-virtual base vtables.
1993   if (RD->getNumVBases()) {
1994     for (const auto &B : RD->bases()) {
1995       auto *BRD = B.getType()->getAsCXXRecordDecl();
1996       assert(BRD && "no class for base specifier");
1997       if (B.isVirtual() || !BRD->isDynamicClass())
1998         continue;
1999       if (!canSpeculativelyEmitVTableAsBaseClass(BRD))
2000         return false;
2001     }
2002   }
2003 
2004   return true;
2005 }
2006 
2007 bool ItaniumCXXABI::canSpeculativelyEmitVTable(const CXXRecordDecl *RD) const {
2008   if (!canSpeculativelyEmitVTableAsBaseClass(RD))
2009     return false;
2010 
2011   // For a complete-object vtable (or more specifically, for the VTT), we need
2012   // to be able to speculatively emit the vtables of all dynamic virtual bases.
2013   for (const auto &B : RD->vbases()) {
2014     auto *BRD = B.getType()->getAsCXXRecordDecl();
2015     assert(BRD && "no class for base specifier");
2016     if (!BRD->isDynamicClass())
2017       continue;
2018     if (!canSpeculativelyEmitVTableAsBaseClass(BRD))
2019       return false;
2020   }
2021 
2022   return true;
2023 }
2024 static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF,
2025                                           Address InitialPtr,
2026                                           int64_t NonVirtualAdjustment,
2027                                           int64_t VirtualAdjustment,
2028                                           bool IsReturnAdjustment) {
2029   if (!NonVirtualAdjustment && !VirtualAdjustment)
2030     return InitialPtr.getPointer();
2031 
2032   Address V = CGF.Builder.CreateElementBitCast(InitialPtr, CGF.Int8Ty);
2033 
2034   // In a base-to-derived cast, the non-virtual adjustment is applied first.
2035   if (NonVirtualAdjustment && !IsReturnAdjustment) {
2036     V = CGF.Builder.CreateConstInBoundsByteGEP(V,
2037                               CharUnits::fromQuantity(NonVirtualAdjustment));
2038   }
2039 
2040   // Perform the virtual adjustment if we have one.
2041   llvm::Value *ResultPtr;
2042   if (VirtualAdjustment) {
2043     Address VTablePtrPtr = CGF.Builder.CreateElementBitCast(V, CGF.Int8PtrTy);
2044     llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr);
2045 
2046     llvm::Value *Offset;
2047     llvm::Value *OffsetPtr =
2048         CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment);
2049     if (CGF.CGM.getItaniumVTableContext().isRelativeLayout()) {
2050       // Load the adjustment offset from the vtable as a 32-bit int.
2051       OffsetPtr =
2052           CGF.Builder.CreateBitCast(OffsetPtr, CGF.Int32Ty->getPointerTo());
2053       Offset =
2054           CGF.Builder.CreateAlignedLoad(OffsetPtr, CharUnits::fromQuantity(4));
2055     } else {
2056       llvm::Type *PtrDiffTy =
2057           CGF.ConvertType(CGF.getContext().getPointerDiffType());
2058 
2059       OffsetPtr =
2060           CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo());
2061 
2062       // Load the adjustment offset from the vtable.
2063       Offset = CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign());
2064     }
2065     // Adjust our pointer.
2066     ResultPtr = CGF.Builder.CreateInBoundsGEP(V.getPointer(), Offset);
2067   } else {
2068     ResultPtr = V.getPointer();
2069   }
2070 
2071   // In a derived-to-base conversion, the non-virtual adjustment is
2072   // applied second.
2073   if (NonVirtualAdjustment && IsReturnAdjustment) {
2074     ResultPtr = CGF.Builder.CreateConstInBoundsGEP1_64(ResultPtr,
2075                                                        NonVirtualAdjustment);
2076   }
2077 
2078   // Cast back to the original type.
2079   return CGF.Builder.CreateBitCast(ResultPtr, InitialPtr.getType());
2080 }
2081 
2082 llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF,
2083                                                   Address This,
2084                                                   const ThisAdjustment &TA) {
2085   return performTypeAdjustment(CGF, This, TA.NonVirtual,
2086                                TA.Virtual.Itanium.VCallOffsetOffset,
2087                                /*IsReturnAdjustment=*/false);
2088 }
2089 
2090 llvm::Value *
2091 ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
2092                                        const ReturnAdjustment &RA) {
2093   return performTypeAdjustment(CGF, Ret, RA.NonVirtual,
2094                                RA.Virtual.Itanium.VBaseOffsetOffset,
2095                                /*IsReturnAdjustment=*/true);
2096 }
2097 
2098 void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF,
2099                                     RValue RV, QualType ResultType) {
2100   if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl()))
2101     return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType);
2102 
2103   // Destructor thunks in the ARM ABI have indeterminate results.
2104   llvm::Type *T = CGF.ReturnValue.getElementType();
2105   RValue Undef = RValue::get(llvm::UndefValue::get(T));
2106   return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType);
2107 }
2108 
2109 /************************** Array allocation cookies **************************/
2110 
2111 CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {
2112   // The array cookie is a size_t; pad that up to the element alignment.
2113   // The cookie is actually right-justified in that space.
2114   return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),
2115                   CGM.getContext().getPreferredTypeAlignInChars(elementType));
2116 }
2117 
2118 Address ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
2119                                              Address NewPtr,
2120                                              llvm::Value *NumElements,
2121                                              const CXXNewExpr *expr,
2122                                              QualType ElementType) {
2123   assert(requiresArrayCookie(expr));
2124 
2125   unsigned AS = NewPtr.getAddressSpace();
2126 
2127   ASTContext &Ctx = getContext();
2128   CharUnits SizeSize = CGF.getSizeSize();
2129 
2130   // The size of the cookie.
2131   CharUnits CookieSize =
2132       std::max(SizeSize, Ctx.getPreferredTypeAlignInChars(ElementType));
2133   assert(CookieSize == getArrayCookieSizeImpl(ElementType));
2134 
2135   // Compute an offset to the cookie.
2136   Address CookiePtr = NewPtr;
2137   CharUnits CookieOffset = CookieSize - SizeSize;
2138   if (!CookieOffset.isZero())
2139     CookiePtr = CGF.Builder.CreateConstInBoundsByteGEP(CookiePtr, CookieOffset);
2140 
2141   // Write the number of elements into the appropriate slot.
2142   Address NumElementsPtr =
2143       CGF.Builder.CreateElementBitCast(CookiePtr, CGF.SizeTy);
2144   llvm::Instruction *SI = CGF.Builder.CreateStore(NumElements, NumElementsPtr);
2145 
2146   // Handle the array cookie specially in ASan.
2147   if (CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) && AS == 0 &&
2148       (expr->getOperatorNew()->isReplaceableGlobalAllocationFunction() ||
2149        CGM.getCodeGenOpts().SanitizeAddressPoisonCustomArrayCookie)) {
2150     // The store to the CookiePtr does not need to be instrumented.
2151     CGM.getSanitizerMetadata()->disableSanitizerForInstruction(SI);
2152     llvm::FunctionType *FTy =
2153         llvm::FunctionType::get(CGM.VoidTy, NumElementsPtr.getType(), false);
2154     llvm::FunctionCallee F =
2155         CGM.CreateRuntimeFunction(FTy, "__asan_poison_cxx_array_cookie");
2156     CGF.Builder.CreateCall(F, NumElementsPtr.getPointer());
2157   }
2158 
2159   // Finally, compute a pointer to the actual data buffer by skipping
2160   // over the cookie completely.
2161   return CGF.Builder.CreateConstInBoundsByteGEP(NewPtr, CookieSize);
2162 }
2163 
2164 llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
2165                                                 Address allocPtr,
2166                                                 CharUnits cookieSize) {
2167   // The element size is right-justified in the cookie.
2168   Address numElementsPtr = allocPtr;
2169   CharUnits numElementsOffset = cookieSize - CGF.getSizeSize();
2170   if (!numElementsOffset.isZero())
2171     numElementsPtr =
2172       CGF.Builder.CreateConstInBoundsByteGEP(numElementsPtr, numElementsOffset);
2173 
2174   unsigned AS = allocPtr.getAddressSpace();
2175   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
2176   if (!CGM.getLangOpts().Sanitize.has(SanitizerKind::Address) || AS != 0)
2177     return CGF.Builder.CreateLoad(numElementsPtr);
2178   // In asan mode emit a function call instead of a regular load and let the
2179   // run-time deal with it: if the shadow is properly poisoned return the
2180   // cookie, otherwise return 0 to avoid an infinite loop calling DTORs.
2181   // We can't simply ignore this load using nosanitize metadata because
2182   // the metadata may be lost.
2183   llvm::FunctionType *FTy =
2184       llvm::FunctionType::get(CGF.SizeTy, CGF.SizeTy->getPointerTo(0), false);
2185   llvm::FunctionCallee F =
2186       CGM.CreateRuntimeFunction(FTy, "__asan_load_cxx_array_cookie");
2187   return CGF.Builder.CreateCall(F, numElementsPtr.getPointer());
2188 }
2189 
2190 CharUnits ARMCXXABI::getArrayCookieSizeImpl(QualType elementType) {
2191   // ARM says that the cookie is always:
2192   //   struct array_cookie {
2193   //     std::size_t element_size; // element_size != 0
2194   //     std::size_t element_count;
2195   //   };
2196   // But the base ABI doesn't give anything an alignment greater than
2197   // 8, so we can dismiss this as typical ABI-author blindness to
2198   // actual language complexity and round up to the element alignment.
2199   return std::max(CharUnits::fromQuantity(2 * CGM.SizeSizeInBytes),
2200                   CGM.getContext().getTypeAlignInChars(elementType));
2201 }
2202 
2203 Address ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
2204                                          Address newPtr,
2205                                          llvm::Value *numElements,
2206                                          const CXXNewExpr *expr,
2207                                          QualType elementType) {
2208   assert(requiresArrayCookie(expr));
2209 
2210   // The cookie is always at the start of the buffer.
2211   Address cookie = newPtr;
2212 
2213   // The first element is the element size.
2214   cookie = CGF.Builder.CreateElementBitCast(cookie, CGF.SizeTy);
2215   llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy,
2216                  getContext().getTypeSizeInChars(elementType).getQuantity());
2217   CGF.Builder.CreateStore(elementSize, cookie);
2218 
2219   // The second element is the element count.
2220   cookie = CGF.Builder.CreateConstInBoundsGEP(cookie, 1);
2221   CGF.Builder.CreateStore(numElements, cookie);
2222 
2223   // Finally, compute a pointer to the actual data buffer by skipping
2224   // over the cookie completely.
2225   CharUnits cookieSize = ARMCXXABI::getArrayCookieSizeImpl(elementType);
2226   return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize);
2227 }
2228 
2229 llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
2230                                             Address allocPtr,
2231                                             CharUnits cookieSize) {
2232   // The number of elements is at offset sizeof(size_t) relative to
2233   // the allocated pointer.
2234   Address numElementsPtr
2235     = CGF.Builder.CreateConstInBoundsByteGEP(allocPtr, CGF.getSizeSize());
2236 
2237   numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy);
2238   return CGF.Builder.CreateLoad(numElementsPtr);
2239 }
2240 
2241 /*********************** Static local initialization **************************/
2242 
2243 static llvm::FunctionCallee getGuardAcquireFn(CodeGenModule &CGM,
2244                                               llvm::PointerType *GuardPtrTy) {
2245   // int __cxa_guard_acquire(__guard *guard_object);
2246   llvm::FunctionType *FTy =
2247     llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
2248                             GuardPtrTy, /*isVarArg=*/false);
2249   return CGM.CreateRuntimeFunction(
2250       FTy, "__cxa_guard_acquire",
2251       llvm::AttributeList::get(CGM.getLLVMContext(),
2252                                llvm::AttributeList::FunctionIndex,
2253                                llvm::Attribute::NoUnwind));
2254 }
2255 
2256 static llvm::FunctionCallee getGuardReleaseFn(CodeGenModule &CGM,
2257                                               llvm::PointerType *GuardPtrTy) {
2258   // void __cxa_guard_release(__guard *guard_object);
2259   llvm::FunctionType *FTy =
2260     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
2261   return CGM.CreateRuntimeFunction(
2262       FTy, "__cxa_guard_release",
2263       llvm::AttributeList::get(CGM.getLLVMContext(),
2264                                llvm::AttributeList::FunctionIndex,
2265                                llvm::Attribute::NoUnwind));
2266 }
2267 
2268 static llvm::FunctionCallee getGuardAbortFn(CodeGenModule &CGM,
2269                                             llvm::PointerType *GuardPtrTy) {
2270   // void __cxa_guard_abort(__guard *guard_object);
2271   llvm::FunctionType *FTy =
2272     llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
2273   return CGM.CreateRuntimeFunction(
2274       FTy, "__cxa_guard_abort",
2275       llvm::AttributeList::get(CGM.getLLVMContext(),
2276                                llvm::AttributeList::FunctionIndex,
2277                                llvm::Attribute::NoUnwind));
2278 }
2279 
2280 namespace {
2281   struct CallGuardAbort final : EHScopeStack::Cleanup {
2282     llvm::GlobalVariable *Guard;
2283     CallGuardAbort(llvm::GlobalVariable *Guard) : Guard(Guard) {}
2284 
2285     void Emit(CodeGenFunction &CGF, Flags flags) override {
2286       CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()),
2287                                   Guard);
2288     }
2289   };
2290 }
2291 
2292 /// The ARM code here follows the Itanium code closely enough that we
2293 /// just special-case it at particular places.
2294 void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
2295                                     const VarDecl &D,
2296                                     llvm::GlobalVariable *var,
2297                                     bool shouldPerformInit) {
2298   CGBuilderTy &Builder = CGF.Builder;
2299 
2300   // Inline variables that weren't instantiated from variable templates have
2301   // partially-ordered initialization within their translation unit.
2302   bool NonTemplateInline =
2303       D.isInline() &&
2304       !isTemplateInstantiation(D.getTemplateSpecializationKind());
2305 
2306   // We only need to use thread-safe statics for local non-TLS variables and
2307   // inline variables; other global initialization is always single-threaded
2308   // or (through lazy dynamic loading in multiple threads) unsequenced.
2309   bool threadsafe = getContext().getLangOpts().ThreadsafeStatics &&
2310                     (D.isLocalVarDecl() || NonTemplateInline) &&
2311                     !D.getTLSKind();
2312 
2313   // If we have a global variable with internal linkage and thread-safe statics
2314   // are disabled, we can just let the guard variable be of type i8.
2315   bool useInt8GuardVariable = !threadsafe && var->hasInternalLinkage();
2316 
2317   llvm::IntegerType *guardTy;
2318   CharUnits guardAlignment;
2319   if (useInt8GuardVariable) {
2320     guardTy = CGF.Int8Ty;
2321     guardAlignment = CharUnits::One();
2322   } else {
2323     // Guard variables are 64 bits in the generic ABI and size width on ARM
2324     // (i.e. 32-bit on AArch32, 64-bit on AArch64).
2325     if (UseARMGuardVarABI) {
2326       guardTy = CGF.SizeTy;
2327       guardAlignment = CGF.getSizeAlign();
2328     } else {
2329       guardTy = CGF.Int64Ty;
2330       guardAlignment = CharUnits::fromQuantity(
2331                              CGM.getDataLayout().getABITypeAlignment(guardTy));
2332     }
2333   }
2334   llvm::PointerType *guardPtrTy = guardTy->getPointerTo(
2335       CGF.CGM.getDataLayout().getDefaultGlobalsAddressSpace());
2336 
2337   // Create the guard variable if we don't already have it (as we
2338   // might if we're double-emitting this function body).
2339   llvm::GlobalVariable *guard = CGM.getStaticLocalDeclGuardAddress(&D);
2340   if (!guard) {
2341     // Mangle the name for the guard.
2342     SmallString<256> guardName;
2343     {
2344       llvm::raw_svector_ostream out(guardName);
2345       getMangleContext().mangleStaticGuardVariable(&D, out);
2346     }
2347 
2348     // Create the guard variable with a zero-initializer.
2349     // Just absorb linkage and visibility from the guarded variable.
2350     guard = new llvm::GlobalVariable(CGM.getModule(), guardTy,
2351                                      false, var->getLinkage(),
2352                                      llvm::ConstantInt::get(guardTy, 0),
2353                                      guardName.str());
2354     guard->setDSOLocal(var->isDSOLocal());
2355     guard->setVisibility(var->getVisibility());
2356     // If the variable is thread-local, so is its guard variable.
2357     guard->setThreadLocalMode(var->getThreadLocalMode());
2358     guard->setAlignment(guardAlignment.getAsAlign());
2359 
2360     // The ABI says: "It is suggested that it be emitted in the same COMDAT
2361     // group as the associated data object." In practice, this doesn't work for
2362     // non-ELF and non-Wasm object formats, so only do it for ELF and Wasm.
2363     llvm::Comdat *C = var->getComdat();
2364     if (!D.isLocalVarDecl() && C &&
2365         (CGM.getTarget().getTriple().isOSBinFormatELF() ||
2366          CGM.getTarget().getTriple().isOSBinFormatWasm())) {
2367       guard->setComdat(C);
2368       // An inline variable's guard function is run from the per-TU
2369       // initialization function, not via a dedicated global ctor function, so
2370       // we can't put it in a comdat.
2371       if (!NonTemplateInline)
2372         CGF.CurFn->setComdat(C);
2373     } else if (CGM.supportsCOMDAT() && guard->isWeakForLinker()) {
2374       guard->setComdat(CGM.getModule().getOrInsertComdat(guard->getName()));
2375     }
2376 
2377     CGM.setStaticLocalDeclGuardAddress(&D, guard);
2378   }
2379 
2380   Address guardAddr = Address(guard, guardAlignment);
2381 
2382   // Test whether the variable has completed initialization.
2383   //
2384   // Itanium C++ ABI 3.3.2:
2385   //   The following is pseudo-code showing how these functions can be used:
2386   //     if (obj_guard.first_byte == 0) {
2387   //       if ( __cxa_guard_acquire (&obj_guard) ) {
2388   //         try {
2389   //           ... initialize the object ...;
2390   //         } catch (...) {
2391   //            __cxa_guard_abort (&obj_guard);
2392   //            throw;
2393   //         }
2394   //         ... queue object destructor with __cxa_atexit() ...;
2395   //         __cxa_guard_release (&obj_guard);
2396   //       }
2397   //     }
2398 
2399   // Load the first byte of the guard variable.
2400   llvm::LoadInst *LI =
2401       Builder.CreateLoad(Builder.CreateElementBitCast(guardAddr, CGM.Int8Ty));
2402 
2403   // Itanium ABI:
2404   //   An implementation supporting thread-safety on multiprocessor
2405   //   systems must also guarantee that references to the initialized
2406   //   object do not occur before the load of the initialization flag.
2407   //
2408   // In LLVM, we do this by marking the load Acquire.
2409   if (threadsafe)
2410     LI->setAtomic(llvm::AtomicOrdering::Acquire);
2411 
2412   // For ARM, we should only check the first bit, rather than the entire byte:
2413   //
2414   // ARM C++ ABI 3.2.3.1:
2415   //   To support the potential use of initialization guard variables
2416   //   as semaphores that are the target of ARM SWP and LDREX/STREX
2417   //   synchronizing instructions we define a static initialization
2418   //   guard variable to be a 4-byte aligned, 4-byte word with the
2419   //   following inline access protocol.
2420   //     #define INITIALIZED 1
2421   //     if ((obj_guard & INITIALIZED) != INITIALIZED) {
2422   //       if (__cxa_guard_acquire(&obj_guard))
2423   //         ...
2424   //     }
2425   //
2426   // and similarly for ARM64:
2427   //
2428   // ARM64 C++ ABI 3.2.2:
2429   //   This ABI instead only specifies the value bit 0 of the static guard
2430   //   variable; all other bits are platform defined. Bit 0 shall be 0 when the
2431   //   variable is not initialized and 1 when it is.
2432   llvm::Value *V =
2433       (UseARMGuardVarABI && !useInt8GuardVariable)
2434           ? Builder.CreateAnd(LI, llvm::ConstantInt::get(CGM.Int8Ty, 1))
2435           : LI;
2436   llvm::Value *NeedsInit = Builder.CreateIsNull(V, "guard.uninitialized");
2437 
2438   llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check");
2439   llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
2440 
2441   // Check if the first byte of the guard variable is zero.
2442   CGF.EmitCXXGuardedInitBranch(NeedsInit, InitCheckBlock, EndBlock,
2443                                CodeGenFunction::GuardKind::VariableGuard, &D);
2444 
2445   CGF.EmitBlock(InitCheckBlock);
2446 
2447   // Variables used when coping with thread-safe statics and exceptions.
2448   if (threadsafe) {
2449     // Call __cxa_guard_acquire.
2450     llvm::Value *V
2451       = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard);
2452 
2453     llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
2454 
2455     Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
2456                          InitBlock, EndBlock);
2457 
2458     // Call __cxa_guard_abort along the exceptional edge.
2459     CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard);
2460 
2461     CGF.EmitBlock(InitBlock);
2462   }
2463 
2464   // Emit the initializer and add a global destructor if appropriate.
2465   CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit);
2466 
2467   if (threadsafe) {
2468     // Pop the guard-abort cleanup if we pushed one.
2469     CGF.PopCleanupBlock();
2470 
2471     // Call __cxa_guard_release.  This cannot throw.
2472     CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy),
2473                                 guardAddr.getPointer());
2474   } else {
2475     // Store 1 into the first byte of the guard variable after initialization is
2476     // complete.
2477     Builder.CreateStore(llvm::ConstantInt::get(CGM.Int8Ty, 1),
2478                         Builder.CreateElementBitCast(guardAddr, CGM.Int8Ty));
2479   }
2480 
2481   CGF.EmitBlock(EndBlock);
2482 }
2483 
2484 /// Register a global destructor using __cxa_atexit.
2485 static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
2486                                         llvm::FunctionCallee dtor,
2487                                         llvm::Constant *addr, bool TLS) {
2488   assert((TLS || CGF.getTypes().getCodeGenOpts().CXAAtExit) &&
2489          "__cxa_atexit is disabled");
2490   const char *Name = "__cxa_atexit";
2491   if (TLS) {
2492     const llvm::Triple &T = CGF.getTarget().getTriple();
2493     Name = T.isOSDarwin() ?  "_tlv_atexit" : "__cxa_thread_atexit";
2494   }
2495 
2496   // We're assuming that the destructor function is something we can
2497   // reasonably call with the default CC.  Go ahead and cast it to the
2498   // right prototype.
2499   llvm::Type *dtorTy =
2500     llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo();
2501 
2502   // Preserve address space of addr.
2503   auto AddrAS = addr ? addr->getType()->getPointerAddressSpace() : 0;
2504   auto AddrInt8PtrTy =
2505       AddrAS ? CGF.Int8Ty->getPointerTo(AddrAS) : CGF.Int8PtrTy;
2506 
2507   // Create a variable that binds the atexit to this shared object.
2508   llvm::Constant *handle =
2509       CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle");
2510   auto *GV = cast<llvm::GlobalValue>(handle->stripPointerCasts());
2511   GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
2512 
2513   // extern "C" int __cxa_atexit(void (*f)(void *), void *p, void *d);
2514   llvm::Type *paramTys[] = {dtorTy, AddrInt8PtrTy, handle->getType()};
2515   llvm::FunctionType *atexitTy =
2516     llvm::FunctionType::get(CGF.IntTy, paramTys, false);
2517 
2518   // Fetch the actual function.
2519   llvm::FunctionCallee atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name);
2520   if (llvm::Function *fn = dyn_cast<llvm::Function>(atexit.getCallee()))
2521     fn->setDoesNotThrow();
2522 
2523   if (!addr)
2524     // addr is null when we are trying to register a dtor annotated with
2525     // __attribute__((destructor)) in a constructor function. Using null here is
2526     // okay because this argument is just passed back to the destructor
2527     // function.
2528     addr = llvm::Constant::getNullValue(CGF.Int8PtrTy);
2529 
2530   llvm::Value *args[] = {llvm::ConstantExpr::getBitCast(
2531                              cast<llvm::Constant>(dtor.getCallee()), dtorTy),
2532                          llvm::ConstantExpr::getBitCast(addr, AddrInt8PtrTy),
2533                          handle};
2534   CGF.EmitNounwindRuntimeCall(atexit, args);
2535 }
2536 
2537 static llvm::Function *createGlobalInitOrCleanupFn(CodeGen::CodeGenModule &CGM,
2538                                                    StringRef FnName) {
2539   // Create a function that registers/unregisters destructors that have the same
2540   // priority.
2541   llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.VoidTy, false);
2542   llvm::Function *GlobalInitOrCleanupFn = CGM.CreateGlobalInitOrCleanUpFunction(
2543       FTy, FnName, CGM.getTypes().arrangeNullaryFunction(), SourceLocation());
2544 
2545   return GlobalInitOrCleanupFn;
2546 }
2547 
2548 static FunctionDecl *
2549 createGlobalInitOrCleanupFnDecl(CodeGen::CodeGenModule &CGM, StringRef FnName) {
2550   ASTContext &Ctx = CGM.getContext();
2551   QualType FunctionTy = Ctx.getFunctionType(Ctx.VoidTy, llvm::None, {});
2552   return FunctionDecl::Create(
2553       Ctx, Ctx.getTranslationUnitDecl(), SourceLocation(), SourceLocation(),
2554       &Ctx.Idents.get(FnName), FunctionTy, nullptr, SC_Static, false, false);
2555 }
2556 
2557 void CodeGenModule::unregisterGlobalDtorsWithUnAtExit() {
2558   for (const auto &I : DtorsUsingAtExit) {
2559     int Priority = I.first;
2560     std::string GlobalCleanupFnName =
2561         std::string("__GLOBAL_cleanup_") + llvm::to_string(Priority);
2562 
2563     llvm::Function *GlobalCleanupFn =
2564         createGlobalInitOrCleanupFn(*this, GlobalCleanupFnName);
2565 
2566     FunctionDecl *GlobalCleanupFD =
2567         createGlobalInitOrCleanupFnDecl(*this, GlobalCleanupFnName);
2568 
2569     CodeGenFunction CGF(*this);
2570     CGF.StartFunction(GlobalDecl(GlobalCleanupFD), getContext().VoidTy,
2571                       GlobalCleanupFn, getTypes().arrangeNullaryFunction(),
2572                       FunctionArgList(), SourceLocation(), SourceLocation());
2573 
2574     // Get the destructor function type, void(*)(void).
2575     llvm::FunctionType *dtorFuncTy = llvm::FunctionType::get(CGF.VoidTy, false);
2576     llvm::Type *dtorTy = dtorFuncTy->getPointerTo();
2577 
2578     // Destructor functions are run/unregistered in non-ascending
2579     // order of their priorities.
2580     const llvm::TinyPtrVector<llvm::Function *> &Dtors = I.second;
2581     auto itv = Dtors.rbegin();
2582     while (itv != Dtors.rend()) {
2583       llvm::Function *Dtor = *itv;
2584 
2585       // We're assuming that the destructor function is something we can
2586       // reasonably call with the correct CC.  Go ahead and cast it to the
2587       // right prototype.
2588       llvm::Constant *dtor = llvm::ConstantExpr::getBitCast(Dtor, dtorTy);
2589       llvm::Value *V = CGF.unregisterGlobalDtorWithUnAtExit(dtor);
2590       llvm::Value *NeedsDestruct =
2591           CGF.Builder.CreateIsNull(V, "needs_destruct");
2592 
2593       llvm::BasicBlock *DestructCallBlock =
2594           CGF.createBasicBlock("destruct.call");
2595       llvm::BasicBlock *EndBlock = CGF.createBasicBlock(
2596           (itv + 1) != Dtors.rend() ? "unatexit.call" : "destruct.end");
2597       // Check if unatexit returns a value of 0. If it does, jump to
2598       // DestructCallBlock, otherwise jump to EndBlock directly.
2599       CGF.Builder.CreateCondBr(NeedsDestruct, DestructCallBlock, EndBlock);
2600 
2601       CGF.EmitBlock(DestructCallBlock);
2602 
2603       // Emit the call to casted Dtor.
2604       llvm::CallInst *CI = CGF.Builder.CreateCall(dtorFuncTy, dtor);
2605       // Make sure the call and the callee agree on calling convention.
2606       CI->setCallingConv(Dtor->getCallingConv());
2607 
2608       CGF.EmitBlock(EndBlock);
2609 
2610       itv++;
2611     }
2612 
2613     CGF.FinishFunction();
2614     AddGlobalDtor(GlobalCleanupFn, Priority);
2615   }
2616 }
2617 
2618 void CodeGenModule::registerGlobalDtorsWithAtExit() {
2619   for (const auto &I : DtorsUsingAtExit) {
2620     int Priority = I.first;
2621     std::string GlobalInitFnName =
2622         std::string("__GLOBAL_init_") + llvm::to_string(Priority);
2623     llvm::Function *GlobalInitFn =
2624         createGlobalInitOrCleanupFn(*this, GlobalInitFnName);
2625     FunctionDecl *GlobalInitFD =
2626         createGlobalInitOrCleanupFnDecl(*this, GlobalInitFnName);
2627 
2628     CodeGenFunction CGF(*this);
2629     CGF.StartFunction(GlobalDecl(GlobalInitFD), getContext().VoidTy,
2630                       GlobalInitFn, getTypes().arrangeNullaryFunction(),
2631                       FunctionArgList(), SourceLocation(), SourceLocation());
2632 
2633     // Since constructor functions are run in non-descending order of their
2634     // priorities, destructors are registered in non-descending order of their
2635     // priorities, and since destructor functions are run in the reverse order
2636     // of their registration, destructor functions are run in non-ascending
2637     // order of their priorities.
2638     const llvm::TinyPtrVector<llvm::Function *> &Dtors = I.second;
2639     for (auto *Dtor : Dtors) {
2640       // Register the destructor function calling __cxa_atexit if it is
2641       // available. Otherwise fall back on calling atexit.
2642       if (getCodeGenOpts().CXAAtExit) {
2643         emitGlobalDtorWithCXAAtExit(CGF, Dtor, nullptr, false);
2644       } else {
2645         // Get the destructor function type, void(*)(void).
2646         llvm::Type *dtorTy =
2647             llvm::FunctionType::get(CGF.VoidTy, false)->getPointerTo();
2648 
2649         // We're assuming that the destructor function is something we can
2650         // reasonably call with the correct CC.  Go ahead and cast it to the
2651         // right prototype.
2652         CGF.registerGlobalDtorWithAtExit(
2653             llvm::ConstantExpr::getBitCast(Dtor, dtorTy));
2654       }
2655     }
2656 
2657     CGF.FinishFunction();
2658     AddGlobalCtor(GlobalInitFn, Priority, nullptr);
2659   }
2660 
2661   if (getCXXABI().useSinitAndSterm())
2662     unregisterGlobalDtorsWithUnAtExit();
2663 }
2664 
2665 /// Register a global destructor as best as we know how.
2666 void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
2667                                        llvm::FunctionCallee dtor,
2668                                        llvm::Constant *addr) {
2669   if (D.isNoDestroy(CGM.getContext()))
2670     return;
2671 
2672   // emitGlobalDtorWithCXAAtExit will emit a call to either __cxa_thread_atexit
2673   // or __cxa_atexit depending on whether this VarDecl is a thread-local storage
2674   // or not. CXAAtExit controls only __cxa_atexit, so use it if it is enabled.
2675   // We can always use __cxa_thread_atexit.
2676   if (CGM.getCodeGenOpts().CXAAtExit || D.getTLSKind())
2677     return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind());
2678 
2679   // In Apple kexts, we want to add a global destructor entry.
2680   // FIXME: shouldn't this be guarded by some variable?
2681   if (CGM.getLangOpts().AppleKext) {
2682     // Generate a global destructor entry.
2683     return CGM.AddCXXDtorEntry(dtor, addr);
2684   }
2685 
2686   CGF.registerGlobalDtorWithAtExit(D, dtor, addr);
2687 }
2688 
2689 static bool isThreadWrapperReplaceable(const VarDecl *VD,
2690                                        CodeGen::CodeGenModule &CGM) {
2691   assert(!VD->isStaticLocal() && "static local VarDecls don't need wrappers!");
2692   // Darwin prefers to have references to thread local variables to go through
2693   // the thread wrapper instead of directly referencing the backing variable.
2694   return VD->getTLSKind() == VarDecl::TLS_Dynamic &&
2695          CGM.getTarget().getTriple().isOSDarwin();
2696 }
2697 
2698 /// Get the appropriate linkage for the wrapper function. This is essentially
2699 /// the weak form of the variable's linkage; every translation unit which needs
2700 /// the wrapper emits a copy, and we want the linker to merge them.
2701 static llvm::GlobalValue::LinkageTypes
2702 getThreadLocalWrapperLinkage(const VarDecl *VD, CodeGen::CodeGenModule &CGM) {
2703   llvm::GlobalValue::LinkageTypes VarLinkage =
2704       CGM.getLLVMLinkageVarDefinition(VD, /*IsConstant=*/false);
2705 
2706   // For internal linkage variables, we don't need an external or weak wrapper.
2707   if (llvm::GlobalValue::isLocalLinkage(VarLinkage))
2708     return VarLinkage;
2709 
2710   // If the thread wrapper is replaceable, give it appropriate linkage.
2711   if (isThreadWrapperReplaceable(VD, CGM))
2712     if (!llvm::GlobalVariable::isLinkOnceLinkage(VarLinkage) &&
2713         !llvm::GlobalVariable::isWeakODRLinkage(VarLinkage))
2714       return VarLinkage;
2715   return llvm::GlobalValue::WeakODRLinkage;
2716 }
2717 
2718 llvm::Function *
2719 ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD,
2720                                              llvm::Value *Val) {
2721   // Mangle the name for the thread_local wrapper function.
2722   SmallString<256> WrapperName;
2723   {
2724     llvm::raw_svector_ostream Out(WrapperName);
2725     getMangleContext().mangleItaniumThreadLocalWrapper(VD, Out);
2726   }
2727 
2728   // FIXME: If VD is a definition, we should regenerate the function attributes
2729   // before returning.
2730   if (llvm::Value *V = CGM.getModule().getNamedValue(WrapperName))
2731     return cast<llvm::Function>(V);
2732 
2733   QualType RetQT = VD->getType();
2734   if (RetQT->isReferenceType())
2735     RetQT = RetQT.getNonReferenceType();
2736 
2737   const CGFunctionInfo &FI = CGM.getTypes().arrangeBuiltinFunctionDeclaration(
2738       getContext().getPointerType(RetQT), FunctionArgList());
2739 
2740   llvm::FunctionType *FnTy = CGM.getTypes().GetFunctionType(FI);
2741   llvm::Function *Wrapper =
2742       llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM),
2743                              WrapperName.str(), &CGM.getModule());
2744 
2745   if (CGM.supportsCOMDAT() && Wrapper->isWeakForLinker())
2746     Wrapper->setComdat(CGM.getModule().getOrInsertComdat(Wrapper->getName()));
2747 
2748   CGM.SetLLVMFunctionAttributes(GlobalDecl(), FI, Wrapper);
2749 
2750   // Always resolve references to the wrapper at link time.
2751   if (!Wrapper->hasLocalLinkage())
2752     if (!isThreadWrapperReplaceable(VD, CGM) ||
2753         llvm::GlobalVariable::isLinkOnceLinkage(Wrapper->getLinkage()) ||
2754         llvm::GlobalVariable::isWeakODRLinkage(Wrapper->getLinkage()) ||
2755         VD->getVisibility() == HiddenVisibility)
2756       Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility);
2757 
2758   if (isThreadWrapperReplaceable(VD, CGM)) {
2759     Wrapper->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2760     Wrapper->addFnAttr(llvm::Attribute::NoUnwind);
2761   }
2762 
2763   ThreadWrappers.push_back({VD, Wrapper});
2764   return Wrapper;
2765 }
2766 
2767 void ItaniumCXXABI::EmitThreadLocalInitFuncs(
2768     CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals,
2769     ArrayRef<llvm::Function *> CXXThreadLocalInits,
2770     ArrayRef<const VarDecl *> CXXThreadLocalInitVars) {
2771   llvm::Function *InitFunc = nullptr;
2772 
2773   // Separate initializers into those with ordered (or partially-ordered)
2774   // initialization and those with unordered initialization.
2775   llvm::SmallVector<llvm::Function *, 8> OrderedInits;
2776   llvm::SmallDenseMap<const VarDecl *, llvm::Function *> UnorderedInits;
2777   for (unsigned I = 0; I != CXXThreadLocalInits.size(); ++I) {
2778     if (isTemplateInstantiation(
2779             CXXThreadLocalInitVars[I]->getTemplateSpecializationKind()))
2780       UnorderedInits[CXXThreadLocalInitVars[I]->getCanonicalDecl()] =
2781           CXXThreadLocalInits[I];
2782     else
2783       OrderedInits.push_back(CXXThreadLocalInits[I]);
2784   }
2785 
2786   if (!OrderedInits.empty()) {
2787     // Generate a guarded initialization function.
2788     llvm::FunctionType *FTy =
2789         llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
2790     const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2791     InitFunc = CGM.CreateGlobalInitOrCleanUpFunction(FTy, "__tls_init", FI,
2792                                                      SourceLocation(),
2793                                                      /*TLS=*/true);
2794     llvm::GlobalVariable *Guard = new llvm::GlobalVariable(
2795         CGM.getModule(), CGM.Int8Ty, /*isConstant=*/false,
2796         llvm::GlobalVariable::InternalLinkage,
2797         llvm::ConstantInt::get(CGM.Int8Ty, 0), "__tls_guard");
2798     Guard->setThreadLocal(true);
2799     Guard->setThreadLocalMode(CGM.GetDefaultLLVMTLSModel());
2800 
2801     CharUnits GuardAlign = CharUnits::One();
2802     Guard->setAlignment(GuardAlign.getAsAlign());
2803 
2804     CodeGenFunction(CGM).GenerateCXXGlobalInitFunc(
2805         InitFunc, OrderedInits, ConstantAddress(Guard, GuardAlign));
2806     // On Darwin platforms, use CXX_FAST_TLS calling convention.
2807     if (CGM.getTarget().getTriple().isOSDarwin()) {
2808       InitFunc->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2809       InitFunc->addFnAttr(llvm::Attribute::NoUnwind);
2810     }
2811   }
2812 
2813   // Create declarations for thread wrappers for all thread-local variables
2814   // with non-discardable definitions in this translation unit.
2815   for (const VarDecl *VD : CXXThreadLocals) {
2816     if (VD->hasDefinition() &&
2817         !isDiscardableGVALinkage(getContext().GetGVALinkageForVariable(VD))) {
2818       llvm::GlobalValue *GV = CGM.GetGlobalValue(CGM.getMangledName(VD));
2819       getOrCreateThreadLocalWrapper(VD, GV);
2820     }
2821   }
2822 
2823   // Emit all referenced thread wrappers.
2824   for (auto VDAndWrapper : ThreadWrappers) {
2825     const VarDecl *VD = VDAndWrapper.first;
2826     llvm::GlobalVariable *Var =
2827         cast<llvm::GlobalVariable>(CGM.GetGlobalValue(CGM.getMangledName(VD)));
2828     llvm::Function *Wrapper = VDAndWrapper.second;
2829 
2830     // Some targets require that all access to thread local variables go through
2831     // the thread wrapper.  This means that we cannot attempt to create a thread
2832     // wrapper or a thread helper.
2833     if (!VD->hasDefinition()) {
2834       if (isThreadWrapperReplaceable(VD, CGM)) {
2835         Wrapper->setLinkage(llvm::Function::ExternalLinkage);
2836         continue;
2837       }
2838 
2839       // If this isn't a TU in which this variable is defined, the thread
2840       // wrapper is discardable.
2841       if (Wrapper->getLinkage() == llvm::Function::WeakODRLinkage)
2842         Wrapper->setLinkage(llvm::Function::LinkOnceODRLinkage);
2843     }
2844 
2845     CGM.SetLLVMFunctionAttributesForDefinition(nullptr, Wrapper);
2846 
2847     // Mangle the name for the thread_local initialization function.
2848     SmallString<256> InitFnName;
2849     {
2850       llvm::raw_svector_ostream Out(InitFnName);
2851       getMangleContext().mangleItaniumThreadLocalInit(VD, Out);
2852     }
2853 
2854     llvm::FunctionType *InitFnTy = llvm::FunctionType::get(CGM.VoidTy, false);
2855 
2856     // If we have a definition for the variable, emit the initialization
2857     // function as an alias to the global Init function (if any). Otherwise,
2858     // produce a declaration of the initialization function.
2859     llvm::GlobalValue *Init = nullptr;
2860     bool InitIsInitFunc = false;
2861     bool HasConstantInitialization = false;
2862     if (!usesThreadWrapperFunction(VD)) {
2863       HasConstantInitialization = true;
2864     } else if (VD->hasDefinition()) {
2865       InitIsInitFunc = true;
2866       llvm::Function *InitFuncToUse = InitFunc;
2867       if (isTemplateInstantiation(VD->getTemplateSpecializationKind()))
2868         InitFuncToUse = UnorderedInits.lookup(VD->getCanonicalDecl());
2869       if (InitFuncToUse)
2870         Init = llvm::GlobalAlias::create(Var->getLinkage(), InitFnName.str(),
2871                                          InitFuncToUse);
2872     } else {
2873       // Emit a weak global function referring to the initialization function.
2874       // This function will not exist if the TU defining the thread_local
2875       // variable in question does not need any dynamic initialization for
2876       // its thread_local variables.
2877       Init = llvm::Function::Create(InitFnTy,
2878                                     llvm::GlobalVariable::ExternalWeakLinkage,
2879                                     InitFnName.str(), &CGM.getModule());
2880       const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
2881       CGM.SetLLVMFunctionAttributes(GlobalDecl(), FI,
2882                                     cast<llvm::Function>(Init));
2883     }
2884 
2885     if (Init) {
2886       Init->setVisibility(Var->getVisibility());
2887       // Don't mark an extern_weak function DSO local on windows.
2888       if (!CGM.getTriple().isOSWindows() || !Init->hasExternalWeakLinkage())
2889         Init->setDSOLocal(Var->isDSOLocal());
2890     }
2891 
2892     llvm::LLVMContext &Context = CGM.getModule().getContext();
2893     llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
2894     CGBuilderTy Builder(CGM, Entry);
2895     if (HasConstantInitialization) {
2896       // No dynamic initialization to invoke.
2897     } else if (InitIsInitFunc) {
2898       if (Init) {
2899         llvm::CallInst *CallVal = Builder.CreateCall(InitFnTy, Init);
2900         if (isThreadWrapperReplaceable(VD, CGM)) {
2901           CallVal->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2902           llvm::Function *Fn =
2903               cast<llvm::Function>(cast<llvm::GlobalAlias>(Init)->getAliasee());
2904           Fn->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
2905         }
2906       }
2907     } else {
2908       // Don't know whether we have an init function. Call it if it exists.
2909       llvm::Value *Have = Builder.CreateIsNotNull(Init);
2910       llvm::BasicBlock *InitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2911       llvm::BasicBlock *ExitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
2912       Builder.CreateCondBr(Have, InitBB, ExitBB);
2913 
2914       Builder.SetInsertPoint(InitBB);
2915       Builder.CreateCall(InitFnTy, Init);
2916       Builder.CreateBr(ExitBB);
2917 
2918       Builder.SetInsertPoint(ExitBB);
2919     }
2920 
2921     // For a reference, the result of the wrapper function is a pointer to
2922     // the referenced object.
2923     llvm::Value *Val = Var;
2924     if (VD->getType()->isReferenceType()) {
2925       CharUnits Align = CGM.getContext().getDeclAlign(VD);
2926       Val = Builder.CreateAlignedLoad(Val, Align);
2927     }
2928     if (Val->getType() != Wrapper->getReturnType())
2929       Val = Builder.CreatePointerBitCastOrAddrSpaceCast(
2930           Val, Wrapper->getReturnType(), "");
2931     Builder.CreateRet(Val);
2932   }
2933 }
2934 
2935 LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
2936                                                    const VarDecl *VD,
2937                                                    QualType LValType) {
2938   llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD);
2939   llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Val);
2940 
2941   llvm::CallInst *CallVal = CGF.Builder.CreateCall(Wrapper);
2942   CallVal->setCallingConv(Wrapper->getCallingConv());
2943 
2944   LValue LV;
2945   if (VD->getType()->isReferenceType())
2946     LV = CGF.MakeNaturalAlignAddrLValue(CallVal, LValType);
2947   else
2948     LV = CGF.MakeAddrLValue(CallVal, LValType,
2949                             CGF.getContext().getDeclAlign(VD));
2950   // FIXME: need setObjCGCLValueClass?
2951   return LV;
2952 }
2953 
2954 /// Return whether the given global decl needs a VTT parameter, which it does
2955 /// if it's a base constructor or destructor with virtual bases.
2956 bool ItaniumCXXABI::NeedsVTTParameter(GlobalDecl GD) {
2957   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
2958 
2959   // We don't have any virtual bases, just return early.
2960   if (!MD->getParent()->getNumVBases())
2961     return false;
2962 
2963   // Check if we have a base constructor.
2964   if (isa<CXXConstructorDecl>(MD) && GD.getCtorType() == Ctor_Base)
2965     return true;
2966 
2967   // Check if we have a base destructor.
2968   if (isa<CXXDestructorDecl>(MD) && GD.getDtorType() == Dtor_Base)
2969     return true;
2970 
2971   return false;
2972 }
2973 
2974 namespace {
2975 class ItaniumRTTIBuilder {
2976   CodeGenModule &CGM;  // Per-module state.
2977   llvm::LLVMContext &VMContext;
2978   const ItaniumCXXABI &CXXABI;  // Per-module state.
2979 
2980   /// Fields - The fields of the RTTI descriptor currently being built.
2981   SmallVector<llvm::Constant *, 16> Fields;
2982 
2983   /// GetAddrOfTypeName - Returns the mangled type name of the given type.
2984   llvm::GlobalVariable *
2985   GetAddrOfTypeName(QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage);
2986 
2987   /// GetAddrOfExternalRTTIDescriptor - Returns the constant for the RTTI
2988   /// descriptor of the given type.
2989   llvm::Constant *GetAddrOfExternalRTTIDescriptor(QualType Ty);
2990 
2991   /// BuildVTablePointer - Build the vtable pointer for the given type.
2992   void BuildVTablePointer(const Type *Ty);
2993 
2994   /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
2995   /// inheritance, according to the Itanium C++ ABI, 2.9.5p6b.
2996   void BuildSIClassTypeInfo(const CXXRecordDecl *RD);
2997 
2998   /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
2999   /// classes with bases that do not satisfy the abi::__si_class_type_info
3000   /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
3001   void BuildVMIClassTypeInfo(const CXXRecordDecl *RD);
3002 
3003   /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct, used
3004   /// for pointer types.
3005   void BuildPointerTypeInfo(QualType PointeeTy);
3006 
3007   /// BuildObjCObjectTypeInfo - Build the appropriate kind of
3008   /// type_info for an object type.
3009   void BuildObjCObjectTypeInfo(const ObjCObjectType *Ty);
3010 
3011   /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
3012   /// struct, used for member pointer types.
3013   void BuildPointerToMemberTypeInfo(const MemberPointerType *Ty);
3014 
3015 public:
3016   ItaniumRTTIBuilder(const ItaniumCXXABI &ABI)
3017       : CGM(ABI.CGM), VMContext(CGM.getModule().getContext()), CXXABI(ABI) {}
3018 
3019   // Pointer type info flags.
3020   enum {
3021     /// PTI_Const - Type has const qualifier.
3022     PTI_Const = 0x1,
3023 
3024     /// PTI_Volatile - Type has volatile qualifier.
3025     PTI_Volatile = 0x2,
3026 
3027     /// PTI_Restrict - Type has restrict qualifier.
3028     PTI_Restrict = 0x4,
3029 
3030     /// PTI_Incomplete - Type is incomplete.
3031     PTI_Incomplete = 0x8,
3032 
3033     /// PTI_ContainingClassIncomplete - Containing class is incomplete.
3034     /// (in pointer to member).
3035     PTI_ContainingClassIncomplete = 0x10,
3036 
3037     /// PTI_TransactionSafe - Pointee is transaction_safe function (C++ TM TS).
3038     //PTI_TransactionSafe = 0x20,
3039 
3040     /// PTI_Noexcept - Pointee is noexcept function (C++1z).
3041     PTI_Noexcept = 0x40,
3042   };
3043 
3044   // VMI type info flags.
3045   enum {
3046     /// VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
3047     VMI_NonDiamondRepeat = 0x1,
3048 
3049     /// VMI_DiamondShaped - Class is diamond shaped.
3050     VMI_DiamondShaped = 0x2
3051   };
3052 
3053   // Base class type info flags.
3054   enum {
3055     /// BCTI_Virtual - Base class is virtual.
3056     BCTI_Virtual = 0x1,
3057 
3058     /// BCTI_Public - Base class is public.
3059     BCTI_Public = 0x2
3060   };
3061 
3062   /// BuildTypeInfo - Build the RTTI type info struct for the given type, or
3063   /// link to an existing RTTI descriptor if one already exists.
3064   llvm::Constant *BuildTypeInfo(QualType Ty);
3065 
3066   /// BuildTypeInfo - Build the RTTI type info struct for the given type.
3067   llvm::Constant *BuildTypeInfo(
3068       QualType Ty,
3069       llvm::GlobalVariable::LinkageTypes Linkage,
3070       llvm::GlobalValue::VisibilityTypes Visibility,
3071       llvm::GlobalValue::DLLStorageClassTypes DLLStorageClass);
3072 };
3073 }
3074 
3075 llvm::GlobalVariable *ItaniumRTTIBuilder::GetAddrOfTypeName(
3076     QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage) {
3077   SmallString<256> Name;
3078   llvm::raw_svector_ostream Out(Name);
3079   CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(Ty, Out);
3080 
3081   // We know that the mangled name of the type starts at index 4 of the
3082   // mangled name of the typename, so we can just index into it in order to
3083   // get the mangled name of the type.
3084   llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
3085                                                             Name.substr(4));
3086   auto Align = CGM.getContext().getTypeAlignInChars(CGM.getContext().CharTy);
3087 
3088   llvm::GlobalVariable *GV = CGM.CreateOrReplaceCXXRuntimeVariable(
3089       Name, Init->getType(), Linkage, Align.getQuantity());
3090 
3091   GV->setInitializer(Init);
3092 
3093   return GV;
3094 }
3095 
3096 llvm::Constant *
3097 ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
3098   // Mangle the RTTI name.
3099   SmallString<256> Name;
3100   llvm::raw_svector_ostream Out(Name);
3101   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
3102 
3103   // Look for an existing global.
3104   llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name);
3105 
3106   if (!GV) {
3107     // Create a new global variable.
3108     // Note for the future: If we would ever like to do deferred emission of
3109     // RTTI, check if emitting vtables opportunistically need any adjustment.
3110 
3111     GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
3112                                   /*isConstant=*/true,
3113                                   llvm::GlobalValue::ExternalLinkage, nullptr,
3114                                   Name);
3115     const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
3116     CGM.setGVProperties(GV, RD);
3117   }
3118 
3119   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3120 }
3121 
3122 /// TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type
3123 /// info for that type is defined in the standard library.
3124 static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
3125   // Itanium C++ ABI 2.9.2:
3126   //   Basic type information (e.g. for "int", "bool", etc.) will be kept in
3127   //   the run-time support library. Specifically, the run-time support
3128   //   library should contain type_info objects for the types X, X* and
3129   //   X const*, for every X in: void, std::nullptr_t, bool, wchar_t, char,
3130   //   unsigned char, signed char, short, unsigned short, int, unsigned int,
3131   //   long, unsigned long, long long, unsigned long long, float, double,
3132   //   long double, char16_t, char32_t, and the IEEE 754r decimal and
3133   //   half-precision floating point types.
3134   //
3135   // GCC also emits RTTI for __int128.
3136   // FIXME: We do not emit RTTI information for decimal types here.
3137 
3138   // Types added here must also be added to EmitFundamentalRTTIDescriptors.
3139   switch (Ty->getKind()) {
3140     case BuiltinType::Void:
3141     case BuiltinType::NullPtr:
3142     case BuiltinType::Bool:
3143     case BuiltinType::WChar_S:
3144     case BuiltinType::WChar_U:
3145     case BuiltinType::Char_U:
3146     case BuiltinType::Char_S:
3147     case BuiltinType::UChar:
3148     case BuiltinType::SChar:
3149     case BuiltinType::Short:
3150     case BuiltinType::UShort:
3151     case BuiltinType::Int:
3152     case BuiltinType::UInt:
3153     case BuiltinType::Long:
3154     case BuiltinType::ULong:
3155     case BuiltinType::LongLong:
3156     case BuiltinType::ULongLong:
3157     case BuiltinType::Half:
3158     case BuiltinType::Float:
3159     case BuiltinType::Double:
3160     case BuiltinType::LongDouble:
3161     case BuiltinType::Float16:
3162     case BuiltinType::Float128:
3163     case BuiltinType::Char8:
3164     case BuiltinType::Char16:
3165     case BuiltinType::Char32:
3166     case BuiltinType::Int128:
3167     case BuiltinType::UInt128:
3168       return true;
3169 
3170 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
3171     case BuiltinType::Id:
3172 #include "clang/Basic/OpenCLImageTypes.def"
3173 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
3174     case BuiltinType::Id:
3175 #include "clang/Basic/OpenCLExtensionTypes.def"
3176     case BuiltinType::OCLSampler:
3177     case BuiltinType::OCLEvent:
3178     case BuiltinType::OCLClkEvent:
3179     case BuiltinType::OCLQueue:
3180     case BuiltinType::OCLReserveID:
3181 #define SVE_TYPE(Name, Id, SingletonId) \
3182     case BuiltinType::Id:
3183 #include "clang/Basic/AArch64SVEACLETypes.def"
3184 #define PPC_VECTOR_TYPE(Name, Id, Size) \
3185     case BuiltinType::Id:
3186 #include "clang/Basic/PPCTypes.def"
3187 #define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
3188 #include "clang/Basic/RISCVVTypes.def"
3189     case BuiltinType::ShortAccum:
3190     case BuiltinType::Accum:
3191     case BuiltinType::LongAccum:
3192     case BuiltinType::UShortAccum:
3193     case BuiltinType::UAccum:
3194     case BuiltinType::ULongAccum:
3195     case BuiltinType::ShortFract:
3196     case BuiltinType::Fract:
3197     case BuiltinType::LongFract:
3198     case BuiltinType::UShortFract:
3199     case BuiltinType::UFract:
3200     case BuiltinType::ULongFract:
3201     case BuiltinType::SatShortAccum:
3202     case BuiltinType::SatAccum:
3203     case BuiltinType::SatLongAccum:
3204     case BuiltinType::SatUShortAccum:
3205     case BuiltinType::SatUAccum:
3206     case BuiltinType::SatULongAccum:
3207     case BuiltinType::SatShortFract:
3208     case BuiltinType::SatFract:
3209     case BuiltinType::SatLongFract:
3210     case BuiltinType::SatUShortFract:
3211     case BuiltinType::SatUFract:
3212     case BuiltinType::SatULongFract:
3213     case BuiltinType::BFloat16:
3214       return false;
3215 
3216     case BuiltinType::Dependent:
3217 #define BUILTIN_TYPE(Id, SingletonId)
3218 #define PLACEHOLDER_TYPE(Id, SingletonId) \
3219     case BuiltinType::Id:
3220 #include "clang/AST/BuiltinTypes.def"
3221       llvm_unreachable("asking for RRTI for a placeholder type!");
3222 
3223     case BuiltinType::ObjCId:
3224     case BuiltinType::ObjCClass:
3225     case BuiltinType::ObjCSel:
3226       llvm_unreachable("FIXME: Objective-C types are unsupported!");
3227   }
3228 
3229   llvm_unreachable("Invalid BuiltinType Kind!");
3230 }
3231 
3232 static bool TypeInfoIsInStandardLibrary(const PointerType *PointerTy) {
3233   QualType PointeeTy = PointerTy->getPointeeType();
3234   const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(PointeeTy);
3235   if (!BuiltinTy)
3236     return false;
3237 
3238   // Check the qualifiers.
3239   Qualifiers Quals = PointeeTy.getQualifiers();
3240   Quals.removeConst();
3241 
3242   if (!Quals.empty())
3243     return false;
3244 
3245   return TypeInfoIsInStandardLibrary(BuiltinTy);
3246 }
3247 
3248 /// IsStandardLibraryRTTIDescriptor - Returns whether the type
3249 /// information for the given type exists in the standard library.
3250 static bool IsStandardLibraryRTTIDescriptor(QualType Ty) {
3251   // Type info for builtin types is defined in the standard library.
3252   if (const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(Ty))
3253     return TypeInfoIsInStandardLibrary(BuiltinTy);
3254 
3255   // Type info for some pointer types to builtin types is defined in the
3256   // standard library.
3257   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
3258     return TypeInfoIsInStandardLibrary(PointerTy);
3259 
3260   return false;
3261 }
3262 
3263 /// ShouldUseExternalRTTIDescriptor - Returns whether the type information for
3264 /// the given type exists somewhere else, and that we should not emit the type
3265 /// information in this translation unit.  Assumes that it is not a
3266 /// standard-library type.
3267 static bool ShouldUseExternalRTTIDescriptor(CodeGenModule &CGM,
3268                                             QualType Ty) {
3269   ASTContext &Context = CGM.getContext();
3270 
3271   // If RTTI is disabled, assume it might be disabled in the
3272   // translation unit that defines any potential key function, too.
3273   if (!Context.getLangOpts().RTTI) return false;
3274 
3275   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
3276     const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
3277     if (!RD->hasDefinition())
3278       return false;
3279 
3280     if (!RD->isDynamicClass())
3281       return false;
3282 
3283     // FIXME: this may need to be reconsidered if the key function
3284     // changes.
3285     // N.B. We must always emit the RTTI data ourselves if there exists a key
3286     // function.
3287     bool IsDLLImport = RD->hasAttr<DLLImportAttr>();
3288 
3289     // Don't import the RTTI but emit it locally.
3290     if (CGM.getTriple().isWindowsGNUEnvironment())
3291       return false;
3292 
3293     if (CGM.getVTables().isVTableExternal(RD))
3294       return IsDLLImport && !CGM.getTriple().isWindowsItaniumEnvironment()
3295                  ? false
3296                  : true;
3297 
3298     if (IsDLLImport)
3299       return true;
3300   }
3301 
3302   return false;
3303 }
3304 
3305 /// IsIncompleteClassType - Returns whether the given record type is incomplete.
3306 static bool IsIncompleteClassType(const RecordType *RecordTy) {
3307   return !RecordTy->getDecl()->isCompleteDefinition();
3308 }
3309 
3310 /// ContainsIncompleteClassType - Returns whether the given type contains an
3311 /// incomplete class type. This is true if
3312 ///
3313 ///   * The given type is an incomplete class type.
3314 ///   * The given type is a pointer type whose pointee type contains an
3315 ///     incomplete class type.
3316 ///   * The given type is a member pointer type whose class is an incomplete
3317 ///     class type.
3318 ///   * The given type is a member pointer type whoise pointee type contains an
3319 ///     incomplete class type.
3320 /// is an indirect or direct pointer to an incomplete class type.
3321 static bool ContainsIncompleteClassType(QualType Ty) {
3322   if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
3323     if (IsIncompleteClassType(RecordTy))
3324       return true;
3325   }
3326 
3327   if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
3328     return ContainsIncompleteClassType(PointerTy->getPointeeType());
3329 
3330   if (const MemberPointerType *MemberPointerTy =
3331       dyn_cast<MemberPointerType>(Ty)) {
3332     // Check if the class type is incomplete.
3333     const RecordType *ClassType = cast<RecordType>(MemberPointerTy->getClass());
3334     if (IsIncompleteClassType(ClassType))
3335       return true;
3336 
3337     return ContainsIncompleteClassType(MemberPointerTy->getPointeeType());
3338   }
3339 
3340   return false;
3341 }
3342 
3343 // CanUseSingleInheritance - Return whether the given record decl has a "single,
3344 // public, non-virtual base at offset zero (i.e. the derived class is dynamic
3345 // iff the base is)", according to Itanium C++ ABI, 2.95p6b.
3346 static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
3347   // Check the number of bases.
3348   if (RD->getNumBases() != 1)
3349     return false;
3350 
3351   // Get the base.
3352   CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin();
3353 
3354   // Check that the base is not virtual.
3355   if (Base->isVirtual())
3356     return false;
3357 
3358   // Check that the base is public.
3359   if (Base->getAccessSpecifier() != AS_public)
3360     return false;
3361 
3362   // Check that the class is dynamic iff the base is.
3363   auto *BaseDecl =
3364       cast<CXXRecordDecl>(Base->getType()->castAs<RecordType>()->getDecl());
3365   if (!BaseDecl->isEmpty() &&
3366       BaseDecl->isDynamicClass() != RD->isDynamicClass())
3367     return false;
3368 
3369   return true;
3370 }
3371 
3372 void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
3373   // abi::__class_type_info.
3374   static const char * const ClassTypeInfo =
3375     "_ZTVN10__cxxabiv117__class_type_infoE";
3376   // abi::__si_class_type_info.
3377   static const char * const SIClassTypeInfo =
3378     "_ZTVN10__cxxabiv120__si_class_type_infoE";
3379   // abi::__vmi_class_type_info.
3380   static const char * const VMIClassTypeInfo =
3381     "_ZTVN10__cxxabiv121__vmi_class_type_infoE";
3382 
3383   const char *VTableName = nullptr;
3384 
3385   switch (Ty->getTypeClass()) {
3386 #define TYPE(Class, Base)
3387 #define ABSTRACT_TYPE(Class, Base)
3388 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
3389 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
3390 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
3391 #include "clang/AST/TypeNodes.inc"
3392     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
3393 
3394   case Type::LValueReference:
3395   case Type::RValueReference:
3396     llvm_unreachable("References shouldn't get here");
3397 
3398   case Type::Auto:
3399   case Type::DeducedTemplateSpecialization:
3400     llvm_unreachable("Undeduced type shouldn't get here");
3401 
3402   case Type::Pipe:
3403     llvm_unreachable("Pipe types shouldn't get here");
3404 
3405   case Type::Builtin:
3406   case Type::ExtInt:
3407   // GCC treats vector and complex types as fundamental types.
3408   case Type::Vector:
3409   case Type::ExtVector:
3410   case Type::ConstantMatrix:
3411   case Type::Complex:
3412   case Type::Atomic:
3413   // FIXME: GCC treats block pointers as fundamental types?!
3414   case Type::BlockPointer:
3415     // abi::__fundamental_type_info.
3416     VTableName = "_ZTVN10__cxxabiv123__fundamental_type_infoE";
3417     break;
3418 
3419   case Type::ConstantArray:
3420   case Type::IncompleteArray:
3421   case Type::VariableArray:
3422     // abi::__array_type_info.
3423     VTableName = "_ZTVN10__cxxabiv117__array_type_infoE";
3424     break;
3425 
3426   case Type::FunctionNoProto:
3427   case Type::FunctionProto:
3428     // abi::__function_type_info.
3429     VTableName = "_ZTVN10__cxxabiv120__function_type_infoE";
3430     break;
3431 
3432   case Type::Enum:
3433     // abi::__enum_type_info.
3434     VTableName = "_ZTVN10__cxxabiv116__enum_type_infoE";
3435     break;
3436 
3437   case Type::Record: {
3438     const CXXRecordDecl *RD =
3439       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
3440 
3441     if (!RD->hasDefinition() || !RD->getNumBases()) {
3442       VTableName = ClassTypeInfo;
3443     } else if (CanUseSingleInheritance(RD)) {
3444       VTableName = SIClassTypeInfo;
3445     } else {
3446       VTableName = VMIClassTypeInfo;
3447     }
3448 
3449     break;
3450   }
3451 
3452   case Type::ObjCObject:
3453     // Ignore protocol qualifiers.
3454     Ty = cast<ObjCObjectType>(Ty)->getBaseType().getTypePtr();
3455 
3456     // Handle id and Class.
3457     if (isa<BuiltinType>(Ty)) {
3458       VTableName = ClassTypeInfo;
3459       break;
3460     }
3461 
3462     assert(isa<ObjCInterfaceType>(Ty));
3463     LLVM_FALLTHROUGH;
3464 
3465   case Type::ObjCInterface:
3466     if (cast<ObjCInterfaceType>(Ty)->getDecl()->getSuperClass()) {
3467       VTableName = SIClassTypeInfo;
3468     } else {
3469       VTableName = ClassTypeInfo;
3470     }
3471     break;
3472 
3473   case Type::ObjCObjectPointer:
3474   case Type::Pointer:
3475     // abi::__pointer_type_info.
3476     VTableName = "_ZTVN10__cxxabiv119__pointer_type_infoE";
3477     break;
3478 
3479   case Type::MemberPointer:
3480     // abi::__pointer_to_member_type_info.
3481     VTableName = "_ZTVN10__cxxabiv129__pointer_to_member_type_infoE";
3482     break;
3483   }
3484 
3485   llvm::Constant *VTable = nullptr;
3486 
3487   // Check if the alias exists. If it doesn't, then get or create the global.
3488   if (CGM.getItaniumVTableContext().isRelativeLayout())
3489     VTable = CGM.getModule().getNamedAlias(VTableName);
3490   if (!VTable)
3491     VTable = CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
3492 
3493   CGM.setDSOLocal(cast<llvm::GlobalValue>(VTable->stripPointerCasts()));
3494 
3495   llvm::Type *PtrDiffTy =
3496       CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
3497 
3498   // The vtable address point is 2.
3499   if (CGM.getItaniumVTableContext().isRelativeLayout()) {
3500     // The vtable address point is 8 bytes after its start:
3501     // 4 for the offset to top + 4 for the relative offset to rtti.
3502     llvm::Constant *Eight = llvm::ConstantInt::get(CGM.Int32Ty, 8);
3503     VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
3504     VTable =
3505         llvm::ConstantExpr::getInBoundsGetElementPtr(CGM.Int8Ty, VTable, Eight);
3506   } else {
3507     llvm::Constant *Two = llvm::ConstantInt::get(PtrDiffTy, 2);
3508     VTable = llvm::ConstantExpr::getInBoundsGetElementPtr(CGM.Int8PtrTy, VTable,
3509                                                           Two);
3510   }
3511   VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
3512 
3513   Fields.push_back(VTable);
3514 }
3515 
3516 /// Return the linkage that the type info and type info name constants
3517 /// should have for the given type.
3518 static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
3519                                                              QualType Ty) {
3520   // Itanium C++ ABI 2.9.5p7:
3521   //   In addition, it and all of the intermediate abi::__pointer_type_info
3522   //   structs in the chain down to the abi::__class_type_info for the
3523   //   incomplete class type must be prevented from resolving to the
3524   //   corresponding type_info structs for the complete class type, possibly
3525   //   by making them local static objects. Finally, a dummy class RTTI is
3526   //   generated for the incomplete type that will not resolve to the final
3527   //   complete class RTTI (because the latter need not exist), possibly by
3528   //   making it a local static object.
3529   if (ContainsIncompleteClassType(Ty))
3530     return llvm::GlobalValue::InternalLinkage;
3531 
3532   switch (Ty->getLinkage()) {
3533   case NoLinkage:
3534   case InternalLinkage:
3535   case UniqueExternalLinkage:
3536     return llvm::GlobalValue::InternalLinkage;
3537 
3538   case VisibleNoLinkage:
3539   case ModuleInternalLinkage:
3540   case ModuleLinkage:
3541   case ExternalLinkage:
3542     // RTTI is not enabled, which means that this type info struct is going
3543     // to be used for exception handling. Give it linkonce_odr linkage.
3544     if (!CGM.getLangOpts().RTTI)
3545       return llvm::GlobalValue::LinkOnceODRLinkage;
3546 
3547     if (const RecordType *Record = dyn_cast<RecordType>(Ty)) {
3548       const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
3549       if (RD->hasAttr<WeakAttr>())
3550         return llvm::GlobalValue::WeakODRLinkage;
3551       if (CGM.getTriple().isWindowsItaniumEnvironment())
3552         if (RD->hasAttr<DLLImportAttr>() &&
3553             ShouldUseExternalRTTIDescriptor(CGM, Ty))
3554           return llvm::GlobalValue::ExternalLinkage;
3555       // MinGW always uses LinkOnceODRLinkage for type info.
3556       if (RD->isDynamicClass() &&
3557           !CGM.getContext()
3558                .getTargetInfo()
3559                .getTriple()
3560                .isWindowsGNUEnvironment())
3561         return CGM.getVTableLinkage(RD);
3562     }
3563 
3564     return llvm::GlobalValue::LinkOnceODRLinkage;
3565   }
3566 
3567   llvm_unreachable("Invalid linkage!");
3568 }
3569 
3570 llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty) {
3571   // We want to operate on the canonical type.
3572   Ty = Ty.getCanonicalType();
3573 
3574   // Check if we've already emitted an RTTI descriptor for this type.
3575   SmallString<256> Name;
3576   llvm::raw_svector_ostream Out(Name);
3577   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
3578 
3579   llvm::GlobalVariable *OldGV = CGM.getModule().getNamedGlobal(Name);
3580   if (OldGV && !OldGV->isDeclaration()) {
3581     assert(!OldGV->hasAvailableExternallyLinkage() &&
3582            "available_externally typeinfos not yet implemented");
3583 
3584     return llvm::ConstantExpr::getBitCast(OldGV, CGM.Int8PtrTy);
3585   }
3586 
3587   // Check if there is already an external RTTI descriptor for this type.
3588   if (IsStandardLibraryRTTIDescriptor(Ty) ||
3589       ShouldUseExternalRTTIDescriptor(CGM, Ty))
3590     return GetAddrOfExternalRTTIDescriptor(Ty);
3591 
3592   // Emit the standard library with external linkage.
3593   llvm::GlobalVariable::LinkageTypes Linkage = getTypeInfoLinkage(CGM, Ty);
3594 
3595   // Give the type_info object and name the formal visibility of the
3596   // type itself.
3597   llvm::GlobalValue::VisibilityTypes llvmVisibility;
3598   if (llvm::GlobalValue::isLocalLinkage(Linkage))
3599     // If the linkage is local, only default visibility makes sense.
3600     llvmVisibility = llvm::GlobalValue::DefaultVisibility;
3601   else if (CXXABI.classifyRTTIUniqueness(Ty, Linkage) ==
3602            ItaniumCXXABI::RUK_NonUniqueHidden)
3603     llvmVisibility = llvm::GlobalValue::HiddenVisibility;
3604   else
3605     llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
3606 
3607   llvm::GlobalValue::DLLStorageClassTypes DLLStorageClass =
3608       llvm::GlobalValue::DefaultStorageClass;
3609   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
3610     auto RD = Ty->getAsCXXRecordDecl();
3611     if (RD && RD->hasAttr<DLLExportAttr>())
3612       DLLStorageClass = llvm::GlobalValue::DLLExportStorageClass;
3613   }
3614 
3615   return BuildTypeInfo(Ty, Linkage, llvmVisibility, DLLStorageClass);
3616 }
3617 
3618 llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(
3619       QualType Ty,
3620       llvm::GlobalVariable::LinkageTypes Linkage,
3621       llvm::GlobalValue::VisibilityTypes Visibility,
3622       llvm::GlobalValue::DLLStorageClassTypes DLLStorageClass) {
3623   // Add the vtable pointer.
3624   BuildVTablePointer(cast<Type>(Ty));
3625 
3626   // And the name.
3627   llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
3628   llvm::Constant *TypeNameField;
3629 
3630   // If we're supposed to demote the visibility, be sure to set a flag
3631   // to use a string comparison for type_info comparisons.
3632   ItaniumCXXABI::RTTIUniquenessKind RTTIUniqueness =
3633       CXXABI.classifyRTTIUniqueness(Ty, Linkage);
3634   if (RTTIUniqueness != ItaniumCXXABI::RUK_Unique) {
3635     // The flag is the sign bit, which on ARM64 is defined to be clear
3636     // for global pointers.  This is very ARM64-specific.
3637     TypeNameField = llvm::ConstantExpr::getPtrToInt(TypeName, CGM.Int64Ty);
3638     llvm::Constant *flag =
3639         llvm::ConstantInt::get(CGM.Int64Ty, ((uint64_t)1) << 63);
3640     TypeNameField = llvm::ConstantExpr::getAdd(TypeNameField, flag);
3641     TypeNameField =
3642         llvm::ConstantExpr::getIntToPtr(TypeNameField, CGM.Int8PtrTy);
3643   } else {
3644     TypeNameField = llvm::ConstantExpr::getBitCast(TypeName, CGM.Int8PtrTy);
3645   }
3646   Fields.push_back(TypeNameField);
3647 
3648   switch (Ty->getTypeClass()) {
3649 #define TYPE(Class, Base)
3650 #define ABSTRACT_TYPE(Class, Base)
3651 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
3652 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
3653 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
3654 #include "clang/AST/TypeNodes.inc"
3655     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
3656 
3657   // GCC treats vector types as fundamental types.
3658   case Type::Builtin:
3659   case Type::Vector:
3660   case Type::ExtVector:
3661   case Type::ConstantMatrix:
3662   case Type::Complex:
3663   case Type::BlockPointer:
3664     // Itanium C++ ABI 2.9.5p4:
3665     // abi::__fundamental_type_info adds no data members to std::type_info.
3666     break;
3667 
3668   case Type::LValueReference:
3669   case Type::RValueReference:
3670     llvm_unreachable("References shouldn't get here");
3671 
3672   case Type::Auto:
3673   case Type::DeducedTemplateSpecialization:
3674     llvm_unreachable("Undeduced type shouldn't get here");
3675 
3676   case Type::Pipe:
3677     break;
3678 
3679   case Type::ExtInt:
3680     break;
3681 
3682   case Type::ConstantArray:
3683   case Type::IncompleteArray:
3684   case Type::VariableArray:
3685     // Itanium C++ ABI 2.9.5p5:
3686     // abi::__array_type_info adds no data members to std::type_info.
3687     break;
3688 
3689   case Type::FunctionNoProto:
3690   case Type::FunctionProto:
3691     // Itanium C++ ABI 2.9.5p5:
3692     // abi::__function_type_info adds no data members to std::type_info.
3693     break;
3694 
3695   case Type::Enum:
3696     // Itanium C++ ABI 2.9.5p5:
3697     // abi::__enum_type_info adds no data members to std::type_info.
3698     break;
3699 
3700   case Type::Record: {
3701     const CXXRecordDecl *RD =
3702       cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
3703     if (!RD->hasDefinition() || !RD->getNumBases()) {
3704       // We don't need to emit any fields.
3705       break;
3706     }
3707 
3708     if (CanUseSingleInheritance(RD))
3709       BuildSIClassTypeInfo(RD);
3710     else
3711       BuildVMIClassTypeInfo(RD);
3712 
3713     break;
3714   }
3715 
3716   case Type::ObjCObject:
3717   case Type::ObjCInterface:
3718     BuildObjCObjectTypeInfo(cast<ObjCObjectType>(Ty));
3719     break;
3720 
3721   case Type::ObjCObjectPointer:
3722     BuildPointerTypeInfo(cast<ObjCObjectPointerType>(Ty)->getPointeeType());
3723     break;
3724 
3725   case Type::Pointer:
3726     BuildPointerTypeInfo(cast<PointerType>(Ty)->getPointeeType());
3727     break;
3728 
3729   case Type::MemberPointer:
3730     BuildPointerToMemberTypeInfo(cast<MemberPointerType>(Ty));
3731     break;
3732 
3733   case Type::Atomic:
3734     // No fields, at least for the moment.
3735     break;
3736   }
3737 
3738   llvm::Constant *Init = llvm::ConstantStruct::getAnon(Fields);
3739 
3740   SmallString<256> Name;
3741   llvm::raw_svector_ostream Out(Name);
3742   CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
3743   llvm::Module &M = CGM.getModule();
3744   llvm::GlobalVariable *OldGV = M.getNamedGlobal(Name);
3745   llvm::GlobalVariable *GV =
3746       new llvm::GlobalVariable(M, Init->getType(),
3747                                /*isConstant=*/true, Linkage, Init, Name);
3748 
3749   // If there's already an old global variable, replace it with the new one.
3750   if (OldGV) {
3751     GV->takeName(OldGV);
3752     llvm::Constant *NewPtr =
3753       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
3754     OldGV->replaceAllUsesWith(NewPtr);
3755     OldGV->eraseFromParent();
3756   }
3757 
3758   if (CGM.supportsCOMDAT() && GV->isWeakForLinker())
3759     GV->setComdat(M.getOrInsertComdat(GV->getName()));
3760 
3761   CharUnits Align =
3762       CGM.getContext().toCharUnitsFromBits(CGM.getTarget().getPointerAlign(0));
3763   GV->setAlignment(Align.getAsAlign());
3764 
3765   // The Itanium ABI specifies that type_info objects must be globally
3766   // unique, with one exception: if the type is an incomplete class
3767   // type or a (possibly indirect) pointer to one.  That exception
3768   // affects the general case of comparing type_info objects produced
3769   // by the typeid operator, which is why the comparison operators on
3770   // std::type_info generally use the type_info name pointers instead
3771   // of the object addresses.  However, the language's built-in uses
3772   // of RTTI generally require class types to be complete, even when
3773   // manipulating pointers to those class types.  This allows the
3774   // implementation of dynamic_cast to rely on address equality tests,
3775   // which is much faster.
3776 
3777   // All of this is to say that it's important that both the type_info
3778   // object and the type_info name be uniqued when weakly emitted.
3779 
3780   TypeName->setVisibility(Visibility);
3781   CGM.setDSOLocal(TypeName);
3782 
3783   GV->setVisibility(Visibility);
3784   CGM.setDSOLocal(GV);
3785 
3786   TypeName->setDLLStorageClass(DLLStorageClass);
3787   GV->setDLLStorageClass(DLLStorageClass);
3788 
3789   TypeName->setPartition(CGM.getCodeGenOpts().SymbolPartition);
3790   GV->setPartition(CGM.getCodeGenOpts().SymbolPartition);
3791 
3792   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3793 }
3794 
3795 /// BuildObjCObjectTypeInfo - Build the appropriate kind of type_info
3796 /// for the given Objective-C object type.
3797 void ItaniumRTTIBuilder::BuildObjCObjectTypeInfo(const ObjCObjectType *OT) {
3798   // Drop qualifiers.
3799   const Type *T = OT->getBaseType().getTypePtr();
3800   assert(isa<BuiltinType>(T) || isa<ObjCInterfaceType>(T));
3801 
3802   // The builtin types are abi::__class_type_infos and don't require
3803   // extra fields.
3804   if (isa<BuiltinType>(T)) return;
3805 
3806   ObjCInterfaceDecl *Class = cast<ObjCInterfaceType>(T)->getDecl();
3807   ObjCInterfaceDecl *Super = Class->getSuperClass();
3808 
3809   // Root classes are also __class_type_info.
3810   if (!Super) return;
3811 
3812   QualType SuperTy = CGM.getContext().getObjCInterfaceType(Super);
3813 
3814   // Everything else is single inheritance.
3815   llvm::Constant *BaseTypeInfo =
3816       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(SuperTy);
3817   Fields.push_back(BaseTypeInfo);
3818 }
3819 
3820 /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
3821 /// inheritance, according to the Itanium C++ ABI, 2.95p6b.
3822 void ItaniumRTTIBuilder::BuildSIClassTypeInfo(const CXXRecordDecl *RD) {
3823   // Itanium C++ ABI 2.9.5p6b:
3824   // It adds to abi::__class_type_info a single member pointing to the
3825   // type_info structure for the base type,
3826   llvm::Constant *BaseTypeInfo =
3827     ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(RD->bases_begin()->getType());
3828   Fields.push_back(BaseTypeInfo);
3829 }
3830 
3831 namespace {
3832   /// SeenBases - Contains virtual and non-virtual bases seen when traversing
3833   /// a class hierarchy.
3834   struct SeenBases {
3835     llvm::SmallPtrSet<const CXXRecordDecl *, 16> NonVirtualBases;
3836     llvm::SmallPtrSet<const CXXRecordDecl *, 16> VirtualBases;
3837   };
3838 }
3839 
3840 /// ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in
3841 /// abi::__vmi_class_type_info.
3842 ///
3843 static unsigned ComputeVMIClassTypeInfoFlags(const CXXBaseSpecifier *Base,
3844                                              SeenBases &Bases) {
3845 
3846   unsigned Flags = 0;
3847 
3848   auto *BaseDecl =
3849       cast<CXXRecordDecl>(Base->getType()->castAs<RecordType>()->getDecl());
3850 
3851   if (Base->isVirtual()) {
3852     // Mark the virtual base as seen.
3853     if (!Bases.VirtualBases.insert(BaseDecl).second) {
3854       // If this virtual base has been seen before, then the class is diamond
3855       // shaped.
3856       Flags |= ItaniumRTTIBuilder::VMI_DiamondShaped;
3857     } else {
3858       if (Bases.NonVirtualBases.count(BaseDecl))
3859         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3860     }
3861   } else {
3862     // Mark the non-virtual base as seen.
3863     if (!Bases.NonVirtualBases.insert(BaseDecl).second) {
3864       // If this non-virtual base has been seen before, then the class has non-
3865       // diamond shaped repeated inheritance.
3866       Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3867     } else {
3868       if (Bases.VirtualBases.count(BaseDecl))
3869         Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
3870     }
3871   }
3872 
3873   // Walk all bases.
3874   for (const auto &I : BaseDecl->bases())
3875     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3876 
3877   return Flags;
3878 }
3879 
3880 static unsigned ComputeVMIClassTypeInfoFlags(const CXXRecordDecl *RD) {
3881   unsigned Flags = 0;
3882   SeenBases Bases;
3883 
3884   // Walk all bases.
3885   for (const auto &I : RD->bases())
3886     Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
3887 
3888   return Flags;
3889 }
3890 
3891 /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
3892 /// classes with bases that do not satisfy the abi::__si_class_type_info
3893 /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
3894 void ItaniumRTTIBuilder::BuildVMIClassTypeInfo(const CXXRecordDecl *RD) {
3895   llvm::Type *UnsignedIntLTy =
3896     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
3897 
3898   // Itanium C++ ABI 2.9.5p6c:
3899   //   __flags is a word with flags describing details about the class
3900   //   structure, which may be referenced by using the __flags_masks
3901   //   enumeration. These flags refer to both direct and indirect bases.
3902   unsigned Flags = ComputeVMIClassTypeInfoFlags(RD);
3903   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
3904 
3905   // Itanium C++ ABI 2.9.5p6c:
3906   //   __base_count is a word with the number of direct proper base class
3907   //   descriptions that follow.
3908   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, RD->getNumBases()));
3909 
3910   if (!RD->getNumBases())
3911     return;
3912 
3913   // Now add the base class descriptions.
3914 
3915   // Itanium C++ ABI 2.9.5p6c:
3916   //   __base_info[] is an array of base class descriptions -- one for every
3917   //   direct proper base. Each description is of the type:
3918   //
3919   //   struct abi::__base_class_type_info {
3920   //   public:
3921   //     const __class_type_info *__base_type;
3922   //     long __offset_flags;
3923   //
3924   //     enum __offset_flags_masks {
3925   //       __virtual_mask = 0x1,
3926   //       __public_mask = 0x2,
3927   //       __offset_shift = 8
3928   //     };
3929   //   };
3930 
3931   // If we're in mingw and 'long' isn't wide enough for a pointer, use 'long
3932   // long' instead of 'long' for __offset_flags. libstdc++abi uses long long on
3933   // LLP64 platforms.
3934   // FIXME: Consider updating libc++abi to match, and extend this logic to all
3935   // LLP64 platforms.
3936   QualType OffsetFlagsTy = CGM.getContext().LongTy;
3937   const TargetInfo &TI = CGM.getContext().getTargetInfo();
3938   if (TI.getTriple().isOSCygMing() && TI.getPointerWidth(0) > TI.getLongWidth())
3939     OffsetFlagsTy = CGM.getContext().LongLongTy;
3940   llvm::Type *OffsetFlagsLTy =
3941       CGM.getTypes().ConvertType(OffsetFlagsTy);
3942 
3943   for (const auto &Base : RD->bases()) {
3944     // The __base_type member points to the RTTI for the base type.
3945     Fields.push_back(ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(Base.getType()));
3946 
3947     auto *BaseDecl =
3948         cast<CXXRecordDecl>(Base.getType()->castAs<RecordType>()->getDecl());
3949 
3950     int64_t OffsetFlags = 0;
3951 
3952     // All but the lower 8 bits of __offset_flags are a signed offset.
3953     // For a non-virtual base, this is the offset in the object of the base
3954     // subobject. For a virtual base, this is the offset in the virtual table of
3955     // the virtual base offset for the virtual base referenced (negative).
3956     CharUnits Offset;
3957     if (Base.isVirtual())
3958       Offset =
3959         CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(RD, BaseDecl);
3960     else {
3961       const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
3962       Offset = Layout.getBaseClassOffset(BaseDecl);
3963     };
3964 
3965     OffsetFlags = uint64_t(Offset.getQuantity()) << 8;
3966 
3967     // The low-order byte of __offset_flags contains flags, as given by the
3968     // masks from the enumeration __offset_flags_masks.
3969     if (Base.isVirtual())
3970       OffsetFlags |= BCTI_Virtual;
3971     if (Base.getAccessSpecifier() == AS_public)
3972       OffsetFlags |= BCTI_Public;
3973 
3974     Fields.push_back(llvm::ConstantInt::get(OffsetFlagsLTy, OffsetFlags));
3975   }
3976 }
3977 
3978 /// Compute the flags for a __pbase_type_info, and remove the corresponding
3979 /// pieces from \p Type.
3980 static unsigned extractPBaseFlags(ASTContext &Ctx, QualType &Type) {
3981   unsigned Flags = 0;
3982 
3983   if (Type.isConstQualified())
3984     Flags |= ItaniumRTTIBuilder::PTI_Const;
3985   if (Type.isVolatileQualified())
3986     Flags |= ItaniumRTTIBuilder::PTI_Volatile;
3987   if (Type.isRestrictQualified())
3988     Flags |= ItaniumRTTIBuilder::PTI_Restrict;
3989   Type = Type.getUnqualifiedType();
3990 
3991   // Itanium C++ ABI 2.9.5p7:
3992   //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
3993   //   incomplete class type, the incomplete target type flag is set.
3994   if (ContainsIncompleteClassType(Type))
3995     Flags |= ItaniumRTTIBuilder::PTI_Incomplete;
3996 
3997   if (auto *Proto = Type->getAs<FunctionProtoType>()) {
3998     if (Proto->isNothrow()) {
3999       Flags |= ItaniumRTTIBuilder::PTI_Noexcept;
4000       Type = Ctx.getFunctionTypeWithExceptionSpec(Type, EST_None);
4001     }
4002   }
4003 
4004   return Flags;
4005 }
4006 
4007 /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct,
4008 /// used for pointer types.
4009 void ItaniumRTTIBuilder::BuildPointerTypeInfo(QualType PointeeTy) {
4010   // Itanium C++ ABI 2.9.5p7:
4011   //   __flags is a flag word describing the cv-qualification and other
4012   //   attributes of the type pointed to
4013   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
4014 
4015   llvm::Type *UnsignedIntLTy =
4016     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
4017   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
4018 
4019   // Itanium C++ ABI 2.9.5p7:
4020   //  __pointee is a pointer to the std::type_info derivation for the
4021   //  unqualified type being pointed to.
4022   llvm::Constant *PointeeTypeInfo =
4023       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
4024   Fields.push_back(PointeeTypeInfo);
4025 }
4026 
4027 /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
4028 /// struct, used for member pointer types.
4029 void
4030 ItaniumRTTIBuilder::BuildPointerToMemberTypeInfo(const MemberPointerType *Ty) {
4031   QualType PointeeTy = Ty->getPointeeType();
4032 
4033   // Itanium C++ ABI 2.9.5p7:
4034   //   __flags is a flag word describing the cv-qualification and other
4035   //   attributes of the type pointed to.
4036   unsigned Flags = extractPBaseFlags(CGM.getContext(), PointeeTy);
4037 
4038   const RecordType *ClassType = cast<RecordType>(Ty->getClass());
4039   if (IsIncompleteClassType(ClassType))
4040     Flags |= PTI_ContainingClassIncomplete;
4041 
4042   llvm::Type *UnsignedIntLTy =
4043     CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
4044   Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
4045 
4046   // Itanium C++ ABI 2.9.5p7:
4047   //   __pointee is a pointer to the std::type_info derivation for the
4048   //   unqualified type being pointed to.
4049   llvm::Constant *PointeeTypeInfo =
4050       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(PointeeTy);
4051   Fields.push_back(PointeeTypeInfo);
4052 
4053   // Itanium C++ ABI 2.9.5p9:
4054   //   __context is a pointer to an abi::__class_type_info corresponding to the
4055   //   class type containing the member pointed to
4056   //   (e.g., the "A" in "int A::*").
4057   Fields.push_back(
4058       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));
4059 }
4060 
4061 llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {
4062   return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);
4063 }
4064 
4065 void ItaniumCXXABI::EmitFundamentalRTTIDescriptors(const CXXRecordDecl *RD) {
4066   // Types added here must also be added to TypeInfoIsInStandardLibrary.
4067   QualType FundamentalTypes[] = {
4068       getContext().VoidTy,             getContext().NullPtrTy,
4069       getContext().BoolTy,             getContext().WCharTy,
4070       getContext().CharTy,             getContext().UnsignedCharTy,
4071       getContext().SignedCharTy,       getContext().ShortTy,
4072       getContext().UnsignedShortTy,    getContext().IntTy,
4073       getContext().UnsignedIntTy,      getContext().LongTy,
4074       getContext().UnsignedLongTy,     getContext().LongLongTy,
4075       getContext().UnsignedLongLongTy, getContext().Int128Ty,
4076       getContext().UnsignedInt128Ty,   getContext().HalfTy,
4077       getContext().FloatTy,            getContext().DoubleTy,
4078       getContext().LongDoubleTy,       getContext().Float128Ty,
4079       getContext().Char8Ty,            getContext().Char16Ty,
4080       getContext().Char32Ty
4081   };
4082   llvm::GlobalValue::DLLStorageClassTypes DLLStorageClass =
4083       RD->hasAttr<DLLExportAttr>()
4084       ? llvm::GlobalValue::DLLExportStorageClass
4085       : llvm::GlobalValue::DefaultStorageClass;
4086   llvm::GlobalValue::VisibilityTypes Visibility =
4087       CodeGenModule::GetLLVMVisibility(RD->getVisibility());
4088   for (const QualType &FundamentalType : FundamentalTypes) {
4089     QualType PointerType = getContext().getPointerType(FundamentalType);
4090     QualType PointerTypeConst = getContext().getPointerType(
4091         FundamentalType.withConst());
4092     for (QualType Type : {FundamentalType, PointerType, PointerTypeConst})
4093       ItaniumRTTIBuilder(*this).BuildTypeInfo(
4094           Type, llvm::GlobalValue::ExternalLinkage,
4095           Visibility, DLLStorageClass);
4096   }
4097 }
4098 
4099 /// What sort of uniqueness rules should we use for the RTTI for the
4100 /// given type?
4101 ItaniumCXXABI::RTTIUniquenessKind ItaniumCXXABI::classifyRTTIUniqueness(
4102     QualType CanTy, llvm::GlobalValue::LinkageTypes Linkage) const {
4103   if (shouldRTTIBeUnique())
4104     return RUK_Unique;
4105 
4106   // It's only necessary for linkonce_odr or weak_odr linkage.
4107   if (Linkage != llvm::GlobalValue::LinkOnceODRLinkage &&
4108       Linkage != llvm::GlobalValue::WeakODRLinkage)
4109     return RUK_Unique;
4110 
4111   // It's only necessary with default visibility.
4112   if (CanTy->getVisibility() != DefaultVisibility)
4113     return RUK_Unique;
4114 
4115   // If we're not required to publish this symbol, hide it.
4116   if (Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
4117     return RUK_NonUniqueHidden;
4118 
4119   // If we're required to publish this symbol, as we might be under an
4120   // explicit instantiation, leave it with default visibility but
4121   // enable string-comparisons.
4122   assert(Linkage == llvm::GlobalValue::WeakODRLinkage);
4123   return RUK_NonUniqueVisible;
4124 }
4125 
4126 // Find out how to codegen the complete destructor and constructor
4127 namespace {
4128 enum class StructorCodegen { Emit, RAUW, Alias, COMDAT };
4129 }
4130 static StructorCodegen getCodegenToUse(CodeGenModule &CGM,
4131                                        const CXXMethodDecl *MD) {
4132   if (!CGM.getCodeGenOpts().CXXCtorDtorAliases)
4133     return StructorCodegen::Emit;
4134 
4135   // The complete and base structors are not equivalent if there are any virtual
4136   // bases, so emit separate functions.
4137   if (MD->getParent()->getNumVBases())
4138     return StructorCodegen::Emit;
4139 
4140   GlobalDecl AliasDecl;
4141   if (const auto *DD = dyn_cast<CXXDestructorDecl>(MD)) {
4142     AliasDecl = GlobalDecl(DD, Dtor_Complete);
4143   } else {
4144     const auto *CD = cast<CXXConstructorDecl>(MD);
4145     AliasDecl = GlobalDecl(CD, Ctor_Complete);
4146   }
4147   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
4148 
4149   if (llvm::GlobalValue::isDiscardableIfUnused(Linkage))
4150     return StructorCodegen::RAUW;
4151 
4152   // FIXME: Should we allow available_externally aliases?
4153   if (!llvm::GlobalAlias::isValidLinkage(Linkage))
4154     return StructorCodegen::RAUW;
4155 
4156   if (llvm::GlobalValue::isWeakForLinker(Linkage)) {
4157     // Only ELF and wasm support COMDATs with arbitrary names (C5/D5).
4158     if (CGM.getTarget().getTriple().isOSBinFormatELF() ||
4159         CGM.getTarget().getTriple().isOSBinFormatWasm())
4160       return StructorCodegen::COMDAT;
4161     return StructorCodegen::Emit;
4162   }
4163 
4164   return StructorCodegen::Alias;
4165 }
4166 
4167 static void emitConstructorDestructorAlias(CodeGenModule &CGM,
4168                                            GlobalDecl AliasDecl,
4169                                            GlobalDecl TargetDecl) {
4170   llvm::GlobalValue::LinkageTypes Linkage = CGM.getFunctionLinkage(AliasDecl);
4171 
4172   StringRef MangledName = CGM.getMangledName(AliasDecl);
4173   llvm::GlobalValue *Entry = CGM.GetGlobalValue(MangledName);
4174   if (Entry && !Entry->isDeclaration())
4175     return;
4176 
4177   auto *Aliasee = cast<llvm::GlobalValue>(CGM.GetAddrOfGlobal(TargetDecl));
4178 
4179   // Create the alias with no name.
4180   auto *Alias = llvm::GlobalAlias::create(Linkage, "", Aliasee);
4181 
4182   // Constructors and destructors are always unnamed_addr.
4183   Alias->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
4184 
4185   // Switch any previous uses to the alias.
4186   if (Entry) {
4187     assert(Entry->getType() == Aliasee->getType() &&
4188            "declaration exists with different type");
4189     Alias->takeName(Entry);
4190     Entry->replaceAllUsesWith(Alias);
4191     Entry->eraseFromParent();
4192   } else {
4193     Alias->setName(MangledName);
4194   }
4195 
4196   // Finally, set up the alias with its proper name and attributes.
4197   CGM.SetCommonAttributes(AliasDecl, Alias);
4198 }
4199 
4200 void ItaniumCXXABI::emitCXXStructor(GlobalDecl GD) {
4201   auto *MD = cast<CXXMethodDecl>(GD.getDecl());
4202   auto *CD = dyn_cast<CXXConstructorDecl>(MD);
4203   const CXXDestructorDecl *DD = CD ? nullptr : cast<CXXDestructorDecl>(MD);
4204 
4205   StructorCodegen CGType = getCodegenToUse(CGM, MD);
4206 
4207   if (CD ? GD.getCtorType() == Ctor_Complete
4208          : GD.getDtorType() == Dtor_Complete) {
4209     GlobalDecl BaseDecl;
4210     if (CD)
4211       BaseDecl = GD.getWithCtorType(Ctor_Base);
4212     else
4213       BaseDecl = GD.getWithDtorType(Dtor_Base);
4214 
4215     if (CGType == StructorCodegen::Alias || CGType == StructorCodegen::COMDAT) {
4216       emitConstructorDestructorAlias(CGM, GD, BaseDecl);
4217       return;
4218     }
4219 
4220     if (CGType == StructorCodegen::RAUW) {
4221       StringRef MangledName = CGM.getMangledName(GD);
4222       auto *Aliasee = CGM.GetAddrOfGlobal(BaseDecl);
4223       CGM.addReplacement(MangledName, Aliasee);
4224       return;
4225     }
4226   }
4227 
4228   // The base destructor is equivalent to the base destructor of its
4229   // base class if there is exactly one non-virtual base class with a
4230   // non-trivial destructor, there are no fields with a non-trivial
4231   // destructor, and the body of the destructor is trivial.
4232   if (DD && GD.getDtorType() == Dtor_Base &&
4233       CGType != StructorCodegen::COMDAT &&
4234       !CGM.TryEmitBaseDestructorAsAlias(DD))
4235     return;
4236 
4237   // FIXME: The deleting destructor is equivalent to the selected operator
4238   // delete if:
4239   //  * either the delete is a destroying operator delete or the destructor
4240   //    would be trivial if it weren't virtual,
4241   //  * the conversion from the 'this' parameter to the first parameter of the
4242   //    destructor is equivalent to a bitcast,
4243   //  * the destructor does not have an implicit "this" return, and
4244   //  * the operator delete has the same calling convention and IR function type
4245   //    as the destructor.
4246   // In such cases we should try to emit the deleting dtor as an alias to the
4247   // selected 'operator delete'.
4248 
4249   llvm::Function *Fn = CGM.codegenCXXStructor(GD);
4250 
4251   if (CGType == StructorCodegen::COMDAT) {
4252     SmallString<256> Buffer;
4253     llvm::raw_svector_ostream Out(Buffer);
4254     if (DD)
4255       getMangleContext().mangleCXXDtorComdat(DD, Out);
4256     else
4257       getMangleContext().mangleCXXCtorComdat(CD, Out);
4258     llvm::Comdat *C = CGM.getModule().getOrInsertComdat(Out.str());
4259     Fn->setComdat(C);
4260   } else {
4261     CGM.maybeSetTrivialComdat(*MD, *Fn);
4262   }
4263 }
4264 
4265 static llvm::FunctionCallee getBeginCatchFn(CodeGenModule &CGM) {
4266   // void *__cxa_begin_catch(void*);
4267   llvm::FunctionType *FTy = llvm::FunctionType::get(
4268       CGM.Int8PtrTy, CGM.Int8PtrTy, /*isVarArg=*/false);
4269 
4270   return CGM.CreateRuntimeFunction(FTy, "__cxa_begin_catch");
4271 }
4272 
4273 static llvm::FunctionCallee getEndCatchFn(CodeGenModule &CGM) {
4274   // void __cxa_end_catch();
4275   llvm::FunctionType *FTy =
4276       llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
4277 
4278   return CGM.CreateRuntimeFunction(FTy, "__cxa_end_catch");
4279 }
4280 
4281 static llvm::FunctionCallee getGetExceptionPtrFn(CodeGenModule &CGM) {
4282   // void *__cxa_get_exception_ptr(void*);
4283   llvm::FunctionType *FTy = llvm::FunctionType::get(
4284       CGM.Int8PtrTy, CGM.Int8PtrTy, /*isVarArg=*/false);
4285 
4286   return CGM.CreateRuntimeFunction(FTy, "__cxa_get_exception_ptr");
4287 }
4288 
4289 namespace {
4290   /// A cleanup to call __cxa_end_catch.  In many cases, the caught
4291   /// exception type lets us state definitively that the thrown exception
4292   /// type does not have a destructor.  In particular:
4293   ///   - Catch-alls tell us nothing, so we have to conservatively
4294   ///     assume that the thrown exception might have a destructor.
4295   ///   - Catches by reference behave according to their base types.
4296   ///   - Catches of non-record types will only trigger for exceptions
4297   ///     of non-record types, which never have destructors.
4298   ///   - Catches of record types can trigger for arbitrary subclasses
4299   ///     of the caught type, so we have to assume the actual thrown
4300   ///     exception type might have a throwing destructor, even if the
4301   ///     caught type's destructor is trivial or nothrow.
4302   struct CallEndCatch final : EHScopeStack::Cleanup {
4303     CallEndCatch(bool MightThrow) : MightThrow(MightThrow) {}
4304     bool MightThrow;
4305 
4306     void Emit(CodeGenFunction &CGF, Flags flags) override {
4307       if (!MightThrow) {
4308         CGF.EmitNounwindRuntimeCall(getEndCatchFn(CGF.CGM));
4309         return;
4310       }
4311 
4312       CGF.EmitRuntimeCallOrInvoke(getEndCatchFn(CGF.CGM));
4313     }
4314   };
4315 }
4316 
4317 /// Emits a call to __cxa_begin_catch and enters a cleanup to call
4318 /// __cxa_end_catch.
4319 ///
4320 /// \param EndMightThrow - true if __cxa_end_catch might throw
4321 static llvm::Value *CallBeginCatch(CodeGenFunction &CGF,
4322                                    llvm::Value *Exn,
4323                                    bool EndMightThrow) {
4324   llvm::CallInst *call =
4325     CGF.EmitNounwindRuntimeCall(getBeginCatchFn(CGF.CGM), Exn);
4326 
4327   CGF.EHStack.pushCleanup<CallEndCatch>(NormalAndEHCleanup, EndMightThrow);
4328 
4329   return call;
4330 }
4331 
4332 /// A "special initializer" callback for initializing a catch
4333 /// parameter during catch initialization.
4334 static void InitCatchParam(CodeGenFunction &CGF,
4335                            const VarDecl &CatchParam,
4336                            Address ParamAddr,
4337                            SourceLocation Loc) {
4338   // Load the exception from where the landing pad saved it.
4339   llvm::Value *Exn = CGF.getExceptionFromSlot();
4340 
4341   CanQualType CatchType =
4342     CGF.CGM.getContext().getCanonicalType(CatchParam.getType());
4343   llvm::Type *LLVMCatchTy = CGF.ConvertTypeForMem(CatchType);
4344 
4345   // If we're catching by reference, we can just cast the object
4346   // pointer to the appropriate pointer.
4347   if (isa<ReferenceType>(CatchType)) {
4348     QualType CaughtType = cast<ReferenceType>(CatchType)->getPointeeType();
4349     bool EndCatchMightThrow = CaughtType->isRecordType();
4350 
4351     // __cxa_begin_catch returns the adjusted object pointer.
4352     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, EndCatchMightThrow);
4353 
4354     // We have no way to tell the personality function that we're
4355     // catching by reference, so if we're catching a pointer,
4356     // __cxa_begin_catch will actually return that pointer by value.
4357     if (const PointerType *PT = dyn_cast<PointerType>(CaughtType)) {
4358       QualType PointeeType = PT->getPointeeType();
4359 
4360       // When catching by reference, generally we should just ignore
4361       // this by-value pointer and use the exception object instead.
4362       if (!PointeeType->isRecordType()) {
4363 
4364         // Exn points to the struct _Unwind_Exception header, which
4365         // we have to skip past in order to reach the exception data.
4366         unsigned HeaderSize =
4367           CGF.CGM.getTargetCodeGenInfo().getSizeOfUnwindException();
4368         AdjustedExn = CGF.Builder.CreateConstGEP1_32(Exn, HeaderSize);
4369 
4370       // However, if we're catching a pointer-to-record type that won't
4371       // work, because the personality function might have adjusted
4372       // the pointer.  There's actually no way for us to fully satisfy
4373       // the language/ABI contract here:  we can't use Exn because it
4374       // might have the wrong adjustment, but we can't use the by-value
4375       // pointer because it's off by a level of abstraction.
4376       //
4377       // The current solution is to dump the adjusted pointer into an
4378       // alloca, which breaks language semantics (because changing the
4379       // pointer doesn't change the exception) but at least works.
4380       // The better solution would be to filter out non-exact matches
4381       // and rethrow them, but this is tricky because the rethrow
4382       // really needs to be catchable by other sites at this landing
4383       // pad.  The best solution is to fix the personality function.
4384       } else {
4385         // Pull the pointer for the reference type off.
4386         llvm::Type *PtrTy =
4387           cast<llvm::PointerType>(LLVMCatchTy)->getElementType();
4388 
4389         // Create the temporary and write the adjusted pointer into it.
4390         Address ExnPtrTmp =
4391           CGF.CreateTempAlloca(PtrTy, CGF.getPointerAlign(), "exn.byref.tmp");
4392         llvm::Value *Casted = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
4393         CGF.Builder.CreateStore(Casted, ExnPtrTmp);
4394 
4395         // Bind the reference to the temporary.
4396         AdjustedExn = ExnPtrTmp.getPointer();
4397       }
4398     }
4399 
4400     llvm::Value *ExnCast =
4401       CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.byref");
4402     CGF.Builder.CreateStore(ExnCast, ParamAddr);
4403     return;
4404   }
4405 
4406   // Scalars and complexes.
4407   TypeEvaluationKind TEK = CGF.getEvaluationKind(CatchType);
4408   if (TEK != TEK_Aggregate) {
4409     llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, false);
4410 
4411     // If the catch type is a pointer type, __cxa_begin_catch returns
4412     // the pointer by value.
4413     if (CatchType->hasPointerRepresentation()) {
4414       llvm::Value *CastExn =
4415         CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.casted");
4416 
4417       switch (CatchType.getQualifiers().getObjCLifetime()) {
4418       case Qualifiers::OCL_Strong:
4419         CastExn = CGF.EmitARCRetainNonBlock(CastExn);
4420         LLVM_FALLTHROUGH;
4421 
4422       case Qualifiers::OCL_None:
4423       case Qualifiers::OCL_ExplicitNone:
4424       case Qualifiers::OCL_Autoreleasing:
4425         CGF.Builder.CreateStore(CastExn, ParamAddr);
4426         return;
4427 
4428       case Qualifiers::OCL_Weak:
4429         CGF.EmitARCInitWeak(ParamAddr, CastExn);
4430         return;
4431       }
4432       llvm_unreachable("bad ownership qualifier!");
4433     }
4434 
4435     // Otherwise, it returns a pointer into the exception object.
4436 
4437     llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
4438     llvm::Value *Cast = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy);
4439 
4440     LValue srcLV = CGF.MakeNaturalAlignAddrLValue(Cast, CatchType);
4441     LValue destLV = CGF.MakeAddrLValue(ParamAddr, CatchType);
4442     switch (TEK) {
4443     case TEK_Complex:
4444       CGF.EmitStoreOfComplex(CGF.EmitLoadOfComplex(srcLV, Loc), destLV,
4445                              /*init*/ true);
4446       return;
4447     case TEK_Scalar: {
4448       llvm::Value *ExnLoad = CGF.EmitLoadOfScalar(srcLV, Loc);
4449       CGF.EmitStoreOfScalar(ExnLoad, destLV, /*init*/ true);
4450       return;
4451     }
4452     case TEK_Aggregate:
4453       llvm_unreachable("evaluation kind filtered out!");
4454     }
4455     llvm_unreachable("bad evaluation kind");
4456   }
4457 
4458   assert(isa<RecordType>(CatchType) && "unexpected catch type!");
4459   auto catchRD = CatchType->getAsCXXRecordDecl();
4460   CharUnits caughtExnAlignment = CGF.CGM.getClassPointerAlignment(catchRD);
4461 
4462   llvm::Type *PtrTy = LLVMCatchTy->getPointerTo(0); // addrspace 0 ok
4463 
4464   // Check for a copy expression.  If we don't have a copy expression,
4465   // that means a trivial copy is okay.
4466   const Expr *copyExpr = CatchParam.getInit();
4467   if (!copyExpr) {
4468     llvm::Value *rawAdjustedExn = CallBeginCatch(CGF, Exn, true);
4469     Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
4470                         caughtExnAlignment);
4471     LValue Dest = CGF.MakeAddrLValue(ParamAddr, CatchType);
4472     LValue Src = CGF.MakeAddrLValue(adjustedExn, CatchType);
4473     CGF.EmitAggregateCopy(Dest, Src, CatchType, AggValueSlot::DoesNotOverlap);
4474     return;
4475   }
4476 
4477   // We have to call __cxa_get_exception_ptr to get the adjusted
4478   // pointer before copying.
4479   llvm::CallInst *rawAdjustedExn =
4480     CGF.EmitNounwindRuntimeCall(getGetExceptionPtrFn(CGF.CGM), Exn);
4481 
4482   // Cast that to the appropriate type.
4483   Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy),
4484                       caughtExnAlignment);
4485 
4486   // The copy expression is defined in terms of an OpaqueValueExpr.
4487   // Find it and map it to the adjusted expression.
4488   CodeGenFunction::OpaqueValueMapping
4489     opaque(CGF, OpaqueValueExpr::findInCopyConstruct(copyExpr),
4490            CGF.MakeAddrLValue(adjustedExn, CatchParam.getType()));
4491 
4492   // Call the copy ctor in a terminate scope.
4493   CGF.EHStack.pushTerminate();
4494 
4495   // Perform the copy construction.
4496   CGF.EmitAggExpr(copyExpr,
4497                   AggValueSlot::forAddr(ParamAddr, Qualifiers(),
4498                                         AggValueSlot::IsNotDestructed,
4499                                         AggValueSlot::DoesNotNeedGCBarriers,
4500                                         AggValueSlot::IsNotAliased,
4501                                         AggValueSlot::DoesNotOverlap));
4502 
4503   // Leave the terminate scope.
4504   CGF.EHStack.popTerminate();
4505 
4506   // Undo the opaque value mapping.
4507   opaque.pop();
4508 
4509   // Finally we can call __cxa_begin_catch.
4510   CallBeginCatch(CGF, Exn, true);
4511 }
4512 
4513 /// Begins a catch statement by initializing the catch variable and
4514 /// calling __cxa_begin_catch.
4515 void ItaniumCXXABI::emitBeginCatch(CodeGenFunction &CGF,
4516                                    const CXXCatchStmt *S) {
4517   // We have to be very careful with the ordering of cleanups here:
4518   //   C++ [except.throw]p4:
4519   //     The destruction [of the exception temporary] occurs
4520   //     immediately after the destruction of the object declared in
4521   //     the exception-declaration in the handler.
4522   //
4523   // So the precise ordering is:
4524   //   1.  Construct catch variable.
4525   //   2.  __cxa_begin_catch
4526   //   3.  Enter __cxa_end_catch cleanup
4527   //   4.  Enter dtor cleanup
4528   //
4529   // We do this by using a slightly abnormal initialization process.
4530   // Delegation sequence:
4531   //   - ExitCXXTryStmt opens a RunCleanupsScope
4532   //     - EmitAutoVarAlloca creates the variable and debug info
4533   //       - InitCatchParam initializes the variable from the exception
4534   //       - CallBeginCatch calls __cxa_begin_catch
4535   //       - CallBeginCatch enters the __cxa_end_catch cleanup
4536   //     - EmitAutoVarCleanups enters the variable destructor cleanup
4537   //   - EmitCXXTryStmt emits the code for the catch body
4538   //   - EmitCXXTryStmt close the RunCleanupsScope
4539 
4540   VarDecl *CatchParam = S->getExceptionDecl();
4541   if (!CatchParam) {
4542     llvm::Value *Exn = CGF.getExceptionFromSlot();
4543     CallBeginCatch(CGF, Exn, true);
4544     return;
4545   }
4546 
4547   // Emit the local.
4548   CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam);
4549   InitCatchParam(CGF, *CatchParam, var.getObjectAddress(CGF), S->getBeginLoc());
4550   CGF.EmitAutoVarCleanups(var);
4551 }
4552 
4553 /// Get or define the following function:
4554 ///   void @__clang_call_terminate(i8* %exn) nounwind noreturn
4555 /// This code is used only in C++.
4556 static llvm::FunctionCallee getClangCallTerminateFn(CodeGenModule &CGM) {
4557   llvm::FunctionType *fnTy =
4558     llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*isVarArg=*/false);
4559   llvm::FunctionCallee fnRef = CGM.CreateRuntimeFunction(
4560       fnTy, "__clang_call_terminate", llvm::AttributeList(), /*Local=*/true);
4561   llvm::Function *fn =
4562       cast<llvm::Function>(fnRef.getCallee()->stripPointerCasts());
4563   if (fn->empty()) {
4564     fn->setDoesNotThrow();
4565     fn->setDoesNotReturn();
4566 
4567     // What we really want is to massively penalize inlining without
4568     // forbidding it completely.  The difference between that and
4569     // 'noinline' is negligible.
4570     fn->addFnAttr(llvm::Attribute::NoInline);
4571 
4572     // Allow this function to be shared across translation units, but
4573     // we don't want it to turn into an exported symbol.
4574     fn->setLinkage(llvm::Function::LinkOnceODRLinkage);
4575     fn->setVisibility(llvm::Function::HiddenVisibility);
4576     if (CGM.supportsCOMDAT())
4577       fn->setComdat(CGM.getModule().getOrInsertComdat(fn->getName()));
4578 
4579     // Set up the function.
4580     llvm::BasicBlock *entry =
4581         llvm::BasicBlock::Create(CGM.getLLVMContext(), "", fn);
4582     CGBuilderTy builder(CGM, entry);
4583 
4584     // Pull the exception pointer out of the parameter list.
4585     llvm::Value *exn = &*fn->arg_begin();
4586 
4587     // Call __cxa_begin_catch(exn).
4588     llvm::CallInst *catchCall = builder.CreateCall(getBeginCatchFn(CGM), exn);
4589     catchCall->setDoesNotThrow();
4590     catchCall->setCallingConv(CGM.getRuntimeCC());
4591 
4592     // Call std::terminate().
4593     llvm::CallInst *termCall = builder.CreateCall(CGM.getTerminateFn());
4594     termCall->setDoesNotThrow();
4595     termCall->setDoesNotReturn();
4596     termCall->setCallingConv(CGM.getRuntimeCC());
4597 
4598     // std::terminate cannot return.
4599     builder.CreateUnreachable();
4600   }
4601   return fnRef;
4602 }
4603 
4604 llvm::CallInst *
4605 ItaniumCXXABI::emitTerminateForUnexpectedException(CodeGenFunction &CGF,
4606                                                    llvm::Value *Exn) {
4607   // In C++, we want to call __cxa_begin_catch() before terminating.
4608   if (Exn) {
4609     assert(CGF.CGM.getLangOpts().CPlusPlus);
4610     return CGF.EmitNounwindRuntimeCall(getClangCallTerminateFn(CGF.CGM), Exn);
4611   }
4612   return CGF.EmitNounwindRuntimeCall(CGF.CGM.getTerminateFn());
4613 }
4614 
4615 std::pair<llvm::Value *, const CXXRecordDecl *>
4616 ItaniumCXXABI::LoadVTablePtr(CodeGenFunction &CGF, Address This,
4617                              const CXXRecordDecl *RD) {
4618   return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD};
4619 }
4620 
4621 void WebAssemblyCXXABI::emitBeginCatch(CodeGenFunction &CGF,
4622                                        const CXXCatchStmt *C) {
4623   if (CGF.getTarget().hasFeature("exception-handling"))
4624     CGF.EHStack.pushCleanup<CatchRetScope>(
4625         NormalCleanup, cast<llvm::CatchPadInst>(CGF.CurrentFuncletPad));
4626   ItaniumCXXABI::emitBeginCatch(CGF, C);
4627 }
4628 
4629 /// Register a global destructor as best as we know how.
4630 void XLCXXABI::registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
4631                                   llvm::FunctionCallee dtor,
4632                                   llvm::Constant *addr) {
4633   if (D.getTLSKind() != VarDecl::TLS_None)
4634     llvm::report_fatal_error("thread local storage not yet implemented on AIX");
4635 
4636   // Create __dtor function for the var decl.
4637   llvm::Function *dtorStub = CGF.createAtExitStub(D, dtor, addr);
4638 
4639   // Register above __dtor with atexit().
4640   CGF.registerGlobalDtorWithAtExit(dtorStub);
4641 
4642   // Emit __finalize function to unregister __dtor and (as appropriate) call
4643   // __dtor.
4644   emitCXXStermFinalizer(D, dtorStub, addr);
4645 }
4646 
4647 void XLCXXABI::emitCXXStermFinalizer(const VarDecl &D, llvm::Function *dtorStub,
4648                                      llvm::Constant *addr) {
4649   llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.VoidTy, false);
4650   SmallString<256> FnName;
4651   {
4652     llvm::raw_svector_ostream Out(FnName);
4653     getMangleContext().mangleDynamicStermFinalizer(&D, Out);
4654   }
4655 
4656   // Create the finalization action associated with a variable.
4657   const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
4658   llvm::Function *StermFinalizer = CGM.CreateGlobalInitOrCleanUpFunction(
4659       FTy, FnName.str(), FI, D.getLocation());
4660 
4661   CodeGenFunction CGF(CGM);
4662 
4663   CGF.StartFunction(GlobalDecl(), CGM.getContext().VoidTy, StermFinalizer, FI,
4664                     FunctionArgList(), D.getLocation(),
4665                     D.getInit()->getExprLoc());
4666 
4667   // The unatexit subroutine unregisters __dtor functions that were previously
4668   // registered by the atexit subroutine. If the referenced function is found,
4669   // the unatexit returns a value of 0, meaning that the cleanup is still
4670   // pending (and we should call the __dtor function).
4671   llvm::Value *V = CGF.unregisterGlobalDtorWithUnAtExit(dtorStub);
4672 
4673   llvm::Value *NeedsDestruct = CGF.Builder.CreateIsNull(V, "needs_destruct");
4674 
4675   llvm::BasicBlock *DestructCallBlock = CGF.createBasicBlock("destruct.call");
4676   llvm::BasicBlock *EndBlock = CGF.createBasicBlock("destruct.end");
4677 
4678   // Check if unatexit returns a value of 0. If it does, jump to
4679   // DestructCallBlock, otherwise jump to EndBlock directly.
4680   CGF.Builder.CreateCondBr(NeedsDestruct, DestructCallBlock, EndBlock);
4681 
4682   CGF.EmitBlock(DestructCallBlock);
4683 
4684   // Emit the call to dtorStub.
4685   llvm::CallInst *CI = CGF.Builder.CreateCall(dtorStub);
4686 
4687   // Make sure the call and the callee agree on calling convention.
4688   CI->setCallingConv(dtorStub->getCallingConv());
4689 
4690   CGF.EmitBlock(EndBlock);
4691 
4692   CGF.FinishFunction();
4693 
4694   assert(!D.getAttr<InitPriorityAttr>() &&
4695          "Prioritized sinit and sterm functions are not yet supported.");
4696 
4697   if (isTemplateInstantiation(D.getTemplateSpecializationKind()) ||
4698       getContext().GetGVALinkageForVariable(&D) == GVA_DiscardableODR)
4699     // According to C++ [basic.start.init]p2, class template static data
4700     // members (i.e., implicitly or explicitly instantiated specializations)
4701     // have unordered initialization. As a consequence, we can put them into
4702     // their own llvm.global_dtors entry.
4703     CGM.AddCXXStermFinalizerToGlobalDtor(StermFinalizer, 65535);
4704   else
4705     CGM.AddCXXStermFinalizerEntry(StermFinalizer);
4706 }
4707