[gcc r17-199] libstdc++: Test ATOMIC_*_LOCK_FREE macros for <stdatomic.h>

Tomasz Kaminski tkaminsk@gcc.gnu.org
Wed Apr 29 09:42:18 GMT 2026


https://gcc.gnu.org/g:efe29124c7486a72f23d002e40376fc0f38c21fc

commit r17-199-gefe29124c7486a72f23d002e40376fc0f38c21fc
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date:   Wed Apr 29 09:39:01 2026 +0200

    libstdc++: Test ATOMIC_*_LOCK_FREE macros for <stdatomic.h>
    
    Coverage for LWG 4480, "<stdatomic.h> should provide ATOMIC_CHAR8_T_LOCK_FREE".
    
    libstdc++-v3/ChangeLog:
    
            * testsuite/29_atomics/headers/stdatomic.h/macros.cc:
            Copy of ../atomic/macros.cc with header include changed.
    
    Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
    Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>

Diff:
---
 .../29_atomics/headers/stdatomic.h/macros.cc       | 96 ++++++++++++++++++++++
 1 file changed, 96 insertions(+)

diff --git a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/macros.cc b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/macros.cc
new file mode 100644
index 000000000000..ec8f877a5636
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/macros.cc
@@ -0,0 +1,96 @@
+// { dg-do preprocess { target c++23 } }
+
+// Copyright (C) 2008-2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <stdatomic.h>
+
+#ifndef ATOMIC_BOOL_LOCK_FREE 
+# error "ATOMIC_BOOL_LOCK_FREE must be a macro"
+#elif ATOMIC_BOOL_LOCK_FREE != 1 && ATOMIC_BOOL_LOCK_FREE != 2
+# error "ATOMIC_BOOL_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_CHAR_LOCK_FREE 
+# error "ATOMIC_CHAR_LOCK_FREE must be a macro"
+#elif ATOMIC_CHAR_LOCK_FREE != 1 && ATOMIC_CHAR_LOCK_FREE != 2
+# error "ATOMIC_CHAR_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifdef _GLIBCXX_USE_CHAR8_T
+# ifndef ATOMIC_CHAR8_T_LOCK_FREE
+#  error "ATOMIC_CHAR8_T_LOCK_FREE must be a macro"
+# elif ATOMIC_CHAR8_T_LOCK_FREE != 1 && ATOMIC_CHAR8_T_LOCK_FREE != 2
+#  error "ATOMIC_CHAR8_T_LOCK_FREE must be 1 or 2"
+# endif
+#endif
+
+#ifndef ATOMIC_CHAR16_T_LOCK_FREE 
+# error "ATOMIC_CHAR16_T_LOCK_FREE must be a macro"
+#elif ATOMIC_CHAR16_T_LOCK_FREE != 1 && ATOMIC_CHAR16_T_LOCK_FREE != 2
+# error "ATOMIC_CHAR16_T_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_CHAR32_T_LOCK_FREE 
+# error "ATOMIC_CHAR32_T_LOCK_FREE must be a macro"
+#elif ATOMIC_CHAR32_T_LOCK_FREE != 1 && ATOMIC_CHAR32_T_LOCK_FREE != 2
+# error "ATOMIC_CHAR32_T_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_WCHAR_T_LOCK_FREE 
+# error "ATOMIC_WCHAR_T_LOCK_FREE must be a macro"
+#elif ATOMIC_WCHAR_T_LOCK_FREE != 1 && ATOMIC_WCHAR_T_LOCK_FREE != 2
+# error "ATOMIC_WCHAR_T_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_SHORT_LOCK_FREE 
+# error "ATOMIC_SHORT_LOCK_FREE must be a macro"
+#elif ATOMIC_SHORT_LOCK_FREE != 1 && ATOMIC_SHORT_LOCK_FREE != 2
+# error "ATOMIC_SHORT_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_INT_LOCK_FREE 
+# error "ATOMIC_INT_LOCK_FREE must be a macro"
+#elif ATOMIC_INT_LOCK_FREE != 1 && ATOMIC_INT_LOCK_FREE != 2
+# error "ATOMIC_INT_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_LONG_LOCK_FREE 
+# error "ATOMIC_LONG_LOCK_FREE must be a macro"
+#elif ATOMIC_LONG_LOCK_FREE != 1 && ATOMIC_LONG_LOCK_FREE != 2
+# error "ATOMIC_LONG_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_LLONG_LOCK_FREE 
+# error "ATOMIC_LLONG_LOCK_FREE must be a macro"
+#elif ATOMIC_LLONG_LOCK_FREE != 1 && ATOMIC_LLONG_LOCK_FREE != 2
+# error "ATOMIC_LLONG_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_POINTER_LOCK_FREE 
+# error "ATOMIC_POINTER_LOCK_FREE must be a macro"
+#elif ATOMIC_POINTER_LOCK_FREE != 1 && ATOMIC_POINTER_LOCK_FREE != 2
+# error "ATOMIC_POINTER_LOCK_FREE must be 1 or 2"
+#endif
+
+#ifndef ATOMIC_FLAG_INIT
+    #error "ATOMIC_FLAG_INIT_must_be_a_macro"
+#endif
+
+#ifndef ATOMIC_VAR_INIT
+    #error "ATOMIC_VAR_INIT_must_be_a_macro"
+#endif


More information about the Libstdc++-cvs mailing list