diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-03 03:28:57 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-04-03 03:28:57 +0000 |
commit | 7cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9 (patch) | |
tree | 7429f1db201bd26efb44e3f002e6f8adfb6d95b4 /lib/CodeGen/CodeGenModule.cpp | |
parent | d76e0a6c2262e62d943c120a0a8768943fdbde05 (diff) |
Implement -fvisibility.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68369 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 1132c3f721..1bf73db177 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -113,6 +113,25 @@ static void setGlobalVisibility(llvm::GlobalValue *GV, } } +static void setGlobalOptionVisibility(llvm::GlobalValue *GV, + LangOptions::VisibilityMode Vis) { + switch (Vis) { + default: assert(0 && "Unknown visibility!"); + case LangOptions::NonVisibility: + break; + case LangOptions::DefaultVisibility: + GV->setVisibility(llvm::GlobalValue::DefaultVisibility); + break; + case LangOptions::HiddenVisibility: + GV->setVisibility(llvm::GlobalValue::HiddenVisibility); + break; + case LangOptions::ProtectedVisibility: + GV->setVisibility(llvm::GlobalValue::ProtectedVisibility); + break; + } +} + + /// \brief Retrieves the mangled name for the given declaration. /// /// If the given declaration requires a mangled name, returns an @@ -247,7 +266,8 @@ void CodeGenModule::SetGlobalValueAttributes(const Decl *D, // -fvisibility, and private_extern. if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) setGlobalVisibility(GV, attr->getVisibility()); - // FIXME: else handle -fvisibility + else + setGlobalOptionVisibility(GV, getLangOptions().getVisibilityMode()); if (const SectionAttr *SA = D->getAttr<SectionAttr>()) GV->setSection(SA->getName()); @@ -751,7 +771,8 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) setGlobalVisibility(GV, attr->getVisibility()); - // FIXME: else handle -fvisibility + else + setGlobalOptionVisibility(GV, getLangOptions().getVisibilityMode()); // Set the llvm linkage type as appropriate. if (D->getStorageClass() == VarDecl::Static) |