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