]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Eliminate redundant overflow checks for conversions from fixed-point
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 23 Jul 2019 08:13:26 +0000 (08:13 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 23 Jul 2019 08:13:26 +0000 (08:13 +0000)
This eliminates redundant overflow checks that are generated for
conversions from fixed-point to integer types when range checks are also
enabled (which is the default), as the former checks are subsumed into
the latter checks.

No functional changes.

2019-07-23  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* checks.adb (Activate_Overflow_Check): Remove redundant
argument.
* exp_ch4.adb (Discrete_Range_Check): Reset the overflow flag.
(Expand_N_Type_Conversion): Do not reset it here.

From-SVN: r273724

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

index 445e70e8a469e40d36d9e64f6934ac8d23ad428b..786949565d031d4ee952a92f55d69ba1591f1ec9 100644 (file)
@@ -1,3 +1,10 @@
+2019-07-23  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * checks.adb (Activate_Overflow_Check): Remove redundant
+       argument.
+       * exp_ch4.adb (Discrete_Range_Check): Reset the overflow flag.
+       (Expand_N_Type_Conversion): Do not reset it here.
+
 2019-07-23  Eric Botcazou  <ebotcazou@adacore.com>
 
        * repinfo.adb (List_Component_Layout): Pass Decimal to UI_Write.
index e1f7f9a5085e152c43437cd957075ba305fa6529..2eff274e7d009077619d00411c876d5a3d51e056 100644 (file)
@@ -435,7 +435,7 @@ package body Checks is
 
       --  Fall through for cases where we do set the flag
 
-      Set_Do_Overflow_Check (N, True);
+      Set_Do_Overflow_Check (N);
       Possible_Local_Raise (N, Standard_Constraint_Error);
    end Activate_Overflow_Check;
 
index dc2146c50e5bbc19dacbb9e2465a248308b1396f..2af54a7d50bca084602d3fb71ebe731b06f643d7 100644 (file)
@@ -11000,6 +11000,11 @@ package body Exp_Ch4 is
             Rewrite (Expr, Unchecked_Convert_To (Ityp, Expr));
          end if;
 
+         --  Reset overflow flag, since the range check will include
+         --  dealing with possible overflow, and generate the check.
+
+         Set_Do_Overflow_Check (N, False);
+
          Generate_Range_Check (Expr, Target_Type, CE_Range_Check_Failed);
       end Discrete_Range_Check;
 
@@ -12096,11 +12101,6 @@ package body Exp_Ch4 is
                       or else (Is_Fixed_Point_Type (Etype (Expression (N)))
                                 and then Conversion_OK (N)))
          then
-            --  Reset overflow flag, since the range check will include
-            --  dealing with possible overflow, and generate the check.
-
-            Set_Do_Overflow_Check (N, False);
-
             --  If Address is either a source type or target type,
             --  suppress range check to avoid typing anomalies when
             --  it is a visible integer type.