1 //===--- CGDecl.cpp - Emit LLVM Code for declarations ---------------------===//
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 contains code to emit Decl nodes as LLVM code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenFunction.h"
15 #include "CGDebugInfo.h"
16 #include "CGOpenCLRuntime.h"
17 #include "CodeGenModule.h"
18 #include "clang/AST/ASTContext.h"
19 #include "clang/AST/CharUnits.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclObjC.h"
22 #include "clang/Basic/SourceManager.h"
23 #include "clang/Basic/TargetInfo.h"
24 #include "clang/Frontend/CodeGenOptions.h"
25 #include "llvm/IR/DataLayout.h"
26 #include "llvm/IR/GlobalVariable.h"
27 #include "llvm/IR/Intrinsics.h"
28 #include "llvm/IR/Type.h"
29 using namespace clang;
30 using namespace CodeGen;
31 
32 
33 void CodeGenFunction::EmitDecl(const Decl &D) {
34   switch (D.getKind()) {
35   case Decl::TranslationUnit:
36   case Decl::Namespace:
37   case Decl::UnresolvedUsingTypename:
38   case Decl::ClassTemplateSpecialization:
39   case Decl::ClassTemplatePartialSpecialization:
40   case Decl::TemplateTypeParm:
41   case Decl::UnresolvedUsingValue:
42   case Decl::NonTypeTemplateParm:
43   case Decl::CXXMethod:
44   case Decl::CXXConstructor:
45   case Decl::CXXDestructor:
46   case Decl::CXXConversion:
47   case Decl::Field:
48   case Decl::IndirectField:
49   case Decl::ObjCIvar:
50   case Decl::ObjCAtDefsField:
51   case Decl::ParmVar:
52   case Decl::ImplicitParam:
53   case Decl::ClassTemplate:
54   case Decl::FunctionTemplate:
55   case Decl::TypeAliasTemplate:
56   case Decl::TemplateTemplateParm:
57   case Decl::ObjCMethod:
58   case Decl::ObjCCategory:
59   case Decl::ObjCProtocol:
60   case Decl::ObjCInterface:
61   case Decl::ObjCCategoryImpl:
62   case Decl::ObjCImplementation:
63   case Decl::ObjCProperty:
64   case Decl::ObjCCompatibleAlias:
65   case Decl::AccessSpec:
66   case Decl::LinkageSpec:
67   case Decl::ObjCPropertyImpl:
68   case Decl::FileScopeAsm:
69   case Decl::Friend:
70   case Decl::FriendTemplate:
71   case Decl::Block:
72   case Decl::ClassScopeFunctionSpecialization:
73     llvm_unreachable("Declaration should not be in declstmts!");
74   case Decl::Function:  // void X();
75   case Decl::Record:    // struct/union/class X;
76   case Decl::Enum:      // enum X;
77   case Decl::EnumConstant: // enum ? { X = ? }
78   case Decl::CXXRecord: // struct/union/class X; [C++]
79   case Decl::Using:          // using X; [C++]
80   case Decl::UsingShadow:
81   case Decl::UsingDirective: // using namespace X; [C++]
82   case Decl::NamespaceAlias:
83   case Decl::StaticAssert: // static_assert(X, ""); [C++0x]
84   case Decl::Label:        // __label__ x;
85   case Decl::Import:
86   case Decl::OMPThreadPrivate:
87   case Decl::Empty:
88     // None of these decls require codegen support.
89     return;
90 
91   case Decl::Var: {
92     const VarDecl &VD = cast<VarDecl>(D);
93     assert(VD.isLocalVarDecl() &&
94            "Should not see file-scope variables inside a function!");
95     return EmitVarDecl(VD);
96   }
97 
98   case Decl::Typedef:      // typedef int X;
99   case Decl::TypeAlias: {  // using X = int; [C++0x]
100     const TypedefNameDecl &TD = cast<TypedefNameDecl>(D);
101     QualType Ty = TD.getUnderlyingType();
102 
103     if (Ty->isVariablyModifiedType())
104       EmitVariablyModifiedType(Ty);
105   }
106   }
107 }
108 
109 /// EmitVarDecl - This method handles emission of any variable declaration
110 /// inside a function, including static vars etc.
111 void CodeGenFunction::EmitVarDecl(const VarDecl &D) {
112   switch (D.getStorageClassAsWritten()) {
113   case SC_None:
114   case SC_Auto:
115   case SC_Register:
116     return EmitAutoVarDecl(D);
117   case SC_Static: {
118     llvm::GlobalValue::LinkageTypes Linkage =
119       llvm::GlobalValue::InternalLinkage;
120 
121     // If the function definition has some sort of weak linkage, its
122     // static variables should also be weak so that they get properly
123     // uniqued.  We can't do this in C, though, because there's no
124     // standard way to agree on which variables are the same (i.e.
125     // there's no mangling).
126     if (getLangOpts().CPlusPlus)
127       if (llvm::GlobalValue::isWeakForLinker(CurFn->getLinkage()))
128         Linkage = CurFn->getLinkage();
129 
130     return EmitStaticVarDecl(D, Linkage);
131   }
132   case SC_Extern:
133   case SC_PrivateExtern:
134     // Don't emit it now, allow it to be emitted lazily on its first use.
135     return;
136   case SC_OpenCLWorkGroupLocal:
137     return CGM.getOpenCLRuntime().EmitWorkGroupLocalVarDecl(*this, D);
138   }
139 
140   llvm_unreachable("Unknown storage class");
141 }
142 
143 static std::string GetStaticDeclName(CodeGenFunction &CGF, const VarDecl &D,
144                                      const char *Separator) {
145   CodeGenModule &CGM = CGF.CGM;
146   if (CGF.getLangOpts().CPlusPlus) {
147     StringRef Name = CGM.getMangledName(&D);
148     return Name.str();
149   }
150 
151   std::string ContextName;
152   if (!CGF.CurFuncDecl) {
153     // Better be in a block declared in global scope.
154     const NamedDecl *ND = cast<NamedDecl>(&D);
155     const DeclContext *DC = ND->getDeclContext();
156     if (const BlockDecl *BD = dyn_cast<BlockDecl>(DC)) {
157       MangleBuffer Name;
158       CGM.getBlockMangledName(GlobalDecl(), Name, BD);
159       ContextName = Name.getString();
160     }
161     else
162       llvm_unreachable("Unknown context for block static var decl");
163   } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(CGF.CurFuncDecl)) {
164     StringRef Name = CGM.getMangledName(FD);
165     ContextName = Name.str();
166   } else if (isa<ObjCMethodDecl>(CGF.CurFuncDecl))
167     ContextName = CGF.CurFn->getName();
168   else
169     llvm_unreachable("Unknown context for static var decl");
170 
171   return ContextName + Separator + D.getNameAsString();
172 }
173 
174 llvm::GlobalVariable *
175 CodeGenFunction::CreateStaticVarDecl(const VarDecl &D,
176                                      const char *Separator,
177                                      llvm::GlobalValue::LinkageTypes Linkage) {
178   QualType Ty = D.getType();
179   assert(Ty->isConstantSizeType() && "VLAs can't be static");
180 
181   // Use the label if the variable is renamed with the asm-label extension.
182   std::string Name;
183   if (D.hasAttr<AsmLabelAttr>())
184     Name = CGM.getMangledName(&D);
185   else
186     Name = GetStaticDeclName(*this, D, Separator);
187 
188   llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(Ty);
189   unsigned AddrSpace =
190    CGM.GetGlobalVarAddressSpace(&D, CGM.getContext().getTargetAddressSpace(Ty));
191   llvm::GlobalVariable *GV =
192     new llvm::GlobalVariable(CGM.getModule(), LTy,
193                              Ty.isConstant(getContext()), Linkage,
194                              CGM.EmitNullConstant(D.getType()), Name, 0,
195                              llvm::GlobalVariable::NotThreadLocal,
196                              AddrSpace);
197   GV->setAlignment(getContext().getDeclAlign(&D).getQuantity());
198   if (Linkage != llvm::GlobalValue::InternalLinkage)
199     GV->setVisibility(CurFn->getVisibility());
200 
201   if (D.isThreadSpecified())
202     CGM.setTLSMode(GV, D);
203 
204   return GV;
205 }
206 
207 /// hasNontrivialDestruction - Determine whether a type's destruction is
208 /// non-trivial. If so, and the variable uses static initialization, we must
209 /// register its destructor to run on exit.
210 static bool hasNontrivialDestruction(QualType T) {
211   CXXRecordDecl *RD = T->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
212   return RD && !RD->hasTrivialDestructor();
213 }
214 
215 /// AddInitializerToStaticVarDecl - Add the initializer for 'D' to the
216 /// global variable that has already been created for it.  If the initializer
217 /// has a different type than GV does, this may free GV and return a different
218 /// one.  Otherwise it just returns GV.
219 llvm::GlobalVariable *
220 CodeGenFunction::AddInitializerToStaticVarDecl(const VarDecl &D,
221                                                llvm::GlobalVariable *GV) {
222   llvm::Constant *Init = CGM.EmitConstantInit(D, this);
223 
224   // If constant emission failed, then this should be a C++ static
225   // initializer.
226   if (!Init) {
227     if (!getLangOpts().CPlusPlus)
228       CGM.ErrorUnsupported(D.getInit(), "constant l-value expression");
229     else if (Builder.GetInsertBlock()) {
230       // Since we have a static initializer, this global variable can't
231       // be constant.
232       GV->setConstant(false);
233 
234       EmitCXXGuardedInit(D, GV, /*PerformInit*/true);
235     }
236     return GV;
237   }
238 
239   // The initializer may differ in type from the global. Rewrite
240   // the global to match the initializer.  (We have to do this
241   // because some types, like unions, can't be completely represented
242   // in the LLVM type system.)
243   if (GV->getType()->getElementType() != Init->getType()) {
244     llvm::GlobalVariable *OldGV = GV;
245 
246     GV = new llvm::GlobalVariable(CGM.getModule(), Init->getType(),
247                                   OldGV->isConstant(),
248                                   OldGV->getLinkage(), Init, "",
249                                   /*InsertBefore*/ OldGV,
250                                   OldGV->getThreadLocalMode(),
251                            CGM.getContext().getTargetAddressSpace(D.getType()));
252     GV->setVisibility(OldGV->getVisibility());
253 
254     // Steal the name of the old global
255     GV->takeName(OldGV);
256 
257     // Replace all uses of the old global with the new global
258     llvm::Constant *NewPtrForOldDecl =
259     llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
260     OldGV->replaceAllUsesWith(NewPtrForOldDecl);
261 
262     // Erase the old global, since it is no longer used.
263     OldGV->eraseFromParent();
264   }
265 
266   GV->setConstant(CGM.isTypeConstant(D.getType(), true));
267   GV->setInitializer(Init);
268 
269   if (hasNontrivialDestruction(D.getType())) {
270     // We have a constant initializer, but a nontrivial destructor. We still
271     // need to perform a guarded "initialization" in order to register the
272     // destructor.
273     EmitCXXGuardedInit(D, GV, /*PerformInit*/false);
274   }
275 
276   return GV;
277 }
278 
279 void CodeGenFunction::EmitStaticVarDecl(const VarDecl &D,
280                                       llvm::GlobalValue::LinkageTypes Linkage) {
281   llvm::Value *&DMEntry = LocalDeclMap[&D];
282   assert(DMEntry == 0 && "Decl already exists in localdeclmap!");
283 
284   // Check to see if we already have a global variable for this
285   // declaration.  This can happen when double-emitting function
286   // bodies, e.g. with complete and base constructors.
287   llvm::Constant *addr =
288     CGM.getStaticLocalDeclAddress(&D);
289 
290   llvm::GlobalVariable *var;
291   if (addr) {
292     var = cast<llvm::GlobalVariable>(addr->stripPointerCasts());
293   } else {
294     addr = var = CreateStaticVarDecl(D, ".", Linkage);
295   }
296 
297   // Store into LocalDeclMap before generating initializer to handle
298   // circular references.
299   DMEntry = addr;
300   CGM.setStaticLocalDeclAddress(&D, addr);
301 
302   // We can't have a VLA here, but we can have a pointer to a VLA,
303   // even though that doesn't really make any sense.
304   // Make sure to evaluate VLA bounds now so that we have them for later.
305   if (D.getType()->isVariablyModifiedType())
306     EmitVariablyModifiedType(D.getType());
307 
308   // Save the type in case adding the initializer forces a type change.
309   llvm::Type *expectedType = addr->getType();
310 
311   // If this value has an initializer, emit it.
312   if (D.getInit())
313     var = AddInitializerToStaticVarDecl(D, var);
314 
315   var->setAlignment(getContext().getDeclAlign(&D).getQuantity());
316 
317   if (D.hasAttr<AnnotateAttr>())
318     CGM.AddGlobalAnnotations(&D, var);
319 
320   if (const SectionAttr *SA = D.getAttr<SectionAttr>())
321     var->setSection(SA->getName());
322 
323   if (D.hasAttr<UsedAttr>())
324     CGM.AddUsedGlobal(var);
325 
326   // We may have to cast the constant because of the initializer
327   // mismatch above.
328   //
329   // FIXME: It is really dangerous to store this in the map; if anyone
330   // RAUW's the GV uses of this constant will be invalid.
331   llvm::Constant *castedAddr = llvm::ConstantExpr::getBitCast(var, expectedType);
332   DMEntry = castedAddr;
333   CGM.setStaticLocalDeclAddress(&D, castedAddr);
334 
335   // Emit global variable debug descriptor for static vars.
336   CGDebugInfo *DI = getDebugInfo();
337   if (DI &&
338       CGM.getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo) {
339     DI->setLocation(D.getLocation());
340     DI->EmitGlobalVariable(var, &D);
341   }
342 }
343 
344 namespace {
345   struct DestroyObject : EHScopeStack::Cleanup {
346     DestroyObject(llvm::Value *addr, QualType type,
347                   CodeGenFunction::Destroyer *destroyer,
348                   bool useEHCleanupForArray)
349       : addr(addr), type(type), destroyer(destroyer),
350         useEHCleanupForArray(useEHCleanupForArray) {}
351 
352     llvm::Value *addr;
353     QualType type;
354     CodeGenFunction::Destroyer *destroyer;
355     bool useEHCleanupForArray;
356 
357     void Emit(CodeGenFunction &CGF, Flags flags) {
358       // Don't use an EH cleanup recursively from an EH cleanup.
359       bool useEHCleanupForArray =
360         flags.isForNormalCleanup() && this->useEHCleanupForArray;
361 
362       CGF.emitDestroy(addr, type, destroyer, useEHCleanupForArray);
363     }
364   };
365 
366   struct DestroyNRVOVariable : EHScopeStack::Cleanup {
367     DestroyNRVOVariable(llvm::Value *addr,
368                         const CXXDestructorDecl *Dtor,
369                         llvm::Value *NRVOFlag)
370       : Dtor(Dtor), NRVOFlag(NRVOFlag), Loc(addr) {}
371 
372     const CXXDestructorDecl *Dtor;
373     llvm::Value *NRVOFlag;
374     llvm::Value *Loc;
375 
376     void Emit(CodeGenFunction &CGF, Flags flags) {
377       // Along the exceptions path we always execute the dtor.
378       bool NRVO = flags.isForNormalCleanup() && NRVOFlag;
379 
380       llvm::BasicBlock *SkipDtorBB = 0;
381       if (NRVO) {
382         // If we exited via NRVO, we skip the destructor call.
383         llvm::BasicBlock *RunDtorBB = CGF.createBasicBlock("nrvo.unused");
384         SkipDtorBB = CGF.createBasicBlock("nrvo.skipdtor");
385         llvm::Value *DidNRVO = CGF.Builder.CreateLoad(NRVOFlag, "nrvo.val");
386         CGF.Builder.CreateCondBr(DidNRVO, SkipDtorBB, RunDtorBB);
387         CGF.EmitBlock(RunDtorBB);
388       }
389 
390       CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete,
391                                 /*ForVirtualBase=*/false,
392                                 /*Delegating=*/false,
393                                 Loc);
394 
395       if (NRVO) CGF.EmitBlock(SkipDtorBB);
396     }
397   };
398 
399   struct CallStackRestore : EHScopeStack::Cleanup {
400     llvm::Value *Stack;
401     CallStackRestore(llvm::Value *Stack) : Stack(Stack) {}
402     void Emit(CodeGenFunction &CGF, Flags flags) {
403       llvm::Value *V = CGF.Builder.CreateLoad(Stack);
404       llvm::Value *F = CGF.CGM.getIntrinsic(llvm::Intrinsic::stackrestore);
405       CGF.Builder.CreateCall(F, V);
406     }
407   };
408 
409   struct ExtendGCLifetime : EHScopeStack::Cleanup {
410     const VarDecl &Var;
411     ExtendGCLifetime(const VarDecl *var) : Var(*var) {}
412 
413     void Emit(CodeGenFunction &CGF, Flags flags) {
414       // Compute the address of the local variable, in case it's a
415       // byref or something.
416       DeclRefExpr DRE(const_cast<VarDecl*>(&Var), false,
417                       Var.getType(), VK_LValue, SourceLocation());
418       llvm::Value *value = CGF.EmitLoadOfScalar(CGF.EmitDeclRefLValue(&DRE));
419       CGF.EmitExtendGCLifetime(value);
420     }
421   };
422 
423   struct CallCleanupFunction : EHScopeStack::Cleanup {
424     llvm::Constant *CleanupFn;
425     const CGFunctionInfo &FnInfo;
426     const VarDecl &Var;
427 
428     CallCleanupFunction(llvm::Constant *CleanupFn, const CGFunctionInfo *Info,
429                         const VarDecl *Var)
430       : CleanupFn(CleanupFn), FnInfo(*Info), Var(*Var) {}
431 
432     void Emit(CodeGenFunction &CGF, Flags flags) {
433       DeclRefExpr DRE(const_cast<VarDecl*>(&Var), false,
434                       Var.getType(), VK_LValue, SourceLocation());
435       // Compute the address of the local variable, in case it's a byref
436       // or something.
437       llvm::Value *Addr = CGF.EmitDeclRefLValue(&DRE).getAddress();
438 
439       // In some cases, the type of the function argument will be different from
440       // the type of the pointer. An example of this is
441       // void f(void* arg);
442       // __attribute__((cleanup(f))) void *g;
443       //
444       // To fix this we insert a bitcast here.
445       QualType ArgTy = FnInfo.arg_begin()->type;
446       llvm::Value *Arg =
447         CGF.Builder.CreateBitCast(Addr, CGF.ConvertType(ArgTy));
448 
449       CallArgList Args;
450       Args.add(RValue::get(Arg),
451                CGF.getContext().getPointerType(Var.getType()));
452       CGF.EmitCall(FnInfo, CleanupFn, ReturnValueSlot(), Args);
453     }
454   };
455 
456   /// A cleanup to call @llvm.lifetime.end.
457   class CallLifetimeEnd : public EHScopeStack::Cleanup {
458     llvm::Value *Addr;
459     llvm::Value *Size;
460   public:
461     CallLifetimeEnd(llvm::Value *addr, llvm::Value *size)
462       : Addr(addr), Size(size) {}
463 
464     void Emit(CodeGenFunction &CGF, Flags flags) {
465       llvm::Value *castAddr = CGF.Builder.CreateBitCast(Addr, CGF.Int8PtrTy);
466       CGF.Builder.CreateCall2(CGF.CGM.getLLVMLifetimeEndFn(),
467                               Size, castAddr)
468         ->setDoesNotThrow();
469     }
470   };
471 }
472 
473 /// EmitAutoVarWithLifetime - Does the setup required for an automatic
474 /// variable with lifetime.
475 static void EmitAutoVarWithLifetime(CodeGenFunction &CGF, const VarDecl &var,
476                                     llvm::Value *addr,
477                                     Qualifiers::ObjCLifetime lifetime) {
478   switch (lifetime) {
479   case Qualifiers::OCL_None:
480     llvm_unreachable("present but none");
481 
482   case Qualifiers::OCL_ExplicitNone:
483     // nothing to do
484     break;
485 
486   case Qualifiers::OCL_Strong: {
487     CodeGenFunction::Destroyer *destroyer =
488       (var.hasAttr<ObjCPreciseLifetimeAttr>()
489        ? CodeGenFunction::destroyARCStrongPrecise
490        : CodeGenFunction::destroyARCStrongImprecise);
491 
492     CleanupKind cleanupKind = CGF.getARCCleanupKind();
493     CGF.pushDestroy(cleanupKind, addr, var.getType(), destroyer,
494                     cleanupKind & EHCleanup);
495     break;
496   }
497   case Qualifiers::OCL_Autoreleasing:
498     // nothing to do
499     break;
500 
501   case Qualifiers::OCL_Weak:
502     // __weak objects always get EH cleanups; otherwise, exceptions
503     // could cause really nasty crashes instead of mere leaks.
504     CGF.pushDestroy(NormalAndEHCleanup, addr, var.getType(),
505                     CodeGenFunction::destroyARCWeak,
506                     /*useEHCleanup*/ true);
507     break;
508   }
509 }
510 
511 static bool isAccessedBy(const VarDecl &var, const Stmt *s) {
512   if (const Expr *e = dyn_cast<Expr>(s)) {
513     // Skip the most common kinds of expressions that make
514     // hierarchy-walking expensive.
515     s = e = e->IgnoreParenCasts();
516 
517     if (const DeclRefExpr *ref = dyn_cast<DeclRefExpr>(e))
518       return (ref->getDecl() == &var);
519     if (const BlockExpr *be = dyn_cast<BlockExpr>(e)) {
520       const BlockDecl *block = be->getBlockDecl();
521       for (BlockDecl::capture_const_iterator i = block->capture_begin(),
522            e = block->capture_end(); i != e; ++i) {
523         if (i->getVariable() == &var)
524           return true;
525       }
526     }
527   }
528 
529   for (Stmt::const_child_range children = s->children(); children; ++children)
530     // children might be null; as in missing decl or conditional of an if-stmt.
531     if ((*children) && isAccessedBy(var, *children))
532       return true;
533 
534   return false;
535 }
536 
537 static bool isAccessedBy(const ValueDecl *decl, const Expr *e) {
538   if (!decl) return false;
539   if (!isa<VarDecl>(decl)) return false;
540   const VarDecl *var = cast<VarDecl>(decl);
541   return isAccessedBy(*var, e);
542 }
543 
544 static void drillIntoBlockVariable(CodeGenFunction &CGF,
545                                    LValue &lvalue,
546                                    const VarDecl *var) {
547   lvalue.setAddress(CGF.BuildBlockByrefAddress(lvalue.getAddress(), var));
548 }
549 
550 void CodeGenFunction::EmitScalarInit(const Expr *init,
551                                      const ValueDecl *D,
552                                      LValue lvalue,
553                                      bool capturedByInit) {
554   Qualifiers::ObjCLifetime lifetime = lvalue.getObjCLifetime();
555   if (!lifetime) {
556     llvm::Value *value = EmitScalarExpr(init);
557     if (capturedByInit)
558       drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
559     EmitStoreThroughLValue(RValue::get(value), lvalue, true);
560     return;
561   }
562 
563   // If we're emitting a value with lifetime, we have to do the
564   // initialization *before* we leave the cleanup scopes.
565   if (const ExprWithCleanups *ewc = dyn_cast<ExprWithCleanups>(init)) {
566     enterFullExpression(ewc);
567     init = ewc->getSubExpr();
568   }
569   CodeGenFunction::RunCleanupsScope Scope(*this);
570 
571   // We have to maintain the illusion that the variable is
572   // zero-initialized.  If the variable might be accessed in its
573   // initializer, zero-initialize before running the initializer, then
574   // actually perform the initialization with an assign.
575   bool accessedByInit = false;
576   if (lifetime != Qualifiers::OCL_ExplicitNone)
577     accessedByInit = (capturedByInit || isAccessedBy(D, init));
578   if (accessedByInit) {
579     LValue tempLV = lvalue;
580     // Drill down to the __block object if necessary.
581     if (capturedByInit) {
582       // We can use a simple GEP for this because it can't have been
583       // moved yet.
584       tempLV.setAddress(Builder.CreateStructGEP(tempLV.getAddress(),
585                                    getByRefValueLLVMField(cast<VarDecl>(D))));
586     }
587 
588     llvm::PointerType *ty
589       = cast<llvm::PointerType>(tempLV.getAddress()->getType());
590     ty = cast<llvm::PointerType>(ty->getElementType());
591 
592     llvm::Value *zero = llvm::ConstantPointerNull::get(ty);
593 
594     // If __weak, we want to use a barrier under certain conditions.
595     if (lifetime == Qualifiers::OCL_Weak)
596       EmitARCInitWeak(tempLV.getAddress(), zero);
597 
598     // Otherwise just do a simple store.
599     else
600       EmitStoreOfScalar(zero, tempLV, /* isInitialization */ true);
601   }
602 
603   // Emit the initializer.
604   llvm::Value *value = 0;
605 
606   switch (lifetime) {
607   case Qualifiers::OCL_None:
608     llvm_unreachable("present but none");
609 
610   case Qualifiers::OCL_ExplicitNone:
611     // nothing to do
612     value = EmitScalarExpr(init);
613     break;
614 
615   case Qualifiers::OCL_Strong: {
616     value = EmitARCRetainScalarExpr(init);
617     break;
618   }
619 
620   case Qualifiers::OCL_Weak: {
621     // No way to optimize a producing initializer into this.  It's not
622     // worth optimizing for, because the value will immediately
623     // disappear in the common case.
624     value = EmitScalarExpr(init);
625 
626     if (capturedByInit) drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
627     if (accessedByInit)
628       EmitARCStoreWeak(lvalue.getAddress(), value, /*ignored*/ true);
629     else
630       EmitARCInitWeak(lvalue.getAddress(), value);
631     return;
632   }
633 
634   case Qualifiers::OCL_Autoreleasing:
635     value = EmitARCRetainAutoreleaseScalarExpr(init);
636     break;
637   }
638 
639   if (capturedByInit) drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
640 
641   // If the variable might have been accessed by its initializer, we
642   // might have to initialize with a barrier.  We have to do this for
643   // both __weak and __strong, but __weak got filtered out above.
644   if (accessedByInit && lifetime == Qualifiers::OCL_Strong) {
645     llvm::Value *oldValue = EmitLoadOfScalar(lvalue);
646     EmitStoreOfScalar(value, lvalue, /* isInitialization */ true);
647     EmitARCRelease(oldValue, ARCImpreciseLifetime);
648     return;
649   }
650 
651   EmitStoreOfScalar(value, lvalue, /* isInitialization */ true);
652 }
653 
654 /// EmitScalarInit - Initialize the given lvalue with the given object.
655 void CodeGenFunction::EmitScalarInit(llvm::Value *init, LValue lvalue) {
656   Qualifiers::ObjCLifetime lifetime = lvalue.getObjCLifetime();
657   if (!lifetime)
658     return EmitStoreThroughLValue(RValue::get(init), lvalue, true);
659 
660   switch (lifetime) {
661   case Qualifiers::OCL_None:
662     llvm_unreachable("present but none");
663 
664   case Qualifiers::OCL_ExplicitNone:
665     // nothing to do
666     break;
667 
668   case Qualifiers::OCL_Strong:
669     init = EmitARCRetain(lvalue.getType(), init);
670     break;
671 
672   case Qualifiers::OCL_Weak:
673     // Initialize and then skip the primitive store.
674     EmitARCInitWeak(lvalue.getAddress(), init);
675     return;
676 
677   case Qualifiers::OCL_Autoreleasing:
678     init = EmitARCRetainAutorelease(lvalue.getType(), init);
679     break;
680   }
681 
682   EmitStoreOfScalar(init, lvalue, /* isInitialization */ true);
683 }
684 
685 /// canEmitInitWithFewStoresAfterMemset - Decide whether we can emit the
686 /// non-zero parts of the specified initializer with equal or fewer than
687 /// NumStores scalar stores.
688 static bool canEmitInitWithFewStoresAfterMemset(llvm::Constant *Init,
689                                                 unsigned &NumStores) {
690   // Zero and Undef never requires any extra stores.
691   if (isa<llvm::ConstantAggregateZero>(Init) ||
692       isa<llvm::ConstantPointerNull>(Init) ||
693       isa<llvm::UndefValue>(Init))
694     return true;
695   if (isa<llvm::ConstantInt>(Init) || isa<llvm::ConstantFP>(Init) ||
696       isa<llvm::ConstantVector>(Init) || isa<llvm::BlockAddress>(Init) ||
697       isa<llvm::ConstantExpr>(Init))
698     return Init->isNullValue() || NumStores--;
699 
700   // See if we can emit each element.
701   if (isa<llvm::ConstantArray>(Init) || isa<llvm::ConstantStruct>(Init)) {
702     for (unsigned i = 0, e = Init->getNumOperands(); i != e; ++i) {
703       llvm::Constant *Elt = cast<llvm::Constant>(Init->getOperand(i));
704       if (!canEmitInitWithFewStoresAfterMemset(Elt, NumStores))
705         return false;
706     }
707     return true;
708   }
709 
710   if (llvm::ConstantDataSequential *CDS =
711         dyn_cast<llvm::ConstantDataSequential>(Init)) {
712     for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
713       llvm::Constant *Elt = CDS->getElementAsConstant(i);
714       if (!canEmitInitWithFewStoresAfterMemset(Elt, NumStores))
715         return false;
716     }
717     return true;
718   }
719 
720   // Anything else is hard and scary.
721   return false;
722 }
723 
724 /// emitStoresForInitAfterMemset - For inits that
725 /// canEmitInitWithFewStoresAfterMemset returned true for, emit the scalar
726 /// stores that would be required.
727 static void emitStoresForInitAfterMemset(llvm::Constant *Init, llvm::Value *Loc,
728                                          bool isVolatile, CGBuilderTy &Builder) {
729   assert(!Init->isNullValue() && !isa<llvm::UndefValue>(Init) &&
730          "called emitStoresForInitAfterMemset for zero or undef value.");
731 
732   if (isa<llvm::ConstantInt>(Init) || isa<llvm::ConstantFP>(Init) ||
733       isa<llvm::ConstantVector>(Init) || isa<llvm::BlockAddress>(Init) ||
734       isa<llvm::ConstantExpr>(Init)) {
735     Builder.CreateStore(Init, Loc, isVolatile);
736     return;
737   }
738 
739   if (llvm::ConstantDataSequential *CDS =
740         dyn_cast<llvm::ConstantDataSequential>(Init)) {
741     for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
742       llvm::Constant *Elt = CDS->getElementAsConstant(i);
743 
744       // If necessary, get a pointer to the element and emit it.
745       if (!Elt->isNullValue() && !isa<llvm::UndefValue>(Elt))
746         emitStoresForInitAfterMemset(Elt, Builder.CreateConstGEP2_32(Loc, 0, i),
747                                      isVolatile, Builder);
748     }
749     return;
750   }
751 
752   assert((isa<llvm::ConstantStruct>(Init) || isa<llvm::ConstantArray>(Init)) &&
753          "Unknown value type!");
754 
755   for (unsigned i = 0, e = Init->getNumOperands(); i != e; ++i) {
756     llvm::Constant *Elt = cast<llvm::Constant>(Init->getOperand(i));
757 
758     // If necessary, get a pointer to the element and emit it.
759     if (!Elt->isNullValue() && !isa<llvm::UndefValue>(Elt))
760       emitStoresForInitAfterMemset(Elt, Builder.CreateConstGEP2_32(Loc, 0, i),
761                                    isVolatile, Builder);
762   }
763 }
764 
765 
766 /// shouldUseMemSetPlusStoresToInitialize - Decide whether we should use memset
767 /// plus some stores to initialize a local variable instead of using a memcpy
768 /// from a constant global.  It is beneficial to use memset if the global is all
769 /// zeros, or mostly zeros and large.
770 static bool shouldUseMemSetPlusStoresToInitialize(llvm::Constant *Init,
771                                                   uint64_t GlobalSize) {
772   // If a global is all zeros, always use a memset.
773   if (isa<llvm::ConstantAggregateZero>(Init)) return true;
774 
775   // If a non-zero global is <= 32 bytes, always use a memcpy.  If it is large,
776   // do it if it will require 6 or fewer scalar stores.
777   // TODO: Should budget depends on the size?  Avoiding a large global warrants
778   // plopping in more stores.
779   unsigned StoreBudget = 6;
780   uint64_t SizeLimit = 32;
781 
782   return GlobalSize > SizeLimit &&
783          canEmitInitWithFewStoresAfterMemset(Init, StoreBudget);
784 }
785 
786 /// Should we use the LLVM lifetime intrinsics for the given local variable?
787 static bool shouldUseLifetimeMarkers(CodeGenFunction &CGF, const VarDecl &D,
788                                      unsigned Size) {
789   // For now, only in optimized builds.
790   if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0)
791     return false;
792 
793   // Limit the size of marked objects to 32 bytes. We don't want to increase
794   // compile time by marking tiny objects.
795   unsigned SizeThreshold = 32;
796 
797   return Size > SizeThreshold;
798 }
799 
800 
801 /// EmitAutoVarDecl - Emit code and set up an entry in LocalDeclMap for a
802 /// variable declaration with auto, register, or no storage class specifier.
803 /// These turn into simple stack objects, or GlobalValues depending on target.
804 void CodeGenFunction::EmitAutoVarDecl(const VarDecl &D) {
805   AutoVarEmission emission = EmitAutoVarAlloca(D);
806   EmitAutoVarInit(emission);
807   EmitAutoVarCleanups(emission);
808 }
809 
810 /// EmitAutoVarAlloca - Emit the alloca and debug information for a
811 /// local variable.  Does not emit initalization or destruction.
812 CodeGenFunction::AutoVarEmission
813 CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) {
814   QualType Ty = D.getType();
815 
816   AutoVarEmission emission(D);
817 
818   bool isByRef = D.hasAttr<BlocksAttr>();
819   emission.IsByRef = isByRef;
820 
821   CharUnits alignment = getContext().getDeclAlign(&D);
822   emission.Alignment = alignment;
823 
824   // If the type is variably-modified, emit all the VLA sizes for it.
825   if (Ty->isVariablyModifiedType())
826     EmitVariablyModifiedType(Ty);
827 
828   llvm::Value *DeclPtr;
829   if (Ty->isConstantSizeType()) {
830     bool NRVO = getLangOpts().ElideConstructors &&
831       D.isNRVOVariable();
832 
833     // If this value is a POD array or struct with a statically
834     // determinable constant initializer, there are optimizations we can do.
835     //
836     // TODO: We should constant-evaluate the initializer of any variable,
837     // as long as it is initialized by a constant expression. Currently,
838     // isConstantInitializer produces wrong answers for structs with
839     // reference or bitfield members, and a few other cases, and checking
840     // for POD-ness protects us from some of these.
841     if (D.getInit() &&
842         (Ty->isArrayType() || Ty->isRecordType()) &&
843         (Ty.isPODType(getContext()) ||
844          getContext().getBaseElementType(Ty)->isObjCObjectPointerType()) &&
845         D.getInit()->isConstantInitializer(getContext(), false)) {
846 
847       // If the variable's a const type, and it's neither an NRVO
848       // candidate nor a __block variable and has no mutable members,
849       // emit it as a global instead.
850       if (CGM.getCodeGenOpts().MergeAllConstants && !NRVO && !isByRef &&
851           CGM.isTypeConstant(Ty, true)) {
852         EmitStaticVarDecl(D, llvm::GlobalValue::InternalLinkage);
853 
854         emission.Address = 0; // signal this condition to later callbacks
855         assert(emission.wasEmittedAsGlobal());
856         return emission;
857       }
858 
859       // Otherwise, tell the initialization code that we're in this case.
860       emission.IsConstantAggregate = true;
861     }
862 
863     // A normal fixed sized variable becomes an alloca in the entry block,
864     // unless it's an NRVO variable.
865     llvm::Type *LTy = ConvertTypeForMem(Ty);
866 
867     if (NRVO) {
868       // The named return value optimization: allocate this variable in the
869       // return slot, so that we can elide the copy when returning this
870       // variable (C++0x [class.copy]p34).
871       DeclPtr = ReturnValue;
872 
873       if (const RecordType *RecordTy = Ty->getAs<RecordType>()) {
874         if (!cast<CXXRecordDecl>(RecordTy->getDecl())->hasTrivialDestructor()) {
875           // Create a flag that is used to indicate when the NRVO was applied
876           // to this variable. Set it to zero to indicate that NRVO was not
877           // applied.
878           llvm::Value *Zero = Builder.getFalse();
879           llvm::Value *NRVOFlag = CreateTempAlloca(Zero->getType(), "nrvo");
880           EnsureInsertPoint();
881           Builder.CreateStore(Zero, NRVOFlag);
882 
883           // Record the NRVO flag for this variable.
884           NRVOFlags[&D] = NRVOFlag;
885           emission.NRVOFlag = NRVOFlag;
886         }
887       }
888     } else {
889       if (isByRef)
890         LTy = BuildByRefType(&D);
891 
892       llvm::AllocaInst *Alloc = CreateTempAlloca(LTy);
893       Alloc->setName(D.getName());
894 
895       CharUnits allocaAlignment = alignment;
896       if (isByRef)
897         allocaAlignment = std::max(allocaAlignment,
898             getContext().toCharUnitsFromBits(Target.getPointerAlign(0)));
899       Alloc->setAlignment(allocaAlignment.getQuantity());
900       DeclPtr = Alloc;
901 
902       // Emit a lifetime intrinsic if meaningful.  There's no point
903       // in doing this if we don't have a valid insertion point (?).
904       uint64_t size = CGM.getDataLayout().getTypeAllocSize(LTy);
905       if (HaveInsertPoint() && shouldUseLifetimeMarkers(*this, D, size)) {
906         llvm::Value *sizeV = llvm::ConstantInt::get(Int64Ty, size);
907 
908         emission.SizeForLifetimeMarkers = sizeV;
909         llvm::Value *castAddr = Builder.CreateBitCast(Alloc, Int8PtrTy);
910         Builder.CreateCall2(CGM.getLLVMLifetimeStartFn(), sizeV, castAddr)
911           ->setDoesNotThrow();
912       } else {
913         assert(!emission.useLifetimeMarkers());
914       }
915     }
916   } else {
917     EnsureInsertPoint();
918 
919     if (!DidCallStackSave) {
920       // Save the stack.
921       llvm::Value *Stack = CreateTempAlloca(Int8PtrTy, "saved_stack");
922 
923       llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::stacksave);
924       llvm::Value *V = Builder.CreateCall(F);
925 
926       Builder.CreateStore(V, Stack);
927 
928       DidCallStackSave = true;
929 
930       // Push a cleanup block and restore the stack there.
931       // FIXME: in general circumstances, this should be an EH cleanup.
932       EHStack.pushCleanup<CallStackRestore>(NormalCleanup, Stack);
933     }
934 
935     llvm::Value *elementCount;
936     QualType elementType;
937     llvm::tie(elementCount, elementType) = getVLASize(Ty);
938 
939     llvm::Type *llvmTy = ConvertTypeForMem(elementType);
940 
941     // Allocate memory for the array.
942     llvm::AllocaInst *vla = Builder.CreateAlloca(llvmTy, elementCount, "vla");
943     vla->setAlignment(alignment.getQuantity());
944 
945     DeclPtr = vla;
946   }
947 
948   llvm::Value *&DMEntry = LocalDeclMap[&D];
949   assert(DMEntry == 0 && "Decl already exists in localdeclmap!");
950   DMEntry = DeclPtr;
951   emission.Address = DeclPtr;
952 
953   // Emit debug info for local var declaration.
954   if (HaveInsertPoint())
955     if (CGDebugInfo *DI = getDebugInfo()) {
956       if (CGM.getCodeGenOpts().getDebugInfo()
957             >= CodeGenOptions::LimitedDebugInfo) {
958         DI->setLocation(D.getLocation());
959         DI->EmitDeclareOfAutoVariable(&D, DeclPtr, Builder);
960       }
961     }
962 
963   if (D.hasAttr<AnnotateAttr>())
964       EmitVarAnnotations(&D, emission.Address);
965 
966   return emission;
967 }
968 
969 /// Determines whether the given __block variable is potentially
970 /// captured by the given expression.
971 static bool isCapturedBy(const VarDecl &var, const Expr *e) {
972   // Skip the most common kinds of expressions that make
973   // hierarchy-walking expensive.
974   e = e->IgnoreParenCasts();
975 
976   if (const BlockExpr *be = dyn_cast<BlockExpr>(e)) {
977     const BlockDecl *block = be->getBlockDecl();
978     for (BlockDecl::capture_const_iterator i = block->capture_begin(),
979            e = block->capture_end(); i != e; ++i) {
980       if (i->getVariable() == &var)
981         return true;
982     }
983 
984     // No need to walk into the subexpressions.
985     return false;
986   }
987 
988   if (const StmtExpr *SE = dyn_cast<StmtExpr>(e)) {
989     const CompoundStmt *CS = SE->getSubStmt();
990     for (CompoundStmt::const_body_iterator BI = CS->body_begin(),
991 	   BE = CS->body_end(); BI != BE; ++BI)
992       if (Expr *E = dyn_cast<Expr>((*BI))) {
993         if (isCapturedBy(var, E))
994             return true;
995       }
996       else if (DeclStmt *DS = dyn_cast<DeclStmt>((*BI))) {
997           // special case declarations
998           for (DeclStmt::decl_iterator I = DS->decl_begin(), E = DS->decl_end();
999                I != E; ++I) {
1000               if (VarDecl *VD = dyn_cast<VarDecl>((*I))) {
1001                 Expr *Init = VD->getInit();
1002                 if (Init && isCapturedBy(var, Init))
1003                   return true;
1004               }
1005           }
1006       }
1007       else
1008         // FIXME. Make safe assumption assuming arbitrary statements cause capturing.
1009         // Later, provide code to poke into statements for capture analysis.
1010         return true;
1011     return false;
1012   }
1013 
1014   for (Stmt::const_child_range children = e->children(); children; ++children)
1015     if (isCapturedBy(var, cast<Expr>(*children)))
1016       return true;
1017 
1018   return false;
1019 }
1020 
1021 /// \brief Determine whether the given initializer is trivial in the sense
1022 /// that it requires no code to be generated.
1023 static bool isTrivialInitializer(const Expr *Init) {
1024   if (!Init)
1025     return true;
1026 
1027   if (const CXXConstructExpr *Construct = dyn_cast<CXXConstructExpr>(Init))
1028     if (CXXConstructorDecl *Constructor = Construct->getConstructor())
1029       if (Constructor->isTrivial() &&
1030           Constructor->isDefaultConstructor() &&
1031           !Construct->requiresZeroInitialization())
1032         return true;
1033 
1034   return false;
1035 }
1036 void CodeGenFunction::EmitAutoVarInit(const AutoVarEmission &emission) {
1037   assert(emission.Variable && "emission was not valid!");
1038 
1039   // If this was emitted as a global constant, we're done.
1040   if (emission.wasEmittedAsGlobal()) return;
1041 
1042   const VarDecl &D = *emission.Variable;
1043   QualType type = D.getType();
1044 
1045   // If this local has an initializer, emit it now.
1046   const Expr *Init = D.getInit();
1047 
1048   // If we are at an unreachable point, we don't need to emit the initializer
1049   // unless it contains a label.
1050   if (!HaveInsertPoint()) {
1051     if (!Init || !ContainsLabel(Init)) return;
1052     EnsureInsertPoint();
1053   }
1054 
1055   // Initialize the structure of a __block variable.
1056   if (emission.IsByRef)
1057     emitByrefStructureInit(emission);
1058 
1059   if (isTrivialInitializer(Init))
1060     return;
1061 
1062   CharUnits alignment = emission.Alignment;
1063 
1064   // Check whether this is a byref variable that's potentially
1065   // captured and moved by its own initializer.  If so, we'll need to
1066   // emit the initializer first, then copy into the variable.
1067   bool capturedByInit = emission.IsByRef && isCapturedBy(D, Init);
1068 
1069   llvm::Value *Loc =
1070     capturedByInit ? emission.Address : emission.getObjectAddress(*this);
1071 
1072   llvm::Constant *constant = 0;
1073   if (emission.IsConstantAggregate) {
1074     assert(!capturedByInit && "constant init contains a capturing block?");
1075     constant = CGM.EmitConstantInit(D, this);
1076   }
1077 
1078   if (!constant) {
1079     LValue lv = MakeAddrLValue(Loc, type, alignment);
1080     lv.setNonGC(true);
1081     return EmitExprAsInit(Init, &D, lv, capturedByInit);
1082   }
1083 
1084   // If this is a simple aggregate initialization, we can optimize it
1085   // in various ways.
1086   bool isVolatile = type.isVolatileQualified();
1087 
1088   llvm::Value *SizeVal =
1089     llvm::ConstantInt::get(IntPtrTy,
1090                            getContext().getTypeSizeInChars(type).getQuantity());
1091 
1092   llvm::Type *BP = Int8PtrTy;
1093   if (Loc->getType() != BP)
1094     Loc = Builder.CreateBitCast(Loc, BP);
1095 
1096   // If the initializer is all or mostly zeros, codegen with memset then do
1097   // a few stores afterward.
1098   if (shouldUseMemSetPlusStoresToInitialize(constant,
1099                 CGM.getDataLayout().getTypeAllocSize(constant->getType()))) {
1100     Builder.CreateMemSet(Loc, llvm::ConstantInt::get(Int8Ty, 0), SizeVal,
1101                          alignment.getQuantity(), isVolatile);
1102     // Zero and undef don't require a stores.
1103     if (!constant->isNullValue() && !isa<llvm::UndefValue>(constant)) {
1104       Loc = Builder.CreateBitCast(Loc, constant->getType()->getPointerTo());
1105       emitStoresForInitAfterMemset(constant, Loc, isVolatile, Builder);
1106     }
1107   } else {
1108     // Otherwise, create a temporary global with the initializer then
1109     // memcpy from the global to the alloca.
1110     std::string Name = GetStaticDeclName(*this, D, ".");
1111     llvm::GlobalVariable *GV =
1112       new llvm::GlobalVariable(CGM.getModule(), constant->getType(), true,
1113                                llvm::GlobalValue::PrivateLinkage,
1114                                constant, Name);
1115     GV->setAlignment(alignment.getQuantity());
1116     GV->setUnnamedAddr(true);
1117 
1118     llvm::Value *SrcPtr = GV;
1119     if (SrcPtr->getType() != BP)
1120       SrcPtr = Builder.CreateBitCast(SrcPtr, BP);
1121 
1122     Builder.CreateMemCpy(Loc, SrcPtr, SizeVal, alignment.getQuantity(),
1123                          isVolatile);
1124   }
1125 }
1126 
1127 /// Emit an expression as an initializer for a variable at the given
1128 /// location.  The expression is not necessarily the normal
1129 /// initializer for the variable, and the address is not necessarily
1130 /// its normal location.
1131 ///
1132 /// \param init the initializing expression
1133 /// \param var the variable to act as if we're initializing
1134 /// \param loc the address to initialize; its type is a pointer
1135 ///   to the LLVM mapping of the variable's type
1136 /// \param alignment the alignment of the address
1137 /// \param capturedByInit true if the variable is a __block variable
1138 ///   whose address is potentially changed by the initializer
1139 void CodeGenFunction::EmitExprAsInit(const Expr *init,
1140                                      const ValueDecl *D,
1141                                      LValue lvalue,
1142                                      bool capturedByInit) {
1143   QualType type = D->getType();
1144 
1145   if (type->isReferenceType()) {
1146     RValue rvalue = EmitReferenceBindingToExpr(init, D);
1147     if (capturedByInit)
1148       drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
1149     EmitStoreThroughLValue(rvalue, lvalue, true);
1150     return;
1151   }
1152   switch (getEvaluationKind(type)) {
1153   case TEK_Scalar:
1154     EmitScalarInit(init, D, lvalue, capturedByInit);
1155     return;
1156   case TEK_Complex: {
1157     ComplexPairTy complex = EmitComplexExpr(init);
1158     if (capturedByInit)
1159       drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
1160     EmitStoreOfComplex(complex, lvalue, /*init*/ true);
1161     return;
1162   }
1163   case TEK_Aggregate:
1164     if (type->isAtomicType()) {
1165       EmitAtomicInit(const_cast<Expr*>(init), lvalue);
1166     } else {
1167       // TODO: how can we delay here if D is captured by its initializer?
1168       EmitAggExpr(init, AggValueSlot::forLValue(lvalue,
1169                                               AggValueSlot::IsDestructed,
1170                                          AggValueSlot::DoesNotNeedGCBarriers,
1171                                               AggValueSlot::IsNotAliased));
1172     }
1173     MaybeEmitStdInitializerListCleanup(lvalue.getAddress(), init);
1174     return;
1175   }
1176   llvm_unreachable("bad evaluation kind");
1177 }
1178 
1179 /// Enter a destroy cleanup for the given local variable.
1180 void CodeGenFunction::emitAutoVarTypeCleanup(
1181                             const CodeGenFunction::AutoVarEmission &emission,
1182                             QualType::DestructionKind dtorKind) {
1183   assert(dtorKind != QualType::DK_none);
1184 
1185   // Note that for __block variables, we want to destroy the
1186   // original stack object, not the possibly forwarded object.
1187   llvm::Value *addr = emission.getObjectAddress(*this);
1188 
1189   const VarDecl *var = emission.Variable;
1190   QualType type = var->getType();
1191 
1192   CleanupKind cleanupKind = NormalAndEHCleanup;
1193   CodeGenFunction::Destroyer *destroyer = 0;
1194 
1195   switch (dtorKind) {
1196   case QualType::DK_none:
1197     llvm_unreachable("no cleanup for trivially-destructible variable");
1198 
1199   case QualType::DK_cxx_destructor:
1200     // If there's an NRVO flag on the emission, we need a different
1201     // cleanup.
1202     if (emission.NRVOFlag) {
1203       assert(!type->isArrayType());
1204       CXXDestructorDecl *dtor = type->getAsCXXRecordDecl()->getDestructor();
1205       EHStack.pushCleanup<DestroyNRVOVariable>(cleanupKind, addr, dtor,
1206                                                emission.NRVOFlag);
1207       return;
1208     }
1209     break;
1210 
1211   case QualType::DK_objc_strong_lifetime:
1212     // Suppress cleanups for pseudo-strong variables.
1213     if (var->isARCPseudoStrong()) return;
1214 
1215     // Otherwise, consider whether to use an EH cleanup or not.
1216     cleanupKind = getARCCleanupKind();
1217 
1218     // Use the imprecise destroyer by default.
1219     if (!var->hasAttr<ObjCPreciseLifetimeAttr>())
1220       destroyer = CodeGenFunction::destroyARCStrongImprecise;
1221     break;
1222 
1223   case QualType::DK_objc_weak_lifetime:
1224     break;
1225   }
1226 
1227   // If we haven't chosen a more specific destroyer, use the default.
1228   if (!destroyer) destroyer = getDestroyer(dtorKind);
1229 
1230   // Use an EH cleanup in array destructors iff the destructor itself
1231   // is being pushed as an EH cleanup.
1232   bool useEHCleanup = (cleanupKind & EHCleanup);
1233   EHStack.pushCleanup<DestroyObject>(cleanupKind, addr, type, destroyer,
1234                                      useEHCleanup);
1235 }
1236 
1237 void CodeGenFunction::EmitAutoVarCleanups(const AutoVarEmission &emission) {
1238   assert(emission.Variable && "emission was not valid!");
1239 
1240   // If this was emitted as a global constant, we're done.
1241   if (emission.wasEmittedAsGlobal()) return;
1242 
1243   // If we don't have an insertion point, we're done.  Sema prevents
1244   // us from jumping into any of these scopes anyway.
1245   if (!HaveInsertPoint()) return;
1246 
1247   const VarDecl &D = *emission.Variable;
1248 
1249   // Make sure we call @llvm.lifetime.end.  This needs to happen
1250   // *last*, so the cleanup needs to be pushed *first*.
1251   if (emission.useLifetimeMarkers()) {
1252     EHStack.pushCleanup<CallLifetimeEnd>(NormalCleanup,
1253                                          emission.getAllocatedAddress(),
1254                                          emission.getSizeForLifetimeMarkers());
1255   }
1256 
1257   // Check the type for a cleanup.
1258   if (QualType::DestructionKind dtorKind = D.getType().isDestructedType())
1259     emitAutoVarTypeCleanup(emission, dtorKind);
1260 
1261   // In GC mode, honor objc_precise_lifetime.
1262   if (getLangOpts().getGC() != LangOptions::NonGC &&
1263       D.hasAttr<ObjCPreciseLifetimeAttr>()) {
1264     EHStack.pushCleanup<ExtendGCLifetime>(NormalCleanup, &D);
1265   }
1266 
1267   // Handle the cleanup attribute.
1268   if (const CleanupAttr *CA = D.getAttr<CleanupAttr>()) {
1269     const FunctionDecl *FD = CA->getFunctionDecl();
1270 
1271     llvm::Constant *F = CGM.GetAddrOfFunction(FD);
1272     assert(F && "Could not find function!");
1273 
1274     const CGFunctionInfo &Info = CGM.getTypes().arrangeFunctionDeclaration(FD);
1275     EHStack.pushCleanup<CallCleanupFunction>(NormalAndEHCleanup, F, &Info, &D);
1276   }
1277 
1278   // If this is a block variable, call _Block_object_destroy
1279   // (on the unforwarded address).
1280   if (emission.IsByRef)
1281     enterByrefCleanup(emission);
1282 }
1283 
1284 CodeGenFunction::Destroyer *
1285 CodeGenFunction::getDestroyer(QualType::DestructionKind kind) {
1286   switch (kind) {
1287   case QualType::DK_none: llvm_unreachable("no destroyer for trivial dtor");
1288   case QualType::DK_cxx_destructor:
1289     return destroyCXXObject;
1290   case QualType::DK_objc_strong_lifetime:
1291     return destroyARCStrongPrecise;
1292   case QualType::DK_objc_weak_lifetime:
1293     return destroyARCWeak;
1294   }
1295   llvm_unreachable("Unknown DestructionKind");
1296 }
1297 
1298 /// pushEHDestroy - Push the standard destructor for the given type as
1299 /// an EH-only cleanup.
1300 void CodeGenFunction::pushEHDestroy(QualType::DestructionKind dtorKind,
1301                                   llvm::Value *addr, QualType type) {
1302   assert(dtorKind && "cannot push destructor for trivial type");
1303   assert(needsEHCleanup(dtorKind));
1304 
1305   pushDestroy(EHCleanup, addr, type, getDestroyer(dtorKind), true);
1306 }
1307 
1308 /// pushDestroy - Push the standard destructor for the given type as
1309 /// at least a normal cleanup.
1310 void CodeGenFunction::pushDestroy(QualType::DestructionKind dtorKind,
1311                                   llvm::Value *addr, QualType type) {
1312   assert(dtorKind && "cannot push destructor for trivial type");
1313 
1314   CleanupKind cleanupKind = getCleanupKind(dtorKind);
1315   pushDestroy(cleanupKind, addr, type, getDestroyer(dtorKind),
1316               cleanupKind & EHCleanup);
1317 }
1318 
1319 void CodeGenFunction::pushDestroy(CleanupKind cleanupKind, llvm::Value *addr,
1320                                   QualType type, Destroyer *destroyer,
1321                                   bool useEHCleanupForArray) {
1322   pushFullExprCleanup<DestroyObject>(cleanupKind, addr, type,
1323                                      destroyer, useEHCleanupForArray);
1324 }
1325 
1326 /// emitDestroy - Immediately perform the destruction of the given
1327 /// object.
1328 ///
1329 /// \param addr - the address of the object; a type*
1330 /// \param type - the type of the object; if an array type, all
1331 ///   objects are destroyed in reverse order
1332 /// \param destroyer - the function to call to destroy individual
1333 ///   elements
1334 /// \param useEHCleanupForArray - whether an EH cleanup should be
1335 ///   used when destroying array elements, in case one of the
1336 ///   destructions throws an exception
1337 void CodeGenFunction::emitDestroy(llvm::Value *addr, QualType type,
1338                                   Destroyer *destroyer,
1339                                   bool useEHCleanupForArray) {
1340   const ArrayType *arrayType = getContext().getAsArrayType(type);
1341   if (!arrayType)
1342     return destroyer(*this, addr, type);
1343 
1344   llvm::Value *begin = addr;
1345   llvm::Value *length = emitArrayLength(arrayType, type, begin);
1346 
1347   // Normally we have to check whether the array is zero-length.
1348   bool checkZeroLength = true;
1349 
1350   // But if the array length is constant, we can suppress that.
1351   if (llvm::ConstantInt *constLength = dyn_cast<llvm::ConstantInt>(length)) {
1352     // ...and if it's constant zero, we can just skip the entire thing.
1353     if (constLength->isZero()) return;
1354     checkZeroLength = false;
1355   }
1356 
1357   llvm::Value *end = Builder.CreateInBoundsGEP(begin, length);
1358   emitArrayDestroy(begin, end, type, destroyer,
1359                    checkZeroLength, useEHCleanupForArray);
1360 }
1361 
1362 /// emitArrayDestroy - Destroys all the elements of the given array,
1363 /// beginning from last to first.  The array cannot be zero-length.
1364 ///
1365 /// \param begin - a type* denoting the first element of the array
1366 /// \param end - a type* denoting one past the end of the array
1367 /// \param type - the element type of the array
1368 /// \param destroyer - the function to call to destroy elements
1369 /// \param useEHCleanup - whether to push an EH cleanup to destroy
1370 ///   the remaining elements in case the destruction of a single
1371 ///   element throws
1372 void CodeGenFunction::emitArrayDestroy(llvm::Value *begin,
1373                                        llvm::Value *end,
1374                                        QualType type,
1375                                        Destroyer *destroyer,
1376                                        bool checkZeroLength,
1377                                        bool useEHCleanup) {
1378   assert(!type->isArrayType());
1379 
1380   // The basic structure here is a do-while loop, because we don't
1381   // need to check for the zero-element case.
1382   llvm::BasicBlock *bodyBB = createBasicBlock("arraydestroy.body");
1383   llvm::BasicBlock *doneBB = createBasicBlock("arraydestroy.done");
1384 
1385   if (checkZeroLength) {
1386     llvm::Value *isEmpty = Builder.CreateICmpEQ(begin, end,
1387                                                 "arraydestroy.isempty");
1388     Builder.CreateCondBr(isEmpty, doneBB, bodyBB);
1389   }
1390 
1391   // Enter the loop body, making that address the current address.
1392   llvm::BasicBlock *entryBB = Builder.GetInsertBlock();
1393   EmitBlock(bodyBB);
1394   llvm::PHINode *elementPast =
1395     Builder.CreatePHI(begin->getType(), 2, "arraydestroy.elementPast");
1396   elementPast->addIncoming(end, entryBB);
1397 
1398   // Shift the address back by one element.
1399   llvm::Value *negativeOne = llvm::ConstantInt::get(SizeTy, -1, true);
1400   llvm::Value *element = Builder.CreateInBoundsGEP(elementPast, negativeOne,
1401                                                    "arraydestroy.element");
1402 
1403   if (useEHCleanup)
1404     pushRegularPartialArrayCleanup(begin, element, type, destroyer);
1405 
1406   // Perform the actual destruction there.
1407   destroyer(*this, element, type);
1408 
1409   if (useEHCleanup)
1410     PopCleanupBlock();
1411 
1412   // Check whether we've reached the end.
1413   llvm::Value *done = Builder.CreateICmpEQ(element, begin, "arraydestroy.done");
1414   Builder.CreateCondBr(done, doneBB, bodyBB);
1415   elementPast->addIncoming(element, Builder.GetInsertBlock());
1416 
1417   // Done.
1418   EmitBlock(doneBB);
1419 }
1420 
1421 /// Perform partial array destruction as if in an EH cleanup.  Unlike
1422 /// emitArrayDestroy, the element type here may still be an array type.
1423 static void emitPartialArrayDestroy(CodeGenFunction &CGF,
1424                                     llvm::Value *begin, llvm::Value *end,
1425                                     QualType type,
1426                                     CodeGenFunction::Destroyer *destroyer) {
1427   // If the element type is itself an array, drill down.
1428   unsigned arrayDepth = 0;
1429   while (const ArrayType *arrayType = CGF.getContext().getAsArrayType(type)) {
1430     // VLAs don't require a GEP index to walk into.
1431     if (!isa<VariableArrayType>(arrayType))
1432       arrayDepth++;
1433     type = arrayType->getElementType();
1434   }
1435 
1436   if (arrayDepth) {
1437     llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, arrayDepth+1);
1438 
1439     SmallVector<llvm::Value*,4> gepIndices(arrayDepth, zero);
1440     begin = CGF.Builder.CreateInBoundsGEP(begin, gepIndices, "pad.arraybegin");
1441     end = CGF.Builder.CreateInBoundsGEP(end, gepIndices, "pad.arrayend");
1442   }
1443 
1444   // Destroy the array.  We don't ever need an EH cleanup because we
1445   // assume that we're in an EH cleanup ourselves, so a throwing
1446   // destructor causes an immediate terminate.
1447   CGF.emitArrayDestroy(begin, end, type, destroyer,
1448                        /*checkZeroLength*/ true, /*useEHCleanup*/ false);
1449 }
1450 
1451 namespace {
1452   /// RegularPartialArrayDestroy - a cleanup which performs a partial
1453   /// array destroy where the end pointer is regularly determined and
1454   /// does not need to be loaded from a local.
1455   class RegularPartialArrayDestroy : public EHScopeStack::Cleanup {
1456     llvm::Value *ArrayBegin;
1457     llvm::Value *ArrayEnd;
1458     QualType ElementType;
1459     CodeGenFunction::Destroyer *Destroyer;
1460   public:
1461     RegularPartialArrayDestroy(llvm::Value *arrayBegin, llvm::Value *arrayEnd,
1462                                QualType elementType,
1463                                CodeGenFunction::Destroyer *destroyer)
1464       : ArrayBegin(arrayBegin), ArrayEnd(arrayEnd),
1465         ElementType(elementType), Destroyer(destroyer) {}
1466 
1467     void Emit(CodeGenFunction &CGF, Flags flags) {
1468       emitPartialArrayDestroy(CGF, ArrayBegin, ArrayEnd,
1469                               ElementType, Destroyer);
1470     }
1471   };
1472 
1473   /// IrregularPartialArrayDestroy - a cleanup which performs a
1474   /// partial array destroy where the end pointer is irregularly
1475   /// determined and must be loaded from a local.
1476   class IrregularPartialArrayDestroy : public EHScopeStack::Cleanup {
1477     llvm::Value *ArrayBegin;
1478     llvm::Value *ArrayEndPointer;
1479     QualType ElementType;
1480     CodeGenFunction::Destroyer *Destroyer;
1481   public:
1482     IrregularPartialArrayDestroy(llvm::Value *arrayBegin,
1483                                  llvm::Value *arrayEndPointer,
1484                                  QualType elementType,
1485                                  CodeGenFunction::Destroyer *destroyer)
1486       : ArrayBegin(arrayBegin), ArrayEndPointer(arrayEndPointer),
1487         ElementType(elementType), Destroyer(destroyer) {}
1488 
1489     void Emit(CodeGenFunction &CGF, Flags flags) {
1490       llvm::Value *arrayEnd = CGF.Builder.CreateLoad(ArrayEndPointer);
1491       emitPartialArrayDestroy(CGF, ArrayBegin, arrayEnd,
1492                               ElementType, Destroyer);
1493     }
1494   };
1495 }
1496 
1497 /// pushIrregularPartialArrayCleanup - Push an EH cleanup to destroy
1498 /// already-constructed elements of the given array.  The cleanup
1499 /// may be popped with DeactivateCleanupBlock or PopCleanupBlock.
1500 ///
1501 /// \param elementType - the immediate element type of the array;
1502 ///   possibly still an array type
1503 void CodeGenFunction::pushIrregularPartialArrayCleanup(llvm::Value *arrayBegin,
1504                                                  llvm::Value *arrayEndPointer,
1505                                                        QualType elementType,
1506                                                        Destroyer *destroyer) {
1507   pushFullExprCleanup<IrregularPartialArrayDestroy>(EHCleanup,
1508                                                     arrayBegin, arrayEndPointer,
1509                                                     elementType, destroyer);
1510 }
1511 
1512 /// pushRegularPartialArrayCleanup - Push an EH cleanup to destroy
1513 /// already-constructed elements of the given array.  The cleanup
1514 /// may be popped with DeactivateCleanupBlock or PopCleanupBlock.
1515 ///
1516 /// \param elementType - the immediate element type of the array;
1517 ///   possibly still an array type
1518 void CodeGenFunction::pushRegularPartialArrayCleanup(llvm::Value *arrayBegin,
1519                                                      llvm::Value *arrayEnd,
1520                                                      QualType elementType,
1521                                                      Destroyer *destroyer) {
1522   pushFullExprCleanup<RegularPartialArrayDestroy>(EHCleanup,
1523                                                   arrayBegin, arrayEnd,
1524                                                   elementType, destroyer);
1525 }
1526 
1527 /// Lazily declare the @llvm.lifetime.start intrinsic.
1528 llvm::Constant *CodeGenModule::getLLVMLifetimeStartFn() {
1529   if (LifetimeStartFn) return LifetimeStartFn;
1530   LifetimeStartFn = llvm::Intrinsic::getDeclaration(&getModule(),
1531                                             llvm::Intrinsic::lifetime_start);
1532   return LifetimeStartFn;
1533 }
1534 
1535 /// Lazily declare the @llvm.lifetime.end intrinsic.
1536 llvm::Constant *CodeGenModule::getLLVMLifetimeEndFn() {
1537   if (LifetimeEndFn) return LifetimeEndFn;
1538   LifetimeEndFn = llvm::Intrinsic::getDeclaration(&getModule(),
1539                                               llvm::Intrinsic::lifetime_end);
1540   return LifetimeEndFn;
1541 }
1542 
1543 namespace {
1544   /// A cleanup to perform a release of an object at the end of a
1545   /// function.  This is used to balance out the incoming +1 of a
1546   /// ns_consumed argument when we can't reasonably do that just by
1547   /// not doing the initial retain for a __block argument.
1548   struct ConsumeARCParameter : EHScopeStack::Cleanup {
1549     ConsumeARCParameter(llvm::Value *param,
1550                         ARCPreciseLifetime_t precise)
1551       : Param(param), Precise(precise) {}
1552 
1553     llvm::Value *Param;
1554     ARCPreciseLifetime_t Precise;
1555 
1556     void Emit(CodeGenFunction &CGF, Flags flags) {
1557       CGF.EmitARCRelease(Param, Precise);
1558     }
1559   };
1560 }
1561 
1562 /// Emit an alloca (or GlobalValue depending on target)
1563 /// for the specified parameter and set up LocalDeclMap.
1564 void CodeGenFunction::EmitParmDecl(const VarDecl &D, llvm::Value *Arg,
1565                                    unsigned ArgNo) {
1566   // FIXME: Why isn't ImplicitParamDecl a ParmVarDecl?
1567   assert((isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D)) &&
1568          "Invalid argument to EmitParmDecl");
1569 
1570   Arg->setName(D.getName());
1571 
1572   QualType Ty = D.getType();
1573 
1574   // Use better IR generation for certain implicit parameters.
1575   if (isa<ImplicitParamDecl>(D)) {
1576     // The only implicit argument a block has is its literal.
1577     if (BlockInfo) {
1578       LocalDeclMap[&D] = Arg;
1579       llvm::Value *LocalAddr = 0;
1580       if (CGM.getCodeGenOpts().OptimizationLevel == 0) {
1581         // Allocate a stack slot to let debug info survive the RA.
1582         llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty),
1583                                                    D.getName() + ".addr");
1584         Alloc->setAlignment(getContext().getDeclAlign(&D).getQuantity());
1585         LValue lv = MakeAddrLValue(Alloc, Ty, getContext().getDeclAlign(&D));
1586         EmitStoreOfScalar(Arg, lv, /* isInitialization */ true);
1587         LocalAddr = Builder.CreateLoad(Alloc);
1588       }
1589 
1590       if (CGDebugInfo *DI = getDebugInfo()) {
1591         if (CGM.getCodeGenOpts().getDebugInfo()
1592               >= CodeGenOptions::LimitedDebugInfo) {
1593           DI->setLocation(D.getLocation());
1594           DI->EmitDeclareOfBlockLiteralArgVariable(*BlockInfo, Arg, LocalAddr, Builder);
1595         }
1596       }
1597 
1598       return;
1599     }
1600   }
1601 
1602   llvm::Value *DeclPtr;
1603   // If this is an aggregate or variable sized value, reuse the input pointer.
1604   if (!Ty->isConstantSizeType() ||
1605       !CodeGenFunction::hasScalarEvaluationKind(Ty)) {
1606     DeclPtr = Arg;
1607   } else {
1608     // Otherwise, create a temporary to hold the value.
1609     llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty),
1610                                                D.getName() + ".addr");
1611     CharUnits Align = getContext().getDeclAlign(&D);
1612     Alloc->setAlignment(Align.getQuantity());
1613     DeclPtr = Alloc;
1614 
1615     bool doStore = true;
1616 
1617     Qualifiers qs = Ty.getQualifiers();
1618     LValue lv = MakeAddrLValue(DeclPtr, Ty, Align);
1619     if (Qualifiers::ObjCLifetime lt = qs.getObjCLifetime()) {
1620       // We honor __attribute__((ns_consumed)) for types with lifetime.
1621       // For __strong, it's handled by just skipping the initial retain;
1622       // otherwise we have to balance out the initial +1 with an extra
1623       // cleanup to do the release at the end of the function.
1624       bool isConsumed = D.hasAttr<NSConsumedAttr>();
1625 
1626       // 'self' is always formally __strong, but if this is not an
1627       // init method then we don't want to retain it.
1628       if (D.isARCPseudoStrong()) {
1629         const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CurCodeDecl);
1630         assert(&D == method->getSelfDecl());
1631         assert(lt == Qualifiers::OCL_Strong);
1632         assert(qs.hasConst());
1633         assert(method->getMethodFamily() != OMF_init);
1634         (void) method;
1635         lt = Qualifiers::OCL_ExplicitNone;
1636       }
1637 
1638       if (lt == Qualifiers::OCL_Strong) {
1639         if (!isConsumed) {
1640           if (CGM.getCodeGenOpts().OptimizationLevel == 0) {
1641             // use objc_storeStrong(&dest, value) for retaining the
1642             // object. But first, store a null into 'dest' because
1643             // objc_storeStrong attempts to release its old value.
1644             llvm::Value * Null = CGM.EmitNullConstant(D.getType());
1645             EmitStoreOfScalar(Null, lv, /* isInitialization */ true);
1646             EmitARCStoreStrongCall(lv.getAddress(), Arg, true);
1647             doStore = false;
1648           }
1649           else
1650           // Don't use objc_retainBlock for block pointers, because we
1651           // don't want to Block_copy something just because we got it
1652           // as a parameter.
1653             Arg = EmitARCRetainNonBlock(Arg);
1654         }
1655       } else {
1656         // Push the cleanup for a consumed parameter.
1657         if (isConsumed) {
1658           ARCPreciseLifetime_t precise = (D.hasAttr<ObjCPreciseLifetimeAttr>()
1659                                 ? ARCPreciseLifetime : ARCImpreciseLifetime);
1660           EHStack.pushCleanup<ConsumeARCParameter>(getARCCleanupKind(), Arg,
1661                                                    precise);
1662         }
1663 
1664         if (lt == Qualifiers::OCL_Weak) {
1665           EmitARCInitWeak(DeclPtr, Arg);
1666           doStore = false; // The weak init is a store, no need to do two.
1667         }
1668       }
1669 
1670       // Enter the cleanup scope.
1671       EmitAutoVarWithLifetime(*this, D, DeclPtr, lt);
1672     }
1673 
1674     // Store the initial value into the alloca.
1675     if (doStore)
1676       EmitStoreOfScalar(Arg, lv, /* isInitialization */ true);
1677   }
1678 
1679   llvm::Value *&DMEntry = LocalDeclMap[&D];
1680   assert(DMEntry == 0 && "Decl already exists in localdeclmap!");
1681   DMEntry = DeclPtr;
1682 
1683   // Emit debug info for param declaration.
1684   if (CGDebugInfo *DI = getDebugInfo()) {
1685     if (CGM.getCodeGenOpts().getDebugInfo()
1686           >= CodeGenOptions::LimitedDebugInfo) {
1687       DI->EmitDeclareOfArgVariable(&D, DeclPtr, ArgNo, Builder);
1688     }
1689   }
1690 
1691   if (D.hasAttr<AnnotateAttr>())
1692       EmitVarAnnotations(&D, DeclPtr);
1693 }
1694