diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-04-27 18:29:44 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-04-27 18:29:44 -0700 |
commit | 6ab1b16c54b63d1c4217b6fcea026400029fcc72 (patch) | |
tree | e3fef3d5e3f4436b2bc59b1006afc98075da06f0 /src/data.c | |
parent | 196bfaecb0caffcdbb699694139a97148e90e227 (diff) | |
download | emacs-6ab1b16c54b63d1c4217b6fcea026400029fcc72.tar.gz |
Avoid undefined behavior in signed left shift.
This ports to GCC 4.9.0 with -fsanitize=undefined.
* alloc.c (bool_vector_fill, SETMARKBIT, UNSETMARKBIT):
* data.c (Fash):
* regex.c (extract_number):
* lisp.h (make_number, XINT):
Do not shift a 1 bit left into a sign bit.
* alloc.c (struct cons_block, struct float_block): Use unsigned,
not int, for gcmarkbits. All uses changed.
Diffstat (limited to 'src/data.c')
-rw-r--r-- | src/data.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/data.c b/src/data.c index 965ddd215f5..bf863aaed79 100644 --- a/src/data.c +++ b/src/data.c @@ -2895,7 +2895,7 @@ In this case, the sign bit is duplicated. */) if (XINT (count) >= BITS_PER_EMACS_INT) XSETINT (val, 0); else if (XINT (count) > 0) - XSETINT (val, XINT (value) << XFASTINT (count)); + XSETINT (val, XUINT (value) << XFASTINT (count)); else if (XINT (count) <= -BITS_PER_EMACS_INT) XSETINT (val, XINT (value) < 0 ? -1 : 0); else |