On Sun, Jul 13, 2025 at 10:59:32AM +0200, Mikael Morin wrote: > > Regression tested on x86_64-pc-linux-gnu. > OK for master? >
Yes, with one observation below. > diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc > index 1561936daf1..af62e17442b 100644 > --- a/gcc/fortran/trans-array.cc > +++ b/gcc/fortran/trans-array.cc > @@ -3437,6 +3437,148 @@ save_descriptor_data (tree descr, tree data) > } > > > +/* Type of the DATA argument passed to walk_tree by > substitute_subexpr_in_expr > + and used by maybe_substitute_expr. */ > + > +typedef struct > +{ > + tree target, repl; > +} > +substitute_t; > + > + > +/* Check if the expression in *TP is equal to the substitution target > provided > + in DATA->TARGET and replace it with DATA->REPL in that case. This is a > + callback function for use with walk_tree. */ > + > +static tree > +maybe_substitute_expr (tree *tp, int *walk_subtree, void *data) > +{ > + substitute_t *subst = (substitute_t *) data; > + if (*tp == subst->target) > + { > + *tp = subst->repl; > + *walk_subtree = 0; > + } > + > + return NULL_TREE; > +} Can you explain why the above function always returns NULL_TREE? It would seem to me that that function could be declared "static void" or "static void *". Is this simply to avoid a ... > + > +/* Substitute in EXPR any occurence of TARGET with REPLACEMENT. */ > + > +static void > +substitute_subexpr_in_expr (tree target, tree replacement, tree expr) > +{ > + substitute_t subst; > + subst.target = target; > + subst.repl = replacement; > + > + walk_tree (&expr, maybe_substitute_expr, &subst, nullptr); cast here? -- Steve