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