bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#49261: Segfault during loadup


From: Paul Eggert
Subject: bug#49261: Segfault during loadup
Date: Wed, 14 Jul 2021 17:24:37 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 7/14/21 7:36 AM, Eli Zaretskii wrote:
You are saying that there's some fundamental difference between

   INT_MAX + 1

and

   (USE_LSB_TAG ? - (1 << GCTYPEBITS) : VAL_MAX)

Yes there's a fundamental difference. INT_MAX + 1 has a signed integer overflow that violates the C standard. Obviously GCC should diagnose it.

The other expression conforms to the C standard and there is no error or overflow there. There's no reason -Woverflow should provoke a diagnostic for it.

Or between an expression 'x = FOO' and 'mask = BAR'?
I don't know what x, mask, FOO, and BAR refer to.

the warning was valid, as the
assignment loses significant bits.
I originally wrote it as "uintptr_t mask = VALMASK;" because I would rather avoid C casts when possible (they're too powerful and allow too many bugs to go undetected). I dislike the workaround that I installed because of (a) its unnecessary cast and (b) the lack of clarity that it's intended that we want to discard any bits outside UINTPTR_MAX ((b) was a problem with my original code too).

To try to fix both (a) and (b) I installed the attached further patch. It is a bit more verbose than what C requires, but the verbosity should help explain that masking with UINTPTR_MAX is intended, and the verbosity shouldn't hurt efficiency.

Attachment: 0001-Pacify-gcc-Woverflow-more-clearly.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]