The <stdint.h> atomic types shouldn't be declared if the underlying types aren't available.
PR libstdc++/79862 * include/std/atomic [!_GLIBCXX_USE_C99_STDINT_TR1] (atomic_int8_t) (atomic_uint8_t, atomic_int16_t, atomic_uint16_t, atomic_int32_t, (atomic_uint32_t, atomic_int64_t, atomic_uint64_t) (atomic_int_least8_t, atomic_uint_least8_t, atomic_int_least16_t) (atomic_uint_least16_t, atomic_int_least32_t, atomic_uint_least32_t) (atomic_int_least64_t, atomic_uint_least64_t, atomic_int_fast8_t) (atomic_uint_fast8_t, atomic_int_fast16_t, atomic_uint_fast16_t) (atomic_int_fast32_t, atomic_uint_fast32_t, atomic_int_fast64_t) (atomic_uint_fast64_t, atomic_intmax_t, atomic_uintmax_t): Don't define. Tested x86_64-linux, committed to trunk.
commit 506f73f5ac492bc2e0745be303ffe946fe16758e Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Mar 7 11:55:38 2017 +0000 PR79862 check macro for type aliases that depend on <stdint.h> PR libstdc++/79862 * include/std/atomic [!_GLIBCXX_USE_C99_STDINT_TR1] (atomic_int8_t) (atomic_uint8_t, atomic_int16_t, atomic_uint16_t, atomic_int32_t, (atomic_uint32_t, atomic_int64_t, atomic_uint64_t) (atomic_int_least8_t, atomic_uint_least8_t, atomic_int_least16_t) (atomic_uint_least16_t, atomic_int_least32_t, atomic_uint_least32_t) (atomic_int_least64_t, atomic_uint_least64_t, atomic_int_fast8_t) (atomic_uint_fast8_t, atomic_int_fast16_t, atomic_uint_fast16_t) (atomic_int_fast32_t, atomic_uint_fast32_t, atomic_int_fast64_t) (atomic_uint_fast64_t, atomic_intmax_t, atomic_uintmax_t): Don't define. diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 5b252a4..4b583c17 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -909,7 +909,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// atomic_char32_t typedef atomic<char32_t> atomic_char32_t; - +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2441. Exact-width atomic typedefs should be provided @@ -986,6 +986,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// atomic_uint_fast64_t typedef atomic<uint_fast64_t> atomic_uint_fast64_t; +#endif /// atomic_intptr_t @@ -997,15 +998,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// atomic_size_t typedef atomic<size_t> atomic_size_t; + /// atomic_ptrdiff_t + typedef atomic<ptrdiff_t> atomic_ptrdiff_t; + +#ifdef _GLIBCXX_USE_C99_STDINT_TR1 /// atomic_intmax_t typedef atomic<intmax_t> atomic_intmax_t; /// atomic_uintmax_t typedef atomic<uintmax_t> atomic_uintmax_t; - - /// atomic_ptrdiff_t - typedef atomic<ptrdiff_t> atomic_ptrdiff_t; - +#endif // Function definitions, atomic_flag operations. inline bool