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