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