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