From cd8ba3377ca0229784ad5e13d5d96cc6ff75c125 Mon Sep 17 00:00:00 2001 From: raiden00pl Date: Sat, 18 Oct 2025 11:12:13 +0200 Subject: [PATCH] include/nuttx/atomic.h: fix C++ definition conflicts when C++ lib has an atomic implementation, we shouldn't include NuttX defined macros to avoid conflicts Fix errors like: build/include/libcxx/__atomic/atomic.h:445:1: error: expected identifier before numeric constant 445 | atomic_fetch_add(volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT | ^~~~~~~~~~~~~~~~ Signed-off-by: raiden00pl --- include/nuttx/atomic.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/nuttx/atomic.h b/include/nuttx/atomic.h index 79d475f0189..2a6ff228a12 100644 --- a/include/nuttx/atomic.h +++ b/include/nuttx/atomic.h @@ -29,6 +29,13 @@ #include +#define NEED_ATOMIC_MACROS +#if defined(__has_include) +# if __has_include() && defined(__cplusplus) +# undef NEED_ATOMIC_MACROS +# endif +#endif + #if defined(__has_include) && !defined(CONFIG_LIBC_ARCH_ATOMIC) # if __has_include() && defined(__cplusplus) extern "C++" @@ -98,6 +105,8 @@ typedef volatile int64_t atomic64_t; * Pre-processor Definitions ****************************************************************************/ +#ifdef NEED_ATOMIC_MACROS + #define atomic_set(obj, val) ATOMIC_FUNC(store, 4)(obj, val, __ATOMIC_RELAXED) #define atomic_set_release(obj, val) ATOMIC_FUNC(store, 4)(obj, val, __ATOMIC_RELEASE) #define atomic64_set(obj, val) ATOMIC_FUNC(store, 8)(obj, val, __ATOMIC_RELAXED) @@ -198,6 +207,8 @@ typedef volatile int64_t atomic64_t; #define atomic64_try_cmpxchg_relaxed(obj, expected, desired) \ ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED) +#endif + /**************************************************************************** * Public Function Prototypes ****************************************************************************/