aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2021-02-24 20:07:38 +0100
committerJakub Jelinek <jakub@redhat.com>2021-02-24 20:07:38 +0100
commit35da095d7e0614235cb0e241685c5e1a240dc882 (patch)
treee76dc8f00e4246dacead8997d04cbfe344043a49 /libgcc
parentb6680c2084521d2612c3a08aa01b274078c4f3e3 (diff)
downloadgcc-35da095d7e0614235cb0e241685c5e1a240dc882.zip
gcc-35da095d7e0614235cb0e241685c5e1a240dc882.tar.gz
gcc-35da095d7e0614235cb0e241685c5e1a240dc882.tar.bz2
libgcc: Avoid signed negation overflow in __powi?f2 [PR99236]
When these functions are called with integer minimum, there is UB on the libgcc side. Fixed in the obvious way, the code in the end wants ABSU_EXPR behavior. 2021-02-24 Jakub Jelinek <jakub@redhat.com> PR libgcc/99236 * libgcc2.c (__powisf2, __powidf2, __powitf2, __powixf2): Perform negation of m in unsigned type.
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/libgcc2.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c
index 960f594..17de0a7 100644
--- a/libgcc/libgcc2.c
+++ b/libgcc/libgcc2.c
@@ -1834,7 +1834,7 @@ __fixunssfSI (SFtype a)
TYPE
NAME (TYPE x, int m)
{
- unsigned int n = m < 0 ? -m : m;
+ unsigned int n = m < 0 ? -(unsigned int) m : (unsigned int) m;
TYPE y = n % 2 ? x : 1;
while (n >>= 1)
{