https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118741
Bug ID: 118741
Summary: [OpenMP] metadirectives for declarative use rejected
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: openmp, rejects-valid
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
CC: sandra at gcc dot gnu.org
Target Milestone: ---
Probably not the highest priority but the following could be useful -
especially with 'device' to handle certain host or offload devices:
----------------
int f()
{
int x, y;
#pragma omp metadirective \
when(user={condition(1)} : allocate(x) align(128)) \
otherwise(nothing)
x = 5
y = x;
return y;
}
----------------
sorry, unimplemented: declarative directive variants of a ‘metadirective’ are
not supported
4 | #pragma omp metadirective when(user={condition(1)} : allocate(x)
align(128)) otherwise(nothing)
| ^~~~~~~~
* * *
Likewise for Fortran:
subroutine f
integer :: x
!$omp metadirective &
!$omp& when(user={condition(.true.)} : allocate(x) align(128))
!$omp& otherwise(nothing)
x = 5
end
f951: sorry, unimplemented: declarative directive variants are not supported
(See PR118740 for the missing location in the diagnostic.)
* * *
The problem is that GCC handles those via attributes, inserted during parsing,
and processes them during gimplify – while at least for 'device' the solution
would happen very late.