On Fri, Aug 5, 2011 at 3:35 AM, Stephen J. Turnbull <stephen(a)xemacs.org> wrote:
I cannot reproduce on Mac.
Can you post a backtrace?
I tried on Fedora 15 and got a different failure. The definition of
make_int() in lisp-disunion.h is not quite right. (The version in
lisp-union.h is fine.) Here's the definition:
#define make_int(x) ((Lisp_Object) (((x) << INT_GCBITS) | Lisp_Type_Int_Bit))
With this definition, make_int(INT_MAX) on a machine where EMACS_INT
== long returns a negative result, due to overflow of (INT_MAX <<
INT_GCBITS). The definition should be:
#define make_int(x) ((Lisp_Object) ((((EMACS_INT)(x)) << INT_GCBITS) |
to get x into a machine word of the correct size before shifting. A
similar change is needed for make_int_verify(), and maybe for
make_char_1(), or are we sure we won't overflow there? For me, this
bug kills the XFT build because the check_integer_range() call on line
440 of font-mgr.c fails.
XEmacs-Beta mailing list