Hello,

Le 13/06/2026 à 11:36, Thomas Koenig a écrit :
index c2dd42840b5..2ce7e000a05 100644
--- a/gcc/fortran/symbol.cc
+++ b/gcc/fortran/symbol.cc
@@ -5918,3 +5920,28 @@ bool gfc_lvalue_allocated_at (gfc_symbol *sym, locus 
*loc)
   sym->attr.allocated = 1;
   return true;
 }
+
+/* Mark the variable of an expression in a vardef context as
+   set and mark everything in the references as used.  */
+
+void
+gfc_expr_set_at (gfc_expr *expr, locus *loc, enum value_set how_set)
+{
+  enum value_used prev_used;
+  gfc_symbol *sym;
+  locus prev_loc;
+
+  if (!expr)
+    return;
+
+  if (expr->expr_type != EXPR_VARIABLE)
+    return;
Don't you need to call gfc_value_used_expr in all cases, including for non-variables? If I'm understanding well, we are in invalid code territory here, but avoiding a cascade of uninitialized diagnostics remains worth pursuing?

+
+  sym = expr->symtree->n.sym;
+  gfc_value_set_at (sym, loc, how_set);
+  prev_used = sym->attr.value_used;
+  prev_loc = sym->other_loc;
+  gfc_value_used_expr (expr, VALUE_USED);
+  sym->other_loc = prev_loc;
+  sym->attr.value_used = prev_used;
+}
No other comment, the rest looks good.

Reply via email to