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

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Can you provide a testcase that can be compiled?

--- Comment #2 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Here it is. The internal writes are there just to confuse the
optimizer.

module x
  implicit none
contains
  subroutine foo(a,b,c, n)
    integer, intent(in) :: n
    double precision, dimension(n), intent(in) :: a
    double precision, dimension(n), intent(out) :: b,c
    b = a
    c = a
  end subroutine foo
  subroutine bar(a,b,c,n)
    integer, intent(in) :: n
    double precision, dimension(n), intent(in) :: a
    double precision, dimension(n), intent(out) :: b,c
    integer :: i
    do concurrent (i=1:n)
       b(i) = a(i)
       c(i) = a(i)
    end do
  end subroutine bar
end module x

program main
  use x
  implicit none
  double precision, dimension(:), allocatable :: a, b, c
  integer, parameter :: n = 10**7
  double precision :: t1, t2
  character(len=80) :: line, line2
  integer :: i
  allocate (a(n), b(n), c(n))
  call random_number(a)

  line = '20'
  call cpu_time(t1)
  call foo(a,b,c,n)
  call cpu_time(t2)
  print *,t2-t1
  read (unit=line,fmt=*) i
  write (unit=line2, fmt=*) b(i),c(i)
  line = '20'
  call cpu_time(t1)
  call bar(a,b,c,n)
  call cpu_time(t2)
  print *,t2-t1
  read (unit=line,fmt=*) i
  write (unit=line2, fmt=*) b(i),c(i)

end program main

Reply via email to