https://github.com/sbc100 updated 
https://github.com/llvm/llvm-project/pull/213749

>From 192d1c740365abf4db02e5b12ce0117ddc588926 Mon Sep 17 00:00:00 2001
From: Sam Clegg <[email protected]>
Date: Mon, 3 Aug 2026 12:30:48 -0700
Subject: [PATCH] [clang][Driver] Make -pthreads an alias to -pthread

Remove `OPT_pthreads` and make `-pthreads` an alias to `-pthread`.

`-pthreads` was originally added in c800391fb9 as a distinct flag.
I believe this is because in GCC it is supported as an alias for
`-pthread` (on Solaris 2 only).

In LLVM this setting is only checked by a subset of toolchains during
linking and is never checked during compilation (`-c`), so it currently
causes `argument unused during compilation: '-pthreads'` (and does
not set `_REENTRANT`).  So you could argue that even a Solaris specific
alias it is currently broken.

Aliasing `-pthreads` to `-pthread` makes `-pthreads` work consistently
for both compilation and linking across all targets, and allows removing
`OPT_pthreads` checks in individual toolchains.

Alternatively, if legacy we don't care about Solaris 2 compatibility
we could just drop the `-pthreads` form completely?  That option does
have some risk though.  This one seems fairly risk-free.
---
 clang/include/clang/Options/Options.td  | 2 +-
 clang/lib/Driver/ToolChains/AIX.cpp     | 4 ++--
 clang/lib/Driver/ToolChains/Darwin.cpp  | 1 -
 clang/lib/Driver/ToolChains/Fuchsia.cpp | 2 +-
 clang/lib/Driver/ToolChains/Gnu.cpp     | 3 +--
 clang/lib/Driver/ToolChains/Haiku.cpp   | 2 +-
 clang/lib/Driver/ToolChains/Solaris.cpp | 1 -
 clang/test/Driver/darwin-ld-pthread.c   | 2 ++
 8 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 2467ebd0abe19..1cce00d5f8618 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -6674,12 +6674,12 @@ def print_diagnostic_options : Flag<["-", "--"], 
"print-diagnostic-options">,
   HelpText<"Print all of Clang's warning options">,
   Visibility<[ClangOption, CLOption]>;
 def private__bundle : Flag<["-"], "private_bundle">;
-def pthreads : Flag<["-"], "pthreads">;
 defm pthread : BoolOption<"", "pthread",
   LangOpts<"POSIXThreads">, DefaultFalse,
   PosFlag<SetTrue, [], [ClangOption], "Support POSIX threads in generated 
code">,
   NegFlag<SetFalse>,
   BothFlags<[], [ClangOption, CC1Option, FlangOption, FC1Option]>>;
+def : Flag<["-"], "pthreads">, Alias<pthread>;
 def static_pie : Flag<["-"], "static-pie">, Group<Link_Group>;
 def read__only__relocs : Separate<["-"], "read_only_relocs">;
 def remap : Flag<["-"], "remap">;
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 586bc08067eff..1e449d79a1735 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -312,8 +312,8 @@ void aix::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
         CmdArgs.push_back("-lpthreads");
       }
 
-      // Support POSIX threads if "-pthreads" or "-pthread" is present.
-      if (Args.hasArg(options::OPT_pthreads, options::OPT_pthread))
+      // Support POSIX threads if "-pthread" is present.
+      if (Args.hasArg(options::OPT_pthread))
         CmdArgs.push_back("-lpthreads");
 
       if (D.CCCIsCXX())
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index d3de04fc5155e..613dec6ef1352 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -807,7 +807,6 @@ void darwin::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
 
       // No need to do anything for pthreads. Claim argument to avoid warning.
       Args.ClaimAllArgs(options::OPT_pthread);
-      Args.ClaimAllArgs(options::OPT_pthreads);
     }
   }
 
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp 
b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index abde9fa10482d..19045450cd81c 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -149,7 +149,7 @@ void fuchsia::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   bool NoLibc = Args.hasArg(options::OPT_nolibc);
   bool OnlyLibstdcxxStatic = Args.hasArg(options::OPT_static_libstdcxx) &&
                              !Args.hasArg(options::OPT_static);
-  bool Pthreads = Args.hasArg(options::OPT_pthread, options::OPT_pthreads);
+  bool Pthreads = Args.hasArg(options::OPT_pthread);
   bool SplitStack = Args.hasArg(options::OPT_fsplit_stack);
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
                    options::OPT_r)) {
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 24076d8814322..e0a34295fb513 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -494,8 +494,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
       if (NeedsXRayDeps)
         linkXRayRuntimeDeps(ToolChain, Args, CmdArgs);
 
-      bool WantPthread = Args.hasArg(options::OPT_pthread) ||
-                         Args.hasArg(options::OPT_pthreads);
+      bool WantPthread = Args.hasArg(options::OPT_pthread);
 
       // Use the static OpenMP runtime with -static-openmp
       bool StaticOpenMP = Args.hasArg(options::OPT_static_openmp) &&
diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp 
b/clang/lib/Driver/ToolChains/Haiku.cpp
index a155f22b75a79..10756fda94b44 100644
--- a/clang/lib/Driver/ToolChains/Haiku.cpp
+++ b/clang/lib/Driver/ToolChains/Haiku.cpp
@@ -139,7 +139,7 @@ void haiku::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   }
 
   // No need to do anything for pthreads. Claim argument to avoid warning.
-  Args.claimAllArgs(options::OPT_pthread, options::OPT_pthreads);
+  Args.claimAllArgs(options::OPT_pthread);
 
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
                    options::OPT_r)) {
diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp 
b/clang/lib/Driver/ToolChains/Solaris.cpp
index e5f1cbb033c3b..2b3f5a1307a45 100644
--- a/clang/lib/Driver/ToolChains/Solaris.cpp
+++ b/clang/lib/Driver/ToolChains/Solaris.cpp
@@ -119,7 +119,6 @@ void solaris::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
     // libpthread has been folded into libc since Solaris 10, no need to do
     // anything for pthreads. Claim argument to avoid warning.
     Args.ClaimAllArgs(options::OPT_pthread);
-    Args.ClaimAllArgs(options::OPT_pthreads);
   }
 
   if (LinkerIsGnuLd) {
diff --git a/clang/test/Driver/darwin-ld-pthread.c 
b/clang/test/Driver/darwin-ld-pthread.c
index b22b68a6e6232..6eddcff45daea 100644
--- a/clang/test/Driver/darwin-ld-pthread.c
+++ b/clang/test/Driver/darwin-ld-pthread.c
@@ -1,4 +1,6 @@
 // RUN: %clang -Wunused-command-line-argument -pthread -target 
x86_64-apple-darwin -### /dev/null -o /dev/null 2>&1 | FileCheck %s
+// RUN: %clang -Wunused-command-line-argument -pthreads -target 
x86_64-apple-darwin -### /dev/null -o /dev/null 2>&1 | FileCheck %s
 
 // There is nothing to do at link time to get pthread support. But do not warn.
 // CHECK-NOT: argument unused during compilation: '-pthread'
+// CHECK-NOT: argument unused during compilation: '-pthreads'

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to