https://github.com/dipeshs809 created https://github.com/llvm/llvm-project/pull/117149
Since `__STDC_NO_THREADS__` is a reserved identifier, - If `MSVC version < 17.9` - C version < C11(201112L) - When `<threads.h>` is unavailable `!__has_include(<threads.h>)` is `__has_include` is defined. Closes #115529 >From a8dfbecffdf67a6ed5f5df4bff5405b0ac708da0 Mon Sep 17 00:00:00 2001 From: dipeshs809 <dipeshs...@gmail.com> Date: Thu, 21 Nov 2024 17:48:22 +0530 Subject: [PATCH] [clang] guard __STDC_NO_THREADS__ defination for MSVCVersion 2022 17.9 and above --- clang/include/clang/Basic/LangOptions.h | 1 + clang/lib/Basic/Targets/OSTargets.cpp | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index 949c8f5d448bcf..114a5d34a008bd 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -144,6 +144,7 @@ class LangOptionsBase { MSVC2019_5 = 1925, MSVC2019_8 = 1928, MSVC2022_3 = 1933, + MSVC2022_9 = 1939, }; enum SYCLMajorVersion { diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp index 88c054150ab224..f8d974e9979e4d 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -248,8 +248,19 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) { Builder.defineMacro("_KERNEL_MODE"); Builder.defineMacro("_INTEGRAL_MAX_BITS", "64"); - Builder.defineMacro("__STDC_NO_THREADS__"); - + // Define __STDC_NO_THREADS__ based on MSVC version, threads.h availability, + // and language standard. + if (!Opts.isCompatibleWithMSVC(LangOptions::MSVC2022_9)) { + Builder.defineMacro("__STDC_NO_THREADS__"); + } else { +#if defined(__has_include) && !__has_include(<threads.h>) + Builder.defineMacro("__STDC_NO_THREADS__"); +#endif +#if defined(__STDC_VERSION__) && __STDC_VERSION__ < 201112L + Builder.defineMacro("__STDC_NO_THREADS__"); +#endif + } + // Builder.defineMacro("__STDC_NO_THREADS__"); // Starting with VS 2022 17.1, MSVC predefines the below macro to inform // users of the execution character set defined at compile time. // The value given is the Windows Code Page Identifier: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits