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