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

Reply via email to