This program run Ok on the Macintosh or on LINUX with the -g option, but fails with the -O option on LINUX.
dir/junk2> gfortran -w -O -o timefun timefun.f dir/junk2> timefun < timefun.in 1t i m e f u n c t i o n d a t a number of time functions (ntfn) = 1 max number of points in time functions (nptm) = 2 time function number = 1 number of time points = 2 time value function 0.00000 0.0000000E+00 1.00000 0.1000000E+01 "" error time is larger than in the time function 2 2 1 1 1.00000000000000 1.00000000000000 STOP 0 dir/junk2> gfortran -w -g -o timefun timefun.f dir/junk2> timefun < timefun.in 1t i m e f u n c t i o n d a t a number of time functions (ntfn) = 1 max number of points in time functions (nptm) = 2 time function number = 1 number of time points = 2 time value function 0.00000 0.0000000E+00 1.00000 0.1000000E+01 STOP 0 dir/junk2> cat timefun.in 1 2 1 2 0. 0. 1. 1. dir/junk2> cat timefun.f program main implicit real*8 (a-h,o-z) save common /sol/ numnp,neq,nwk,nwm,nwc,numest,midest,maxest,nste,ma common/const/ dt,dta,acoef(21),dtod,iope common a(1000) dt=0.1d0 dta=0.1d0 nste=10 itwo=2 read (5,1010) ntfn,nptm if (idatwr.le.1) write (6,2250) ntfn,nptm c if (ntfn.eq.0) go to 15 m2=n1 + ntfn m3=m2 + ntfn*nptm*itwo m4=m3 + ntfn*nptm*itwo m5=m4 + ntfn*nste*itwo m6=m5 + ntfn*itwo - 1 c call timfun (a(m5),a(n1),a(m2),a(m3),a(m4),ntfn,nptm) 15 continue stop 1010 format (16i5) 2250 format (1h1,35ht i m e f u n c t i o n d a t a //4x, 148h number of time functions (ntfn) =,i5//4x, 248h max number of points in time functions (nptm) =,i5) end subroutine timfun (rgst,ipnt,timv,rv,rg,ntfn,nptm) c c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . c . subroutine to calculate time function values at all time points . c . the time function values are stored in rg . c . . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c implicit real*8 (a-h,o-z) save c common /isubst/ isub,nsubst,nsub,ntuse,negls,negnls,numnps, 1 nodcon,nodret,idofs(6),ndofs,neqs,nwks,maxes, 2 mas,nstape,iloa(9),krsizm,neqc common /sol/ numnp,neq,nwk,nwm,nwc,numest,midest,maxest,nste,ma common /var/ ng,modex,iupdt,kstep,itemax,ieqref,ite,kpri, 1 iref,iequit,ipri,kplotn,kplote common/const/ dt,dta,acoef(21),dtod,iope common /adinai/ opvar(7),tstart,irint,istote common /prcon/ idatwr,ipric,npb,idc,ivc,iac,ipc,ipnode(3,15) c dimension rg(ntfn,1),timv(nptm,1),rv(nptm,1),ipnt(1),rgst(1) c c write(6,*)tstart,dt,dta,nptm,ntfn,nste do 100 l=1,ntfn read (5,1000) ll,npts if (ll - l) 80,90,80 80 write (6,2000) stop c 90 if (idatwr.le.1) write (6,2002) l,npts ipnt(ll)=npts read (5,1020) (timv(i,ll),rv(i,ll),i=1,npts) if (idatwr.gt.1) go to 95 write (6,2004) (timv(i,ll),rv(i,ll),i=1,npts) 95 if (npts.le.nptm) go to 100 write (6,2100) l,npts,nptm stop 100 continue c nt=13 if (nsubst.gt.0) nt=15 rewind nt do 200 l=1,ntfn rgst(l)=rv(1,l) npts=ipnt(l) time=tstart + dt timep=tstart + dta i=0 k=1 120 i=i + 1 if (i-npts) 190,130,130 130 write (6,2010) write(6,*)i,npts,ntfn,l,time,timep stop c 190 ddr=rv(i+1,l) - rv(i,l) ddt=timv(i+1,l) - timv(i,l) if (ddt) 110,120,150 110 write (6,2020) stop 150 slope=ddr/ddt 180 if (timv(i+1,l)-time) 120,140,140 140 rg(l,k)=rv(i,l) + slope*(timep-timv(i,l)) timep=time + dta time=time + dt k=k + 1 if (nste-k) 195,180,180 195 write (nt) rgst(l),(rg(l,k),k=1,nste),npts, 1 (rv(j,l),timv(j,l),j=1,npts) 200 continue c return c 1000 format (2i5) 1020 format (8f10.0) 2000 format (43h "" error time functions out of order ) 2002 format (/25h time function number =,i5/ 1 25h number of time points =,i5//4x, 2 25h time value function/) 2004 format (3x,f12.5,2x,e15.7) 2010 format (53h "" error time is larger than in the time function) 2020 format (42h "" error time points are out of order ) 2100 format (///28h *** i n p u t e r r o r -// 1 30h detected by subroutine timfun/ 2 30h while reading time functions // 3 5x,23h time function number =,i5/ 4 5x,36h number of points in this function =,i5, 5 17h is greater than/ 6 5x,36h the max number of points requested=,i5, 7 49h as specified on the time function control card. // 4 12h *** s t o p) c end -- Summary: program works correctly with -g option but fails with -O option on LINUX Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dir at lanl dot gov CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: Suse Linux professional 9.3 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23318