mirror of
https://github.com/autc04/Retro68.git
synced 2024-09-28 18:56:06 +00:00
78 lines
1.5 KiB
Fortran
78 lines
1.5 KiB
Fortran
! { dg-do run }
|
|
! { dg-options "-Warray-temporaries" }
|
|
! PR 57023
|
|
! This used to cause wrong packing because a(1:n,1:n) was
|
|
! assumed to be a full array.
|
|
module mymod
|
|
implicit none
|
|
contains
|
|
subroutine foo1(a,n)
|
|
integer, dimension(n,n), intent(inout) :: a
|
|
integer :: n
|
|
n = n - 1
|
|
call baz(a(1:n,1:n),n) ! { dg-warning "array temporary" }
|
|
end subroutine foo1
|
|
|
|
subroutine foo2(a,n)
|
|
integer, dimension(n,n), intent(inout) :: a
|
|
integer :: n
|
|
call decrement(n)
|
|
call baz(a(1:n,1:n),n) ! { dg-warning "array temporary" }
|
|
end subroutine foo2
|
|
|
|
subroutine foo3(a,n)
|
|
integer, dimension(n,n), intent(inout) :: a
|
|
integer :: n, m
|
|
m = n - 1
|
|
call baz(a(1:m,1:m),m) ! { dg-warning "array temporary" }
|
|
end subroutine foo3
|
|
|
|
subroutine foo4(a,n)
|
|
integer, dimension(n,n), intent(inout) :: a
|
|
integer, intent(in) :: n
|
|
a(1:n,1:n) = 1
|
|
end subroutine foo4
|
|
|
|
subroutine baz(a,n)
|
|
integer, dimension(n,n), intent(inout) :: a
|
|
integer, intent(in) :: n
|
|
a = 1
|
|
end subroutine baz
|
|
|
|
subroutine decrement(n)
|
|
integer, intent(inout) :: n
|
|
n = n - 1
|
|
end subroutine decrement
|
|
|
|
end module mymod
|
|
|
|
program main
|
|
use mymod
|
|
implicit none
|
|
integer, dimension(5,5) :: a, b
|
|
integer :: n
|
|
|
|
b = 0
|
|
b(1:4,1:4) = 1
|
|
|
|
n = 5
|
|
a = 0
|
|
call foo1(a,n)
|
|
if (any(a /= b)) STOP 1
|
|
|
|
n = 5
|
|
a = 0
|
|
call foo2(a,n)
|
|
if (any(a /= b)) STOP 2
|
|
|
|
n = 5
|
|
a = 0
|
|
call foo3(a,n)
|
|
if (any(a /= b)) STOP 3
|
|
|
|
n = 5
|
|
a = 0
|
|
call foo4(a,n)
|
|
if (any(a /= 1)) STOP 4
|
|
end program main
|