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