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