From: Paul Eggert <eggert@cs.ucla.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: larsi@gnus.org, 49261@debbugs.gnu.org
Subject: bug#49261: Segfault during loadup
Date: Wed, 14 Jul 2021 17:24:37 -0500 [thread overview]
Message-ID: <33801f54-3794-d98c-54c3-c67ce53ec6c0@cs.ucla.edu> (raw)
In-Reply-To: <83eec1843o.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 1314 bytes --]
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 #2: 0001-Pacify-gcc-Woverflow-more-clearly.patch --]
[-- Type: text/x-patch, Size: 1077 bytes --]
From 0afbde4e68c1161a54f9593ecb5b66fe42aa0de4 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 14 Jul 2021 17:10:06 -0500
Subject: [PATCH] Pacify gcc -Woverflow more clearly
* src/alloc.c (mark_maybe_pointer): Make it clearer that ANDing
with UINTPTR_MAX is intended. Omit a now-unnecessary cast.
---
src/alloc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/alloc.c b/src/alloc.c
index ee3fd64a00..8edcd06c84 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4764,7 +4764,9 @@ mark_maybe_pointer (void *p, bool symbol_only)
from Emacs source code, it can occur in some cases. To fix
this problem, the pdumper code should grok non-initial
addresses, as the non-pdumper code does. */
- void *po = (void *) ((uintptr_t) p & (uintptr_t) VALMASK);
+ uintptr_t mask = VALMASK & UINTPTR_MAX;
+ uintptr_t masked_p = (uintptr_t) p & mask;
+ void *po = (void *) masked_p;
char *cp = p;
char *cpo = po;
/* Don't use pdumper_object_p_precise here! It doesn't check the
--
2.25.1
next prev parent reply other threads:[~2021-07-14 22:24 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-28 17:38 bug#49261: 28.0.50; File Locking Breaks Presumptuous Toolchains Mallchad Skeghyeph
2021-06-30 13:00 ` Lars Ingebrigtsen
2021-06-30 13:26 ` Eli Zaretskii
2021-06-30 14:08 ` Lars Ingebrigtsen
[not found] ` <CADrO7Mje3DstmjxutZcpx33jWJwgE_z+hGfJc4aON1CYOpyJxA@mail.gmail.com>
2021-07-01 10:55 ` Lars Ingebrigtsen
2021-07-01 12:58 ` Eli Zaretskii
2021-06-30 16:07 ` Michael Albinus
2021-06-30 16:16 ` Eli Zaretskii
2021-07-01 11:38 ` Lars Ingebrigtsen
2021-06-30 19:31 ` Juri Linkov
2021-07-01 16:57 ` Michael Albinus
2021-07-01 18:31 ` Eli Zaretskii
2021-07-02 11:06 ` Lars Ingebrigtsen
2021-07-02 12:32 ` Michael Albinus
2021-07-07 16:01 ` Lars Ingebrigtsen
2021-07-07 16:07 ` Michael Albinus
2021-07-07 16:13 ` Lars Ingebrigtsen
2021-07-07 16:40 ` Michael Albinus
2021-07-07 16:57 ` Lars Ingebrigtsen
2021-07-07 16:55 ` Michael Albinus
2021-07-07 16:59 ` Lars Ingebrigtsen
2021-07-07 17:36 ` Michael Albinus
2021-07-07 18:08 ` Lars Ingebrigtsen
2021-07-07 18:33 ` Eli Zaretskii
2021-07-07 18:50 ` Lars Ingebrigtsen
2021-07-07 19:40 ` Lars Ingebrigtsen
2021-07-07 20:03 ` Michael Albinus
2021-07-08 6:03 ` Michael Albinus
2021-07-08 19:53 ` Michael Albinus
2021-07-09 6:30 ` Eli Zaretskii
2021-07-09 8:28 ` Michael Albinus
2021-07-09 10:45 ` Eli Zaretskii
2021-07-09 11:01 ` Michael Albinus
2021-07-09 16:31 ` Lars Ingebrigtsen
2021-07-12 13:53 ` Michael Albinus
2021-07-12 14:03 ` Eli Zaretskii
2021-07-12 14:37 ` Michael Albinus
2021-07-12 17:30 ` Eli Zaretskii
2021-07-12 17:35 ` Lars Ingebrigtsen
2021-07-12 17:38 ` Eli Zaretskii
2021-07-12 18:00 ` Michael Albinus
2021-07-12 18:25 ` Eli Zaretskii
2021-07-12 18:46 ` Michael Albinus
2021-07-12 19:04 ` Eli Zaretskii
2021-07-13 17:53 ` Michael Albinus
2021-07-13 16:30 ` Lars Ingebrigtsen
2021-07-13 16:31 ` Lars Ingebrigtsen
2021-07-13 16:41 ` Eli Zaretskii
2021-07-13 17:59 ` Michael Albinus
2021-07-13 19:00 ` Eli Zaretskii
2021-07-13 19:09 ` Lars Ingebrigtsen
2021-07-13 19:36 ` Michael Albinus
2021-07-13 17:55 ` Michael Albinus
2021-07-13 19:05 ` Lars Ingebrigtsen
2021-07-16 16:15 ` Michael Albinus
2021-07-17 14:06 ` Lars Ingebrigtsen
2021-07-07 20:05 ` Eli Zaretskii
2021-07-07 20:09 ` Lars Ingebrigtsen
2021-07-07 20:15 ` Eli Zaretskii
2021-07-07 20:10 ` Eli Zaretskii
2021-07-07 20:18 ` Lars Ingebrigtsen
2021-07-07 20:29 ` Lars Ingebrigtsen
2021-07-07 20:37 ` Lars Ingebrigtsen
2021-07-07 20:55 ` Lars Ingebrigtsen
2021-07-07 21:04 ` Lars Ingebrigtsen
2021-07-07 22:22 ` Lars Ingebrigtsen
2021-07-08 0:09 ` bug#49261: Segfault during loadup Lars Ingebrigtsen
2021-07-08 6:35 ` Eli Zaretskii
2021-07-08 12:51 ` Lars Ingebrigtsen
2021-07-11 8:36 ` Paul Eggert
2021-07-11 10:21 ` Eli Zaretskii
2021-07-11 15:25 ` Eli Zaretskii
2021-07-12 7:16 ` Paul Eggert
2021-07-12 12:07 ` Eli Zaretskii
2021-07-12 14:50 ` Paul Eggert
2021-07-12 14:56 ` Andreas Schwab
2021-07-12 15:54 ` Eli Zaretskii
2021-07-13 23:12 ` Paul Eggert
2021-07-14 7:42 ` Andreas Schwab
2021-07-14 22:04 ` Paul Eggert
2021-07-14 22:10 ` Andreas Schwab
2021-07-14 12:36 ` Eli Zaretskii
2021-07-14 22:24 ` Paul Eggert [this message]
2021-07-15 6:13 ` Eli Zaretskii
2021-07-11 11:32 ` Lars Ingebrigtsen
2021-07-08 6:15 ` bug#49261: 28.0.50; File Locking Breaks Presumptuous Toolchains Eli Zaretskii
2021-07-08 6:20 ` Eli Zaretskii
2021-07-08 12:44 ` Lars Ingebrigtsen
2021-07-08 13:11 ` Lars Ingebrigtsen
2021-07-08 13:13 ` Eli Zaretskii
2021-07-08 6:17 ` Eli Zaretskii
2021-07-08 12:42 ` Lars Ingebrigtsen
2021-07-08 12:49 ` Lars Ingebrigtsen
2021-07-08 13:16 ` Eli Zaretskii
2021-07-08 13:34 ` Lars Ingebrigtsen
2021-07-08 16:47 ` Eli Zaretskii
2021-07-10 16:25 ` Lars Ingebrigtsen
2021-07-10 17:04 ` Eli Zaretskii
2021-07-10 17:15 ` Lars Ingebrigtsen
2021-07-10 17:20 ` Eli Zaretskii
2021-07-07 18:02 ` Eli Zaretskii
2021-07-07 18:17 ` Lars Ingebrigtsen
2021-07-07 18:20 ` Lars Ingebrigtsen
2021-07-07 18:42 ` Eli Zaretskii
2021-07-07 18:58 ` Lars Ingebrigtsen
2021-07-07 19:03 ` Lars Ingebrigtsen
2021-07-07 19:20 ` Eli Zaretskii
2021-07-07 18:50 ` Eli Zaretskii
2021-07-07 19:22 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=33801f54-3794-d98c-54c3-c67ce53ec6c0@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=49261@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).