Skip to content
  • Mark H Weaver's avatar
    Do not assume that sizeof (long) == sizeof (void *) == sizeof (SCM). · 1d257c27
    Mark H Weaver authored and Andy Wingo's avatar Andy Wingo committed
    This assumption does not hold on systems that use the LLP64 data model.
    
    Partially fixes <https://debbugs.gnu.org/22406>.
    Reported by Peter TB Brett <peter@peter-b.co.uk>.
    
    * libguile/numbers.h (scm_t_inum): Move here from numbers.c, and change
      to be equivalent to 'long' (formerly 'scm_t_signed_bits').
      (SCM_MOST_POSITIVE_FIXNUM, SCM_MOST_NEGATIVE_FIXNUM): Define based on
      SCM_I_FIXNUM_BIT instead of SCM_T_SIGNED_BITS_MAX.
      (SCM_I_INUM): Adjust definitions to return a 'scm_t_inum', and avoiding
      the assumption that SCM_UNPACK returns a 'long'.
    * libguile/numbers.c (scm_t_inum): Move definition to numbers.h.
      Verify that 'scm_t_inum' fits within a SCM value.
      (scm_i_inum2big): Remove preprocessor code that forced a compile error
      unless sizeof (long) == sizeof (void *).
    1d257c27