]> git.eshelyaron.com Git - emacs.git/commitdiff
Port to 32-bit sparc64
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 20 Mar 2018 16:54:20 +0000 (09:54 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 20 Mar 2018 21:39:12 +0000 (14:39 -0700)
Backport from master.
Problem reported by Ulrich Mueller; fix suggested by Eli Zaretskii
and Andreas Schwab (Bug#30855).
* src/alloc.c (mark_memory): Call mark_maybe_object only on
pointers that are properly aligned for Lisp_Object.

src/alloc.c

index 9d0e2d37e3cf05b43e41117f52b4a4da90d3598a..c3f7920ed87c730bac7e1f11bbb1fbfa38c584ee 100644 (file)
@@ -4983,7 +4983,11 @@ mark_memory (void *start, void *end)
   for (pp = start; (void *) pp < end; pp += GC_POINTER_ALIGNMENT)
     {
       mark_maybe_pointer (*(void **) pp);
-      mark_maybe_object (*(Lisp_Object *) pp);
+
+      verify (alignof (Lisp_Object) % GC_POINTER_ALIGNMENT == 0);
+      if (alignof (Lisp_Object) == GC_POINTER_ALIGNMENT
+         || (uintptr_t) pp % alignof (Lisp_Object) == 0)
+       mark_maybe_object (*(Lisp_Object *) pp);
     }
 }