gold plugin: Fix handling of corrupted bitcode files.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 29 Jul 2014 20:46:19 +0000 (20:46 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 29 Jul 2014 20:46:19 +0000 (20:46 +0000)
We should still claim them and tell gold about the error.

llvm-svn: 214214

llvm/test/tools/gold/Inputs/invalid.bc [new file with mode: 0644]
llvm/test/tools/gold/invalid.ll [new file with mode: 0644]
llvm/tools/gold/gold-plugin.cpp

diff --git a/llvm/test/tools/gold/Inputs/invalid.bc b/llvm/test/tools/gold/Inputs/invalid.bc
new file mode 100644 (file)
index 0000000..2e7ca8d
Binary files /dev/null and b/llvm/test/tools/gold/Inputs/invalid.bc differ
diff --git a/llvm/test/tools/gold/invalid.ll b/llvm/test/tools/gold/invalid.ll
new file mode 100644 (file)
index 0000000..8db7644
--- /dev/null
@@ -0,0 +1,7 @@
+; RUN: not ld -plugin %llvmshlibdir/LLVMgold.so \
+; RUN:    %p/Inputs/invalid.bc -o %t2 2>&1 | FileCheck %s
+
+; test that only one error gets printed
+
+; CHECK: error: LLVM gold plugin has failed to create LTO module: Malformed block
+; CHECK-NOT: error
index 8c30ba2..d428c69 100644 (file)
@@ -291,6 +291,8 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
   if (!LTOModule::isBitcodeFile(view, file->filesize))
     return LDPS_OK;
 
+  *claimed = 1;
+
   std::string Error;
   LTOModule *M =
       LTOModule::createFromBuffer(view, file->filesize, TargetOpts, Error);
@@ -298,10 +300,9 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
     (*message)(LDPL_ERROR,
                "LLVM gold plugin has failed to create LTO module: %s",
                Error.c_str());
-    return LDPS_OK;
+    return LDPS_ERR;
   }
 
-  *claimed = 1;
   Modules.resize(Modules.size() + 1);
   claimed_file &cf = Modules.back();