git: c1a24b9dbead - main - sys/stdatomic.h: be nicer to c++

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 28 Mar 2022 00:17:10 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=c1a24b9dbeade11bfeedc91996672582f6ea32f2

commit c1a24b9dbeade11bfeedc91996672582f6ea32f2
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-03-27 21:16:15 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-03-28 00:16:02 +0000

    sys/stdatomic.h: be nicer to c++
    
    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
---
 sys/sys/stdatomic.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/sys/sys/stdatomic.h b/sys/sys/stdatomic.h
index 4dc6d680f934..f4fd1c6ae60e 100644
--- a/sys/sys/stdatomic.h
+++ b/sys/sys/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.
  */
@@ -406,4 +411,9 @@ atomic_flag_clear(volatile atomic_flag *__object)
 }
 #endif /* !_KERNEL */
 
+#ifdef __bool_locally_defined
+#undef _Bool
+#undef __bool_locally_defined
+#endif
+
 #endif /* !_STDATOMIC_H_ */