https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92305
--- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Thomas Schwinge from comment #6)
> On powerpc64le-unknown-linux-gnu
I can reproduce it on a powerpc64le-unknown-linux-gnu w/o real offloading. It
fails here for subroutine test_dummy_opt_val_callee_2 for
if (.not.present(c_aptr) .or. .not.present(c_bptr)) stop 150
as both are marked as not present – that's completely unrelated to OpenMP (and
happens with and without -fopenmp).
The callee and caller are:
test_dummy_opt_val_callee_2 (real(kind=8) aa, real(kind=8) bb,
void * c_aptr, void * c_bptr, real(kind=8) * * aptr, real(kind=8) *
* bptr,
logical(kind=1) _aa, logical(kind=1) _bb, logical(kind=1) _c_aptr,
logical(kind=1) _c_bptr)
…
if ((logical(kind=4)) !_c_aptr || (logical(kind=4)) !_c_bptr)
_gfortran_stop_numeric (150, 0);
And the call is:
test_dummy_opt_val_callee_2 (aa, bb, c_aptr, c_bptr, &aptr, &bptr, 1, 1, 1,
1);
At a glance, that looks fine – and a minimal test case also passes. My feeling
is that something with passing the arguments goes wrong – which is hidden in
the gimple and not visible in the tree dump.