Work around pr23045 and make it easier to reproduce.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 27 Mar 2015 15:55:06 +0000 (15:55 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 27 Mar 2015 15:55:06 +0000 (15:55 +0000)
Dropping old debug format requires the entire module to be read upfront.

This was failing only with the gold plugin, but that is just because
llvm-link was not upgrading metadata.

The new testcase using llvm-link shows the problem.

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

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

diff --git a/test/Linker/Inputs/drop-debug.bc b/test/Linker/Inputs/drop-debug.bc
new file mode 100644 (file)
index 0000000..f9c471f
Binary files /dev/null and b/test/Linker/Inputs/drop-debug.bc differ
diff --git a/test/Linker/drop-debug.ll b/test/Linker/drop-debug.ll
new file mode 100644 (file)
index 0000000..9c1072a
--- /dev/null
@@ -0,0 +1,6 @@
+; RUN: llvm-link %p/Inputs/drop-debug.bc -o %t 2>&1 | FileCheck %s
+
+;; drop-debug.bc was created from "void f(void) {}" with clang 3.5 and
+; -gline-tables-only, so it contains old debug info.
+
+; CHECK: warning: ignoring debug info with an invalid version (1) in {{.*}}/Inputs/drop-debug.bc
index 93ce3bc0f446b2fbd1223dd3055b9f6252007fd0..16e5045bcb93fb611d99a603d35d6518cbf15773 100644 (file)
@@ -20,7 +20,6 @@
 #include "llvm/Bitcode/ReaderWriter.h"
 #include "llvm/CodeGen/Analysis.h"
 #include "llvm/CodeGen/CommandFlags.h"
-#include "llvm/IR/AutoUpgrade.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/IR/DiagnosticPrinter.h"
@@ -603,8 +602,11 @@ getModuleForFile(LLVMContext &Context, claimed_file &F,
 
   Module &M = Obj.getModule();
 
-  M.materializeMetadata();
-  UpgradeDebugInfo(M);
+  // Fixme (pr23045). We would like to upgrade the metadata with something like
+  //  Result->materializeMetadata();
+  //  UpgradeDebugInfo(*Result);
+  // but that fails to drop old debug info from function bodies.
+  M.materializeAllPermanently();
 
   SmallPtrSet<GlobalValue *, 8> Used;
   collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ false);
index e52191a267bcd7d434b73066bfb36735163a55eb..a15855b392a45336031421ab9c2f5e6594cd450f 100644 (file)
@@ -69,6 +69,12 @@ loadFile(const char *argv0, const std::string &FN, LLVMContext &Context) {
   if (!Result)
     Err.print(argv0, errs());
 
+  // Fixme (pr23045). We would like to upgrade the metadata with something like
+  //  Result->materializeMetadata();
+  //  UpgradeDebugInfo(*Result);
+  // but that fails to drop old debug info from function bodies.
+  Result->materializeAllPermanently();
+
   return Result;
 }