https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85599

--- Comment #10 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Dumping the original tree of the test in comment 0 gives

...
lazy ()
{
  static logical(kind=4) check (void);
  logical(kind=4) flag;

  flag = 0;
  flag = check () && flag;
  flag = flag && check ();
}
...

Am I mistaken to read this as being handled by the middle-end? If yes, the
situation is discussed in pr57160 comment 1.

> *****
> 7.1.4 Evaluation of operations
> 2 The evaluation of a function reference shall neither affect nor be affected
> by the evaluation of any other entity within the statement.
> *****

Does it means that 'check' has to be evaluated in

if (flag) flag = check ()

even if flag==.false. ?

Reply via email to