https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118859
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> ---
For that testcase g++.dg/gomp/adjust-args-2.C itself:
#pragma omp dispatch
f1(&b, &a);
makes it valid.
(Still does not solve the issue of comment 0 of accepting invalid code.)
But that test file also badly needs -fdump-tree-gimple + scan-tree-dump-times
to ensure GCC generates proper code. It currently doesn't, e.g., for:
namespace N {
void g(C *c);
...
N::C c;
#pragma omp dispatch
N::f0(&c);
which yields:
D.3155 = __builtin_omp_get_mapped_ptr (c, D.3154);
N::g (&D.3156);
Namely: The nonpointer 'c' is passed to omp_get_mapped_ptr (wrong: should be
'&c') – but instead of passing the resulting pointer 'D.3155' to N::g, the code
uses '&D.3156' (wrong).
* * *
Some arg passing issues will be fixed by Fortran 'adjust_args' follow up patch
(WIP, nearly ready) - but I won't add the scan-tree-dump-times to the .C file
as part of this work. - And it might not fix all issues.
(Something to re-check is also whether the reference to pointer type is handled
correctly, but it might be.)