The JSON output of the -gnatR machinery was choking on record subtypes
and the change fixes this oversight.
The following package must now compile properly with -gnatRj:
package P is
type Rec (D : Integer) is record
C : Integer;
case D is
when 1 =>
S : String (1 .. 20);
when 2 =>
B : Boolean;
when others =>
Ch1 : Character;
F : Float;
Ch2 : Character;
end case;
end record;
subtype Rec1 is Rec (1);
end P;
Tested on x86_64-pc-linux-gnu, committed on trunk
2018-09-26 Eric Botcazou <ebotca...@adacore.com>
gcc/ada/
* repinfo.adb (List_Record_Layout): Be prepared for JSON output.
(List_Record_Info): Use the flat representation for record
subtypes in the JSON format.
--- gcc/ada/repinfo.adb
+++ gcc/ada/repinfo.adb
@@ -1358,7 +1358,8 @@ package body Repinfo is
Starting_First_Bit : Uint := Uint_0;
Prefix : String := "")
is
- Comp : Entity_Id;
+ Comp : Entity_Id;
+ First : Boolean := True;
begin
Comp := First_Component_Or_Discriminant (Ent);
@@ -1413,6 +1414,15 @@ package body Repinfo is
goto Continue;
end if;
+ if List_Representation_Info_To_JSON then
+ if First then
+ Write_Eol;
+ First := False;
+ else
+ Write_Line (",");
+ end if;
+ end if;
+
List_Component_Layout (Comp,
Starting_Position, Starting_First_Bit, Prefix);
end;
@@ -1678,7 +1688,11 @@ package body Repinfo is
Write_Line (",");
Write_Str (" ""record"": [");
- List_Structural_Record_Layout (Ent, Ent);
+ if Is_Base_Type (Ent) then
+ List_Structural_Record_Layout (Ent, Ent);
+ else
+ List_Record_Layout (Ent);
+ end if;
Write_Eol;
Write_Str (" ]");