]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Ada: Fix internal error on use clause present in generic formal part
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 22 Sep 2025 09:08:34 +0000 (11:08 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 22 Sep 2025 09:16:56 +0000 (11:16 +0200)
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
gcc/ada/sem_dim.adb

index e00f5140588d451d1507b2dcc74b76ff21d099d9..5a9a38cb49215eada29c2df9d254906d019d90c3 100644 (file)
@@ -2044,9 +2044,15 @@ package body Sem_Ch12 is
       is
       begin
          for Index in Gen_Assocs.Assocs'Range loop
-            if Defining_Entity (Gen_Assocs.Assocs (Index).An_Formal) = F then
-               return Index;
-            end if;
+            declare
+               An_F : constant Node_Id := Gen_Assocs.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
index 139ed661f901106de1075cfd5d3561f57fffac1b..822c1284d539c3fb431bf239d5bf2069dea82036 100644 (file)
@@ -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;