diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2019-07-23 08:13:26 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-07-23 08:13:26 +0000 |
commit | a7191e01187b6ff6429699f09fed8f3fbb018b74 (patch) | |
tree | 932336e21fd305ec8e1da336789d58030323270d /gcc | |
parent | f9534f4bd63c9f4be7816f0f9bd8a5feeded5821 (diff) | |
download | gcc-a7191e01187b6ff6429699f09fed8f3fbb018b74.zip gcc-a7191e01187b6ff6429699f09fed8f3fbb018b74.tar.gz gcc-a7191e01187b6ff6429699f09fed8f3fbb018b74.tar.bz2 |
[Ada] Eliminate redundant overflow checks for conversions from fixed-point
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/checks.adb | 2 | ||||
-rw-r--r-- | gcc/ada/exp_ch4.adb | 10 |
3 files changed, 13 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 445e70e..7869495 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,12 @@ 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. (Write_Val): Likewise. diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index e1f7f9a..2eff274 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -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; diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index dc2146c..2af54a7 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -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. |