https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122584
Bug ID: 122584
Summary: [16 Regression] GCN, nvptx libstdc++
'29_atomics/atomic_ref/[...]' vs. 'libstdc++: Handle
cv-qualified types in atomic and atomic_ref
[PR115402]'
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Keywords: testsuite-fail
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: tschwinge at gcc dot gnu.org
CC: ams at gcc dot gnu.org, peppe at gcc dot gnu.org, redi at
gcc dot gnu.org,
tkaminsk at gcc dot gnu.org, vries at gcc dot gnu.org
Target Milestone: ---
Target: GCN, nvptx
With commit r16-4349-g90dde804626f1344f0d63827709406b135433272 "libstdc++:
Handle cv-qualified types in atomic and atomic_ref [PR115402]",
'--target=amdgcn-amdhsa' and '--target=nvptx' acquired:
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/bool.cc -std=gnu++20 (test for
excess errors)
{+UNRESOLVED: 29_atomics/atomic_ref/bool.cc -std=gnu++20 compilation
failed to produce executable+}
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/bool.cc -std=gnu++26 (test for
excess errors)
{+UNRESOLVED: 29_atomics/atomic_ref/bool.cc -std=gnu++26 compilation
failed to produce executable+}
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/deduction.cc -std=gnu++20 (test
for excess errors)
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/deduction.cc -std=gnu++26 (test
for excess errors)
{+FAIL: 29_atomics/atomic_ref/op_support.cc -std=gnu++20 (test for excess
errors)+}
{+FAIL: 29_atomics/atomic_ref/op_support.cc -std=gnu++26 (test for excess
errors)+}
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/requirements.cc -std=gnu++20
(test for excess errors)
[-PASS:-]{+FAIL:+} 29_atomics/atomic_ref/requirements.cc -std=gnu++26
(test for excess errors)
In case that's relevant: both GCN and nvptx use newlib, and/or may be still be
missing some proper libstdc++ configuration.
For all four test cases, the issue is:
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
error: static assertion failed: atomic operations on volatile T must be
lock-free
In detail:
In file included from
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:52,
from
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc:22:
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h: In
instantiation of 'struct std::__atomic_ref_base<const volatile bool>':
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1597:
required from 'struct std::__atomic_ref_base<volatile bool>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1685:
required from 'struct std::__atomic_ref<volatile bool, false, false, false>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:1767: required
from 'struct std::atomic_ref<volatile bool>'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/bool.cc:69:
required from here
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
error: static assertion failed: atomic operations on volatile T must be
lock-free
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
note: '(((bool)std::__atomic_ref_base<const volatile
bool>::is_always_lock_free) || (!(bool)std::is_volatile_v<volatile bool>))'
evaluates to false
In file included from
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:52,
from
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc:20:
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h: In
instantiation of 'struct std::__atomic_ref_base<const volatile main()::X>':
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1597:
required from 'struct std::__atomic_ref_base<volatile main()::X>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1685:
required from 'struct std::__atomic_ref<volatile main()::X, false, false,
false>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:1767: required
from 'struct std::atomic_ref<volatile main()::X>'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc:26:
required from 'void test_impl(T) [with T = volatile main()::X]'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc:36:
required from 'void test(T) [with T = main()::X]'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc:46:
required from here
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
error: static assertion failed: atomic operations on volatile T must be
lock-free
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
note: '(((bool)std::__atomic_ref_base<const volatile
main()::X>::is_always_lock_free) || (!(bool)std::is_volatile_v<volatile
main()::X>))' evaluates to false
In file included from
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:52,
from
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc:3:
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h: In
instantiation of 'struct std::__atomic_ref_base<const volatile bool>':
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1597:
required from 'struct std::__atomic_ref_base<volatile bool>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1685:
required from 'struct std::__atomic_ref<volatile bool, false, false, false>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:1767: required
from 'struct std::atomic_ref<volatile bool>'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc:38:
required from 'void no_additions() [with T = volatile bool]'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc:72:
required from 'void no_math() [with T = volatile bool]'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/op_support.cc:105:
required from here
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
error: static assertion failed: atomic operations on volatile T must be
lock-free
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
note: '(((bool)std::__atomic_ref_base<const volatile
bool>::is_always_lock_free) || (!(bool)std::is_volatile_v<volatile bool>))'
evaluates to false
In file included from
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:52,
from
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc:20:
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h: In
instantiation of 'struct std::__atomic_ref_base<const volatile bool>':
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1597:
required from 'struct std::__atomic_ref_base<volatile bool>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1685:
required from 'struct std::__atomic_ref<volatile bool, false, false, false>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/atomic:1767: required
from 'struct std::atomic_ref<volatile bool>'
[...]/build-gcc/nvptx-none/libstdc++-v3/include/type_traits:3605:
required from 'constexpr const bool
std::is_standard_layout_v<std::atomic_ref<volatile bool> >'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc:28:
required from 'void test_generic() [with T = volatile bool]'
[...]/source-gcc/libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc:92:
required from here
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
error: static assertion failed: atomic operations on volatile T must be
lock-free
[...]/build-gcc/nvptx-none/libstdc++-v3/include/bits/atomic_base.h:1555:
note: '(((bool)std::__atomic_ref_base<const volatile
bool>::is_always_lock_free) || (!(bool)std::is_volatile_v<volatile bool>))'
evaluates to false