]> granicus.if.org Git - clang/commitdiff
Also put vtables in a comdat when rtti is disabled.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 16 Jan 2015 21:41:44 +0000 (21:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 16 Jan 2015 21:41:44 +0000 (21:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226325 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MicrosoftCXXABI.cpp
test/CodeGenCXX/microsoft-no-rtti-data.cpp

index 1402b5263b6cdaa3c36af841d5375ec3b9dcbfb6..c7e66e9465f3595e5257dfe0623a79e2f067abf7 100644 (file)
@@ -1420,6 +1420,10 @@ llvm::GlobalVariable *MicrosoftCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
         } else {
           llvm_unreachable("unexpected linkage for vftable!");
         }
+      } else {
+        if (llvm::GlobalValue::isWeakForLinker(VFTableLinkage))
+          VTable->setComdat(
+              CGM.getModule().getOrInsertComdat(VTable->getName()));
       }
       VFTable->setLinkage(VFTableLinkage);
       CGM.setGlobalVisibility(VFTable, RD);
index fded4c91e4f1caa5d8ade6db7f040d9ee81a67c5..68fdf0586c0d31e76f854b4918be638815e8de28 100644 (file)
@@ -2,7 +2,7 @@
 
 // vftable shouldn't have RTTI data in it.
 // CHECK-NOT: @"\01??_R4S@@6B@"
-// CHECK: @"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)]
+// CHECK: @"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)], comdat
 
 struct type_info;
 namespace std { using ::type_info; }