Am 14.06.2018 um 11:55 schrieb Jakub Jelinek:
Or warn users that there is no evaluation ordering between the first and second operand, that both operands are evaluated and it is unspecified which is evaluated first? Wouldn't you then just warn all the time? Even without any impure procedures, you could have l = associated (m) if (l .and. m%t) or similar and m%t could be evaluated before l.
It is not the aim of this patch to catch any and all dubious programming practices. It is the aim of this patch to flag a few well-known errors that compiler writers use.
I bet gfortran evaluates the side-effects left-to-right and evaluates both arguments always, right?
gfortran hands a TRUTH_AND_EXPR to the middle end. You know better what this means than I do.