[Ada] Pass base type to Set_Has_Own_Invariants
authorBob Duff <duff@adacore.com>
Thu, 22 Oct 2020 21:49:07 +0000 (17:49 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 26 Nov 2020 08:39:46 +0000 (03:39 -0500)
gcc/ada/

* freeze.adb (Freeze_Array_Type): Remove propagation of
Has_Own_Invariants to the first subtype. This is a no-op,
because the current (incorrect) version of Has_Own_Invariants
calls Base_Type.
* sem_prag.adb, sem_util.adb: Pass the base type to
Set_Has_Own_Invariants.

gcc/ada/freeze.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb

index 19f43852fe39479e7846bc758cc4cf766275aa8f..8183252e1e30c699b88c8c790df674f2da3579a2 100644 (file)
@@ -2594,13 +2594,6 @@ package body Freeze is
               and then not GNATprove_Mode
             then
                Set_Has_Own_Invariants (Arr);
-
-               --  The array type is an implementation base type. Propagate the
-               --  same property to the first subtype.
-
-               if Is_Itype (Arr) then
-                  Set_Has_Own_Invariants (First_Subtype (Arr));
-               end if;
             end if;
 
             --  Warn for pragma Pack overriding foreign convention
index a54ece67a186b7c13ab613dab4357322d45a9a1b..9c57ee31c89c8bc61cf10306e3955c9b149951cf 100644 (file)
@@ -18533,7 +18533,7 @@ package body Sem_Prag is
             --  The pragma defines a type-specific invariant, the type is said
             --  to have invariants of its "own".
 
-            Set_Has_Own_Invariants (Typ);
+            Set_Has_Own_Invariants (Base_Type (Typ));
 
             --  If the invariant is class-wide, then it can be inherited by
             --  derived or interface implementing types. The type is said to
index 4f2df8e1fb9f3df547d911f207fc96707e3588f9..6875e470825cf1ee8d1bad7e518397959e4b3fd8 100644 (file)
@@ -26262,7 +26262,7 @@ package body Sem_Util is
          end if;
 
          if Has_Own_Invariants (From_Typ) then
-            Set_Has_Own_Invariants (Typ);
+            Set_Has_Own_Invariants (Base_Type (Typ));
          end if;
 
          if Present (Full_IP) and then No (Invariant_Procedure (Typ)) then