[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
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 `` is unavailable `!__has_include()` is `__has_include` is defined. Closes #115529 >From a8dfbecffdf67a6ed5f5df4bff5405b0ac708da0 Mon Sep 17 00:00:00 2001 From: dipeshs809 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() +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
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
dipeshs809 wrote: > Thank you for working on this! Please be sure to add some test coverage for > the changes to `clang/test/Headers` and a release note in > `clang/docs/ReleaseNotes.rst`. Thanks for the review. I'll incorporate the changes suggested and come back to you. https://github.com/llvm/llvm-project/pull/117149 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
dipeshs809 wrote: @AaronBallman Thanks for reviewing the PR, have incorporated the changes. https://github.com/llvm/llvm-project/pull/117149 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
https://github.com/dipeshs809 updated https://github.com/llvm/llvm-project/pull/117149 >From e89b89f6361e92b9900c03ddd08bed247fc19a67 Mon Sep 17 00:00:00 2001 From: dipeshs809 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/docs/ReleaseNotes.rst | 1 + clang/include/clang/Basic/LangOptions.h | 1 + clang/lib/Basic/Targets/OSTargets.cpp | 6 -- .../deprecate-threads-macro-definition-msvc1939.c | 15 +++ clang/test/Preprocessor/init-aarch64.c| 2 +- 5 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 clang/test/Preprocessor/deprecate-threads-macro-definition-msvc1939.c diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index f110b8cf765075..0179faaf00925f 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -387,6 +387,7 @@ C Language Changes -- - Extend clang's to define ``LONG_LONG_*`` macros for Android's bionic. +- Macro ``__STDC_NO_THREADS__`` is no longer necessary for MSVC 2022 1939 and later. C2y Feature Support ^^^ 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 bf10f9a725567d..8af6623e5cb15a 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -259,8 +259,10 @@ 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) && Opts.C11)) +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: diff --git a/clang/test/Preprocessor/deprecate-threads-macro-definition-msvc1939.c b/clang/test/Preprocessor/deprecate-threads-macro-definition-msvc1939.c new file mode 100644 index 00..e197d8d403a3f5 --- /dev/null +++ b/clang/test/Preprocessor/deprecate-threads-macro-definition-msvc1939.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.40 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC40 %s + +// C89_MSVC33: #define __STDC_NO_THREADS__ 1 +// C99_MSVC33: #define __STDC_NO_THREADS__ 1 +// C11_MSVC33: #define __STDC_NO_THREADS__ 1 +// C89_MSVC39: #define __STDC_NO_THREADS__ 1 +// C99_MSVC39: #define __STDC_NO_THREADS__ 1 +// C11_MSVC39-NOT: #define __STDC_NO_THREADS__ +// C11_MSVC40-NOT: #define __STDC_NO_THREADS__ diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c index 8578993dbfaeb9..c8fe1e1fa7eaff 100644 --- a/clang/test/Preprocessor/init-aarch64.c +++ b/clang/test/Preprocessor/init-aarch64.c @@ -747,7 +747,7 @@ // AARCH64-MSVC: #define __WINT_WIDTH__ 16 // AARCH64-MSVC: #define __aarch64__ 1 -// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix ARM64EC-MSVC %s +// RUN: %clang_cc1 -E -dM -fms-compatibility-version=19.33 -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefi
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
https://github.com/dipeshs809 updated https://github.com/llvm/llvm-project/pull/117149 >From 8d1758e9ddecd2ede29a3fb117404f03f6bdc1fb Mon Sep 17 00:00:00 2001 From: dipeshs809 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/docs/ReleaseNotes.rst | 1 + clang/include/clang/Basic/LangOptions.h | 1 + clang/lib/Basic/Targets/OSTargets.cpp | 8 ++-- .../depricate-threads-macro-defination-msvc1939.c | 13 + clang/test/Preprocessor/init-aarch64.c | 2 +- 5 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index bd74abeb5dd68a..8ba171fa14a880 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -382,6 +382,7 @@ C Language Changes -- - Extend clang's to define ``LONG_LONG_*`` macros for Android's bionic. +- Macro ``__STDC_NO_THREADS__`` is no longer necessary for MSVC 2022 1939 and later. C2y Feature Support ^^^ 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 bf10f9a725567d..fdf3f38a95dab1 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -259,8 +259,12 @@ 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) && (Opts.LangStd >= LangStandard::lang_c11))) { +Builder.defineMacro("__STDC_NO_THREADS__"); + } + // 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: diff --git a/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c b/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c new file mode 100644 index 00..cd1995fccf1b09 --- /dev/null +++ b/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC39 %s + +// C89_MSVC33: #define __STDC_NO_THREADS__ 1 +// C99_MSVC33: #define __STDC_NO_THREADS__ 1 +// C11_MSVC33: #define __STDC_NO_THREADS__ 1 +// C89_MSVC39: #define __STDC_NO_THREADS__ 1 +// C99_MSVC39: #define __STDC_NO_THREADS__ 1 +// C11_MSVC39-NOT: #define __STDC_NO_THREADS__ 0 \ No newline at end of file diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c index 8578993dbfaeb9..303a53672bfa74 100644 --- a/clang/test/Preprocessor/init-aarch64.c +++ b/clang/test/Preprocessor/init-aarch64.c @@ -747,7 +747,7 @@ // AARCH64-MSVC: #define __WINT_WIDTH__ 16 // AARCH64-MSVC: #define __aarch64__ 1 -// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix ARM64EC-MSVC %s +// RUN: %clang_cc1 -E -dM -fms-compatibility-version=19.39 -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix ARM64EC-MSVC %s // ARM64EC-MSVC: #define _INTEGRAL_MAX_BITS 64 // ARM64EC-MSVC:
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
https://github.com/dipeshs809 updated https://github.com/llvm/llvm-project/pull/117149 >From 76a484f0e1419eb1b82d26a353fd3b2f238ac4ba Mon Sep 17 00:00:00 2001 From: dipeshs809 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/docs/ReleaseNotes.rst | 1 + clang/include/clang/Basic/LangOptions.h | 1 + clang/lib/Basic/Targets/OSTargets.cpp | 7 +-- .../depricate-threads-macro-defination-msvc1939.c | 13 + clang/test/Preprocessor/init-aarch64.c | 2 +- 5 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index bd74abeb5dd68a..8ba171fa14a880 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -382,6 +382,7 @@ C Language Changes -- - Extend clang's to define ``LONG_LONG_*`` macros for Android's bionic. +- Macro ``__STDC_NO_THREADS__`` is no longer necessary for MSVC 2022 1939 and later. C2y Feature Support ^^^ 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 bf10f9a725567d..87d45fd7cbed40 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -259,8 +259,11 @@ 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) && (Opts.LangStd >= LangStandard::lang_c11))) { +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: diff --git a/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c b/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c new file mode 100644 index 00..cd1995fccf1b09 --- /dev/null +++ b/clang/test/Preprocessor/depricate-threads-macro-defination-msvc1939.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.33 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC33 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c89 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C89_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c99 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C99_MSVC39 %s +// RUN: %clang_cc1 -E -dM -triple=arm64ec-windows-msvc -std=c11 -fms-compatibility-version=19.39 -ffreestanding < /dev/null | FileCheck -check-prefix=C11_MSVC39 %s + +// C89_MSVC33: #define __STDC_NO_THREADS__ 1 +// C99_MSVC33: #define __STDC_NO_THREADS__ 1 +// C11_MSVC33: #define __STDC_NO_THREADS__ 1 +// C89_MSVC39: #define __STDC_NO_THREADS__ 1 +// C99_MSVC39: #define __STDC_NO_THREADS__ 1 +// C11_MSVC39-NOT: #define __STDC_NO_THREADS__ 0 \ No newline at end of file diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c index 8578993dbfaeb9..c8fe1e1fa7eaff 100644 --- a/clang/test/Preprocessor/init-aarch64.c +++ b/clang/test/Preprocessor/init-aarch64.c @@ -747,7 +747,7 @@ // AARCH64-MSVC: #define __WINT_WIDTH__ 16 // AARCH64-MSVC: #define __aarch64__ 1 -// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix ARM64EC-MSVC %s +// RUN: %clang_cc1 -E -dM -fms-compatibility-version=19.33 -ffreestanding -triple=arm64ec-windows-msvc < /dev/null | FileCheck -match-full-lines -check-prefix ARM64EC-MSVC %s // ARM64EC-MSVC: #define _INTEGRAL_MAX_BITS 64 // ARM64EC-MSVC: #define _M_AMD64 100
[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)
https://github.com/dipeshs809 updated https://github.com/llvm/llvm-project/pull/117149 >From c55e4eedcddf6bad5191eae87a01f933267b83fa Mon Sep 17 00:00:00 2001 From: dipeshs809 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 bf10f9a725567d..17f845d4ffd7ca 100644 --- a/clang/lib/Basic/Targets/OSTargets.cpp +++ b/clang/lib/Basic/Targets/OSTargets.cpp @@ -259,8 +259,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() +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