[clang] e0c3142 - Headers: tweak inclusion condition for stdatomic.h
Saleem Abdulrasool via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 15 13:51:13 PST 2022
Author: Saleem Abdulrasool
Date: 2022-12-15T21:50:28Z
New Revision: e0c3142af075e2ef89395dbed5939071345eb622
URL: https://github.com/llvm/llvm-project/commit/e0c3142af075e2ef89395dbed5939071345eb622
DIFF: https://github.com/llvm/llvm-project/commit/e0c3142af075e2ef89395dbed5939071345eb622.diff
LOG: Headers: tweak inclusion condition for stdatomic.h
MSVC requires that C++23 be available (_HAS_CXX23) else the entire
content is elided. Conditionalise the inclusion properly so that C/C++
code using stdatomic.h for memory_order_* constants are able to do
so without changing the C++ standard. This repairs builds of Swift and
libdispatch after ba49d39b20cc5358da28af2ac82bd336028780bc.
Differential Revision: https://reviews.llvm.org/D139266
Reviewed By: aaron.ballman, Mordante, fsb4000
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Headers/stdatomic.h
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 0da79fc1a2a9a..d9b44b629220d 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -199,6 +199,8 @@ Major New Features
Bug Fixes
---------
+- ``stdatomic.h`` will use the internal declarations when targeting pre-C++-23
+ on Windows platforms as the MSVC support requires newer C++ standard.
- Correct ``_Static_assert`` to accept the same set of extended integer
constant expressions as is accpted in other contexts that accept them.
This fixes `Issue 57687 <https://github.com/llvm/llvm-project/issues/57687>`_.
diff --git a/clang/lib/Headers/stdatomic.h b/clang/lib/Headers/stdatomic.h
index 648af44f2a641..9093851b76cfc 100644
--- a/clang/lib/Headers/stdatomic.h
+++ b/clang/lib/Headers/stdatomic.h
@@ -15,10 +15,12 @@
*
* Exclude the MSVC path as well as the MSVC header as of the 14.31.30818
* explicitly disallows `stdatomic.h` in the C mode via an `#error`. Fallback
- * to the clang resource header until that is fully supported.
+ * to the clang resource header until that is fully supported. The
+ * `stdatomic.h` header requires C++ 23 or newer.
*/
#if __STDC_HOSTED__ && \
- __has_include_next(<stdatomic.h>) && !(defined(_MSC_VER) && !defined(__cplusplus))
+ __has_include_next(<stdatomic.h>) && \
+ !(defined(_MSC_VER) && defined(__cplusplus) && __cplusplus < 202002L)
# include_next <stdatomic.h>
#else
More information about the cfe-commits
mailing list