]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix incorrect handling of iterator specifications in recent change
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 16 Jun 2023 08:13:46 +0000 (10:13 +0200)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 27 Jun 2023 12:05:51 +0000 (14:05 +0200)
Unlike for loop parameter specifications where it references an index, the
defining identifier references an element in them.

gcc/ada/

* sem_ch12.adb (Check_Generic_Actuals): Check the component type
of constants and variables of an array type.
(Copy_Generic_Node): Fix bogus handling of iterator
specifications.

gcc/ada/sem_ch12.adb

index 43fcff2c9d5c2210b303f30d5ddd92ea570907b8..61e0ec473922ec98e496204823fb67b637cdd965 100644 (file)
@@ -7192,11 +7192,16 @@ package body Sem_Ch12 is
             Set_Is_Hidden (E, False);
          end if;
 
-         --  Check directly the type of the actual objects
+         --  Check directly the type of the actual objects, including the
+         --  component type for array types.
 
          if Ekind (E) in E_Constant | E_Variable then
             Check_Actual_Type (Etype (E));
 
+            if Is_Array_Type (Etype (E)) then
+               Check_Actual_Type (Component_Type (Etype (E)));
+            end if;
+
          --  As well as the type of formal parameters of actual subprograms
 
          elsif Ekind (E) in E_Function | E_Procedure
@@ -8520,13 +8525,12 @@ package body Sem_Ch12 is
             Copy_Descendants;
          end;
 
-      --  Iterator and loop parameter specifications do not have an identifier
-      --  denoting the index type, so we must locate it through the expression
-      --  to check whether the views are consistent.
+      --  Loop parameter specifications do not have an identifier denoting the
+      --  index type, so we must locate it through the defining identifier to
+      --  check whether the views are consistent.
 
-      elsif Nkind (N) in N_Iterator_Specification
-                       | N_Loop_Parameter_Specification
-         and then Instantiating
+      elsif Nkind (N) = N_Loop_Parameter_Specification
+        and then Instantiating
       then
          declare
             Id : constant Entity_Id :=