summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/LTO.cpp5
-rw-r--r--lld/test/ELF/lto/Inputs/drop-debug-info.bcbin0 -> 1152 bytes
-rw-r--r--lld/test/ELF/lto/drop-debug-info.ll9
3 files changed, 14 insertions, 0 deletions
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 9f2457f1277..8ff90f61cc1 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -18,6 +18,7 @@
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/CodeGen/CommandFlags.h"
#include "llvm/CodeGen/ParallelCG.h"
+#include "llvm/IR/AutoUpgrade.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Linker/IRMover.h"
#include "llvm/Support/StringSaver.h"
@@ -100,6 +101,10 @@ void BitcodeCompiler::add(BitcodeFile &F) {
if (M.getDataLayoutStr().empty())
fatal("invalid bitcode file: " + F.getName() + " has no datalayout");
+ // Discard non-compatible debug infos if necessary.
+ M.materializeMetadata();
+ UpgradeDebugInfo(M);
+
// If a symbol appears in @llvm.used, the linker is required
// to treat the symbol as there is a reference to the symbol
// that it cannot see. Therefore, we can't internalize.
diff --git a/lld/test/ELF/lto/Inputs/drop-debug-info.bc b/lld/test/ELF/lto/Inputs/drop-debug-info.bc
new file mode 100644
index 00000000000..f9c471f8e0d
--- /dev/null
+++ b/lld/test/ELF/lto/Inputs/drop-debug-info.bc
Binary files differ
diff --git a/lld/test/ELF/lto/drop-debug-info.ll b/lld/test/ELF/lto/drop-debug-info.ll
new file mode 100644
index 00000000000..7a7ed5ea41d
--- /dev/null
+++ b/lld/test/ELF/lto/drop-debug-info.ll
@@ -0,0 +1,9 @@
+; REQUIRES: x86
+;
+; drop-debug-info.bc was created from "void f(void) {}" with clang 3.5 and
+; -gline-tables-only, so it contains old debug info.
+;
+; RUN: ld.lld -m elf_x86_64 -shared %p/Inputs/drop-debug-info.bc \
+; RUN: -disable-verify 2>&1 | FileCheck %s
+; CHECK: warning: ignoring debug info with an invalid version (1) in {{.*}}drop-debug-info.bc
+
OpenPOWER on IntegriCloud