[PATCH] fortran: Fix up initializers of param(0) PARAMETERs [PR103691]
Richard Biener
richard.guenther@gmail.com
Sat Mar 26 17:13:07 GMT 2022
> Am 26.03.2022 um 12:28 schrieb Thomas Koenig <tkoenig@netcologne.de>:
>
> 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;
Note I was not trying to question middle-end semantic here but gfortran se_expr (?) one. Is there a Fortan input where Jakob’s patch would cause a side-effect to be dropped and is that valid?
Richard.
>
>
More information about the Fortran
mailing list