diff options
author | Jakub Jelinek <jakub@redhat.com> | 2021-02-24 20:07:38 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2021-02-24 20:07:38 +0100 |
commit | 35da095d7e0614235cb0e241685c5e1a240dc882 (patch) | |
tree | e76dc8f00e4246dacead8997d04cbfe344043a49 /libgcc | |
parent | b6680c2084521d2612c3a08aa01b274078c4f3e3 (diff) | |
download | gcc-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.c | 2 |
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) { |