diff --git a/lld/test/wasm/bad-archive-member.s b/lld/test/wasm/bad-archive-member.s new file mode 100644 --- /dev/null +++ b/lld/test/wasm/bad-archive-member.s @@ -0,0 +1,11 @@ +# REQUIRES: x86 + +# RUN: rm -rf %t.dir +# RUN: mkdir -p %t.dir +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -o %t.dir/elf.o %s +# RUN: llvm-ar rcs %t.dir/libfoo.a %t.dir/elf.o +# RUN: not wasm-ld %t.dir/libfoo.a -o /dev/null 2>&1 | FileCheck %s +# CHECK: error: unknown file type: {{.*}}libfoo.a(elf.o) + +.globl _start +_start: diff --git a/lld/wasm/InputFiles.cpp b/lld/wasm/InputFiles.cpp --- a/lld/wasm/InputFiles.cpp +++ b/lld/wasm/InputFiles.cpp @@ -87,7 +87,12 @@ if (magic == file_magic::bitcode) return make(mb, archiveName, offsetInArchive); - fatal("unknown file type: " + mb.getBufferIdentifier()); + std::string name = mb.getBufferIdentifier().str(); + if (!archiveName.empty()) { + name = archiveName.str() + "(" + name + ")"; + } + + fatal("unknown file type: " + name); } // Relocations contain either symbol or type indices. This function takes a