From 7e29e1a0a1d38c61e9b0d298940d9517e30460ac Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 22 Sep 2025 11:08:34 +0200 Subject: [PATCH] Ada: Fix internal error on use clause present in generic formal part This is a regression present on the mainline and 15 branch: the compiler aborts on a use clause present in the formal part of a generic unit because of an oversight in the new inference code for generic actual parameters. The fix also adds a missing test to Analyze_Dimension_Array_Aggregate. gcc/ada/ PR ada/121968 * sem_ch12.adb (Associations.Find_Assoc): Add guard for clauses. * sem_dim.adb (Analyze_Dimension_Array_Aggregate): Add test for N_Iterated_Component_Association nodes. --- gcc/ada/sem_ch12.adb | 12 +++++++++--- gcc/ada/sem_dim.adb | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index fbf2bfca1f8..de9cff14246 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -2073,9 +2073,15 @@ package body Sem_Ch12 is is begin for Index in Match.Assocs'Range loop - if Defining_Entity (Match.Assocs (Index).An_Formal) = F then - return Index; - end if; + declare + An_F : constant Node_Id := Match.Assocs (Index).An_Formal; + begin + if Nkind (An_F) not in N_Use_Package_Clause | N_Use_Type_Clause + and then Defining_Entity (An_F) = F + then + return Index; + end if; + end; end loop; raise Program_Error; -- it must be present diff --git a/gcc/ada/sem_dim.adb b/gcc/ada/sem_dim.adb index 139ed661f90..822c1284d53 100644 --- a/gcc/ada/sem_dim.adb +++ b/gcc/ada/sem_dim.adb @@ -1273,7 +1273,9 @@ package body Sem_Dim is -- Get the expression from the component - if Nkind (Comp) = N_Component_Association then + if Nkind (Comp) in N_Component_Association + | N_Iterated_Component_Association + then Expr := Expression (Comp); else Expr := Comp; -- 2.47.3