I am getting unreliable results from a small function using the latest
prepackaged Mac OS build (PPC) available from the wiki download page. The
function behaves correctly if an otherwise irrelevant write statement is added.
When the statement is removed, the function returns gibberish. This is
ancient code which worked on older versions of gfortran, so hopefully I haven't
overlooked an obvious problem...
$ uname -a
Darwin Numenor 9.5.0 Darwin Kernel Version 9.5.0: Wed Sep 3 11:29:43 PDT 2008;
root:xnu-1228.7.58~1/RELEASE_I386 i386
$ gfortran --version
GNU Fortran (GCC) 4.4.0 20080823 (experimental) [trunk revision 139508]
$ cat xx.f
program xx
real xa(102)
do 10 i=1,100
10 xa(i)=float(i)
call scale (xa,23.,100,1)
write (*,*) xa(101), xa(102)
end
subroutine scale(arr,axlen,npts,kcycle)
real :: arr(*),axlen,minval,maxval,val
integer :: npts,kcycle
minval = +INF
maxval = -INF
do i=0,npts-1
val=arr(1+kcycle*i)
minval=amin1(val,minval)
maxval=amax1(val,maxval)
end do
arr(npts*kcycle+1)=minval
arr(npts*kcycle+kcycle+1)=(maxval-minval)/axlen
c If the following line is uncommented, the function will work
c write (*,*) 3
end subroutine scale
# Correct function result (write statement is left in)
$ gfortran -o xx xx.f
$ xx
3
0.0000000 4.3478260
# Incorrect function result (write statement is commented out)
$ gfortran -o xx xx.f
$ xx
-2.13906214E+09 1.86005408E+08
--
Summary: Inconsistent function results depending on irrelevant
write statement
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dojo at masterleep dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38188