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;