diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-10-29 15:19:36 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-10-29 15:19:36 +0000 |
commit | 034f55c1eb93aee61cef5a015eb1d5ba06d3b3d4 (patch) | |
tree | 77677a8259c009fae544b084eff9246eeb25a1e0 /lib/CodeGen/CodeGenModule.cpp | |
parent | 14e1bc9201681a52e06b0544ee800b422f6f3efe (diff) |
Revert r117644, "Apply visibility in IR gen to variables that are merely
declared", it breaks things.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117653 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 558a8a3cf8..efcdce70a0 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -164,17 +164,6 @@ void CodeGenModule::ErrorUnsupported(const Decl *D, const char *Type, getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID) << Msg; } -static llvm::GlobalValue::VisibilityTypes GetLLVMVisibility(Visibility V) { - switch (V) { - case DefaultVisibility: return llvm::GlobalValue::DefaultVisibility; - case HiddenVisibility: return llvm::GlobalValue::HiddenVisibility; - case ProtectedVisibility: return llvm::GlobalValue::ProtectedVisibility; - } - llvm_unreachable("unknown visibility!"); - return llvm::GlobalValue::DefaultVisibility; -} - - void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const { // Internal definitions always have default visibility. @@ -183,7 +172,15 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, return; } - GV->setVisibility(GetLLVMVisibility(D->getVisibility())); + switch (D->getVisibility()) { + case DefaultVisibility: + return GV->setVisibility(llvm::GlobalValue::DefaultVisibility); + case HiddenVisibility: + return GV->setVisibility(llvm::GlobalValue::HiddenVisibility); + case ProtectedVisibility: + return GV->setVisibility(llvm::GlobalValue::ProtectedVisibility); + } + llvm_unreachable("unknown visibility!"); } /// Set the symbol visibility of type information (vtable and RTTI) @@ -937,18 +934,15 @@ CodeGenModule::GetOrCreateLLVMGlobal(llvm::StringRef MangledName, // handling. GV->setConstant(DeclIsConstantGlobal(Context, D)); - // Set linkage and visibility in case we never see a definition. - std::pair<Linkage,Visibility> LV = D->getLinkageAndVisibility(); - if (LV.first != ExternalLinkage) { - GV->setLinkage(llvm::GlobalValue::InternalLinkage); - } else { - if (D->hasAttr<DLLImportAttr>()) - GV->setLinkage(llvm::GlobalValue::DLLImportLinkage); - else if (D->hasAttr<WeakAttr>() || D->hasAttr<WeakImportAttr>()) - GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage); + // FIXME: Merge with other attribute handling code. + if (D->getStorageClass() == SC_PrivateExtern) + GV->setVisibility(llvm::GlobalValue::HiddenVisibility); - GV->setVisibility(GetLLVMVisibility(LV.second)); - } + if (D->hasAttr<DLLImportAttr>()) + GV->setLinkage(llvm::GlobalValue::DLLImportLinkage); + else if (D->hasAttr<WeakAttr>() || + D->hasAttr<WeakImportAttr>()) + GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage); GV->setThreadLocal(D->isThreadSpecified()); } |