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