[clang] [Clang][Driver] Declare win32 threads on Windows (PR #121442)

Mateusz MikuĊ‚a via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 3 09:56:35 PST 2025


https://github.com/mati865 updated https://github.com/llvm/llvm-project/pull/121442

>From b4a5daabac693aa3021c81180a9d25ac34177f62 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mateusz=20Miku=C5=82a?= <mati865 at gmail.com>
Date: Wed, 1 Jan 2025 21:38:49 +0100
Subject: [PATCH] [Clang][Driver] Declare win32 threads on Windows

Fixes https://github.com/llvm/llvm-project/issues/101
---
 clang/lib/Driver/ToolChain.cpp        | 2 +-
 clang/lib/Driver/ToolChains/Clang.cpp | 2 +-
 clang/lib/Driver/ToolChains/MSVC.h    | 2 ++
 clang/lib/Driver/ToolChains/MinGW.h   | 2 ++
 clang/test/Driver/thread-model.c      | 6 ++++++
 5 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 9f174fbda398b5..aef5b7e2d15d4e 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -1082,7 +1082,7 @@ bool ToolChain::isThreadModelSupported(const StringRef Model) const {
            Triple.getArch() == llvm::Triple::armeb ||
            Triple.getArch() == llvm::Triple::thumb ||
            Triple.getArch() == llvm::Triple::thumbeb || Triple.isWasm();
-  } else if (Model == "posix")
+  } else if (Model == "posix" || (Model == "win32" && Triple.isOSWindows()))
     return true;
 
   return false;
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index a020e00cd17392..bc181dfddc6398 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5792,7 +5792,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
       Model = A->getValue();
     } else
       Model = TC.getThreadModel();
-    if (Model != "posix") {
+    if (Model != "posix" && Model != "win32") {
       CmdArgs.push_back("-mthread-model");
       CmdArgs.push_back(Args.MakeArgString(Model));
     }
diff --git a/clang/lib/Driver/ToolChains/MSVC.h b/clang/lib/Driver/ToolChains/MSVC.h
index 3950a8ed38e8b4..4962f8d70def21 100644
--- a/clang/lib/Driver/ToolChains/MSVC.h
+++ b/clang/lib/Driver/ToolChains/MSVC.h
@@ -51,6 +51,8 @@ class LLVM_LIBRARY_VISIBILITY MSVCToolChain : public ToolChain {
   TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
                 Action::OffloadKind DeviceOffloadKind) const override;
 
+  std::string getThreadModel() const override { return "win32"; }
+
   UnwindTableLevel
   getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;
   bool isPICDefault() const override;
diff --git a/clang/lib/Driver/ToolChains/MinGW.h b/clang/lib/Driver/ToolChains/MinGW.h
index a9963d8d06c29d..a99b6ad3b1b577 100644
--- a/clang/lib/Driver/ToolChains/MinGW.h
+++ b/clang/lib/Driver/ToolChains/MinGW.h
@@ -66,6 +66,8 @@ class LLVM_LIBRARY_VISIBILITY MinGW : public ToolChain {
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getThreadModel() const override { return "win32"; }
+
   UnwindTableLevel
   getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;
   bool isPICDefault() const override;
diff --git a/clang/test/Driver/thread-model.c b/clang/test/Driver/thread-model.c
index 9abe5f11d9aab9..ce9e7bbc8f5b9e 100644
--- a/clang/test/Driver/thread-model.c
+++ b/clang/test/Driver/thread-model.c
@@ -8,9 +8,15 @@
 // SINGLE: Thread model: single
 // SINGLE: "-mthread-model" "single"
 // INVALID: error: invalid thread model 'silly' in '-mthread-model silly' for this target
+// WIN32: Thread model: win32
 
 // RUN: %clang -### -target wasm32-unknown-linux-gnu -c %s -v 2>&1 | FileCheck %s
 // RUN: %clang -### -target wasm32-unknown-linux-gnu -c %s -v -mthread-model single 2>&1 | FileCheck --check-prefix=SINGLE %s
 // RUN: %clang -### -target wasm32-unknown-linux-gnu -c %s -v -mthread-model posix 2>&1 | FileCheck %s
 // RUN: not %clang -### --target=wasm32-unknown-linux-gnu -c %s -v -mthread-model silly 2>&1 | FileCheck --check-prefix=INVALID %s
 // RUN: %clang -### -target wasm64-unknown-linux-gnu -c %s -v 2>&1 | FileCheck %s
+
+// RUN: %clang -### -target x86_64-pc-windows-gnu -c %s -v 2>&1 | FileCheck --check-prefix=WIN32 %s
+// RUN: %clang -### -target x86_64-pc-windows-gnu -c %s -v -mthread-model posix 2>&1 | FileCheck %s
+// RUN: %clang -### -target x86_64-pc-windows-gnu -c %s -v -mthread-model win32 2>&1 | FileCheck --check-prefix=WIN32 %s
+// RUN: %clang -### -target x86_64-pc-windows-msvc -c %s -v 2>&1 | FileCheck --check-prefix=WIN32 %s



More information about the cfe-commits mailing list