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)
llvm-svn: 226325

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

index 1402b52..c7e66e9 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 fded4c9..68fdf05 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; }