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?= <mati...@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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits