Index: lld/trunk/test/wasm/export.ll =================================================================== --- lld/trunk/test/wasm/export.ll +++ lld/trunk/test/wasm/export.ll @@ -3,13 +3,29 @@ ; RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s +@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @used_function to i8*)], section "llvm.metadata" + target triple = "wasm32-unknown-unknown" +; Not exported by default, but forced via commandline define hidden i32 @hidden_function() local_unnamed_addr { entry: ret i32 0 } +; Not exported by default +define i32 @default_function() local_unnamed_addr { +entry: + ret i32 0 +} + +; Exported because its part of llvm.used +define i32 @used_function() local_unnamed_addr { +entry: + ret i32 0 +} + +; Exported by default define void @_start() local_unnamed_addr { entry: ret void @@ -17,6 +33,8 @@ ; CHECK-ERROR: error: symbol exported via --export not found: missing +; CHECK-NOT: - Name: default_function + ; CHECK: - Type: EXPORT ; CHECK-NEXT: Exports: ; CHECK-NEXT: - Name: memory @@ -31,7 +49,10 @@ ; CHECK-NEXT: - Name: hidden_function ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 1 -; CHECK-NEXT: - Name: _start +; CHECK-NEXT: - Name: used_function ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 2 +; CHECK-NEXT: - Name: _start +; CHECK-NEXT: Kind: FUNCTION +; CHECK-NEXT: Index: 3 ; CHECK-NEXT: - Type: CODE Index: lld/trunk/wasm/Symbols.cpp =================================================================== --- lld/trunk/wasm/Symbols.cpp +++ lld/trunk/wasm/Symbols.cpp @@ -116,7 +116,7 @@ if (Config->ExportDynamic && !isHidden()) return true; - return false; + return Flags & WASM_SYMBOL_EXPORTED; } uint32_t FunctionSymbol::getFunctionIndex() const {