Author: Sam Clegg Date: 2025-02-24T13:09:20-08:00 New Revision: 1e85e5abb327317777cfe0d5d97d6dc211dbc1e3
URL: https://github.com/llvm/llvm-project/commit/1e85e5abb327317777cfe0d5d97d6dc211dbc1e3 DIFF: https://github.com/llvm/llvm-project/commit/1e85e5abb327317777cfe0d5d97d6dc211dbc1e3.diff LOG: [clang][WebAssembly] Always have `-pthread` imply `--shared-memory` linker flag (#127939) Unlike `-lpthread` this flag should not be suppressed by `-nostdlib`. Added: Modified: clang/lib/Driver/ToolChains/WebAssembly.cpp clang/test/Driver/wasm-toolchain.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index bd25fd1a8933a..93f17a03c580f 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -150,14 +150,15 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); + if (Args.hasArg(options::OPT_pthread)) + CmdArgs.push_back("--shared-memory"); + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { if (ToolChain.ShouldLinkCXXStdlib(Args)) ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs); - if (Args.hasArg(options::OPT_pthread)) { + if (Args.hasArg(options::OPT_pthread)) CmdArgs.push_back("-lpthread"); - CmdArgs.push_back("--shared-memory"); - } CmdArgs.push_back("-lc"); AddRunTimeLibs(ToolChain, ToolChain.getDriver(), CmdArgs, Args); diff --git a/clang/test/Driver/wasm-toolchain.c b/clang/test/Driver/wasm-toolchain.c index f516a4e457da7..1ad219338ac28 100644 --- a/clang/test/Driver/wasm-toolchain.c +++ b/clang/test/Driver/wasm-toolchain.c @@ -75,11 +75,16 @@ // Thread-related command line tests. // '-pthread' sets +atomics, +bulk-memory, +mutable-globals, +sign-ext, and --shared-memory -// RUN: %clang -### --target=wasm32-unknown-unknown \ -// RUN: --sysroot=/foo %s -pthread 2>&1 \ +// RUN: %clang -### --target=wasm32-unknown-unknown --sysroot=/foo %s -pthread 2>&1 \ // RUN: | FileCheck -check-prefix=PTHREAD %s // PTHREAD: "-cc1" {{.*}} "-target-feature" "+atomics" "-target-feature" "+bulk-memory" "-target-feature" "+mutable-globals" "-target-feature" "+sign-ext" -// PTHREAD: wasm-ld{{.*}}" "-lpthread" "--shared-memory" +// PTHREAD: wasm-ld{{.*}}" "--shared-memory" "-lpthread" +// +// '-pthread' with '-nostdlib' should still set '--shared-memory' but not include '-lpthread' +// RUN: %clang -### --target=wasm32-unknown-unknown --sysroot=/foo %s -pthread -nostdlib 2>&1 \ +// RUN: | FileCheck -check-prefix=PTHREAD-NOSTDLIB %s +// PTHREAD-NOSTDLIB: "-cc1" {{.*}} "-target-feature" "+atomics" "-target-feature" "+bulk-memory" "-target-feature" "+mutable-globals" "-target-feature" "+sign-ext" +// PTHREAD-NOSTDLIB: wasm-ld{{.*}}" "--shared-memory" "-o" "a.out" // '-pthread' not allowed with '-mno-atomics' // RUN: not %clang -### --target=wasm32-unknown-unknown \ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits