math: Fix UB on cbrtf (BZ 32922)

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.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Adhemerval Zanella 2025-04-25 17:54:26 -03:00
parent c8775c0423
commit 7619c1b032
1 changed files with 3 additions and 3 deletions

View File

@ -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[] =
{