diff options
-rw-r--r-- | clang/lib/CodeGen/CGVTT.cpp | 3 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGVTables.cpp | 2 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/visibility.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/vtable-linkage.cpp | 6 |
4 files changed, 7 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/CGVTT.cpp b/clang/lib/CodeGen/CGVTT.cpp index bee87e28874..5a99059f1af 100644 --- a/clang/lib/CodeGen/CGVTT.cpp +++ b/clang/lib/CodeGen/CGVTT.cpp @@ -399,8 +399,7 @@ CodeGenVTables::GenerateVTT(llvm::GlobalVariable::LinkageTypes Linkage, GV = new llvm::GlobalVariable(CGM.getModule(), Type, /*isConstant=*/true, Linkage, Init, Name); CGM.setGlobalVisibility(GV, RD, /*ForDefinition*/ GenerateDefinition); - if (GenerateDefinition) - GV->setUnnamedAddr(true); + GV->setUnnamedAddr(true); if (OldGV) { GV->takeName(OldGV); diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index 0e43b1a3528..ff65e583bb9 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -2982,6 +2982,7 @@ llvm::GlobalVariable *CodeGenVTables::GetAddrOfVTable(const CXXRecordDecl *RD) { llvm::GlobalVariable *GV = GetGlobalVariable(CGM.getModule(), Name, ArrayType, llvm::GlobalValue::ExternalLinkage); + GV->setUnnamedAddr(true); return GV; } @@ -3073,7 +3074,6 @@ CodeGenVTables::GenerateClassData(llvm::GlobalVariable::LinkageTypes Linkage, } VTable = GetAddrOfVTable(RD); - VTable->setUnnamedAddr(true); EmitVTableDefinition(VTable, Linkage, RD); GenerateVTT(Linkage, /*GenerateDefinition=*/true, RD); diff --git a/clang/test/CodeGenCXX/visibility.cpp b/clang/test/CodeGenCXX/visibility.cpp index ea524f379e7..0e6a2efbb37 100644 --- a/clang/test/CodeGenCXX/visibility.cpp +++ b/clang/test/CodeGenCXX/visibility.cpp @@ -26,8 +26,8 @@ // CHECK: @_ZGVZN6Test193fooIiEEvvE1a = linkonce_odr global i64 // CHECK-HIDDEN: @_ZZN6Test193fooIiEEvvE1a = linkonce_odr hidden global // CHECK-HIDDEN: @_ZGVZN6Test193fooIiEEvvE1a = linkonce_odr hidden global i64 -// CHECK-HIDDEN: @_ZTTN6Test161AIcEE = external constant -// CHECK-HIDDEN: @_ZTVN6Test161AIcEE = external constant +// CHECK-HIDDEN: @_ZTTN6Test161AIcEE = external unnamed_addr constant +// CHECK-HIDDEN: @_ZTVN6Test161AIcEE = external unnamed_addr constant // CHECK: @_ZTVN5Test63fooE = weak_odr hidden unnamed_addr constant namespace Test1 { diff --git a/clang/test/CodeGenCXX/vtable-linkage.cpp b/clang/test/CodeGenCXX/vtable-linkage.cpp index d8829025126..752f761ad77 100644 --- a/clang/test/CodeGenCXX/vtable-linkage.cpp +++ b/clang/test/CodeGenCXX/vtable-linkage.cpp @@ -99,7 +99,7 @@ void use_F() { // B has a key function that is not defined in this translation unit so its vtable // has external linkage. -// CHECK-1: @_ZTV1B = external constant +// CHECK-1: @_ZTV1B = external unnamed_addr constant // C has no key function, so its vtable should have weak_odr linkage // and hidden visibility (rdar://problem/7523229). @@ -157,12 +157,12 @@ void use_F() { // F<int> is an explicit template instantiation declaration without a // key function, so its vtable should have external linkage. -// CHECK-9: @_ZTV1FIiE = external constant +// CHECK-9: @_ZTV1FIiE = external unnamed_addr constant // E<int> is an explicit template instantiation declaration. It has a // key function that is not instantiated, so we should only reference // its vtable, not define it. -// CHECK-10: @_ZTV1EIiE = external constant +// CHECK-10: @_ZTV1EIiE = external unnamed_addr constant // The anonymous struct for e has no linkage, so the vtable should have // internal linkage. |