On 25.03.22 12:34, Jakub Jelinek via Fortran wrote:
What is the behavior with a RANGE_EXPR when one has { [0..10] = ++i;
}, is that applying the side-effects 11 times or once ?
For side effects during the evaluation of expression, Fortran has a
clear "if you depend on it, it's your fault" rule. In F 2018, it says
10.1.7 Evaluation of operands
1 It is not necessary for a processor to evaluate all of the operands of
an expression, or to evaluate entirely each operand, if the value of the
expression can be determined otherwise.
Also, the semantics of
a(a:b) = expr
say that the expression on the LHS is evaluated only once before
assignment. So, anything that looks like that should be translated
to
tmp = ++i;
[0..10] = tmp;