diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-01-13 01:12:55 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-01-13 01:12:55 +0000 |
commit | d09776b9455d3e5ec755d9394d4bab690c754b36 (patch) | |
tree | 99f32e77a6f0364e9e26ecb0db90371ae5847753 /clang | |
parent | 4d58d5f88f4b522a91393ace196d8bee196a12ba (diff) | |
download | bcm5719-llvm-d09776b9455d3e5ec755d9394d4bab690c754b36.tar.gz bcm5719-llvm-d09776b9455d3e5ec755d9394d4bab690c754b36.zip |
Only add unnamed_addr to definitions.
llvm-svn: 123354
Diffstat (limited to 'clang')
-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, 8 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CGVTT.cpp b/clang/lib/CodeGen/CGVTT.cpp index 5a99059f1af..bee87e28874 100644 --- a/clang/lib/CodeGen/CGVTT.cpp +++ b/clang/lib/CodeGen/CGVTT.cpp @@ -399,7 +399,8 @@ CodeGenVTables::GenerateVTT(llvm::GlobalVariable::LinkageTypes Linkage, GV = new llvm::GlobalVariable(CGM.getModule(), Type, /*isConstant=*/true, Linkage, Init, Name); CGM.setGlobalVisibility(GV, RD, /*ForDefinition*/ GenerateDefinition); - GV->setUnnamedAddr(true); + if (GenerateDefinition) + GV->setUnnamedAddr(true); if (OldGV) { GV->takeName(OldGV); diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index ff65e583bb9..0e43b1a3528 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -2982,7 +2982,6 @@ llvm::GlobalVariable *CodeGenVTables::GetAddrOfVTable(const CXXRecordDecl *RD) { llvm::GlobalVariable *GV = GetGlobalVariable(CGM.getModule(), Name, ArrayType, llvm::GlobalValue::ExternalLinkage); - GV->setUnnamedAddr(true); return GV; } @@ -3074,6 +3073,7 @@ 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 0e6a2efbb37..ea524f379e7 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 unnamed_addr constant -// CHECK-HIDDEN: @_ZTVN6Test161AIcEE = external unnamed_addr constant +// CHECK-HIDDEN: @_ZTTN6Test161AIcEE = external constant +// CHECK-HIDDEN: @_ZTVN6Test161AIcEE = external 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 752f761ad77..d8829025126 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 unnamed_addr constant +// CHECK-1: @_ZTV1B = external 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 unnamed_addr constant +// CHECK-9: @_ZTV1FIiE = external 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 unnamed_addr constant +// CHECK-10: @_ZTV1EIiE = external constant // The anonymous struct for e has no linkage, so the vtable should have // internal linkage. |