xref: /llvm-project/clang/lib/CodeGen/CodeGenModule.cpp (revision 882987f30c919b6bac33588b5de2bd2f29e26a28)
1 //===--- CodeGenModule.cpp - Emit LLVM Code from ASTs for a Module --------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This coordinates the per-module state used while generating code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenModule.h"
15 #include "CGCUDARuntime.h"
16 #include "CGCXXABI.h"
17 #include "CGCall.h"
18 #include "CGDebugInfo.h"
19 #include "CGObjCRuntime.h"
20 #include "CGOpenCLRuntime.h"
21 #include "CodeGenFunction.h"
22 #include "CodeGenTBAA.h"
23 #include "TargetInfo.h"
24 #include "clang/AST/ASTContext.h"
25 #include "clang/AST/CharUnits.h"
26 #include "clang/AST/DeclCXX.h"
27 #include "clang/AST/DeclObjC.h"
28 #include "clang/AST/DeclTemplate.h"
29 #include "clang/AST/Mangle.h"
30 #include "clang/AST/RecordLayout.h"
31 #include "clang/AST/RecursiveASTVisitor.h"
32 #include "clang/Basic/Builtins.h"
33 #include "clang/Basic/CharInfo.h"
34 #include "clang/Basic/Diagnostic.h"
35 #include "clang/Basic/Module.h"
36 #include "clang/Basic/SourceManager.h"
37 #include "clang/Basic/TargetInfo.h"
38 #include "clang/Basic/TargetOptions.h"
39 #include "clang/Frontend/CodeGenOptions.h"
40 #include "llvm/ADT/APSInt.h"
41 #include "llvm/ADT/Triple.h"
42 #include "llvm/IR/CallingConv.h"
43 #include "llvm/IR/DataLayout.h"
44 #include "llvm/IR/Intrinsics.h"
45 #include "llvm/IR/LLVMContext.h"
46 #include "llvm/IR/Module.h"
47 #include "llvm/Support/CallSite.h"
48 #include "llvm/Support/ConvertUTF.h"
49 #include "llvm/Support/ErrorHandling.h"
50 #include "llvm/Target/Mangler.h"
51 
52 using namespace clang;
53 using namespace CodeGen;
54 
55 static const char AnnotationSection[] = "llvm.metadata";
56 
57 static CGCXXABI &createCXXABI(CodeGenModule &CGM) {
58   switch (CGM.getContext().getTargetInfo().getCXXABI().getKind()) {
59   case TargetCXXABI::GenericAArch64:
60   case TargetCXXABI::GenericARM:
61   case TargetCXXABI::iOS:
62   case TargetCXXABI::GenericItanium:
63     return *CreateItaniumCXXABI(CGM);
64   case TargetCXXABI::Microsoft:
65     return *CreateMicrosoftCXXABI(CGM);
66   }
67 
68   llvm_unreachable("invalid C++ ABI kind");
69 }
70 
71 
72 CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
73                              const TargetOptions &TO, llvm::Module &M,
74                              const llvm::DataLayout &TD,
75                              DiagnosticsEngine &diags)
76   : Context(C), LangOpts(C.getLangOpts()), CodeGenOpts(CGO), TargetOpts(TO),
77     TheModule(M), TheDataLayout(TD), TheTargetCodeGenInfo(0), Diags(diags),
78     ABI(createCXXABI(*this)),
79     Types(*this),
80     TBAA(0),
81     VTables(*this), ObjCRuntime(0), OpenCLRuntime(0), CUDARuntime(0),
82     DebugInfo(0), ARCData(0), NoObjCARCExceptionsMetadata(0),
83     RRData(0), CFConstantStringClassRef(0),
84     ConstantStringClassRef(0), NSConstantStringType(0),
85     VMContext(M.getContext()),
86     NSConcreteGlobalBlock(0), NSConcreteStackBlock(0),
87     BlockObjectAssign(0), BlockObjectDispose(0),
88     BlockDescriptorType(0), GenericBlockLiteralType(0),
89     SanitizerBlacklist(CGO.SanitizerBlacklistFile),
90     SanOpts(SanitizerBlacklist.isIn(M) ?
91             SanitizerOptions::Disabled : LangOpts.Sanitize) {
92 
93   // Initialize the type cache.
94   llvm::LLVMContext &LLVMContext = M.getContext();
95   VoidTy = llvm::Type::getVoidTy(LLVMContext);
96   Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
97   Int16Ty = llvm::Type::getInt16Ty(LLVMContext);
98   Int32Ty = llvm::Type::getInt32Ty(LLVMContext);
99   Int64Ty = llvm::Type::getInt64Ty(LLVMContext);
100   FloatTy = llvm::Type::getFloatTy(LLVMContext);
101   DoubleTy = llvm::Type::getDoubleTy(LLVMContext);
102   PointerWidthInBits = C.getTargetInfo().getPointerWidth(0);
103   PointerAlignInBytes =
104   C.toCharUnitsFromBits(C.getTargetInfo().getPointerAlign(0)).getQuantity();
105   IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
106   IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
107   Int8PtrTy = Int8Ty->getPointerTo(0);
108   Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
109 
110   RuntimeCC = getTargetCodeGenInfo().getABIInfo().getRuntimeCC();
111 
112   if (LangOpts.ObjC1)
113     createObjCRuntime();
114   if (LangOpts.OpenCL)
115     createOpenCLRuntime();
116   if (LangOpts.CUDA)
117     createCUDARuntime();
118 
119   // Enable TBAA unless it's suppressed. ThreadSanitizer needs TBAA even at O0.
120   if (SanOpts.Thread ||
121       (!CodeGenOpts.RelaxedAliasing && CodeGenOpts.OptimizationLevel > 0))
122     TBAA = new CodeGenTBAA(Context, VMContext, CodeGenOpts, getLangOpts(),
123                            ABI.getMangleContext());
124 
125   // If debug info or coverage generation is enabled, create the CGDebugInfo
126   // object.
127   if (CodeGenOpts.getDebugInfo() != CodeGenOptions::NoDebugInfo ||
128       CodeGenOpts.EmitGcovArcs ||
129       CodeGenOpts.EmitGcovNotes)
130     DebugInfo = new CGDebugInfo(*this);
131 
132   Block.GlobalUniqueCount = 0;
133 
134   if (C.getLangOpts().ObjCAutoRefCount)
135     ARCData = new ARCEntrypoints();
136   RRData = new RREntrypoints();
137 }
138 
139 CodeGenModule::~CodeGenModule() {
140   delete ObjCRuntime;
141   delete OpenCLRuntime;
142   delete CUDARuntime;
143   delete TheTargetCodeGenInfo;
144   delete &ABI;
145   delete TBAA;
146   delete DebugInfo;
147   delete ARCData;
148   delete RRData;
149 }
150 
151 void CodeGenModule::createObjCRuntime() {
152   // This is just isGNUFamily(), but we want to force implementors of
153   // new ABIs to decide how best to do this.
154   switch (LangOpts.ObjCRuntime.getKind()) {
155   case ObjCRuntime::GNUstep:
156   case ObjCRuntime::GCC:
157   case ObjCRuntime::ObjFW:
158     ObjCRuntime = CreateGNUObjCRuntime(*this);
159     return;
160 
161   case ObjCRuntime::FragileMacOSX:
162   case ObjCRuntime::MacOSX:
163   case ObjCRuntime::iOS:
164     ObjCRuntime = CreateMacObjCRuntime(*this);
165     return;
166   }
167   llvm_unreachable("bad runtime kind");
168 }
169 
170 void CodeGenModule::createOpenCLRuntime() {
171   OpenCLRuntime = new CGOpenCLRuntime(*this);
172 }
173 
174 void CodeGenModule::createCUDARuntime() {
175   CUDARuntime = CreateNVCUDARuntime(*this);
176 }
177 
178 void CodeGenModule::Release() {
179   EmitDeferred();
180   EmitCXXGlobalInitFunc();
181   EmitCXXGlobalDtorFunc();
182   if (ObjCRuntime)
183     if (llvm::Function *ObjCInitFunction = ObjCRuntime->ModuleInitFunction())
184       AddGlobalCtor(ObjCInitFunction);
185   EmitCtorList(GlobalCtors, "llvm.global_ctors");
186   EmitCtorList(GlobalDtors, "llvm.global_dtors");
187   EmitGlobalAnnotations();
188   EmitLLVMUsed();
189 
190   if (CodeGenOpts.ModulesAutolink) {
191     EmitModuleLinkOptions();
192   }
193 
194   SimplifyPersonality();
195 
196   if (getCodeGenOpts().EmitDeclMetadata)
197     EmitDeclMetadata();
198 
199   if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
200     EmitCoverageFile();
201 
202   if (DebugInfo)
203     DebugInfo->finalize();
204 }
205 
206 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
207   // Make sure that this type is translated.
208   Types.UpdateCompletedType(TD);
209 }
210 
211 llvm::MDNode *CodeGenModule::getTBAAInfo(QualType QTy) {
212   if (!TBAA)
213     return 0;
214   return TBAA->getTBAAInfo(QTy);
215 }
216 
217 llvm::MDNode *CodeGenModule::getTBAAInfoForVTablePtr() {
218   if (!TBAA)
219     return 0;
220   return TBAA->getTBAAInfoForVTablePtr();
221 }
222 
223 llvm::MDNode *CodeGenModule::getTBAAStructInfo(QualType QTy) {
224   if (!TBAA)
225     return 0;
226   return TBAA->getTBAAStructInfo(QTy);
227 }
228 
229 void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
230                                         llvm::MDNode *TBAAInfo) {
231   Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
232 }
233 
234 bool CodeGenModule::isTargetDarwin() const {
235   return getContext().getTargetInfo().getTriple().isOSDarwin();
236 }
237 
238 void CodeGenModule::Error(SourceLocation loc, StringRef error) {
239   unsigned diagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error, error);
240   getDiags().Report(Context.getFullLoc(loc), diagID);
241 }
242 
243 /// ErrorUnsupported - Print out an error that codegen doesn't support the
244 /// specified stmt yet.
245 void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
246                                      bool OmitOnError) {
247   if (OmitOnError && getDiags().hasErrorOccurred())
248     return;
249   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
250                                                "cannot compile this %0 yet");
251   std::string Msg = Type;
252   getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
253     << Msg << S->getSourceRange();
254 }
255 
256 /// ErrorUnsupported - Print out an error that codegen doesn't support the
257 /// specified decl yet.
258 void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type,
259                                      bool OmitOnError) {
260   if (OmitOnError && getDiags().hasErrorOccurred())
261     return;
262   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
263                                                "cannot compile this %0 yet");
264   std::string Msg = Type;
265   getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
266 }
267 
268 llvm::ConstantInt *CodeGenModule::getSize(CharUnits size) {
269   return llvm::ConstantInt::get(SizeTy, size.getQuantity());
270 }
271 
272 void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
273                                         const NamedDecl *D) const {
274   // Internal definitions always have default visibility.
275   if (GV->hasLocalLinkage()) {
276     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
277     return;
278   }
279 
280   // Set visibility for definitions.
281   LinkageInfo LV = D->getLinkageAndVisibility();
282   if (LV.isVisibilityExplicit() || !GV->hasAvailableExternallyLinkage())
283     GV->setVisibility(GetLLVMVisibility(LV.getVisibility()));
284 }
285 
286 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
287   return llvm::StringSwitch<llvm::GlobalVariable::ThreadLocalMode>(S)
288       .Case("global-dynamic", llvm::GlobalVariable::GeneralDynamicTLSModel)
289       .Case("local-dynamic", llvm::GlobalVariable::LocalDynamicTLSModel)
290       .Case("initial-exec", llvm::GlobalVariable::InitialExecTLSModel)
291       .Case("local-exec", llvm::GlobalVariable::LocalExecTLSModel);
292 }
293 
294 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(
295     CodeGenOptions::TLSModel M) {
296   switch (M) {
297   case CodeGenOptions::GeneralDynamicTLSModel:
298     return llvm::GlobalVariable::GeneralDynamicTLSModel;
299   case CodeGenOptions::LocalDynamicTLSModel:
300     return llvm::GlobalVariable::LocalDynamicTLSModel;
301   case CodeGenOptions::InitialExecTLSModel:
302     return llvm::GlobalVariable::InitialExecTLSModel;
303   case CodeGenOptions::LocalExecTLSModel:
304     return llvm::GlobalVariable::LocalExecTLSModel;
305   }
306   llvm_unreachable("Invalid TLS model!");
307 }
308 
309 void CodeGenModule::setTLSMode(llvm::GlobalVariable *GV,
310                                const VarDecl &D) const {
311   assert(D.isThreadSpecified() && "setting TLS mode on non-TLS var!");
312 
313   llvm::GlobalVariable::ThreadLocalMode TLM;
314   TLM = GetLLVMTLSModel(CodeGenOpts.getDefaultTLSModel());
315 
316   // Override the TLS model if it is explicitly specified.
317   if (D.hasAttr<TLSModelAttr>()) {
318     const TLSModelAttr *Attr = D.getAttr<TLSModelAttr>();
319     TLM = GetLLVMTLSModel(Attr->getModel());
320   }
321 
322   GV->setThreadLocalMode(TLM);
323 }
324 
325 /// Set the symbol visibility of type information (vtable and RTTI)
326 /// associated with the given type.
327 void CodeGenModule::setTypeVisibility(llvm::GlobalValue *GV,
328                                       const CXXRecordDecl *RD,
329                                       TypeVisibilityKind TVK) const {
330   setGlobalVisibility(GV, RD);
331 
332   if (!CodeGenOpts.HiddenWeakVTables)
333     return;
334 
335   // We never want to drop the visibility for RTTI names.
336   if (TVK == TVK_ForRTTIName)
337     return;
338 
339   // We want to drop the visibility to hidden for weak type symbols.
340   // This isn't possible if there might be unresolved references
341   // elsewhere that rely on this symbol being visible.
342 
343   // This should be kept roughly in sync with setThunkVisibility
344   // in CGVTables.cpp.
345 
346   // Preconditions.
347   if (GV->getLinkage() != llvm::GlobalVariable::LinkOnceODRLinkage ||
348       GV->getVisibility() != llvm::GlobalVariable::DefaultVisibility)
349     return;
350 
351   // Don't override an explicit visibility attribute.
352   if (RD->getExplicitVisibility(NamedDecl::VisibilityForType))
353     return;
354 
355   switch (RD->getTemplateSpecializationKind()) {
356   // We have to disable the optimization if this is an EI definition
357   // because there might be EI declarations in other shared objects.
358   case TSK_ExplicitInstantiationDefinition:
359   case TSK_ExplicitInstantiationDeclaration:
360     return;
361 
362   // Every use of a non-template class's type information has to emit it.
363   case TSK_Undeclared:
364     break;
365 
366   // In theory, implicit instantiations can ignore the possibility of
367   // an explicit instantiation declaration because there necessarily
368   // must be an EI definition somewhere with default visibility.  In
369   // practice, it's possible to have an explicit instantiation for
370   // an arbitrary template class, and linkers aren't necessarily able
371   // to deal with mixed-visibility symbols.
372   case TSK_ExplicitSpecialization:
373   case TSK_ImplicitInstantiation:
374     return;
375   }
376 
377   // If there's a key function, there may be translation units
378   // that don't have the key function's definition.  But ignore
379   // this if we're emitting RTTI under -fno-rtti.
380   if (!(TVK != TVK_ForRTTI) || LangOpts.RTTI) {
381     // FIXME: what should we do if we "lose" the key function during
382     // the emission of the file?
383     if (Context.getCurrentKeyFunction(RD))
384       return;
385   }
386 
387   // Otherwise, drop the visibility to hidden.
388   GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
389   GV->setUnnamedAddr(true);
390 }
391 
392 StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
393   const NamedDecl *ND = cast<NamedDecl>(GD.getDecl());
394 
395   StringRef &Str = MangledDeclNames[GD.getCanonicalDecl()];
396   if (!Str.empty())
397     return Str;
398 
399   if (!getCXXABI().getMangleContext().shouldMangleDeclName(ND)) {
400     IdentifierInfo *II = ND->getIdentifier();
401     assert(II && "Attempt to mangle unnamed decl.");
402 
403     Str = II->getName();
404     return Str;
405   }
406 
407   SmallString<256> Buffer;
408   llvm::raw_svector_ostream Out(Buffer);
409   if (const CXXConstructorDecl *D = dyn_cast<CXXConstructorDecl>(ND))
410     getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out);
411   else if (const CXXDestructorDecl *D = dyn_cast<CXXDestructorDecl>(ND))
412     getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out);
413   else if (const BlockDecl *BD = dyn_cast<BlockDecl>(ND))
414     getCXXABI().getMangleContext().mangleBlock(BD, Out,
415       dyn_cast_or_null<VarDecl>(initializedGlobalDecl.getDecl()));
416   else
417     getCXXABI().getMangleContext().mangleName(ND, Out);
418 
419   // Allocate space for the mangled name.
420   Out.flush();
421   size_t Length = Buffer.size();
422   char *Name = MangledNamesAllocator.Allocate<char>(Length);
423   std::copy(Buffer.begin(), Buffer.end(), Name);
424 
425   Str = StringRef(Name, Length);
426 
427   return Str;
428 }
429 
430 void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer,
431                                         const BlockDecl *BD) {
432   MangleContext &MangleCtx = getCXXABI().getMangleContext();
433   const Decl *D = GD.getDecl();
434   llvm::raw_svector_ostream Out(Buffer.getBuffer());
435   if (D == 0)
436     MangleCtx.mangleGlobalBlock(BD,
437       dyn_cast_or_null<VarDecl>(initializedGlobalDecl.getDecl()), Out);
438   else if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
439     MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Out);
440   else if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D))
441     MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out);
442   else
443     MangleCtx.mangleBlock(cast<DeclContext>(D), BD, Out);
444 }
445 
446 llvm::GlobalValue *CodeGenModule::GetGlobalValue(StringRef Name) {
447   return getModule().getNamedValue(Name);
448 }
449 
450 /// AddGlobalCtor - Add a function to the list that will be called before
451 /// main() runs.
452 void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
453   // FIXME: Type coercion of void()* types.
454   GlobalCtors.push_back(std::make_pair(Ctor, Priority));
455 }
456 
457 /// AddGlobalDtor - Add a function to the list that will be called
458 /// when the module is unloaded.
459 void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
460   // FIXME: Type coercion of void()* types.
461   GlobalDtors.push_back(std::make_pair(Dtor, Priority));
462 }
463 
464 void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
465   // Ctor function type is void()*.
466   llvm::FunctionType* CtorFTy = llvm::FunctionType::get(VoidTy, false);
467   llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
468 
469   // Get the type of a ctor entry, { i32, void ()* }.
470   llvm::StructType *CtorStructTy =
471     llvm::StructType::get(Int32Ty, llvm::PointerType::getUnqual(CtorFTy), NULL);
472 
473   // Construct the constructor and destructor arrays.
474   SmallVector<llvm::Constant*, 8> Ctors;
475   for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
476     llvm::Constant *S[] = {
477       llvm::ConstantInt::get(Int32Ty, I->second, false),
478       llvm::ConstantExpr::getBitCast(I->first, CtorPFTy)
479     };
480     Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
481   }
482 
483   if (!Ctors.empty()) {
484     llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
485     new llvm::GlobalVariable(TheModule, AT, false,
486                              llvm::GlobalValue::AppendingLinkage,
487                              llvm::ConstantArray::get(AT, Ctors),
488                              GlobalName);
489   }
490 }
491 
492 llvm::GlobalValue::LinkageTypes
493 CodeGenModule::getFunctionLinkage(const FunctionDecl *D) {
494   GVALinkage Linkage = getContext().GetGVALinkageForFunction(D);
495 
496   if (Linkage == GVA_Internal)
497     return llvm::Function::InternalLinkage;
498 
499   if (D->hasAttr<DLLExportAttr>())
500     return llvm::Function::DLLExportLinkage;
501 
502   if (D->hasAttr<WeakAttr>())
503     return llvm::Function::WeakAnyLinkage;
504 
505   // In C99 mode, 'inline' functions are guaranteed to have a strong
506   // definition somewhere else, so we can use available_externally linkage.
507   if (Linkage == GVA_C99Inline)
508     return llvm::Function::AvailableExternallyLinkage;
509 
510   // Note that Apple's kernel linker doesn't support symbol
511   // coalescing, so we need to avoid linkonce and weak linkages there.
512   // Normally, this means we just map to internal, but for explicit
513   // instantiations we'll map to external.
514 
515   // In C++, the compiler has to emit a definition in every translation unit
516   // that references the function.  We should use linkonce_odr because
517   // a) if all references in this translation unit are optimized away, we
518   // don't need to codegen it.  b) if the function persists, it needs to be
519   // merged with other definitions. c) C++ has the ODR, so we know the
520   // definition is dependable.
521   if (Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation)
522     return !Context.getLangOpts().AppleKext
523              ? llvm::Function::LinkOnceODRLinkage
524              : llvm::Function::InternalLinkage;
525 
526   // An explicit instantiation of a template has weak linkage, since
527   // explicit instantiations can occur in multiple translation units
528   // and must all be equivalent. However, we are not allowed to
529   // throw away these explicit instantiations.
530   if (Linkage == GVA_ExplicitTemplateInstantiation)
531     return !Context.getLangOpts().AppleKext
532              ? llvm::Function::WeakODRLinkage
533              : llvm::Function::ExternalLinkage;
534 
535   // Otherwise, we have strong external linkage.
536   assert(Linkage == GVA_StrongExternal);
537   return llvm::Function::ExternalLinkage;
538 }
539 
540 
541 /// SetFunctionDefinitionAttributes - Set attributes for a global.
542 ///
543 /// FIXME: This is currently only done for aliases and functions, but not for
544 /// variables (these details are set in EmitGlobalVarDefinition for variables).
545 void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
546                                                     llvm::GlobalValue *GV) {
547   SetCommonAttributes(D, GV);
548 }
549 
550 void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
551                                               const CGFunctionInfo &Info,
552                                               llvm::Function *F) {
553   unsigned CallingConv;
554   AttributeListType AttributeList;
555   ConstructAttributeList(Info, D, AttributeList, CallingConv, false);
556   F->setAttributes(llvm::AttributeSet::get(getLLVMContext(), AttributeList));
557   F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
558 }
559 
560 /// Determines whether the language options require us to model
561 /// unwind exceptions.  We treat -fexceptions as mandating this
562 /// except under the fragile ObjC ABI with only ObjC exceptions
563 /// enabled.  This means, for example, that C with -fexceptions
564 /// enables this.
565 static bool hasUnwindExceptions(const LangOptions &LangOpts) {
566   // If exceptions are completely disabled, obviously this is false.
567   if (!LangOpts.Exceptions) return false;
568 
569   // If C++ exceptions are enabled, this is true.
570   if (LangOpts.CXXExceptions) return true;
571 
572   // If ObjC exceptions are enabled, this depends on the ABI.
573   if (LangOpts.ObjCExceptions) {
574     return LangOpts.ObjCRuntime.hasUnwindExceptions();
575   }
576 
577   return true;
578 }
579 
580 void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
581                                                            llvm::Function *F) {
582   if (CodeGenOpts.UnwindTables)
583     F->setHasUWTable();
584 
585   if (!hasUnwindExceptions(LangOpts))
586     F->addFnAttr(llvm::Attribute::NoUnwind);
587 
588   if (D->hasAttr<NakedAttr>()) {
589     // Naked implies noinline: we should not be inlining such functions.
590     F->addFnAttr(llvm::Attribute::Naked);
591     F->addFnAttr(llvm::Attribute::NoInline);
592   }
593 
594   if (D->hasAttr<NoInlineAttr>())
595     F->addFnAttr(llvm::Attribute::NoInline);
596 
597   // (noinline wins over always_inline, and we can't specify both in IR)
598   if ((D->hasAttr<AlwaysInlineAttr>() || D->hasAttr<ForceInlineAttr>()) &&
599       !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,
600                                        llvm::Attribute::NoInline))
601     F->addFnAttr(llvm::Attribute::AlwaysInline);
602 
603   // FIXME: Communicate hot and cold attributes to LLVM more directly.
604   if (D->hasAttr<ColdAttr>())
605     F->addFnAttr(llvm::Attribute::OptimizeForSize);
606 
607   if (D->hasAttr<MinSizeAttr>())
608     F->addFnAttr(llvm::Attribute::MinSize);
609 
610   if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
611     F->setUnnamedAddr(true);
612 
613   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D))
614     if (MD->isVirtual())
615       F->setUnnamedAddr(true);
616 
617   if (LangOpts.getStackProtector() == LangOptions::SSPOn)
618     F->addFnAttr(llvm::Attribute::StackProtect);
619   else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
620     F->addFnAttr(llvm::Attribute::StackProtectReq);
621 
622   // When AddressSanitizer is enabled, set SanitizeAddress attribute
623   // unless __attribute__((no_sanitize_address)) is used.
624   if (SanOpts.Address && !D->hasAttr<NoSanitizeAddressAttr>())
625     F->addFnAttr(llvm::Attribute::SanitizeAddress);
626   // Same for ThreadSanitizer and __attribute__((no_sanitize_thread))
627   if (SanOpts.Thread && !D->hasAttr<NoSanitizeThreadAttr>())
628     F->addFnAttr(llvm::Attribute::SanitizeThread);
629   // Same for MemorySanitizer and __attribute__((no_sanitize_memory))
630   if (SanOpts.Memory && !D->hasAttr<NoSanitizeMemoryAttr>())
631     F->addFnAttr(llvm::Attribute::SanitizeMemory);
632 
633   unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
634   if (alignment)
635     F->setAlignment(alignment);
636 
637   // C++ ABI requires 2-byte alignment for member functions.
638   if (F->getAlignment() < 2 && isa<CXXMethodDecl>(D))
639     F->setAlignment(2);
640 }
641 
642 void CodeGenModule::SetCommonAttributes(const Decl *D,
643                                         llvm::GlobalValue *GV) {
644   if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
645     setGlobalVisibility(GV, ND);
646   else
647     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
648 
649   if (D->hasAttr<UsedAttr>())
650     AddUsedGlobal(GV);
651 
652   if (const SectionAttr *SA = D->getAttr<SectionAttr>())
653     GV->setSection(SA->getName());
654 
655   getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this);
656 }
657 
658 void CodeGenModule::SetInternalFunctionAttributes(const Decl *D,
659                                                   llvm::Function *F,
660                                                   const CGFunctionInfo &FI) {
661   SetLLVMFunctionAttributes(D, FI, F);
662   SetLLVMFunctionAttributesForDefinition(D, F);
663 
664   F->setLinkage(llvm::Function::InternalLinkage);
665 
666   SetCommonAttributes(D, F);
667 }
668 
669 void CodeGenModule::SetFunctionAttributes(GlobalDecl GD,
670                                           llvm::Function *F,
671                                           bool IsIncompleteFunction) {
672   if (unsigned IID = F->getIntrinsicID()) {
673     // If this is an intrinsic function, set the function's attributes
674     // to the intrinsic's attributes.
675     F->setAttributes(llvm::Intrinsic::getAttributes(getLLVMContext(),
676                                                     (llvm::Intrinsic::ID)IID));
677     return;
678   }
679 
680   const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
681 
682   if (!IsIncompleteFunction)
683     SetLLVMFunctionAttributes(FD, getTypes().arrangeGlobalDeclaration(GD), F);
684 
685   // Only a few attributes are set on declarations; these may later be
686   // overridden by a definition.
687 
688   if (FD->hasAttr<DLLImportAttr>()) {
689     F->setLinkage(llvm::Function::DLLImportLinkage);
690   } else if (FD->hasAttr<WeakAttr>() ||
691              FD->isWeakImported()) {
692     // "extern_weak" is overloaded in LLVM; we probably should have
693     // separate linkage types for this.
694     F->setLinkage(llvm::Function::ExternalWeakLinkage);
695   } else {
696     F->setLinkage(llvm::Function::ExternalLinkage);
697 
698     LinkageInfo LV = FD->getLinkageAndVisibility();
699     if (LV.getLinkage() == ExternalLinkage && LV.isVisibilityExplicit()) {
700       F->setVisibility(GetLLVMVisibility(LV.getVisibility()));
701     }
702   }
703 
704   if (const SectionAttr *SA = FD->getAttr<SectionAttr>())
705     F->setSection(SA->getName());
706 }
707 
708 void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {
709   assert(!GV->isDeclaration() &&
710          "Only globals with definition can force usage.");
711   LLVMUsed.push_back(GV);
712 }
713 
714 void CodeGenModule::EmitLLVMUsed() {
715   // Don't create llvm.used if there is no need.
716   if (LLVMUsed.empty())
717     return;
718 
719   // Convert LLVMUsed to what ConstantArray needs.
720   SmallVector<llvm::Constant*, 8> UsedArray;
721   UsedArray.resize(LLVMUsed.size());
722   for (unsigned i = 0, e = LLVMUsed.size(); i != e; ++i) {
723     UsedArray[i] =
724      llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*LLVMUsed[i]),
725                                     Int8PtrTy);
726   }
727 
728   if (UsedArray.empty())
729     return;
730   llvm::ArrayType *ATy = llvm::ArrayType::get(Int8PtrTy, UsedArray.size());
731 
732   llvm::GlobalVariable *GV =
733     new llvm::GlobalVariable(getModule(), ATy, false,
734                              llvm::GlobalValue::AppendingLinkage,
735                              llvm::ConstantArray::get(ATy, UsedArray),
736                              "llvm.used");
737 
738   GV->setSection("llvm.metadata");
739 }
740 
741 /// \brief Add link options implied by the given module, including modules
742 /// it depends on, using a postorder walk.
743 static void addLinkOptionsPostorder(llvm::LLVMContext &Context,
744                                     Module *Mod,
745                                     SmallVectorImpl<llvm::Value *> &Metadata,
746                                     llvm::SmallPtrSet<Module *, 16> &Visited) {
747   // Import this module's parent.
748   if (Mod->Parent && Visited.insert(Mod->Parent)) {
749     addLinkOptionsPostorder(Context, Mod->Parent, Metadata, Visited);
750   }
751 
752   // Import this module's dependencies.
753   for (unsigned I = Mod->Imports.size(); I > 0; --I) {
754     if (Visited.insert(Mod->Imports[I-1]))
755       addLinkOptionsPostorder(Context, Mod->Imports[I-1], Metadata, Visited);
756   }
757 
758   // Add linker options to link against the libraries/frameworks
759   // described by this module.
760   for (unsigned I = Mod->LinkLibraries.size(); I > 0; --I) {
761     // FIXME: -lfoo is Unix-centric and -framework Foo is Darwin-centric.
762     // We need to know more about the linker to know how to encode these
763     // options propertly.
764 
765     // Link against a framework.
766     if (Mod->LinkLibraries[I-1].IsFramework) {
767       llvm::Value *Args[2] = {
768         llvm::MDString::get(Context, "-framework"),
769         llvm::MDString::get(Context, Mod->LinkLibraries[I-1].Library)
770       };
771 
772       Metadata.push_back(llvm::MDNode::get(Context, Args));
773       continue;
774     }
775 
776     // Link against a library.
777     llvm::Value *OptString
778     = llvm::MDString::get(Context,
779                           "-l" + Mod->LinkLibraries[I-1].Library);
780     Metadata.push_back(llvm::MDNode::get(Context, OptString));
781   }
782 }
783 
784 void CodeGenModule::EmitModuleLinkOptions() {
785   // Collect the set of all of the modules we want to visit to emit link
786   // options, which is essentially the imported modules and all of their
787   // non-explicit child modules.
788   llvm::SetVector<clang::Module *> LinkModules;
789   llvm::SmallPtrSet<clang::Module *, 16> Visited;
790   SmallVector<clang::Module *, 16> Stack;
791 
792   // Seed the stack with imported modules.
793   for (llvm::SetVector<clang::Module *>::iterator M = ImportedModules.begin(),
794                                                MEnd = ImportedModules.end();
795        M != MEnd; ++M) {
796     if (Visited.insert(*M))
797       Stack.push_back(*M);
798   }
799 
800   // Find all of the modules to import, making a little effort to prune
801   // non-leaf modules.
802   while (!Stack.empty()) {
803     clang::Module *Mod = Stack.back();
804     Stack.pop_back();
805 
806     bool AnyChildren = false;
807 
808     // Visit the submodules of this module.
809     for (clang::Module::submodule_iterator Sub = Mod->submodule_begin(),
810                                         SubEnd = Mod->submodule_end();
811          Sub != SubEnd; ++Sub) {
812       // Skip explicit children; they need to be explicitly imported to be
813       // linked against.
814       if ((*Sub)->IsExplicit)
815         continue;
816 
817       if (Visited.insert(*Sub)) {
818         Stack.push_back(*Sub);
819         AnyChildren = true;
820       }
821     }
822 
823     // We didn't find any children, so add this module to the list of
824     // modules to link against.
825     if (!AnyChildren) {
826       LinkModules.insert(Mod);
827     }
828   }
829 
830   // Add link options for all of the imported modules in reverse topological
831   // order.
832   SmallVector<llvm::Value *, 16> MetadataArgs;
833   Visited.clear();
834   for (llvm::SetVector<clang::Module *>::iterator M = LinkModules.begin(),
835                                                MEnd = LinkModules.end();
836        M != MEnd; ++M) {
837     if (Visited.insert(*M))
838       addLinkOptionsPostorder(getLLVMContext(), *M, MetadataArgs, Visited);
839   }
840   std::reverse(MetadataArgs.begin(), MetadataArgs.end());
841 
842   // Add the linker options metadata flag.
843   getModule().addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
844                             llvm::MDNode::get(getLLVMContext(), MetadataArgs));
845 }
846 
847 void CodeGenModule::EmitDeferred() {
848   // Emit code for any potentially referenced deferred decls.  Since a
849   // previously unused static decl may become used during the generation of code
850   // for a static function, iterate until no changes are made.
851 
852   while (true) {
853     if (!DeferredVTables.empty()) {
854       EmitDeferredVTables();
855 
856       // Emitting a v-table doesn't directly cause more v-tables to
857       // become deferred, although it can cause functions to be
858       // emitted that then need those v-tables.
859       assert(DeferredVTables.empty());
860     }
861 
862     // Stop if we're out of both deferred v-tables and deferred declarations.
863     if (DeferredDeclsToEmit.empty()) break;
864 
865     GlobalDecl D = DeferredDeclsToEmit.back();
866     DeferredDeclsToEmit.pop_back();
867 
868     // Check to see if we've already emitted this.  This is necessary
869     // for a couple of reasons: first, decls can end up in the
870     // deferred-decls queue multiple times, and second, decls can end
871     // up with definitions in unusual ways (e.g. by an extern inline
872     // function acquiring a strong function redefinition).  Just
873     // ignore these cases.
874     //
875     // TODO: That said, looking this up multiple times is very wasteful.
876     StringRef Name = getMangledName(D);
877     llvm::GlobalValue *CGRef = GetGlobalValue(Name);
878     assert(CGRef && "Deferred decl wasn't referenced?");
879 
880     if (!CGRef->isDeclaration())
881       continue;
882 
883     // GlobalAlias::isDeclaration() defers to the aliasee, but for our
884     // purposes an alias counts as a definition.
885     if (isa<llvm::GlobalAlias>(CGRef))
886       continue;
887 
888     // Otherwise, emit the definition and move on to the next one.
889     EmitGlobalDefinition(D);
890   }
891 }
892 
893 void CodeGenModule::EmitGlobalAnnotations() {
894   if (Annotations.empty())
895     return;
896 
897   // Create a new global variable for the ConstantStruct in the Module.
898   llvm::Constant *Array = llvm::ConstantArray::get(llvm::ArrayType::get(
899     Annotations[0]->getType(), Annotations.size()), Annotations);
900   llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(),
901     Array->getType(), false, llvm::GlobalValue::AppendingLinkage, Array,
902     "llvm.global.annotations");
903   gv->setSection(AnnotationSection);
904 }
905 
906 llvm::Constant *CodeGenModule::EmitAnnotationString(StringRef Str) {
907   llvm::StringMap<llvm::Constant*>::iterator i = AnnotationStrings.find(Str);
908   if (i != AnnotationStrings.end())
909     return i->second;
910 
911   // Not found yet, create a new global.
912   llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str);
913   llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(), s->getType(),
914     true, llvm::GlobalValue::PrivateLinkage, s, ".str");
915   gv->setSection(AnnotationSection);
916   gv->setUnnamedAddr(true);
917   AnnotationStrings[Str] = gv;
918   return gv;
919 }
920 
921 llvm::Constant *CodeGenModule::EmitAnnotationUnit(SourceLocation Loc) {
922   SourceManager &SM = getContext().getSourceManager();
923   PresumedLoc PLoc = SM.getPresumedLoc(Loc);
924   if (PLoc.isValid())
925     return EmitAnnotationString(PLoc.getFilename());
926   return EmitAnnotationString(SM.getBufferName(Loc));
927 }
928 
929 llvm::Constant *CodeGenModule::EmitAnnotationLineNo(SourceLocation L) {
930   SourceManager &SM = getContext().getSourceManager();
931   PresumedLoc PLoc = SM.getPresumedLoc(L);
932   unsigned LineNo = PLoc.isValid() ? PLoc.getLine() :
933     SM.getExpansionLineNumber(L);
934   return llvm::ConstantInt::get(Int32Ty, LineNo);
935 }
936 
937 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
938                                                 const AnnotateAttr *AA,
939                                                 SourceLocation L) {
940   // Get the globals for file name, annotation, and the line number.
941   llvm::Constant *AnnoGV = EmitAnnotationString(AA->getAnnotation()),
942                  *UnitGV = EmitAnnotationUnit(L),
943                  *LineNoCst = EmitAnnotationLineNo(L);
944 
945   // Create the ConstantStruct for the global annotation.
946   llvm::Constant *Fields[4] = {
947     llvm::ConstantExpr::getBitCast(GV, Int8PtrTy),
948     llvm::ConstantExpr::getBitCast(AnnoGV, Int8PtrTy),
949     llvm::ConstantExpr::getBitCast(UnitGV, Int8PtrTy),
950     LineNoCst
951   };
952   return llvm::ConstantStruct::getAnon(Fields);
953 }
954 
955 void CodeGenModule::AddGlobalAnnotations(const ValueDecl *D,
956                                          llvm::GlobalValue *GV) {
957   assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
958   // Get the struct elements for these annotations.
959   for (specific_attr_iterator<AnnotateAttr>
960        ai = D->specific_attr_begin<AnnotateAttr>(),
961        ae = D->specific_attr_end<AnnotateAttr>(); ai != ae; ++ai)
962     Annotations.push_back(EmitAnnotateAttr(GV, *ai, D->getLocation()));
963 }
964 
965 bool CodeGenModule::MayDeferGeneration(const ValueDecl *Global) {
966   // Never defer when EmitAllDecls is specified.
967   if (LangOpts.EmitAllDecls)
968     return false;
969 
970   return !getContext().DeclMustBeEmitted(Global);
971 }
972 
973 llvm::Constant *CodeGenModule::GetAddrOfUuidDescriptor(
974     const CXXUuidofExpr* E) {
975   // Sema has verified that IIDSource has a __declspec(uuid()), and that its
976   // well-formed.
977   StringRef Uuid;
978   if (E->isTypeOperand())
979     Uuid = CXXUuidofExpr::GetUuidAttrOfType(E->getTypeOperand())->getGuid();
980   else {
981     // Special case: __uuidof(0) means an all-zero GUID.
982     Expr *Op = E->getExprOperand();
983     if (!Op->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
984       Uuid = CXXUuidofExpr::GetUuidAttrOfType(Op->getType())->getGuid();
985     else
986       Uuid = "00000000-0000-0000-0000-000000000000";
987   }
988   std::string Name = "__uuid_" + Uuid.str();
989 
990   // Look for an existing global.
991   if (llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name))
992     return GV;
993 
994   llvm::Constant *Init = EmitUuidofInitializer(Uuid, E->getType());
995   assert(Init && "failed to initialize as constant");
996 
997   // GUIDs are assumed to be 16 bytes, spread over 4-2-2-8 bytes. However, the
998   // first field is declared as "long", which for many targets is 8 bytes.
999   // Those architectures are not supported. (With the MS abi, long is always 4
1000   // bytes.)
1001   llvm::Type *GuidType = getTypes().ConvertType(E->getType());
1002   if (Init->getType() != GuidType) {
1003     DiagnosticsEngine &Diags = getDiags();
1004     unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
1005         "__uuidof codegen is not supported on this architecture");
1006     Diags.Report(E->getExprLoc(), DiagID) << E->getSourceRange();
1007     Init = llvm::UndefValue::get(GuidType);
1008   }
1009 
1010   llvm::GlobalVariable *GV = new llvm::GlobalVariable(getModule(), GuidType,
1011       /*isConstant=*/true, llvm::GlobalValue::PrivateLinkage, Init, Name);
1012   GV->setUnnamedAddr(true);
1013   return GV;
1014 }
1015 
1016 llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
1017   const AliasAttr *AA = VD->getAttr<AliasAttr>();
1018   assert(AA && "No alias?");
1019 
1020   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
1021 
1022   // See if there is already something with the target's name in the module.
1023   llvm::GlobalValue *Entry = GetGlobalValue(AA->getAliasee());
1024   if (Entry) {
1025     unsigned AS = getContext().getTargetAddressSpace(VD->getType());
1026     return llvm::ConstantExpr::getBitCast(Entry, DeclTy->getPointerTo(AS));
1027   }
1028 
1029   llvm::Constant *Aliasee;
1030   if (isa<llvm::FunctionType>(DeclTy))
1031     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy,
1032                                       GlobalDecl(cast<FunctionDecl>(VD)),
1033                                       /*ForVTable=*/false);
1034   else
1035     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
1036                                     llvm::PointerType::getUnqual(DeclTy), 0);
1037 
1038   llvm::GlobalValue* F = cast<llvm::GlobalValue>(Aliasee);
1039   F->setLinkage(llvm::Function::ExternalWeakLinkage);
1040   WeakRefReferences.insert(F);
1041 
1042   return Aliasee;
1043 }
1044 
1045 void CodeGenModule::EmitGlobal(GlobalDecl GD) {
1046   const ValueDecl *Global = cast<ValueDecl>(GD.getDecl());
1047 
1048   // Weak references don't produce any output by themselves.
1049   if (Global->hasAttr<WeakRefAttr>())
1050     return;
1051 
1052   // If this is an alias definition (which otherwise looks like a declaration)
1053   // emit it now.
1054   if (Global->hasAttr<AliasAttr>())
1055     return EmitAliasDefinition(GD);
1056 
1057   // If this is CUDA, be selective about which declarations we emit.
1058   if (LangOpts.CUDA) {
1059     if (CodeGenOpts.CUDAIsDevice) {
1060       if (!Global->hasAttr<CUDADeviceAttr>() &&
1061           !Global->hasAttr<CUDAGlobalAttr>() &&
1062           !Global->hasAttr<CUDAConstantAttr>() &&
1063           !Global->hasAttr<CUDASharedAttr>())
1064         return;
1065     } else {
1066       if (!Global->hasAttr<CUDAHostAttr>() && (
1067             Global->hasAttr<CUDADeviceAttr>() ||
1068             Global->hasAttr<CUDAConstantAttr>() ||
1069             Global->hasAttr<CUDASharedAttr>()))
1070         return;
1071     }
1072   }
1073 
1074   // Ignore declarations, they will be emitted on their first use.
1075   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
1076     // Forward declarations are emitted lazily on first use.
1077     if (!FD->doesThisDeclarationHaveABody()) {
1078       if (!FD->doesDeclarationForceExternallyVisibleDefinition())
1079         return;
1080 
1081       const FunctionDecl *InlineDefinition = 0;
1082       FD->getBody(InlineDefinition);
1083 
1084       StringRef MangledName = getMangledName(GD);
1085       DeferredDecls.erase(MangledName);
1086       EmitGlobalDefinition(InlineDefinition);
1087       return;
1088     }
1089   } else {
1090     const VarDecl *VD = cast<VarDecl>(Global);
1091     assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
1092 
1093     if (VD->isThisDeclarationADefinition() != VarDecl::Definition)
1094       return;
1095   }
1096 
1097   // Defer code generation when possible if this is a static definition, inline
1098   // function etc.  These we only want to emit if they are used.
1099   if (!MayDeferGeneration(Global)) {
1100     // Emit the definition if it can't be deferred.
1101     EmitGlobalDefinition(GD);
1102     return;
1103   }
1104 
1105   // If we're deferring emission of a C++ variable with an
1106   // initializer, remember the order in which it appeared in the file.
1107   if (getLangOpts().CPlusPlus && isa<VarDecl>(Global) &&
1108       cast<VarDecl>(Global)->hasInit()) {
1109     DelayedCXXInitPosition[Global] = CXXGlobalInits.size();
1110     CXXGlobalInits.push_back(0);
1111   }
1112 
1113   // If the value has already been used, add it directly to the
1114   // DeferredDeclsToEmit list.
1115   StringRef MangledName = getMangledName(GD);
1116   if (GetGlobalValue(MangledName))
1117     DeferredDeclsToEmit.push_back(GD);
1118   else {
1119     // Otherwise, remember that we saw a deferred decl with this name.  The
1120     // first use of the mangled name will cause it to move into
1121     // DeferredDeclsToEmit.
1122     DeferredDecls[MangledName] = GD;
1123   }
1124 }
1125 
1126 namespace {
1127   struct FunctionIsDirectlyRecursive :
1128     public RecursiveASTVisitor<FunctionIsDirectlyRecursive> {
1129     const StringRef Name;
1130     const Builtin::Context &BI;
1131     bool Result;
1132     FunctionIsDirectlyRecursive(StringRef N, const Builtin::Context &C) :
1133       Name(N), BI(C), Result(false) {
1134     }
1135     typedef RecursiveASTVisitor<FunctionIsDirectlyRecursive> Base;
1136 
1137     bool TraverseCallExpr(CallExpr *E) {
1138       const FunctionDecl *FD = E->getDirectCallee();
1139       if (!FD)
1140         return true;
1141       AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
1142       if (Attr && Name == Attr->getLabel()) {
1143         Result = true;
1144         return false;
1145       }
1146       unsigned BuiltinID = FD->getBuiltinID();
1147       if (!BuiltinID)
1148         return true;
1149       StringRef BuiltinName = BI.GetName(BuiltinID);
1150       if (BuiltinName.startswith("__builtin_") &&
1151           Name == BuiltinName.slice(strlen("__builtin_"), StringRef::npos)) {
1152         Result = true;
1153         return false;
1154       }
1155       return true;
1156     }
1157   };
1158 }
1159 
1160 // isTriviallyRecursive - Check if this function calls another
1161 // decl that, because of the asm attribute or the other decl being a builtin,
1162 // ends up pointing to itself.
1163 bool
1164 CodeGenModule::isTriviallyRecursive(const FunctionDecl *FD) {
1165   StringRef Name;
1166   if (getCXXABI().getMangleContext().shouldMangleDeclName(FD)) {
1167     // asm labels are a special kind of mangling we have to support.
1168     AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
1169     if (!Attr)
1170       return false;
1171     Name = Attr->getLabel();
1172   } else {
1173     Name = FD->getName();
1174   }
1175 
1176   FunctionIsDirectlyRecursive Walker(Name, Context.BuiltinInfo);
1177   Walker.TraverseFunctionDecl(const_cast<FunctionDecl*>(FD));
1178   return Walker.Result;
1179 }
1180 
1181 bool
1182 CodeGenModule::shouldEmitFunction(const FunctionDecl *F) {
1183   if (getFunctionLinkage(F) != llvm::Function::AvailableExternallyLinkage)
1184     return true;
1185   if (CodeGenOpts.OptimizationLevel == 0 &&
1186       !F->hasAttr<AlwaysInlineAttr>() && !F->hasAttr<ForceInlineAttr>())
1187     return false;
1188   // PR9614. Avoid cases where the source code is lying to us. An available
1189   // externally function should have an equivalent function somewhere else,
1190   // but a function that calls itself is clearly not equivalent to the real
1191   // implementation.
1192   // This happens in glibc's btowc and in some configure checks.
1193   return !isTriviallyRecursive(F);
1194 }
1195 
1196 void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) {
1197   const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
1198 
1199   PrettyStackTraceDecl CrashInfo(const_cast<ValueDecl *>(D), D->getLocation(),
1200                                  Context.getSourceManager(),
1201                                  "Generating code for declaration");
1202 
1203   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
1204     // At -O0, don't generate IR for functions with available_externally
1205     // linkage.
1206     if (!shouldEmitFunction(Function))
1207       return;
1208 
1209     if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
1210       // Make sure to emit the definition(s) before we emit the thunks.
1211       // This is necessary for the generation of certain thunks.
1212       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(Method))
1213         EmitCXXConstructor(CD, GD.getCtorType());
1214       else if (const CXXDestructorDecl *DD =dyn_cast<CXXDestructorDecl>(Method))
1215         EmitCXXDestructor(DD, GD.getDtorType());
1216       else
1217         EmitGlobalFunctionDefinition(GD);
1218 
1219       if (Method->isVirtual())
1220         getVTables().EmitThunks(GD);
1221 
1222       return;
1223     }
1224 
1225     return EmitGlobalFunctionDefinition(GD);
1226   }
1227 
1228   if (const VarDecl *VD = dyn_cast<VarDecl>(D))
1229     return EmitGlobalVarDefinition(VD);
1230 
1231   llvm_unreachable("Invalid argument to EmitGlobalDefinition()");
1232 }
1233 
1234 /// GetOrCreateLLVMFunction - If the specified mangled name is not in the
1235 /// module, create and return an llvm Function with the specified type. If there
1236 /// is something in the module with the specified name, return it potentially
1237 /// bitcasted to the right type.
1238 ///
1239 /// If D is non-null, it specifies a decl that correspond to this.  This is used
1240 /// to set the attributes on the function when it is first created.
1241 llvm::Constant *
1242 CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
1243                                        llvm::Type *Ty,
1244                                        GlobalDecl D, bool ForVTable,
1245                                        llvm::AttributeSet ExtraAttrs) {
1246   // Lookup the entry, lazily creating it if necessary.
1247   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1248   if (Entry) {
1249     if (WeakRefReferences.erase(Entry)) {
1250       const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl());
1251       if (FD && !FD->hasAttr<WeakAttr>())
1252         Entry->setLinkage(llvm::Function::ExternalLinkage);
1253     }
1254 
1255     if (Entry->getType()->getElementType() == Ty)
1256       return Entry;
1257 
1258     // Make sure the result is of the correct type.
1259     return llvm::ConstantExpr::getBitCast(Entry, Ty->getPointerTo());
1260   }
1261 
1262   // This function doesn't have a complete type (for example, the return
1263   // type is an incomplete struct). Use a fake type instead, and make
1264   // sure not to try to set attributes.
1265   bool IsIncompleteFunction = false;
1266 
1267   llvm::FunctionType *FTy;
1268   if (isa<llvm::FunctionType>(Ty)) {
1269     FTy = cast<llvm::FunctionType>(Ty);
1270   } else {
1271     FTy = llvm::FunctionType::get(VoidTy, false);
1272     IsIncompleteFunction = true;
1273   }
1274 
1275   llvm::Function *F = llvm::Function::Create(FTy,
1276                                              llvm::Function::ExternalLinkage,
1277                                              MangledName, &getModule());
1278   assert(F->getName() == MangledName && "name was uniqued!");
1279   if (D.getDecl())
1280     SetFunctionAttributes(D, F, IsIncompleteFunction);
1281   if (ExtraAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex)) {
1282     llvm::AttrBuilder B(ExtraAttrs, llvm::AttributeSet::FunctionIndex);
1283     F->addAttributes(llvm::AttributeSet::FunctionIndex,
1284                      llvm::AttributeSet::get(VMContext,
1285                                              llvm::AttributeSet::FunctionIndex,
1286                                              B));
1287   }
1288 
1289   // This is the first use or definition of a mangled name.  If there is a
1290   // deferred decl with this name, remember that we need to emit it at the end
1291   // of the file.
1292   llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
1293   if (DDI != DeferredDecls.end()) {
1294     // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
1295     // list, and remove it from DeferredDecls (since we don't need it anymore).
1296     DeferredDeclsToEmit.push_back(DDI->second);
1297     DeferredDecls.erase(DDI);
1298 
1299   // Otherwise, there are cases we have to worry about where we're
1300   // using a declaration for which we must emit a definition but where
1301   // we might not find a top-level definition:
1302   //   - member functions defined inline in their classes
1303   //   - friend functions defined inline in some class
1304   //   - special member functions with implicit definitions
1305   // If we ever change our AST traversal to walk into class methods,
1306   // this will be unnecessary.
1307   //
1308   // We also don't emit a definition for a function if it's going to be an entry
1309   // in a vtable, unless it's already marked as used.
1310   } else if (getLangOpts().CPlusPlus && D.getDecl()) {
1311     // Look for a declaration that's lexically in a record.
1312     const FunctionDecl *FD = cast<FunctionDecl>(D.getDecl());
1313     FD = FD->getMostRecentDecl();
1314     do {
1315       if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
1316         if (FD->isImplicit() && !ForVTable) {
1317           assert(FD->isUsed() && "Sema didn't mark implicit function as used!");
1318           DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
1319           break;
1320         } else if (FD->doesThisDeclarationHaveABody()) {
1321           DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
1322           break;
1323         }
1324       }
1325       FD = FD->getPreviousDecl();
1326     } while (FD);
1327   }
1328 
1329   // Make sure the result is of the requested type.
1330   if (!IsIncompleteFunction) {
1331     assert(F->getType()->getElementType() == Ty);
1332     return F;
1333   }
1334 
1335   llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
1336   return llvm::ConstantExpr::getBitCast(F, PTy);
1337 }
1338 
1339 /// GetAddrOfFunction - Return the address of the given function.  If Ty is
1340 /// non-null, then this function will use the specified type if it has to
1341 /// create it (this occurs when we see a definition of the function).
1342 llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
1343                                                  llvm::Type *Ty,
1344                                                  bool ForVTable) {
1345   // If there was no specific requested type, just convert it now.
1346   if (!Ty)
1347     Ty = getTypes().ConvertType(cast<ValueDecl>(GD.getDecl())->getType());
1348 
1349   StringRef MangledName = getMangledName(GD);
1350   return GetOrCreateLLVMFunction(MangledName, Ty, GD, ForVTable);
1351 }
1352 
1353 /// CreateRuntimeFunction - Create a new runtime function with the specified
1354 /// type and name.
1355 llvm::Constant *
1356 CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy,
1357                                      StringRef Name,
1358                                      llvm::AttributeSet ExtraAttrs) {
1359   llvm::Constant *C
1360     = GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
1361                               ExtraAttrs);
1362   if (llvm::Function *F = dyn_cast<llvm::Function>(C))
1363     if (F->empty())
1364       F->setCallingConv(getRuntimeCC());
1365   return C;
1366 }
1367 
1368 /// isTypeConstant - Determine whether an object of this type can be emitted
1369 /// as a constant.
1370 ///
1371 /// If ExcludeCtor is true, the duration when the object's constructor runs
1372 /// will not be considered. The caller will need to verify that the object is
1373 /// not written to during its construction.
1374 bool CodeGenModule::isTypeConstant(QualType Ty, bool ExcludeCtor) {
1375   if (!Ty.isConstant(Context) && !Ty->isReferenceType())
1376     return false;
1377 
1378   if (Context.getLangOpts().CPlusPlus) {
1379     if (const CXXRecordDecl *Record
1380           = Context.getBaseElementType(Ty)->getAsCXXRecordDecl())
1381       return ExcludeCtor && !Record->hasMutableFields() &&
1382              Record->hasTrivialDestructor();
1383   }
1384 
1385   return true;
1386 }
1387 
1388 /// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,
1389 /// create and return an llvm GlobalVariable with the specified type.  If there
1390 /// is something in the module with the specified name, return it potentially
1391 /// bitcasted to the right type.
1392 ///
1393 /// If D is non-null, it specifies a decl that correspond to this.  This is used
1394 /// to set the attributes on the global when it is first created.
1395 llvm::Constant *
1396 CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
1397                                      llvm::PointerType *Ty,
1398                                      const VarDecl *D,
1399                                      bool UnnamedAddr) {
1400   // Lookup the entry, lazily creating it if necessary.
1401   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1402   if (Entry) {
1403     if (WeakRefReferences.erase(Entry)) {
1404       if (D && !D->hasAttr<WeakAttr>())
1405         Entry->setLinkage(llvm::Function::ExternalLinkage);
1406     }
1407 
1408     if (UnnamedAddr)
1409       Entry->setUnnamedAddr(true);
1410 
1411     if (Entry->getType() == Ty)
1412       return Entry;
1413 
1414     // Make sure the result is of the correct type.
1415     return llvm::ConstantExpr::getBitCast(Entry, Ty);
1416   }
1417 
1418   // This is the first use or definition of a mangled name.  If there is a
1419   // deferred decl with this name, remember that we need to emit it at the end
1420   // of the file.
1421   llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
1422   if (DDI != DeferredDecls.end()) {
1423     // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
1424     // list, and remove it from DeferredDecls (since we don't need it anymore).
1425     DeferredDeclsToEmit.push_back(DDI->second);
1426     DeferredDecls.erase(DDI);
1427   }
1428 
1429   unsigned AddrSpace = GetGlobalVarAddressSpace(D, Ty->getAddressSpace());
1430   llvm::GlobalVariable *GV =
1431     new llvm::GlobalVariable(getModule(), Ty->getElementType(), false,
1432                              llvm::GlobalValue::ExternalLinkage,
1433                              0, MangledName, 0,
1434                              llvm::GlobalVariable::NotThreadLocal, AddrSpace);
1435 
1436   // Handle things which are present even on external declarations.
1437   if (D) {
1438     // FIXME: This code is overly simple and should be merged with other global
1439     // handling.
1440     GV->setConstant(isTypeConstant(D->getType(), false));
1441 
1442     // Set linkage and visibility in case we never see a definition.
1443     LinkageInfo LV = D->getLinkageAndVisibility();
1444     if (LV.getLinkage() != ExternalLinkage) {
1445       // Don't set internal linkage on declarations.
1446     } else {
1447       if (D->hasAttr<DLLImportAttr>())
1448         GV->setLinkage(llvm::GlobalValue::DLLImportLinkage);
1449       else if (D->hasAttr<WeakAttr>() || D->isWeakImported())
1450         GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
1451 
1452       // Set visibility on a declaration only if it's explicit.
1453       if (LV.isVisibilityExplicit())
1454         GV->setVisibility(GetLLVMVisibility(LV.getVisibility()));
1455     }
1456 
1457     if (D->isThreadSpecified())
1458       setTLSMode(GV, *D);
1459   }
1460 
1461   if (AddrSpace != Ty->getAddressSpace())
1462     return llvm::ConstantExpr::getBitCast(GV, Ty);
1463   else
1464     return GV;
1465 }
1466 
1467 
1468 llvm::GlobalVariable *
1469 CodeGenModule::CreateOrReplaceCXXRuntimeVariable(StringRef Name,
1470                                       llvm::Type *Ty,
1471                                       llvm::GlobalValue::LinkageTypes Linkage) {
1472   llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name);
1473   llvm::GlobalVariable *OldGV = 0;
1474 
1475 
1476   if (GV) {
1477     // Check if the variable has the right type.
1478     if (GV->getType()->getElementType() == Ty)
1479       return GV;
1480 
1481     // Because C++ name mangling, the only way we can end up with an already
1482     // existing global with the same name is if it has been declared extern "C".
1483     assert(GV->isDeclaration() && "Declaration has wrong type!");
1484     OldGV = GV;
1485   }
1486 
1487   // Create a new variable.
1488   GV = new llvm::GlobalVariable(getModule(), Ty, /*isConstant=*/true,
1489                                 Linkage, 0, Name);
1490 
1491   if (OldGV) {
1492     // Replace occurrences of the old variable if needed.
1493     GV->takeName(OldGV);
1494 
1495     if (!OldGV->use_empty()) {
1496       llvm::Constant *NewPtrForOldDecl =
1497       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
1498       OldGV->replaceAllUsesWith(NewPtrForOldDecl);
1499     }
1500 
1501     OldGV->eraseFromParent();
1502   }
1503 
1504   return GV;
1505 }
1506 
1507 /// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
1508 /// given global variable.  If Ty is non-null and if the global doesn't exist,
1509 /// then it will be created with the specified type instead of whatever the
1510 /// normal requested type would be.
1511 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
1512                                                   llvm::Type *Ty) {
1513   assert(D->hasGlobalStorage() && "Not a global variable");
1514   QualType ASTTy = D->getType();
1515   if (Ty == 0)
1516     Ty = getTypes().ConvertTypeForMem(ASTTy);
1517 
1518   llvm::PointerType *PTy =
1519     llvm::PointerType::get(Ty, getContext().getTargetAddressSpace(ASTTy));
1520 
1521   StringRef MangledName = getMangledName(D);
1522   return GetOrCreateLLVMGlobal(MangledName, PTy, D);
1523 }
1524 
1525 /// CreateRuntimeVariable - Create a new runtime global variable with the
1526 /// specified type and name.
1527 llvm::Constant *
1528 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
1529                                      StringRef Name) {
1530   return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), 0,
1531                                true);
1532 }
1533 
1534 void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
1535   assert(!D->getInit() && "Cannot emit definite definitions here!");
1536 
1537   if (MayDeferGeneration(D)) {
1538     // If we have not seen a reference to this variable yet, place it
1539     // into the deferred declarations table to be emitted if needed
1540     // later.
1541     StringRef MangledName = getMangledName(D);
1542     if (!GetGlobalValue(MangledName)) {
1543       DeferredDecls[MangledName] = D;
1544       return;
1545     }
1546   }
1547 
1548   // The tentative definition is the only definition.
1549   EmitGlobalVarDefinition(D);
1550 }
1551 
1552 CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) const {
1553     return Context.toCharUnitsFromBits(
1554       TheDataLayout.getTypeStoreSizeInBits(Ty));
1555 }
1556 
1557 llvm::Constant *
1558 CodeGenModule::MaybeEmitGlobalStdInitializerListInitializer(const VarDecl *D,
1559                                                        const Expr *rawInit) {
1560   ArrayRef<ExprWithCleanups::CleanupObject> cleanups;
1561   if (const ExprWithCleanups *withCleanups =
1562           dyn_cast<ExprWithCleanups>(rawInit)) {
1563     cleanups = withCleanups->getObjects();
1564     rawInit = withCleanups->getSubExpr();
1565   }
1566 
1567   const InitListExpr *init = dyn_cast<InitListExpr>(rawInit);
1568   if (!init || !init->initializesStdInitializerList() ||
1569       init->getNumInits() == 0)
1570     return 0;
1571 
1572   ASTContext &ctx = getContext();
1573   unsigned numInits = init->getNumInits();
1574   // FIXME: This check is here because we would otherwise silently miscompile
1575   // nested global std::initializer_lists. Better would be to have a real
1576   // implementation.
1577   for (unsigned i = 0; i < numInits; ++i) {
1578     const InitListExpr *inner = dyn_cast<InitListExpr>(init->getInit(i));
1579     if (inner && inner->initializesStdInitializerList()) {
1580       ErrorUnsupported(inner, "nested global std::initializer_list");
1581       return 0;
1582     }
1583   }
1584 
1585   // Synthesize a fake VarDecl for the array and initialize that.
1586   QualType elementType = init->getInit(0)->getType();
1587   llvm::APInt numElements(ctx.getTypeSize(ctx.getSizeType()), numInits);
1588   QualType arrayType = ctx.getConstantArrayType(elementType, numElements,
1589                                                 ArrayType::Normal, 0);
1590 
1591   IdentifierInfo *name = &ctx.Idents.get(D->getNameAsString() + "__initlist");
1592   TypeSourceInfo *sourceInfo = ctx.getTrivialTypeSourceInfo(
1593                                               arrayType, D->getLocation());
1594   VarDecl *backingArray = VarDecl::Create(ctx, const_cast<DeclContext*>(
1595                                                           D->getDeclContext()),
1596                                           D->getLocStart(), D->getLocation(),
1597                                           name, arrayType, sourceInfo,
1598                                           SC_Static, SC_Static);
1599 
1600   // Now clone the InitListExpr to initialize the array instead.
1601   // Incredible hack: we want to use the existing InitListExpr here, so we need
1602   // to tell it that it no longer initializes a std::initializer_list.
1603   ArrayRef<Expr*> Inits(const_cast<InitListExpr*>(init)->getInits(),
1604                         init->getNumInits());
1605   Expr *arrayInit = new (ctx) InitListExpr(ctx, init->getLBraceLoc(), Inits,
1606                                            init->getRBraceLoc());
1607   arrayInit->setType(arrayType);
1608 
1609   if (!cleanups.empty())
1610     arrayInit = ExprWithCleanups::Create(ctx, arrayInit, cleanups);
1611 
1612   backingArray->setInit(arrayInit);
1613 
1614   // Emit the definition of the array.
1615   EmitGlobalVarDefinition(backingArray);
1616 
1617   // Inspect the initializer list to validate it and determine its type.
1618   // FIXME: doing this every time is probably inefficient; caching would be nice
1619   RecordDecl *record = init->getType()->castAs<RecordType>()->getDecl();
1620   RecordDecl::field_iterator field = record->field_begin();
1621   if (field == record->field_end()) {
1622     ErrorUnsupported(D, "weird std::initializer_list");
1623     return 0;
1624   }
1625   QualType elementPtr = ctx.getPointerType(elementType.withConst());
1626   // Start pointer.
1627   if (!ctx.hasSameType(field->getType(), elementPtr)) {
1628     ErrorUnsupported(D, "weird std::initializer_list");
1629     return 0;
1630   }
1631   ++field;
1632   if (field == record->field_end()) {
1633     ErrorUnsupported(D, "weird std::initializer_list");
1634     return 0;
1635   }
1636   bool isStartEnd = false;
1637   if (ctx.hasSameType(field->getType(), elementPtr)) {
1638     // End pointer.
1639     isStartEnd = true;
1640   } else if(!ctx.hasSameType(field->getType(), ctx.getSizeType())) {
1641     ErrorUnsupported(D, "weird std::initializer_list");
1642     return 0;
1643   }
1644 
1645   // Now build an APValue representing the std::initializer_list.
1646   APValue initListValue(APValue::UninitStruct(), 0, 2);
1647   APValue &startField = initListValue.getStructField(0);
1648   APValue::LValuePathEntry startOffsetPathEntry;
1649   startOffsetPathEntry.ArrayIndex = 0;
1650   startField = APValue(APValue::LValueBase(backingArray),
1651                        CharUnits::fromQuantity(0),
1652                        llvm::makeArrayRef(startOffsetPathEntry),
1653                        /*IsOnePastTheEnd=*/false, 0);
1654 
1655   if (isStartEnd) {
1656     APValue &endField = initListValue.getStructField(1);
1657     APValue::LValuePathEntry endOffsetPathEntry;
1658     endOffsetPathEntry.ArrayIndex = numInits;
1659     endField = APValue(APValue::LValueBase(backingArray),
1660                        ctx.getTypeSizeInChars(elementType) * numInits,
1661                        llvm::makeArrayRef(endOffsetPathEntry),
1662                        /*IsOnePastTheEnd=*/true, 0);
1663   } else {
1664     APValue &sizeField = initListValue.getStructField(1);
1665     sizeField = APValue(llvm::APSInt(numElements));
1666   }
1667 
1668   // Emit the constant for the initializer_list.
1669   llvm::Constant *llvmInit =
1670       EmitConstantValueForMemory(initListValue, D->getType());
1671   assert(llvmInit && "failed to initialize as constant");
1672   return llvmInit;
1673 }
1674 
1675 unsigned CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D,
1676                                                  unsigned AddrSpace) {
1677   if (LangOpts.CUDA && CodeGenOpts.CUDAIsDevice) {
1678     if (D->hasAttr<CUDAConstantAttr>())
1679       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_constant);
1680     else if (D->hasAttr<CUDASharedAttr>())
1681       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_shared);
1682     else
1683       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_device);
1684   }
1685 
1686   return AddrSpace;
1687 }
1688 
1689 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
1690   llvm::Constant *Init = 0;
1691   QualType ASTTy = D->getType();
1692   CXXRecordDecl *RD = ASTTy->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
1693   bool NeedsGlobalCtor = false;
1694   bool NeedsGlobalDtor = RD && !RD->hasTrivialDestructor();
1695 
1696   const VarDecl *InitDecl;
1697   const Expr *InitExpr = D->getAnyInitializer(InitDecl);
1698 
1699   if (!InitExpr) {
1700     // This is a tentative definition; tentative definitions are
1701     // implicitly initialized with { 0 }.
1702     //
1703     // Note that tentative definitions are only emitted at the end of
1704     // a translation unit, so they should never have incomplete
1705     // type. In addition, EmitTentativeDefinition makes sure that we
1706     // never attempt to emit a tentative definition if a real one
1707     // exists. A use may still exists, however, so we still may need
1708     // to do a RAUW.
1709     assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
1710     Init = EmitNullConstant(D->getType());
1711   } else {
1712     // If this is a std::initializer_list, emit the special initializer.
1713     Init = MaybeEmitGlobalStdInitializerListInitializer(D, InitExpr);
1714     // An empty init list will perform zero-initialization, which happens
1715     // to be exactly what we want.
1716     // FIXME: It does so in a global constructor, which is *not* what we
1717     // want.
1718 
1719     if (!Init) {
1720       initializedGlobalDecl = GlobalDecl(D);
1721       Init = EmitConstantInit(*InitDecl);
1722     }
1723     if (!Init) {
1724       QualType T = InitExpr->getType();
1725       if (D->getType()->isReferenceType())
1726         T = D->getType();
1727 
1728       if (getLangOpts().CPlusPlus) {
1729         Init = EmitNullConstant(T);
1730         NeedsGlobalCtor = true;
1731       } else {
1732         ErrorUnsupported(D, "static initializer");
1733         Init = llvm::UndefValue::get(getTypes().ConvertType(T));
1734       }
1735     } else {
1736       // We don't need an initializer, so remove the entry for the delayed
1737       // initializer position (just in case this entry was delayed) if we
1738       // also don't need to register a destructor.
1739       if (getLangOpts().CPlusPlus && !NeedsGlobalDtor)
1740         DelayedCXXInitPosition.erase(D);
1741     }
1742   }
1743 
1744   llvm::Type* InitType = Init->getType();
1745   llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
1746 
1747   // Strip off a bitcast if we got one back.
1748   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
1749     assert(CE->getOpcode() == llvm::Instruction::BitCast ||
1750            // all zero index gep.
1751            CE->getOpcode() == llvm::Instruction::GetElementPtr);
1752     Entry = CE->getOperand(0);
1753   }
1754 
1755   // Entry is now either a Function or GlobalVariable.
1756   llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(Entry);
1757 
1758   // We have a definition after a declaration with the wrong type.
1759   // We must make a new GlobalVariable* and update everything that used OldGV
1760   // (a declaration or tentative definition) with the new GlobalVariable*
1761   // (which will be a definition).
1762   //
1763   // This happens if there is a prototype for a global (e.g.
1764   // "extern int x[];") and then a definition of a different type (e.g.
1765   // "int x[10];"). This also happens when an initializer has a different type
1766   // from the type of the global (this happens with unions).
1767   if (GV == 0 ||
1768       GV->getType()->getElementType() != InitType ||
1769       GV->getType()->getAddressSpace() !=
1770        GetGlobalVarAddressSpace(D, getContext().getTargetAddressSpace(ASTTy))) {
1771 
1772     // Move the old entry aside so that we'll create a new one.
1773     Entry->setName(StringRef());
1774 
1775     // Make a new global with the correct type, this is now guaranteed to work.
1776     GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
1777 
1778     // Replace all uses of the old global with the new global
1779     llvm::Constant *NewPtrForOldDecl =
1780         llvm::ConstantExpr::getBitCast(GV, Entry->getType());
1781     Entry->replaceAllUsesWith(NewPtrForOldDecl);
1782 
1783     // Erase the old global, since it is no longer used.
1784     cast<llvm::GlobalValue>(Entry)->eraseFromParent();
1785   }
1786 
1787   if (D->hasAttr<AnnotateAttr>())
1788     AddGlobalAnnotations(D, GV);
1789 
1790   GV->setInitializer(Init);
1791 
1792   // If it is safe to mark the global 'constant', do so now.
1793   GV->setConstant(!NeedsGlobalCtor && !NeedsGlobalDtor &&
1794                   isTypeConstant(D->getType(), true));
1795 
1796   GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
1797 
1798   // Set the llvm linkage type as appropriate.
1799   llvm::GlobalValue::LinkageTypes Linkage =
1800     GetLLVMLinkageVarDefinition(D, GV);
1801   GV->setLinkage(Linkage);
1802   if (Linkage == llvm::GlobalVariable::CommonLinkage)
1803     // common vars aren't constant even if declared const.
1804     GV->setConstant(false);
1805 
1806   SetCommonAttributes(D, GV);
1807 
1808   // Emit the initializer function if necessary.
1809   if (NeedsGlobalCtor || NeedsGlobalDtor)
1810     EmitCXXGlobalVarDeclInitFunc(D, GV, NeedsGlobalCtor);
1811 
1812   // If we are compiling with ASan, add metadata indicating dynamically
1813   // initialized globals.
1814   if (SanOpts.Address && NeedsGlobalCtor) {
1815     llvm::Module &M = getModule();
1816 
1817     llvm::NamedMDNode *DynamicInitializers =
1818         M.getOrInsertNamedMetadata("llvm.asan.dynamically_initialized_globals");
1819     llvm::Value *GlobalToAdd[] = { GV };
1820     llvm::MDNode *ThisGlobal = llvm::MDNode::get(VMContext, GlobalToAdd);
1821     DynamicInitializers->addOperand(ThisGlobal);
1822   }
1823 
1824   // Emit global variable debug information.
1825   if (CGDebugInfo *DI = getModuleDebugInfo())
1826     if (getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
1827       DI->EmitGlobalVariable(GV, D);
1828 }
1829 
1830 llvm::GlobalValue::LinkageTypes
1831 CodeGenModule::GetLLVMLinkageVarDefinition(const VarDecl *D,
1832                                            llvm::GlobalVariable *GV) {
1833   GVALinkage Linkage = getContext().GetGVALinkageForVariable(D);
1834   if (Linkage == GVA_Internal)
1835     return llvm::Function::InternalLinkage;
1836   else if (D->hasAttr<DLLImportAttr>())
1837     return llvm::Function::DLLImportLinkage;
1838   else if (D->hasAttr<DLLExportAttr>())
1839     return llvm::Function::DLLExportLinkage;
1840   else if (D->hasAttr<WeakAttr>()) {
1841     if (GV->isConstant())
1842       return llvm::GlobalVariable::WeakODRLinkage;
1843     else
1844       return llvm::GlobalVariable::WeakAnyLinkage;
1845   } else if (Linkage == GVA_TemplateInstantiation ||
1846              Linkage == GVA_ExplicitTemplateInstantiation)
1847     return llvm::GlobalVariable::WeakODRLinkage;
1848   else if (!getLangOpts().CPlusPlus &&
1849            ((!CodeGenOpts.NoCommon && !D->getAttr<NoCommonAttr>()) ||
1850              D->getAttr<CommonAttr>()) &&
1851            !D->hasExternalStorage() && !D->getInit() &&
1852            !D->getAttr<SectionAttr>() && !D->isThreadSpecified() &&
1853            !D->getAttr<WeakImportAttr>()) {
1854     // Thread local vars aren't considered common linkage.
1855     return llvm::GlobalVariable::CommonLinkage;
1856   }
1857   return llvm::GlobalVariable::ExternalLinkage;
1858 }
1859 
1860 /// Replace the uses of a function that was declared with a non-proto type.
1861 /// We want to silently drop extra arguments from call sites
1862 static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
1863                                           llvm::Function *newFn) {
1864   // Fast path.
1865   if (old->use_empty()) return;
1866 
1867   llvm::Type *newRetTy = newFn->getReturnType();
1868   SmallVector<llvm::Value*, 4> newArgs;
1869 
1870   for (llvm::Value::use_iterator ui = old->use_begin(), ue = old->use_end();
1871          ui != ue; ) {
1872     llvm::Value::use_iterator use = ui++; // Increment before the use is erased.
1873     llvm::User *user = *use;
1874 
1875     // Recognize and replace uses of bitcasts.  Most calls to
1876     // unprototyped functions will use bitcasts.
1877     if (llvm::ConstantExpr *bitcast = dyn_cast<llvm::ConstantExpr>(user)) {
1878       if (bitcast->getOpcode() == llvm::Instruction::BitCast)
1879         replaceUsesOfNonProtoConstant(bitcast, newFn);
1880       continue;
1881     }
1882 
1883     // Recognize calls to the function.
1884     llvm::CallSite callSite(user);
1885     if (!callSite) continue;
1886     if (!callSite.isCallee(use)) continue;
1887 
1888     // If the return types don't match exactly, then we can't
1889     // transform this call unless it's dead.
1890     if (callSite->getType() != newRetTy && !callSite->use_empty())
1891       continue;
1892 
1893     // Get the call site's attribute list.
1894     SmallVector<llvm::AttributeSet, 8> newAttrs;
1895     llvm::AttributeSet oldAttrs = callSite.getAttributes();
1896 
1897     // Collect any return attributes from the call.
1898     if (oldAttrs.hasAttributes(llvm::AttributeSet::ReturnIndex))
1899       newAttrs.push_back(
1900         llvm::AttributeSet::get(newFn->getContext(),
1901                                 oldAttrs.getRetAttributes()));
1902 
1903     // If the function was passed too few arguments, don't transform.
1904     unsigned newNumArgs = newFn->arg_size();
1905     if (callSite.arg_size() < newNumArgs) continue;
1906 
1907     // If extra arguments were passed, we silently drop them.
1908     // If any of the types mismatch, we don't transform.
1909     unsigned argNo = 0;
1910     bool dontTransform = false;
1911     for (llvm::Function::arg_iterator ai = newFn->arg_begin(),
1912            ae = newFn->arg_end(); ai != ae; ++ai, ++argNo) {
1913       if (callSite.getArgument(argNo)->getType() != ai->getType()) {
1914         dontTransform = true;
1915         break;
1916       }
1917 
1918       // Add any parameter attributes.
1919       if (oldAttrs.hasAttributes(argNo + 1))
1920         newAttrs.
1921           push_back(llvm::
1922                     AttributeSet::get(newFn->getContext(),
1923                                       oldAttrs.getParamAttributes(argNo + 1)));
1924     }
1925     if (dontTransform)
1926       continue;
1927 
1928     if (oldAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex))
1929       newAttrs.push_back(llvm::AttributeSet::get(newFn->getContext(),
1930                                                  oldAttrs.getFnAttributes()));
1931 
1932     // Okay, we can transform this.  Create the new call instruction and copy
1933     // over the required information.
1934     newArgs.append(callSite.arg_begin(), callSite.arg_begin() + argNo);
1935 
1936     llvm::CallSite newCall;
1937     if (callSite.isCall()) {
1938       newCall = llvm::CallInst::Create(newFn, newArgs, "",
1939                                        callSite.getInstruction());
1940     } else {
1941       llvm::InvokeInst *oldInvoke =
1942         cast<llvm::InvokeInst>(callSite.getInstruction());
1943       newCall = llvm::InvokeInst::Create(newFn,
1944                                          oldInvoke->getNormalDest(),
1945                                          oldInvoke->getUnwindDest(),
1946                                          newArgs, "",
1947                                          callSite.getInstruction());
1948     }
1949     newArgs.clear(); // for the next iteration
1950 
1951     if (!newCall->getType()->isVoidTy())
1952       newCall->takeName(callSite.getInstruction());
1953     newCall.setAttributes(
1954                      llvm::AttributeSet::get(newFn->getContext(), newAttrs));
1955     newCall.setCallingConv(callSite.getCallingConv());
1956 
1957     // Finally, remove the old call, replacing any uses with the new one.
1958     if (!callSite->use_empty())
1959       callSite->replaceAllUsesWith(newCall.getInstruction());
1960 
1961     // Copy debug location attached to CI.
1962     if (!callSite->getDebugLoc().isUnknown())
1963       newCall->setDebugLoc(callSite->getDebugLoc());
1964     callSite->eraseFromParent();
1965   }
1966 }
1967 
1968 /// ReplaceUsesOfNonProtoTypeWithRealFunction - This function is called when we
1969 /// implement a function with no prototype, e.g. "int foo() {}".  If there are
1970 /// existing call uses of the old function in the module, this adjusts them to
1971 /// call the new function directly.
1972 ///
1973 /// This is not just a cleanup: the always_inline pass requires direct calls to
1974 /// functions to be able to inline them.  If there is a bitcast in the way, it
1975 /// won't inline them.  Instcombine normally deletes these calls, but it isn't
1976 /// run at -O0.
1977 static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
1978                                                       llvm::Function *NewFn) {
1979   // If we're redefining a global as a function, don't transform it.
1980   if (!isa<llvm::Function>(Old)) return;
1981 
1982   replaceUsesOfNonProtoConstant(Old, NewFn);
1983 }
1984 
1985 void CodeGenModule::HandleCXXStaticMemberVarInstantiation(VarDecl *VD) {
1986   TemplateSpecializationKind TSK = VD->getTemplateSpecializationKind();
1987   // If we have a definition, this might be a deferred decl. If the
1988   // instantiation is explicit, make sure we emit it at the end.
1989   if (VD->getDefinition() && TSK == TSK_ExplicitInstantiationDefinition)
1990     GetAddrOfGlobalVar(VD);
1991 
1992   EmitTopLevelDecl(VD);
1993 }
1994 
1995 void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
1996   const FunctionDecl *D = cast<FunctionDecl>(GD.getDecl());
1997 
1998   // Compute the function info and LLVM type.
1999   const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD);
2000   llvm::FunctionType *Ty = getTypes().GetFunctionType(FI);
2001 
2002   // Get or create the prototype for the function.
2003   llvm::Constant *Entry = GetAddrOfFunction(GD, Ty);
2004 
2005   // Strip off a bitcast if we got one back.
2006   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
2007     assert(CE->getOpcode() == llvm::Instruction::BitCast);
2008     Entry = CE->getOperand(0);
2009   }
2010 
2011 
2012   if (cast<llvm::GlobalValue>(Entry)->getType()->getElementType() != Ty) {
2013     llvm::GlobalValue *OldFn = cast<llvm::GlobalValue>(Entry);
2014 
2015     // If the types mismatch then we have to rewrite the definition.
2016     assert(OldFn->isDeclaration() &&
2017            "Shouldn't replace non-declaration");
2018 
2019     // F is the Function* for the one with the wrong type, we must make a new
2020     // Function* and update everything that used F (a declaration) with the new
2021     // Function* (which will be a definition).
2022     //
2023     // This happens if there is a prototype for a function
2024     // (e.g. "int f()") and then a definition of a different type
2025     // (e.g. "int f(int x)").  Move the old function aside so that it
2026     // doesn't interfere with GetAddrOfFunction.
2027     OldFn->setName(StringRef());
2028     llvm::Function *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
2029 
2030     // This might be an implementation of a function without a
2031     // prototype, in which case, try to do special replacement of
2032     // calls which match the new prototype.  The really key thing here
2033     // is that we also potentially drop arguments from the call site
2034     // so as to make a direct call, which makes the inliner happier
2035     // and suppresses a number of optimizer warnings (!) about
2036     // dropping arguments.
2037     if (!OldFn->use_empty()) {
2038       ReplaceUsesOfNonProtoTypeWithRealFunction(OldFn, NewFn);
2039       OldFn->removeDeadConstantUsers();
2040     }
2041 
2042     // Replace uses of F with the Function we will endow with a body.
2043     if (!Entry->use_empty()) {
2044       llvm::Constant *NewPtrForOldDecl =
2045         llvm::ConstantExpr::getBitCast(NewFn, Entry->getType());
2046       Entry->replaceAllUsesWith(NewPtrForOldDecl);
2047     }
2048 
2049     // Ok, delete the old function now, which is dead.
2050     OldFn->eraseFromParent();
2051 
2052     Entry = NewFn;
2053   }
2054 
2055   // We need to set linkage and visibility on the function before
2056   // generating code for it because various parts of IR generation
2057   // want to propagate this information down (e.g. to local static
2058   // declarations).
2059   llvm::Function *Fn = cast<llvm::Function>(Entry);
2060   setFunctionLinkage(D, Fn);
2061 
2062   // FIXME: this is redundant with part of SetFunctionDefinitionAttributes
2063   setGlobalVisibility(Fn, D);
2064 
2065   CodeGenFunction(*this).GenerateCode(D, Fn, FI);
2066 
2067   SetFunctionDefinitionAttributes(D, Fn);
2068   SetLLVMFunctionAttributesForDefinition(D, Fn);
2069 
2070   if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>())
2071     AddGlobalCtor(Fn, CA->getPriority());
2072   if (const DestructorAttr *DA = D->getAttr<DestructorAttr>())
2073     AddGlobalDtor(Fn, DA->getPriority());
2074   if (D->hasAttr<AnnotateAttr>())
2075     AddGlobalAnnotations(D, Fn);
2076 }
2077 
2078 void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
2079   const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
2080   const AliasAttr *AA = D->getAttr<AliasAttr>();
2081   assert(AA && "Not an alias?");
2082 
2083   StringRef MangledName = getMangledName(GD);
2084 
2085   // If there is a definition in the module, then it wins over the alias.
2086   // This is dubious, but allow it to be safe.  Just ignore the alias.
2087   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
2088   if (Entry && !Entry->isDeclaration())
2089     return;
2090 
2091   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
2092 
2093   // Create a reference to the named value.  This ensures that it is emitted
2094   // if a deferred decl.
2095   llvm::Constant *Aliasee;
2096   if (isa<llvm::FunctionType>(DeclTy))
2097     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GD,
2098                                       /*ForVTable=*/false);
2099   else
2100     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
2101                                     llvm::PointerType::getUnqual(DeclTy), 0);
2102 
2103   // Create the new alias itself, but don't set a name yet.
2104   llvm::GlobalValue *GA =
2105     new llvm::GlobalAlias(Aliasee->getType(),
2106                           llvm::Function::ExternalLinkage,
2107                           "", Aliasee, &getModule());
2108 
2109   if (Entry) {
2110     assert(Entry->isDeclaration());
2111 
2112     // If there is a declaration in the module, then we had an extern followed
2113     // by the alias, as in:
2114     //   extern int test6();
2115     //   ...
2116     //   int test6() __attribute__((alias("test7")));
2117     //
2118     // Remove it and replace uses of it with the alias.
2119     GA->takeName(Entry);
2120 
2121     Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
2122                                                           Entry->getType()));
2123     Entry->eraseFromParent();
2124   } else {
2125     GA->setName(MangledName);
2126   }
2127 
2128   // Set attributes which are particular to an alias; this is a
2129   // specialization of the attributes which may be set on a global
2130   // variable/function.
2131   if (D->hasAttr<DLLExportAttr>()) {
2132     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
2133       // The dllexport attribute is ignored for undefined symbols.
2134       if (FD->hasBody())
2135         GA->setLinkage(llvm::Function::DLLExportLinkage);
2136     } else {
2137       GA->setLinkage(llvm::Function::DLLExportLinkage);
2138     }
2139   } else if (D->hasAttr<WeakAttr>() ||
2140              D->hasAttr<WeakRefAttr>() ||
2141              D->isWeakImported()) {
2142     GA->setLinkage(llvm::Function::WeakAnyLinkage);
2143   }
2144 
2145   SetCommonAttributes(D, GA);
2146 }
2147 
2148 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,
2149                                             ArrayRef<llvm::Type*> Tys) {
2150   return llvm::Intrinsic::getDeclaration(&getModule(), (llvm::Intrinsic::ID)IID,
2151                                          Tys);
2152 }
2153 
2154 static llvm::StringMapEntry<llvm::Constant*> &
2155 GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*> &Map,
2156                          const StringLiteral *Literal,
2157                          bool TargetIsLSB,
2158                          bool &IsUTF16,
2159                          unsigned &StringLength) {
2160   StringRef String = Literal->getString();
2161   unsigned NumBytes = String.size();
2162 
2163   // Check for simple case.
2164   if (!Literal->containsNonAsciiOrNull()) {
2165     StringLength = NumBytes;
2166     return Map.GetOrCreateValue(String);
2167   }
2168 
2169   // Otherwise, convert the UTF8 literals into a string of shorts.
2170   IsUTF16 = true;
2171 
2172   SmallVector<UTF16, 128> ToBuf(NumBytes + 1); // +1 for ending nulls.
2173   const UTF8 *FromPtr = (const UTF8 *)String.data();
2174   UTF16 *ToPtr = &ToBuf[0];
2175 
2176   (void)ConvertUTF8toUTF16(&FromPtr, FromPtr + NumBytes,
2177                            &ToPtr, ToPtr + NumBytes,
2178                            strictConversion);
2179 
2180   // ConvertUTF8toUTF16 returns the length in ToPtr.
2181   StringLength = ToPtr - &ToBuf[0];
2182 
2183   // Add an explicit null.
2184   *ToPtr = 0;
2185   return Map.
2186     GetOrCreateValue(StringRef(reinterpret_cast<const char *>(ToBuf.data()),
2187                                (StringLength + 1) * 2));
2188 }
2189 
2190 static llvm::StringMapEntry<llvm::Constant*> &
2191 GetConstantStringEntry(llvm::StringMap<llvm::Constant*> &Map,
2192                        const StringLiteral *Literal,
2193                        unsigned &StringLength) {
2194   StringRef String = Literal->getString();
2195   StringLength = String.size();
2196   return Map.GetOrCreateValue(String);
2197 }
2198 
2199 llvm::Constant *
2200 CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
2201   unsigned StringLength = 0;
2202   bool isUTF16 = false;
2203   llvm::StringMapEntry<llvm::Constant*> &Entry =
2204     GetConstantCFStringEntry(CFConstantStringMap, Literal,
2205                              getDataLayout().isLittleEndian(),
2206                              isUTF16, StringLength);
2207 
2208   if (llvm::Constant *C = Entry.getValue())
2209     return C;
2210 
2211   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
2212   llvm::Constant *Zeros[] = { Zero, Zero };
2213 
2214   // If we don't already have it, get __CFConstantStringClassReference.
2215   if (!CFConstantStringClassRef) {
2216     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
2217     Ty = llvm::ArrayType::get(Ty, 0);
2218     llvm::Constant *GV = CreateRuntimeVariable(Ty,
2219                                            "__CFConstantStringClassReference");
2220     // Decay array -> ptr
2221     CFConstantStringClassRef =
2222       llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2223   }
2224 
2225   QualType CFTy = getContext().getCFConstantStringType();
2226 
2227   llvm::StructType *STy =
2228     cast<llvm::StructType>(getTypes().ConvertType(CFTy));
2229 
2230   llvm::Constant *Fields[4];
2231 
2232   // Class pointer.
2233   Fields[0] = CFConstantStringClassRef;
2234 
2235   // Flags.
2236   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
2237   Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
2238     llvm::ConstantInt::get(Ty, 0x07C8);
2239 
2240   // String pointer.
2241   llvm::Constant *C = 0;
2242   if (isUTF16) {
2243     ArrayRef<uint16_t> Arr =
2244       llvm::makeArrayRef<uint16_t>(reinterpret_cast<uint16_t*>(
2245                                      const_cast<char *>(Entry.getKey().data())),
2246                                    Entry.getKey().size() / 2);
2247     C = llvm::ConstantDataArray::get(VMContext, Arr);
2248   } else {
2249     C = llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
2250   }
2251 
2252   llvm::GlobalValue::LinkageTypes Linkage;
2253   if (isUTF16)
2254     // FIXME: why do utf strings get "_" labels instead of "L" labels?
2255     Linkage = llvm::GlobalValue::InternalLinkage;
2256   else
2257     // FIXME: With OS X ld 123.2 (xcode 4) and LTO we would get a linker error
2258     // when using private linkage. It is not clear if this is a bug in ld
2259     // or a reasonable new restriction.
2260     Linkage = llvm::GlobalValue::LinkerPrivateLinkage;
2261 
2262   // Note: -fwritable-strings doesn't make the backing store strings of
2263   // CFStrings writable. (See <rdar://problem/10657500>)
2264   llvm::GlobalVariable *GV =
2265     new llvm::GlobalVariable(getModule(), C->getType(), /*isConstant=*/true,
2266                              Linkage, C, ".str");
2267   GV->setUnnamedAddr(true);
2268   if (isUTF16) {
2269     CharUnits Align = getContext().getTypeAlignInChars(getContext().ShortTy);
2270     GV->setAlignment(Align.getQuantity());
2271   } else {
2272     CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
2273     GV->setAlignment(Align.getQuantity());
2274   }
2275 
2276   // String.
2277   Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2278 
2279   if (isUTF16)
2280     // Cast the UTF16 string to the correct type.
2281     Fields[2] = llvm::ConstantExpr::getBitCast(Fields[2], Int8PtrTy);
2282 
2283   // String length.
2284   Ty = getTypes().ConvertType(getContext().LongTy);
2285   Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
2286 
2287   // The struct.
2288   C = llvm::ConstantStruct::get(STy, Fields);
2289   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
2290                                 llvm::GlobalVariable::PrivateLinkage, C,
2291                                 "_unnamed_cfstring_");
2292   if (const char *Sect = getContext().getTargetInfo().getCFStringSection())
2293     GV->setSection(Sect);
2294   Entry.setValue(GV);
2295 
2296   return GV;
2297 }
2298 
2299 static RecordDecl *
2300 CreateRecordDecl(const ASTContext &Ctx, RecordDecl::TagKind TK,
2301                  DeclContext *DC, IdentifierInfo *Id) {
2302   SourceLocation Loc;
2303   if (Ctx.getLangOpts().CPlusPlus)
2304     return CXXRecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
2305   else
2306     return RecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
2307 }
2308 
2309 llvm::Constant *
2310 CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
2311   unsigned StringLength = 0;
2312   llvm::StringMapEntry<llvm::Constant*> &Entry =
2313     GetConstantStringEntry(CFConstantStringMap, Literal, StringLength);
2314 
2315   if (llvm::Constant *C = Entry.getValue())
2316     return C;
2317 
2318   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
2319   llvm::Constant *Zeros[] = { Zero, Zero };
2320 
2321   // If we don't already have it, get _NSConstantStringClassReference.
2322   if (!ConstantStringClassRef) {
2323     std::string StringClass(getLangOpts().ObjCConstantStringClass);
2324     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
2325     llvm::Constant *GV;
2326     if (LangOpts.ObjCRuntime.isNonFragile()) {
2327       std::string str =
2328         StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
2329                             : "OBJC_CLASS_$_" + StringClass;
2330       GV = getObjCRuntime().GetClassGlobal(str);
2331       // Make sure the result is of the correct type.
2332       llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
2333       ConstantStringClassRef =
2334         llvm::ConstantExpr::getBitCast(GV, PTy);
2335     } else {
2336       std::string str =
2337         StringClass.empty() ? "_NSConstantStringClassReference"
2338                             : "_" + StringClass + "ClassReference";
2339       llvm::Type *PTy = llvm::ArrayType::get(Ty, 0);
2340       GV = CreateRuntimeVariable(PTy, str);
2341       // Decay array -> ptr
2342       ConstantStringClassRef =
2343         llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2344     }
2345   }
2346 
2347   if (!NSConstantStringType) {
2348     // Construct the type for a constant NSString.
2349     RecordDecl *D = CreateRecordDecl(Context, TTK_Struct,
2350                                      Context.getTranslationUnitDecl(),
2351                                    &Context.Idents.get("__builtin_NSString"));
2352     D->startDefinition();
2353 
2354     QualType FieldTypes[3];
2355 
2356     // const int *isa;
2357     FieldTypes[0] = Context.getPointerType(Context.IntTy.withConst());
2358     // const char *str;
2359     FieldTypes[1] = Context.getPointerType(Context.CharTy.withConst());
2360     // unsigned int length;
2361     FieldTypes[2] = Context.UnsignedIntTy;
2362 
2363     // Create fields
2364     for (unsigned i = 0; i < 3; ++i) {
2365       FieldDecl *Field = FieldDecl::Create(Context, D,
2366                                            SourceLocation(),
2367                                            SourceLocation(), 0,
2368                                            FieldTypes[i], /*TInfo=*/0,
2369                                            /*BitWidth=*/0,
2370                                            /*Mutable=*/false,
2371                                            ICIS_NoInit);
2372       Field->setAccess(AS_public);
2373       D->addDecl(Field);
2374     }
2375 
2376     D->completeDefinition();
2377     QualType NSTy = Context.getTagDeclType(D);
2378     NSConstantStringType = cast<llvm::StructType>(getTypes().ConvertType(NSTy));
2379   }
2380 
2381   llvm::Constant *Fields[3];
2382 
2383   // Class pointer.
2384   Fields[0] = ConstantStringClassRef;
2385 
2386   // String pointer.
2387   llvm::Constant *C =
2388     llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
2389 
2390   llvm::GlobalValue::LinkageTypes Linkage;
2391   bool isConstant;
2392   Linkage = llvm::GlobalValue::PrivateLinkage;
2393   isConstant = !LangOpts.WritableStrings;
2394 
2395   llvm::GlobalVariable *GV =
2396   new llvm::GlobalVariable(getModule(), C->getType(), isConstant, Linkage, C,
2397                            ".str");
2398   GV->setUnnamedAddr(true);
2399   CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
2400   GV->setAlignment(Align.getQuantity());
2401   Fields[1] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2402 
2403   // String length.
2404   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
2405   Fields[2] = llvm::ConstantInt::get(Ty, StringLength);
2406 
2407   // The struct.
2408   C = llvm::ConstantStruct::get(NSConstantStringType, Fields);
2409   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
2410                                 llvm::GlobalVariable::PrivateLinkage, C,
2411                                 "_unnamed_nsstring_");
2412   // FIXME. Fix section.
2413   if (const char *Sect =
2414         LangOpts.ObjCRuntime.isNonFragile()
2415           ? getContext().getTargetInfo().getNSStringNonFragileABISection()
2416           : getContext().getTargetInfo().getNSStringSection())
2417     GV->setSection(Sect);
2418   Entry.setValue(GV);
2419 
2420   return GV;
2421 }
2422 
2423 QualType CodeGenModule::getObjCFastEnumerationStateType() {
2424   if (ObjCFastEnumerationStateType.isNull()) {
2425     RecordDecl *D = CreateRecordDecl(Context, TTK_Struct,
2426                                      Context.getTranslationUnitDecl(),
2427                       &Context.Idents.get("__objcFastEnumerationState"));
2428     D->startDefinition();
2429 
2430     QualType FieldTypes[] = {
2431       Context.UnsignedLongTy,
2432       Context.getPointerType(Context.getObjCIdType()),
2433       Context.getPointerType(Context.UnsignedLongTy),
2434       Context.getConstantArrayType(Context.UnsignedLongTy,
2435                            llvm::APInt(32, 5), ArrayType::Normal, 0)
2436     };
2437 
2438     for (size_t i = 0; i < 4; ++i) {
2439       FieldDecl *Field = FieldDecl::Create(Context,
2440                                            D,
2441                                            SourceLocation(),
2442                                            SourceLocation(), 0,
2443                                            FieldTypes[i], /*TInfo=*/0,
2444                                            /*BitWidth=*/0,
2445                                            /*Mutable=*/false,
2446                                            ICIS_NoInit);
2447       Field->setAccess(AS_public);
2448       D->addDecl(Field);
2449     }
2450 
2451     D->completeDefinition();
2452     ObjCFastEnumerationStateType = Context.getTagDeclType(D);
2453   }
2454 
2455   return ObjCFastEnumerationStateType;
2456 }
2457 
2458 llvm::Constant *
2459 CodeGenModule::GetConstantArrayFromStringLiteral(const StringLiteral *E) {
2460   assert(!E->getType()->isPointerType() && "Strings are always arrays");
2461 
2462   // Don't emit it as the address of the string, emit the string data itself
2463   // as an inline array.
2464   if (E->getCharByteWidth() == 1) {
2465     SmallString<64> Str(E->getString());
2466 
2467     // Resize the string to the right size, which is indicated by its type.
2468     const ConstantArrayType *CAT = Context.getAsConstantArrayType(E->getType());
2469     Str.resize(CAT->getSize().getZExtValue());
2470     return llvm::ConstantDataArray::getString(VMContext, Str, false);
2471   }
2472 
2473   llvm::ArrayType *AType =
2474     cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
2475   llvm::Type *ElemTy = AType->getElementType();
2476   unsigned NumElements = AType->getNumElements();
2477 
2478   // Wide strings have either 2-byte or 4-byte elements.
2479   if (ElemTy->getPrimitiveSizeInBits() == 16) {
2480     SmallVector<uint16_t, 32> Elements;
2481     Elements.reserve(NumElements);
2482 
2483     for(unsigned i = 0, e = E->getLength(); i != e; ++i)
2484       Elements.push_back(E->getCodeUnit(i));
2485     Elements.resize(NumElements);
2486     return llvm::ConstantDataArray::get(VMContext, Elements);
2487   }
2488 
2489   assert(ElemTy->getPrimitiveSizeInBits() == 32);
2490   SmallVector<uint32_t, 32> Elements;
2491   Elements.reserve(NumElements);
2492 
2493   for(unsigned i = 0, e = E->getLength(); i != e; ++i)
2494     Elements.push_back(E->getCodeUnit(i));
2495   Elements.resize(NumElements);
2496   return llvm::ConstantDataArray::get(VMContext, Elements);
2497 }
2498 
2499 /// GetAddrOfConstantStringFromLiteral - Return a pointer to a
2500 /// constant array for the given string literal.
2501 llvm::Constant *
2502 CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
2503   CharUnits Align = getContext().getTypeAlignInChars(S->getType());
2504   if (S->isAscii() || S->isUTF8()) {
2505     SmallString<64> Str(S->getString());
2506 
2507     // Resize the string to the right size, which is indicated by its type.
2508     const ConstantArrayType *CAT = Context.getAsConstantArrayType(S->getType());
2509     Str.resize(CAT->getSize().getZExtValue());
2510     return GetAddrOfConstantString(Str, /*GlobalName*/ 0, Align.getQuantity());
2511   }
2512 
2513   // FIXME: the following does not memoize wide strings.
2514   llvm::Constant *C = GetConstantArrayFromStringLiteral(S);
2515   llvm::GlobalVariable *GV =
2516     new llvm::GlobalVariable(getModule(),C->getType(),
2517                              !LangOpts.WritableStrings,
2518                              llvm::GlobalValue::PrivateLinkage,
2519                              C,".str");
2520 
2521   GV->setAlignment(Align.getQuantity());
2522   GV->setUnnamedAddr(true);
2523   return GV;
2524 }
2525 
2526 /// GetAddrOfConstantStringFromObjCEncode - Return a pointer to a constant
2527 /// array for the given ObjCEncodeExpr node.
2528 llvm::Constant *
2529 CodeGenModule::GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *E) {
2530   std::string Str;
2531   getContext().getObjCEncodingForType(E->getEncodedType(), Str);
2532 
2533   return GetAddrOfConstantCString(Str);
2534 }
2535 
2536 
2537 /// GenerateWritableString -- Creates storage for a string literal.
2538 static llvm::GlobalVariable *GenerateStringLiteral(StringRef str,
2539                                              bool constant,
2540                                              CodeGenModule &CGM,
2541                                              const char *GlobalName,
2542                                              unsigned Alignment) {
2543   // Create Constant for this string literal. Don't add a '\0'.
2544   llvm::Constant *C =
2545       llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false);
2546 
2547   // Create a global variable for this string
2548   llvm::GlobalVariable *GV =
2549     new llvm::GlobalVariable(CGM.getModule(), C->getType(), constant,
2550                              llvm::GlobalValue::PrivateLinkage,
2551                              C, GlobalName);
2552   GV->setAlignment(Alignment);
2553   GV->setUnnamedAddr(true);
2554   return GV;
2555 }
2556 
2557 /// GetAddrOfConstantString - Returns a pointer to a character array
2558 /// containing the literal. This contents are exactly that of the
2559 /// given string, i.e. it will not be null terminated automatically;
2560 /// see GetAddrOfConstantCString. Note that whether the result is
2561 /// actually a pointer to an LLVM constant depends on
2562 /// Feature.WriteableStrings.
2563 ///
2564 /// The result has pointer to array type.
2565 llvm::Constant *CodeGenModule::GetAddrOfConstantString(StringRef Str,
2566                                                        const char *GlobalName,
2567                                                        unsigned Alignment) {
2568   // Get the default prefix if a name wasn't specified.
2569   if (!GlobalName)
2570     GlobalName = ".str";
2571 
2572   // Don't share any string literals if strings aren't constant.
2573   if (LangOpts.WritableStrings)
2574     return GenerateStringLiteral(Str, false, *this, GlobalName, Alignment);
2575 
2576   llvm::StringMapEntry<llvm::GlobalVariable *> &Entry =
2577     ConstantStringMap.GetOrCreateValue(Str);
2578 
2579   if (llvm::GlobalVariable *GV = Entry.getValue()) {
2580     if (Alignment > GV->getAlignment()) {
2581       GV->setAlignment(Alignment);
2582     }
2583     return GV;
2584   }
2585 
2586   // Create a global variable for this.
2587   llvm::GlobalVariable *GV = GenerateStringLiteral(Str, true, *this, GlobalName,
2588                                                    Alignment);
2589   Entry.setValue(GV);
2590   return GV;
2591 }
2592 
2593 /// GetAddrOfConstantCString - Returns a pointer to a character
2594 /// array containing the literal and a terminating '\0'
2595 /// character. The result has pointer to array type.
2596 llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &Str,
2597                                                         const char *GlobalName,
2598                                                         unsigned Alignment) {
2599   StringRef StrWithNull(Str.c_str(), Str.size() + 1);
2600   return GetAddrOfConstantString(StrWithNull, GlobalName, Alignment);
2601 }
2602 
2603 /// EmitObjCPropertyImplementations - Emit information for synthesized
2604 /// properties for an implementation.
2605 void CodeGenModule::EmitObjCPropertyImplementations(const
2606                                                     ObjCImplementationDecl *D) {
2607   for (ObjCImplementationDecl::propimpl_iterator
2608          i = D->propimpl_begin(), e = D->propimpl_end(); i != e; ++i) {
2609     ObjCPropertyImplDecl *PID = *i;
2610 
2611     // Dynamic is just for type-checking.
2612     if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
2613       ObjCPropertyDecl *PD = PID->getPropertyDecl();
2614 
2615       // Determine which methods need to be implemented, some may have
2616       // been overridden. Note that ::isPropertyAccessor is not the method
2617       // we want, that just indicates if the decl came from a
2618       // property. What we want to know is if the method is defined in
2619       // this implementation.
2620       if (!D->getInstanceMethod(PD->getGetterName()))
2621         CodeGenFunction(*this).GenerateObjCGetter(
2622                                  const_cast<ObjCImplementationDecl *>(D), PID);
2623       if (!PD->isReadOnly() &&
2624           !D->getInstanceMethod(PD->getSetterName()))
2625         CodeGenFunction(*this).GenerateObjCSetter(
2626                                  const_cast<ObjCImplementationDecl *>(D), PID);
2627     }
2628   }
2629 }
2630 
2631 static bool needsDestructMethod(ObjCImplementationDecl *impl) {
2632   const ObjCInterfaceDecl *iface = impl->getClassInterface();
2633   for (const ObjCIvarDecl *ivar = iface->all_declared_ivar_begin();
2634        ivar; ivar = ivar->getNextIvar())
2635     if (ivar->getType().isDestructedType())
2636       return true;
2637 
2638   return false;
2639 }
2640 
2641 /// EmitObjCIvarInitializations - Emit information for ivar initialization
2642 /// for an implementation.
2643 void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
2644   // We might need a .cxx_destruct even if we don't have any ivar initializers.
2645   if (needsDestructMethod(D)) {
2646     IdentifierInfo *II = &getContext().Idents.get(".cxx_destruct");
2647     Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
2648     ObjCMethodDecl *DTORMethod =
2649       ObjCMethodDecl::Create(getContext(), D->getLocation(), D->getLocation(),
2650                              cxxSelector, getContext().VoidTy, 0, D,
2651                              /*isInstance=*/true, /*isVariadic=*/false,
2652                           /*isPropertyAccessor=*/true, /*isImplicitlyDeclared=*/true,
2653                              /*isDefined=*/false, ObjCMethodDecl::Required);
2654     D->addInstanceMethod(DTORMethod);
2655     CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
2656     D->setHasDestructors(true);
2657   }
2658 
2659   // If the implementation doesn't have any ivar initializers, we don't need
2660   // a .cxx_construct.
2661   if (D->getNumIvarInitializers() == 0)
2662     return;
2663 
2664   IdentifierInfo *II = &getContext().Idents.get(".cxx_construct");
2665   Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
2666   // The constructor returns 'self'.
2667   ObjCMethodDecl *CTORMethod = ObjCMethodDecl::Create(getContext(),
2668                                                 D->getLocation(),
2669                                                 D->getLocation(),
2670                                                 cxxSelector,
2671                                                 getContext().getObjCIdType(), 0,
2672                                                 D, /*isInstance=*/true,
2673                                                 /*isVariadic=*/false,
2674                                                 /*isPropertyAccessor=*/true,
2675                                                 /*isImplicitlyDeclared=*/true,
2676                                                 /*isDefined=*/false,
2677                                                 ObjCMethodDecl::Required);
2678   D->addInstanceMethod(CTORMethod);
2679   CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, CTORMethod, true);
2680   D->setHasNonZeroConstructors(true);
2681 }
2682 
2683 /// EmitNamespace - Emit all declarations in a namespace.
2684 void CodeGenModule::EmitNamespace(const NamespaceDecl *ND) {
2685   for (RecordDecl::decl_iterator I = ND->decls_begin(), E = ND->decls_end();
2686        I != E; ++I)
2687     EmitTopLevelDecl(*I);
2688 }
2689 
2690 // EmitLinkageSpec - Emit all declarations in a linkage spec.
2691 void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
2692   if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
2693       LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
2694     ErrorUnsupported(LSD, "linkage spec");
2695     return;
2696   }
2697 
2698   for (RecordDecl::decl_iterator I = LSD->decls_begin(), E = LSD->decls_end();
2699        I != E; ++I) {
2700     // Meta-data for ObjC class includes references to implemented methods.
2701     // Generate class's method definitions first.
2702     if (ObjCImplDecl *OID = dyn_cast<ObjCImplDecl>(*I)) {
2703       for (ObjCContainerDecl::method_iterator M = OID->meth_begin(),
2704            MEnd = OID->meth_end();
2705            M != MEnd; ++M)
2706         EmitTopLevelDecl(*M);
2707     }
2708     EmitTopLevelDecl(*I);
2709   }
2710 }
2711 
2712 /// EmitTopLevelDecl - Emit code for a single top level declaration.
2713 void CodeGenModule::EmitTopLevelDecl(Decl *D) {
2714   // If an error has occurred, stop code generation, but continue
2715   // parsing and semantic analysis (to ensure all warnings and errors
2716   // are emitted).
2717   if (Diags.hasErrorOccurred())
2718     return;
2719 
2720   // Ignore dependent declarations.
2721   if (D->getDeclContext() && D->getDeclContext()->isDependentContext())
2722     return;
2723 
2724   switch (D->getKind()) {
2725   case Decl::CXXConversion:
2726   case Decl::CXXMethod:
2727   case Decl::Function:
2728     // Skip function templates
2729     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
2730         cast<FunctionDecl>(D)->isLateTemplateParsed())
2731       return;
2732 
2733     EmitGlobal(cast<FunctionDecl>(D));
2734     break;
2735 
2736   case Decl::Var:
2737     EmitGlobal(cast<VarDecl>(D));
2738     break;
2739 
2740   // Indirect fields from global anonymous structs and unions can be
2741   // ignored; only the actual variable requires IR gen support.
2742   case Decl::IndirectField:
2743     break;
2744 
2745   // C++ Decls
2746   case Decl::Namespace:
2747     EmitNamespace(cast<NamespaceDecl>(D));
2748     break;
2749     // No code generation needed.
2750   case Decl::UsingShadow:
2751   case Decl::Using:
2752   case Decl::UsingDirective:
2753   case Decl::ClassTemplate:
2754   case Decl::FunctionTemplate:
2755   case Decl::TypeAliasTemplate:
2756   case Decl::NamespaceAlias:
2757   case Decl::Block:
2758   case Decl::Empty:
2759     break;
2760   case Decl::CXXConstructor:
2761     // Skip function templates
2762     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
2763         cast<FunctionDecl>(D)->isLateTemplateParsed())
2764       return;
2765 
2766     EmitCXXConstructors(cast<CXXConstructorDecl>(D));
2767     break;
2768   case Decl::CXXDestructor:
2769     if (cast<FunctionDecl>(D)->isLateTemplateParsed())
2770       return;
2771     EmitCXXDestructors(cast<CXXDestructorDecl>(D));
2772     break;
2773 
2774   case Decl::StaticAssert:
2775     // Nothing to do.
2776     break;
2777 
2778   // Objective-C Decls
2779 
2780   // Forward declarations, no (immediate) code generation.
2781   case Decl::ObjCInterface:
2782   case Decl::ObjCCategory:
2783     break;
2784 
2785   case Decl::ObjCProtocol: {
2786     ObjCProtocolDecl *Proto = cast<ObjCProtocolDecl>(D);
2787     if (Proto->isThisDeclarationADefinition())
2788       ObjCRuntime->GenerateProtocol(Proto);
2789     break;
2790   }
2791 
2792   case Decl::ObjCCategoryImpl:
2793     // Categories have properties but don't support synthesize so we
2794     // can ignore them here.
2795     ObjCRuntime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
2796     break;
2797 
2798   case Decl::ObjCImplementation: {
2799     ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
2800     EmitObjCPropertyImplementations(OMD);
2801     EmitObjCIvarInitializations(OMD);
2802     ObjCRuntime->GenerateClass(OMD);
2803     // Emit global variable debug information.
2804     if (CGDebugInfo *DI = getModuleDebugInfo())
2805       if (getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
2806         DI->getOrCreateInterfaceType(getContext().getObjCInterfaceType(
2807             OMD->getClassInterface()), OMD->getLocation());
2808     break;
2809   }
2810   case Decl::ObjCMethod: {
2811     ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
2812     // If this is not a prototype, emit the body.
2813     if (OMD->getBody())
2814       CodeGenFunction(*this).GenerateObjCMethod(OMD);
2815     break;
2816   }
2817   case Decl::ObjCCompatibleAlias:
2818     ObjCRuntime->RegisterAlias(cast<ObjCCompatibleAliasDecl>(D));
2819     break;
2820 
2821   case Decl::LinkageSpec:
2822     EmitLinkageSpec(cast<LinkageSpecDecl>(D));
2823     break;
2824 
2825   case Decl::FileScopeAsm: {
2826     FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
2827     StringRef AsmString = AD->getAsmString()->getString();
2828 
2829     const std::string &S = getModule().getModuleInlineAsm();
2830     if (S.empty())
2831       getModule().setModuleInlineAsm(AsmString);
2832     else if (S.end()[-1] == '\n')
2833       getModule().setModuleInlineAsm(S + AsmString.str());
2834     else
2835       getModule().setModuleInlineAsm(S + '\n' + AsmString.str());
2836     break;
2837   }
2838 
2839   case Decl::Import: {
2840     ImportDecl *Import = cast<ImportDecl>(D);
2841 
2842     // Ignore import declarations that come from imported modules.
2843     if (clang::Module *Owner = Import->getOwningModule()) {
2844       if (getLangOpts().CurrentModule.empty() ||
2845           Owner->getTopLevelModule()->Name == getLangOpts().CurrentModule)
2846         break;
2847     }
2848 
2849     ImportedModules.insert(Import->getImportedModule());
2850     break;
2851  }
2852 
2853   default:
2854     // Make sure we handled everything we should, every other kind is a
2855     // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
2856     // function. Need to recode Decl::Kind to do that easily.
2857     assert(isa<TypeDecl>(D) && "Unsupported decl kind");
2858   }
2859 }
2860 
2861 /// Turns the given pointer into a constant.
2862 static llvm::Constant *GetPointerConstant(llvm::LLVMContext &Context,
2863                                           const void *Ptr) {
2864   uintptr_t PtrInt = reinterpret_cast<uintptr_t>(Ptr);
2865   llvm::Type *i64 = llvm::Type::getInt64Ty(Context);
2866   return llvm::ConstantInt::get(i64, PtrInt);
2867 }
2868 
2869 static void EmitGlobalDeclMetadata(CodeGenModule &CGM,
2870                                    llvm::NamedMDNode *&GlobalMetadata,
2871                                    GlobalDecl D,
2872                                    llvm::GlobalValue *Addr) {
2873   if (!GlobalMetadata)
2874     GlobalMetadata =
2875       CGM.getModule().getOrInsertNamedMetadata("clang.global.decl.ptrs");
2876 
2877   // TODO: should we report variant information for ctors/dtors?
2878   llvm::Value *Ops[] = {
2879     Addr,
2880     GetPointerConstant(CGM.getLLVMContext(), D.getDecl())
2881   };
2882   GlobalMetadata->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
2883 }
2884 
2885 /// Emits metadata nodes associating all the global values in the
2886 /// current module with the Decls they came from.  This is useful for
2887 /// projects using IR gen as a subroutine.
2888 ///
2889 /// Since there's currently no way to associate an MDNode directly
2890 /// with an llvm::GlobalValue, we create a global named metadata
2891 /// with the name 'clang.global.decl.ptrs'.
2892 void CodeGenModule::EmitDeclMetadata() {
2893   llvm::NamedMDNode *GlobalMetadata = 0;
2894 
2895   // StaticLocalDeclMap
2896   for (llvm::DenseMap<GlobalDecl,StringRef>::iterator
2897          I = MangledDeclNames.begin(), E = MangledDeclNames.end();
2898        I != E; ++I) {
2899     llvm::GlobalValue *Addr = getModule().getNamedValue(I->second);
2900     EmitGlobalDeclMetadata(*this, GlobalMetadata, I->first, Addr);
2901   }
2902 }
2903 
2904 /// Emits metadata nodes for all the local variables in the current
2905 /// function.
2906 void CodeGenFunction::EmitDeclMetadata() {
2907   if (LocalDeclMap.empty()) return;
2908 
2909   llvm::LLVMContext &Context = getLLVMContext();
2910 
2911   // Find the unique metadata ID for this name.
2912   unsigned DeclPtrKind = Context.getMDKindID("clang.decl.ptr");
2913 
2914   llvm::NamedMDNode *GlobalMetadata = 0;
2915 
2916   for (llvm::DenseMap<const Decl*, llvm::Value*>::iterator
2917          I = LocalDeclMap.begin(), E = LocalDeclMap.end(); I != E; ++I) {
2918     const Decl *D = I->first;
2919     llvm::Value *Addr = I->second;
2920 
2921     if (llvm::AllocaInst *Alloca = dyn_cast<llvm::AllocaInst>(Addr)) {
2922       llvm::Value *DAddr = GetPointerConstant(getLLVMContext(), D);
2923       Alloca->setMetadata(DeclPtrKind, llvm::MDNode::get(Context, DAddr));
2924     } else if (llvm::GlobalValue *GV = dyn_cast<llvm::GlobalValue>(Addr)) {
2925       GlobalDecl GD = GlobalDecl(cast<VarDecl>(D));
2926       EmitGlobalDeclMetadata(CGM, GlobalMetadata, GD, GV);
2927     }
2928   }
2929 }
2930 
2931 void CodeGenModule::EmitCoverageFile() {
2932   if (!getCodeGenOpts().CoverageFile.empty()) {
2933     if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
2934       llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
2935       llvm::LLVMContext &Ctx = TheModule.getContext();
2936       llvm::MDString *CoverageFile =
2937           llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
2938       for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
2939         llvm::MDNode *CU = CUNode->getOperand(i);
2940         llvm::Value *node[] = { CoverageFile, CU };
2941         llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
2942         GCov->addOperand(N);
2943       }
2944     }
2945   }
2946 }
2947 
2948 llvm::Constant *CodeGenModule::EmitUuidofInitializer(StringRef Uuid,
2949                                                      QualType GuidType) {
2950   // Sema has checked that all uuid strings are of the form
2951   // "12345678-1234-1234-1234-1234567890ab".
2952   assert(Uuid.size() == 36);
2953   const char *Uuidstr = Uuid.data();
2954   for (int i = 0; i < 36; ++i) {
2955     if (i == 8 || i == 13 || i == 18 || i == 23) assert(Uuidstr[i] == '-');
2956     else                                         assert(isHexDigit(Uuidstr[i]));
2957   }
2958 
2959   llvm::APInt Field0(32, StringRef(Uuidstr     , 8), 16);
2960   llvm::APInt Field1(16, StringRef(Uuidstr +  9, 4), 16);
2961   llvm::APInt Field2(16, StringRef(Uuidstr + 14, 4), 16);
2962   static const int Field3ValueOffsets[] = { 19, 21, 24, 26, 28, 30, 32, 34 };
2963 
2964   APValue InitStruct(APValue::UninitStruct(), /*NumBases=*/0, /*NumFields=*/4);
2965   InitStruct.getStructField(0) = APValue(llvm::APSInt(Field0));
2966   InitStruct.getStructField(1) = APValue(llvm::APSInt(Field1));
2967   InitStruct.getStructField(2) = APValue(llvm::APSInt(Field2));
2968   APValue& Arr = InitStruct.getStructField(3);
2969   Arr = APValue(APValue::UninitArray(), 8, 8);
2970   for (int t = 0; t < 8; ++t)
2971     Arr.getArrayInitializedElt(t) = APValue(llvm::APSInt(
2972           llvm::APInt(8, StringRef(Uuidstr + Field3ValueOffsets[t], 2), 16)));
2973 
2974   return EmitConstantValue(InitStruct, GuidType);
2975 }
2976