[Ada] Fix incorrect Do_Range_Check on type conversion
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 12 Aug 2019 08:58:46 +0000 (08:58 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 12 Aug 2019 08:58:46 +0000 (08:58 +0000)
This gets rid of another leak of the Do_Range_Check flag to the back-end
which is specific to expression functions.  No functional changes.

2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* checks.adb (Activate_Range_Check): Remove redundant argument.
(Generate_Range_Check): Likewise.
(Apply_Float_Conversion_Check): Reset the Do_Range_Check flag on
entry and remove redundant condition.

From-SVN: r274279

gcc/ada/ChangeLog
gcc/ada/checks.adb

index cb3892ff36e4c926452194d841b7183fb6756e00..749d96a138956bf5fa20d55e51ffcc7f7a8a7159 100644 (file)
@@ -1,3 +1,10 @@
+2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * checks.adb (Activate_Range_Check): Remove redundant argument.
+       (Generate_Range_Check): Likewise.
+       (Apply_Float_Conversion_Check): Reset the Do_Range_Check flag on
+       entry and remove redundant condition.
+
 2019-08-02  Alexandre Oliva  <oliva@adacore.com>
 
        * libgnat/a-exexpr.adb (Begin_Handler_v1, End_Handler_v1): New.
index 708bd9e66f70ce067a9cd28726ffb1f68a1dd6b0..813ffec31361738949914bd12d2e9005bb42a5f8 100644 (file)
@@ -445,7 +445,7 @@ package body Checks is
 
    procedure Activate_Range_Check (N : Node_Id) is
    begin
-      Set_Do_Range_Check (N, True);
+      Set_Do_Range_Check (N);
       Possible_Local_Raise (N, Standard_Constraint_Error);
    end Activate_Range_Check;
 
@@ -2031,6 +2031,12 @@ package body Checks is
          return;
       end if;
 
+      --  Here we will generate an explicit range check, so we don't want to
+      --  set the Do_Range check flag, since the range check is taken care of
+      --  by the code we will generate.
+
+      Set_Do_Range_Check (Ck_Node, False);
+
       if not Compile_Time_Known_Value (LB)
           or not Compile_Time_Known_Value (HB)
       then
@@ -2079,7 +2085,6 @@ package body Checks is
       if Nkind (Ck_Node) = N_Real_Literal
         and then Etype (Ck_Node) = Universal_Real
         and then Is_Integer_Type (Target_Typ)
-        and then Nkind (Parent (Ck_Node)) = N_Type_Conversion
       then
          declare
             Int_Val : constant Uint := UR_To_Uint (Realval (Ck_Node));
@@ -6936,7 +6941,7 @@ package body Checks is
       --  flag set, we do not want to generate the explicit range check code.
 
       if GNATprove_Mode or else not Expander_Active then
-         Set_Do_Range_Check (N, True);
+         Set_Do_Range_Check (N);
          return;
       end if;