This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 95fe3e8680b6570170eaed9bbd9e75a8b6574c2c
Author: zhangyu117 <[email protected]>
AuthorDate: Wed Aug 12 15:28:17 2026 +0800

    nuttx/atomic.h: use _Atomic define atomic_t.
    
    1. use _atomic as wrapper because if _Atomic empty, may affects the 
compilation of other files:
    
    2. for clang builtin function, it donot accept param with keyword "_Atomic"
    
    Signed-off-by: zhangyu117 <[email protected]>
---
 include/nuttx/atomic.h   |  5 ++--
 include/nuttx/compiler.h | 65 +++++++++++++++++++++---------------------------
 tools/nxstyle.c          |  4 +++
 3 files changed, 35 insertions(+), 39 deletions(-)

diff --git a/include/nuttx/atomic.h b/include/nuttx/atomic.h
index 9f466ff7dd4..aa381a4402e 100644
--- a/include/nuttx/atomic.h
+++ b/include/nuttx/atomic.h
@@ -159,9 +159,8 @@
  * Public Types
  ****************************************************************************/
 
-typedef volatile int32_t atomic_t;
-typedef volatile int64_t atomic64_t;
-
+typedef __Atomic(int32_t) atomic_t;
+typedef __Atomic(int64_t) atomic64_t;
 
 /****************************************************************************
  * Public Function Prototypes
diff --git a/include/nuttx/compiler.h b/include/nuttx/compiler.h
index 32a2a96d765..00f926a3510 100644
--- a/include/nuttx/compiler.h
+++ b/include/nuttx/compiler.h
@@ -79,6 +79,15 @@
 #  define CONFIG_HAVE_CXX14 1
 #endif
 
+/* Keyword about _Atomic */
+
+#if defined(__cplusplus) || defined(__clang__) || \
+    !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
+#  define __Atomic(t) t
+#else
+#  define __Atomic(t) _Atomic(t)
+#endif
+
 /* Green Hills Software definitions *****************************************/
 
 #if defined(__ghs__)
@@ -1383,44 +1392,28 @@
 /* Atomic functions. */
 
 #  ifdef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-#    define atomic_store_4(obj, val, memorder) \
-       __c11_atomic_store((FAR volatile _Atomic int32_t*)obj, val, memorder)
-#    define atomic_store_8(obj, val, memorder) \
-       __c11_atomic_store((FAR volatile _Atomic int64_t*)obj, val, memorder)
-#    define atomic_load_4(obj, memorder) \
-       __c11_atomic_load((FAR volatile _Atomic int32_t*)obj, memorder)
-#    define atomic_load_8(obj, memorder) \
-       __c11_atomic_load((FAR volatile _Atomic int64_t*)obj, memorder)
-#    define atomic_fetch_add_4(obj, val, memorder) \
-       __c11_atomic_fetch_add((FAR volatile _Atomic int32_t*)obj, val, 
memorder)
-#    define atomic_fetch_add_8(obj, val, memorder) \
-       __c11_atomic_fetch_add((FAR volatile _Atomic int64_t*)obj, val, 
memorder)
-#    define atomic_fetch_sub_4(obj, val, memorder) \
-       __c11_atomic_fetch_sub((FAR volatile _Atomic int32_t*)obj, val, 
memorder)
-#    define atomic_fetch_sub_8(obj, val, memorder) \
-       __c11_atomic_fetch_sub((FAR volatile _Atomic int64_t*)obj, val, 
memorder)
-#    define atomic_fetch_and_4(obj, val, memorder) \
-       __c11_atomic_fetch_and((FAR volatile _Atomic int32_t*)obj, val, 
memorder)
-#    define atomic_fetch_and_8(obj, val, memorder) \
-       __c11_atomic_fetch_and((FAR volatile _Atomic int64_t*)obj, val, 
memorder)
-#    define atomic_fetch_or_4(obj, val, memorder) \
-       __c11_atomic_fetch_or((FAR volatile _Atomic int32_t*)obj, val, memorder)
-#    define atomic_fetch_or_8(obj, val, memorder) \
-       __c11_atomic_fetch_or((FAR volatile _Atomic int64_t*)obj, val, memorder)
-#    define atomic_fetch_xor_4(obj, val, memorder) \
-       __c11_atomic_fetch_xor((FAR volatile _Atomic int32_t*)obj, val, 
memorder)
-#    define atomic_fetch_xor_8(obj, val, memorder) \
-       __c11_atomic_fetch_xor((FAR volatile _Atomic int64_t*)obj, val, 
memorder)
-#    define atomic_exchange_4(obj, val, memorder) \
-       __c11_atomic_exchange((FAR volatile _Atomic int32_t*)obj, val, memorder)
-#    define atomic_exchange_8(obj, val, memorder) \
-       __c11_atomic_exchange((FAR volatile _Atomic int64_t*)obj, val, memorder)
+#    define atomic_store_4(obj, val, memorder)     __c11_atomic_store(obj, 
val, memorder)
+#    define atomic_store_8(obj, val, memorder)     __c11_atomic_store(obj, 
val, memorder)
+#    define atomic_load_4(obj, memorder)           __c11_atomic_load(obj, 
memorder)
+#    define atomic_load_8(obj, memorder)           __c11_atomic_load(obj, 
memorder)
+#    define atomic_fetch_add_4(obj, val, memorder) __c11_atomic_add(obj, val, 
memorder)
+#    define atomic_fetch_add_8(obj, val, memorder) __c11_atomic_add(obj, val, 
memorder)
+#    define atomic_fetch_sub_4(obj, val, memorder) __c11_atomic_sub(obj, val, 
memorder)
+#    define atomic_fetch_sub_8(obj, val, memorder) __c11_atomic_sub(obj, val, 
memorder)
+#    define atomic_fetch_and_4(obj, val, memorder) __c11_atomic_and(obj, val, 
memorder)
+#    define atomic_fetch_and_8(obj, val, memorder) __c11_atomic_and(obj, val, 
memorder)
+#    define atomic_fetch_or_4(obj, val, memorder)  __c11_atomic_or(obj, val, 
memorder)
+#    define atomic_fetch_or_8(obj, val, memorder)  __c11_atomic_or(obj, val, 
memorder)
+#    define atomic_fetch_xor_4(obj, val, memorder) __c11_atomic_xor(obj, val, 
memorder)
+#    define atomic_fetch_xor_8(obj, val, memorder) __c11_atomic_xor(obj, val, 
memorder)
+#    define atomic_exchange_4(obj, val, memorder)  __c11_atomic_exchange(obj, 
val, memorder)
+#    define atomic_exchange_8(obj, val, memorder)  __c11_atomic_exchange(obj, 
val, memorder)
 #    define atomic_compare_exchange_4(obj, expected, desired, weak, success, 
failure) \
-       ((weak) ? __c11_atomic_compare_exchange_weak((FAR volatile _Atomic 
int32_t*)obj, expected, desired, success, failure) \
-               : __c11_atomic_compare_exchange_strong((FAR volatile _Atomic 
int32_t*)obj, expected, desired, success, failure))
+       ((weak) ? __c11_atomic_compare_exchange_weak(obj, expected, desired, 
success, failure) \
+               : __c11_atomic_compare_exchange_strong(obj, expected, desired, 
success, failure))
 #    define atomic_compare_exchange_8(obj, expected, desired, weak, success, 
failure) \
-       ((weak) ? __c11_atomic_compare_exchange_weak((FAR volatile _Atomic 
int64_t*)obj, expected, desired, success, failure) \
-               : __c11_atomic_compare_exchange_strong((FAR volatile _Atomic 
int64_t*)obj, expected, desired, success, failure))
+       ((weak) ? __c11_atomic_compare_exchange_weak(obj, expected, desired, 
success, failure) \
+               : __c11_atomic_compare_exchange_strong(obj, expected, desired, 
success, failure))
 #  endif
 
 /* Unknown compiler *********************************************************/
diff --git a/tools/nxstyle.c b/tools/nxstyle.c
index 6fa5c81688c..8a35991ba51 100644
--- a/tools/nxstyle.c
+++ b/tools/nxstyle.c
@@ -365,6 +365,10 @@ static const char *g_white_content_list[] =
 
   "_Atomic",
 
+  /* Ref:  include/nuttx/atomic.h */
+
+  "__Atomic",
+
   /* Ref:  https://en.cppreference.com/w/c/keyword/_Thread_local */
 
   "_Thread_local",

Reply via email to