From c5d2ed73ff340665a3992bc4f3e7dcf0e47e9296 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Wed, 18 Nov 2009 03:21:29 +0000 Subject: [PATCH] Be sure to set visibility for ZTI symbols for classes from the class. llvm-svn: 89186 --- clang/lib/CodeGen/CGRtti.cpp | 13 ++++++++----- clang/test/CodeGenCXX/rtti.cpp | 7 ++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/clang/lib/CodeGen/CGRtti.cpp b/clang/lib/CodeGen/CGRtti.cpp index 4a9779a9b22b..01767466e8b5 100644 --- a/clang/lib/CodeGen/CGRtti.cpp +++ b/clang/lib/CodeGen/CGRtti.cpp @@ -145,7 +145,7 @@ public: llvm::Constant *finish(std::vector &info, llvm::GlobalVariable *GV, - llvm::StringRef Name) { + llvm::StringRef Name, bool Extern) { llvm::GlobalVariable::LinkageTypes linktype; linktype = llvm::GlobalValue::LinkOnceODRLinkage; @@ -165,7 +165,8 @@ public: OGV->replaceAllUsesWith(NewPtr); OGV->eraseFromParent(); } - GV->setVisibility(llvm::GlobalVariable::HiddenVisibility); + if (!Extern) + GV->setVisibility(llvm::GlobalVariable::HiddenVisibility); return llvm::ConstantExpr::getBitCast(GV, Int8PtrTy); } @@ -230,7 +231,9 @@ public: } } - return finish(info, GV, Out.str()); + bool Extern = CGM.getDeclVisibilityMode(RD) != LangOptions::Hidden; + + return finish(info, GV, Out.str(), Extern); } /// - BuildFlags - Build a __flags value for __pbase_type_info. @@ -291,7 +294,7 @@ public: if (PtrMem) info.push_back(BuildType2(BTy)); - return finish(info, GV, Out.str()); + return finish(info, GV, Out.str(), false); } llvm::Constant *BuildSimpleType(QualType Ty, const char *vtbl) { @@ -312,7 +315,7 @@ public: info.push_back(C); info.push_back(BuildName(Ty)); - return finish(info, GV, Out.str()); + return finish(info, GV, Out.str(), false); } llvm::Constant *BuildType(QualType Ty) { diff --git a/clang/test/CodeGenCXX/rtti.cpp b/clang/test/CodeGenCXX/rtti.cpp index f496d7af2fc5..a1ff1ff68729 100644 --- a/clang/test/CodeGenCXX/rtti.cpp +++ b/clang/test/CodeGenCXX/rtti.cpp @@ -41,7 +41,12 @@ class test1_D : public test1_B7 { // CHECK-NEXT: .space 4 // CHECK-NEXT: .quad __ZTIi -// CHECK: __ZTIM7test3_Ai: +// CHECK: .globl __ZTS7test3_A +// CHECK-NEXT: .weak_definition __ZTS7test3_A +// CHECK: __ZTS7test3_A: +// CHECK-NEXT: .asciz "7test3_A" + +// CHECK: __ZTIM7test3_Ai: // CHECK-NEXT: .quad (__ZTVN10__cxxabiv129__pointer_to_member_type_infoE) + 16 // CHECK-NEXT: .quad __ZTSM7test3_Ai // CHECK-NEXT: .space 4