diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2019-08-21 08:30:58 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-08-21 08:30:58 +0000 |
commit | 3c488e6c8675f069c94567107f777f693671f7ed (patch) | |
tree | 59df0d123d5e527c37e3c3a5cd6c253c2057b68f /gcc/ada/repinfo.adb | |
parent | abdeafa67a8ec7c99830fd5039d38168abba52a9 (diff) | |
download | gcc-3c488e6c8675f069c94567107f777f693671f7ed.zip gcc-3c488e6c8675f069c94567107f777f693671f7ed.tar.gz gcc-3c488e6c8675f069c94567107f777f693671f7ed.tar.bz2 |
[Ada] More complete information level for -gnatR4 output
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
Diffstat (limited to 'gcc/ada/repinfo.adb')
-rw-r--r-- | gcc/ada/repinfo.adb | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb index 6318682..219fa3b 100644 --- a/gcc/ada/repinfo.adb +++ b/gcc/ada/repinfo.adb @@ -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; ------------------------ |