CodeGenModule.cpp revision 49988884c1da4b2200bfe2298a1e41b3f044e8d4
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 "CGDebugInfo.h"
15#include "CodeGenModule.h"
16#include "CodeGenFunction.h"
17#include "CGCall.h"
18#include "CGObjCRuntime.h"
19#include "clang/AST/ASTContext.h"
20#include "clang/AST/DeclObjC.h"
21#include "clang/AST/DeclCXX.h"
22#include "clang/Basic/Diagnostic.h"
23#include "clang/Basic/SourceManager.h"
24#include "clang/Basic/TargetInfo.h"
25#include "llvm/CallingConv.h"
26#include "llvm/Module.h"
27#include "llvm/Intrinsics.h"
28#include "llvm/Target/TargetData.h"
29using namespace clang;
30using namespace CodeGen;
31
32
33CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
34                             llvm::Module &M, const llvm::TargetData &TD,
35                             Diagnostic &diags, bool GenerateDebugInfo)
36  : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags),
37    Types(C, M, TD), Runtime(0), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
38    CFConstantStringClassRef(0) {
39
40  if (Features.ObjC1) {
41    if (Features.NeXTRuntime) {
42      Runtime = CreateMacObjCRuntime(*this);
43    } else {
44      Runtime = CreateGNUObjCRuntime(*this);
45    }
46  }
47
48  // If debug info generation is enabled, create the CGDebugInfo object.
49  DebugInfo = GenerateDebugInfo ? new CGDebugInfo(this) : 0;
50}
51
52CodeGenModule::~CodeGenModule() {
53  delete Runtime;
54  delete DebugInfo;
55}
56
57void CodeGenModule::Release() {
58  EmitStatics();
59  EmitAliases();
60  if (Runtime)
61    if (llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction())
62      AddGlobalCtor(ObjCInitFunction);
63  EmitCtorList(GlobalCtors, "llvm.global_ctors");
64  EmitCtorList(GlobalDtors, "llvm.global_dtors");
65  EmitAnnotations();
66  BindRuntimeFunctions();
67}
68
69void CodeGenModule::BindRuntimeFunctions() {
70  // Deal with protecting runtime function names.
71  for (unsigned i = 0, e = RuntimeFunctions.size(); i < e; ++i) {
72    llvm::Function *Fn = RuntimeFunctions[i].first;
73    const std::string &Name = RuntimeFunctions[i].second;
74
75    // Discard unused runtime functions.
76    if (Fn->use_empty()) {
77      Fn->eraseFromParent();
78      continue;
79    }
80
81    // See if there is a conflict against a function.
82    llvm::Function *Conflict = TheModule.getFunction(Name);
83    if (Conflict) {
84      // Decide which version to take. If the conflict is a definition
85      // we are forced to take that, otherwise assume the runtime
86      // knows best.
87      if (!Conflict->isDeclaration()) {
88        llvm::Value *Casted =
89          llvm::ConstantExpr::getBitCast(Conflict, Fn->getType());
90        Fn->replaceAllUsesWith(Casted);
91        Fn->eraseFromParent();
92      } else {
93        Fn->takeName(Conflict);
94        llvm::Value *Casted =
95          llvm::ConstantExpr::getBitCast(Fn, Conflict->getType());
96        Conflict->replaceAllUsesWith(Casted);
97        Conflict->eraseFromParent();
98      }
99    } else {
100      // FIXME: There still may be conflicts with aliases and
101      // variables.
102      Fn->setName(Name);
103    }
104  }
105}
106
107/// ErrorUnsupported - Print out an error that codegen doesn't support the
108/// specified stmt yet.
109void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
110                                     bool OmitOnError) {
111  if (OmitOnError && getDiags().hasErrorOccurred())
112    return;
113  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
114                                               "cannot codegen this %0 yet");
115  std::string Msg = Type;
116  getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
117    << Msg << S->getSourceRange();
118}
119
120/// ErrorUnsupported - Print out an error that codegen doesn't support the
121/// specified decl yet.
122void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type,
123                                     bool OmitOnError) {
124  if (OmitOnError && getDiags().hasErrorOccurred())
125    return;
126  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
127                                               "cannot codegen this %0 yet");
128  std::string Msg = Type;
129  getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
130}
131
132/// setGlobalVisibility - Set the visibility for the given LLVM
133/// GlobalValue according to the given clang AST visibility value.
134static void setGlobalVisibility(llvm::GlobalValue *GV,
135                                VisibilityAttr::VisibilityTypes Vis) {
136  switch (Vis) {
137  default: assert(0 && "Unknown visibility!");
138  case VisibilityAttr::DefaultVisibility:
139    GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
140    break;
141  case VisibilityAttr::HiddenVisibility:
142    GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
143    break;
144  case VisibilityAttr::ProtectedVisibility:
145    GV->setVisibility(llvm::GlobalValue::ProtectedVisibility);
146    break;
147  }
148}
149
150/// AddGlobalCtor - Add a function to the list that will be called before
151/// main() runs.
152void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
153  // FIXME: Type coercion of void()* types.
154  GlobalCtors.push_back(std::make_pair(Ctor, Priority));
155}
156
157/// AddGlobalDtor - Add a function to the list that will be called
158/// when the module is unloaded.
159void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
160  // FIXME: Type coercion of void()* types.
161  GlobalDtors.push_back(std::make_pair(Dtor, Priority));
162}
163
164void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
165  // Ctor function type is void()*.
166  llvm::FunctionType* CtorFTy =
167    llvm::FunctionType::get(llvm::Type::VoidTy,
168                            std::vector<const llvm::Type*>(),
169                            false);
170  llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
171
172  // Get the type of a ctor entry, { i32, void ()* }.
173  llvm::StructType* CtorStructTy =
174    llvm::StructType::get(llvm::Type::Int32Ty,
175                          llvm::PointerType::getUnqual(CtorFTy), NULL);
176
177  // Construct the constructor and destructor arrays.
178  std::vector<llvm::Constant*> Ctors;
179  for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
180    std::vector<llvm::Constant*> S;
181    S.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, I->second, false));
182    S.push_back(llvm::ConstantExpr::getBitCast(I->first, CtorPFTy));
183    Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
184  }
185
186  if (!Ctors.empty()) {
187    llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
188    new llvm::GlobalVariable(AT, false,
189                             llvm::GlobalValue::AppendingLinkage,
190                             llvm::ConstantArray::get(AT, Ctors),
191                             GlobalName,
192                             &TheModule);
193  }
194}
195
196void CodeGenModule::EmitAnnotations() {
197  if (Annotations.empty())
198    return;
199
200  // Create a new global variable for the ConstantStruct in the Module.
201  llvm::Constant *Array =
202  llvm::ConstantArray::get(llvm::ArrayType::get(Annotations[0]->getType(),
203                                                Annotations.size()),
204                           Annotations);
205  llvm::GlobalValue *gv =
206  new llvm::GlobalVariable(Array->getType(), false,
207                           llvm::GlobalValue::AppendingLinkage, Array,
208                           "llvm.global.annotations", &TheModule);
209  gv->setSection("llvm.metadata");
210}
211
212static void SetGlobalValueAttributes(const Decl *D,
213                                     bool IsInternal,
214                                     bool IsInline,
215                                     llvm::GlobalValue *GV,
216                                     bool ForDefinition) {
217  // FIXME: Set up linkage and many other things.  Note, this is a simple
218  // approximation of what we really want.
219  if (!ForDefinition) {
220    // Only a few attributes are set on declarations.
221    if (D->getAttr<DLLImportAttr>()) {
222      // The dllimport attribute is overridden by a subsequent declaration as
223      // dllexport.
224      if (!D->getAttr<DLLExportAttr>()) {
225        // dllimport attribute can be applied only to function decls, not to
226        // definitions.
227        if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
228          if (!FD->getBody())
229            GV->setLinkage(llvm::Function::DLLImportLinkage);
230        } else
231          GV->setLinkage(llvm::Function::DLLImportLinkage);
232      }
233    }
234  } else {
235    if (IsInternal) {
236      GV->setLinkage(llvm::Function::InternalLinkage);
237    } else {
238      if (D->getAttr<DLLExportAttr>()) {
239        if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
240          // The dllexport attribute is ignored for undefined symbols.
241          if (FD->getBody())
242            GV->setLinkage(llvm::Function::DLLExportLinkage);
243        } else
244          GV->setLinkage(llvm::Function::DLLExportLinkage);
245      } else if (D->getAttr<WeakAttr>() || IsInline)
246        GV->setLinkage(llvm::Function::WeakLinkage);
247    }
248  }
249
250  // FIXME: Figure out the relative priority of the attribute,
251  // -fvisibility, and private_extern.
252  if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>())
253    setGlobalVisibility(GV, attr->getVisibility());
254  // FIXME: else handle -fvisibility
255
256  if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
257    // Prefaced with special LLVM marker to indicate that the name
258    // should not be munged.
259    GV->setName("\01" + ALA->getLabel());
260  }
261}
262
263void CodeGenModule::SetFunctionAttributes(const Decl *D,
264                                          const CGFunctionInfo &Info,
265                                          llvm::Function *F) {
266  AttributeListType AttributeList;
267  ConstructAttributeList(D, Info.argtypes_begin(), Info.argtypes_end(),
268                         AttributeList);
269
270  F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(),
271                                        AttributeList.size()));
272
273  // Set the appropriate calling convention for the Function.
274  if (D->getAttr<FastCallAttr>())
275    F->setCallingConv(llvm::CallingConv::X86_FastCall);
276
277  if (D->getAttr<StdCallAttr>())
278    F->setCallingConv(llvm::CallingConv::X86_StdCall);
279}
280
281/// SetFunctionAttributesForDefinition - Set function attributes
282/// specific to a function definition.
283void CodeGenModule::SetFunctionAttributesForDefinition(const Decl *D,
284                                                       llvm::Function *F) {
285  if (isa<ObjCMethodDecl>(D)) {
286    SetGlobalValueAttributes(D, true, false, F, true);
287  } else {
288    const FunctionDecl *FD = cast<FunctionDecl>(D);
289    SetGlobalValueAttributes(FD, FD->getStorageClass() == FunctionDecl::Static,
290                             FD->isInline(), F, true);
291  }
292
293  if (!Features.Exceptions)
294    F->addFnAttr(llvm::Attribute::NoUnwind);
295
296  if (D->getAttr<AlwaysInlineAttr>())
297    F->addFnAttr(llvm::Attribute::AlwaysInline);
298}
299
300void CodeGenModule::SetMethodAttributes(const ObjCMethodDecl *MD,
301                                        llvm::Function *F) {
302  SetFunctionAttributes(MD, CGFunctionInfo(MD, Context), F);
303
304  SetFunctionAttributesForDefinition(MD, F);
305}
306
307void CodeGenModule::SetFunctionAttributes(const FunctionDecl *FD,
308                                          llvm::Function *F) {
309  SetFunctionAttributes(FD, CGFunctionInfo(FD), F);
310
311  SetGlobalValueAttributes(FD, FD->getStorageClass() == FunctionDecl::Static,
312                           FD->isInline(), F, false);
313}
314
315
316void CodeGenModule::EmitAliases() {
317  for (unsigned i = 0, e = Aliases.size(); i != e; ++i) {
318    const FunctionDecl *D = Aliases[i];
319    const AliasAttr *AA = D->getAttr<AliasAttr>();
320
321    // This is something of a hack, if the FunctionDecl got overridden
322    // then its attributes will be moved to the new declaration. In
323    // this case the current decl has no alias attribute, but we will
324    // eventually see it.
325    if (!AA)
326      continue;
327
328    const std::string& aliaseeName = AA->getAliasee();
329    llvm::Function *aliasee = getModule().getFunction(aliaseeName);
330    if (!aliasee) {
331      // FIXME: This isn't unsupported, this is just an error, which
332      // sema should catch, but...
333      ErrorUnsupported(D, "alias referencing a missing function");
334      continue;
335    }
336
337    llvm::GlobalValue *GA =
338      new llvm::GlobalAlias(aliasee->getType(),
339                            llvm::Function::ExternalLinkage,
340                            D->getNameAsString(), aliasee, &getModule());
341
342    llvm::GlobalValue *&Entry = GlobalDeclMap[D->getIdentifier()];
343    if (Entry) {
344      // If we created a dummy function for this then replace it.
345      GA->takeName(Entry);
346
347      llvm::Value *Casted =
348        llvm::ConstantExpr::getBitCast(GA, Entry->getType());
349      Entry->replaceAllUsesWith(Casted);
350      Entry->eraseFromParent();
351
352      Entry = GA;
353    }
354
355    // Alias should never be internal or inline.
356    SetGlobalValueAttributes(D, false, false, GA, true);
357  }
358}
359
360void CodeGenModule::EmitStatics() {
361  // Emit code for each used static decl encountered.  Since a previously unused
362  // static decl may become used during the generation of code for a static
363  // function, iterate until no changes are made.
364  bool Changed;
365  do {
366    Changed = false;
367
368    for (std::list<const ValueDecl*>::iterator i = StaticDecls.begin(),
369         e = StaticDecls.end(); i != e; ) {
370      const ValueDecl *D = *i;
371
372      // Check if we have used a decl with the same name
373      // FIXME: The AST should have some sort of aggregate decls or
374      // global symbol map.
375      // FIXME: This is missing some important cases. For example, we
376      // need to check for uses in an alias and in a constructor.
377      if (!GlobalDeclMap.count(D->getIdentifier())) {
378        i++;
379        continue;
380      }
381
382      // Emit the definition.
383      EmitGlobalDefinition(D);
384
385      // Erase the used decl from the list.
386      i = StaticDecls.erase(i);
387
388      // Remember that we made a change.
389      Changed = true;
390    }
391  } while (Changed);
392}
393
394/// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the
395/// annotation information for a given GlobalValue.  The annotation struct is
396/// {i8 *, i8 *, i8 *, i32}.  The first field is a constant expression, the
397/// GlobalValue being annotated.  The second field is the constant string
398/// created from the AnnotateAttr's annotation.  The third field is a constant
399/// string containing the name of the translation unit.  The fourth field is
400/// the line number in the file of the annotated value declaration.
401///
402/// FIXME: this does not unique the annotation string constants, as llvm-gcc
403///        appears to.
404///
405llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
406                                                const AnnotateAttr *AA,
407                                                unsigned LineNo) {
408  llvm::Module *M = &getModule();
409
410  // get [N x i8] constants for the annotation string, and the filename string
411  // which are the 2nd and 3rd elements of the global annotation structure.
412  const llvm::Type *SBP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
413  llvm::Constant *anno = llvm::ConstantArray::get(AA->getAnnotation(), true);
414  llvm::Constant *unit = llvm::ConstantArray::get(M->getModuleIdentifier(),
415                                                  true);
416
417  // Get the two global values corresponding to the ConstantArrays we just
418  // created to hold the bytes of the strings.
419  llvm::GlobalValue *annoGV =
420  new llvm::GlobalVariable(anno->getType(), false,
421                           llvm::GlobalValue::InternalLinkage, anno,
422                           GV->getName() + ".str", M);
423  // translation unit name string, emitted into the llvm.metadata section.
424  llvm::GlobalValue *unitGV =
425  new llvm::GlobalVariable(unit->getType(), false,
426                           llvm::GlobalValue::InternalLinkage, unit, ".str", M);
427
428  // Create the ConstantStruct that is the global annotion.
429  llvm::Constant *Fields[4] = {
430    llvm::ConstantExpr::getBitCast(GV, SBP),
431    llvm::ConstantExpr::getBitCast(annoGV, SBP),
432    llvm::ConstantExpr::getBitCast(unitGV, SBP),
433    llvm::ConstantInt::get(llvm::Type::Int32Ty, LineNo)
434  };
435  return llvm::ConstantStruct::get(Fields, 4, false);
436}
437
438void CodeGenModule::EmitGlobal(const ValueDecl *Global) {
439  bool isDef, isStatic;
440
441  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
442    // Aliases are deferred until code for everything else has been
443    // emitted.
444    if (FD->getAttr<AliasAttr>()) {
445      assert(!FD->isThisDeclarationADefinition() &&
446             "Function alias cannot have a definition!");
447      Aliases.push_back(FD);
448      return;
449    }
450
451    isDef = FD->isThisDeclarationADefinition();
452    isStatic = FD->getStorageClass() == FunctionDecl::Static;
453  } else if (const VarDecl *VD = cast<VarDecl>(Global)) {
454    assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
455
456    isDef = !((VD->getStorageClass() == VarDecl::Extern ||
457               VD->getStorageClass() == VarDecl::PrivateExtern) &&
458              VD->getInit() == 0);
459    isStatic = VD->getStorageClass() == VarDecl::Static;
460  } else {
461    assert(0 && "Invalid argument to EmitGlobal");
462    return;
463  }
464
465  // Forward declarations are emitted lazily on first use.
466  if (!isDef)
467    return;
468
469  // If the global is a static, defer code generation until later so
470  // we can easily omit unused statics.
471  if (isStatic) {
472    StaticDecls.push_back(Global);
473    return;
474  }
475
476  // Otherwise emit the definition.
477  EmitGlobalDefinition(Global);
478}
479
480void CodeGenModule::EmitGlobalDefinition(const ValueDecl *D) {
481  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
482    EmitGlobalFunctionDefinition(FD);
483  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
484    EmitGlobalVarDefinition(VD);
485  } else {
486    assert(0 && "Invalid argument to EmitGlobalDefinition()");
487  }
488}
489
490 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D) {
491  assert(D->hasGlobalStorage() && "Not a global variable");
492
493  QualType ASTTy = D->getType();
494  const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
495  const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
496
497  // Lookup the entry, lazily creating it if necessary.
498  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getIdentifier()];
499  if (!Entry) {
500    llvm::GlobalVariable *GV =
501      new llvm::GlobalVariable(Ty, false,
502                               llvm::GlobalValue::ExternalLinkage,
503                               0, D->getNameAsString(), &getModule(), 0,
504                               ASTTy.getAddressSpace());
505    Entry = GV;
506
507    // Handle things which are present even on external declarations.
508
509    // FIXME: This code is overly simple and should be merged with
510    // other global handling.
511
512    GV->setConstant(D->getType().isConstant(Context));
513
514    if (D->getStorageClass() == VarDecl::PrivateExtern)
515      setGlobalVisibility(GV, VisibilityAttr::HiddenVisibility);
516  }
517
518  // Make sure the result is of the correct type.
519  return llvm::ConstantExpr::getBitCast(Entry, PTy);
520}
521
522void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
523  llvm::Constant *Init = 0;
524  QualType ASTTy = D->getType();
525  const llvm::Type *VarTy = getTypes().ConvertTypeForMem(ASTTy);
526
527  if (D->getInit() == 0) {
528    // This is a tentative definition; tentative definitions are
529    // implicitly initialized with { 0 }
530    const llvm::Type* InitTy;
531    if (ASTTy->isIncompleteArrayType()) {
532      // An incomplete array is normally [ TYPE x 0 ], but we need
533      // to fix it to [ TYPE x 1 ].
534      const llvm::ArrayType* ATy = cast<llvm::ArrayType>(VarTy);
535      InitTy = llvm::ArrayType::get(ATy->getElementType(), 1);
536    } else {
537      InitTy = VarTy;
538    }
539    Init = llvm::Constant::getNullValue(InitTy);
540  } else {
541    Init = EmitConstantExpr(D->getInit());
542  }
543  const llvm::Type* InitType = Init->getType();
544
545  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getIdentifier()];
546  llvm::GlobalVariable *GV = cast_or_null<llvm::GlobalVariable>(Entry);
547
548  if (!GV) {
549    GV = new llvm::GlobalVariable(InitType, false,
550                                  llvm::GlobalValue::ExternalLinkage,
551                                  0, D->getNameAsString(), &getModule(), 0,
552                                  ASTTy.getAddressSpace());
553  } else if (GV->getType() !=
554             llvm::PointerType::get(InitType, ASTTy.getAddressSpace())) {
555    // We have a definition after a prototype with the wrong type.
556    // We must make a new GlobalVariable* and update everything that used OldGV
557    // (a declaration or tentative definition) with the new GlobalVariable*
558    // (which will be a definition).
559    //
560    // This happens if there is a prototype for a global (e.g. "extern int x[];")
561    // and then a definition of a different type (e.g. "int x[10];"). This also
562    // happens when an initializer has a different type from the type of the
563    // global (this happens with unions).
564    //
565    // FIXME: This also ends up happening if there's a definition followed by
566    // a tentative definition!  (Although Sema rejects that construct
567    // at the moment.)
568
569    // Save the old global
570    llvm::GlobalVariable *OldGV = GV;
571
572    // Make a new global with the correct type
573    GV = new llvm::GlobalVariable(InitType, false,
574                                  llvm::GlobalValue::ExternalLinkage,
575                                  0, D->getNameAsString(), &getModule(), 0,
576                                  ASTTy.getAddressSpace());
577    // Steal the name of the old global
578    GV->takeName(OldGV);
579
580    // Replace all uses of the old global with the new global
581    llvm::Constant *NewPtrForOldDecl =
582        llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
583    OldGV->replaceAllUsesWith(NewPtrForOldDecl);
584
585    // Erase the old global, since it is no longer used.
586    OldGV->eraseFromParent();
587  }
588
589  Entry = GV;
590
591  if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) {
592    SourceManager &SM = Context.getSourceManager();
593    AddAnnotation(EmitAnnotateAttr(GV, AA,
594                                   SM.getLogicalLineNumber(D->getLocation())));
595  }
596
597  GV->setInitializer(Init);
598  GV->setConstant(D->getType().isConstant(Context));
599
600  // FIXME: This is silly; getTypeAlign should just work for incomplete arrays
601  unsigned Align;
602  if (const IncompleteArrayType* IAT =
603        Context.getAsIncompleteArrayType(D->getType()))
604    Align = Context.getTypeAlign(IAT->getElementType());
605  else
606    Align = Context.getTypeAlign(D->getType());
607  if (const AlignedAttr* AA = D->getAttr<AlignedAttr>()) {
608    Align = std::max(Align, AA->getAlignment());
609  }
610  GV->setAlignment(Align / 8);
611
612  if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>())
613    setGlobalVisibility(GV, attr->getVisibility());
614  // FIXME: else handle -fvisibility
615
616  if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
617    // Prefaced with special LLVM marker to indicate that the name
618    // should not be munged.
619    GV->setName("\01" + ALA->getLabel());
620  }
621
622  // Set the llvm linkage type as appropriate.
623  if (D->getStorageClass() == VarDecl::Static)
624    GV->setLinkage(llvm::Function::InternalLinkage);
625  else if (D->getAttr<DLLImportAttr>())
626    GV->setLinkage(llvm::Function::DLLImportLinkage);
627  else if (D->getAttr<DLLExportAttr>())
628    GV->setLinkage(llvm::Function::DLLExportLinkage);
629  else if (D->getAttr<WeakAttr>())
630    GV->setLinkage(llvm::GlobalVariable::WeakLinkage);
631  else {
632    // FIXME: This isn't right.  This should handle common linkage and other
633    // stuff.
634    switch (D->getStorageClass()) {
635    case VarDecl::Static: assert(0 && "This case handled above");
636    case VarDecl::Auto:
637    case VarDecl::Register:
638      assert(0 && "Can't have auto or register globals");
639    case VarDecl::None:
640      if (!D->getInit())
641        GV->setLinkage(llvm::GlobalVariable::CommonLinkage);
642      else
643        GV->setLinkage(llvm::GlobalVariable::ExternalLinkage);
644      break;
645    case VarDecl::Extern:
646      // FIXME: common
647      break;
648
649    case VarDecl::PrivateExtern:
650      GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
651      // FIXME: common
652      break;
653    }
654  }
655
656  // Emit global variable debug information.
657  CGDebugInfo *DI = getDebugInfo();
658  if(DI) {
659    DI->setLocation(D->getLocation());
660    DI->EmitGlobalVariable(GV, D);
661  }
662}
663
664llvm::GlobalValue *
665CodeGenModule::EmitForwardFunctionDefinition(const FunctionDecl *D) {
666  const llvm::Type *Ty = getTypes().ConvertType(D->getType());
667  llvm::Function *F = llvm::Function::Create(cast<llvm::FunctionType>(Ty),
668                                             llvm::Function::ExternalLinkage,
669                                             D->getNameAsString(),&getModule());
670  SetFunctionAttributes(D, F);
671  return F;
672}
673
674llvm::Constant *CodeGenModule::GetAddrOfFunction(const FunctionDecl *D) {
675  QualType ASTTy = D->getType();
676  const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
677  const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
678
679  // Lookup the entry, lazily creating it if necessary.
680  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getIdentifier()];
681  if (!Entry)
682    Entry = EmitForwardFunctionDefinition(D);
683
684  return llvm::ConstantExpr::getBitCast(Entry, PTy);
685}
686
687void CodeGenModule::EmitGlobalFunctionDefinition(const FunctionDecl *D) {
688  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getIdentifier()];
689  if (!Entry) {
690    Entry = EmitForwardFunctionDefinition(D);
691  } else {
692    // If the types mismatch then we have to rewrite the definition.
693    const llvm::Type *Ty = getTypes().ConvertType(D->getType());
694    if (Entry->getType() != llvm::PointerType::getUnqual(Ty)) {
695      // Otherwise, we have a definition after a prototype with the wrong type.
696      // F is the Function* for the one with the wrong type, we must make a new
697      // Function* and update everything that used F (a declaration) with the new
698      // Function* (which will be a definition).
699      //
700      // This happens if there is a prototype for a function (e.g. "int f()") and
701      // then a definition of a different type (e.g. "int f(int x)").  Start by
702      // making a new function of the correct type, RAUW, then steal the name.
703      llvm::GlobalValue *NewFn = EmitForwardFunctionDefinition(D);
704      NewFn->takeName(Entry);
705
706      // Replace uses of F with the Function we will endow with a body.
707      llvm::Constant *NewPtrForOldDecl =
708        llvm::ConstantExpr::getBitCast(NewFn, Entry->getType());
709      Entry->replaceAllUsesWith(NewPtrForOldDecl);
710
711      // Ok, delete the old function now, which is dead.
712      assert(Entry->isDeclaration() && "Shouldn't replace non-declaration");
713      Entry->eraseFromParent();
714
715      Entry = NewFn;
716    }
717  }
718
719  llvm::Function *Fn = cast<llvm::Function>(Entry);
720  CodeGenFunction(*this).GenerateCode(D, Fn);
721
722  SetFunctionAttributesForDefinition(D, Fn);
723
724  if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>()) {
725    AddGlobalCtor(Fn, CA->getPriority());
726  } else if (const DestructorAttr *DA = D->getAttr<DestructorAttr>()) {
727    AddGlobalDtor(Fn, DA->getPriority());
728  }
729}
730
731llvm::Function *
732CodeGenModule::CreateRuntimeFunction(const llvm::FunctionType *FTy,
733                                     const std::string &Name) {
734  llvm::Function *Fn = llvm::Function::Create(FTy,
735                                              llvm::Function::ExternalLinkage,
736                                              "", &TheModule);
737  RuntimeFunctions.push_back(std::make_pair(Fn, Name));
738  return Fn;
739}
740
741void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
742  // Make sure that this type is translated.
743  Types.UpdateCompletedType(TD);
744}
745
746
747/// getBuiltinLibFunction
748llvm::Function *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) {
749  if (BuiltinID > BuiltinFunctions.size())
750    BuiltinFunctions.resize(BuiltinID);
751
752  // Cache looked up functions.  Since builtin id #0 is invalid we don't reserve
753  // a slot for it.
754  assert(BuiltinID && "Invalid Builtin ID");
755  llvm::Function *&FunctionSlot = BuiltinFunctions[BuiltinID-1];
756  if (FunctionSlot)
757    return FunctionSlot;
758
759  assert(Context.BuiltinInfo.isLibFunction(BuiltinID) && "isn't a lib fn");
760
761  // Get the name, skip over the __builtin_ prefix.
762  const char *Name = Context.BuiltinInfo.GetName(BuiltinID)+10;
763
764  // Get the type for the builtin.
765  QualType Type = Context.BuiltinInfo.GetBuiltinType(BuiltinID, Context);
766  const llvm::FunctionType *Ty =
767    cast<llvm::FunctionType>(getTypes().ConvertType(Type));
768
769  // FIXME: This has a serious problem with code like this:
770  //  void abs() {}
771  //    ... __builtin_abs(x);
772  // The two versions of abs will collide.  The fix is for the builtin to win,
773  // and for the existing one to be turned into a constantexpr cast of the
774  // builtin.  In the case where the existing one is a static function, it
775  // should just be renamed.
776  if (llvm::Function *Existing = getModule().getFunction(Name)) {
777    if (Existing->getFunctionType() == Ty && Existing->hasExternalLinkage())
778      return FunctionSlot = Existing;
779    assert(Existing == 0 && "FIXME: Name collision");
780  }
781
782  // FIXME: param attributes for sext/zext etc.
783  return FunctionSlot =
784    llvm::Function::Create(Ty, llvm::Function::ExternalLinkage, Name,
785                           &getModule());
786}
787
788llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys,
789                                            unsigned NumTys) {
790  return llvm::Intrinsic::getDeclaration(&getModule(),
791                                         (llvm::Intrinsic::ID)IID, Tys, NumTys);
792}
793
794llvm::Function *CodeGenModule::getMemCpyFn() {
795  if (MemCpyFn) return MemCpyFn;
796  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
797  return MemCpyFn = getIntrinsic(llvm::Intrinsic::memcpy, &IntPtr, 1);
798}
799
800llvm::Function *CodeGenModule::getMemMoveFn() {
801  if (MemMoveFn) return MemMoveFn;
802  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
803  return MemMoveFn = getIntrinsic(llvm::Intrinsic::memmove, &IntPtr, 1);
804}
805
806llvm::Function *CodeGenModule::getMemSetFn() {
807  if (MemSetFn) return MemSetFn;
808  const llvm::Type *IntPtr = TheTargetData.getIntPtrType();
809  return MemSetFn = getIntrinsic(llvm::Intrinsic::memset, &IntPtr, 1);
810}
811
812static void appendFieldAndPadding(CodeGenModule &CGM,
813                                  std::vector<llvm::Constant*>& Fields,
814                                  FieldDecl *FieldD, FieldDecl *NextFieldD,
815                                  llvm::Constant* Field,
816                                  RecordDecl* RD, const llvm::StructType *STy)
817{
818  // Append the field.
819  Fields.push_back(Field);
820
821  int StructFieldNo = CGM.getTypes().getLLVMFieldNo(FieldD);
822
823  int NextStructFieldNo;
824  if (!NextFieldD) {
825    NextStructFieldNo = STy->getNumElements();
826  } else {
827    NextStructFieldNo = CGM.getTypes().getLLVMFieldNo(NextFieldD);
828  }
829
830  // Append padding
831  for (int i = StructFieldNo + 1; i < NextStructFieldNo; i++) {
832    llvm::Constant *C =
833      llvm::Constant::getNullValue(STy->getElementType(StructFieldNo + 1));
834
835    Fields.push_back(C);
836  }
837}
838
839// We still need to work out the details of handling UTF-16.
840// See: <rdr://2996215>
841llvm::Constant *CodeGenModule::
842GetAddrOfConstantCFString(const std::string &str) {
843  llvm::StringMapEntry<llvm::Constant *> &Entry =
844    CFConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
845
846  if (Entry.getValue())
847    return Entry.getValue();
848
849  llvm::Constant *Zero = llvm::Constant::getNullValue(llvm::Type::Int32Ty);
850  llvm::Constant *Zeros[] = { Zero, Zero };
851
852  if (!CFConstantStringClassRef) {
853    const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
854    Ty = llvm::ArrayType::get(Ty, 0);
855
856    // FIXME: This is fairly broken if
857    // __CFConstantStringClassReference is already defined, in that it
858    // will get renamed and the user will most likely see an opaque
859    // error message. This is a general issue with relying on
860    // particular names.
861    llvm::GlobalVariable *GV =
862      new llvm::GlobalVariable(Ty, false,
863                               llvm::GlobalVariable::ExternalLinkage, 0,
864                               "__CFConstantStringClassReference",
865                               &getModule());
866
867    // Decay array -> ptr
868    CFConstantStringClassRef =
869      llvm::ConstantExpr::getGetElementPtr(GV, Zeros, 2);
870  }
871
872  QualType CFTy = getContext().getCFConstantStringType();
873  RecordDecl *CFRD = CFTy->getAsRecordType()->getDecl();
874
875  const llvm::StructType *STy =
876    cast<llvm::StructType>(getTypes().ConvertType(CFTy));
877
878  std::vector<llvm::Constant*> Fields;
879  RecordDecl::field_iterator Field = CFRD->field_begin();
880
881  // Class pointer.
882  FieldDecl *CurField = *Field++;
883  FieldDecl *NextField = *Field++;
884  appendFieldAndPadding(*this, Fields, CurField, NextField,
885                        CFConstantStringClassRef, CFRD, STy);
886
887  // Flags.
888  CurField = NextField;
889  NextField = *Field++;
890  const llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
891  appendFieldAndPadding(*this, Fields, CurField, NextField,
892                        llvm::ConstantInt::get(Ty, 0x07C8), CFRD, STy);
893
894  // String pointer.
895  CurField = NextField;
896  NextField = *Field++;
897  llvm::Constant *C = llvm::ConstantArray::get(str);
898  C = new llvm::GlobalVariable(C->getType(), true,
899                               llvm::GlobalValue::InternalLinkage,
900                               C, ".str", &getModule());
901  appendFieldAndPadding(*this, Fields, CurField, NextField,
902                        llvm::ConstantExpr::getGetElementPtr(C, Zeros, 2),
903                        CFRD, STy);
904
905  // String length.
906  CurField = NextField;
907  NextField = 0;
908  Ty = getTypes().ConvertType(getContext().LongTy);
909  appendFieldAndPadding(*this, Fields, CurField, NextField,
910                        llvm::ConstantInt::get(Ty, str.length()), CFRD, STy);
911
912  // The struct.
913  C = llvm::ConstantStruct::get(STy, Fields);
914  llvm::GlobalVariable *GV =
915    new llvm::GlobalVariable(C->getType(), true,
916                             llvm::GlobalVariable::InternalLinkage,
917                             C, "", &getModule());
918
919  GV->setSection("__DATA,__cfstring");
920  Entry.setValue(GV);
921
922  return GV;
923}
924
925/// GetStringForStringLiteral - Return the appropriate bytes for a
926/// string literal, properly padded to match the literal type.
927std::string CodeGenModule::GetStringForStringLiteral(const StringLiteral *E) {
928  if (E->isWide()) {
929    ErrorUnsupported(E, "wide string");
930    return "FIXME";
931  }
932
933  const char *StrData = E->getStrData();
934  unsigned Len = E->getByteLength();
935
936  const ConstantArrayType *CAT =
937    getContext().getAsConstantArrayType(E->getType());
938  assert(CAT && "String isn't pointer or array!");
939
940  // Resize the string to the right size
941  // FIXME: What about wchar_t strings?
942  std::string Str(StrData, StrData+Len);
943  uint64_t RealLen = CAT->getSize().getZExtValue();
944  Str.resize(RealLen, '\0');
945
946  return Str;
947}
948
949/// GetAddrOfConstantStringFromLiteral - Return a pointer to a
950/// constant array for the given string literal.
951llvm::Constant *
952CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
953  // FIXME: This can be more efficient.
954  return GetAddrOfConstantString(GetStringForStringLiteral(S));
955}
956
957/// GenerateWritableString -- Creates storage for a string literal.
958static llvm::Constant *GenerateStringLiteral(const std::string &str,
959                                             bool constant,
960                                             CodeGenModule &CGM,
961                                             const char *GlobalName) {
962  // Create Constant for this string literal. Don't add a '\0'.
963  llvm::Constant *C = llvm::ConstantArray::get(str, false);
964
965  // Create a global variable for this string
966  C = new llvm::GlobalVariable(C->getType(), constant,
967                               llvm::GlobalValue::InternalLinkage,
968                               C,
969                               GlobalName ? GlobalName : ".str",
970                               &CGM.getModule());
971
972  return C;
973}
974
975/// GetAddrOfConstantString - Returns a pointer to a character array
976/// containing the literal. This contents are exactly that of the
977/// given string, i.e. it will not be null terminated automatically;
978/// see GetAddrOfConstantCString. Note that whether the result is
979/// actually a pointer to an LLVM constant depends on
980/// Feature.WriteableStrings.
981///
982/// The result has pointer to array type.
983llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str,
984                                                       const char *GlobalName) {
985  // Don't share any string literals if writable-strings is turned on.
986  if (Features.WritableStrings)
987    return GenerateStringLiteral(str, false, *this, GlobalName);
988
989  llvm::StringMapEntry<llvm::Constant *> &Entry =
990  ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
991
992  if (Entry.getValue())
993      return Entry.getValue();
994
995  // Create a global variable for this.
996  llvm::Constant *C = GenerateStringLiteral(str, true, *this, GlobalName);
997  Entry.setValue(C);
998  return C;
999}
1000
1001/// GetAddrOfConstantCString - Returns a pointer to a character
1002/// array containing the literal and a terminating '\-'
1003/// character. The result has pointer to array type.
1004llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str,
1005                                                        const char *GlobalName){
1006  return GetAddrOfConstantString(str + '\0', GlobalName);
1007}
1008
1009/// EmitObjCPropertyImplementations - Emit information for synthesized
1010/// properties for an implementation.
1011void CodeGenModule::EmitObjCPropertyImplementations(const
1012                                                    ObjCImplementationDecl *D) {
1013  for (ObjCImplementationDecl::propimpl_iterator i = D->propimpl_begin(),
1014         e = D->propimpl_end(); i != e; ++i) {
1015    ObjCPropertyImplDecl *PID = *i;
1016
1017    // Dynamic is just for type-checking.
1018    if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
1019      ObjCPropertyDecl *PD = PID->getPropertyDecl();
1020
1021      // Determine which methods need to be implemented, some may have
1022      // been overridden. Note that ::isSynthesized is not the method
1023      // we want, that just indicates if the decl came from a
1024      // property. What we want to know is if the method is defined in
1025      // this implementation.
1026      if (!D->getInstanceMethod(PD->getGetterName()))
1027        CodeGenFunction(*this).GenerateObjCGetter(
1028                                 const_cast<ObjCImplementationDecl *>(D), PID);
1029      if (!PD->isReadOnly() &&
1030          !D->getInstanceMethod(PD->getSetterName()))
1031        CodeGenFunction(*this).GenerateObjCSetter(
1032                                 const_cast<ObjCImplementationDecl *>(D), PID);
1033    }
1034  }
1035}
1036
1037/// EmitTopLevelDecl - Emit code for a single top level declaration.
1038void CodeGenModule::EmitTopLevelDecl(Decl *D) {
1039  // If an error has occurred, stop code generation, but continue
1040  // parsing and semantic analysis (to ensure all warnings and errors
1041  // are emitted).
1042  if (Diags.hasErrorOccurred())
1043    return;
1044
1045  switch (D->getKind()) {
1046  case Decl::Function:
1047  case Decl::Var:
1048    EmitGlobal(cast<ValueDecl>(D));
1049    break;
1050
1051  case Decl::Namespace:
1052    ErrorUnsupported(D, "namespace");
1053    break;
1054
1055    // Objective-C Decls
1056
1057    // Forward declarations, no (immediate) code generation.
1058  case Decl::ObjCClass:
1059  case Decl::ObjCCategory:
1060  case Decl::ObjCForwardProtocol:
1061  case Decl::ObjCInterface:
1062    break;
1063
1064  case Decl::ObjCProtocol:
1065    Runtime->GenerateProtocol(cast<ObjCProtocolDecl>(D));
1066    break;
1067
1068  case Decl::ObjCCategoryImpl:
1069    // Categories have properties but don't support synthesize so we
1070    // can ignore them here.
1071
1072    Runtime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
1073    break;
1074
1075  case Decl::ObjCImplementation: {
1076    ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
1077    EmitObjCPropertyImplementations(OMD);
1078    Runtime->GenerateClass(OMD);
1079    break;
1080  }
1081  case Decl::ObjCMethod: {
1082    ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
1083    // If this is not a prototype, emit the body.
1084    if (OMD->getBody())
1085      CodeGenFunction(*this).GenerateObjCMethod(OMD);
1086    break;
1087  }
1088  case Decl::ObjCCompatibleAlias:
1089    // compatibility-alias is a directive and has no code gen.
1090    break;
1091
1092  case Decl::LinkageSpec: {
1093    LinkageSpecDecl *LSD = cast<LinkageSpecDecl>(D);
1094    if (LSD->getLanguage() == LinkageSpecDecl::lang_cxx)
1095      ErrorUnsupported(LSD, "linkage spec");
1096    // FIXME: implement C++ linkage, C linkage works mostly by C
1097    // language reuse already.
1098    break;
1099  }
1100
1101  case Decl::FileScopeAsm: {
1102    FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
1103    std::string AsmString(AD->getAsmString()->getStrData(),
1104                          AD->getAsmString()->getByteLength());
1105
1106    const std::string &S = getModule().getModuleInlineAsm();
1107    if (S.empty())
1108      getModule().setModuleInlineAsm(AsmString);
1109    else
1110      getModule().setModuleInlineAsm(S + '\n' + AsmString);
1111    break;
1112  }
1113
1114  default:
1115    // Make sure we handled everything we should, every other kind is
1116    // a non-top-level decl.  FIXME: Would be nice to have an
1117    // isTopLevelDeclKind function. Need to recode Decl::Kind to do
1118    // that easily.
1119    assert(isa<TypeDecl>(D) && "Unsupported decl kind");
1120  }
1121}
1122
1123