Home | History | Annotate | Download | only in CodeGen
      1 //===--- CodeGenModule.cpp - Emit LLVM Code from ASTs for a Module --------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This coordinates the per-module state used while generating code.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "CodeGenModule.h"
     15 #include "CGDebugInfo.h"
     16 #include "CodeGenFunction.h"
     17 #include "CodeGenTBAA.h"
     18 #include "CGCall.h"
     19 #include "CGCUDARuntime.h"
     20 #include "CGCXXABI.h"
     21 #include "CGObjCRuntime.h"
     22 #include "CGOpenCLRuntime.h"
     23 #include "TargetInfo.h"
     24 #include "clang/Frontend/CodeGenOptions.h"
     25 #include "clang/AST/ASTContext.h"
     26 #include "clang/AST/CharUnits.h"
     27 #include "clang/AST/DeclObjC.h"
     28 #include "clang/AST/DeclCXX.h"
     29 #include "clang/AST/DeclTemplate.h"
     30 #include "clang/AST/Mangle.h"
     31 #include "clang/AST/RecordLayout.h"
     32 #include "clang/AST/RecursiveASTVisitor.h"
     33 #include "clang/Basic/Builtins.h"
     34 #include "clang/Basic/Diagnostic.h"
     35 #include "clang/Basic/SourceManager.h"
     36 #include "clang/Basic/TargetInfo.h"
     37 #include "clang/Basic/ConvertUTF.h"
     38 #include "llvm/CallingConv.h"
     39 #include "llvm/Module.h"
     40 #include "llvm/Intrinsics.h"
     41 #include "llvm/LLVMContext.h"
     42 #include "llvm/ADT/APSInt.h"
     43 #include "llvm/ADT/Triple.h"
     44 #include "llvm/Target/Mangler.h"
     45 #include "llvm/Target/TargetData.h"
     46 #include "llvm/Support/CallSite.h"
     47 #include "llvm/Support/ErrorHandling.h"
     48 using namespace clang;
     49 using namespace CodeGen;
     50 
     51 static const char AnnotationSection[] = "llvm.metadata";
     52 
     53 static CGCXXABI &createCXXABI(CodeGenModule &CGM) {
     54   switch (CGM.getContext().getTargetInfo().getCXXABI()) {
     55   case CXXABI_ARM: return *CreateARMCXXABI(CGM);
     56   case CXXABI_Itanium: return *CreateItaniumCXXABI(CGM);
     57   case CXXABI_Microsoft: return *CreateMicrosoftCXXABI(CGM);
     58   }
     59 
     60   llvm_unreachable("invalid C++ ABI kind");
     61 }
     62 
     63 
     64 CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
     65                              llvm::Module &M, const llvm::TargetData &TD,
     66                              DiagnosticsEngine &diags)
     67   : Context(C), LangOpts(C.getLangOpts()), CodeGenOpts(CGO), TheModule(M),
     68     TheTargetData(TD), TheTargetCodeGenInfo(0), Diags(diags),
     69     ABI(createCXXABI(*this)),
     70     Types(*this),
     71     TBAA(0),
     72     VTables(*this), ObjCRuntime(0), OpenCLRuntime(0), CUDARuntime(0),
     73     DebugInfo(0), ARCData(0), NoObjCARCExceptionsMetadata(0),
     74     RRData(0), CFConstantStringClassRef(0),
     75     ConstantStringClassRef(0), NSConstantStringType(0),
     76     VMContext(M.getContext()),
     77     NSConcreteGlobalBlock(0), NSConcreteStackBlock(0),
     78     BlockObjectAssign(0), BlockObjectDispose(0),
     79     BlockDescriptorType(0), GenericBlockLiteralType(0) {
     80 
     81   // Initialize the type cache.
     82   llvm::LLVMContext &LLVMContext = M.getContext();
     83   VoidTy = llvm::Type::getVoidTy(LLVMContext);
     84   Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
     85   Int16Ty = llvm::Type::getInt16Ty(LLVMContext);
     86   Int32Ty = llvm::Type::getInt32Ty(LLVMContext);
     87   Int64Ty = llvm::Type::getInt64Ty(LLVMContext);
     88   FloatTy = llvm::Type::getFloatTy(LLVMContext);
     89   DoubleTy = llvm::Type::getDoubleTy(LLVMContext);
     90   PointerWidthInBits = C.getTargetInfo().getPointerWidth(0);
     91   PointerAlignInBytes =
     92   C.toCharUnitsFromBits(C.getTargetInfo().getPointerAlign(0)).getQuantity();
     93   IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
     94   IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
     95   Int8PtrTy = Int8Ty->getPointerTo(0);
     96   Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
     97 
     98   if (LangOpts.ObjC1)
     99     createObjCRuntime();
    100   if (LangOpts.OpenCL)
    101     createOpenCLRuntime();
    102   if (LangOpts.CUDA)
    103     createCUDARuntime();
    104 
    105   // Enable TBAA unless it's suppressed.
    106   if (!CodeGenOpts.RelaxedAliasing && CodeGenOpts.OptimizationLevel > 0)
    107     TBAA = new CodeGenTBAA(Context, VMContext, getLangOpts(),
    108                            ABI.getMangleContext());
    109 
    110   // If debug info or coverage generation is enabled, create the CGDebugInfo
    111   // object.
    112   if (CodeGenOpts.DebugInfo || CodeGenOpts.EmitGcovArcs ||
    113       CodeGenOpts.EmitGcovNotes)
    114     DebugInfo = new CGDebugInfo(*this);
    115 
    116   Block.GlobalUniqueCount = 0;
    117 
    118   if (C.getLangOpts().ObjCAutoRefCount)
    119     ARCData = new ARCEntrypoints();
    120   RRData = new RREntrypoints();
    121 }
    122 
    123 CodeGenModule::~CodeGenModule() {
    124   delete ObjCRuntime;
    125   delete OpenCLRuntime;
    126   delete CUDARuntime;
    127   delete TheTargetCodeGenInfo;
    128   delete &ABI;
    129   delete TBAA;
    130   delete DebugInfo;
    131   delete ARCData;
    132   delete RRData;
    133 }
    134 
    135 void CodeGenModule::createObjCRuntime() {
    136   if (!LangOpts.NeXTRuntime)
    137     ObjCRuntime = CreateGNUObjCRuntime(*this);
    138   else
    139     ObjCRuntime = CreateMacObjCRuntime(*this);
    140 }
    141 
    142 void CodeGenModule::createOpenCLRuntime() {
    143   OpenCLRuntime = new CGOpenCLRuntime(*this);
    144 }
    145 
    146 void CodeGenModule::createCUDARuntime() {
    147   CUDARuntime = CreateNVCUDARuntime(*this);
    148 }
    149 
    150 void CodeGenModule::Release() {
    151   EmitDeferred();
    152   EmitCXXGlobalInitFunc();
    153   EmitCXXGlobalDtorFunc();
    154   if (ObjCRuntime)
    155     if (llvm::Function *ObjCInitFunction = ObjCRuntime->ModuleInitFunction())
    156       AddGlobalCtor(ObjCInitFunction);
    157   EmitCtorList(GlobalCtors, "llvm.global_ctors");
    158   EmitCtorList(GlobalDtors, "llvm.global_dtors");
    159   EmitGlobalAnnotations();
    160   EmitLLVMUsed();
    161 
    162   SimplifyPersonality();
    163 
    164   if (getCodeGenOpts().EmitDeclMetadata)
    165     EmitDeclMetadata();
    166 
    167   if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
    168     EmitCoverageFile();
    169 
    170   if (DebugInfo)
    171     DebugInfo->finalize();
    172 }
    173 
    174 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
    175   // Make sure that this type is translated.
    176   Types.UpdateCompletedType(TD);
    177 }
    178 
    179 llvm::MDNode *CodeGenModule::getTBAAInfo(QualType QTy) {
    180   if (!TBAA)
    181     return 0;
    182   return TBAA->getTBAAInfo(QTy);
    183 }
    184 
    185 llvm::MDNode *CodeGenModule::getTBAAInfoForVTablePtr() {
    186   if (!TBAA)
    187     return 0;
    188   return TBAA->getTBAAInfoForVTablePtr();
    189 }
    190 
    191 void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
    192                                         llvm::MDNode *TBAAInfo) {
    193   Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
    194 }
    195 
    196 bool CodeGenModule::isTargetDarwin() const {
    197   return getContext().getTargetInfo().getTriple().isOSDarwin();
    198 }
    199 
    200 void CodeGenModule::Error(SourceLocation loc, StringRef error) {
    201   unsigned diagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error, error);
    202   getDiags().Report(Context.getFullLoc(loc), diagID);
    203 }
    204 
    205 /// ErrorUnsupported - Print out an error that codegen doesn't support the
    206 /// specified stmt yet.
    207 void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type,
    208                                      bool OmitOnError) {
    209   if (OmitOnError && getDiags().hasErrorOccurred())
    210     return;
    211   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
    212                                                "cannot compile this %0 yet");
    213   std::string Msg = Type;
    214   getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
    215     << Msg << S->getSourceRange();
    216 }
    217 
    218 /// ErrorUnsupported - Print out an error that codegen doesn't support the
    219 /// specified decl yet.
    220 void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type,
    221                                      bool OmitOnError) {
    222   if (OmitOnError && getDiags().hasErrorOccurred())
    223     return;
    224   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
    225                                                "cannot compile this %0 yet");
    226   std::string Msg = Type;
    227   getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
    228 }
    229 
    230 llvm::ConstantInt *CodeGenModule::getSize(CharUnits size) {
    231   return llvm::ConstantInt::get(SizeTy, size.getQuantity());
    232 }
    233 
    234 void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
    235                                         const NamedDecl *D) const {
    236   // Internal definitions always have default visibility.
    237   if (GV->hasLocalLinkage()) {
    238     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
    239     return;
    240   }
    241 
    242   // Set visibility for definitions.
    243   NamedDecl::LinkageInfo LV = D->getLinkageAndVisibility();
    244   if (LV.visibilityExplicit() || !GV->hasAvailableExternallyLinkage())
    245     GV->setVisibility(GetLLVMVisibility(LV.visibility()));
    246 }
    247 
    248 /// Set the symbol visibility of type information (vtable and RTTI)
    249 /// associated with the given type.
    250 void CodeGenModule::setTypeVisibility(llvm::GlobalValue *GV,
    251                                       const CXXRecordDecl *RD,
    252                                       TypeVisibilityKind TVK) const {
    253   setGlobalVisibility(GV, RD);
    254 
    255   if (!CodeGenOpts.HiddenWeakVTables)
    256     return;
    257 
    258   // We never want to drop the visibility for RTTI names.
    259   if (TVK == TVK_ForRTTIName)
    260     return;
    261 
    262   // We want to drop the visibility to hidden for weak type symbols.
    263   // This isn't possible if there might be unresolved references
    264   // elsewhere that rely on this symbol being visible.
    265 
    266   // This should be kept roughly in sync with setThunkVisibility
    267   // in CGVTables.cpp.
    268 
    269   // Preconditions.
    270   if (GV->getLinkage() != llvm::GlobalVariable::LinkOnceODRLinkage ||
    271       GV->getVisibility() != llvm::GlobalVariable::DefaultVisibility)
    272     return;
    273 
    274   // Don't override an explicit visibility attribute.
    275   if (RD->getExplicitVisibility())
    276     return;
    277 
    278   switch (RD->getTemplateSpecializationKind()) {
    279   // We have to disable the optimization if this is an EI definition
    280   // because there might be EI declarations in other shared objects.
    281   case TSK_ExplicitInstantiationDefinition:
    282   case TSK_ExplicitInstantiationDeclaration:
    283     return;
    284 
    285   // Every use of a non-template class's type information has to emit it.
    286   case TSK_Undeclared:
    287     break;
    288 
    289   // In theory, implicit instantiations can ignore the possibility of
    290   // an explicit instantiation declaration because there necessarily
    291   // must be an EI definition somewhere with default visibility.  In
    292   // practice, it's possible to have an explicit instantiation for
    293   // an arbitrary template class, and linkers aren't necessarily able
    294   // to deal with mixed-visibility symbols.
    295   case TSK_ExplicitSpecialization:
    296   case TSK_ImplicitInstantiation:
    297     if (!CodeGenOpts.HiddenWeakTemplateVTables)
    298       return;
    299     break;
    300   }
    301 
    302   // If there's a key function, there may be translation units
    303   // that don't have the key function's definition.  But ignore
    304   // this if we're emitting RTTI under -fno-rtti.
    305   if (!(TVK != TVK_ForRTTI) || LangOpts.RTTI) {
    306     if (Context.getKeyFunction(RD))
    307       return;
    308   }
    309 
    310   // Otherwise, drop the visibility to hidden.
    311   GV->setVisibility(llvm::GlobalValue::HiddenVisibility);
    312   GV->setUnnamedAddr(true);
    313 }
    314 
    315 StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
    316   const NamedDecl *ND = cast<NamedDecl>(GD.getDecl());
    317 
    318   StringRef &Str = MangledDeclNames[GD.getCanonicalDecl()];
    319   if (!Str.empty())
    320     return Str;
    321 
    322   if (!getCXXABI().getMangleContext().shouldMangleDeclName(ND)) {
    323     IdentifierInfo *II = ND->getIdentifier();
    324     assert(II && "Attempt to mangle unnamed decl.");
    325 
    326     Str = II->getName();
    327     return Str;
    328   }
    329 
    330   SmallString<256> Buffer;
    331   llvm::raw_svector_ostream Out(Buffer);
    332   if (const CXXConstructorDecl *D = dyn_cast<CXXConstructorDecl>(ND))
    333     getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out);
    334   else if (const CXXDestructorDecl *D = dyn_cast<CXXDestructorDecl>(ND))
    335     getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out);
    336   else if (const BlockDecl *BD = dyn_cast<BlockDecl>(ND))
    337     getCXXABI().getMangleContext().mangleBlock(BD, Out);
    338   else
    339     getCXXABI().getMangleContext().mangleName(ND, Out);
    340 
    341   // Allocate space for the mangled name.
    342   Out.flush();
    343   size_t Length = Buffer.size();
    344   char *Name = MangledNamesAllocator.Allocate<char>(Length);
    345   std::copy(Buffer.begin(), Buffer.end(), Name);
    346 
    347   Str = StringRef(Name, Length);
    348 
    349   return Str;
    350 }
    351 
    352 void CodeGenModule::getBlockMangledName(GlobalDecl GD, MangleBuffer &Buffer,
    353                                         const BlockDecl *BD) {
    354   MangleContext &MangleCtx = getCXXABI().getMangleContext();
    355   const Decl *D = GD.getDecl();
    356   llvm::raw_svector_ostream Out(Buffer.getBuffer());
    357   if (D == 0)
    358     MangleCtx.mangleGlobalBlock(BD, Out);
    359   else if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D))
    360     MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Out);
    361   else if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D))
    362     MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out);
    363   else
    364     MangleCtx.mangleBlock(cast<DeclContext>(D), BD, Out);
    365 }
    366 
    367 llvm::GlobalValue *CodeGenModule::GetGlobalValue(StringRef Name) {
    368   return getModule().getNamedValue(Name);
    369 }
    370 
    371 /// AddGlobalCtor - Add a function to the list that will be called before
    372 /// main() runs.
    373 void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor, int Priority) {
    374   // FIXME: Type coercion of void()* types.
    375   GlobalCtors.push_back(std::make_pair(Ctor, Priority));
    376 }
    377 
    378 /// AddGlobalDtor - Add a function to the list that will be called
    379 /// when the module is unloaded.
    380 void CodeGenModule::AddGlobalDtor(llvm::Function * Dtor, int Priority) {
    381   // FIXME: Type coercion of void()* types.
    382   GlobalDtors.push_back(std::make_pair(Dtor, Priority));
    383 }
    384 
    385 void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
    386   // Ctor function type is void()*.
    387   llvm::FunctionType* CtorFTy = llvm::FunctionType::get(VoidTy, false);
    388   llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
    389 
    390   // Get the type of a ctor entry, { i32, void ()* }.
    391   llvm::StructType *CtorStructTy =
    392     llvm::StructType::get(Int32Ty, llvm::PointerType::getUnqual(CtorFTy), NULL);
    393 
    394   // Construct the constructor and destructor arrays.
    395   SmallVector<llvm::Constant*, 8> Ctors;
    396   for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
    397     llvm::Constant *S[] = {
    398       llvm::ConstantInt::get(Int32Ty, I->second, false),
    399       llvm::ConstantExpr::getBitCast(I->first, CtorPFTy)
    400     };
    401     Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
    402   }
    403 
    404   if (!Ctors.empty()) {
    405     llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
    406     new llvm::GlobalVariable(TheModule, AT, false,
    407                              llvm::GlobalValue::AppendingLinkage,
    408                              llvm::ConstantArray::get(AT, Ctors),
    409                              GlobalName);
    410   }
    411 }
    412 
    413 llvm::GlobalValue::LinkageTypes
    414 CodeGenModule::getFunctionLinkage(const FunctionDecl *D) {
    415   GVALinkage Linkage = getContext().GetGVALinkageForFunction(D);
    416 
    417   if (Linkage == GVA_Internal)
    418     return llvm::Function::InternalLinkage;
    419 
    420   if (D->hasAttr<DLLExportAttr>())
    421     return llvm::Function::DLLExportLinkage;
    422 
    423   if (D->hasAttr<WeakAttr>())
    424     return llvm::Function::WeakAnyLinkage;
    425 
    426   // In C99 mode, 'inline' functions are guaranteed to have a strong
    427   // definition somewhere else, so we can use available_externally linkage.
    428   if (Linkage == GVA_C99Inline)
    429     return llvm::Function::AvailableExternallyLinkage;
    430 
    431   // Note that Apple's kernel linker doesn't support symbol
    432   // coalescing, so we need to avoid linkonce and weak linkages there.
    433   // Normally, this means we just map to internal, but for explicit
    434   // instantiations we'll map to external.
    435 
    436   // In C++, the compiler has to emit a definition in every translation unit
    437   // that references the function.  We should use linkonce_odr because
    438   // a) if all references in this translation unit are optimized away, we
    439   // don't need to codegen it.  b) if the function persists, it needs to be
    440   // merged with other definitions. c) C++ has the ODR, so we know the
    441   // definition is dependable.
    442   if (Linkage == GVA_CXXInline || Linkage == GVA_TemplateInstantiation)
    443     return !Context.getLangOpts().AppleKext
    444              ? llvm::Function::LinkOnceODRLinkage
    445              : llvm::Function::InternalLinkage;
    446 
    447   // An explicit instantiation of a template has weak linkage, since
    448   // explicit instantiations can occur in multiple translation units
    449   // and must all be equivalent. However, we are not allowed to
    450   // throw away these explicit instantiations.
    451   if (Linkage == GVA_ExplicitTemplateInstantiation)
    452     return !Context.getLangOpts().AppleKext
    453              ? llvm::Function::WeakODRLinkage
    454              : llvm::Function::ExternalLinkage;
    455 
    456   // Otherwise, we have strong external linkage.
    457   assert(Linkage == GVA_StrongExternal);
    458   return llvm::Function::ExternalLinkage;
    459 }
    460 
    461 
    462 /// SetFunctionDefinitionAttributes - Set attributes for a global.
    463 ///
    464 /// FIXME: This is currently only done for aliases and functions, but not for
    465 /// variables (these details are set in EmitGlobalVarDefinition for variables).
    466 void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D,
    467                                                     llvm::GlobalValue *GV) {
    468   SetCommonAttributes(D, GV);
    469 }
    470 
    471 void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
    472                                               const CGFunctionInfo &Info,
    473                                               llvm::Function *F) {
    474   unsigned CallingConv;
    475   AttributeListType AttributeList;
    476   ConstructAttributeList(Info, D, AttributeList, CallingConv);
    477   F->setAttributes(llvm::AttrListPtr::get(AttributeList.begin(),
    478                                           AttributeList.size()));
    479   F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
    480 }
    481 
    482 /// Determines whether the language options require us to model
    483 /// unwind exceptions.  We treat -fexceptions as mandating this
    484 /// except under the fragile ObjC ABI with only ObjC exceptions
    485 /// enabled.  This means, for example, that C with -fexceptions
    486 /// enables this.
    487 static bool hasUnwindExceptions(const LangOptions &LangOpts) {
    488   // If exceptions are completely disabled, obviously this is false.
    489   if (!LangOpts.Exceptions) return false;
    490 
    491   // If C++ exceptions are enabled, this is true.
    492   if (LangOpts.CXXExceptions) return true;
    493 
    494   // If ObjC exceptions are enabled, this depends on the ABI.
    495   if (LangOpts.ObjCExceptions) {
    496     if (!LangOpts.ObjCNonFragileABI) return false;
    497   }
    498 
    499   return true;
    500 }
    501 
    502 void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
    503                                                            llvm::Function *F) {
    504   if (CodeGenOpts.UnwindTables)
    505     F->setHasUWTable();
    506 
    507   if (!hasUnwindExceptions(LangOpts))
    508     F->addFnAttr(llvm::Attribute::NoUnwind);
    509 
    510   if (D->hasAttr<NakedAttr>()) {
    511     // Naked implies noinline: we should not be inlining such functions.
    512     F->addFnAttr(llvm::Attribute::Naked);
    513     F->addFnAttr(llvm::Attribute::NoInline);
    514   }
    515 
    516   if (D->hasAttr<NoInlineAttr>())
    517     F->addFnAttr(llvm::Attribute::NoInline);
    518 
    519   // (noinline wins over always_inline, and we can't specify both in IR)
    520   if (D->hasAttr<AlwaysInlineAttr>() &&
    521       !F->hasFnAttr(llvm::Attribute::NoInline))
    522     F->addFnAttr(llvm::Attribute::AlwaysInline);
    523 
    524   if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
    525     F->setUnnamedAddr(true);
    526 
    527   if (LangOpts.getStackProtector() == LangOptions::SSPOn)
    528     F->addFnAttr(llvm::Attribute::StackProtect);
    529   else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
    530     F->addFnAttr(llvm::Attribute::StackProtectReq);
    531 
    532   if (LangOpts.AddressSanitizer) {
    533     // When AddressSanitizer is enabled, set AddressSafety attribute
    534     // unless __attribute__((no_address_safety_analysis)) is used.
    535     if (!D->hasAttr<NoAddressSafetyAnalysisAttr>())
    536       F->addFnAttr(llvm::Attribute::AddressSafety);
    537   }
    538 
    539   unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
    540   if (alignment)
    541     F->setAlignment(alignment);
    542 
    543   // C++ ABI requires 2-byte alignment for member functions.
    544   if (F->getAlignment() < 2 && isa<CXXMethodDecl>(D))
    545     F->setAlignment(2);
    546 }
    547 
    548 void CodeGenModule::SetCommonAttributes(const Decl *D,
    549                                         llvm::GlobalValue *GV) {
    550   if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
    551     setGlobalVisibility(GV, ND);
    552   else
    553     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
    554 
    555   if (D->hasAttr<UsedAttr>())
    556     AddUsedGlobal(GV);
    557 
    558   if (const SectionAttr *SA = D->getAttr<SectionAttr>())
    559     GV->setSection(SA->getName());
    560 
    561   getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this);
    562 }
    563 
    564 void CodeGenModule::SetInternalFunctionAttributes(const Decl *D,
    565                                                   llvm::Function *F,
    566                                                   const CGFunctionInfo &FI) {
    567   SetLLVMFunctionAttributes(D, FI, F);
    568   SetLLVMFunctionAttributesForDefinition(D, F);
    569 
    570   F->setLinkage(llvm::Function::InternalLinkage);
    571 
    572   SetCommonAttributes(D, F);
    573 }
    574 
    575 void CodeGenModule::SetFunctionAttributes(GlobalDecl GD,
    576                                           llvm::Function *F,
    577                                           bool IsIncompleteFunction) {
    578   if (unsigned IID = F->getIntrinsicID()) {
    579     // If this is an intrinsic function, set the function's attributes
    580     // to the intrinsic's attributes.
    581     F->setAttributes(llvm::Intrinsic::getAttributes((llvm::Intrinsic::ID)IID));
    582     return;
    583   }
    584 
    585   const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
    586 
    587   if (!IsIncompleteFunction)
    588     SetLLVMFunctionAttributes(FD, getTypes().arrangeGlobalDeclaration(GD), F);
    589 
    590   // Only a few attributes are set on declarations; these may later be
    591   // overridden by a definition.
    592 
    593   if (FD->hasAttr<DLLImportAttr>()) {
    594     F->setLinkage(llvm::Function::DLLImportLinkage);
    595   } else if (FD->hasAttr<WeakAttr>() ||
    596              FD->isWeakImported()) {
    597     // "extern_weak" is overloaded in LLVM; we probably should have
    598     // separate linkage types for this.
    599     F->setLinkage(llvm::Function::ExternalWeakLinkage);
    600   } else {
    601     F->setLinkage(llvm::Function::ExternalLinkage);
    602 
    603     NamedDecl::LinkageInfo LV = FD->getLinkageAndVisibility();
    604     if (LV.linkage() == ExternalLinkage && LV.visibilityExplicit()) {
    605       F->setVisibility(GetLLVMVisibility(LV.visibility()));
    606     }
    607   }
    608 
    609   if (const SectionAttr *SA = FD->getAttr<SectionAttr>())
    610     F->setSection(SA->getName());
    611 }
    612 
    613 void CodeGenModule::AddUsedGlobal(llvm::GlobalValue *GV) {
    614   assert(!GV->isDeclaration() &&
    615          "Only globals with definition can force usage.");
    616   LLVMUsed.push_back(GV);
    617 }
    618 
    619 void CodeGenModule::EmitLLVMUsed() {
    620   // Don't create llvm.used if there is no need.
    621   if (LLVMUsed.empty())
    622     return;
    623 
    624   // Convert LLVMUsed to what ConstantArray needs.
    625   SmallVector<llvm::Constant*, 8> UsedArray;
    626   UsedArray.resize(LLVMUsed.size());
    627   for (unsigned i = 0, e = LLVMUsed.size(); i != e; ++i) {
    628     UsedArray[i] =
    629      llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*LLVMUsed[i]),
    630                                     Int8PtrTy);
    631   }
    632 
    633   if (UsedArray.empty())
    634     return;
    635   llvm::ArrayType *ATy = llvm::ArrayType::get(Int8PtrTy, UsedArray.size());
    636 
    637   llvm::GlobalVariable *GV =
    638     new llvm::GlobalVariable(getModule(), ATy, false,
    639                              llvm::GlobalValue::AppendingLinkage,
    640                              llvm::ConstantArray::get(ATy, UsedArray),
    641                              "llvm.used");
    642 
    643   GV->setSection("llvm.metadata");
    644 }
    645 
    646 void CodeGenModule::EmitDeferred() {
    647   // Emit code for any potentially referenced deferred decls.  Since a
    648   // previously unused static decl may become used during the generation of code
    649   // for a static function, iterate until no changes are made.
    650 
    651   while (!DeferredDeclsToEmit.empty() || !DeferredVTables.empty()) {
    652     if (!DeferredVTables.empty()) {
    653       const CXXRecordDecl *RD = DeferredVTables.back();
    654       DeferredVTables.pop_back();
    655       getVTables().GenerateClassData(getVTableLinkage(RD), RD);
    656       continue;
    657     }
    658 
    659     GlobalDecl D = DeferredDeclsToEmit.back();
    660     DeferredDeclsToEmit.pop_back();
    661 
    662     // Check to see if we've already emitted this.  This is necessary
    663     // for a couple of reasons: first, decls can end up in the
    664     // deferred-decls queue multiple times, and second, decls can end
    665     // up with definitions in unusual ways (e.g. by an extern inline
    666     // function acquiring a strong function redefinition).  Just
    667     // ignore these cases.
    668     //
    669     // TODO: That said, looking this up multiple times is very wasteful.
    670     StringRef Name = getMangledName(D);
    671     llvm::GlobalValue *CGRef = GetGlobalValue(Name);
    672     assert(CGRef && "Deferred decl wasn't referenced?");
    673 
    674     if (!CGRef->isDeclaration())
    675       continue;
    676 
    677     // GlobalAlias::isDeclaration() defers to the aliasee, but for our
    678     // purposes an alias counts as a definition.
    679     if (isa<llvm::GlobalAlias>(CGRef))
    680       continue;
    681 
    682     // Otherwise, emit the definition and move on to the next one.
    683     EmitGlobalDefinition(D);
    684   }
    685 }
    686 
    687 void CodeGenModule::EmitGlobalAnnotations() {
    688   if (Annotations.empty())
    689     return;
    690 
    691   // Create a new global variable for the ConstantStruct in the Module.
    692   llvm::Constant *Array = llvm::ConstantArray::get(llvm::ArrayType::get(
    693     Annotations[0]->getType(), Annotations.size()), Annotations);
    694   llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(),
    695     Array->getType(), false, llvm::GlobalValue::AppendingLinkage, Array,
    696     "llvm.global.annotations");
    697   gv->setSection(AnnotationSection);
    698 }
    699 
    700 llvm::Constant *CodeGenModule::EmitAnnotationString(llvm::StringRef Str) {
    701   llvm::StringMap<llvm::Constant*>::iterator i = AnnotationStrings.find(Str);
    702   if (i != AnnotationStrings.end())
    703     return i->second;
    704 
    705   // Not found yet, create a new global.
    706   llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str);
    707   llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(), s->getType(),
    708     true, llvm::GlobalValue::PrivateLinkage, s, ".str");
    709   gv->setSection(AnnotationSection);
    710   gv->setUnnamedAddr(true);
    711   AnnotationStrings[Str] = gv;
    712   return gv;
    713 }
    714 
    715 llvm::Constant *CodeGenModule::EmitAnnotationUnit(SourceLocation Loc) {
    716   SourceManager &SM = getContext().getSourceManager();
    717   PresumedLoc PLoc = SM.getPresumedLoc(Loc);
    718   if (PLoc.isValid())
    719     return EmitAnnotationString(PLoc.getFilename());
    720   return EmitAnnotationString(SM.getBufferName(Loc));
    721 }
    722 
    723 llvm::Constant *CodeGenModule::EmitAnnotationLineNo(SourceLocation L) {
    724   SourceManager &SM = getContext().getSourceManager();
    725   PresumedLoc PLoc = SM.getPresumedLoc(L);
    726   unsigned LineNo = PLoc.isValid() ? PLoc.getLine() :
    727     SM.getExpansionLineNumber(L);
    728   return llvm::ConstantInt::get(Int32Ty, LineNo);
    729 }
    730 
    731 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
    732                                                 const AnnotateAttr *AA,
    733                                                 SourceLocation L) {
    734   // Get the globals for file name, annotation, and the line number.
    735   llvm::Constant *AnnoGV = EmitAnnotationString(AA->getAnnotation()),
    736                  *UnitGV = EmitAnnotationUnit(L),
    737                  *LineNoCst = EmitAnnotationLineNo(L);
    738 
    739   // Create the ConstantStruct for the global annotation.
    740   llvm::Constant *Fields[4] = {
    741     llvm::ConstantExpr::getBitCast(GV, Int8PtrTy),
    742     llvm::ConstantExpr::getBitCast(AnnoGV, Int8PtrTy),
    743     llvm::ConstantExpr::getBitCast(UnitGV, Int8PtrTy),
    744     LineNoCst
    745   };
    746   return llvm::ConstantStruct::getAnon(Fields);
    747 }
    748 
    749 void CodeGenModule::AddGlobalAnnotations(const ValueDecl *D,
    750                                          llvm::GlobalValue *GV) {
    751   assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
    752   // Get the struct elements for these annotations.
    753   for (specific_attr_iterator<AnnotateAttr>
    754        ai = D->specific_attr_begin<AnnotateAttr>(),
    755        ae = D->specific_attr_end<AnnotateAttr>(); ai != ae; ++ai)
    756     Annotations.push_back(EmitAnnotateAttr(GV, *ai, D->getLocation()));
    757 }
    758 
    759 bool CodeGenModule::MayDeferGeneration(const ValueDecl *Global) {
    760   // Never defer when EmitAllDecls is specified.
    761   if (LangOpts.EmitAllDecls)
    762     return false;
    763 
    764   return !getContext().DeclMustBeEmitted(Global);
    765 }
    766 
    767 llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
    768   const AliasAttr *AA = VD->getAttr<AliasAttr>();
    769   assert(AA && "No alias?");
    770 
    771   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
    772 
    773   // See if there is already something with the target's name in the module.
    774   llvm::GlobalValue *Entry = GetGlobalValue(AA->getAliasee());
    775 
    776   llvm::Constant *Aliasee;
    777   if (isa<llvm::FunctionType>(DeclTy))
    778     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GlobalDecl(),
    779                                       /*ForVTable=*/false);
    780   else
    781     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
    782                                     llvm::PointerType::getUnqual(DeclTy), 0);
    783   if (!Entry) {
    784     llvm::GlobalValue* F = cast<llvm::GlobalValue>(Aliasee);
    785     F->setLinkage(llvm::Function::ExternalWeakLinkage);
    786     WeakRefReferences.insert(F);
    787   }
    788 
    789   return Aliasee;
    790 }
    791 
    792 void CodeGenModule::EmitGlobal(GlobalDecl GD) {
    793   const ValueDecl *Global = cast<ValueDecl>(GD.getDecl());
    794 
    795   // Weak references don't produce any output by themselves.
    796   if (Global->hasAttr<WeakRefAttr>())
    797     return;
    798 
    799   // If this is an alias definition (which otherwise looks like a declaration)
    800   // emit it now.
    801   if (Global->hasAttr<AliasAttr>())
    802     return EmitAliasDefinition(GD);
    803 
    804   // If this is CUDA, be selective about which declarations we emit.
    805   if (LangOpts.CUDA) {
    806     if (CodeGenOpts.CUDAIsDevice) {
    807       if (!Global->hasAttr<CUDADeviceAttr>() &&
    808           !Global->hasAttr<CUDAGlobalAttr>() &&
    809           !Global->hasAttr<CUDAConstantAttr>() &&
    810           !Global->hasAttr<CUDASharedAttr>())
    811         return;
    812     } else {
    813       if (!Global->hasAttr<CUDAHostAttr>() && (
    814             Global->hasAttr<CUDADeviceAttr>() ||
    815             Global->hasAttr<CUDAConstantAttr>() ||
    816             Global->hasAttr<CUDASharedAttr>()))
    817         return;
    818     }
    819   }
    820 
    821   // Ignore declarations, they will be emitted on their first use.
    822   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
    823     // Forward declarations are emitted lazily on first use.
    824     if (!FD->doesThisDeclarationHaveABody()) {
    825       if (!FD->doesDeclarationForceExternallyVisibleDefinition())
    826         return;
    827 
    828       const FunctionDecl *InlineDefinition = 0;
    829       FD->getBody(InlineDefinition);
    830 
    831       StringRef MangledName = getMangledName(GD);
    832       DeferredDecls.erase(MangledName);
    833       EmitGlobalDefinition(InlineDefinition);
    834       return;
    835     }
    836   } else {
    837     const VarDecl *VD = cast<VarDecl>(Global);
    838     assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
    839 
    840     if (VD->isThisDeclarationADefinition() != VarDecl::Definition)
    841       return;
    842   }
    843 
    844   // Defer code generation when possible if this is a static definition, inline
    845   // function etc.  These we only want to emit if they are used.
    846   if (!MayDeferGeneration(Global)) {
    847     // Emit the definition if it can't be deferred.
    848     EmitGlobalDefinition(GD);
    849     return;
    850   }
    851 
    852   // If we're deferring emission of a C++ variable with an
    853   // initializer, remember the order in which it appeared in the file.
    854   if (getLangOpts().CPlusPlus && isa<VarDecl>(Global) &&
    855       cast<VarDecl>(Global)->hasInit()) {
    856     DelayedCXXInitPosition[Global] = CXXGlobalInits.size();
    857     CXXGlobalInits.push_back(0);
    858   }
    859 
    860   // If the value has already been used, add it directly to the
    861   // DeferredDeclsToEmit list.
    862   StringRef MangledName = getMangledName(GD);
    863   if (GetGlobalValue(MangledName))
    864     DeferredDeclsToEmit.push_back(GD);
    865   else {
    866     // Otherwise, remember that we saw a deferred decl with this name.  The
    867     // first use of the mangled name will cause it to move into
    868     // DeferredDeclsToEmit.
    869     DeferredDecls[MangledName] = GD;
    870   }
    871 }
    872 
    873 namespace {
    874   struct FunctionIsDirectlyRecursive :
    875     public RecursiveASTVisitor<FunctionIsDirectlyRecursive> {
    876     const StringRef Name;
    877     const Builtin::Context &BI;
    878     bool Result;
    879     FunctionIsDirectlyRecursive(StringRef N, const Builtin::Context &C) :
    880       Name(N), BI(C), Result(false) {
    881     }
    882     typedef RecursiveASTVisitor<FunctionIsDirectlyRecursive> Base;
    883 
    884     bool TraverseCallExpr(CallExpr *E) {
    885       const FunctionDecl *FD = E->getDirectCallee();
    886       if (!FD)
    887         return true;
    888       AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
    889       if (Attr && Name == Attr->getLabel()) {
    890         Result = true;
    891         return false;
    892       }
    893       unsigned BuiltinID = FD->getBuiltinID();
    894       if (!BuiltinID)
    895         return true;
    896       StringRef BuiltinName = BI.GetName(BuiltinID);
    897       if (BuiltinName.startswith("__builtin_") &&
    898           Name == BuiltinName.slice(strlen("__builtin_"), StringRef::npos)) {
    899         Result = true;
    900         return false;
    901       }
    902       return true;
    903     }
    904   };
    905 }
    906 
    907 // isTriviallyRecursive - Check if this function calls another
    908 // decl that, because of the asm attribute or the other decl being a builtin,
    909 // ends up pointing to itself.
    910 bool
    911 CodeGenModule::isTriviallyRecursive(const FunctionDecl *FD) {
    912   StringRef Name;
    913   if (getCXXABI().getMangleContext().shouldMangleDeclName(FD)) {
    914     // asm labels are a special kind of mangling we have to support.
    915     AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
    916     if (!Attr)
    917       return false;
    918     Name = Attr->getLabel();
    919   } else {
    920     Name = FD->getName();
    921   }
    922 
    923   FunctionIsDirectlyRecursive Walker(Name, Context.BuiltinInfo);
    924   Walker.TraverseFunctionDecl(const_cast<FunctionDecl*>(FD));
    925   return Walker.Result;
    926 }
    927 
    928 bool
    929 CodeGenModule::shouldEmitFunction(const FunctionDecl *F) {
    930   if (getFunctionLinkage(F) != llvm::Function::AvailableExternallyLinkage)
    931     return true;
    932   if (CodeGenOpts.OptimizationLevel == 0 &&
    933       !F->hasAttr<AlwaysInlineAttr>())
    934     return false;
    935   // PR9614. Avoid cases where the source code is lying to us. An available
    936   // externally function should have an equivalent function somewhere else,
    937   // but a function that calls itself is clearly not equivalent to the real
    938   // implementation.
    939   // This happens in glibc's btowc and in some configure checks.
    940   return !isTriviallyRecursive(F);
    941 }
    942 
    943 void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) {
    944   const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
    945 
    946   PrettyStackTraceDecl CrashInfo(const_cast<ValueDecl *>(D), D->getLocation(),
    947                                  Context.getSourceManager(),
    948                                  "Generating code for declaration");
    949 
    950   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
    951     // At -O0, don't generate IR for functions with available_externally
    952     // linkage.
    953     if (!shouldEmitFunction(Function))
    954       return;
    955 
    956     if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
    957       // Make sure to emit the definition(s) before we emit the thunks.
    958       // This is necessary for the generation of certain thunks.
    959       if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(Method))
    960         EmitCXXConstructor(CD, GD.getCtorType());
    961       else if (const CXXDestructorDecl *DD =dyn_cast<CXXDestructorDecl>(Method))
    962         EmitCXXDestructor(DD, GD.getDtorType());
    963       else
    964         EmitGlobalFunctionDefinition(GD);
    965 
    966       if (Method->isVirtual())
    967         getVTables().EmitThunks(GD);
    968 
    969       return;
    970     }
    971 
    972     return EmitGlobalFunctionDefinition(GD);
    973   }
    974 
    975   if (const VarDecl *VD = dyn_cast<VarDecl>(D))
    976     return EmitGlobalVarDefinition(VD);
    977 
    978   llvm_unreachable("Invalid argument to EmitGlobalDefinition()");
    979 }
    980 
    981 /// GetOrCreateLLVMFunction - If the specified mangled name is not in the
    982 /// module, create and return an llvm Function with the specified type. If there
    983 /// is something in the module with the specified name, return it potentially
    984 /// bitcasted to the right type.
    985 ///
    986 /// If D is non-null, it specifies a decl that correspond to this.  This is used
    987 /// to set the attributes on the function when it is first created.
    988 llvm::Constant *
    989 CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
    990                                        llvm::Type *Ty,
    991                                        GlobalDecl D, bool ForVTable,
    992                                        llvm::Attributes ExtraAttrs) {
    993   // Lookup the entry, lazily creating it if necessary.
    994   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
    995   if (Entry) {
    996     if (WeakRefReferences.count(Entry)) {
    997       const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl());
    998       if (FD && !FD->hasAttr<WeakAttr>())
    999         Entry->setLinkage(llvm::Function::ExternalLinkage);
   1000 
   1001       WeakRefReferences.erase(Entry);
   1002     }
   1003 
   1004     if (Entry->getType()->getElementType() == Ty)
   1005       return Entry;
   1006 
   1007     // Make sure the result is of the correct type.
   1008     return llvm::ConstantExpr::getBitCast(Entry, Ty->getPointerTo());
   1009   }
   1010 
   1011   // This function doesn't have a complete type (for example, the return
   1012   // type is an incomplete struct). Use a fake type instead, and make
   1013   // sure not to try to set attributes.
   1014   bool IsIncompleteFunction = false;
   1015 
   1016   llvm::FunctionType *FTy;
   1017   if (isa<llvm::FunctionType>(Ty)) {
   1018     FTy = cast<llvm::FunctionType>(Ty);
   1019   } else {
   1020     FTy = llvm::FunctionType::get(VoidTy, false);
   1021     IsIncompleteFunction = true;
   1022   }
   1023 
   1024   llvm::Function *F = llvm::Function::Create(FTy,
   1025                                              llvm::Function::ExternalLinkage,
   1026                                              MangledName, &getModule());
   1027   assert(F->getName() == MangledName && "name was uniqued!");
   1028   if (D.getDecl())
   1029     SetFunctionAttributes(D, F, IsIncompleteFunction);
   1030   if (ExtraAttrs != llvm::Attribute::None)
   1031     F->addFnAttr(ExtraAttrs);
   1032 
   1033   // This is the first use or definition of a mangled name.  If there is a
   1034   // deferred decl with this name, remember that we need to emit it at the end
   1035   // of the file.
   1036   llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
   1037   if (DDI != DeferredDecls.end()) {
   1038     // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
   1039     // list, and remove it from DeferredDecls (since we don't need it anymore).
   1040     DeferredDeclsToEmit.push_back(DDI->second);
   1041     DeferredDecls.erase(DDI);
   1042 
   1043   // Otherwise, there are cases we have to worry about where we're
   1044   // using a declaration for which we must emit a definition but where
   1045   // we might not find a top-level definition:
   1046   //   - member functions defined inline in their classes
   1047   //   - friend functions defined inline in some class
   1048   //   - special member functions with implicit definitions
   1049   // If we ever change our AST traversal to walk into class methods,
   1050   // this will be unnecessary.
   1051   //
   1052   // We also don't emit a definition for a function if it's going to be an entry
   1053   // in a vtable, unless it's already marked as used.
   1054   } else if (getLangOpts().CPlusPlus && D.getDecl()) {
   1055     // Look for a declaration that's lexically in a record.
   1056     const FunctionDecl *FD = cast<FunctionDecl>(D.getDecl());
   1057     do {
   1058       if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
   1059         if (FD->isImplicit() && !ForVTable) {
   1060           assert(FD->isUsed() && "Sema didn't mark implicit function as used!");
   1061           DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
   1062           break;
   1063         } else if (FD->doesThisDeclarationHaveABody()) {
   1064           DeferredDeclsToEmit.push_back(D.getWithDecl(FD));
   1065           break;
   1066         }
   1067       }
   1068       FD = FD->getPreviousDecl();
   1069     } while (FD);
   1070   }
   1071 
   1072   // Make sure the result is of the requested type.
   1073   if (!IsIncompleteFunction) {
   1074     assert(F->getType()->getElementType() == Ty);
   1075     return F;
   1076   }
   1077 
   1078   llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
   1079   return llvm::ConstantExpr::getBitCast(F, PTy);
   1080 }
   1081 
   1082 /// GetAddrOfFunction - Return the address of the given function.  If Ty is
   1083 /// non-null, then this function will use the specified type if it has to
   1084 /// create it (this occurs when we see a definition of the function).
   1085 llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
   1086                                                  llvm::Type *Ty,
   1087                                                  bool ForVTable) {
   1088   // If there was no specific requested type, just convert it now.
   1089   if (!Ty)
   1090     Ty = getTypes().ConvertType(cast<ValueDecl>(GD.getDecl())->getType());
   1091 
   1092   StringRef MangledName = getMangledName(GD);
   1093   return GetOrCreateLLVMFunction(MangledName, Ty, GD, ForVTable);
   1094 }
   1095 
   1096 /// CreateRuntimeFunction - Create a new runtime function with the specified
   1097 /// type and name.
   1098 llvm::Constant *
   1099 CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy,
   1100                                      StringRef Name,
   1101                                      llvm::Attributes ExtraAttrs) {
   1102   return GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
   1103                                  ExtraAttrs);
   1104 }
   1105 
   1106 /// isTypeConstant - Determine whether an object of this type can be emitted
   1107 /// as a constant.
   1108 ///
   1109 /// If ExcludeCtor is true, the duration when the object's constructor runs
   1110 /// will not be considered. The caller will need to verify that the object is
   1111 /// not written to during its construction.
   1112 bool CodeGenModule::isTypeConstant(QualType Ty, bool ExcludeCtor) {
   1113   if (!Ty.isConstant(Context) && !Ty->isReferenceType())
   1114     return false;
   1115 
   1116   if (Context.getLangOpts().CPlusPlus) {
   1117     if (const CXXRecordDecl *Record
   1118           = Context.getBaseElementType(Ty)->getAsCXXRecordDecl())
   1119       return ExcludeCtor && !Record->hasMutableFields() &&
   1120              Record->hasTrivialDestructor();
   1121   }
   1122 
   1123   return true;
   1124 }
   1125 
   1126 /// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,
   1127 /// create and return an llvm GlobalVariable with the specified type.  If there
   1128 /// is something in the module with the specified name, return it potentially
   1129 /// bitcasted to the right type.
   1130 ///
   1131 /// If D is non-null, it specifies a decl that correspond to this.  This is used
   1132 /// to set the attributes on the global when it is first created.
   1133 llvm::Constant *
   1134 CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
   1135                                      llvm::PointerType *Ty,
   1136                                      const VarDecl *D,
   1137                                      bool UnnamedAddr) {
   1138   // Lookup the entry, lazily creating it if necessary.
   1139   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
   1140   if (Entry) {
   1141     if (WeakRefReferences.count(Entry)) {
   1142       if (D && !D->hasAttr<WeakAttr>())
   1143         Entry->setLinkage(llvm::Function::ExternalLinkage);
   1144 
   1145       WeakRefReferences.erase(Entry);
   1146     }
   1147 
   1148     if (UnnamedAddr)
   1149       Entry->setUnnamedAddr(true);
   1150 
   1151     if (Entry->getType() == Ty)
   1152       return Entry;
   1153 
   1154     // Make sure the result is of the correct type.
   1155     return llvm::ConstantExpr::getBitCast(Entry, Ty);
   1156   }
   1157 
   1158   // This is the first use or definition of a mangled name.  If there is a
   1159   // deferred decl with this name, remember that we need to emit it at the end
   1160   // of the file.
   1161   llvm::StringMap<GlobalDecl>::iterator DDI = DeferredDecls.find(MangledName);
   1162   if (DDI != DeferredDecls.end()) {
   1163     // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
   1164     // list, and remove it from DeferredDecls (since we don't need it anymore).
   1165     DeferredDeclsToEmit.push_back(DDI->second);
   1166     DeferredDecls.erase(DDI);
   1167   }
   1168 
   1169   llvm::GlobalVariable *GV =
   1170     new llvm::GlobalVariable(getModule(), Ty->getElementType(), false,
   1171                              llvm::GlobalValue::ExternalLinkage,
   1172                              0, MangledName, 0,
   1173                              false, Ty->getAddressSpace());
   1174 
   1175   // Handle things which are present even on external declarations.
   1176   if (D) {
   1177     // FIXME: This code is overly simple and should be merged with other global
   1178     // handling.
   1179     GV->setConstant(isTypeConstant(D->getType(), false));
   1180 
   1181     // Set linkage and visibility in case we never see a definition.
   1182     NamedDecl::LinkageInfo LV = D->getLinkageAndVisibility();
   1183     if (LV.linkage() != ExternalLinkage) {
   1184       // Don't set internal linkage on declarations.
   1185     } else {
   1186       if (D->hasAttr<DLLImportAttr>())
   1187         GV->setLinkage(llvm::GlobalValue::DLLImportLinkage);
   1188       else if (D->hasAttr<WeakAttr>() || D->isWeakImported())
   1189         GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
   1190 
   1191       // Set visibility on a declaration only if it's explicit.
   1192       if (LV.visibilityExplicit())
   1193         GV->setVisibility(GetLLVMVisibility(LV.visibility()));
   1194     }
   1195 
   1196     GV->setThreadLocal(D->isThreadSpecified());
   1197   }
   1198 
   1199   return GV;
   1200 }
   1201 
   1202 
   1203 llvm::GlobalVariable *
   1204 CodeGenModule::CreateOrReplaceCXXRuntimeVariable(StringRef Name,
   1205                                       llvm::Type *Ty,
   1206                                       llvm::GlobalValue::LinkageTypes Linkage) {
   1207   llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name);
   1208   llvm::GlobalVariable *OldGV = 0;
   1209 
   1210 
   1211   if (GV) {
   1212     // Check if the variable has the right type.
   1213     if (GV->getType()->getElementType() == Ty)
   1214       return GV;
   1215 
   1216     // Because C++ name mangling, the only way we can end up with an already
   1217     // existing global with the same name is if it has been declared extern "C".
   1218       assert(GV->isDeclaration() && "Declaration has wrong type!");
   1219     OldGV = GV;
   1220   }
   1221 
   1222   // Create a new variable.
   1223   GV = new llvm::GlobalVariable(getModule(), Ty, /*isConstant=*/true,
   1224                                 Linkage, 0, Name);
   1225 
   1226   if (OldGV) {
   1227     // Replace occurrences of the old variable if needed.
   1228     GV->takeName(OldGV);
   1229 
   1230     if (!OldGV->use_empty()) {
   1231       llvm::Constant *NewPtrForOldDecl =
   1232       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
   1233       OldGV->replaceAllUsesWith(NewPtrForOldDecl);
   1234     }
   1235 
   1236     OldGV->eraseFromParent();
   1237   }
   1238 
   1239   return GV;
   1240 }
   1241 
   1242 /// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
   1243 /// given global variable.  If Ty is non-null and if the global doesn't exist,
   1244 /// then it will be created with the specified type instead of whatever the
   1245 /// normal requested type would be.
   1246 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
   1247                                                   llvm::Type *Ty) {
   1248   assert(D->hasGlobalStorage() && "Not a global variable");
   1249   QualType ASTTy = D->getType();
   1250   if (Ty == 0)
   1251     Ty = getTypes().ConvertTypeForMem(ASTTy);
   1252 
   1253   llvm::PointerType *PTy =
   1254     llvm::PointerType::get(Ty, getContext().getTargetAddressSpace(ASTTy));
   1255 
   1256   StringRef MangledName = getMangledName(D);
   1257   return GetOrCreateLLVMGlobal(MangledName, PTy, D);
   1258 }
   1259 
   1260 /// CreateRuntimeVariable - Create a new runtime global variable with the
   1261 /// specified type and name.
   1262 llvm::Constant *
   1263 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
   1264                                      StringRef Name) {
   1265   return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), 0,
   1266                                true);
   1267 }
   1268 
   1269 void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
   1270   assert(!D->getInit() && "Cannot emit definite definitions here!");
   1271 
   1272   if (MayDeferGeneration(D)) {
   1273     // If we have not seen a reference to this variable yet, place it
   1274     // into the deferred declarations table to be emitted if needed
   1275     // later.
   1276     StringRef MangledName = getMangledName(D);
   1277     if (!GetGlobalValue(MangledName)) {
   1278       DeferredDecls[MangledName] = D;
   1279       return;
   1280     }
   1281   }
   1282 
   1283   // The tentative definition is the only definition.
   1284   EmitGlobalVarDefinition(D);
   1285 }
   1286 
   1287 void CodeGenModule::EmitVTable(CXXRecordDecl *Class, bool DefinitionRequired) {
   1288   if (DefinitionRequired)
   1289     getVTables().GenerateClassData(getVTableLinkage(Class), Class);
   1290 }
   1291 
   1292 llvm::GlobalVariable::LinkageTypes
   1293 CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
   1294   if (RD->getLinkage() != ExternalLinkage)
   1295     return llvm::GlobalVariable::InternalLinkage;
   1296 
   1297   if (const CXXMethodDecl *KeyFunction
   1298                                     = RD->getASTContext().getKeyFunction(RD)) {
   1299     // If this class has a key function, use that to determine the linkage of
   1300     // the vtable.
   1301     const FunctionDecl *Def = 0;
   1302     if (KeyFunction->hasBody(Def))
   1303       KeyFunction = cast<CXXMethodDecl>(Def);
   1304 
   1305     switch (KeyFunction->getTemplateSpecializationKind()) {
   1306       case TSK_Undeclared:
   1307       case TSK_ExplicitSpecialization:
   1308         // When compiling with optimizations turned on, we emit all vtables,
   1309         // even if the key function is not defined in the current translation
   1310         // unit. If this is the case, use available_externally linkage.
   1311         if (!Def && CodeGenOpts.OptimizationLevel)
   1312           return llvm::GlobalVariable::AvailableExternallyLinkage;
   1313 
   1314         if (KeyFunction->isInlined())
   1315           return !Context.getLangOpts().AppleKext ?
   1316                    llvm::GlobalVariable::LinkOnceODRLinkage :
   1317                    llvm::Function::InternalLinkage;
   1318 
   1319         return llvm::GlobalVariable::ExternalLinkage;
   1320 
   1321       case TSK_ImplicitInstantiation:
   1322         return !Context.getLangOpts().AppleKext ?
   1323                  llvm::GlobalVariable::LinkOnceODRLinkage :
   1324                  llvm::Function::InternalLinkage;
   1325 
   1326       case TSK_ExplicitInstantiationDefinition:
   1327         return !Context.getLangOpts().AppleKext ?
   1328                  llvm::GlobalVariable::WeakODRLinkage :
   1329                  llvm::Function::InternalLinkage;
   1330 
   1331       case TSK_ExplicitInstantiationDeclaration:
   1332         // FIXME: Use available_externally linkage. However, this currently
   1333         // breaks LLVM's build due to undefined symbols.
   1334         //      return llvm::GlobalVariable::AvailableExternallyLinkage;
   1335         return !Context.getLangOpts().AppleKext ?
   1336                  llvm::GlobalVariable::LinkOnceODRLinkage :
   1337                  llvm::Function::InternalLinkage;
   1338     }
   1339   }
   1340 
   1341   if (Context.getLangOpts().AppleKext)
   1342     return llvm::Function::InternalLinkage;
   1343 
   1344   switch (RD->getTemplateSpecializationKind()) {
   1345   case TSK_Undeclared:
   1346   case TSK_ExplicitSpecialization:
   1347   case TSK_ImplicitInstantiation:
   1348     // FIXME: Use available_externally linkage. However, this currently
   1349     // breaks LLVM's build due to undefined symbols.
   1350     //   return llvm::GlobalVariable::AvailableExternallyLinkage;
   1351   case TSK_ExplicitInstantiationDeclaration:
   1352     return llvm::GlobalVariable::LinkOnceODRLinkage;
   1353 
   1354   case TSK_ExplicitInstantiationDefinition:
   1355       return llvm::GlobalVariable::WeakODRLinkage;
   1356   }
   1357 
   1358   llvm_unreachable("Invalid TemplateSpecializationKind!");
   1359 }
   1360 
   1361 CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) const {
   1362     return Context.toCharUnitsFromBits(
   1363       TheTargetData.getTypeStoreSizeInBits(Ty));
   1364 }
   1365 
   1366 llvm::Constant *
   1367 CodeGenModule::MaybeEmitGlobalStdInitializerListInitializer(const VarDecl *D,
   1368                                                        const Expr *rawInit) {
   1369   ArrayRef<ExprWithCleanups::CleanupObject> cleanups;
   1370   if (const ExprWithCleanups *withCleanups =
   1371           dyn_cast<ExprWithCleanups>(rawInit)) {
   1372     cleanups = withCleanups->getObjects();
   1373     rawInit = withCleanups->getSubExpr();
   1374   }
   1375 
   1376   const InitListExpr *init = dyn_cast<InitListExpr>(rawInit);
   1377   if (!init || !init->initializesStdInitializerList() ||
   1378       init->getNumInits() == 0)
   1379     return 0;
   1380 
   1381   ASTContext &ctx = getContext();
   1382   unsigned numInits = init->getNumInits();
   1383   // FIXME: This check is here because we would otherwise silently miscompile
   1384   // nested global std::initializer_lists. Better would be to have a real
   1385   // implementation.
   1386   for (unsigned i = 0; i < numInits; ++i) {
   1387     const InitListExpr *inner = dyn_cast<InitListExpr>(init->getInit(i));
   1388     if (inner && inner->initializesStdInitializerList()) {
   1389       ErrorUnsupported(inner, "nested global std::initializer_list");
   1390       return 0;
   1391     }
   1392   }
   1393 
   1394   // Synthesize a fake VarDecl for the array and initialize that.
   1395   QualType elementType = init->getInit(0)->getType();
   1396   llvm::APInt numElements(ctx.getTypeSize(ctx.getSizeType()), numInits);
   1397   QualType arrayType = ctx.getConstantArrayType(elementType, numElements,
   1398                                                 ArrayType::Normal, 0);
   1399 
   1400   IdentifierInfo *name = &ctx.Idents.get(D->getNameAsString() + "__initlist");
   1401   TypeSourceInfo *sourceInfo = ctx.getTrivialTypeSourceInfo(
   1402                                               arrayType, D->getLocation());
   1403   VarDecl *backingArray = VarDecl::Create(ctx, const_cast<DeclContext*>(
   1404                                                           D->getDeclContext()),
   1405                                           D->getLocStart(), D->getLocation(),
   1406                                           name, arrayType, sourceInfo,
   1407                                           SC_Static, SC_Static);
   1408 
   1409   // Now clone the InitListExpr to initialize the array instead.
   1410   // Incredible hack: we want to use the existing InitListExpr here, so we need
   1411   // to tell it that it no longer initializes a std::initializer_list.
   1412   Expr *arrayInit = new (ctx) InitListExpr(ctx, init->getLBraceLoc(),
   1413                                     const_cast<InitListExpr*>(init)->getInits(),
   1414                                                    init->getNumInits(),
   1415                                                    init->getRBraceLoc());
   1416   arrayInit->setType(arrayType);
   1417 
   1418   if (!cleanups.empty())
   1419     arrayInit = ExprWithCleanups::Create(ctx, arrayInit, cleanups);
   1420 
   1421   backingArray->setInit(arrayInit);
   1422 
   1423   // Emit the definition of the array.
   1424   EmitGlobalVarDefinition(backingArray);
   1425 
   1426   // Inspect the initializer list to validate it and determine its type.
   1427   // FIXME: doing this every time is probably inefficient; caching would be nice
   1428   RecordDecl *record = init->getType()->castAs<RecordType>()->getDecl();
   1429   RecordDecl::field_iterator field = record->field_begin();
   1430   if (field == record->field_end()) {
   1431     ErrorUnsupported(D, "weird std::initializer_list");
   1432     return 0;
   1433   }
   1434   QualType elementPtr = ctx.getPointerType(elementType.withConst());
   1435   // Start pointer.
   1436   if (!ctx.hasSameType(field->getType(), elementPtr)) {
   1437     ErrorUnsupported(D, "weird std::initializer_list");
   1438     return 0;
   1439   }
   1440   ++field;
   1441   if (field == record->field_end()) {
   1442     ErrorUnsupported(D, "weird std::initializer_list");
   1443     return 0;
   1444   }
   1445   bool isStartEnd = false;
   1446   if (ctx.hasSameType(field->getType(), elementPtr)) {
   1447     // End pointer.
   1448     isStartEnd = true;
   1449   } else if(!ctx.hasSameType(field->getType(), ctx.getSizeType())) {
   1450     ErrorUnsupported(D, "weird std::initializer_list");
   1451     return 0;
   1452   }
   1453 
   1454   // Now build an APValue representing the std::initializer_list.
   1455   APValue initListValue(APValue::UninitStruct(), 0, 2);
   1456   APValue &startField = initListValue.getStructField(0);
   1457   APValue::LValuePathEntry startOffsetPathEntry;
   1458   startOffsetPathEntry.ArrayIndex = 0;
   1459   startField = APValue(APValue::LValueBase(backingArray),
   1460                        CharUnits::fromQuantity(0),
   1461                        llvm::makeArrayRef(startOffsetPathEntry),
   1462                        /*IsOnePastTheEnd=*/false, 0);
   1463 
   1464   if (isStartEnd) {
   1465     APValue &endField = initListValue.getStructField(1);
   1466     APValue::LValuePathEntry endOffsetPathEntry;
   1467     endOffsetPathEntry.ArrayIndex = numInits;
   1468     endField = APValue(APValue::LValueBase(backingArray),
   1469                        ctx.getTypeSizeInChars(elementType) * numInits,
   1470                        llvm::makeArrayRef(endOffsetPathEntry),
   1471                        /*IsOnePastTheEnd=*/true, 0);
   1472   } else {
   1473     APValue &sizeField = initListValue.getStructField(1);
   1474     sizeField = APValue(llvm::APSInt(numElements));
   1475   }
   1476 
   1477   // Emit the constant for the initializer_list.
   1478   llvm::Constant *llvmInit =
   1479       EmitConstantValueForMemory(initListValue, D->getType());
   1480   assert(llvmInit && "failed to initialize as constant");
   1481   return llvmInit;
   1482 }
   1483 
   1484 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
   1485   llvm::Constant *Init = 0;
   1486   QualType ASTTy = D->getType();
   1487   CXXRecordDecl *RD = ASTTy->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
   1488   bool NeedsGlobalCtor = false;
   1489   bool NeedsGlobalDtor = RD && !RD->hasTrivialDestructor();
   1490 
   1491   const VarDecl *InitDecl;
   1492   const Expr *InitExpr = D->getAnyInitializer(InitDecl);
   1493 
   1494   if (!InitExpr) {
   1495     // This is a tentative definition; tentative definitions are
   1496     // implicitly initialized with { 0 }.
   1497     //
   1498     // Note that tentative definitions are only emitted at the end of
   1499     // a translation unit, so they should never have incomplete
   1500     // type. In addition, EmitTentativeDefinition makes sure that we
   1501     // never attempt to emit a tentative definition if a real one
   1502     // exists. A use may still exists, however, so we still may need
   1503     // to do a RAUW.
   1504     assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
   1505     Init = EmitNullConstant(D->getType());
   1506   } else {
   1507     // If this is a std::initializer_list, emit the special initializer.
   1508     Init = MaybeEmitGlobalStdInitializerListInitializer(D, InitExpr);
   1509     // An empty init list will perform zero-initialization, which happens
   1510     // to be exactly what we want.
   1511     // FIXME: It does so in a global constructor, which is *not* what we
   1512     // want.
   1513 
   1514     if (!Init)
   1515       Init = EmitConstantInit(*InitDecl);
   1516     if (!Init) {
   1517       QualType T = InitExpr->getType();
   1518       if (D->getType()->isReferenceType())
   1519         T = D->getType();
   1520 
   1521       if (getLangOpts().CPlusPlus) {
   1522         Init = EmitNullConstant(T);
   1523         NeedsGlobalCtor = true;
   1524       } else {
   1525         ErrorUnsupported(D, "static initializer");
   1526         Init = llvm::UndefValue::get(getTypes().ConvertType(T));
   1527       }
   1528     } else {
   1529       // We don't need an initializer, so remove the entry for the delayed
   1530       // initializer position (just in case this entry was delayed) if we
   1531       // also don't need to register a destructor.
   1532       if (getLangOpts().CPlusPlus && !NeedsGlobalDtor)
   1533         DelayedCXXInitPosition.erase(D);
   1534     }
   1535   }
   1536 
   1537   llvm::Type* InitType = Init->getType();
   1538   llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
   1539 
   1540   // Strip off a bitcast if we got one back.
   1541   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
   1542     assert(CE->getOpcode() == llvm::Instruction::BitCast ||
   1543            // all zero index gep.
   1544            CE->getOpcode() == llvm::Instruction::GetElementPtr);
   1545     Entry = CE->getOperand(0);
   1546   }
   1547 
   1548   // Entry is now either a Function or GlobalVariable.
   1549   llvm::GlobalVariable *GV = dyn_cast<llvm::GlobalVariable>(Entry);
   1550 
   1551   // We have a definition after a declaration with the wrong type.
   1552   // We must make a new GlobalVariable* and update everything that used OldGV
   1553   // (a declaration or tentative definition) with the new GlobalVariable*
   1554   // (which will be a definition).
   1555   //
   1556   // This happens if there is a prototype for a global (e.g.
   1557   // "extern int x[];") and then a definition of a different type (e.g.
   1558   // "int x[10];"). This also happens when an initializer has a different type
   1559   // from the type of the global (this happens with unions).
   1560   if (GV == 0 ||
   1561       GV->getType()->getElementType() != InitType ||
   1562       GV->getType()->getAddressSpace() !=
   1563         getContext().getTargetAddressSpace(ASTTy)) {
   1564 
   1565     // Move the old entry aside so that we'll create a new one.
   1566     Entry->setName(StringRef());
   1567 
   1568     // Make a new global with the correct type, this is now guaranteed to work.
   1569     GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
   1570 
   1571     // Replace all uses of the old global with the new global
   1572     llvm::Constant *NewPtrForOldDecl =
   1573         llvm::ConstantExpr::getBitCast(GV, Entry->getType());
   1574     Entry->replaceAllUsesWith(NewPtrForOldDecl);
   1575 
   1576     // Erase the old global, since it is no longer used.
   1577     cast<llvm::GlobalValue>(Entry)->eraseFromParent();
   1578   }
   1579 
   1580   if (D->hasAttr<AnnotateAttr>())
   1581     AddGlobalAnnotations(D, GV);
   1582 
   1583   GV->setInitializer(Init);
   1584 
   1585   // If it is safe to mark the global 'constant', do so now.
   1586   GV->setConstant(!NeedsGlobalCtor && !NeedsGlobalDtor &&
   1587                   isTypeConstant(D->getType(), true));
   1588 
   1589   GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
   1590 
   1591   // Set the llvm linkage type as appropriate.
   1592   llvm::GlobalValue::LinkageTypes Linkage =
   1593     GetLLVMLinkageVarDefinition(D, GV);
   1594   GV->setLinkage(Linkage);
   1595   if (Linkage == llvm::GlobalVariable::CommonLinkage)
   1596     // common vars aren't constant even if declared const.
   1597     GV->setConstant(false);
   1598 
   1599   SetCommonAttributes(D, GV);
   1600 
   1601   // Emit the initializer function if necessary.
   1602   if (NeedsGlobalCtor || NeedsGlobalDtor)
   1603     EmitCXXGlobalVarDeclInitFunc(D, GV, NeedsGlobalCtor);
   1604 
   1605   // Emit global variable debug information.
   1606   if (CGDebugInfo *DI = getModuleDebugInfo())
   1607     DI->EmitGlobalVariable(GV, D);
   1608 }
   1609 
   1610 llvm::GlobalValue::LinkageTypes
   1611 CodeGenModule::GetLLVMLinkageVarDefinition(const VarDecl *D,
   1612                                            llvm::GlobalVariable *GV) {
   1613   GVALinkage Linkage = getContext().GetGVALinkageForVariable(D);
   1614   if (Linkage == GVA_Internal)
   1615     return llvm::Function::InternalLinkage;
   1616   else if (D->hasAttr<DLLImportAttr>())
   1617     return llvm::Function::DLLImportLinkage;
   1618   else if (D->hasAttr<DLLExportAttr>())
   1619     return llvm::Function::DLLExportLinkage;
   1620   else if (D->hasAttr<WeakAttr>()) {
   1621     if (GV->isConstant())
   1622       return llvm::GlobalVariable::WeakODRLinkage;
   1623     else
   1624       return llvm::GlobalVariable::WeakAnyLinkage;
   1625   } else if (Linkage == GVA_TemplateInstantiation ||
   1626              Linkage == GVA_ExplicitTemplateInstantiation)
   1627     return llvm::GlobalVariable::WeakODRLinkage;
   1628   else if (!getLangOpts().CPlusPlus &&
   1629            ((!CodeGenOpts.NoCommon && !D->getAttr<NoCommonAttr>()) ||
   1630              D->getAttr<CommonAttr>()) &&
   1631            !D->hasExternalStorage() && !D->getInit() &&
   1632            !D->getAttr<SectionAttr>() && !D->isThreadSpecified() &&
   1633            !D->getAttr<WeakImportAttr>()) {
   1634     // Thread local vars aren't considered common linkage.
   1635     return llvm::GlobalVariable::CommonLinkage;
   1636   }
   1637   return llvm::GlobalVariable::ExternalLinkage;
   1638 }
   1639 
   1640 /// ReplaceUsesOfNonProtoTypeWithRealFunction - This function is called when we
   1641 /// implement a function with no prototype, e.g. "int foo() {}".  If there are
   1642 /// existing call uses of the old function in the module, this adjusts them to
   1643 /// call the new function directly.
   1644 ///
   1645 /// This is not just a cleanup: the always_inline pass requires direct calls to
   1646 /// functions to be able to inline them.  If there is a bitcast in the way, it
   1647 /// won't inline them.  Instcombine normally deletes these calls, but it isn't
   1648 /// run at -O0.
   1649 static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
   1650                                                       llvm::Function *NewFn) {
   1651   // If we're redefining a global as a function, don't transform it.
   1652   llvm::Function *OldFn = dyn_cast<llvm::Function>(Old);
   1653   if (OldFn == 0) return;
   1654 
   1655   llvm::Type *NewRetTy = NewFn->getReturnType();
   1656   SmallVector<llvm::Value*, 4> ArgList;
   1657 
   1658   for (llvm::Value::use_iterator UI = OldFn->use_begin(), E = OldFn->use_end();
   1659        UI != E; ) {
   1660     // TODO: Do invokes ever occur in C code?  If so, we should handle them too.
   1661     llvm::Value::use_iterator I = UI++; // Increment before the CI is erased.
   1662     llvm::CallInst *CI = dyn_cast<llvm::CallInst>(*I);
   1663     if (!CI) continue; // FIXME: when we allow Invoke, just do CallSite CS(*I)
   1664     llvm::CallSite CS(CI);
   1665     if (!CI || !CS.isCallee(I)) continue;
   1666 
   1667     // If the return types don't match exactly, and if the call isn't dead, then
   1668     // we can't transform this call.
   1669     if (CI->getType() != NewRetTy && !CI->use_empty())
   1670       continue;
   1671 
   1672     // Get the attribute list.
   1673     llvm::SmallVector<llvm::AttributeWithIndex, 8> AttrVec;
   1674     llvm::AttrListPtr AttrList = CI->getAttributes();
   1675 
   1676     // Get any return attributes.
   1677     llvm::Attributes RAttrs = AttrList.getRetAttributes();
   1678 
   1679     // Add the return attributes.
   1680     if (RAttrs)
   1681       AttrVec.push_back(llvm::AttributeWithIndex::get(0, RAttrs));
   1682 
   1683     // If the function was passed too few arguments, don't transform.  If extra
   1684     // arguments were passed, we silently drop them.  If any of the types
   1685     // mismatch, we don't transform.
   1686     unsigned ArgNo = 0;
   1687     bool DontTransform = false;
   1688     for (llvm::Function::arg_iterator AI = NewFn->arg_begin(),
   1689          E = NewFn->arg_end(); AI != E; ++AI, ++ArgNo) {
   1690       if (CS.arg_size() == ArgNo ||
   1691           CS.getArgument(ArgNo)->getType() != AI->getType()) {
   1692         DontTransform = true;
   1693         break;
   1694       }
   1695 
   1696       // Add any parameter attributes.
   1697       if (llvm::Attributes PAttrs = AttrList.getParamAttributes(ArgNo + 1))
   1698         AttrVec.push_back(llvm::AttributeWithIndex::get(ArgNo + 1, PAttrs));
   1699     }
   1700     if (DontTransform)
   1701       continue;
   1702 
   1703     if (llvm::Attributes FnAttrs =  AttrList.getFnAttributes())
   1704       AttrVec.push_back(llvm::AttributeWithIndex::get(~0, FnAttrs));
   1705 
   1706     // Okay, we can transform this.  Create the new call instruction and copy
   1707     // over the required information.
   1708     ArgList.append(CS.arg_begin(), CS.arg_begin() + ArgNo);
   1709     llvm::CallInst *NewCall = llvm::CallInst::Create(NewFn, ArgList, "", CI);
   1710     ArgList.clear();
   1711     if (!NewCall->getType()->isVoidTy())
   1712       NewCall->takeName(CI);
   1713     NewCall->setAttributes(llvm::AttrListPtr::get(AttrVec.begin(),
   1714                                                   AttrVec.end()));
   1715     NewCall->setCallingConv(CI->getCallingConv());
   1716 
   1717     // Finally, remove the old call, replacing any uses with the new one.
   1718     if (!CI->use_empty())
   1719       CI->replaceAllUsesWith(NewCall);
   1720 
   1721     // Copy debug location attached to CI.
   1722     if (!CI->getDebugLoc().isUnknown())
   1723       NewCall->setDebugLoc(CI->getDebugLoc());
   1724     CI->eraseFromParent();
   1725   }
   1726 }
   1727 
   1728 void CodeGenModule::HandleCXXStaticMemberVarInstantiation(VarDecl *VD) {
   1729   TemplateSpecializationKind TSK = VD->getTemplateSpecializationKind();
   1730   // If we have a definition, this might be a deferred decl. If the
   1731   // instantiation is explicit, make sure we emit it at the end.
   1732   if (VD->getDefinition() && TSK == TSK_ExplicitInstantiationDefinition)
   1733     GetAddrOfGlobalVar(VD);
   1734 }
   1735 
   1736 void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
   1737   const FunctionDecl *D = cast<FunctionDecl>(GD.getDecl());
   1738 
   1739   // Compute the function info and LLVM type.
   1740   const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD);
   1741   llvm::FunctionType *Ty = getTypes().GetFunctionType(FI);
   1742 
   1743   // Get or create the prototype for the function.
   1744   llvm::Constant *Entry = GetAddrOfFunction(GD, Ty);
   1745 
   1746   // Strip off a bitcast if we got one back.
   1747   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
   1748     assert(CE->getOpcode() == llvm::Instruction::BitCast);
   1749     Entry = CE->getOperand(0);
   1750   }
   1751 
   1752 
   1753   if (cast<llvm::GlobalValue>(Entry)->getType()->getElementType() != Ty) {
   1754     llvm::GlobalValue *OldFn = cast<llvm::GlobalValue>(Entry);
   1755 
   1756     // If the types mismatch then we have to rewrite the definition.
   1757     assert(OldFn->isDeclaration() &&
   1758            "Shouldn't replace non-declaration");
   1759 
   1760     // F is the Function* for the one with the wrong type, we must make a new
   1761     // Function* and update everything that used F (a declaration) with the new
   1762     // Function* (which will be a definition).
   1763     //
   1764     // This happens if there is a prototype for a function
   1765     // (e.g. "int f()") and then a definition of a different type
   1766     // (e.g. "int f(int x)").  Move the old function aside so that it
   1767     // doesn't interfere with GetAddrOfFunction.
   1768     OldFn->setName(StringRef());
   1769     llvm::Function *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
   1770 
   1771     // If this is an implementation of a function without a prototype, try to
   1772     // replace any existing uses of the function (which may be calls) with uses
   1773     // of the new function
   1774     if (D->getType()->isFunctionNoProtoType()) {
   1775       ReplaceUsesOfNonProtoTypeWithRealFunction(OldFn, NewFn);
   1776       OldFn->removeDeadConstantUsers();
   1777     }
   1778 
   1779     // Replace uses of F with the Function we will endow with a body.
   1780     if (!Entry->use_empty()) {
   1781       llvm::Constant *NewPtrForOldDecl =
   1782         llvm::ConstantExpr::getBitCast(NewFn, Entry->getType());
   1783       Entry->replaceAllUsesWith(NewPtrForOldDecl);
   1784     }
   1785 
   1786     // Ok, delete the old function now, which is dead.
   1787     OldFn->eraseFromParent();
   1788 
   1789     Entry = NewFn;
   1790   }
   1791 
   1792   // We need to set linkage and visibility on the function before
   1793   // generating code for it because various parts of IR generation
   1794   // want to propagate this information down (e.g. to local static
   1795   // declarations).
   1796   llvm::Function *Fn = cast<llvm::Function>(Entry);
   1797   setFunctionLinkage(D, Fn);
   1798 
   1799   // FIXME: this is redundant with part of SetFunctionDefinitionAttributes
   1800   setGlobalVisibility(Fn, D);
   1801 
   1802   CodeGenFunction(*this).GenerateCode(D, Fn, FI);
   1803 
   1804   SetFunctionDefinitionAttributes(D, Fn);
   1805   SetLLVMFunctionAttributesForDefinition(D, Fn);
   1806 
   1807   if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>())
   1808     AddGlobalCtor(Fn, CA->getPriority());
   1809   if (const DestructorAttr *DA = D->getAttr<DestructorAttr>())
   1810     AddGlobalDtor(Fn, DA->getPriority());
   1811   if (D->hasAttr<AnnotateAttr>())
   1812     AddGlobalAnnotations(D, Fn);
   1813 }
   1814 
   1815 void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
   1816   const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
   1817   const AliasAttr *AA = D->getAttr<AliasAttr>();
   1818   assert(AA && "Not an alias?");
   1819 
   1820   StringRef MangledName = getMangledName(GD);
   1821 
   1822   // If there is a definition in the module, then it wins over the alias.
   1823   // This is dubious, but allow it to be safe.  Just ignore the alias.
   1824   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
   1825   if (Entry && !Entry->isDeclaration())
   1826     return;
   1827 
   1828   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
   1829 
   1830   // Create a reference to the named value.  This ensures that it is emitted
   1831   // if a deferred decl.
   1832   llvm::Constant *Aliasee;
   1833   if (isa<llvm::FunctionType>(DeclTy))
   1834     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GlobalDecl(),
   1835                                       /*ForVTable=*/false);
   1836   else
   1837     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
   1838                                     llvm::PointerType::getUnqual(DeclTy), 0);
   1839 
   1840   // Create the new alias itself, but don't set a name yet.
   1841   llvm::GlobalValue *GA =
   1842     new llvm::GlobalAlias(Aliasee->getType(),
   1843                           llvm::Function::ExternalLinkage,
   1844                           "", Aliasee, &getModule());
   1845 
   1846   if (Entry) {
   1847     assert(Entry->isDeclaration());
   1848 
   1849     // If there is a declaration in the module, then we had an extern followed
   1850     // by the alias, as in:
   1851     //   extern int test6();
   1852     //   ...
   1853     //   int test6() __attribute__((alias("test7")));
   1854     //
   1855     // Remove it and replace uses of it with the alias.
   1856     GA->takeName(Entry);
   1857 
   1858     Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
   1859                                                           Entry->getType()));
   1860     Entry->eraseFromParent();
   1861   } else {
   1862     GA->setName(MangledName);
   1863   }
   1864 
   1865   // Set attributes which are particular to an alias; this is a
   1866   // specialization of the attributes which may be set on a global
   1867   // variable/function.
   1868   if (D->hasAttr<DLLExportAttr>()) {
   1869     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
   1870       // The dllexport attribute is ignored for undefined symbols.
   1871       if (FD->hasBody())
   1872         GA->setLinkage(llvm::Function::DLLExportLinkage);
   1873     } else {
   1874       GA->setLinkage(llvm::Function::DLLExportLinkage);
   1875     }
   1876   } else if (D->hasAttr<WeakAttr>() ||
   1877              D->hasAttr<WeakRefAttr>() ||
   1878              D->isWeakImported()) {
   1879     GA->setLinkage(llvm::Function::WeakAnyLinkage);
   1880   }
   1881 
   1882   SetCommonAttributes(D, GA);
   1883 }
   1884 
   1885 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,
   1886                                             ArrayRef<llvm::Type*> Tys) {
   1887   return llvm::Intrinsic::getDeclaration(&getModule(), (llvm::Intrinsic::ID)IID,
   1888                                          Tys);
   1889 }
   1890 
   1891 static llvm::StringMapEntry<llvm::Constant*> &
   1892 GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*> &Map,
   1893                          const StringLiteral *Literal,
   1894                          bool TargetIsLSB,
   1895                          bool &IsUTF16,
   1896                          unsigned &StringLength) {
   1897   StringRef String = Literal->getString();
   1898   unsigned NumBytes = String.size();
   1899 
   1900   // Check for simple case.
   1901   if (!Literal->containsNonAsciiOrNull()) {
   1902     StringLength = NumBytes;
   1903     return Map.GetOrCreateValue(String);
   1904   }
   1905 
   1906   // Otherwise, convert the UTF8 literals into a string of shorts.
   1907   IsUTF16 = true;
   1908 
   1909   SmallVector<UTF16, 128> ToBuf(NumBytes + 1); // +1 for ending nulls.
   1910   const UTF8 *FromPtr = (UTF8 *)String.data();
   1911   UTF16 *ToPtr = &ToBuf[0];
   1912 
   1913   (void)ConvertUTF8toUTF16(&FromPtr, FromPtr + NumBytes,
   1914                            &ToPtr, ToPtr + NumBytes,
   1915                            strictConversion);
   1916 
   1917   // ConvertUTF8toUTF16 returns the length in ToPtr.
   1918   StringLength = ToPtr - &ToBuf[0];
   1919 
   1920   // Add an explicit null.
   1921   *ToPtr = 0;
   1922   return Map.
   1923     GetOrCreateValue(StringRef(reinterpret_cast<const char *>(ToBuf.data()),
   1924                                (StringLength + 1) * 2));
   1925 }
   1926 
   1927 static llvm::StringMapEntry<llvm::Constant*> &
   1928 GetConstantStringEntry(llvm::StringMap<llvm::Constant*> &Map,
   1929                        const StringLiteral *Literal,
   1930                        unsigned &StringLength) {
   1931   StringRef String = Literal->getString();
   1932   StringLength = String.size();
   1933   return Map.GetOrCreateValue(String);
   1934 }
   1935 
   1936 llvm::Constant *
   1937 CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
   1938   unsigned StringLength = 0;
   1939   bool isUTF16 = false;
   1940   llvm::StringMapEntry<llvm::Constant*> &Entry =
   1941     GetConstantCFStringEntry(CFConstantStringMap, Literal,
   1942                              getTargetData().isLittleEndian(),
   1943                              isUTF16, StringLength);
   1944 
   1945   if (llvm::Constant *C = Entry.getValue())
   1946     return C;
   1947 
   1948   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
   1949   llvm::Constant *Zeros[] = { Zero, Zero };
   1950 
   1951   // If we don't already have it, get __CFConstantStringClassReference.
   1952   if (!CFConstantStringClassRef) {
   1953     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
   1954     Ty = llvm::ArrayType::get(Ty, 0);
   1955     llvm::Constant *GV = CreateRuntimeVariable(Ty,
   1956                                            "__CFConstantStringClassReference");
   1957     // Decay array -> ptr
   1958     CFConstantStringClassRef =
   1959       llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
   1960   }
   1961 
   1962   QualType CFTy = getContext().getCFConstantStringType();
   1963 
   1964   llvm::StructType *STy =
   1965     cast<llvm::StructType>(getTypes().ConvertType(CFTy));
   1966 
   1967   llvm::Constant *Fields[4];
   1968 
   1969   // Class pointer.
   1970   Fields[0] = CFConstantStringClassRef;
   1971 
   1972   // Flags.
   1973   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
   1974   Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
   1975     llvm::ConstantInt::get(Ty, 0x07C8);
   1976 
   1977   // String pointer.
   1978   llvm::Constant *C = 0;
   1979   if (isUTF16) {
   1980     ArrayRef<uint16_t> Arr =
   1981       llvm::makeArrayRef<uint16_t>((uint16_t*)Entry.getKey().data(),
   1982                                    Entry.getKey().size() / 2);
   1983     C = llvm::ConstantDataArray::get(VMContext, Arr);
   1984   } else {
   1985     C = llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
   1986   }
   1987 
   1988   llvm::GlobalValue::LinkageTypes Linkage;
   1989   if (isUTF16)
   1990     // FIXME: why do utf strings get "_" labels instead of "L" labels?
   1991     Linkage = llvm::GlobalValue::InternalLinkage;
   1992   else
   1993     // FIXME: With OS X ld 123.2 (xcode 4) and LTO we would get a linker error
   1994     // when using private linkage. It is not clear if this is a bug in ld
   1995     // or a reasonable new restriction.
   1996     Linkage = llvm::GlobalValue::LinkerPrivateLinkage;
   1997 
   1998   // Note: -fwritable-strings doesn't make the backing store strings of
   1999   // CFStrings writable. (See <rdar://problem/10657500>)
   2000   llvm::GlobalVariable *GV =
   2001     new llvm::GlobalVariable(getModule(), C->getType(), /*isConstant=*/true,
   2002                              Linkage, C, ".str");
   2003   GV->setUnnamedAddr(true);
   2004   if (isUTF16) {
   2005     CharUnits Align = getContext().getTypeAlignInChars(getContext().ShortTy);
   2006     GV->setAlignment(Align.getQuantity());
   2007   } else {
   2008     CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
   2009     GV->setAlignment(Align.getQuantity());
   2010   }
   2011 
   2012   // String.
   2013   Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
   2014 
   2015   if (isUTF16)
   2016     // Cast the UTF16 string to the correct type.
   2017     Fields[2] = llvm::ConstantExpr::getBitCast(Fields[2], Int8PtrTy);
   2018 
   2019   // String length.
   2020   Ty = getTypes().ConvertType(getContext().LongTy);
   2021   Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
   2022 
   2023   // The struct.
   2024   C = llvm::ConstantStruct::get(STy, Fields);
   2025   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
   2026                                 llvm::GlobalVariable::PrivateLinkage, C,
   2027                                 "_unnamed_cfstring_");
   2028   if (const char *Sect = getContext().getTargetInfo().getCFStringSection())
   2029     GV->setSection(Sect);
   2030   Entry.setValue(GV);
   2031 
   2032   return GV;
   2033 }
   2034 
   2035 static RecordDecl *
   2036 CreateRecordDecl(const ASTContext &Ctx, RecordDecl::TagKind TK,
   2037                  DeclContext *DC, IdentifierInfo *Id) {
   2038   SourceLocation Loc;
   2039   if (Ctx.getLangOpts().CPlusPlus)
   2040     return CXXRecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
   2041   else
   2042     return RecordDecl::Create(Ctx, TK, DC, Loc, Loc, Id);
   2043 }
   2044 
   2045 llvm::Constant *
   2046 CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
   2047   unsigned StringLength = 0;
   2048   llvm::StringMapEntry<llvm::Constant*> &Entry =
   2049     GetConstantStringEntry(CFConstantStringMap, Literal, StringLength);
   2050 
   2051   if (llvm::Constant *C = Entry.getValue())
   2052     return C;
   2053 
   2054   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
   2055   llvm::Constant *Zeros[] = { Zero, Zero };
   2056 
   2057   // If we don't already have it, get _NSConstantStringClassReference.
   2058   if (!ConstantStringClassRef) {
   2059     std::string StringClass(getLangOpts().ObjCConstantStringClass);
   2060     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
   2061     llvm::Constant *GV;
   2062     if (LangOpts.ObjCNonFragileABI) {
   2063       std::string str =
   2064         StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
   2065                             : "OBJC_CLASS_$_" + StringClass;
   2066       GV = getObjCRuntime().GetClassGlobal(str);
   2067       // Make sure the result is of the correct type.
   2068       llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
   2069       ConstantStringClassRef =
   2070         llvm::ConstantExpr::getBitCast(GV, PTy);
   2071     } else {
   2072       std::string str =
   2073         StringClass.empty() ? "_NSConstantStringClassReference"
   2074                             : "_" + StringClass + "ClassReference";
   2075       llvm::Type *PTy = llvm::ArrayType::get(Ty, 0);
   2076       GV = CreateRuntimeVariable(PTy, str);
   2077       // Decay array -> ptr
   2078       ConstantStringClassRef =
   2079         llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
   2080     }
   2081   }
   2082 
   2083   if (!NSConstantStringType) {
   2084     // Construct the type for a constant NSString.
   2085     RecordDecl *D = CreateRecordDecl(Context, TTK_Struct,
   2086                                      Context.getTranslationUnitDecl(),
   2087                                    &Context.Idents.get("__builtin_NSString"));
   2088     D->startDefinition();
   2089 
   2090     QualType FieldTypes[3];
   2091 
   2092     // const int *isa;
   2093     FieldTypes[0] = Context.getPointerType(Context.IntTy.withConst());
   2094     // const char *str;
   2095     FieldTypes[1] = Context.getPointerType(Context.CharTy.withConst());
   2096     // unsigned int length;
   2097     FieldTypes[2] = Context.UnsignedIntTy;
   2098 
   2099     // Create fields
   2100     for (unsigned i = 0; i < 3; ++i) {
   2101       FieldDecl *Field = FieldDecl::Create(Context, D,
   2102                                            SourceLocation(),
   2103                                            SourceLocation(), 0,
   2104                                            FieldTypes[i], /*TInfo=*/0,
   2105                                            /*BitWidth=*/0,
   2106                                            /*Mutable=*/false,
   2107                                            /*HasInit=*/false);
   2108       Field->setAccess(AS_public);
   2109       D->addDecl(Field);
   2110     }
   2111 
   2112     D->completeDefinition();
   2113     QualType NSTy = Context.getTagDeclType(D);
   2114     NSConstantStringType = cast<llvm::StructType>(getTypes().ConvertType(NSTy));
   2115   }
   2116 
   2117   llvm::Constant *Fields[3];
   2118 
   2119   // Class pointer.
   2120   Fields[0] = ConstantStringClassRef;
   2121 
   2122   // String pointer.
   2123   llvm::Constant *C =
   2124     llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
   2125 
   2126   llvm::GlobalValue::LinkageTypes Linkage;
   2127   bool isConstant;
   2128   Linkage = llvm::GlobalValue::PrivateLinkage;
   2129   isConstant = !LangOpts.WritableStrings;
   2130 
   2131   llvm::GlobalVariable *GV =
   2132   new llvm::GlobalVariable(getModule(), C->getType(), isConstant, Linkage, C,
   2133                            ".str");
   2134   GV->setUnnamedAddr(true);
   2135   CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
   2136   GV->setAlignment(Align.getQuantity());
   2137   Fields[1] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
   2138 
   2139   // String length.
   2140   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
   2141   Fields[2] = llvm::ConstantInt::get(Ty, StringLength);
   2142 
   2143   // The struct.
   2144   C = llvm::ConstantStruct::get(NSConstantStringType, Fields);
   2145   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
   2146                                 llvm::GlobalVariable::PrivateLinkage, C,
   2147                                 "_unnamed_nsstring_");
   2148   // FIXME. Fix section.
   2149   if (const char *Sect =
   2150         LangOpts.ObjCNonFragileABI
   2151           ? getContext().getTargetInfo().getNSStringNonFragileABISection()
   2152           : getContext().getTargetInfo().getNSStringSection())
   2153     GV->setSection(Sect);
   2154   Entry.setValue(GV);
   2155 
   2156   return GV;
   2157 }
   2158 
   2159 QualType CodeGenModule::getObjCFastEnumerationStateType() {
   2160   if (ObjCFastEnumerationStateType.isNull()) {
   2161     RecordDecl *D = CreateRecordDecl(Context, TTK_Struct,
   2162                                      Context.getTranslationUnitDecl(),
   2163                       &Context.Idents.get("__objcFastEnumerationState"));
   2164     D->startDefinition();
   2165 
   2166     QualType FieldTypes[] = {
   2167       Context.UnsignedLongTy,
   2168       Context.getPointerType(Context.getObjCIdType()),
   2169       Context.getPointerType(Context.UnsignedLongTy),
   2170       Context.getConstantArrayType(Context.UnsignedLongTy,
   2171                            llvm::APInt(32, 5), ArrayType::Normal, 0)
   2172     };
   2173 
   2174     for (size_t i = 0; i < 4; ++i) {
   2175       FieldDecl *Field = FieldDecl::Create(Context,
   2176                                            D,
   2177                                            SourceLocation(),
   2178                                            SourceLocation(), 0,
   2179                                            FieldTypes[i], /*TInfo=*/0,
   2180                                            /*BitWidth=*/0,
   2181                                            /*Mutable=*/false,
   2182                                            /*HasInit=*/false);
   2183       Field->setAccess(AS_public);
   2184       D->addDecl(Field);
   2185     }
   2186 
   2187     D->completeDefinition();
   2188     ObjCFastEnumerationStateType = Context.getTagDeclType(D);
   2189   }
   2190 
   2191   return ObjCFastEnumerationStateType;
   2192 }
   2193 
   2194 llvm::Constant *
   2195 CodeGenModule::GetConstantArrayFromStringLiteral(const StringLiteral *E) {
   2196   assert(!E->getType()->isPointerType() && "Strings are always arrays");
   2197 
   2198   // Don't emit it as the address of the string, emit the string data itself
   2199   // as an inline array.
   2200   if (E->getCharByteWidth() == 1) {
   2201     SmallString<64> Str(E->getString());
   2202 
   2203     // Resize the string to the right size, which is indicated by its type.
   2204     const ConstantArrayType *CAT = Context.getAsConstantArrayType(E->getType());
   2205     Str.resize(CAT->getSize().getZExtValue());
   2206     return llvm::ConstantDataArray::getString(VMContext, Str, false);
   2207   }
   2208 
   2209   llvm::ArrayType *AType =
   2210     cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
   2211   llvm::Type *ElemTy = AType->getElementType();
   2212   unsigned NumElements = AType->getNumElements();
   2213 
   2214   // Wide strings have either 2-byte or 4-byte elements.
   2215   if (ElemTy->getPrimitiveSizeInBits() == 16) {
   2216     SmallVector<uint16_t, 32> Elements;
   2217     Elements.reserve(NumElements);
   2218 
   2219     for(unsigned i = 0, e = E->getLength(); i != e; ++i)
   2220       Elements.push_back(E->getCodeUnit(i));
   2221     Elements.resize(NumElements);
   2222     return llvm::ConstantDataArray::get(VMContext, Elements);
   2223   }
   2224 
   2225   assert(ElemTy->getPrimitiveSizeInBits() == 32);
   2226   SmallVector<uint32_t, 32> Elements;
   2227   Elements.reserve(NumElements);
   2228 
   2229   for(unsigned i = 0, e = E->getLength(); i != e; ++i)
   2230     Elements.push_back(E->getCodeUnit(i));
   2231   Elements.resize(NumElements);
   2232   return llvm::ConstantDataArray::get(VMContext, Elements);
   2233 }
   2234 
   2235 /// GetAddrOfConstantStringFromLiteral - Return a pointer to a
   2236 /// constant array for the given string literal.
   2237 llvm::Constant *
   2238 CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
   2239   CharUnits Align = getContext().getTypeAlignInChars(S->getType());
   2240   if (S->isAscii() || S->isUTF8()) {
   2241     SmallString<64> Str(S->getString());
   2242 
   2243     // Resize the string to the right size, which is indicated by its type.
   2244     const ConstantArrayType *CAT = Context.getAsConstantArrayType(S->getType());
   2245     Str.resize(CAT->getSize().getZExtValue());
   2246     return GetAddrOfConstantString(Str, /*GlobalName*/ 0, Align.getQuantity());
   2247   }
   2248 
   2249   // FIXME: the following does not memoize wide strings.
   2250   llvm::Constant *C = GetConstantArrayFromStringLiteral(S);
   2251   llvm::GlobalVariable *GV =
   2252     new llvm::GlobalVariable(getModule(),C->getType(),
   2253                              !LangOpts.WritableStrings,
   2254                              llvm::GlobalValue::PrivateLinkage,
   2255                              C,".str");
   2256 
   2257   GV->setAlignment(Align.getQuantity());
   2258   GV->setUnnamedAddr(true);
   2259   return GV;
   2260 }
   2261 
   2262 /// GetAddrOfConstantStringFromObjCEncode - Return a pointer to a constant
   2263 /// array for the given ObjCEncodeExpr node.
   2264 llvm::Constant *
   2265 CodeGenModule::GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *E) {
   2266   std::string Str;
   2267   getContext().getObjCEncodingForType(E->getEncodedType(), Str);
   2268 
   2269   return GetAddrOfConstantCString(Str);
   2270 }
   2271 
   2272 
   2273 /// GenerateWritableString -- Creates storage for a string literal.
   2274 static llvm::GlobalVariable *GenerateStringLiteral(StringRef str,
   2275                                              bool constant,
   2276                                              CodeGenModule &CGM,
   2277                                              const char *GlobalName,
   2278                                              unsigned Alignment) {
   2279   // Create Constant for this string literal. Don't add a '\0'.
   2280   llvm::Constant *C =
   2281       llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false);
   2282 
   2283   // Create a global variable for this string
   2284   llvm::GlobalVariable *GV =
   2285     new llvm::GlobalVariable(CGM.getModule(), C->getType(), constant,
   2286                              llvm::GlobalValue::PrivateLinkage,
   2287                              C, GlobalName);
   2288   GV->setAlignment(Alignment);
   2289   GV->setUnnamedAddr(true);
   2290   return GV;
   2291 }
   2292 
   2293 /// GetAddrOfConstantString - Returns a pointer to a character array
   2294 /// containing the literal. This contents are exactly that of the
   2295 /// given string, i.e. it will not be null terminated automatically;
   2296 /// see GetAddrOfConstantCString. Note that whether the result is
   2297 /// actually a pointer to an LLVM constant depends on
   2298 /// Feature.WriteableStrings.
   2299 ///
   2300 /// The result has pointer to array type.
   2301 llvm::Constant *CodeGenModule::GetAddrOfConstantString(StringRef Str,
   2302                                                        const char *GlobalName,
   2303                                                        unsigned Alignment) {
   2304   // Get the default prefix if a name wasn't specified.
   2305   if (!GlobalName)
   2306     GlobalName = ".str";
   2307 
   2308   // Don't share any string literals if strings aren't constant.
   2309   if (LangOpts.WritableStrings)
   2310     return GenerateStringLiteral(Str, false, *this, GlobalName, Alignment);
   2311 
   2312   llvm::StringMapEntry<llvm::GlobalVariable *> &Entry =
   2313     ConstantStringMap.GetOrCreateValue(Str);
   2314 
   2315   if (llvm::GlobalVariable *GV = Entry.getValue()) {
   2316     if (Alignment > GV->getAlignment()) {
   2317       GV->setAlignment(Alignment);
   2318     }
   2319     return GV;
   2320   }
   2321 
   2322   // Create a global variable for this.
   2323   llvm::GlobalVariable *GV = GenerateStringLiteral(Str, true, *this, GlobalName,
   2324                                                    Alignment);
   2325   Entry.setValue(GV);
   2326   return GV;
   2327 }
   2328 
   2329 /// GetAddrOfConstantCString - Returns a pointer to a character
   2330 /// array containing the literal and a terminating '\0'
   2331 /// character. The result has pointer to array type.
   2332 llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &Str,
   2333                                                         const char *GlobalName,
   2334                                                         unsigned Alignment) {
   2335   StringRef StrWithNull(Str.c_str(), Str.size() + 1);
   2336   return GetAddrOfConstantString(StrWithNull, GlobalName, Alignment);
   2337 }
   2338 
   2339 /// EmitObjCPropertyImplementations - Emit information for synthesized
   2340 /// properties for an implementation.
   2341 void CodeGenModule::EmitObjCPropertyImplementations(const
   2342                                                     ObjCImplementationDecl *D) {
   2343   for (ObjCImplementationDecl::propimpl_iterator
   2344          i = D->propimpl_begin(), e = D->propimpl_end(); i != e; ++i) {
   2345     ObjCPropertyImplDecl *PID = *i;
   2346 
   2347     // Dynamic is just for type-checking.
   2348     if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
   2349       ObjCPropertyDecl *PD = PID->getPropertyDecl();
   2350 
   2351       // Determine which methods need to be implemented, some may have
   2352       // been overridden. Note that ::isSynthesized is not the method
   2353       // we want, that just indicates if the decl came from a
   2354       // property. What we want to know is if the method is defined in
   2355       // this implementation.
   2356       if (!D->getInstanceMethod(PD->getGetterName()))
   2357         CodeGenFunction(*this).GenerateObjCGetter(
   2358                                  const_cast<ObjCImplementationDecl *>(D), PID);
   2359       if (!PD->isReadOnly() &&
   2360           !D->getInstanceMethod(PD->getSetterName()))
   2361         CodeGenFunction(*this).GenerateObjCSetter(
   2362                                  const_cast<ObjCImplementationDecl *>(D), PID);
   2363     }
   2364   }
   2365 }
   2366 
   2367 static bool needsDestructMethod(ObjCImplementationDecl *impl) {
   2368   const ObjCInterfaceDecl *iface = impl->getClassInterface();
   2369   for (const ObjCIvarDecl *ivar = iface->all_declared_ivar_begin();
   2370        ivar; ivar = ivar->getNextIvar())
   2371     if (ivar->getType().isDestructedType())
   2372       return true;
   2373 
   2374   return false;
   2375 }
   2376 
   2377 /// EmitObjCIvarInitializations - Emit information for ivar initialization
   2378 /// for an implementation.
   2379 void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
   2380   // We might need a .cxx_destruct even if we don't have any ivar initializers.
   2381   if (needsDestructMethod(D)) {
   2382     IdentifierInfo *II = &getContext().Idents.get(".cxx_destruct");
   2383     Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
   2384     ObjCMethodDecl *DTORMethod =
   2385       ObjCMethodDecl::Create(getContext(), D->getLocation(), D->getLocation(),
   2386                              cxxSelector, getContext().VoidTy, 0, D,
   2387                              /*isInstance=*/true, /*isVariadic=*/false,
   2388                           /*isSynthesized=*/true, /*isImplicitlyDeclared=*/true,
   2389                              /*isDefined=*/false, ObjCMethodDecl::Required);
   2390     D->addInstanceMethod(DTORMethod);
   2391     CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
   2392     D->setHasCXXStructors(true);
   2393   }
   2394 
   2395   // If the implementation doesn't have any ivar initializers, we don't need
   2396   // a .cxx_construct.
   2397   if (D->getNumIvarInitializers() == 0)
   2398     return;
   2399 
   2400   IdentifierInfo *II = &getContext().Idents.get(".cxx_construct");
   2401   Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
   2402   // The constructor returns 'self'.
   2403   ObjCMethodDecl *CTORMethod = ObjCMethodDecl::Create(getContext(),
   2404                                                 D->getLocation(),
   2405                                                 D->getLocation(),
   2406                                                 cxxSelector,
   2407                                                 getContext().getObjCIdType(), 0,
   2408                                                 D, /*isInstance=*/true,
   2409                                                 /*isVariadic=*/false,
   2410                                                 /*isSynthesized=*/true,
   2411                                                 /*isImplicitlyDeclared=*/true,
   2412                                                 /*isDefined=*/false,
   2413                                                 ObjCMethodDecl::Required);
   2414   D->addInstanceMethod(CTORMethod);
   2415   CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, CTORMethod, true);
   2416   D->setHasCXXStructors(true);
   2417 }
   2418 
   2419 /// EmitNamespace - Emit all declarations in a namespace.
   2420 void CodeGenModule::EmitNamespace(const NamespaceDecl *ND) {
   2421   for (RecordDecl::decl_iterator I = ND->decls_begin(), E = ND->decls_end();
   2422        I != E; ++I)
   2423     EmitTopLevelDecl(*I);
   2424 }
   2425 
   2426 // EmitLinkageSpec - Emit all declarations in a linkage spec.
   2427 void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
   2428   if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
   2429       LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
   2430     ErrorUnsupported(LSD, "linkage spec");
   2431     return;
   2432   }
   2433 
   2434   for (RecordDecl::decl_iterator I = LSD->decls_begin(), E = LSD->decls_end();
   2435        I != E; ++I)
   2436     EmitTopLevelDecl(*I);
   2437 }
   2438 
   2439 /// EmitTopLevelDecl - Emit code for a single top level declaration.
   2440 void CodeGenModule::EmitTopLevelDecl(Decl *D) {
   2441   // If an error has occurred, stop code generation, but continue
   2442   // parsing and semantic analysis (to ensure all warnings and errors
   2443   // are emitted).
   2444   if (Diags.hasErrorOccurred())
   2445     return;
   2446 
   2447   // Ignore dependent declarations.
   2448   if (D->getDeclContext() && D->getDeclContext()->isDependentContext())
   2449     return;
   2450 
   2451   switch (D->getKind()) {
   2452   case Decl::CXXConversion:
   2453   case Decl::CXXMethod:
   2454   case Decl::Function:
   2455     // Skip function templates
   2456     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
   2457         cast<FunctionDecl>(D)->isLateTemplateParsed())
   2458       return;
   2459 
   2460     EmitGlobal(cast<FunctionDecl>(D));
   2461     break;
   2462 
   2463   case Decl::Var:
   2464     EmitGlobal(cast<VarDecl>(D));
   2465     break;
   2466 
   2467   // Indirect fields from global anonymous structs and unions can be
   2468   // ignored; only the actual variable requires IR gen support.
   2469   case Decl::IndirectField:
   2470     break;
   2471 
   2472   // C++ Decls
   2473   case Decl::Namespace:
   2474     EmitNamespace(cast<NamespaceDecl>(D));
   2475     break;
   2476     // No code generation needed.
   2477   case Decl::UsingShadow:
   2478   case Decl::Using:
   2479   case Decl::UsingDirective:
   2480   case Decl::ClassTemplate:
   2481   case Decl::FunctionTemplate:
   2482   case Decl::TypeAliasTemplate:
   2483   case Decl::NamespaceAlias:
   2484   case Decl::Block:
   2485   case Decl::Import:
   2486     break;
   2487   case Decl::CXXConstructor:
   2488     // Skip function templates
   2489     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
   2490         cast<FunctionDecl>(D)->isLateTemplateParsed())
   2491       return;
   2492 
   2493     EmitCXXConstructors(cast<CXXConstructorDecl>(D));
   2494     break;
   2495   case Decl::CXXDestructor:
   2496     if (cast<FunctionDecl>(D)->isLateTemplateParsed())
   2497       return;
   2498     EmitCXXDestructors(cast<CXXDestructorDecl>(D));
   2499     break;
   2500 
   2501   case Decl::StaticAssert:
   2502     // Nothing to do.
   2503     break;
   2504 
   2505   // Objective-C Decls
   2506 
   2507   // Forward declarations, no (immediate) code generation.
   2508   case Decl::ObjCInterface:
   2509     break;
   2510 
   2511   case Decl::ObjCCategory: {
   2512     ObjCCategoryDecl *CD = cast<ObjCCategoryDecl>(D);
   2513     if (CD->IsClassExtension() && CD->hasSynthBitfield())
   2514       Context.ResetObjCLayout(CD->getClassInterface());
   2515     break;
   2516   }
   2517 
   2518   case Decl::ObjCProtocol: {
   2519     ObjCProtocolDecl *Proto = cast<ObjCProtocolDecl>(D);
   2520     if (Proto->isThisDeclarationADefinition())
   2521       ObjCRuntime->GenerateProtocol(Proto);
   2522     break;
   2523   }
   2524 
   2525   case Decl::ObjCCategoryImpl:
   2526     // Categories have properties but don't support synthesize so we
   2527     // can ignore them here.
   2528     ObjCRuntime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
   2529     break;
   2530 
   2531   case Decl::ObjCImplementation: {
   2532     ObjCImplementationDecl *OMD = cast<ObjCImplementationDecl>(D);
   2533     if (LangOpts.ObjCNonFragileABI2 && OMD->hasSynthBitfield())
   2534       Context.ResetObjCLayout(OMD->getClassInterface());
   2535     EmitObjCPropertyImplementations(OMD);
   2536     EmitObjCIvarInitializations(OMD);
   2537     ObjCRuntime->GenerateClass(OMD);
   2538     // Emit global variable debug information.
   2539     if (CGDebugInfo *DI = getModuleDebugInfo())
   2540       DI->getOrCreateInterfaceType(getContext().getObjCInterfaceType(OMD->getClassInterface()),
   2541 				   OMD->getLocation());
   2542 
   2543     break;
   2544   }
   2545   case Decl::ObjCMethod: {
   2546     ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(D);
   2547     // If this is not a prototype, emit the body.
   2548     if (OMD->getBody())
   2549       CodeGenFunction(*this).GenerateObjCMethod(OMD);
   2550     break;
   2551   }
   2552   case Decl::ObjCCompatibleAlias:
   2553     ObjCRuntime->RegisterAlias(cast<ObjCCompatibleAliasDecl>(D));
   2554     break;
   2555 
   2556   case Decl::LinkageSpec:
   2557     EmitLinkageSpec(cast<LinkageSpecDecl>(D));
   2558     break;
   2559 
   2560   case Decl::FileScopeAsm: {
   2561     FileScopeAsmDecl *AD = cast<FileScopeAsmDecl>(D);
   2562     StringRef AsmString = AD->getAsmString()->getString();
   2563 
   2564     const std::string &S = getModule().getModuleInlineAsm();
   2565     if (S.empty())
   2566       getModule().setModuleInlineAsm(AsmString);
   2567     else if (*--S.end() == '\n')
   2568       getModule().setModuleInlineAsm(S + AsmString.str());
   2569     else
   2570       getModule().setModuleInlineAsm(S + '\n' + AsmString.str());
   2571     break;
   2572   }
   2573 
   2574   default:
   2575     // Make sure we handled everything we should, every other kind is a
   2576     // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
   2577     // function. Need to recode Decl::Kind to do that easily.
   2578     assert(isa<TypeDecl>(D) && "Unsupported decl kind");
   2579   }
   2580 }
   2581 
   2582 /// Turns the given pointer into a constant.
   2583 static llvm::Constant *GetPointerConstant(llvm::LLVMContext &Context,
   2584                                           const void *Ptr) {
   2585   uintptr_t PtrInt = reinterpret_cast<uintptr_t>(Ptr);
   2586   llvm::Type *i64 = llvm::Type::getInt64Ty(Context);
   2587   return llvm::ConstantInt::get(i64, PtrInt);
   2588 }
   2589 
   2590 static void EmitGlobalDeclMetadata(CodeGenModule &CGM,
   2591                                    llvm::NamedMDNode *&GlobalMetadata,
   2592                                    GlobalDecl D,
   2593                                    llvm::GlobalValue *Addr) {
   2594   if (!GlobalMetadata)
   2595     GlobalMetadata =
   2596       CGM.getModule().getOrInsertNamedMetadata("clang.global.decl.ptrs");
   2597 
   2598   // TODO: should we report variant information for ctors/dtors?
   2599   llvm::Value *Ops[] = {
   2600     Addr,
   2601     GetPointerConstant(CGM.getLLVMContext(), D.getDecl())
   2602   };
   2603   GlobalMetadata->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
   2604 }
   2605 
   2606 /// Emits metadata nodes associating all the global values in the
   2607 /// current module with the Decls they came from.  This is useful for
   2608 /// projects using IR gen as a subroutine.
   2609 ///
   2610 /// Since there's currently no way to associate an MDNode directly
   2611 /// with an llvm::GlobalValue, we create a global named metadata
   2612 /// with the name 'clang.global.decl.ptrs'.
   2613 void CodeGenModule::EmitDeclMetadata() {
   2614   llvm::NamedMDNode *GlobalMetadata = 0;
   2615 
   2616   // StaticLocalDeclMap
   2617   for (llvm::DenseMap<GlobalDecl,StringRef>::iterator
   2618          I = MangledDeclNames.begin(), E = MangledDeclNames.end();
   2619        I != E; ++I) {
   2620     llvm::GlobalValue *Addr = getModule().getNamedValue(I->second);
   2621     EmitGlobalDeclMetadata(*this, GlobalMetadata, I->first, Addr);
   2622   }
   2623 }
   2624 
   2625 /// Emits metadata nodes for all the local variables in the current
   2626 /// function.
   2627 void CodeGenFunction::EmitDeclMetadata() {
   2628   if (LocalDeclMap.empty()) return;
   2629 
   2630   llvm::LLVMContext &Context = getLLVMContext();
   2631 
   2632   // Find the unique metadata ID for this name.
   2633   unsigned DeclPtrKind = Context.getMDKindID("clang.decl.ptr");
   2634 
   2635   llvm::NamedMDNode *GlobalMetadata = 0;
   2636 
   2637   for (llvm::DenseMap<const Decl*, llvm::Value*>::iterator
   2638          I = LocalDeclMap.begin(), E = LocalDeclMap.end(); I != E; ++I) {
   2639     const Decl *D = I->first;
   2640     llvm::Value *Addr = I->second;
   2641 
   2642     if (llvm::AllocaInst *Alloca = dyn_cast<llvm::AllocaInst>(Addr)) {
   2643       llvm::Value *DAddr = GetPointerConstant(getLLVMContext(), D);
   2644       Alloca->setMetadata(DeclPtrKind, llvm::MDNode::get(Context, DAddr));
   2645     } else if (llvm::GlobalValue *GV = dyn_cast<llvm::GlobalValue>(Addr)) {
   2646       GlobalDecl GD = GlobalDecl(cast<VarDecl>(D));
   2647       EmitGlobalDeclMetadata(CGM, GlobalMetadata, GD, GV);
   2648     }
   2649   }
   2650 }
   2651 
   2652 void CodeGenModule::EmitCoverageFile() {
   2653   if (!getCodeGenOpts().CoverageFile.empty()) {
   2654     if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
   2655       llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
   2656       llvm::LLVMContext &Ctx = TheModule.getContext();
   2657       llvm::MDString *CoverageFile =
   2658           llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
   2659       for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
   2660         llvm::MDNode *CU = CUNode->getOperand(i);
   2661         llvm::Value *node[] = { CoverageFile, CU };
   2662         llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
   2663         GCov->addOperand(N);
   2664       }
   2665     }
   2666   }
   2667 }
   2668