glennrp@BRL.MIL (Glenn Randers-Pehrson, TBD|WMB) (01/16/91)
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@brl.mil>