diff options
author | Mike Stump <mrs@apple.com> | 2009-11-18 04:00:48 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-11-18 04:00:48 +0000 |
commit | e56ceca66c5fdd4374c589da5127510ffe66de35 (patch) | |
tree | f1ca8c6e62325988a5da05794bbe62dfc00c3dd6 /lib/CodeGen/CGVtable.cpp | |
parent | 4c3b8962291d4255e6f4e27080efefa5ff01dabf (diff) |
Set up vtable visibility appropriately.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89193 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGVtable.cpp')
-rw-r--r-- | lib/CodeGen/CGVtable.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/CodeGen/CGVtable.cpp b/lib/CodeGen/CGVtable.cpp index efca4f2fbe..4c97a9bdee 100644 --- a/lib/CodeGen/CGVtable.cpp +++ b/lib/CodeGen/CGVtable.cpp @@ -813,10 +813,13 @@ llvm::Constant *CodeGenModule::GenerateVtable(const CXXRecordDecl *LayoutClass, llvm::Constant *C; llvm::ArrayType *type = llvm::ArrayType::get(Ptr8Ty, methods.size()); C = llvm::ConstantArray::get(type, methods); - llvm::Constant *vtable = new llvm::GlobalVariable(getModule(), type, - true, linktype, C, - Out.str()); - vtable = llvm::ConstantExpr::getBitCast(vtable, Ptr8Ty); + llvm::GlobalVariable *GV = new llvm::GlobalVariable(getModule(), type, + true, linktype, C, + Out.str()); + bool Hidden = getDeclVisibilityMode(RD) == LangOptions::Hidden; + if (Hidden) + GV->setVisibility(llvm::GlobalVariable::HiddenVisibility); + llvm::Constant *vtable = llvm::ConstantExpr::getBitCast(GV, Ptr8Ty); llvm::Constant *AddressPointC; uint32_t LLVMPointerWidth = getContext().Target.getPointerWidth(0); AddressPointC = llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext), @@ -1011,10 +1014,12 @@ llvm::Constant *CodeGenModule::GenerateVTT(const CXXRecordDecl *RD) { llvm::Constant *C; llvm::ArrayType *type = llvm::ArrayType::get(Ptr8Ty, inits.size()); C = llvm::ConstantArray::get(type, inits); - llvm::Constant *vtt = new llvm::GlobalVariable(getModule(), type, true, + llvm::GlobalVariable *vtt = new llvm::GlobalVariable(getModule(), type, true, linktype, C, Out.str()); - vtt = llvm::ConstantExpr::getBitCast(vtt, Ptr8Ty); - return vtt; + bool Hidden = getDeclVisibilityMode(RD) == LangOptions::Hidden; + if (Hidden) + vtt->setVisibility(llvm::GlobalVariable::HiddenVisibility); + return llvm::ConstantExpr::getBitCast(vtt, Ptr8Ty); } llvm::Constant *CGVtableInfo::getVtable(const CXXRecordDecl *RD) { |