summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-01-13 01:12:55 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-01-13 01:12:55 +0000
commitd09776b9455d3e5ec755d9394d4bab690c754b36 (patch)
tree99f32e77a6f0364e9e26ecb0db90371ae5847753 /clang
parent4d58d5f88f4b522a91393ace196d8bee196a12ba (diff)
downloadbcm5719-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.cpp3
-rw-r--r--clang/lib/CodeGen/CGVTables.cpp2
-rw-r--r--clang/test/CodeGenCXX/visibility.cpp4
-rw-r--r--clang/test/CodeGenCXX/vtable-linkage.cpp6
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.
OpenPOWER on IntegriCloud