[Bug fortran/85599] New: invalid optimization: function not always evaluated in logical expression
janus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 1 20:50:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85599
Bug ID: 85599
Summary: invalid optimization: function not always evaluated in
logical expression
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: janus at gcc dot gnu.org
Target Milestone: ---
Consider the following test case:
program lazy
logical :: flag
flag = .false.
flag = check() .and. flag ! 'check' is executed as expected
flag = flag .and. check() ! bug: 'check' is not executed
contains
logical function check()
integer, save :: i = 1
print *, "check", i
i = i + 1
check = .true.
end function
end
The problem here is that gfortran executes the function 'check' only once,
although it should be executed twice AFAICS.
Optimizing out the function call might be valid for a PURE function, but for an
impure one with side effects, I don't think this is allowed.
Both ifort and flang execute the function twice. For gfortran, the optimization
level does not seem to influence the result: -O0 and -O3 behave in the same
way.
I tried with gfortran versions 5, 6, 7 and 8, which all exhibit the same buggy
behavior.
More information about the Gcc-bugs
mailing list