[llvm-extract] Drop comdats from declarations
authorReid Kleckner <reid@kleckner.net>
Mon, 6 Jul 2015 18:48:02 +0000 (18:48 +0000)
committerReid Kleckner <reid@kleckner.net>
Mon, 6 Jul 2015 18:48:02 +0000 (18:48 +0000)
The verifier rejects comdats on declarations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241483 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/ExtractGV.cpp
test/Other/extract.ll

index 2f8c7d9..b9462f2 100644 (file)
@@ -93,8 +93,11 @@ namespace {
 
         makeVisible(*I, Delete);
 
-        if (Delete)
+        if (Delete) {
+          // Make this a declaration and drop it's comdat.
           I->setInitializer(nullptr);
+          I->setComdat(nullptr);
+        }
       }
 
       // Visit the Functions.
@@ -108,8 +111,11 @@ namespace {
 
         makeVisible(*I, Delete);
 
-        if (Delete)
+        if (Delete) {
+          // Make this a declaration and drop it's comdat.
           I->deleteBody();
+          I->setComdat(nullptr);
+        }
       }
 
       // Visit the Aliases.
index 8b0c835..08675d8 100644 (file)
@@ -7,19 +7,22 @@
 ; llvm-extract uses lazy bitcode loading, so make sure it correctly reads
 ; from bitcode files in addition to assembly files.
 
-; CHECK: define hidden void @foo() {
+; CHECK: define hidden void @foo() comdat($x) {
 ; CHECK:   ret void
 ; CHECK: }
 
 ; The private linkage for foo() should be changed to external linkage and
 ; hidden visibility added.
 ; DELETE: declare hidden void @foo()
+; DELETE-NOT: comdat
 ; DELETE: define void @bar() {
 ; DELETE:   call void @foo()
 ; DELETE:   ret void
 ; DELETE: }
 
-define private void @foo() {
+$x = comdat any
+
+define private void @foo() comdat($x) {
   ret void
 }
 define void @bar() {