Avoid undefined behavior regarding signed integers and left shifts.
authorMark H Weaver <mhw@netris.org>
Wed, 12 Mar 2014 00:19:17 +0000 (20:19 -0400)
committerMark H Weaver <mhw@netris.org>
Wed, 12 Mar 2014 01:39:13 +0000 (21:39 -0400)
commit03cce0ce5fba210e4abd8fa5dfddb04022a27e75
tree4fb231f8147a10969d1cf4b037cf999364a44d22
parent5fbf0e0f99431f54da032bda47d8125f9d34b4b1
Avoid undefined behavior regarding signed integers and left shifts.

* libguile/numbers.c (scm_logbit_p): If the requested bit is the sign
  bit (or above), check the sign portably.  Otherwise, ensure that we're
  testing the bit in a two's complement representation.
  (left_shift_exact_integer): Avoid left-shifting negative integers.

* libguile/vm-i-scheme.c (ash): Avoid left-shifting negative integers.
libguile/numbers.c
libguile/vm-i-scheme.c