[Ada] Fix assertion failure on record subtype with -gnatRj
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 26 Sep 2018 09:17:05 +0000 (09:17 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 26 Sep 2018 09:17:05 +0000 (09:17 +0000)
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;

2018-09-26  Eric Botcazou  <ebotcazou@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.

From-SVN: r264609

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

index e139e2d2c5dbff74f7333443bf5befc750c3238c..83685b4d07793284d1db131df9e21e7900702c68 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-26  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * repinfo.adb (List_Record_Layout): Be prepared for JSON output.
+       (List_Record_Info): Use the flat representation for record
+       subtypes in the JSON format.
+
 2018-09-26  Justin Squirek  <squirek@adacore.com>
 
        * lib-writ.adb, lib-writ.ads (Write_With_Lines): Add
index b2bc9ca40d3fc9907cdce8ed220f2124c7673496..d5c099fcd5b2e09d1c2f5de1dd39d9013d30152f 100644 (file)
@@ -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 ("  ]");