From: Joffrey Huguet <[email protected]>

This patch adds Data_Error in Exceptional_Cases contracts for Get
procedures in Ada.Text_IO.

gcc/ada/ChangeLog:

        * libgnat/a-textio.ads (Get): Add Data_Error in Exceptional_Cases 
contract.
        (Look_Ahead): Likewise.
        (Get_Immediate): Likewise.
        (Get_Line): Likewise.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/libgnat/a-textio.ads | 40 +++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/gcc/ada/libgnat/a-textio.ads b/gcc/ada/libgnat/a-textio.ads
index 9ba63ddcfa1..5e350418492 100644
--- a/gcc/ada/libgnat/a-textio.ads
+++ b/gcc/ada/libgnat/a-textio.ads
@@ -414,14 +414,16 @@ is
    procedure Get (File : File_Type; Item : out Character) with
      Pre               => Is_Open (File) and then Mode (File) = In_File,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    procedure Get (Item : out Character) with
      Post              =>
        Line_Length'Old = Line_Length
        and Page_Length'Old = Page_Length,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    procedure Put (File : File_Type; Item : Character) with
      Pre    => Is_Open (File) and then Mode (File) /= In_File,
@@ -441,17 +443,19 @@ is
       Item        : out Character;
       End_Of_Line : out Boolean)
    with
-     Pre    => Is_Open (File) and then Mode (File) = In_File,
-     Global => (Input => File_System);
+     Pre               => Is_Open (File) and then Mode (File) = In_File,
+     Global            => (Input => File_System),
+     Exceptional_Cases => (Data_Error => Standard.True);
 
    procedure Look_Ahead
      (Item        : out Character;
       End_Of_Line : out Boolean)
    with
-     Post   =>
+     Post              =>
        Line_Length'Old = Line_Length
        and Page_Length'Old = Page_Length,
-     Global => (Input => File_System);
+     Global            => (Input => File_System),
+     Exceptional_Cases => (Data_Error => Standard.True);
 
    procedure Get_Immediate
      (File : File_Type;
@@ -459,7 +463,8 @@ is
    with
      Pre               => Is_Open (File) and then Mode (File) = In_File,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    procedure Get_Immediate
      (Item : out Character)
@@ -468,7 +473,8 @@ is
        Line_Length'Old = Line_Length
        and Page_Length'Old = Page_Length,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    procedure Get_Immediate
      (File      : File_Type;
@@ -477,7 +483,8 @@ is
    with
      Pre               => Is_Open (File) and then Mode (File) = In_File,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    procedure Get_Immediate
      (Item      : out Character;
@@ -487,7 +494,8 @@ is
        Line_Length'Old = Line_Length
        and Page_Length'Old = Page_Length,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Standard.True);
+     Exceptional_Cases => (End_Error  => Standard.True,
+                           Data_Error => Standard.True);
 
    -------------------------
    -- String Input-Output --
@@ -496,14 +504,16 @@ is
    procedure Get (File : File_Type; Item : out String) with
      Pre               => Is_Open (File) and then Mode (File) = In_File,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Item'Length'Old > 0);
+     Exceptional_Cases => (End_Error  => Item'Length'Old > 0,
+                           Data_Error => Item'Length'Old > 0);
 
    procedure Get (Item : out String) with
      Post              =>
        Line_Length'Old = Line_Length
        and Page_Length'Old = Page_Length,
      Global            => (In_Out => File_System),
-     Exceptional_Cases => (End_Error => Item'Length'Old > 0);
+     Exceptional_Cases => (End_Error  => Item'Length'Old > 0,
+                           Data_Error => Item'Length'Old > 0);
 
    procedure Put (File : File_Type; Item : String) with
      Pre    => Is_Open (File) and then Mode (File) /= In_File,
@@ -530,7 +540,8 @@ is
         else Last = Item'First - 1)
        and (for all I in Item'First .. Last => Item (I)'Initialized),
      Global                 => (In_Out => File_System),
-     Exceptional_Cases      => (End_Error => Item'Length'Old > 0);
+     Exceptional_Cases      => (End_Error  => Item'Length'Old > 0,
+                                Data_Error => Item'Length'Old > 0);
 
    procedure Get_Line
      (Item : out String;
@@ -544,7 +555,8 @@ is
             else Last = Item'First - 1)
        and (for all I in Item'First .. Last => Item (I)'Initialized),
      Global                => (In_Out => File_System),
-     Exceptional_Cases     => (End_Error => Item'Length'Old > 0);
+     Exceptional_Cases     => (End_Error  => Item'Length'Old > 0,
+                               Data_Error => Item'Length'Old > 0);
 
    function Get_Line (File : File_Type) return String with SPARK_Mode => Off;
    pragma Ada_05 (Get_Line);
-- 
2.53.0

Reply via email to