[Ada] More complete information level for -gnatR4 output
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 21 Aug 2019 08:30:58 +0000 (08:30 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 21 Aug 2019 08:30:58 +0000 (08:30 +0000)
This instructs -gnatR4 to also list the Etype of components in
user-declared record types if it is compiler-generated, for example in:

package P3 is

    type idx is range 1 .. 100;

    type Arr is array (Idx range <>) of Character;

    type Rec is record
       C : Arr (1 .. 5);
    end record;

end P3;

2019-08-21  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.adb (List_Array_Info): In -gnatR4 mode, set the
relevant flag on the component type here instead of...
(List_Object_Info): Likewise for the object type.
(List_Entities): ...here.  In -gnatR4 mode, recurse into
entities local to a record type.
(List_Component_Layout): In -gnatR4 mode, mark the type as
relevant.

From-SVN: r274786

gcc/ada/ChangeLog
gcc/ada/repinfo.adb

index 62a06d6ce8a1d0a76a4325dc329b2dc57836d63a..a6508ae4ec1bb7ab59fe2709fc1992f9ae1f465d 100644 (file)
@@ -1,3 +1,13 @@
+2019-08-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * repinfo.adb (List_Array_Info): In -gnatR4 mode, set the
+       relevant flag on the component type here instead of...
+       (List_Object_Info): Likewise for the object type.
+       (List_Entities): ...here.  In -gnatR4 mode, recurse into
+       entities local to a record type.
+       (List_Component_Layout): In -gnatR4 mode, mark the type as
+       relevant.
+
 2019-08-21  Bob Duff  <duff@adacore.com>
 
        * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-bitutil.o and
index 6318682f6481b383c8ada8ac5b1683004565001a..219fa3be26f032d00d5cb0222b67443d9c142b72 100644 (file)
@@ -357,6 +357,14 @@ package body Repinfo is
          Write_Eol;
          Write_Line ("}");
       end if;
+
+      --  The component type is relevant for an array
+
+      if List_Representation_Info = 4
+        and then Is_Itype (Component_Type (Base_Type (Ent)))
+      then
+         Relevant_Entities.Set (Component_Type (Base_Type (Ent)), True);
+      end if;
    end List_Array_Info;
 
    ---------------------------
@@ -539,20 +547,17 @@ package body Repinfo is
                      List_Record_Info (E, Bytes_Big_Endian);
                   end if;
 
+                  --  Recurse into entities local to a record type
+
+                  if List_Representation_Info = 4 then
+                     List_Entities (E, Bytes_Big_Endian, False);
+                  end if;
+
                elsif Is_Array_Type (E) then
                   if List_Representation_Info >= 1 then
                      List_Array_Info (E, Bytes_Big_Endian);
                   end if;
 
-                  --  The component type is relevant for an array
-
-                  if List_Representation_Info = 4
-                    and then Is_Itype (Component_Type (Base_Type (E)))
-                  then
-                     Relevant_Entities.Set
-                       (Component_Type (Base_Type (E)), True);
-                  end if;
-
                elsif Is_Type (E) then
                   if List_Representation_Info >= 2 then
                      List_Type_Info (E);
@@ -564,13 +569,6 @@ package body Repinfo is
                                   E_Loop_Parameter,
                                   E_Variable)
                then
-                  --  The type is relevant for an object
-
-                  if List_Representation_Info = 4 and then Is_Itype (Etype (E))
-                  then
-                     Relevant_Entities.Set (Etype (E), True);
-                  end if;
-
                   if List_Representation_Info >= 2 then
                      List_Object_Info (E);
                   end if;
@@ -975,6 +973,12 @@ package body Repinfo is
 
          List_Linker_Section (Ent);
       end if;
+
+      --  The type is relevant for an object
+
+      if List_Representation_Info = 4 and then Is_Itype (Etype (Ent)) then
+         Relevant_Entities.Set (Etype (Ent), True);
+      end if;
    end List_Object_Info;
 
    ----------------------
@@ -1283,6 +1287,12 @@ package body Repinfo is
          else
             Write_Line (";");
          end if;
+
+         --  The type is relevant for a component
+
+         if List_Representation_Info = 4 and then Is_Itype (Etype (Ent)) then
+            Relevant_Entities.Set (Etype (Ent), True);
+         end if;
       end List_Component_Layout;
 
       ------------------------