https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119849
Bug ID: 119849
Summary: libgomp.c++/allocator-1.C etc. FAIL
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libgomp
Assignee: unassigned at gcc dot gnu.org
Reporter: ro at gcc dot gnu.org
CC: jakub at gcc dot gnu.org
Target Milestone: ---
Target: *-*-solaris2.11
Two new libgomp tests FAIL on Solaris, both sparc and x86, 32 and 64-bit:
+FAIL: libgomp.c++/allocator-1.C execution test
+FAIL: libgomp.c++/allocator-2.C execution test
The abort with
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Thread 2 received signal SIGABRT, Aborted.
[Switching to Thread 1 (LWP 1)]
0xfe02e845 in __lwp_sigqueue () from /lib/libc.so.1
(gdb) bt
#0 0xfe02e845 in __lwp_sigqueue () from /lib/libc.so.1
#1 0xfe02654f in thr_kill () from /lib/libc.so.1
#2 0xfdf61e22 in raise () from /lib/libc.so.1
#3 0xfdf2f452 in abort () from /lib/libc.so.1
#4 0xfe3126a3 in __gnu_cxx::__verbose_terminate_handler ()
at
/builds/ulhg/mrcarson-trunk_194/components/gcc14/gcc-14.2.0/libstdc++-v3/libsupc++/vterminate.cc:95
#5 0xfe30ef03 in __cxxabiv1::__terminate (
handler=0xfe3126e0 <__gnu_cxx::__verbose_terminate_handler()>)
at
/builds/ulhg/mrcarson-trunk_194/components/gcc14/gcc-14.2.0/libstdc++-v3/libsupc++/eh_terminate.cc:48
#6 0xfe30ef71 in std::terminate ()
at
/builds/ulhg/mrcarson-trunk_194/components/gcc14/gcc-14.2.0/libstdc++-v3/libsupc++/eh_terminate.cc:58
#7 0xfe30f278 in __cxxabiv1::__cxa_throw (obj=0x8088718,
tinfo=0xfe4bd710 <typeinfo for std::bad_alloc>,
dest=0xfe30c660 <std::bad_alloc::~bad_alloc()>)
at
/builds/ulhg/mrcarson-trunk_194/components/gcc14/gcc-14.2.0/libstdc++-v3/libsupc++/eh_throw.cc:98
#8 0xfe341e83 in std::__throw_bad_alloc ()
at
/builds/ulhg/mrcarson-trunk_194/components/gcc14/gcc-14.2.0/libstdc++-v3/src/c++11/functexcept.cc:54
#9 0x0807381b in omp::allocator::__detail::__allocator_templ<int,
(omp_allocator_handle_t)200>::allocate (this=0xfeffdb07, __n=1)
at
/var/gcc/regression/master/11.4-gcc/build/i386-pc-solaris2.11/./libgomp/omp.h:464
#10 0x080729e1 in std::allocator_traits<ompx::allocator::gnu_pinned_mem<int>
>::allocate (__a=..., __n=1)
at
/var/gcc/regression/master/11.4-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include/bits/alloc_traits.h:385
#11 0x0806d132 in test<int, ompx::allocator::gnu_pinned_mem> (initial_value=42)
at
/vol/gcc/src/hg/master/local/libgomp/testsuite/libgomp.c++/allocator-1.C:32
#12 0x0806c200 in main ()
at
/vol/gcc/src/hg/master/local/libgomp/testsuite/libgomp.c++/allocator-1.C:124
This is the same problem that caused PR libgomp/113448: gnu_pinned_mem is only
supported on a
few select targets, apparently linux, gcn, and nvptx (which have
implementations
in config/*/allocator.c).
While Solaris does have mlock, too, it's only available with the
PRIV_PROC_LOCK_MEMORY
privilege which is *not* available for regular users.
Here's what I suspect should happen:
* The gnu_pinned_mem subtests should be split off into their own files so that
the rest of the tests can still be run on non-Linux targets.
* Those new tests should be guarded with a new effective-target keyword. At
the moment, some tests are skipped or xfailed on non-Linux with
/* { dg-skip-if "Pinning not implemented on this host" { ! *-*-linux-gnu* }
} */
or
! { dg-xfail-run-if "Pinning not implemented on this host" { ! *-*-linux-gnu*
} }
This doesn't seem appropriate, though, since it's likely to miss other
targets
also implementing pinned memory.