mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 04:21:24 +00:00
Fix (ash -1 1) undefined behavior
Problem discovered with GCC 16.1.1 -fsanitize=undefined. * src/data.c (Fash): Don’t left-shift a negative number; behavior is undefined (ISO C23 § 6.5.8 ¶ 4).
This commit is contained in:
parent
8c71b0d6b8
commit
56ae704e5b
1 changed files with 3 additions and 3 deletions
|
|
@ -3599,10 +3599,10 @@ discarding bits. */)
|
|||
else if (FIXNUMP (value))
|
||||
{
|
||||
EMACS_INT v = XFIXNUM (value);
|
||||
EMACS_UINT uv = v < 0 ? ~v : v;
|
||||
EMACS_INT lz = stdc_leading_zeros (uv);
|
||||
EMACS_UINT uv = v, uvcomp = v < 0 ? ~uv : uv;
|
||||
EMACS_INT lz = stdc_leading_zeros (uvcomp);
|
||||
if (EMACS_INT_WIDTH - FIXNUM_BITS < lz - c)
|
||||
return make_fixnum (v << c);
|
||||
return make_fixnum ((EMACS_INT) {uv << c});
|
||||
}
|
||||
|
||||
mpz_t const *zval = bignum_integer (&mpz[0], value);
|
||||
|
|
|
|||
Loading…
Reference in a new issue