Message ID | 20250425205618.360232-6-adhemerval.zanella@linaro.org |
---|---|
State | Accepted |
Commit | 7619c1b032229a36606862ebbb06807792bbe57d |
Headers | show |
Series | Fix UB in math implementations | expand |
On 4/25/25 4:54 PM, Adhemerval Zanella wrote: > The left shift overflows for 'int64_t', use unsigned instead. It syncs > with CORE-MATH commit f7c7408d1749ec2859ea249495af699359ae559b. > > Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu. LGTM. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > --- > sysdeps/ieee754/flt-32/s_cbrtf.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/sysdeps/ieee754/flt-32/s_cbrtf.c b/sysdeps/ieee754/flt-32/s_cbrtf.c > index 5a7a9a952d..df9e888c1f 100644 > --- a/sysdeps/ieee754/flt-32/s_cbrtf.c > +++ b/sysdeps/ieee754/flt-32/s_cbrtf.c > @@ -3,7 +3,7 @@ > Copyright (c) 2023, 2024 Alexei Sibidanov. > > The original version of this file was copied from the CORE-MATH > -project (file src/binary32/cbrt/cbrtf.c, revision bc385c2). > +project (file src/binary32/cbrt/cbrtf.c, revision f7c7408d). OK. > > Permission is hereby granted, free of charge, to any person obtaining a copy > of this software and associated documentation files (the "Software"), to deal > @@ -61,8 +61,8 @@ __cbrtf (float x) > e += 899; > uint32_t et = e / 3, it = e % 3; > uint64_t isc = escale[it].u; > - isc += (int64_t) (et - 342) << 52; > - isc |= (int64_t) sgn << 63; > + isc += (uint64_t) (et - 342) << 52; > + isc |= (uint64_t) sgn << 63; > double cvt2 = asdouble (isc); > static const double c[] = > { OK. commit f7c7408d1749ec2859ea249495af699359ae559b Author: Paul Zimmermann <Paul.Zimmermann@inria.fr> Date: Thu Mar 13 14:37:02 2025 +0100 [cbrtf] fixed undefined behavior
diff --git a/sysdeps/ieee754/flt-32/s_cbrtf.c b/sysdeps/ieee754/flt-32/s_cbrtf.c index 5a7a9a952d..df9e888c1f 100644 --- a/sysdeps/ieee754/flt-32/s_cbrtf.c +++ b/sysdeps/ieee754/flt-32/s_cbrtf.c @@ -3,7 +3,7 @@ Copyright (c) 2023, 2024 Alexei Sibidanov. The original version of this file was copied from the CORE-MATH -project (file src/binary32/cbrt/cbrtf.c, revision bc385c2). +project (file src/binary32/cbrt/cbrtf.c, revision f7c7408d). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -61,8 +61,8 @@ __cbrtf (float x) e += 899; uint32_t et = e / 3, it = e % 3; uint64_t isc = escale[it].u; - isc += (int64_t) (et - 342) << 52; - isc |= (int64_t) sgn << 63; + isc += (uint64_t) (et - 342) << 52; + isc |= (uint64_t) sgn << 63; double cvt2 = asdouble (isc); static const double c[] = {