blob: 86460a7c2826882b2901718bf4b6eff75fcb66aa [file] [log] [blame]
! { dg-do compile }
! { dg-additional-options "-Warray-temporaries" }
!
! PR fortran/98913
!
! Contributed by Jorge D'Elia
!
! Did create an array temporary for local access to coarray
! (but not for identical noncoarray use).
!
program test
implicit none
integer, parameter :: iin = kind (1)
integer, parameter :: idp = kind (1.0d0)
real (kind=idp), allocatable :: AA (:,:)[:]
real (kind=idp), allocatable :: BB (:,:)
real (kind=idp), allocatable :: UU (:)
integer (kind=iin) :: nn, n1, n2
integer (kind=iin) :: j, k, k1
!
nn = 5
n1 = 1
n2 = 10
!
allocate (AA (1:nn,n1:n2)[*])
allocate (BB (1:nn,n1:n2))
allocate (UU (1:nn))
!
k = 1
k1 = k + 1
!
AA = 1.0_idp
BB = 1.0_idp
UU = 2.0_idp
! AA - coarrays
! No temporary needed:
do j = 1, nn
AA (k1:nn,j) = AA (k1:nn,j) - UU (k1:nn) * AA (k,j) ! { dg-bogus "Creating array temporary" }
end do
do j = 1, nn
AA (k1:nn,j) = AA (k1:nn,j) - UU (k1:nn) * AA (k,j) - UU(k) * AA (k1-1:nn-1,j) ! { dg-bogus "Creating array temporary" }
end do
do j = 1, nn
AA (k1:nn,j) = AA (k1:nn,j) - UU (k1:nn) * AA (k,j) - UU(k) * AA (k1+1:nn+1,j) ! { dg-bogus "Creating array temporary" }
end do
! But:
do j = 1, nn
AA (k1:nn,j) = AA (k1-1:nn-1,j) - UU (k1:nn) * AA (k,j) - UU(k) * AA (k1+1:nn+1,j) ! { dg-warning "Creating array temporary" }
end do
! BB - no coarrays
! No temporary needed:
do j = 1, nn
BB (k1:nn,j) = BB (k1:nn,j) - UU (k1:nn) * BB (k,j) ! { dg-bogus "Creating array temporary" }
end do
do j = 1, nn
BB (k1:nn,j) = BB (k1:nn,j) - UU (k1:nn) * BB (k,j) - UU(k) * BB (k1-1:nn-1,j) ! { dg-bogus "Creating array temporary" }
end do
do j = 1, nn
BB (k1:nn,j) = BB (k1:nn,j) - UU (k1:nn) * BB (k,j) - UU(k) * BB (k1+1:nn+1,j) ! { dg-bogus "Creating array temporary" }
end do
! But:
do j = 1, nn
BB (k1:nn,j) = BB (k1-1:nn-1,j) - UU (k1:nn) * BB (k,j) - UU(k) * BB (k1+1:nn+1,j) ! { dg-warning "Creating array temporary" }
end do
deallocate (AA)
deallocate (BB)
deallocate (UU)
end program test