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