diff options
-rw-r--r-- | clang/lib/CodeGen/CGRtti.cpp | 13 | ||||
-rw-r--r-- | 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 4a9779a9b22..01767466e8b 100644 --- a/clang/lib/CodeGen/CGRtti.cpp +++ b/clang/lib/CodeGen/CGRtti.cpp @@ -145,7 +145,7 @@ public: llvm::Constant *finish(std::vector<llvm::Constant *> &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 f496d7af2fc..a1ff1ff6872 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 |