[2/4] sys/stdatomic.h: be nicer to c++

Message ID 20240709062607.17515-3-sebastian.huber@embedded-brains.de
State New
Headers
Series Synchronize <stdatomic.h> with FreeBSD |

Commit Message

Sebastian Huber July 9, 2024, 6:26 a.m. UTC
  From: Konstantin Belousov <kib@FreeBSD.org>

Use of stdatomic.h is undefined in C++, even the C++ 2020 standard does not
list stdatomic.h as a C library header supported by the language.  More,
there are some subtle differences between the <atomic> C++ header, and
C11+ stdatomic.h provided features.

Nonetheless, it is a quality of the implementation aspect, so let mis-users
mis-use stdatomic.h as they want, by making a compat shim for _Bool.

PR:	262683
Reported by:	yuri
Reviewed by:	dim, emaste
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D34686
---
 newlib/libc/include/stdatomic.h | 10 ++++++++++
 1 file changed, 10 insertions(+)
  

Patch

diff --git a/newlib/libc/include/stdatomic.h b/newlib/libc/include/stdatomic.h
index f62ae7b6a..1acec53c0 100644
--- a/newlib/libc/include/stdatomic.h
+++ b/newlib/libc/include/stdatomic.h
@@ -163,6 +163,11 @@  atomic_signal_fence(memory_order __order __unused)
 #endif
 }
 
+#if defined(__cplusplus) && !defined(_Bool)
+#define	_Bool	bool
+#define	__bool_locally_defined
+#endif
+
 /*
  * 7.17.5 Lock-free property.
  */
@@ -408,4 +413,9 @@  atomic_flag_clear(volatile atomic_flag *__object)
 }
 #endif /* !_KERNEL */
 
+#ifdef __bool_locally_defined
+#undef _Bool
+#undef __bool_locally_defined
+#endif
+
 #endif /* !_STDATOMIC_H_ */