llvm-project/lld/test/wasm/undefined.ll
Sam Clegg 9abe8c4805 [lld][WebAssembly] Report undefined symbols during scanRelocations
This puts handling of undefined symbols in a single location.  Its
also more in line with the ELF backend which only reports undefined
symbols based on relocations.

One side effect is that we no longer report undefined symbols that are
only referenced in GC'd sections.

This also fixes a crash reported in the emscripten toolchain:
https://github.com/emscripten-core/emscripten/issues/8930.

Differential Revision: https://reviews.llvm.org/D64280

llvm-svn: 365553
2019-07-09 20:45:20 +00:00

28 lines
905 B
LLVM

; RUN: llc -filetype=obj %s -o %t.o
; RUN: wasm-ld --allow-undefined -o %t.wasm %t.o
; Fails due to undefined 'foo'
; RUN: not wasm-ld --undefined=baz -o %t.wasm %t.o 2>&1 | FileCheck %s
; CHECK: error: {{.*}}.o: undefined symbol: foo
; CHECK-NOT: undefined symbol: baz
; Succeeds if we pass a file containing 'foo' as --allow-undefined-file.
; RUN: echo 'foo' > %t.txt
; RUN: wasm-ld --allow-undefined-file=%t.txt -o %t.wasm %t.o
; Succeeds even if a missing symbol is added via --export
; RUN: wasm-ld --allow-undefined --export=xxx -o %t.wasm %t.o
target triple = "wasm32-unknown-unknown"
; Takes the address of the external foo() resulting in undefined external
@bar = global i8* bitcast (i32 ()* @foo to i8*), align 4
@llvm.used = appending global [1 x i8**] [i8** @bar], section "llvm.metadata"
declare i32 @foo() #0
define hidden void @_start() local_unnamed_addr #0 {
entry:
ret void
}