ItaniumCXXABI.cpp revision c568f1e98938584c0ef0b12ae5018ff7d90a4072
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 "CGRecordLayout.h"
23#include "CGVTables.h"
24#include "CodeGenFunction.h"
25#include "CodeGenModule.h"
26#include "clang/AST/Mangle.h"
27#include "clang/AST/Type.h"
28#include "llvm/IR/CallSite.h"
29#include "llvm/IR/DataLayout.h"
30#include "llvm/IR/Intrinsics.h"
31#include "llvm/IR/Value.h"
32
33using namespace clang;
34using namespace CodeGen;
35
36namespace {
37class ItaniumCXXABI : public CodeGen::CGCXXABI {
38  /// VTables - All the vtables which have been defined.
39  llvm::DenseMap<const CXXRecordDecl *, llvm::GlobalVariable *> VTables;
40
41protected:
42  bool UseARMMethodPtrABI;
43  bool UseARMGuardVarABI;
44
45  ItaniumMangleContext &getMangleContext() {
46    return cast<ItaniumMangleContext>(CodeGen::CGCXXABI::getMangleContext());
47  }
48
49public:
50  ItaniumCXXABI(CodeGen::CodeGenModule &CGM,
51                bool UseARMMethodPtrABI = false,
52                bool UseARMGuardVarABI = false) :
53    CGCXXABI(CGM), UseARMMethodPtrABI(UseARMMethodPtrABI),
54    UseARMGuardVarABI(UseARMGuardVarABI) { }
55
56  bool classifyReturnType(CGFunctionInfo &FI) const override;
57
58  RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const override {
59    // Structures with either a non-trivial destructor or a non-trivial
60    // copy constructor are always indirect.
61    // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
62    // special members.
63    if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor())
64      return RAA_Indirect;
65    return RAA_Default;
66  }
67
68  bool isZeroInitializable(const MemberPointerType *MPT) override;
69
70  llvm::Type *ConvertMemberPointerType(const MemberPointerType *MPT) override;
71
72  llvm::Value *
73    EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
74                                    const Expr *E,
75                                    llvm::Value *&This,
76                                    llvm::Value *MemFnPtr,
77                                    const MemberPointerType *MPT) override;
78
79  llvm::Value *
80    EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
81                                 llvm::Value *Base,
82                                 llvm::Value *MemPtr,
83                                 const MemberPointerType *MPT) override;
84
85  llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
86                                           const CastExpr *E,
87                                           llvm::Value *Src) override;
88  llvm::Constant *EmitMemberPointerConversion(const CastExpr *E,
89                                              llvm::Constant *Src) override;
90
91  llvm::Constant *EmitNullMemberPointer(const MemberPointerType *MPT) override;
92
93  llvm::Constant *EmitMemberPointer(const CXXMethodDecl *MD) override;
94  llvm::Constant *EmitMemberDataPointer(const MemberPointerType *MPT,
95                                        CharUnits offset) override;
96  llvm::Constant *EmitMemberPointer(const APValue &MP, QualType MPT) override;
97  llvm::Constant *BuildMemberPointer(const CXXMethodDecl *MD,
98                                     CharUnits ThisAdjustment);
99
100  llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
101                                           llvm::Value *L, llvm::Value *R,
102                                           const MemberPointerType *MPT,
103                                           bool Inequality) override;
104
105  llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
106                                         llvm::Value *Addr,
107                                         const MemberPointerType *MPT) override;
108
109  llvm::Value *adjustToCompleteObject(CodeGenFunction &CGF, llvm::Value *ptr,
110                                      QualType type) override;
111
112  void EmitFundamentalRTTIDescriptor(QualType Type);
113  void EmitFundamentalRTTIDescriptors();
114  llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) override;
115
116  bool shouldTypeidBeNullChecked(bool IsDeref, QualType SrcRecordTy) override;
117  void EmitBadTypeidCall(CodeGenFunction &CGF) override;
118  llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
119                          llvm::Value *ThisPtr,
120                          llvm::Type *StdTypeInfoPtrTy) override;
121
122  bool shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
123                                          QualType SrcRecordTy) override;
124
125  llvm::Value *EmitDynamicCastCall(CodeGenFunction &CGF, llvm::Value *Value,
126                                   QualType SrcRecordTy, QualType DestTy,
127                                   QualType DestRecordTy,
128                                   llvm::BasicBlock *CastEnd) override;
129
130  llvm::Value *EmitDynamicCastToVoid(CodeGenFunction &CGF, llvm::Value *Value,
131                                     QualType SrcRecordTy,
132                                     QualType DestTy) override;
133
134  bool EmitBadCastCall(CodeGenFunction &CGF) override;
135
136  llvm::Value *
137    GetVirtualBaseClassOffset(CodeGenFunction &CGF, llvm::Value *This,
138                              const CXXRecordDecl *ClassDecl,
139                              const CXXRecordDecl *BaseClassDecl) override;
140
141  void BuildConstructorSignature(const CXXConstructorDecl *Ctor,
142                                 CXXCtorType T, CanQualType &ResTy,
143                                 SmallVectorImpl<CanQualType> &ArgTys) override;
144
145  void EmitCXXConstructors(const CXXConstructorDecl *D) override;
146
147  void BuildDestructorSignature(const CXXDestructorDecl *Dtor,
148                                CXXDtorType T, CanQualType &ResTy,
149                                SmallVectorImpl<CanQualType> &ArgTys) override;
150
151  bool useThunkForDtorVariant(const CXXDestructorDecl *Dtor,
152                              CXXDtorType DT) const override {
153    // Itanium does not emit any destructor variant as an inline thunk.
154    // Delegating may occur as an optimization, but all variants are either
155    // emitted with external linkage or as linkonce if they are inline and used.
156    return false;
157  }
158
159  void EmitCXXDestructors(const CXXDestructorDecl *D) override;
160
161  void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
162                                 FunctionArgList &Params) override;
163
164  void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
165
166  unsigned addImplicitConstructorArgs(CodeGenFunction &CGF,
167                                      const CXXConstructorDecl *D,
168                                      CXXCtorType Type, bool ForVirtualBase,
169                                      bool Delegating,
170                                      CallArgList &Args) override;
171
172  void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
173                          CXXDtorType Type, bool ForVirtualBase,
174                          bool Delegating, llvm::Value *This) override;
175
176  void emitVTableDefinitions(CodeGenVTables &CGVT,
177                             const CXXRecordDecl *RD) override;
178
179  llvm::Value *getVTableAddressPointInStructor(
180      CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
181      BaseSubobject Base, const CXXRecordDecl *NearestVBase,
182      bool &NeedsVirtualOffset) override;
183
184  llvm::Constant *
185  getVTableAddressPointForConstExpr(BaseSubobject Base,
186                                    const CXXRecordDecl *VTableClass) override;
187
188  llvm::GlobalVariable *getAddrOfVTable(const CXXRecordDecl *RD,
189                                        CharUnits VPtrOffset) override;
190
191  llvm::Value *getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
192                                         llvm::Value *This,
193                                         llvm::Type *Ty) override;
194
195  void EmitVirtualDestructorCall(CodeGenFunction &CGF,
196                                 const CXXDestructorDecl *Dtor,
197                                 CXXDtorType DtorType, SourceLocation CallLoc,
198                                 llvm::Value *This) override;
199
200  void emitVirtualInheritanceTables(const CXXRecordDecl *RD) override;
201
202  void setThunkLinkage(llvm::Function *Thunk, bool ForVTable, GlobalDecl GD,
203                       bool ReturnAdjustment) override {
204    // Allow inlining of thunks by emitting them with available_externally
205    // linkage together with vtables when needed.
206    if (ForVTable)
207      Thunk->setLinkage(llvm::GlobalValue::AvailableExternallyLinkage);
208  }
209
210  llvm::Value *performThisAdjustment(CodeGenFunction &CGF, llvm::Value *This,
211                                     const ThisAdjustment &TA) override;
212
213  llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, llvm::Value *Ret,
214                                       const ReturnAdjustment &RA) override;
215
216  StringRef GetPureVirtualCallName() override { return "__cxa_pure_virtual"; }
217  StringRef GetDeletedVirtualCallName() override
218    { return "__cxa_deleted_virtual"; }
219
220  CharUnits getArrayCookieSizeImpl(QualType elementType) override;
221  llvm::Value *InitializeArrayCookie(CodeGenFunction &CGF,
222                                     llvm::Value *NewPtr,
223                                     llvm::Value *NumElements,
224                                     const CXXNewExpr *expr,
225                                     QualType ElementType) override;
226  llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
227                                   llvm::Value *allocPtr,
228                                   CharUnits cookieSize) override;
229
230  void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
231                       llvm::GlobalVariable *DeclPtr,
232                       bool PerformInit) override;
233  void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
234                          llvm::Constant *dtor, llvm::Constant *addr) override;
235
236  llvm::Function *getOrCreateThreadLocalWrapper(const VarDecl *VD,
237                                                llvm::GlobalVariable *Var);
238  void EmitThreadLocalInitFuncs(
239      ArrayRef<std::pair<const VarDecl *, llvm::GlobalVariable *> > Decls,
240      llvm::Function *InitFunc) override;
241  LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
242                                      QualType LValType) override;
243
244  bool NeedsVTTParameter(GlobalDecl GD) override;
245
246  /**************************** RTTI Uniqueness ******************************/
247
248protected:
249  /// Returns true if the ABI requires RTTI type_info objects to be unique
250  /// across a program.
251  virtual bool shouldRTTIBeUnique() const { return true; }
252
253public:
254  /// What sort of unique-RTTI behavior should we use?
255  enum RTTIUniquenessKind {
256    /// We are guaranteeing, or need to guarantee, that the RTTI string
257    /// is unique.
258    RUK_Unique,
259
260    /// We are not guaranteeing uniqueness for the RTTI string, so we
261    /// can demote to hidden visibility but must use string comparisons.
262    RUK_NonUniqueHidden,
263
264    /// We are not guaranteeing uniqueness for the RTTI string, so we
265    /// have to use string comparisons, but we also have to emit it with
266    /// non-hidden visibility.
267    RUK_NonUniqueVisible
268  };
269
270  /// Return the required visibility status for the given type and linkage in
271  /// the current ABI.
272  RTTIUniquenessKind
273  classifyRTTIUniqueness(QualType CanTy,
274                         llvm::GlobalValue::LinkageTypes Linkage) const;
275  friend class ItaniumRTTIBuilder;
276};
277
278class ARMCXXABI : public ItaniumCXXABI {
279public:
280  ARMCXXABI(CodeGen::CodeGenModule &CGM) :
281    ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
282                  /* UseARMGuardVarABI = */ true) {}
283
284  bool HasThisReturn(GlobalDecl GD) const override {
285    return (isa<CXXConstructorDecl>(GD.getDecl()) || (
286              isa<CXXDestructorDecl>(GD.getDecl()) &&
287              GD.getDtorType() != Dtor_Deleting));
288  }
289
290  void EmitReturnFromThunk(CodeGenFunction &CGF, RValue RV,
291                           QualType ResTy) override;
292
293  CharUnits getArrayCookieSizeImpl(QualType elementType) override;
294  llvm::Value *InitializeArrayCookie(CodeGenFunction &CGF,
295                                     llvm::Value *NewPtr,
296                                     llvm::Value *NumElements,
297                                     const CXXNewExpr *expr,
298                                     QualType ElementType) override;
299  llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF, llvm::Value *allocPtr,
300                                   CharUnits cookieSize) override;
301};
302
303class iOS64CXXABI : public ARMCXXABI {
304public:
305  iOS64CXXABI(CodeGen::CodeGenModule &CGM) : ARMCXXABI(CGM) {}
306
307  // ARM64 libraries are prepared for non-unique RTTI.
308  bool shouldRTTIBeUnique() const override { return false; }
309};
310}
311
312CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) {
313  switch (CGM.getTarget().getCXXABI().getKind()) {
314  // For IR-generation purposes, there's no significant difference
315  // between the ARM and iOS ABIs.
316  case TargetCXXABI::GenericARM:
317  case TargetCXXABI::iOS:
318    return new ARMCXXABI(CGM);
319
320  case TargetCXXABI::iOS64:
321    return new iOS64CXXABI(CGM);
322
323  // Note that AArch64 uses the generic ItaniumCXXABI class since it doesn't
324  // include the other 32-bit ARM oddities: constructor/destructor return values
325  // and array cookies.
326  case TargetCXXABI::GenericAArch64:
327    return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
328                             /* UseARMGuardVarABI = */ true);
329
330  case TargetCXXABI::GenericItanium:
331    if (CGM.getContext().getTargetInfo().getTriple().getArch()
332        == llvm::Triple::le32) {
333      // For PNaCl, use ARM-style method pointers so that PNaCl code
334      // does not assume anything about the alignment of function
335      // pointers.
336      return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true,
337                               /* UseARMGuardVarABI = */ false);
338    }
339    return new ItaniumCXXABI(CGM);
340
341  case TargetCXXABI::Microsoft:
342    llvm_unreachable("Microsoft ABI is not Itanium-based");
343  }
344  llvm_unreachable("bad ABI kind");
345}
346
347llvm::Type *
348ItaniumCXXABI::ConvertMemberPointerType(const MemberPointerType *MPT) {
349  if (MPT->isMemberDataPointer())
350    return CGM.PtrDiffTy;
351  return llvm::StructType::get(CGM.PtrDiffTy, CGM.PtrDiffTy, NULL);
352}
353
354/// In the Itanium and ARM ABIs, method pointers have the form:
355///   struct { ptrdiff_t ptr; ptrdiff_t adj; } memptr;
356///
357/// In the Itanium ABI:
358///  - method pointers are virtual if (memptr.ptr & 1) is nonzero
359///  - the this-adjustment is (memptr.adj)
360///  - the virtual offset is (memptr.ptr - 1)
361///
362/// In the ARM ABI:
363///  - method pointers are virtual if (memptr.adj & 1) is nonzero
364///  - the this-adjustment is (memptr.adj >> 1)
365///  - the virtual offset is (memptr.ptr)
366/// ARM uses 'adj' for the virtual flag because Thumb functions
367/// may be only single-byte aligned.
368///
369/// If the member is virtual, the adjusted 'this' pointer points
370/// to a vtable pointer from which the virtual offset is applied.
371///
372/// If the member is non-virtual, memptr.ptr is the address of
373/// the function to call.
374llvm::Value *ItaniumCXXABI::EmitLoadOfMemberFunctionPointer(
375    CodeGenFunction &CGF, const Expr *E, llvm::Value *&This,
376    llvm::Value *MemFnPtr, const MemberPointerType *MPT) {
377  CGBuilderTy &Builder = CGF.Builder;
378
379  const FunctionProtoType *FPT =
380    MPT->getPointeeType()->getAs<FunctionProtoType>();
381  const CXXRecordDecl *RD =
382    cast<CXXRecordDecl>(MPT->getClass()->getAs<RecordType>()->getDecl());
383
384  llvm::FunctionType *FTy =
385    CGM.getTypes().GetFunctionType(
386      CGM.getTypes().arrangeCXXMethodType(RD, FPT));
387
388  llvm::Constant *ptrdiff_1 = llvm::ConstantInt::get(CGM.PtrDiffTy, 1);
389
390  llvm::BasicBlock *FnVirtual = CGF.createBasicBlock("memptr.virtual");
391  llvm::BasicBlock *FnNonVirtual = CGF.createBasicBlock("memptr.nonvirtual");
392  llvm::BasicBlock *FnEnd = CGF.createBasicBlock("memptr.end");
393
394  // Extract memptr.adj, which is in the second field.
395  llvm::Value *RawAdj = Builder.CreateExtractValue(MemFnPtr, 1, "memptr.adj");
396
397  // Compute the true adjustment.
398  llvm::Value *Adj = RawAdj;
399  if (UseARMMethodPtrABI)
400    Adj = Builder.CreateAShr(Adj, ptrdiff_1, "memptr.adj.shifted");
401
402  // Apply the adjustment and cast back to the original struct type
403  // for consistency.
404  llvm::Value *Ptr = Builder.CreateBitCast(This, Builder.getInt8PtrTy());
405  Ptr = Builder.CreateInBoundsGEP(Ptr, Adj);
406  This = Builder.CreateBitCast(Ptr, This->getType(), "this.adjusted");
407
408  // Load the function pointer.
409  llvm::Value *FnAsInt = Builder.CreateExtractValue(MemFnPtr, 0, "memptr.ptr");
410
411  // If the LSB in the function pointer is 1, the function pointer points to
412  // a virtual function.
413  llvm::Value *IsVirtual;
414  if (UseARMMethodPtrABI)
415    IsVirtual = Builder.CreateAnd(RawAdj, ptrdiff_1);
416  else
417    IsVirtual = Builder.CreateAnd(FnAsInt, ptrdiff_1);
418  IsVirtual = Builder.CreateIsNotNull(IsVirtual, "memptr.isvirtual");
419  Builder.CreateCondBr(IsVirtual, FnVirtual, FnNonVirtual);
420
421  // In the virtual path, the adjustment left 'This' pointing to the
422  // vtable of the correct base subobject.  The "function pointer" is an
423  // offset within the vtable (+1 for the virtual flag on non-ARM).
424  CGF.EmitBlock(FnVirtual);
425
426  // Cast the adjusted this to a pointer to vtable pointer and load.
427  llvm::Type *VTableTy = Builder.getInt8PtrTy();
428  llvm::Value *VTable = CGF.GetVTablePtr(This, VTableTy);
429
430  // Apply the offset.
431  llvm::Value *VTableOffset = FnAsInt;
432  if (!UseARMMethodPtrABI)
433    VTableOffset = Builder.CreateSub(VTableOffset, ptrdiff_1);
434  VTable = Builder.CreateGEP(VTable, VTableOffset);
435
436  // Load the virtual function to call.
437  VTable = Builder.CreateBitCast(VTable, FTy->getPointerTo()->getPointerTo());
438  llvm::Value *VirtualFn = Builder.CreateLoad(VTable, "memptr.virtualfn");
439  CGF.EmitBranch(FnEnd);
440
441  // In the non-virtual path, the function pointer is actually a
442  // function pointer.
443  CGF.EmitBlock(FnNonVirtual);
444  llvm::Value *NonVirtualFn =
445    Builder.CreateIntToPtr(FnAsInt, FTy->getPointerTo(), "memptr.nonvirtualfn");
446
447  // We're done.
448  CGF.EmitBlock(FnEnd);
449  llvm::PHINode *Callee = Builder.CreatePHI(FTy->getPointerTo(), 2);
450  Callee->addIncoming(VirtualFn, FnVirtual);
451  Callee->addIncoming(NonVirtualFn, FnNonVirtual);
452  return Callee;
453}
454
455/// Compute an l-value by applying the given pointer-to-member to a
456/// base object.
457llvm::Value *ItaniumCXXABI::EmitMemberDataPointerAddress(
458    CodeGenFunction &CGF, const Expr *E, llvm::Value *Base, llvm::Value *MemPtr,
459    const MemberPointerType *MPT) {
460  assert(MemPtr->getType() == CGM.PtrDiffTy);
461
462  CGBuilderTy &Builder = CGF.Builder;
463
464  unsigned AS = Base->getType()->getPointerAddressSpace();
465
466  // Cast to char*.
467  Base = Builder.CreateBitCast(Base, Builder.getInt8Ty()->getPointerTo(AS));
468
469  // Apply the offset, which we assume is non-null.
470  llvm::Value *Addr = Builder.CreateInBoundsGEP(Base, MemPtr, "memptr.offset");
471
472  // Cast the address to the appropriate pointer type, adopting the
473  // address space of the base pointer.
474  llvm::Type *PType
475    = CGF.ConvertTypeForMem(MPT->getPointeeType())->getPointerTo(AS);
476  return Builder.CreateBitCast(Addr, PType);
477}
478
479/// Perform a bitcast, derived-to-base, or base-to-derived member pointer
480/// conversion.
481///
482/// Bitcast conversions are always a no-op under Itanium.
483///
484/// Obligatory offset/adjustment diagram:
485///         <-- offset -->          <-- adjustment -->
486///   |--------------------------|----------------------|--------------------|
487///   ^Derived address point     ^Base address point    ^Member address point
488///
489/// So when converting a base member pointer to a derived member pointer,
490/// we add the offset to the adjustment because the address point has
491/// decreased;  and conversely, when converting a derived MP to a base MP
492/// we subtract the offset from the adjustment because the address point
493/// has increased.
494///
495/// The standard forbids (at compile time) conversion to and from
496/// virtual bases, which is why we don't have to consider them here.
497///
498/// The standard forbids (at run time) casting a derived MP to a base
499/// MP when the derived MP does not point to a member of the base.
500/// This is why -1 is a reasonable choice for null data member
501/// pointers.
502llvm::Value *
503ItaniumCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF,
504                                           const CastExpr *E,
505                                           llvm::Value *src) {
506  assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
507         E->getCastKind() == CK_BaseToDerivedMemberPointer ||
508         E->getCastKind() == CK_ReinterpretMemberPointer);
509
510  // Under Itanium, reinterprets don't require any additional processing.
511  if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
512
513  // Use constant emission if we can.
514  if (isa<llvm::Constant>(src))
515    return EmitMemberPointerConversion(E, cast<llvm::Constant>(src));
516
517  llvm::Constant *adj = getMemberPointerAdjustment(E);
518  if (!adj) return src;
519
520  CGBuilderTy &Builder = CGF.Builder;
521  bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
522
523  const MemberPointerType *destTy =
524    E->getType()->castAs<MemberPointerType>();
525
526  // For member data pointers, this is just a matter of adding the
527  // offset if the source is non-null.
528  if (destTy->isMemberDataPointer()) {
529    llvm::Value *dst;
530    if (isDerivedToBase)
531      dst = Builder.CreateNSWSub(src, adj, "adj");
532    else
533      dst = Builder.CreateNSWAdd(src, adj, "adj");
534
535    // Null check.
536    llvm::Value *null = llvm::Constant::getAllOnesValue(src->getType());
537    llvm::Value *isNull = Builder.CreateICmpEQ(src, null, "memptr.isnull");
538    return Builder.CreateSelect(isNull, src, dst);
539  }
540
541  // The this-adjustment is left-shifted by 1 on ARM.
542  if (UseARMMethodPtrABI) {
543    uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
544    offset <<= 1;
545    adj = llvm::ConstantInt::get(adj->getType(), offset);
546  }
547
548  llvm::Value *srcAdj = Builder.CreateExtractValue(src, 1, "src.adj");
549  llvm::Value *dstAdj;
550  if (isDerivedToBase)
551    dstAdj = Builder.CreateNSWSub(srcAdj, adj, "adj");
552  else
553    dstAdj = Builder.CreateNSWAdd(srcAdj, adj, "adj");
554
555  return Builder.CreateInsertValue(src, dstAdj, 1);
556}
557
558llvm::Constant *
559ItaniumCXXABI::EmitMemberPointerConversion(const CastExpr *E,
560                                           llvm::Constant *src) {
561  assert(E->getCastKind() == CK_DerivedToBaseMemberPointer ||
562         E->getCastKind() == CK_BaseToDerivedMemberPointer ||
563         E->getCastKind() == CK_ReinterpretMemberPointer);
564
565  // Under Itanium, reinterprets don't require any additional processing.
566  if (E->getCastKind() == CK_ReinterpretMemberPointer) return src;
567
568  // If the adjustment is trivial, we don't need to do anything.
569  llvm::Constant *adj = getMemberPointerAdjustment(E);
570  if (!adj) return src;
571
572  bool isDerivedToBase = (E->getCastKind() == CK_DerivedToBaseMemberPointer);
573
574  const MemberPointerType *destTy =
575    E->getType()->castAs<MemberPointerType>();
576
577  // For member data pointers, this is just a matter of adding the
578  // offset if the source is non-null.
579  if (destTy->isMemberDataPointer()) {
580    // null maps to null.
581    if (src->isAllOnesValue()) return src;
582
583    if (isDerivedToBase)
584      return llvm::ConstantExpr::getNSWSub(src, adj);
585    else
586      return llvm::ConstantExpr::getNSWAdd(src, adj);
587  }
588
589  // The this-adjustment is left-shifted by 1 on ARM.
590  if (UseARMMethodPtrABI) {
591    uint64_t offset = cast<llvm::ConstantInt>(adj)->getZExtValue();
592    offset <<= 1;
593    adj = llvm::ConstantInt::get(adj->getType(), offset);
594  }
595
596  llvm::Constant *srcAdj = llvm::ConstantExpr::getExtractValue(src, 1);
597  llvm::Constant *dstAdj;
598  if (isDerivedToBase)
599    dstAdj = llvm::ConstantExpr::getNSWSub(srcAdj, adj);
600  else
601    dstAdj = llvm::ConstantExpr::getNSWAdd(srcAdj, adj);
602
603  return llvm::ConstantExpr::getInsertValue(src, dstAdj, 1);
604}
605
606llvm::Constant *
607ItaniumCXXABI::EmitNullMemberPointer(const MemberPointerType *MPT) {
608  // Itanium C++ ABI 2.3:
609  //   A NULL pointer is represented as -1.
610  if (MPT->isMemberDataPointer())
611    return llvm::ConstantInt::get(CGM.PtrDiffTy, -1ULL, /*isSigned=*/true);
612
613  llvm::Constant *Zero = llvm::ConstantInt::get(CGM.PtrDiffTy, 0);
614  llvm::Constant *Values[2] = { Zero, Zero };
615  return llvm::ConstantStruct::getAnon(Values);
616}
617
618llvm::Constant *
619ItaniumCXXABI::EmitMemberDataPointer(const MemberPointerType *MPT,
620                                     CharUnits offset) {
621  // Itanium C++ ABI 2.3:
622  //   A pointer to data member is an offset from the base address of
623  //   the class object containing it, represented as a ptrdiff_t
624  return llvm::ConstantInt::get(CGM.PtrDiffTy, offset.getQuantity());
625}
626
627llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const CXXMethodDecl *MD) {
628  return BuildMemberPointer(MD, CharUnits::Zero());
629}
630
631llvm::Constant *ItaniumCXXABI::BuildMemberPointer(const CXXMethodDecl *MD,
632                                                  CharUnits ThisAdjustment) {
633  assert(MD->isInstance() && "Member function must not be static!");
634  MD = MD->getCanonicalDecl();
635
636  CodeGenTypes &Types = CGM.getTypes();
637
638  // Get the function pointer (or index if this is a virtual function).
639  llvm::Constant *MemPtr[2];
640  if (MD->isVirtual()) {
641    uint64_t Index = CGM.getItaniumVTableContext().getMethodVTableIndex(MD);
642
643    const ASTContext &Context = getContext();
644    CharUnits PointerWidth =
645      Context.toCharUnitsFromBits(Context.getTargetInfo().getPointerWidth(0));
646    uint64_t VTableOffset = (Index * PointerWidth.getQuantity());
647
648    if (UseARMMethodPtrABI) {
649      // ARM C++ ABI 3.2.1:
650      //   This ABI specifies that adj contains twice the this
651      //   adjustment, plus 1 if the member function is virtual. The
652      //   least significant bit of adj then makes exactly the same
653      //   discrimination as the least significant bit of ptr does for
654      //   Itanium.
655      MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset);
656      MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
657                                         2 * ThisAdjustment.getQuantity() + 1);
658    } else {
659      // Itanium C++ ABI 2.3:
660      //   For a virtual function, [the pointer field] is 1 plus the
661      //   virtual table offset (in bytes) of the function,
662      //   represented as a ptrdiff_t.
663      MemPtr[0] = llvm::ConstantInt::get(CGM.PtrDiffTy, VTableOffset + 1);
664      MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
665                                         ThisAdjustment.getQuantity());
666    }
667  } else {
668    const FunctionProtoType *FPT = MD->getType()->castAs<FunctionProtoType>();
669    llvm::Type *Ty;
670    // Check whether the function has a computable LLVM signature.
671    if (Types.isFuncTypeConvertible(FPT)) {
672      // The function has a computable LLVM signature; use the correct type.
673      Ty = Types.GetFunctionType(Types.arrangeCXXMethodDeclaration(MD));
674    } else {
675      // Use an arbitrary non-function type to tell GetAddrOfFunction that the
676      // function type is incomplete.
677      Ty = CGM.PtrDiffTy;
678    }
679    llvm::Constant *addr = CGM.GetAddrOfFunction(MD, Ty);
680
681    MemPtr[0] = llvm::ConstantExpr::getPtrToInt(addr, CGM.PtrDiffTy);
682    MemPtr[1] = llvm::ConstantInt::get(CGM.PtrDiffTy,
683                                       (UseARMMethodPtrABI ? 2 : 1) *
684                                       ThisAdjustment.getQuantity());
685  }
686
687  return llvm::ConstantStruct::getAnon(MemPtr);
688}
689
690llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const APValue &MP,
691                                                 QualType MPType) {
692  const MemberPointerType *MPT = MPType->castAs<MemberPointerType>();
693  const ValueDecl *MPD = MP.getMemberPointerDecl();
694  if (!MPD)
695    return EmitNullMemberPointer(MPT);
696
697  CharUnits ThisAdjustment = getMemberPointerPathAdjustment(MP);
698
699  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MPD))
700    return BuildMemberPointer(MD, ThisAdjustment);
701
702  CharUnits FieldOffset =
703    getContext().toCharUnitsFromBits(getContext().getFieldOffset(MPD));
704  return EmitMemberDataPointer(MPT, ThisAdjustment + FieldOffset);
705}
706
707/// The comparison algorithm is pretty easy: the member pointers are
708/// the same if they're either bitwise identical *or* both null.
709///
710/// ARM is different here only because null-ness is more complicated.
711llvm::Value *
712ItaniumCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF,
713                                           llvm::Value *L,
714                                           llvm::Value *R,
715                                           const MemberPointerType *MPT,
716                                           bool Inequality) {
717  CGBuilderTy &Builder = CGF.Builder;
718
719  llvm::ICmpInst::Predicate Eq;
720  llvm::Instruction::BinaryOps And, Or;
721  if (Inequality) {
722    Eq = llvm::ICmpInst::ICMP_NE;
723    And = llvm::Instruction::Or;
724    Or = llvm::Instruction::And;
725  } else {
726    Eq = llvm::ICmpInst::ICMP_EQ;
727    And = llvm::Instruction::And;
728    Or = llvm::Instruction::Or;
729  }
730
731  // Member data pointers are easy because there's a unique null
732  // value, so it just comes down to bitwise equality.
733  if (MPT->isMemberDataPointer())
734    return Builder.CreateICmp(Eq, L, R);
735
736  // For member function pointers, the tautologies are more complex.
737  // The Itanium tautology is:
738  //   (L == R) <==> (L.ptr == R.ptr && (L.ptr == 0 || L.adj == R.adj))
739  // The ARM tautology is:
740  //   (L == R) <==> (L.ptr == R.ptr &&
741  //                  (L.adj == R.adj ||
742  //                   (L.ptr == 0 && ((L.adj|R.adj) & 1) == 0)))
743  // The inequality tautologies have exactly the same structure, except
744  // applying De Morgan's laws.
745
746  llvm::Value *LPtr = Builder.CreateExtractValue(L, 0, "lhs.memptr.ptr");
747  llvm::Value *RPtr = Builder.CreateExtractValue(R, 0, "rhs.memptr.ptr");
748
749  // This condition tests whether L.ptr == R.ptr.  This must always be
750  // true for equality to hold.
751  llvm::Value *PtrEq = Builder.CreateICmp(Eq, LPtr, RPtr, "cmp.ptr");
752
753  // This condition, together with the assumption that L.ptr == R.ptr,
754  // tests whether the pointers are both null.  ARM imposes an extra
755  // condition.
756  llvm::Value *Zero = llvm::Constant::getNullValue(LPtr->getType());
757  llvm::Value *EqZero = Builder.CreateICmp(Eq, LPtr, Zero, "cmp.ptr.null");
758
759  // This condition tests whether L.adj == R.adj.  If this isn't
760  // true, the pointers are unequal unless they're both null.
761  llvm::Value *LAdj = Builder.CreateExtractValue(L, 1, "lhs.memptr.adj");
762  llvm::Value *RAdj = Builder.CreateExtractValue(R, 1, "rhs.memptr.adj");
763  llvm::Value *AdjEq = Builder.CreateICmp(Eq, LAdj, RAdj, "cmp.adj");
764
765  // Null member function pointers on ARM clear the low bit of Adj,
766  // so the zero condition has to check that neither low bit is set.
767  if (UseARMMethodPtrABI) {
768    llvm::Value *One = llvm::ConstantInt::get(LPtr->getType(), 1);
769
770    // Compute (l.adj | r.adj) & 1 and test it against zero.
771    llvm::Value *OrAdj = Builder.CreateOr(LAdj, RAdj, "or.adj");
772    llvm::Value *OrAdjAnd1 = Builder.CreateAnd(OrAdj, One);
773    llvm::Value *OrAdjAnd1EqZero = Builder.CreateICmp(Eq, OrAdjAnd1, Zero,
774                                                      "cmp.or.adj");
775    EqZero = Builder.CreateBinOp(And, EqZero, OrAdjAnd1EqZero);
776  }
777
778  // Tie together all our conditions.
779  llvm::Value *Result = Builder.CreateBinOp(Or, EqZero, AdjEq);
780  Result = Builder.CreateBinOp(And, PtrEq, Result,
781                               Inequality ? "memptr.ne" : "memptr.eq");
782  return Result;
783}
784
785llvm::Value *
786ItaniumCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
787                                          llvm::Value *MemPtr,
788                                          const MemberPointerType *MPT) {
789  CGBuilderTy &Builder = CGF.Builder;
790
791  /// For member data pointers, this is just a check against -1.
792  if (MPT->isMemberDataPointer()) {
793    assert(MemPtr->getType() == CGM.PtrDiffTy);
794    llvm::Value *NegativeOne =
795      llvm::Constant::getAllOnesValue(MemPtr->getType());
796    return Builder.CreateICmpNE(MemPtr, NegativeOne, "memptr.tobool");
797  }
798
799  // In Itanium, a member function pointer is not null if 'ptr' is not null.
800  llvm::Value *Ptr = Builder.CreateExtractValue(MemPtr, 0, "memptr.ptr");
801
802  llvm::Constant *Zero = llvm::ConstantInt::get(Ptr->getType(), 0);
803  llvm::Value *Result = Builder.CreateICmpNE(Ptr, Zero, "memptr.tobool");
804
805  // On ARM, a member function pointer is also non-null if the low bit of 'adj'
806  // (the virtual bit) is set.
807  if (UseARMMethodPtrABI) {
808    llvm::Constant *One = llvm::ConstantInt::get(Ptr->getType(), 1);
809    llvm::Value *Adj = Builder.CreateExtractValue(MemPtr, 1, "memptr.adj");
810    llvm::Value *VirtualBit = Builder.CreateAnd(Adj, One, "memptr.virtualbit");
811    llvm::Value *IsVirtual = Builder.CreateICmpNE(VirtualBit, Zero,
812                                                  "memptr.isvirtual");
813    Result = Builder.CreateOr(Result, IsVirtual);
814  }
815
816  return Result;
817}
818
819bool ItaniumCXXABI::classifyReturnType(CGFunctionInfo &FI) const {
820  const CXXRecordDecl *RD = FI.getReturnType()->getAsCXXRecordDecl();
821  if (!RD)
822    return false;
823
824  // Return indirectly if we have a non-trivial copy ctor or non-trivial dtor.
825  // FIXME: Use canCopyArgument() when it is fixed to handle lazily declared
826  // special members.
827  if (RD->hasNonTrivialDestructor() || RD->hasNonTrivialCopyConstructor()) {
828    FI.getReturnInfo() = ABIArgInfo::getIndirect(0, /*ByVal=*/false);
829    return true;
830  }
831  return false;
832}
833
834/// The Itanium ABI requires non-zero initialization only for data
835/// member pointers, for which '0' is a valid offset.
836bool ItaniumCXXABI::isZeroInitializable(const MemberPointerType *MPT) {
837  return MPT->getPointeeType()->isFunctionType();
838}
839
840/// The Itanium ABI always places an offset to the complete object
841/// at entry -2 in the vtable.
842llvm::Value *ItaniumCXXABI::adjustToCompleteObject(CodeGenFunction &CGF,
843                                                   llvm::Value *ptr,
844                                                   QualType type) {
845  // Grab the vtable pointer as an intptr_t*.
846  llvm::Value *vtable = CGF.GetVTablePtr(ptr, CGF.IntPtrTy->getPointerTo());
847
848  // Track back to entry -2 and pull out the offset there.
849  llvm::Value *offsetPtr =
850    CGF.Builder.CreateConstInBoundsGEP1_64(vtable, -2, "complete-offset.ptr");
851  llvm::LoadInst *offset = CGF.Builder.CreateLoad(offsetPtr);
852  offset->setAlignment(CGF.PointerAlignInBytes);
853
854  // Apply the offset.
855  ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8PtrTy);
856  return CGF.Builder.CreateInBoundsGEP(ptr, offset);
857}
858
859static llvm::Constant *getItaniumDynamicCastFn(CodeGenFunction &CGF) {
860  // void *__dynamic_cast(const void *sub,
861  //                      const abi::__class_type_info *src,
862  //                      const abi::__class_type_info *dst,
863  //                      std::ptrdiff_t src2dst_offset);
864
865  llvm::Type *Int8PtrTy = CGF.Int8PtrTy;
866  llvm::Type *PtrDiffTy =
867    CGF.ConvertType(CGF.getContext().getPointerDiffType());
868
869  llvm::Type *Args[4] = { Int8PtrTy, Int8PtrTy, Int8PtrTy, PtrDiffTy };
870
871  llvm::FunctionType *FTy = llvm::FunctionType::get(Int8PtrTy, Args, false);
872
873  // Mark the function as nounwind readonly.
874  llvm::Attribute::AttrKind FuncAttrs[] = { llvm::Attribute::NoUnwind,
875                                            llvm::Attribute::ReadOnly };
876  llvm::AttributeSet Attrs = llvm::AttributeSet::get(
877      CGF.getLLVMContext(), llvm::AttributeSet::FunctionIndex, FuncAttrs);
878
879  return CGF.CGM.CreateRuntimeFunction(FTy, "__dynamic_cast", Attrs);
880}
881
882static llvm::Constant *getBadCastFn(CodeGenFunction &CGF) {
883  // void __cxa_bad_cast();
884  llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
885  return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_cast");
886}
887
888/// \brief Compute the src2dst_offset hint as described in the
889/// Itanium C++ ABI [2.9.7]
890static CharUnits computeOffsetHint(ASTContext &Context,
891                                   const CXXRecordDecl *Src,
892                                   const CXXRecordDecl *Dst) {
893  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
894                     /*DetectVirtual=*/false);
895
896  // If Dst is not derived from Src we can skip the whole computation below and
897  // return that Src is not a public base of Dst.  Record all inheritance paths.
898  if (!Dst->isDerivedFrom(Src, Paths))
899    return CharUnits::fromQuantity(-2ULL);
900
901  unsigned NumPublicPaths = 0;
902  CharUnits Offset;
903
904  // Now walk all possible inheritance paths.
905  for (CXXBasePaths::paths_iterator I = Paths.begin(), E = Paths.end(); I != E;
906       ++I) {
907    if (I->Access != AS_public) // Ignore non-public inheritance.
908      continue;
909
910    ++NumPublicPaths;
911
912    for (CXXBasePath::iterator J = I->begin(), JE = I->end(); J != JE; ++J) {
913      // If the path contains a virtual base class we can't give any hint.
914      // -1: no hint.
915      if (J->Base->isVirtual())
916        return CharUnits::fromQuantity(-1ULL);
917
918      if (NumPublicPaths > 1) // Won't use offsets, skip computation.
919        continue;
920
921      // Accumulate the base class offsets.
922      const ASTRecordLayout &L = Context.getASTRecordLayout(J->Class);
923      Offset += L.getBaseClassOffset(J->Base->getType()->getAsCXXRecordDecl());
924    }
925  }
926
927  // -2: Src is not a public base of Dst.
928  if (NumPublicPaths == 0)
929    return CharUnits::fromQuantity(-2ULL);
930
931  // -3: Src is a multiple public base type but never a virtual base type.
932  if (NumPublicPaths > 1)
933    return CharUnits::fromQuantity(-3ULL);
934
935  // Otherwise, the Src type is a unique public nonvirtual base type of Dst.
936  // Return the offset of Src from the origin of Dst.
937  return Offset;
938}
939
940static llvm::Constant *getBadTypeidFn(CodeGenFunction &CGF) {
941  // void __cxa_bad_typeid();
942  llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false);
943
944  return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid");
945}
946
947bool ItaniumCXXABI::shouldTypeidBeNullChecked(bool IsDeref,
948                                              QualType SrcRecordTy) {
949  return IsDeref;
950}
951
952void ItaniumCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) {
953  llvm::Value *Fn = getBadTypeidFn(CGF);
954  CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
955  CGF.Builder.CreateUnreachable();
956}
957
958llvm::Value *ItaniumCXXABI::EmitTypeid(CodeGenFunction &CGF,
959                                       QualType SrcRecordTy,
960                                       llvm::Value *ThisPtr,
961                                       llvm::Type *StdTypeInfoPtrTy) {
962  llvm::Value *Value =
963      CGF.GetVTablePtr(ThisPtr, StdTypeInfoPtrTy->getPointerTo());
964
965  // Load the type info.
966  Value = CGF.Builder.CreateConstInBoundsGEP1_64(Value, -1ULL);
967  return CGF.Builder.CreateLoad(Value);
968}
969
970bool ItaniumCXXABI::shouldDynamicCastCallBeNullChecked(bool SrcIsPtr,
971                                                       QualType SrcRecordTy) {
972  return SrcIsPtr;
973}
974
975llvm::Value *ItaniumCXXABI::EmitDynamicCastCall(
976    CodeGenFunction &CGF, llvm::Value *Value, QualType SrcRecordTy,
977    QualType DestTy, QualType DestRecordTy, llvm::BasicBlock *CastEnd) {
978  llvm::Type *PtrDiffLTy =
979      CGF.ConvertType(CGF.getContext().getPointerDiffType());
980  llvm::Type *DestLTy = CGF.ConvertType(DestTy);
981
982  llvm::Value *SrcRTTI =
983      CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
984  llvm::Value *DestRTTI =
985      CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
986
987  // Compute the offset hint.
988  const CXXRecordDecl *SrcDecl = SrcRecordTy->getAsCXXRecordDecl();
989  const CXXRecordDecl *DestDecl = DestRecordTy->getAsCXXRecordDecl();
990  llvm::Value *OffsetHint = llvm::ConstantInt::get(
991      PtrDiffLTy,
992      computeOffsetHint(CGF.getContext(), SrcDecl, DestDecl).getQuantity());
993
994  // Emit the call to __dynamic_cast.
995  Value = CGF.EmitCastToVoidPtr(Value);
996
997  llvm::Value *args[] = {Value, SrcRTTI, DestRTTI, OffsetHint};
998  Value = CGF.EmitNounwindRuntimeCall(getItaniumDynamicCastFn(CGF), args);
999  Value = CGF.Builder.CreateBitCast(Value, DestLTy);
1000
1001  /// C++ [expr.dynamic.cast]p9:
1002  ///   A failed cast to reference type throws std::bad_cast
1003  if (DestTy->isReferenceType()) {
1004    llvm::BasicBlock *BadCastBlock =
1005        CGF.createBasicBlock("dynamic_cast.bad_cast");
1006
1007    llvm::Value *IsNull = CGF.Builder.CreateIsNull(Value);
1008    CGF.Builder.CreateCondBr(IsNull, BadCastBlock, CastEnd);
1009
1010    CGF.EmitBlock(BadCastBlock);
1011    EmitBadCastCall(CGF);
1012  }
1013
1014  return Value;
1015}
1016
1017llvm::Value *ItaniumCXXABI::EmitDynamicCastToVoid(CodeGenFunction &CGF,
1018                                                  llvm::Value *Value,
1019                                                  QualType SrcRecordTy,
1020                                                  QualType DestTy) {
1021  llvm::Type *PtrDiffLTy =
1022      CGF.ConvertType(CGF.getContext().getPointerDiffType());
1023  llvm::Type *DestLTy = CGF.ConvertType(DestTy);
1024
1025  // Get the vtable pointer.
1026  llvm::Value *VTable = CGF.GetVTablePtr(Value, PtrDiffLTy->getPointerTo());
1027
1028  // Get the offset-to-top from the vtable.
1029  llvm::Value *OffsetToTop =
1030      CGF.Builder.CreateConstInBoundsGEP1_64(VTable, -2ULL);
1031  OffsetToTop = CGF.Builder.CreateLoad(OffsetToTop, "offset.to.top");
1032
1033  // Finally, add the offset to the pointer.
1034  Value = CGF.EmitCastToVoidPtr(Value);
1035  Value = CGF.Builder.CreateInBoundsGEP(Value, OffsetToTop);
1036
1037  return CGF.Builder.CreateBitCast(Value, DestLTy);
1038}
1039
1040bool ItaniumCXXABI::EmitBadCastCall(CodeGenFunction &CGF) {
1041  llvm::Value *Fn = getBadCastFn(CGF);
1042  CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn();
1043  CGF.Builder.CreateUnreachable();
1044  return true;
1045}
1046
1047llvm::Value *
1048ItaniumCXXABI::GetVirtualBaseClassOffset(CodeGenFunction &CGF,
1049                                         llvm::Value *This,
1050                                         const CXXRecordDecl *ClassDecl,
1051                                         const CXXRecordDecl *BaseClassDecl) {
1052  llvm::Value *VTablePtr = CGF.GetVTablePtr(This, CGM.Int8PtrTy);
1053  CharUnits VBaseOffsetOffset =
1054      CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(ClassDecl,
1055                                                               BaseClassDecl);
1056
1057  llvm::Value *VBaseOffsetPtr =
1058    CGF.Builder.CreateConstGEP1_64(VTablePtr, VBaseOffsetOffset.getQuantity(),
1059                                   "vbase.offset.ptr");
1060  VBaseOffsetPtr = CGF.Builder.CreateBitCast(VBaseOffsetPtr,
1061                                             CGM.PtrDiffTy->getPointerTo());
1062
1063  llvm::Value *VBaseOffset =
1064    CGF.Builder.CreateLoad(VBaseOffsetPtr, "vbase.offset");
1065
1066  return VBaseOffset;
1067}
1068
1069/// The generic ABI passes 'this', plus a VTT if it's initializing a
1070/// base subobject.
1071void
1072ItaniumCXXABI::BuildConstructorSignature(const CXXConstructorDecl *Ctor,
1073                                         CXXCtorType Type, CanQualType &ResTy,
1074                                         SmallVectorImpl<CanQualType> &ArgTys) {
1075  ASTContext &Context = getContext();
1076
1077  // All parameters are already in place except VTT, which goes after 'this'.
1078  // These are Clang types, so we don't need to worry about sret yet.
1079
1080  // Check if we need to add a VTT parameter (which has type void **).
1081  if (Type == Ctor_Base && Ctor->getParent()->getNumVBases() != 0)
1082    ArgTys.insert(ArgTys.begin() + 1,
1083                  Context.getPointerType(Context.VoidPtrTy));
1084}
1085
1086void ItaniumCXXABI::EmitCXXConstructors(const CXXConstructorDecl *D) {
1087  // Just make sure we're in sync with TargetCXXABI.
1088  assert(CGM.getTarget().getCXXABI().hasConstructorVariants());
1089
1090  // The constructor used for constructing this as a base class;
1091  // ignores virtual bases.
1092  CGM.EmitGlobal(GlobalDecl(D, Ctor_Base));
1093
1094  // The constructor used for constructing this as a complete class;
1095  // constucts the virtual bases, then calls the base constructor.
1096  if (!D->getParent()->isAbstract()) {
1097    // We don't need to emit the complete ctor if the class is abstract.
1098    CGM.EmitGlobal(GlobalDecl(D, Ctor_Complete));
1099  }
1100}
1101
1102/// The generic ABI passes 'this', plus a VTT if it's destroying a
1103/// base subobject.
1104void ItaniumCXXABI::BuildDestructorSignature(const CXXDestructorDecl *Dtor,
1105                                             CXXDtorType Type,
1106                                             CanQualType &ResTy,
1107                                SmallVectorImpl<CanQualType> &ArgTys) {
1108  ASTContext &Context = getContext();
1109
1110  // 'this' parameter is already there, as well as 'this' return if
1111  // HasThisReturn(GlobalDecl(Dtor, Type)) is true
1112
1113  // Check if we need to add a VTT parameter (which has type void **).
1114  if (Type == Dtor_Base && Dtor->getParent()->getNumVBases() != 0)
1115    ArgTys.push_back(Context.getPointerType(Context.VoidPtrTy));
1116}
1117
1118void ItaniumCXXABI::EmitCXXDestructors(const CXXDestructorDecl *D) {
1119  // The destructor used for destructing this as a base class; ignores
1120  // virtual bases.
1121  CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
1122
1123  // The destructor used for destructing this as a most-derived class;
1124  // call the base destructor and then destructs any virtual bases.
1125  CGM.EmitGlobal(GlobalDecl(D, Dtor_Complete));
1126
1127  // The destructor in a virtual table is always a 'deleting'
1128  // destructor, which calls the complete destructor and then uses the
1129  // appropriate operator delete.
1130  if (D->isVirtual())
1131    CGM.EmitGlobal(GlobalDecl(D, Dtor_Deleting));
1132}
1133
1134void ItaniumCXXABI::addImplicitStructorParams(CodeGenFunction &CGF,
1135                                              QualType &ResTy,
1136                                              FunctionArgList &Params) {
1137  const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
1138  assert(isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD));
1139
1140  // Check if we need a VTT parameter as well.
1141  if (NeedsVTTParameter(CGF.CurGD)) {
1142    ASTContext &Context = getContext();
1143
1144    // FIXME: avoid the fake decl
1145    QualType T = Context.getPointerType(Context.VoidPtrTy);
1146    ImplicitParamDecl *VTTDecl
1147      = ImplicitParamDecl::Create(Context, nullptr, MD->getLocation(),
1148                                  &Context.Idents.get("vtt"), T);
1149    Params.insert(Params.begin() + 1, VTTDecl);
1150    getStructorImplicitParamDecl(CGF) = VTTDecl;
1151  }
1152}
1153
1154void ItaniumCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
1155  /// Initialize the 'this' slot.
1156  EmitThisParam(CGF);
1157
1158  /// Initialize the 'vtt' slot if needed.
1159  if (getStructorImplicitParamDecl(CGF)) {
1160    getStructorImplicitParamValue(CGF) = CGF.Builder.CreateLoad(
1161        CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), "vtt");
1162  }
1163
1164  /// If this is a function that the ABI specifies returns 'this', initialize
1165  /// the return slot to 'this' at the start of the function.
1166  ///
1167  /// Unlike the setting of return types, this is done within the ABI
1168  /// implementation instead of by clients of CGCXXABI because:
1169  /// 1) getThisValue is currently protected
1170  /// 2) in theory, an ABI could implement 'this' returns some other way;
1171  ///    HasThisReturn only specifies a contract, not the implementation
1172  if (HasThisReturn(CGF.CurGD))
1173    CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue);
1174}
1175
1176unsigned ItaniumCXXABI::addImplicitConstructorArgs(
1177    CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type,
1178    bool ForVirtualBase, bool Delegating, CallArgList &Args) {
1179  if (!NeedsVTTParameter(GlobalDecl(D, Type)))
1180    return 0;
1181
1182  // Insert the implicit 'vtt' argument as the second argument.
1183  llvm::Value *VTT =
1184      CGF.GetVTTParameter(GlobalDecl(D, Type), ForVirtualBase, Delegating);
1185  QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1186  Args.insert(Args.begin() + 1,
1187              CallArg(RValue::get(VTT), VTTTy, /*needscopy=*/false));
1188  return 1;  // Added one arg.
1189}
1190
1191void ItaniumCXXABI::EmitDestructorCall(CodeGenFunction &CGF,
1192                                       const CXXDestructorDecl *DD,
1193                                       CXXDtorType Type, bool ForVirtualBase,
1194                                       bool Delegating, llvm::Value *This) {
1195  GlobalDecl GD(DD, Type);
1196  llvm::Value *VTT = CGF.GetVTTParameter(GD, ForVirtualBase, Delegating);
1197  QualType VTTTy = getContext().getPointerType(getContext().VoidPtrTy);
1198
1199  llvm::Value *Callee = nullptr;
1200  if (getContext().getLangOpts().AppleKext)
1201    Callee = CGF.BuildAppleKextVirtualDestructorCall(DD, Type, DD->getParent());
1202
1203  if (!Callee)
1204    Callee = CGM.GetAddrOfCXXDestructor(DD, Type);
1205
1206  // FIXME: Provide a source location here.
1207  CGF.EmitCXXMemberCall(DD, SourceLocation(), Callee, ReturnValueSlot(), This,
1208                        VTT, VTTTy, nullptr, nullptr);
1209}
1210
1211void ItaniumCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
1212                                          const CXXRecordDecl *RD) {
1213  llvm::GlobalVariable *VTable = getAddrOfVTable(RD, CharUnits());
1214  if (VTable->hasInitializer())
1215    return;
1216
1217  ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
1218  const VTableLayout &VTLayout = VTContext.getVTableLayout(RD);
1219  llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
1220  llvm::Constant *RTTI =
1221      CGM.GetAddrOfRTTIDescriptor(CGM.getContext().getTagDeclType(RD));
1222
1223  // Create and set the initializer.
1224  llvm::Constant *Init = CGVT.CreateVTableInitializer(
1225      RD, VTLayout.vtable_component_begin(), VTLayout.getNumVTableComponents(),
1226      VTLayout.vtable_thunk_begin(), VTLayout.getNumVTableThunks(), RTTI);
1227  VTable->setInitializer(Init);
1228
1229  // Set the correct linkage.
1230  VTable->setLinkage(Linkage);
1231
1232  // Set the right visibility.
1233  CGM.setGlobalVisibility(VTable, RD);
1234
1235  // If this is the magic class __cxxabiv1::__fundamental_type_info,
1236  // we will emit the typeinfo for the fundamental types. This is the
1237  // same behaviour as GCC.
1238  const DeclContext *DC = RD->getDeclContext();
1239  if (RD->getIdentifier() &&
1240      RD->getIdentifier()->isStr("__fundamental_type_info") &&
1241      isa<NamespaceDecl>(DC) && cast<NamespaceDecl>(DC)->getIdentifier() &&
1242      cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__cxxabiv1") &&
1243      DC->getParent()->isTranslationUnit())
1244    EmitFundamentalRTTIDescriptors();
1245}
1246
1247llvm::Value *ItaniumCXXABI::getVTableAddressPointInStructor(
1248    CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1249    const CXXRecordDecl *NearestVBase, bool &NeedsVirtualOffset) {
1250  bool NeedsVTTParam = CGM.getCXXABI().NeedsVTTParameter(CGF.CurGD);
1251  NeedsVirtualOffset = (NeedsVTTParam && NearestVBase);
1252
1253  llvm::Value *VTableAddressPoint;
1254  if (NeedsVTTParam && (Base.getBase()->getNumVBases() || NearestVBase)) {
1255    // Get the secondary vpointer index.
1256    uint64_t VirtualPointerIndex =
1257        CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base);
1258
1259    /// Load the VTT.
1260    llvm::Value *VTT = CGF.LoadCXXVTT();
1261    if (VirtualPointerIndex)
1262      VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex);
1263
1264    // And load the address point from the VTT.
1265    VTableAddressPoint = CGF.Builder.CreateLoad(VTT);
1266  } else {
1267    llvm::Constant *VTable =
1268        CGM.getCXXABI().getAddrOfVTable(VTableClass, CharUnits());
1269    uint64_t AddressPoint = CGM.getItaniumVTableContext()
1270                                .getVTableLayout(VTableClass)
1271                                .getAddressPoint(Base);
1272    VTableAddressPoint =
1273        CGF.Builder.CreateConstInBoundsGEP2_64(VTable, 0, AddressPoint);
1274  }
1275
1276  return VTableAddressPoint;
1277}
1278
1279llvm::Constant *ItaniumCXXABI::getVTableAddressPointForConstExpr(
1280    BaseSubobject Base, const CXXRecordDecl *VTableClass) {
1281  llvm::Constant *VTable = getAddrOfVTable(VTableClass, CharUnits());
1282
1283  // Find the appropriate vtable within the vtable group.
1284  uint64_t AddressPoint = CGM.getItaniumVTableContext()
1285                              .getVTableLayout(VTableClass)
1286                              .getAddressPoint(Base);
1287  llvm::Value *Indices[] = {
1288    llvm::ConstantInt::get(CGM.Int64Ty, 0),
1289    llvm::ConstantInt::get(CGM.Int64Ty, AddressPoint)
1290  };
1291
1292  return llvm::ConstantExpr::getInBoundsGetElementPtr(VTable, Indices);
1293}
1294
1295llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1296                                                     CharUnits VPtrOffset) {
1297  assert(VPtrOffset.isZero() && "Itanium ABI only supports zero vptr offsets");
1298
1299  llvm::GlobalVariable *&VTable = VTables[RD];
1300  if (VTable)
1301    return VTable;
1302
1303  // Queue up this v-table for possible deferred emission.
1304  CGM.addDeferredVTable(RD);
1305
1306  SmallString<256> OutName;
1307  llvm::raw_svector_ostream Out(OutName);
1308  getMangleContext().mangleCXXVTable(RD, Out);
1309  Out.flush();
1310  StringRef Name = OutName.str();
1311
1312  ItaniumVTableContext &VTContext = CGM.getItaniumVTableContext();
1313  llvm::ArrayType *ArrayType = llvm::ArrayType::get(
1314      CGM.Int8PtrTy, VTContext.getVTableLayout(RD).getNumVTableComponents());
1315
1316  VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
1317      Name, ArrayType, llvm::GlobalValue::ExternalLinkage);
1318  VTable->setUnnamedAddr(true);
1319
1320  if (RD->hasAttr<DLLImportAttr>())
1321    VTable->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
1322  else if (RD->hasAttr<DLLExportAttr>())
1323    VTable->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
1324
1325  return VTable;
1326}
1327
1328llvm::Value *ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
1329                                                      GlobalDecl GD,
1330                                                      llvm::Value *This,
1331                                                      llvm::Type *Ty) {
1332  GD = GD.getCanonicalDecl();
1333  Ty = Ty->getPointerTo()->getPointerTo();
1334  llvm::Value *VTable = CGF.GetVTablePtr(This, Ty);
1335
1336  uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
1337  llvm::Value *VFuncPtr =
1338      CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
1339  return CGF.Builder.CreateLoad(VFuncPtr);
1340}
1341
1342void ItaniumCXXABI::EmitVirtualDestructorCall(CodeGenFunction &CGF,
1343                                              const CXXDestructorDecl *Dtor,
1344                                              CXXDtorType DtorType,
1345                                              SourceLocation CallLoc,
1346                                              llvm::Value *This) {
1347  assert(DtorType == Dtor_Deleting || DtorType == Dtor_Complete);
1348
1349  const CGFunctionInfo *FInfo
1350    = &CGM.getTypes().arrangeCXXDestructor(Dtor, DtorType);
1351  llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1352  llvm::Value *Callee =
1353      getVirtualFunctionPointer(CGF, GlobalDecl(Dtor, DtorType), This, Ty);
1354
1355  CGF.EmitCXXMemberCall(Dtor, CallLoc, Callee, ReturnValueSlot(), This,
1356                        /*ImplicitParam=*/nullptr, QualType(), nullptr,
1357                        nullptr);
1358}
1359
1360void ItaniumCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
1361  CodeGenVTables &VTables = CGM.getVTables();
1362  llvm::GlobalVariable *VTT = VTables.GetAddrOfVTT(RD);
1363  VTables.EmitVTTDefinition(VTT, CGM.getVTableLinkage(RD), RD);
1364}
1365
1366static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF,
1367                                          llvm::Value *Ptr,
1368                                          int64_t NonVirtualAdjustment,
1369                                          int64_t VirtualAdjustment,
1370                                          bool IsReturnAdjustment) {
1371  if (!NonVirtualAdjustment && !VirtualAdjustment)
1372    return Ptr;
1373
1374  llvm::Type *Int8PtrTy = CGF.Int8PtrTy;
1375  llvm::Value *V = CGF.Builder.CreateBitCast(Ptr, Int8PtrTy);
1376
1377  if (NonVirtualAdjustment && !IsReturnAdjustment) {
1378    // Perform the non-virtual adjustment for a base-to-derived cast.
1379    V = CGF.Builder.CreateConstInBoundsGEP1_64(V, NonVirtualAdjustment);
1380  }
1381
1382  if (VirtualAdjustment) {
1383    llvm::Type *PtrDiffTy =
1384        CGF.ConvertType(CGF.getContext().getPointerDiffType());
1385
1386    // Perform the virtual adjustment.
1387    llvm::Value *VTablePtrPtr =
1388        CGF.Builder.CreateBitCast(V, Int8PtrTy->getPointerTo());
1389
1390    llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr);
1391
1392    llvm::Value *OffsetPtr =
1393        CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment);
1394
1395    OffsetPtr = CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo());
1396
1397    // Load the adjustment offset from the vtable.
1398    llvm::Value *Offset = CGF.Builder.CreateLoad(OffsetPtr);
1399
1400    // Adjust our pointer.
1401    V = CGF.Builder.CreateInBoundsGEP(V, Offset);
1402  }
1403
1404  if (NonVirtualAdjustment && IsReturnAdjustment) {
1405    // Perform the non-virtual adjustment for a derived-to-base cast.
1406    V = CGF.Builder.CreateConstInBoundsGEP1_64(V, NonVirtualAdjustment);
1407  }
1408
1409  // Cast back to the original type.
1410  return CGF.Builder.CreateBitCast(V, Ptr->getType());
1411}
1412
1413llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF,
1414                                                  llvm::Value *This,
1415                                                  const ThisAdjustment &TA) {
1416  return performTypeAdjustment(CGF, This, TA.NonVirtual,
1417                               TA.Virtual.Itanium.VCallOffsetOffset,
1418                               /*IsReturnAdjustment=*/false);
1419}
1420
1421llvm::Value *
1422ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, llvm::Value *Ret,
1423                                       const ReturnAdjustment &RA) {
1424  return performTypeAdjustment(CGF, Ret, RA.NonVirtual,
1425                               RA.Virtual.Itanium.VBaseOffsetOffset,
1426                               /*IsReturnAdjustment=*/true);
1427}
1428
1429void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF,
1430                                    RValue RV, QualType ResultType) {
1431  if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl()))
1432    return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType);
1433
1434  // Destructor thunks in the ARM ABI have indeterminate results.
1435  llvm::Type *T =
1436    cast<llvm::PointerType>(CGF.ReturnValue->getType())->getElementType();
1437  RValue Undef = RValue::get(llvm::UndefValue::get(T));
1438  return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType);
1439}
1440
1441/************************** Array allocation cookies **************************/
1442
1443CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1444  // The array cookie is a size_t; pad that up to the element alignment.
1445  // The cookie is actually right-justified in that space.
1446  return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),
1447                  CGM.getContext().getTypeAlignInChars(elementType));
1448}
1449
1450llvm::Value *ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1451                                                  llvm::Value *NewPtr,
1452                                                  llvm::Value *NumElements,
1453                                                  const CXXNewExpr *expr,
1454                                                  QualType ElementType) {
1455  assert(requiresArrayCookie(expr));
1456
1457  unsigned AS = NewPtr->getType()->getPointerAddressSpace();
1458
1459  ASTContext &Ctx = getContext();
1460  QualType SizeTy = Ctx.getSizeType();
1461  CharUnits SizeSize = Ctx.getTypeSizeInChars(SizeTy);
1462
1463  // The size of the cookie.
1464  CharUnits CookieSize =
1465    std::max(SizeSize, Ctx.getTypeAlignInChars(ElementType));
1466  assert(CookieSize == getArrayCookieSizeImpl(ElementType));
1467
1468  // Compute an offset to the cookie.
1469  llvm::Value *CookiePtr = NewPtr;
1470  CharUnits CookieOffset = CookieSize - SizeSize;
1471  if (!CookieOffset.isZero())
1472    CookiePtr = CGF.Builder.CreateConstInBoundsGEP1_64(CookiePtr,
1473                                                 CookieOffset.getQuantity());
1474
1475  // Write the number of elements into the appropriate slot.
1476  llvm::Value *NumElementsPtr
1477    = CGF.Builder.CreateBitCast(CookiePtr,
1478                                CGF.ConvertType(SizeTy)->getPointerTo(AS));
1479  CGF.Builder.CreateStore(NumElements, NumElementsPtr);
1480
1481  // Finally, compute a pointer to the actual data buffer by skipping
1482  // over the cookie completely.
1483  return CGF.Builder.CreateConstInBoundsGEP1_64(NewPtr,
1484                                                CookieSize.getQuantity());
1485}
1486
1487llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1488                                                llvm::Value *allocPtr,
1489                                                CharUnits cookieSize) {
1490  // The element size is right-justified in the cookie.
1491  llvm::Value *numElementsPtr = allocPtr;
1492  CharUnits numElementsOffset =
1493    cookieSize - CharUnits::fromQuantity(CGF.SizeSizeInBytes);
1494  if (!numElementsOffset.isZero())
1495    numElementsPtr =
1496      CGF.Builder.CreateConstInBoundsGEP1_64(numElementsPtr,
1497                                             numElementsOffset.getQuantity());
1498
1499  unsigned AS = allocPtr->getType()->getPointerAddressSpace();
1500  numElementsPtr =
1501    CGF.Builder.CreateBitCast(numElementsPtr, CGF.SizeTy->getPointerTo(AS));
1502  return CGF.Builder.CreateLoad(numElementsPtr);
1503}
1504
1505CharUnits ARMCXXABI::getArrayCookieSizeImpl(QualType elementType) {
1506  // ARM says that the cookie is always:
1507  //   struct array_cookie {
1508  //     std::size_t element_size; // element_size != 0
1509  //     std::size_t element_count;
1510  //   };
1511  // But the base ABI doesn't give anything an alignment greater than
1512  // 8, so we can dismiss this as typical ABI-author blindness to
1513  // actual language complexity and round up to the element alignment.
1514  return std::max(CharUnits::fromQuantity(2 * CGM.SizeSizeInBytes),
1515                  CGM.getContext().getTypeAlignInChars(elementType));
1516}
1517
1518llvm::Value *ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
1519                                              llvm::Value *newPtr,
1520                                              llvm::Value *numElements,
1521                                              const CXXNewExpr *expr,
1522                                              QualType elementType) {
1523  assert(requiresArrayCookie(expr));
1524
1525  // NewPtr is a char*, but we generalize to arbitrary addrspaces.
1526  unsigned AS = newPtr->getType()->getPointerAddressSpace();
1527
1528  // The cookie is always at the start of the buffer.
1529  llvm::Value *cookie = newPtr;
1530
1531  // The first element is the element size.
1532  cookie = CGF.Builder.CreateBitCast(cookie, CGF.SizeTy->getPointerTo(AS));
1533  llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy,
1534                 getContext().getTypeSizeInChars(elementType).getQuantity());
1535  CGF.Builder.CreateStore(elementSize, cookie);
1536
1537  // The second element is the element count.
1538  cookie = CGF.Builder.CreateConstInBoundsGEP1_32(cookie, 1);
1539  CGF.Builder.CreateStore(numElements, cookie);
1540
1541  // Finally, compute a pointer to the actual data buffer by skipping
1542  // over the cookie completely.
1543  CharUnits cookieSize = ARMCXXABI::getArrayCookieSizeImpl(elementType);
1544  return CGF.Builder.CreateConstInBoundsGEP1_64(newPtr,
1545                                                cookieSize.getQuantity());
1546}
1547
1548llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
1549                                            llvm::Value *allocPtr,
1550                                            CharUnits cookieSize) {
1551  // The number of elements is at offset sizeof(size_t) relative to
1552  // the allocated pointer.
1553  llvm::Value *numElementsPtr
1554    = CGF.Builder.CreateConstInBoundsGEP1_64(allocPtr, CGF.SizeSizeInBytes);
1555
1556  unsigned AS = allocPtr->getType()->getPointerAddressSpace();
1557  numElementsPtr =
1558    CGF.Builder.CreateBitCast(numElementsPtr, CGF.SizeTy->getPointerTo(AS));
1559  return CGF.Builder.CreateLoad(numElementsPtr);
1560}
1561
1562/*********************** Static local initialization **************************/
1563
1564static llvm::Constant *getGuardAcquireFn(CodeGenModule &CGM,
1565                                         llvm::PointerType *GuardPtrTy) {
1566  // int __cxa_guard_acquire(__guard *guard_object);
1567  llvm::FunctionType *FTy =
1568    llvm::FunctionType::get(CGM.getTypes().ConvertType(CGM.getContext().IntTy),
1569                            GuardPtrTy, /*isVarArg=*/false);
1570  return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_acquire",
1571                                   llvm::AttributeSet::get(CGM.getLLVMContext(),
1572                                              llvm::AttributeSet::FunctionIndex,
1573                                                 llvm::Attribute::NoUnwind));
1574}
1575
1576static llvm::Constant *getGuardReleaseFn(CodeGenModule &CGM,
1577                                         llvm::PointerType *GuardPtrTy) {
1578  // void __cxa_guard_release(__guard *guard_object);
1579  llvm::FunctionType *FTy =
1580    llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1581  return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_release",
1582                                   llvm::AttributeSet::get(CGM.getLLVMContext(),
1583                                              llvm::AttributeSet::FunctionIndex,
1584                                                 llvm::Attribute::NoUnwind));
1585}
1586
1587static llvm::Constant *getGuardAbortFn(CodeGenModule &CGM,
1588                                       llvm::PointerType *GuardPtrTy) {
1589  // void __cxa_guard_abort(__guard *guard_object);
1590  llvm::FunctionType *FTy =
1591    llvm::FunctionType::get(CGM.VoidTy, GuardPtrTy, /*isVarArg=*/false);
1592  return CGM.CreateRuntimeFunction(FTy, "__cxa_guard_abort",
1593                                   llvm::AttributeSet::get(CGM.getLLVMContext(),
1594                                              llvm::AttributeSet::FunctionIndex,
1595                                                 llvm::Attribute::NoUnwind));
1596}
1597
1598namespace {
1599  struct CallGuardAbort : EHScopeStack::Cleanup {
1600    llvm::GlobalVariable *Guard;
1601    CallGuardAbort(llvm::GlobalVariable *Guard) : Guard(Guard) {}
1602
1603    void Emit(CodeGenFunction &CGF, Flags flags) override {
1604      CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()),
1605                                  Guard);
1606    }
1607  };
1608}
1609
1610/// The ARM code here follows the Itanium code closely enough that we
1611/// just special-case it at particular places.
1612void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
1613                                    const VarDecl &D,
1614                                    llvm::GlobalVariable *var,
1615                                    bool shouldPerformInit) {
1616  CGBuilderTy &Builder = CGF.Builder;
1617
1618  // We only need to use thread-safe statics for local non-TLS variables;
1619  // global initialization is always single-threaded.
1620  bool threadsafe = getContext().getLangOpts().ThreadsafeStatics &&
1621                    D.isLocalVarDecl() && !D.getTLSKind();
1622
1623  // If we have a global variable with internal linkage and thread-safe statics
1624  // are disabled, we can just let the guard variable be of type i8.
1625  bool useInt8GuardVariable = !threadsafe && var->hasInternalLinkage();
1626
1627  llvm::IntegerType *guardTy;
1628  if (useInt8GuardVariable) {
1629    guardTy = CGF.Int8Ty;
1630  } else {
1631    // Guard variables are 64 bits in the generic ABI and size width on ARM
1632    // (i.e. 32-bit on AArch32, 64-bit on AArch64).
1633    guardTy = (UseARMGuardVarABI ? CGF.SizeTy : CGF.Int64Ty);
1634  }
1635  llvm::PointerType *guardPtrTy = guardTy->getPointerTo();
1636
1637  // Create the guard variable if we don't already have it (as we
1638  // might if we're double-emitting this function body).
1639  llvm::GlobalVariable *guard = CGM.getStaticLocalDeclGuardAddress(&D);
1640  if (!guard) {
1641    // Mangle the name for the guard.
1642    SmallString<256> guardName;
1643    {
1644      llvm::raw_svector_ostream out(guardName);
1645      getMangleContext().mangleStaticGuardVariable(&D, out);
1646      out.flush();
1647    }
1648
1649    // Create the guard variable with a zero-initializer.
1650    // Just absorb linkage and visibility from the guarded variable.
1651    guard = new llvm::GlobalVariable(CGM.getModule(), guardTy,
1652                                     false, var->getLinkage(),
1653                                     llvm::ConstantInt::get(guardTy, 0),
1654                                     guardName.str());
1655    guard->setVisibility(var->getVisibility());
1656    // If the variable is thread-local, so is its guard variable.
1657    guard->setThreadLocalMode(var->getThreadLocalMode());
1658
1659    CGM.setStaticLocalDeclGuardAddress(&D, guard);
1660  }
1661
1662  // Test whether the variable has completed initialization.
1663  //
1664  // Itanium C++ ABI 3.3.2:
1665  //   The following is pseudo-code showing how these functions can be used:
1666  //     if (obj_guard.first_byte == 0) {
1667  //       if ( __cxa_guard_acquire (&obj_guard) ) {
1668  //         try {
1669  //           ... initialize the object ...;
1670  //         } catch (...) {
1671  //            __cxa_guard_abort (&obj_guard);
1672  //            throw;
1673  //         }
1674  //         ... queue object destructor with __cxa_atexit() ...;
1675  //         __cxa_guard_release (&obj_guard);
1676  //       }
1677  //     }
1678
1679  // Load the first byte of the guard variable.
1680  llvm::LoadInst *LI =
1681      Builder.CreateLoad(Builder.CreateBitCast(guard, CGM.Int8PtrTy));
1682  LI->setAlignment(1);
1683
1684  // Itanium ABI:
1685  //   An implementation supporting thread-safety on multiprocessor
1686  //   systems must also guarantee that references to the initialized
1687  //   object do not occur before the load of the initialization flag.
1688  //
1689  // In LLVM, we do this by marking the load Acquire.
1690  if (threadsafe)
1691    LI->setAtomic(llvm::Acquire);
1692
1693  // For ARM, we should only check the first bit, rather than the entire byte:
1694  //
1695  // ARM C++ ABI 3.2.3.1:
1696  //   To support the potential use of initialization guard variables
1697  //   as semaphores that are the target of ARM SWP and LDREX/STREX
1698  //   synchronizing instructions we define a static initialization
1699  //   guard variable to be a 4-byte aligned, 4-byte word with the
1700  //   following inline access protocol.
1701  //     #define INITIALIZED 1
1702  //     if ((obj_guard & INITIALIZED) != INITIALIZED) {
1703  //       if (__cxa_guard_acquire(&obj_guard))
1704  //         ...
1705  //     }
1706  //
1707  // and similarly for ARM64:
1708  //
1709  // ARM64 C++ ABI 3.2.2:
1710  //   This ABI instead only specifies the value bit 0 of the static guard
1711  //   variable; all other bits are platform defined. Bit 0 shall be 0 when the
1712  //   variable is not initialized and 1 when it is.
1713  llvm::Value *V =
1714      (UseARMGuardVarABI && !useInt8GuardVariable)
1715          ? Builder.CreateAnd(LI, llvm::ConstantInt::get(CGM.Int8Ty, 1))
1716          : LI;
1717  llvm::Value *isInitialized = Builder.CreateIsNull(V, "guard.uninitialized");
1718
1719  llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check");
1720  llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
1721
1722  // Check if the first byte of the guard variable is zero.
1723  Builder.CreateCondBr(isInitialized, InitCheckBlock, EndBlock);
1724
1725  CGF.EmitBlock(InitCheckBlock);
1726
1727  // Variables used when coping with thread-safe statics and exceptions.
1728  if (threadsafe) {
1729    // Call __cxa_guard_acquire.
1730    llvm::Value *V
1731      = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard);
1732
1733    llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
1734
1735    Builder.CreateCondBr(Builder.CreateIsNotNull(V, "tobool"),
1736                         InitBlock, EndBlock);
1737
1738    // Call __cxa_guard_abort along the exceptional edge.
1739    CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard);
1740
1741    CGF.EmitBlock(InitBlock);
1742  }
1743
1744  // Emit the initializer and add a global destructor if appropriate.
1745  CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit);
1746
1747  if (threadsafe) {
1748    // Pop the guard-abort cleanup if we pushed one.
1749    CGF.PopCleanupBlock();
1750
1751    // Call __cxa_guard_release.  This cannot throw.
1752    CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy), guard);
1753  } else {
1754    Builder.CreateStore(llvm::ConstantInt::get(guardTy, 1), guard);
1755  }
1756
1757  CGF.EmitBlock(EndBlock);
1758}
1759
1760/// Register a global destructor using __cxa_atexit.
1761static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF,
1762                                        llvm::Constant *dtor,
1763                                        llvm::Constant *addr,
1764                                        bool TLS) {
1765  const char *Name = "__cxa_atexit";
1766  if (TLS) {
1767    const llvm::Triple &T = CGF.getTarget().getTriple();
1768    Name = T.isMacOSX() ?  "_tlv_atexit" : "__cxa_thread_atexit";
1769  }
1770
1771  // We're assuming that the destructor function is something we can
1772  // reasonably call with the default CC.  Go ahead and cast it to the
1773  // right prototype.
1774  llvm::Type *dtorTy =
1775    llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo();
1776
1777  // extern "C" int __cxa_atexit(void (*f)(void *), void *p, void *d);
1778  llvm::Type *paramTys[] = { dtorTy, CGF.Int8PtrTy, CGF.Int8PtrTy };
1779  llvm::FunctionType *atexitTy =
1780    llvm::FunctionType::get(CGF.IntTy, paramTys, false);
1781
1782  // Fetch the actual function.
1783  llvm::Constant *atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name);
1784  if (llvm::Function *fn = dyn_cast<llvm::Function>(atexit))
1785    fn->setDoesNotThrow();
1786
1787  // Create a variable that binds the atexit to this shared object.
1788  llvm::Constant *handle =
1789    CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle");
1790
1791  llvm::Value *args[] = {
1792    llvm::ConstantExpr::getBitCast(dtor, dtorTy),
1793    llvm::ConstantExpr::getBitCast(addr, CGF.Int8PtrTy),
1794    handle
1795  };
1796  CGF.EmitNounwindRuntimeCall(atexit, args);
1797}
1798
1799/// Register a global destructor as best as we know how.
1800void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF,
1801                                       const VarDecl &D,
1802                                       llvm::Constant *dtor,
1803                                       llvm::Constant *addr) {
1804  // Use __cxa_atexit if available.
1805  if (CGM.getCodeGenOpts().CXAAtExit)
1806    return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind());
1807
1808  if (D.getTLSKind())
1809    CGM.ErrorUnsupported(&D, "non-trivial TLS destruction");
1810
1811  // In Apple kexts, we want to add a global destructor entry.
1812  // FIXME: shouldn't this be guarded by some variable?
1813  if (CGM.getLangOpts().AppleKext) {
1814    // Generate a global destructor entry.
1815    return CGM.AddCXXDtorEntry(dtor, addr);
1816  }
1817
1818  CGF.registerGlobalDtorWithAtExit(D, dtor, addr);
1819}
1820
1821/// Get the appropriate linkage for the wrapper function. This is essentially
1822/// the weak form of the variable's linkage; every translation unit which needs
1823/// the wrapper emits a copy, and we want the linker to merge them.
1824static llvm::GlobalValue::LinkageTypes
1825getThreadLocalWrapperLinkage(const VarDecl *VD, CodeGen::CodeGenModule &CGM) {
1826  llvm::GlobalValue::LinkageTypes VarLinkage =
1827      CGM.getLLVMLinkageVarDefinition(VD, /*isConstant=*/false);
1828
1829  // For internal linkage variables, we don't need an external or weak wrapper.
1830  if (llvm::GlobalValue::isLocalLinkage(VarLinkage))
1831    return VarLinkage;
1832
1833  // All accesses to the thread_local variable go through the thread wrapper.
1834  // However, this means that we cannot allow the thread wrapper to get inlined
1835  // into any functions.
1836  if (VD->getTLSKind() == VarDecl::TLS_Dynamic &&
1837      CGM.getTarget().getTriple().isMacOSX())
1838    return llvm::GlobalValue::WeakAnyLinkage;
1839  return llvm::GlobalValue::WeakODRLinkage;
1840}
1841
1842llvm::Function *
1843ItaniumCXXABI::getOrCreateThreadLocalWrapper(const VarDecl *VD,
1844                                             llvm::GlobalVariable *Var) {
1845  // Mangle the name for the thread_local wrapper function.
1846  SmallString<256> WrapperName;
1847  {
1848    llvm::raw_svector_ostream Out(WrapperName);
1849    getMangleContext().mangleItaniumThreadLocalWrapper(VD, Out);
1850    Out.flush();
1851  }
1852
1853  if (llvm::Value *V = Var->getParent()->getNamedValue(WrapperName))
1854    return cast<llvm::Function>(V);
1855
1856  llvm::Type *RetTy = Var->getType();
1857  if (VD->getType()->isReferenceType())
1858    RetTy = RetTy->getPointerElementType();
1859
1860  llvm::FunctionType *FnTy = llvm::FunctionType::get(RetTy, false);
1861  llvm::Function *Wrapper =
1862      llvm::Function::Create(FnTy, getThreadLocalWrapperLinkage(VD, CGM),
1863                             WrapperName.str(), &CGM.getModule());
1864  // Always resolve references to the wrapper at link time.
1865  if (!Wrapper->hasLocalLinkage())
1866    Wrapper->setVisibility(llvm::GlobalValue::HiddenVisibility);
1867  return Wrapper;
1868}
1869
1870void ItaniumCXXABI::EmitThreadLocalInitFuncs(
1871    ArrayRef<std::pair<const VarDecl *, llvm::GlobalVariable *> > Decls,
1872    llvm::Function *InitFunc) {
1873  for (unsigned I = 0, N = Decls.size(); I != N; ++I) {
1874    const VarDecl *VD = Decls[I].first;
1875    llvm::GlobalVariable *Var = Decls[I].second;
1876
1877    // Mangle the name for the thread_local initialization function.
1878    SmallString<256> InitFnName;
1879    {
1880      llvm::raw_svector_ostream Out(InitFnName);
1881      getMangleContext().mangleItaniumThreadLocalInit(VD, Out);
1882      Out.flush();
1883    }
1884
1885    // If we have a definition for the variable, emit the initialization
1886    // function as an alias to the global Init function (if any). Otherwise,
1887    // produce a declaration of the initialization function.
1888    llvm::GlobalValue *Init = nullptr;
1889    bool InitIsInitFunc = false;
1890    if (VD->hasDefinition()) {
1891      InitIsInitFunc = true;
1892      if (InitFunc)
1893        Init = llvm::GlobalAlias::create(Var->getLinkage(), InitFnName.str(),
1894                                         InitFunc);
1895    } else {
1896      // Emit a weak global function referring to the initialization function.
1897      // This function will not exist if the TU defining the thread_local
1898      // variable in question does not need any dynamic initialization for
1899      // its thread_local variables.
1900      llvm::FunctionType *FnTy = llvm::FunctionType::get(CGM.VoidTy, false);
1901      Init = llvm::Function::Create(
1902          FnTy, llvm::GlobalVariable::ExternalWeakLinkage, InitFnName.str(),
1903          &CGM.getModule());
1904    }
1905
1906    if (Init)
1907      Init->setVisibility(Var->getVisibility());
1908
1909    llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Var);
1910    llvm::LLVMContext &Context = CGM.getModule().getContext();
1911    llvm::BasicBlock *Entry = llvm::BasicBlock::Create(Context, "", Wrapper);
1912    CGBuilderTy Builder(Entry);
1913    if (InitIsInitFunc) {
1914      if (Init)
1915        Builder.CreateCall(Init);
1916    } else {
1917      // Don't know whether we have an init function. Call it if it exists.
1918      llvm::Value *Have = Builder.CreateIsNotNull(Init);
1919      llvm::BasicBlock *InitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
1920      llvm::BasicBlock *ExitBB = llvm::BasicBlock::Create(Context, "", Wrapper);
1921      Builder.CreateCondBr(Have, InitBB, ExitBB);
1922
1923      Builder.SetInsertPoint(InitBB);
1924      Builder.CreateCall(Init);
1925      Builder.CreateBr(ExitBB);
1926
1927      Builder.SetInsertPoint(ExitBB);
1928    }
1929
1930    // For a reference, the result of the wrapper function is a pointer to
1931    // the referenced object.
1932    llvm::Value *Val = Var;
1933    if (VD->getType()->isReferenceType()) {
1934      llvm::LoadInst *LI = Builder.CreateLoad(Val);
1935      LI->setAlignment(CGM.getContext().getDeclAlign(VD).getQuantity());
1936      Val = LI;
1937    }
1938
1939    Builder.CreateRet(Val);
1940  }
1941}
1942
1943LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
1944                                                   const VarDecl *VD,
1945                                                   QualType LValType) {
1946  QualType T = VD->getType();
1947  llvm::Type *Ty = CGF.getTypes().ConvertTypeForMem(T);
1948  llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD, Ty);
1949  llvm::Function *Wrapper =
1950      getOrCreateThreadLocalWrapper(VD, cast<llvm::GlobalVariable>(Val));
1951
1952  Val = CGF.Builder.CreateCall(Wrapper);
1953
1954  LValue LV;
1955  if (VD->getType()->isReferenceType())
1956    LV = CGF.MakeNaturalAlignAddrLValue(Val, LValType);
1957  else
1958    LV = CGF.MakeAddrLValue(Val, LValType, CGF.getContext().getDeclAlign(VD));
1959  // FIXME: need setObjCGCLValueClass?
1960  return LV;
1961}
1962
1963/// Return whether the given global decl needs a VTT parameter, which it does
1964/// if it's a base constructor or destructor with virtual bases.
1965bool ItaniumCXXABI::NeedsVTTParameter(GlobalDecl GD) {
1966  const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
1967
1968  // We don't have any virtual bases, just return early.
1969  if (!MD->getParent()->getNumVBases())
1970    return false;
1971
1972  // Check if we have a base constructor.
1973  if (isa<CXXConstructorDecl>(MD) && GD.getCtorType() == Ctor_Base)
1974    return true;
1975
1976  // Check if we have a base destructor.
1977  if (isa<CXXDestructorDecl>(MD) && GD.getDtorType() == Dtor_Base)
1978    return true;
1979
1980  return false;
1981}
1982
1983namespace {
1984class ItaniumRTTIBuilder {
1985  CodeGenModule &CGM;  // Per-module state.
1986  llvm::LLVMContext &VMContext;
1987  const ItaniumCXXABI &CXXABI;  // Per-module state.
1988
1989  /// Fields - The fields of the RTTI descriptor currently being built.
1990  SmallVector<llvm::Constant *, 16> Fields;
1991
1992  /// GetAddrOfTypeName - Returns the mangled type name of the given type.
1993  llvm::GlobalVariable *
1994  GetAddrOfTypeName(QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage);
1995
1996  /// GetAddrOfExternalRTTIDescriptor - Returns the constant for the RTTI
1997  /// descriptor of the given type.
1998  llvm::Constant *GetAddrOfExternalRTTIDescriptor(QualType Ty);
1999
2000  /// BuildVTablePointer - Build the vtable pointer for the given type.
2001  void BuildVTablePointer(const Type *Ty);
2002
2003  /// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
2004  /// inheritance, according to the Itanium C++ ABI, 2.9.5p6b.
2005  void BuildSIClassTypeInfo(const CXXRecordDecl *RD);
2006
2007  /// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
2008  /// classes with bases that do not satisfy the abi::__si_class_type_info
2009  /// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
2010  void BuildVMIClassTypeInfo(const CXXRecordDecl *RD);
2011
2012  /// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct, used
2013  /// for pointer types.
2014  void BuildPointerTypeInfo(QualType PointeeTy);
2015
2016  /// BuildObjCObjectTypeInfo - Build the appropriate kind of
2017  /// type_info for an object type.
2018  void BuildObjCObjectTypeInfo(const ObjCObjectType *Ty);
2019
2020  /// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
2021  /// struct, used for member pointer types.
2022  void BuildPointerToMemberTypeInfo(const MemberPointerType *Ty);
2023
2024public:
2025  ItaniumRTTIBuilder(const ItaniumCXXABI &ABI)
2026      : CGM(ABI.CGM), VMContext(CGM.getModule().getContext()), CXXABI(ABI) {}
2027
2028  // Pointer type info flags.
2029  enum {
2030    /// PTI_Const - Type has const qualifier.
2031    PTI_Const = 0x1,
2032
2033    /// PTI_Volatile - Type has volatile qualifier.
2034    PTI_Volatile = 0x2,
2035
2036    /// PTI_Restrict - Type has restrict qualifier.
2037    PTI_Restrict = 0x4,
2038
2039    /// PTI_Incomplete - Type is incomplete.
2040    PTI_Incomplete = 0x8,
2041
2042    /// PTI_ContainingClassIncomplete - Containing class is incomplete.
2043    /// (in pointer to member).
2044    PTI_ContainingClassIncomplete = 0x10
2045  };
2046
2047  // VMI type info flags.
2048  enum {
2049    /// VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
2050    VMI_NonDiamondRepeat = 0x1,
2051
2052    /// VMI_DiamondShaped - Class is diamond shaped.
2053    VMI_DiamondShaped = 0x2
2054  };
2055
2056  // Base class type info flags.
2057  enum {
2058    /// BCTI_Virtual - Base class is virtual.
2059    BCTI_Virtual = 0x1,
2060
2061    /// BCTI_Public - Base class is public.
2062    BCTI_Public = 0x2
2063  };
2064
2065  /// BuildTypeInfo - Build the RTTI type info struct for the given type.
2066  ///
2067  /// \param Force - true to force the creation of this RTTI value
2068  llvm::Constant *BuildTypeInfo(QualType Ty, bool Force = false);
2069};
2070}
2071
2072llvm::GlobalVariable *ItaniumRTTIBuilder::GetAddrOfTypeName(
2073    QualType Ty, llvm::GlobalVariable::LinkageTypes Linkage) {
2074  SmallString<256> OutName;
2075  llvm::raw_svector_ostream Out(OutName);
2076  CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(Ty, Out);
2077  Out.flush();
2078  StringRef Name = OutName.str();
2079
2080  // We know that the mangled name of the type starts at index 4 of the
2081  // mangled name of the typename, so we can just index into it in order to
2082  // get the mangled name of the type.
2083  llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
2084                                                            Name.substr(4));
2085
2086  llvm::GlobalVariable *GV =
2087    CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage);
2088
2089  GV->setInitializer(Init);
2090
2091  return GV;
2092}
2093
2094llvm::Constant *
2095ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
2096  // Mangle the RTTI name.
2097  SmallString<256> OutName;
2098  llvm::raw_svector_ostream Out(OutName);
2099  CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2100  Out.flush();
2101  StringRef Name = OutName.str();
2102
2103  // Look for an existing global.
2104  llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name);
2105
2106  if (!GV) {
2107    // Create a new global variable.
2108    GV = new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
2109                                  /*Constant=*/true,
2110                                  llvm::GlobalValue::ExternalLinkage, nullptr,
2111                                  Name);
2112  }
2113
2114  return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
2115}
2116
2117/// TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type
2118/// info for that type is defined in the standard library.
2119static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
2120  // Itanium C++ ABI 2.9.2:
2121  //   Basic type information (e.g. for "int", "bool", etc.) will be kept in
2122  //   the run-time support library. Specifically, the run-time support
2123  //   library should contain type_info objects for the types X, X* and
2124  //   X const*, for every X in: void, std::nullptr_t, bool, wchar_t, char,
2125  //   unsigned char, signed char, short, unsigned short, int, unsigned int,
2126  //   long, unsigned long, long long, unsigned long long, float, double,
2127  //   long double, char16_t, char32_t, and the IEEE 754r decimal and
2128  //   half-precision floating point types.
2129  switch (Ty->getKind()) {
2130    case BuiltinType::Void:
2131    case BuiltinType::NullPtr:
2132    case BuiltinType::Bool:
2133    case BuiltinType::WChar_S:
2134    case BuiltinType::WChar_U:
2135    case BuiltinType::Char_U:
2136    case BuiltinType::Char_S:
2137    case BuiltinType::UChar:
2138    case BuiltinType::SChar:
2139    case BuiltinType::Short:
2140    case BuiltinType::UShort:
2141    case BuiltinType::Int:
2142    case BuiltinType::UInt:
2143    case BuiltinType::Long:
2144    case BuiltinType::ULong:
2145    case BuiltinType::LongLong:
2146    case BuiltinType::ULongLong:
2147    case BuiltinType::Half:
2148    case BuiltinType::Float:
2149    case BuiltinType::Double:
2150    case BuiltinType::LongDouble:
2151    case BuiltinType::Char16:
2152    case BuiltinType::Char32:
2153    case BuiltinType::Int128:
2154    case BuiltinType::UInt128:
2155    case BuiltinType::OCLImage1d:
2156    case BuiltinType::OCLImage1dArray:
2157    case BuiltinType::OCLImage1dBuffer:
2158    case BuiltinType::OCLImage2d:
2159    case BuiltinType::OCLImage2dArray:
2160    case BuiltinType::OCLImage3d:
2161    case BuiltinType::OCLSampler:
2162    case BuiltinType::OCLEvent:
2163      return true;
2164
2165    case BuiltinType::Dependent:
2166#define BUILTIN_TYPE(Id, SingletonId)
2167#define PLACEHOLDER_TYPE(Id, SingletonId) \
2168    case BuiltinType::Id:
2169#include "clang/AST/BuiltinTypes.def"
2170      llvm_unreachable("asking for RRTI for a placeholder type!");
2171
2172    case BuiltinType::ObjCId:
2173    case BuiltinType::ObjCClass:
2174    case BuiltinType::ObjCSel:
2175      llvm_unreachable("FIXME: Objective-C types are unsupported!");
2176  }
2177
2178  llvm_unreachable("Invalid BuiltinType Kind!");
2179}
2180
2181static bool TypeInfoIsInStandardLibrary(const PointerType *PointerTy) {
2182  QualType PointeeTy = PointerTy->getPointeeType();
2183  const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(PointeeTy);
2184  if (!BuiltinTy)
2185    return false;
2186
2187  // Check the qualifiers.
2188  Qualifiers Quals = PointeeTy.getQualifiers();
2189  Quals.removeConst();
2190
2191  if (!Quals.empty())
2192    return false;
2193
2194  return TypeInfoIsInStandardLibrary(BuiltinTy);
2195}
2196
2197/// IsStandardLibraryRTTIDescriptor - Returns whether the type
2198/// information for the given type exists in the standard library.
2199static bool IsStandardLibraryRTTIDescriptor(QualType Ty) {
2200  // Type info for builtin types is defined in the standard library.
2201  if (const BuiltinType *BuiltinTy = dyn_cast<BuiltinType>(Ty))
2202    return TypeInfoIsInStandardLibrary(BuiltinTy);
2203
2204  // Type info for some pointer types to builtin types is defined in the
2205  // standard library.
2206  if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2207    return TypeInfoIsInStandardLibrary(PointerTy);
2208
2209  return false;
2210}
2211
2212/// ShouldUseExternalRTTIDescriptor - Returns whether the type information for
2213/// the given type exists somewhere else, and that we should not emit the type
2214/// information in this translation unit.  Assumes that it is not a
2215/// standard-library type.
2216static bool ShouldUseExternalRTTIDescriptor(CodeGenModule &CGM,
2217                                            QualType Ty) {
2218  ASTContext &Context = CGM.getContext();
2219
2220  // If RTTI is disabled, assume it might be disabled in the
2221  // translation unit that defines any potential key function, too.
2222  if (!Context.getLangOpts().RTTI) return false;
2223
2224  if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2225    const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
2226    if (!RD->hasDefinition())
2227      return false;
2228
2229    if (!RD->isDynamicClass())
2230      return false;
2231
2232    // FIXME: this may need to be reconsidered if the key function
2233    // changes.
2234    return CGM.getVTables().isVTableExternal(RD);
2235  }
2236
2237  return false;
2238}
2239
2240/// IsIncompleteClassType - Returns whether the given record type is incomplete.
2241static bool IsIncompleteClassType(const RecordType *RecordTy) {
2242  return !RecordTy->getDecl()->isCompleteDefinition();
2243}
2244
2245/// ContainsIncompleteClassType - Returns whether the given type contains an
2246/// incomplete class type. This is true if
2247///
2248///   * The given type is an incomplete class type.
2249///   * The given type is a pointer type whose pointee type contains an
2250///     incomplete class type.
2251///   * The given type is a member pointer type whose class is an incomplete
2252///     class type.
2253///   * The given type is a member pointer type whoise pointee type contains an
2254///     incomplete class type.
2255/// is an indirect or direct pointer to an incomplete class type.
2256static bool ContainsIncompleteClassType(QualType Ty) {
2257  if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
2258    if (IsIncompleteClassType(RecordTy))
2259      return true;
2260  }
2261
2262  if (const PointerType *PointerTy = dyn_cast<PointerType>(Ty))
2263    return ContainsIncompleteClassType(PointerTy->getPointeeType());
2264
2265  if (const MemberPointerType *MemberPointerTy =
2266      dyn_cast<MemberPointerType>(Ty)) {
2267    // Check if the class type is incomplete.
2268    const RecordType *ClassType = cast<RecordType>(MemberPointerTy->getClass());
2269    if (IsIncompleteClassType(ClassType))
2270      return true;
2271
2272    return ContainsIncompleteClassType(MemberPointerTy->getPointeeType());
2273  }
2274
2275  return false;
2276}
2277
2278// CanUseSingleInheritance - Return whether the given record decl has a "single,
2279// public, non-virtual base at offset zero (i.e. the derived class is dynamic
2280// iff the base is)", according to Itanium C++ ABI, 2.95p6b.
2281static bool CanUseSingleInheritance(const CXXRecordDecl *RD) {
2282  // Check the number of bases.
2283  if (RD->getNumBases() != 1)
2284    return false;
2285
2286  // Get the base.
2287  CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin();
2288
2289  // Check that the base is not virtual.
2290  if (Base->isVirtual())
2291    return false;
2292
2293  // Check that the base is public.
2294  if (Base->getAccessSpecifier() != AS_public)
2295    return false;
2296
2297  // Check that the class is dynamic iff the base is.
2298  const CXXRecordDecl *BaseDecl =
2299    cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2300  if (!BaseDecl->isEmpty() &&
2301      BaseDecl->isDynamicClass() != RD->isDynamicClass())
2302    return false;
2303
2304  return true;
2305}
2306
2307void ItaniumRTTIBuilder::BuildVTablePointer(const Type *Ty) {
2308  // abi::__class_type_info.
2309  static const char * const ClassTypeInfo =
2310    "_ZTVN10__cxxabiv117__class_type_infoE";
2311  // abi::__si_class_type_info.
2312  static const char * const SIClassTypeInfo =
2313    "_ZTVN10__cxxabiv120__si_class_type_infoE";
2314  // abi::__vmi_class_type_info.
2315  static const char * const VMIClassTypeInfo =
2316    "_ZTVN10__cxxabiv121__vmi_class_type_infoE";
2317
2318  const char *VTableName = nullptr;
2319
2320  switch (Ty->getTypeClass()) {
2321#define TYPE(Class, Base)
2322#define ABSTRACT_TYPE(Class, Base)
2323#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
2324#define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
2325#define DEPENDENT_TYPE(Class, Base) case Type::Class:
2326#include "clang/AST/TypeNodes.def"
2327    llvm_unreachable("Non-canonical and dependent types shouldn't get here");
2328
2329  case Type::LValueReference:
2330  case Type::RValueReference:
2331    llvm_unreachable("References shouldn't get here");
2332
2333  case Type::Auto:
2334    llvm_unreachable("Undeduced auto type shouldn't get here");
2335
2336  case Type::Builtin:
2337  // GCC treats vector and complex types as fundamental types.
2338  case Type::Vector:
2339  case Type::ExtVector:
2340  case Type::Complex:
2341  case Type::Atomic:
2342  // FIXME: GCC treats block pointers as fundamental types?!
2343  case Type::BlockPointer:
2344    // abi::__fundamental_type_info.
2345    VTableName = "_ZTVN10__cxxabiv123__fundamental_type_infoE";
2346    break;
2347
2348  case Type::ConstantArray:
2349  case Type::IncompleteArray:
2350  case Type::VariableArray:
2351    // abi::__array_type_info.
2352    VTableName = "_ZTVN10__cxxabiv117__array_type_infoE";
2353    break;
2354
2355  case Type::FunctionNoProto:
2356  case Type::FunctionProto:
2357    // abi::__function_type_info.
2358    VTableName = "_ZTVN10__cxxabiv120__function_type_infoE";
2359    break;
2360
2361  case Type::Enum:
2362    // abi::__enum_type_info.
2363    VTableName = "_ZTVN10__cxxabiv116__enum_type_infoE";
2364    break;
2365
2366  case Type::Record: {
2367    const CXXRecordDecl *RD =
2368      cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
2369
2370    if (!RD->hasDefinition() || !RD->getNumBases()) {
2371      VTableName = ClassTypeInfo;
2372    } else if (CanUseSingleInheritance(RD)) {
2373      VTableName = SIClassTypeInfo;
2374    } else {
2375      VTableName = VMIClassTypeInfo;
2376    }
2377
2378    break;
2379  }
2380
2381  case Type::ObjCObject:
2382    // Ignore protocol qualifiers.
2383    Ty = cast<ObjCObjectType>(Ty)->getBaseType().getTypePtr();
2384
2385    // Handle id and Class.
2386    if (isa<BuiltinType>(Ty)) {
2387      VTableName = ClassTypeInfo;
2388      break;
2389    }
2390
2391    assert(isa<ObjCInterfaceType>(Ty));
2392    // Fall through.
2393
2394  case Type::ObjCInterface:
2395    if (cast<ObjCInterfaceType>(Ty)->getDecl()->getSuperClass()) {
2396      VTableName = SIClassTypeInfo;
2397    } else {
2398      VTableName = ClassTypeInfo;
2399    }
2400    break;
2401
2402  case Type::ObjCObjectPointer:
2403  case Type::Pointer:
2404    // abi::__pointer_type_info.
2405    VTableName = "_ZTVN10__cxxabiv119__pointer_type_infoE";
2406    break;
2407
2408  case Type::MemberPointer:
2409    // abi::__pointer_to_member_type_info.
2410    VTableName = "_ZTVN10__cxxabiv129__pointer_to_member_type_infoE";
2411    break;
2412  }
2413
2414  llvm::Constant *VTable =
2415    CGM.getModule().getOrInsertGlobal(VTableName, CGM.Int8PtrTy);
2416
2417  llvm::Type *PtrDiffTy =
2418    CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType());
2419
2420  // The vtable address point is 2.
2421  llvm::Constant *Two = llvm::ConstantInt::get(PtrDiffTy, 2);
2422  VTable = llvm::ConstantExpr::getInBoundsGetElementPtr(VTable, Two);
2423  VTable = llvm::ConstantExpr::getBitCast(VTable, CGM.Int8PtrTy);
2424
2425  Fields.push_back(VTable);
2426}
2427
2428/// \brief Return the linkage that the type info and type info name constants
2429/// should have for the given type.
2430static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM,
2431                                                             QualType Ty) {
2432  // Itanium C++ ABI 2.9.5p7:
2433  //   In addition, it and all of the intermediate abi::__pointer_type_info
2434  //   structs in the chain down to the abi::__class_type_info for the
2435  //   incomplete class type must be prevented from resolving to the
2436  //   corresponding type_info structs for the complete class type, possibly
2437  //   by making them local static objects. Finally, a dummy class RTTI is
2438  //   generated for the incomplete type that will not resolve to the final
2439  //   complete class RTTI (because the latter need not exist), possibly by
2440  //   making it a local static object.
2441  if (ContainsIncompleteClassType(Ty))
2442    return llvm::GlobalValue::InternalLinkage;
2443
2444  switch (Ty->getLinkage()) {
2445  case NoLinkage:
2446  case InternalLinkage:
2447  case UniqueExternalLinkage:
2448    return llvm::GlobalValue::InternalLinkage;
2449
2450  case VisibleNoLinkage:
2451  case ExternalLinkage:
2452    if (!CGM.getLangOpts().RTTI) {
2453      // RTTI is not enabled, which means that this type info struct is going
2454      // to be used for exception handling. Give it linkonce_odr linkage.
2455      return llvm::GlobalValue::LinkOnceODRLinkage;
2456    }
2457
2458    if (const RecordType *Record = dyn_cast<RecordType>(Ty)) {
2459      const CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl());
2460      if (RD->hasAttr<WeakAttr>())
2461        return llvm::GlobalValue::WeakODRLinkage;
2462      if (RD->isDynamicClass())
2463        return CGM.getVTableLinkage(RD);
2464    }
2465
2466    return llvm::GlobalValue::LinkOnceODRLinkage;
2467  }
2468
2469  llvm_unreachable("Invalid linkage!");
2470}
2471
2472llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(QualType Ty, bool Force) {
2473  // We want to operate on the canonical type.
2474  Ty = CGM.getContext().getCanonicalType(Ty);
2475
2476  // Check if we've already emitted an RTTI descriptor for this type.
2477  SmallString<256> OutName;
2478  llvm::raw_svector_ostream Out(OutName);
2479  CGM.getCXXABI().getMangleContext().mangleCXXRTTI(Ty, Out);
2480  Out.flush();
2481  StringRef Name = OutName.str();
2482
2483  llvm::GlobalVariable *OldGV = CGM.getModule().getNamedGlobal(Name);
2484  if (OldGV && !OldGV->isDeclaration()) {
2485    assert(!OldGV->hasAvailableExternallyLinkage() &&
2486           "available_externally typeinfos not yet implemented");
2487
2488    return llvm::ConstantExpr::getBitCast(OldGV, CGM.Int8PtrTy);
2489  }
2490
2491  // Check if there is already an external RTTI descriptor for this type.
2492  bool IsStdLib = IsStandardLibraryRTTIDescriptor(Ty);
2493  if (!Force && (IsStdLib || ShouldUseExternalRTTIDescriptor(CGM, Ty)))
2494    return GetAddrOfExternalRTTIDescriptor(Ty);
2495
2496  // Emit the standard library with external linkage.
2497  llvm::GlobalVariable::LinkageTypes Linkage;
2498  if (IsStdLib)
2499    Linkage = llvm::GlobalValue::ExternalLinkage;
2500  else
2501    Linkage = getTypeInfoLinkage(CGM, Ty);
2502
2503  // Add the vtable pointer.
2504  BuildVTablePointer(cast<Type>(Ty));
2505
2506  // And the name.
2507  llvm::GlobalVariable *TypeName = GetAddrOfTypeName(Ty, Linkage);
2508  llvm::Constant *TypeNameField;
2509
2510  // If we're supposed to demote the visibility, be sure to set a flag
2511  // to use a string comparison for type_info comparisons.
2512  ItaniumCXXABI::RTTIUniquenessKind RTTIUniqueness =
2513      CXXABI.classifyRTTIUniqueness(Ty, Linkage);
2514  if (RTTIUniqueness != ItaniumCXXABI::RUK_Unique) {
2515    // The flag is the sign bit, which on ARM64 is defined to be clear
2516    // for global pointers.  This is very ARM64-specific.
2517    TypeNameField = llvm::ConstantExpr::getPtrToInt(TypeName, CGM.Int64Ty);
2518    llvm::Constant *flag =
2519        llvm::ConstantInt::get(CGM.Int64Ty, ((uint64_t)1) << 63);
2520    TypeNameField = llvm::ConstantExpr::getAdd(TypeNameField, flag);
2521    TypeNameField =
2522        llvm::ConstantExpr::getIntToPtr(TypeNameField, CGM.Int8PtrTy);
2523  } else {
2524    TypeNameField = llvm::ConstantExpr::getBitCast(TypeName, CGM.Int8PtrTy);
2525  }
2526  Fields.push_back(TypeNameField);
2527
2528  switch (Ty->getTypeClass()) {
2529#define TYPE(Class, Base)
2530#define ABSTRACT_TYPE(Class, Base)
2531#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
2532#define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
2533#define DEPENDENT_TYPE(Class, Base) case Type::Class:
2534#include "clang/AST/TypeNodes.def"
2535    llvm_unreachable("Non-canonical and dependent types shouldn't get here");
2536
2537  // GCC treats vector types as fundamental types.
2538  case Type::Builtin:
2539  case Type::Vector:
2540  case Type::ExtVector:
2541  case Type::Complex:
2542  case Type::BlockPointer:
2543    // Itanium C++ ABI 2.9.5p4:
2544    // abi::__fundamental_type_info adds no data members to std::type_info.
2545    break;
2546
2547  case Type::LValueReference:
2548  case Type::RValueReference:
2549    llvm_unreachable("References shouldn't get here");
2550
2551  case Type::Auto:
2552    llvm_unreachable("Undeduced auto type shouldn't get here");
2553
2554  case Type::ConstantArray:
2555  case Type::IncompleteArray:
2556  case Type::VariableArray:
2557    // Itanium C++ ABI 2.9.5p5:
2558    // abi::__array_type_info adds no data members to std::type_info.
2559    break;
2560
2561  case Type::FunctionNoProto:
2562  case Type::FunctionProto:
2563    // Itanium C++ ABI 2.9.5p5:
2564    // abi::__function_type_info adds no data members to std::type_info.
2565    break;
2566
2567  case Type::Enum:
2568    // Itanium C++ ABI 2.9.5p5:
2569    // abi::__enum_type_info adds no data members to std::type_info.
2570    break;
2571
2572  case Type::Record: {
2573    const CXXRecordDecl *RD =
2574      cast<CXXRecordDecl>(cast<RecordType>(Ty)->getDecl());
2575    if (!RD->hasDefinition() || !RD->getNumBases()) {
2576      // We don't need to emit any fields.
2577      break;
2578    }
2579
2580    if (CanUseSingleInheritance(RD))
2581      BuildSIClassTypeInfo(RD);
2582    else
2583      BuildVMIClassTypeInfo(RD);
2584
2585    break;
2586  }
2587
2588  case Type::ObjCObject:
2589  case Type::ObjCInterface:
2590    BuildObjCObjectTypeInfo(cast<ObjCObjectType>(Ty));
2591    break;
2592
2593  case Type::ObjCObjectPointer:
2594    BuildPointerTypeInfo(cast<ObjCObjectPointerType>(Ty)->getPointeeType());
2595    break;
2596
2597  case Type::Pointer:
2598    BuildPointerTypeInfo(cast<PointerType>(Ty)->getPointeeType());
2599    break;
2600
2601  case Type::MemberPointer:
2602    BuildPointerToMemberTypeInfo(cast<MemberPointerType>(Ty));
2603    break;
2604
2605  case Type::Atomic:
2606    // No fields, at least for the moment.
2607    break;
2608  }
2609
2610  llvm::Constant *Init = llvm::ConstantStruct::getAnon(Fields);
2611
2612  llvm::GlobalVariable *GV =
2613    new llvm::GlobalVariable(CGM.getModule(), Init->getType(),
2614                             /*Constant=*/true, Linkage, Init, Name);
2615
2616  // If there's already an old global variable, replace it with the new one.
2617  if (OldGV) {
2618    GV->takeName(OldGV);
2619    llvm::Constant *NewPtr =
2620      llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
2621    OldGV->replaceAllUsesWith(NewPtr);
2622    OldGV->eraseFromParent();
2623  }
2624
2625  // The Itanium ABI specifies that type_info objects must be globally
2626  // unique, with one exception: if the type is an incomplete class
2627  // type or a (possibly indirect) pointer to one.  That exception
2628  // affects the general case of comparing type_info objects produced
2629  // by the typeid operator, which is why the comparison operators on
2630  // std::type_info generally use the type_info name pointers instead
2631  // of the object addresses.  However, the language's built-in uses
2632  // of RTTI generally require class types to be complete, even when
2633  // manipulating pointers to those class types.  This allows the
2634  // implementation of dynamic_cast to rely on address equality tests,
2635  // which is much faster.
2636
2637  // All of this is to say that it's important that both the type_info
2638  // object and the type_info name be uniqued when weakly emitted.
2639
2640  // Give the type_info object and name the formal visibility of the
2641  // type itself.
2642  llvm::GlobalValue::VisibilityTypes llvmVisibility;
2643  if (llvm::GlobalValue::isLocalLinkage(Linkage))
2644    // If the linkage is local, only default visibility makes sense.
2645    llvmVisibility = llvm::GlobalValue::DefaultVisibility;
2646  else if (RTTIUniqueness == ItaniumCXXABI::RUK_NonUniqueHidden)
2647    llvmVisibility = llvm::GlobalValue::HiddenVisibility;
2648  else
2649    llvmVisibility = CodeGenModule::GetLLVMVisibility(Ty->getVisibility());
2650  TypeName->setVisibility(llvmVisibility);
2651  GV->setVisibility(llvmVisibility);
2652
2653  return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
2654}
2655
2656/// ComputeQualifierFlags - Compute the pointer type info flags from the
2657/// given qualifier.
2658static unsigned ComputeQualifierFlags(Qualifiers Quals) {
2659  unsigned Flags = 0;
2660
2661  if (Quals.hasConst())
2662    Flags |= ItaniumRTTIBuilder::PTI_Const;
2663  if (Quals.hasVolatile())
2664    Flags |= ItaniumRTTIBuilder::PTI_Volatile;
2665  if (Quals.hasRestrict())
2666    Flags |= ItaniumRTTIBuilder::PTI_Restrict;
2667
2668  return Flags;
2669}
2670
2671/// BuildObjCObjectTypeInfo - Build the appropriate kind of type_info
2672/// for the given Objective-C object type.
2673void ItaniumRTTIBuilder::BuildObjCObjectTypeInfo(const ObjCObjectType *OT) {
2674  // Drop qualifiers.
2675  const Type *T = OT->getBaseType().getTypePtr();
2676  assert(isa<BuiltinType>(T) || isa<ObjCInterfaceType>(T));
2677
2678  // The builtin types are abi::__class_type_infos and don't require
2679  // extra fields.
2680  if (isa<BuiltinType>(T)) return;
2681
2682  ObjCInterfaceDecl *Class = cast<ObjCInterfaceType>(T)->getDecl();
2683  ObjCInterfaceDecl *Super = Class->getSuperClass();
2684
2685  // Root classes are also __class_type_info.
2686  if (!Super) return;
2687
2688  QualType SuperTy = CGM.getContext().getObjCInterfaceType(Super);
2689
2690  // Everything else is single inheritance.
2691  llvm::Constant *BaseTypeInfo =
2692      ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(SuperTy);
2693  Fields.push_back(BaseTypeInfo);
2694}
2695
2696/// BuildSIClassTypeInfo - Build an abi::__si_class_type_info, used for single
2697/// inheritance, according to the Itanium C++ ABI, 2.95p6b.
2698void ItaniumRTTIBuilder::BuildSIClassTypeInfo(const CXXRecordDecl *RD) {
2699  // Itanium C++ ABI 2.9.5p6b:
2700  // It adds to abi::__class_type_info a single member pointing to the
2701  // type_info structure for the base type,
2702  llvm::Constant *BaseTypeInfo =
2703    ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(RD->bases_begin()->getType());
2704  Fields.push_back(BaseTypeInfo);
2705}
2706
2707namespace {
2708  /// SeenBases - Contains virtual and non-virtual bases seen when traversing
2709  /// a class hierarchy.
2710  struct SeenBases {
2711    llvm::SmallPtrSet<const CXXRecordDecl *, 16> NonVirtualBases;
2712    llvm::SmallPtrSet<const CXXRecordDecl *, 16> VirtualBases;
2713  };
2714}
2715
2716/// ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in
2717/// abi::__vmi_class_type_info.
2718///
2719static unsigned ComputeVMIClassTypeInfoFlags(const CXXBaseSpecifier *Base,
2720                                             SeenBases &Bases) {
2721
2722  unsigned Flags = 0;
2723
2724  const CXXRecordDecl *BaseDecl =
2725    cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
2726
2727  if (Base->isVirtual()) {
2728    // Mark the virtual base as seen.
2729    if (!Bases.VirtualBases.insert(BaseDecl)) {
2730      // If this virtual base has been seen before, then the class is diamond
2731      // shaped.
2732      Flags |= ItaniumRTTIBuilder::VMI_DiamondShaped;
2733    } else {
2734      if (Bases.NonVirtualBases.count(BaseDecl))
2735        Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
2736    }
2737  } else {
2738    // Mark the non-virtual base as seen.
2739    if (!Bases.NonVirtualBases.insert(BaseDecl)) {
2740      // If this non-virtual base has been seen before, then the class has non-
2741      // diamond shaped repeated inheritance.
2742      Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
2743    } else {
2744      if (Bases.VirtualBases.count(BaseDecl))
2745        Flags |= ItaniumRTTIBuilder::VMI_NonDiamondRepeat;
2746    }
2747  }
2748
2749  // Walk all bases.
2750  for (const auto &I : BaseDecl->bases())
2751    Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
2752
2753  return Flags;
2754}
2755
2756static unsigned ComputeVMIClassTypeInfoFlags(const CXXRecordDecl *RD) {
2757  unsigned Flags = 0;
2758  SeenBases Bases;
2759
2760  // Walk all bases.
2761  for (const auto &I : RD->bases())
2762    Flags |= ComputeVMIClassTypeInfoFlags(&I, Bases);
2763
2764  return Flags;
2765}
2766
2767/// BuildVMIClassTypeInfo - Build an abi::__vmi_class_type_info, used for
2768/// classes with bases that do not satisfy the abi::__si_class_type_info
2769/// constraints, according ti the Itanium C++ ABI, 2.9.5p5c.
2770void ItaniumRTTIBuilder::BuildVMIClassTypeInfo(const CXXRecordDecl *RD) {
2771  llvm::Type *UnsignedIntLTy =
2772    CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
2773
2774  // Itanium C++ ABI 2.9.5p6c:
2775  //   __flags is a word with flags describing details about the class
2776  //   structure, which may be referenced by using the __flags_masks
2777  //   enumeration. These flags refer to both direct and indirect bases.
2778  unsigned Flags = ComputeVMIClassTypeInfoFlags(RD);
2779  Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
2780
2781  // Itanium C++ ABI 2.9.5p6c:
2782  //   __base_count is a word with the number of direct proper base class
2783  //   descriptions that follow.
2784  Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, RD->getNumBases()));
2785
2786  if (!RD->getNumBases())
2787    return;
2788
2789  llvm::Type *LongLTy =
2790    CGM.getTypes().ConvertType(CGM.getContext().LongTy);
2791
2792  // Now add the base class descriptions.
2793
2794  // Itanium C++ ABI 2.9.5p6c:
2795  //   __base_info[] is an array of base class descriptions -- one for every
2796  //   direct proper base. Each description is of the type:
2797  //
2798  //   struct abi::__base_class_type_info {
2799  //   public:
2800  //     const __class_type_info *__base_type;
2801  //     long __offset_flags;
2802  //
2803  //     enum __offset_flags_masks {
2804  //       __virtual_mask = 0x1,
2805  //       __public_mask = 0x2,
2806  //       __offset_shift = 8
2807  //     };
2808  //   };
2809  for (const auto &Base : RD->bases()) {
2810    // The __base_type member points to the RTTI for the base type.
2811    Fields.push_back(ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(Base.getType()));
2812
2813    const CXXRecordDecl *BaseDecl =
2814      cast<CXXRecordDecl>(Base.getType()->getAs<RecordType>()->getDecl());
2815
2816    int64_t OffsetFlags = 0;
2817
2818    // All but the lower 8 bits of __offset_flags are a signed offset.
2819    // For a non-virtual base, this is the offset in the object of the base
2820    // subobject. For a virtual base, this is the offset in the virtual table of
2821    // the virtual base offset for the virtual base referenced (negative).
2822    CharUnits Offset;
2823    if (Base.isVirtual())
2824      Offset =
2825        CGM.getItaniumVTableContext().getVirtualBaseOffsetOffset(RD, BaseDecl);
2826    else {
2827      const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
2828      Offset = Layout.getBaseClassOffset(BaseDecl);
2829    };
2830
2831    OffsetFlags = uint64_t(Offset.getQuantity()) << 8;
2832
2833    // The low-order byte of __offset_flags contains flags, as given by the
2834    // masks from the enumeration __offset_flags_masks.
2835    if (Base.isVirtual())
2836      OffsetFlags |= BCTI_Virtual;
2837    if (Base.getAccessSpecifier() == AS_public)
2838      OffsetFlags |= BCTI_Public;
2839
2840    Fields.push_back(llvm::ConstantInt::get(LongLTy, OffsetFlags));
2841  }
2842}
2843
2844/// BuildPointerTypeInfo - Build an abi::__pointer_type_info struct,
2845/// used for pointer types.
2846void ItaniumRTTIBuilder::BuildPointerTypeInfo(QualType PointeeTy) {
2847  Qualifiers Quals;
2848  QualType UnqualifiedPointeeTy =
2849    CGM.getContext().getUnqualifiedArrayType(PointeeTy, Quals);
2850
2851  // Itanium C++ ABI 2.9.5p7:
2852  //   __flags is a flag word describing the cv-qualification and other
2853  //   attributes of the type pointed to
2854  unsigned Flags = ComputeQualifierFlags(Quals);
2855
2856  // Itanium C++ ABI 2.9.5p7:
2857  //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
2858  //   incomplete class type, the incomplete target type flag is set.
2859  if (ContainsIncompleteClassType(UnqualifiedPointeeTy))
2860    Flags |= PTI_Incomplete;
2861
2862  llvm::Type *UnsignedIntLTy =
2863    CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
2864  Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
2865
2866  // Itanium C++ ABI 2.9.5p7:
2867  //  __pointee is a pointer to the std::type_info derivation for the
2868  //  unqualified type being pointed to.
2869  llvm::Constant *PointeeTypeInfo =
2870    ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(UnqualifiedPointeeTy);
2871  Fields.push_back(PointeeTypeInfo);
2872}
2873
2874/// BuildPointerToMemberTypeInfo - Build an abi::__pointer_to_member_type_info
2875/// struct, used for member pointer types.
2876void
2877ItaniumRTTIBuilder::BuildPointerToMemberTypeInfo(const MemberPointerType *Ty) {
2878  QualType PointeeTy = Ty->getPointeeType();
2879
2880  Qualifiers Quals;
2881  QualType UnqualifiedPointeeTy =
2882    CGM.getContext().getUnqualifiedArrayType(PointeeTy, Quals);
2883
2884  // Itanium C++ ABI 2.9.5p7:
2885  //   __flags is a flag word describing the cv-qualification and other
2886  //   attributes of the type pointed to.
2887  unsigned Flags = ComputeQualifierFlags(Quals);
2888
2889  const RecordType *ClassType = cast<RecordType>(Ty->getClass());
2890
2891  // Itanium C++ ABI 2.9.5p7:
2892  //   When the abi::__pbase_type_info is for a direct or indirect pointer to an
2893  //   incomplete class type, the incomplete target type flag is set.
2894  if (ContainsIncompleteClassType(UnqualifiedPointeeTy))
2895    Flags |= PTI_Incomplete;
2896
2897  if (IsIncompleteClassType(ClassType))
2898    Flags |= PTI_ContainingClassIncomplete;
2899
2900  llvm::Type *UnsignedIntLTy =
2901    CGM.getTypes().ConvertType(CGM.getContext().UnsignedIntTy);
2902  Fields.push_back(llvm::ConstantInt::get(UnsignedIntLTy, Flags));
2903
2904  // Itanium C++ ABI 2.9.5p7:
2905  //   __pointee is a pointer to the std::type_info derivation for the
2906  //   unqualified type being pointed to.
2907  llvm::Constant *PointeeTypeInfo =
2908    ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(UnqualifiedPointeeTy);
2909  Fields.push_back(PointeeTypeInfo);
2910
2911  // Itanium C++ ABI 2.9.5p9:
2912  //   __context is a pointer to an abi::__class_type_info corresponding to the
2913  //   class type containing the member pointed to
2914  //   (e.g., the "A" in "int A::*").
2915  Fields.push_back(
2916      ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));
2917}
2918
2919llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {
2920  return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);
2921}
2922
2923void ItaniumCXXABI::EmitFundamentalRTTIDescriptor(QualType Type) {
2924  QualType PointerType = getContext().getPointerType(Type);
2925  QualType PointerTypeConst = getContext().getPointerType(Type.withConst());
2926  ItaniumRTTIBuilder(*this).BuildTypeInfo(Type, true);
2927  ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerType, true);
2928  ItaniumRTTIBuilder(*this).BuildTypeInfo(PointerTypeConst, true);
2929}
2930
2931void ItaniumCXXABI::EmitFundamentalRTTIDescriptors() {
2932  QualType FundamentalTypes[] = {
2933      getContext().VoidTy,             getContext().NullPtrTy,
2934      getContext().BoolTy,             getContext().WCharTy,
2935      getContext().CharTy,             getContext().UnsignedCharTy,
2936      getContext().SignedCharTy,       getContext().ShortTy,
2937      getContext().UnsignedShortTy,    getContext().IntTy,
2938      getContext().UnsignedIntTy,      getContext().LongTy,
2939      getContext().UnsignedLongTy,     getContext().LongLongTy,
2940      getContext().UnsignedLongLongTy, getContext().HalfTy,
2941      getContext().FloatTy,            getContext().DoubleTy,
2942      getContext().LongDoubleTy,       getContext().Char16Ty,
2943      getContext().Char32Ty,
2944  };
2945  for (const QualType &FundamentalType : FundamentalTypes)
2946    EmitFundamentalRTTIDescriptor(FundamentalType);
2947}
2948
2949/// What sort of uniqueness rules should we use for the RTTI for the
2950/// given type?
2951ItaniumCXXABI::RTTIUniquenessKind ItaniumCXXABI::classifyRTTIUniqueness(
2952    QualType CanTy, llvm::GlobalValue::LinkageTypes Linkage) const {
2953  if (shouldRTTIBeUnique())
2954    return RUK_Unique;
2955
2956  // It's only necessary for linkonce_odr or weak_odr linkage.
2957  if (Linkage != llvm::GlobalValue::LinkOnceODRLinkage &&
2958      Linkage != llvm::GlobalValue::WeakODRLinkage)
2959    return RUK_Unique;
2960
2961  // It's only necessary with default visibility.
2962  if (CanTy->getVisibility() != DefaultVisibility)
2963    return RUK_Unique;
2964
2965  // If we're not required to publish this symbol, hide it.
2966  if (Linkage == llvm::GlobalValue::LinkOnceODRLinkage)
2967    return RUK_NonUniqueHidden;
2968
2969  // If we're required to publish this symbol, as we might be under an
2970  // explicit instantiation, leave it with default visibility but
2971  // enable string-comparisons.
2972  assert(Linkage == llvm::GlobalValue::WeakODRLinkage);
2973  return RUK_NonUniqueVisible;
2974}
2975