[clang] [clang][WebAssembly] Always have `-pthread` imply `--shared-memory` linker flag (PR #127939)
Sam Clegg via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 20 10:36:40 PST 2025
https://github.com/sbc100 updated https://github.com/llvm/llvm-project/pull/127939
>From 19e0415bfefa7724b8149e95a86adf960d786673 Mon Sep 17 00:00:00 2001
From: Sam Clegg <sbc at chromium.org>
Date: Wed, 19 Feb 2025 17:26:41 -0800
Subject: [PATCH] [clang][WebAssembly] Always have `-pthread` imply
`--shared-memory` linker flag
Unlike `-lpthread` this flag should not be suppressed by `-nostdlib`.
---
clang/lib/Driver/ToolChains/WebAssembly.cpp | 7 ++++---
clang/test/Driver/wasm-toolchain.c | 10 +++++++---
2 files changed, 11 insertions(+), 6 deletions(-)
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..097d954b8c4a4 100644
--- a/clang/test/Driver/wasm-toolchain.c
+++ b/clang/test/Driver/wasm-toolchain.c
@@ -75,11 +75,15 @@
// 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"
+//
+// 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 \
More information about the cfe-commits
mailing list