https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59104
Paul Thomas <pault at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |pault at gcc dot gnu.org
--- Comment #6 from Paul Thomas <pault at gcc dot gnu.org> ---
Created attachment 58348
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58348&action=edit
Fix for this PR
This works and even regtests. I will include character lengths before
submitting.
The eventual testcase is rather more elaborate but the version below gives an
idea of what is now fixed,
Paul
module m1
implicit none
integer, parameter :: dp = kind([double precision::])
contains
function f(x)
integer, intent(in) :: x
real(dp) f(x/2)
real(dp) g(x/2)
! block
integer y(size(f)+1)
integer z(size(f) + size(y)) ! This caused all manner of trouble.
f = 10.0
y = 1
z = 1
write(*,*) 'size(f) = ', size(f), f
write(*,*) 'size(y) = ', size(y), y
write(*,*) 'size(z) = ', size(z), z
! end block
end function f
function e(x) result(f)
integer, intent(in) :: x
real(dp) f(x/2)
real(dp) g(x/2)
integer y(size(f)+1)
integer z(size(f) + size(y)) ! As did this.
f = 10.0
y = 1
z = 1
write(*,*) 'size(f) = ', size(f), f
write(*,*) 'size(y) = ', size(y), y
write(*,*) 'size(z) = ', size(z), z
end function e
end module m1
program bug3
use m1
implicit none
real(dp) y
y = sum(f(2))
print *, y
y = sum(e(4))
print *, y
end program bug3