From 7cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 3 Apr 2009 03:28:57 +0000 Subject: Implement -fvisibility. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68369 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenModule.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'lib/CodeGen/CodeGenModule.cpp') 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()) setGlobalVisibility(GV, attr->getVisibility()); - // FIXME: else handle -fvisibility + else + setGlobalOptionVisibility(GV, getLangOptions().getVisibilityMode()); if (const SectionAttr *SA = D->getAttr()) GV->setSection(SA->getName()); @@ -751,7 +771,8 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { if (const VisibilityAttr *attr = D->getAttr()) 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) -- cgit v1.2.3-18-g5258