Several entities were not written by Tree_Write and correspondingly
not set by Tree_Read. Theoretically this could affect ASIS if it used
any routines needing these entities, but we have never observed any
issues in this area, so it is likely this is just a latent bug with
no observable functional effect. No test required.

Tested on x86_64-pc-linux-gnu, committed on trunk

2014-05-21  Robert Dewar  <de...@adacore.com>

        * stand.adb (Tree_Read): Read missing entities.
        (Tree_Write): Write missing entities.

Index: stand.adb
===================================================================
--- stand.adb   (revision 210687)
+++ stand.adb   (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2013,  Free Software Foundation, Inc.        --
+--          Copyright (C) 1992-2014,  Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -29,6 +29,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
+with Elists;  use Elists;
 with System;  use System;
 with Tree_IO; use Tree_IO;
 
@@ -46,9 +47,32 @@
       Tree_Read_Int (Int (Standard_Package_Node));
       Tree_Read_Int (Int (Last_Standard_Node_Id));
       Tree_Read_Int (Int (Last_Standard_List_Id));
+
+      Tree_Read_Int (Int (Boolean_Literals (False)));
+      Tree_Read_Int (Int (Boolean_Literals (True)));
+
       Tree_Read_Int (Int (Standard_Void_Type));
       Tree_Read_Int (Int (Standard_Exception_Type));
       Tree_Read_Int (Int (Standard_A_String));
+      Tree_Read_Int (Int (Standard_A_Char));
+      Tree_Read_Int (Int (Standard_Debug_Renaming_Type));
+
+      --  Deal with Predefined_Float_Types, which is an Elist. We wrote the
+      --  entities out in sequence, terminated by an Empty entry.
+
+      declare
+         Elmt : Entity_Id;
+      begin
+         Predefined_Float_Types := New_Elmt_List;
+         loop
+            Tree_Read_Int (Int (Elmt));
+            exit when Elmt = Empty;
+            Append_Elmt (Elmt, Predefined_Float_Types);
+         end loop;
+      end;
+
+      --  Remainder of special entities
+
       Tree_Read_Int (Int (Any_Id));
       Tree_Read_Int (Int (Any_Type));
       Tree_Read_Int (Int (Any_Access));
@@ -59,10 +83,12 @@
       Tree_Read_Int (Int (Any_Discrete));
       Tree_Read_Int (Int (Any_Fixed));
       Tree_Read_Int (Int (Any_Integer));
+      Tree_Read_Int (Int (Any_Modular));
       Tree_Read_Int (Int (Any_Numeric));
       Tree_Read_Int (Int (Any_Real));
       Tree_Read_Int (Int (Any_Scalar));
       Tree_Read_Int (Int (Any_String));
+      Tree_Read_Int (Int (Raise_Type));
       Tree_Read_Int (Int (Universal_Integer));
       Tree_Read_Int (Int (Universal_Real));
       Tree_Read_Int (Int (Universal_Fixed));
@@ -70,12 +96,12 @@
       Tree_Read_Int (Int (Standard_Integer_16));
       Tree_Read_Int (Int (Standard_Integer_32));
       Tree_Read_Int (Int (Standard_Integer_64));
-      Tree_Read_Int (Int (Standard_Unsigned_64));
       Tree_Read_Int (Int (Standard_Short_Short_Unsigned));
       Tree_Read_Int (Int (Standard_Short_Unsigned));
       Tree_Read_Int (Int (Standard_Unsigned));
       Tree_Read_Int (Int (Standard_Long_Unsigned));
       Tree_Read_Int (Int (Standard_Long_Long_Unsigned));
+      Tree_Read_Int (Int (Standard_Unsigned_64));
       Tree_Read_Int (Int (Abort_Signal));
       Tree_Read_Int (Int (Standard_Op_Rotate_Left));
       Tree_Read_Int (Int (Standard_Op_Rotate_Right));
@@ -96,9 +122,34 @@
       Tree_Write_Int (Int (Standard_Package_Node));
       Tree_Write_Int (Int (Last_Standard_Node_Id));
       Tree_Write_Int (Int (Last_Standard_List_Id));
+
+      Tree_Write_Int (Int (Boolean_Literals (False)));
+      Tree_Write_Int (Int (Boolean_Literals (True)));
+
       Tree_Write_Int (Int (Standard_Void_Type));
       Tree_Write_Int (Int (Standard_Exception_Type));
       Tree_Write_Int (Int (Standard_A_String));
+      Tree_Write_Int (Int (Standard_A_Char));
+      Tree_Write_Int (Int (Standard_Debug_Renaming_Type));
+
+      --  Deal with Predefined_Float_Types, which is an Elist. Write the
+      --  entities out in sequence, terminated by an Empty entry.
+
+      declare
+         Elmt : Elmt_Id;
+
+      begin
+         Elmt := First_Elmt (Predefined_Float_Types);
+         while Present (Elmt) loop
+            Tree_Write_Int (Int (Node (Elmt)));
+            Next_Elmt (Elmt);
+         end loop;
+
+         Tree_Write_Int (Int (Empty));
+      end;
+
+      --  Remainder of special entries
+
       Tree_Write_Int (Int (Any_Id));
       Tree_Write_Int (Int (Any_Type));
       Tree_Write_Int (Int (Any_Access));
@@ -109,10 +160,12 @@
       Tree_Write_Int (Int (Any_Discrete));
       Tree_Write_Int (Int (Any_Fixed));
       Tree_Write_Int (Int (Any_Integer));
+      Tree_Write_Int (Int (Any_Modular));
       Tree_Write_Int (Int (Any_Numeric));
       Tree_Write_Int (Int (Any_Real));
       Tree_Write_Int (Int (Any_Scalar));
       Tree_Write_Int (Int (Any_String));
+      Tree_Write_Int (Int (Raise_Type));
       Tree_Write_Int (Int (Universal_Integer));
       Tree_Write_Int (Int (Universal_Real));
       Tree_Write_Int (Int (Universal_Fixed));
@@ -120,12 +173,12 @@
       Tree_Write_Int (Int (Standard_Integer_16));
       Tree_Write_Int (Int (Standard_Integer_32));
       Tree_Write_Int (Int (Standard_Integer_64));
-      Tree_Write_Int (Int (Standard_Unsigned_64));
       Tree_Write_Int (Int (Standard_Short_Short_Unsigned));
       Tree_Write_Int (Int (Standard_Short_Unsigned));
       Tree_Write_Int (Int (Standard_Unsigned));
       Tree_Write_Int (Int (Standard_Long_Unsigned));
       Tree_Write_Int (Int (Standard_Long_Long_Unsigned));
+      Tree_Write_Int (Int (Standard_Unsigned_64));
       Tree_Write_Int (Int (Abort_Signal));
       Tree_Write_Int (Int (Standard_Op_Rotate_Left));
       Tree_Write_Int (Int (Standard_Op_Rotate_Right));

Reply via email to