PROGRAM ch2407a IMPLICIT NONE include 'block1' PRINT *,'calling subroutine sub1' ! sub1 sets up values for A,B,C,root,I,J,K,L CALL sub1 PRINT *,'on return from sub 1' PRINT *,'A,B,C,root = ',A,B,C,root PRINT *,'I,J,K,L = ',I,J,K,L ! ! sub2 is only supposed to use the values A,B,C to calculate root ! but by mistake it changes L ! CALL sub2 PRINT *,'on return from sub 2' PRINT *,'A,B,C,root = ',A,B,C,root PRINT *,'I,J,K,L = ',I,J,K,L END PROGRAM ch2407a SUBROUTINE sub1 IMPLICIT NONE include 'block1' PRINT *,'input values for A,B,C' READ *,A,B,C root=-999.0 PRINT *,'input values for I,J,K,L' READ *,I,J,K,L END SUBROUTINE sub1 SUBROUTINE sub2 IMPLICIT NONE REAL:: temp include 'block1' temp = B*B-4.0*A*C IF(temp >= 0.0) THEN root=(-B+SQRT(temp))/(2.0*A) ELSE root =0.0 ENDIF ! ! this is a mistake but not picked up when using a common block ! L=I+J+K END SUBROUTINE sub2