[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