https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119330
            Bug ID: 119330
           Summary: [OpenMP] GCC wrongly rejects depend(out:var%a(1:10))
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: openmp, rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
  Target Milestone: ---

The following is rejected by gfortran with:

   12 |             !$omp task depend(out:var%a(1:10))
      |                                      1
Error: Syntax error in OpenMP variable list at (1)

That's wrong because 'depend' accepts a "list of locator list item type".

In OpenMP 5.2, it was still invalid - but that was a regression.

OpenMP 5.2 "3.2.1 OpenMP Argument Lists" [63:6-7]:
> Unless otherwise specified, a variable that is part of another variable
> (as an array element or a structure element) cannot be a variable list item,
> an extended list item or locator list item.

OpenMP 6.0 fixed this to:
> Unless otherwise specified, a variable that is part of an aggregate variable 
> must not be a11 variable list item or an extended list item.

[OpenMP 5.0 and 5.1 had for depend: "The list items that appear in a depend
clause may use shape-operators."]

* * *

 program depend
    type :: dt
        integer :: i
        real, dimension(:), allocatable :: a
    end type

    type(dt) :: var
    allocate(var%a(100))

    !$omp parallel
        !$omp single
            !$omp task depend(out:var%a(1:10))
                call sleep(2)
                print *, 'A'
            !$omp end task

            !$omp task depend(in:var%a(1:10))
                print *, 'B'
            !$omp end task
        !$omp end single
    !$omp end parallel
end program depend

Reply via email to