CodeGenModule.cpp revision ec586e7b10394aeed25c8e5ee02d230951826136
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 "CGCall.h"
18#include "CGObjCRuntime.h"
19#include "Mangle.h"
20#include "clang/Frontend/CompileOptions.h"
21#include "clang/AST/ASTContext.h"
22#include "clang/AST/DeclObjC.h"
23#include "clang/AST/DeclCXX.h"
24#include "clang/Basic/Builtins.h"
25#include "clang/Basic/Diagnostic.h"
26#include "clang/Basic/SourceManager.h"
27#include "clang/Basic/TargetInfo.h"
28#include "clang/Basic/ConvertUTF.h"
29#include "llvm/CallingConv.h"
30#include "llvm/Module.h"
31#include "llvm/Intrinsics.h"
32#include "llvm/Target/TargetData.h"
33using namespace clang;
34using namespace CodeGen;
35
36
37CodeGenModule::CodeGenModule(ASTContext &C, const CompileOptions &compileOpts,
38                             llvm::Module &M, const llvm::TargetData &TD,
39                             Diagnostic &diags)
40  : BlockModule(C, M, TD, Types, *this), Context(C),
41    Features(C.getLangOptions()), CompileOpts(compileOpts), TheModule(M),
42    TheTargetData(TD), Diags(diags), Types(C, M, TD), Runtime(0),
43    MemCpyFn(0), MemMoveFn(0), MemSetFn(0), CFConstantStringClassRef(0),
44    VMContext(M.getContext()) {
45
46  if (!Features.ObjC1)
47    Runtime = 0;
48  else if (!Features.NeXTRuntime)
49    Runtime = CreateGNUObjCRuntime(*this);
50  else if (Features.ObjCNonFragileABI)
51    Runtime = CreateMacNonFragileABIObjCRuntime(*this);
52  else
53    Runtime = CreateMacObjCRuntime(*this);
54
55  // If debug info generation is enabled, create the CGDebugInfo object.
56  DebugInfo = CompileOpts.DebugInfo ? new CGDebugInfo(this) : 0;
57}
58
59CodeGenModule::~CodeGenModule() {
60  delete Runtime;
61  delete DebugInfo;
62}
63
64void CodeGenModule::Release() {
65  EmitDeferred();
66  if (Runtime)
67    if (llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction())
68      AddGlobalCtor(ObjCInitFunction);
69  EmitCtorList(GlobalCtors, "llvm.global_ctors");
70  EmitCtorList(GlobalDtors, "llvm.global_dtors");
71  EmitAnnotations();
72  EmitLLVMUsed();
73}
74
75/// ErrorUnsupported - Print out an error that codegen doesn't support the
76/// specified stmt yet.
77void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
78                                     bool OmitOnError) {
79  if (OmitOnError && getDiags().hasErrorOccurred())
80    return;
81  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
82                                               "cannot compile this %0 yet");
83  std::string Msg = Type;
84  getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
85    << Msg << S->getSourceRange();
86}
87
88/// ErrorUnsupported - Print out an error that codegen doesn't support the
89/// specified decl yet.
90void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type,
91                                     bool OmitOnError) {
92  if (OmitOnError && getDiags().hasErrorOccurred())
93    return;
94  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
95                                               "cannot compile this %0 yet");
96  std::string Msg = Type;
97  getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
98}
99
100LangOptions::VisibilityMode
101CodeGenModule::getDeclVisibilityMode(const Decl *D) const {
102  if (const VarDecl *VD = dyn_cast<VarDecl>(D))
103    if (VD->getStorageClass() == VarDecl::PrivateExtern)
104      return LangOptions::Hidden;
105
106  if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) {
107    switch (attr->getVisibility()) {
108    default: assert(0 && "Unknown visibility!");
109    case VisibilityAttr::DefaultVisibility:
110      return LangOptions::Default;
111    case VisibilityAttr::HiddenVisibility:
112      return LangOptions::Hidden;
113    case VisibilityAttr::ProtectedVisibility:
114      return LangOptions::Protected;
115    }
116  }
117
118  return getLangOptions().getVisibilityMode();
119}
120
121void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
122                                        const Decl *D) const {
123  // Internal definitions always have default visibility.
124  if (GV->hasLocalLinkage()) {
125    GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
126    return;
127  }
128
129  switch (getDeclVisibilityMode(D)) {
130  default: assert(0 && "Unknown visibility!");
131  case LangOptions::Default:
132    return GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
133  case LangOptions::Hidden:
134    return GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
135  case LangOptions::Protected:
136    return GV->setVisibility(llvm::GlobalValue::ProtectedVisibility);
137  }
138}
139
140const char *CodeGenModule::getMangledName(const GlobalDecl &GD) {
141  const NamedDecl *ND = GD.getDecl();
142
143  if (const CXXConstructorDecl *D = dyn_cast<CXXConstructorDecl>(ND))
144    return getMangledCXXCtorName(D, GD.getCtorType());
145  if (const CXXDestructorDecl *D = dyn_cast<CXXDestructorDecl>(ND))
146    return getMangledCXXDtorName(D, GD.getDtorType());
147
148  return getMangledName(ND);
149}
150
151/// \brief Retrieves the mangled name for the given declaration.
152///
153/// If the given declaration requires a mangled name, returns an
154/// const char* containing the mangled name.  Otherwise, returns
155/// the unmangled name.
156///
157const char *CodeGenModule::getMangledName(const NamedDecl *ND) {
158  // In C, functions with no attributes never need to be mangled. Fastpath them.
159  if (!getLangOptions().CPlusPlus && !ND->hasAttrs()) {
160    assert(ND->getIdentifier() && "Attempt to mangle unnamed decl.");
161    return ND->getNameAsCString();
162  }
163
164  llvm::SmallString<256> Name;
165  llvm::raw_svector_ostream Out(Name);
166  if (!mangleName(ND, Context, Out)) {
167    assert(ND->getIdentifier() && "Attempt to mangle unnamed decl.");
168    return ND->getNameAsCString();
169  }
170
171  Name += '\0';
172  return UniqueMangledName(Name.begin(), Name.end());
173}
174
175const char *CodeGenModule::UniqueMangledName(const char *NameStart,
176                                             const char *NameEnd) {
177  assert(*(NameEnd - 1) == '\0' && "Mangled name must be null terminated!");
178
179  return MangledNames.GetOrCreateValue(NameStart, NameEnd).getKeyData();
180}
181
182/// AddGlobalCtor - Add a function to the list that will be called before
183/// main() runs.
184void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
185  // FIXME: Type coercion of void()* types.
186  GlobalCtors.push_back(std::make_pair(Ctor, Priority));
187}
188
189/// AddGlobalDtor - Add a function to the list that will be called
190/// when the module is unloaded.
191void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
192  // FIXME: Type coercion of void()* types.
193  GlobalDtors.push_back(std::make_pair(Dtor, Priority));
194}
195
196void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
197  // Ctor function type is void()*.
198  llvm::FunctionType* CtorFTy =
199    VMContext.getFunctionType(llvm::Type::VoidTy,
200                            std::vector<const llvm::Type*>(),
201                            false);
202  llvm::Type *CtorPFTy = VMContext.getPointerTypeUnqual(CtorFTy);
203
204  // Get the type of a ctor entry, { i32, void ()* }.
205  llvm::StructType* CtorStructTy =
206    VMContext.getStructType(llvm::Type::Int32Ty,
207                          VMContext.getPointerTypeUnqual(CtorFTy), NULL);
208
209  // Construct the constructor and destructor arrays.
210  std::vector<llvm::Constant*> Ctors;
211  for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
212    std::vector<llvm::Constant*> S;
213    S.push_back(
214      VMContext.getConstantInt(llvm::Type::Int32Ty, I->second, false));
215    S.push_back(VMContext.getConstantExprBitCast(I->first, CtorPFTy));
216    Ctors.push_back(VMContext.getConstantStruct(CtorStructTy, S));
217  }
218
219  if (!Ctors.empty()) {
220    llvm::ArrayType *AT = VMContext.getArrayType(CtorStructTy, Ctors.size());
221    new llvm::GlobalVariable(TheModule, AT, false,
222                             llvm::GlobalValue::AppendingLinkage,
223                             VMContext.getConstantArray(AT, Ctors),
224                             GlobalName);
225  }
226}
227
228void CodeGenModule::EmitAnnotations() {
229  if (Annotations.empty())
230    return;
231
232  // Create a new global variable for the ConstantStruct in the Module.
233  llvm::Constant *Array =
234  VMContext.getConstantArray(VMContext.getArrayType(Annotations[0]->getType(),
235                                                Annotations.size()),
236                           Annotations);
237  llvm::GlobalValue *gv =
238  new llvm::GlobalVariable(TheModule, Array->getType(), false,
239                           llvm::GlobalValue::AppendingLinkage, Array,
240                           "llvm.global.annotations");
241  gv->setSection("llvm.metadata");
242}
243
244static CodeGenModule::GVALinkage
245GetLinkageForFunction(ASTContext &Context, const FunctionDecl *FD,
246                      const LangOptions &Features) {
247  // The kind of external linkage this function will have, if it is not
248  // inline or static.
249  CodeGenModule::GVALinkage External = CodeGenModule::GVA_StrongExternal;
250  if (Context.getLangOptions().CPlusPlus &&
251      (FD->getPrimaryTemplate() || FD->getInstantiatedFromMemberFunction()) &&
252      !FD->isExplicitSpecialization())
253    External = CodeGenModule::GVA_TemplateInstantiation;
254
255  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
256    // C++ member functions defined inside the class are always inline.
257    if (MD->isInline() || !MD->isOutOfLine())
258      return CodeGenModule::GVA_CXXInline;
259
260    return External;
261  }
262
263  // "static" functions get internal linkage.
264  if (FD->getStorageClass() == FunctionDecl::Static)
265    return CodeGenModule::GVA_Internal;
266
267  if (!FD->isInline())
268    return External;
269
270  // If the inline function explicitly has the GNU inline attribute on it, or if
271  // this is C89 mode, we use to GNU semantics.
272  if (!Features.C99 && !Features.CPlusPlus) {
273    // extern inline in GNU mode is like C99 inline.
274    if (FD->getStorageClass() == FunctionDecl::Extern)
275      return CodeGenModule::GVA_C99Inline;
276    // Normal inline is a strong symbol.
277    return CodeGenModule::GVA_StrongExternal;
278  } else if (FD->hasActiveGNUInlineAttribute(Context)) {
279    // GCC in C99 mode seems to use a different decision-making
280    // process for extern inline, which factors in previous
281    // declarations.
282    if (FD->isExternGNUInline(Context))
283      return CodeGenModule::GVA_C99Inline;
284    // Normal inline is a strong symbol.
285    return External;
286  }
287
288  // The definition of inline changes based on the language.  Note that we
289  // have already handled "static inline" above, with the GVA_Internal case.
290  if (Features.CPlusPlus)  // inline and extern inline.
291    return CodeGenModule::GVA_CXXInline;
292
293  assert(Features.C99 && "Must be in C99 mode if not in C89 or C++ mode");
294  if (FD->isC99InlineDefinition())
295    return CodeGenModule::GVA_C99Inline;
296
297  return CodeGenModule::GVA_StrongExternal;
298}
299
300/// SetFunctionDefinitionAttributes - Set attributes for a global.
301///
302/// FIXME: This is currently only done for aliases and functions, but not for
303/// variables (these details are set in EmitGlobalVarDefinition for variables).
304void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
305                                                    llvm::GlobalValue *GV) {
306  GVALinkage Linkage = GetLinkageForFunction(getContext(), D, Features);
307
308  if (Linkage == GVA_Internal) {
309    GV->setLinkage(llvm::Function::InternalLinkage);
310  } else if (D->hasAttr<DLLExportAttr>()) {
311    GV->setLinkage(llvm::Function::DLLExportLinkage);
312  } else if (D->hasAttr<WeakAttr>()) {
313    GV->setLinkage(llvm::Function::WeakAnyLinkage);
314  } else if (Linkage == GVA_C99Inline) {
315    // In C99 mode, 'inline' functions are guaranteed to have a strong
316    // definition somewhere else, so we can use available_externally linkage.
317    GV->setLinkage(llvm::Function::AvailableExternallyLinkage);
318  } else if (Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation) {
319    // In C++, the compiler has to emit a definition in every translation unit
320    // that references the function.  We should use linkonce_odr because
321    // a) if all references in this translation unit are optimized away, we
322    // don't need to codegen it.  b) if the function persists, it needs to be
323    // merged with other definitions. c) C++ has the ODR, so we know the
324    // definition is dependable.
325    GV->setLinkage(llvm::Function::LinkOnceODRLinkage);
326  } else {
327    assert(Linkage == GVA_StrongExternal);
328    // Otherwise, we have strong external linkage.
329    GV->setLinkage(llvm::Function::ExternalLinkage);
330  }
331
332  SetCommonAttributes(D, GV);
333}
334
335void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
336                                              const CGFunctionInfo &Info,
337                                              llvm::Function *F) {
338  AttributeListType AttributeList;
339  ConstructAttributeList(Info, D, AttributeList);
340
341  F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(),
342                                        AttributeList.size()));
343
344  // Set the appropriate calling convention for the Function.
345  if (D->hasAttr<FastCallAttr>())
346    F->setCallingConv(llvm::CallingConv::X86_FastCall);
347
348  if (D->hasAttr<StdCallAttr>())
349    F->setCallingConv(llvm::CallingConv::X86_StdCall);
350}
351
352void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
353                                                           llvm::Function *F) {
354  if (!Features.Exceptions && !Features.ObjCNonFragileABI)
355    F->addFnAttr(llvm::Attribute::NoUnwind);
356
357  if (D->hasAttr<AlwaysInlineAttr>())
358    F->addFnAttr(llvm::Attribute::AlwaysInline);
359
360  if (D->hasAttr<NoinlineAttr>())
361    F->addFnAttr(llvm::Attribute::NoInline);
362}
363
364void CodeGenModule::SetCommonAttributes(const Decl *D,
365                                        llvm::GlobalValue *GV) {
366  setGlobalVisibility(GV, D);
367
368  if (D->hasAttr<UsedAttr>())
369    AddUsedGlobal(GV);
370
371  if (const SectionAttr *SA = D->getAttr<SectionAttr>())
372    GV->setSection(SA->getName());
373}
374
375void CodeGenModule::SetInternalFunctionAttributes(const Decl *D,
376                                                  llvm::Function *F,
377                                                  const CGFunctionInfo &FI) {
378  SetLLVMFunctionAttributes(D, FI, F);
379  SetLLVMFunctionAttributesForDefinition(D, F);
380
381  F->setLinkage(llvm::Function::InternalLinkage);
382
383  SetCommonAttributes(D, F);
384}
385
386void CodeGenModule::SetFunctionAttributes(const FunctionDecl *FD,
387                                          llvm::Function *F,
388                                          bool IsIncompleteFunction) {
389  if (!IsIncompleteFunction)
390    SetLLVMFunctionAttributes(FD, getTypes().getFunctionInfo(FD), F);
391
392  // Only a few attributes are set on declarations; these may later be
393  // overridden by a definition.
394
395  if (FD->hasAttr<DLLImportAttr>()) {
396    F->setLinkage(llvm::Function::DLLImportLinkage);
397  } else if (FD->hasAttr<WeakAttr>() ||
398             FD->hasAttr<WeakImportAttr>()) {
399    // "extern_weak" is overloaded in LLVM; we probably should have
400    // separate linkage types for this.
401    F->setLinkage(llvm::Function::ExternalWeakLinkage);
402  } else {
403    F->setLinkage(llvm::Function::ExternalLinkage);
404  }
405
406  if (const SectionAttr *SA = FD->getAttr<SectionAttr>())
407    F->setSection(SA->getName());
408}
409
410void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {
411  assert(!GV->isDeclaration() &&
412         "Only globals with definition can force usage.");
413  LLVMUsed.push_back(GV);
414}
415
416void CodeGenModule::EmitLLVMUsed() {
417  // Don't create llvm.used if there is no need.
418  if (LLVMUsed.empty())
419    return;
420
421  llvm::Type *i8PTy = VMContext.getPointerTypeUnqual(llvm::Type::Int8Ty);
422
423  // Convert LLVMUsed to what ConstantArray needs.
424  std::vector<llvm::Constant*> UsedArray;
425  UsedArray.resize(LLVMUsed.size());
426  for (unsigned i = 0, e = LLVMUsed.size(); i != e; ++i) {
427    UsedArray[i] =
428     VMContext.getConstantExprBitCast(cast<llvm::Constant>(&*LLVMUsed[i]),
429                                      i8PTy);
430  }
431
432  if (UsedArray.empty())
433    return;
434  llvm::ArrayType *ATy = VMContext.getArrayType(i8PTy, UsedArray.size());
435
436  llvm::GlobalVariable *GV =
437    new llvm::GlobalVariable(getModule(), ATy, false,
438                             llvm::GlobalValue::AppendingLinkage,
439                             VMContext.getConstantArray(ATy, UsedArray),
440                             "llvm.used");
441
442  GV->setSection("llvm.metadata");
443}
444
445void CodeGenModule::EmitDeferred() {
446  // Emit code for any potentially referenced deferred decls.  Since a
447  // previously unused static decl may become used during the generation of code
448  // for a static function, iterate until no  changes are made.
449  while (!DeferredDeclsToEmit.empty()) {
450    GlobalDecl D = DeferredDeclsToEmit.back();
451    DeferredDeclsToEmit.pop_back();
452
453    // The mangled name for the decl must have been emitted in GlobalDeclMap.
454    // Look it up to see if it was defined with a stronger definition (e.g. an
455    // extern inline function with a strong function redefinition).  If so,
456    // just ignore the deferred decl.
457    llvm::GlobalValue *CGRef = GlobalDeclMap[getMangledName(D)];
458    assert(CGRef && "Deferred decl wasn't referenced?");
459
460    if (!CGRef->isDeclaration())
461      continue;
462
463    // Otherwise, emit the definition and move on to the next one.
464    EmitGlobalDefinition(D);
465  }
466}
467
468/// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the
469/// annotation information for a given GlobalValue.  The annotation struct is
470/// {i8 *, i8 *, i8 *, i32}.  The first field is a constant expression, the
471/// GlobalValue being annotated.  The second field is the constant string
472/// created from the AnnotateAttr's annotation.  The third field is a constant
473/// string containing the name of the translation unit.  The fourth field is
474/// the line number in the file of the annotated value declaration.
475///
476/// FIXME: this does not unique the annotation string constants, as llvm-gcc
477///        appears to.
478///
479llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
480                                                const AnnotateAttr *AA,
481                                                unsigned LineNo) {
482  llvm::Module *M = &getModule();
483
484  // get [N x i8] constants for the annotation string, and the filename string
485  // which are the 2nd and 3rd elements of the global annotation structure.
486  const llvm::Type *SBP = VMContext.getPointerTypeUnqual(llvm::Type::Int8Ty);
487  llvm::Constant *anno = VMContext.getConstantArray(AA->getAnnotation(), true);
488  llvm::Constant *unit = VMContext.getConstantArray(M->getModuleIdentifier(),
489                                                  true);
490
491  // Get the two global values corresponding to the ConstantArrays we just
492  // created to hold the bytes of the strings.
493  llvm::GlobalValue *annoGV =
494    new llvm::GlobalVariable(*M, anno->getType(), false,
495                             llvm::GlobalValue::PrivateLinkage, anno,
496                             GV->getName());
497  // translation unit name string, emitted into the llvm.metadata section.
498  llvm::GlobalValue *unitGV =
499    new llvm::GlobalVariable(*M, unit->getType(), false,
500                             llvm::GlobalValue::PrivateLinkage, unit,
501                             ".str");
502
503  // Create the ConstantStruct for the global annotation.
504  llvm::Constant *Fields[4] = {
505    VMContext.getConstantExprBitCast(GV, SBP),
506    VMContext.getConstantExprBitCast(annoGV, SBP),
507    VMContext.getConstantExprBitCast(unitGV, SBP),
508    VMContext.getConstantInt(llvm::Type::Int32Ty, LineNo)
509  };
510  return VMContext.getConstantStruct(Fields, 4, false);
511}
512
513bool CodeGenModule::MayDeferGeneration(const ValueDecl *Global) {
514  // Never defer when EmitAllDecls is specified or the decl has
515  // attribute used.
516  if (Features.EmitAllDecls || Global->hasAttr<UsedAttr>())
517    return false;
518
519  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
520    // Constructors and destructors should never be deferred.
521    if (FD->hasAttr<ConstructorAttr>() ||
522        FD->hasAttr<DestructorAttr>())
523      return false;
524
525    GVALinkage Linkage = GetLinkageForFunction(getContext(), FD, Features);
526
527    // static, static inline, always_inline, and extern inline functions can
528    // always be deferred.  Normal inline functions can be deferred in C99/C++.
529    if (Linkage == GVA_Internal || Linkage == GVA_C99Inline ||
530        Linkage == GVA_CXXInline)
531      return true;
532    return false;
533  }
534
535  const VarDecl *VD = cast<VarDecl>(Global);
536  assert(VD->isFileVarDecl() && "Invalid decl");
537
538  return VD->getStorageClass() == VarDecl::Static;
539}
540
541void CodeGenModule::EmitGlobal(GlobalDecl GD) {
542  const ValueDecl *Global = GD.getDecl();
543
544  // If this is an alias definition (which otherwise looks like a declaration)
545  // emit it now.
546  if (Global->hasAttr<AliasAttr>())
547    return EmitAliasDefinition(Global);
548
549  // Ignore declarations, they will be emitted on their first use.
550  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
551    // Forward declarations are emitted lazily on first use.
552    if (!FD->isThisDeclarationADefinition())
553      return;
554  } else {
555    const VarDecl *VD = cast<VarDecl>(Global);
556    assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
557
558    // In C++, if this is marked "extern", defer code generation.
559    if (getLangOptions().CPlusPlus && !VD->getInit() &&
560        (VD->getStorageClass() == VarDecl::Extern ||
561         VD->isExternC(getContext())))
562      return;
563
564    // In C, if this isn't a definition, defer code generation.
565    if (!getLangOptions().CPlusPlus && !VD->getInit())
566      return;
567  }
568
569  // Defer code generation when possible if this is a static definition, inline
570  // function etc.  These we only want to emit if they are used.
571  if (MayDeferGeneration(Global)) {
572    // If the value has already been used, add it directly to the
573    // DeferredDeclsToEmit list.
574    const char *MangledName = getMangledName(GD);
575    if (GlobalDeclMap.count(MangledName))
576      DeferredDeclsToEmit.push_back(GD);
577    else {
578      // Otherwise, remember that we saw a deferred decl with this name.  The
579      // first use of the mangled name will cause it to move into
580      // DeferredDeclsToEmit.
581      DeferredDecls[MangledName] = GD;
582    }
583    return;
584  }
585
586  // Otherwise emit the definition.
587  EmitGlobalDefinition(GD);
588}
589
590void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) {
591  const ValueDecl *D = GD.getDecl();
592
593  if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
594    EmitCXXConstructor(CD, GD.getCtorType());
595  else if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D))
596    EmitCXXDestructor(DD, GD.getDtorType());
597  else if (isa<FunctionDecl>(D))
598    EmitGlobalFunctionDefinition(GD);
599  else if (const VarDecl *VD = dyn_cast<VarDecl>(D))
600    EmitGlobalVarDefinition(VD);
601  else {
602    assert(0 && "Invalid argument to EmitGlobalDefinition()");
603  }
604}
605
606/// GetOrCreateLLVMFunction - If the specified mangled name is not in the
607/// module, create and return an llvm Function with the specified type. If there
608/// is something in the module with the specified name, return it potentially
609/// bitcasted to the right type.
610///
611/// If D is non-null, it specifies a decl that correspond to this.  This is used
612/// to set the attributes on the function when it is first created.
613llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(const char *MangledName,
614                                                       const llvm::Type *Ty,
615                                                       GlobalDecl D) {
616  // Lookup the entry, lazily creating it if necessary.
617  llvm::GlobalValue *&Entry = GlobalDeclMap[MangledName];
618  if (Entry) {
619    if (Entry->getType()->getElementType() == Ty)
620      return Entry;
621
622    // Make sure the result is of the correct type.
623    const llvm::Type *PTy = VMContext.getPointerTypeUnqual(Ty);
624    return VMContext.getConstantExprBitCast(Entry, PTy);
625  }
626
627  // This is the first use or definition of a mangled name.  If there is a
628  // deferred decl with this name, remember that we need to emit it at the end
629  // of the file.
630  llvm::DenseMap<const char*, GlobalDecl>::iterator DDI =
631    DeferredDecls.find(MangledName);
632  if (DDI != DeferredDecls.end()) {
633    // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
634    // list, and remove it from DeferredDecls (since we don't need it anymore).
635    DeferredDeclsToEmit.push_back(DDI->second);
636    DeferredDecls.erase(DDI);
637  } else if (const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl())) {
638    // If this the first reference to a C++ inline function in a class, queue up
639    // the deferred function body for emission.  These are not seen as
640    // top-level declarations.
641    if (FD->isThisDeclarationADefinition() && MayDeferGeneration(FD))
642      DeferredDeclsToEmit.push_back(D);
643  }
644
645  // This function doesn't have a complete type (for example, the return
646  // type is an incomplete struct). Use a fake type instead, and make
647  // sure not to try to set attributes.
648  bool IsIncompleteFunction = false;
649  if (!isa<llvm::FunctionType>(Ty)) {
650    Ty = VMContext.getFunctionType(llvm::Type::VoidTy,
651                                 std::vector<const llvm::Type*>(), false);
652    IsIncompleteFunction = true;
653  }
654  llvm::Function *F = llvm::Function::Create(cast<llvm::FunctionType>(Ty),
655                                             llvm::Function::ExternalLinkage,
656                                             "", &getModule());
657  F->setName(MangledName);
658  if (D.getDecl())
659    SetFunctionAttributes(cast<FunctionDecl>(D.getDecl()), F,
660                          IsIncompleteFunction);
661  Entry = F;
662  return F;
663}
664
665/// GetAddrOfFunction - Return the address of the given function.  If Ty is
666/// non-null, then this function will use the specified type if it has to
667/// create it (this occurs when we see a definition of the function).
668llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
669                                                 const llvm::Type *Ty) {
670  // If there was no specific requested type, just convert it now.
671  if (!Ty)
672    Ty = getTypes().ConvertType(GD.getDecl()->getType());
673  return GetOrCreateLLVMFunction(getMangledName(GD.getDecl()), Ty, GD);
674}
675
676/// CreateRuntimeFunction - Create a new runtime function with the specified
677/// type and name.
678llvm::Constant *
679CodeGenModule::CreateRuntimeFunction(const llvm::FunctionType *FTy,
680                                     const char *Name) {
681  // Convert Name to be a uniqued string from the IdentifierInfo table.
682  Name = getContext().Idents.get(Name).getName();
683  return GetOrCreateLLVMFunction(Name, FTy, GlobalDecl());
684}
685
686/// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,
687/// create and return an llvm GlobalVariable with the specified type.  If there
688/// is something in the module with the specified name, return it potentially
689/// bitcasted to the right type.
690///
691/// If D is non-null, it specifies a decl that correspond to this.  This is used
692/// to set the attributes on the global when it is first created.
693llvm::Constant *CodeGenModule::GetOrCreateLLVMGlobal(const char *MangledName,
694                                                     const llvm::PointerType*Ty,
695                                                     const VarDecl *D) {
696  // Lookup the entry, lazily creating it if necessary.
697  llvm::GlobalValue *&Entry = GlobalDeclMap[MangledName];
698  if (Entry) {
699    if (Entry->getType() == Ty)
700      return Entry;
701
702    // Make sure the result is of the correct type.
703    return VMContext.getConstantExprBitCast(Entry, Ty);
704  }
705
706  // This is the first use or definition of a mangled name.  If there is a
707  // deferred decl with this name, remember that we need to emit it at the end
708  // of the file.
709  llvm::DenseMap<const char*, GlobalDecl>::iterator DDI =
710    DeferredDecls.find(MangledName);
711  if (DDI != DeferredDecls.end()) {
712    // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
713    // list, and remove it from DeferredDecls (since we don't need it anymore).
714    DeferredDeclsToEmit.push_back(DDI->second);
715    DeferredDecls.erase(DDI);
716  }
717
718  llvm::GlobalVariable *GV =
719    new llvm::GlobalVariable(getModule(), Ty->getElementType(), false,
720                             llvm::GlobalValue::ExternalLinkage,
721                             0, "", 0,
722                             false, Ty->getAddressSpace());
723  GV->setName(MangledName);
724
725  // Handle things which are present even on external declarations.
726  if (D) {
727    // FIXME: This code is overly simple and should be merged with other global
728    // handling.
729    GV->setConstant(D->getType().isConstant(Context));
730
731    // FIXME: Merge with other attribute handling code.
732    if (D->getStorageClass() == VarDecl::PrivateExtern)
733      GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
734
735    if (D->hasAttr<WeakAttr>() ||
736        D->hasAttr<WeakImportAttr>())
737      GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
738
739    GV->setThreadLocal(D->isThreadSpecified());
740  }
741
742  return Entry = GV;
743}
744
745
746/// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
747/// given global variable.  If Ty is non-null and if the global doesn't exist,
748/// then it will be greated with the specified type instead of whatever the
749/// normal requested type would be.
750llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
751                                                  const llvm::Type *Ty) {
752  assert(D->hasGlobalStorage() && "Not a global variable");
753  QualType ASTTy = D->getType();
754  if (Ty == 0)
755    Ty = getTypes().ConvertTypeForMem(ASTTy);
756
757  const llvm::PointerType *PTy =
758    VMContext.getPointerType(Ty, ASTTy.getAddressSpace());
759  return GetOrCreateLLVMGlobal(getMangledName(D), PTy, D);
760}
761
762/// CreateRuntimeVariable - Create a new runtime global variable with the
763/// specified type and name.
764llvm::Constant *
765CodeGenModule::CreateRuntimeVariable(const llvm::Type *Ty,
766                                     const char *Name) {
767  // Convert Name to be a uniqued string from the IdentifierInfo table.
768  Name = getContext().Idents.get(Name).getName();
769  return GetOrCreateLLVMGlobal(Name, VMContext.getPointerTypeUnqual(Ty), 0);
770}
771
772void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
773  assert(!D->getInit() && "Cannot emit definite definitions here!");
774
775  if (MayDeferGeneration(D)) {
776    // If we have not seen a reference to this variable yet, place it
777    // into the deferred declarations table to be emitted if needed
778    // later.
779    const char *MangledName = getMangledName(D);
780    if (GlobalDeclMap.count(MangledName) == 0) {
781      DeferredDecls[MangledName] = GlobalDecl(D);
782      return;
783    }
784  }
785
786  // The tentative definition is the only definition.
787  EmitGlobalVarDefinition(D);
788}
789
790void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
791  llvm::Constant *Init = 0;
792  QualType ASTTy = D->getType();
793
794  if (D->getInit() == 0) {
795    // This is a tentative definition; tentative definitions are
796    // implicitly initialized with { 0 }.
797    //
798    // Note that tentative definitions are only emitted at the end of
799    // a translation unit, so they should never have incomplete
800    // type. In addition, EmitTentativeDefinition makes sure that we
801    // never attempt to emit a tentative definition if a real one
802    // exists. A use may still exists, however, so we still may need
803    // to do a RAUW.
804    assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
805    Init = getLLVMContext().getNullValue(getTypes().ConvertTypeForMem(ASTTy));
806  } else {
807    Init = EmitConstantExpr(D->getInit(), D->getType());
808    if (!Init) {
809      ErrorUnsupported(D, "static initializer");
810      QualType T = D->getInit()->getType();
811      Init = VMContext.getUndef(getTypes().ConvertType(T));
812    }
813  }
814
815  const llvm::Type* InitType = Init->getType();
816  llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
817
818  // Strip off a bitcast if we got one back.
819  if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
820    assert(CE->getOpcode() == llvm::Instruction::BitCast ||
821           // all zero index gep.
822           CE->getOpcode() == llvm::Instruction::GetElementPtr);
823    Entry = CE->getOperand(0);
824  }
825
826  // Entry is now either a Function or GlobalVariable.
827  llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(Entry);
828
829  // We have a definition after a declaration with the wrong type.
830  // We must make a new GlobalVariable* and update everything that used OldGV
831  // (a declaration or tentative definition) with the new GlobalVariable*
832  // (which will be a definition).
833  //
834  // This happens if there is a prototype for a global (e.g.
835  // "extern int x[];") and then a definition of a different type (e.g.
836  // "int x[10];"). This also happens when an initializer has a different type
837  // from the type of the global (this happens with unions).
838  if (GV == 0 ||
839      GV->getType()->getElementType() != InitType ||
840      GV->getType()->getAddressSpace() != ASTTy.getAddressSpace()) {
841
842    // Remove the old entry from GlobalDeclMap so that we'll create a new one.
843    GlobalDeclMap.erase(getMangledName(D));
844
845    // Make a new global with the correct type, this is now guaranteed to work.
846    GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
847    GV->takeName(cast<llvm::GlobalValue>(Entry));
848
849    // Replace all uses of the old global with the new global
850    llvm::Constant *NewPtrForOldDecl =
851        VMContext.getConstantExprBitCast(GV, Entry->getType());
852    Entry->replaceAllUsesWith(NewPtrForOldDecl);
853
854    // Erase the old global, since it is no longer used.
855    cast<llvm::GlobalValue>(Entry)->eraseFromParent();
856  }
857
858  if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) {
859    SourceManager &SM = Context.getSourceManager();
860    AddAnnotation(EmitAnnotateAttr(GV, AA,
861                              SM.getInstantiationLineNumber(D->getLocation())));
862  }
863
864  GV->setInitializer(Init);
865  GV->setConstant(D->getType().isConstant(Context));
866  GV->setAlignment(getContext().getDeclAlignInBytes(D));
867
868  // Set the llvm linkage type as appropriate.
869  if (D->getStorageClass() == VarDecl::Static)
870    GV->setLinkage(llvm::Function::InternalLinkage);
871  else if (D->hasAttr<DLLImportAttr>())
872    GV->setLinkage(llvm::Function::DLLImportLinkage);
873  else if (D->hasAttr<DLLExportAttr>())
874    GV->setLinkage(llvm::Function::DLLExportLinkage);
875  else if (D->hasAttr<WeakAttr>())
876    GV->setLinkage(llvm::GlobalVariable::WeakAnyLinkage);
877  else if (!CompileOpts.NoCommon &&
878           (!D->hasExternalStorage() && !D->getInit()))
879    GV->setLinkage(llvm::GlobalVariable::CommonLinkage);
880  else
881    GV->setLinkage(llvm::GlobalVariable::ExternalLinkage);
882
883  SetCommonAttributes(D, GV);
884
885  // Emit global variable debug information.
886  if (CGDebugInfo *DI = getDebugInfo()) {
887    DI->setLocation(D->getLocation());
888    DI->EmitGlobalVariable(GV, D);
889  }
890}
891
892/// ReplaceUsesOfNonProtoTypeWithRealFunction - This function is called when we
893/// implement a function with no prototype, e.g. "int foo() {}".  If there are
894/// existing call uses of the old function in the module, this adjusts them to
895/// call the new function directly.
896///
897/// This is not just a cleanup: the always_inline pass requires direct calls to
898/// functions to be able to inline them.  If there is a bitcast in the way, it
899/// won't inline them.  Instcombine normally deletes these calls, but it isn't
900/// run at -O0.
901static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
902                                                      llvm::Function *NewFn) {
903  // If we're redefining a global as a function, don't transform it.
904  llvm::Function *OldFn = dyn_cast<llvm::Function>(Old);
905  if (OldFn == 0) return;
906
907  const llvm::Type *NewRetTy = NewFn->getReturnType();
908  llvm::SmallVector<llvm::Value*, 4> ArgList;
909
910  for (llvm::Value::use_iterator UI = OldFn->use_begin(), E = OldFn->use_end();
911       UI != E; ) {
912    // TODO: Do invokes ever occur in C code?  If so, we should handle them too.
913    unsigned OpNo = UI.getOperandNo();
914    llvm::CallInst *CI = dyn_cast<llvm::CallInst>(*UI++);
915    if (!CI || OpNo != 0) continue;
916
917    // If the return types don't match exactly, and if the call isn't dead, then
918    // we can't transform this call.
919    if (CI->getType() != NewRetTy && !CI->use_empty())
920      continue;
921
922    // If the function was passed too few arguments, don't transform.  If extra
923    // arguments were passed, we silently drop them.  If any of the types
924    // mismatch, we don't transform.
925    unsigned ArgNo = 0;
926    bool DontTransform = false;
927    for (llvm::Function::arg_iterator AI = NewFn->arg_begin(),
928         E = NewFn->arg_end(); AI != E; ++AI, ++ArgNo) {
929      if (CI->getNumOperands()-1 == ArgNo ||
930          CI->getOperand(ArgNo+1)->getType() != AI->getType()) {
931        DontTransform = true;
932        break;
933      }
934    }
935    if (DontTransform)
936      continue;
937
938    // Okay, we can transform this.  Create the new call instruction and copy
939    // over the required information.
940    ArgList.append(CI->op_begin()+1, CI->op_begin()+1+ArgNo);
941    llvm::CallInst *NewCall = llvm::CallInst::Create(NewFn, ArgList.begin(),
942                                                     ArgList.end(), "", CI);
943    ArgList.clear();
944    if (NewCall->getType() != llvm::Type::VoidTy)
945      NewCall->takeName(CI);
946    NewCall->setCallingConv(CI->getCallingConv());
947    NewCall->setAttributes(CI->getAttributes());
948
949    // Finally, remove the old call, replacing any uses with the new one.
950    if (!CI->use_empty())
951      CI->replaceAllUsesWith(NewCall);
952    CI->eraseFromParent();
953  }
954}
955
956
957void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
958  const llvm::FunctionType *Ty;
959  const FunctionDecl *D = cast<FunctionDecl>(GD.getDecl());
960
961  if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
962    bool isVariadic = D->getType()->getAsFunctionProtoType()->isVariadic();
963
964    Ty = getTypes().GetFunctionType(getTypes().getFunctionInfo(MD), isVariadic);
965  } else {
966    Ty = cast<llvm::FunctionType>(getTypes().ConvertType(D->getType()));
967
968    // As a special case, make sure that definitions of K&R function
969    // "type foo()" aren't declared as varargs (which forces the backend
970    // to do unnecessary work).
971    if (D->getType()->isFunctionNoProtoType()) {
972      assert(Ty->isVarArg() && "Didn't lower type as expected");
973      // Due to stret, the lowered function could have arguments.
974      // Just create the same type as was lowered by ConvertType
975      // but strip off the varargs bit.
976      std::vector<const llvm::Type*> Args(Ty->param_begin(), Ty->param_end());
977      Ty = VMContext.getFunctionType(Ty->getReturnType(), Args, false);
978    }
979  }
980
981  // Get or create the prototype for the function.
982  llvm::Constant *Entry = GetAddrOfFunction(GD, Ty);
983
984  // Strip off a bitcast if we got one back.
985  if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
986    assert(CE->getOpcode() == llvm::Instruction::BitCast);
987    Entry = CE->getOperand(0);
988  }
989
990
991  if (cast<llvm::GlobalValue>(Entry)->getType()->getElementType() != Ty) {
992    llvm::GlobalValue *OldFn = cast<llvm::GlobalValue>(Entry);
993
994    // If the types mismatch then we have to rewrite the definition.
995    assert(OldFn->isDeclaration() &&
996           "Shouldn't replace non-declaration");
997
998    // F is the Function* for the one with the wrong type, we must make a new
999    // Function* and update everything that used F (a declaration) with the new
1000    // Function* (which will be a definition).
1001    //
1002    // This happens if there is a prototype for a function
1003    // (e.g. "int f()") and then a definition of a different type
1004    // (e.g. "int f(int x)").  Start by making a new function of the
1005    // correct type, RAUW, then steal the name.
1006    GlobalDeclMap.erase(getMangledName(D));
1007    llvm::Function *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
1008    NewFn->takeName(OldFn);
1009
1010    // If this is an implementation of a function without a prototype, try to
1011    // replace any existing uses of the function (which may be calls) with uses
1012    // of the new function
1013    if (D->getType()->isFunctionNoProtoType()) {
1014      ReplaceUsesOfNonProtoTypeWithRealFunction(OldFn, NewFn);
1015      OldFn->removeDeadConstantUsers();
1016    }
1017
1018    // Replace uses of F with the Function we will endow with a body.
1019    if (!Entry->use_empty()) {
1020      llvm::Constant *NewPtrForOldDecl =
1021        VMContext.getConstantExprBitCast(NewFn, Entry->getType());
1022      Entry->replaceAllUsesWith(NewPtrForOldDecl);
1023    }
1024
1025    // Ok, delete the old function now, which is dead.
1026    OldFn->eraseFromParent();
1027
1028    Entry = NewFn;
1029  }
1030
1031  llvm::Function *Fn = cast<llvm::Function>(Entry);
1032
1033  CodeGenFunction(*this).GenerateCode(D, Fn);
1034
1035  SetFunctionDefinitionAttributes(D, Fn);
1036  SetLLVMFunctionAttributesForDefinition(D, Fn);
1037
1038  if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>())
1039    AddGlobalCtor(Fn, CA->getPriority());
1040  if (const DestructorAttr *DA = D->getAttr<DestructorAttr>())
1041    AddGlobalDtor(Fn, DA->getPriority());
1042}
1043
1044void CodeGenModule::EmitAliasDefinition(const ValueDecl *D) {
1045  const AliasAttr *AA = D->getAttr<AliasAttr>();
1046  assert(AA && "Not an alias?");
1047
1048  const llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
1049
1050  // Unique the name through the identifier table.
1051  const char *AliaseeName = AA->getAliasee().c_str();
1052  AliaseeName = getContext().Idents.get(AliaseeName).getName();
1053
1054  // Create a reference to the named value.  This ensures that it is emitted
1055  // if a deferred decl.
1056  llvm::Constant *Aliasee;
1057  if (isa<llvm::FunctionType>(DeclTy))
1058    Aliasee = GetOrCreateLLVMFunction(AliaseeName, DeclTy, GlobalDecl());
1059  else
1060    Aliasee = GetOrCreateLLVMGlobal(AliaseeName,
1061                                    VMContext.getPointerTypeUnqual(DeclTy), 0);
1062
1063  // Create the new alias itself, but don't set a name yet.
1064  llvm::GlobalValue *GA =
1065    new llvm::GlobalAlias(Aliasee->getType(),
1066                          llvm::Function::ExternalLinkage,
1067                          "", Aliasee, &getModule());
1068
1069  // See if there is already something with the alias' name in the module.
1070  const char *MangledName = getMangledName(D);
1071  llvm::GlobalValue *&Entry = GlobalDeclMap[MangledName];
1072
1073  if (Entry && !Entry->isDeclaration()) {
1074    // If there is a definition in the module, then it wins over the alias.
1075    // This is dubious, but allow it to be safe.  Just ignore the alias.
1076    GA->eraseFromParent();
1077    return;
1078  }
1079
1080  if (Entry) {
1081    // If there is a declaration in the module, then we had an extern followed
1082    // by the alias, as in:
1083    //   extern int test6();
1084    //   ...
1085    //   int test6() __attribute__((alias("test7")));
1086    //
1087    // Remove it and replace uses of it with the alias.
1088
1089    Entry->replaceAllUsesWith(VMContext.getConstantExprBitCast(GA,
1090                                                          Entry->getType()));
1091    Entry->eraseFromParent();
1092  }
1093
1094  // Now we know that there is no conflict, set the name.
1095  Entry = GA;
1096  GA->setName(MangledName);
1097
1098  // Set attributes which are particular to an alias; this is a
1099  // specialization of the attributes which may be set on a global
1100  // variable/function.
1101  if (D->hasAttr<DLLExportAttr>()) {
1102    if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
1103      // The dllexport attribute is ignored for undefined symbols.
1104      if (FD->getBody())
1105        GA->setLinkage(llvm::Function::DLLExportLinkage);
1106    } else {
1107      GA->setLinkage(llvm::Function::DLLExportLinkage);
1108    }
1109  } else if (D->hasAttr<WeakAttr>() ||
1110             D->hasAttr<WeakImportAttr>()) {
1111    GA->setLinkage(llvm::Function::WeakAnyLinkage);
1112  }
1113
1114  SetCommonAttributes(D, GA);
1115}
1116
1117/// getBuiltinLibFunction - Given a builtin id for a function like
1118/// "__builtin_fabsf", return a Function* for "fabsf".
1119llvm::Value *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) {
1120  assert((Context.BuiltinInfo.isLibFunction(BuiltinID) ||
1121          Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) &&
1122         "isn't a lib fn");
1123
1124  // Get the name, skip over the __builtin_ prefix (if necessary).
1125  const char *Name = Context.BuiltinInfo.GetName(BuiltinID);
1126  if (Context.BuiltinInfo.isLibFunction(BuiltinID))
1127    Name += 10;
1128
1129  // Get the type for the builtin.
1130  ASTContext::GetBuiltinTypeError Error;
1131  QualType Type = Context.GetBuiltinType(BuiltinID, Error);
1132  assert(Error == ASTContext::GE_None && "Can't get builtin type");
1133
1134  const llvm::FunctionType *Ty =
1135    cast<llvm::FunctionType>(getTypes().ConvertType(Type));
1136
1137  // Unique the name through the identifier table.
1138  Name = getContext().Idents.get(Name).getName();
1139  // FIXME: param attributes for sext/zext etc.
1140  return GetOrCreateLLVMFunction(Name, Ty, GlobalDecl());
1141}
1142
1143llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys,
1144                                            unsigned NumTys) {
1145  return llvm::Intrinsic::getDeclaration(&getModule(),
1146                                         (llvm::Intrinsic::ID)IID, Tys, NumTys);
1147}
1148
1149llvm::Function *CodeGenModule::getMemCpyFn() {
1150  if (MemCpyFn) return MemCpyFn;
1151  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
1152  return MemCpyFn = getIntrinsic(llvm::Intrinsic::memcpy, &IntPtr, 1);
1153}
1154
1155llvm::Function *CodeGenModule::getMemMoveFn() {
1156  if (MemMoveFn) return MemMoveFn;
1157  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
1158  return MemMoveFn = getIntrinsic(llvm::Intrinsic::memmove, &IntPtr, 1);
1159}
1160
1161llvm::Function *CodeGenModule::getMemSetFn() {
1162  if (MemSetFn) return MemSetFn;
1163  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
1164  return MemSetFn = getIntrinsic(llvm::Intrinsic::memset, &IntPtr, 1);
1165}
1166
1167static void appendFieldAndPadding(CodeGenModule &CGM,
1168                                  std::vector<llvm::Constant*>& Fields,
1169                                  FieldDecl *FieldD, FieldDecl *NextFieldD,
1170                                  llvm::Constant* Field,
1171                                  RecordDecl* RD, const llvm::StructType *STy) {
1172  // Append the field.
1173  Fields.push_back(Field);
1174
1175  int StructFieldNo = CGM.getTypes().getLLVMFieldNo(FieldD);
1176
1177  int NextStructFieldNo;
1178  if (!NextFieldD) {
1179    NextStructFieldNo = STy->getNumElements();
1180  } else {
1181    NextStructFieldNo = CGM.getTypes().getLLVMFieldNo(NextFieldD);
1182  }
1183
1184  // Append padding
1185  for (int i = StructFieldNo + 1; i < NextStructFieldNo; i++) {
1186    llvm::Constant *C =
1187      CGM.getLLVMContext().getNullValue(STy->getElementType(StructFieldNo + 1));
1188
1189    Fields.push_back(C);
1190  }
1191}
1192
1193llvm::Constant *CodeGenModule::
1194GetAddrOfConstantCFString(const StringLiteral *Literal) {
1195  std::string str;
1196  unsigned StringLength = 0;
1197
1198  bool isUTF16 = false;
1199  if (Literal->containsNonAsciiOrNull()) {
1200    // Convert from UTF-8 to UTF-16.
1201    llvm::SmallVector<UTF16, 128> ToBuf(Literal->getByteLength());
1202    const UTF8 *FromPtr = (UTF8 *)Literal->getStrData();
1203    UTF16 *ToPtr = &ToBuf[0];
1204
1205    ConversionResult Result;
1206    Result = ConvertUTF8toUTF16(&FromPtr, FromPtr+Literal->getByteLength(),
1207                                &ToPtr, ToPtr+Literal->getByteLength(),
1208                                strictConversion);
1209    if (Result == conversionOK) {
1210      // FIXME: Storing UTF-16 in a C string is a hack to test Unicode strings
1211      // without doing more surgery to this routine. Since we aren't explicitly
1212      // checking for endianness here, it's also a bug (when generating code for
1213      // a target that doesn't match the host endianness). Modeling this as an
1214      // i16 array is likely the cleanest solution.
1215      StringLength = ToPtr-&ToBuf[0];
1216      str.assign((char *)&ToBuf[0], StringLength*2);// Twice as many UTF8 chars.
1217      isUTF16 = true;
1218    } else {
1219      assert(Result == sourceIllegal && "UTF-8 to UTF-16 conversion failed");
1220      // FIXME: Have Sema::CheckObjCString() validate the UTF-8 string.
1221      StringLength = Literal->getByteLength();
1222      str.assign(Literal->getStrData(), StringLength);
1223    }
1224  } else {
1225    StringLength = Literal->getByteLength();
1226    str.assign(Literal->getStrData(), StringLength);
1227  }
1228  llvm::Constant *&Entry = CFConstantStringMap[str];
1229
1230  if (Entry)
1231    return Entry;
1232
1233  llvm::Constant *Zero = getLLVMContext().getNullValue(llvm::Type::Int32Ty);
1234  llvm::Constant *Zeros[] = { Zero, Zero };
1235
1236  // If we don't already have it, get __CFConstantStringClassReference.
1237  if (!CFConstantStringClassRef) {
1238    const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
1239    Ty = VMContext.getArrayType(Ty, 0);
1240    llvm::Constant *GV = CreateRuntimeVariable(Ty,
1241                                           "__CFConstantStringClassReference");
1242    // Decay array -> ptr
1243    CFConstantStringClassRef =
1244      VMContext.getConstantExprGetElementPtr(GV, Zeros, 2);
1245  }
1246
1247  QualType CFTy = getContext().getCFConstantStringType();
1248  RecordDecl *CFRD = CFTy->getAsRecordType()->getDecl();
1249
1250  const llvm::StructType *STy =
1251    cast<llvm::StructType>(getTypes().ConvertType(CFTy));
1252
1253  std::vector<llvm::Constant*> Fields;
1254  RecordDecl::field_iterator Field = CFRD->field_begin();
1255
1256  // Class pointer.
1257  FieldDecl *CurField = *Field++;
1258  FieldDecl *NextField = *Field++;
1259  appendFieldAndPadding(*this, Fields, CurField, NextField,
1260                        CFConstantStringClassRef, CFRD, STy);
1261
1262  // Flags.
1263  CurField = NextField;
1264  NextField = *Field++;
1265  const llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
1266  appendFieldAndPadding(*this, Fields, CurField, NextField,
1267                        isUTF16 ? VMContext.getConstantInt(Ty, 0x07d0)
1268                                : VMContext.getConstantInt(Ty, 0x07C8),
1269                        CFRD, STy);
1270
1271  // String pointer.
1272  CurField = NextField;
1273  NextField = *Field++;
1274  llvm::Constant *C = VMContext.getConstantArray(str);
1275
1276  const char *Sect, *Prefix;
1277  bool isConstant;
1278  llvm::GlobalValue::LinkageTypes Linkage;
1279  if (isUTF16) {
1280    Prefix = getContext().Target.getUnicodeStringSymbolPrefix();
1281    Sect = getContext().Target.getUnicodeStringSection();
1282    // FIXME: why do utf strings get "l" labels instead of "L" labels?
1283    Linkage = llvm::GlobalValue::InternalLinkage;
1284    // FIXME: Why does GCC not set constant here?
1285    isConstant = false;
1286  } else {
1287    Prefix = ".str";
1288    Sect = getContext().Target.getCFStringDataSection();
1289    Linkage = llvm::GlobalValue::PrivateLinkage;
1290    // FIXME: -fwritable-strings should probably affect this, but we
1291    // are following gcc here.
1292    isConstant = true;
1293  }
1294  llvm::GlobalVariable *GV =
1295    new llvm::GlobalVariable(getModule(), C->getType(), isConstant,
1296                             Linkage, C, Prefix);
1297  if (Sect)
1298    GV->setSection(Sect);
1299  if (isUTF16) {
1300    unsigned Align = getContext().getTypeAlign(getContext().ShortTy)/8;
1301    GV->setAlignment(Align);
1302  }
1303  appendFieldAndPadding(*this, Fields, CurField, NextField,
1304                        VMContext.getConstantExprGetElementPtr(GV, Zeros, 2),
1305                        CFRD, STy);
1306
1307  // String length.
1308  CurField = NextField;
1309  NextField = 0;
1310  Ty = getTypes().ConvertType(getContext().LongTy);
1311  appendFieldAndPadding(*this, Fields, CurField, NextField,
1312                        VMContext.getConstantInt(Ty, StringLength), CFRD, STy);
1313
1314  // The struct.
1315  C = VMContext.getConstantStruct(STy, Fields);
1316  GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
1317                                llvm::GlobalVariable::PrivateLinkage, C,
1318                                "_unnamed_cfstring_");
1319  if (const char *Sect = getContext().Target.getCFStringSection())
1320    GV->setSection(Sect);
1321  Entry = GV;
1322
1323  return GV;
1324}
1325
1326/// GetStringForStringLiteral - Return the appropriate bytes for a
1327/// string literal, properly padded to match the literal type.
1328std::string CodeGenModule::GetStringForStringLiteral(const StringLiteral *E) {
1329  const char *StrData = E->getStrData();
1330  unsigned Len = E->getByteLength();
1331
1332  const ConstantArrayType *CAT =
1333    getContext().getAsConstantArrayType(E->getType());
1334  assert(CAT && "String isn't pointer or array!");
1335
1336  // Resize the string to the right size.
1337  std::string Str(StrData, StrData+Len);
1338  uint64_t RealLen = CAT->getSize().getZExtValue();
1339
1340  if (E->isWide())
1341    RealLen *= getContext().Target.getWCharWidth()/8;
1342
1343  Str.resize(RealLen, '\0');
1344
1345  return Str;
1346}
1347
1348/// GetAddrOfConstantStringFromLiteral - Return a pointer to a
1349/// constant array for the given string literal.
1350llvm::Constant *
1351CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
1352  // FIXME: This can be more efficient.
1353  return GetAddrOfConstantString(GetStringForStringLiteral(S));
1354}
1355
1356/// GetAddrOfConstantStringFromObjCEncode - Return a pointer to a constant
1357/// array for the given ObjCEncodeExpr node.
1358llvm::Constant *
1359CodeGenModule::GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *E) {
1360  std::string Str;
1361  getContext().getObjCEncodingForType(E->getEncodedType(), Str);
1362
1363  return GetAddrOfConstantCString(Str);
1364}
1365
1366
1367/// GenerateWritableString -- Creates storage for a string literal.
1368static llvm::Constant *GenerateStringLiteral(const std::string &str,
1369                                             bool constant,
1370                                             CodeGenModule &CGM,
1371                                             const char *GlobalName) {
1372  // Create Constant for this string literal. Don't add a '\0'.
1373  llvm::Constant *C = CGM.getLLVMContext().getConstantArray(str, false);
1374
1375  // Create a global variable for this string
1376  return new llvm::GlobalVariable(CGM.getModule(), C->getType(), constant,
1377                                  llvm::GlobalValue::PrivateLinkage,
1378                                  C, GlobalName);
1379}
1380
1381/// GetAddrOfConstantString - Returns a pointer to a character array
1382/// containing the literal. This contents are exactly that of the
1383/// given string, i.e. it will not be null terminated automatically;
1384/// see GetAddrOfConstantCString. Note that whether the result is
1385/// actually a pointer to an LLVM constant depends on
1386/// Feature.WriteableStrings.
1387///
1388/// The result has pointer to array type.
1389llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str,
1390                                                       const char *GlobalName) {
1391  bool IsConstant = !Features.WritableStrings;
1392
1393  // Get the default prefix if a name wasn't specified.
1394  if (!GlobalName)
1395    GlobalName = ".str";
1396
1397  // Don't share any string literals if strings aren't constant.
1398  if (!IsConstant)
1399    return GenerateStringLiteral(str, false, *this, GlobalName);
1400
1401  llvm::StringMapEntry<llvm::Constant *> &Entry =
1402    ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
1403
1404  if (Entry.getValue())
1405    return Entry.getValue();
1406
1407  // Create a global variable for this.
1408  llvm::Constant *C = GenerateStringLiteral(str, true, *this, GlobalName);
1409  Entry.setValue(C);
1410  return C;
1411}
1412
1413/// GetAddrOfConstantCString - Returns a pointer to a character
1414/// array containing the literal and a terminating '\-'
1415/// character. The result has pointer to array type.
1416llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str,
1417                                                        const char *GlobalName){
1418  return GetAddrOfConstantString(str + '\0', GlobalName);
1419}
1420
1421/// EmitObjCPropertyImplementations - Emit information for synthesized
1422/// properties for an implementation.
1423void CodeGenModule::EmitObjCPropertyImplementations(const
1424                                                    ObjCImplementationDecl *D) {
1425  for (ObjCImplementationDecl::propimpl_iterator
1426         i = D->propimpl_begin(), e = D->propimpl_end(); i != e; ++i) {
1427    ObjCPropertyImplDecl *PID = *i;
1428
1429    // Dynamic is just for type-checking.
1430    if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
1431      ObjCPropertyDecl *PD = PID->getPropertyDecl();
1432
1433      // Determine which methods need to be implemented, some may have
1434      // been overridden. Note that ::isSynthesized is not the method
1435      // we want, that just indicates if the decl came from a
1436      // property. What we want to know is if the method is defined in
1437      // this implementation.
1438      if (!D->getInstanceMethod(PD->getGetterName()))
1439        CodeGenFunction(*this).GenerateObjCGetter(
1440                                 const_cast<ObjCImplementationDecl *>(D), PID);
1441      if (!PD->isReadOnly() &&
1442          !D->getInstanceMethod(PD->getSetterName()))
1443        CodeGenFunction(*this).GenerateObjCSetter(
1444                                 const_cast<ObjCImplementationDecl *>(D), PID);
1445    }
1446  }
1447}
1448
1449/// EmitNamespace - Emit all declarations in a namespace.
1450void CodeGenModule::EmitNamespace(const NamespaceDecl *ND) {
1451  for (RecordDecl::decl_iterator I = ND->decls_begin(), E = ND->decls_end();
1452       I != E; ++I)
1453    EmitTopLevelDecl(*I);
1454}
1455
1456// EmitLinkageSpec - Emit all declarations in a linkage spec.
1457void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
1458  if (LSD->getLanguage() != LinkageSpecDecl::lang_c) {
1459    ErrorUnsupported(LSD, "linkage spec");
1460    return;
1461  }
1462
1463  for (RecordDecl::decl_iterator I = LSD->decls_begin(), E = LSD->decls_end();
1464       I != E; ++I)
1465    EmitTopLevelDecl(*I);
1466}
1467
1468/// EmitTopLevelDecl - Emit code for a single top level declaration.
1469void CodeGenModule::EmitTopLevelDecl(Decl *D) {
1470  // If an error has occurred, stop code generation, but continue
1471  // parsing and semantic analysis (to ensure all warnings and errors
1472  // are emitted).
1473  if (Diags.hasErrorOccurred())
1474    return;
1475
1476  // Ignore dependent declarations.
1477  if (D->getDeclContext() && D->getDeclContext()->isDependentContext())
1478    return;
1479
1480  switch (D->getKind()) {
1481  case Decl::CXXMethod:
1482  case Decl::Function:
1483    // Skip function templates
1484    if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate())
1485      return;
1486
1487    // Fall through
1488
1489  case Decl::Var:
1490    EmitGlobal(GlobalDecl(cast<ValueDecl>(D)));
1491    break;
1492
1493  // C++ Decls
1494  case Decl::Namespace:
1495    EmitNamespace(cast<NamespaceDecl>(D));
1496    break;
1497    // No code generation needed.
1498  case Decl::Using:
1499  case Decl::ClassTemplate:
1500  case Decl::FunctionTemplate:
1501    break;
1502  case Decl::CXXConstructor:
1503    EmitCXXConstructors(cast<CXXConstructorDecl>(D));
1504    break;
1505  case Decl::CXXDestructor:
1506    EmitCXXDestructors(cast<CXXDestructorDecl>(D));
1507    break;
1508
1509  case Decl::StaticAssert:
1510    // Nothing to do.
1511    break;
1512
1513  // Objective-C Decls
1514
1515  // Forward declarations, no (immediate) code generation.
1516  case Decl::ObjCClass:
1517  case Decl::ObjCForwardProtocol:
1518  case Decl::ObjCCategory:
1519  case Decl::ObjCInterface:
1520    break;
1521
1522  case Decl::ObjCProtocol:
1523    Runtime->GenerateProtocol(cast<ObjCProtocolDecl>(D));
1524    break;
1525
1526  case Decl::ObjCCategoryImpl:
1527    // Categories have properties but don't support synthesize so we
1528    // can ignore them here.
1529    Runtime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
1530    break;
1531
1532  case Decl::ObjCImplementation: {
1533    ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
1534    EmitObjCPropertyImplementations(OMD);
1535    Runtime->GenerateClass(OMD);
1536    break;
1537  }
1538  case Decl::ObjCMethod: {
1539    ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
1540    // If this is not a prototype, emit the body.
1541    if (OMD->getBody())
1542      CodeGenFunction(*this).GenerateObjCMethod(OMD);
1543    break;
1544  }
1545  case Decl::ObjCCompatibleAlias:
1546    // compatibility-alias is a directive and has no code gen.
1547    break;
1548
1549  case Decl::LinkageSpec:
1550    EmitLinkageSpec(cast<LinkageSpecDecl>(D));
1551    break;
1552
1553  case Decl::FileScopeAsm: {
1554    FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
1555    std::string AsmString(AD->getAsmString()->getStrData(),
1556                          AD->getAsmString()->getByteLength());
1557
1558    const std::string &S = getModule().getModuleInlineAsm();
1559    if (S.empty())
1560      getModule().setModuleInlineAsm(AsmString);
1561    else
1562      getModule().setModuleInlineAsm(S + '\n' + AsmString);
1563    break;
1564  }
1565
1566  default:
1567    // Make sure we handled everything we should, every other kind is a
1568    // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
1569    // function. Need to recode Decl::Kind to do that easily.
1570    assert(isa<TypeDecl>(D) && "Unsupported decl kind");
1571  }
1572}
1573