]> granicus.if.org Git - clang/commitdiff
Also set unnamed_addr on declarations.
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 15 Jan 2011 08:23:14 +0000 (08:23 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 15 Jan 2011 08:23:14 +0000 (08:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123531 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGVTT.cpp
lib/CodeGen/CGVTables.cpp
test/CodeGenCXX/visibility.cpp
test/CodeGenCXX/vtable-linkage.cpp

index bee87e28874f1192a68f25a35b9806d5e4ba8af4..5a99059f1af6f1fb1ce6ead19ec0fb3a92d78439 100644 (file)
@@ -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);
index 0e43b1a3528131e85226f2476a8cb2d5877ef037..ff65e583bb94b6d7f2299ad1dc8bef553400cf1b 100644 (file)
@@ -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);
index ea524f379e7a5f3f8b67f3cbd9fe2f55106d5a08..0e6a2efbb37ef9ce73a544027deb1754a07697e5 100644 (file)
@@ -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 {
index d882902512674a77831cf7122008599609e4c9e5..752f761ad77bd182d44f5ef486bf61160dfe978c 100644 (file)
@@ -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.