|
From: | Paul Eggert |
Subject: | bug#41321: 27.0.91; Emacs aborts due to invalid pseudovector objects |
Date: | Sat, 30 May 2020 10:52:07 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 |
On 5/29/20 10:54 PM, Eli Zaretskii wrote:
(USE_LSB_TAG ? (uintptr_t) word % GCALIGNMENT == Lisp_Symbol : (uintptr_t) word % alignof (struct Lisp_Symbol) == 0)I don't understand how this will work, given that Lisp object on the stack can be pushed as 2 non-contiguous 32-bit words. Can you explain?
On a --with-wide-int host where !USE_LSB_TAG, the above test will work correctly on the low-order word of a Lisp object that is a symbol, because ((uintptr_t) word % alignof (struct Lisp_Symbol) == 0) must be true on such a word.
The test is only for symbols; it's not for other Lisp objects.
[Prev in Thread] | Current Thread | [Next in Thread] |