From: Eric Botcazou Date: Wed, 15 Apr 2026 17:37:54 +0000 (+0200) Subject: Ada: Fix bogus warning for array variable on the LHS of aggregate assignment X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;ds=sidebyside;p=thirdparty%2Fgcc.git Ada: Fix bogus warning for array variable on the LHS of aggregate assignment That's another ancient issue with -gnatwu, but the fix is again trivial. gcc/ada/ PR ada/105212 * exp_aggr.adb (Build_Array_Aggr_Code): If the aggregate comes from source, call Set_Referenced_Modified on the target. gcc/testsuite/ * gnat.dg/warn36.adb: New test. --- diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 4b14043d276..82afcaaa0e8 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -2026,6 +2026,16 @@ package body Exp_Aggr is end; end if; + -- Set Referenced_As_LHS if appropriate. We are neither interested + -- in compiler-generated aggregates, nor in references outside the + -- extended main source unit. + + if Comes_From_Source (N) + and then In_Extended_Main_Source_Unit (Into) + then + Set_Referenced_Modified (Into, Out_Param => False); + end if; + -- First before we start, a special case. If we have a bit packed -- array represented as a modular type, then clear the value to -- zero first, to ensure that unused bits are properly cleared. diff --git a/gcc/testsuite/gnat.dg/warn36.adb b/gcc/testsuite/gnat.dg/warn36.adb new file mode 100644 index 00000000000..fa3d25e8654 --- /dev/null +++ b/gcc/testsuite/gnat.dg/warn36.adb @@ -0,0 +1,12 @@ +-- { dg-do compile } +-- { dg-options "-gnatwu" } + +procedure Warn36 is + + type Arr is array (1 .. 65) of Integer; + + A : Arr; + +begin + A := (others => 1); +end;