[Ada] Spurious error on formal package with overloaded subprograms
authorEd Schonberg <schonberg@adacore.com>
Tue, 20 Oct 2020 13:42:57 +0000 (09:42 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 26 Nov 2020 08:39:38 +0000 (03:39 -0500)
gcc/ada/

* sem_ch12.adb (Instantiate_Formal_Package): If previous matched
entity is overloadable, advance in the list of actuals of the
actual package, to prevent an erroneous match of two adjacent
overloadable homonyms with the same entity.

gcc/ada/sem_ch12.adb

index dfb0765e2b5ad73ba64b90dfd6f68459388db966..20a00d7be9e635b7a9f311ea2265cb5464c89a90 100644 (file)
@@ -10801,6 +10801,16 @@ package body Sem_Ch12 is
                   Next_Non_Pragma (Formal_Node);
                   Next (Actual_Of_Formal);
 
+                  --  A formal subprogram may be overloaded, so advance in
+                  --  the list of actuals to make sure we do not match two
+                  --  successive formals to the same actual. This is only
+                  --  relevant for overloadable entities, others have
+                  --  distinct names.
+
+                  if Is_Overloadable (Actual_Ent) then
+                     Next_Entity (Actual_Ent);
+                  end if;
+
                else
                   --  No further formals to match, but the generic part may
                   --  contain inherited operation that are not hidden in the