[clang] [clang] __STDC_NO_THREADS__ is no longer necessary for VS 2022 1939 and above (PR #117149)

2024-11-21 Thread Dipesh Sharma via cfe-commits

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)

2024-11-21 Thread Dipesh Sharma via cfe-commits

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)

2025-01-24 Thread Dipesh Sharma via cfe-commits

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)

2025-01-24 Thread Dipesh Sharma via cfe-commits

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)

2025-01-23 Thread Dipesh Sharma via cfe-commits

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)

2025-01-24 Thread Dipesh Sharma via cfe-commits

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)

2025-01-16 Thread Dipesh Sharma via cfe-commits

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