The expression/condition in an arithmetic if statement appears to be evaluated multiple times when it is zero or negative. This is particularly bad when the expression is a function that depends on input or has state associated with it.
Example: program lll integer myfunc do 99 i=1,10 if (myfunc(0)) 10,20,30 10 write (6,*) 'negative' goto 99 20 write (6,*) 'zero' goto 99 30 write (6,*) 'positive' goto 99 99 continue end integer function myfunc(int) integer value read (5,*) value myfunc = value return end Sample input/output: 1 positive 0 3 zero -1 3 zero 4 positive 0 0 zero Workaround: Introduce a temporary expression for the if test condition/expression or convert obsolete arithmetic if to an if-then-else statement. -- Summary: Multiple evaluations of arithmetic if condition Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mfpasik at sandia dot gov GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28439