]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Take full view of private type
authorEtienne Servais <servais@adacore.com>
Mon, 21 Feb 2022 15:32:46 +0000 (16:32 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 17 May 2022 08:25:44 +0000 (08:25 +0000)
This allows to resolve the following:

      type Rec (<>) is private;
      type Arr (<>) is private;
   private
      type Arr is array (Positive range <>) of Natural;
      type Rec (L : Natural) is record
         F1 : Integer;
         F2 : Arr (1 .. L);
      end record;

gcc/ada/

* sem_ch3.adb (Analyze_Subtype_Declaration): Use underlying type
of Indic_Typ.
(Constrain_Array): Ditto for T.

gcc/ada/sem_ch3.adb

index d2605f5a30802a9dd0e4fd7b4e39fc99d3f71d1c..d41e27122f6c40dcd568b129a4c57bcab5d13649 100644 (file)
@@ -5978,7 +5978,7 @@ package body Sem_Ch3 is
       if Nkind (Subtype_Indication (N)) = N_Subtype_Indication then
          declare
             Indic_Typ    : constant Entity_Id :=
-                             Etype (Subtype_Mark (Subtype_Indication (N)));
+              Underlying_Type (Etype (Subtype_Mark (Subtype_Indication (N))));
             Subt_Index   : Node_Id;
             Target_Index : Node_Id;
 
@@ -13595,6 +13595,8 @@ package body Sem_Ch3 is
          T := Designated_Type (T);
       end if;
 
+      T := Underlying_Type (T);
+
       --  If an index constraint follows a subtype mark in a subtype indication
       --  then the type or subtype denoted by the subtype mark must not already
       --  impose an index constraint. The subtype mark must denote either an