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