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