aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadupdate.c
diff options
context:
space:
mode:
authorYannick Moy <moy@adacore.com>2019-09-17 08:02:30 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-09-17 08:02:30 +0000
commitd4ba72cbad263d9b4fd211534c117343ed5333a1 (patch)
tree7a0e5a8389c0d2c6332239dfe378189aa472a311 /gcc/tree-ssa-threadupdate.c
parent7197e2db28f10dec509967bb1cbd2d74cb03ee7e (diff)
downloadgcc-d4ba72cbad263d9b4fd211534c117343ed5333a1.zip
gcc-d4ba72cbad263d9b4fd211534c117343ed5333a1.tar.gz
gcc-d4ba72cbad263d9b4fd211534c117343ed5333a1.tar.bz2
[Ada] Raise Constraint_Error in overflow case involving rounding
Function Scaled_Divide in s-arith runtime unit computes the combined multiplication and division of its arguments ((X*Y) / Z). In a very special case where the quotient computed before rounding is 2**64-1, then rounding may lead to undesirable wrap-around, leading to a computed quotient of 0 instead of raising Constraint_Error as expected. This function is only called in the runtime for arithmetic operations involving fixed-point types. Rounding is performed only when the target type is of a decimal fixed-point type, and the attribute 'Round of the type is used to round the result of the arithmetic operation. This fix correctly raises Constraint_Error in this special case. 2019-09-17 Yannick Moy <moy@adacore.com> gcc/ada/ * libgnat/s-arit64.adb (Scaled_Divide): Add protection against undesirable wrap-around. gcc/testsuite/ * gnat.dg/multfixed.adb: New testcase. From-SVN: r275791
Diffstat (limited to 'gcc/tree-ssa-threadupdate.c')
0 files changed, 0 insertions, 0 deletions