IRIX 3.3.1 f77 -O2 bug
Glenn Randers-Pehrson, TBD|WMB
glennrp at BRL.MIL
Wed Jan 16 04:53:16 AEST 1991
Here's a complete example of the second type of bug I described earlier.
The optimizer has not noticed that IFN was changed in loop 12.
This was done on a 220GTX running IRIX 3.3.1
Script started on Tue Jan 15 12:46:22 1991
taylor.brl.mil> cat bug331.f
PROGRAM BUG331
DIMENSION K1(3),K2(3)
COMMON /A/ LINNB(2), NPLIN(2)
data k1/2, 0, 1/
data k2/3, 0, 1/
data linnb/1, 0/
data nplin/2, 0/
CALL SUB1(K1,K2)
STOP
END
SUBROUTINE SUB1(K1,K2)
DIMENSION K1(1),K2(1)
COMMON /B/ IFN,KOEF(2)
COMMON /A/ LINNB(2), NPLIN(2)
DO 11 J=1,3
11 KOEF(J-1)=K1(J)
GO TO (4050,4040,4050),IFN
4040 CONTINUE
IC=KOEF(2)
II=LINNB(IC)
CALL SUB2(ic,ii,1)
4050 CONTINUE
DO 12 J=1,3
12 KOEF(J-1)=K2(J)
GO TO (5050,5040,5050),IFN
5040 CONTINUE
IC=KOEF(2)
II=LINNB(IC)
CALL SUB2(ic,ii,2)
5050 CONTINUE
100 CONTINUE
RETURN
END
SUBROUTINE SUB2(IC,II,iflag)
write(*,*)' sub2: iflag=',iflag
write(*,*)' ic=',ic
write(*,*)' ii=',ii
RETURN
END
taylor.brl.mil> f77 -O1 nynew.f
taylor.brl.mil> a.out
sub2: iflag= 1
ic= 1
ii= 1
taylor.brl.mil> f77 -O2 nynew.f
taylor.brl.mil> a.out
sub2: iflag= 1
ic= 1
ii= 1
sub2: iflag= 2
ic= 1
ii= 1
taylor.brl.mil>
script done on Tue Jan 15 12:47:00 1991
Note that sub2 is erroneously called a second time, with ifn=3. The
optimizer thinks ifn is still 2.
...Glenn Randers-Pehrson <glennrp at brl.mil>
More information about the Comp.sys.sgi
mailing list