! { dg-additional-options "-O0" } MODULE M1 IMPLICIT NONE CONTAINS INTEGER FUNCTION foo() INTEGER, VOLATILE :: v=42 foo=v END FUNCTION SUBROUTINE test(n,flag) INTEGER :: n,i,j,k,l,tt LOGICAL :: flag REAL(KIND=8) :: v,t IF (flag) THEN t=42 tt=foo() ENDIF v=0 DO i=1,n v=0 IF (flag) THEN IF (tt==i) v=MAX(v,t) ENDIF DO j=1,n DO k=1,n v=MAX(v,sin(REAL(j*k))) ENDDO ENDDO ENDDO END SUBROUTINE END MODULE M1 USE M1 INTEGER :: n LOGICAL :: flag n=4 flag=.FALSE. CALL test(n,flag) END