[Ada] Fix handling of generic types in check for overlapping actuals
authorPiotr Trojanek <trojanek@adacore.com>
Wed, 10 Mar 2021 09:38:57 +0000 (10:38 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 17 Jun 2021 14:32:12 +0000 (10:32 -0400)
gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Ignore formal of
generic types, but keep examining other parameters.

gcc/ada/sem_warn.adb

index 1e62d47..6db6d2c 100644 (file)
@@ -3741,17 +3741,20 @@ package body Sem_Warn is
       Form1 := First_Formal (Subp);
       Act1  := First_Actual (N);
       while Present (Form1) and then Present (Act1) loop
-         if Is_Generic_Type (Etype (Act1)) then
-            return;
-         end if;
 
          Form2 := Next_Formal (Form1);
          Act2  := Next_Actual (Act1);
          while Present (Form2) and then Present (Act2) loop
-            if Refer_Same_Object (Act1, Act2) then
-               if Is_Generic_Type (Etype (Act2)) then
-                  return;
-               end if;
+
+            --  Ignore formals of generic types; they will be examined when
+            --  instantiated.
+
+            if Is_Generic_Type (Etype (Form1))
+              or else Is_Generic_Type (Etype (Form2))
+            then
+               null;
+
+            elsif Refer_Same_Object (Act1, Act2) then
 
                --  Case 1: two writable elementary parameters that overlap