[gcc r15-10544] ada: Remove suspicious entries generated by -gnatR for generic formal types
Eric Botcazou
ebotcazou@gcc.gnu.org
Fri Nov 21 17:12:40 GMT 2025
https://gcc.gnu.org/g:76e9b0d7581dabd57dce3e2aa16b799ee2a02c38
commit r15-10544-g76e9b0d7581dabd57dce3e2aa16b799ee2a02c38
Author: Eric Botcazou <ebotcazou@adacore.com>
Date: Mon Nov 10 12:44:47 2025 +0100
ada: Remove suspicious entries generated by -gnatR for generic formal types
Generic formal type parameters may have an unspecified layout when they are
processed for the -gnatR output, so it's better to skip them entirely.
The change also reverts an earlier change that would output "??" for an
unknown alignment on a type, which is inconsistent and undocumented.
gcc/ada/ChangeLog:
* repinfo.adb (List_Location): Do not output the final comma.
(List_Common_Type_Info): Adjust to above change. Do not output
"??" for an unknown alignment.
(List_Entities): Do not output generic types.
(List_Object_Info): Adjust to above change.
(List_Subprogram_Info): Likewise.
Diff:
---
gcc/ada/repinfo.adb | 48 ++++++++++++++++++++++--------------------------
1 file changed, 22 insertions(+), 26 deletions(-)
diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb
index cd4b66439741..3dec07609e6a 100644
--- a/gcc/ada/repinfo.adb
+++ b/gcc/ada/repinfo.adb
@@ -375,9 +375,9 @@ package body Repinfo is
if Esize (Ent) = RM_Size (Ent) then
if List_Representation_Info_To_JSON then
+ Write_Line (",");
Write_Str (" ""Size"": ");
Write_Val (Esize (Ent));
- Write_Line (",");
else
Write_Str ("for ");
List_Name (Ent);
@@ -390,13 +390,13 @@ package body Repinfo is
else
if List_Representation_Info_To_JSON then
+ Write_Line (",");
Write_Str (" ""Object_Size"": ");
Write_Val (Esize (Ent));
- Write_Line (",");
+ Write_Line (",");
Write_Str (" ""Value_Size"": ");
Write_Val (RM_Size (Ent));
- Write_Line (",");
else
Write_Str ("for ");
@@ -417,6 +417,7 @@ package body Repinfo is
if Known_Alignment (Ent) then
if List_Representation_Info_To_JSON then
+ Write_Line (",");
Write_Str (" ""Alignment"": ");
Write_Val (Alignment (Ent));
else
@@ -432,19 +433,10 @@ package body Repinfo is
-- are not computed for types in a generic unit.
else
- -- Add unknown alignment entry in JSON format to ensure the format is
- -- valid, as a comma is added by the caller before another field.
-
- if List_Representation_Info_To_JSON then
- Write_Str (" ""Alignment"": ");
- Write_Unknown_Val;
- end if;
-
- pragma Assert
- (not Expander_Active or else
- Is_Concurrent_Type (Ent) or else
- Is_Class_Wide_Type (Ent) or else
- Sem_Util.In_Generic_Scope (Ent));
+ pragma Assert (not Expander_Active
+ or else Is_Concurrent_Type (Ent)
+ or else Is_Class_Wide_Type (Ent)
+ or else Sem_Util.In_Generic_Scope (Ent));
end if;
end List_Common_Type_Info;
@@ -482,12 +474,13 @@ package body Repinfo is
E := First_Entity (Ent);
while Present (E) loop
- -- We list entities that come from source (excluding private or
- -- incomplete types or deferred constants, for which we will list
- -- the information for the full view). If requested, we also list
- -- relevant entities that have been generated when processing the
- -- original entities coming from source. But if debug flag A is
- -- set, then all entities are listed.
+ -- We list entities that come from source (except for incomplete,
+ -- private and generic types, as well as deferred constants, for
+ -- which we list the information for the full view). If requested
+ -- by the -gnatR4 switch, we also list relevant entities that have
+ -- been created when processing the original entities coming from
+ -- source. If debug switch -gnatdA is specified, then all entities
+ -- are listed.
if ((Comes_From_Source (E)
or else (Ekind (E) = E_Block
@@ -495,9 +488,10 @@ package body Repinfo is
Nkind (Parent (E)) = N_Implicit_Label_Declaration
and then
Comes_From_Source (Label_Construct (Parent (E)))))
- and then not Is_Incomplete_Or_Private_Type (E)
- and then not (Ekind (E) = E_Constant
- and then Present (Full_View (E))))
+ and then not Is_Incomplete_Or_Private_Type (E)
+ and then not Is_Generic_Type (E)
+ and then not (Ekind (E) = E_Constant
+ and then Present (Full_View (E))))
or else (List_Representation_Info = 4
and then Relevant_Entities.Get (E))
or else Debug_Flag_AA
@@ -822,7 +816,7 @@ package body Repinfo is
pragma Assert (List_Representation_Info_To_JSON);
Write_Str (" ""location"": """);
Write_Location (Sloc (Ent));
- Write_Line (""",");
+ Write_Str ("""");
end List_Location;
---------------
@@ -884,6 +878,7 @@ package body Repinfo is
List_Name (Ent);
Write_Line (""",");
List_Location (Ent);
+ Write_Line (",");
Write_Str (" ""Size"": ");
Write_Val (Esize (Ent));
@@ -1874,6 +1869,7 @@ package body Repinfo is
List_Name (Ent);
Write_Line (""",");
List_Location (Ent);
+ Write_Line (",");
Write_Str (" ""Convention"": """);
else
More information about the Gcc-cvs
mailing list