]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve offset calculation in wide int builds
authorPhilipp Stephani <phst@google.com>
Sat, 1 Aug 2020 19:01:24 +0000 (21:01 +0200)
committerPhilipp Stephani <phst@google.com>
Sat, 1 Aug 2020 19:02:33 +0000 (21:02 +0200)
* src/alloc.c (mark_maybe_object): Make sure that OFFSET isn’t widened
during subtraction.

src/alloc.c

index f203061161b89a1f2855210cd2eab383e81d0970..e556fc86a3b8aca337f1348c850ac1f054d34397 100644 (file)
@@ -4641,8 +4641,10 @@ mark_maybe_object (Lisp_Object obj)
       break;
     }
 
-  void *po = (char *) ((intptr_t) (char *) XLP (obj)
-                       + (offset - LISP_WORD_TAG (type_tag)));
+  bool overflow
+    = INT_SUBTRACT_WRAPV (offset, LISP_WORD_TAG (type_tag), &offset);
+  eassert (!overflow);
+  void *po = (char *) ((intptr_t) (char *) XLP (obj) + offset);
 
   /* If the pointer is in the dump image and the dump has a record
      of the object starting at the place where the pointer points, we