]> git.eshelyaron.com Git - emacs.git/commitdiff
More emacs-module.c fixes for wide ints
authorEli Zaretskii <eliz@gnu.org>
Wed, 2 Dec 2015 14:06:01 +0000 (16:06 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 2 Dec 2015 14:06:01 +0000 (16:06 +0200)
* src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
unsigned data types to manipulate pointers, to avoid sign
extension coming after us with a vengeance.

* modules/mod-test/test.el (mod-test-sum-test): Add tests for
Emacs with wide ints that verify integer values near the critical
value that requires us to switch to a cons cell.

modules/mod-test/test.el
src/emacs-module.c

index eacc6671ead93ce81f5ca18abcc95094ad8d7762..ad4cc49c6909dc721c7e980fa747f667414f5d3e 100644 (file)
     (should (= (nth 2 descr) 3)))
   (should-error (mod-test-sum "1" 2) :type 'wrong-type-argument)
   (should-error (mod-test-sum 1 "2") :type 'wrong-type-argument)
+  ;; The following tests are for 32-bit build --with-wide-int.
   (should (= (mod-test-sum -1 most-positive-fixnum)
              (1- most-positive-fixnum)))
   (should (= (mod-test-sum 1 most-negative-fixnum)
-             (1+ most-negative-fixnum))))
+             (1+ most-negative-fixnum)))
+  (should (= (mod-test-sum 1 #x1fffffff)
+             (1+  #x1fffffff)))
+  (should (= (mod-test-sum -1 #x20000000)
+             #x1fffffff)))
 
 (ert-deftest mod-test-sum-docstring ()
   (should (string= (documentation 'mod-test-sum) "Return A + B")))
index 13f2a1dd98f8018f91a7d68ff7cebabcc8a4ddc9..22fee7e48607c395ea580ec9daff07009408f567 100644 (file)
@@ -850,8 +850,8 @@ static Lisp_Object
 value_to_lisp (emacs_value v)
 {
 #ifdef WIDE_EMACS_INT
-  ptrdiff_t tmp = (ptrdiff_t)v;
-  int tag = tmp & ((1 << GCTYPEBITS) - 1);
+  uintptr_t tmp = (uintptr_t)v;
+  unsigned tag = tmp & ((1 << GCTYPEBITS) - 1);
   Lisp_Object o;
   switch (tag)
     {