CodeGenModule.cpp revision b7ec246872b412f0e7bb9e93eacfd78cfa6adfb3
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 "CGObjCRuntime.h"
18#include "clang/AST/ASTContext.h"
19#include "clang/AST/DeclObjC.h"
20#include "clang/Basic/Diagnostic.h"
21#include "clang/Basic/SourceManager.h"
22#include "clang/Basic/TargetInfo.h"
23#include "llvm/CallingConv.h"
24#include "llvm/Module.h"
25#include "llvm/Intrinsics.h"
26#include "llvm/Target/TargetData.h"
27#include "llvm/Analysis/Verifier.h"
28using namespace clang;
29using namespace CodeGen;
30
31
32CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO,
33                             llvm::Module &M, const llvm::TargetData &TD,
34                             Diagnostic &diags, bool GenerateDebugInfo)
35  : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags),
36    Types(C, M, TD), Runtime(0), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
37    CFConstantStringClassRef(0) {
38
39  if (Features.ObjC1) {
40    if (Features.NeXTRuntime) {
41      Runtime = CreateMacObjCRuntime(*this);
42    } else {
43      Runtime = CreateGNUObjCRuntime(*this);
44    }
45  }
46
47  // If debug info generation is enabled, create the CGDebugInfo object.
48  DebugInfo = GenerateDebugInfo ? new CGDebugInfo(this) : 0;
49}
50
51CodeGenModule::~CodeGenModule() {
52  delete Runtime;
53  delete DebugInfo;
54}
55
56void CodeGenModule::Release() {
57  EmitStatics();
58  if (Runtime)
59    if (llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction())
60      AddGlobalCtor(ObjCInitFunction);
61  EmitCtorList(GlobalCtors, "llvm.global_ctors");
62  EmitCtorList(GlobalDtors, "llvm.global_dtors");
63  EmitAnnotations();
64  // Run the verifier to check that the generated code is consistent.
65  assert(!verifyModule(TheModule));
66}
67
68/// ErrorUnsupported - Print out an error that codegen doesn't support the
69/// specified stmt yet.
70void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type) {
71  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
72                                               "cannot codegen this %0 yet");
73  SourceRange Range = S->getSourceRange();
74  std::string Msg = Type;
75  getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID,
76                    &Msg, 1, &Range, 1);
77}
78
79/// ErrorUnsupported - Print out an error that codegen doesn't support the
80/// specified decl yet.
81void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type) {
82  unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Error,
83                                               "cannot codegen this %0 yet");
84  std::string Msg = Type;
85  getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID,
86                    &Msg, 1);
87}
88
89/// setGlobalVisibility - Set the visibility for the given LLVM
90/// GlobalValue according to the given clang AST visibility value.
91static void setGlobalVisibility(llvm::GlobalValue *GV,
92                                VisibilityAttr::VisibilityTypes Vis) {
93  switch (Vis) {
94  default: assert(0 && "Unknown visibility!");
95  case VisibilityAttr::DefaultVisibility:
96    GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
97    break;
98  case VisibilityAttr::HiddenVisibility:
99    GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
100    break;
101  case VisibilityAttr::ProtectedVisibility:
102    GV->setVisibility(llvm::GlobalValue::ProtectedVisibility);
103    break;
104  }
105}
106
107/// AddGlobalCtor - Add a function to the list that will be called before
108/// main() runs.
109void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
110  // TODO: Type coercion of void()* types.
111  GlobalCtors.push_back(std::make_pair(Ctor, Priority));
112}
113
114/// AddGlobalDtor - Add a function to the list that will be called
115/// when the module is unloaded.
116void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
117  // TODO: Type coercion of void()* types.
118  GlobalDtors.push_back(std::make_pair(Dtor, Priority));
119}
120
121void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
122  // Ctor function type is void()*.
123  llvm::FunctionType* CtorFTy =
124    llvm::FunctionType::get(llvm::Type::VoidTy,
125                            std::vector<const llvm::Type*>(),
126                            false);
127  llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
128
129  // Get the type of a ctor entry, { i32, void ()* }.
130  llvm::StructType* CtorStructTy =
131    llvm::StructType::get(llvm::Type::Int32Ty,
132                          llvm::PointerType::getUnqual(CtorFTy), NULL);
133
134  // Construct the constructor and destructor arrays.
135  std::vector<llvm::Constant*> Ctors;
136  for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
137    std::vector<llvm::Constant*> S;
138    S.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, I->second, false));
139    S.push_back(llvm::ConstantExpr::getBitCast(I->first, CtorPFTy));
140    Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
141  }
142
143  if (!Ctors.empty()) {
144    llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
145    new llvm::GlobalVariable(AT, false,
146                             llvm::GlobalValue::AppendingLinkage,
147                             llvm::ConstantArray::get(AT, Ctors),
148                             GlobalName,
149                             &TheModule);
150  }
151}
152
153void CodeGenModule::EmitAnnotations() {
154  if (Annotations.empty())
155    return;
156
157  // Create a new global variable for the ConstantStruct in the Module.
158  llvm::Constant *Array =
159  llvm::ConstantArray::get(llvm::ArrayType::get(Annotations[0]->getType(),
160                                                Annotations.size()),
161                           Annotations);
162  llvm::GlobalValue *gv =
163  new llvm::GlobalVariable(Array->getType(), false,
164                           llvm::GlobalValue::AppendingLinkage, Array,
165                           "llvm.global.annotations", &TheModule);
166  gv->setSection("llvm.metadata");
167}
168
169void CodeGenModule::SetGlobalValueAttributes(const FunctionDecl *FD,
170                                             llvm::GlobalValue *GV) {
171  // TODO: Set up linkage and many other things.  Note, this is a simple
172  // approximation of what we really want.
173  if (FD->getStorageClass() == FunctionDecl::Static)
174    GV->setLinkage(llvm::Function::InternalLinkage);
175  else if (FD->getAttr<DLLImportAttr>())
176    GV->setLinkage(llvm::Function::DLLImportLinkage);
177  else if (FD->getAttr<DLLExportAttr>())
178    GV->setLinkage(llvm::Function::DLLExportLinkage);
179  else if (FD->getAttr<WeakAttr>() || FD->isInline())
180    GV->setLinkage(llvm::Function::WeakLinkage);
181
182  if (const VisibilityAttr *attr = FD->getAttr<VisibilityAttr>())
183    setGlobalVisibility(GV, attr->getVisibility());
184  // FIXME: else handle -fvisibility
185
186  if (const AsmLabelAttr *ALA = FD->getAttr<AsmLabelAttr>()) {
187    // Prefaced with special LLVM marker to indicate that the name
188    // should not be munged.
189    GV->setName("\01" + ALA->getLabel());
190  }
191}
192
193void CodeGenModule::SetFunctionAttributes(const FunctionDecl *FD,
194                                          llvm::Function *F,
195                                          const llvm::FunctionType *FTy) {
196  unsigned FuncAttrs = 0;
197  if (FD->getAttr<NoThrowAttr>())
198    FuncAttrs |= llvm::ParamAttr::NoUnwind;
199  if (FD->getAttr<NoReturnAttr>())
200    FuncAttrs |= llvm::ParamAttr::NoReturn;
201
202  llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrList;
203  if (FuncAttrs)
204    ParamAttrList.push_back(llvm::ParamAttrsWithIndex::get(0, FuncAttrs));
205  // Note that there is parallel code in CodeGenFunction::EmitCallExpr
206  bool AggregateReturn = CodeGenFunction::hasAggregateLLVMType(FD->getResultType());
207  if (AggregateReturn)
208    ParamAttrList.push_back(
209        llvm::ParamAttrsWithIndex::get(1, llvm::ParamAttr::StructRet));
210  unsigned increment = AggregateReturn ? 2 : 1;
211  const FunctionTypeProto* FTP = dyn_cast<FunctionTypeProto>(FD->getType());
212  if (FTP) {
213    for (unsigned i = 0; i < FTP->getNumArgs(); i++) {
214      QualType ParamType = FTP->getArgType(i);
215      unsigned ParamAttrs = 0;
216      if (ParamType->isRecordType())
217        ParamAttrs |= llvm::ParamAttr::ByVal;
218      if (ParamType->isSignedIntegerType() &&
219          ParamType->isPromotableIntegerType())
220        ParamAttrs |= llvm::ParamAttr::SExt;
221      if (ParamType->isUnsignedIntegerType() &&
222          ParamType->isPromotableIntegerType())
223        ParamAttrs |= llvm::ParamAttr::ZExt;
224      if (ParamAttrs)
225        ParamAttrList.push_back(llvm::ParamAttrsWithIndex::get(i + increment,
226                                                               ParamAttrs));
227    }
228  }
229
230  F->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(),
231                                        ParamAttrList.size()));
232
233  // Set the appropriate calling convention for the Function.
234  if (FD->getAttr<FastCallAttr>())
235    F->setCallingConv(llvm::CallingConv::Fast);
236
237  SetGlobalValueAttributes(FD, F);
238}
239
240void CodeGenModule::EmitStatics() {
241  // Emit code for each used static decl encountered.  Since a previously unused
242  // static decl may become used during the generation of code for a static
243  // function, iterate until no changes are made.
244  bool Changed;
245  do {
246    Changed = false;
247    for (unsigned i = 0, e = StaticDecls.size(); i != e; ++i) {
248      const ValueDecl *D = StaticDecls[i];
249
250      // Check if we have used a decl with the same name
251      // FIXME: The AST should have some sort of aggregate decls or
252      // global symbol map.
253      if (!GlobalDeclMap.count(D->getName()))
254        continue;
255
256      // Emit the definition.
257      EmitGlobalDefinition(D);
258
259      // Erase the used decl from the list.
260      StaticDecls[i] = StaticDecls.back();
261      StaticDecls.pop_back();
262      --i;
263      --e;
264
265      // Remember that we made a change.
266      Changed = true;
267    }
268  } while (Changed);
269}
270
271/// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the
272/// annotation information for a given GlobalValue.  The annotation struct is
273/// {i8 *, i8 *, i8 *, i32}.  The first field is a constant expression, the
274/// GlobalValue being annotated.  The second field is the constant string
275/// created from the AnnotateAttr's annotation.  The third field is a constant
276/// string containing the name of the translation unit.  The fourth field is
277/// the line number in the file of the annotated value declaration.
278///
279/// FIXME: this does not unique the annotation string constants, as llvm-gcc
280///        appears to.
281///
282llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
283                                                const AnnotateAttr *AA,
284                                                unsigned LineNo) {
285  llvm::Module *M = &getModule();
286
287  // get [N x i8] constants for the annotation string, and the filename string
288  // which are the 2nd and 3rd elements of the global annotation structure.
289  const llvm::Type *SBP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
290  llvm::Constant *anno = llvm::ConstantArray::get(AA->getAnnotation(), true);
291  llvm::Constant *unit = llvm::ConstantArray::get(M->getModuleIdentifier(),
292                                                  true);
293
294  // Get the two global values corresponding to the ConstantArrays we just
295  // created to hold the bytes of the strings.
296  llvm::GlobalValue *annoGV =
297  new llvm::GlobalVariable(anno->getType(), false,
298                           llvm::GlobalValue::InternalLinkage, anno,
299                           GV->getName() + ".str", M);
300  // translation unit name string, emitted into the llvm.metadata section.
301  llvm::GlobalValue *unitGV =
302  new llvm::GlobalVariable(unit->getType(), false,
303                           llvm::GlobalValue::InternalLinkage, unit, ".str", M);
304
305  // Create the ConstantStruct that is the global annotion.
306  llvm::Constant *Fields[4] = {
307    llvm::ConstantExpr::getBitCast(GV, SBP),
308    llvm::ConstantExpr::getBitCast(annoGV, SBP),
309    llvm::ConstantExpr::getBitCast(unitGV, SBP),
310    llvm::ConstantInt::get(llvm::Type::Int32Ty, LineNo)
311  };
312  return llvm::ConstantStruct::get(Fields, 4, false);
313}
314
315void CodeGenModule::EmitGlobal(const ValueDecl *Global) {
316  bool isDef, isStatic;
317
318  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
319    isDef = (FD->isThisDeclarationADefinition() ||
320             FD->getAttr<AliasAttr>());
321    isStatic = FD->getStorageClass() == FunctionDecl::Static;
322  } else if (const VarDecl *VD = cast<VarDecl>(Global)) {
323    assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
324
325    isDef = !(VD->getStorageClass() == VarDecl::Extern && VD->getInit() == 0);
326    isStatic = VD->getStorageClass() == VarDecl::Static;
327  } else {
328    assert(0 && "Invalid argument to EmitGlobal");
329    return;
330  }
331
332  // Forward declarations are emitted lazily on first use.
333  if (!isDef)
334    return;
335
336  // If the global is a static, defer code generation until later so
337  // we can easily omit unused statics.
338  if (isStatic) {
339    StaticDecls.push_back(Global);
340    return;
341  }
342
343  // Otherwise emit the definition.
344  EmitGlobalDefinition(Global);
345}
346
347void CodeGenModule::EmitGlobalDefinition(const ValueDecl *D) {
348  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
349    EmitGlobalFunctionDefinition(FD);
350  } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
351    EmitGlobalVarDefinition(VD);
352  } else {
353    assert(0 && "Invalid argument to EmitGlobalDefinition()");
354  }
355}
356
357 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D) {
358  assert(D->hasGlobalStorage() && "Not a global variable");
359
360  QualType ASTTy = D->getType();
361  const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
362  const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
363
364  // Lookup the entry, lazily creating it if necessary.
365  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getName()];
366  if (!Entry)
367    Entry = new llvm::GlobalVariable(Ty, false,
368                                     llvm::GlobalValue::ExternalLinkage,
369                                     0, D->getName(), &getModule(), 0,
370                                     ASTTy.getAddressSpace());
371
372  // Make sure the result is of the correct type.
373  return llvm::ConstantExpr::getBitCast(Entry, PTy);
374}
375
376void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
377  llvm::Constant *Init = 0;
378  QualType ASTTy = D->getType();
379  const llvm::Type *VarTy = getTypes().ConvertTypeForMem(ASTTy);
380
381  if (D->getInit() == 0) {
382    // This is a tentative definition; tentative definitions are
383    // implicitly initialized with { 0 }
384    const llvm::Type* InitTy;
385    if (ASTTy->isIncompleteArrayType()) {
386      // An incomplete array is normally [ TYPE x 0 ], but we need
387      // to fix it to [ TYPE x 1 ].
388      const llvm::ArrayType* ATy = cast<llvm::ArrayType>(VarTy);
389      InitTy = llvm::ArrayType::get(ATy->getElementType(), 1);
390    } else {
391      InitTy = VarTy;
392    }
393    Init = llvm::Constant::getNullValue(InitTy);
394  } else {
395    Init = EmitConstantExpr(D->getInit());
396  }
397  const llvm::Type* InitType = Init->getType();
398
399  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getName()];
400  llvm::GlobalVariable *GV = cast_or_null<llvm::GlobalVariable>(Entry);
401
402  if (!GV) {
403    GV = new llvm::GlobalVariable(InitType, false,
404                                  llvm::GlobalValue::ExternalLinkage,
405                                  0, D->getName(), &getModule(), 0,
406                                  ASTTy.getAddressSpace());
407  } else if (GV->getType() !=
408             llvm::PointerType::get(InitType, ASTTy.getAddressSpace())) {
409    // We have a definition after a prototype with the wrong type.
410    // We must make a new GlobalVariable* and update everything that used OldGV
411    // (a declaration or tentative definition) with the new GlobalVariable*
412    // (which will be a definition).
413    //
414    // This happens if there is a prototype for a global (e.g. "extern int x[];")
415    // and then a definition of a different type (e.g. "int x[10];"). This also
416    // happens when an initializer has a different type from the type of the
417    // global (this happens with unions).
418    //
419    // FIXME: This also ends up happening if there's a definition followed by
420    // a tentative definition!  (Although Sema rejects that construct
421    // at the moment.)
422
423    // Save the old global
424    llvm::GlobalVariable *OldGV = GV;
425
426    // Make a new global with the correct type
427    GV = new llvm::GlobalVariable(InitType, false,
428                                  llvm::GlobalValue::ExternalLinkage,
429                                  0, D->getName(), &getModule(), 0,
430                                  ASTTy.getAddressSpace());
431    // Steal the name of the old global
432    GV->takeName(OldGV);
433
434    // Replace all uses of the old global with the new global
435    llvm::Constant *NewPtrForOldDecl =
436        llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
437    OldGV->replaceAllUsesWith(NewPtrForOldDecl);
438
439    // Erase the old global, since it is no longer used.
440    OldGV->eraseFromParent();
441  }
442
443  Entry = GV;
444
445  if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) {
446    SourceManager &SM = Context.getSourceManager();
447    AddAnnotation(EmitAnnotateAttr(GV, AA,
448                                   SM.getLogicalLineNumber(D->getLocation())));
449  }
450
451  GV->setInitializer(Init);
452
453  // FIXME: This is silly; getTypeAlign should just work for incomplete arrays
454  unsigned Align;
455  if (const IncompleteArrayType* IAT =
456        Context.getAsIncompleteArrayType(D->getType()))
457    Align = Context.getTypeAlign(IAT->getElementType());
458  else
459    Align = Context.getTypeAlign(D->getType());
460  if (const AlignedAttr* AA = D->getAttr<AlignedAttr>()) {
461    Align = std::max(Align, AA->getAlignment());
462  }
463  GV->setAlignment(Align / 8);
464
465  if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>())
466    setGlobalVisibility(GV, attr->getVisibility());
467  // FIXME: else handle -fvisibility
468
469  if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
470    // Prefaced with special LLVM marker to indicate that the name
471    // should not be munged.
472    GV->setName("\01" + ALA->getLabel());
473  }
474
475  // Set the llvm linkage type as appropriate.
476  if (D->getStorageClass() == VarDecl::Static)
477    GV->setLinkage(llvm::Function::InternalLinkage);
478  else if (D->getAttr<DLLImportAttr>())
479    GV->setLinkage(llvm::Function::DLLImportLinkage);
480  else if (D->getAttr<DLLExportAttr>())
481    GV->setLinkage(llvm::Function::DLLExportLinkage);
482  else if (D->getAttr<WeakAttr>())
483    GV->setLinkage(llvm::GlobalVariable::WeakLinkage);
484  else {
485    // FIXME: This isn't right.  This should handle common linkage and other
486    // stuff.
487    switch (D->getStorageClass()) {
488    case VarDecl::Static: assert(0 && "This case handled above");
489    case VarDecl::Auto:
490    case VarDecl::Register:
491      assert(0 && "Can't have auto or register globals");
492    case VarDecl::None:
493      if (!D->getInit())
494        GV->setLinkage(llvm::GlobalVariable::CommonLinkage);
495      break;
496    case VarDecl::Extern:
497    case VarDecl::PrivateExtern:
498      // todo: common
499      break;
500    }
501  }
502
503  // Emit global variable debug information.
504  CGDebugInfo *DI = getDebugInfo();
505  if(DI) {
506    if(D->getLocation().isValid())
507      DI->setLocation(D->getLocation());
508    DI->EmitGlobalVariable(GV, D);
509  }
510}
511
512llvm::GlobalValue *
513CodeGenModule::EmitForwardFunctionDefinition(const FunctionDecl *D) {
514  // FIXME: param attributes for sext/zext etc.
515  if (const AliasAttr *AA = D->getAttr<AliasAttr>()) {
516    assert(!D->getBody() && "Unexpected alias attr on function with body.");
517
518    const std::string& aliaseeName = AA->getAliasee();
519    llvm::Function *aliasee = getModule().getFunction(aliaseeName);
520    llvm::GlobalValue *alias = new llvm::GlobalAlias(aliasee->getType(),
521                                              llvm::Function::ExternalLinkage,
522                                                     D->getName(),
523                                                     aliasee,
524                                                     &getModule());
525    SetGlobalValueAttributes(D, alias);
526    return alias;
527  } else {
528    const llvm::Type *Ty = getTypes().ConvertType(D->getType());
529    const llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty);
530    llvm::Function *F = llvm::Function::Create(FTy,
531                                               llvm::Function::ExternalLinkage,
532                                               D->getName(), &getModule());
533
534    SetFunctionAttributes(D, F, FTy);
535    return F;
536  }
537}
538
539llvm::Constant *CodeGenModule::GetAddrOfFunction(const FunctionDecl *D) {
540  QualType ASTTy = D->getType();
541  const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
542  const llvm::Type *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace());
543
544  // Lookup the entry, lazily creating it if necessary.
545  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getName()];
546  if (!Entry)
547    Entry = EmitForwardFunctionDefinition(D);
548
549  return llvm::ConstantExpr::getBitCast(Entry, PTy);
550}
551
552void CodeGenModule::EmitGlobalFunctionDefinition(const FunctionDecl *D) {
553  llvm::GlobalValue *&Entry = GlobalDeclMap[D->getName()];
554  if (!Entry) {
555    Entry = EmitForwardFunctionDefinition(D);
556  } else {
557    // If the types mismatch then we have to rewrite the definition.
558    const llvm::Type *Ty = getTypes().ConvertType(D->getType());
559    if (Entry->getType() != llvm::PointerType::getUnqual(Ty)) {
560      // Otherwise, we have a definition after a prototype with the wrong type.
561      // F is the Function* for the one with the wrong type, we must make a new
562      // Function* and update everything that used F (a declaration) with the new
563      // Function* (which will be a definition).
564      //
565      // This happens if there is a prototype for a function (e.g. "int f()") and
566      // then a definition of a different type (e.g. "int f(int x)").  Start by
567      // making a new function of the correct type, RAUW, then steal the name.
568      llvm::GlobalValue *NewFn = EmitForwardFunctionDefinition(D);
569      NewFn->takeName(Entry);
570
571      // Replace uses of F with the Function we will endow with a body.
572      llvm::Constant *NewPtrForOldDecl =
573        llvm::ConstantExpr::getBitCast(NewFn, Entry->getType());
574      Entry->replaceAllUsesWith(NewPtrForOldDecl);
575
576      // Ok, delete the old function now, which is dead.
577      // FIXME: Add GlobalValue->eraseFromParent().
578      assert(Entry->isDeclaration() && "Shouldn't replace non-declaration");
579      if (llvm::Function *F = dyn_cast<llvm::Function>(Entry)) {
580        F->eraseFromParent();
581      } else if (llvm::GlobalAlias *GA = dyn_cast<llvm::GlobalAlias>(Entry)) {
582        GA->eraseFromParent();
583      } else {
584        assert(0 && "Invalid global variable type.");
585      }
586
587      Entry = NewFn;
588    }
589  }
590
591  if (D->getAttr<AliasAttr>()) {
592    ;
593  } else {
594    llvm::Function *Fn = cast<llvm::Function>(Entry);
595    CodeGenFunction(*this).GenerateCode(D, Fn);
596
597    // Set attributes specific to definition.
598    // FIXME: This needs to be cleaned up by clearly emitting the
599    // declaration / definition at separate times.
600    if (!Features.Exceptions)
601      Fn->addParamAttr(0, llvm::ParamAttr::NoUnwind);
602
603    if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>()) {
604      AddGlobalCtor(Fn, CA->getPriority());
605    } else if (const DestructorAttr *DA = D->getAttr<DestructorAttr>()) {
606      AddGlobalDtor(Fn, DA->getPriority());
607    }
608  }
609}
610
611void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
612  // Make sure that this type is translated.
613  Types.UpdateCompletedType(TD);
614}
615
616
617/// getBuiltinLibFunction
618llvm::Function *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) {
619  if (BuiltinID > BuiltinFunctions.size())
620    BuiltinFunctions.resize(BuiltinID);
621
622  // Cache looked up functions.  Since builtin id #0 is invalid we don't reserve
623  // a slot for it.
624  assert(BuiltinID && "Invalid Builtin ID");
625  llvm::Function *&FunctionSlot = BuiltinFunctions[BuiltinID-1];
626  if (FunctionSlot)
627    return FunctionSlot;
628
629  assert(Context.BuiltinInfo.isLibFunction(BuiltinID) && "isn't a lib fn");
630
631  // Get the name, skip over the __builtin_ prefix.
632  const char *Name = Context.BuiltinInfo.GetName(BuiltinID)+10;
633
634  // Get the type for the builtin.
635  QualType Type = Context.BuiltinInfo.GetBuiltinType(BuiltinID, Context);
636  const llvm::FunctionType *Ty =
637    cast<llvm::FunctionType>(getTypes().ConvertType(Type));
638
639  // FIXME: This has a serious problem with code like this:
640  //  void abs() {}
641  //    ... __builtin_abs(x);
642  // The two versions of abs will collide.  The fix is for the builtin to win,
643  // and for the existing one to be turned into a constantexpr cast of the
644  // builtin.  In the case where the existing one is a static function, it
645  // should just be renamed.
646  if (llvm::Function *Existing = getModule().getFunction(Name)) {
647    if (Existing->getFunctionType() == Ty && Existing->hasExternalLinkage())
648      return FunctionSlot = Existing;
649    assert(Existing == 0 && "FIXME: Name collision");
650  }
651
652  // FIXME: param attributes for sext/zext etc.
653  return FunctionSlot =
654    llvm::Function::Create(Ty, llvm::Function::ExternalLinkage, Name,
655                           &getModule());
656}
657
658llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys,
659                                            unsigned NumTys) {
660  return llvm::Intrinsic::getDeclaration(&getModule(),
661                                         (llvm::Intrinsic::ID)IID, Tys, NumTys);
662}
663
664llvm::Function *CodeGenModule::getMemCpyFn() {
665  if (MemCpyFn) return MemCpyFn;
666  llvm::Intrinsic::ID IID;
667  switch (Context.Target.getPointerWidth(0)) {
668  default: assert(0 && "Unknown ptr width");
669  case 32: IID = llvm::Intrinsic::memcpy_i32; break;
670  case 64: IID = llvm::Intrinsic::memcpy_i64; break;
671  }
672  return MemCpyFn = getIntrinsic(IID);
673}
674
675llvm::Function *CodeGenModule::getMemMoveFn() {
676  if (MemMoveFn) return MemMoveFn;
677  llvm::Intrinsic::ID IID;
678  switch (Context.Target.getPointerWidth(0)) {
679  default: assert(0 && "Unknown ptr width");
680  case 32: IID = llvm::Intrinsic::memmove_i32; break;
681  case 64: IID = llvm::Intrinsic::memmove_i64; break;
682  }
683  return MemMoveFn = getIntrinsic(IID);
684}
685
686llvm::Function *CodeGenModule::getMemSetFn() {
687  if (MemSetFn) return MemSetFn;
688  llvm::Intrinsic::ID IID;
689  switch (Context.Target.getPointerWidth(0)) {
690  default: assert(0 && "Unknown ptr width");
691  case 32: IID = llvm::Intrinsic::memset_i32; break;
692  case 64: IID = llvm::Intrinsic::memset_i64; break;
693  }
694  return MemSetFn = getIntrinsic(IID);
695}
696
697// FIXME: This needs moving into an Apple Objective-C runtime class
698llvm::Constant *CodeGenModule::
699GetAddrOfConstantCFString(const std::string &str) {
700  llvm::StringMapEntry<llvm::Constant *> &Entry =
701    CFConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
702
703  if (Entry.getValue())
704    return Entry.getValue();
705
706  std::vector<llvm::Constant*> Fields;
707
708  if (!CFConstantStringClassRef) {
709    const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
710    Ty = llvm::ArrayType::get(Ty, 0);
711
712    CFConstantStringClassRef =
713      new llvm::GlobalVariable(Ty, false,
714                               llvm::GlobalVariable::ExternalLinkage, 0,
715                               "__CFConstantStringClassReference",
716                               &getModule());
717  }
718
719  // Class pointer.
720  llvm::Constant *Zero = llvm::Constant::getNullValue(llvm::Type::Int32Ty);
721  llvm::Constant *Zeros[] = { Zero, Zero };
722  llvm::Constant *C =
723    llvm::ConstantExpr::getGetElementPtr(CFConstantStringClassRef, Zeros, 2);
724  Fields.push_back(C);
725
726  // Flags.
727  const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
728  Fields.push_back(llvm::ConstantInt::get(Ty, 1992));
729
730  // String pointer.
731  C = llvm::ConstantArray::get(str);
732  C = new llvm::GlobalVariable(C->getType(), true,
733                               llvm::GlobalValue::InternalLinkage,
734                               C, ".str", &getModule());
735
736  C = llvm::ConstantExpr::getGetElementPtr(C, Zeros, 2);
737  Fields.push_back(C);
738
739  // String length.
740  Ty = getTypes().ConvertType(getContext().LongTy);
741  Fields.push_back(llvm::ConstantInt::get(Ty, str.length()));
742
743  // The struct.
744  Ty = getTypes().ConvertType(getContext().getCFConstantStringType());
745  C = llvm::ConstantStruct::get(cast<llvm::StructType>(Ty), Fields);
746  llvm::GlobalVariable *GV =
747    new llvm::GlobalVariable(C->getType(), true,
748                             llvm::GlobalVariable::InternalLinkage,
749                             C, "", &getModule());
750  GV->setSection("__DATA,__cfstring");
751  Entry.setValue(GV);
752  return GV;
753}
754
755/// GetStringForStringLiteral - Return the appropriate bytes for a
756/// string literal, properly padded to match the literal type.
757std::string CodeGenModule::GetStringForStringLiteral(const StringLiteral *E) {
758  assert(!E->isWide() && "FIXME: Wide strings not supported yet!");
759  const char *StrData = E->getStrData();
760  unsigned Len = E->getByteLength();
761
762  const ConstantArrayType *CAT =
763    getContext().getAsConstantArrayType(E->getType());
764  assert(CAT && "String isn't pointer or array!");
765
766  // Resize the string to the right size
767  // FIXME: What about wchar_t strings?
768  std::string Str(StrData, StrData+Len);
769  uint64_t RealLen = CAT->getSize().getZExtValue();
770  Str.resize(RealLen, '\0');
771
772  return Str;
773}
774
775/// GetAddrOfConstantStringFromLiteral - Return a pointer to a
776/// constant array for the given string literal.
777llvm::Constant *
778CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
779  // FIXME: This can be more efficient.
780  return GetAddrOfConstantString(GetStringForStringLiteral(S));
781}
782
783/// GenerateWritableString -- Creates storage for a string literal.
784static llvm::Constant *GenerateStringLiteral(const std::string &str,
785                                             bool constant,
786                                             CodeGenModule &CGM) {
787  // Create Constant for this string literal. Don't add a '\0'.
788  llvm::Constant *C = llvm::ConstantArray::get(str, false);
789
790  // Create a global variable for this string
791  C = new llvm::GlobalVariable(C->getType(), constant,
792                               llvm::GlobalValue::InternalLinkage,
793                               C, ".str", &CGM.getModule());
794
795  return C;
796}
797
798/// GetAddrOfConstantString - Returns a pointer to a character array
799/// containing the literal. This contents are exactly that of the
800/// given string, i.e. it will not be null terminated automatically;
801/// see GetAddrOfConstantCString. Note that whether the result is
802/// actually a pointer to an LLVM constant depends on
803/// Feature.WriteableStrings.
804///
805/// The result has pointer to array type.
806llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str) {
807  // Don't share any string literals if writable-strings is turned on.
808  if (Features.WritableStrings)
809    return GenerateStringLiteral(str, false, *this);
810
811  llvm::StringMapEntry<llvm::Constant *> &Entry =
812  ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
813
814  if (Entry.getValue())
815      return Entry.getValue();
816
817  // Create a global variable for this.
818  llvm::Constant *C = GenerateStringLiteral(str, true, *this);
819  Entry.setValue(C);
820  return C;
821}
822
823/// GetAddrOfConstantCString - Returns a pointer to a character
824/// array containing the literal and a terminating '\-'
825/// character. The result has pointer to array type.
826llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str) {
827  return GetAddrOfConstantString(str + "\0");
828}
829
830/// EmitTopLevelDecl - Emit code for a single top level declaration.
831void CodeGenModule::EmitTopLevelDecl(Decl *D) {
832  // If an error has occurred, stop code generation, but continue
833  // parsing and semantic analysis (to ensure all warnings and errors
834  // are emitted).
835  if (Diags.hasErrorOccurred())
836    return;
837
838  switch (D->getKind()) {
839  case Decl::Function:
840  case Decl::Var:
841    EmitGlobal(cast<ValueDecl>(D));
842    break;
843
844  case Decl::Namespace:
845    assert(0 && "FIXME: Namespace unsupported");
846    break;
847
848    // Objective-C Decls
849
850    // Forward declarations, no (immediate) code generation.
851  case Decl::ObjCClass:
852  case Decl::ObjCCategory:
853  case Decl::ObjCForwardProtocol:
854  case Decl::ObjCInterface:
855    break;
856
857  case Decl::ObjCProtocol:
858    Runtime->GenerateProtocol(cast<ObjCProtocolDecl>(D));
859    break;
860
861  case Decl::ObjCCategoryImpl:
862    Runtime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
863    break;
864
865  case Decl::ObjCImplementation:
866    Runtime->GenerateClass(cast<ObjCImplementationDecl>(D));
867    break;
868
869  case Decl::ObjCMethod: {
870    ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
871    // If this is not a prototype, emit the body.
872    if (OMD->getBody())
873      CodeGenFunction(*this).GenerateObjCMethod(OMD);
874    break;
875  }
876  case Decl::ObjCPropertyImpl:
877    assert(0 && "FIXME: ObjCPropertyImpl unsupported");
878    break;
879  case Decl::ObjCCompatibleAlias:
880    assert(0 && "FIXME: ObjCCompatibleAlias unsupported");
881    break;
882
883  case Decl::LinkageSpec: {
884    LinkageSpecDecl *LSD = cast<LinkageSpecDecl>(D);
885    if (LSD->getLanguage() == LinkageSpecDecl::lang_cxx)
886      ErrorUnsupported(LSD, "linkage spec");
887    // FIXME: implement C++ linkage, C linkage works mostly by C
888    // language reuse already.
889    break;
890  }
891
892  case Decl::FileScopeAsm: {
893    FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
894    std::string AsmString(AD->getAsmString()->getStrData(),
895                          AD->getAsmString()->getByteLength());
896
897    const std::string &S = getModule().getModuleInlineAsm();
898    if (S.empty())
899      getModule().setModuleInlineAsm(AsmString);
900    else
901      getModule().setModuleInlineAsm(S + '\n' + AsmString);
902    break;
903  }
904
905  default:
906    // Make sure we handled everything we should, every other kind is
907    // a non-top-level decl.  FIXME: Would be nice to have an
908    // isTopLevelDeclKind function. Need to recode Decl::Kind to do
909    // that easily.
910    assert(isa<TypeDecl>(D) && "Unsupported decl kind");
911  }
912}
913
914