https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119836

            Bug ID: 119836
           Summary: [15 Regression] Elemental intrinsic treated as IMPURE
                    within BLOCK within DO CONCURRENT
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: anlauf at gcc dot gnu.org
  Target Milestone: ---

See also thread starting here:

https://gcc.gnu.org/pipermail/fortran/2025-April/062044.html

My crystal ball suggests the following testcase:

program p
  implicit none
  integer, parameter :: n = 4
  integer :: i
  integer :: y(n), x(n)
  do concurrent (i=1:n)
     x(i) = shiftl (i,1)      ! accepted
     block
       y(i) = shiftl (i,1)    ! wrongly rejected
     end block
  end do
  print *, y
end

I get:

foo.f90:9:14:

    9 |        y(i) = shiftl (i,1)    ! wrongly rejected
      |              1
Error: Reference to impure function at (1) inside a DO CONCURRENT

Reply via email to