[LTO] Don't crash on a BitcodeFile without DataLayout.
authorDavide Italiano <davide@freebsd.org>
Sat, 16 Apr 2016 01:33:33 +0000 (01:33 +0000)
committerDavide Italiano <davide@freebsd.org>
Sat, 16 Apr 2016 01:33:33 +0000 (01:33 +0000)
Emit an error instead.

llvm-svn: 266504

lld/ELF/LTO.cpp
lld/test/ELF/lto/invalid-bitcode.ll [new file with mode: 0644]

index a4ef9b6..6fe4e11 100644 (file)
@@ -82,6 +82,8 @@ void BitcodeCompiler::add(BitcodeFile &F) {
   ArrayRef<SymbolBody *> Bodies = F.getSymbols();
 
   Module &M = Obj->getModule();
+  if (M.getDataLayoutStr().empty())
+    fatal("invalid bitcode file: " + F.getName() + " has no datalayout");
 
   // If a symbol appears in @llvm.used, the linker is required
   // to treat the symbol as there is a reference to the symbol
diff --git a/lld/test/ELF/lto/invalid-bitcode.ll b/lld/test/ELF/lto/invalid-bitcode.ll
new file mode 100644 (file)
index 0000000..eceffb1
--- /dev/null
@@ -0,0 +1,12 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t.o
+; RUN: not ld.lld -m elf_x86_64 %t.o 2>&1 | FileCheck %s
+
+; CHECK: invalid bitcode file:
+
+; This bitcode file has no datalayout.
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @_start() {
+  ret void
+}