• 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 "CGDebugInfo.h"
16  #include "CodeGenFunction.h"
17  #include "CodeGenTBAA.h"
18  #include "CGCall.h"
19  #include "CGCXXABI.h"
20  #include "CGObjCRuntime.h"
21  #include "TargetInfo.h"
22  #include "clang/Frontend/CodeGenOptions.h"
23  #include "clang/AST/ASTContext.h"
24  #include "clang/AST/CharUnits.h"
25  #include "clang/AST/DeclObjC.h"
26  #include "clang/AST/DeclCXX.h"
27  #include "clang/AST/DeclTemplate.h"
28  #include "clang/AST/Mangle.h"
29  #include "clang/AST/RecordLayout.h"
30  #include "clang/Basic/Builtins.h"
31  #include "clang/Basic/Diagnostic.h"
32  #include "clang/Basic/SourceManager.h"
33  #include "clang/Basic/TargetInfo.h"
34  #include "clang/Basic/ConvertUTF.h"
35  #include "llvm/CallingConv.h"
36  #include "llvm/Module.h"
37  #include "llvm/Intrinsics.h"
38  #include "llvm/LLVMContext.h"
39  #include "llvm/ADT/Triple.h"
40  #include "llvm/Target/Mangler.h"
41  #include "llvm/Target/TargetData.h"
42  #include "llvm/Support/CallSite.h"
43  #include "llvm/Support/ErrorHandling.h"
44  using namespace clang;
45  using namespace CodeGen;
46  
createCXXABI(CodeGenModule & CGM)47  static CGCXXABI &createCXXABI(CodeGenModule &CGM) {
48    switch (CGM.getContext().Target.getCXXABI()) {
49    case CXXABI_ARM: return *CreateARMCXXABI(CGM);
50    case CXXABI_Itanium: return *CreateItaniumCXXABI(CGM);
51    case CXXABI_Microsoft: return *CreateMicrosoftCXXABI(CGM);
52    }
53  
54    llvm_unreachable("invalid C++ ABI kind");
55    return *CreateItaniumCXXABI(CGM);
56  }
57  
58  
CodeGenModule(ASTContext & C,const CodeGenOptions & CGO,llvm::Module & M,const llvm::TargetData & TD,Diagnostic & diags)59  CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
60                               llvm::Module &M, const llvm::TargetData &TD,
61                               Diagnostic &diags)
62    : Context(C), Features(C.getLangOptions()), CodeGenOpts(CGO), TheModule(M),
63      TheTargetData(TD), TheTargetCodeGenInfo(0), Diags(diags),
64      ABI(createCXXABI(*this)),
65      Types(C, M, TD, getTargetCodeGenInfo().getABIInfo(), ABI, CGO),
66      TBAA(0),
67      VTables(*this), Runtime(0), DebugInfo(0), ARCData(0), RRData(0),
68      CFConstantStringClassRef(0), ConstantStringClassRef(0),
69      VMContext(M.getContext()),
70      NSConcreteGlobalBlockDecl(0), NSConcreteStackBlockDecl(0),
71      NSConcreteGlobalBlock(0), NSConcreteStackBlock(0),
72      BlockObjectAssignDecl(0), BlockObjectDisposeDecl(0),
73      BlockObjectAssign(0), BlockObjectDispose(0),
74      BlockDescriptorType(0), GenericBlockLiteralType(0) {
75    if (Features.ObjC1)
76       createObjCRuntime();
77  
78    // Enable TBAA unless it's suppressed.
79    if (!CodeGenOpts.RelaxedAliasing && CodeGenOpts.OptimizationLevel > 0)
80      TBAA = new CodeGenTBAA(Context, VMContext, getLangOptions(),
81                             ABI.getMangleContext());
82  
83    // If debug info or coverage generation is enabled, create the CGDebugInfo
84    // object.
85    if (CodeGenOpts.DebugInfo || CodeGenOpts.EmitGcovArcs ||
86        CodeGenOpts.EmitGcovNotes)
87      DebugInfo = new CGDebugInfo(*this);
88  
89    Block.GlobalUniqueCount = 0;
90  
91    if (C.getLangOptions().ObjCAutoRefCount)
92      ARCData = new ARCEntrypoints();
93    RRData = new RREntrypoints();
94  
95    // Initialize the type cache.
96    llvm::LLVMContext &LLVMContext = M.getContext();
97    VoidTy = llvm::Type::getVoidTy(LLVMContext);
98    Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
99    Int32Ty = llvm::Type::getInt32Ty(LLVMContext);
100    Int64Ty = llvm::Type::getInt64Ty(LLVMContext);
101    PointerWidthInBits = C.Target.getPointerWidth(0);
102    PointerAlignInBytes =
103      C.toCharUnitsFromBits(C.Target.getPointerAlign(0)).getQuantity();
104    IntTy = llvm::IntegerType::get(LLVMContext, C.Target.getIntWidth());
105    IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
106    Int8PtrTy = Int8Ty->getPointerTo(0);
107    Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
108  }
109  
~CodeGenModule()110  CodeGenModule::~CodeGenModule() {
111    delete Runtime;
112    delete &ABI;
113    delete TBAA;
114    delete DebugInfo;
115    delete ARCData;
116    delete RRData;
117  }
118  
createObjCRuntime()119  void CodeGenModule::createObjCRuntime() {
120    if (!Features.NeXTRuntime)
121      Runtime = CreateGNUObjCRuntime(*this);
122    else
123      Runtime = CreateMacObjCRuntime(*this);
124  }
125  
Release()126  void CodeGenModule::Release() {
127    EmitDeferred();
128    EmitCXXGlobalInitFunc();
129    EmitCXXGlobalDtorFunc();
130    if (Runtime)
131      if (llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction())
132        AddGlobalCtor(ObjCInitFunction);
133    EmitCtorList(GlobalCtors, "llvm.global_ctors");
134    EmitCtorList(GlobalDtors, "llvm.global_dtors");
135    EmitAnnotations();
136    EmitLLVMUsed();
137  
138    SimplifyPersonality();
139  
140    if (getCodeGenOpts().EmitDeclMetadata)
141      EmitDeclMetadata();
142  
143    if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
144      EmitCoverageFile();
145  }
146  
UpdateCompletedType(const TagDecl * TD)147  void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
148    // Make sure that this type is translated.
149    Types.UpdateCompletedType(TD);
150    if (DebugInfo)
151      DebugInfo->UpdateCompletedType(TD);
152  }
153  
getTBAAInfo(QualType QTy)154  llvm::MDNode *CodeGenModule::getTBAAInfo(QualType QTy) {
155    if (!TBAA)
156      return 0;
157    return TBAA->getTBAAInfo(QTy);
158  }
159  
DecorateInstruction(llvm::Instruction * Inst,llvm::MDNode * TBAAInfo)160  void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
161                                          llvm::MDNode *TBAAInfo) {
162    Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
163  }
164  
isTargetDarwin() const165  bool CodeGenModule::isTargetDarwin() const {
166    return getContext().Target.getTriple().isOSDarwin();
167  }
168  
Error(SourceLocation loc,llvm::StringRef error)169  void CodeGenModule::Error(SourceLocation loc, llvm::StringRef error) {
170    unsigned diagID = getDiags().getCustomDiagID(Diagnostic::Error, error);
171    getDiags().Report(Context.getFullLoc(loc), diagID);
172  }
173  
174  /// ErrorUnsupported - Print out an error that codegen doesn't support the
175  /// specified stmt yet.
ErrorUnsupported(const Stmt * S,const char * Type,bool OmitOnError)176  void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
177                                       bool OmitOnError) {
178    if (OmitOnError && getDiags().hasErrorOccurred())
179      return;
180    unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
181                                                 "cannot compile this %0 yet");
182    std::string Msg = Type;
183    getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
184      << Msg << S->getSourceRange();
185  }
186  
187  /// ErrorUnsupported - Print out an error that codegen doesn't support the
188  /// specified decl yet.
ErrorUnsupported(const Decl * D,const char * Type,bool OmitOnError)189  void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type,
190                                       bool OmitOnError) {
191    if (OmitOnError && getDiags().hasErrorOccurred())
192      return;
193    unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
194                                                 "cannot compile this %0 yet");
195    std::string Msg = Type;
196    getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
197  }
198  
getSize(CharUnits size)199  llvm::ConstantInt *CodeGenModule::getSize(CharUnits size) {
200    return llvm::ConstantInt::get(SizeTy, size.getQuantity());
201  }
202  
setGlobalVisibility(llvm::GlobalValue * GV,const NamedDecl * D) const203  void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
204                                          const NamedDecl *D) const {
205    // Internal definitions always have default visibility.
206    if (GV->hasLocalLinkage()) {
207      GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
208      return;
209    }
210  
211    // Set visibility for definitions.
212    NamedDecl::LinkageInfo LV = D->getLinkageAndVisibility();
213    if (LV.visibilityExplicit() || !GV->hasAvailableExternallyLinkage())
214      GV->setVisibility(GetLLVMVisibility(LV.visibility()));
215  }
216  
217  /// Set the symbol visibility of type information (vtable and RTTI)
218  /// associated with the given type.
setTypeVisibility(llvm::GlobalValue * GV,const CXXRecordDecl * RD,TypeVisibilityKind TVK) const219  void CodeGenModule::setTypeVisibility(llvm::GlobalValue *GV,
220                                        const CXXRecordDecl *RD,
221                                        TypeVisibilityKind TVK) const {
222    setGlobalVisibility(GV, RD);
223  
224    if (!CodeGenOpts.HiddenWeakVTables)
225      return;
226  
227    // We never want to drop the visibility for RTTI names.
228    if (TVK == TVK_ForRTTIName)
229      return;
230  
231    // We want to drop the visibility to hidden for weak type symbols.
232    // This isn't possible if there might be unresolved references
233    // elsewhere that rely on this symbol being visible.
234  
235    // This should be kept roughly in sync with setThunkVisibility
236    // in CGVTables.cpp.
237  
238    // Preconditions.
239    if (GV->getLinkage() != llvm::GlobalVariable::LinkOnceODRLinkage ||
240        GV->getVisibility() != llvm::GlobalVariable::DefaultVisibility)
241      return;
242  
243    // Don't override an explicit visibility attribute.
244    if (RD->getExplicitVisibility())
245      return;
246  
247    switch (RD->getTemplateSpecializationKind()) {
248    // We have to disable the optimization if this is an EI definition
249    // because there might be EI declarations in other shared objects.
250    case TSK_ExplicitInstantiationDefinition:
251    case TSK_ExplicitInstantiationDeclaration:
252      return;
253  
254    // Every use of a non-template class's type information has to emit it.
255    case TSK_Undeclared:
256      break;
257  
258    // In theory, implicit instantiations can ignore the possibility of
259    // an explicit instantiation declaration because there necessarily
260    // must be an EI definition somewhere with default visibility.  In
261    // practice, it's possible to have an explicit instantiation for
262    // an arbitrary template class, and linkers aren't necessarily able
263    // to deal with mixed-visibility symbols.
264    case TSK_ExplicitSpecialization:
265    case TSK_ImplicitInstantiation:
266      if (!CodeGenOpts.HiddenWeakTemplateVTables)
267        return;
268      break;
269    }
270  
271    // If there's a key function, there may be translation units
272    // that don't have the key function's definition.  But ignore
273    // this if we're emitting RTTI under -fno-rtti.
274    if (!(TVK != TVK_ForRTTI) || Features.RTTI) {
275      if (Context.getKeyFunction(RD))
276        return;
277    }
278  
279    // Otherwise, drop the visibility to hidden.
280    GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
281    GV->setUnnamedAddr(true);
282  }
283  
getMangledName(GlobalDecl GD)284  llvm::StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
285    const NamedDecl *ND = cast<NamedDecl>(GD.getDecl());
286  
287    llvm::StringRef &Str = MangledDeclNames[GD.getCanonicalDecl()];
288    if (!Str.empty())
289      return Str;
290  
291    if (!getCXXABI().getMangleContext().shouldMangleDeclName(ND)) {
292      IdentifierInfo *II = ND->getIdentifier();
293      assert(II && "Attempt to mangle unnamed decl.");
294  
295      Str = II->getName();
296      return Str;
297    }
298  
299    llvm::SmallString<256> Buffer;
300    llvm::raw_svector_ostream Out(Buffer);
301    if (const CXXConstructorDecl *D = dyn_cast<CXXConstructorDecl>(ND))
302      getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out);
303    else if (const CXXDestructorDecl *D = dyn_cast<CXXDestructorDecl>(ND))
304      getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out);
305    else if (const BlockDecl *BD = dyn_cast<BlockDecl>(ND))
306      getCXXABI().getMangleContext().mangleBlock(BD, Out);
307    else
308      getCXXABI().getMangleContext().mangleName(ND, Out);
309  
310    // Allocate space for the mangled name.
311    Out.flush();
312    size_t Length = Buffer.size();
313    char *Name = MangledNamesAllocator.Allocate<char>(Length);
314    std::copy(Buffer.begin(), Buffer.end(), Name);
315  
316    Str = llvm::StringRef(Name, Length);
317  
318    return Str;
319  }
320  
getBlockMangledName(GlobalDecl GD,MangleBuffer & Buffer,const BlockDecl * BD)321  void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer,
322                                          const BlockDecl *BD) {
323    MangleContext &MangleCtx = getCXXABI().getMangleContext();
324    const Decl *D = GD.getDecl();
325    llvm::raw_svector_ostream Out(Buffer.getBuffer());
326    if (D == 0)
327      MangleCtx.mangleGlobalBlock(BD, Out);
328    else if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
329      MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Out);
330    else if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D))
331      MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out);
332    else
333      MangleCtx.mangleBlock(cast<DeclContext>(D), BD, Out);
334  }
335  
GetGlobalValue(llvm::StringRef Name)336  llvm::GlobalValue *CodeGenModule::GetGlobalValue(llvm::StringRef Name) {
337    return getModule().getNamedValue(Name);
338  }
339  
340  /// AddGlobalCtor - Add a function to the list that will be called before
341  /// main() runs.
AddGlobalCtor(llvm::Function * Ctor,int Priority)342  void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
343    // FIXME: Type coercion of void()* types.
344    GlobalCtors.push_back(std::make_pair(Ctor, Priority));
345  }
346  
347  /// AddGlobalDtor - Add a function to the list that will be called
348  /// when the module is unloaded.
AddGlobalDtor(llvm::Function * Dtor,int Priority)349  void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
350    // FIXME: Type coercion of void()* types.
351    GlobalDtors.push_back(std::make_pair(Dtor, Priority));
352  }
353  
EmitCtorList(const CtorList & Fns,const char * GlobalName)354  void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
355    // Ctor function type is void()*.
356    llvm::FunctionType* CtorFTy = llvm::FunctionType::get(VoidTy, false);
357    llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
358  
359    // Get the type of a ctor entry, { i32, void ()* }.
360    llvm::StructType *CtorStructTy =
361      llvm::StructType::get(llvm::Type::getInt32Ty(VMContext),
362                            llvm::PointerType::getUnqual(CtorFTy), NULL);
363  
364    // Construct the constructor and destructor arrays.
365    std::vector<llvm::Constant*> Ctors;
366    for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
367      std::vector<llvm::Constant*> S;
368      S.push_back(llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext),
369                  I->second, false));
370      S.push_back(llvm::ConstantExpr::getBitCast(I->first, CtorPFTy));
371      Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
372    }
373  
374    if (!Ctors.empty()) {
375      llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
376      new llvm::GlobalVariable(TheModule, AT, false,
377                               llvm::GlobalValue::AppendingLinkage,
378                               llvm::ConstantArray::get(AT, Ctors),
379                               GlobalName);
380    }
381  }
382  
EmitAnnotations()383  void CodeGenModule::EmitAnnotations() {
384    if (Annotations.empty())
385      return;
386  
387    // Create a new global variable for the ConstantStruct in the Module.
388    llvm::Constant *Array =
389    llvm::ConstantArray::get(llvm::ArrayType::get(Annotations[0]->getType(),
390                                                  Annotations.size()),
391                             Annotations);
392    llvm::GlobalValue *gv =
393    new llvm::GlobalVariable(TheModule, Array->getType(), false,
394                             llvm::GlobalValue::AppendingLinkage, Array,
395                             "llvm.global.annotations");
396    gv->setSection("llvm.metadata");
397  }
398  
399  llvm::GlobalValue::LinkageTypes
getFunctionLinkage(const FunctionDecl * D)400  CodeGenModule::getFunctionLinkage(const FunctionDecl *D) {
401    GVALinkage Linkage = getContext().GetGVALinkageForFunction(D);
402  
403    if (Linkage == GVA_Internal)
404      return llvm::Function::InternalLinkage;
405  
406    if (D->hasAttr<DLLExportAttr>())
407      return llvm::Function::DLLExportLinkage;
408  
409    if (D->hasAttr<WeakAttr>())
410      return llvm::Function::WeakAnyLinkage;
411  
412    // In C99 mode, 'inline' functions are guaranteed to have a strong
413    // definition somewhere else, so we can use available_externally linkage.
414    if (Linkage == GVA_C99Inline)
415      return llvm::Function::AvailableExternallyLinkage;
416  
417    // In C++, the compiler has to emit a definition in every translation unit
418    // that references the function.  We should use linkonce_odr because
419    // a) if all references in this translation unit are optimized away, we
420    // don't need to codegen it.  b) if the function persists, it needs to be
421    // merged with other definitions. c) C++ has the ODR, so we know the
422    // definition is dependable.
423    if (Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation)
424      return !Context.getLangOptions().AppleKext
425               ? llvm::Function::LinkOnceODRLinkage
426               : llvm::Function::InternalLinkage;
427  
428    // An explicit instantiation of a template has weak linkage, since
429    // explicit instantiations can occur in multiple translation units
430    // and must all be equivalent. However, we are not allowed to
431    // throw away these explicit instantiations.
432    if (Linkage == GVA_ExplicitTemplateInstantiation)
433      return !Context.getLangOptions().AppleKext
434               ? llvm::Function::WeakODRLinkage
435               : llvm::Function::InternalLinkage;
436  
437    // Otherwise, we have strong external linkage.
438    assert(Linkage == GVA_StrongExternal);
439    return llvm::Function::ExternalLinkage;
440  }
441  
442  
443  /// SetFunctionDefinitionAttributes - Set attributes for a global.
444  ///
445  /// FIXME: This is currently only done for aliases and functions, but not for
446  /// variables (these details are set in EmitGlobalVarDefinition for variables).
SetFunctionDefinitionAttributes(const FunctionDecl * D,llvm::GlobalValue * GV)447  void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
448                                                      llvm::GlobalValue *GV) {
449    SetCommonAttributes(D, GV);
450  }
451  
SetLLVMFunctionAttributes(const Decl * D,const CGFunctionInfo & Info,llvm::Function * F)452  void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
453                                                const CGFunctionInfo &Info,
454                                                llvm::Function *F) {
455    unsigned CallingConv;
456    AttributeListType AttributeList;
457    ConstructAttributeList(Info, D, AttributeList, CallingConv);
458    F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(),
459                                            AttributeList.size()));
460    F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
461  }
462  
SetLLVMFunctionAttributesForDefinition(const Decl * D,llvm::Function * F)463  void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
464                                                             llvm::Function *F) {
465    if (CodeGenOpts.UnwindTables)
466      F->setHasUWTable();
467  
468    if (!Features.Exceptions && !Features.ObjCNonFragileABI)
469      F->addFnAttr(llvm::Attribute::NoUnwind);
470  
471    if (D->hasAttr<AlwaysInlineAttr>())
472      F->addFnAttr(llvm::Attribute::AlwaysInline);
473  
474    if (D->hasAttr<NakedAttr>())
475      F->addFnAttr(llvm::Attribute::Naked);
476  
477    if (D->hasAttr<NoInlineAttr>())
478      F->addFnAttr(llvm::Attribute::NoInline);
479  
480    if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
481      F->setUnnamedAddr(true);
482  
483    if (Features.getStackProtectorMode() == LangOptions::SSPOn)
484      F->addFnAttr(llvm::Attribute::StackProtect);
485    else if (Features.getStackProtectorMode() == LangOptions::SSPReq)
486      F->addFnAttr(llvm::Attribute::StackProtectReq);
487  
488    unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
489    if (alignment)
490      F->setAlignment(alignment);
491  
492    // C++ ABI requires 2-byte alignment for member functions.
493    if (F->getAlignment() < 2 && isa<CXXMethodDecl>(D))
494      F->setAlignment(2);
495  }
496  
SetCommonAttributes(const Decl * D,llvm::GlobalValue * GV)497  void CodeGenModule::SetCommonAttributes(const Decl *D,
498                                          llvm::GlobalValue *GV) {
499    if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
500      setGlobalVisibility(GV, ND);
501    else
502      GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
503  
504    if (D->hasAttr<UsedAttr>())
505      AddUsedGlobal(GV);
506  
507    if (const SectionAttr *SA = D->getAttr<SectionAttr>())
508      GV->setSection(SA->getName());
509  
510    getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this);
511  }
512  
SetInternalFunctionAttributes(const Decl * D,llvm::Function * F,const CGFunctionInfo & FI)513  void CodeGenModule::SetInternalFunctionAttributes(const Decl *D,
514                                                    llvm::Function *F,
515                                                    const CGFunctionInfo &FI) {
516    SetLLVMFunctionAttributes(D, FI, F);
517    SetLLVMFunctionAttributesForDefinition(D, F);
518  
519    F->setLinkage(llvm::Function::InternalLinkage);
520  
521    SetCommonAttributes(D, F);
522  }
523  
SetFunctionAttributes(GlobalDecl GD,llvm::Function * F,bool IsIncompleteFunction)524  void CodeGenModule::SetFunctionAttributes(GlobalDecl GD,
525                                            llvm::Function *F,
526                                            bool IsIncompleteFunction) {
527    if (unsigned IID = F->getIntrinsicID()) {
528      // If this is an intrinsic function, set the function's attributes
529      // to the intrinsic's attributes.
530      F->setAttributes(llvm::Intrinsic::getAttributes((llvm::Intrinsic::ID)IID));
531      return;
532    }
533  
534    const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
535  
536    if (!IsIncompleteFunction)
537      SetLLVMFunctionAttributes(FD, getTypes().getFunctionInfo(GD), F);
538  
539    // Only a few attributes are set on declarations; these may later be
540    // overridden by a definition.
541  
542    if (FD->hasAttr<DLLImportAttr>()) {
543      F->setLinkage(llvm::Function::DLLImportLinkage);
544    } else if (FD->hasAttr<WeakAttr>() ||
545               FD->isWeakImported()) {
546      // "extern_weak" is overloaded in LLVM; we probably should have
547      // separate linkage types for this.
548      F->setLinkage(llvm::Function::ExternalWeakLinkage);
549    } else {
550      F->setLinkage(llvm::Function::ExternalLinkage);
551  
552      NamedDecl::LinkageInfo LV = FD->getLinkageAndVisibility();
553      if (LV.linkage() == ExternalLinkage && LV.visibilityExplicit()) {
554        F->setVisibility(GetLLVMVisibility(LV.visibility()));
555      }
556    }
557  
558    if (const SectionAttr *SA = FD->getAttr<SectionAttr>())
559      F->setSection(SA->getName());
560  }
561  
AddUsedGlobal(llvm::GlobalValue * GV)562  void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {
563    assert(!GV->isDeclaration() &&
564           "Only globals with definition can force usage.");
565    LLVMUsed.push_back(GV);
566  }
567  
EmitLLVMUsed()568  void CodeGenModule::EmitLLVMUsed() {
569    // Don't create llvm.used if there is no need.
570    if (LLVMUsed.empty())
571      return;
572  
573    llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext);
574  
575    // Convert LLVMUsed to what ConstantArray needs.
576    std::vector<llvm::Constant*> UsedArray;
577    UsedArray.resize(LLVMUsed.size());
578    for (unsigned i = 0, e = LLVMUsed.size(); i != e; ++i) {
579      UsedArray[i] =
580       llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*LLVMUsed[i]),
581                                        i8PTy);
582    }
583  
584    if (UsedArray.empty())
585      return;
586    llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, UsedArray.size());
587  
588    llvm::GlobalVariable *GV =
589      new llvm::GlobalVariable(getModule(), ATy, false,
590                               llvm::GlobalValue::AppendingLinkage,
591                               llvm::ConstantArray::get(ATy, UsedArray),
592                               "llvm.used");
593  
594    GV->setSection("llvm.metadata");
595  }
596  
EmitDeferred()597  void CodeGenModule::EmitDeferred() {
598    // Emit code for any potentially referenced deferred decls.  Since a
599    // previously unused static decl may become used during the generation of code
600    // for a static function, iterate until no changes are made.
601  
602    while (!DeferredDeclsToEmit.empty() || !DeferredVTables.empty()) {
603      if (!DeferredVTables.empty()) {
604        const CXXRecordDecl *RD = DeferredVTables.back();
605        DeferredVTables.pop_back();
606        getVTables().GenerateClassData(getVTableLinkage(RD), RD);
607        continue;
608      }
609  
610      GlobalDecl D = DeferredDeclsToEmit.back();
611      DeferredDeclsToEmit.pop_back();
612  
613      // Check to see if we've already emitted this.  This is necessary
614      // for a couple of reasons: first, decls can end up in the
615      // deferred-decls queue multiple times, and second, decls can end
616      // up with definitions in unusual ways (e.g. by an extern inline
617      // function acquiring a strong function redefinition).  Just
618      // ignore these cases.
619      //
620      // TODO: That said, looking this up multiple times is very wasteful.
621      llvm::StringRef Name = getMangledName(D);
622      llvm::GlobalValue *CGRef = GetGlobalValue(Name);
623      assert(CGRef && "Deferred decl wasn't referenced?");
624  
625      if (!CGRef->isDeclaration())
626        continue;
627  
628      // GlobalAlias::isDeclaration() defers to the aliasee, but for our
629      // purposes an alias counts as a definition.
630      if (isa<llvm::GlobalAlias>(CGRef))
631        continue;
632  
633      // Otherwise, emit the definition and move on to the next one.
634      EmitGlobalDefinition(D);
635    }
636  }
637  
638  /// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the
639  /// annotation information for a given GlobalValue.  The annotation struct is
640  /// {i8 *, i8 *, i8 *, i32}.  The first field is a constant expression, the
641  /// GlobalValue being annotated.  The second field is the constant string
642  /// created from the AnnotateAttr's annotation.  The third field is a constant
643  /// string containing the name of the translation unit.  The fourth field is
644  /// the line number in the file of the annotated value declaration.
645  ///
646  /// FIXME: this does not unique the annotation string constants, as llvm-gcc
647  ///        appears to.
648  ///
EmitAnnotateAttr(llvm::GlobalValue * GV,const AnnotateAttr * AA,unsigned LineNo)649  llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
650                                                  const AnnotateAttr *AA,
651                                                  unsigned LineNo) {
652    llvm::Module *M = &getModule();
653  
654    // get [N x i8] constants for the annotation string, and the filename string
655    // which are the 2nd and 3rd elements of the global annotation structure.
656    llvm::Type *SBP = llvm::Type::getInt8PtrTy(VMContext);
657    llvm::Constant *anno = llvm::ConstantArray::get(VMContext,
658                                                    AA->getAnnotation(), true);
659    llvm::Constant *unit = llvm::ConstantArray::get(VMContext,
660                                                    M->getModuleIdentifier(),
661                                                    true);
662  
663    // Get the two global values corresponding to the ConstantArrays we just
664    // created to hold the bytes of the strings.
665    llvm::GlobalValue *annoGV =
666      new llvm::GlobalVariable(*M, anno->getType(), false,
667                               llvm::GlobalValue::PrivateLinkage, anno,
668                               GV->getName());
669    // translation unit name string, emitted into the llvm.metadata section.
670    llvm::GlobalValue *unitGV =
671      new llvm::GlobalVariable(*M, unit->getType(), false,
672                               llvm::GlobalValue::PrivateLinkage, unit,
673                               ".str");
674    unitGV->setUnnamedAddr(true);
675  
676    // Create the ConstantStruct for the global annotation.
677    llvm::Constant *Fields[4] = {
678      llvm::ConstantExpr::getBitCast(GV, SBP),
679      llvm::ConstantExpr::getBitCast(annoGV, SBP),
680      llvm::ConstantExpr::getBitCast(unitGV, SBP),
681      llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), LineNo)
682    };
683    return llvm::ConstantStruct::getAnon(Fields);
684  }
685  
MayDeferGeneration(const ValueDecl * Global)686  bool CodeGenModule::MayDeferGeneration(const ValueDecl *Global) {
687    // Never defer when EmitAllDecls is specified.
688    if (Features.EmitAllDecls)
689      return false;
690  
691    return !getContext().DeclMustBeEmitted(Global);
692  }
693  
GetWeakRefReference(const ValueDecl * VD)694  llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
695    const AliasAttr *AA = VD->getAttr<AliasAttr>();
696    assert(AA && "No alias?");
697  
698    llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
699  
700    // See if there is already something with the target's name in the module.
701    llvm::GlobalValue *Entry = GetGlobalValue(AA->getAliasee());
702  
703    llvm::Constant *Aliasee;
704    if (isa<llvm::FunctionType>(DeclTy))
705      Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GlobalDecl(),
706                                        /*ForVTable=*/false);
707    else
708      Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
709                                      llvm::PointerType::getUnqual(DeclTy), 0);
710    if (!Entry) {
711      llvm::GlobalValue* F = cast<llvm::GlobalValue>(Aliasee);
712      F->setLinkage(llvm::Function::ExternalWeakLinkage);
713      WeakRefReferences.insert(F);
714    }
715  
716    return Aliasee;
717  }
718  
EmitGlobal(GlobalDecl GD)719  void CodeGenModule::EmitGlobal(GlobalDecl GD) {
720    const ValueDecl *Global = cast<ValueDecl>(GD.getDecl());
721  
722    // Weak references don't produce any output by themselves.
723    if (Global->hasAttr<WeakRefAttr>())
724      return;
725  
726    // If this is an alias definition (which otherwise looks like a declaration)
727    // emit it now.
728    if (Global->hasAttr<AliasAttr>())
729      return EmitAliasDefinition(GD);
730  
731    // Ignore declarations, they will be emitted on their first use.
732    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
733      if (FD->getIdentifier()) {
734        llvm::StringRef Name = FD->getName();
735        if (Name == "_Block_object_assign") {
736          BlockObjectAssignDecl = FD;
737        } else if (Name == "_Block_object_dispose") {
738          BlockObjectDisposeDecl = FD;
739        }
740      }
741  
742      // Forward declarations are emitted lazily on first use.
743      if (!FD->doesThisDeclarationHaveABody()) {
744        if (!FD->doesDeclarationForceExternallyVisibleDefinition())
745          return;
746  
747        const FunctionDecl *InlineDefinition = 0;
748        FD->getBody(InlineDefinition);
749  
750        llvm::StringRef MangledName = getMangledName(GD);
751        llvm::StringMap<GlobalDecl>::iterator DDI =
752            DeferredDecls.find(MangledName);
753        if (DDI != DeferredDecls.end())
754          DeferredDecls.erase(DDI);
755        EmitGlobalDefinition(InlineDefinition);
756        return;
757      }
758    } else {
759      const VarDecl *VD = cast<VarDecl>(Global);
760      assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
761  
762      if (VD->getIdentifier()) {
763        llvm::StringRef Name = VD->getName();
764        if (Name == "_NSConcreteGlobalBlock") {
765          NSConcreteGlobalBlockDecl = VD;
766        } else if (Name == "_NSConcreteStackBlock") {
767          NSConcreteStackBlockDecl = VD;
768        }
769      }
770  
771  
772      if (VD->isThisDeclarationADefinition() != VarDecl::Definition)
773        return;
774    }
775  
776    // Defer code generation when possible if this is a static definition, inline
777    // function etc.  These we only want to emit if they are used.
778    if (!MayDeferGeneration(Global)) {
779      // Emit the definition if it can't be deferred.
780      EmitGlobalDefinition(GD);
781      return;
782    }
783  
784    // If we're deferring emission of a C++ variable with an
785    // initializer, remember the order in which it appeared in the file.
786    if (getLangOptions().CPlusPlus && isa<VarDecl>(Global) &&
787        cast<VarDecl>(Global)->hasInit()) {
788      DelayedCXXInitPosition[Global] = CXXGlobalInits.size();
789      CXXGlobalInits.push_back(0);
790    }
791  
792    // If the value has already been used, add it directly to the
793    // DeferredDeclsToEmit list.
794    llvm::StringRef MangledName = getMangledName(GD);
795    if (GetGlobalValue(MangledName))
796      DeferredDeclsToEmit.push_back(GD);
797    else {
798      // Otherwise, remember that we saw a deferred decl with this name.  The
799      // first use of the mangled name will cause it to move into
800      // DeferredDeclsToEmit.
801      DeferredDecls[MangledName] = GD;
802    }
803  }
804  
EmitGlobalDefinition(GlobalDecl GD)805  void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) {
806    const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
807  
808    PrettyStackTraceDecl CrashInfo(const_cast<ValueDecl *>(D), D->getLocation(),
809                                   Context.getSourceManager(),
810                                   "Generating code for declaration");
811  
812    if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
813      // At -O0, don't generate IR for functions with available_externally
814      // linkage.
815      if (CodeGenOpts.OptimizationLevel == 0 &&
816          !Function->hasAttr<AlwaysInlineAttr>() &&
817          getFunctionLinkage(Function)
818                                    == llvm::Function::AvailableExternallyLinkage)
819        return;
820  
821      if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
822        // Make sure to emit the definition(s) before we emit the thunks.
823        // This is necessary for the generation of certain thunks.
824        if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(Method))
825          EmitCXXConstructor(CD, GD.getCtorType());
826        else if (const CXXDestructorDecl *DD =dyn_cast<CXXDestructorDecl>(Method))
827          EmitCXXDestructor(DD, GD.getDtorType());
828        else
829          EmitGlobalFunctionDefinition(GD);
830  
831        if (Method->isVirtual())
832          getVTables().EmitThunks(GD);
833  
834        return;
835      }
836  
837      return EmitGlobalFunctionDefinition(GD);
838    }
839  
840    if (const VarDecl *VD = dyn_cast<VarDecl>(D))
841      return EmitGlobalVarDefinition(VD);
842  
843    assert(0 && "Invalid argument to EmitGlobalDefinition()");
844  }
845  
846  /// GetOrCreateLLVMFunction - If the specified mangled name is not in the
847  /// module, create and return an llvm Function with the specified type. If there
848  /// is something in the module with the specified name, return it potentially
849  /// bitcasted to the right type.
850  ///
851  /// If D is non-null, it specifies a decl that correspond to this.  This is used
852  /// to set the attributes on the function when it is first created.
853  llvm::Constant *
GetOrCreateLLVMFunction(llvm::StringRef MangledName,llvm::Type * Ty,GlobalDecl D,bool ForVTable,llvm::Attributes ExtraAttrs)854  CodeGenModule::GetOrCreateLLVMFunction(llvm::StringRef MangledName,
855                                         llvm::Type *Ty,
856                                         GlobalDecl D, bool ForVTable,
857                                         llvm::Attributes ExtraAttrs) {
858    // Lookup the entry, lazily creating it if necessary.
859    llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
860    if (Entry) {
861      if (WeakRefReferences.count(Entry)) {
862        const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl());
863        if (FD && !FD->hasAttr<WeakAttr>())
864          Entry->setLinkage(llvm::Function::ExternalLinkage);
865  
866        WeakRefReferences.erase(Entry);
867      }
868  
869      if (Entry->getType()->getElementType() == Ty)
870        return Entry;
871  
872      // Make sure the result is of the correct type.
873      return llvm::ConstantExpr::getBitCast(Entry, Ty->getPointerTo());
874    }
875  
876    // This function doesn't have a complete type (for example, the return
877    // type is an incomplete struct). Use a fake type instead, and make
878    // sure not to try to set attributes.
879    bool IsIncompleteFunction = false;
880  
881    llvm::FunctionType *FTy;
882    if (isa<llvm::FunctionType>(Ty)) {
883      FTy = cast<llvm::FunctionType>(Ty);
884    } else {
885      FTy = llvm::FunctionType::get(VoidTy, false);
886      IsIncompleteFunction = true;
887    }
888  
889    llvm::Function *F = llvm::Function::Create(FTy,
890                                               llvm::Function::ExternalLinkage,
891                                               MangledName, &getModule());
892    assert(F->getName() == MangledName && "name was uniqued!");
893    if (D.getDecl())
894      SetFunctionAttributes(D, F, IsIncompleteFunction);
895    if (ExtraAttrs != llvm::Attribute::None)
896      F->addFnAttr(ExtraAttrs);
897  
898    // This is the first use or definition of a mangled name.  If there is a
899    // deferred decl with this name, remember that we need to emit it at the end
900    // of the file.
901    llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
902    if (DDI != DeferredDecls.end()) {
903      // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
904      // list, and remove it from DeferredDecls (since we don't need it anymore).
905      DeferredDeclsToEmit.push_back(DDI->second);
906      DeferredDecls.erase(DDI);
907  
908    // Otherwise, there are cases we have to worry about where we're
909    // using a declaration for which we must emit a definition but where
910    // we might not find a top-level definition:
911    //   - member functions defined inline in their classes
912    //   - friend functions defined inline in some class
913    //   - special member functions with implicit definitions
914    // If we ever change our AST traversal to walk into class methods,
915    // this will be unnecessary.
916    //
917    // We also don't emit a definition for a function if it's going to be an entry
918    // in a vtable, unless it's already marked as used.
919    } else if (getLangOptions().CPlusPlus && D.getDecl()) {
920      // Look for a declaration that's lexically in a record.
921      const FunctionDecl *FD = cast<FunctionDecl>(D.getDecl());
922      do {
923        if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
924          if (FD->isImplicit() && !ForVTable) {
925            assert(FD->isUsed() && "Sema didn't mark implicit function as used!");
926            DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
927            break;
928          } else if (FD->doesThisDeclarationHaveABody()) {
929            DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
930            break;
931          }
932        }
933        FD = FD->getPreviousDeclaration();
934      } while (FD);
935    }
936  
937    // Make sure the result is of the requested type.
938    if (!IsIncompleteFunction) {
939      assert(F->getType()->getElementType() == Ty);
940      return F;
941    }
942  
943    llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
944    return llvm::ConstantExpr::getBitCast(F, PTy);
945  }
946  
947  /// GetAddrOfFunction - Return the address of the given function.  If Ty is
948  /// non-null, then this function will use the specified type if it has to
949  /// create it (this occurs when we see a definition of the function).
GetAddrOfFunction(GlobalDecl GD,llvm::Type * Ty,bool ForVTable)950  llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
951                                                   llvm::Type *Ty,
952                                                   bool ForVTable) {
953    // If there was no specific requested type, just convert it now.
954    if (!Ty)
955      Ty = getTypes().ConvertType(cast<ValueDecl>(GD.getDecl())->getType());
956  
957    llvm::StringRef MangledName = getMangledName(GD);
958    return GetOrCreateLLVMFunction(MangledName, Ty, GD, ForVTable);
959  }
960  
961  /// CreateRuntimeFunction - Create a new runtime function with the specified
962  /// type and name.
963  llvm::Constant *
CreateRuntimeFunction(llvm::FunctionType * FTy,llvm::StringRef Name,llvm::Attributes ExtraAttrs)964  CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy,
965                                       llvm::StringRef Name,
966                                       llvm::Attributes ExtraAttrs) {
967    return GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
968                                   ExtraAttrs);
969  }
970  
DeclIsConstantGlobal(ASTContext & Context,const VarDecl * D,bool ConstantInit)971  static bool DeclIsConstantGlobal(ASTContext &Context, const VarDecl *D,
972                                   bool ConstantInit) {
973    if (!D->getType().isConstant(Context) && !D->getType()->isReferenceType())
974      return false;
975  
976    if (Context.getLangOptions().CPlusPlus) {
977      if (const RecordType *Record
978            = Context.getBaseElementType(D->getType())->getAs<RecordType>())
979        return ConstantInit &&
980               cast<CXXRecordDecl>(Record->getDecl())->isPOD() &&
981               !cast<CXXRecordDecl>(Record->getDecl())->hasMutableFields();
982    }
983  
984    return true;
985  }
986  
987  /// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,
988  /// create and return an llvm GlobalVariable with the specified type.  If there
989  /// is something in the module with the specified name, return it potentially
990  /// bitcasted to the right type.
991  ///
992  /// If D is non-null, it specifies a decl that correspond to this.  This is used
993  /// to set the attributes on the global when it is first created.
994  llvm::Constant *
GetOrCreateLLVMGlobal(llvm::StringRef MangledName,llvm::PointerType * Ty,const VarDecl * D,bool UnnamedAddr)995  CodeGenModule::GetOrCreateLLVMGlobal(llvm::StringRef MangledName,
996                                       llvm::PointerType *Ty,
997                                       const VarDecl *D,
998                                       bool UnnamedAddr) {
999    // Lookup the entry, lazily creating it if necessary.
1000    llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1001    if (Entry) {
1002      if (WeakRefReferences.count(Entry)) {
1003        if (D && !D->hasAttr<WeakAttr>())
1004          Entry->setLinkage(llvm::Function::ExternalLinkage);
1005  
1006        WeakRefReferences.erase(Entry);
1007      }
1008  
1009      if (UnnamedAddr)
1010        Entry->setUnnamedAddr(true);
1011  
1012      if (Entry->getType() == Ty)
1013        return Entry;
1014  
1015      // Make sure the result is of the correct type.
1016      return llvm::ConstantExpr::getBitCast(Entry, Ty);
1017    }
1018  
1019    // This is the first use or definition of a mangled name.  If there is a
1020    // deferred decl with this name, remember that we need to emit it at the end
1021    // of the file.
1022    llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
1023    if (DDI != DeferredDecls.end()) {
1024      // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
1025      // list, and remove it from DeferredDecls (since we don't need it anymore).
1026      DeferredDeclsToEmit.push_back(DDI->second);
1027      DeferredDecls.erase(DDI);
1028    }
1029  
1030    llvm::GlobalVariable *GV =
1031      new llvm::GlobalVariable(getModule(), Ty->getElementType(), false,
1032                               llvm::GlobalValue::ExternalLinkage,
1033                               0, MangledName, 0,
1034                               false, Ty->getAddressSpace());
1035  
1036    // Handle things which are present even on external declarations.
1037    if (D) {
1038      // FIXME: This code is overly simple and should be merged with other global
1039      // handling.
1040      GV->setConstant(DeclIsConstantGlobal(Context, D, false));
1041  
1042      // Set linkage and visibility in case we never see a definition.
1043      NamedDecl::LinkageInfo LV = D->getLinkageAndVisibility();
1044      if (LV.linkage() != ExternalLinkage) {
1045        // Don't set internal linkage on declarations.
1046      } else {
1047        if (D->hasAttr<DLLImportAttr>())
1048          GV->setLinkage(llvm::GlobalValue::DLLImportLinkage);
1049        else if (D->hasAttr<WeakAttr>() || D->isWeakImported())
1050          GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
1051  
1052        // Set visibility on a declaration only if it's explicit.
1053        if (LV.visibilityExplicit())
1054          GV->setVisibility(GetLLVMVisibility(LV.visibility()));
1055      }
1056  
1057      GV->setThreadLocal(D->isThreadSpecified());
1058    }
1059  
1060    return GV;
1061  }
1062  
1063  
1064  llvm::GlobalVariable *
CreateOrReplaceCXXRuntimeVariable(llvm::StringRef Name,llvm::Type * Ty,llvm::GlobalValue::LinkageTypes Linkage)1065  CodeGenModule::CreateOrReplaceCXXRuntimeVariable(llvm::StringRef Name,
1066                                        llvm::Type *Ty,
1067                                        llvm::GlobalValue::LinkageTypes Linkage) {
1068    llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name);
1069    llvm::GlobalVariable *OldGV = 0;
1070  
1071  
1072    if (GV) {
1073      // Check if the variable has the right type.
1074      if (GV->getType()->getElementType() == Ty)
1075        return GV;
1076  
1077      // Because C++ name mangling, the only way we can end up with an already
1078      // existing global with the same name is if it has been declared extern "C".
1079        assert(GV->isDeclaration() && "Declaration has wrong type!");
1080      OldGV = GV;
1081    }
1082  
1083    // Create a new variable.
1084    GV = new llvm::GlobalVariable(getModule(), Ty, /*isConstant=*/true,
1085                                  Linkage, 0, Name);
1086  
1087    if (OldGV) {
1088      // Replace occurrences of the old variable if needed.
1089      GV->takeName(OldGV);
1090  
1091      if (!OldGV->use_empty()) {
1092        llvm::Constant *NewPtrForOldDecl =
1093        llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
1094        OldGV->replaceAllUsesWith(NewPtrForOldDecl);
1095      }
1096  
1097      OldGV->eraseFromParent();
1098    }
1099  
1100    return GV;
1101  }
1102  
1103  /// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
1104  /// given global variable.  If Ty is non-null and if the global doesn't exist,
1105  /// then it will be greated with the specified type instead of whatever the
1106  /// normal requested type would be.
GetAddrOfGlobalVar(const VarDecl * D,llvm::Type * Ty)1107  llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
1108                                                    llvm::Type *Ty) {
1109    assert(D->hasGlobalStorage() && "Not a global variable");
1110    QualType ASTTy = D->getType();
1111    if (Ty == 0)
1112      Ty = getTypes().ConvertTypeForMem(ASTTy);
1113  
1114    llvm::PointerType *PTy =
1115      llvm::PointerType::get(Ty, getContext().getTargetAddressSpace(ASTTy));
1116  
1117    llvm::StringRef MangledName = getMangledName(D);
1118    return GetOrCreateLLVMGlobal(MangledName, PTy, D);
1119  }
1120  
1121  /// CreateRuntimeVariable - Create a new runtime global variable with the
1122  /// specified type and name.
1123  llvm::Constant *
CreateRuntimeVariable(llvm::Type * Ty,llvm::StringRef Name)1124  CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
1125                                       llvm::StringRef Name) {
1126    return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), 0,
1127                                 true);
1128  }
1129  
EmitTentativeDefinition(const VarDecl * D)1130  void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
1131    assert(!D->getInit() && "Cannot emit definite definitions here!");
1132  
1133    if (MayDeferGeneration(D)) {
1134      // If we have not seen a reference to this variable yet, place it
1135      // into the deferred declarations table to be emitted if needed
1136      // later.
1137      llvm::StringRef MangledName = getMangledName(D);
1138      if (!GetGlobalValue(MangledName)) {
1139        DeferredDecls[MangledName] = D;
1140        return;
1141      }
1142    }
1143  
1144    // The tentative definition is the only definition.
1145    EmitGlobalVarDefinition(D);
1146  }
1147  
EmitVTable(CXXRecordDecl * Class,bool DefinitionRequired)1148  void CodeGenModule::EmitVTable(CXXRecordDecl *Class, bool DefinitionRequired) {
1149    if (DefinitionRequired)
1150      getVTables().GenerateClassData(getVTableLinkage(Class), Class);
1151  }
1152  
1153  llvm::GlobalVariable::LinkageTypes
getVTableLinkage(const CXXRecordDecl * RD)1154  CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
1155    if (RD->getLinkage() != ExternalLinkage)
1156      return llvm::GlobalVariable::InternalLinkage;
1157  
1158    if (const CXXMethodDecl *KeyFunction
1159                                      = RD->getASTContext().getKeyFunction(RD)) {
1160      // If this class has a key function, use that to determine the linkage of
1161      // the vtable.
1162      const FunctionDecl *Def = 0;
1163      if (KeyFunction->hasBody(Def))
1164        KeyFunction = cast<CXXMethodDecl>(Def);
1165  
1166      switch (KeyFunction->getTemplateSpecializationKind()) {
1167        case TSK_Undeclared:
1168        case TSK_ExplicitSpecialization:
1169          // When compiling with optimizations turned on, we emit all vtables,
1170          // even if the key function is not defined in the current translation
1171          // unit. If this is the case, use available_externally linkage.
1172          if (!Def && CodeGenOpts.OptimizationLevel)
1173            return llvm::GlobalVariable::AvailableExternallyLinkage;
1174  
1175          if (KeyFunction->isInlined())
1176            return !Context.getLangOptions().AppleKext ?
1177                     llvm::GlobalVariable::LinkOnceODRLinkage :
1178                     llvm::Function::InternalLinkage;
1179  
1180          return llvm::GlobalVariable::ExternalLinkage;
1181  
1182        case TSK_ImplicitInstantiation:
1183          return !Context.getLangOptions().AppleKext ?
1184                   llvm::GlobalVariable::LinkOnceODRLinkage :
1185                   llvm::Function::InternalLinkage;
1186  
1187        case TSK_ExplicitInstantiationDefinition:
1188          return !Context.getLangOptions().AppleKext ?
1189                   llvm::GlobalVariable::WeakODRLinkage :
1190                   llvm::Function::InternalLinkage;
1191  
1192        case TSK_ExplicitInstantiationDeclaration:
1193          // FIXME: Use available_externally linkage. However, this currently
1194          // breaks LLVM's build due to undefined symbols.
1195          //      return llvm::GlobalVariable::AvailableExternallyLinkage;
1196          return !Context.getLangOptions().AppleKext ?
1197                   llvm::GlobalVariable::LinkOnceODRLinkage :
1198                   llvm::Function::InternalLinkage;
1199      }
1200    }
1201  
1202    if (Context.getLangOptions().AppleKext)
1203      return llvm::Function::InternalLinkage;
1204  
1205    switch (RD->getTemplateSpecializationKind()) {
1206    case TSK_Undeclared:
1207    case TSK_ExplicitSpecialization:
1208    case TSK_ImplicitInstantiation:
1209      // FIXME: Use available_externally linkage. However, this currently
1210      // breaks LLVM's build due to undefined symbols.
1211      //   return llvm::GlobalVariable::AvailableExternallyLinkage;
1212    case TSK_ExplicitInstantiationDeclaration:
1213      return llvm::GlobalVariable::LinkOnceODRLinkage;
1214  
1215    case TSK_ExplicitInstantiationDefinition:
1216        return llvm::GlobalVariable::WeakODRLinkage;
1217    }
1218  
1219    // Silence GCC warning.
1220    return llvm::GlobalVariable::LinkOnceODRLinkage;
1221  }
1222  
GetTargetTypeStoreSize(llvm::Type * Ty) const1223  CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) const {
1224      return Context.toCharUnitsFromBits(
1225        TheTargetData.getTypeStoreSizeInBits(Ty));
1226  }
1227  
EmitGlobalVarDefinition(const VarDecl * D)1228  void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
1229    llvm::Constant *Init = 0;
1230    QualType ASTTy = D->getType();
1231    bool NonConstInit = false;
1232  
1233    const Expr *InitExpr = D->getAnyInitializer();
1234  
1235    if (!InitExpr) {
1236      // This is a tentative definition; tentative definitions are
1237      // implicitly initialized with { 0 }.
1238      //
1239      // Note that tentative definitions are only emitted at the end of
1240      // a translation unit, so they should never have incomplete
1241      // type. In addition, EmitTentativeDefinition makes sure that we
1242      // never attempt to emit a tentative definition if a real one
1243      // exists. A use may still exists, however, so we still may need
1244      // to do a RAUW.
1245      assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
1246      Init = EmitNullConstant(D->getType());
1247    } else {
1248      Init = EmitConstantExpr(InitExpr, D->getType());
1249      if (!Init) {
1250        QualType T = InitExpr->getType();
1251        if (D->getType()->isReferenceType())
1252          T = D->getType();
1253  
1254        if (getLangOptions().CPlusPlus) {
1255          Init = EmitNullConstant(T);
1256          NonConstInit = true;
1257        } else {
1258          ErrorUnsupported(D, "static initializer");
1259          Init = llvm::UndefValue::get(getTypes().ConvertType(T));
1260        }
1261      } else {
1262        // We don't need an initializer, so remove the entry for the delayed
1263        // initializer position (just in case this entry was delayed).
1264        if (getLangOptions().CPlusPlus)
1265          DelayedCXXInitPosition.erase(D);
1266      }
1267    }
1268  
1269    llvm::Type* InitType = Init->getType();
1270    llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
1271  
1272    // Strip off a bitcast if we got one back.
1273    if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
1274      assert(CE->getOpcode() == llvm::Instruction::BitCast ||
1275             // all zero index gep.
1276             CE->getOpcode() == llvm::Instruction::GetElementPtr);
1277      Entry = CE->getOperand(0);
1278    }
1279  
1280    // Entry is now either a Function or GlobalVariable.
1281    llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(Entry);
1282  
1283    // We have a definition after a declaration with the wrong type.
1284    // We must make a new GlobalVariable* and update everything that used OldGV
1285    // (a declaration or tentative definition) with the new GlobalVariable*
1286    // (which will be a definition).
1287    //
1288    // This happens if there is a prototype for a global (e.g.
1289    // "extern int x[];") and then a definition of a different type (e.g.
1290    // "int x[10];"). This also happens when an initializer has a different type
1291    // from the type of the global (this happens with unions).
1292    if (GV == 0 ||
1293        GV->getType()->getElementType() != InitType ||
1294        GV->getType()->getAddressSpace() !=
1295          getContext().getTargetAddressSpace(ASTTy)) {
1296  
1297      // Move the old entry aside so that we'll create a new one.
1298      Entry->setName(llvm::StringRef());
1299  
1300      // Make a new global with the correct type, this is now guaranteed to work.
1301      GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
1302  
1303      // Replace all uses of the old global with the new global
1304      llvm::Constant *NewPtrForOldDecl =
1305          llvm::ConstantExpr::getBitCast(GV, Entry->getType());
1306      Entry->replaceAllUsesWith(NewPtrForOldDecl);
1307  
1308      // Erase the old global, since it is no longer used.
1309      cast<llvm::GlobalValue>(Entry)->eraseFromParent();
1310    }
1311  
1312    if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) {
1313      SourceManager &SM = Context.getSourceManager();
1314      AddAnnotation(EmitAnnotateAttr(GV, AA,
1315                                SM.getInstantiationLineNumber(D->getLocation())));
1316    }
1317  
1318    GV->setInitializer(Init);
1319  
1320    // If it is safe to mark the global 'constant', do so now.
1321    GV->setConstant(false);
1322    if (!NonConstInit && DeclIsConstantGlobal(Context, D, true))
1323      GV->setConstant(true);
1324  
1325    GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
1326  
1327    // Set the llvm linkage type as appropriate.
1328    llvm::GlobalValue::LinkageTypes Linkage =
1329      GetLLVMLinkageVarDefinition(D, GV);
1330    GV->setLinkage(Linkage);
1331    if (Linkage == llvm::GlobalVariable::CommonLinkage)
1332      // common vars aren't constant even if declared const.
1333      GV->setConstant(false);
1334  
1335    SetCommonAttributes(D, GV);
1336  
1337    // Emit the initializer function if necessary.
1338    if (NonConstInit)
1339      EmitCXXGlobalVarDeclInitFunc(D, GV);
1340  
1341    // Emit global variable debug information.
1342    if (CGDebugInfo *DI = getModuleDebugInfo()) {
1343      DI->setLocation(D->getLocation());
1344      DI->EmitGlobalVariable(GV, D);
1345    }
1346  }
1347  
1348  llvm::GlobalValue::LinkageTypes
GetLLVMLinkageVarDefinition(const VarDecl * D,llvm::GlobalVariable * GV)1349  CodeGenModule::GetLLVMLinkageVarDefinition(const VarDecl *D,
1350                                             llvm::GlobalVariable *GV) {
1351    GVALinkage Linkage = getContext().GetGVALinkageForVariable(D);
1352    if (Linkage == GVA_Internal)
1353      return llvm::Function::InternalLinkage;
1354    else if (D->hasAttr<DLLImportAttr>())
1355      return llvm::Function::DLLImportLinkage;
1356    else if (D->hasAttr<DLLExportAttr>())
1357      return llvm::Function::DLLExportLinkage;
1358    else if (D->hasAttr<WeakAttr>()) {
1359      if (GV->isConstant())
1360        return llvm::GlobalVariable::WeakODRLinkage;
1361      else
1362        return llvm::GlobalVariable::WeakAnyLinkage;
1363    } else if (Linkage == GVA_TemplateInstantiation ||
1364               Linkage == GVA_ExplicitTemplateInstantiation)
1365      return llvm::GlobalVariable::WeakODRLinkage;
1366    else if (!getLangOptions().CPlusPlus &&
1367             ((!CodeGenOpts.NoCommon && !D->getAttr<NoCommonAttr>()) ||
1368               D->getAttr<CommonAttr>()) &&
1369             !D->hasExternalStorage() && !D->getInit() &&
1370             !D->getAttr<SectionAttr>() && !D->isThreadSpecified() &&
1371             !D->getAttr<WeakImportAttr>()) {
1372      // Thread local vars aren't considered common linkage.
1373      return llvm::GlobalVariable::CommonLinkage;
1374    }
1375    return llvm::GlobalVariable::ExternalLinkage;
1376  }
1377  
1378  /// ReplaceUsesOfNonProtoTypeWithRealFunction - This function is called when we
1379  /// implement a function with no prototype, e.g. "int foo() {}".  If there are
1380  /// existing call uses of the old function in the module, this adjusts them to
1381  /// call the new function directly.
1382  ///
1383  /// This is not just a cleanup: the always_inline pass requires direct calls to
1384  /// functions to be able to inline them.  If there is a bitcast in the way, it
1385  /// won't inline them.  Instcombine normally deletes these calls, but it isn't
1386  /// run at -O0.
ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue * Old,llvm::Function * NewFn)1387  static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
1388                                                        llvm::Function *NewFn) {
1389    // If we're redefining a global as a function, don't transform it.
1390    llvm::Function *OldFn = dyn_cast<llvm::Function>(Old);
1391    if (OldFn == 0) return;
1392  
1393    llvm::Type *NewRetTy = NewFn->getReturnType();
1394    llvm::SmallVector<llvm::Value*, 4> ArgList;
1395  
1396    for (llvm::Value::use_iterator UI = OldFn->use_begin(), E = OldFn->use_end();
1397         UI != E; ) {
1398      // TODO: Do invokes ever occur in C code?  If so, we should handle them too.
1399      llvm::Value::use_iterator I = UI++; // Increment before the CI is erased.
1400      llvm::CallInst *CI = dyn_cast<llvm::CallInst>(*I);
1401      if (!CI) continue; // FIXME: when we allow Invoke, just do CallSite CS(*I)
1402      llvm::CallSite CS(CI);
1403      if (!CI || !CS.isCallee(I)) continue;
1404  
1405      // If the return types don't match exactly, and if the call isn't dead, then
1406      // we can't transform this call.
1407      if (CI->getType() != NewRetTy && !CI->use_empty())
1408        continue;
1409  
1410      // If the function was passed too few arguments, don't transform.  If extra
1411      // arguments were passed, we silently drop them.  If any of the types
1412      // mismatch, we don't transform.
1413      unsigned ArgNo = 0;
1414      bool DontTransform = false;
1415      for (llvm::Function::arg_iterator AI = NewFn->arg_begin(),
1416           E = NewFn->arg_end(); AI != E; ++AI, ++ArgNo) {
1417        if (CS.arg_size() == ArgNo ||
1418            CS.getArgument(ArgNo)->getType() != AI->getType()) {
1419          DontTransform = true;
1420          break;
1421        }
1422      }
1423      if (DontTransform)
1424        continue;
1425  
1426      // Okay, we can transform this.  Create the new call instruction and copy
1427      // over the required information.
1428      ArgList.append(CS.arg_begin(), CS.arg_begin() + ArgNo);
1429      llvm::CallInst *NewCall = llvm::CallInst::Create(NewFn, ArgList, "", CI);
1430      ArgList.clear();
1431      if (!NewCall->getType()->isVoidTy())
1432        NewCall->takeName(CI);
1433      NewCall->setAttributes(CI->getAttributes());
1434      NewCall->setCallingConv(CI->getCallingConv());
1435  
1436      // Finally, remove the old call, replacing any uses with the new one.
1437      if (!CI->use_empty())
1438        CI->replaceAllUsesWith(NewCall);
1439  
1440      // Copy debug location attached to CI.
1441      if (!CI->getDebugLoc().isUnknown())
1442        NewCall->setDebugLoc(CI->getDebugLoc());
1443      CI->eraseFromParent();
1444    }
1445  }
1446  
1447  
EmitGlobalFunctionDefinition(GlobalDecl GD)1448  void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
1449    const FunctionDecl *D = cast<FunctionDecl>(GD.getDecl());
1450  
1451    // Compute the function info and LLVM type.
1452    const CGFunctionInfo &FI = getTypes().getFunctionInfo(GD);
1453    bool variadic = false;
1454    if (const FunctionProtoType *fpt = D->getType()->getAs<FunctionProtoType>())
1455      variadic = fpt->isVariadic();
1456    llvm::FunctionType *Ty = getTypes().GetFunctionType(FI, variadic);
1457  
1458    // Get or create the prototype for the function.
1459    llvm::Constant *Entry = GetAddrOfFunction(GD, Ty);
1460  
1461    // Strip off a bitcast if we got one back.
1462    if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
1463      assert(CE->getOpcode() == llvm::Instruction::BitCast);
1464      Entry = CE->getOperand(0);
1465    }
1466  
1467  
1468    if (cast<llvm::GlobalValue>(Entry)->getType()->getElementType() != Ty) {
1469      llvm::GlobalValue *OldFn = cast<llvm::GlobalValue>(Entry);
1470  
1471      // If the types mismatch then we have to rewrite the definition.
1472      assert(OldFn->isDeclaration() &&
1473             "Shouldn't replace non-declaration");
1474  
1475      // F is the Function* for the one with the wrong type, we must make a new
1476      // Function* and update everything that used F (a declaration) with the new
1477      // Function* (which will be a definition).
1478      //
1479      // This happens if there is a prototype for a function
1480      // (e.g. "int f()") and then a definition of a different type
1481      // (e.g. "int f(int x)").  Move the old function aside so that it
1482      // doesn't interfere with GetAddrOfFunction.
1483      OldFn->setName(llvm::StringRef());
1484      llvm::Function *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
1485  
1486      // If this is an implementation of a function without a prototype, try to
1487      // replace any existing uses of the function (which may be calls) with uses
1488      // of the new function
1489      if (D->getType()->isFunctionNoProtoType()) {
1490        ReplaceUsesOfNonProtoTypeWithRealFunction(OldFn, NewFn);
1491        OldFn->removeDeadConstantUsers();
1492      }
1493  
1494      // Replace uses of F with the Function we will endow with a body.
1495      if (!Entry->use_empty()) {
1496        llvm::Constant *NewPtrForOldDecl =
1497          llvm::ConstantExpr::getBitCast(NewFn, Entry->getType());
1498        Entry->replaceAllUsesWith(NewPtrForOldDecl);
1499      }
1500  
1501      // Ok, delete the old function now, which is dead.
1502      OldFn->eraseFromParent();
1503  
1504      Entry = NewFn;
1505    }
1506  
1507    // We need to set linkage and visibility on the function before
1508    // generating code for it because various parts of IR generation
1509    // want to propagate this information down (e.g. to local static
1510    // declarations).
1511    llvm::Function *Fn = cast<llvm::Function>(Entry);
1512    setFunctionLinkage(D, Fn);
1513  
1514    // FIXME: this is redundant with part of SetFunctionDefinitionAttributes
1515    setGlobalVisibility(Fn, D);
1516  
1517    CodeGenFunction(*this).GenerateCode(D, Fn, FI);
1518  
1519    SetFunctionDefinitionAttributes(D, Fn);
1520    SetLLVMFunctionAttributesForDefinition(D, Fn);
1521  
1522    if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>())
1523      AddGlobalCtor(Fn, CA->getPriority());
1524    if (const DestructorAttr *DA = D->getAttr<DestructorAttr>())
1525      AddGlobalDtor(Fn, DA->getPriority());
1526  }
1527  
EmitAliasDefinition(GlobalDecl GD)1528  void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
1529    const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
1530    const AliasAttr *AA = D->getAttr<AliasAttr>();
1531    assert(AA && "Not an alias?");
1532  
1533    llvm::StringRef MangledName = getMangledName(GD);
1534  
1535    // If there is a definition in the module, then it wins over the alias.
1536    // This is dubious, but allow it to be safe.  Just ignore the alias.
1537    llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1538    if (Entry && !Entry->isDeclaration())
1539      return;
1540  
1541    llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
1542  
1543    // Create a reference to the named value.  This ensures that it is emitted
1544    // if a deferred decl.
1545    llvm::Constant *Aliasee;
1546    if (isa<llvm::FunctionType>(DeclTy))
1547      Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GlobalDecl(),
1548                                        /*ForVTable=*/false);
1549    else
1550      Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
1551                                      llvm::PointerType::getUnqual(DeclTy), 0);
1552  
1553    // Create the new alias itself, but don't set a name yet.
1554    llvm::GlobalValue *GA =
1555      new llvm::GlobalAlias(Aliasee->getType(),
1556                            llvm::Function::ExternalLinkage,
1557                            "", Aliasee, &getModule());
1558  
1559    if (Entry) {
1560      assert(Entry->isDeclaration());
1561  
1562      // If there is a declaration in the module, then we had an extern followed
1563      // by the alias, as in:
1564      //   extern int test6();
1565      //   ...
1566      //   int test6() __attribute__((alias("test7")));
1567      //
1568      // Remove it and replace uses of it with the alias.
1569      GA->takeName(Entry);
1570  
1571      Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
1572                                                            Entry->getType()));
1573      Entry->eraseFromParent();
1574    } else {
1575      GA->setName(MangledName);
1576    }
1577  
1578    // Set attributes which are particular to an alias; this is a
1579    // specialization of the attributes which may be set on a global
1580    // variable/function.
1581    if (D->hasAttr<DLLExportAttr>()) {
1582      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1583        // The dllexport attribute is ignored for undefined symbols.
1584        if (FD->hasBody())
1585          GA->setLinkage(llvm::Function::DLLExportLinkage);
1586      } else {
1587        GA->setLinkage(llvm::Function::DLLExportLinkage);
1588      }
1589    } else if (D->hasAttr<WeakAttr>() ||
1590               D->hasAttr<WeakRefAttr>() ||
1591               D->isWeakImported()) {
1592      GA->setLinkage(llvm::Function::WeakAnyLinkage);
1593    }
1594  
1595    SetCommonAttributes(D, GA);
1596  }
1597  
1598  /// getBuiltinLibFunction - Given a builtin id for a function like
1599  /// "__builtin_fabsf", return a Function* for "fabsf".
getBuiltinLibFunction(const FunctionDecl * FD,unsigned BuiltinID)1600  llvm::Value *CodeGenModule::getBuiltinLibFunction(const FunctionDecl *FD,
1601                                                    unsigned BuiltinID) {
1602    assert((Context.BuiltinInfo.isLibFunction(BuiltinID) ||
1603            Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) &&
1604           "isn't a lib fn");
1605  
1606    // Get the name, skip over the __builtin_ prefix (if necessary).
1607    llvm::StringRef Name;
1608    GlobalDecl D(FD);
1609  
1610    // If the builtin has been declared explicitly with an assembler label,
1611    // use the mangled name. This differs from the plain label on platforms
1612    // that prefix labels.
1613    if (FD->hasAttr<AsmLabelAttr>())
1614      Name = getMangledName(D);
1615    else if (Context.BuiltinInfo.isLibFunction(BuiltinID))
1616      Name = Context.BuiltinInfo.GetName(BuiltinID) + 10;
1617    else
1618      Name = Context.BuiltinInfo.GetName(BuiltinID);
1619  
1620  
1621    llvm::FunctionType *Ty =
1622      cast<llvm::FunctionType>(getTypes().ConvertType(FD->getType()));
1623  
1624    return GetOrCreateLLVMFunction(Name, Ty, D, /*ForVTable=*/false);
1625  }
1626  
getIntrinsic(unsigned IID,llvm::ArrayRef<llvm::Type * > Tys)1627  llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,
1628                                              llvm::ArrayRef<llvm::Type*> Tys) {
1629    return llvm::Intrinsic::getDeclaration(&getModule(), (llvm::Intrinsic::ID)IID,
1630                                           Tys);
1631  }
1632  
1633  static llvm::StringMapEntry<llvm::Constant*> &
GetConstantCFStringEntry(llvm::StringMap<llvm::Constant * > & Map,const StringLiteral * Literal,bool TargetIsLSB,bool & IsUTF16,unsigned & StringLength)1634  GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*> &Map,
1635                           const StringLiteral *Literal,
1636                           bool TargetIsLSB,
1637                           bool &IsUTF16,
1638                           unsigned &StringLength) {
1639    llvm::StringRef String = Literal->getString();
1640    unsigned NumBytes = String.size();
1641  
1642    // Check for simple case.
1643    if (!Literal->containsNonAsciiOrNull()) {
1644      StringLength = NumBytes;
1645      return Map.GetOrCreateValue(String);
1646    }
1647  
1648    // Otherwise, convert the UTF8 literals into a byte string.
1649    llvm::SmallVector<UTF16, 128> ToBuf(NumBytes);
1650    const UTF8 *FromPtr = (UTF8 *)String.data();
1651    UTF16 *ToPtr = &ToBuf[0];
1652  
1653    (void)ConvertUTF8toUTF16(&FromPtr, FromPtr + NumBytes,
1654                             &ToPtr, ToPtr + NumBytes,
1655                             strictConversion);
1656  
1657    // ConvertUTF8toUTF16 returns the length in ToPtr.
1658    StringLength = ToPtr - &ToBuf[0];
1659  
1660    // Render the UTF-16 string into a byte array and convert to the target byte
1661    // order.
1662    //
1663    // FIXME: This isn't something we should need to do here.
1664    llvm::SmallString<128> AsBytes;
1665    AsBytes.reserve(StringLength * 2);
1666    for (unsigned i = 0; i != StringLength; ++i) {
1667      unsigned short Val = ToBuf[i];
1668      if (TargetIsLSB) {
1669        AsBytes.push_back(Val & 0xFF);
1670        AsBytes.push_back(Val >> 8);
1671      } else {
1672        AsBytes.push_back(Val >> 8);
1673        AsBytes.push_back(Val & 0xFF);
1674      }
1675    }
1676    // Append one extra null character, the second is automatically added by our
1677    // caller.
1678    AsBytes.push_back(0);
1679  
1680    IsUTF16 = true;
1681    return Map.GetOrCreateValue(llvm::StringRef(AsBytes.data(), AsBytes.size()));
1682  }
1683  
1684  static llvm::StringMapEntry<llvm::Constant*> &
GetConstantStringEntry(llvm::StringMap<llvm::Constant * > & Map,const StringLiteral * Literal,unsigned & StringLength)1685  GetConstantStringEntry(llvm::StringMap<llvm::Constant*> &Map,
1686  		       const StringLiteral *Literal,
1687  		       unsigned &StringLength)
1688  {
1689  	llvm::StringRef String = Literal->getString();
1690  	StringLength = String.size();
1691  	return Map.GetOrCreateValue(String);
1692  }
1693  
1694  llvm::Constant *
GetAddrOfConstantCFString(const StringLiteral * Literal)1695  CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
1696    unsigned StringLength = 0;
1697    bool isUTF16 = false;
1698    llvm::StringMapEntry<llvm::Constant*> &Entry =
1699      GetConstantCFStringEntry(CFConstantStringMap, Literal,
1700                               getTargetData().isLittleEndian(),
1701                               isUTF16, StringLength);
1702  
1703    if (llvm::Constant *C = Entry.getValue())
1704      return C;
1705  
1706    llvm::Constant *Zero =
1707        llvm::Constant::getNullValue(llvm::Type::getInt32Ty(VMContext));
1708    llvm::Constant *Zeros[] = { Zero, Zero };
1709  
1710    // If we don't already have it, get __CFConstantStringClassReference.
1711    if (!CFConstantStringClassRef) {
1712      llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
1713      Ty = llvm::ArrayType::get(Ty, 0);
1714      llvm::Constant *GV = CreateRuntimeVariable(Ty,
1715                                             "__CFConstantStringClassReference");
1716      // Decay array -> ptr
1717      CFConstantStringClassRef =
1718        llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
1719    }
1720  
1721    QualType CFTy = getContext().getCFConstantStringType();
1722  
1723    llvm::StructType *STy =
1724      cast<llvm::StructType>(getTypes().ConvertType(CFTy));
1725  
1726    std::vector<llvm::Constant*> Fields(4);
1727  
1728    // Class pointer.
1729    Fields[0] = CFConstantStringClassRef;
1730  
1731    // Flags.
1732    llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
1733    Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
1734      llvm::ConstantInt::get(Ty, 0x07C8);
1735  
1736    // String pointer.
1737    llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
1738  
1739    llvm::GlobalValue::LinkageTypes Linkage;
1740    bool isConstant;
1741    if (isUTF16) {
1742      // FIXME: why do utf strings get "_" labels instead of "L" labels?
1743      Linkage = llvm::GlobalValue::InternalLinkage;
1744      // Note: -fwritable-strings doesn't make unicode CFStrings writable, but
1745      // does make plain ascii ones writable.
1746      isConstant = true;
1747    } else {
1748      // FIXME: With OS X ld 123.2 (xcode 4) and LTO we would get a linker error
1749      // when using private linkage. It is not clear if this is a bug in ld
1750      // or a reasonable new restriction.
1751      Linkage = llvm::GlobalValue::LinkerPrivateLinkage;
1752      isConstant = !Features.WritableStrings;
1753    }
1754  
1755    llvm::GlobalVariable *GV =
1756      new llvm::GlobalVariable(getModule(), C->getType(), isConstant, Linkage, C,
1757                               ".str");
1758    GV->setUnnamedAddr(true);
1759    if (isUTF16) {
1760      CharUnits Align = getContext().getTypeAlignInChars(getContext().ShortTy);
1761      GV->setAlignment(Align.getQuantity());
1762    } else {
1763      CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
1764      GV->setAlignment(Align.getQuantity());
1765    }
1766    Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
1767  
1768    // String length.
1769    Ty = getTypes().ConvertType(getContext().LongTy);
1770    Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
1771  
1772    // The struct.
1773    C = llvm::ConstantStruct::get(STy, Fields);
1774    GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
1775                                  llvm::GlobalVariable::PrivateLinkage, C,
1776                                  "_unnamed_cfstring_");
1777    if (const char *Sect = getContext().Target.getCFStringSection())
1778      GV->setSection(Sect);
1779    Entry.setValue(GV);
1780  
1781    return GV;
1782  }
1783  
1784  llvm::Constant *
GetAddrOfConstantString(const StringLiteral * Literal)1785  CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
1786    unsigned StringLength = 0;
1787    llvm::StringMapEntry<llvm::Constant*> &Entry =
1788      GetConstantStringEntry(CFConstantStringMap, Literal, StringLength);
1789  
1790    if (llvm::Constant *C = Entry.getValue())
1791      return C;
1792  
1793    llvm::Constant *Zero =
1794    llvm::Constant::getNullValue(llvm::Type::getInt32Ty(VMContext));
1795    llvm::Constant *Zeros[] = { Zero, Zero };
1796  
1797    // If we don't already have it, get _NSConstantStringClassReference.
1798    if (!ConstantStringClassRef) {
1799      std::string StringClass(getLangOptions().ObjCConstantStringClass);
1800      llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
1801      llvm::Constant *GV;
1802      if (Features.ObjCNonFragileABI) {
1803        std::string str =
1804          StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
1805                              : "OBJC_CLASS_$_" + StringClass;
1806        GV = getObjCRuntime().GetClassGlobal(str);
1807        // Make sure the result is of the correct type.
1808        llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
1809        ConstantStringClassRef =
1810          llvm::ConstantExpr::getBitCast(GV, PTy);
1811      } else {
1812        std::string str =
1813          StringClass.empty() ? "_NSConstantStringClassReference"
1814                              : "_" + StringClass + "ClassReference";
1815        llvm::Type *PTy = llvm::ArrayType::get(Ty, 0);
1816        GV = CreateRuntimeVariable(PTy, str);
1817        // Decay array -> ptr
1818        ConstantStringClassRef =
1819          llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
1820      }
1821    }
1822  
1823    QualType NSTy = getContext().getNSConstantStringType();
1824  
1825    llvm::StructType *STy =
1826    cast<llvm::StructType>(getTypes().ConvertType(NSTy));
1827  
1828    std::vector<llvm::Constant*> Fields(3);
1829  
1830    // Class pointer.
1831    Fields[0] = ConstantStringClassRef;
1832  
1833    // String pointer.
1834    llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
1835  
1836    llvm::GlobalValue::LinkageTypes Linkage;
1837    bool isConstant;
1838    Linkage = llvm::GlobalValue::PrivateLinkage;
1839    isConstant = !Features.WritableStrings;
1840  
1841    llvm::GlobalVariable *GV =
1842    new llvm::GlobalVariable(getModule(), C->getType(), isConstant, Linkage, C,
1843                             ".str");
1844    GV->setUnnamedAddr(true);
1845    CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
1846    GV->setAlignment(Align.getQuantity());
1847    Fields[1] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
1848  
1849    // String length.
1850    llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
1851    Fields[2] = llvm::ConstantInt::get(Ty, StringLength);
1852  
1853    // The struct.
1854    C = llvm::ConstantStruct::get(STy, Fields);
1855    GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
1856                                  llvm::GlobalVariable::PrivateLinkage, C,
1857                                  "_unnamed_nsstring_");
1858    // FIXME. Fix section.
1859    if (const char *Sect =
1860          Features.ObjCNonFragileABI
1861            ? getContext().Target.getNSStringNonFragileABISection()
1862            : getContext().Target.getNSStringSection())
1863      GV->setSection(Sect);
1864    Entry.setValue(GV);
1865  
1866    return GV;
1867  }
1868  
1869  /// GetStringForStringLiteral - Return the appropriate bytes for a
1870  /// string literal, properly padded to match the literal type.
GetStringForStringLiteral(const StringLiteral * E)1871  std::string CodeGenModule::GetStringForStringLiteral(const StringLiteral *E) {
1872    const ASTContext &Context = getContext();
1873    const ConstantArrayType *CAT =
1874      Context.getAsConstantArrayType(E->getType());
1875    assert(CAT && "String isn't pointer or array!");
1876  
1877    // Resize the string to the right size.
1878    uint64_t RealLen = CAT->getSize().getZExtValue();
1879  
1880    if (E->isWide())
1881      RealLen *= Context.Target.getWCharWidth() / Context.getCharWidth();
1882  
1883    std::string Str = E->getString().str();
1884    Str.resize(RealLen, '\0');
1885  
1886    return Str;
1887  }
1888  
1889  /// GetAddrOfConstantStringFromLiteral - Return a pointer to a
1890  /// constant array for the given string literal.
1891  llvm::Constant *
GetAddrOfConstantStringFromLiteral(const StringLiteral * S)1892  CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
1893    // FIXME: This can be more efficient.
1894    // FIXME: We shouldn't need to bitcast the constant in the wide string case.
1895    llvm::Constant *C = GetAddrOfConstantString(GetStringForStringLiteral(S));
1896    if (S->isWide()) {
1897      llvm::Type *DestTy =
1898          llvm::PointerType::getUnqual(getTypes().ConvertType(S->getType()));
1899      C = llvm::ConstantExpr::getBitCast(C, DestTy);
1900    }
1901    return C;
1902  }
1903  
1904  /// GetAddrOfConstantStringFromObjCEncode - Return a pointer to a constant
1905  /// array for the given ObjCEncodeExpr node.
1906  llvm::Constant *
GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr * E)1907  CodeGenModule::GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *E) {
1908    std::string Str;
1909    getContext().getObjCEncodingForType(E->getEncodedType(), Str);
1910  
1911    return GetAddrOfConstantCString(Str);
1912  }
1913  
1914  
1915  /// GenerateWritableString -- Creates storage for a string literal.
GenerateStringLiteral(llvm::StringRef str,bool constant,CodeGenModule & CGM,const char * GlobalName)1916  static llvm::Constant *GenerateStringLiteral(llvm::StringRef str,
1917                                               bool constant,
1918                                               CodeGenModule &CGM,
1919                                               const char *GlobalName) {
1920    // Create Constant for this string literal. Don't add a '\0'.
1921    llvm::Constant *C =
1922        llvm::ConstantArray::get(CGM.getLLVMContext(), str, false);
1923  
1924    // Create a global variable for this string
1925    llvm::GlobalVariable *GV =
1926      new llvm::GlobalVariable(CGM.getModule(), C->getType(), constant,
1927                               llvm::GlobalValue::PrivateLinkage,
1928                               C, GlobalName);
1929    GV->setAlignment(1);
1930    GV->setUnnamedAddr(true);
1931    return GV;
1932  }
1933  
1934  /// GetAddrOfConstantString - Returns a pointer to a character array
1935  /// containing the literal. This contents are exactly that of the
1936  /// given string, i.e. it will not be null terminated automatically;
1937  /// see GetAddrOfConstantCString. Note that whether the result is
1938  /// actually a pointer to an LLVM constant depends on
1939  /// Feature.WriteableStrings.
1940  ///
1941  /// The result has pointer to array type.
GetAddrOfConstantString(llvm::StringRef Str,const char * GlobalName)1942  llvm::Constant *CodeGenModule::GetAddrOfConstantString(llvm::StringRef Str,
1943                                                         const char *GlobalName) {
1944    bool IsConstant = !Features.WritableStrings;
1945  
1946    // Get the default prefix if a name wasn't specified.
1947    if (!GlobalName)
1948      GlobalName = ".str";
1949  
1950    // Don't share any string literals if strings aren't constant.
1951    if (!IsConstant)
1952      return GenerateStringLiteral(Str, false, *this, GlobalName);
1953  
1954    llvm::StringMapEntry<llvm::Constant *> &Entry =
1955      ConstantStringMap.GetOrCreateValue(Str);
1956  
1957    if (Entry.getValue())
1958      return Entry.getValue();
1959  
1960    // Create a global variable for this.
1961    llvm::Constant *C = GenerateStringLiteral(Str, true, *this, GlobalName);
1962    Entry.setValue(C);
1963    return C;
1964  }
1965  
1966  /// GetAddrOfConstantCString - Returns a pointer to a character
1967  /// array containing the literal and a terminating '\0'
1968  /// character. The result has pointer to array type.
GetAddrOfConstantCString(const std::string & Str,const char * GlobalName)1969  llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &Str,
1970                                                          const char *GlobalName){
1971    llvm::StringRef StrWithNull(Str.c_str(), Str.size() + 1);
1972    return GetAddrOfConstantString(StrWithNull, GlobalName);
1973  }
1974  
1975  /// EmitObjCPropertyImplementations - Emit information for synthesized
1976  /// properties for an implementation.
EmitObjCPropertyImplementations(const ObjCImplementationDecl * D)1977  void CodeGenModule::EmitObjCPropertyImplementations(const
1978                                                      ObjCImplementationDecl *D) {
1979    for (ObjCImplementationDecl::propimpl_iterator
1980           i = D->propimpl_begin(), e = D->propimpl_end(); i != e; ++i) {
1981      ObjCPropertyImplDecl *PID = *i;
1982  
1983      // Dynamic is just for type-checking.
1984      if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
1985        ObjCPropertyDecl *PD = PID->getPropertyDecl();
1986  
1987        // Determine which methods need to be implemented, some may have
1988        // been overridden. Note that ::isSynthesized is not the method
1989        // we want, that just indicates if the decl came from a
1990        // property. What we want to know is if the method is defined in
1991        // this implementation.
1992        if (!D->getInstanceMethod(PD->getGetterName()))
1993          CodeGenFunction(*this).GenerateObjCGetter(
1994                                   const_cast<ObjCImplementationDecl *>(D), PID);
1995        if (!PD->isReadOnly() &&
1996            !D->getInstanceMethod(PD->getSetterName()))
1997          CodeGenFunction(*this).GenerateObjCSetter(
1998                                   const_cast<ObjCImplementationDecl *>(D), PID);
1999      }
2000    }
2001  }
2002  
needsDestructMethod(ObjCImplementationDecl * impl)2003  static bool needsDestructMethod(ObjCImplementationDecl *impl) {
2004    ObjCInterfaceDecl *iface
2005      = const_cast<ObjCInterfaceDecl*>(impl->getClassInterface());
2006    for (ObjCIvarDecl *ivar = iface->all_declared_ivar_begin();
2007         ivar; ivar = ivar->getNextIvar())
2008      if (ivar->getType().isDestructedType())
2009        return true;
2010  
2011    return false;
2012  }
2013  
2014  /// EmitObjCIvarInitializations - Emit information for ivar initialization
2015  /// for an implementation.
EmitObjCIvarInitializations(ObjCImplementationDecl * D)2016  void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
2017    // We might need a .cxx_destruct even if we don't have any ivar initializers.
2018    if (needsDestructMethod(D)) {
2019      IdentifierInfo *II = &getContext().Idents.get(".cxx_destruct");
2020      Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
2021      ObjCMethodDecl *DTORMethod =
2022        ObjCMethodDecl::Create(getContext(), D->getLocation(), D->getLocation(),
2023                               cxxSelector, getContext().VoidTy, 0, D, true,
2024                               false, true, false, ObjCMethodDecl::Required);
2025      D->addInstanceMethod(DTORMethod);
2026      CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
2027      D->setHasCXXStructors(true);
2028    }
2029  
2030    // If the implementation doesn't have any ivar initializers, we don't need
2031    // a .cxx_construct.
2032    if (D->getNumIvarInitializers() == 0)
2033      return;
2034  
2035    IdentifierInfo *II = &getContext().Idents.get(".cxx_construct");
2036    Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
2037    // The constructor returns 'self'.
2038    ObjCMethodDecl *CTORMethod = ObjCMethodDecl::Create(getContext(),
2039                                                  D->getLocation(),
2040                                                  D->getLocation(), cxxSelector,
2041                                                  getContext().getObjCIdType(), 0,
2042                                                  D, true, false, true, false,
2043                                                  ObjCMethodDecl::Required);
2044    D->addInstanceMethod(CTORMethod);
2045    CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, CTORMethod, true);
2046    D->setHasCXXStructors(true);
2047  }
2048  
2049  /// EmitNamespace - Emit all declarations in a namespace.
EmitNamespace(const NamespaceDecl * ND)2050  void CodeGenModule::EmitNamespace(const NamespaceDecl *ND) {
2051    for (RecordDecl::decl_iterator I = ND->decls_begin(), E = ND->decls_end();
2052         I != E; ++I)
2053      EmitTopLevelDecl(*I);
2054  }
2055  
2056  // EmitLinkageSpec - Emit all declarations in a linkage spec.
EmitLinkageSpec(const LinkageSpecDecl * LSD)2057  void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
2058    if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
2059        LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
2060      ErrorUnsupported(LSD, "linkage spec");
2061      return;
2062    }
2063  
2064    for (RecordDecl::decl_iterator I = LSD->decls_begin(), E = LSD->decls_end();
2065         I != E; ++I)
2066      EmitTopLevelDecl(*I);
2067  }
2068  
2069  /// EmitTopLevelDecl - Emit code for a single top level declaration.
EmitTopLevelDecl(Decl * D)2070  void CodeGenModule::EmitTopLevelDecl(Decl *D) {
2071    // If an error has occurred, stop code generation, but continue
2072    // parsing and semantic analysis (to ensure all warnings and errors
2073    // are emitted).
2074    if (Diags.hasErrorOccurred())
2075      return;
2076  
2077    // Ignore dependent declarations.
2078    if (D->getDeclContext() && D->getDeclContext()->isDependentContext())
2079      return;
2080  
2081    switch (D->getKind()) {
2082    case Decl::CXXConversion:
2083    case Decl::CXXMethod:
2084    case Decl::Function:
2085      // Skip function templates
2086      if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
2087          cast<FunctionDecl>(D)->isLateTemplateParsed())
2088        return;
2089  
2090      EmitGlobal(cast<FunctionDecl>(D));
2091      break;
2092  
2093    case Decl::Var:
2094      EmitGlobal(cast<VarDecl>(D));
2095      break;
2096  
2097    // Indirect fields from global anonymous structs and unions can be
2098    // ignored; only the actual variable requires IR gen support.
2099    case Decl::IndirectField:
2100      break;
2101  
2102    // C++ Decls
2103    case Decl::Namespace:
2104      EmitNamespace(cast<NamespaceDecl>(D));
2105      break;
2106      // No code generation needed.
2107    case Decl::UsingShadow:
2108    case Decl::Using:
2109    case Decl::UsingDirective:
2110    case Decl::ClassTemplate:
2111    case Decl::FunctionTemplate:
2112    case Decl::TypeAliasTemplate:
2113    case Decl::NamespaceAlias:
2114    case Decl::Block:
2115      break;
2116    case Decl::CXXConstructor:
2117      // Skip function templates
2118      if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
2119          cast<FunctionDecl>(D)->isLateTemplateParsed())
2120        return;
2121  
2122      EmitCXXConstructors(cast<CXXConstructorDecl>(D));
2123      break;
2124    case Decl::CXXDestructor:
2125      if (cast<FunctionDecl>(D)->isLateTemplateParsed())
2126        return;
2127      EmitCXXDestructors(cast<CXXDestructorDecl>(D));
2128      break;
2129  
2130    case Decl::StaticAssert:
2131      // Nothing to do.
2132      break;
2133  
2134    // Objective-C Decls
2135  
2136    // Forward declarations, no (immediate) code generation.
2137    case Decl::ObjCClass:
2138    case Decl::ObjCForwardProtocol:
2139    case Decl::ObjCInterface:
2140      break;
2141  
2142    case Decl::ObjCCategory: {
2143      ObjCCategoryDecl *CD = cast<ObjCCategoryDecl>(D);
2144      if (CD->IsClassExtension() && CD->hasSynthBitfield())
2145        Context.ResetObjCLayout(CD->getClassInterface());
2146      break;
2147    }
2148  
2149    case Decl::ObjCProtocol:
2150      Runtime->GenerateProtocol(cast<ObjCProtocolDecl>(D));
2151      break;
2152  
2153    case Decl::ObjCCategoryImpl:
2154      // Categories have properties but don't support synthesize so we
2155      // can ignore them here.
2156      Runtime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
2157      break;
2158  
2159    case Decl::ObjCImplementation: {
2160      ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
2161      if (Features.ObjCNonFragileABI2 && OMD->hasSynthBitfield())
2162        Context.ResetObjCLayout(OMD->getClassInterface());
2163      EmitObjCPropertyImplementations(OMD);
2164      EmitObjCIvarInitializations(OMD);
2165      Runtime->GenerateClass(OMD);
2166      break;
2167    }
2168    case Decl::ObjCMethod: {
2169      ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
2170      // If this is not a prototype, emit the body.
2171      if (OMD->getBody())
2172        CodeGenFunction(*this).GenerateObjCMethod(OMD);
2173      break;
2174    }
2175    case Decl::ObjCCompatibleAlias:
2176      // compatibility-alias is a directive and has no code gen.
2177      break;
2178  
2179    case Decl::LinkageSpec:
2180      EmitLinkageSpec(cast<LinkageSpecDecl>(D));
2181      break;
2182  
2183    case Decl::FileScopeAsm: {
2184      FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
2185      llvm::StringRef AsmString = AD->getAsmString()->getString();
2186  
2187      const std::string &S = getModule().getModuleInlineAsm();
2188      if (S.empty())
2189        getModule().setModuleInlineAsm(AsmString);
2190      else
2191        getModule().setModuleInlineAsm(S + '\n' + AsmString.str());
2192      break;
2193    }
2194  
2195    default:
2196      // Make sure we handled everything we should, every other kind is a
2197      // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
2198      // function. Need to recode Decl::Kind to do that easily.
2199      assert(isa<TypeDecl>(D) && "Unsupported decl kind");
2200    }
2201  }
2202  
2203  /// Turns the given pointer into a constant.
GetPointerConstant(llvm::LLVMContext & Context,const void * Ptr)2204  static llvm::Constant *GetPointerConstant(llvm::LLVMContext &Context,
2205                                            const void *Ptr) {
2206    uintptr_t PtrInt = reinterpret_cast<uintptr_t>(Ptr);
2207    llvm::Type *i64 = llvm::Type::getInt64Ty(Context);
2208    return llvm::ConstantInt::get(i64, PtrInt);
2209  }
2210  
EmitGlobalDeclMetadata(CodeGenModule & CGM,llvm::NamedMDNode * & GlobalMetadata,GlobalDecl D,llvm::GlobalValue * Addr)2211  static void EmitGlobalDeclMetadata(CodeGenModule &CGM,
2212                                     llvm::NamedMDNode *&GlobalMetadata,
2213                                     GlobalDecl D,
2214                                     llvm::GlobalValue *Addr) {
2215    if (!GlobalMetadata)
2216      GlobalMetadata =
2217        CGM.getModule().getOrInsertNamedMetadata("clang.global.decl.ptrs");
2218  
2219    // TODO: should we report variant information for ctors/dtors?
2220    llvm::Value *Ops[] = {
2221      Addr,
2222      GetPointerConstant(CGM.getLLVMContext(), D.getDecl())
2223    };
2224    GlobalMetadata->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
2225  }
2226  
2227  /// Emits metadata nodes associating all the global values in the
2228  /// current module with the Decls they came from.  This is useful for
2229  /// projects using IR gen as a subroutine.
2230  ///
2231  /// Since there's currently no way to associate an MDNode directly
2232  /// with an llvm::GlobalValue, we create a global named metadata
2233  /// with the name 'clang.global.decl.ptrs'.
EmitDeclMetadata()2234  void CodeGenModule::EmitDeclMetadata() {
2235    llvm::NamedMDNode *GlobalMetadata = 0;
2236  
2237    // StaticLocalDeclMap
2238    for (llvm::DenseMap<GlobalDecl,llvm::StringRef>::iterator
2239           I = MangledDeclNames.begin(), E = MangledDeclNames.end();
2240         I != E; ++I) {
2241      llvm::GlobalValue *Addr = getModule().getNamedValue(I->second);
2242      EmitGlobalDeclMetadata(*this, GlobalMetadata, I->first, Addr);
2243    }
2244  }
2245  
2246  /// Emits metadata nodes for all the local variables in the current
2247  /// function.
EmitDeclMetadata()2248  void CodeGenFunction::EmitDeclMetadata() {
2249    if (LocalDeclMap.empty()) return;
2250  
2251    llvm::LLVMContext &Context = getLLVMContext();
2252  
2253    // Find the unique metadata ID for this name.
2254    unsigned DeclPtrKind = Context.getMDKindID("clang.decl.ptr");
2255  
2256    llvm::NamedMDNode *GlobalMetadata = 0;
2257  
2258    for (llvm::DenseMap<const Decl*, llvm::Value*>::iterator
2259           I = LocalDeclMap.begin(), E = LocalDeclMap.end(); I != E; ++I) {
2260      const Decl *D = I->first;
2261      llvm::Value *Addr = I->second;
2262  
2263      if (llvm::AllocaInst *Alloca = dyn_cast<llvm::AllocaInst>(Addr)) {
2264        llvm::Value *DAddr = GetPointerConstant(getLLVMContext(), D);
2265        Alloca->setMetadata(DeclPtrKind, llvm::MDNode::get(Context, DAddr));
2266      } else if (llvm::GlobalValue *GV = dyn_cast<llvm::GlobalValue>(Addr)) {
2267        GlobalDecl GD = GlobalDecl(cast<VarDecl>(D));
2268        EmitGlobalDeclMetadata(CGM, GlobalMetadata, GD, GV);
2269      }
2270    }
2271  }
2272  
EmitCoverageFile()2273  void CodeGenModule::EmitCoverageFile() {
2274    if (!getCodeGenOpts().CoverageFile.empty()) {
2275      if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
2276        llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
2277        llvm::LLVMContext &Ctx = TheModule.getContext();
2278        llvm::MDString *CoverageFile =
2279            llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
2280        for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
2281          llvm::MDNode *CU = CUNode->getOperand(i);
2282          llvm::Value *node[] = { CoverageFile, CU };
2283          llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
2284          GCov->addOperand(N);
2285        }
2286      }
2287    }
2288  }
2289  
2290  ///@name Custom Runtime Function Interfaces
2291  ///@{
2292  //
2293  // FIXME: These can be eliminated once we can have clients just get the required
2294  // AST nodes from the builtin tables.
2295  
getBlockObjectDispose()2296  llvm::Constant *CodeGenModule::getBlockObjectDispose() {
2297    if (BlockObjectDispose)
2298      return BlockObjectDispose;
2299  
2300    // If we saw an explicit decl, use that.
2301    if (BlockObjectDisposeDecl) {
2302      return BlockObjectDispose = GetAddrOfFunction(
2303        BlockObjectDisposeDecl,
2304        getTypes().GetFunctionType(BlockObjectDisposeDecl));
2305    }
2306  
2307    // Otherwise construct the function by hand.
2308    llvm::Type *args[] = { Int8PtrTy, Int32Ty };
2309    llvm::FunctionType *fty
2310      = llvm::FunctionType::get(VoidTy, args, false);
2311    return BlockObjectDispose =
2312      CreateRuntimeFunction(fty, "_Block_object_dispose");
2313  }
2314  
getBlockObjectAssign()2315  llvm::Constant *CodeGenModule::getBlockObjectAssign() {
2316    if (BlockObjectAssign)
2317      return BlockObjectAssign;
2318  
2319    // If we saw an explicit decl, use that.
2320    if (BlockObjectAssignDecl) {
2321      return BlockObjectAssign = GetAddrOfFunction(
2322        BlockObjectAssignDecl,
2323        getTypes().GetFunctionType(BlockObjectAssignDecl));
2324    }
2325  
2326    // Otherwise construct the function by hand.
2327    llvm::Type *args[] = { Int8PtrTy, Int8PtrTy, Int32Ty };
2328    llvm::FunctionType *fty
2329      = llvm::FunctionType::get(VoidTy, args, false);
2330    return BlockObjectAssign =
2331      CreateRuntimeFunction(fty, "_Block_object_assign");
2332  }
2333  
getNSConcreteGlobalBlock()2334  llvm::Constant *CodeGenModule::getNSConcreteGlobalBlock() {
2335    if (NSConcreteGlobalBlock)
2336      return NSConcreteGlobalBlock;
2337  
2338    // If we saw an explicit decl, use that.
2339    if (NSConcreteGlobalBlockDecl) {
2340      return NSConcreteGlobalBlock = GetAddrOfGlobalVar(
2341        NSConcreteGlobalBlockDecl,
2342        getTypes().ConvertType(NSConcreteGlobalBlockDecl->getType()));
2343    }
2344  
2345    // Otherwise construct the variable by hand.
2346    return NSConcreteGlobalBlock =
2347      CreateRuntimeVariable(Int8PtrTy, "_NSConcreteGlobalBlock");
2348  }
2349  
getNSConcreteStackBlock()2350  llvm::Constant *CodeGenModule::getNSConcreteStackBlock() {
2351    if (NSConcreteStackBlock)
2352      return NSConcreteStackBlock;
2353  
2354    // If we saw an explicit decl, use that.
2355    if (NSConcreteStackBlockDecl) {
2356      return NSConcreteStackBlock = GetAddrOfGlobalVar(
2357        NSConcreteStackBlockDecl,
2358        getTypes().ConvertType(NSConcreteStackBlockDecl->getType()));
2359    }
2360  
2361    // Otherwise construct the variable by hand.
2362    return NSConcreteStackBlock =
2363      CreateRuntimeVariable(Int8PtrTy, "_NSConcreteStackBlock");
2364  }
2365  
2366  ///@}
2367