diff options
-rw-r--r-- | lld/test/wasm/undefined.ll | 5 | ||||
-rw-r--r-- | lld/wasm/Driver.cpp | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/lld/test/wasm/undefined.ll b/lld/test/wasm/undefined.ll index 69b7a8238fd..a74dd6d66de 100644 --- a/lld/test/wasm/undefined.ll +++ b/lld/test/wasm/undefined.ll @@ -6,10 +6,13 @@ ; CHECK: error: {{.*}}.o: undefined symbol: foo ; CHECK: error: undefined symbol: baz -; But succeeds if we pass a file containing 'foo' as --allow-undefined-file. +; Succeeds if we pass a file containing 'foo' as --allow-undefined-file. ; RUN: echo 'foo' > %t.txt ; RUN: wasm-ld --check-signatures --allow-undefined-file=%t.txt -o %t.wasm %t.o +; Succeeds even if a missing symbol is added via --export +; RUN: wasm-ld --check-signatures --allow-undefined --export=xxx -o %t.wasm %t.o + target triple = "wasm32-unknown-unknown-wasm" ; Takes the address of the external foo() resulting in undefined external diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp index ef0794c3073..a97026d4df8 100644 --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -346,7 +346,7 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) { Symbol *Sym = Symtab->find(Name); if (Sym && Sym->isDefined()) Sym->setHidden(false); - else + else if (!Config->AllowUndefined) error("symbol exported via --export not found: " + Name); } |