Ar an triochadú lá de mí Bealtaine, scríobh Stephen J. Turnbull: 
 This code in eval.c at l. 6016 gets flagged as 64-bit unsafe
 (specifically on amd64 pointers and EMACS_INTs are 64 bits, while ints
 are 32 bits).  In fact, in C++ it's an error.  Anybody know what
 should be happening here?  I would assume that all C integers that are
 visible to Lisp are EMACS_INTs, 
The code doesn’t appear to deal with integers that are visible to Lisp, only
those C integers involved in managing the Lisp stack. And an explicit cast
gives an error in C++? What?
The functions are used ultimately by internal_bind_int and the corresponding
unbinding code; the C integers bound are entering_debugger, in_warnings and
inhibit_flags. The below should fix things, if I understand things
correctly; no need to change record_unwind_protect_restoring_int, since 
NUMBER_FITS_IN_AN_EMACS_INT on an integer value will always be true on
AMD64. 
--- eval.c~	2007-06-01 04:24:21.000000000 +0200
+++ eval.c	2007-06-01 04:29:56.000000000 +0200
@@ -6011,11 +6011,13 @@
 
   if (INTP (lval))
     val = XINT (lval);
+#if SIZEOF_EMACS_INT <= SIZEOF_INT
   else
     {
       val = (int) get_opaque_ptr (lval);
       free_opaque_ptr (lval);
     }
+#endif
 
   *addr = val;
   free_opaque_ptr (opaque);
 [...] but if there not changing the declaration of val to EMACS_INT
below
 would be a disaster. 
-- 
On the quay of the little Black Sea port, where the rescued pair came once
more into contact with civilization, Dobrinton was bitten by a dog which was
assumed to be mad, though it may only have been indiscriminating. (Saki)
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta