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 "CGCUDARuntime.h"
     16 #include "CGCXXABI.h"
     17 #include "CGCall.h"
     18 #include "CGDebugInfo.h"
     19 #include "CGObjCRuntime.h"
     20 #include "CGOpenCLRuntime.h"
     21 #include "CGOpenMPRuntime.h"
     22 #include "CodeGenFunction.h"
     23 #include "CodeGenPGO.h"
     24 #include "CodeGenTBAA.h"
     25 #include "CoverageMappingGen.h"
     26 #include "TargetInfo.h"
     27 #include "clang/AST/ASTContext.h"
     28 #include "clang/AST/CharUnits.h"
     29 #include "clang/AST/DeclCXX.h"
     30 #include "clang/AST/DeclObjC.h"
     31 #include "clang/AST/DeclTemplate.h"
     32 #include "clang/AST/Mangle.h"
     33 #include "clang/AST/RecordLayout.h"
     34 #include "clang/AST/RecursiveASTVisitor.h"
     35 #include "clang/Basic/Builtins.h"
     36 #include "clang/Basic/CharInfo.h"
     37 #include "clang/Basic/Diagnostic.h"
     38 #include "clang/Basic/Module.h"
     39 #include "clang/Basic/SourceManager.h"
     40 #include "clang/Basic/TargetInfo.h"
     41 #include "clang/Basic/Version.h"
     42 #include "clang/Frontend/CodeGenOptions.h"
     43 #include "clang/Sema/SemaDiagnostic.h"
     44 #include "llvm/ADT/APSInt.h"
     45 #include "llvm/ADT/Triple.h"
     46 #include "llvm/IR/CallSite.h"
     47 #include "llvm/IR/CallingConv.h"
     48 #include "llvm/IR/DataLayout.h"
     49 #include "llvm/IR/Intrinsics.h"
     50 #include "llvm/IR/LLVMContext.h"
     51 #include "llvm/IR/Module.h"
     52 #include "llvm/ProfileData/InstrProfReader.h"
     53 #include "llvm/Support/ConvertUTF.h"
     54 #include "llvm/Support/ErrorHandling.h"
     55 
     56 using namespace clang;
     57 using namespace CodeGen;
     58 
     59 static const char AnnotationSection[] = "llvm.metadata";
     60 
     61 static CGCXXABI *createCXXABI(CodeGenModule &CGM) {
     62   switch (CGM.getTarget().getCXXABI().getKind()) {
     63   case TargetCXXABI::GenericAArch64:
     64   case TargetCXXABI::GenericARM:
     65   case TargetCXXABI::iOS:
     66   case TargetCXXABI::iOS64:
     67   case TargetCXXABI::GenericMIPS:
     68   case TargetCXXABI::GenericItanium:
     69     return CreateItaniumCXXABI(CGM);
     70   case TargetCXXABI::Microsoft:
     71     return CreateMicrosoftCXXABI(CGM);
     72   }
     73 
     74   llvm_unreachable("invalid C++ ABI kind");
     75 }
     76 
     77 CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
     78                              llvm::Module &M, const llvm::DataLayout &TD,
     79                              DiagnosticsEngine &diags,
     80                              CoverageSourceInfo *CoverageInfo)
     81     : Context(C), LangOpts(C.getLangOpts()), CodeGenOpts(CGO), TheModule(M),
     82       Diags(diags), TheDataLayout(TD), Target(C.getTargetInfo()),
     83       ABI(createCXXABI(*this)), VMContext(M.getContext()), TBAA(nullptr),
     84       TheTargetCodeGenInfo(nullptr), Types(*this), VTables(*this),
     85       ObjCRuntime(nullptr), OpenCLRuntime(nullptr), OpenMPRuntime(nullptr),
     86       CUDARuntime(nullptr), DebugInfo(nullptr), ARCData(nullptr),
     87       NoObjCARCExceptionsMetadata(nullptr), RRData(nullptr), PGOReader(nullptr),
     88       CFConstantStringClassRef(nullptr), ConstantStringClassRef(nullptr),
     89       NSConstantStringType(nullptr), NSConcreteGlobalBlock(nullptr),
     90       NSConcreteStackBlock(nullptr), BlockObjectAssign(nullptr),
     91       BlockObjectDispose(nullptr), BlockDescriptorType(nullptr),
     92       GenericBlockLiteralType(nullptr), LifetimeStartFn(nullptr),
     93       LifetimeEndFn(nullptr), SanitizerMD(new SanitizerMetadata(*this)) {
     94 
     95   // Initialize the type cache.
     96   llvm::LLVMContext &LLVMContext = M.getContext();
     97   VoidTy = llvm::Type::getVoidTy(LLVMContext);
     98   Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
     99   Int16Ty = llvm::Type::getInt16Ty(LLVMContext);
    100   Int32Ty = llvm::Type::getInt32Ty(LLVMContext);
    101   Int64Ty = llvm::Type::getInt64Ty(LLVMContext);
    102   FloatTy = llvm::Type::getFloatTy(LLVMContext);
    103   DoubleTy = llvm::Type::getDoubleTy(LLVMContext);
    104   PointerWidthInBits = C.getTargetInfo().getPointerWidth(0);
    105   PointerAlignInBytes =
    106   C.toCharUnitsFromBits(C.getTargetInfo().getPointerAlign(0)).getQuantity();
    107   IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
    108   IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
    109   Int8PtrTy = Int8Ty->getPointerTo(0);
    110   Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);
    111 
    112   RuntimeCC = getTargetCodeGenInfo().getABIInfo().getRuntimeCC();
    113   BuiltinCC = getTargetCodeGenInfo().getABIInfo().getBuiltinCC();
    114 
    115   if (LangOpts.ObjC1)
    116     createObjCRuntime();
    117   if (LangOpts.OpenCL)
    118     createOpenCLRuntime();
    119   if (LangOpts.OpenMP)
    120     createOpenMPRuntime();
    121   if (LangOpts.CUDA)
    122     createCUDARuntime();
    123 
    124   // Enable TBAA unless it's suppressed. ThreadSanitizer needs TBAA even at O0.
    125   if (LangOpts.Sanitize.has(SanitizerKind::Thread) ||
    126       (!CodeGenOpts.RelaxedAliasing && CodeGenOpts.OptimizationLevel > 0))
    127     TBAA = new CodeGenTBAA(Context, VMContext, CodeGenOpts, getLangOpts(),
    128                            getCXXABI().getMangleContext());
    129 
    130   // If debug info or coverage generation is enabled, create the CGDebugInfo
    131   // object.
    132   if (CodeGenOpts.getDebugInfo() != CodeGenOptions::NoDebugInfo ||
    133       CodeGenOpts.EmitGcovArcs ||
    134       CodeGenOpts.EmitGcovNotes)
    135     DebugInfo = new CGDebugInfo(*this);
    136 
    137   Block.GlobalUniqueCount = 0;
    138 
    139   if (C.getLangOpts().ObjCAutoRefCount)
    140     ARCData = new ARCEntrypoints();
    141   RRData = new RREntrypoints();
    142 
    143   if (!CodeGenOpts.InstrProfileInput.empty()) {
    144     auto ReaderOrErr =
    145         llvm::IndexedInstrProfReader::create(CodeGenOpts.InstrProfileInput);
    146     if (std::error_code EC = ReaderOrErr.getError()) {
    147       unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
    148                                               "Could not read profile: %0");
    149       getDiags().Report(DiagID) << EC.message();
    150     } else
    151       PGOReader = std::move(ReaderOrErr.get());
    152   }
    153 
    154   // If coverage mapping generation is enabled, create the
    155   // CoverageMappingModuleGen object.
    156   if (CodeGenOpts.CoverageMapping)
    157     CoverageMapping.reset(new CoverageMappingModuleGen(*this, *CoverageInfo));
    158 }
    159 
    160 CodeGenModule::~CodeGenModule() {
    161   delete ObjCRuntime;
    162   delete OpenCLRuntime;
    163   delete OpenMPRuntime;
    164   delete CUDARuntime;
    165   delete TheTargetCodeGenInfo;
    166   delete TBAA;
    167   delete DebugInfo;
    168   delete ARCData;
    169   delete RRData;
    170 }
    171 
    172 void CodeGenModule::createObjCRuntime() {
    173   // This is just isGNUFamily(), but we want to force implementors of
    174   // new ABIs to decide how best to do this.
    175   switch (LangOpts.ObjCRuntime.getKind()) {
    176   case ObjCRuntime::GNUstep:
    177   case ObjCRuntime::GCC:
    178   case ObjCRuntime::ObjFW:
    179     ObjCRuntime = CreateGNUObjCRuntime(*this);
    180     return;
    181 
    182   case ObjCRuntime::FragileMacOSX:
    183   case ObjCRuntime::MacOSX:
    184   case ObjCRuntime::iOS:
    185     ObjCRuntime = CreateMacObjCRuntime(*this);
    186     return;
    187   }
    188   llvm_unreachable("bad runtime kind");
    189 }
    190 
    191 void CodeGenModule::createOpenCLRuntime() {
    192   OpenCLRuntime = new CGOpenCLRuntime(*this);
    193 }
    194 
    195 void CodeGenModule::createOpenMPRuntime() {
    196   OpenMPRuntime = new CGOpenMPRuntime(*this);
    197 }
    198 
    199 void CodeGenModule::createCUDARuntime() {
    200   CUDARuntime = CreateNVCUDARuntime(*this);
    201 }
    202 
    203 void CodeGenModule::addReplacement(StringRef Name, llvm::Constant *C) {
    204   Replacements[Name] = C;
    205 }
    206 
    207 void CodeGenModule::applyReplacements() {
    208   for (ReplacementsTy::iterator I = Replacements.begin(),
    209                                 E = Replacements.end();
    210        I != E; ++I) {
    211     StringRef MangledName = I->first();
    212     llvm::Constant *Replacement = I->second;
    213     llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
    214     if (!Entry)
    215       continue;
    216     auto *OldF = cast<llvm::Function>(Entry);
    217     auto *NewF = dyn_cast<llvm::Function>(Replacement);
    218     if (!NewF) {
    219       if (auto *Alias = dyn_cast<llvm::GlobalAlias>(Replacement)) {
    220         NewF = dyn_cast<llvm::Function>(Alias->getAliasee());
    221       } else {
    222         auto *CE = cast<llvm::ConstantExpr>(Replacement);
    223         assert(CE->getOpcode() == llvm::Instruction::BitCast ||
    224                CE->getOpcode() == llvm::Instruction::GetElementPtr);
    225         NewF = dyn_cast<llvm::Function>(CE->getOperand(0));
    226       }
    227     }
    228 
    229     // Replace old with new, but keep the old order.
    230     OldF->replaceAllUsesWith(Replacement);
    231     if (NewF) {
    232       NewF->removeFromParent();
    233       OldF->getParent()->getFunctionList().insertAfter(OldF, NewF);
    234     }
    235     OldF->eraseFromParent();
    236   }
    237 }
    238 
    239 // This is only used in aliases that we created and we know they have a
    240 // linear structure.
    241 static const llvm::GlobalObject *getAliasedGlobal(const llvm::GlobalAlias &GA) {
    242   llvm::SmallPtrSet<const llvm::GlobalAlias*, 4> Visited;
    243   const llvm::Constant *C = &GA;
    244   for (;;) {
    245     C = C->stripPointerCasts();
    246     if (auto *GO = dyn_cast<llvm::GlobalObject>(C))
    247       return GO;
    248     // stripPointerCasts will not walk over weak aliases.
    249     auto *GA2 = dyn_cast<llvm::GlobalAlias>(C);
    250     if (!GA2)
    251       return nullptr;
    252     if (!Visited.insert(GA2).second)
    253       return nullptr;
    254     C = GA2->getAliasee();
    255   }
    256 }
    257 
    258 void CodeGenModule::checkAliases() {
    259   // Check if the constructed aliases are well formed. It is really unfortunate
    260   // that we have to do this in CodeGen, but we only construct mangled names
    261   // and aliases during codegen.
    262   bool Error = false;
    263   DiagnosticsEngine &Diags = getDiags();
    264   for (std::vector<GlobalDecl>::iterator I = Aliases.begin(),
    265          E = Aliases.end(); I != E; ++I) {
    266     const GlobalDecl &GD = *I;
    267     const auto *D = cast<ValueDecl>(GD.getDecl());
    268     const AliasAttr *AA = D->getAttr<AliasAttr>();
    269     StringRef MangledName = getMangledName(GD);
    270     llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
    271     auto *Alias = cast<llvm::GlobalAlias>(Entry);
    272     const llvm::GlobalValue *GV = getAliasedGlobal(*Alias);
    273     if (!GV) {
    274       Error = true;
    275       Diags.Report(AA->getLocation(), diag::err_cyclic_alias);
    276     } else if (GV->isDeclaration()) {
    277       Error = true;
    278       Diags.Report(AA->getLocation(), diag::err_alias_to_undefined);
    279     }
    280 
    281     llvm::Constant *Aliasee = Alias->getAliasee();
    282     llvm::GlobalValue *AliaseeGV;
    283     if (auto CE = dyn_cast<llvm::ConstantExpr>(Aliasee))
    284       AliaseeGV = cast<llvm::GlobalValue>(CE->getOperand(0));
    285     else
    286       AliaseeGV = cast<llvm::GlobalValue>(Aliasee);
    287 
    288     if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {
    289       StringRef AliasSection = SA->getName();
    290       if (AliasSection != AliaseeGV->getSection())
    291         Diags.Report(SA->getLocation(), diag::warn_alias_with_section)
    292             << AliasSection;
    293     }
    294 
    295     // We have to handle alias to weak aliases in here. LLVM itself disallows
    296     // this since the object semantics would not match the IL one. For
    297     // compatibility with gcc we implement it by just pointing the alias
    298     // to its aliasee's aliasee. We also warn, since the user is probably
    299     // expecting the link to be weak.
    300     if (auto GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {
    301       if (GA->mayBeOverridden()) {
    302         Diags.Report(AA->getLocation(), diag::warn_alias_to_weak_alias)
    303             << GV->getName() << GA->getName();
    304         Aliasee = llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
    305             GA->getAliasee(), Alias->getType());
    306         Alias->setAliasee(Aliasee);
    307       }
    308     }
    309   }
    310   if (!Error)
    311     return;
    312 
    313   for (std::vector<GlobalDecl>::iterator I = Aliases.begin(),
    314          E = Aliases.end(); I != E; ++I) {
    315     const GlobalDecl &GD = *I;
    316     StringRef MangledName = getMangledName(GD);
    317     llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
    318     auto *Alias = cast<llvm::GlobalAlias>(Entry);
    319     Alias->replaceAllUsesWith(llvm::UndefValue::get(Alias->getType()));
    320     Alias->eraseFromParent();
    321   }
    322 }
    323 
    324 void CodeGenModule::clear() {
    325   DeferredDeclsToEmit.clear();
    326   if (OpenMPRuntime)
    327     OpenMPRuntime->clear();
    328 }
    329 
    330 void InstrProfStats::reportDiagnostics(DiagnosticsEngine &Diags,
    331                                        StringRef MainFile) {
    332   if (!hasDiagnostics())
    333     return;
    334   if (VisitedInMainFile > 0 && VisitedInMainFile == MissingInMainFile) {
    335     if (MainFile.empty())
    336       MainFile = "<stdin>";
    337     Diags.Report(diag::warn_profile_data_unprofiled) << MainFile;
    338   } else
    339     Diags.Report(diag::warn_profile_data_out_of_date) << Visited << Missing
    340                                                       << Mismatched;
    341 }
    342 
    343 void CodeGenModule::Release() {
    344   EmitDeferred();
    345   applyReplacements();
    346   checkAliases();
    347   EmitCXXGlobalInitFunc();
    348   EmitCXXGlobalDtorFunc();
    349   EmitCXXThreadLocalInitFunc();
    350   if (ObjCRuntime)
    351     if (llvm::Function *ObjCInitFunction = ObjCRuntime->ModuleInitFunction())
    352       AddGlobalCtor(ObjCInitFunction);
    353   if (PGOReader && PGOStats.hasDiagnostics())
    354     PGOStats.reportDiagnostics(getDiags(), getCodeGenOpts().MainFileName);
    355   EmitCtorList(GlobalCtors, "llvm.global_ctors");
    356   EmitCtorList(GlobalDtors, "llvm.global_dtors");
    357   EmitGlobalAnnotations();
    358   EmitStaticExternCAliases();
    359   EmitDeferredUnusedCoverageMappings();
    360   if (CoverageMapping)
    361     CoverageMapping->emit();
    362   emitLLVMUsed();
    363 
    364   if (CodeGenOpts.Autolink &&
    365       (Context.getLangOpts().Modules || !LinkerOptionsMetadata.empty())) {
    366     EmitModuleLinkOptions();
    367   }
    368   if (CodeGenOpts.DwarfVersion)
    369     // We actually want the latest version when there are conflicts.
    370     // We can change from Warning to Latest if such mode is supported.
    371     getModule().addModuleFlag(llvm::Module::Warning, "Dwarf Version",
    372                               CodeGenOpts.DwarfVersion);
    373   if (DebugInfo)
    374     // We support a single version in the linked module. The LLVM
    375     // parser will drop debug info with a different version number
    376     // (and warn about it, too).
    377     getModule().addModuleFlag(llvm::Module::Warning, "Debug Info Version",
    378                               llvm::DEBUG_METADATA_VERSION);
    379 
    380   // We need to record the widths of enums and wchar_t, so that we can generate
    381   // the correct build attributes in the ARM backend.
    382   llvm::Triple::ArchType Arch = Context.getTargetInfo().getTriple().getArch();
    383   if (   Arch == llvm::Triple::arm
    384       || Arch == llvm::Triple::armeb
    385       || Arch == llvm::Triple::thumb
    386       || Arch == llvm::Triple::thumbeb) {
    387     // Width of wchar_t in bytes
    388     uint64_t WCharWidth =
    389         Context.getTypeSizeInChars(Context.getWideCharType()).getQuantity();
    390     getModule().addModuleFlag(llvm::Module::Error, "wchar_size", WCharWidth);
    391 
    392     // The minimum width of an enum in bytes
    393     uint64_t EnumWidth = Context.getLangOpts().ShortEnums ? 1 : 4;
    394     getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth);
    395   }
    396 
    397   if (uint32_t PLevel = Context.getLangOpts().PICLevel) {
    398     llvm::PICLevel::Level PL = llvm::PICLevel::Default;
    399     switch (PLevel) {
    400     case 0: break;
    401     case 1: PL = llvm::PICLevel::Small; break;
    402     case 2: PL = llvm::PICLevel::Large; break;
    403     default: llvm_unreachable("Invalid PIC Level");
    404     }
    405 
    406     getModule().setPICLevel(PL);
    407   }
    408 
    409   SimplifyPersonality();
    410 
    411   if (getCodeGenOpts().EmitDeclMetadata)
    412     EmitDeclMetadata();
    413 
    414   if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
    415     EmitCoverageFile();
    416 
    417   if (DebugInfo)
    418     DebugInfo->finalize();
    419 
    420   EmitVersionIdentMetadata();
    421 
    422   EmitTargetMetadata();
    423 }
    424 
    425 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
    426   // Make sure that this type is translated.
    427   Types.UpdateCompletedType(TD);
    428 }
    429 
    430 llvm::MDNode *CodeGenModule::getTBAAInfo(QualType QTy) {
    431   if (!TBAA)
    432     return nullptr;
    433   return TBAA->getTBAAInfo(QTy);
    434 }
    435 
    436 llvm::MDNode *CodeGenModule::getTBAAInfoForVTablePtr() {
    437   if (!TBAA)
    438     return nullptr;
    439   return TBAA->getTBAAInfoForVTablePtr();
    440 }
    441 
    442 llvm::MDNode *CodeGenModule::getTBAAStructInfo(QualType QTy) {
    443   if (!TBAA)
    444     return nullptr;
    445   return TBAA->getTBAAStructInfo(QTy);
    446 }
    447 
    448 llvm::MDNode *CodeGenModule::getTBAAStructTypeInfo(QualType QTy) {
    449   if (!TBAA)
    450     return nullptr;
    451   return TBAA->getTBAAStructTypeInfo(QTy);
    452 }
    453 
    454 llvm::MDNode *CodeGenModule::getTBAAStructTagInfo(QualType BaseTy,
    455                                                   llvm::MDNode *AccessN,
    456                                                   uint64_t O) {
    457   if (!TBAA)
    458     return nullptr;
    459   return TBAA->getTBAAStructTagInfo(BaseTy, AccessN, O);
    460 }
    461 
    462 /// Decorate the instruction with a TBAA tag. For both scalar TBAA
    463 /// and struct-path aware TBAA, the tag has the same format:
    464 /// base type, access type and offset.
    465 /// When ConvertTypeToTag is true, we create a tag based on the scalar type.
    466 void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
    467                                         llvm::MDNode *TBAAInfo,
    468                                         bool ConvertTypeToTag) {
    469   if (ConvertTypeToTag && TBAA)
    470     Inst->setMetadata(llvm::LLVMContext::MD_tbaa,
    471                       TBAA->getTBAAScalarTagInfo(TBAAInfo));
    472   else
    473     Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
    474 }
    475 
    476 void CodeGenModule::Error(SourceLocation loc, StringRef message) {
    477   unsigned diagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error, "%0");
    478   getDiags().Report(Context.getFullLoc(loc), diagID) << message;
    479 }
    480 
    481 /// ErrorUnsupported - Print out an error that codegen doesn't support the
    482 /// specified stmt yet.
    483 void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type) {
    484   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
    485                                                "cannot compile this %0 yet");
    486   std::string Msg = Type;
    487   getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
    488     << Msg << S->getSourceRange();
    489 }
    490 
    491 /// ErrorUnsupported - Print out an error that codegen doesn't support the
    492 /// specified decl yet.
    493 void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type) {
    494   unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
    495                                                "cannot compile this %0 yet");
    496   std::string Msg = Type;
    497   getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg;
    498 }
    499 
    500 llvm::ConstantInt *CodeGenModule::getSize(CharUnits size) {
    501   return llvm::ConstantInt::get(SizeTy, size.getQuantity());
    502 }
    503 
    504 void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
    505                                         const NamedDecl *D) const {
    506   // Internal definitions always have default visibility.
    507   if (GV->hasLocalLinkage()) {
    508     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
    509     return;
    510   }
    511 
    512   // Set visibility for definitions.
    513   LinkageInfo LV = D->getLinkageAndVisibility();
    514   if (LV.isVisibilityExplicit() || !GV->hasAvailableExternallyLinkage())
    515     GV->setVisibility(GetLLVMVisibility(LV.getVisibility()));
    516 }
    517 
    518 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
    519   return llvm::StringSwitch<llvm::GlobalVariable::ThreadLocalMode>(S)
    520       .Case("global-dynamic", llvm::GlobalVariable::GeneralDynamicTLSModel)
    521       .Case("local-dynamic", llvm::GlobalVariable::LocalDynamicTLSModel)
    522       .Case("initial-exec", llvm::GlobalVariable::InitialExecTLSModel)
    523       .Case("local-exec", llvm::GlobalVariable::LocalExecTLSModel);
    524 }
    525 
    526 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(
    527     CodeGenOptions::TLSModel M) {
    528   switch (M) {
    529   case CodeGenOptions::GeneralDynamicTLSModel:
    530     return llvm::GlobalVariable::GeneralDynamicTLSModel;
    531   case CodeGenOptions::LocalDynamicTLSModel:
    532     return llvm::GlobalVariable::LocalDynamicTLSModel;
    533   case CodeGenOptions::InitialExecTLSModel:
    534     return llvm::GlobalVariable::InitialExecTLSModel;
    535   case CodeGenOptions::LocalExecTLSModel:
    536     return llvm::GlobalVariable::LocalExecTLSModel;
    537   }
    538   llvm_unreachable("Invalid TLS model!");
    539 }
    540 
    541 void CodeGenModule::setTLSMode(llvm::GlobalValue *GV, const VarDecl &D) const {
    542   assert(D.getTLSKind() && "setting TLS mode on non-TLS var!");
    543 
    544   llvm::GlobalValue::ThreadLocalMode TLM;
    545   TLM = GetLLVMTLSModel(CodeGenOpts.getDefaultTLSModel());
    546 
    547   // Override the TLS model if it is explicitly specified.
    548   if (const TLSModelAttr *Attr = D.getAttr<TLSModelAttr>()) {
    549     TLM = GetLLVMTLSModel(Attr->getModel());
    550   }
    551 
    552   GV->setThreadLocalMode(TLM);
    553 }
    554 
    555 StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
    556   StringRef &FoundStr = MangledDeclNames[GD.getCanonicalDecl()];
    557   if (!FoundStr.empty())
    558     return FoundStr;
    559 
    560   const auto *ND = cast<NamedDecl>(GD.getDecl());
    561   SmallString<256> Buffer;
    562   StringRef Str;
    563   if (getCXXABI().getMangleContext().shouldMangleDeclName(ND)) {
    564     llvm::raw_svector_ostream Out(Buffer);
    565     if (const auto *D = dyn_cast<CXXConstructorDecl>(ND))
    566       getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out);
    567     else if (const auto *D = dyn_cast<CXXDestructorDecl>(ND))
    568       getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out);
    569     else
    570       getCXXABI().getMangleContext().mangleName(ND, Out);
    571     Str = Out.str();
    572   } else {
    573     IdentifierInfo *II = ND->getIdentifier();
    574     assert(II && "Attempt to mangle unnamed decl.");
    575     Str = II->getName();
    576   }
    577 
    578   // Keep the first result in the case of a mangling collision.
    579   auto Result = Manglings.insert(std::make_pair(Str, GD));
    580   return FoundStr = Result.first->first();
    581 }
    582 
    583 StringRef CodeGenModule::getBlockMangledName(GlobalDecl GD,
    584                                              const BlockDecl *BD) {
    585   MangleContext &MangleCtx = getCXXABI().getMangleContext();
    586   const Decl *D = GD.getDecl();
    587 
    588   SmallString<256> Buffer;
    589   llvm::raw_svector_ostream Out(Buffer);
    590   if (!D)
    591     MangleCtx.mangleGlobalBlock(BD,
    592       dyn_cast_or_null<VarDecl>(initializedGlobalDecl.getDecl()), Out);
    593   else if (const auto *CD = dyn_cast<CXXConstructorDecl>(D))
    594     MangleCtx.mangleCtorBlock(CD, GD.getCtorType(), BD, Out);
    595   else if (const auto *DD = dyn_cast<CXXDestructorDecl>(D))
    596     MangleCtx.mangleDtorBlock(DD, GD.getDtorType(), BD, Out);
    597   else
    598     MangleCtx.mangleBlock(cast<DeclContext>(D), BD, Out);
    599 
    600   auto Result = Manglings.insert(std::make_pair(Out.str(), BD));
    601   return Result.first->first();
    602 }
    603 
    604 llvm::GlobalValue *CodeGenModule::GetGlobalValue(StringRef Name) {
    605   return getModule().getNamedValue(Name);
    606 }
    607 
    608 /// AddGlobalCtor - Add a function to the list that will be called before
    609 /// main() runs.
    610 void CodeGenModule::AddGlobalCtor(llvm::Function *Ctor, int Priority,
    611                                   llvm::Constant *AssociatedData) {
    612   // FIXME: Type coercion of void()* types.
    613   GlobalCtors.push_back(Structor(Priority, Ctor, AssociatedData));
    614 }
    615 
    616 /// AddGlobalDtor - Add a function to the list that will be called
    617 /// when the module is unloaded.
    618 void CodeGenModule::AddGlobalDtor(llvm::Function *Dtor, int Priority) {
    619   // FIXME: Type coercion of void()* types.
    620   GlobalDtors.push_back(Structor(Priority, Dtor, nullptr));
    621 }
    622 
    623 void CodeGenModule::EmitCtorList(const CtorList &Fns, const char *GlobalName) {
    624   // Ctor function type is void()*.
    625   llvm::FunctionType* CtorFTy = llvm::FunctionType::get(VoidTy, false);
    626   llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
    627 
    628   // Get the type of a ctor entry, { i32, void ()*, i8* }.
    629   llvm::StructType *CtorStructTy = llvm::StructType::get(
    630       Int32Ty, llvm::PointerType::getUnqual(CtorFTy), VoidPtrTy, nullptr);
    631 
    632   // Construct the constructor and destructor arrays.
    633   SmallVector<llvm::Constant*, 8> Ctors;
    634   for (CtorList::const_iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
    635     llvm::Constant *S[] = {
    636       llvm::ConstantInt::get(Int32Ty, I->Priority, false),
    637       llvm::ConstantExpr::getBitCast(I->Initializer, CtorPFTy),
    638       (I->AssociatedData
    639            ? llvm::ConstantExpr::getBitCast(I->AssociatedData, VoidPtrTy)
    640            : llvm::Constant::getNullValue(VoidPtrTy))
    641     };
    642     Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
    643   }
    644 
    645   if (!Ctors.empty()) {
    646     llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
    647     new llvm::GlobalVariable(TheModule, AT, false,
    648                              llvm::GlobalValue::AppendingLinkage,
    649                              llvm::ConstantArray::get(AT, Ctors),
    650                              GlobalName);
    651   }
    652 }
    653 
    654 llvm::GlobalValue::LinkageTypes
    655 CodeGenModule::getFunctionLinkage(GlobalDecl GD) {
    656   const auto *D = cast<FunctionDecl>(GD.getDecl());
    657 
    658   GVALinkage Linkage = getContext().GetGVALinkageForFunction(D);
    659 
    660   if (isa<CXXDestructorDecl>(D) &&
    661       getCXXABI().useThunkForDtorVariant(cast<CXXDestructorDecl>(D),
    662                                          GD.getDtorType())) {
    663     // Destructor variants in the Microsoft C++ ABI are always internal or
    664     // linkonce_odr thunks emitted on an as-needed basis.
    665     return Linkage == GVA_Internal ? llvm::GlobalValue::InternalLinkage
    666                                    : llvm::GlobalValue::LinkOnceODRLinkage;
    667   }
    668 
    669   return getLLVMLinkageForDeclarator(D, Linkage, /*isConstantVariable=*/false);
    670 }
    671 
    672 void CodeGenModule::setFunctionDefinitionAttributes(const FunctionDecl *D,
    673                                                     llvm::Function *F) {
    674   setNonAliasAttributes(D, F);
    675 }
    676 
    677 void CodeGenModule::SetLLVMFunctionAttributes(const Decl *D,
    678                                               const CGFunctionInfo &Info,
    679                                               llvm::Function *F) {
    680   unsigned CallingConv;
    681   AttributeListType AttributeList;
    682   ConstructAttributeList(Info, D, AttributeList, CallingConv, false);
    683   F->setAttributes(llvm::AttributeSet::get(getLLVMContext(), AttributeList));
    684   F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
    685 }
    686 
    687 /// Determines whether the language options require us to model
    688 /// unwind exceptions.  We treat -fexceptions as mandating this
    689 /// except under the fragile ObjC ABI with only ObjC exceptions
    690 /// enabled.  This means, for example, that C with -fexceptions
    691 /// enables this.
    692 static bool hasUnwindExceptions(const LangOptions &LangOpts) {
    693   // If exceptions are completely disabled, obviously this is false.
    694   if (!LangOpts.Exceptions) return false;
    695 
    696   // If C++ exceptions are enabled, this is true.
    697   if (LangOpts.CXXExceptions) return true;
    698 
    699   // If ObjC exceptions are enabled, this depends on the ABI.
    700   if (LangOpts.ObjCExceptions) {
    701     return LangOpts.ObjCRuntime.hasUnwindExceptions();
    702   }
    703 
    704   return true;
    705 }
    706 
    707 void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
    708                                                            llvm::Function *F) {
    709   llvm::AttrBuilder B;
    710 
    711   if (CodeGenOpts.UnwindTables)
    712     B.addAttribute(llvm::Attribute::UWTable);
    713 
    714   if (!hasUnwindExceptions(LangOpts))
    715     B.addAttribute(llvm::Attribute::NoUnwind);
    716 
    717   if (D->hasAttr<NakedAttr>()) {
    718     // Naked implies noinline: we should not be inlining such functions.
    719     B.addAttribute(llvm::Attribute::Naked);
    720     B.addAttribute(llvm::Attribute::NoInline);
    721   } else if (D->hasAttr<NoDuplicateAttr>()) {
    722     B.addAttribute(llvm::Attribute::NoDuplicate);
    723   } else if (D->hasAttr<NoInlineAttr>()) {
    724     B.addAttribute(llvm::Attribute::NoInline);
    725   } else if (D->hasAttr<AlwaysInlineAttr>() &&
    726              !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,
    727                                               llvm::Attribute::NoInline)) {
    728     // (noinline wins over always_inline, and we can't specify both in IR)
    729     B.addAttribute(llvm::Attribute::AlwaysInline);
    730   }
    731 
    732   if (D->hasAttr<ColdAttr>()) {
    733     if (!D->hasAttr<OptimizeNoneAttr>())
    734       B.addAttribute(llvm::Attribute::OptimizeForSize);
    735     B.addAttribute(llvm::Attribute::Cold);
    736   }
    737 
    738   if (D->hasAttr<MinSizeAttr>())
    739     B.addAttribute(llvm::Attribute::MinSize);
    740 
    741   if (LangOpts.getStackProtector() == LangOptions::SSPOn)
    742     B.addAttribute(llvm::Attribute::StackProtect);
    743   else if (LangOpts.getStackProtector() == LangOptions::SSPStrong)
    744     B.addAttribute(llvm::Attribute::StackProtectStrong);
    745   else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
    746     B.addAttribute(llvm::Attribute::StackProtectReq);
    747 
    748   // Add sanitizer attributes if function is not blacklisted.
    749   if (!isInSanitizerBlacklist(F, D->getLocation())) {
    750     // When AddressSanitizer is enabled, set SanitizeAddress attribute
    751     // unless __attribute__((no_sanitize_address)) is used.
    752     if (LangOpts.Sanitize.has(SanitizerKind::Address) &&
    753         !D->hasAttr<NoSanitizeAddressAttr>())
    754       B.addAttribute(llvm::Attribute::SanitizeAddress);
    755     // Same for ThreadSanitizer and __attribute__((no_sanitize_thread))
    756     if (LangOpts.Sanitize.has(SanitizerKind::Thread) &&
    757         !D->hasAttr<NoSanitizeThreadAttr>())
    758       B.addAttribute(llvm::Attribute::SanitizeThread);
    759     // Same for MemorySanitizer and __attribute__((no_sanitize_memory))
    760     if (LangOpts.Sanitize.has(SanitizerKind::Memory) &&
    761         !D->hasAttr<NoSanitizeMemoryAttr>())
    762       B.addAttribute(llvm::Attribute::SanitizeMemory);
    763   }
    764 
    765   F->addAttributes(llvm::AttributeSet::FunctionIndex,
    766                    llvm::AttributeSet::get(
    767                        F->getContext(), llvm::AttributeSet::FunctionIndex, B));
    768 
    769   if (D->hasAttr<OptimizeNoneAttr>()) {
    770     // OptimizeNone implies noinline; we should not be inlining such functions.
    771     F->addFnAttr(llvm::Attribute::OptimizeNone);
    772     F->addFnAttr(llvm::Attribute::NoInline);
    773 
    774     // OptimizeNone wins over OptimizeForSize, MinSize, AlwaysInline.
    775     assert(!F->hasFnAttribute(llvm::Attribute::OptimizeForSize) &&
    776            "OptimizeNone and OptimizeForSize on same function!");
    777     assert(!F->hasFnAttribute(llvm::Attribute::MinSize) &&
    778            "OptimizeNone and MinSize on same function!");
    779     assert(!F->hasFnAttribute(llvm::Attribute::AlwaysInline) &&
    780            "OptimizeNone and AlwaysInline on same function!");
    781 
    782     // Attribute 'inlinehint' has no effect on 'optnone' functions.
    783     // Explicitly remove it from the set of function attributes.
    784     F->removeFnAttr(llvm::Attribute::InlineHint);
    785   }
    786 
    787   if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
    788     F->setUnnamedAddr(true);
    789   else if (const auto *MD = dyn_cast<CXXMethodDecl>(D))
    790     if (MD->isVirtual())
    791       F->setUnnamedAddr(true);
    792 
    793   unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();
    794   if (alignment)
    795     F->setAlignment(alignment);
    796 
    797   // C++ ABI requires 2-byte alignment for member functions.
    798   if (F->getAlignment() < 2 && isa<CXXMethodDecl>(D))
    799     F->setAlignment(2);
    800 }
    801 
    802 void CodeGenModule::SetCommonAttributes(const Decl *D,
    803                                         llvm::GlobalValue *GV) {
    804   if (const auto *ND = dyn_cast<NamedDecl>(D))
    805     setGlobalVisibility(GV, ND);
    806   else
    807     GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
    808 
    809   if (D->hasAttr<UsedAttr>())
    810     addUsedGlobal(GV);
    811 }
    812 
    813 void CodeGenModule::setAliasAttributes(const Decl *D,
    814                                        llvm::GlobalValue *GV) {
    815   SetCommonAttributes(D, GV);
    816 
    817   // Process the dllexport attribute based on whether the original definition
    818   // (not necessarily the aliasee) was exported.
    819   if (D->hasAttr<DLLExportAttr>())
    820     GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
    821 }
    822 
    823 void CodeGenModule::setNonAliasAttributes(const Decl *D,
    824                                           llvm::GlobalObject *GO) {
    825   SetCommonAttributes(D, GO);
    826 
    827   if (const SectionAttr *SA = D->getAttr<SectionAttr>())
    828     GO->setSection(SA->getName());
    829 
    830   getTargetCodeGenInfo().SetTargetAttributes(D, GO, *this);
    831 }
    832 
    833 void CodeGenModule::SetInternalFunctionAttributes(const Decl *D,
    834                                                   llvm::Function *F,
    835                                                   const CGFunctionInfo &FI) {
    836   SetLLVMFunctionAttributes(D, FI, F);
    837   SetLLVMFunctionAttributesForDefinition(D, F);
    838 
    839   F->setLinkage(llvm::Function::InternalLinkage);
    840 
    841   setNonAliasAttributes(D, F);
    842 }
    843 
    844 static void setLinkageAndVisibilityForGV(llvm::GlobalValue *GV,
    845                                          const NamedDecl *ND) {
    846   // Set linkage and visibility in case we never see a definition.
    847   LinkageInfo LV = ND->getLinkageAndVisibility();
    848   if (LV.getLinkage() != ExternalLinkage) {
    849     // Don't set internal linkage on declarations.
    850   } else {
    851     if (ND->hasAttr<DLLImportAttr>()) {
    852       GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
    853       GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
    854     } else if (ND->hasAttr<DLLExportAttr>()) {
    855       GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
    856       GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
    857     } else if (ND->hasAttr<WeakAttr>() || ND->isWeakImported()) {
    858       // "extern_weak" is overloaded in LLVM; we probably should have
    859       // separate linkage types for this.
    860       GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
    861     }
    862 
    863     // Set visibility on a declaration only if it's explicit.
    864     if (LV.isVisibilityExplicit())
    865       GV->setVisibility(CodeGenModule::GetLLVMVisibility(LV.getVisibility()));
    866   }
    867 }
    868 
    869 void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
    870                                           bool IsIncompleteFunction,
    871                                           bool IsThunk) {
    872   if (unsigned IID = F->getIntrinsicID()) {
    873     // If this is an intrinsic function, set the function's attributes
    874     // to the intrinsic's attributes.
    875     F->setAttributes(llvm::Intrinsic::getAttributes(getLLVMContext(),
    876                                                     (llvm::Intrinsic::ID)IID));
    877     return;
    878   }
    879 
    880   const auto *FD = cast<FunctionDecl>(GD.getDecl());
    881 
    882   if (!IsIncompleteFunction)
    883     SetLLVMFunctionAttributes(FD, getTypes().arrangeGlobalDeclaration(GD), F);
    884 
    885   // Add the Returned attribute for "this", except for iOS 5 and earlier
    886   // where substantial code, including the libstdc++ dylib, was compiled with
    887   // GCC and does not actually return "this".
    888   if (!IsThunk && getCXXABI().HasThisReturn(GD) &&
    889       !(getTarget().getTriple().isiOS() &&
    890         getTarget().getTriple().isOSVersionLT(6))) {
    891     assert(!F->arg_empty() &&
    892            F->arg_begin()->getType()
    893              ->canLosslesslyBitCastTo(F->getReturnType()) &&
    894            "unexpected this return");
    895     F->addAttribute(1, llvm::Attribute::Returned);
    896   }
    897 
    898   // Only a few attributes are set on declarations; these may later be
    899   // overridden by a definition.
    900 
    901   setLinkageAndVisibilityForGV(F, FD);
    902 
    903   if (const auto *Dtor = dyn_cast_or_null<CXXDestructorDecl>(FD)) {
    904     if (getCXXABI().useThunkForDtorVariant(Dtor, GD.getDtorType())) {
    905       // Don't dllexport/import destructor thunks.
    906       F->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
    907     }
    908   }
    909 
    910   if (const SectionAttr *SA = FD->getAttr<SectionAttr>())
    911     F->setSection(SA->getName());
    912 
    913   // A replaceable global allocation function does not act like a builtin by
    914   // default, only if it is invoked by a new-expression or delete-expression.
    915   if (FD->isReplaceableGlobalAllocationFunction())
    916     F->addAttribute(llvm::AttributeSet::FunctionIndex,
    917                     llvm::Attribute::NoBuiltin);
    918 }
    919 
    920 void CodeGenModule::addUsedGlobal(llvm::GlobalValue *GV) {
    921   assert(!GV->isDeclaration() &&
    922          "Only globals with definition can force usage.");
    923   LLVMUsed.push_back(GV);
    924 }
    925 
    926 void CodeGenModule::addCompilerUsedGlobal(llvm::GlobalValue *GV) {
    927   assert(!GV->isDeclaration() &&
    928          "Only globals with definition can force usage.");
    929   LLVMCompilerUsed.push_back(GV);
    930 }
    931 
    932 static void emitUsed(CodeGenModule &CGM, StringRef Name,
    933                      std::vector<llvm::WeakVH> &List) {
    934   // Don't create llvm.used if there is no need.
    935   if (List.empty())
    936     return;
    937 
    938   // Convert List to what ConstantArray needs.
    939   SmallVector<llvm::Constant*, 8> UsedArray;
    940   UsedArray.resize(List.size());
    941   for (unsigned i = 0, e = List.size(); i != e; ++i) {
    942     UsedArray[i] =
    943         llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
    944             cast<llvm::Constant>(&*List[i]), CGM.Int8PtrTy);
    945   }
    946 
    947   if (UsedArray.empty())
    948     return;
    949   llvm::ArrayType *ATy = llvm::ArrayType::get(CGM.Int8PtrTy, UsedArray.size());
    950 
    951   auto *GV = new llvm::GlobalVariable(
    952       CGM.getModule(), ATy, false, llvm::GlobalValue::AppendingLinkage,
    953       llvm::ConstantArray::get(ATy, UsedArray), Name);
    954 
    955   GV->setSection("llvm.metadata");
    956 }
    957 
    958 void CodeGenModule::emitLLVMUsed() {
    959   emitUsed(*this, "llvm.used", LLVMUsed);
    960   emitUsed(*this, "llvm.compiler.used", LLVMCompilerUsed);
    961 }
    962 
    963 void CodeGenModule::AppendLinkerOptions(StringRef Opts) {
    964   auto *MDOpts = llvm::MDString::get(getLLVMContext(), Opts);
    965   LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
    966 }
    967 
    968 void CodeGenModule::AddDetectMismatch(StringRef Name, StringRef Value) {
    969   llvm::SmallString<32> Opt;
    970   getTargetCodeGenInfo().getDetectMismatchOption(Name, Value, Opt);
    971   auto *MDOpts = llvm::MDString::get(getLLVMContext(), Opt);
    972   LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
    973 }
    974 
    975 void CodeGenModule::AddDependentLib(StringRef Lib) {
    976   llvm::SmallString<24> Opt;
    977   getTargetCodeGenInfo().getDependentLibraryOption(Lib, Opt);
    978   auto *MDOpts = llvm::MDString::get(getLLVMContext(), Opt);
    979   LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
    980 }
    981 
    982 /// \brief Add link options implied by the given module, including modules
    983 /// it depends on, using a postorder walk.
    984 static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod,
    985                                     SmallVectorImpl<llvm::Metadata *> &Metadata,
    986                                     llvm::SmallPtrSet<Module *, 16> &Visited) {
    987   // Import this module's parent.
    988   if (Mod->Parent && Visited.insert(Mod->Parent).second) {
    989     addLinkOptionsPostorder(CGM, Mod->Parent, Metadata, Visited);
    990   }
    991 
    992   // Import this module's dependencies.
    993   for (unsigned I = Mod->Imports.size(); I > 0; --I) {
    994     if (Visited.insert(Mod->Imports[I - 1]).second)
    995       addLinkOptionsPostorder(CGM, Mod->Imports[I-1], Metadata, Visited);
    996   }
    997 
    998   // Add linker options to link against the libraries/frameworks
    999   // described by this module.
   1000   llvm::LLVMContext &Context = CGM.getLLVMContext();
   1001   for (unsigned I = Mod->LinkLibraries.size(); I > 0; --I) {
   1002     // Link against a framework.  Frameworks are currently Darwin only, so we
   1003     // don't to ask TargetCodeGenInfo for the spelling of the linker option.
   1004     if (Mod->LinkLibraries[I-1].IsFramework) {
   1005       llvm::Metadata *Args[2] = {
   1006           llvm::MDString::get(Context, "-framework"),
   1007           llvm::MDString::get(Context, Mod->LinkLibraries[I - 1].Library)};
   1008 
   1009       Metadata.push_back(llvm::MDNode::get(Context, Args));
   1010       continue;
   1011     }
   1012 
   1013     // Link against a library.
   1014     llvm::SmallString<24> Opt;
   1015     CGM.getTargetCodeGenInfo().getDependentLibraryOption(
   1016       Mod->LinkLibraries[I-1].Library, Opt);
   1017     auto *OptString = llvm::MDString::get(Context, Opt);
   1018     Metadata.push_back(llvm::MDNode::get(Context, OptString));
   1019   }
   1020 }
   1021 
   1022 void CodeGenModule::EmitModuleLinkOptions() {
   1023   // Collect the set of all of the modules we want to visit to emit link
   1024   // options, which is essentially the imported modules and all of their
   1025   // non-explicit child modules.
   1026   llvm::SetVector<clang::Module *> LinkModules;
   1027   llvm::SmallPtrSet<clang::Module *, 16> Visited;
   1028   SmallVector<clang::Module *, 16> Stack;
   1029 
   1030   // Seed the stack with imported modules.
   1031   for (llvm::SetVector<clang::Module *>::iterator M = ImportedModules.begin(),
   1032                                                MEnd = ImportedModules.end();
   1033        M != MEnd; ++M) {
   1034     if (Visited.insert(*M).second)
   1035       Stack.push_back(*M);
   1036   }
   1037 
   1038   // Find all of the modules to import, making a little effort to prune
   1039   // non-leaf modules.
   1040   while (!Stack.empty()) {
   1041     clang::Module *Mod = Stack.pop_back_val();
   1042 
   1043     bool AnyChildren = false;
   1044 
   1045     // Visit the submodules of this module.
   1046     for (clang::Module::submodule_iterator Sub = Mod->submodule_begin(),
   1047                                         SubEnd = Mod->submodule_end();
   1048          Sub != SubEnd; ++Sub) {
   1049       // Skip explicit children; they need to be explicitly imported to be
   1050       // linked against.
   1051       if ((*Sub)->IsExplicit)
   1052         continue;
   1053 
   1054       if (Visited.insert(*Sub).second) {
   1055         Stack.push_back(*Sub);
   1056         AnyChildren = true;
   1057       }
   1058     }
   1059 
   1060     // We didn't find any children, so add this module to the list of
   1061     // modules to link against.
   1062     if (!AnyChildren) {
   1063       LinkModules.insert(Mod);
   1064     }
   1065   }
   1066 
   1067   // Add link options for all of the imported modules in reverse topological
   1068   // order.  We don't do anything to try to order import link flags with respect
   1069   // to linker options inserted by things like #pragma comment().
   1070   SmallVector<llvm::Metadata *, 16> MetadataArgs;
   1071   Visited.clear();
   1072   for (llvm::SetVector<clang::Module *>::iterator M = LinkModules.begin(),
   1073                                                MEnd = LinkModules.end();
   1074        M != MEnd; ++M) {
   1075     if (Visited.insert(*M).second)
   1076       addLinkOptionsPostorder(*this, *M, MetadataArgs, Visited);
   1077   }
   1078   std::reverse(MetadataArgs.begin(), MetadataArgs.end());
   1079   LinkerOptionsMetadata.append(MetadataArgs.begin(), MetadataArgs.end());
   1080 
   1081   // Add the linker options metadata flag.
   1082   getModule().addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
   1083                             llvm::MDNode::get(getLLVMContext(),
   1084                                               LinkerOptionsMetadata));
   1085 }
   1086 
   1087 void CodeGenModule::EmitDeferred() {
   1088   // Emit code for any potentially referenced deferred decls.  Since a
   1089   // previously unused static decl may become used during the generation of code
   1090   // for a static function, iterate until no changes are made.
   1091 
   1092   if (!DeferredVTables.empty()) {
   1093     EmitDeferredVTables();
   1094 
   1095     // Emitting a v-table doesn't directly cause more v-tables to
   1096     // become deferred, although it can cause functions to be
   1097     // emitted that then need those v-tables.
   1098     assert(DeferredVTables.empty());
   1099   }
   1100 
   1101   // Stop if we're out of both deferred v-tables and deferred declarations.
   1102   if (DeferredDeclsToEmit.empty())
   1103     return;
   1104 
   1105   // Grab the list of decls to emit. If EmitGlobalDefinition schedules more
   1106   // work, it will not interfere with this.
   1107   std::vector<DeferredGlobal> CurDeclsToEmit;
   1108   CurDeclsToEmit.swap(DeferredDeclsToEmit);
   1109 
   1110   for (DeferredGlobal &G : CurDeclsToEmit) {
   1111     GlobalDecl D = G.GD;
   1112     llvm::GlobalValue *GV = G.GV;
   1113     G.GV = nullptr;
   1114 
   1115     assert(!GV || GV == GetGlobalValue(getMangledName(D)));
   1116     if (!GV)
   1117       GV = GetGlobalValue(getMangledName(D));
   1118 
   1119     // Check to see if we've already emitted this.  This is necessary
   1120     // for a couple of reasons: first, decls can end up in the
   1121     // deferred-decls queue multiple times, and second, decls can end
   1122     // up with definitions in unusual ways (e.g. by an extern inline
   1123     // function acquiring a strong function redefinition).  Just
   1124     // ignore these cases.
   1125     if (GV && !GV->isDeclaration())
   1126       continue;
   1127 
   1128     // Otherwise, emit the definition and move on to the next one.
   1129     EmitGlobalDefinition(D, GV);
   1130 
   1131     // If we found out that we need to emit more decls, do that recursively.
   1132     // This has the advantage that the decls are emitted in a DFS and related
   1133     // ones are close together, which is convenient for testing.
   1134     if (!DeferredVTables.empty() || !DeferredDeclsToEmit.empty()) {
   1135       EmitDeferred();
   1136       assert(DeferredVTables.empty() && DeferredDeclsToEmit.empty());
   1137     }
   1138   }
   1139 }
   1140 
   1141 void CodeGenModule::EmitGlobalAnnotations() {
   1142   if (Annotations.empty())
   1143     return;
   1144 
   1145   // Create a new global variable for the ConstantStruct in the Module.
   1146   llvm::Constant *Array = llvm::ConstantArray::get(llvm::ArrayType::get(
   1147     Annotations[0]->getType(), Annotations.size()), Annotations);
   1148   auto *gv = new llvm::GlobalVariable(getModule(), Array->getType(), false,
   1149                                       llvm::GlobalValue::AppendingLinkage,
   1150                                       Array, "llvm.global.annotations");
   1151   gv->setSection(AnnotationSection);
   1152 }
   1153 
   1154 llvm::Constant *CodeGenModule::EmitAnnotationString(StringRef Str) {
   1155   llvm::Constant *&AStr = AnnotationStrings[Str];
   1156   if (AStr)
   1157     return AStr;
   1158 
   1159   // Not found yet, create a new global.
   1160   llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str);
   1161   auto *gv =
   1162       new llvm::GlobalVariable(getModule(), s->getType(), true,
   1163                                llvm::GlobalValue::PrivateLinkage, s, ".str");
   1164   gv->setSection(AnnotationSection);
   1165   gv->setUnnamedAddr(true);
   1166   AStr = gv;
   1167   return gv;
   1168 }
   1169 
   1170 llvm::Constant *CodeGenModule::EmitAnnotationUnit(SourceLocation Loc) {
   1171   SourceManager &SM = getContext().getSourceManager();
   1172   PresumedLoc PLoc = SM.getPresumedLoc(Loc);
   1173   if (PLoc.isValid())
   1174     return EmitAnnotationString(PLoc.getFilename());
   1175   return EmitAnnotationString(SM.getBufferName(Loc));
   1176 }
   1177 
   1178 llvm::Constant *CodeGenModule::EmitAnnotationLineNo(SourceLocation L) {
   1179   SourceManager &SM = getContext().getSourceManager();
   1180   PresumedLoc PLoc = SM.getPresumedLoc(L);
   1181   unsigned LineNo = PLoc.isValid() ? PLoc.getLine() :
   1182     SM.getExpansionLineNumber(L);
   1183   return llvm::ConstantInt::get(Int32Ty, LineNo);
   1184 }
   1185 
   1186 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
   1187                                                 const AnnotateAttr *AA,
   1188                                                 SourceLocation L) {
   1189   // Get the globals for file name, annotation, and the line number.
   1190   llvm::Constant *AnnoGV = EmitAnnotationString(AA->getAnnotation()),
   1191                  *UnitGV = EmitAnnotationUnit(L),
   1192                  *LineNoCst = EmitAnnotationLineNo(L);
   1193 
   1194   // Create the ConstantStruct for the global annotation.
   1195   llvm::Constant *Fields[4] = {
   1196     llvm::ConstantExpr::getBitCast(GV, Int8PtrTy),
   1197     llvm::ConstantExpr::getBitCast(AnnoGV, Int8PtrTy),
   1198     llvm::ConstantExpr::getBitCast(UnitGV, Int8PtrTy),
   1199     LineNoCst
   1200   };
   1201   return llvm::ConstantStruct::getAnon(Fields);
   1202 }
   1203 
   1204 void CodeGenModule::AddGlobalAnnotations(const ValueDecl *D,
   1205                                          llvm::GlobalValue *GV) {
   1206   assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute");
   1207   // Get the struct elements for these annotations.
   1208   for (const auto *I : D->specific_attrs<AnnotateAttr>())
   1209     Annotations.push_back(EmitAnnotateAttr(GV, I, D->getLocation()));
   1210 }
   1211 
   1212 bool CodeGenModule::isInSanitizerBlacklist(llvm::Function *Fn,
   1213                                            SourceLocation Loc) const {
   1214   const auto &SanitizerBL = getContext().getSanitizerBlacklist();
   1215   // Blacklist by function name.
   1216   if (SanitizerBL.isBlacklistedFunction(Fn->getName()))
   1217     return true;
   1218   // Blacklist by location.
   1219   if (!Loc.isInvalid())
   1220     return SanitizerBL.isBlacklistedLocation(Loc);
   1221   // If location is unknown, this may be a compiler-generated function. Assume
   1222   // it's located in the main file.
   1223   auto &SM = Context.getSourceManager();
   1224   if (const auto *MainFile = SM.getFileEntryForID(SM.getMainFileID())) {
   1225     return SanitizerBL.isBlacklistedFile(MainFile->getName());
   1226   }
   1227   return false;
   1228 }
   1229 
   1230 bool CodeGenModule::isInSanitizerBlacklist(llvm::GlobalVariable *GV,
   1231                                            SourceLocation Loc, QualType Ty,
   1232                                            StringRef Category) const {
   1233   // For now globals can be blacklisted only in ASan.
   1234   if (!LangOpts.Sanitize.has(SanitizerKind::Address))
   1235     return false;
   1236   const auto &SanitizerBL = getContext().getSanitizerBlacklist();
   1237   if (SanitizerBL.isBlacklistedGlobal(GV->getName(), Category))
   1238     return true;
   1239   if (SanitizerBL.isBlacklistedLocation(Loc, Category))
   1240     return true;
   1241   // Check global type.
   1242   if (!Ty.isNull()) {
   1243     // Drill down the array types: if global variable of a fixed type is
   1244     // blacklisted, we also don't instrument arrays of them.
   1245     while (auto AT = dyn_cast<ArrayType>(Ty.getTypePtr()))
   1246       Ty = AT->getElementType();
   1247     Ty = Ty.getCanonicalType().getUnqualifiedType();
   1248     // We allow to blacklist only record types (classes, structs etc.)
   1249     if (Ty->isRecordType()) {
   1250       std::string TypeStr = Ty.getAsString(getContext().getPrintingPolicy());
   1251       if (SanitizerBL.isBlacklistedType(TypeStr, Category))
   1252         return true;
   1253     }
   1254   }
   1255   return false;
   1256 }
   1257 
   1258 bool CodeGenModule::MustBeEmitted(const ValueDecl *Global) {
   1259   // Never defer when EmitAllDecls is specified.
   1260   if (LangOpts.EmitAllDecls)
   1261     return true;
   1262 
   1263   return getContext().DeclMustBeEmitted(Global);
   1264 }
   1265 
   1266 bool CodeGenModule::MayBeEmittedEagerly(const ValueDecl *Global) {
   1267   if (const auto *FD = dyn_cast<FunctionDecl>(Global))
   1268     if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
   1269       // Implicit template instantiations may change linkage if they are later
   1270       // explicitly instantiated, so they should not be emitted eagerly.
   1271       return false;
   1272 
   1273   return true;
   1274 }
   1275 
   1276 llvm::Constant *CodeGenModule::GetAddrOfUuidDescriptor(
   1277     const CXXUuidofExpr* E) {
   1278   // Sema has verified that IIDSource has a __declspec(uuid()), and that its
   1279   // well-formed.
   1280   StringRef Uuid = E->getUuidAsStringRef(Context);
   1281   std::string Name = "_GUID_" + Uuid.lower();
   1282   std::replace(Name.begin(), Name.end(), '-', '_');
   1283 
   1284   // Look for an existing global.
   1285   if (llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name))
   1286     return GV;
   1287 
   1288   llvm::Constant *Init = EmitUuidofInitializer(Uuid);
   1289   assert(Init && "failed to initialize as constant");
   1290 
   1291   auto *GV = new llvm::GlobalVariable(
   1292       getModule(), Init->getType(),
   1293       /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
   1294   if (supportsCOMDAT())
   1295     GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
   1296   return GV;
   1297 }
   1298 
   1299 llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
   1300   const AliasAttr *AA = VD->getAttr<AliasAttr>();
   1301   assert(AA && "No alias?");
   1302 
   1303   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
   1304 
   1305   // See if there is already something with the target's name in the module.
   1306   llvm::GlobalValue *Entry = GetGlobalValue(AA->getAliasee());
   1307   if (Entry) {
   1308     unsigned AS = getContext().getTargetAddressSpace(VD->getType());
   1309     return llvm::ConstantExpr::getBitCast(Entry, DeclTy->getPointerTo(AS));
   1310   }
   1311 
   1312   llvm::Constant *Aliasee;
   1313   if (isa<llvm::FunctionType>(DeclTy))
   1314     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy,
   1315                                       GlobalDecl(cast<FunctionDecl>(VD)),
   1316                                       /*ForVTable=*/false);
   1317   else
   1318     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
   1319                                     llvm::PointerType::getUnqual(DeclTy),
   1320                                     nullptr);
   1321 
   1322   auto *F = cast<llvm::GlobalValue>(Aliasee);
   1323   F->setLinkage(llvm::Function::ExternalWeakLinkage);
   1324   WeakRefReferences.insert(F);
   1325 
   1326   return Aliasee;
   1327 }
   1328 
   1329 void CodeGenModule::EmitGlobal(GlobalDecl GD) {
   1330   const auto *Global = cast<ValueDecl>(GD.getDecl());
   1331 
   1332   // Weak references don't produce any output by themselves.
   1333   if (Global->hasAttr<WeakRefAttr>())
   1334     return;
   1335 
   1336   // If this is an alias definition (which otherwise looks like a declaration)
   1337   // emit it now.
   1338   if (Global->hasAttr<AliasAttr>())
   1339     return EmitAliasDefinition(GD);
   1340 
   1341   // If this is CUDA, be selective about which declarations we emit.
   1342   if (LangOpts.CUDA) {
   1343     if (LangOpts.CUDAIsDevice) {
   1344       if (!Global->hasAttr<CUDADeviceAttr>() &&
   1345           !Global->hasAttr<CUDAGlobalAttr>() &&
   1346           !Global->hasAttr<CUDAConstantAttr>() &&
   1347           !Global->hasAttr<CUDASharedAttr>())
   1348         return;
   1349     } else {
   1350       if (!Global->hasAttr<CUDAHostAttr>() && (
   1351             Global->hasAttr<CUDADeviceAttr>() ||
   1352             Global->hasAttr<CUDAConstantAttr>() ||
   1353             Global->hasAttr<CUDASharedAttr>()))
   1354         return;
   1355     }
   1356   }
   1357 
   1358   // Ignore declarations, they will be emitted on their first use.
   1359   if (const auto *FD = dyn_cast<FunctionDecl>(Global)) {
   1360     // Forward declarations are emitted lazily on first use.
   1361     if (!FD->doesThisDeclarationHaveABody()) {
   1362       if (!FD->doesDeclarationForceExternallyVisibleDefinition())
   1363         return;
   1364 
   1365       StringRef MangledName = getMangledName(GD);
   1366 
   1367       // Compute the function info and LLVM type.
   1368       const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD);
   1369       llvm::Type *Ty = getTypes().GetFunctionType(FI);
   1370 
   1371       GetOrCreateLLVMFunction(MangledName, Ty, GD, /*ForVTable=*/false,
   1372                               /*DontDefer=*/false);
   1373       return;
   1374     }
   1375   } else {
   1376     const auto *VD = cast<VarDecl>(Global);
   1377     assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
   1378 
   1379     if (VD->isThisDeclarationADefinition() != VarDecl::Definition &&
   1380         !Context.isMSStaticDataMemberInlineDefinition(VD))
   1381       return;
   1382   }
   1383 
   1384   // Defer code generation to first use when possible, e.g. if this is an inline
   1385   // function. If the global must always be emitted, do it eagerly if possible
   1386   // to benefit from cache locality.
   1387   if (MustBeEmitted(Global) && MayBeEmittedEagerly(Global)) {
   1388     // Emit the definition if it can't be deferred.
   1389     EmitGlobalDefinition(GD);
   1390     return;
   1391   }
   1392 
   1393   // If we're deferring emission of a C++ variable with an
   1394   // initializer, remember the order in which it appeared in the file.
   1395   if (getLangOpts().CPlusPlus && isa<VarDecl>(Global) &&
   1396       cast<VarDecl>(Global)->hasInit()) {
   1397     DelayedCXXInitPosition[Global] = CXXGlobalInits.size();
   1398     CXXGlobalInits.push_back(nullptr);
   1399   }
   1400 
   1401   StringRef MangledName = getMangledName(GD);
   1402   if (llvm::GlobalValue *GV = GetGlobalValue(MangledName)) {
   1403     // The value has already been used and should therefore be emitted.
   1404     addDeferredDeclToEmit(GV, GD);
   1405   } else if (MustBeEmitted(Global)) {
   1406     // The value must be emitted, but cannot be emitted eagerly.
   1407     assert(!MayBeEmittedEagerly(Global));
   1408     addDeferredDeclToEmit(/*GV=*/nullptr, GD);
   1409   } else {
   1410     // Otherwise, remember that we saw a deferred decl with this name.  The
   1411     // first use of the mangled name will cause it to move into
   1412     // DeferredDeclsToEmit.
   1413     DeferredDecls[MangledName] = GD;
   1414   }
   1415 }
   1416 
   1417 namespace {
   1418   struct FunctionIsDirectlyRecursive :
   1419     public RecursiveASTVisitor<FunctionIsDirectlyRecursive> {
   1420     const StringRef Name;
   1421     const Builtin::Context &BI;
   1422     bool Result;
   1423     FunctionIsDirectlyRecursive(StringRef N, const Builtin::Context &C) :
   1424       Name(N), BI(C), Result(false) {
   1425     }
   1426     typedef RecursiveASTVisitor<FunctionIsDirectlyRecursive> Base;
   1427 
   1428     bool TraverseCallExpr(CallExpr *E) {
   1429       const FunctionDecl *FD = E->getDirectCallee();
   1430       if (!FD)
   1431         return true;
   1432       AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
   1433       if (Attr && Name == Attr->getLabel()) {
   1434         Result = true;
   1435         return false;
   1436       }
   1437       unsigned BuiltinID = FD->getBuiltinID();
   1438       if (!BuiltinID)
   1439         return true;
   1440       StringRef BuiltinName = BI.GetName(BuiltinID);
   1441       if (BuiltinName.startswith("__builtin_") &&
   1442           Name == BuiltinName.slice(strlen("__builtin_"), StringRef::npos)) {
   1443         Result = true;
   1444         return false;
   1445       }
   1446       return true;
   1447     }
   1448   };
   1449 }
   1450 
   1451 // isTriviallyRecursive - Check if this function calls another
   1452 // decl that, because of the asm attribute or the other decl being a builtin,
   1453 // ends up pointing to itself.
   1454 bool
   1455 CodeGenModule::isTriviallyRecursive(const FunctionDecl *FD) {
   1456   StringRef Name;
   1457   if (getCXXABI().getMangleContext().shouldMangleDeclName(FD)) {
   1458     // asm labels are a special kind of mangling we have to support.
   1459     AsmLabelAttr *Attr = FD->getAttr<AsmLabelAttr>();
   1460     if (!Attr)
   1461       return false;
   1462     Name = Attr->getLabel();
   1463   } else {
   1464     Name = FD->getName();
   1465   }
   1466 
   1467   FunctionIsDirectlyRecursive Walker(Name, Context.BuiltinInfo);
   1468   Walker.TraverseFunctionDecl(const_cast<FunctionDecl*>(FD));
   1469   return Walker.Result;
   1470 }
   1471 
   1472 bool
   1473 CodeGenModule::shouldEmitFunction(GlobalDecl GD) {
   1474   if (getFunctionLinkage(GD) != llvm::Function::AvailableExternallyLinkage)
   1475     return true;
   1476   const auto *F = cast<FunctionDecl>(GD.getDecl());
   1477   if (CodeGenOpts.OptimizationLevel == 0 && !F->hasAttr<AlwaysInlineAttr>())
   1478     return false;
   1479   // PR9614. Avoid cases where the source code is lying to us. An available
   1480   // externally function should have an equivalent function somewhere else,
   1481   // but a function that calls itself is clearly not equivalent to the real
   1482   // implementation.
   1483   // This happens in glibc's btowc and in some configure checks.
   1484   return !isTriviallyRecursive(F);
   1485 }
   1486 
   1487 /// If the type for the method's class was generated by
   1488 /// CGDebugInfo::createContextChain(), the cache contains only a
   1489 /// limited DIType without any declarations. Since EmitFunctionStart()
   1490 /// needs to find the canonical declaration for each method, we need
   1491 /// to construct the complete type prior to emitting the method.
   1492 void CodeGenModule::CompleteDIClassType(const CXXMethodDecl* D) {
   1493   if (!D->isInstance())
   1494     return;
   1495 
   1496   if (CGDebugInfo *DI = getModuleDebugInfo())
   1497     if (getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo) {
   1498       const auto *ThisPtr = cast<PointerType>(D->getThisType(getContext()));
   1499       DI->getOrCreateRecordType(ThisPtr->getPointeeType(), D->getLocation());
   1500     }
   1501 }
   1502 
   1503 void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD, llvm::GlobalValue *GV) {
   1504   const auto *D = cast<ValueDecl>(GD.getDecl());
   1505 
   1506   PrettyStackTraceDecl CrashInfo(const_cast<ValueDecl *>(D), D->getLocation(),
   1507                                  Context.getSourceManager(),
   1508                                  "Generating code for declaration");
   1509 
   1510   if (isa<FunctionDecl>(D)) {
   1511     // At -O0, don't generate IR for functions with available_externally
   1512     // linkage.
   1513     if (!shouldEmitFunction(GD))
   1514       return;
   1515 
   1516     if (const auto *Method = dyn_cast<CXXMethodDecl>(D)) {
   1517       CompleteDIClassType(Method);
   1518       // Make sure to emit the definition(s) before we emit the thunks.
   1519       // This is necessary for the generation of certain thunks.
   1520       if (const auto *CD = dyn_cast<CXXConstructorDecl>(Method))
   1521         ABI->emitCXXStructor(CD, getFromCtorType(GD.getCtorType()));
   1522       else if (const auto *DD = dyn_cast<CXXDestructorDecl>(Method))
   1523         ABI->emitCXXStructor(DD, getFromDtorType(GD.getDtorType()));
   1524       else
   1525         EmitGlobalFunctionDefinition(GD, GV);
   1526 
   1527       if (Method->isVirtual())
   1528         getVTables().EmitThunks(GD);
   1529 
   1530       return;
   1531     }
   1532 
   1533     return EmitGlobalFunctionDefinition(GD, GV);
   1534   }
   1535 
   1536   if (const auto *VD = dyn_cast<VarDecl>(D))
   1537     return EmitGlobalVarDefinition(VD);
   1538 
   1539   llvm_unreachable("Invalid argument to EmitGlobalDefinition()");
   1540 }
   1541 
   1542 /// GetOrCreateLLVMFunction - If the specified mangled name is not in the
   1543 /// module, create and return an llvm Function with the specified type. If there
   1544 /// is something in the module with the specified name, return it potentially
   1545 /// bitcasted to the right type.
   1546 ///
   1547 /// If D is non-null, it specifies a decl that correspond to this.  This is used
   1548 /// to set the attributes on the function when it is first created.
   1549 llvm::Constant *
   1550 CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
   1551                                        llvm::Type *Ty,
   1552                                        GlobalDecl GD, bool ForVTable,
   1553                                        bool DontDefer, bool IsThunk,
   1554                                        llvm::AttributeSet ExtraAttrs) {
   1555   const Decl *D = GD.getDecl();
   1556 
   1557   // Lookup the entry, lazily creating it if necessary.
   1558   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
   1559   if (Entry) {
   1560     if (WeakRefReferences.erase(Entry)) {
   1561       const FunctionDecl *FD = cast_or_null<FunctionDecl>(D);
   1562       if (FD && !FD->hasAttr<WeakAttr>())
   1563         Entry->setLinkage(llvm::Function::ExternalLinkage);
   1564     }
   1565 
   1566     // Handle dropped DLL attributes.
   1567     if (D && !D->hasAttr<DLLImportAttr>() && !D->hasAttr<DLLExportAttr>())
   1568       Entry->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
   1569 
   1570     if (Entry->getType()->getElementType() == Ty)
   1571       return Entry;
   1572 
   1573     // Make sure the result is of the correct type.
   1574     return llvm::ConstantExpr::getBitCast(Entry, Ty->getPointerTo());
   1575   }
   1576 
   1577   // This function doesn't have a complete type (for example, the return
   1578   // type is an incomplete struct). Use a fake type instead, and make
   1579   // sure not to try to set attributes.
   1580   bool IsIncompleteFunction = false;
   1581 
   1582   llvm::FunctionType *FTy;
   1583   if (isa<llvm::FunctionType>(Ty)) {
   1584     FTy = cast<llvm::FunctionType>(Ty);
   1585   } else {
   1586     FTy = llvm::FunctionType::get(VoidTy, false);
   1587     IsIncompleteFunction = true;
   1588   }
   1589 
   1590   llvm::Function *F = llvm::Function::Create(FTy,
   1591                                              llvm::Function::ExternalLinkage,
   1592                                              MangledName, &getModule());
   1593   assert(F->getName() == MangledName && "name was uniqued!");
   1594   if (D)
   1595     SetFunctionAttributes(GD, F, IsIncompleteFunction, IsThunk);
   1596   if (ExtraAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex)) {
   1597     llvm::AttrBuilder B(ExtraAttrs, llvm::AttributeSet::FunctionIndex);
   1598     F->addAttributes(llvm::AttributeSet::FunctionIndex,
   1599                      llvm::AttributeSet::get(VMContext,
   1600                                              llvm::AttributeSet::FunctionIndex,
   1601                                              B));
   1602   }
   1603 
   1604   if (!DontDefer) {
   1605     // All MSVC dtors other than the base dtor are linkonce_odr and delegate to
   1606     // each other bottoming out with the base dtor.  Therefore we emit non-base
   1607     // dtors on usage, even if there is no dtor definition in the TU.
   1608     if (D && isa<CXXDestructorDecl>(D) &&
   1609         getCXXABI().useThunkForDtorVariant(cast<CXXDestructorDecl>(D),
   1610                                            GD.getDtorType()))
   1611       addDeferredDeclToEmit(F, GD);
   1612 
   1613     // This is the first use or definition of a mangled name.  If there is a
   1614     // deferred decl with this name, remember that we need to emit it at the end
   1615     // of the file.
   1616     auto DDI = DeferredDecls.find(MangledName);
   1617     if (DDI != DeferredDecls.end()) {
   1618       // Move the potentially referenced deferred decl to the
   1619       // DeferredDeclsToEmit list, and remove it from DeferredDecls (since we
   1620       // don't need it anymore).
   1621       addDeferredDeclToEmit(F, DDI->second);
   1622       DeferredDecls.erase(DDI);
   1623 
   1624       // Otherwise, there are cases we have to worry about where we're
   1625       // using a declaration for which we must emit a definition but where
   1626       // we might not find a top-level definition:
   1627       //   - member functions defined inline in their classes
   1628       //   - friend functions defined inline in some class
   1629       //   - special member functions with implicit definitions
   1630       // If we ever change our AST traversal to walk into class methods,
   1631       // this will be unnecessary.
   1632       //
   1633       // We also don't emit a definition for a function if it's going to be an
   1634       // entry in a vtable, unless it's already marked as used.
   1635     } else if (getLangOpts().CPlusPlus && D) {
   1636       // Look for a declaration that's lexically in a record.
   1637       for (const auto *FD = cast<FunctionDecl>(D)->getMostRecentDecl(); FD;
   1638            FD = FD->getPreviousDecl()) {
   1639         if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {
   1640           if (FD->doesThisDeclarationHaveABody()) {
   1641             addDeferredDeclToEmit(F, GD.getWithDecl(FD));
   1642             break;
   1643           }
   1644         }
   1645       }
   1646     }
   1647   }
   1648 
   1649   // Make sure the result is of the requested type.
   1650   if (!IsIncompleteFunction) {
   1651     assert(F->getType()->getElementType() == Ty);
   1652     return F;
   1653   }
   1654 
   1655   llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
   1656   return llvm::ConstantExpr::getBitCast(F, PTy);
   1657 }
   1658 
   1659 /// GetAddrOfFunction - Return the address of the given function.  If Ty is
   1660 /// non-null, then this function will use the specified type if it has to
   1661 /// create it (this occurs when we see a definition of the function).
   1662 llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
   1663                                                  llvm::Type *Ty,
   1664                                                  bool ForVTable,
   1665                                                  bool DontDefer) {
   1666   // If there was no specific requested type, just convert it now.
   1667   if (!Ty)
   1668     Ty = getTypes().ConvertType(cast<ValueDecl>(GD.getDecl())->getType());
   1669 
   1670   StringRef MangledName = getMangledName(GD);
   1671   return GetOrCreateLLVMFunction(MangledName, Ty, GD, ForVTable, DontDefer);
   1672 }
   1673 
   1674 /// CreateRuntimeFunction - Create a new runtime function with the specified
   1675 /// type and name.
   1676 llvm::Constant *
   1677 CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy,
   1678                                      StringRef Name,
   1679                                      llvm::AttributeSet ExtraAttrs) {
   1680   llvm::Constant *C =
   1681       GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
   1682                               /*DontDefer=*/false, /*IsThunk=*/false, ExtraAttrs);
   1683   if (auto *F = dyn_cast<llvm::Function>(C))
   1684     if (F->empty())
   1685       F->setCallingConv(getRuntimeCC());
   1686   return C;
   1687 }
   1688 
   1689 /// CreateBuiltinFunction - Create a new builtin function with the specified
   1690 /// type and name.
   1691 llvm::Constant *
   1692 CodeGenModule::CreateBuiltinFunction(llvm::FunctionType *FTy,
   1693                                      StringRef Name,
   1694                                      llvm::AttributeSet ExtraAttrs) {
   1695   llvm::Constant *C =
   1696       GetOrCreateLLVMFunction(Name, FTy, GlobalDecl(), /*ForVTable=*/false,
   1697                               /*DontDefer=*/false, /*IsThunk=*/false, ExtraAttrs);
   1698   if (auto *F = dyn_cast<llvm::Function>(C))
   1699     if (F->empty())
   1700       F->setCallingConv(getBuiltinCC());
   1701   return C;
   1702 }
   1703 
   1704 /// isTypeConstant - Determine whether an object of this type can be emitted
   1705 /// as a constant.
   1706 ///
   1707 /// If ExcludeCtor is true, the duration when the object's constructor runs
   1708 /// will not be considered. The caller will need to verify that the object is
   1709 /// not written to during its construction.
   1710 bool CodeGenModule::isTypeConstant(QualType Ty, bool ExcludeCtor) {
   1711   if (!Ty.isConstant(Context) && !Ty->isReferenceType())
   1712     return false;
   1713 
   1714   if (Context.getLangOpts().CPlusPlus) {
   1715     if (const CXXRecordDecl *Record
   1716           = Context.getBaseElementType(Ty)->getAsCXXRecordDecl())
   1717       return ExcludeCtor && !Record->hasMutableFields() &&
   1718              Record->hasTrivialDestructor();
   1719   }
   1720 
   1721   return true;
   1722 }
   1723 
   1724 /// GetOrCreateLLVMGlobal - If the specified mangled name is not in the module,
   1725 /// create and return an llvm GlobalVariable with the specified type.  If there
   1726 /// is something in the module with the specified name, return it potentially
   1727 /// bitcasted to the right type.
   1728 ///
   1729 /// If D is non-null, it specifies a decl that correspond to this.  This is used
   1730 /// to set the attributes on the global when it is first created.
   1731 llvm::Constant *
   1732 CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
   1733                                      llvm::PointerType *Ty,
   1734                                      const VarDecl *D) {
   1735   // Lookup the entry, lazily creating it if necessary.
   1736   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
   1737   if (Entry) {
   1738     if (WeakRefReferences.erase(Entry)) {
   1739       if (D && !D->hasAttr<WeakAttr>())
   1740         Entry->setLinkage(llvm::Function::ExternalLinkage);
   1741     }
   1742 
   1743     // Handle dropped DLL attributes.
   1744     if (D && !D->hasAttr<DLLImportAttr>() && !D->hasAttr<DLLExportAttr>())
   1745       Entry->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
   1746 
   1747     if (Entry->getType() == Ty)
   1748       return Entry;
   1749 
   1750     // Make sure the result is of the correct type.
   1751     if (Entry->getType()->getAddressSpace() != Ty->getAddressSpace())
   1752       return llvm::ConstantExpr::getAddrSpaceCast(Entry, Ty);
   1753 
   1754     return llvm::ConstantExpr::getBitCast(Entry, Ty);
   1755   }
   1756 
   1757   unsigned AddrSpace = GetGlobalVarAddressSpace(D, Ty->getAddressSpace());
   1758   auto *GV = new llvm::GlobalVariable(
   1759       getModule(), Ty->getElementType(), false,
   1760       llvm::GlobalValue::ExternalLinkage, nullptr, MangledName, nullptr,
   1761       llvm::GlobalVariable::NotThreadLocal, AddrSpace);
   1762 
   1763   // This is the first use or definition of a mangled name.  If there is a
   1764   // deferred decl with this name, remember that we need to emit it at the end
   1765   // of the file.
   1766   auto DDI = DeferredDecls.find(MangledName);
   1767   if (DDI != DeferredDecls.end()) {
   1768     // Move the potentially referenced deferred decl to the DeferredDeclsToEmit
   1769     // list, and remove it from DeferredDecls (since we don't need it anymore).
   1770     addDeferredDeclToEmit(GV, DDI->second);
   1771     DeferredDecls.erase(DDI);
   1772   }
   1773 
   1774   // Handle things which are present even on external declarations.
   1775   if (D) {
   1776     // FIXME: This code is overly simple and should be merged with other global
   1777     // handling.
   1778     GV->setConstant(isTypeConstant(D->getType(), false));
   1779 
   1780     setLinkageAndVisibilityForGV(GV, D);
   1781 
   1782     if (D->getTLSKind()) {
   1783       if (D->getTLSKind() == VarDecl::TLS_Dynamic)
   1784         CXXThreadLocals.push_back(std::make_pair(D, GV));
   1785       setTLSMode(GV, *D);
   1786     }
   1787 
   1788     // If required by the ABI, treat declarations of static data members with
   1789     // inline initializers as definitions.
   1790     if (getContext().isMSStaticDataMemberInlineDefinition(D)) {
   1791       EmitGlobalVarDefinition(D);
   1792     }
   1793 
   1794     // Handle XCore specific ABI requirements.
   1795     if (getTarget().getTriple().getArch() == llvm::Triple::xcore &&
   1796         D->getLanguageLinkage() == CLanguageLinkage &&
   1797         D->getType().isConstant(Context) &&
   1798         isExternallyVisible(D->getLinkageAndVisibility().getLinkage()))
   1799       GV->setSection(".cp.rodata");
   1800   }
   1801 
   1802   if (AddrSpace != Ty->getAddressSpace())
   1803     return llvm::ConstantExpr::getAddrSpaceCast(GV, Ty);
   1804 
   1805   return GV;
   1806 }
   1807 
   1808 
   1809 llvm::GlobalVariable *
   1810 CodeGenModule::CreateOrReplaceCXXRuntimeVariable(StringRef Name,
   1811                                       llvm::Type *Ty,
   1812                                       llvm::GlobalValue::LinkageTypes Linkage) {
   1813   llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name);
   1814   llvm::GlobalVariable *OldGV = nullptr;
   1815 
   1816   if (GV) {
   1817     // Check if the variable has the right type.
   1818     if (GV->getType()->getElementType() == Ty)
   1819       return GV;
   1820 
   1821     // Because C++ name mangling, the only way we can end up with an already
   1822     // existing global with the same name is if it has been declared extern "C".
   1823     assert(GV->isDeclaration() && "Declaration has wrong type!");
   1824     OldGV = GV;
   1825   }
   1826 
   1827   // Create a new variable.
   1828   GV = new llvm::GlobalVariable(getModule(), Ty, /*isConstant=*/true,
   1829                                 Linkage, nullptr, Name);
   1830 
   1831   if (OldGV) {
   1832     // Replace occurrences of the old variable if needed.
   1833     GV->takeName(OldGV);
   1834 
   1835     if (!OldGV->use_empty()) {
   1836       llvm::Constant *NewPtrForOldDecl =
   1837       llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
   1838       OldGV->replaceAllUsesWith(NewPtrForOldDecl);
   1839     }
   1840 
   1841     OldGV->eraseFromParent();
   1842   }
   1843 
   1844   if (supportsCOMDAT() && GV->isWeakForLinker() &&
   1845       !GV->hasAvailableExternallyLinkage())
   1846     GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
   1847 
   1848   return GV;
   1849 }
   1850 
   1851 /// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
   1852 /// given global variable.  If Ty is non-null and if the global doesn't exist,
   1853 /// then it will be created with the specified type instead of whatever the
   1854 /// normal requested type would be.
   1855 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
   1856                                                   llvm::Type *Ty) {
   1857   assert(D->hasGlobalStorage() && "Not a global variable");
   1858   QualType ASTTy = D->getType();
   1859   if (!Ty)
   1860     Ty = getTypes().ConvertTypeForMem(ASTTy);
   1861 
   1862   llvm::PointerType *PTy =
   1863     llvm::PointerType::get(Ty, getContext().getTargetAddressSpace(ASTTy));
   1864 
   1865   StringRef MangledName = getMangledName(D);
   1866   return GetOrCreateLLVMGlobal(MangledName, PTy, D);
   1867 }
   1868 
   1869 /// CreateRuntimeVariable - Create a new runtime global variable with the
   1870 /// specified type and name.
   1871 llvm::Constant *
   1872 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
   1873                                      StringRef Name) {
   1874   return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), nullptr);
   1875 }
   1876 
   1877 void CodeGenModule::EmitTentativeDefinition(const VarDecl *D) {
   1878   assert(!D->getInit() && "Cannot emit definite definitions here!");
   1879 
   1880   if (!MustBeEmitted(D)) {
   1881     // If we have not seen a reference to this variable yet, place it
   1882     // into the deferred declarations table to be emitted if needed
   1883     // later.
   1884     StringRef MangledName = getMangledName(D);
   1885     if (!GetGlobalValue(MangledName)) {
   1886       DeferredDecls[MangledName] = D;
   1887       return;
   1888     }
   1889   }
   1890 
   1891   // The tentative definition is the only definition.
   1892   EmitGlobalVarDefinition(D);
   1893 }
   1894 
   1895 CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) const {
   1896     return Context.toCharUnitsFromBits(
   1897       TheDataLayout.getTypeStoreSizeInBits(Ty));
   1898 }
   1899 
   1900 unsigned CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D,
   1901                                                  unsigned AddrSpace) {
   1902   if (LangOpts.CUDA && LangOpts.CUDAIsDevice) {
   1903     if (D->hasAttr<CUDAConstantAttr>())
   1904       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_constant);
   1905     else if (D->hasAttr<CUDASharedAttr>())
   1906       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_shared);
   1907     else
   1908       AddrSpace = getContext().getTargetAddressSpace(LangAS::cuda_device);
   1909   }
   1910 
   1911   return AddrSpace;
   1912 }
   1913 
   1914 template<typename SomeDecl>
   1915 void CodeGenModule::MaybeHandleStaticInExternC(const SomeDecl *D,
   1916                                                llvm::GlobalValue *GV) {
   1917   if (!getLangOpts().CPlusPlus)
   1918     return;
   1919 
   1920   // Must have 'used' attribute, or else inline assembly can't rely on
   1921   // the name existing.
   1922   if (!D->template hasAttr<UsedAttr>())
   1923     return;
   1924 
   1925   // Must have internal linkage and an ordinary name.
   1926   if (!D->getIdentifier() || D->getFormalLinkage() != InternalLinkage)
   1927     return;
   1928 
   1929   // Must be in an extern "C" context. Entities declared directly within
   1930   // a record are not extern "C" even if the record is in such a context.
   1931   const SomeDecl *First = D->getFirstDecl();
   1932   if (First->getDeclContext()->isRecord() || !First->isInExternCContext())
   1933     return;
   1934 
   1935   // OK, this is an internal linkage entity inside an extern "C" linkage
   1936   // specification. Make a note of that so we can give it the "expected"
   1937   // mangled name if nothing else is using that name.
   1938   std::pair<StaticExternCMap::iterator, bool> R =
   1939       StaticExternCValues.insert(std::make_pair(D->getIdentifier(), GV));
   1940 
   1941   // If we have multiple internal linkage entities with the same name
   1942   // in extern "C" regions, none of them gets that name.
   1943   if (!R.second)
   1944     R.first->second = nullptr;
   1945 }
   1946 
   1947 static bool shouldBeInCOMDAT(CodeGenModule &CGM, const Decl &D) {
   1948   if (!CGM.supportsCOMDAT())
   1949     return false;
   1950 
   1951   if (D.hasAttr<SelectAnyAttr>())
   1952     return true;
   1953 
   1954   GVALinkage Linkage;
   1955   if (auto *VD = dyn_cast<VarDecl>(&D))
   1956     Linkage = CGM.getContext().GetGVALinkageForVariable(VD);
   1957   else
   1958     Linkage = CGM.getContext().GetGVALinkageForFunction(cast<FunctionDecl>(&D));
   1959 
   1960   switch (Linkage) {
   1961   case GVA_Internal:
   1962   case GVA_AvailableExternally:
   1963   case GVA_StrongExternal:
   1964     return false;
   1965   case GVA_DiscardableODR:
   1966   case GVA_StrongODR:
   1967     return true;
   1968   }
   1969   llvm_unreachable("No such linkage");
   1970 }
   1971 
   1972 void CodeGenModule::maybeSetTrivialComdat(const Decl &D,
   1973                                           llvm::GlobalObject &GO) {
   1974   if (!shouldBeInCOMDAT(*this, D))
   1975     return;
   1976   GO.setComdat(TheModule.getOrInsertComdat(GO.getName()));
   1977 }
   1978 
   1979 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
   1980   llvm::Constant *Init = nullptr;
   1981   QualType ASTTy = D->getType();
   1982   CXXRecordDecl *RD = ASTTy->getBaseElementTypeUnsafe()->getAsCXXRecordDecl();
   1983   bool NeedsGlobalCtor = false;
   1984   bool NeedsGlobalDtor = RD && !RD->hasTrivialDestructor();
   1985 
   1986   const VarDecl *InitDecl;
   1987   const Expr *InitExpr = D->getAnyInitializer(InitDecl);
   1988 
   1989   if (!InitExpr) {
   1990     // This is a tentative definition; tentative definitions are
   1991     // implicitly initialized with { 0 }.
   1992     //
   1993     // Note that tentative definitions are only emitted at the end of
   1994     // a translation unit, so they should never have incomplete
   1995     // type. In addition, EmitTentativeDefinition makes sure that we
   1996     // never attempt to emit a tentative definition if a real one
   1997     // exists. A use may still exists, however, so we still may need
   1998     // to do a RAUW.
   1999     assert(!ASTTy->isIncompleteType() && "Unexpected incomplete type");
   2000     Init = EmitNullConstant(D->getType());
   2001   } else {
   2002     initializedGlobalDecl = GlobalDecl(D);
   2003     Init = EmitConstantInit(*InitDecl);
   2004 
   2005     if (!Init) {
   2006       QualType T = InitExpr->getType();
   2007       if (D->getType()->isReferenceType())
   2008         T = D->getType();
   2009 
   2010       if (getLangOpts().CPlusPlus) {
   2011         Init = EmitNullConstant(T);
   2012         NeedsGlobalCtor = true;
   2013       } else {
   2014         ErrorUnsupported(D, "static initializer");
   2015         Init = llvm::UndefValue::get(getTypes().ConvertType(T));
   2016       }
   2017     } else {
   2018       // We don't need an initializer, so remove the entry for the delayed
   2019       // initializer position (just in case this entry was delayed) if we
   2020       // also don't need to register a destructor.
   2021       if (getLangOpts().CPlusPlus && !NeedsGlobalDtor)
   2022         DelayedCXXInitPosition.erase(D);
   2023     }
   2024   }
   2025 
   2026   llvm::Type* InitType = Init->getType();
   2027   llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
   2028 
   2029   // Strip off a bitcast if we got one back.
   2030   if (auto *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
   2031     assert(CE->getOpcode() == llvm::Instruction::BitCast ||
   2032            CE->getOpcode() == llvm::Instruction::AddrSpaceCast ||
   2033            // All zero index gep.
   2034            CE->getOpcode() == llvm::Instruction::GetElementPtr);
   2035     Entry = CE->getOperand(0);
   2036   }
   2037 
   2038   // Entry is now either a Function or GlobalVariable.
   2039   auto *GV = dyn_cast<llvm::GlobalVariable>(Entry);
   2040 
   2041   // We have a definition after a declaration with the wrong type.
   2042   // We must make a new GlobalVariable* and update everything that used OldGV
   2043   // (a declaration or tentative definition) with the new GlobalVariable*
   2044   // (which will be a definition).
   2045   //
   2046   // This happens if there is a prototype for a global (e.g.
   2047   // "extern int x[];") and then a definition of a different type (e.g.
   2048   // "int x[10];"). This also happens when an initializer has a different type
   2049   // from the type of the global (this happens with unions).
   2050   if (!GV ||
   2051       GV->getType()->getElementType() != InitType ||
   2052       GV->getType()->getAddressSpace() !=
   2053        GetGlobalVarAddressSpace(D, getContext().getTargetAddressSpace(ASTTy))) {
   2054 
   2055     // Move the old entry aside so that we'll create a new one.
   2056     Entry->setName(StringRef());
   2057 
   2058     // Make a new global with the correct type, this is now guaranteed to work.
   2059     GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
   2060 
   2061     // Replace all uses of the old global with the new global
   2062     llvm::Constant *NewPtrForOldDecl =
   2063         llvm::ConstantExpr::getBitCast(GV, Entry->getType());
   2064     Entry->replaceAllUsesWith(NewPtrForOldDecl);
   2065 
   2066     // Erase the old global, since it is no longer used.
   2067     cast<llvm::GlobalValue>(Entry)->eraseFromParent();
   2068   }
   2069 
   2070   MaybeHandleStaticInExternC(D, GV);
   2071 
   2072   if (D->hasAttr<AnnotateAttr>())
   2073     AddGlobalAnnotations(D, GV);
   2074 
   2075   GV->setInitializer(Init);
   2076 
   2077   // If it is safe to mark the global 'constant', do so now.
   2078   GV->setConstant(!NeedsGlobalCtor && !NeedsGlobalDtor &&
   2079                   isTypeConstant(D->getType(), true));
   2080 
   2081   // If it is in a read-only section, mark it 'constant'.
   2082   if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {
   2083     const ASTContext::SectionInfo &SI = Context.SectionInfos[SA->getName()];
   2084     if ((SI.SectionFlags & ASTContext::PSF_Write) == 0)
   2085       GV->setConstant(true);
   2086   }
   2087 
   2088   GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
   2089 
   2090   // Set the llvm linkage type as appropriate.
   2091   llvm::GlobalValue::LinkageTypes Linkage =
   2092       getLLVMLinkageVarDefinition(D, GV->isConstant());
   2093 
   2094   // On Darwin, the backing variable for a C++11 thread_local variable always
   2095   // has internal linkage; all accesses should just be calls to the
   2096   // Itanium-specified entry point, which has the normal linkage of the
   2097   // variable.
   2098   if (!D->isStaticLocal() && D->getTLSKind() == VarDecl::TLS_Dynamic &&
   2099       Context.getTargetInfo().getTriple().isMacOSX())
   2100     Linkage = llvm::GlobalValue::InternalLinkage;
   2101 
   2102   GV->setLinkage(Linkage);
   2103   if (D->hasAttr<DLLImportAttr>())
   2104     GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
   2105   else if (D->hasAttr<DLLExportAttr>())
   2106     GV->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
   2107   else
   2108     GV->setDLLStorageClass(llvm::GlobalVariable::DefaultStorageClass);
   2109 
   2110   if (Linkage == llvm::GlobalVariable::CommonLinkage)
   2111     // common vars aren't constant even if declared const.
   2112     GV->setConstant(false);
   2113 
   2114   setNonAliasAttributes(D, GV);
   2115 
   2116   if (D->getTLSKind() && !GV->isThreadLocal()) {
   2117     if (D->getTLSKind() == VarDecl::TLS_Dynamic)
   2118       CXXThreadLocals.push_back(std::make_pair(D, GV));
   2119     setTLSMode(GV, *D);
   2120   }
   2121 
   2122   maybeSetTrivialComdat(*D, *GV);
   2123 
   2124   // Emit the initializer function if necessary.
   2125   if (NeedsGlobalCtor || NeedsGlobalDtor)
   2126     EmitCXXGlobalVarDeclInitFunc(D, GV, NeedsGlobalCtor);
   2127 
   2128   SanitizerMD->reportGlobalToASan(GV, *D, NeedsGlobalCtor);
   2129 
   2130   // Emit global variable debug information.
   2131   if (CGDebugInfo *DI = getModuleDebugInfo())
   2132     if (getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
   2133       DI->EmitGlobalVariable(GV, D);
   2134 }
   2135 
   2136 static bool isVarDeclStrongDefinition(const ASTContext &Context,
   2137                                       CodeGenModule &CGM, const VarDecl *D,
   2138                                       bool NoCommon) {
   2139   // Don't give variables common linkage if -fno-common was specified unless it
   2140   // was overridden by a NoCommon attribute.
   2141   if ((NoCommon || D->hasAttr<NoCommonAttr>()) && !D->hasAttr<CommonAttr>())
   2142     return true;
   2143 
   2144   // C11 6.9.2/2:
   2145   //   A declaration of an identifier for an object that has file scope without
   2146   //   an initializer, and without a storage-class specifier or with the
   2147   //   storage-class specifier static, constitutes a tentative definition.
   2148   if (D->getInit() || D->hasExternalStorage())
   2149     return true;
   2150 
   2151   // A variable cannot be both common and exist in a section.
   2152   if (D->hasAttr<SectionAttr>())
   2153     return true;
   2154 
   2155   // Thread local vars aren't considered common linkage.
   2156   if (D->getTLSKind())
   2157     return true;
   2158 
   2159   // Tentative definitions marked with WeakImportAttr are true definitions.
   2160   if (D->hasAttr<WeakImportAttr>())
   2161     return true;
   2162 
   2163   // A variable cannot be both common and exist in a comdat.
   2164   if (shouldBeInCOMDAT(CGM, *D))
   2165     return true;
   2166 
   2167   // Declarations with a required alignment do not have common linakge in MSVC
   2168   // mode.
   2169   if (Context.getLangOpts().MSVCCompat) {
   2170     if (D->hasAttr<AlignedAttr>())
   2171       return true;
   2172     QualType VarType = D->getType();
   2173     if (Context.isAlignmentRequired(VarType))
   2174       return true;
   2175 
   2176     if (const auto *RT = VarType->getAs<RecordType>()) {
   2177       const RecordDecl *RD = RT->getDecl();
   2178       for (const FieldDecl *FD : RD->fields()) {
   2179         if (FD->isBitField())
   2180           continue;
   2181         if (FD->hasAttr<AlignedAttr>())
   2182           return true;
   2183         if (Context.isAlignmentRequired(FD->getType()))
   2184           return true;
   2185       }
   2186     }
   2187   }
   2188 
   2189   return false;
   2190 }
   2191 
   2192 llvm::GlobalValue::LinkageTypes CodeGenModule::getLLVMLinkageForDeclarator(
   2193     const DeclaratorDecl *D, GVALinkage Linkage, bool IsConstantVariable) {
   2194   if (Linkage == GVA_Internal)
   2195     return llvm::Function::InternalLinkage;
   2196 
   2197   if (D->hasAttr<WeakAttr>()) {
   2198     if (IsConstantVariable)
   2199       return llvm::GlobalVariable::WeakODRLinkage;
   2200     else
   2201       return llvm::GlobalVariable::WeakAnyLinkage;
   2202   }
   2203 
   2204   // We are guaranteed to have a strong definition somewhere else,
   2205   // so we can use available_externally linkage.
   2206   if (Linkage == GVA_AvailableExternally)
   2207     return llvm::Function::AvailableExternallyLinkage;
   2208 
   2209   // Note that Apple's kernel linker doesn't support symbol
   2210   // coalescing, so we need to avoid linkonce and weak linkages there.
   2211   // Normally, this means we just map to internal, but for explicit
   2212   // instantiations we'll map to external.
   2213 
   2214   // In C++, the compiler has to emit a definition in every translation unit
   2215   // that references the function.  We should use linkonce_odr because
   2216   // a) if all references in this translation unit are optimized away, we
   2217   // don't need to codegen it.  b) if the function persists, it needs to be
   2218   // merged with other definitions. c) C++ has the ODR, so we know the
   2219   // definition is dependable.
   2220   if (Linkage == GVA_DiscardableODR)
   2221     return !Context.getLangOpts().AppleKext ? llvm::Function::LinkOnceODRLinkage
   2222                                             : llvm::Function::InternalLinkage;
   2223 
   2224   // An explicit instantiation of a template has weak linkage, since
   2225   // explicit instantiations can occur in multiple translation units
   2226   // and must all be equivalent. However, we are not allowed to
   2227   // throw away these explicit instantiations.
   2228   if (Linkage == GVA_StrongODR)
   2229     return !Context.getLangOpts().AppleKext ? llvm::Function::WeakODRLinkage
   2230                                             : llvm::Function::ExternalLinkage;
   2231 
   2232   // C++ doesn't have tentative definitions and thus cannot have common
   2233   // linkage.
   2234   if (!getLangOpts().CPlusPlus && isa<VarDecl>(D) &&
   2235       !isVarDeclStrongDefinition(Context, *this, cast<VarDecl>(D),
   2236                                  CodeGenOpts.NoCommon))
   2237     return llvm::GlobalVariable::CommonLinkage;
   2238 
   2239   // selectany symbols are externally visible, so use weak instead of
   2240   // linkonce.  MSVC optimizes away references to const selectany globals, so
   2241   // all definitions should be the same and ODR linkage should be used.
   2242   // http://msdn.microsoft.com/en-us/library/5tkz6s71.aspx
   2243   if (D->hasAttr<SelectAnyAttr>())
   2244     return llvm::GlobalVariable::WeakODRLinkage;
   2245 
   2246   // Otherwise, we have strong external linkage.
   2247   assert(Linkage == GVA_StrongExternal);
   2248   return llvm::GlobalVariable::ExternalLinkage;
   2249 }
   2250 
   2251 llvm::GlobalValue::LinkageTypes CodeGenModule::getLLVMLinkageVarDefinition(
   2252     const VarDecl *VD, bool IsConstant) {
   2253   GVALinkage Linkage = getContext().GetGVALinkageForVariable(VD);
   2254   return getLLVMLinkageForDeclarator(VD, Linkage, IsConstant);
   2255 }
   2256 
   2257 /// Replace the uses of a function that was declared with a non-proto type.
   2258 /// We want to silently drop extra arguments from call sites
   2259 static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
   2260                                           llvm::Function *newFn) {
   2261   // Fast path.
   2262   if (old->use_empty()) return;
   2263 
   2264   llvm::Type *newRetTy = newFn->getReturnType();
   2265   SmallVector<llvm::Value*, 4> newArgs;
   2266 
   2267   for (llvm::Value::use_iterator ui = old->use_begin(), ue = old->use_end();
   2268          ui != ue; ) {
   2269     llvm::Value::use_iterator use = ui++; // Increment before the use is erased.
   2270     llvm::User *user = use->getUser();
   2271 
   2272     // Recognize and replace uses of bitcasts.  Most calls to
   2273     // unprototyped functions will use bitcasts.
   2274     if (auto *bitcast = dyn_cast<llvm::ConstantExpr>(user)) {
   2275       if (bitcast->getOpcode() == llvm::Instruction::BitCast)
   2276         replaceUsesOfNonProtoConstant(bitcast, newFn);
   2277       continue;
   2278     }
   2279 
   2280     // Recognize calls to the function.
   2281     llvm::CallSite callSite(user);
   2282     if (!callSite) continue;
   2283     if (!callSite.isCallee(&*use)) continue;
   2284 
   2285     // If the return types don't match exactly, then we can't
   2286     // transform this call unless it's dead.
   2287     if (callSite->getType() != newRetTy && !callSite->use_empty())
   2288       continue;
   2289 
   2290     // Get the call site's attribute list.
   2291     SmallVector<llvm::AttributeSet, 8> newAttrs;
   2292     llvm::AttributeSet oldAttrs = callSite.getAttributes();
   2293 
   2294     // Collect any return attributes from the call.
   2295     if (oldAttrs.hasAttributes(llvm::AttributeSet::ReturnIndex))
   2296       newAttrs.push_back(
   2297         llvm::AttributeSet::get(newFn->getContext(),
   2298                                 oldAttrs.getRetAttributes()));
   2299 
   2300     // If the function was passed too few arguments, don't transform.
   2301     unsigned newNumArgs = newFn->arg_size();
   2302     if (callSite.arg_size() < newNumArgs) continue;
   2303 
   2304     // If extra arguments were passed, we silently drop them.
   2305     // If any of the types mismatch, we don't transform.
   2306     unsigned argNo = 0;
   2307     bool dontTransform = false;
   2308     for (llvm::Function::arg_iterator ai = newFn->arg_begin(),
   2309            ae = newFn->arg_end(); ai != ae; ++ai, ++argNo) {
   2310       if (callSite.getArgument(argNo)->getType() != ai->getType()) {
   2311         dontTransform = true;
   2312         break;
   2313       }
   2314 
   2315       // Add any parameter attributes.
   2316       if (oldAttrs.hasAttributes(argNo + 1))
   2317         newAttrs.
   2318           push_back(llvm::
   2319                     AttributeSet::get(newFn->getContext(),
   2320                                       oldAttrs.getParamAttributes(argNo + 1)));
   2321     }
   2322     if (dontTransform)
   2323       continue;
   2324 
   2325     if (oldAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex))
   2326       newAttrs.push_back(llvm::AttributeSet::get(newFn->getContext(),
   2327                                                  oldAttrs.getFnAttributes()));
   2328 
   2329     // Okay, we can transform this.  Create the new call instruction and copy
   2330     // over the required information.
   2331     newArgs.append(callSite.arg_begin(), callSite.arg_begin() + argNo);
   2332 
   2333     llvm::CallSite newCall;
   2334     if (callSite.isCall()) {
   2335       newCall = llvm::CallInst::Create(newFn, newArgs, "",
   2336                                        callSite.getInstruction());
   2337     } else {
   2338       auto *oldInvoke = cast<llvm::InvokeInst>(callSite.getInstruction());
   2339       newCall = llvm::InvokeInst::Create(newFn,
   2340                                          oldInvoke->getNormalDest(),
   2341                                          oldInvoke->getUnwindDest(),
   2342                                          newArgs, "",
   2343                                          callSite.getInstruction());
   2344     }
   2345     newArgs.clear(); // for the next iteration
   2346 
   2347     if (!newCall->getType()->isVoidTy())
   2348       newCall->takeName(callSite.getInstruction());
   2349     newCall.setAttributes(
   2350                      llvm::AttributeSet::get(newFn->getContext(), newAttrs));
   2351     newCall.setCallingConv(callSite.getCallingConv());
   2352 
   2353     // Finally, remove the old call, replacing any uses with the new one.
   2354     if (!callSite->use_empty())
   2355       callSite->replaceAllUsesWith(newCall.getInstruction());
   2356 
   2357     // Copy debug location attached to CI.
   2358     if (callSite->getDebugLoc())
   2359       newCall->setDebugLoc(callSite->getDebugLoc());
   2360     callSite->eraseFromParent();
   2361   }
   2362 }
   2363 
   2364 /// ReplaceUsesOfNonProtoTypeWithRealFunction - This function is called when we
   2365 /// implement a function with no prototype, e.g. "int foo() {}".  If there are
   2366 /// existing call uses of the old function in the module, this adjusts them to
   2367 /// call the new function directly.
   2368 ///
   2369 /// This is not just a cleanup: the always_inline pass requires direct calls to
   2370 /// functions to be able to inline them.  If there is a bitcast in the way, it
   2371 /// won't inline them.  Instcombine normally deletes these calls, but it isn't
   2372 /// run at -O0.
   2373 static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
   2374                                                       llvm::Function *NewFn) {
   2375   // If we're redefining a global as a function, don't transform it.
   2376   if (!isa<llvm::Function>(Old)) return;
   2377 
   2378   replaceUsesOfNonProtoConstant(Old, NewFn);
   2379 }
   2380 
   2381 void CodeGenModule::HandleCXXStaticMemberVarInstantiation(VarDecl *VD) {
   2382   TemplateSpecializationKind TSK = VD->getTemplateSpecializationKind();
   2383   // If we have a definition, this might be a deferred decl. If the
   2384   // instantiation is explicit, make sure we emit it at the end.
   2385   if (VD->getDefinition() && TSK == TSK_ExplicitInstantiationDefinition)
   2386     GetAddrOfGlobalVar(VD);
   2387 
   2388   EmitTopLevelDecl(VD);
   2389 }
   2390 
   2391 void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD,
   2392                                                  llvm::GlobalValue *GV) {
   2393   const auto *D = cast<FunctionDecl>(GD.getDecl());
   2394 
   2395   // Compute the function info and LLVM type.
   2396   const CGFunctionInfo &FI = getTypes().arrangeGlobalDeclaration(GD);
   2397   llvm::FunctionType *Ty = getTypes().GetFunctionType(FI);
   2398 
   2399   // Get or create the prototype for the function.
   2400   if (!GV) {
   2401     llvm::Constant *C =
   2402         GetAddrOfFunction(GD, Ty, /*ForVTable=*/false, /*DontDefer*/ true);
   2403 
   2404     // Strip off a bitcast if we got one back.
   2405     if (auto *CE = dyn_cast<llvm::ConstantExpr>(C)) {
   2406       assert(CE->getOpcode() == llvm::Instruction::BitCast);
   2407       GV = cast<llvm::GlobalValue>(CE->getOperand(0));
   2408     } else {
   2409       GV = cast<llvm::GlobalValue>(C);
   2410     }
   2411   }
   2412 
   2413   if (!GV->isDeclaration()) {
   2414     getDiags().Report(D->getLocation(), diag::err_duplicate_mangled_name);
   2415     GlobalDecl OldGD = Manglings.lookup(GV->getName());
   2416     if (auto *Prev = OldGD.getDecl())
   2417       getDiags().Report(Prev->getLocation(), diag::note_previous_definition);
   2418     return;
   2419   }
   2420 
   2421   if (GV->getType()->getElementType() != Ty) {
   2422     // If the types mismatch then we have to rewrite the definition.
   2423     assert(GV->isDeclaration() && "Shouldn't replace non-declaration");
   2424 
   2425     // F is the Function* for the one with the wrong type, we must make a new
   2426     // Function* and update everything that used F (a declaration) with the new
   2427     // Function* (which will be a definition).
   2428     //
   2429     // This happens if there is a prototype for a function
   2430     // (e.g. "int f()") and then a definition of a different type
   2431     // (e.g. "int f(int x)").  Move the old function aside so that it
   2432     // doesn't interfere with GetAddrOfFunction.
   2433     GV->setName(StringRef());
   2434     auto *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
   2435 
   2436     // This might be an implementation of a function without a
   2437     // prototype, in which case, try to do special replacement of
   2438     // calls which match the new prototype.  The really key thing here
   2439     // is that we also potentially drop arguments from the call site
   2440     // so as to make a direct call, which makes the inliner happier
   2441     // and suppresses a number of optimizer warnings (!) about
   2442     // dropping arguments.
   2443     if (!GV->use_empty()) {
   2444       ReplaceUsesOfNonProtoTypeWithRealFunction(GV, NewFn);
   2445       GV->removeDeadConstantUsers();
   2446     }
   2447 
   2448     // Replace uses of F with the Function we will endow with a body.
   2449     if (!GV->use_empty()) {
   2450       llvm::Constant *NewPtrForOldDecl =
   2451           llvm::ConstantExpr::getBitCast(NewFn, GV->getType());
   2452       GV->replaceAllUsesWith(NewPtrForOldDecl);
   2453     }
   2454 
   2455     // Ok, delete the old function now, which is dead.
   2456     GV->eraseFromParent();
   2457 
   2458     GV = NewFn;
   2459   }
   2460 
   2461   // We need to set linkage and visibility on the function before
   2462   // generating code for it because various parts of IR generation
   2463   // want to propagate this information down (e.g. to local static
   2464   // declarations).
   2465   auto *Fn = cast<llvm::Function>(GV);
   2466   setFunctionLinkage(GD, Fn);
   2467   if (D->hasAttr<DLLImportAttr>())
   2468     GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
   2469   else if (D->hasAttr<DLLExportAttr>())
   2470     GV->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
   2471   else
   2472     GV->setDLLStorageClass(llvm::GlobalVariable::DefaultStorageClass);
   2473 
   2474   // FIXME: this is redundant with part of setFunctionDefinitionAttributes
   2475   setGlobalVisibility(Fn, D);
   2476 
   2477   MaybeHandleStaticInExternC(D, Fn);
   2478 
   2479   maybeSetTrivialComdat(*D, *Fn);
   2480 
   2481   CodeGenFunction(*this).GenerateCode(D, Fn, FI);
   2482 
   2483   setFunctionDefinitionAttributes(D, Fn);
   2484   SetLLVMFunctionAttributesForDefinition(D, Fn);
   2485 
   2486   if (const ConstructorAttr *CA = D->getAttr<ConstructorAttr>())
   2487     AddGlobalCtor(Fn, CA->getPriority());
   2488   if (const DestructorAttr *DA = D->getAttr<DestructorAttr>())
   2489     AddGlobalDtor(Fn, DA->getPriority());
   2490   if (D->hasAttr<AnnotateAttr>())
   2491     AddGlobalAnnotations(D, Fn);
   2492 }
   2493 
   2494 void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
   2495   const auto *D = cast<ValueDecl>(GD.getDecl());
   2496   const AliasAttr *AA = D->getAttr<AliasAttr>();
   2497   assert(AA && "Not an alias?");
   2498 
   2499   StringRef MangledName = getMangledName(GD);
   2500 
   2501   // If there is a definition in the module, then it wins over the alias.
   2502   // This is dubious, but allow it to be safe.  Just ignore the alias.
   2503   llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
   2504   if (Entry && !Entry->isDeclaration())
   2505     return;
   2506 
   2507   Aliases.push_back(GD);
   2508 
   2509   llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
   2510 
   2511   // Create a reference to the named value.  This ensures that it is emitted
   2512   // if a deferred decl.
   2513   llvm::Constant *Aliasee;
   2514   if (isa<llvm::FunctionType>(DeclTy))
   2515     Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GD,
   2516                                       /*ForVTable=*/false);
   2517   else
   2518     Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
   2519                                     llvm::PointerType::getUnqual(DeclTy),
   2520                                     /*D=*/nullptr);
   2521 
   2522   // Create the new alias itself, but don't set a name yet.
   2523   auto *GA = llvm::GlobalAlias::create(
   2524       cast<llvm::PointerType>(Aliasee->getType())->getElementType(), 0,
   2525       llvm::Function::ExternalLinkage, "", Aliasee, &getModule());
   2526 
   2527   if (Entry) {
   2528     if (GA->getAliasee() == Entry) {
   2529       Diags.Report(AA->getLocation(), diag::err_cyclic_alias);
   2530       return;
   2531     }
   2532 
   2533     assert(Entry->isDeclaration());
   2534 
   2535     // If there is a declaration in the module, then we had an extern followed
   2536     // by the alias, as in:
   2537     //   extern int test6();
   2538     //   ...
   2539     //   int test6() __attribute__((alias("test7")));
   2540     //
   2541     // Remove it and replace uses of it with the alias.
   2542     GA->takeName(Entry);
   2543 
   2544     Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
   2545                                                           Entry->getType()));
   2546     Entry->eraseFromParent();
   2547   } else {
   2548     GA->setName(MangledName);
   2549   }
   2550 
   2551   // Set attributes which are particular to an alias; this is a
   2552   // specialization of the attributes which may be set on a global
   2553   // variable/function.
   2554   if (D->hasAttr<WeakAttr>() || D->hasAttr<WeakRefAttr>() ||
   2555       D->isWeakImported()) {
   2556     GA->setLinkage(llvm::Function::WeakAnyLinkage);
   2557   }
   2558 
   2559   if (const auto *VD = dyn_cast<VarDecl>(D))
   2560     if (VD->getTLSKind())
   2561       setTLSMode(GA, *VD);
   2562 
   2563   setAliasAttributes(D, GA);
   2564 }
   2565 
   2566 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,
   2567                                             ArrayRef<llvm::Type*> Tys) {
   2568   return llvm::Intrinsic::getDeclaration(&getModule(), (llvm::Intrinsic::ID)IID,
   2569                                          Tys);
   2570 }
   2571 
   2572 static llvm::StringMapEntry<llvm::GlobalVariable *> &
   2573 GetConstantCFStringEntry(llvm::StringMap<llvm::GlobalVariable *> &Map,
   2574                          const StringLiteral *Literal, bool TargetIsLSB,
   2575                          bool &IsUTF16, unsigned &StringLength) {
   2576   StringRef String = Literal->getString();
   2577   unsigned NumBytes = String.size();
   2578 
   2579   // Check for simple case.
   2580   if (!Literal->containsNonAsciiOrNull()) {
   2581     StringLength = NumBytes;
   2582     return *Map.insert(std::make_pair(String, nullptr)).first;
   2583   }
   2584 
   2585   // Otherwise, convert the UTF8 literals into a string of shorts.
   2586   IsUTF16 = true;
   2587 
   2588   SmallVector<UTF16, 128> ToBuf(NumBytes + 1); // +1 for ending nulls.
   2589   const UTF8 *FromPtr = (const UTF8 *)String.data();
   2590   UTF16 *ToPtr = &ToBuf[0];
   2591 
   2592   (void)ConvertUTF8toUTF16(&FromPtr, FromPtr + NumBytes,
   2593                            &ToPtr, ToPtr + NumBytes,
   2594                            strictConversion);
   2595 
   2596   // ConvertUTF8toUTF16 returns the length in ToPtr.
   2597   StringLength = ToPtr - &ToBuf[0];
   2598 
   2599   // Add an explicit null.
   2600   *ToPtr = 0;
   2601   return *Map.insert(std::make_pair(
   2602                          StringRef(reinterpret_cast<const char *>(ToBuf.data()),
   2603                                    (StringLength + 1) * 2),
   2604                          nullptr)).first;
   2605 }
   2606 
   2607 static llvm::StringMapEntry<llvm::GlobalVariable *> &
   2608 GetConstantStringEntry(llvm::StringMap<llvm::GlobalVariable *> &Map,
   2609                        const StringLiteral *Literal, unsigned &StringLength) {
   2610   StringRef String = Literal->getString();
   2611   StringLength = String.size();
   2612   return *Map.insert(std::make_pair(String, nullptr)).first;
   2613 }
   2614 
   2615 llvm::Constant *
   2616 CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
   2617   unsigned StringLength = 0;
   2618   bool isUTF16 = false;
   2619   llvm::StringMapEntry<llvm::GlobalVariable *> &Entry =
   2620       GetConstantCFStringEntry(CFConstantStringMap, Literal,
   2621                                getDataLayout().isLittleEndian(), isUTF16,
   2622                                StringLength);
   2623 
   2624   if (auto *C = Entry.second)
   2625     return C;
   2626 
   2627   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
   2628   llvm::Constant *Zeros[] = { Zero, Zero };
   2629   llvm::Value *V;
   2630 
   2631   // If we don't already have it, get __CFConstantStringClassReference.
   2632   if (!CFConstantStringClassRef) {
   2633     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
   2634     Ty = llvm::ArrayType::get(Ty, 0);
   2635     llvm::Constant *GV = CreateRuntimeVariable(Ty,
   2636                                            "__CFConstantStringClassReference");
   2637     // Decay array -> ptr
   2638     V = llvm::ConstantExpr::getGetElementPtr(Ty, GV, Zeros);
   2639     CFConstantStringClassRef = V;
   2640   }
   2641   else
   2642     V = CFConstantStringClassRef;
   2643 
   2644   QualType CFTy = getContext().getCFConstantStringType();
   2645 
   2646   auto *STy = cast<llvm::StructType>(getTypes().ConvertType(CFTy));
   2647 
   2648   llvm::Constant *Fields[4];
   2649 
   2650   // Class pointer.
   2651   Fields[0] = cast<llvm::ConstantExpr>(V);
   2652 
   2653   // Flags.
   2654   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
   2655   Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
   2656     llvm::ConstantInt::get(Ty, 0x07C8);
   2657 
   2658   // String pointer.
   2659   llvm::Constant *C = nullptr;
   2660   if (isUTF16) {
   2661     ArrayRef<uint16_t> Arr = llvm::makeArrayRef<uint16_t>(
   2662         reinterpret_cast<uint16_t *>(const_cast<char *>(Entry.first().data())),
   2663         Entry.first().size() / 2);
   2664     C = llvm::ConstantDataArray::get(VMContext, Arr);
   2665   } else {
   2666     C = llvm::ConstantDataArray::getString(VMContext, Entry.first());
   2667   }
   2668 
   2669   // Note: -fwritable-strings doesn't make the backing store strings of
   2670   // CFStrings writable. (See <rdar://problem/10657500>)
   2671   auto *GV =
   2672       new llvm::GlobalVariable(getModule(), C->getType(), /*isConstant=*/true,
   2673                                llvm::GlobalValue::PrivateLinkage, C, ".str");
   2674   GV->setUnnamedAddr(true);
   2675   // Don't enforce the target's minimum global alignment, since the only use
   2676   // of the string is via this class initializer.
   2677   // FIXME: We set the section explicitly to avoid a bug in ld64 224.1. Without
   2678   // it LLVM can merge the string with a non unnamed_addr one during LTO. Doing
   2679   // that changes the section it ends in, which surprises ld64.
   2680   if (isUTF16) {
   2681     CharUnits Align = getContext().getTypeAlignInChars(getContext().ShortTy);
   2682     GV->setAlignment(Align.getQuantity());
   2683     GV->setSection("__TEXT,__ustring");
   2684   } else {
   2685     CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
   2686     GV->setAlignment(Align.getQuantity());
   2687     GV->setSection("__TEXT,__cstring,cstring_literals");
   2688   }
   2689 
   2690   // String.
   2691   Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV->getType(), GV, Zeros);
   2692 
   2693   if (isUTF16)
   2694     // Cast the UTF16 string to the correct type.
   2695     Fields[2] = llvm::ConstantExpr::getBitCast(Fields[2], Int8PtrTy);
   2696 
   2697   // String length.
   2698   Ty = getTypes().ConvertType(getContext().LongTy);
   2699   Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
   2700 
   2701   // The struct.
   2702   C = llvm::ConstantStruct::get(STy, Fields);
   2703   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
   2704                                 llvm::GlobalVariable::PrivateLinkage, C,
   2705                                 "_unnamed_cfstring_");
   2706   GV->setSection("__DATA,__cfstring");
   2707   Entry.second = GV;
   2708 
   2709   return GV;
   2710 }
   2711 
   2712 llvm::GlobalVariable *
   2713 CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
   2714   unsigned StringLength = 0;
   2715   llvm::StringMapEntry<llvm::GlobalVariable *> &Entry =
   2716       GetConstantStringEntry(CFConstantStringMap, Literal, StringLength);
   2717 
   2718   if (auto *C = Entry.second)
   2719     return C;
   2720 
   2721   llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
   2722   llvm::Constant *Zeros[] = { Zero, Zero };
   2723   llvm::Value *V;
   2724   // If we don't already have it, get _NSConstantStringClassReference.
   2725   if (!ConstantStringClassRef) {
   2726     std::string StringClass(getLangOpts().ObjCConstantStringClass);
   2727     llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
   2728     llvm::Constant *GV;
   2729     if (LangOpts.ObjCRuntime.isNonFragile()) {
   2730       std::string str =
   2731         StringClass.empty() ? "OBJC_CLASS_$_NSConstantString"
   2732                             : "OBJC_CLASS_$_" + StringClass;
   2733       GV = getObjCRuntime().GetClassGlobal(str);
   2734       // Make sure the result is of the correct type.
   2735       llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
   2736       V = llvm::ConstantExpr::getBitCast(GV, PTy);
   2737       ConstantStringClassRef = V;
   2738     } else {
   2739       std::string str =
   2740         StringClass.empty() ? "_NSConstantStringClassReference"
   2741                             : "_" + StringClass + "ClassReference";
   2742       llvm::Type *PTy = llvm::ArrayType::get(Ty, 0);
   2743       GV = CreateRuntimeVariable(PTy, str);
   2744       // Decay array -> ptr
   2745       V = llvm::ConstantExpr::getGetElementPtr(PTy, GV, Zeros);
   2746       ConstantStringClassRef = V;
   2747     }
   2748   } else
   2749     V = ConstantStringClassRef;
   2750 
   2751   if (!NSConstantStringType) {
   2752     // Construct the type for a constant NSString.
   2753     RecordDecl *D = Context.buildImplicitRecord("__builtin_NSString");
   2754     D->startDefinition();
   2755 
   2756     QualType FieldTypes[3];
   2757 
   2758     // const int *isa;
   2759     FieldTypes[0] = Context.getPointerType(Context.IntTy.withConst());
   2760     // const char *str;
   2761     FieldTypes[1] = Context.getPointerType(Context.CharTy.withConst());
   2762     // unsigned int length;
   2763     FieldTypes[2] = Context.UnsignedIntTy;
   2764 
   2765     // Create fields
   2766     for (unsigned i = 0; i < 3; ++i) {
   2767       FieldDecl *Field = FieldDecl::Create(Context, D,
   2768                                            SourceLocation(),
   2769                                            SourceLocation(), nullptr,
   2770                                            FieldTypes[i], /*TInfo=*/nullptr,
   2771                                            /*BitWidth=*/nullptr,
   2772                                            /*Mutable=*/false,
   2773                                            ICIS_NoInit);
   2774       Field->setAccess(AS_public);
   2775       D->addDecl(Field);
   2776     }
   2777 
   2778     D->completeDefinition();
   2779     QualType NSTy = Context.getTagDeclType(D);
   2780     NSConstantStringType = cast<llvm::StructType>(getTypes().ConvertType(NSTy));
   2781   }
   2782 
   2783   llvm::Constant *Fields[3];
   2784 
   2785   // Class pointer.
   2786   Fields[0] = cast<llvm::ConstantExpr>(V);
   2787 
   2788   // String pointer.
   2789   llvm::Constant *C =
   2790       llvm::ConstantDataArray::getString(VMContext, Entry.first());
   2791 
   2792   llvm::GlobalValue::LinkageTypes Linkage;
   2793   bool isConstant;
   2794   Linkage = llvm::GlobalValue::PrivateLinkage;
   2795   isConstant = !LangOpts.WritableStrings;
   2796 
   2797   auto *GV = new llvm::GlobalVariable(getModule(), C->getType(), isConstant,
   2798                                       Linkage, C, ".str");
   2799   GV->setUnnamedAddr(true);
   2800   // Don't enforce the target's minimum global alignment, since the only use
   2801   // of the string is via this class initializer.
   2802   CharUnits Align = getContext().getTypeAlignInChars(getContext().CharTy);
   2803   GV->setAlignment(Align.getQuantity());
   2804   Fields[1] =
   2805       llvm::ConstantExpr::getGetElementPtr(GV->getValueType(), GV, Zeros);
   2806 
   2807   // String length.
   2808   llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
   2809   Fields[2] = llvm::ConstantInt::get(Ty, StringLength);
   2810 
   2811   // The struct.
   2812   C = llvm::ConstantStruct::get(NSConstantStringType, Fields);
   2813   GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
   2814                                 llvm::GlobalVariable::PrivateLinkage, C,
   2815                                 "_unnamed_nsstring_");
   2816   const char *NSStringSection = "__OBJC,__cstring_object,regular,no_dead_strip";
   2817   const char *NSStringNonFragileABISection =
   2818       "__DATA,__objc_stringobj,regular,no_dead_strip";
   2819   // FIXME. Fix section.
   2820   GV->setSection(LangOpts.ObjCRuntime.isNonFragile()
   2821                      ? NSStringNonFragileABISection
   2822                      : NSStringSection);
   2823   Entry.second = GV;
   2824 
   2825   return GV;
   2826 }
   2827 
   2828 QualType CodeGenModule::getObjCFastEnumerationStateType() {
   2829   if (ObjCFastEnumerationStateType.isNull()) {
   2830     RecordDecl *D = Context.buildImplicitRecord("__objcFastEnumerationState");
   2831     D->startDefinition();
   2832 
   2833     QualType FieldTypes[] = {
   2834       Context.UnsignedLongTy,
   2835       Context.getPointerType(Context.getObjCIdType()),
   2836       Context.getPointerType(Context.UnsignedLongTy),
   2837       Context.getConstantArrayType(Context.UnsignedLongTy,
   2838                            llvm::APInt(32, 5), ArrayType::Normal, 0)
   2839     };
   2840 
   2841     for (size_t i = 0; i < 4; ++i) {
   2842       FieldDecl *Field = FieldDecl::Create(Context,
   2843                                            D,
   2844                                            SourceLocation(),
   2845                                            SourceLocation(), nullptr,
   2846                                            FieldTypes[i], /*TInfo=*/nullptr,
   2847                                            /*BitWidth=*/nullptr,
   2848                                            /*Mutable=*/false,
   2849                                            ICIS_NoInit);
   2850       Field->setAccess(AS_public);
   2851       D->addDecl(Field);
   2852     }
   2853 
   2854     D->completeDefinition();
   2855     ObjCFastEnumerationStateType = Context.getTagDeclType(D);
   2856   }
   2857 
   2858   return ObjCFastEnumerationStateType;
   2859 }
   2860 
   2861 llvm::Constant *
   2862 CodeGenModule::GetConstantArrayFromStringLiteral(const StringLiteral *E) {
   2863   assert(!E->getType()->isPointerType() && "Strings are always arrays");
   2864 
   2865   // Don't emit it as the address of the string, emit the string data itself
   2866   // as an inline array.
   2867   if (E->getCharByteWidth() == 1) {
   2868     SmallString<64> Str(E->getString());
   2869 
   2870     // Resize the string to the right size, which is indicated by its type.
   2871     const ConstantArrayType *CAT = Context.getAsConstantArrayType(E->getType());
   2872     Str.resize(CAT->getSize().getZExtValue());
   2873     return llvm::ConstantDataArray::getString(VMContext, Str, false);
   2874   }
   2875 
   2876   auto *AType = cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
   2877   llvm::Type *ElemTy = AType->getElementType();
   2878   unsigned NumElements = AType->getNumElements();
   2879 
   2880   // Wide strings have either 2-byte or 4-byte elements.
   2881   if (ElemTy->getPrimitiveSizeInBits() == 16) {
   2882     SmallVector<uint16_t, 32> Elements;
   2883     Elements.reserve(NumElements);
   2884 
   2885     for(unsigned i = 0, e = E->getLength(); i != e; ++i)
   2886       Elements.push_back(E->getCodeUnit(i));
   2887     Elements.resize(NumElements);
   2888     return llvm::ConstantDataArray::get(VMContext, Elements);
   2889   }
   2890 
   2891   assert(ElemTy->getPrimitiveSizeInBits() == 32);
   2892   SmallVector<uint32_t, 32> Elements;
   2893   Elements.reserve(NumElements);
   2894 
   2895   for(unsigned i = 0, e = E->getLength(); i != e; ++i)
   2896     Elements.push_back(E->getCodeUnit(i));
   2897   Elements.resize(NumElements);
   2898   return llvm::ConstantDataArray::get(VMContext, Elements);
   2899 }
   2900 
   2901 static llvm::GlobalVariable *
   2902 GenerateStringLiteral(llvm::Constant *C, llvm::GlobalValue::LinkageTypes LT,
   2903                       CodeGenModule &CGM, StringRef GlobalName,
   2904                       unsigned Alignment) {
   2905   // OpenCL v1.2 s6.5.3: a string literal is in the constant address space.
   2906   unsigned AddrSpace = 0;
   2907   if (CGM.getLangOpts().OpenCL)
   2908     AddrSpace = CGM.getContext().getTargetAddressSpace(LangAS::opencl_constant);
   2909 
   2910   llvm::Module &M = CGM.getModule();
   2911   // Create a global variable for this string
   2912   auto *GV = new llvm::GlobalVariable(
   2913       M, C->getType(), !CGM.getLangOpts().WritableStrings, LT, C, GlobalName,
   2914       nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace);
   2915   GV->setAlignment(Alignment);
   2916   GV->setUnnamedAddr(true);
   2917   if (GV->isWeakForLinker()) {
   2918     assert(CGM.supportsCOMDAT() && "Only COFF uses weak string literals");
   2919     GV->setComdat(M.getOrInsertComdat(GV->getName()));
   2920   }
   2921 
   2922   return GV;
   2923 }
   2924 
   2925 /// GetAddrOfConstantStringFromLiteral - Return a pointer to a
   2926 /// constant array for the given string literal.
   2927 llvm::GlobalVariable *
   2928 CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S,
   2929                                                   StringRef Name) {
   2930   auto Alignment =
   2931       getContext().getAlignOfGlobalVarInChars(S->getType()).getQuantity();
   2932 
   2933   llvm::Constant *C = GetConstantArrayFromStringLiteral(S);
   2934   llvm::GlobalVariable **Entry = nullptr;
   2935   if (!LangOpts.WritableStrings) {
   2936     Entry = &ConstantStringMap[C];
   2937     if (auto GV = *Entry) {
   2938       if (Alignment > GV->getAlignment())
   2939         GV->setAlignment(Alignment);
   2940       return GV;
   2941     }
   2942   }
   2943 
   2944   SmallString<256> MangledNameBuffer;
   2945   StringRef GlobalVariableName;
   2946   llvm::GlobalValue::LinkageTypes LT;
   2947 
   2948   // Mangle the string literal if the ABI allows for it.  However, we cannot
   2949   // do this if  we are compiling with ASan or -fwritable-strings because they
   2950   // rely on strings having normal linkage.
   2951   if (!LangOpts.WritableStrings &&
   2952       !LangOpts.Sanitize.has(SanitizerKind::Address) &&
   2953       getCXXABI().getMangleContext().shouldMangleStringLiteral(S)) {
   2954     llvm::raw_svector_ostream Out(MangledNameBuffer);
   2955     getCXXABI().getMangleContext().mangleStringLiteral(S, Out);
   2956     Out.flush();
   2957 
   2958     LT = llvm::GlobalValue::LinkOnceODRLinkage;
   2959     GlobalVariableName = MangledNameBuffer;
   2960   } else {
   2961     LT = llvm::GlobalValue::PrivateLinkage;
   2962     GlobalVariableName = Name;
   2963   }
   2964 
   2965   auto GV = GenerateStringLiteral(C, LT, *this, GlobalVariableName, Alignment);
   2966   if (Entry)
   2967     *Entry = GV;
   2968 
   2969   SanitizerMD->reportGlobalToASan(GV, S->getStrTokenLoc(0), "<string literal>",
   2970                                   QualType());
   2971   return GV;
   2972 }
   2973 
   2974 /// GetAddrOfConstantStringFromObjCEncode - Return a pointer to a constant
   2975 /// array for the given ObjCEncodeExpr node.
   2976 llvm::GlobalVariable *
   2977 CodeGenModule::GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *E) {
   2978   std::string Str;
   2979   getContext().getObjCEncodingForType(E->getEncodedType(), Str);
   2980 
   2981   return GetAddrOfConstantCString(Str);
   2982 }
   2983 
   2984 /// GetAddrOfConstantCString - Returns a pointer to a character array containing
   2985 /// the literal and a terminating '\0' character.
   2986 /// The result has pointer to array type.
   2987 llvm::GlobalVariable *CodeGenModule::GetAddrOfConstantCString(
   2988     const std::string &Str, const char *GlobalName, unsigned Alignment) {
   2989   StringRef StrWithNull(Str.c_str(), Str.size() + 1);
   2990   if (Alignment == 0) {
   2991     Alignment = getContext()
   2992                     .getAlignOfGlobalVarInChars(getContext().CharTy)
   2993                     .getQuantity();
   2994   }
   2995 
   2996   llvm::Constant *C =
   2997       llvm::ConstantDataArray::getString(getLLVMContext(), StrWithNull, false);
   2998 
   2999   // Don't share any string literals if strings aren't constant.
   3000   llvm::GlobalVariable **Entry = nullptr;
   3001   if (!LangOpts.WritableStrings) {
   3002     Entry = &ConstantStringMap[C];
   3003     if (auto GV = *Entry) {
   3004       if (Alignment > GV->getAlignment())
   3005         GV->setAlignment(Alignment);
   3006       return GV;
   3007     }
   3008   }
   3009 
   3010   // Get the default prefix if a name wasn't specified.
   3011   if (!GlobalName)
   3012     GlobalName = ".str";
   3013   // Create a global variable for this.
   3014   auto GV = GenerateStringLiteral(C, llvm::GlobalValue::PrivateLinkage, *this,
   3015                                   GlobalName, Alignment);
   3016   if (Entry)
   3017     *Entry = GV;
   3018   return GV;
   3019 }
   3020 
   3021 llvm::Constant *CodeGenModule::GetAddrOfGlobalTemporary(
   3022     const MaterializeTemporaryExpr *E, const Expr *Init) {
   3023   assert((E->getStorageDuration() == SD_Static ||
   3024           E->getStorageDuration() == SD_Thread) && "not a global temporary");
   3025   const auto *VD = cast<VarDecl>(E->getExtendingDecl());
   3026 
   3027   // If we're not materializing a subobject of the temporary, keep the
   3028   // cv-qualifiers from the type of the MaterializeTemporaryExpr.
   3029   QualType MaterializedType = Init->getType();
   3030   if (Init == E->GetTemporaryExpr())
   3031     MaterializedType = E->getType();
   3032 
   3033   llvm::Constant *&Slot = MaterializedGlobalTemporaryMap[E];
   3034   if (Slot)
   3035     return Slot;
   3036 
   3037   // FIXME: If an externally-visible declaration extends multiple temporaries,
   3038   // we need to give each temporary the same name in every translation unit (and
   3039   // we also need to make the temporaries externally-visible).
   3040   SmallString<256> Name;
   3041   llvm::raw_svector_ostream Out(Name);
   3042   getCXXABI().getMangleContext().mangleReferenceTemporary(
   3043       VD, E->getManglingNumber(), Out);
   3044   Out.flush();
   3045 
   3046   APValue *Value = nullptr;
   3047   if (E->getStorageDuration() == SD_Static) {
   3048     // We might have a cached constant initializer for this temporary. Note
   3049     // that this might have a different value from the value computed by
   3050     // evaluating the initializer if the surrounding constant expression
   3051     // modifies the temporary.
   3052     Value = getContext().getMaterializedTemporaryValue(E, false);
   3053     if (Value && Value->isUninit())
   3054       Value = nullptr;
   3055   }
   3056 
   3057   // Try evaluating it now, it might have a constant initializer.
   3058   Expr::EvalResult EvalResult;
   3059   if (!Value && Init->EvaluateAsRValue(EvalResult, getContext()) &&
   3060       !EvalResult.hasSideEffects())
   3061     Value = &EvalResult.Val;
   3062 
   3063   llvm::Constant *InitialValue = nullptr;
   3064   bool Constant = false;
   3065   llvm::Type *Type;
   3066   if (Value) {
   3067     // The temporary has a constant initializer, use it.
   3068     InitialValue = EmitConstantValue(*Value, MaterializedType, nullptr);
   3069     Constant = isTypeConstant(MaterializedType, /*ExcludeCtor*/Value);
   3070     Type = InitialValue->getType();
   3071   } else {
   3072     // No initializer, the initialization will be provided when we
   3073     // initialize the declaration which performed lifetime extension.
   3074     Type = getTypes().ConvertTypeForMem(MaterializedType);
   3075   }
   3076 
   3077   // Create a global variable for this lifetime-extended temporary.
   3078   llvm::GlobalValue::LinkageTypes Linkage =
   3079       getLLVMLinkageVarDefinition(VD, Constant);
   3080   if (Linkage == llvm::GlobalVariable::ExternalLinkage) {
   3081     const VarDecl *InitVD;
   3082     if (VD->isStaticDataMember() && VD->getAnyInitializer(InitVD) &&
   3083         isa<CXXRecordDecl>(InitVD->getLexicalDeclContext())) {
   3084       // Temporaries defined inside a class get linkonce_odr linkage because the
   3085       // class can be defined in multipe translation units.
   3086       Linkage = llvm::GlobalVariable::LinkOnceODRLinkage;
   3087     } else {
   3088       // There is no need for this temporary to have external linkage if the
   3089       // VarDecl has external linkage.
   3090       Linkage = llvm::GlobalVariable::InternalLinkage;
   3091     }
   3092   }
   3093   unsigned AddrSpace = GetGlobalVarAddressSpace(
   3094       VD, getContext().getTargetAddressSpace(MaterializedType));
   3095   auto *GV = new llvm::GlobalVariable(
   3096       getModule(), Type, Constant, Linkage, InitialValue, Name.c_str(),
   3097       /*InsertBefore=*/nullptr, llvm::GlobalVariable::NotThreadLocal,
   3098       AddrSpace);
   3099   setGlobalVisibility(GV, VD);
   3100   GV->setAlignment(
   3101       getContext().getTypeAlignInChars(MaterializedType).getQuantity());
   3102   if (supportsCOMDAT() && GV->isWeakForLinker())
   3103     GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
   3104   if (VD->getTLSKind())
   3105     setTLSMode(GV, *VD);
   3106   Slot = GV;
   3107   return GV;
   3108 }
   3109 
   3110 /// EmitObjCPropertyImplementations - Emit information for synthesized
   3111 /// properties for an implementation.
   3112 void CodeGenModule::EmitObjCPropertyImplementations(const
   3113                                                     ObjCImplementationDecl *D) {
   3114   for (const auto *PID : D->property_impls()) {
   3115     // Dynamic is just for type-checking.
   3116     if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) {
   3117       ObjCPropertyDecl *PD = PID->getPropertyDecl();
   3118 
   3119       // Determine which methods need to be implemented, some may have
   3120       // been overridden. Note that ::isPropertyAccessor is not the method
   3121       // we want, that just indicates if the decl came from a
   3122       // property. What we want to know is if the method is defined in
   3123       // this implementation.
   3124       if (!D->getInstanceMethod(PD->getGetterName()))
   3125         CodeGenFunction(*this).GenerateObjCGetter(
   3126                                  const_cast<ObjCImplementationDecl *>(D), PID);
   3127       if (!PD->isReadOnly() &&
   3128           !D->getInstanceMethod(PD->getSetterName()))
   3129         CodeGenFunction(*this).GenerateObjCSetter(
   3130                                  const_cast<ObjCImplementationDecl *>(D), PID);
   3131     }
   3132   }
   3133 }
   3134 
   3135 static bool needsDestructMethod(ObjCImplementationDecl *impl) {
   3136   const ObjCInterfaceDecl *iface = impl->getClassInterface();
   3137   for (const ObjCIvarDecl *ivar = iface->all_declared_ivar_begin();
   3138        ivar; ivar = ivar->getNextIvar())
   3139     if (ivar->getType().isDestructedType())
   3140       return true;
   3141 
   3142   return false;
   3143 }
   3144 
   3145 static bool AllTrivialInitializers(CodeGenModule &CGM,
   3146                                    ObjCImplementationDecl *D) {
   3147   CodeGenFunction CGF(CGM);
   3148   for (ObjCImplementationDecl::init_iterator B = D->init_begin(),
   3149        E = D->init_end(); B != E; ++B) {
   3150     CXXCtorInitializer *CtorInitExp = *B;
   3151     Expr *Init = CtorInitExp->getInit();
   3152     if (!CGF.isTrivialInitializer(Init))
   3153       return false;
   3154   }
   3155   return true;
   3156 }
   3157 
   3158 /// EmitObjCIvarInitializations - Emit information for ivar initialization
   3159 /// for an implementation.
   3160 void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
   3161   // We might need a .cxx_destruct even if we don't have any ivar initializers.
   3162   if (needsDestructMethod(D)) {
   3163     IdentifierInfo *II = &getContext().Idents.get(".cxx_destruct");
   3164     Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
   3165     ObjCMethodDecl *DTORMethod =
   3166       ObjCMethodDecl::Create(getContext(), D->getLocation(), D->getLocation(),
   3167                              cxxSelector, getContext().VoidTy, nullptr, D,
   3168                              /*isInstance=*/true, /*isVariadic=*/false,
   3169                           /*isPropertyAccessor=*/true, /*isImplicitlyDeclared=*/true,
   3170                              /*isDefined=*/false, ObjCMethodDecl::Required);
   3171     D->addInstanceMethod(DTORMethod);
   3172     CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
   3173     D->setHasDestructors(true);
   3174   }
   3175 
   3176   // If the implementation doesn't have any ivar initializers, we don't need
   3177   // a .cxx_construct.
   3178   if (D->getNumIvarInitializers() == 0 ||
   3179       AllTrivialInitializers(*this, D))
   3180     return;
   3181 
   3182   IdentifierInfo *II = &getContext().Idents.get(".cxx_construct");
   3183   Selector cxxSelector = getContext().Selectors.getSelector(0, &II);
   3184   // The constructor returns 'self'.
   3185   ObjCMethodDecl *CTORMethod = ObjCMethodDecl::Create(getContext(),
   3186                                                 D->getLocation(),
   3187                                                 D->getLocation(),
   3188                                                 cxxSelector,
   3189                                                 getContext().getObjCIdType(),
   3190                                                 nullptr, D, /*isInstance=*/true,
   3191                                                 /*isVariadic=*/false,
   3192                                                 /*isPropertyAccessor=*/true,
   3193                                                 /*isImplicitlyDeclared=*/true,
   3194                                                 /*isDefined=*/false,
   3195                                                 ObjCMethodDecl::Required);
   3196   D->addInstanceMethod(CTORMethod);
   3197   CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, CTORMethod, true);
   3198   D->setHasNonZeroConstructors(true);
   3199 }
   3200 
   3201 /// EmitNamespace - Emit all declarations in a namespace.
   3202 void CodeGenModule::EmitNamespace(const NamespaceDecl *ND) {
   3203   for (auto *I : ND->decls()) {
   3204     if (const auto *VD = dyn_cast<VarDecl>(I))
   3205       if (VD->getTemplateSpecializationKind() != TSK_ExplicitSpecialization &&
   3206           VD->getTemplateSpecializationKind() != TSK_Undeclared)
   3207         continue;
   3208     EmitTopLevelDecl(I);
   3209   }
   3210 }
   3211 
   3212 // EmitLinkageSpec - Emit all declarations in a linkage spec.
   3213 void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
   3214   if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
   3215       LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
   3216     ErrorUnsupported(LSD, "linkage spec");
   3217     return;
   3218   }
   3219 
   3220   for (auto *I : LSD->decls()) {
   3221     // Meta-data for ObjC class includes references to implemented methods.
   3222     // Generate class's method definitions first.
   3223     if (auto *OID = dyn_cast<ObjCImplDecl>(I)) {
   3224       for (auto *M : OID->methods())
   3225         EmitTopLevelDecl(M);
   3226     }
   3227     EmitTopLevelDecl(I);
   3228   }
   3229 }
   3230 
   3231 /// EmitTopLevelDecl - Emit code for a single top level declaration.
   3232 void CodeGenModule::EmitTopLevelDecl(Decl *D) {
   3233   // Ignore dependent declarations.
   3234   if (D->getDeclContext() && D->getDeclContext()->isDependentContext())
   3235     return;
   3236 
   3237   switch (D->getKind()) {
   3238   case Decl::CXXConversion:
   3239   case Decl::CXXMethod:
   3240   case Decl::Function:
   3241     // Skip function templates
   3242     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
   3243         cast<FunctionDecl>(D)->isLateTemplateParsed())
   3244       return;
   3245 
   3246     EmitGlobal(cast<FunctionDecl>(D));
   3247     // Always provide some coverage mapping
   3248     // even for the functions that aren't emitted.
   3249     AddDeferredUnusedCoverageMapping(D);
   3250     break;
   3251 
   3252   case Decl::Var:
   3253     // Skip variable templates
   3254     if (cast<VarDecl>(D)->getDescribedVarTemplate())
   3255       return;
   3256   case Decl::VarTemplateSpecialization:
   3257     EmitGlobal(cast<VarDecl>(D));
   3258     break;
   3259 
   3260   // Indirect fields from global anonymous structs and unions can be
   3261   // ignored; only the actual variable requires IR gen support.
   3262   case Decl::IndirectField:
   3263     break;
   3264 
   3265   // C++ Decls
   3266   case Decl::Namespace:
   3267     EmitNamespace(cast<NamespaceDecl>(D));
   3268     break;
   3269     // No code generation needed.
   3270   case Decl::UsingShadow:
   3271   case Decl::ClassTemplate:
   3272   case Decl::VarTemplate:
   3273   case Decl::VarTemplatePartialSpecialization:
   3274   case Decl::FunctionTemplate:
   3275   case Decl::TypeAliasTemplate:
   3276   case Decl::Block:
   3277   case Decl::Empty:
   3278     break;
   3279   case Decl::Using:          // using X; [C++]
   3280     if (CGDebugInfo *DI = getModuleDebugInfo())
   3281         DI->EmitUsingDecl(cast<UsingDecl>(*D));
   3282     return;
   3283   case Decl::NamespaceAlias:
   3284     if (CGDebugInfo *DI = getModuleDebugInfo())
   3285         DI->EmitNamespaceAlias(cast<NamespaceAliasDecl>(*D));
   3286     return;
   3287   case Decl::UsingDirective: // using namespace X; [C++]
   3288     if (CGDebugInfo *DI = getModuleDebugInfo())
   3289       DI->EmitUsingDirective(cast<UsingDirectiveDecl>(*D));
   3290     return;
   3291   case Decl::CXXConstructor:
   3292     // Skip function templates
   3293     if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||
   3294         cast<FunctionDecl>(D)->isLateTemplateParsed())
   3295       return;
   3296 
   3297     getCXXABI().EmitCXXConstructors(cast<CXXConstructorDecl>(D));
   3298     break;
   3299   case Decl::CXXDestructor:
   3300     if (cast<FunctionDecl>(D)->isLateTemplateParsed())
   3301       return;
   3302     getCXXABI().EmitCXXDestructors(cast<CXXDestructorDecl>(D));
   3303     break;
   3304 
   3305   case Decl::StaticAssert:
   3306     // Nothing to do.
   3307     break;
   3308 
   3309   // Objective-C Decls
   3310 
   3311   // Forward declarations, no (immediate) code generation.
   3312   case Decl::ObjCInterface:
   3313   case Decl::ObjCCategory:
   3314     break;
   3315 
   3316   case Decl::ObjCProtocol: {
   3317     auto *Proto = cast<ObjCProtocolDecl>(D);
   3318     if (Proto->isThisDeclarationADefinition())
   3319       ObjCRuntime->GenerateProtocol(Proto);
   3320     break;
   3321   }
   3322 
   3323   case Decl::ObjCCategoryImpl:
   3324     // Categories have properties but don't support synthesize so we
   3325     // can ignore them here.
   3326     ObjCRuntime->GenerateCategory(cast<ObjCCategoryImplDecl>(D));
   3327     break;
   3328 
   3329   case Decl::ObjCImplementation: {
   3330     auto *OMD = cast<ObjCImplementationDecl>(D);
   3331     EmitObjCPropertyImplementations(OMD);
   3332     EmitObjCIvarInitializations(OMD);
   3333     ObjCRuntime->GenerateClass(OMD);
   3334     // Emit global variable debug information.
   3335     if (CGDebugInfo *DI = getModuleDebugInfo())
   3336       if (getCodeGenOpts().getDebugInfo() >= CodeGenOptions::LimitedDebugInfo)
   3337         DI->getOrCreateInterfaceType(getContext().getObjCInterfaceType(
   3338             OMD->getClassInterface()), OMD->getLocation());
   3339     break;
   3340   }
   3341   case Decl::ObjCMethod: {
   3342     auto *OMD = cast<ObjCMethodDecl>(D);
   3343     // If this is not a prototype, emit the body.
   3344     if (OMD->getBody())
   3345       CodeGenFunction(*this).GenerateObjCMethod(OMD);
   3346     break;
   3347   }
   3348   case Decl::ObjCCompatibleAlias:
   3349     ObjCRuntime->RegisterAlias(cast<ObjCCompatibleAliasDecl>(D));
   3350     break;
   3351 
   3352   case Decl::LinkageSpec:
   3353     EmitLinkageSpec(cast<LinkageSpecDecl>(D));
   3354     break;
   3355 
   3356   case Decl::FileScopeAsm: {
   3357     auto *AD = cast<FileScopeAsmDecl>(D);
   3358     getModule().appendModuleInlineAsm(AD->getAsmString()->getString());
   3359     break;
   3360   }
   3361 
   3362   case Decl::Import: {
   3363     auto *Import = cast<ImportDecl>(D);
   3364 
   3365     // Ignore import declarations that come from imported modules.
   3366     if (clang::Module *Owner = Import->getOwningModule()) {
   3367       if (getLangOpts().CurrentModule.empty() ||
   3368           Owner->getTopLevelModule()->Name == getLangOpts().CurrentModule)
   3369         break;
   3370     }
   3371 
   3372     ImportedModules.insert(Import->getImportedModule());
   3373     break;
   3374   }
   3375 
   3376   case Decl::OMPThreadPrivate:
   3377     EmitOMPThreadPrivateDecl(cast<OMPThreadPrivateDecl>(D));
   3378     break;
   3379 
   3380   case Decl::ClassTemplateSpecialization: {
   3381     const auto *Spec = cast<ClassTemplateSpecializationDecl>(D);
   3382     if (DebugInfo &&
   3383         Spec->getSpecializationKind() == TSK_ExplicitInstantiationDefinition &&
   3384         Spec->hasDefinition())
   3385       DebugInfo->completeTemplateDefinition(*Spec);
   3386     break;
   3387   }
   3388 
   3389   default:
   3390     // Make sure we handled everything we should, every other kind is a
   3391     // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
   3392     // function. Need to recode Decl::Kind to do that easily.
   3393     assert(isa<TypeDecl>(D) && "Unsupported decl kind");
   3394     break;
   3395   }
   3396 }
   3397 
   3398 void CodeGenModule::AddDeferredUnusedCoverageMapping(Decl *D) {
   3399   // Do we need to generate coverage mapping?
   3400   if (!CodeGenOpts.CoverageMapping)
   3401     return;
   3402   switch (D->getKind()) {
   3403   case Decl::CXXConversion:
   3404   case Decl::CXXMethod:
   3405   case Decl::Function:
   3406   case Decl::ObjCMethod:
   3407   case Decl::CXXConstructor:
   3408   case Decl::CXXDestructor: {
   3409     if (!cast<FunctionDecl>(D)->hasBody())
   3410       return;
   3411     auto I = DeferredEmptyCoverageMappingDecls.find(D);
   3412     if (I == DeferredEmptyCoverageMappingDecls.end())
   3413       DeferredEmptyCoverageMappingDecls[D] = true;
   3414     break;
   3415   }
   3416   default:
   3417     break;
   3418   };
   3419 }
   3420 
   3421 void CodeGenModule::ClearUnusedCoverageMapping(const Decl *D) {
   3422   // Do we need to generate coverage mapping?
   3423   if (!CodeGenOpts.CoverageMapping)
   3424     return;
   3425   if (const auto *Fn = dyn_cast<FunctionDecl>(D)) {
   3426     if (Fn->isTemplateInstantiation())
   3427       ClearUnusedCoverageMapping(Fn->getTemplateInstantiationPattern());
   3428   }
   3429   auto I = DeferredEmptyCoverageMappingDecls.find(D);
   3430   if (I == DeferredEmptyCoverageMappingDecls.end())
   3431     DeferredEmptyCoverageMappingDecls[D] = false;
   3432   else
   3433     I->second = false;
   3434 }
   3435 
   3436 void CodeGenModule::EmitDeferredUnusedCoverageMappings() {
   3437   std::vector<const Decl *> DeferredDecls;
   3438   for (const auto &I : DeferredEmptyCoverageMappingDecls) {
   3439     if (!I.second)
   3440       continue;
   3441     DeferredDecls.push_back(I.first);
   3442   }
   3443   // Sort the declarations by their location to make sure that the tests get a
   3444   // predictable order for the coverage mapping for the unused declarations.
   3445   if (CodeGenOpts.DumpCoverageMapping)
   3446     std::sort(DeferredDecls.begin(), DeferredDecls.end(),
   3447               [] (const Decl *LHS, const Decl *RHS) {
   3448       return LHS->getLocStart() < RHS->getLocStart();
   3449     });
   3450   for (const auto *D : DeferredDecls) {
   3451     switch (D->getKind()) {
   3452     case Decl::CXXConversion:
   3453     case Decl::CXXMethod:
   3454     case Decl::Function:
   3455     case Decl::ObjCMethod: {
   3456       CodeGenPGO PGO(*this);
   3457       GlobalDecl GD(cast<FunctionDecl>(D));
   3458       PGO.emitEmptyCounterMapping(D, getMangledName(GD),
   3459                                   getFunctionLinkage(GD));
   3460       break;
   3461     }
   3462     case Decl::CXXConstructor: {
   3463       CodeGenPGO PGO(*this);
   3464       GlobalDecl GD(cast<CXXConstructorDecl>(D), Ctor_Base);
   3465       PGO.emitEmptyCounterMapping(D, getMangledName(GD),
   3466                                   getFunctionLinkage(GD));
   3467       break;
   3468     }
   3469     case Decl::CXXDestructor: {
   3470       CodeGenPGO PGO(*this);
   3471       GlobalDecl GD(cast<CXXDestructorDecl>(D), Dtor_Base);
   3472       PGO.emitEmptyCounterMapping(D, getMangledName(GD),
   3473                                   getFunctionLinkage(GD));
   3474       break;
   3475     }
   3476     default:
   3477       break;
   3478     };
   3479   }
   3480 }
   3481 
   3482 /// Turns the given pointer into a constant.
   3483 static llvm::Constant *GetPointerConstant(llvm::LLVMContext &Context,
   3484                                           const void *Ptr) {
   3485   uintptr_t PtrInt = reinterpret_cast<uintptr_t>(Ptr);
   3486   llvm::Type *i64 = llvm::Type::getInt64Ty(Context);
   3487   return llvm::ConstantInt::get(i64, PtrInt);
   3488 }
   3489 
   3490 static void EmitGlobalDeclMetadata(CodeGenModule &CGM,
   3491                                    llvm::NamedMDNode *&GlobalMetadata,
   3492                                    GlobalDecl D,
   3493                                    llvm::GlobalValue *Addr) {
   3494   if (!GlobalMetadata)
   3495     GlobalMetadata =
   3496       CGM.getModule().getOrInsertNamedMetadata("clang.global.decl.ptrs");
   3497 
   3498   // TODO: should we report variant information for ctors/dtors?
   3499   llvm::Metadata *Ops[] = {llvm::ConstantAsMetadata::get(Addr),
   3500                            llvm::ConstantAsMetadata::get(GetPointerConstant(
   3501                                CGM.getLLVMContext(), D.getDecl()))};
   3502   GlobalMetadata->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
   3503 }
   3504 
   3505 /// For each function which is declared within an extern "C" region and marked
   3506 /// as 'used', but has internal linkage, create an alias from the unmangled
   3507 /// name to the mangled name if possible. People expect to be able to refer
   3508 /// to such functions with an unmangled name from inline assembly within the
   3509 /// same translation unit.
   3510 void CodeGenModule::EmitStaticExternCAliases() {
   3511   for (StaticExternCMap::iterator I = StaticExternCValues.begin(),
   3512                                   E = StaticExternCValues.end();
   3513        I != E; ++I) {
   3514     IdentifierInfo *Name = I->first;
   3515     llvm::GlobalValue *Val = I->second;
   3516     if (Val && !getModule().getNamedValue(Name->getName()))
   3517       addUsedGlobal(llvm::GlobalAlias::create(Name->getName(), Val));
   3518   }
   3519 }
   3520 
   3521 bool CodeGenModule::lookupRepresentativeDecl(StringRef MangledName,
   3522                                              GlobalDecl &Result) const {
   3523   auto Res = Manglings.find(MangledName);
   3524   if (Res == Manglings.end())
   3525     return false;
   3526   Result = Res->getValue();
   3527   return true;
   3528 }
   3529 
   3530 /// Emits metadata nodes associating all the global values in the
   3531 /// current module with the Decls they came from.  This is useful for
   3532 /// projects using IR gen as a subroutine.
   3533 ///
   3534 /// Since there's currently no way to associate an MDNode directly
   3535 /// with an llvm::GlobalValue, we create a global named metadata
   3536 /// with the name 'clang.global.decl.ptrs'.
   3537 void CodeGenModule::EmitDeclMetadata() {
   3538   llvm::NamedMDNode *GlobalMetadata = nullptr;
   3539 
   3540   // StaticLocalDeclMap
   3541   for (auto &I : MangledDeclNames) {
   3542     llvm::GlobalValue *Addr = getModule().getNamedValue(I.second);
   3543     EmitGlobalDeclMetadata(*this, GlobalMetadata, I.first, Addr);
   3544   }
   3545 }
   3546 
   3547 /// Emits metadata nodes for all the local variables in the current
   3548 /// function.
   3549 void CodeGenFunction::EmitDeclMetadata() {
   3550   if (LocalDeclMap.empty()) return;
   3551 
   3552   llvm::LLVMContext &Context = getLLVMContext();
   3553 
   3554   // Find the unique metadata ID for this name.
   3555   unsigned DeclPtrKind = Context.getMDKindID("clang.decl.ptr");
   3556 
   3557   llvm::NamedMDNode *GlobalMetadata = nullptr;
   3558 
   3559   for (auto &I : LocalDeclMap) {
   3560     const Decl *D = I.first;
   3561     llvm::Value *Addr = I.second;
   3562     if (auto *Alloca = dyn_cast<llvm::AllocaInst>(Addr)) {
   3563       llvm::Value *DAddr = GetPointerConstant(getLLVMContext(), D);
   3564       Alloca->setMetadata(
   3565           DeclPtrKind, llvm::MDNode::get(
   3566                            Context, llvm::ValueAsMetadata::getConstant(DAddr)));
   3567     } else if (auto *GV = dyn_cast<llvm::GlobalValue>(Addr)) {
   3568       GlobalDecl GD = GlobalDecl(cast<VarDecl>(D));
   3569       EmitGlobalDeclMetadata(CGM, GlobalMetadata, GD, GV);
   3570     }
   3571   }
   3572 }
   3573 
   3574 void CodeGenModule::EmitVersionIdentMetadata() {
   3575   llvm::NamedMDNode *IdentMetadata =
   3576     TheModule.getOrInsertNamedMetadata("llvm.ident");
   3577   std::string Version = getClangFullVersion();
   3578   llvm::LLVMContext &Ctx = TheModule.getContext();
   3579 
   3580   llvm::Metadata *IdentNode[] = {llvm::MDString::get(Ctx, Version)};
   3581   IdentMetadata->addOperand(llvm::MDNode::get(Ctx, IdentNode));
   3582 }
   3583 
   3584 void CodeGenModule::EmitTargetMetadata() {
   3585   // Warning, new MangledDeclNames may be appended within this loop.
   3586   // We rely on MapVector insertions adding new elements to the end
   3587   // of the container.
   3588   // FIXME: Move this loop into the one target that needs it, and only
   3589   // loop over those declarations for which we couldn't emit the target
   3590   // metadata when we emitted the declaration.
   3591   for (unsigned I = 0; I != MangledDeclNames.size(); ++I) {
   3592     auto Val = *(MangledDeclNames.begin() + I);
   3593     const Decl *D = Val.first.getDecl()->getMostRecentDecl();
   3594     llvm::GlobalValue *GV = GetGlobalValue(Val.second);
   3595     getTargetCodeGenInfo().emitTargetMD(D, GV, *this);
   3596   }
   3597 }
   3598 
   3599 void CodeGenModule::EmitCoverageFile() {
   3600   if (!getCodeGenOpts().CoverageFile.empty()) {
   3601     if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
   3602       llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
   3603       llvm::LLVMContext &Ctx = TheModule.getContext();
   3604       llvm::MDString *CoverageFile =
   3605           llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
   3606       for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
   3607         llvm::MDNode *CU = CUNode->getOperand(i);
   3608         llvm::Metadata *Elts[] = {CoverageFile, CU};
   3609         GCov->addOperand(llvm::MDNode::get(Ctx, Elts));
   3610       }
   3611     }
   3612   }
   3613 }
   3614 
   3615 llvm::Constant *CodeGenModule::EmitUuidofInitializer(StringRef Uuid) {
   3616   // Sema has checked that all uuid strings are of the form
   3617   // "12345678-1234-1234-1234-1234567890ab".
   3618   assert(Uuid.size() == 36);
   3619   for (unsigned i = 0; i < 36; ++i) {
   3620     if (i == 8 || i == 13 || i == 18 || i == 23) assert(Uuid[i] == '-');
   3621     else                                         assert(isHexDigit(Uuid[i]));
   3622   }
   3623 
   3624   // The starts of all bytes of Field3 in Uuid. Field 3 is "1234-1234567890ab".
   3625   const unsigned Field3ValueOffsets[8] = { 19, 21, 24, 26, 28, 30, 32, 34 };
   3626 
   3627   llvm::Constant *Field3[8];
   3628   for (unsigned Idx = 0; Idx < 8; ++Idx)
   3629     Field3[Idx] = llvm::ConstantInt::get(
   3630         Int8Ty, Uuid.substr(Field3ValueOffsets[Idx], 2), 16);
   3631 
   3632   llvm::Constant *Fields[4] = {
   3633     llvm::ConstantInt::get(Int32Ty, Uuid.substr(0,  8), 16),
   3634     llvm::ConstantInt::get(Int16Ty, Uuid.substr(9,  4), 16),
   3635     llvm::ConstantInt::get(Int16Ty, Uuid.substr(14, 4), 16),
   3636     llvm::ConstantArray::get(llvm::ArrayType::get(Int8Ty, 8), Field3)
   3637   };
   3638 
   3639   return llvm::ConstantStruct::getAnon(Fields);
   3640 }
   3641 
   3642 llvm::Constant *
   3643 CodeGenModule::getAddrOfCXXCatchHandlerType(QualType Ty,
   3644                                             QualType CatchHandlerType) {
   3645   return getCXXABI().getAddrOfCXXCatchHandlerType(Ty, CatchHandlerType);
   3646 }
   3647 
   3648 llvm::Constant *CodeGenModule::GetAddrOfRTTIDescriptor(QualType Ty,
   3649                                                        bool ForEH) {
   3650   // Return a bogus pointer if RTTI is disabled, unless it's for EH.
   3651   // FIXME: should we even be calling this method if RTTI is disabled
   3652   // and it's not for EH?
   3653   if (!ForEH && !getLangOpts().RTTI)
   3654     return llvm::Constant::getNullValue(Int8PtrTy);
   3655 
   3656   if (ForEH && Ty->isObjCObjectPointerType() &&
   3657       LangOpts.ObjCRuntime.isGNUFamily())
   3658     return ObjCRuntime->GetEHType(Ty);
   3659 
   3660   return getCXXABI().getAddrOfRTTIDescriptor(Ty);
   3661 }
   3662 
   3663 void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {
   3664   for (auto RefExpr : D->varlists()) {
   3665     auto *VD = cast<VarDecl>(cast<DeclRefExpr>(RefExpr)->getDecl());
   3666     bool PerformInit =
   3667         VD->getAnyInitializer() &&
   3668         !VD->getAnyInitializer()->isConstantInitializer(getContext(),
   3669                                                         /*ForRef=*/false);
   3670     if (auto InitFunction = getOpenMPRuntime().emitThreadPrivateVarDefinition(
   3671             VD, GetAddrOfGlobalVar(VD), RefExpr->getLocStart(), PerformInit))
   3672       CXXGlobalInits.push_back(InitFunction);
   3673   }
   3674 }
   3675 
   3676