1 //===--- CGDeclCXX.cpp - Emit LLVM Code for C++ declarations --------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This contains code dealing with code generation of C++ declarations
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "CGCXXABI.h"
14 #include "CGObjCRuntime.h"
15 #include "CGOpenMPRuntime.h"
16 #include "CodeGenFunction.h"
17 #include "TargetInfo.h"
18 #include "clang/AST/Attr.h"
19 #include "clang/Basic/LangOptions.h"
20 #include "llvm/ADT/StringExtras.h"
21 #include "llvm/IR/Intrinsics.h"
22 #include "llvm/IR/MDBuilder.h"
23 #include "llvm/Support/Path.h"
24 
25 using namespace clang;
26 using namespace CodeGen;
27 
28 static void EmitDeclInit(CodeGenFunction &CGF, const VarDecl &D,
29                          ConstantAddress DeclPtr) {
30   assert(
31       (D.hasGlobalStorage() ||
32        (D.hasLocalStorage() && CGF.getContext().getLangOpts().OpenCLCPlusPlus)) &&
33       "VarDecl must have global or local (in the case of OpenCL) storage!");
34   assert(!D.getType()->isReferenceType() &&
35          "Should not call EmitDeclInit on a reference!");
36 
37   QualType type = D.getType();
38   LValue lv = CGF.MakeAddrLValue(DeclPtr, type);
39 
40   const Expr *Init = D.getInit();
41   switch (CGF.getEvaluationKind(type)) {
42   case TEK_Scalar: {
43     CodeGenModule &CGM = CGF.CGM;
44     if (lv.isObjCStrong())
45       CGM.getObjCRuntime().EmitObjCGlobalAssign(CGF, CGF.EmitScalarExpr(Init),
46                                                 DeclPtr, D.getTLSKind());
47     else if (lv.isObjCWeak())
48       CGM.getObjCRuntime().EmitObjCWeakAssign(CGF, CGF.EmitScalarExpr(Init),
49                                               DeclPtr);
50     else
51       CGF.EmitScalarInit(Init, &D, lv, false);
52     return;
53   }
54   case TEK_Complex:
55     CGF.EmitComplexExprIntoLValue(Init, lv, /*isInit*/ true);
56     return;
57   case TEK_Aggregate:
58     CGF.EmitAggExpr(Init,
59                     AggValueSlot::forLValue(lv, CGF, AggValueSlot::IsDestructed,
60                                             AggValueSlot::DoesNotNeedGCBarriers,
61                                             AggValueSlot::IsNotAliased,
62                                             AggValueSlot::DoesNotOverlap));
63     return;
64   }
65   llvm_unreachable("bad evaluation kind");
66 }
67 
68 /// Emit code to cause the destruction of the given variable with
69 /// static storage duration.
70 static void EmitDeclDestroy(CodeGenFunction &CGF, const VarDecl &D,
71                             ConstantAddress Addr) {
72   // Honor __attribute__((no_destroy)) and bail instead of attempting
73   // to emit a reference to a possibly nonexistent destructor, which
74   // in turn can cause a crash. This will result in a global constructor
75   // that isn't balanced out by a destructor call as intended by the
76   // attribute. This also checks for -fno-c++-static-destructors and
77   // bails even if the attribute is not present.
78   QualType::DestructionKind DtorKind = D.needsDestruction(CGF.getContext());
79 
80   // FIXME:  __attribute__((cleanup)) ?
81 
82   switch (DtorKind) {
83   case QualType::DK_none:
84     return;
85 
86   case QualType::DK_cxx_destructor:
87     break;
88 
89   case QualType::DK_objc_strong_lifetime:
90   case QualType::DK_objc_weak_lifetime:
91   case QualType::DK_nontrivial_c_struct:
92     // We don't care about releasing objects during process teardown.
93     assert(!D.getTLSKind() && "should have rejected this");
94     return;
95   }
96 
97   llvm::FunctionCallee Func;
98   llvm::Constant *Argument;
99 
100   CodeGenModule &CGM = CGF.CGM;
101   QualType Type = D.getType();
102 
103   // Special-case non-array C++ destructors, if they have the right signature.
104   // Under some ABIs, destructors return this instead of void, and cannot be
105   // passed directly to __cxa_atexit if the target does not allow this
106   // mismatch.
107   const CXXRecordDecl *Record = Type->getAsCXXRecordDecl();
108   bool CanRegisterDestructor =
109       Record && (!CGM.getCXXABI().HasThisReturn(
110                      GlobalDecl(Record->getDestructor(), Dtor_Complete)) ||
111                  CGM.getCXXABI().canCallMismatchedFunctionType());
112   // If __cxa_atexit is disabled via a flag, a different helper function is
113   // generated elsewhere which uses atexit instead, and it takes the destructor
114   // directly.
115   bool UsingExternalHelper = !CGM.getCodeGenOpts().CXAAtExit;
116   if (Record && (CanRegisterDestructor || UsingExternalHelper)) {
117     assert(!Record->hasTrivialDestructor());
118     CXXDestructorDecl *Dtor = Record->getDestructor();
119 
120     Func = CGM.getAddrAndTypeOfCXXStructor(GlobalDecl(Dtor, Dtor_Complete));
121     if (CGF.getContext().getLangOpts().OpenCL) {
122       auto DestAS =
123           CGM.getTargetCodeGenInfo().getAddrSpaceOfCxaAtexitPtrParam();
124       auto DestTy = CGF.getTypes().ConvertType(Type)->getPointerTo(
125           CGM.getContext().getTargetAddressSpace(DestAS));
126       auto SrcAS = D.getType().getQualifiers().getAddressSpace();
127       if (DestAS == SrcAS)
128         Argument = llvm::ConstantExpr::getBitCast(Addr.getPointer(), DestTy);
129       else
130         // FIXME: On addr space mismatch we are passing NULL. The generation
131         // of the global destructor function should be adjusted accordingly.
132         Argument = llvm::ConstantPointerNull::get(DestTy);
133     } else {
134       Argument = llvm::ConstantExpr::getBitCast(
135           Addr.getPointer(), CGF.getTypes().ConvertType(Type)->getPointerTo());
136     }
137   // Otherwise, the standard logic requires a helper function.
138   } else {
139     Addr = Addr.getElementBitCast(CGF.ConvertTypeForMem(Type));
140     Func = CodeGenFunction(CGM)
141            .generateDestroyHelper(Addr, Type, CGF.getDestroyer(DtorKind),
142                                   CGF.needsEHCleanup(DtorKind), &D);
143     Argument = llvm::Constant::getNullValue(CGF.Int8PtrTy);
144   }
145 
146   CGM.getCXXABI().registerGlobalDtor(CGF, D, Func, Argument);
147 }
148 
149 /// Emit code to cause the variable at the given address to be considered as
150 /// constant from this point onwards.
151 static void EmitDeclInvariant(CodeGenFunction &CGF, const VarDecl &D,
152                               llvm::Constant *Addr) {
153   return CGF.EmitInvariantStart(
154       Addr, CGF.getContext().getTypeSizeInChars(D.getType()));
155 }
156 
157 void CodeGenFunction::EmitInvariantStart(llvm::Constant *Addr, CharUnits Size) {
158   // Do not emit the intrinsic if we're not optimizing.
159   if (!CGM.getCodeGenOpts().OptimizationLevel)
160     return;
161 
162   // Grab the llvm.invariant.start intrinsic.
163   llvm::Intrinsic::ID InvStartID = llvm::Intrinsic::invariant_start;
164   // Overloaded address space type.
165   llvm::Type *ObjectPtr[1] = {Int8PtrTy};
166   llvm::Function *InvariantStart = CGM.getIntrinsic(InvStartID, ObjectPtr);
167 
168   // Emit a call with the size in bytes of the object.
169   uint64_t Width = Size.getQuantity();
170   llvm::Value *Args[2] = { llvm::ConstantInt::getSigned(Int64Ty, Width),
171                            llvm::ConstantExpr::getBitCast(Addr, Int8PtrTy)};
172   Builder.CreateCall(InvariantStart, Args);
173 }
174 
175 void CodeGenFunction::EmitCXXGlobalVarDeclInit(const VarDecl &D,
176                                                llvm::GlobalVariable *GV,
177                                                bool PerformInit) {
178 
179   const Expr *Init = D.getInit();
180   QualType T = D.getType();
181 
182   // The address space of a static local variable (DeclPtr) may be different
183   // from the address space of the "this" argument of the constructor. In that
184   // case, we need an addrspacecast before calling the constructor.
185   //
186   // struct StructWithCtor {
187   //   __device__ StructWithCtor() {...}
188   // };
189   // __device__ void foo() {
190   //   __shared__ StructWithCtor s;
191   //   ...
192   // }
193   //
194   // For example, in the above CUDA code, the static local variable s has a
195   // "shared" address space qualifier, but the constructor of StructWithCtor
196   // expects "this" in the "generic" address space.
197   unsigned ExpectedAddrSpace = getContext().getTargetAddressSpace(T);
198   unsigned ActualAddrSpace = GV->getAddressSpace();
199   llvm::Constant *DeclPtr = GV;
200   if (ActualAddrSpace != ExpectedAddrSpace) {
201     llvm::PointerType *PTy = llvm::PointerType::getWithSamePointeeType(
202         GV->getType(), ExpectedAddrSpace);
203     DeclPtr = llvm::ConstantExpr::getAddrSpaceCast(DeclPtr, PTy);
204   }
205 
206   ConstantAddress DeclAddr(
207       DeclPtr, GV->getValueType(), getContext().getDeclAlign(&D));
208 
209   if (!T->isReferenceType()) {
210     if (getLangOpts().OpenMP && !getLangOpts().OpenMPSimd &&
211         D.hasAttr<OMPThreadPrivateDeclAttr>()) {
212       (void)CGM.getOpenMPRuntime().emitThreadPrivateVarDefinition(
213           &D, DeclAddr, D.getAttr<OMPThreadPrivateDeclAttr>()->getLocation(),
214           PerformInit, this);
215     }
216     if (PerformInit)
217       EmitDeclInit(*this, D, DeclAddr);
218     if (CGM.isTypeConstant(D.getType(), true))
219       EmitDeclInvariant(*this, D, DeclPtr);
220     else
221       EmitDeclDestroy(*this, D, DeclAddr);
222     return;
223   }
224 
225   assert(PerformInit && "cannot have constant initializer which needs "
226          "destruction for reference");
227   RValue RV = EmitReferenceBindingToExpr(Init);
228   EmitStoreOfScalar(RV.getScalarVal(), DeclAddr, false, T);
229 }
230 
231 /// Create a stub function, suitable for being passed to atexit,
232 /// which passes the given address to the given destructor function.
233 llvm::Function *CodeGenFunction::createAtExitStub(const VarDecl &VD,
234                                                   llvm::FunctionCallee dtor,
235                                                   llvm::Constant *addr) {
236   // Get the destructor function type, void(*)(void).
237   llvm::FunctionType *ty = llvm::FunctionType::get(CGM.VoidTy, false);
238   SmallString<256> FnName;
239   {
240     llvm::raw_svector_ostream Out(FnName);
241     CGM.getCXXABI().getMangleContext().mangleDynamicAtExitDestructor(&VD, Out);
242   }
243 
244   const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
245   llvm::Function *fn = CGM.CreateGlobalInitOrCleanUpFunction(
246       ty, FnName.str(), FI, VD.getLocation());
247 
248   CodeGenFunction CGF(CGM);
249 
250   CGF.StartFunction(GlobalDecl(&VD, DynamicInitKind::AtExit),
251                     CGM.getContext().VoidTy, fn, FI, FunctionArgList(),
252                     VD.getLocation(), VD.getInit()->getExprLoc());
253   // Emit an artificial location for this function.
254   auto AL = ApplyDebugLocation::CreateArtificial(CGF);
255 
256   llvm::CallInst *call = CGF.Builder.CreateCall(dtor, addr);
257 
258   // Make sure the call and the callee agree on calling convention.
259   if (auto *dtorFn = dyn_cast<llvm::Function>(
260           dtor.getCallee()->stripPointerCastsAndAliases()))
261     call->setCallingConv(dtorFn->getCallingConv());
262 
263   CGF.FinishFunction();
264 
265   return fn;
266 }
267 
268 /// Create a stub function, suitable for being passed to __pt_atexit_np,
269 /// which passes the given address to the given destructor function.
270 llvm::Function *CodeGenFunction::createTLSAtExitStub(
271     const VarDecl &D, llvm::FunctionCallee Dtor, llvm::Constant *Addr,
272     llvm::FunctionCallee &AtExit) {
273   SmallString<256> FnName;
274   {
275     llvm::raw_svector_ostream Out(FnName);
276     CGM.getCXXABI().getMangleContext().mangleDynamicAtExitDestructor(&D, Out);
277   }
278 
279   const CGFunctionInfo &FI = CGM.getTypes().arrangeLLVMFunctionInfo(
280       getContext().IntTy, /*instanceMethod=*/false, /*chainCall=*/false,
281       {getContext().IntTy}, FunctionType::ExtInfo(), {}, RequiredArgs::All);
282 
283   // Get the stub function type, int(*)(int,...).
284   llvm::FunctionType *StubTy =
285       llvm::FunctionType::get(CGM.IntTy, {CGM.IntTy}, true);
286 
287   llvm::Function *DtorStub = CGM.CreateGlobalInitOrCleanUpFunction(
288       StubTy, FnName.str(), FI, D.getLocation());
289 
290   CodeGenFunction CGF(CGM);
291 
292   FunctionArgList Args;
293   ImplicitParamDecl IPD(CGM.getContext(), CGM.getContext().IntTy,
294                         ImplicitParamDecl::Other);
295   Args.push_back(&IPD);
296   QualType ResTy = CGM.getContext().IntTy;
297 
298   CGF.StartFunction(GlobalDecl(&D, DynamicInitKind::AtExit), ResTy, DtorStub,
299                     FI, Args, D.getLocation(), D.getInit()->getExprLoc());
300 
301   // Emit an artificial location for this function.
302   auto AL = ApplyDebugLocation::CreateArtificial(CGF);
303 
304   llvm::CallInst *call = CGF.Builder.CreateCall(Dtor, Addr);
305 
306   // Make sure the call and the callee agree on calling convention.
307   if (auto *DtorFn = dyn_cast<llvm::Function>(
308           Dtor.getCallee()->stripPointerCastsAndAliases()))
309     call->setCallingConv(DtorFn->getCallingConv());
310 
311   // Return 0 from function
312   CGF.Builder.CreateStore(llvm::Constant::getNullValue(CGM.IntTy),
313                           CGF.ReturnValue);
314 
315   CGF.FinishFunction();
316 
317   return DtorStub;
318 }
319 
320 /// Register a global destructor using the C atexit runtime function.
321 void CodeGenFunction::registerGlobalDtorWithAtExit(const VarDecl &VD,
322                                                    llvm::FunctionCallee dtor,
323                                                    llvm::Constant *addr) {
324   // Create a function which calls the destructor.
325   llvm::Constant *dtorStub = createAtExitStub(VD, dtor, addr);
326   registerGlobalDtorWithAtExit(dtorStub);
327 }
328 
329 void CodeGenFunction::registerGlobalDtorWithAtExit(llvm::Constant *dtorStub) {
330   // extern "C" int atexit(void (*f)(void));
331   assert(dtorStub->getType() ==
332              llvm::PointerType::get(
333                  llvm::FunctionType::get(CGM.VoidTy, false),
334                  dtorStub->getType()->getPointerAddressSpace()) &&
335          "Argument to atexit has a wrong type.");
336 
337   llvm::FunctionType *atexitTy =
338       llvm::FunctionType::get(IntTy, dtorStub->getType(), false);
339 
340   llvm::FunctionCallee atexit =
341       CGM.CreateRuntimeFunction(atexitTy, "atexit", llvm::AttributeList(),
342                                 /*Local=*/true);
343   if (llvm::Function *atexitFn = dyn_cast<llvm::Function>(atexit.getCallee()))
344     atexitFn->setDoesNotThrow();
345 
346   EmitNounwindRuntimeCall(atexit, dtorStub);
347 }
348 
349 llvm::Value *
350 CodeGenFunction::unregisterGlobalDtorWithUnAtExit(llvm::Constant *dtorStub) {
351   // The unatexit subroutine unregisters __dtor functions that were previously
352   // registered by the atexit subroutine. If the referenced function is found,
353   // it is removed from the list of functions that are called at normal program
354   // termination and the unatexit returns a value of 0, otherwise a non-zero
355   // value is returned.
356   //
357   // extern "C" int unatexit(void (*f)(void));
358   assert(dtorStub->getType() ==
359              llvm::PointerType::get(
360                  llvm::FunctionType::get(CGM.VoidTy, false),
361                  dtorStub->getType()->getPointerAddressSpace()) &&
362          "Argument to unatexit has a wrong type.");
363 
364   llvm::FunctionType *unatexitTy =
365       llvm::FunctionType::get(IntTy, {dtorStub->getType()}, /*isVarArg=*/false);
366 
367   llvm::FunctionCallee unatexit =
368       CGM.CreateRuntimeFunction(unatexitTy, "unatexit", llvm::AttributeList());
369 
370   cast<llvm::Function>(unatexit.getCallee())->setDoesNotThrow();
371 
372   return EmitNounwindRuntimeCall(unatexit, dtorStub);
373 }
374 
375 void CodeGenFunction::EmitCXXGuardedInit(const VarDecl &D,
376                                          llvm::GlobalVariable *DeclPtr,
377                                          bool PerformInit) {
378   // If we've been asked to forbid guard variables, emit an error now.
379   // This diagnostic is hard-coded for Darwin's use case;  we can find
380   // better phrasing if someone else needs it.
381   if (CGM.getCodeGenOpts().ForbidGuardVariables)
382     CGM.Error(D.getLocation(),
383               "this initialization requires a guard variable, which "
384               "the kernel does not support");
385 
386   CGM.getCXXABI().EmitGuardedInit(*this, D, DeclPtr, PerformInit);
387 }
388 
389 void CodeGenFunction::EmitCXXGuardedInitBranch(llvm::Value *NeedsInit,
390                                                llvm::BasicBlock *InitBlock,
391                                                llvm::BasicBlock *NoInitBlock,
392                                                GuardKind Kind,
393                                                const VarDecl *D) {
394   assert((Kind == GuardKind::TlsGuard || D) && "no guarded variable");
395 
396   // A guess at how many times we will enter the initialization of a
397   // variable, depending on the kind of variable.
398   static const uint64_t InitsPerTLSVar = 1024;
399   static const uint64_t InitsPerLocalVar = 1024 * 1024;
400 
401   llvm::MDNode *Weights;
402   if (Kind == GuardKind::VariableGuard && !D->isLocalVarDecl()) {
403     // For non-local variables, don't apply any weighting for now. Due to our
404     // use of COMDATs, we expect there to be at most one initialization of the
405     // variable per DSO, but we have no way to know how many DSOs will try to
406     // initialize the variable.
407     Weights = nullptr;
408   } else {
409     uint64_t NumInits;
410     // FIXME: For the TLS case, collect and use profiling information to
411     // determine a more accurate brach weight.
412     if (Kind == GuardKind::TlsGuard || D->getTLSKind())
413       NumInits = InitsPerTLSVar;
414     else
415       NumInits = InitsPerLocalVar;
416 
417     // The probability of us entering the initializer is
418     //   1 / (total number of times we attempt to initialize the variable).
419     llvm::MDBuilder MDHelper(CGM.getLLVMContext());
420     Weights = MDHelper.createBranchWeights(1, NumInits - 1);
421   }
422 
423   Builder.CreateCondBr(NeedsInit, InitBlock, NoInitBlock, Weights);
424 }
425 
426 llvm::Function *CodeGenModule::CreateGlobalInitOrCleanUpFunction(
427     llvm::FunctionType *FTy, const Twine &Name, const CGFunctionInfo &FI,
428     SourceLocation Loc, bool TLS, llvm::GlobalVariable::LinkageTypes Linkage) {
429   llvm::Function *Fn = llvm::Function::Create(FTy, Linkage, Name, &getModule());
430 
431   if (!getLangOpts().AppleKext && !TLS) {
432     // Set the section if needed.
433     if (const char *Section = getTarget().getStaticInitSectionSpecifier())
434       Fn->setSection(Section);
435   }
436 
437   if (Linkage == llvm::GlobalVariable::InternalLinkage)
438     SetInternalFunctionAttributes(GlobalDecl(), Fn, FI);
439 
440   Fn->setCallingConv(getRuntimeCC());
441 
442   if (!getLangOpts().Exceptions)
443     Fn->setDoesNotThrow();
444 
445   if (getLangOpts().Sanitize.has(SanitizerKind::Address) &&
446       !isInNoSanitizeList(SanitizerKind::Address, Fn, Loc))
447     Fn->addFnAttr(llvm::Attribute::SanitizeAddress);
448 
449   if (getLangOpts().Sanitize.has(SanitizerKind::KernelAddress) &&
450       !isInNoSanitizeList(SanitizerKind::KernelAddress, Fn, Loc))
451     Fn->addFnAttr(llvm::Attribute::SanitizeAddress);
452 
453   if (getLangOpts().Sanitize.has(SanitizerKind::HWAddress) &&
454       !isInNoSanitizeList(SanitizerKind::HWAddress, Fn, Loc))
455     Fn->addFnAttr(llvm::Attribute::SanitizeHWAddress);
456 
457   if (getLangOpts().Sanitize.has(SanitizerKind::KernelHWAddress) &&
458       !isInNoSanitizeList(SanitizerKind::KernelHWAddress, Fn, Loc))
459     Fn->addFnAttr(llvm::Attribute::SanitizeHWAddress);
460 
461   if (getLangOpts().Sanitize.has(SanitizerKind::MemtagStack) &&
462       !isInNoSanitizeList(SanitizerKind::MemtagStack, Fn, Loc))
463     Fn->addFnAttr(llvm::Attribute::SanitizeMemTag);
464 
465   if (getLangOpts().Sanitize.has(SanitizerKind::Thread) &&
466       !isInNoSanitizeList(SanitizerKind::Thread, Fn, Loc))
467     Fn->addFnAttr(llvm::Attribute::SanitizeThread);
468 
469   if (getLangOpts().Sanitize.has(SanitizerKind::Memory) &&
470       !isInNoSanitizeList(SanitizerKind::Memory, Fn, Loc))
471     Fn->addFnAttr(llvm::Attribute::SanitizeMemory);
472 
473   if (getLangOpts().Sanitize.has(SanitizerKind::KernelMemory) &&
474       !isInNoSanitizeList(SanitizerKind::KernelMemory, Fn, Loc))
475     Fn->addFnAttr(llvm::Attribute::SanitizeMemory);
476 
477   if (getLangOpts().Sanitize.has(SanitizerKind::SafeStack) &&
478       !isInNoSanitizeList(SanitizerKind::SafeStack, Fn, Loc))
479     Fn->addFnAttr(llvm::Attribute::SafeStack);
480 
481   if (getLangOpts().Sanitize.has(SanitizerKind::ShadowCallStack) &&
482       !isInNoSanitizeList(SanitizerKind::ShadowCallStack, Fn, Loc))
483     Fn->addFnAttr(llvm::Attribute::ShadowCallStack);
484 
485   return Fn;
486 }
487 
488 /// Create a global pointer to a function that will initialize a global
489 /// variable.  The user has requested that this pointer be emitted in a specific
490 /// section.
491 void CodeGenModule::EmitPointerToInitFunc(const VarDecl *D,
492                                           llvm::GlobalVariable *GV,
493                                           llvm::Function *InitFunc,
494                                           InitSegAttr *ISA) {
495   llvm::GlobalVariable *PtrArray = new llvm::GlobalVariable(
496       TheModule, InitFunc->getType(), /*isConstant=*/true,
497       llvm::GlobalValue::PrivateLinkage, InitFunc, "__cxx_init_fn_ptr");
498   PtrArray->setSection(ISA->getSection());
499   addUsedGlobal(PtrArray);
500 
501   // If the GV is already in a comdat group, then we have to join it.
502   if (llvm::Comdat *C = GV->getComdat())
503     PtrArray->setComdat(C);
504 }
505 
506 void
507 CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D,
508                                             llvm::GlobalVariable *Addr,
509                                             bool PerformInit) {
510 
511   // According to E.2.3.1 in CUDA-7.5 Programming guide: __device__,
512   // __constant__ and __shared__ variables defined in namespace scope,
513   // that are of class type, cannot have a non-empty constructor. All
514   // the checks have been done in Sema by now. Whatever initializers
515   // are allowed are empty and we just need to ignore them here.
516   if (getLangOpts().CUDAIsDevice && !getLangOpts().GPUAllowDeviceInit &&
517       (D->hasAttr<CUDADeviceAttr>() || D->hasAttr<CUDAConstantAttr>() ||
518        D->hasAttr<CUDASharedAttr>()))
519     return;
520 
521   if (getLangOpts().OpenMP &&
522       getOpenMPRuntime().emitDeclareTargetVarDefinition(D, Addr, PerformInit))
523     return;
524 
525   // Check if we've already initialized this decl.
526   auto I = DelayedCXXInitPosition.find(D);
527   if (I != DelayedCXXInitPosition.end() && I->second == ~0U)
528     return;
529 
530   llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
531   SmallString<256> FnName;
532   {
533     llvm::raw_svector_ostream Out(FnName);
534     getCXXABI().getMangleContext().mangleDynamicInitializer(D, Out);
535   }
536 
537   // Create a variable initialization function.
538   llvm::Function *Fn = CreateGlobalInitOrCleanUpFunction(
539       FTy, FnName.str(), getTypes().arrangeNullaryFunction(), D->getLocation());
540 
541   auto *ISA = D->getAttr<InitSegAttr>();
542   CodeGenFunction(*this).GenerateCXXGlobalVarDeclInitFunc(Fn, D, Addr,
543                                                           PerformInit);
544 
545   llvm::GlobalVariable *COMDATKey =
546       supportsCOMDAT() && D->isExternallyVisible() ? Addr : nullptr;
547 
548   if (D->getTLSKind()) {
549     // FIXME: Should we support init_priority for thread_local?
550     // FIXME: We only need to register one __cxa_thread_atexit function for the
551     // entire TU.
552     CXXThreadLocalInits.push_back(Fn);
553     CXXThreadLocalInitVars.push_back(D);
554   } else if (PerformInit && ISA) {
555     EmitPointerToInitFunc(D, Addr, Fn, ISA);
556   } else if (auto *IPA = D->getAttr<InitPriorityAttr>()) {
557     OrderGlobalInitsOrStermFinalizers Key(IPA->getPriority(),
558                                           PrioritizedCXXGlobalInits.size());
559     PrioritizedCXXGlobalInits.push_back(std::make_pair(Key, Fn));
560   } else if (isTemplateInstantiation(D->getTemplateSpecializationKind()) ||
561              getContext().GetGVALinkageForVariable(D) == GVA_DiscardableODR ||
562              D->hasAttr<SelectAnyAttr>()) {
563     // C++ [basic.start.init]p2:
564     //   Definitions of explicitly specialized class template static data
565     //   members have ordered initialization. Other class template static data
566     //   members (i.e., implicitly or explicitly instantiated specializations)
567     //   have unordered initialization.
568     //
569     // As a consequence, we can put them into their own llvm.global_ctors entry.
570     //
571     // If the global is externally visible, put the initializer into a COMDAT
572     // group with the global being initialized.  On most platforms, this is a
573     // minor startup time optimization.  In the MS C++ ABI, there are no guard
574     // variables, so this COMDAT key is required for correctness.
575     //
576     // SelectAny globals will be comdat-folded. Put the initializer into a
577     // COMDAT group associated with the global, so the initializers get folded
578     // too.
579 
580     AddGlobalCtor(Fn, 65535, COMDATKey);
581     if (COMDATKey && (getTriple().isOSBinFormatELF() ||
582                       getTarget().getCXXABI().isMicrosoft())) {
583       // When COMDAT is used on ELF or in the MS C++ ABI, the key must be in
584       // llvm.used to prevent linker GC.
585       addUsedGlobal(COMDATKey);
586     }
587 
588     // If we used a COMDAT key for the global ctor, the init function can be
589     // discarded if the global ctor entry is discarded.
590     // FIXME: Do we need to restrict this to ELF and Wasm?
591     llvm::Comdat *C = Addr->getComdat();
592     if (COMDATKey && C &&
593         (getTarget().getTriple().isOSBinFormatELF() ||
594          getTarget().getTriple().isOSBinFormatWasm())) {
595       Fn->setComdat(C);
596     }
597   } else {
598     I = DelayedCXXInitPosition.find(D); // Re-do lookup in case of re-hash.
599     if (I == DelayedCXXInitPosition.end()) {
600       CXXGlobalInits.push_back(Fn);
601     } else if (I->second != ~0U) {
602       assert(I->second < CXXGlobalInits.size() &&
603              CXXGlobalInits[I->second] == nullptr);
604       CXXGlobalInits[I->second] = Fn;
605     }
606   }
607 
608   // Remember that we already emitted the initializer for this global.
609   DelayedCXXInitPosition[D] = ~0U;
610 }
611 
612 void CodeGenModule::EmitCXXThreadLocalInitFunc() {
613   getCXXABI().EmitThreadLocalInitFuncs(
614       *this, CXXThreadLocals, CXXThreadLocalInits, CXXThreadLocalInitVars);
615 
616   CXXThreadLocalInits.clear();
617   CXXThreadLocalInitVars.clear();
618   CXXThreadLocals.clear();
619 }
620 
621 /* Build the initializer for a C++20 module:
622    This is arranged to be run only once regardless of how many times the module
623    might be included transitively.  This arranged by using a control variable.
624 
625    First we call any initializers for imported modules.
626    We then call initializers for the Global Module Fragment (if present)
627    We then call initializers for the current module.
628    We then call initializers for the Private Module Fragment (if present)
629 */
630 
631 void CodeGenModule::EmitCXXModuleInitFunc(Module *Primary) {
632   while (!CXXGlobalInits.empty() && !CXXGlobalInits.back())
633     CXXGlobalInits.pop_back();
634 
635   // We create the function, even if it is empty, since an importer of this
636   // module will refer to it unconditionally (for the current implementation
637   // there is no way for the importer to know that an importee does not need
638   // an initializer to be run).
639 
640   // Module initializers for imported modules are emitted first.
641   // Collect the modules that we import
642   SmallVector<Module *> AllImports;
643   // Ones that we export
644   for (auto I : Primary->Exports)
645     AllImports.push_back(I.getPointer());
646   // Ones that we only import.
647   for (Module *M : Primary->Imports)
648     AllImports.push_back(M);
649 
650   SmallVector<llvm::Function *, 8> ModuleInits;
651   for (Module *M : AllImports) {
652     llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
653     SmallString<256> FnName;
654     {
655       llvm::raw_svector_ostream Out(FnName);
656       cast<ItaniumMangleContext>(getCXXABI().getMangleContext())
657           .mangleModuleInitializer(M, Out);
658     }
659     assert(!GetGlobalValue(FnName.str()) &&
660            "We should only have one use of the initializer call");
661     llvm::Function *Fn = llvm::Function::Create(
662         FTy, llvm::Function::ExternalLinkage, FnName.str(), &getModule());
663     ModuleInits.push_back(Fn);
664   }
665   AllImports.clear();
666 
667   // Add any initializers with specified priority; this uses the same  approach
668   // as EmitCXXGlobalInitFunc().
669   if (!PrioritizedCXXGlobalInits.empty()) {
670     SmallVector<llvm::Function *, 8> LocalCXXGlobalInits;
671     llvm::array_pod_sort(PrioritizedCXXGlobalInits.begin(),
672                          PrioritizedCXXGlobalInits.end());
673     for (SmallVectorImpl<GlobalInitData>::iterator
674              I = PrioritizedCXXGlobalInits.begin(),
675              E = PrioritizedCXXGlobalInits.end();
676          I != E;) {
677       SmallVectorImpl<GlobalInitData>::iterator PrioE =
678           std::upper_bound(I + 1, E, *I, GlobalInitPriorityCmp());
679 
680       for (; I < PrioE; ++I)
681         ModuleInits.push_back(I->second);
682     }
683     PrioritizedCXXGlobalInits.clear();
684   }
685 
686   // Now append the ones without specified priority.
687   for (auto F : CXXGlobalInits)
688     ModuleInits.push_back(F);
689   CXXGlobalInits.clear();
690 
691   llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
692   const CGFunctionInfo &FI = getTypes().arrangeNullaryFunction();
693 
694   // We now build the initializer for this module, which has a mangled name
695   // as per the Itanium ABI .  The action of the initializer is guarded so that
696   // each init is run just once (even though a module might be imported
697   // multiple times via nested use).
698   llvm::Function *Fn;
699   llvm::GlobalVariable *Guard = nullptr;
700   {
701     SmallString<256> InitFnName;
702     llvm::raw_svector_ostream Out(InitFnName);
703     cast<ItaniumMangleContext>(getCXXABI().getMangleContext())
704         .mangleModuleInitializer(Primary, Out);
705     Fn = CreateGlobalInitOrCleanUpFunction(
706         FTy, llvm::Twine(InitFnName), FI, SourceLocation(), false,
707         llvm::GlobalVariable::ExternalLinkage);
708 
709     Guard = new llvm::GlobalVariable(getModule(), Int8Ty, /*isConstant=*/false,
710                                      llvm::GlobalVariable::InternalLinkage,
711                                      llvm::ConstantInt::get(Int8Ty, 0),
712                                      InitFnName.str() + "__in_chrg");
713   }
714   CharUnits GuardAlign = CharUnits::One();
715   Guard->setAlignment(GuardAlign.getAsAlign());
716 
717   CodeGenFunction(*this).GenerateCXXGlobalInitFunc(
718       Fn, ModuleInits, ConstantAddress(Guard, Int8Ty, GuardAlign));
719   // We allow for the case that a module object is added to  a linked binary
720   // without a specific call to the the initializer.  This also ensure that
721   // implementation partition initializers are called when the partition
722   // is not imported as an interface.
723   AddGlobalCtor(Fn);
724 
725   // See the comment in EmitCXXGlobalInitFunc about OpenCL global init
726   // functions.
727   if (getLangOpts().OpenCL) {
728     GenKernelArgMetadata(Fn);
729     Fn->setCallingConv(llvm::CallingConv::SPIR_KERNEL);
730   }
731 
732   assert(!getLangOpts().CUDA || !getLangOpts().CUDAIsDevice ||
733          getLangOpts().GPUAllowDeviceInit);
734   if (getLangOpts().HIP && getLangOpts().CUDAIsDevice) {
735     Fn->setCallingConv(llvm::CallingConv::AMDGPU_KERNEL);
736     Fn->addFnAttr("device-init");
737   }
738 
739   ModuleInits.clear();
740 }
741 
742 static SmallString<128> getTransformedFileName(llvm::Module &M) {
743   SmallString<128> FileName = llvm::sys::path::filename(M.getName());
744 
745   if (FileName.empty())
746     FileName = "<null>";
747 
748   for (size_t i = 0; i < FileName.size(); ++i) {
749     // Replace everything that's not [a-zA-Z0-9._] with a _. This set happens
750     // to be the set of C preprocessing numbers.
751     if (!isPreprocessingNumberBody(FileName[i]))
752       FileName[i] = '_';
753   }
754 
755   return FileName;
756 }
757 
758 static std::string getPrioritySuffix(unsigned int Priority) {
759   assert(Priority <= 65535 && "Priority should always be <= 65535.");
760 
761   // Compute the function suffix from priority. Prepend with zeroes to make
762   // sure the function names are also ordered as priorities.
763   std::string PrioritySuffix = llvm::utostr(Priority);
764   PrioritySuffix = std::string(6 - PrioritySuffix.size(), '0') + PrioritySuffix;
765 
766   return PrioritySuffix;
767 }
768 
769 void
770 CodeGenModule::EmitCXXGlobalInitFunc() {
771   while (!CXXGlobalInits.empty() && !CXXGlobalInits.back())
772     CXXGlobalInits.pop_back();
773 
774   // When we import C++20 modules, we must run their initializers first.
775   SmallVector<llvm::Function *, 8> ModuleInits;
776   if (CXX20ModuleInits)
777     for (Module *M : ImportedModules) {
778       llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
779       SmallString<256> FnName;
780       {
781         llvm::raw_svector_ostream Out(FnName);
782         cast<ItaniumMangleContext>(getCXXABI().getMangleContext())
783             .mangleModuleInitializer(M, Out);
784       }
785       assert(!GetGlobalValue(FnName.str()) &&
786              "We should only have one use of the initializer call");
787       llvm::Function *Fn = llvm::Function::Create(
788           FTy, llvm::Function::ExternalLinkage, FnName.str(), &getModule());
789       ModuleInits.push_back(Fn);
790     }
791 
792   if (ModuleInits.empty() && CXXGlobalInits.empty() &&
793       PrioritizedCXXGlobalInits.empty())
794     return;
795 
796   llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
797   const CGFunctionInfo &FI = getTypes().arrangeNullaryFunction();
798 
799   // Create our global prioritized initialization function.
800   if (!PrioritizedCXXGlobalInits.empty()) {
801     SmallVector<llvm::Function *, 8> LocalCXXGlobalInits;
802     llvm::array_pod_sort(PrioritizedCXXGlobalInits.begin(),
803                          PrioritizedCXXGlobalInits.end());
804     // Iterate over "chunks" of ctors with same priority and emit each chunk
805     // into separate function. Note - everything is sorted first by priority,
806     // second - by lex order, so we emit ctor functions in proper order.
807     for (SmallVectorImpl<GlobalInitData >::iterator
808            I = PrioritizedCXXGlobalInits.begin(),
809            E = PrioritizedCXXGlobalInits.end(); I != E; ) {
810       SmallVectorImpl<GlobalInitData >::iterator
811         PrioE = std::upper_bound(I + 1, E, *I, GlobalInitPriorityCmp());
812 
813       LocalCXXGlobalInits.clear();
814 
815       unsigned int Priority = I->first.priority;
816       llvm::Function *Fn = CreateGlobalInitOrCleanUpFunction(
817           FTy, "_GLOBAL__I_" + getPrioritySuffix(Priority), FI);
818 
819       // Prepend the module inits to the highest priority set.
820       if (!ModuleInits.empty()) {
821         for (auto F : ModuleInits)
822           LocalCXXGlobalInits.push_back(F);
823         ModuleInits.clear();
824       }
825 
826       for (; I < PrioE; ++I)
827         LocalCXXGlobalInits.push_back(I->second);
828 
829       CodeGenFunction(*this).GenerateCXXGlobalInitFunc(Fn, LocalCXXGlobalInits);
830       AddGlobalCtor(Fn, Priority);
831     }
832     PrioritizedCXXGlobalInits.clear();
833   }
834 
835   if (getCXXABI().useSinitAndSterm() && ModuleInits.empty() &&
836       CXXGlobalInits.empty())
837     return;
838 
839   for (auto F : CXXGlobalInits)
840     ModuleInits.push_back(F);
841   CXXGlobalInits.clear();
842 
843   // Include the filename in the symbol name. Including "sub_" matches gcc
844   // and makes sure these symbols appear lexicographically behind the symbols
845   // with priority emitted above.
846   llvm::Function *Fn;
847   if (CXX20ModuleInits && getContext().getModuleForCodeGen()) {
848     SmallString<256> InitFnName;
849     llvm::raw_svector_ostream Out(InitFnName);
850     cast<ItaniumMangleContext>(getCXXABI().getMangleContext())
851         .mangleModuleInitializer(getContext().getModuleForCodeGen(), Out);
852     Fn = CreateGlobalInitOrCleanUpFunction(
853         FTy, llvm::Twine(InitFnName), FI, SourceLocation(), false,
854         llvm::GlobalVariable::ExternalLinkage);
855   } else
856     Fn = CreateGlobalInitOrCleanUpFunction(
857         FTy,
858         llvm::Twine("_GLOBAL__sub_I_", getTransformedFileName(getModule())),
859         FI);
860 
861   CodeGenFunction(*this).GenerateCXXGlobalInitFunc(Fn, ModuleInits);
862   AddGlobalCtor(Fn);
863 
864   // In OpenCL global init functions must be converted to kernels in order to
865   // be able to launch them from the host.
866   // FIXME: Some more work might be needed to handle destructors correctly.
867   // Current initialization function makes use of function pointers callbacks.
868   // We can't support function pointers especially between host and device.
869   // However it seems global destruction has little meaning without any
870   // dynamic resource allocation on the device and program scope variables are
871   // destroyed by the runtime when program is released.
872   if (getLangOpts().OpenCL) {
873     GenKernelArgMetadata(Fn);
874     Fn->setCallingConv(llvm::CallingConv::SPIR_KERNEL);
875   }
876 
877   assert(!getLangOpts().CUDA || !getLangOpts().CUDAIsDevice ||
878          getLangOpts().GPUAllowDeviceInit);
879   if (getLangOpts().HIP && getLangOpts().CUDAIsDevice) {
880     Fn->setCallingConv(llvm::CallingConv::AMDGPU_KERNEL);
881     Fn->addFnAttr("device-init");
882   }
883 
884   ModuleInits.clear();
885 }
886 
887 void CodeGenModule::EmitCXXGlobalCleanUpFunc() {
888   if (CXXGlobalDtorsOrStermFinalizers.empty() &&
889       PrioritizedCXXStermFinalizers.empty())
890     return;
891 
892   llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false);
893   const CGFunctionInfo &FI = getTypes().arrangeNullaryFunction();
894 
895   // Create our global prioritized cleanup function.
896   if (!PrioritizedCXXStermFinalizers.empty()) {
897     SmallVector<CXXGlobalDtorsOrStermFinalizer_t, 8> LocalCXXStermFinalizers;
898     llvm::array_pod_sort(PrioritizedCXXStermFinalizers.begin(),
899                          PrioritizedCXXStermFinalizers.end());
900     // Iterate over "chunks" of dtors with same priority and emit each chunk
901     // into separate function. Note - everything is sorted first by priority,
902     // second - by lex order, so we emit dtor functions in proper order.
903     for (SmallVectorImpl<StermFinalizerData>::iterator
904              I = PrioritizedCXXStermFinalizers.begin(),
905              E = PrioritizedCXXStermFinalizers.end();
906          I != E;) {
907       SmallVectorImpl<StermFinalizerData>::iterator PrioE =
908           std::upper_bound(I + 1, E, *I, StermFinalizerPriorityCmp());
909 
910       LocalCXXStermFinalizers.clear();
911 
912       unsigned int Priority = I->first.priority;
913       llvm::Function *Fn = CreateGlobalInitOrCleanUpFunction(
914           FTy, "_GLOBAL__a_" + getPrioritySuffix(Priority), FI);
915 
916       for (; I < PrioE; ++I) {
917         llvm::FunctionCallee DtorFn = I->second;
918         LocalCXXStermFinalizers.emplace_back(DtorFn.getFunctionType(),
919                                              DtorFn.getCallee(), nullptr);
920       }
921 
922       CodeGenFunction(*this).GenerateCXXGlobalCleanUpFunc(
923           Fn, LocalCXXStermFinalizers);
924       AddGlobalDtor(Fn, Priority);
925     }
926     PrioritizedCXXStermFinalizers.clear();
927   }
928 
929   if (CXXGlobalDtorsOrStermFinalizers.empty())
930     return;
931 
932   // Create our global cleanup function.
933   llvm::Function *Fn =
934       CreateGlobalInitOrCleanUpFunction(FTy, "_GLOBAL__D_a", FI);
935 
936   CodeGenFunction(*this).GenerateCXXGlobalCleanUpFunc(
937       Fn, CXXGlobalDtorsOrStermFinalizers);
938   AddGlobalDtor(Fn);
939   CXXGlobalDtorsOrStermFinalizers.clear();
940 }
941 
942 /// Emit the code necessary to initialize the given global variable.
943 void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn,
944                                                        const VarDecl *D,
945                                                  llvm::GlobalVariable *Addr,
946                                                        bool PerformInit) {
947   // Check if we need to emit debug info for variable initializer.
948   if (D->hasAttr<NoDebugAttr>())
949     DebugInfo = nullptr; // disable debug info indefinitely for this function
950 
951   CurEHLocation = D->getBeginLoc();
952 
953   StartFunction(GlobalDecl(D, DynamicInitKind::Initializer),
954                 getContext().VoidTy, Fn, getTypes().arrangeNullaryFunction(),
955                 FunctionArgList());
956   // Emit an artificial location for this function.
957   auto AL = ApplyDebugLocation::CreateArtificial(*this);
958 
959   // Use guarded initialization if the global variable is weak. This
960   // occurs for, e.g., instantiated static data members and
961   // definitions explicitly marked weak.
962   //
963   // Also use guarded initialization for a variable with dynamic TLS and
964   // unordered initialization. (If the initialization is ordered, the ABI
965   // layer will guard the whole-TU initialization for us.)
966   if (Addr->hasWeakLinkage() || Addr->hasLinkOnceLinkage() ||
967       (D->getTLSKind() == VarDecl::TLS_Dynamic &&
968        isTemplateInstantiation(D->getTemplateSpecializationKind()))) {
969     EmitCXXGuardedInit(*D, Addr, PerformInit);
970   } else {
971     EmitCXXGlobalVarDeclInit(*D, Addr, PerformInit);
972   }
973 
974   FinishFunction();
975 }
976 
977 void
978 CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function *Fn,
979                                            ArrayRef<llvm::Function *> Decls,
980                                            ConstantAddress Guard) {
981   {
982     auto NL = ApplyDebugLocation::CreateEmpty(*this);
983     StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
984                   getTypes().arrangeNullaryFunction(), FunctionArgList());
985     // Emit an artificial location for this function.
986     auto AL = ApplyDebugLocation::CreateArtificial(*this);
987 
988     llvm::BasicBlock *ExitBlock = nullptr;
989     if (Guard.isValid()) {
990       // If we have a guard variable, check whether we've already performed
991       // these initializations. This happens for TLS initialization functions.
992       llvm::Value *GuardVal = Builder.CreateLoad(Guard);
993       llvm::Value *Uninit = Builder.CreateIsNull(GuardVal,
994                                                  "guard.uninitialized");
995       llvm::BasicBlock *InitBlock = createBasicBlock("init");
996       ExitBlock = createBasicBlock("exit");
997       EmitCXXGuardedInitBranch(Uninit, InitBlock, ExitBlock,
998                                GuardKind::TlsGuard, nullptr);
999       EmitBlock(InitBlock);
1000       // Mark as initialized before initializing anything else. If the
1001       // initializers use previously-initialized thread_local vars, that's
1002       // probably supposed to be OK, but the standard doesn't say.
1003       Builder.CreateStore(llvm::ConstantInt::get(GuardVal->getType(),1), Guard);
1004 
1005       // The guard variable can't ever change again.
1006       EmitInvariantStart(
1007           Guard.getPointer(),
1008           CharUnits::fromQuantity(
1009               CGM.getDataLayout().getTypeAllocSize(GuardVal->getType())));
1010     }
1011 
1012     RunCleanupsScope Scope(*this);
1013 
1014     // When building in Objective-C++ ARC mode, create an autorelease pool
1015     // around the global initializers.
1016     if (getLangOpts().ObjCAutoRefCount && getLangOpts().CPlusPlus) {
1017       llvm::Value *token = EmitObjCAutoreleasePoolPush();
1018       EmitObjCAutoreleasePoolCleanup(token);
1019     }
1020 
1021     for (unsigned i = 0, e = Decls.size(); i != e; ++i)
1022       if (Decls[i])
1023         EmitRuntimeCall(Decls[i]);
1024 
1025     Scope.ForceCleanup();
1026 
1027     if (ExitBlock) {
1028       Builder.CreateBr(ExitBlock);
1029       EmitBlock(ExitBlock);
1030     }
1031   }
1032 
1033   FinishFunction();
1034 }
1035 
1036 void CodeGenFunction::GenerateCXXGlobalCleanUpFunc(
1037     llvm::Function *Fn,
1038     ArrayRef<std::tuple<llvm::FunctionType *, llvm::WeakTrackingVH,
1039                         llvm::Constant *>>
1040         DtorsOrStermFinalizers) {
1041   {
1042     auto NL = ApplyDebugLocation::CreateEmpty(*this);
1043     StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
1044                   getTypes().arrangeNullaryFunction(), FunctionArgList());
1045     // Emit an artificial location for this function.
1046     auto AL = ApplyDebugLocation::CreateArtificial(*this);
1047 
1048     // Emit the cleanups, in reverse order from construction.
1049     for (unsigned i = 0, e = DtorsOrStermFinalizers.size(); i != e; ++i) {
1050       llvm::FunctionType *CalleeTy;
1051       llvm::Value *Callee;
1052       llvm::Constant *Arg;
1053       std::tie(CalleeTy, Callee, Arg) = DtorsOrStermFinalizers[e - i - 1];
1054 
1055       llvm::CallInst *CI = nullptr;
1056       if (Arg == nullptr) {
1057         assert(
1058             CGM.getCXXABI().useSinitAndSterm() &&
1059             "Arg could not be nullptr unless using sinit and sterm functions.");
1060         CI = Builder.CreateCall(CalleeTy, Callee);
1061       } else
1062         CI = Builder.CreateCall(CalleeTy, Callee, Arg);
1063 
1064       // Make sure the call and the callee agree on calling convention.
1065       if (llvm::Function *F = dyn_cast<llvm::Function>(Callee))
1066         CI->setCallingConv(F->getCallingConv());
1067     }
1068   }
1069 
1070   FinishFunction();
1071 }
1072 
1073 /// generateDestroyHelper - Generates a helper function which, when
1074 /// invoked, destroys the given object.  The address of the object
1075 /// should be in global memory.
1076 llvm::Function *CodeGenFunction::generateDestroyHelper(
1077     Address addr, QualType type, Destroyer *destroyer,
1078     bool useEHCleanupForArray, const VarDecl *VD) {
1079   FunctionArgList args;
1080   ImplicitParamDecl Dst(getContext(), getContext().VoidPtrTy,
1081                         ImplicitParamDecl::Other);
1082   args.push_back(&Dst);
1083 
1084   const CGFunctionInfo &FI =
1085     CGM.getTypes().arrangeBuiltinFunctionDeclaration(getContext().VoidTy, args);
1086   llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FI);
1087   llvm::Function *fn = CGM.CreateGlobalInitOrCleanUpFunction(
1088       FTy, "__cxx_global_array_dtor", FI, VD->getLocation());
1089 
1090   CurEHLocation = VD->getBeginLoc();
1091 
1092   StartFunction(GlobalDecl(VD, DynamicInitKind::GlobalArrayDestructor),
1093                 getContext().VoidTy, fn, FI, args);
1094   // Emit an artificial location for this function.
1095   auto AL = ApplyDebugLocation::CreateArtificial(*this);
1096 
1097   emitDestroy(addr, type, destroyer, useEHCleanupForArray);
1098 
1099   FinishFunction();
1100 
1101   return fn;
1102 }
1103