Index: test/wasm/undefined.ll =================================================================== --- test/wasm/undefined.ll +++ test/wasm/undefined.ll @@ -6,10 +6,14 @@ ; 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: echo 'foo' > %t.txt +; 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 Index: wasm/Driver.cpp =================================================================== --- wasm/Driver.cpp +++ wasm/Driver.cpp @@ -346,7 +346,7 @@ 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); }