GNU bug report logs - #75964
Switching the Emacs build to -Wswitch-enum in src/

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Pip Cet <pipcet@HIDDEN>; dated Fri, 31 Jan 2025 09:41:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 5 Feb 2025 12:15:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Feb 05 07:15:33 2025
Received: from localhost ([127.0.0.1]:48907 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfeJZ-0004DN-00
	for submit <at> debbugs.gnu.org; Wed, 05 Feb 2025 07:15:33 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:58234)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tfeJV-0004D7-Ve
 for 75964 <at> debbugs.gnu.org; Wed, 05 Feb 2025 07:15:30 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tfeJP-0006Mt-13; Wed, 05 Feb 2025 07:15:23 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=qtXGNJRFBeD7lnOF0kNZYQzMXE43kfNeLz//wqNIn4k=; b=fZuogw8G/BNS
 brMTNNppv63fp5K7r6oCEIarvDTYqvcfA1CmObKB3/jHlBKvUZAFB7XMJ8hVf7W+wWrNaii6SpNc8
 00iwKxKp3JFiRjIwIm1wXOhUfc3ej2qaQZO/17gRARDZSQPwrPew7KKurJG3QLFZLJxQWHd5ma59Y
 KtJ5SuZ9t9nNpQ+BgfmzraJSHcSStkvc/CkcrbHl8Ekh0mWJ0IHtIktrZh2zU+KIQCxeN1Ag5//RI
 UqxnI1ZqFXUriToQyGWngISNErpifVYu+zwlGYei8eLPxTl6XAVyKrewZ6JO7XTl8usPIkOT2CjwL
 kAwiIwrb4TkERcM7nOFDiQ==;
Date: Wed, 05 Feb 2025 14:15:17 +0200
Message-Id: <86y0yk8u5m.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <jwvwme5l9uf.fsf-monnier+emacs@HIDDEN> (message from Stefan
 Monnier on Tue, 04 Feb 2025 15:45:36 -0500)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN> <86cyfxa4e4.fsf@HIDDEN>
 <jwvwme5l9uf.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stefan Monnier <monnier@HIDDEN>
> Cc: pipcet@HIDDEN,  eggert@HIDDEN,  75964 <at> debbugs.gnu.org,
>   stefankangas@HIDDEN,  acorallo@HIDDEN
> Date: Tue, 04 Feb 2025 15:45:36 -0500
> 
> > So you want a device that would abort for unexpected values?
> 
> I want the compiler to consider this case as an error, rather than
> a defined "this is an empty statement".

Which part of your code is the error you want the compiler to flag?
the cast to enum of a value that is outside of the enum, or the fact
that not all the valid values of the enum are mentioned explicitly in
the switch, so some will fall through?

> > Then why use switch at all?
> 
> Because you want to perform various operations depending on the value of
> the enum (admittedly, in my example I performed the same op on all
> values, but that's because I typed it by hand and got lazy).

An assertion followed by a switch should fit the bill, no?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 21:23:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 16:23:36 2025
Received: from localhost ([127.0.0.1]:46959 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfQON-0002qa-Lr
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 16:23:36 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:34516)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1tfQOK-0002qG-Jf
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 16:23:33 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 3AFEF3C00FA87;
 Tue,  4 Feb 2025 13:23:26 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id 0TPdfO9L0FnY; Tue,  4 Feb 2025 13:23:25 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id A0CC53C00FA88;
 Tue,  4 Feb 2025 13:23:25 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu A0CC53C00FA88
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738704205;
 bh=ewG5TC4JUhm9bCWWP35wP7xenhKZjlxTnJBfjVydP9I=;
 h=Message-ID:Date:MIME-Version:From:To;
 b=cQd8X/taK5UEJil2merKoEY3Yh1V5OvBFqKp3N8bCPRsxGg3Cdx2IDo+bK/qw/XU0
 zvCQHgzsTP7J4ANIZHI9ngqT2tHaijCPCSmbR/vKQlzoeAV0i0bJvCOL5dznBxorKi
 J1+AfSSckjSP789Vau/T4aTudM3jHtTUv3Znny/4mFE5uLCwVkPFcPaG+ha4kaTpFh
 +yiFbU5Ux5DUTHzAofJXsxv8bui2Sh2jkDAe33xBFi2xmNir0NKY+yXY6JKrCczpcU
 9lkefWq+pV3KLYeBbsHrhfmiVTHXNptPeSZBxzHyI5wO+5dNNNTH1/NHNoPEjA9BFh
 C7c+6PNXH1GVA==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id 1Dl4Udx-fMux; Tue,  4 Feb 2025 13:23:25 -0800 (PST)
Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 7A56B3C00FA87;
 Tue,  4 Feb 2025 13:23:25 -0800 (PST)
Content-Type: multipart/mixed; boundary="------------m4aStRi4NiRUThbL5j75HoaB"
Message-ID: <01aefa45-7aac-4485-af70-3f12dc3b64b7@HIDDEN>
Date: Tue, 4 Feb 2025 13:23:25 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Paul Eggert <eggert@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
To: Eli Zaretskii <eliz@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> <86h65ccfk7.fsf@HIDDEN>
 <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN> <86a5b3cjsx.fsf@HIDDEN>
Content-Language: en-US
Autocrypt: addr=eggert@HIDDEN; keydata=
 xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9
 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS
 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl
 KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss
 mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK
 QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2
 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC
 OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+
 KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB
 n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy
 dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBlQQTAQgAPwIbAwYLCQgHAwIGFQgCCQoLBBYCAwEC
 HgECF4AWIQR+N5Kp2Kz31jO8FYjtl+kOYqp+NAUCZiLOewUJHWQLDAAKCRDtl+kOYqp+NHGE
 D/9Wmbk+cAaQsYLPGBvyzIjZIRzo/V2p3ZwckVA1VEQivx5azu1cs86qDoVIe45AtwmKOvdV
 wTQd/QeglkZR6D2YPW7UR/7emajyJZZcy+etVTDKoaw1i6/hmd/CpGjUeUSvgoPs6nYR+1lo
 pSXTpaGrh1W0qQHalSkOOwCHG3HtGk9Ve2AERDUYxmcn8/eZHb7xpUJEJMBBI1bx/zcw1EtB
 rjsQ1R1faJ/r/7LPAyV36RLvnbX69PylHKQEbJoaY9aUb2Vpm63ni3FeTA7/3jpPvaSRWHJh
 vPYx6Fm2Ln8pI0Yf/W2B8QMiPTnF/LnH2kvUcf9VXm+1mQJ3fBFU25HZwBhuqZ24IeKymPEt
 BUMQAum97Dto0jSgR2OUvX7z+twhpQEgRGBzPHYwDi4SxF5Z4Q5Y7B7a++HP9tIxG6CVFIwI
 4xVaZud18bPa0YBL+cISmMgxq7h7yoVXl6u3pm9Yiv+W6Lp9QGN8Rw1VuJMOoFCYuoxG8mXO
 TA5b1jvlQ32gHFFhqErDAhNJRsfgrpe9Gok4Ycp+rWljbvS5Wrl0uth5MP7FbaHN2kmTZibq
 KXAd//IqczhDyU6qnW6ao+h4iDBDgYgRbQjmToX/vmIdEMzvPGqWXKhe/q1TYMuOO+IfP+bI
 fyPFH29nVN/o9c4J7myeKvv3HKSXdSVjlh2V787BTQRMgHJkARAApoXrvxP3DIfjCNOtXU/P
 dwMShKdX/RlSs5PfunV1wbKP8herXHrvQdFVqECaTSxmlhzbk8X0PkY9gcVaU2O49T3qsOd1
 cHeF52YFGEt0LhsBeMjgNX5uZ1V76r8gyeVlFpWWb0SIwJUBHrDXexF67upeRb2vdHBjYDNe
 ySn+0B7gFEqvVmZu+LadudDp6kQLjatFvHQHUSGNshBnkkcaTbiI9Pst0GCc2aiznBiPPA2W
 QxAPlPRh3OGTsn5THADmbjqY6FEMLasVX8DSCblMvLwNeO/8SxziBidhqLpJCqdQRWHku5Xx
 gIkGeKOz5OLDvXHWJyafrEYjjkS6Ak6B5z6svKliClWnjHQcjlPzyoFFgKTEfcqDxCj4RY0D
 0DgtFD0NfyeOidrSB/SzTe2hwryQE3rpSiqo+0cGdzh4yAHKYJ+UrXZ4p93ZhjGfKD1xlrNY
 DlWyW9PGmbvqFuDmiIAQf9WD/wzEfICc+F+uDDI+uYkRxUFp92ykmdhDEFg1yjYsU8iGU69a
 Hyvhq36z4zctvbqhRNzOWB1bVJ/dIMDvsExGcXQVDIT7sDNXv0wE3jKSKpp7NDG1oXUXL+2+
 SF99Kjy753AbQSAmH617fyBNwhJWvQYg+mUvPpiGOtses9EXUI3lS4v0MEaPG43flEs1UR+1
 rpFQWVHo1y1OO+sAEQEAAcLBfAQYAQgAJgIbDBYhBH43kqnYrPfWM7wViO2X6Q5iqn40BQJm
 Is58BQkdZAsMAAoJEO2X6Q5iqn40Q68QAJ9GubS/ej30Vc4idoZdc0IyMcL7kQJbMohF+Tyn
 ZE+TGn9WvzP10yLyzoI0vNlcNfP92d2MS//pFjOuANb5mwyiEYA+rDZIdS4ZZpHxCs2sxMC4
 afLCf3kv4aMnTeBvb9na403dlczz9cAacvsmniSFdpb1+BzMpYbybglU5oYMGhYT2nnCRjXN
 6S2nKYt4mjJeeOuxHrdeqQQdVBNYeNfTcPePeqvZ2+bD6u9yxZtaV+wxdpqglosQvjqhOYz7
 h50/ZTSq70/npoCq44TzdJKttaYvlW6ziRz0g4RRAqZyoxjYXiy5qj8r8zXJuB11ApZCGuKn
 /usbji9RYbflAhxFeh4LMmpDVi6BrF30b73Md59K7PuEKN1NxzlWiqqQHZZ9momN0GXLPcGq
 4uyfq7yVEy7wP5PMOh6oqscKklE3gFQtq0P1Ki0xqdF6Fq5LPJc+0Db2CYkVIy7Xaa/f74I3
 sOfQfEeDylVXR5iDfUJEYv/0DYhOr7q5/0b1kh3M4wkrB4C5jVNHjIIj+RsAK90c3t38OhAl
 jiSN7Bkwy24Afy8eIu6wWzvhnsQGpZPB+IffmxT1wkTy8UxZKjUWV0C82iphVgCUUi2f9sDV
 Q/tNcwVWmOS+gdv9Wk6tdGeM+Ee+Qs6YG05jcSoajzF0TL07ajLcayRq2j1Os2CtQ8qu
Organization: UCLA Computer Science Department
In-Reply-To: <86a5b3cjsx.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: pipcet@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------m4aStRi4NiRUThbL5j75HoaB
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 2/3/25 04:08, Eli Zaretskii wrote:
>> From: Paul Eggert <eggert@HIDDEN>
>> The main point is to catch more potential inadvertent omissions of "ca=
se
>> X:" in a "switch (E)" where E's type is an enum containing X. etags.c,
>> like the rest of Emacs, currently uses one style to do this; the
>> proposed style would be better at catching these mistakes.
>=20
> And how do the proposed changes achieve that goal?

With an enum expression E and code like this:

    switch (E) { case A: ...; case B: ...; }

there is currently no compile-time diagnostic for mismatches between the=20
type and the code when the enum type also has a value C, either because=20
the programmer forgot to handle case C when the switch was written, or=20
because the enum type was changed and the programmer forgot to check all=20
uses of the enum.

There *is* a compile-time diagnostic for similar mismatches between type=20
and code, e.g., if the enum type lacks a B (perhaps because B was=20
formerly present but has since been removed). But there is no=20
compile-time diagnostic for the mismatch in question.

Mismatches like these are all too common and can lead to user-visible=20
bugs. It's a win to detect these mismatches statically.


>> For these switch statements, use "switch (+E)" instead of "switch (E)"=
.
>> This pacifies GCC and clearly signals to the reader that the switch's
>> cases are not intended to exhaust the enum. A "switch (E)" must list a=
ll
>> the enum values; a "switch (+E)" need not do so. A reasonable guidelin=
e
>=20
> The above seems to say that "+E" is different from "E" in ways that
> the compiler knows about.  So I'm asking where is this special meaning
> documented

It is more than merely documented; it's been common practice for years.=20
For example, given enum W {X,Y,Z} the type of an expression like X+1 has=20
been int (not enum W) ever since enums were standardized in the C89=20
standard.

For documentation chapter and verse, please see C23 =C2=A76.5.4.3 =C2=B62=
, which=20
says that the type of +E is like that of -E: the type is E's type after=20
integer promotions. Also please see C23 =C2=A76.3.1.1 =C2=B61=E2=80=932, =
which says that=20
int is the type of these Emacs enums after integer promotion. So, when E=20
is one of these enums, the type of +E (and of -E) is int.


> If the special meaning of "+E" is not well understood

I hope the above suffices to explain why it is well understood.


> I don't think I see how these changes improve checking and make the
> code easier to read.  For me, the "+E" thing is an obstacle to
> negotiate; I'm sure others will also stumble on that.

If necessary we can package "+E" inside an inline identity function.=20
That might help prevent stumbling by people who don't know the C=20
language well, and it would not have any runtime cost in the usual -O2=20
case. I'd rather not use such a function (as +E is clear once you get=20
used to it) but using one would be better than doing nothing, as it=20
would improve static checking.


> apart of that change, the code basically remained the same.

Yes, and that's a plus for +E: you don't have to change the code much.=20
In that sense it's better than Pip Cet's earlier proposal.


>> +      case NEUTRAL_ON: case NEUTRAL_S: case NEUTRAL_WS:
>> +      case STRONG_AL: case STRONG_L: case STRONG_R:
>> +      case WEAK_AN: case WEAK_CS: case WEAK_EN: case WEAK_ES: case WE=
AK_ET: case WEAK_NSM:
>>  	if (override =3D=3D L2R)
>>  	  return STRONG_L;
>>  	else if (override =3D=3D R2L)
>=20
> If you really consider this long list of values more readable than the
> original code, then I guess we disagree on what is and isn't readable.

Oh, that long list was in some sense a misfire, as the patch did two=20
things where I suppose it should have done one. First, the patch=20
improved the runtime checkcing for invalid values, something that can=20
and should be done independently of what we do about -Wswitch-enum.=20
Second, the patch pacified -Wswitch-enum.

I fixed this misfire by splitting the patch into two parts, which I'm=20
attaching. The first attached patch improves the runtime checking=20
without changing the -Wswitch-enum style, and I installed that on=20
master. The second attached patch, which I have not installed, is the=20
-Wswitch-enum change proper.

In this example, pacifying -Wswitch-enum helped find code where Emacs's=20
internal runtime checking was missing some invalid values. So this is an=20
example of why this style change is helpful in practice.
--------------m4aStRi4NiRUThbL5j75HoaB
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-Improve-bidi_get_time-runtime-checking.patch"
Content-Disposition: attachment;
 filename="0001-Improve-bidi_get_time-runtime-checking.patch"
Content-Transfer-Encoding: base64

RnJvbSA3ODJlYzcxMDUzZDg1MzU1MTE1MjJmMjdmMjhjMTE2ODJjYTBmNDBiIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBUdWUsIDQgRmViIDIwMjUgMTE6NDM6NTggLTA4MDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wcm92ZSBiaWRpX2dldF90aW1lIHJ1bnRpbWUgY2hlY2tpbmcKCiogc3JjL2Jp
ZGkuYyAoYmlkaV9nZXRfdHlwZSk6IEltcHJvdmUgcnVudGltZSBjaGVja2luZywgYnkgYWxz
bwphYm9ydGluZyBpZiB0aGUgYmlkaV90eXBlX3RhYmxlIGVudHJ5IGlzIG5vdCBhIGJpZGlf
dHlwZV90IHZhbHVlLgotLS0KIHNyYy9iaWRpLmMgfCAyMSArKysrKysrKysrKysrKy0tLS0t
LS0KIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL3NyYy9iaWRpLmMgYi9zcmMvYmlkaS5jCmluZGV4IGQ4NzU0ZTJkYjcz
Li5mZDBiZWJiODVlMCAxMDA2NDQKLS0tIGEvc3JjL2JpZGkuYworKysgYi9zcmMvYmlkaS5j
CkBAIC0yODIsMTIgKzI4Miw2IEBAIGJpZGlfZ2V0X3R5cGUgKGludCBjaCwgYmlkaV9kaXJf
dCBvdmVycmlkZSkKICAgICBlbWFjc19hYm9ydCAoKTsKIAogICBkZWZhdWx0X3R5cGUgPSAo
YmlkaV90eXBlX3QpIFhGSVhOVU0gKENIQVJfVEFCTEVfUkVGIChiaWRpX3R5cGVfdGFibGUs
IGNoKSk7Ci0gIC8qIEV2ZXJ5IHZhbGlkIGNoYXJhY3RlciBjb2RlLCBldmVuIHRob3NlIHRo
YXQgYXJlIHVuYXNzaWduZWQgYnkgdGhlCi0gICAgIFVDRCwgaGF2ZSBzb21lIGJpZGktY2xh
c3MgcHJvcGVydHksIGFjY29yZGluZyB0bwotICAgICBEZXJpdmVkQmlkaUNsYXNzLnR4dCBm
aWxlLiAgVGhlcmVmb3JlLCBpZiB3ZSBldmVyIGdldCBVTktOT1dOX0JUCi0gICAgICg9IHpl
cm8pIGNvZGUgZnJvbSBDSEFSX1RBQkxFX1JFRiwgdGhhdCdzIGEgYnVnLiAgKi8KLSAgaWYg
KGRlZmF1bHRfdHlwZSA9PSBVTktOT1dOX0JUKQotICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg
IHN3aXRjaCAoZGVmYXVsdF90eXBlKQogICAgIHsKQEAgLTMwMywxMyArMjk3LDI2IEBAIGJp
ZGlfZ2V0X3R5cGUgKGludCBjaCwgYmlkaV9kaXJfdCBvdmVycmlkZSkKICAgICAgIGNhc2Ug
RlNJOgogICAgICAgY2FzZSBQREk6CiAJcmV0dXJuIGRlZmF1bHRfdHlwZTsKLSAgICAgIGRl
ZmF1bHQ6CisKKyAgICAgIGNhc2UgU1RST05HX0w6IGNhc2UgU1RST05HX1I6CisgICAgICBj
YXNlIFdFQUtfRU46IGNhc2UgV0VBS19BTjoKKyAgICAgIGNhc2UgU1RST05HX0FMOgorICAg
ICAgY2FzZSBXRUFLX0VTOiBjYXNlIFdFQUtfRVQ6IGNhc2UgV0VBS19DUzogY2FzZSBXRUFL
X05TTToKKyAgICAgIGNhc2UgTkVVVFJBTF9TOiBjYXNlIE5FVVRSQUxfV1M6IGNhc2UgTkVV
VFJBTF9PTjoKIAlpZiAob3ZlcnJpZGUgPT0gTDJSKQogCSAgcmV0dXJuIFNUUk9OR19MOwog
CWVsc2UgaWYgKG92ZXJyaWRlID09IFIyTCkKIAkgIHJldHVybiBTVFJPTkdfUjsKIAllbHNl
CiAJICByZXR1cm4gZGVmYXVsdF90eXBlOworCisgICAgICBjYXNlIFVOS05PV05fQlQ6Cisg
ICAgICBkZWZhdWx0OgorCS8qIEV2ZXJ5IHZhbGlkIGNoYXJhY3RlciBjb2RlLCBldmVuIHRo
b3NlIHVuYXNzaWduZWQgYnkgdGhlIFVDRCwKKwkgICBoYXZlIHNvbWUgYmlkaS1jbGFzcyBw
cm9wZXJ0eSwgYWNjb3JkaW5nIHRvIERlcml2ZWRCaWRpQ2xhc3MudHh0LgorCSAgIFRoZXJl
Zm9yZSwgaWYgd2UgZXZlciBnZXQgVU5LTk9XTl9CVCAoPSB6ZXJvKSBvciBzb21lIHVua25v
d24KKwkgICBjb2RlIGZyb20gQ0hBUl9UQUJMRV9SRUYsIHRoYXQncyBhIGJ1Zy4gICovCisJ
ZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogfQogCi0tIAoyLjQ4LjEKCg==
--------------m4aStRi4NiRUThbL5j75HoaB
Content-Type: text/x-patch; charset=UTF-8;
 name="0002-Pacify-gcc-Wswitch-enum-in-bidi.c.patch"
Content-Disposition: attachment;
 filename="0002-Pacify-gcc-Wswitch-enum-in-bidi.c.patch"
Content-Transfer-Encoding: base64

RnJvbSBlNzVmZjA0ZTkyZDE2Mzk0ZGNkN2IyNGE4N2FkZjFlMmZjNWJhZTkxIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBUdWUsIDQgRmViIDIwMjUgMTM6MDI6MTggLTA4MDAKU3ViamVjdDogW1BBVENI
IDIvMl0gUGFjaWZ5IGdjYyAtV3N3aXRjaC1lbnVtIGluIGJpZGkuYwpNSU1FLVZlcnNpb246
IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1U
cmFuc2Zlci1FbmNvZGluZzogOGJpdAoKKiBzcmMvYmlkaS5jIChjaGFyYWN0ZXJzLCBiaWRp
X2ZpbmRfYnJhY2tldF9wYWlycykKKGJpZGlfcmVzb2x2ZV9icmFja2V0cywgYmlkaV9yZXNv
bHZlX25ldXRyYWwpOgpVc2Ug4oCYc3dpdGNoICgrRSnigJkgdG8gaW5kaWNhdGUgdGhhdCBp
dOKAmXMgaW50ZW5kZWQgdGhhdCB3ZSBub3QKZW51bWVyYXRlIGFsbCB0aGUgZW51bSB2YWx1
ZXMuClJlbW92ZSDigJhkZWZhdWx0OiBicmVhazvigJkgY2FzZXMgdGhhdCBhcmUgbm90IG5v
dyBuZWVkZWQgdG8gcGFjaWZ5IEdDQy4KLS0tCiBzcmMvYmlkaS5jIHwgMTcgKysrKystLS0t
LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaWRpLmMgYi9zcmMvYmlkaS5jCmluZGV4IGZkMGJl
YmI4NWUwLi5mYWU1ZjA0ZDAzZCAxMDA2NDQKLS0tIGEvc3JjL2JpZGkuYworKysgYi9zcmMv
YmlkaS5jCkBAIC0yMDE3LDcgKzIwMTcsNyBAQCBiaWRpX3Jlc29sdmVfZXhwbGljaXQgKHN0
cnVjdCBiaWRpX2l0ICpiaWRpX2l0KQogCSBlbWJlZGRpbmcgbGV2ZWwgb2YgdGhlIF9mb2xs
b3dpbmdfIGNoYXJhY3RlcnMsIHNvIHdlIG11c3QKIAkgZmlyc3QgbG9vayBhdCB0aGUgdHlw
ZSBvZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHRvIHN1cHBvcnQKIAkgdGhhdC4gICovCi0g
ICAgICBzd2l0Y2ggKHByZXZfdHlwZSkKKyAgICAgIHN3aXRjaCAoK3ByZXZfdHlwZSkKIAl7
CiAJY2FzZSBSTEk6CS8qIFg1YSAqLwogCSAgaWYgKGN1cnJlbnRfbGV2ZWwgPCBCSURJX01B
WERFUFRICkBAIC0yMDgxLDcgKzIwODEsNyBAQCBiaWRpX3Jlc29sdmVfZXhwbGljaXQgKHN0
cnVjdCBiaWRpX2l0ICpiaWRpX2l0KQogCiAgIGJpZGlfaXQtPnR5cGVfYWZ0ZXJfd24gPSBV
TktOT1dOX0JUOwogCi0gIHN3aXRjaCAodHlwZSkKKyAgc3dpdGNoICgrdHlwZSkKICAgICB7
CiAgICAgY2FzZSBSTEU6CS8qIFgyICovCiAgICAgY2FzZSBSTE86CS8qIFg0ICovCkBAIC0y
MjA0LDkgKzIyMDQsNiBAQCBiaWRpX3Jlc29sdmVfZXhwbGljaXQgKHN0cnVjdCBiaWRpX2l0
ICpiaWRpX2l0KQogICAgICAgYmlkaV9jaGVja190eXBlIChiaWRpX2l0LT50eXBlX2FmdGVy
X3duKTsKICAgICAgIHR5cGUgPSBXRUFLX0JOOyAvKiBYOS9SZXRhaW5pbmcgKi8KICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBOb3RoaW5nLiAgKi8KLSAgICAgIGJy
ZWFrOwogICAgIH0KIAogICBiaWRpX2l0LT50eXBlID0gdHlwZTsKQEAgLTI3MTQsNyArMjcx
MSw3IEBAIGJpZGlfZmluZF9icmFja2V0X3BhaXJzIChzdHJ1Y3QgYmlkaV9pdCAqYmlkaV9p
dCkKIAogCSAgICAgIC8qIFdoZW5ldmVyIHdlIHNlZSBhIHN0cm9uZyB0eXBlLCB1cGRhdGUg
dGhlIGZsYWdzIG9mCiAJCSBhbGwgdGhlIHNsb3RzIG9uIHRoZSBzdGFjay4gICovCi0JICAg
ICAgc3dpdGNoIChiaWRpX2l0LT50eXBlKQorCSAgICAgIHN3aXRjaCAoK2JpZGlfaXQtPnR5
cGUpCiAJCXsKIAkJY2FzZSBTVFJPTkdfTDoKIAkJICBmbGFnID0gKChlbWJlZGRpbmdfbGV2
ZWwgJiAxKSA9PSAwCkBAIC0yNzMwLDggKzI3MjcsNiBAQCBiaWRpX2ZpbmRfYnJhY2tldF9w
YWlycyAoc3RydWN0IGJpZGlfaXQgKmJpZGlfaXQpCiAJCQkgIDogRkxBR19PUFBPU0lURV9J
TlNJREUpOwogCQkgIHIybF9zZWVuID0gdHJ1ZTsKIAkJICBicmVhazsKLQkJZGVmYXVsdDoK
LQkJICBicmVhazsKIAkJfQogCSAgICAgIGlmIChmbGFnKQogCQl7CkBAIC0yOTg2LDcgKzI5
ODEsNyBAQCBiaWRpX3Jlc29sdmVfYnJhY2tldHMgKHN0cnVjdCBiaWRpX2l0ICpiaWRpX2l0
KQogCiAJICBpZiAocHJldl90eXBlX2Zvcl9uZXV0cmFsID09IFVOS05PV05fQlQpCiAJICAg
IHByZXZfdHlwZV9mb3JfbmV1dHJhbCA9IGVtYmVkZGluZ190eXBlOwotCSAgc3dpdGNoIChw
cmV2X3R5cGVfZm9yX25ldXRyYWwpCisJICBzd2l0Y2ggKCtwcmV2X3R5cGVfZm9yX25ldXRy
YWwpCiAJICAgIHsKIAkgICAgY2FzZSBTVFJPTkdfUjoKIAkgICAgY2FzZSBXRUFLX0VOOgpA
QCAtMzAwMiw5ICsyOTk3LDcgQEAgYmlkaV9yZXNvbHZlX2JyYWNrZXRzIChzdHJ1Y3QgYmlk
aV9pdCAqYmlkaV9pdCkKIAkJPyBTVFJPTkdfTAkJCQkgICAgIC8qIE4wYzEgKi8KIAkJOiBl
bWJlZGRpbmdfdHlwZTsJCQkgICAgIC8qIE4wYzIgKi8KIAkgICAgICBicmVhazsKLQkgICAg
ZGVmYXVsdDoKIAkgICAgICAvKiBOMGQ6IERvIG5vdCBzZXQgdGhlIHR5cGUgZm9yIHRoYXQg
YnJhY2tldCBwYWlyLiAgKi8KLQkgICAgICBicmVhazsKIAkgICAgfQogCX0KICAgICAgIGVh
c3NlcnQgKHR5cGUgPT0gU1RST05HX0wgfHwgdHlwZSA9PSBTVFJPTkdfUiB8fCB0eXBlID09
IE5FVVRSQUxfT04pOwpAQCAtMzE4Miw3ICszMTc1LDcgQEAgYmlkaV9yZXNvbHZlX25ldXRy
YWwgKHN0cnVjdCBiaWRpX2l0ICpiaWRpX2l0KQogCSAgICB9CiAJICBlbHNlCiAJICAgIHsK
LQkgICAgICBzd2l0Y2ggKHR5cGUpCisJICAgICAgc3dpdGNoICgrdHlwZSkKIAkJewogCQlj
YXNlIFNUUk9OR19MOgogCQljYXNlIFNUUk9OR19SOgotLSAKMi40OC4xCgo=

--------------m4aStRi4NiRUThbL5j75HoaB--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 20:45:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 15:45:47 2025
Received: from localhost ([127.0.0.1]:46881 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfPnm-00069O-Oh
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 15:45:46 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:8525)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tfPnl-000699-Hp
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 15:45:45 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id CE5714439E8;
 Tue,  4 Feb 2025 15:45:38 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738701937;
 bh=mVYnroZ1LUwSKFxPfg1au50O97dZGg9j7cHC11+vJuI=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=IzUZEUucx+Wa8fUdxx5PKlReCWQUOosO+3pmSeOjc7ZAhaBnWwMfej89ssODo7OG1
 RNK0XmRWRWs5e/YUDloZjC43VdbBe9R9+rlwKbyuQUAiqnYjCcPZlEhyFHdXNs8sf0
 3becXl3YJ4MmCdj01ayL/pHrm1wuSk7VknSR3a5OLW/XCRneEoUfm8vRA0139FSA4J
 7Y3qdF81wnSOryldfqs1DvXHMXTcCAYXfxH/ynVgqDlnZt5xRK+QTFDlX/UgLF4dKf
 LdBpKHtZCN3/XW1SaY5JJCV7RKxLB0v2ga/8wueGajmQEudWDs+sd2QeP9wtSjZldO
 Wz9fwRfpZFLWw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id C99F9443A4F;
 Tue,  4 Feb 2025 15:45:37 -0500 (EST)
Received: from pastel (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 69B831202E4;
 Tue,  4 Feb 2025 15:45:37 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <86cyfxa4e4.fsf@HIDDEN> (Eli Zaretskii's message of "Tue, 04 Feb
 2025 21:36:35 +0200")
Message-ID: <jwvwme5l9uf.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN> <86cyfxa4e4.fsf@HIDDEN>
Date: Tue, 04 Feb 2025 15:45:36 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.009 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> So you want a device that would abort for unexpected values?

I want the compiler to consider this case as an error, rather than
a defined "this is an empty statement".

> Then why use switch at all?

Because you want to perform various operations depending on the value of
the enum (admittedly, in my example I performed the same op on all
values, but that's because I typed it by hand and got lazy).


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 19:36:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 14:36:51 2025
Received: from localhost ([127.0.0.1]:46742 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfOj5-0007hH-0t
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 14:36:51 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:44870)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tfOj1-0007gu-2H
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 14:36:48 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tfOiu-0005p1-4L; Tue, 04 Feb 2025 14:36:40 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=KMs00NpOOhjw/YtldUCs6j0jTNIAqz9T9DqyxG/aKJs=; b=VeIFE/HD1bSn
 5PtAy6pK2lUXlt2aqC6O4fYfsvltXBbBJ9z06cDKtMwSX9DIrCryMr4yRcbZ30iNRTXVNBglzGElB
 se2DQxnLKawAokQsNV8ASB/DVov4j7nfswFcNqjEuKdTVZGVS/D/zbb4jYp3QKRjQdYTHFsT1hee+
 J/c23r4+zQ5yD7npf4q4KG3y+q6mwh9Q2iyKC0ZCuu7qXhxTTrNv65cJG9zK4dz68ORn/aQo3vDmu
 4NeyuD2K/c0uUssWSr5CvETaVrbEJUdDyyn3ph465MsWKzFDPztPZCqPhpWMtoVCtTzmJ8zI/cX90
 Ej/CLsTaPpMaUcAxeaaxoA==;
Date: Tue, 04 Feb 2025 21:36:35 +0200
Message-Id: <86cyfxa4e4.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN> (message from Stefan
 Monnier on Tue, 04 Feb 2025 11:55:12 -0500)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stefan Monnier <monnier@HIDDEN>
> Cc: pipcet@HIDDEN,  eggert@HIDDEN,  75964 <at> debbugs.gnu.org,
>   stefankangas@HIDDEN,  acorallo@HIDDEN
> Date: Tue, 04 Feb 2025 11:55:12 -0500
> 
> >> Yes, this part of C sucks and I had forgotten about it.
> > What sucks and why?
> 
> That
> 
>     switch ((enum Lisp_Type) 53) {
>     case Lisp_Symbol:
>     case Lisp_Type_Unused0:
>     case Lisp_Int0:
>     case Lisp_Int1:
>     case Lisp_String:
>     case Lisp_Vectorlike:
>     case Lisp_Cons:
>     case Lisp_Float:
>       return 1;
>     }
>     return 2;
> 
> should return 2, because I'd prefer that it aborts and/or that the
> programmer have a way to say explicitly what should happen.  `default:`
> works for that in the case where you have listed *all* the enum's
> values, but then you get stiffed in the case where you add an enum value
> because the compiler won't tell you that you forgot to update this
> `switch` accordingly.

So you want a device that would abort for unexpected values?  Then why
use switch at all?  You want eassert or even a simple if:

  if ((enum foo) foo > max_enum_value)
    emacs_abort ();

Or what am I missing?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 18:29:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 13:29:04 2025
Received: from localhost ([127.0.0.1]:46610 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfNfU-0004LH-1a
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 13:29:04 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:54609)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tfNfR-0004Ki-HP
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 13:29:02 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738693734; x=1738952934;
 bh=cjkUvlmPwVvijmYXsf5Iklwa+vRarjFqThBE96XvdHs=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=n/uCTrD8HlGGdLdwh5iQPNwQrotQg7VgxealaXE54iFH9Jp719sbV7hW0pjLS/Pf4
 /Us4RQIWKpnURcPAbqecfbC9/3uvsWSi5zV87Ci4UvDeUlK2mPQBdZDi+8La5fb1N9
 UgsjoXdW4W7yho/7nUl9CWAM+GGdDHypJXmrkf8J+rsM7KTmfOxcFqjkvFSHBr1wM4
 +VKQvjmAXRYgMXRGPtmgUBnXrhr8cYkylLbql3PaE4vZizeDHb+/b3XMj5Ot27Evj5
 vQ+rqos/EmvDO0RZ7i+sFrEDrVNUaLN0TAG2Oi7JHuvgFwQGVCvqDEZoxyFRQ9F+3+
 gGMAvuJwLMvwA==
Date: Tue, 04 Feb 2025 18:28:49 +0000
To: Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87ed0dva2o.fsf@HIDDEN>
In-Reply-To: <jwved0dmva0.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN> <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN> <87pljxvcru.fsf@HIDDEN>
 <jwved0dmva0.fsf-monnier+emacs@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: d7e3e82899d073e7720a17940d3569b7bb23c8c5
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Monnier" <monnier@HIDDEN> writes:

>>> should return 2, because I'd prefer that it aborts and/or that the
>>> programmer have a way to say explicitly what should happen.  `default:`
>>> works for that in the case where you have listed *all* the enum's
>>> values, but then you get stiffed in the case where you add an enum valu=
e
>>> because the compiler won't tell you that you forgot to update this
>>> `switch` accordingly.
>>
>> But... that's precisely what -Wswitch-enum does!  It warns about a
>> forgotten case even though there is also a default label!
>
> But IIUC that breaks the other case, where you do want to use `default:`
> to mean "any other (valid) enum value".

That's what I meant by "not easy to turn on and off on a per-switch
basis", yes (unless you really want to learn about _Pragma).  Slightly
easier to do so on a per-enum basis, though (it has a type, types have
attributes, there's already one for bitfield enums), but that means you
need to control the enums rather than some other header file doing so.

And while statement/label atttributes are possible, they turn into
horrible macro constructions.

So while I still think -Wswitch-enum would be the best solution, it's by
a slight margin and Eli's describing the effect on bidi.c as so drastic
that we'd have to disable it for that file, and per-file CFLAGS are a
nightmare, so all we can do is wait for GCC to learn new tricks (which
I'm not smart enough to think of).

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 18:17:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 13:17:46 2025
Received: from localhost ([127.0.0.1]:46582 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfNUY-0003q1-Hs
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 13:17:46 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:9667)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tfNUW-0003pn-W7
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 13:17:45 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 6A1434439E8;
 Tue,  4 Feb 2025 13:17:39 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738693058;
 bh=6mKMnkjTma7jeCJhrEs7pcawwssrIZ1x2cbxNsIrK/s=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=CalFXEQwgEr8D/WbS5T3ZYLnUuSgdevnc4uATnHfJw9p/k8g2Z4kJc1V3WBF82IHx
 PVZKytJGK47OqUj/JAvb9ppd5gcYhvEtoJeaLVAOzdIp6BKZUfnlyM/jPE2xvPmX1o
 nkIRCZeNHGjbnu2iCFwiC7s6S8JqnKHJjZOUkYH9zD6y7hXKdxpzPmmJ2tcgBJ2JGy
 dvAI+8CQWBeiJUGfnB6YHwz4Ssw2nEBRTOfrDv8n/yfza5nDCDXzw7HoUKR78LGTEL
 F2bGFouvSb16DGdIApVGNNfSKkh7mfr0wT74Zj3ck83G1NHYXzT03rxNyTe6tEzXDb
 RI0iV8INn2dTQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 7D9AE4439A8;
 Tue,  4 Feb 2025 13:17:38 -0500 (EST)
Received: from pastel (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2D2591203DF;
 Tue,  4 Feb 2025 13:17:38 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <87pljxvcru.fsf@HIDDEN> (Pip Cet's message of "Tue, 04
 Feb 2025 17:30:34 +0000")
Message-ID: <jwved0dmva0.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN>
 <87pljxvcru.fsf@HIDDEN>
Date: Tue, 04 Feb 2025 13:17:36 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.009 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

>> should return 2, because I'd prefer that it aborts and/or that the
>> programmer have a way to say explicitly what should happen.  `default:`
>> works for that in the case where you have listed *all* the enum's
>> values, but then you get stiffed in the case where you add an enum value
>> because the compiler won't tell you that you forgot to update this
>> `switch` accordingly.
>
> But... that's precisely what -Wswitch-enum does!  It warns about a
> forgotten case even though there is also a default label!

But IIUC that breaks the other case, where you do want to use `default:`
to mean "any other (valid) enum value".


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 17:30:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 12:30:56 2025
Received: from localhost ([127.0.0.1]:46524 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfMlD-0001hL-M4
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 12:30:56 -0500
Received: from mail-10630.protonmail.ch ([79.135.106.30]:48275)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tfMlB-0001h4-IJ
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 12:30:54 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738690246; x=1738949446;
 bh=pz1ro6RGMtdksw0bh/6h8w1M3V2MxRs79zipPfTN9kM=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=Tv2xgi6l+VcHib6yvg40byvX6i9IaSHixXv7AgciPUOkkbantgZXW2ldY8jQnSn8V
 IVzjVCVJV0C9uMtn5q7xxyEAxNnhYShbF/wY0eiRia+flse5+kNPVhkslWlnBsuA/R
 W3srk4TYwtOhLe5kZ0T0L9IrjyMrEajzGOrDsQ4TO7Kw4pJqmIqL6Hbe+4+sV3FMOQ
 JiLZ3TPxgJMMuxcPSnp28m67m9j4TLvgLKz3OPswSVNCKq00v9E85H86Ql1zVGXsf1
 TiB+R18XslGqJQqEHu1Y4w7Q5RyjI30K85SleITwjj0IZxD5/ua7wGV1uPAKalldi7
 DCh/V2kTKYfyA==
Date: Tue, 04 Feb 2025 17:30:34 +0000
To: Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87pljxvcru.fsf@HIDDEN>
In-Reply-To: <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN> <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
 <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 8a7f82c2a74c59ad5054cd3a38ca88390594e242
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Monnier" <monnier@HIDDEN> writes:

>>> Yes, this part of C sucks and I had forgotten about it.
>> What sucks and why?
>
> That
>
>     switch ((enum Lisp_Type) 53) {
>     case Lisp_Symbol:
>     case Lisp_Type_Unused0:
>     case Lisp_Int0:
>     case Lisp_Int1:
>     case Lisp_String:
>     case Lisp_Vectorlike:
>     case Lisp_Cons:
>     case Lisp_Float:
>       return 1;
>     }
>     return 2;
>
> should return 2, because I'd prefer that it aborts and/or that the
> programmer have a way to say explicitly what should happen.  `default:`
> works for that in the case where you have listed *all* the enum's
> values, but then you get stiffed in the case where you add an enum value
> because the compiler won't tell you that you forgot to update this
> `switch` accordingly.

But... that's precisely what -Wswitch-enum does!  It warns about a
fargotten case even though there is also a default label!

So, yes, the compiler will warn you about that forgotten enumeration,
but it's not easy to turn this on and off on a per-switch basis.

(Also GCC misses a few cases where the enumeration type isn't the type
of the switch expression but is the type of the labels.  That one's
easiest to fix).

Paul's proposal to use switch (+x) when you mean "don't warn me about
new cases" and switch (x) when you mean "do warn me about new cases"
seems easy enough to add as a special case, but it is new and
non-obvious syntax.

And while it would be nice to

#define exhaustive_switch(x)  switch (x) { default: eassume (false); ELIDE_=
TOKEN("{")

I don't know how to write ELIDE_TOKEN in CPP, because someone decided
token streams form a free monoid rather than a free group...

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 16:55:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 11:55:25 2025
Received: from localhost ([127.0.0.1]:46459 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfMCr-0005Ou-18
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 11:55:25 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:11920)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tfMCo-0005OX-1h
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 11:55:22 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id C232B4438DE;
 Tue,  4 Feb 2025 11:55:14 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738688113;
 bh=p24qqbZ2d7bJglHfTJoVRtHbB7IU56pBkLd0SLVezSA=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=JMYbpy+ll9BoG5Q8hyCMPa819kSt8lQKhmBvrb5ucylpTXih0s0C7lE1/qvf0B4kg
 4lod0W8ZaL8ZekpSr30LpPoa1vKBtoKOmjEna5k6MvWsoVLIyswTplrYmiCU29e/hF
 6i5W3xIOIDMQI8fELp+yqlX6DPzKv5wZbcqOogpvyALEa1K1KsQvbgOoYoIFIxrEpS
 5nYLnlvSBojDRhCeKK4ixu1AYDKdJlruDwzwIpv+AAdMhwesThOY/yPn7x1i72UfvY
 88xdPqhgkg2C60QPEUfC2C0WCQ3GCge3krY4frWLFX1XMw5xS2gt5mHgGg3pWe3gEe
 jez7KDspocp3w==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 7C7DE4438D1;
 Tue,  4 Feb 2025 11:55:13 -0500 (EST)
Received: from pastel (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 1F3FF12041A;
 Tue,  4 Feb 2025 11:55:13 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <86o6zhahb5.fsf@HIDDEN> (Eli Zaretskii's message of "Tue, 04 Feb
 2025 16:57:34 +0200")
Message-ID: <jwvpljxn1u0.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
 <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> <86o6zhahb5.fsf@HIDDEN>
Date: Tue, 04 Feb 2025 11:55:12 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.009 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

>> Yes, this part of C sucks and I had forgotten about it.
> What sucks and why?

That

    switch ((enum Lisp_Type) 53) {
    case Lisp_Symbol:
    case Lisp_Type_Unused0:
    case Lisp_Int0:
    case Lisp_Int1:
    case Lisp_String:
    case Lisp_Vectorlike:
    case Lisp_Cons:
    case Lisp_Float:
      return 1;
    }
    return 2;

should return 2, because I'd prefer that it aborts and/or that the
programmer have a way to say explicitly what should happen.  `default:`
works for that in the case where you have listed *all* the enum's
values, but then you get stiffed in the case where you add an enum value
because the compiler won't tell you that you forgot to update this
`switch` accordingly.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 14:57:57 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 09:57:57 2025
Received: from localhost ([127.0.0.1]:46162 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfKN9-00024T-Ov
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 09:57:57 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:38064)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tfKN6-00024J-54
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 09:57:52 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tfKN0-0002jP-SQ; Tue, 04 Feb 2025 09:57:46 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=Q/XbGa2f7wNDP92v+sKL2o4B6vpPBR1nZ8LCJ/X9wTU=; b=g18wP3+B0S7r
 m1yCsfc1jqK4GPQVM/C3oMkz+DlGoUhGKNXUJ22LTQfhQ52heKa9Lxf5FfprGdh9FiilHhIInID2G
 GmGD79UQcpNOT3EL+/KR5Y2lCCUTrVkFjCIbVNtBvvsqs+74YaZ3k/OpsphHYZLDgEl2zWUdMNedF
 RUNaNhElLevXIOftCNG0hx4sXt9tP/N8W4dh1D1M4Mc3yhTy0AOPLeJYT3c2mJ3BnIG0N4VIFUavA
 hvl2sfVRVRQEXlLWIN2zcbb3yPM4M7mh/kOSCa4wkCc6mpWgYax/pchX8aPvnrt1cngHjYDG9mux6
 CsChzgZN5hRnMGcX4HJN7g==;
Date: Tue, 04 Feb 2025 16:57:34 +0200
Message-Id: <86o6zhahb5.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN> (message from Stefan
 Monnier on Tue, 04 Feb 2025 08:58:21 -0500)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN> <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stefan Monnier <monnier@HIDDEN>
> Cc: Eli Zaretskii <eliz@HIDDEN>,  eggert@HIDDEN,
>   75964 <at> debbugs.gnu.org,  stefankangas@HIDDEN,  Andrea Corallo
>  <acorallo@HIDDEN>
> Date: Tue, 04 Feb 2025 08:58:21 -0500
> 
> > Switching over an enum without a default: label will generate
> > fall-through code, for those cases in which the enum variable has a
> > value that's not in the enumeration.
> 
> Ah, thanks, now I understand the problem.
> 
> Yes, this part of C sucks and I had forgotten about it.

What sucks and why?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 14:57:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 09:57:19 2025
Received: from localhost ([127.0.0.1]:46158 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfKMZ-000246-Aa
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 09:57:19 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:56914)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tfKMW-00023y-JZ
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 09:57:17 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tfKMP-0002fk-8n; Tue, 04 Feb 2025 09:57:09 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=8QnWhlJ/RfI1UTtdMSgYWVd9qulMbgKCcQp51cRatwM=; b=ORGLQHLgb8E0
 i0RPDwXGbJQDb4N/cb7jkwy5t7kUD86G97k+DRdP1UKysm+UwNJni3a1zef5lEg0BgMqaCj8F3EaC
 WqqF/dtHMZ0CG7vks8X4cMiH0gTwGpDmoy7S1UhTnvnzUS4vtQ56nuC+pWHidLXfhjNeeN0Vd/HeZ
 RdLsQ7aLm40HXXDvaSgv4a5Evdba9XuNNRkCt8MUkitn4aN8i5DmUwqmaNyKV3LDAJ8eiW9WuzPlN
 1RPlrv9UuYSTscSsH0y3kCGoqR4iZ1DNsi362muSI6hBs94eY5ASWRmsEvu8/IU4+BHTSWZ/qAt8/
 f35U7Rmu74014LnKA77/kQ==;
Date: Tue, 04 Feb 2025 16:57:04 +0200
Message-Id: <86pljxahbz.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <8734gtx1fk.fsf@HIDDEN> (message from Pip Cet on Tue, 04
 Feb 2025 13:52:33 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN> <87frkuybl0.fsf@HIDDEN>
 <868qqlc2yn.fsf@HIDDEN> <8734gtx1fk.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 monnier@HIDDEN, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Tue, 04 Feb 2025 13:52:33 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: monnier@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, acorallo@HIDDEN
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> >> Switching over an enum without a default: label will generate
> >> fall-through code, for those cases in which the enum variable has a
> >> value that's not in the enumeration.
> >
> > What is "fall-through code" in this context,
> 
> A switch statement which doesn't execute any branches, so it becomes a
> nop.
> 
> so
> 
> enum ABC abc;
> int x; /* uninitialized */
> switch (abc)
>   {
>   case A:
>     x = 1;
>     break;
>   case B:
>     x = 2;
>     break;
>   case C:
>     x = 3;
>     break;
>  }
> printf ("x = %d\n", x);
> 
> will (and should!) generate a warning that x may be used uninitialized,
> because it's possible abc == C + 1, and then none of the three
> statements initializing x is executed.

Right, but the same will (or should!) happen if I just add a default
case:

enum ABC abc;
int x; /* uninitialized */
switch (abc)
  {
  case A:
    x = 1;
    break;
  case B:
    x = 2;
    break;
  case C:
    x = 3;
    break;
  default:
    break;
 }
printf ("x = %d\n", x);

Right?  So abc = C + 1 is still possible, and thus just adding the
default case doesn't miraculously fix my code, where I forgot to
initialize x.  Or does it?

> 1. it's slightly less efficient.  Not really an issue, but others
> disagree about how important performance is here.
> 2. the compiler will generate warnings because the code cannot be assumed
> to have initialized x at all.  This is annoying, since we wanted better
> warnings, and we just got more noise.
> 3. The analyzer will waste its scarce resources analyzing code paths
> that are of no interest to us, making its output less useful and more
> noisy.
> 
> Just to be clear: We should not blindly go adding default: labels to
> every switch statement because of (1) or (3).  If (2) happens, adding a
> default: label may be one option, but this shouldn't be automatic.

I think adding the default here is actually a bad thing: it shuts up
the warning without fixing the code.

And anyway, the above is only a problem if the switch fails to
initialize something.  In many cases, some values of an enum really
don't need any handling, in which case there's no need for default.

> Let's leave our switch statements as they are now, and remember to be
> careful that we won't get warnings about missed enumeration cases?

Sure.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 13:58:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 08:58:31 2025
Received: from localhost ([127.0.0.1]:43228 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfJRf-0003e6-EB
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 08:58:31 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:11203)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tfJRd-0003ds-Qh
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 08:58:30 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5D08D100724;
 Tue,  4 Feb 2025 08:58:24 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738677503;
 bh=Adrogr8TUgYcSbZ0Yt+zR2/T36lPrCVhKbAw485cSzQ=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=AzjePG/7AGanDrT8HBZWLFu7YFKSUM3K80kDqpqoBDIiJdQXyMjo5D5FNQZg9po8a
 w2aqGtVqS0yxIv1t3AfSRNlkullEvqppcSlMMLAMrK+TTE6Rh2rT5ms4OlXYXfQFXV
 uhTb3urP7dnQtmX4mhTxNl5VMnQFqh701Ymgg3sY9D3LD7ZIOdxJJYz6dTyOMuZCvQ
 Fa9nKEvBRiHkCKm8YIGGvzb5GllcQFHVD6DbjUcEHTZ+iRDJy6B551QcRLDlkyuTeP
 E03mFllPKI1i3luV6NSTYnEhF+LBSsgzGDCjH4fHJHLy0cCCG25moXxIB8LEfQj6MO
 7fwYIkOPLAdOQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id BF959100128;
 Tue,  4 Feb 2025 08:58:23 -0500 (EST)
Received: from pastel (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 7FBDE120559;
 Tue,  4 Feb 2025 08:58:23 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <87frkuybl0.fsf@HIDDEN> (Pip Cet's message of "Mon, 03
 Feb 2025 21:15:38 +0000")
Message-ID: <jwv5xlpolyc.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
 <87frkuybl0.fsf@HIDDEN>
Date: Tue, 04 Feb 2025 08:58:21 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.070 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Switching over an enum without a default: label will generate
> fall-through code, for those cases in which the enum variable has a
> value that's not in the enumeration.

Ah, thanks, now I understand the problem.

Yes, this part of C sucks and I had forgotten about it.
I wish it offered a special label (call it `invalid:`, `notenum:`,
`bogus:`, `outofrange:`, ...) for "what to do when the value is not
a member of the enum".


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 13:52:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 08:52:49 2025
Received: from localhost ([127.0.0.1]:43220 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfJM9-0003Ok-Dq
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 08:52:49 -0500
Received: from mail-4316.protonmail.ch ([185.70.43.16]:64611)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tfJM6-0003OR-7o
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 08:52:47 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738677159; x=1738936359;
 bh=awxPkwT/hgEAIl/ffSv157hi6Xf1eJNaMUAxLSv2XVo=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=SK8GbU6CEd8+Yyv0CkH+reKLF19l/ShJhwrWS+WQOcLyMW9/wefyKcIAKLgJTmU6P
 Q8WBNafem3MaTLpUJZFk8/AuACmcQkM+4fMfgPIHN7hsKffDkHUyWPIKYQPF/rTLRZ
 FgqMUR+ylbRZyddKfZxfKo1pPLwr+M3PPrcQTzt8GHOlv1Ece4tOOX0GtPMk8lwt/f
 mrbxWVqiwkNYxNjA6POdYOOuimuPNpd6nmD0Ab8Sm1scXr65H2Mq5NcbrHsgOFhVs4
 jfmGkNlii5xr5zJPkSJMm5c3Fu4+Bf12xtkIq3onPSFMCwLiu4mMVPW07XIo6+gFlY
 UjLfE+1JJ4r9g==
Date: Tue, 04 Feb 2025 13:52:33 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <8734gtx1fk.fsf@HIDDEN>
In-Reply-To: <868qqlc2yn.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN> <87frkuybl0.fsf@HIDDEN>
 <868qqlc2yn.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: d62750729999db3f8687088ab601a6fbe1796a0d
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 monnier@HIDDEN, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Mon, 03 Feb 2025 21:15:38 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: Eli Zaretskii <eliz@HIDDEN>, eggert@HIDDEN, 75964@HIDDEN=
org, stefankangas@HIDDEN, Andrea Corallo <acorallo@HIDDEN>
>>
>> "Stefan Monnier" <monnier@HIDDEN> writes:
>>
>> >> enum ABC abc;
>> >> switch (abc) {
>> >> case A:
>> >>   /* handle case A */
>> >>   break;
>> >> default:
>> >>   /* we know this must be case C */
>> >>   /* handle case C */
>> >>   break;
>> >> }
>> >
>> > I think this just suggests we should refrain from using `default:`
>>
>> Switching over an enum without a default: label will generate
>> fall-through code, for those cases in which the enum variable has a
>> value that's not in the enumeration.
>
> What is "fall-through code" in this context,

A switch statement which doesn't execute any branches, so it becomes a
nop.

so

enum ABC abc;
int x; /* uninitialized */
switch (abc)
  {
  case A:
    x =3D 1;
    break;
  case B:
    x =3D 2;
    break;
  case C:
    x =3D 3;
    break;
 }
printf ("x =3D %d\n", x);

will (and should!) generate a warning that x may be used uninitialized,
because it's possible abc =3D=3D C + 1, and then none of the three
statements initializing x is executed.

> and why is it bad that the compiler will generate such code?

1. it's slightly less efficient.  Not really an issue, but others
disagree about how important performance is here.
2. the compiler will generate warnings because the code cannot be assumed
to have initialized x at all.  This is annoying, since we wanted better
warnings, and we just got more noise.
3. The analyzer will waste its scarce resources analyzing code paths
that are of no interest to us, making its output less useful and more
noisy.

Just to be clear: We should not blindly go adding default: labels to
every switch statement because of (1) or (3).  If (2) happens, adding a
default: label may be one option, but this shouldn't be automatic.

However, *removing* a default: label is something that should not be
done either.

Let's leave our switch statements as they are now, and remember to be
careful that we won't get warnings about missed enumeration cases?

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 4 Feb 2025 12:24:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Feb 04 07:24:45 2025
Received: from localhost ([127.0.0.1]:43010 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tfHyv-0004Va-6j
	for submit <at> debbugs.gnu.org; Tue, 04 Feb 2025 07:24:45 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:41714)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tfHyt-0004VL-0B
 for 75964 <at> debbugs.gnu.org; Tue, 04 Feb 2025 07:24:43 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tfHym-0002EV-SH; Tue, 04 Feb 2025 07:24:36 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=e03VwiFVYAxDQ/oDefM/vsjEZba1jLvR7QJqAYVDNwg=; b=bX6BXNZzGrcL
 Z5DB067aYT0P4XVUmxkwYOPW3+51uskyKNbXfHAJNBcQgYMniw7TMiS/has2wYTIuT3I7K/kXx0W2
 GCaGHLz8NWkvFozaL6B6WNfXoiEPrCzBsChm7qwXSJnYY72wHXV9p6o3CXq9XQ9uxm3lBz/KGuLfE
 sqwlkwNydhA71oG32dM5MoGUXXmea5FJCkv0A+HUarfwNuXJKPBR29R7i4pxGIwYXMtHCLrEHs61j
 ADk2kiUv2FxnCScf0aezDQss4I8txUpeO07VKkGaOr7ibEJuPaZrhko7fUksMpmEXKQtanUaLmbrq
 It3XatFrKRUHFISXXunvuw==;
Date: Tue, 04 Feb 2025 14:24:32 +0200
Message-Id: <868qqlc2yn.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87frkuybl0.fsf@HIDDEN> (message from Pip Cet on Mon, 03
 Feb 2025 21:15:38 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN> <87frkuybl0.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 monnier@HIDDEN, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Mon, 03 Feb 2025 21:15:38 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: Eli Zaretskii <eliz@HIDDEN>, eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, Andrea Corallo <acorallo@HIDDEN>
> 
> "Stefan Monnier" <monnier@HIDDEN> writes:
> 
> >> enum ABC abc;
> >> switch (abc) {
> >> case A:
> >>   /* handle case A */
> >>   break;
> >> default:
> >>   /* we know this must be case C */
> >>   /* handle case C */
> >>   break;
> >> }
> >
> > I think this just suggests we should refrain from using `default:`
> 
> Switching over an enum without a default: label will generate
> fall-through code, for those cases in which the enum variable has a
> value that's not in the enumeration.

What is "fall-through code" in this context, and why is it bad that
the compiler will generate such code?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 21:15:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 16:15:52 2025
Received: from localhost ([127.0.0.1]:41548 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tf3nM-0000bK-90
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 16:15:52 -0500
Received: from mail-4316.protonmail.ch ([185.70.43.16]:19881)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tf3nJ-0000b1-Aj
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 16:15:50 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738617343; x=1738876543;
 bh=4XTM/s4+LPSOjA7Fs81kMxP8uMmPHHWFv8lPPOkzJP0=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=WP1u/aAkAA5dI6D80FHeZ8czlwKPJR8IS9wbTjJKz5gxUMXzMAfBcvVj6n0cP3c70
 g462OBVbqFczNXESlIIResQhNhQR3AT0HPfXMG1gPkkZyXlkJtRhQs0RVZ9BA7UMSY
 xZExE+gaMTT2AjFTX34FMUve9GxSoU4/yr8ZDjb4a7dwx30mIOXR2l/PycefNnbTSk
 mrMGD+8VC+DTpoG2oqKCjurgqJ6NGFYptrdN34XX+9M9XkHMA46maqGottgCOesgyx
 x0Qoj8leX3tK3UMSS55Xg3acUTJUfGJrNcIL/5Hok4+9XEthat3jv/NmdGjHmWZzBB
 AlXy12nQO8Xtg==
Date: Mon, 03 Feb 2025 21:15:38 +0000
To: Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87frkuybl0.fsf@HIDDEN>
In-Reply-To: <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN> <87cyfz2rk2.fsf@HIDDEN>
 <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 655072473241a5f9c50a1954fe2f79a43ee5df36
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Monnier" <monnier@HIDDEN> writes:

>> enum ABC abc;
>> switch (abc) {
>> case A:
>>   /* handle case A */
>>   break;
>> default:
>>   /* we know this must be case C */
>>   /* handle case C */
>>   break;
>> }
>
> I think this just suggests we should refrain from using `default:`

Switching over an enum without a default: label will generate
fall-through code, for those cases in which the enum variable has a
value that's not in the enumeration.

Yes, C allows this, and requires it, and Emacs relies on this "feature"
(in at least two places, which I won't mention to protect the guilty).
That means extra code will be generated, and GCC will warn about
uninitialized data or whatever other state of things falling through the
switch statement will leave us with.

This is all very silly and hopefully C3X will introduce actual enums,
but until then, we need the default branch.

> I don't think there can be a silver bullet.

Maybe not.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 20:47:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 15:47:41 2025
Received: from localhost ([127.0.0.1]:41490 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tf3M5-0007d8-CJ
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 15:47:41 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:8536)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1tf3M2-0007cr-PM
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 15:47:39 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 0FBED1009BE;
 Mon,  3 Feb 2025 15:47:32 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738615651;
 bh=Lq6aEJZln6LDLpvHOyNYqbsAkSvyeenl8Q4XibjLTgU=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=Y5VcEvfmcjc1oFwTSmlrH2IfPIxtRq+AMGYCUNUp9Uj8PSW9xcevxJgLMUw7GVkB7
 gXt5S73ZLBSMssRXDyhWJy9eL1Bf9ujQJgYv87QJWPhkfUqQu6yZHA7KVzXs29Uddb
 U4E+Ld1IfoXqniBQr8otOGvClM4Wflsdh4NRyRjQyw6L0V75DYi6eOMM7EIE+7W7Uj
 MXTrkM2eVxfKWxm56vCdiy+128DMC6kuDObTVWjQMWlRzWYHEMXwOjBB39D/05d1J/
 bOTZzhMYEMKGhgiRZ1RSUjfe+37ufMRk8pPhIcUrCaTrcRbydwejxKNakHr/wft3DZ
 UfKJ+AAc3CCnA==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5FBF8100180;
 Mon,  3 Feb 2025 15:47:31 -0500 (EST)
Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 4C915120473;
 Mon,  3 Feb 2025 15:47:31 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <87cyfz2rk2.fsf@HIDDEN> (Pip Cet's message of "Mon, 03
 Feb 2025 11:31:42 +0000")
Message-ID: <jwvzfj2iwrr.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
 <87cyfz2rk2.fsf@HIDDEN>
Date: Mon, 03 Feb 2025 15:47:30 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL 0.213 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> enum ABC abc;
> switch (abc) {
> case A:
>   /* handle case A */
>   break;
> default:
>   /* we know this must be case C */
>   /* handle case C */
>   break;
> }

I think this just suggests we should refrain from using `default:`
except in those cases where we really think it's the better tradeoff.
I don't think there can be a silver bullet.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 13:14:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 08:14:03 2025
Received: from localhost ([127.0.0.1]:38296 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tewH4-0003XY-D4
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 08:14:03 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:50870)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tewH1-0003Wu-97
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 08:14:00 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tewGv-0000wI-MZ; Mon, 03 Feb 2025 08:13:53 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=xd1oUOKNKZ6nBkpIeYP+JUxg/mVbeneCkW92VfhRH0k=; b=OI4XHwI5oGhB5vmo77k3
 zGBxATu+LYtlE5O5tki3g5Nb49vBfjhYBGKkArsp7kUPDlfYP8pvA87ghWcZdHB/qnlC41NECQyBx
 QjQtTFsY8oEyumHGIOdSYAHhcd71IHIL88k1SyzTKrsPeapFutihUcMNGDyp0ok19PxwpE5cr7GHL
 ZLjIiuDNzi6gBYmBJi6GZO3J0h5YoQG0b7fWoPvgenJlwWFt9nfVylyE8NE+xwUrhjALPd7vfqVd+
 gXd7E/6ubAO/WskU9oL8fOkiSJKOAGL9Jt/sXzO4uRF8PgnaK/VEBsVWRUZD+SVa3MOhvSPdGEF1w
 n5Z2MzWq9oMVrw==;
Date: Mon, 03 Feb 2025 15:13:49 +0200
Message-Id: <86v7trb27m.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <877c672p4d.fsf@HIDDEN> (message from Pip Cet on Mon, 03
 Feb 2025 12:24:18 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> <86h65ccfk7.fsf@HIDDEN>
 <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN> <86a5b3cjsx.fsf@HIDDEN>
 <877c672p4d.fsf@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Mon, 03 Feb 2025 12:24:18 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: Paul Eggert <eggert@HIDDEN>, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> >> +      case NEUTRAL_ON: case NEUTRAL_S: case NEUTRAL_WS:
> >> +      case STRONG_AL: case STRONG_L: case STRONG_R:
> >> +      case WEAK_AN: case WEAK_CS: case WEAK_EN: case WEAK_ES: case WEAK_ET: case WEAK_NSM:
> >>  	if (override == L2R)
> >>  	  return STRONG_L;
> >>  	else if (override == R2L)
> >
> > If you really consider this long list of values more readable than the
> > original code, then I guess we disagree on what is and isn't readable.
> > As I mentioned up-thread, such a long list doesn't convince me that
> > all the values were mentioned.
> 
> The compiler, with -Wswitch-enum, would have warned about that.

Yes, but when I read code, I don't want to run the compiler, I want to
be able to understand the code and reason about it by myself.

> The
> point is you would not have to convince yourself that the "default"
> doesn't catch a case you should have explicitly handled otherwise.

I don't need to convince myself: the code says so.  If the algorithm
is in error, that's a different issue.

> As an example: why is a European Number, which is always written L2R
> even in R2L context, treated the same as a strongly R2L character in the
> specific context of bidi_find_bracket_pairs?  That's confusing, because
> I don't understand the reason, and I should look at the Unicode
> algorithm to answer that question.  Adding more case labels doesn't help
> the confusion at all; in fact, it distracts from this important
> exception by hiding it in a long list of no-op cases.

Like I said: bidi.c must be read with the UBA at hand.  I've
explicitly added pointers to specific parts of the UBA description for
that very reason.  I've also made the code resemble the UBA text as
much as reasonably possible.

> > So for me this is a net loss, because the original code left no doubt
> > that all the types get the directionality-override handling.
> 
> I'm very tempted to suggest rewriting this code to make the exceptional
> handling of WEAK_EN more obvious

Why does it have to be more obvious?

First, it isn't just WEAK_EN, it's also WEAK_AN.

Here's what the UBA says about that:

  For each bracket-pair element in the list of pairs of text positions

    a. Inspect the bidirectional types of the characters enclosed
       within the bracket pair.
    b. If any strong type (either L or R) matching the embedding
       direction is found, set the type for both brackets in the pair
       to match the embedding direction.

	  Note that EN and AN should be treated as a strong R type
	  when searching within the brackets.

	  Note that the isolating run sequence may not be
	  contiguous. Implementations should take care to ignore
	  characters not contained in the isolating run sequence when
	  processing neutral or weak characters.

	  o [ e ] o → o e e e o

	  o [ o e ] → o e o e e

	  o [ NI e ] → o e NI e e

    c. Otherwise, if there is a strong type it must be opposite the
       embedding direction. Therefore, test for an established context
       with a preceding strong type by checking backwards before the
       opening paired bracket until the first strong type (L or R) is
       found, using the value of sos if there is none.

          Note that EN and AN should be treated as a strong R type
	  when searching for established context.

	  1. If the preceding strong type is also opposite the
	     embedding direction, context is established, so set the
	     type for both brackets in the pair to that direction.

	      o [ o ] e → o o o o e

	      o [ o NI ] o → o o o NI o o

	  2. Otherwise set the type for both brackets in the pair to the
	     embedding direction.

	      e [ o ] o → e e o e o

	      e [ o ] e → e e o e e

	    Note that taken together the two steps in item 2 are
            guaranteed to set the type for both brackets to the
            preceding strong type, as there are only two possible
            values (L and R).

    d. Otherwise, there are no strong types within the bracket
       pair. Therefore, do not set the type for that bracket pair.

	  e ( NI ) o → e ( NI ) o

       Note that if the enclosed text contains no strong types the
       bracket pairs will both resolve to the same level when resolved
       individually using rules N1 and N2.

As you see, the UBA description explicitly mentions EN and AN, so
having that in the code makes it easier (at least IMO) to read and
validate the code.

> Let's look at the potential bugs this uncovered in detail, improve
> comments where we can (because most likely, they're not bugs), and close
> this bug.

Agreed.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 12:31:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 07:31:37 2025
Received: from localhost ([127.0.0.1]:38205 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tevbx-000712-CK
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:31:36 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:60288)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tevbv-00070n-KX
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:31:32 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tevbo-0004Yv-Ry; Mon, 03 Feb 2025 07:31:24 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=bdxuOMYmZDabb6zncjXNLQrD6qMKzyEZAqJZ19hvUzI=; b=Pg/FtRAhI6Zo
 O0La+FpPyOAd8G/cPf8HiOeSEpe2kS6nACitVHGpQEPc81CM4EBmePkBHm3TKp7L2POzI6MSMrt1E
 ot/nNRpS59vzW6odmqUbVgWPRwpcnceg9qrQXDgmpXSv1NzQ5TUndiRMO27kzqQXdcV7rO1j+/BEg
 RRxtTRSGrQf0ZPqcZcgxvNeJFQX1W5EiQCptx6o73OYGJwR1u+NL3dPt4cJOUzfxrO+6DnGdBea/p
 BKNHFqrAhM8z/lsJSyWKJhUmDSrH43gi77aFCTs3ey2QphbHcdkDTOfLAErXObO3SIfstBgnv26F7
 G8sVGxTT0hhSnvaydbOySw==;
Date: Mon, 03 Feb 2025 14:31:21 +0200
Message-Id: <86zfj3b46e.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Paul Eggert <eggert@HIDDEN>
In-Reply-To: <3eb8d0fc-0d56-42c6-876c-af1f7d02a791@HIDDEN> (message from
 Paul Eggert on Sun, 2 Feb 2025 19:52:04 -0800)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN> <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <3eb8d0fc-0d56-42c6-876c-af1f7d02a791@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: pipcet@HIDDEN, acorallo@HIDDEN, 75964 <at> debbugs.gnu.org,
 monnier@HIDDEN, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 2 Feb 2025 19:52:04 -0800
> Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org,
>  stefankangas@HIDDEN, Andrea Corallo <acorallo@HIDDEN>,
>  Pip Cet <pipcet@HIDDEN>
> From: Paul Eggert <eggert@HIDDEN>
> 
> On 2025-02-02 19:01, Stefan Monnier wrote:
> > I hate `#pragma`.
> 
> I'm not a fan either. Luckily my suggestion[1][2] doesn't use #pragma.

We use #pragma only as the last resort, and I think we should keep
doing that.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 12:24:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 07:24:32 2025
Received: from localhost ([127.0.0.1]:38184 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tevV9-0003b3-UF
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:24:32 -0500
Received: from mail-40131.protonmail.ch ([185.70.40.131]:57437)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tevV7-0003aj-Vt
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:24:30 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738585463; x=1738844663;
 bh=LQUNk/oX6xIs0W9PyG6vV/Bg+obU3UtXlcFGL/5hsoc=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=TIknNOaVvf+90Q3te0DNbv5UTWu9q2MT3AAlJJe/jVHKGNqqzjR4b09oBVUPlxA8O
 Phr0bI6g45JcbMNiyPjXKcWztrlT4z4FHQS1xLsvzHsrms2J+G2QrjFoE8xA18R6U9
 Ihm015XoNtzKe+tLIp8CktAY9NhgDQ9juEPVwT+9WaGZeEIlYeO7CR7mWIgCQpnX+Y
 yInTkG59yUTl1Zj1L+ViHpDdlKnUUqNiFqungXANiHaoUhw1/KOR3BQNjPptPleirY
 C6FRVU8LEGHCyLgENbadhqNbYbn98gY185cfLS23kDLuOXWzg27RBeXsAocpvajdl9
 BsXRQSnzPcp9Q==
Date: Mon, 03 Feb 2025 12:24:18 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <877c672p4d.fsf@HIDDEN>
In-Reply-To: <86a5b3cjsx.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> <86h65ccfk7.fsf@HIDDEN>
 <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN> <86a5b3cjsx.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 067e67cc0d9e0729f50e56279a70ac8a54becf68
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Paul Eggert <eggert@HIDDEN>, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> +      case NEUTRAL_ON: case NEUTRAL_S: case NEUTRAL_WS:
>> +      case STRONG_AL: case STRONG_L: case STRONG_R:
>> +      case WEAK_AN: case WEAK_CS: case WEAK_EN: case WEAK_ES: case WEAK=
_ET: case WEAK_NSM:
>>  =09if (override =3D=3D L2R)
>>  =09  return STRONG_L;
>>  =09else if (override =3D=3D R2L)
>
> If you really consider this long list of values more readable than the
> original code, then I guess we disagree on what is and isn't readable.
> As I mentioned up-thread, such a long list doesn't convince me that
> all the values were mentioned.

The compiler, with -Wswitch-enum, would have warned about that.  The
point is you would not have to convince yourself that the "default"
doesn't catch a case you should have explicitly handled otherwise.

But, again, bidi.c is the exception where -Wswitch-enum adds *nothing*
but verbosity, and would require us to rewrite the code around it rather
than writing the code we want.

At the very least, we'd have to add comments, and those comments would
have to explain or reference the Unicode consortium's decisions, and I
don't think anyone is volunteering to do that.

As an example: why is a European Number, which is always written L2R
even in R2L context, treated the same as a strongly R2L character in the
specific context of bidi_find_bracket_pairs?  That's confusing, because
I don't understand the reason, and I should look at the Unicode
algorithm to answer that question.  Adding more case labels doesn't help
the confusion at all; in fact, it distracts from this important
exception by hiding it in a long list of no-op cases.

> So for me this is a net loss, because the original code left no doubt
> that all the types get the directionality-override handling.

I'm very tempted to suggest rewriting this code to make the exceptional
handling of WEAK_EN more obvious, but I'm not going to, so all I can do
is agree with Eli here: -Wswitch-enum doesn't work in this case, or in
any of the switch statements in bidi.c.

Let's look at the potential bugs this uncovered in detail, improve
comments where we can (because most likely, they're not bugs), and close
this bug.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 12:18:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 07:18:30 2025
Received: from localhost ([127.0.0.1]:38160 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tevPK-0003JU-4U
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:18:30 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:47636)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tevPH-0003JA-3k
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:18:27 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tevPA-0003BV-SK; Mon, 03 Feb 2025 07:18:20 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=LW22vr0q8Dstq/QgAq4UAQvnOJ1lanTbn4j4oGE+kjI=; b=I2wPO4l0OgSj
 q3bCfXqHMk5yN3U7c6cfdkh8UZT85L1NdHwl3OsOb7dWPEfAtkUp61JotOvkhkCMFEZB4nX7LDU28
 dfN92IDMCUe1P/HOYsApLc4LBNAlkLELWR04C7kLvXXN5i5Gf8RJdy1/Z+US3H6Oz34yL/LHpXlSE
 lwoqzOJfbiE2NzBVwePkng8XvJOBm35cTqhRnnG2pK4cZreii87wB1HoWvR40De8lNoMrJhOEmKF+
 whpykjMrOox+01qk4XLTEkC0f9o5csZP+A0txSFfPP859nZbQqvm1hvt7EHPRAgQhbSHwsew2YEJL
 j3VvgGihqD3uLGoyX14org==;
Date: Mon, 03 Feb 2025 14:18:16 +0200
Message-Id: <8634gvcjcn.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <jwvh65blona.fsf-monnier+emacs@HIDDEN> (message from Stefan
 Monnier on Sun, 02 Feb 2025 22:01:23 -0500)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN> <jwvh65blona.fsf-monnier+emacs@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, pipcet@HIDDEN, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stefan Monnier <monnier@HIDDEN>
> Cc: Eli Zaretskii <eliz@HIDDEN>,  eggert@HIDDEN,
>   75964 <at> debbugs.gnu.org,  stefankangas@HIDDEN,  Andrea Corallo
>  <acorallo@HIDDEN>
> Date: Sun, 02 Feb 2025 22:01:23 -0500
> 
> > 	      switch (bidi_it->type)
> > 		{
> > 		case STRONG_L:
> > 		  flag = ((embedding_level & 1) == 0
> > 			  ? FLAG_EMBEDDING_INSIDE
> > 			  : FLAG_OPPOSITE_INSIDE);
> > 		  l2r_seen = true;
> > 		  break;
> > 		case STRONG_R:
> > 		case WEAK_EN:
> > 		case WEAK_AN:
> > 		  flag = ((embedding_level & 1) == 1
> > 			  ? FLAG_EMBEDDING_INSIDE
> > 			  : FLAG_OPPOSITE_INSIDE);
> > 		  r2l_seen = true;
> > 		  break;
> > 		case UNKNOWN_BT:
> > 		case WEAK_BN:
> > 		case NEUTRAL_B:
> > 		case STRONG_AL:
> > 		case LRE:
> > 		case LRO:
> > 		case RLE:
> > 		case RLO:
> > 		case PDF:
> > 		case LRI:
> > 		case RLI:
> > 		case FSI:
> > 		case PDI:
> > 		case WEAK_ES:
> > 		case WEAK_ET:
> > 		case WEAK_CS:
> > 		case WEAK_NSM:
> > 		case NEUTRAL_S:
> > 		case NEUTRAL_WS:
> > 		case NEUTRAL_ON:
> > 		default: 		  break;
> > 		}
> >
> > I think that could be rewritten to be more readable in a number of ways,
> 
> The most obvious one is to remove all the `case ..:` just before `default:`.

That's what the current code does:

	      switch (bidi_it->type)
		{
		case STRONG_L:
		  flag = ((embedding_level & 1) == 0
			  ? FLAG_EMBEDDING_INSIDE
			  : FLAG_OPPOSITE_INSIDE);
		  l2r_seen = true;
		  break;
		case STRONG_R:
		case WEAK_EN:
		case WEAK_AN:
		  flag = ((embedding_level & 1) == 1
			  ? FLAG_EMBEDDING_INSIDE
			  : FLAG_OPPOSITE_INSIDE);
		  r2l_seen = true;
		  break;
		default:
		  break;
		}




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 12:08:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 07:08:53 2025
Received: from localhost ([127.0.0.1]:38135 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tevG1-0002pc-3X
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:08:53 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:58244)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tevFy-0002pL-Ec
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 07:08:51 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tevFs-0002GF-1e; Mon, 03 Feb 2025 07:08:44 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=T650NnsVl6SXoWrXivqqgemVUIk6Nq48XXHfCWpfy5U=; b=L27rbm/+kmL4
 HVg+WJopL67cSyxFsRVJoL3+sj9SQj5v4i/Hy/FvrnmJvkCIvz5QgFhdN+mUUx2MRNcgS/DCS+o2W
 aVQybr1jDASM0Aa1fYfaBynLKaFUvzy56Nf3ANxzeEC0vaBrP4/0YaIdgdsCU9ugbVP16qplhhJoQ
 t/swKRIlKC0VvelFFafN3ooIxC/D9AXX2QUSemwxPhdcke+n+CvsfdfzHGRmMPxOuJek5GwijnIBU
 VvBqLfq9s+BXBQ52b7lLPiz+U+7DwH/hwaOAAOWVzNBDhnSo1T9+XMVZhf+FmXcCeNNHABKO3QJl6
 omCZOe//Ipvn0Cr+7vYTvA==;
Date: Mon, 03 Feb 2025 14:08:30 +0200
Message-Id: <86a5b3cjsx.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Paul Eggert <eggert@HIDDEN>
In-Reply-To: <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN> (message from
 Paul Eggert on Sun, 2 Feb 2025 13:43:40 -0800)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> <86h65ccfk7.fsf@HIDDEN>
 <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: pipcet@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 2 Feb 2025 13:43:40 -0800
> Cc: pipcet@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
> From: Paul Eggert <eggert@HIDDEN>
> 
> > What are the problems in etags.c this tries to solve?
> 
> The main point is to catch more potential inadvertent omissions of "case 
> X:" in a "switch (E)" where E's type is an enum containing X. etags.c, 
> like the rest of Emacs, currently uses one style to do this; the 
> proposed style would be better at catching these mistakes.

And how do the proposed changes achieve that goal?

> > "switch (+expr)" has the disadvantage that it is not widely known.
> 
> It is a simple combination of two widely-known constructs, "switch (E)" 
> and "+E". It is not a GNU extension: support for this has always been 
> required by the C standard and it works everywhere.

I am asking about the "+E" part.  You said in an earlier message:

> For these switch statements, use "switch (+E)" instead of "switch (E)".
> This pacifies GCC and clearly signals to the reader that the switch's
> cases are not intended to exhaust the enum. A "switch (E)" must list all
> the enum values; a "switch (+E)" need not do so. A reasonable guideline

The above seems to say that "+E" is different from "E" in ways that
the compiler knows about.  So I'm asking where is this special meaning
documented, to make sure I completely understand its semantics and its
treatment by the compiler.

> > Why would we want to use a construct that people
> > might not be familiar with?
> 
> Because when we add -Wswitch-enum, GCC will be more likely to catch 
> trivial mistakes that it doesn't currently catch.

If the special meaning of "+E" is not well understood, using it might
cause people make more mistakes.

> > I'm not sure shortening etags.c by 23 lines justifies this.
> 
> The main goal here is reliability via better static checking, not 
> brevity. Pip Cet's proposal to improve reliability makes the code more 
> verbose, which is a minus. This proposal does not have that minus - on 
> the contrary, it makes code shorter and simpler.

I'm not comparing this with what Pip Cet proposed, I compare it with
what we have now.

> To test this again, I applied the style to the file that Pip Cet said 
> was a troublesome case: src/bidi.c. Here the style made the code only a 
> little bit shorter, but that was because I took the liberty of also 
> improving the already-existing dynamic checking, as I modified 
> bidi_get_type to also abort if default_value is not listed in the 
> bidi_type_t enum. So this patch improves dynamic checking (without 
> significant runtime cost), improves static checking, and makes the code 
> a bit shorter and easier to read.

I don't think I see how these changes improve checking and make the
code easier to read.  For me, the "+E" thing is an obstacle to
negotiate; I'm sure others will also stumble on that.  And apart of
that change, the code basically remained the same.
> +      case NEUTRAL_ON: case NEUTRAL_S: case NEUTRAL_WS:
> +      case STRONG_AL: case STRONG_L: case STRONG_R:
> +      case WEAK_AN: case WEAK_CS: case WEAK_EN: case WEAK_ES: case WEAK_ET: case WEAK_NSM:
>  	if (override == L2R)
>  	  return STRONG_L;
>  	else if (override == R2L)

If you really consider this long list of values more readable than the
original code, then I guess we disagree on what is and isn't readable.
As I mentioned up-thread, such a long list doesn't convince me that
all the values were mentioned.  So for me this is a net loss, because
the original code left no doubt that all the types get the
directionality-override handling.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 11:31:57 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 06:31:57 2025
Received: from localhost ([127.0.0.1]:38047 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teugH-00014M-BB
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 06:31:57 -0500
Received: from mail-10630.protonmail.ch ([79.135.106.30]:49015)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teugF-000144-9M
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 06:31:56 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738582307; x=1738841507;
 bh=lfYD2aq9aaMu+/yKTJn+oBq3gWIyfJR4XCeHuKneolU=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=exahlvcdi6DGrRxbZJegugSaygIl4nadMhG6p7yUDaOTufYAHGQ/hRioCPOqVMpxC
 JP/NNFa5R7mWqA6z3x4BImYYLUdPln3k2GFBjYCMUICg9TEGHJ53p2e3KBARq85pv2
 E2+Joo8xZhcWLWF8/kw9e4gDSUKfJmGPtU8fQK7ffL2WMBQbZQ+8UOyS4mYHm8OrGB
 /0gbC1liX7CNeWvS82OnaEDL8cwTkWSmyobHMBejARcYWvrljldRLRuT18P4/JA88r
 Q7+Ti4cDMjxeu/Ytze3ZYI7+ws2vI3oemS20m82+CPfMZ2UAx2BpV/xdta8uXZta9O
 VBcvF6u9+e0TA==
Date: Mon, 03 Feb 2025 11:31:42 +0000
To: Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87cyfz2rk2.fsf@HIDDEN>
In-Reply-To: <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN> <87ikpr2yi4.fsf@HIDDEN>
 <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 987796bbcf7463ae5c57f63769a613beef3958bb
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Monnier" <monnier@HIDDEN> writes:

>>> The most obvious one is to remove all the `case ..:` just before `defau=
lt:`.
>>> That would be my vote as well (tho only because I don't know that
>>> code.  There might be a very good reason to keep it as above, of course=
).
>>
>> The reason was to add -Wswitch-enum, which would warn about incomplete
>> case enumerations involving an enum type.
>
> In which sense is a "`switch` with a `default` clause" incomplete?

Only in the sense that it's sometimes useful to warn about such
statements!  They're not invalid C.

GCC offers an option to do that.  Disabling that option, as we had
previously done, had led to some (very minor) bugs and some potential
bugs that I have yet to look at (such as the "crash on DEFAULT_CURSOR"
thing upthread).

But it seems there is a consensus we'd rather live with such bugs, so
nothing about switch statements is about to change.  It'll be perfectly
okay to continue writing code such as:

enum ABC { A, B, C };

enum ABC abc;
switch (abc) {
case A:
  /* handle case A */
  break;
default:
  /* we know this must be case C */
  /* handle case C */
  break;
}

(The major problem, of course, is that case B might have to be handled
differently.  The minor, much rarer problem is that abc might not be any
of A, B, or C, but a different value altogether: C + 3, for example.  C
makes this legal, and Emacs relies on such behavior.)

Paul's suggestion for switching off the warning behavior is very clever,
and if he could come up with a way of switching ON the warning behavior
where we might want it, maybe that would be an option, but at this point
we need to look at the potential bugs this warning has found, then close
the bug.  If it had discovered massive numbers of actual bugs I'd argue
differently, but it hasn't, so unless Paul wants to take over and argue
for this change, it lacks a champion.

We might want to disable -Wswitch, too, as it only results in a false
sense of security and useless default: clauses being added to pacify
warnings.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 11:09:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 06:09:06 2025
Received: from localhost ([127.0.0.1]:37976 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teuKA-0008LO-Dy
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 06:09:06 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:48530)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1teuK8-0008Ks-Da
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 06:09:04 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 857BD440BD5;
 Mon,  3 Feb 2025 06:08:57 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738580936;
 bh=hbQLa0mNmWlUjCJwnH0acZUKIlM+9TkRZ6RghwcRKsA=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=OZqxwjuqb0jyBLaQoVXa1oDDEi8aTeL2ouj3DDdi2hpWj9hZWuchOAsNEbezlg1Or
 dZozeKiNtSZSBu/3lpGj/ydeuKmdwgO5xJklg888wuZLzdI9bNa88fm8fjH6PhfHO+
 Zhb7Jde957vpgMzSCk6UeOw9qeWjj55+TdVw0dxZjZ415hLN9f/al3I8PhP62hTJYB
 Td0ElE9r0I0szDwH9oIS1w5W/+4vfUmdwWz69p89wM9Ztz8AwhRyNGVx6Sr/x37QAG
 6BeZRQQvPOCSZ2AKrW6Zegy19/p99kry+BBA2dKQHCMxBm4bPfr2Mtzqdz3klJWYLX
 UY3CtLYDb7Liw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 79E6B44042A;
 Mon,  3 Feb 2025 06:08:56 -0500 (EST)
Received: from pastel (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 3954B1203DF;
 Mon,  3 Feb 2025 06:08:56 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <87ikpr2yi4.fsf@HIDDEN> (Pip Cet's message of "Mon, 03
 Feb 2025 09:01:40 +0000")
Message-ID: <jwvr04fp9pf.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
 <87ikpr2yi4.fsf@HIDDEN>
Date: Mon, 03 Feb 2025 06:08:55 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.002 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

>> The most obvious one is to remove all the `case ..:` just before `default:`.
>> That would be my vote as well (tho only because I don't know that
>> code.  There might be a very good reason to keep it as above, of course).
>
> The reason was to add -Wswitch-enum, which would warn about incomplete
> case enumerations involving an enum type.

In which sense is a "`switch` with a `default` clause" incomplete?


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 09:01:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 03 04:01:54 2025
Received: from localhost ([127.0.0.1]:37737 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tesL4-0002Er-9s
	for submit <at> debbugs.gnu.org; Mon, 03 Feb 2025 04:01:54 -0500
Received: from mail-4322.protonmail.ch ([185.70.43.22]:19945)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tesL1-0002Ea-O9
 for 75964 <at> debbugs.gnu.org; Mon, 03 Feb 2025 04:01:52 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738573305; x=1738832505;
 bh=usTtrvHvYXopbBe33jAAIeBitB3vkZg6JM/bkzZxufc=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=Gce7eLqJvqkqtNaYlXSvpEVMNI1i2yE/3W4qYH018QF7NxENQE93VbWZurfdFdfmE
 3nJrv22QU/CIXIHjrygDwdbGkJKCqRXFF5rG9j4Gv4658CMGMA1oUHqkR5UaddxEW2
 pZXEcasjQaf4KTaJ9I2dV7NC2xtceLVge9ee7txi2Hlg6F6D8weroRtBUclNtDMEAC
 11nuwnMFPKx05Rgtc/cwHmxnS6ZdS+1yoq0B82iLd7KJYFv5TviHuhlBMB7bA4eMUv
 EhRY0IZ+Yj6184GfJhlKRzs3oowwBlElM1UeXG6ZQac369o3+R39NlV3Nmd6EDxPuc
 yEtMb5b6JQN4w==
Date: Mon, 03 Feb 2025 09:01:40 +0000
To: Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87ikpr2yi4.fsf@HIDDEN>
In-Reply-To: <jwvh65blona.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <jwvh65blona.fsf-monnier+emacs@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 49a68af70adc4ccaf903d2e9dfde59bb0e85a2ff
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Monnier" <monnier@HIDDEN> writes:

>> =09      switch (bidi_it->type)
>> =09=09{
>> =09=09case STRONG_L:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 0
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  l2r_seen =3D true;
>> =09=09  break;
>> =09=09case STRONG_R:
>> =09=09case WEAK_EN:
>> =09=09case WEAK_AN:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 1
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  r2l_seen =3D true;
>> =09=09  break;
>> =09=09case UNKNOWN_BT:
>> =09=09case WEAK_BN:
>> =09=09case NEUTRAL_B:
>> =09=09case STRONG_AL:
>> =09=09case LRE:
>> =09=09case LRO:
>> =09=09case RLE:
>> =09=09case RLO:
>> =09=09case PDF:
>> =09=09case LRI:
>> =09=09case RLI:
>> =09=09case FSI:
>> =09=09case PDI:
>> =09=09case WEAK_ES:
>> =09=09case WEAK_ET:
>> =09=09case WEAK_CS:
>> =09=09case WEAK_NSM:
>> =09=09case NEUTRAL_S:
>> =09=09case NEUTRAL_WS:
>> =09=09case NEUTRAL_ON:
>> =09=09default: =09=09  break;
>> =09=09}
>>
>> I think that could be rewritten to be more readable in a number of ways,
>
> The most obvious one is to remove all the `case ..:` just before `default=
:`.
> That would be my vote as well (tho only because I don't know that
> code.  There might be a very good reason to keep it as above, of course).

The reason was to add -Wswitch-enum, which would warn about incomplete
case enumerations involving an enum type.  My hope was to make some
existing bugs more obvious that way, because applying a patch like:

@@ -26086,8 +26124,9 @@ x_draw_window_cursor (struct window *w, struct glyp=
h_row *glyph_row, int x,
 =09      w->phys_cursor_width =3D 0;
 =09      break;
=20
-=09    default:
+=09    case DEFAULT_CURSOR:
 =09      emacs_abort ();
+=09    default: =09      emacs_abort ();
 =09    }
 =09}


does make you wonder what's so special about the DEFAULT_CURSOR case
that aborting when we're asked to draw one is the right thing to do.

(There's probably a good reason in this case).

There are more cases like this in the patch I sent.  I guess the
consensus now is not to add -Wswitch-enum to regular builds at all, so
we'll just have to live with those bugs.

>> including, of course, putting a #pragma in.
>
> I hate `#pragma`.

Consider it a failed last-ditch attempt to enable these warnings on a
per-file basis, by using #include "exhaustive.h" or a similar construct.

We still have the option of doing so in Makefile.in, but who reads
Makeile.in?

So I guess we'll just do nothing.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 03:52:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 22:52:17 2025
Received: from localhost ([127.0.0.1]:37089 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tenVR-0006ST-0h
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 22:52:17 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:50892)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1tenVO-0006SA-0n
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 22:52:14 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id CB5523C00D409;
 Sun,  2 Feb 2025 19:52:07 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id 7GEZF25Yu7fZ; Sun,  2 Feb 2025 19:52:07 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 563F33C00D40A;
 Sun,  2 Feb 2025 19:52:07 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 563F33C00D40A
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738554727;
 bh=5HTIR8uEQYsjE0T1M8Q28J8+EG44Y8SpeprjMcpKN+4=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=DCuN372DrbwIlNbEgJk1ZB0PylgVquAGE3tzjgrH2oaRzYq0ijFnTAwKDh6ObW9lq
 E9cAS495lFksgRxBj0wqMruPY9/Dz+3c9MX9KwUPtBoOeFnmgRnK9DKGC12fQjQCEk
 zsc8H55i+DmvNktIgXPtoVbwA8sTqkLN1pBTMFcyLos/Q5/L2nAFSC6OmzqaPj3a/6
 qBmCjGEgUh7FSbkg0AocLbIElDM0tMZvB90264Mae8O7JanX3F5EzC63YdgfHLdGtR
 JPRXyGkJiQaql8ebs4XMkGV01CvQao30uhRjb2pCoGgE6JzUFY4Q9IyBpvFUP4t0VX
 dvAIVCq9j8NFQ==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id JRKiO_Kh6p9N; Sun,  2 Feb 2025 19:52:07 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 2B9FA3C00D409;
 Sun,  2 Feb 2025 19:52:07 -0800 (PST)
Message-ID: <3eb8d0fc-0d56-42c6-876c-af1f7d02a791@HIDDEN>
Date: Sun, 2 Feb 2025 19:52:04 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
To: Stefan Monnier <monnier@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN> <jwvh65blona.fsf-monnier+emacs@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <jwvh65blona.fsf-monnier+emacs@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Pip Cet <pipcet@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 Andrea Corallo <acorallo@HIDDEN>, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-02-02 19:01, Stefan Monnier wrote:
> I hate `#pragma`.

I'm not a fan either. Luckily my suggestion[1][2] doesn't use #pragma.

[1]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=75964#122
[2]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=75964#131




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 3 Feb 2025 03:01:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 22:01:33 2025
Received: from localhost ([127.0.0.1]:37027 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1temiL-00047F-Hp
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 22:01:33 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:25475)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1temiJ-000471-9m
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 22:01:31 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id BA982100182;
 Sun,  2 Feb 2025 22:01:25 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1738551684;
 bh=uLp36kLralRk8Mai2SoJDu7lTz0DjqMcy5nh5SXUOlI=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=JZuUefw/0ukfLZrHxruyrTCMCRSbAMPQD2RwZ5292krRvUMc1mrpNBO74X0E13s1t
 t0JcP1GMidYP7ZQqlPoNidZDXSw/7Ex2gdqRUICf9DVUN+yGfX0sAGTfnWZiwaSMlf
 298HvhAm643rV+s8OMEh+NSOxxg5Epwvjv9Wtrb6m/1WdUYP6/JXI/sqsKr/S+Spf5
 oijZlABpLKiuakcbG7i5xmerS/P9+VbBgXSe6J+yOTTg7zc++oFNITIfxY1eNPRqqA
 VP/zTZCPKBksQ0jIeghMarCN5/LouIiKYFBWj4YJZyCuUNt/9vhwwYlQ5LSaGkeJ/X
 ASIx0mMKbVO+g==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id D11E2100128;
 Sun,  2 Feb 2025 22:01:24 -0500 (EST)
Received: from alfajor (104-195-232-86.cpe.teksavvy.com [104.195.232.86])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 85305120346;
 Sun,  2 Feb 2025 22:01:24 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <87seow7bpz.fsf@HIDDEN> (Pip Cet's message of "Sun, 02
 Feb 2025 12:50:15 +0000")
Message-ID: <jwvh65blona.fsf-monnier+emacs@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
Date: Sun, 02 Feb 2025 22:01:23 -0500
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.074 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> 	      switch (bidi_it->type)
> 		{
> 		case STRONG_L:
> 		  flag = ((embedding_level & 1) == 0
> 			  ? FLAG_EMBEDDING_INSIDE
> 			  : FLAG_OPPOSITE_INSIDE);
> 		  l2r_seen = true;
> 		  break;
> 		case STRONG_R:
> 		case WEAK_EN:
> 		case WEAK_AN:
> 		  flag = ((embedding_level & 1) == 1
> 			  ? FLAG_EMBEDDING_INSIDE
> 			  : FLAG_OPPOSITE_INSIDE);
> 		  r2l_seen = true;
> 		  break;
> 		case UNKNOWN_BT:
> 		case WEAK_BN:
> 		case NEUTRAL_B:
> 		case STRONG_AL:
> 		case LRE:
> 		case LRO:
> 		case RLE:
> 		case RLO:
> 		case PDF:
> 		case LRI:
> 		case RLI:
> 		case FSI:
> 		case PDI:
> 		case WEAK_ES:
> 		case WEAK_ET:
> 		case WEAK_CS:
> 		case WEAK_NSM:
> 		case NEUTRAL_S:
> 		case NEUTRAL_WS:
> 		case NEUTRAL_ON:
> 		default: 		  break;
> 		}
>
> I think that could be rewritten to be more readable in a number of ways,

The most obvious one is to remove all the `case ..:` just before `default:`.
That would be my vote as well (tho only because I don't know that
code.  There might be a very good reason to keep it as above, of course).

> including, of course, putting a #pragma in.

I hate `#pragma`.


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 21:43:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 16:43:49 2025
Received: from localhost ([127.0.0.1]:36514 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tehkr-0008Q0-5n
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 16:43:49 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:57454)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1tehko-0008Pk-Qc
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 16:43:47 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 162263C00D409;
 Sun,  2 Feb 2025 13:43:41 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id twdeppOijf48; Sun,  2 Feb 2025 13:43:40 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 8F83B3C00D40A;
 Sun,  2 Feb 2025 13:43:40 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 8F83B3C00D40A
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738532620;
 bh=9av/0K7mzsMFlucNx0R3QHQqjM8ZLqSFMu92kY+Qtnk=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=f0xv5uKWccVHbblEtnvdVI8BIH54PfCTFyMY+s4RQmurODd7fXmdtMl5Gz+oz5WT8
 n8BvRC0V+jrux5qePdFG3nbrGqNLb+cJ0d+ufnPRgQ9hywxip6a2bCz4q2C7lpASVv
 l2PXvHZLevQU2TEH8j6J15UnVJIbGo1D4OBGavGDR6Cq1X3HLTSUl0qDaP/athjhmQ
 rYJ2nu/dYOtFAumqwo9cJCbFP+/KXwEqNV9rDlJ8HNsm0zLvZRQmKb9t8kYKlBDbih
 c0lQnSc36UT2YDY4TIKo97a3TN+vbTsCFAgndVesShe3lulqg4CkWAKsD/LgGIyHH6
 DzsPi+LBRat5Q==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id H6acrT2RWiE9; Sun,  2 Feb 2025 13:43:40 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 5DC193C00D409;
 Sun,  2 Feb 2025 13:43:40 -0800 (PST)
Content-Type: multipart/mixed; boundary="------------Bn4mWacCKta5BOZOYCExYax4"
Message-ID: <16c59937-97bf-441a-a4d0-62c66ce594dd@HIDDEN>
Date: Sun, 2 Feb 2025 13:43:40 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
To: Eli Zaretskii <eliz@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> <86h65ccfk7.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <86h65ccfk7.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: pipcet@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------Bn4mWacCKta5BOZOYCExYax4
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 2025-02-02 11:27, Eli Zaretskii wrote:

> What are the problems in etags.c this tries to solve?

The main point is to catch more potential inadvertent omissions of "case 
X:" in a "switch (E)" where E's type is an enum containing X. etags.c, 
like the rest of Emacs, currently uses one style to do this; the 
proposed style would be better at catching these mistakes.

Although the proposed style is shorter than what Emacs currently uses, 
brevity is not the main goal here.


> "switch (+expr)" has the disadvantage that it is not widely known.

It is a simple combination of two widely-known constructs, "switch (E)" 
and "+E". It is not a GNU extension: support for this has always been 
required by the C standard and it works everywhere.

If we use this style consistently it will be obvious, and gcc 
-Wswitch-enum will report inadvertent deviations from it which will be 
better than what we have now (no static checking). Also, developers who 
don't like the style won't be obliged to use it: they can use other 
techniques (already discussed) to pacify -Wswitch-enum if they prefer.


> Why would we want to use a construct that people
> might not be familiar with?

Because when we add -Wswitch-enum, GCC will be more likely to catch 
trivial mistakes that it doesn't currently catch.


> I'm not sure shortening etags.c by 23 lines justifies this.

The main goal here is reliability via better static checking, not 
brevity. Pip Cet's proposal to improve reliability makes the code more 
verbose, which is a minus. This proposal does not have that minus - on 
the contrary, it makes code shorter and simpler.

To test this again, I applied the style to the file that Pip Cet said 
was a troublesome case: src/bidi.c. Here the style made the code only a 
little bit shorter, but that was because I took the liberty of also 
improving the already-existing dynamic checking, as I modified 
bidi_get_type to also abort if default_value is not listed in the 
bidi_type_t enum. So this patch improves dynamic checking (without 
significant runtime cost), improves static checking, and makes the code 
a bit shorter and easier to read.

All in all it's a success story.
--------------Bn4mWacCKta5BOZOYCExYax4
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-Pacify-gcc-Wswitch-enum-in-bidi.c.patch"
Content-Disposition: attachment;
 filename="0001-Pacify-gcc-Wswitch-enum-in-bidi.c.patch"
Content-Transfer-Encoding: base64

RnJvbSA0MDBmM2Q4ZWI2ZDE3MWYzYTU2OTI1NTRjZTJkZjU5ZWJkM2UxYzVhIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBTdW4sIDIgRmViIDIwMjUgMTM6MzY6MzUgLTA4MDAKU3ViamVjdDogW1BBVENI
XSBQYWNpZnkgZ2NjIC1Xc3dpdGNoLWVudW0gaW4gYmlkaS5jCk1JTUUtVmVyc2lvbjogMS4w
CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5z
ZmVyLUVuY29kaW5nOiA4Yml0CgoqIHNyYy9iaWRpLmMgKGJpZGlfZ2V0X3R5cGUpOiBBYm9y
dCBpZiB0aGUgZGVmYXVsdCB0eXBlIGhhcyBhCnZhbHVlIG5vdCBsaXN0ZWQgaW4gdGhlIGVu
dW0sIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJlYXRpbmcKaXQgbGlrZSBORVVUUkFMX09OIGV0
Yy4gIExpc3QgYWxsIGVudW0gdmFsdWVzIGluIGEgc3dpdGNoLgooYmlkaV9yZXNvbHZlX2V4
cGxpY2l0LCBiaWRpX2ZpbmRfYnJhY2tldF9wYWlycykKKGJpZGlfcmVzb2x2ZV9uZXV0cmFs
KTogVXNlIOKAmHN3aXRjaCAoK0Up4oCZIHRvIGluZGljYXRlIHRoYXQgaXTigJlzCmludGVu
ZGVkIHRoYXQgd2Ugbm90IGVudW1lcmF0ZSBhbGwgdGhlIGVudW0gdmFsdWVzLiAgUmVtb3Zl
CuKAmGRlZmF1bHQ6IGJyZWFrO+KAmSBjYXNlcyB0aGF0IGFyZSBub3Qgbm93IG5lZWRlZCB0
byBwYWNpZnkgR0NDLgotLS0KIHNyYy9iaWRpLmMgfCAzNCArKysrKysrKysrKysrKysrLS0t
LS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTgg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JpZGkuYyBiL3NyYy9iaWRpLmMKaW5k
ZXggZDg3NTRlMmRiNzMuLjU2NTZiN2E5Y2Y5IDEwMDY0NAotLS0gYS9zcmMvYmlkaS5jCisr
KyBiL3NyYy9iaWRpLmMKQEAgLTI4MiwxMiArMjgyLDYgQEAgYmlkaV9nZXRfdHlwZSAoaW50
IGNoLCBiaWRpX2Rpcl90IG92ZXJyaWRlKQogICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIGRl
ZmF1bHRfdHlwZSA9IChiaWRpX3R5cGVfdCkgWEZJWE5VTSAoQ0hBUl9UQUJMRV9SRUYgKGJp
ZGlfdHlwZV90YWJsZSwgY2gpKTsKLSAgLyogRXZlcnkgdmFsaWQgY2hhcmFjdGVyIGNvZGUs
IGV2ZW4gdGhvc2UgdGhhdCBhcmUgdW5hc3NpZ25lZCBieSB0aGUKLSAgICAgVUNELCBoYXZl
IHNvbWUgYmlkaS1jbGFzcyBwcm9wZXJ0eSwgYWNjb3JkaW5nIHRvCi0gICAgIERlcml2ZWRC
aWRpQ2xhc3MudHh0IGZpbGUuICBUaGVyZWZvcmUsIGlmIHdlIGV2ZXIgZ2V0IFVOS05PV05f
QlQKLSAgICAgKD0gemVybykgY29kZSBmcm9tIENIQVJfVEFCTEVfUkVGLCB0aGF0J3MgYSBi
dWcuICAqLwotICBpZiAoZGVmYXVsdF90eXBlID09IFVOS05PV05fQlQpCi0gICAgZW1hY3Nf
YWJvcnQgKCk7CiAKICAgc3dpdGNoIChkZWZhdWx0X3R5cGUpCiAgICAgewpAQCAtMzAzLDcg
KzI5NywxOCBAQCBiaWRpX2dldF90eXBlIChpbnQgY2gsIGJpZGlfZGlyX3Qgb3ZlcnJpZGUp
CiAgICAgICBjYXNlIEZTSToKICAgICAgIGNhc2UgUERJOgogCXJldHVybiBkZWZhdWx0X3R5
cGU7CisKKyAgICAgIGNhc2UgVU5LTk9XTl9CVDoKICAgICAgIGRlZmF1bHQ6CisJLyogRXZl
cnkgdmFsaWQgY2hhcmFjdGVyIGNvZGUsIGV2ZW4gdGhvc2UgdGhhdCBhcmUgdW5hc3NpZ25l
ZCBieSB0aGUKKwkgICBVQ0QsIGhhdmUgc29tZSBiaWRpLWNsYXNzIHByb3BlcnR5LCBhY2Nv
cmRpbmcgdG8KKwkgICBEZXJpdmVkQmlkaUNsYXNzLnR4dCBmaWxlLiAgVGhlcmVmb3JlLCBp
ZiB3ZSBldmVyIGdldCBVTktOT1dOX0JUCisJICAgKD0gemVybykgb3Igc29tZSB1bmtub3du
IGNvZGUgZnJvbSBDSEFSX1RBQkxFX1JFRiwgdGhhdCdzIGEgYnVnLiAgKi8KKwllbWFjc19h
Ym9ydCAoKTsKKworICAgICAgY2FzZSBORVVUUkFMX09OOiBjYXNlIE5FVVRSQUxfUzogY2Fz
ZSBORVVUUkFMX1dTOgorICAgICAgY2FzZSBTVFJPTkdfQUw6IGNhc2UgU1RST05HX0w6IGNh
c2UgU1RST05HX1I6CisgICAgICBjYXNlIFdFQUtfQU46IGNhc2UgV0VBS19DUzogY2FzZSBX
RUFLX0VOOiBjYXNlIFdFQUtfRVM6IGNhc2UgV0VBS19FVDogY2FzZSBXRUFLX05TTToKIAlp
ZiAob3ZlcnJpZGUgPT0gTDJSKQogCSAgcmV0dXJuIFNUUk9OR19MOwogCWVsc2UgaWYgKG92
ZXJyaWRlID09IFIyTCkKQEAgLTIwMTAsNyArMjAxNSw3IEBAIGJpZGlfcmVzb2x2ZV9leHBs
aWNpdCAoc3RydWN0IGJpZGlfaXQgKmJpZGlfaXQpCiAJIGVtYmVkZGluZyBsZXZlbCBvZiB0
aGUgX2ZvbGxvd2luZ18gY2hhcmFjdGVycywgc28gd2UgbXVzdAogCSBmaXJzdCBsb29rIGF0
IHRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgdG8gc3VwcG9ydAogCSB0aGF0
LiAgKi8KLSAgICAgIHN3aXRjaCAocHJldl90eXBlKQorICAgICAgc3dpdGNoICgrcHJldl90
eXBlKQogCXsKIAljYXNlIFJMSToJLyogWDVhICovCiAJICBpZiAoY3VycmVudF9sZXZlbCA8
IEJJRElfTUFYREVQVEgKQEAgLTIwNzQsNyArMjA3OSw3IEBAIGJpZGlfcmVzb2x2ZV9leHBs
aWNpdCAoc3RydWN0IGJpZGlfaXQgKmJpZGlfaXQpCiAKICAgYmlkaV9pdC0+dHlwZV9hZnRl
cl93biA9IFVOS05PV05fQlQ7CiAKLSAgc3dpdGNoICh0eXBlKQorICBzd2l0Y2ggKCt0eXBl
KQogICAgIHsKICAgICBjYXNlIFJMRToJLyogWDIgKi8KICAgICBjYXNlIFJMTzoJLyogWDQg
Ki8KQEAgLTIxOTcsOSArMjIwMiw2IEBAIGJpZGlfcmVzb2x2ZV9leHBsaWNpdCAoc3RydWN0
IGJpZGlfaXQgKmJpZGlfaXQpCiAgICAgICBiaWRpX2NoZWNrX3R5cGUgKGJpZGlfaXQtPnR5
cGVfYWZ0ZXJfd24pOwogICAgICAgdHlwZSA9IFdFQUtfQk47IC8qIFg5L1JldGFpbmluZyAq
LwogICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIE5vdGhpbmcuICAqLwot
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgIGJpZGlfaXQtPnR5cGUgPSB0eXBlOwpAQCAtMjcw
Nyw3ICsyNzA5LDcgQEAgYmlkaV9maW5kX2JyYWNrZXRfcGFpcnMgKHN0cnVjdCBiaWRpX2l0
ICpiaWRpX2l0KQogCiAJICAgICAgLyogV2hlbmV2ZXIgd2Ugc2VlIGEgc3Ryb25nIHR5cGUs
IHVwZGF0ZSB0aGUgZmxhZ3Mgb2YKIAkJIGFsbCB0aGUgc2xvdHMgb24gdGhlIHN0YWNrLiAg
Ki8KLQkgICAgICBzd2l0Y2ggKGJpZGlfaXQtPnR5cGUpCisJICAgICAgc3dpdGNoICgrYmlk
aV9pdC0+dHlwZSkKIAkJewogCQljYXNlIFNUUk9OR19MOgogCQkgIGZsYWcgPSAoKGVtYmVk
ZGluZ19sZXZlbCAmIDEpID09IDAKQEAgLTI3MjMsOCArMjcyNSw2IEBAIGJpZGlfZmluZF9i
cmFja2V0X3BhaXJzIChzdHJ1Y3QgYmlkaV9pdCAqYmlkaV9pdCkKIAkJCSAgOiBGTEFHX09Q
UE9TSVRFX0lOU0lERSk7CiAJCSAgcjJsX3NlZW4gPSB0cnVlOwogCQkgIGJyZWFrOwotCQlk
ZWZhdWx0OgotCQkgIGJyZWFrOwogCQl9CiAJICAgICAgaWYgKGZsYWcpCiAJCXsKQEAgLTI5
NzksNyArMjk3OSw3IEBAIGJpZGlfcmVzb2x2ZV9icmFja2V0cyAoc3RydWN0IGJpZGlfaXQg
KmJpZGlfaXQpCiAKIAkgIGlmIChwcmV2X3R5cGVfZm9yX25ldXRyYWwgPT0gVU5LTk9XTl9C
VCkKIAkgICAgcHJldl90eXBlX2Zvcl9uZXV0cmFsID0gZW1iZWRkaW5nX3R5cGU7Ci0JICBz
d2l0Y2ggKHByZXZfdHlwZV9mb3JfbmV1dHJhbCkKKwkgIHN3aXRjaCAoK3ByZXZfdHlwZV9m
b3JfbmV1dHJhbCkKIAkgICAgewogCSAgICBjYXNlIFNUUk9OR19SOgogCSAgICBjYXNlIFdF
QUtfRU46CkBAIC0yOTk1LDkgKzI5OTUsNyBAQCBiaWRpX3Jlc29sdmVfYnJhY2tldHMgKHN0
cnVjdCBiaWRpX2l0ICpiaWRpX2l0KQogCQk/IFNUUk9OR19MCQkJCSAgICAgLyogTjBjMSAq
LwogCQk6IGVtYmVkZGluZ190eXBlOwkJCSAgICAgLyogTjBjMiAqLwogCSAgICAgIGJyZWFr
OwotCSAgICBkZWZhdWx0OgogCSAgICAgIC8qIE4wZDogRG8gbm90IHNldCB0aGUgdHlwZSBm
b3IgdGhhdCBicmFja2V0IHBhaXIuICAqLwotCSAgICAgIGJyZWFrOwogCSAgICB9CiAJfQog
ICAgICAgZWFzc2VydCAodHlwZSA9PSBTVFJPTkdfTCB8fCB0eXBlID09IFNUUk9OR19SIHx8
IHR5cGUgPT0gTkVVVFJBTF9PTik7CkBAIC0zMTc1LDcgKzMxNzMsNyBAQCBiaWRpX3Jlc29s
dmVfbmV1dHJhbCAoc3RydWN0IGJpZGlfaXQgKmJpZGlfaXQpCiAJICAgIH0KIAkgIGVsc2UK
IAkgICAgewotCSAgICAgIHN3aXRjaCAodHlwZSkKKwkgICAgICBzd2l0Y2ggKCt0eXBlKQog
CQl7CiAJCWNhc2UgU1RST05HX0w6CiAJCWNhc2UgU1RST05HX1I6Ci0tIAoyLjQ1LjIKCg==


--------------Bn4mWacCKta5BOZOYCExYax4--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 19:28:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 14:28:06 2025
Received: from localhost ([127.0.0.1]:36352 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tefdV-0001zS-In
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 14:28:05 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:33610)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tefdS-0001yt-1I
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 14:28:03 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tefdL-0007z2-K3; Sun, 02 Feb 2025 14:27:55 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=ogm7qagVH3+MhFHZ5db67XTG3NJyQ8cbNBql0SAPg7Q=; b=DOZQLhHHZZTV
 3a3oQEGQAu4EHAd3Ew/OBPZHKOjkAmlKJbX0SbGnX8DoG4jnUq7EhFb+jAotVEkiEXc3YjoD/iJM9
 zQRL36dbrs04MZzJ0y5DjoqEErT35hq9FFWe4GDwToAJ2Z9xVazn1EIaIwZu2mmOtdqjPtUeJOmjf
 XVww1XFC6bh4GWEOSbMGXqbNf8qSsYKmofUvnGeWEB0/AA/iMRltWX9ilqKjcBHyiL96/Bja2HqQD
 QkFKGw9ouPIev0e6KobhyYqb68tdmDx7KJPCug5sVvQYsymjeBJqzWEBcF67l+T66alJJoqeopH+N
 WpHftcaytNggBu7aYbYBsg==;
Date: Sun, 02 Feb 2025 21:27:52 +0200
Message-Id: <86h65ccfk7.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Paul Eggert <eggert@HIDDEN>
In-Reply-To: <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN> (message from
 Paul Eggert on Sun, 2 Feb 2025 10:27:02 -0800)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: pipcet@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 2 Feb 2025 10:27:02 -0800
> Cc: 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN,
>  Eli Zaretskii <eliz@HIDDEN>
> From: Paul Eggert <eggert@HIDDEN>
> 
> * Cleanly compile with -Wswitch-enum to catch potential errors.
> * A style that is easy to explain and understand.
> * No changes to GCC needed for now.
> * No new C macros in the Emacs source code.
> * Source code that is shorter and easier to maintain.

What are the problems in etags.c this tries to solve? just that its
source is 23 lines too long?

> Here's the proposal:
> 
> Suggestion 1: Don't treat all enum switch statements the same. Some enum 
> switch statements merely want to treat a couple of enum values 
> specially, with all other enum values being default. For these, it's 
> unlikely that forcing the programmer to list a case for every enum value 
> will catch many bugs; it's even possible that this would cause more 
> problems than it'll cure, and it's certainly an annoyance.
> 
> For these switch statements, use "switch (+E)" instead of "switch (E)". 
> This pacifies GCC and clearly signals to the reader that the switch's 
> cases are not intended to exhaust the enum. A "switch (E)" must list all 
> the enum values; a "switch (+E)" need not do so. A reasonable guideline 
> is that if a switch statement has more than three "case X: break;"s then 
> it may be a good idea to use "switch (+E)" instead of "switch (E)".
> 
> Suggestion 2: Omit "default: break;"s present only to tell GCC and/or 
> the reader that the switch is otherwise not exhaustive. "switch (+expr)" 
> already does this more concisely and more usefully.

"switch (+expr)" has the disadvantage that it is not widely known.
E.g., I couldn't find its description in the two GNU manuals of the C
language I have.  Why would we want to use a construct that people
might not be familiar with?

> Combine these two suggestions, and I made etags.c shorter (by 23 lines) 
> and easier to read once you know the style. See attached patch, which 
> compiles cleanly with -Wswitch-enum.

I'm not sure shortening etags.c by 23 lines justifies this.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 18:47:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 13:47:59 2025
Received: from localhost ([127.0.0.1]:36295 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tef0g-0008Sp-LK
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 13:47:59 -0500
Received: from mail-10628.protonmail.ch ([79.135.106.28]:59789)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tef0d-0008SJ-Nf
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 13:47:56 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738522068; x=1738781268;
 bh=Mgj0vHZSqi49bNZfCi4NdCNCYx4l1xIvYuYbrNC33N4=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=isKeU/ecZrdiP/V4Z1EVDPj/rp4OuZHVf/23z/idA0CN9xM8iDMdQwod+B8IM2bLo
 gsUfKqMGxaHXWATJPHXwBRWtDh+SZPCxEfUwtkHKaTIGpNQC/RhD2XHw73rXM8fss4
 lrSVBH+OcI56Uyf6BqZTZEDtR+PSfy1kkCYOZwO15l74PnQ5GDkamYn1BRjEnaHrwL
 6VfVpO772WjWCPQJXSARwP757v/iC7/2kVc4t5RdOxmVBNdh6CifGW21L2Izsh18sz
 K4/kL5vKaE2E9+f95mTWCkiBObCU4Gm11i693qni3nyWPyTFlFG41lRf9c8jH+/Erl
 qjrZQ+0sOqZpQ==
Date: Sun, 02 Feb 2025 18:47:43 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <8734gw421a.fsf@HIDDEN>
In-Reply-To: <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
 <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: ba0efecad7528faf4244bce0628925b30053f817
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-02-02 03:48, Pip Cet wrote:
>> I've also stayed away from lib-src for now.
             ^^^^^^

I meant to say "run" :-)

> Although you did look at lib-src (I see some changes there) you

Just because I changed code doesn't mean I looked at it!

> understandably did not tackle lib-src/etags.c which has many enum
> switches and gimmicks to pacify GCC. So I took a crack at etags.c and
> came up with an alternative proposal consisting of two suggestions to
> support the following goals:
>
> * Cleanly compile with -Wswitch-enum to catch potential errors.
> * A style that is easy to explain and understand.
> * No changes to GCC needed for now.
> * No new C macros in the Emacs source code.
> * Source code that is shorter and easier to maintain.
>
> Here's the proposal:
>
> Suggestion 1: Don't treat all enum switch statements the same. Some enum
> switch statements merely want to treat a couple of enum values
> specially, with all other enum values being default. For these, it's
> unlikely that forcing the programmer to list a case for every enum value
> will catch many bugs; it's even possible that this would cause more
> problems than it'll cure, and it's certainly an annoyance.

I agree.  Using "if" should not be made an even more tempting option
than it already is.

> For these switch statements, use "switch (+E)" instead of "switch (E)".
> This pacifies GCC and clearly signals to the reader that the switch's
> cases are not intended to exhaust the enum. A "switch (E)" must list all
> the enum values; a "switch (+E)" need not do so. A reasonable guideline
> is that if a switch statement has more than three "case X: break;"s then
> it may be a good idea to use "switch (+E)" instead of "switch (E)".

TBH, the syntax seems a bit hacky to me; when the fallthrough statement
attribute was added, we should have gained the ability to add attributes
to labels to indicate that *this* default label is actually useful, or
isn't, or that we do or do not want warnings about it.

However, maybe I got that all wrong: GCC has statement attributes, too,
and maybe we should add an attribute to the switch statement, not the
label.  If that can be done.

However, switch (+E) seems easier, if we only distinguish two cases.
Also easier to wrap in a macro if you must.

> Suggestion 2: Omit "default: break;"s present only to tell GCC and/or
> the reader that the switch is otherwise not exhaustive. "switch (+expr)"
> already does this more concisely and more usefully.

Total agreement there.

> I assume similar results would apply elsewhere in Emacs.

I think it's a bit of a special case, but I'm not stopping you :-)  Very
interesting idea, in any case!

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 18:27:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 13:27:13 2025
Received: from localhost ([127.0.0.1]:36254 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teega-0007SN-Sf
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 13:27:13 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:58722)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1teegX-0007S1-Vu
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 13:27:10 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 3FD433C00D408;
 Sun,  2 Feb 2025 10:27:04 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id 2Eb5EyHHwYbV; Sun,  2 Feb 2025 10:27:03 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id DE4BB3C00D409;
 Sun,  2 Feb 2025 10:27:02 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu DE4BB3C00D409
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738520822;
 bh=x533Wz/rKN0c4jKAYLD65oMMusG26hATFZkT85qiIlw=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=L6eEoAFRuFkZSMkSmavy/+WMnVqWM/MEbR7gTsnlgAixdL/AMYgTvZYaxCpPYEdBB
 VPUpbFDvh+rEvZLaMso00Jcm2QfM3/6X9YzrrcKwbPDmaflkPl4Y1NclNEWwfSoohv
 Uwdj0cmbbEeTjOPS9N6uTQNW94XTFz3eM7/uSjnMJ8Oe5QUZjU2ydCKk1nouuclmU8
 irGjUiu/o8LQPW4C4SQhcC1QMCUj/4zCKCbEuVne9f2XzpRSgZtByWm7WZCxN/oElH
 QCTEa+80GtCKQ2hQeh0PxruasCp05qMDemTPlD8qpt+2m69s8ublEOzUPNwBrPNh0n
 iYX4viGixibSA==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id ck5j6G7eQ--j; Sun,  2 Feb 2025 10:27:02 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id BB8CA3C00D408;
 Sun,  2 Feb 2025 10:27:02 -0800 (PST)
Content-Type: multipart/mixed; boundary="------------5sbiAtKUyQplUC2aZd01V6D4"
Message-ID: <c7a0c239-1941-4db5-9701-555ba950b310@HIDDEN>
Date: Sun, 2 Feb 2025 10:27:02 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87y0yo7ekg.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------5sbiAtKUyQplUC2aZd01V6D4
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 2025-02-02 03:48, Pip Cet wrote:
> I've also stayed away from lib-src for now.

Although you did look at lib-src (I see some changes there) you 
understandably did not tackle lib-src/etags.c which has many enum 
switches and gimmicks to pacify GCC. So I took a crack at etags.c and 
came up with an alternative proposal consisting of two suggestions to 
support the following goals:

* Cleanly compile with -Wswitch-enum to catch potential errors.
* A style that is easy to explain and understand.
* No changes to GCC needed for now.
* No new C macros in the Emacs source code.
* Source code that is shorter and easier to maintain.

Here's the proposal:

Suggestion 1: Don't treat all enum switch statements the same. Some enum 
switch statements merely want to treat a couple of enum values 
specially, with all other enum values being default. For these, it's 
unlikely that forcing the programmer to list a case for every enum value 
will catch many bugs; it's even possible that this would cause more 
problems than it'll cure, and it's certainly an annoyance.

For these switch statements, use "switch (+E)" instead of "switch (E)". 
This pacifies GCC and clearly signals to the reader that the switch's 
cases are not intended to exhaust the enum. A "switch (E)" must list all 
the enum values; a "switch (+E)" need not do so. A reasonable guideline 
is that if a switch statement has more than three "case X: break;"s then 
it may be a good idea to use "switch (+E)" instead of "switch (E)".

Suggestion 2: Omit "default: break;"s present only to tell GCC and/or 
the reader that the switch is otherwise not exhaustive. "switch (+expr)" 
already does this more concisely and more usefully.


Combine these two suggestions, and I made etags.c shorter (by 23 lines) 
and easier to read once you know the style. See attached patch, which 
compiles cleanly with -Wswitch-enum.

I assume similar results would apply elsewhere in Emacs.
--------------5sbiAtKUyQplUC2aZd01V6D4
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-Pacify-gcc-Wswitch-enum-in-etags.c.patch"
Content-Disposition: attachment;
 filename="0001-Pacify-gcc-Wswitch-enum-in-etags.c.patch"
Content-Transfer-Encoding: base64

RnJvbSA4Y2JkM2NlODlhMzBlMDk2ODgzMWJjYjdiNTZlZGZmMDMxYWRiZmQ4IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1
PgpEYXRlOiBTdW4sIDIgRmViIDIwMjUgMTA6MDE6NDYgLTA4MDAKU3ViamVjdDogW1BBVENI
XSBQYWNpZnkgZ2NjIC1Xc3dpdGNoLWVudW0gaW4gZXRhZ3MuYwpNSU1FLVZlcnNpb246IDEu
MApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFu
c2Zlci1FbmNvZGluZzogOGJpdAoKKiBsaWItc3JjL2V0YWdzLmMgKG1haW4sIGNvbnNpZGVy
X3Rva2VuLCBDX2VudHJpZXMpCihUZVhfY29tbWFuZHMpOiBGb3IgZXZlcnkgc3dpdGNoIChF
KSB3aXRoIGFuIGVudW0gZXhwcmVzc2lvbiBFLAplaXRoZXIgZW51bWVyYXRlIGFsbCB0aGUg
ZW51bSB2YWx1ZXMgYXMgY2FzZXMsIG9yIGlmIHRoYXTigJlzIHRvbwp2ZXJib3NlIHVzZSDi
gJhzd2l0Y2ggKEUrKeKAmSB0byBpbmRpY2F0ZSB0aGF0IGl04oCZcyBpbnRlbmRlZCB0aGF0
CndlIG5vdCBlbnVtZXJhdGUgYWxsIHRoZSBlbnVtIHZhbHVlcy4gIFJlbW92ZSDigJhkZWZh
dWx0OiBicmVhazvigJkKY2FzZXMgdGhhdCBhcmUgbm90IG5vdyBuZWVkZWQgdG8gcGFjaWZ5
IEdDQy4KLS0tCiBsaWItc3JjL2V0YWdzLmMgfCA4NSArKysrKysrKysrKysrKysrKystLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzEgaW5zZXJ0
aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliLXNyYy9ldGFncy5j
IGIvbGliLXNyYy9ldGFncy5jCmluZGV4IGI1OWI3MGM5ZWM3Li42MTlkMDc2NTg2NyAxMDA2
NDQKLS0tIGEvbGliLXNyYy9ldGFncy5jCisrKyBiL2xpYi1zcmMvZXRhZ3MuYwpAQCAtMTM5
Nyw2ICsxMzk3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAg
IHRoaXNfZmlsZSA9IGFyZ2J1ZmZlcltpXS53aGF0OwogICAgICAgICAgIHByb2Nlc3NfZmls
ZSAoc3RkaW4sIHRoaXNfZmlsZSwgbGFuZyk7CiAgICAgICAgICAgYnJlYWs7CisJY2FzZSBh
dF9lbmQ6CiAJZGVmYXVsdDoKIAkgIGVycm9yICgiaW50ZXJuYWwgZXJyb3I6IGFyZ190eXBl
Iik7CiAJfQpAQCAtMTQ0NCwxMSArMTQ0NSwxMSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCiAJICAgIHsKIAkgICAgY2FzZSBhdF9maWxlbmFtZToKIAkgICAgY2FzZSBhdF9z
dGRpbjoKKwkgICAgICBjbGVhbnVwX3RhZ3NfZmlsZSAodGFnZmlsZSwgYXJnYnVmZmVyW2ld
LndoYXQpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIGF0X2VuZDogY2FzZSBhdF9sYW5n
dWFnZTogY2FzZSBhdF9yZWdleHA6CiAJICAgICAgYnJlYWs7Ci0JICAgIGRlZmF1bHQ6Ci0J
ICAgICAgY29udGludWU7CQkvKiB0aGUgZm9yIGxvb3AgKi8KIAkgICAgfQotICAgICAgICAg
IGNsZWFudXBfdGFnc19maWxlICh0YWdmaWxlLCBhcmdidWZmZXJbaV0ud2hhdCk7CiAJfQog
ICAgICAgYXBwZW5kX3RvX3RhZ2ZpbGUgPSB0cnVlOwogICAgIH0KQEAgLTMxNDcsNyArMzE0
OCw3IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tlbiBw
b2ludGVyICovCiAJIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSB0a2V5c2VlbjoKLSAg
ICAgICBzd2l0Y2ggKHRva3R5cGUpCisgICAgICAgc3dpdGNoICgrdG9rdHlwZSkKIAkgewog
CSBjYXNlIHN0X25vbmU6CiAJIGNhc2Ugc3RfQ19jbGFzczoKQEAgLTMxNTUsOCArMzE1Niw2
IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tlbiBwb2lu
dGVyICovCiAJIGNhc2Ugc3RfQ19lbnVtOgogCSAgIHR5cGRlZiA9IHR0eXBlc2VlbjsKIAkg
ICBicmVhazsKLQkgZGVmYXVsdDoKLQkgICBicmVhazsKIAkgfQogICAgICAgIGJyZWFrOwog
ICAgICBjYXNlIHR0eXBlc2VlbjoKQEAgLTMxNjcsNyArMzE2Niw3IEBAIGNvbnNpZGVyX3Rv
a2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tlbiBwb2ludGVyICovCiAJIH0KICAg
ICAgICBicmVhazsKICAgICAgY2FzZSB0ZW5kOgotICAgICAgIHN3aXRjaCAodG9rdHlwZSkK
KyAgICAgICBzd2l0Y2ggKCt0b2t0eXBlKQogCSB7CiAJIGNhc2Ugc3RfQ19jbGFzczoKIAkg
Y2FzZSBzdF9DX3N0cnVjdDoKQEAgLTMxNzYsMTEgKzMxNzUsMTEgQEAgY29uc2lkZXJfdG9r
ZW4gKGNoYXIgKnN0ciwJICAgICAgLyogSU46IHRva2VuIHBvaW50ZXIgKi8KIAkgZGVmYXVs
dDoKIAkgICByZXR1cm4gdHJ1ZTsKIAkgfQotICAgICBkZWZhdWx0OgorICAgICBjYXNlIHRp
bmJvZHk6IGNhc2UgdGlnbm9yZToKICAgICAgICBicmVhazsKICAgICAgfQogCi0gICBzd2l0
Y2ggKHRva3R5cGUpCisgICBzd2l0Y2ggKCt0b2t0eXBlKQogICAgICB7CiAgICAgIGNhc2Ug
c3RfQ19qYXZhc3RydWN0OgogICAgICAgIGlmIChzdHJ1Y3RkZWYgPT0gc3RhZ3NlZW4pCkBA
IC0zMjEwLDggKzMyMDksNiBAQCBjb25zaWRlcl90b2tlbiAoY2hhciAqc3RyLAkgICAgICAv
KiBJTjogdG9rZW4gcG9pbnRlciAqLwogCSAgICAgZnZkZWYgPSBmdm5vbmU7CiAJIH0KICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7CiAgICAg
IH0KIAogICAgaWYgKHN0cnVjdGRlZiA9PSBza2V5c2VlbikKQEAgLTMyMjcsNyArMzIyNCw3
IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tlbiBwb2lu
dGVyICovCiAgICBzd2l0Y2ggKG9iamRlZikKICAgICAgewogICAgICBjYXNlIG9ub25lOgot
ICAgICAgIHN3aXRjaCAodG9rdHlwZSkKKyAgICAgICBzd2l0Y2ggKCt0b2t0eXBlKQogCSB7
CiAJIGNhc2Ugc3RfQ19vYmpwcm90OgogCSAgIG9iamRlZiA9IG9wcm90b2NvbDsKQEAgLTMy
MzUsOCArMzIzMiw2IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElO
OiB0b2tlbiBwb2ludGVyICovCiAJIGNhc2Ugc3RfQ19vYmppbXBsOgogCSAgIG9iamRlZiA9
IG9pbXBsZW1lbnRhdGlvbjsKIAkgICByZXR1cm4gZmFsc2U7Ci0JIGRlZmF1bHQ6Ci0JICAg
YnJlYWs7CiAJIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBvaW1wbGVtZW50YXRpb246
CkBAIC0zMjk2LDE2ICszMjkxLDE2IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAg
ICAgIC8qIElOOiB0b2tlbiBwb2ludGVyICovCiAJICAgb2JqZGVmID0gb25vbmU7CiAJIH0K
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgIGRlZmF1bHQ6CisgICAgIGNhc2Ugb2NhdHNl
ZW46IGNhc2Ugb21ldGhvZHRhZzogY2FzZSBvdGFnc2VlbjoKICAgICAgICBicmVhazsKICAg
ICAgfQogCiAgICAvKiBBIGZ1bmN0aW9uLCB2YXJpYWJsZSBvciBlbnVtIGNvbnN0YW50PyAq
LwotICAgc3dpdGNoICh0b2t0eXBlKQorICAgc3dpdGNoICgrdG9rdHlwZSkKICAgICAgewog
ICAgICBjYXNlIHN0X0NfZXh0ZXJuOgogICAgICAgIGZ2ZXh0ZXJuID0gdHJ1ZTsKLSAgICAg
ICBzd2l0Y2ggIChmdmRlZikKKyAgICAgICBzd2l0Y2ggKCtmdmRlZikKIAkgewogCSBjYXNl
IGZpbmxpc3Q6CiAJIGNhc2UgZmxpc3RzZWVuOgpAQCAtMzMzMiw3ICszMzI3LDcgQEAgY29u
c2lkZXJfdG9rZW4gKGNoYXIgKnN0ciwJICAgICAgLyogSU46IHRva2VuIHBvaW50ZXIgKi8K
IAkgICAgICBjb25zdGFudHMuICAqLwogCSAgICYmIGZ2ZGVmICE9IHZpZ25vcmUpCiAJIHJl
dHVybiB0cnVlOwkJLyogZW51bSBjb25zdGFudCAqLwotICAgICAgIHN3aXRjaCAoZnZkZWYp
CisgICAgICAgc3dpdGNoICgrZnZkZWYpCiAJIHsKIAkgY2FzZSBmZGVmdW5rZXk6CiAJICAg
aWYgKGJyYWNlbGV2ID4gMCkKQEAgLTMzNDEsNyArMzMzNiw3IEBAIGNvbnNpZGVyX3Rva2Vu
IChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tlbiBwb2ludGVyICovCiAJICAgKmlzX2Z1
bmNfb3JfdmFyID0gdHJ1ZTsKIAkgICByZXR1cm4gdHJ1ZTsKIAkgY2FzZSBmdm5vbmU6Ci0J
ICAgc3dpdGNoICh0eXBkZWYpCisJICAgc3dpdGNoICgrdHlwZGVmKQogCSAgICAgewogCSAg
ICAgY2FzZSB0dHlwZXNlZW46CiAJICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMzNTMsOCAr
MzM0OCw2IEBAIGNvbnNpZGVyX3Rva2VuIChjaGFyICpzdHIsCSAgICAgIC8qIElOOiB0b2tl
biBwb2ludGVyICovCiAJCSAgIHJldHVybiBmYWxzZTsKIAkJIH0KIAkgICAgICAgYnJlYWs7
Ci0JICAgICBkZWZhdWx0OgotCSAgICAgICBicmVhazsKIAkgICAgIH0KIAkgICBGQUxMVEhS
T1VHSDsKIAkgIGNhc2UgZnZuYW1lc2VlbjoKQEAgLTMzNzEsMTIgKzMzNjQsOCBAQCBjb25z
aWRlcl90b2tlbiAoY2hhciAqc3RyLAkgICAgICAvKiBJTjogdG9rZW4gcG9pbnRlciAqLwog
CSAgZnZkZWYgPSBmdm5hbWVzZWVuOwkvKiBmdW5jdGlvbiBvciB2YXJpYWJsZSAqLwogCSAg
KmlzX2Z1bmNfb3JfdmFyID0gdHJ1ZTsKIAkgIHJldHVybiB0cnVlOwotCSBkZWZhdWx0Ogot
CSAgIGJyZWFrOwogCX0KICAgICAgIGJyZWFrOwotICAgICBkZWZhdWx0OgotICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICByZXR1cm4gZmFsc2U7CkBAIC0zNTgxLDcgKzM1NzAsNyBAQCBD
X2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBDICovCiAJICAgIGNvbnRp
bnVlOwogCSAgaWYgKGluYXR0cmlidXRlKQogCSAgICBicmVhazsKLQkgIHN3aXRjaCAoZnZk
ZWYpCisJICBzd2l0Y2ggKCtmdmRlZikKIAkgICAgewogCSAgICBjYXNlIGZkZWZ1bmtleToK
IAkgICAgY2FzZSBmc3RhcnRsaXN0OgpAQCAtMzg4Myw3ICszODcyLDcgQEAgQ19lbnRyaWVz
IChpbnQgY19leHQsCQkvKiBleHRlbnNpb24gb2YgQyAqLwogCSAgICAgIHN3aXRjaCAoZGVm
aW5lZGVmKQogCQl7CiAJCWNhc2UgZG5vbmU6Ci0JCSAgc3dpdGNoIChmdmRlZikKKwkJICBz
d2l0Y2ggKCtmdmRlZikKIAkJICAgIHsKIAkJICAgIGNhc2UgZnN0YXJ0bGlzdDoKIAkJICAg
ICAgLyogVGhpcyBwcmV2ZW50cyB0YWdnaW5nIGZiIGluCkBAIC0zODk4LDggKzM4ODcsNiBA
QCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBDICovCiAJCQkgIGZ2
ZGVmID0gZmlnbm9yZTsKIAkJCX0KIAkJICAgICAgYnJlYWs7Ci0JCSAgICBkZWZhdWx0Ogot
CQkgICAgICBicmVhazsKIAkJICAgIH0KIAkJICBpZiAoc3RydWN0ZGVmID09IHN0YWdzZWVu
ICYmICFjamF2YSkKIAkJICAgIHsKQEAgLTM5MTAsNyArMzg5Nyw3IEBAIENfZW50cmllcyAo
aW50IGNfZXh0LAkJLyogZXh0ZW5zaW9uIG9mIEMgKi8KIAkJY2FzZSBkc2hhcnBzZWVuOgog
CQkgIHNhdmV0b2tlbiA9IHRva2VuOwogCQkgIGJyZWFrOwotCQlkZWZhdWx0OgorCQljYXNl
IGRkZWZpbmVzZWVuOiBjYXNlIGRpZ25vcmVyZXN0OgogCQkgIGJyZWFrOwogCQl9CiAJICAg
ICAgaWYgKCF5YWNjX3J1bGVzIHx8IGxwID09IG5ld2xiLmJ1ZmZlciArIDEpCkBAIC0zOTM4
LDcgKzM5MjUsNyBAQCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBD
ICovCiAJICAgIH0KIAkgIGlmIChkZWZpbmVkZWYgIT0gZG5vbmUpCiAJICAgIGJyZWFrOwot
CSAgc3dpdGNoIChvYmpkZWYpCisJICBzd2l0Y2ggKCtvYmpkZWYpCiAJICAgIHsKIAkgICAg
Y2FzZSBvdGFnc2VlbjoKIAkgICAgICBvYmpkZWYgPSBvaWdub3JlOwpAQCAtMzk1NCw4ICsz
OTQxLDYgQEAgQ19lbnRyaWVzIChpbnQgY19leHQsCQkvKiBleHRlbnNpb24gb2YgQyAqLwog
CQkgIHN0cmNweSAodG9rZW5fbmFtZS5idWZmZXIgKyB0b2tsZW4sICI6Iik7CiAJCX0KIAkg
ICAgICBicmVhazsKLQkgICAgZGVmYXVsdDoKLQkgICAgICBicmVhazsKIAkgICAgfQogCSAg
aWYgKHN0cnVjdGRlZiA9PSBzdGFnc2VlbikKIAkgICAgewpAQCAtMzk4NCw3ICszOTY5LDcg
QEAgQ19lbnRyaWVzIChpbnQgY19leHQsCQkvKiBleHRlbnNpb24gb2YgQyAqLwogCSAgICBj
YXNlIHRub25lOgogCSAgICBjYXNlIHRpbmJvZHk6CiAJICAgIGNhc2UgdGlnbm9yZToKLQkg
ICAgICBzd2l0Y2ggKGZ2ZGVmKQorCSAgICAgIHN3aXRjaCAoK2Z2ZGVmKQogCQl7CiAJCWNh
c2UgZmlnbm9yZToKIAkJICBpZiAodHlwZGVmID09IHRpZ25vcmUgfHwgY3BscGwpCkBAIC00
MDE2LDYgKzQwMDEsNyBAQCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBv
ZiBDICovCiAJCSAgICB0b2tlbi52YWxpZCA9IGZhbHNlOwogCQl9IC8qIHN3aXRjaCAoZnZk
ZWYpICovCiAJICAgICAgRkFMTFRIUk9VR0g7CisJICAgIGNhc2UgdGtleXNlZW46CiAJICAg
IGRlZmF1bHQ6CiAJICAgICAgaWYgKCFpbnN0cnVjdCkKIAkJdHlwZGVmID0gdG5vbmU7CkBA
IC00MDI2LDE1ICs0MDEyLDEzIEBAIENfZW50cmllcyAoaW50IGNfZXh0LAkJLyogZXh0ZW5z
aW9uIG9mIEMgKi8KIAljYXNlICcsJzoKIAkgIGlmIChkZWZpbmVkZWYgIT0gZG5vbmUgfHwg
aW5hdHRyaWJ1dGUpCiAJICAgIGJyZWFrOwotCSAgc3dpdGNoIChvYmpkZWYpCisJICBzd2l0
Y2ggKCtvYmpkZWYpCiAJICAgIHsKIAkgICAgY2FzZSBvbWV0aG9kdGFnOgogCSAgICBjYXNl
IG9tZXRob2RwYXJtOgogCSAgICAgIG1ha2VfQ190YWcgKHRydWUpOyAvKiBhbiBPYmplY3Rp
dmUgQyBtZXRob2QgKi8KIAkgICAgICBvYmpkZWYgPSBvaW5ib2R5OwogCSAgICAgIGJyZWFr
OwotCSAgICBkZWZhdWx0OgotCSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBzd2l0Y2ggKGZ2
ZGVmKQogCSAgICB7CkBAIC00MDcxLDYgKzQwNTUsNyBAQCBDX2VudHJpZXMgKGludCBjX2V4
dCwJCS8qIGV4dGVuc2lvbiBvZiBDICovCiAJCWZ2ZGVmID0gZnZub25lOwogCSAgICAgIHRv
a2VuLnZhbGlkID0gZmFsc2U7CiAJICAgICAgYnJlYWs7CisJICAgIGNhc2UgZnZub25lOgog
CSAgICBkZWZhdWx0OgogCSAgICAgIGZ2ZGVmID0gZnZub25lOwogCSAgICB9CkBAIC00MDkz
LDcgKzQwNzgsNyBAQCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBD
ICovCiAJICAgICAgYnJlYWs7CiAJICAgIGNhc2UgdG5vbmU6CiAJICAgIGNhc2UgdGluYm9k
eToKLQkgICAgICBzd2l0Y2ggKGZ2ZGVmKQorCSAgICAgIHN3aXRjaCAoK2Z2ZGVmKQogCQl7
CiAJCWNhc2UgZm9wZXJhdG9yOgogCQljYXNlIGZpbmxpc3Q6CkBAIC00MTEwLDcgKzQwOTUs
NyBAQCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBDICovCiAJCSAg
ZnZkZWYgPSBmdm5vbmU7CiAJCX0KIAkgICAgICBicmVhazsKLQkgICAgZGVmYXVsdDoKKwkg
ICAgY2FzZSB0aWdub3JlOiBjYXNlIHRrZXlzZWVuOgogCSAgICAgIGJyZWFrOwogCSAgICB9
CiAJICBicmVhazsKQEAgLTQxMjQsNyArNDEwOSw3IEBAIENfZW50cmllcyAoaW50IGNfZXh0
LAkJLyogZXh0ZW5zaW9uIG9mIEMgKi8KIAkgICAgYnJlYWs7CiAJICBpZiAob2JqZGVmID09
IG90YWdzZWVuICYmIHBhcmxldiA9PSAwKQogCSAgICBvYmpkZWYgPSBvcGFyZW5zZWVuOwot
CSAgc3dpdGNoIChmdmRlZikKKwkgIHN3aXRjaCAoK2Z2ZGVmKQogCSAgICB7CiAJICAgIGNh
c2UgZnZuYW1lc2VlbjoKIAkgICAgICBpZiAodHlwZGVmID09IHR0eXBlc2VlbgpAQCAtNDE0
NSw4ICs0MTMwLDYgQEAgQ19lbnRyaWVzIChpbnQgY19leHQsCQkvKiBleHRlbnNpb24gb2Yg
QyAqLwogCSAgICBjYXNlIGZsaXN0c2VlbjoKIAkgICAgICBmdmRlZiA9IGZpbmxpc3Q7CiAJ
ICAgICAgYnJlYWs7Ci0JICAgIGRlZmF1bHQ6Ci0JICAgICAgYnJlYWs7CiAJICAgIH0KIAkg
IHBhcmxldisrOwogCSAgYnJlYWs7CkBAIC00MTcyLDE0ICs0MTU1LDEyIEBAIENfZW50cmll
cyAoaW50IGNfZXh0LAkJLyogZXh0ZW5zaW9uIG9mIEMgKi8KIAkgICAgfQogCSAgaWYgKC0t
cGFybGV2ID09IDApCiAJICAgIHsKLQkgICAgICBzd2l0Y2ggKGZ2ZGVmKQorCSAgICAgIHN3
aXRjaCAoK2Z2ZGVmKQogCQl7CiAJCWNhc2UgZnN0YXJ0bGlzdDoKIAkJY2FzZSBmaW5saXN0
OgogCQkgIGZ2ZGVmID0gZmxpc3RzZWVuOwogCQkgIGJyZWFrOwotCQlkZWZhdWx0OgotCQkg
IGJyZWFrOwogCQl9CiAJICAgICAgaWYgKCFpbnN0cnVjdAogCQkgICYmICh0eXBkZWYgPT0g
dGVuZApAQCAtNDIwMiw3ICs0MTgzLDcgQEAgQ19lbnRyaWVzIChpbnQgY19leHQsCQkvKiBl
eHRlbnNpb24gb2YgQyAqLwogCSAgICAgIHR5cGRlZiA9IHRpbmJvZHk7CiAJICAgICAgdHlw
ZGVmYnJhY2VsZXYgPSBicmFjZWxldjsKIAkgICAgfQotCSAgc3dpdGNoIChmdmRlZikKKwkg
IHN3aXRjaCAoK2Z2ZGVmKQogCSAgICB7CiAJICAgIGNhc2UgZmxpc3RzZWVuOgogCSAgICAg
IGlmIChjcGxwbCAmJiAhY2xhc3NfcXVhbGlmeSkKQEAgLTQyMzMsNyArNDIxNCw3IEBAIENf
ZW50cmllcyAoaW50IGNfZXh0LAkJLyogZXh0ZW5zaW9uIG9mIEMgKi8KIAkgICAgICBmdmRl
ZiA9IGZ2bm9uZTsKIAkgICAgICBicmVhazsKIAkgICAgY2FzZSBmdm5vbmU6Ci0JICAgICAg
c3dpdGNoIChvYmpkZWYpCisJICAgICAgc3dpdGNoICgrb2JqZGVmKQogCQl7CiAJCWNhc2Ug
b3RhZ3NlZW46CiAJCSAgbWFrZV9DX3RhZyAodHJ1ZSk7IC8qIGFuIE9iamVjdGl2ZSBDIGNs
YXNzICovCkBAIC00MjUxLDggKzQyMzIsNiBAQCBDX2VudHJpZXMgKGludCBjX2V4dCwJCS8q
IGV4dGVuc2lvbiBvZiBDICovCiAJCSAgICBicmFjZWxldiA9IC0xOwogCQl9CiAJICAgICAg
YnJlYWs7Ci0JICAgIGRlZmF1bHQ6Ci0JICAgICAgYnJlYWs7CiAJICAgIH0KIAkgIHN3aXRj
aCAoc3RydWN0ZGVmKQogCSAgICB7CkBAIC00MjY2LDcgKzQyNDUsNyBAQCBDX2VudHJpZXMg
KGludCBjX2V4dCwJCS8qIGV4dGVuc2lvbiBvZiBDICovCiAJICAgICAgc3RydWN0ZGVmID0g
c25vbmU7CiAJICAgICAgbWFrZV9DX3RhZyAoZmFsc2UpOyAgLyogYSBzdHJ1Y3Qgb3IgZW51
bSAqLwogCSAgICAgIGJyZWFrOwotCSAgICBkZWZhdWx0OgorCSAgICBjYXNlIHNub25lOgog
CSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBicmFjZWxldiArPSAxOwpAQCAtNDMxNiw3ICs0
Mjk1LDcgQEAgQ19lbnRyaWVzIChpbnQgY19leHQsCQkvKiBleHRlbnNpb24gb2YgQyAqLwog
CWNhc2UgJz0nOgogCSAgaWYgKGRlZmluZWRlZiAhPSBkbm9uZSkKIAkgICAgYnJlYWs7Ci0J
ICBzd2l0Y2ggKGZ2ZGVmKQorCSAgc3dpdGNoICgrZnZkZWYpCiAJICAgIHsKIAkgICAgY2Fz
ZSBmb3BlcmF0b3I6CiAJICAgIGNhc2UgZmlubGlzdDoKQEAgLTQzNjEsNyArNDM0MCw3IEBA
IENfZW50cmllcyAoaW50IGNfZXh0LAkJLyogZXh0ZW5zaW9uIG9mIEMgKi8KIAkgIGlmIChk
ZWZpbmVkZWYgIT0gZG5vbmUpCiAJICAgIGJyZWFrOwogCSAgLyogVGhlc2Ugc3VyZWx5IGNh
bm5vdCBmb2xsb3cgYSBmdW5jdGlvbiB0YWcgaW4gQy4gKi8KLQkgIHN3aXRjaCAoZnZkZWYp
CisJICBzd2l0Y2ggKCtmdmRlZikKIAkgICAgewogCSAgICBjYXNlIGZvcGVyYXRvcjoKIAkg
ICAgY2FzZSBmaW5saXN0OgpAQCAtNjAwNiw4ICs1OTg1LDYgQEAgVGVYX2NvbW1hbmRzIChG
SUxFICppbmYpCiAJCQkJZ290byB0ZXhfbmV4dF9saW5lOwogCQkJICB9CiAJCQlicmVhazsK
LQkJICAgICAgZGVmYXVsdDoKLQkJCWJyZWFrOwogCQkgICAgICB9CiAJCSAgfQogCQluYW1l
bGVuID0gcCAtIGNwOwotLSAKMi40NS4yCgo=

--------------5sbiAtKUyQplUC2aZd01V6D4--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 17:35:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 12:35:53 2025
Received: from localhost ([127.0.0.1]:36105 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedsu-0001uF-LV
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:35:53 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:49328)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tedss-0001tx-78
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:35:51 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tedsl-0004BE-Jt; Sun, 02 Feb 2025 12:35:43 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=tAF7/nvCRk0L1oumVpv5jPeSRnAfH89677NfxanYnmQ=; b=DDOh0+KeaZXi
 Hj2TsqNCaEjD93FP9bZTzr5RIEIDmCTEQVEey3rWPQjY2aaf3jhMxIKVnKNlByKuXSyxH9IEJ67fb
 oYb9hy2a8YQJjdcrZJLS+S1qiuCmK/a2sSehi91aOWHvfn6z1Uy8sfxXtYUZf1y2Z5jZS7MUhGC3y
 lH/NkoLnlUbcODaVw1HxkyuwvBoXDttQ7meRKdweU8SmQmHMurUT3lLG7bj/aCtrzkg2J+fzSK1qg
 9368DLWo0K0axHEajkjVLLDRRiTJU/+hdltmjSRmiAAcT2QtdD6f5QtxP/0eJ4mC3QDXIfyS4mpX5
 LD02D3EZT/GXbsdA5zrnMg==;
Date: Sun, 02 Feb 2025 19:35:41 +0200
Message-Id: <86lduockr6.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87seow5lht.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 17:02:04 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86v7tscvmy.fsf@HIDDEN> <87seow5lht.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 17:02:04 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, acorallo@HIDDEN, monnier@HIDDEN
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> > This is an example of code where some value of an enumeration need
> > special handling, and the rest don't need any handling at all.  IMO,
> > we should ask ourselves what are we trying to accomplish by spelling
> > out all of the "other" values instead of just 'default'?  If we only
> > care for a handful of values, what kind of errors could slip us if we
> > use 'default'?
> 
> As someone who's not very familiar with the bidi code, I would feel most
> comfortable if this switch, with all cases, were in an inline function
> which decides whether we set l2r_seen, r2l_seen, or neither, in this
> context.  Ideally, in my case, with further comments, though trying to
> understand this code without studying the Unicode Bidirectional
> Algorithm will always be foolish...

The bidi.c code is in many places in the shape it is because it tries
to closely follow the description in the UBA, so as to make the
understanding of what the code does easier without drowning it in
comments.

If the goal here is to make sure we never miss a type is to invent a
new category, which includes only the 4 types mentioned in the switch,
and then do the switch only for that category.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 17:31:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 12:31:05 2025
Received: from localhost ([127.0.0.1]:36097 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedoH-0001gB-Dc
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:31:05 -0500
Received: from mail-10629.protonmail.ch ([79.135.106.29]:57145)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tedoF-0001fa-3j
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:31:03 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738517453; x=1738776653;
 bh=OWR5JzcjgNTKR58E2QBxcmo4Rmqh0lqbETLRPP4J2eM=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=QEmB7Smb5RkBFFIK+EiRd35vsagR4bUDvmIyb6EWMhTE9DKkssMvgb5jpqkQEZaEl
 W9Ag751DmfQdRuqwYVp0d/n3d8O/guSvgkAtZistIHTdoOf1GQ38uq5sOKo7E5YYuS
 vOs5469U8v40I7H0wF0evwiW1nup9uJpUe1YxIXA6DAMAFZCWcqOLISNnlQbuP6BxJ
 rnbYIVuTBj0Bj0/vFFHRZFPrnxeyEvPLx60NhsNmtTCuFhx+WtWKhlKQ3O6bhm3h0u
 cFdkz8HlvbB6AWOiefIgDk+toYAqg7vdBPUK8kGASCCBM9y4AU6E00dDXAP+Lm649l
 PWC/cTn0zxw8Q==
Date: Sun, 02 Feb 2025 17:30:50 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87msf445lf.fsf@HIDDEN>
In-Reply-To: <86o6zkclep.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86wme8cwij.fsf@HIDDEN> <871pwg70jv.fsf@HIDDEN>
 <86o6zkclep.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 61befe9ef832da681bc5cdee837a4959504e33d0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -1.0 (-)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.0 (--)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 16:51:30 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, a=
corallo@HIDDEN, monnier@HIDDEN
>>
>> "Eli Zaretskii" <eliz@HIDDEN> writes:
>>
>> >> We often use eassert for that, and I don't know how many people reali=
ze
>> >> this subtle difference between emacs_abort () and eassert (0).
>> >
>> > Well, I do: eassert compiles to nothing in a production build, so it
>> > is only okay if the code can do something with the situation, albeit
>> > something that will cause weird effects.  eassert is also appropriate
>> > to convey the assumptions made by the code, even if no trouble will be
>> > caused by violating those assumptions.
>>
>> Interesting.  I often use eassert where the only thing we can do in a
>> production build is almost certainly a crash.  Can you say more about
>> cases in which it's used to avoid crashes?
>
> No, eassert should _never_ be used to avoid crashes.  It should be
> used to flag problems (by forcing a crash) before the mistaken code
> causes too much harm, with the purpose of helping us find problems
> before they become very hard to analyze.

Sorry, I misunderstood.  I agree completely with this statement, and was
confused by "the code can do something with the situation".

> A crash can only be avoided if we have a fallback code that can do
> something reasonable with an impossible situation, like signaling an
> error or silently skipping some action.

Agreed.  eassert is definitely not good for that.

>
>> >> I still think eassume and eassert shouldn't evaluate expressions with
>> >> side effects.
>> >
>> > I agree.  Do we have code which does that in Emacs?
>>
>> I'm aware of
>>
>>       eassert (check_comp_unit_relocs (comp_u));
>>
>> in comp.c, which does call an extra function, which might in theory have
>> side effects because dynlib_sym or Flength or, God forbid, Fgethash may
>> develop some.  But, really, this is a special case and a very minor
>> issue.
>
> I'm quite sure there was no intention for the above to cause any side
> effects.

Yes, which is why it's only technically an example.  If I see

eassert (i++ < len)

I'll let you know :-)

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 17:27:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 12:27:26 2025
Received: from localhost ([127.0.0.1]:36084 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedkk-0001Rw-6Y
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:27:26 -0500
Received: from mail-40131.protonmail.ch ([185.70.40.131]:50125)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tedkg-0001Rb-M2
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:27:23 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738517235; x=1738776435;
 bh=J6/B5BQ9FITjqOZjnM2sot2CTi9UWfN8eS3/HQGSq4w=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=nP18gDszZ8VVH4QhKjQV/rikpyPGd+FyCCitBjO6SuJAv7KKKlvE430fKQtrHDL5w
 JuuQ2G2hXKk10Wif7ZjkkGmgTNxXzzHHWRtllQEBZwiFWjP+4PHJFYhuWxfqT9Aw2k
 XXZoyxUqtdpV5zFbvuwLqPugGxsfjjabODBPEViafDT58tLCb8RyJTpRxCD50amWY5
 m5QCWvd9UQfERqKlM/w8foJMoftc/hq5N1QR75dcTig2BQSys3QrEFp3hUvDHM9e0I
 82d55Ex9dS9DYfdvc2JT2Dsino3pYmtE4sqgXjeEIXaUjuoMhje+b6mPHk4IRDhvSg
 jVA4RtwuZQiqA==
Date: Sun, 02 Feb 2025 17:27:11 +0000
To: Stefan Kangas <stefankangas@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87seow45ri.fsf@HIDDEN>
In-Reply-To: <CADwFkm=PqeaJpzsp5te9QzkHWvPGYjCCTgm8WTZGY4tzeg7bbg@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN> <86o6znhzh1.fsf@HIDDEN>
 <87h65fdps6.fsf@HIDDEN> <86jzabhvul.fsf@HIDDEN>
 <CADwFkm=PqeaJpzsp5te9QzkHWvPGYjCCTgm8WTZGY4tzeg7bbg@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 6875365e04d3f697c9d8a52c9d5fd3bdfe8fa6e9
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Stefan Kangas" <stefankangas@HIDDEN> writes:

> Eli Zaretskii <eliz@HIDDEN> writes:
>
>> It would indeed be wise to stop pushing changes in this area as long
>> as we are not sure what would be the best solution.
>>
>> Stefan, do you agree?
>
> Yes.  Let's decide what's the best way forward here before making any
> further changes.

Agreed.  I thought there might be a one-time benefit, but I haven't had
time to look at the places where I was confused about a case not being
handled...  Anyway, I have the GCC option in my tree now and no one can
take it away from me :-)

> The recent reverts by Pip Cet seems like a good step.

Just for the record, I proposed but did not push those.  I don't think
that changes anything, though.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 17:21:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 12:21:50 2025
Received: from localhost ([127.0.0.1]:36059 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedfJ-0001BQ-OV
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:21:50 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:55070)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tedfG-0001BB-SI
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:21:48 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tedf9-0002Oj-Tn; Sun, 02 Feb 2025 12:21:39 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=IIse23yMKhkU48FjnW3FhJ1Ehd1gR6ZAp31T8y6XFg4=; b=cQ+ITotUKhdu
 9mdtwptUEdUXOKt8596hIZosbCEWUCoCyaMxT2mnK1DRtCAO3okra0GzJjFVTn2m6V9SxYSACtMhV
 TVqDBzYPET3R6DJ/ZxzrPc/9Dl6Mgnd4KiyF5QhNDU88guTmb/fbBYVWEUB2+JDyw9k1hbNAOQ8TZ
 mozcr6G3xnpa30YX2fedvSMT5uCeqDuS0H0Ndc961Ka+E9MAqu64LC46ZVYfLmPjzvDrvGwSNAuAf
 BSq4/Q+IsJzhoZMX1B/Z2CrR+4Yuf/q/fqOxVNjoQEafZLypWyPudqPk0FjMMCxraoK/3aImgpKJG
 M3u3uDzCQY5BjyBlrAqSag==;
Date: Sun, 02 Feb 2025 19:21:34 +0200
Message-Id: <86o6zkclep.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <871pwg70jv.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 16:51:30 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86wme8cwij.fsf@HIDDEN> <871pwg70jv.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 16:51:30 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, acorallo@HIDDEN, monnier@HIDDEN
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> >> We often use eassert for that, and I don't know how many people realize
> >> this subtle difference between emacs_abort () and eassert (0).
> >
> > Well, I do: eassert compiles to nothing in a production build, so it
> > is only okay if the code can do something with the situation, albeit
> > something that will cause weird effects.  eassert is also appropriate
> > to convey the assumptions made by the code, even if no trouble will be
> > caused by violating those assumptions.
> 
> Interesting.  I often use eassert where the only thing we can do in a
> production build is almost certainly a crash.  Can you say more about
> cases in which it's used to avoid crashes?

No, eassert should _never_ be used to avoid crashes.  It should be
used to flag problems (by forcing a crash) before the mistaken code
causes too much harm, with the purpose of helping us find problems
before they become very hard to analyze.

A crash can only be avoided if we have a fallback code that can do
something reasonable with an impossible situation, like signaling an
error or silently skipping some action.

> >> I still think eassume and eassert shouldn't evaluate expressions with
> >> side effects.
> >
> > I agree.  Do we have code which does that in Emacs?
> 
> I'm aware of
> 
>       eassert (check_comp_unit_relocs (comp_u));
> 
> in comp.c, which does call an extra function, which might in theory have
> side effects because dynlib_sym or Flength or, God forbid, Fgethash may
> develop some.  But, really, this is a special case and a very minor
> issue.

I'm quite sure there was no intention for the above to cause any side
effects.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 17:02:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 12:02:19 2025
Received: from localhost ([127.0.0.1]:36032 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedMR-0000FN-BT
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:02:19 -0500
Received: from mail-40131.protonmail.ch ([185.70.40.131]:63787)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tedMP-0000F5-1M
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 12:02:18 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738515730; x=1738774930;
 bh=c/oaDezSqzva0TnF4h3AfrYnScHrK5lIrMR2ik0MgzU=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=LV3mmbwvLaM7aTFXSZiAcfY7TBpgZsQqJAOPnRp/oc/cSUNZ1g4TgbwU8Xqo7ueBp
 JjNKDgmv54ClPn3Lkn2os+e8WLRkqBKCTMG2V5qHKqVC4LvdAwiWrBJXgKdn4FcJvd
 VJiWpLgJ8W2rwu7IYxr8h1KQkyRt1m5HjvOvimv6npUDLoGU7WiEkDR0iRzXuqbe73
 pcuExJmfnxwRViWGCUJrFcjQ+T7xObuW4OjFibzloa9nT3sN7pbdyx+Xb9m6cofy2p
 08Zg9Fy3luBZCHFHCwNF4xM/R5REE47vNY0oSm9bKYFzPeF0WF/9wvYAQTI32XYISE
 mJSGDtVBDsDug==
Date: Sun, 02 Feb 2025 17:02:04 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87seow5lht.fsf@HIDDEN>
In-Reply-To: <86v7tscvmy.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86v7tscvmy.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: c8e964d4cf8dec10f6a7ede4b3ac12b141aa906c
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 12:50:15 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, A=
ndrea Corallo <acorallo@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
>>
>> Looking at bidi.c, I find bidi_get_type, which is essentially a single
>> switch statement, much easier to read than the new long switch statement
>> in in bidi_find_bracket_pairs:
>>
>> =09      switch (bidi_it->type)
>> =09=09{
>> =09=09case STRONG_L:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 0
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  l2r_seen =3D true;
>> =09=09  break;
>> =09=09case STRONG_R:
>> =09=09case WEAK_EN:
>> =09=09case WEAK_AN:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 1
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  r2l_seen =3D true;
>> =09=09  break;
>> =09=09case UNKNOWN_BT:
>> =09=09case WEAK_BN:
>> =09=09case NEUTRAL_B:
>> =09=09case STRONG_AL:
>> =09=09case LRE:
>> =09=09case LRO:
>> =09=09case RLE:
>> =09=09case RLO:
>> =09=09case PDF:
>> =09=09case LRI:
>> =09=09case RLI:
>> =09=09case FSI:
>> =09=09case PDI:
>> =09=09case WEAK_ES:
>> =09=09case WEAK_ET:
>> =09=09case WEAK_CS:
>> =09=09case WEAK_NSM:
>> =09=09case NEUTRAL_S:
>> =09=09case NEUTRAL_WS:
>> =09=09case NEUTRAL_ON:
>> =09=09default: =09=09  break;
>> =09=09}
>
> This is an example of code where some value of an enumeration need
> special handling, and the rest don't need any handling at all.  IMO,
> we should ask ourselves what are we trying to accomplish by spelling
> out all of the "other" values instead of just 'default'?  If we only
> care for a handful of values, what kind of errors could slip us if we
> use 'default'?

As someone who's not very familiar with the bidi code, I would feel most
comfortable if this switch, with all cases, were in an inline function
which decides whether we set l2r_seen, r2l_seen, or neither, in this
context.  Ideally, in my case, with further comments, though trying to
understand this code without studying the Unicode Bidirectional
Algorithm will always be foolish...

However, I think bidi.c is the file I most strongly feel would not
benefit from -Wswitch-enum.

>> I think that could be rewritten to be more readable in a number of ways,
>> including, of course, putting a #pragma in.
>
> IMO, the way it should be rewritten (or not) depends on the answer to
> the above question.

Agreed.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 16:54:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 11:54:17 2025
Received: from localhost ([127.0.0.1]:36018 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedEe-0008FS-JZ
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 11:54:16 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:14473)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tedEb-0008F7-Hs
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 11:54:14 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738515247; x=1738774447;
 bh=RWmvF5+sW72Wre/UYqwcQUmohf3J3EflH4Fndl0syAY=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=eWX6a3zcK0/PWjI8UCCm9W6RHNaVH4bnSfhQB7rDVzdF6hUATT0toSu5l5IYEnU4G
 6d2ty6OOsXbWMkf7VJurdPGRLPJqlswkp4UpgcmlR4Ki9qPMnPGDFXH2jzMndzq2Oh
 Z0FgzPHAgsExmPayLLI3HYrw+zAPji1a1CTJEjzjnUjK0c0g3orTL5tEiBFfn+nUnm
 tsCBwvCaAASgEE00+yiM3V2IgdpTdscTCM4qlhU0oQe57S3iAeo0T229YdESUIdDYg
 YzzJz1hzrR4rXP5vf2N8Cr7686hBAcmmmQjEV+VE46oTPH2pt9+gunrq8f/skGyQ9V
 Xob/+CddDi7Kg==
Date: Sun, 02 Feb 2025 16:54:03 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87v7ts5lv6.fsf@HIDDEN>
In-Reply-To: <86v7tscvmy.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86v7tscvmy.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: e5935fa066cb9a4fe2938a9b0901250b77f990e5
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 12:50:15 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, A=
ndrea Corallo <acorallo@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
>>
>> Looking at bidi.c, I find bidi_get_type, which is essentially a single
>> switch statement, much easier to read than the new long switch statement
>> in in bidi_find_bracket_pairs:
>>
>> =09      switch (bidi_it->type)
>> =09=09{
>> =09=09case STRONG_L:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 0
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  l2r_seen =3D true;
>> =09=09  break;
>> =09=09case STRONG_R:
>> =09=09case WEAK_EN:
>> =09=09case WEAK_AN:
>> =09=09  flag =3D ((embedding_level & 1) =3D=3D 1
>> =09=09=09  ? FLAG_EMBEDDING_INSIDE
>> =09=09=09  : FLAG_OPPOSITE_INSIDE);
>> =09=09  r2l_seen =3D true;
>> =09=09  break;
>> =09=09case UNKNOWN_BT:
>> =09=09case WEAK_BN:
>> =09=09case NEUTRAL_B:
>> =09=09case STRONG_AL:
>> =09=09case LRE:
>> =09=09case LRO:
>> =09=09case RLE:
>> =09=09case RLO:
>> =09=09case PDF:
>> =09=09case LRI:
>> =09=09case RLI:
>> =09=09case FSI:
>> =09=09case PDI:
>> =09=09case WEAK_ES:
>> =09=09case WEAK_ET:
>> =09=09case WEAK_CS:
>> =09=09case WEAK_NSM:
>> =09=09case NEUTRAL_S:
>> =09=09case NEUTRAL_WS:
>> =09=09case NEUTRAL_ON:
>> =09=09default: =09=09  break;
>> =09=09}
>
> This is an example of code where some value of an enumeration need
> special handling, and the rest don't need any handling at all.  IMO,
> we should ask ourselves what are we trying to accomplish by spelling
> out all of the "other" values instead of just 'default'?  If we only
> care for a handful of values, what kind of errors could slip us if we
> use 'default'?

If I were to write that code, I would put the switch statement into a
separate function, returning (say) R2L, L2R, and NEUTRAL: Only STRONG_L
characters count as l2r_seen, only STRONG_R and two other c

>
>> I think that could be rewritten to be more readable in a number of ways,
>> including, of course, putting a #pragma in.
>
> IMO, the way it should be rewritten (or not) depends on the answer to
> the above question.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 16:51:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 11:51:45 2025
Received: from localhost ([127.0.0.1]:36009 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tedCC-0008AS-Ni
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 11:51:45 -0500
Received: from mail-4322.protonmail.ch ([185.70.43.22]:17175)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tedCA-0008A8-4o
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 11:51:43 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738515093; x=1738774293;
 bh=nuQeAc0IxhowVC0XEjk7pWbSzkuUtWjUndK/d2zdNWE=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=g+HEpKqVQKgI+0v/PBxLTIyozm+EyvLfPP+eAZU4cLDOnI+hZZ3yGHAFMEmBEcTYI
 Bvihg2QqlzcvZy/LOrKdp155F9593rJqn9XinxRGOOK2uKW9CgVFcCxyUhSEoI0Ilo
 0HVm62HFvE4PURsk5RqsVKR+FwqvEiF/JjhJQtIXkTv38uVS01WHN3MaZ1HcyuNYeK
 tzFJHrIGvHB69goAykBb5QDVH85dKYgtv02nEZt5JHkRg3VfynQ0M90DS6sGBZ+irw
 2UTtY5n3KD3FGfo5ZhP5FX79xphmYHKU1sm37hz9naONLAU1u4aBBdJeI/XSQBit8S
 AeuvqbEdGvNyg==
Date: Sun, 02 Feb 2025 16:51:30 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <871pwg70jv.fsf@HIDDEN>
In-Reply-To: <86wme8cwij.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <8734gwagh8.fsf@HIDDEN>
 <867c68eno8.fsf@HIDDEN> <87r04g8zpf.fsf@HIDDEN>
 <865xlseitr.fsf@HIDDEN> <87y0yo7ekg.fsf@HIDDEN>
 <8634gwee82.fsf@HIDDEN> <87seow7bpz.fsf@HIDDEN>
 <86wme8cwij.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: bd0c199f40204219320ecb2bc68cf9463056551e
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 12:50:15 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, A=
ndrea Corallo <acorallo@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
>>
>> "Eli Zaretskii" <eliz@HIDDEN> writes:
>>
>> > We (should) use emacs_abort when the code has no way of dealing with
>> > some situation, so letting the execution continue past that point will
>> > sometimes crash or corrupt data in ways that are much harder to debug
>> > than an abort.
>>
>> We often use eassert for that, and I don't know how many people realize
>> this subtle difference between emacs_abort () and eassert (0).
>
> Well, I do: eassert compiles to nothing in a production build, so it
> is only okay if the code can do something with the situation, albeit
> something that will cause weird effects.  eassert is also appropriate
> to convey the assumptions made by the code, even if no trouble will be
> caused by violating those assumptions.

Interesting.  I often use eassert where the only thing we can do in a
production build is almost certainly a crash.  Can you say more about
cases in which it's used to avoid crashes?

>> I still think eassume and eassert shouldn't evaluate expressions with
>> side effects.
>
> I agree.  Do we have code which does that in Emacs?

I'm aware of

      eassert (check_comp_unit_relocs (comp_u));

in comp.c, which does call an extra function, which might in theory have
side effects because dynlib_sym or Flength or, God forbid, Fgethash may
develop some.  But, really, this is a special case and a very minor
issue.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 15:21:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 10:21:15 2025
Received: from localhost ([127.0.0.1]:35863 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tebmc-0003wf-Oy
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 10:21:15 -0500
Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]:50515)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tebmZ-0003wO-CG
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 10:21:12 -0500
Received: by mail-ed1-x532.google.com with SMTP id
 4fb4d7f45d1cf-5d3e9a88793so5552249a12.1
 for <75964 <at> debbugs.gnu.org>; Sun, 02 Feb 2025 07:21:11 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1738509665; x=1739114465; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=n47Y/hxMokA7mljvjXZ7QJ+jCE5BXL6lIBMohec4Fr0=;
 b=jrXY1VnmUAKN4hBwgvQUfQ8VeoERj84vMTVRnAt7VXztSIVjiIxsciVf1OATq7v+Ue
 cEHpkBsUdXKaoZ0lEqRuUKPGk4+h2csxG5fK9Ytb6WpaV0JKUfB3OMq6DDafjPGoSA5L
 ODPcoXY31f+CDJY9c/f6lgCG91jFrqn4AFuB4ruS3I3khM7O0c1Xk+HTcxOySNlXZiMt
 gmzdxTHnaFfyHUwswmDNFIWNb7zu9BPP3aVW77J8f07iTPOhMPeB83r0i8jEmh/TIudr
 48mNQ6HosSGYdOqNbzULB6yCjcd+QaI5zn6lkBq+d06rDJ/w2GQac7p48kdbiBo+G2X/
 HF8w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1738509665; x=1739114465;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=n47Y/hxMokA7mljvjXZ7QJ+jCE5BXL6lIBMohec4Fr0=;
 b=KYfUcNvP1JQIJXO8k8S3PlygLRcoXEPMokmB9yMf2BH4o9n5gu/X5eE2zjn6+1JhIF
 pQR6NgodSCKYvmg9/WjW1qb4v6DwvKvwr9EKHKPKpId9PoEDj9X41KWz9WHwxaldNWgg
 tGAkXjZiAYYTVOPHyo6IgR2W4VZ21w3rmEjl8FuUAbzwe3H+SmK+u3ZcZ7NJmHPamAlL
 q017L+aO26QWEG3nTpiARcShQV2yiUEZTQtplsaUOIW9q/DgZti44stit7ZElJG42EbU
 bqueh7nTEULfVOiA/JRMDSFKI8J+pRH20wSQS1nCE77Xu/s685abxt0EuEa4i5dEkCP1
 xq/w==
X-Gm-Message-State: AOJu0YyodmiNC9bCvEGxCpmZR5tZIAWMCDXy6+OozJvLHi4HVU7RKWqw
 C/qR0xDau01mns2EOAhWsXP/8VAka/Ayjtaz5Rr46TI3UBSEz9HbeJS+0kcT4XcMLW56AmOqq/G
 7MCUG8X54NtxXGxVD9P0edzfxjC4=
X-Gm-Gg: ASbGncvSA6LvIE3QqOm5r8YrUZl7iq90pyuoJekL/roGwChbEzmdYW6407qGaI+3dHd
 oQQBObMAmpzAQ6wdSorYVLr8NxgJuF5X3Uoz9JIA4lPw/ykG9dv8eE3FuQ8/B8PQMp7NCIXTi
X-Google-Smtp-Source: AGHT+IGqcZMwtP2HxDglND1gWk7HufVzhdqDKStzS9eyXwsGsMsPkX6IabhELSLIkqE7DizRbBxQZ+yXJRx6f5QbIfg=
X-Received: by 2002:a05:6402:50ca:b0:5d9:a55:42ef with SMTP id
 4fb4d7f45d1cf-5dc5efc4586mr22420291a12.17.1738509664980; Sun, 02 Feb 2025
 07:21:04 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Sun, 2 Feb 2025 10:21:04 -0500
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <86jzabhvul.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN>
 <86o6znhzh1.fsf@HIDDEN> <87h65fdps6.fsf@HIDDEN>
 <86jzabhvul.fsf@HIDDEN>
MIME-Version: 1.0
Date: Sun, 2 Feb 2025 10:21:04 -0500
X-Gm-Features: AWEUYZk-zeeF7HdhQBosP0_Z2OidvfStmnOu8P95g4rhvFga6GPhfO8Imj_yYdA
Message-ID: <CADwFkm=PqeaJpzsp5te9QzkHWvPGYjCCTgm8WTZGY4tzeg7bbg@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
To: Eli Zaretskii <eliz@HIDDEN>, Pip Cet <pipcet@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

> It would indeed be wise to stop pushing changes in this area as long
> as we are not sure what would be the best solution.
>
> Stefan, do you agree?

Yes.  Let's decide what's the best way forward here before making any
further changes.

The recent reverts by Pip Cet seems like a good step.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 13:40:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 08:40:51 2025
Received: from localhost ([127.0.0.1]:33580 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teaDT-0006b3-9J
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 08:40:51 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:47238)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1teaDQ-0006an-AH
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 08:40:49 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1teaDJ-00034c-FC; Sun, 02 Feb 2025 08:40:41 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=/Zy2kx+Kd5XC+iDPgFMZ/XCKFRWs+nBhJTtHUQagI1k=; b=LeMt69vEG8Y2
 ryC4uZO4mOlWofxttlOHMCMvhqdyKj/JQzGiWYqIuKpUvdc/LdGNAS1AmwTwErABSkR98HZTpVQGj
 nMOfR45rRFFs6JVyPssEwk6e7gb3BGON9KC9zRLZIyYYcRoo+nJiKAy13oJyHv7JI3nqnI6XRf/qO
 FsOPm6dx34OoN8I1RDetiMWOYDiZukjwo0Q5zysY28+FCz1B1MF0SXXwq76tx1fjgyHiuqa5Pqgo4
 iB4htBWzQhCv5GO1iXGhVXD07UIIIbomnACNO/lMfAKpWyxVbCCIAgJMtG2w/okW/k7tAusiX7cYx
 2w3to3k8ASdxIWAPUzBluw==;
Date: Sun, 02 Feb 2025 15:40:37 +0200
Message-Id: <86v7tscvmy.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87seow7bpz.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 12:50:15 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 12:50:15 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, Andrea Corallo <acorallo@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
> 
> Looking at bidi.c, I find bidi_get_type, which is essentially a single
> switch statement, much easier to read than the new long switch statement
> in in bidi_find_bracket_pairs:
> 
> 	      switch (bidi_it->type)
> 		{
> 		case STRONG_L:
> 		  flag = ((embedding_level & 1) == 0
> 			  ? FLAG_EMBEDDING_INSIDE
> 			  : FLAG_OPPOSITE_INSIDE);
> 		  l2r_seen = true;
> 		  break;
> 		case STRONG_R:
> 		case WEAK_EN:
> 		case WEAK_AN:
> 		  flag = ((embedding_level & 1) == 1
> 			  ? FLAG_EMBEDDING_INSIDE
> 			  : FLAG_OPPOSITE_INSIDE);
> 		  r2l_seen = true;
> 		  break;
> 		case UNKNOWN_BT:
> 		case WEAK_BN:
> 		case NEUTRAL_B:
> 		case STRONG_AL:
> 		case LRE:
> 		case LRO:
> 		case RLE:
> 		case RLO:
> 		case PDF:
> 		case LRI:
> 		case RLI:
> 		case FSI:
> 		case PDI:
> 		case WEAK_ES:
> 		case WEAK_ET:
> 		case WEAK_CS:
> 		case WEAK_NSM:
> 		case NEUTRAL_S:
> 		case NEUTRAL_WS:
> 		case NEUTRAL_ON:
> 		default: 		  break;
> 		}

This is an example of code where some value of an enumeration need
special handling, and the rest don't need any handling at all.  IMO,
we should ask ourselves what are we trying to accomplish by spelling
out all of the "other" values instead of just 'default'?  If we only
care for a handful of values, what kind of errors could slip us if we
use 'default'?

> I think that could be rewritten to be more readable in a number of ways,
> including, of course, putting a #pragma in.

IMO, the way it should be rewritten (or not) depends on the answer to
the above question.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 13:21:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 08:21:54 2025
Received: from localhost ([127.0.0.1]:33556 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teZv8-0005jl-0u
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 08:21:54 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:48874)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1teZv4-0005jS-OJ
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 08:21:51 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1teZux-0000aD-SW; Sun, 02 Feb 2025 08:21:43 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=bOOxkIMRhKZ72ajxp/148rvWe4UGFTROUsLUptgebwA=; b=T+prLZSVyHo9
 AKEm5foK18ue8Cp/lKfFqYCV7Or7LpDUdr7rSLnWccxATu1thlQgylav/A8rZr/L6sx1UmGmgpyUv
 M7n+8PflVZJVU4vQ3QEfpwAgxbv1pkZxk24jmUeb0TP4Q6+Es/1L91orCovmBALmCJxVJdOm671+n
 iT3ACZ9Xszs/JzVchVPS/L8ppFsK1MX581Z3c/HD9ldH7ukXrtB1+Cwzd4sNX0CBdKwMVOYzwXtwI
 4y/pL5fA12BSU3gOmYAOKsZtm1nEZWXG147F8SXLMRkceV4daTbE5KccpbvdAnk61MHd+r//Pqmlb
 ysklpqojLipsfBHltjUYgw==;
Date: Sun, 02 Feb 2025 15:21:40 +0200
Message-Id: <86wme8cwij.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87seow7bpz.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 12:50:15 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
 <87seow7bpz.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: acorallo@HIDDEN, eggert@HIDDEN, 75964 <at> debbugs.gnu.org,
 stefankangas@HIDDEN, monnier@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 12:50:15 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN, Andrea Corallo <acorallo@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> > We (should) use emacs_abort when the code has no way of dealing with
> > some situation, so letting the execution continue past that point will
> > sometimes crash or corrupt data in ways that are much harder to debug
> > than an abort.
> 
> We often use eassert for that, and I don't know how many people realize
> this subtle difference between emacs_abort () and eassert (0).

Well, I do: eassert compiles to nothing in a production build, so it
is only okay if the code can do something with the situation, albeit
something that will cause weird effects.  eassert is also appropriate
to convey the assumptions made by the code, even if no trouble will be
caused by violating those assumptions.

> I still think eassume and eassert shouldn't evaluate expressions with
> side effects.

I agree.  Do we have code which does that in Emacs?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 12:50:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 07:50:31 2025
Received: from localhost ([127.0.0.1]:33504 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teZQk-0004Kq-ME
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 07:50:31 -0500
Received: from mail-4322.protonmail.ch ([185.70.43.22]:11893)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teZQh-0004KT-DK
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 07:50:28 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738500621; x=1738759821;
 bh=Fc83a6UU5Df/5o3VKCmSUVwoDFDDgxruZ+eBwiCijqo=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=pPAZDbuavtUUnDYMLIkKOegeVEee1QBtD/NztRCAbfEjCK56G/kWCpjnbGfBG645B
 gw02ZhIWkjsRzqTP4WDO189tyUbowWV0rvMshaM+vWVxbKV+Vq+Gfhdca0ssZAqYD4
 HBv/tOiCzCqgHeM1Fh4a/LFrXz6DjukEyzLnRufHDx+7l/DKzPsn/klW1fx+5YyCUQ
 a/fcwvZ/o9lUnNc5dzb+DvkdoG6f490G3MBrdiqweBmbY2t46MkDz1oM7xAKOqt926
 HWrgko4dKnkOlC0QAfmOfvikAXnC4PCQFWeDbwEc+nmWAQbGWNcmPsk422M7DZ5K6F
 rTpYWZ1ab1wDg==
Date: Sun, 02 Feb 2025 12:50:15 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87seow7bpz.fsf@HIDDEN>
In-Reply-To: <8634gwee82.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN> <8634gwee82.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 9667e42d62813f1b94948fa514beba2a011e08bb
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN,
 Stefan Monnier <monnier@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 11:48:45 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
>>
>> So while I'd like us to keep those options in mind, I've removed them
>> from the following diff.  The idea is this would give an overview over
>> which code segments would become hard to read as a result of such a
>> change, and whether it's bad enough that we need to look at
>> alternatives.
>>
>> I think this concerns bidi.c and keyboard.c in particular.
>>
>> I've marked some places where I'm not sure the old behavior was okay,
>> but I haven't checked them in detail.  I haven't found any "there was a
>> bug here and we only caught it because of this new warning" smoking
>> guns.
>
> Hmm... like I envisioned, where the list of enum values hiding behind
> 'default' is longer than half a dozen or so, the result looks really
> problematic: a long and hard-to-read list of values without any
> promise that it's exhaustive.  (I realize that the compiler will flag
> any missing values, but when I read code, I prefer not to compile it,
> and besides, it could not be in a compilable shape at that point).
>
> Humans are not good when they need to deal with long lists, which is
> why when the list gets long, it is easier to list values not in the
> list.
>
> So I wonder if we could find a better way,

I haven't found one that's easy to do.

> or perhaps decide that
> where we need such long lists, we could do it the old way.

Absolutely.  There are plenty of ways to do that, but the easiest is,
for now, to decide which files this applies to and either put them in a
list in Makefile.in or add a #pragma.

Looking at bidi.c, I find bidi_get_type, which is essentially a single
switch statement, much easier to read than the new long switch statement
in in bidi_find_bracket_pairs:

=09      switch (bidi_it->type)
=09=09{
=09=09case STRONG_L:
=09=09  flag =3D ((embedding_level & 1) =3D=3D 0
=09=09=09  ? FLAG_EMBEDDING_INSIDE
=09=09=09  : FLAG_OPPOSITE_INSIDE);
=09=09  l2r_seen =3D true;
=09=09  break;
=09=09case STRONG_R:
=09=09case WEAK_EN:
=09=09case WEAK_AN:
=09=09  flag =3D ((embedding_level & 1) =3D=3D 1
=09=09=09  ? FLAG_EMBEDDING_INSIDE
=09=09=09  : FLAG_OPPOSITE_INSIDE);
=09=09  r2l_seen =3D true;
=09=09  break;
=09=09case UNKNOWN_BT:
=09=09case WEAK_BN:
=09=09case NEUTRAL_B:
=09=09case STRONG_AL:
=09=09case LRE:
=09=09case LRO:
=09=09case RLE:
=09=09case RLO:
=09=09case PDF:
=09=09case LRI:
=09=09case RLI:
=09=09case FSI:
=09=09case PDI:
=09=09case WEAK_ES:
=09=09case WEAK_ET:
=09=09case WEAK_CS:
=09=09case WEAK_NSM:
=09=09case NEUTRAL_S:
=09=09case NEUTRAL_WS:
=09=09case NEUTRAL_ON:
=09=09default: =09=09  break;
=09=09}

I think that could be rewritten to be more readable in a number of ways,
including, of course, putting a #pragma in.

(I'm focusing on bidi.c because it uses a very large
externally-mandated enum.  Splitting up the specpdl cases is something
we can do, but touching the unicode classification tables is clearly not
a good idea.)

I'd probably try to avoid switches in deeply-nested contexts, but that's
an aesthetic preference.

And, of course, code like


      switch (prev_type)
=09{
        <...>
=09case LRO:
=09case RLE:
=09case RLO:
=09case FSI:
=09case PDI:
=09case WEAK_ES:
=09case WEAK_ET:
=09case WEAK_CS:
=09case WEAK_NSM:
=09case NEUTRAL_S:
=09case NEUTRAL_WS:
=09case NEUTRAL_ON:
=09default: =09  eassert (prev_type !=3D FSI);
=09  /* Nothing.  */
=09  break;
=09}

simply isn't readable, and that one's my fault.

My current impression is this will eventually help us find rare bugs,
and produce better C code, but where it hurts readability we should use
#pragma and leave the code as it is.  When we really want to, we can
rewrite predicates such as the first example to be inline functions, and
then bidi_find_brackt_pairs could be at least a bit shorter and perhaps
more readable; but, again, that's an aesthetic choice.

Stefan Kangas, are there files where we currently use switch statements
that you'd like to clean up most?  I think it's most important for
pdumper.c (subtle code) and where external library unions are in use
(GTK, RSVG, tree sitter).

I'm not sure whether there's a good way to invert the switch without
hiding things in Makefile.in where no one ever looks.  Maybe just add

#include "exhaustive.h"

in the relevant C files, which does whatever pragma magic we need?

But I'm open to other suggestions.

> Btw, does eassume compile to emacs_abort in a production build (i.e. a
> build without --enable-checking)?

It does not, no.  This is sometimes necessary for speed, but most of
that effect can be achieved by using emacs_abort: it's a cold function
and GCC will penalize code paths that lead to this function call and
optimize those which don't.

That's what I liked about the eunreachable proposal: in some, very rare
cases, a full eassume () is what we want, but usually we're okay with
"crash if this happens, but optimize the non-crashing case statically".
If someone wants to define eunreachable to eassume (0) they can, but on
x86 I'd prefer a single-insn trap.

> If not, then perhaps this replacement is not always a good idea?

Sorry to point to someone else's code as an example, but Paul's changes
meant that if the mmap protection flag enum in pdumper.c was out of
bounds, we'd read something from outside the array and pass it to mmap
as its protection argument.  I think finding such a bug, even if it
happens just with production builds, is hard enough to justify a bounds
check or a ud2.

> We (should) use emacs_abort when the code has no way of dealing with
> some situation, so letting the execution continue past that point will
> sometimes crash or corrupt data in ways that are much harder to debug
> than an abort.

We often use eassert for that, and I don't know how many people realize
this subtle difference between emacs_abort () and eassert (0).  I think
there should be an even subtler difference between eunreachable () and
eassume (0): initially, they'd do the same both in production builds and
development builds, but we reserve the right to weaken eunreachable to
an abort if we think it helps us find bugs, and eassume is only to be
used where the performance gains are significantly larger than an enum
check would be.

I still think eassume and eassert shouldn't evaluate expressions with
side effects.  I'd like to enforce that in GCC but no one liked my
patch.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 12:14:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 07:14:04 2025
Received: from localhost ([127.0.0.1]:33459 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teYrT-00083G-GX
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 07:14:03 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:57752)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1teYrR-00082c-DM
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 07:14:02 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1teYrK-0002jF-3U; Sun, 02 Feb 2025 07:13:54 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=9gP5EjaGP1mq7MRlocZXQ4yQRQW0d/2jsR5SJFDtM7k=; b=nsWbAJbBNKFA
 Kobp5Uj1MmYoR+GLhK3R8uSUUe+ynOfVZN6W4ok5WziVSV4sH5Vh6wfkjwkqdnsKLNDgbqP5T6aIO
 242MBdq43IA5S84Z37p2Rw9Rg43SdBxGyFJF3WRwPHiNbJhZsl9L1bAEDXM1f4QRu24tDdcb+YjwI
 Wg3cV935cxl4GYEKHwHZ+qJpjbR36L3MaCTcfMrXpckKM93bVC9Db0MKsKLKtd830lK//rpFp1v+z
 2Ei3IXJHzrxeoc4K5Z2nhwYcWhdEfvA+ltZN/m3cbTsto8LfoTyrbIn5Jv8jOH+7r4wsxAIHz0RUU
 awPXv2vSLLy98PF0h2xCUA==;
Date: Sun, 02 Feb 2025 14:13:49 +0200
Message-Id: <8634gwee82.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87y0yo7ekg.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 11:48:45 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
 <87y0yo7ekg.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: Andrea Corallo <acorallo@HIDDEN>, eggert@HIDDEN,
 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN,
 Stefan Monnier <monnier@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 11:48:45 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
> 
> So while I'd like us to keep those options in mind, I've removed them
> from the following diff.  The idea is this would give an overview over
> which code segments would become hard to read as a result of such a
> change, and whether it's bad enough that we need to look at
> alternatives.
> 
> I think this concerns bidi.c and keyboard.c in particular.
> 
> I've marked some places where I'm not sure the old behavior was okay,
> but I haven't checked them in detail.  I haven't found any "there was a
> bug here and we only caught it because of this new warning" smoking
> guns.

Hmm... like I envisioned, where the list of enum values hiding behind
'default' is longer than half a dozen or so, the result looks really
problematic: a long and hard-to-read list of values without any
promise that it's exhaustive.  (I realize that the compiler will flag
any missing values, but when I read code, I prefer not to compile it,
and besides, it could not be in a compilable shape at that point).

Humans are not good when they need to deal with long lists, which is
why when the list gets long, it is easier to list values not in the
list.

So I wonder if we could find a better way, or perhaps decide that
where we need such long lists, we could do it the old way.

Btw, does eassume compile to emacs_abort in a production build (i.e. a
build without --enable-checking)?  If not, then perhaps this
replacement is not always a good idea?  We (should) use emacs_abort
when the code has no way of dealing with some situation, so letting
the execution continue past that point will sometimes crash or corrupt
data in ways that are much harder to debug than an abort.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 11:49:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 06:49:03 2025
Received: from localhost ([127.0.0.1]:33369 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teYTE-0006to-F3
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 06:49:03 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:31861)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teYT9-0006tW-Ov
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 06:48:59 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738496927; x=1738756127;
 bh=T4FIODF5rQYDtBSfGXNWMDcwnlEFINqXCeJeoStxrm8=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=oYDoKpO5qnWgdXueWNVKIgsZJvDnN2mNz+4qCSiBHRGjWlhcnWdFx0mWCFc+KgLVs
 CeVKkP9C/BuosV00dFQQaEGOwc7S6IMGqpdOu8OKFrpG95Cy/QYnNphNTQe0L9kuqA
 moZKMygqS15Qv9p4zFbBDr1vJF3iavGKq18OjJm/a4PmBnSJZtQPV12LS1SRv1qkj0
 nIulw3ryt6hxC3vdPsC3RUEMfhnvipVfvfUDCZYiymNkfNWq75ge/zIs9Om943mo+e
 xsWto7wN/HzEz6VSb1/I8uUQrAMs+KmA9UTJFgTkZpIEyGW+1Jua49fFrROVdz6Ds+
 FuE3y7dGoxSLQ==
Date: Sun, 02 Feb 2025 11:48:45 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87y0yo7ekg.fsf@HIDDEN>
In-Reply-To: <865xlseitr.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN> <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN> <865xlseitr.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 250fb61becfaa0b22ce87ed7e01205988d1f5c8f
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75964
Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Sun, 02 Feb 2025 09:26:48 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
>>
>> "Eli Zaretskii" <eliz@HIDDEN> writes:
>>
>> >> Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
>> >> Date: Sun, 02 Feb 2025 08:39:11 +0000
>> >> From:  Pip Cet via "Bug reports for GNU Emacs,
>> >>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>> >>
>> >> I think we should enable -Wswitch-enum now, and expect it to generate
>> >> more warnings in the future.
>> >
>> > I'm not sure I understand what "in the future" means here, but please
>>
>> Future GCC versions may and will add warnings about cases that they
>> currently fail to warn about, for the same switch.  I don't think we can
>> change that.
>
> If future GCC versions add warnings, we will handle them when that
> happens and the warnings are reported or seen.  We don't need (and
> really cannot) worry about that at this time.

Agreed.

>> > Apologies if the above is not relevant to what you were discussing
>> > regarding adding warning options.
>>
>> I think it's highly relevant: I proposed several ways of adding the
>> warning options:  one file at a time, #pragma'd out, or enabled globally
>> and only merged once we can fix, at least, the common build systems.
>
> SGTM, thanks.

So while I'd like us to keep those options in mind, I've removed them
from the following diff.  The idea is this would give an overview over
which code segments would become hard to read as a result of such a
change, and whether it's bad enough that we need to look at
alternatives.

I think this concerns bidi.c and keyboard.c in particular.

I've marked some places where I'm not sure the old behavior was okay,
but I haven't checked them in detail.  I haven't found any "there was a
bug here and we only caught it because of this new warning" smoking
guns.

I've also stayed away from lib-src for now.

>> Simply enabling them globally and waiting for someone else to fix the
>> warnings only leads to other warnings being missed.
>
> Right.

diff --git a/configure.ac b/configure.ac
index 9db1f07d7fc..1fd86b9bac9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1828,6 +1828,8 @@ AC_DEFUN
     [nw=3D"$nw -Wsuggest-attribute=3Dnoreturn"])
=20
   gl_MANYWARN_ALL_GCC([ws])
+  ws=3D"$ws -Wswitch-enum"
+#   ws=3D"$ws -Wswitch-enum-consistency"  .... one day
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
   for w in $ws; do
     gl_WARN_ADD([$w])
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index 61a45622933..2dfc42389dc 100644
--- a/lib-src/ebrowse.c
+++ b/lib-src/ebrowse.c
@@ -657,6 +657,8 @@ find_member (struct sym *cls, char *name, int var, int =
sc, unsigned int hash)
       list =3D var ? &cls->static_vars : &cls->static_fns;
       break;
=20
+    case SC_UNKNOWN:
+    case SC_MEMBER:
     default:
       list =3D var ? &cls->vars : &cls->fns;
       break;
@@ -902,6 +904,8 @@ add_member (struct sym *cls, char *name, int var, int s=
c, unsigned int hash)
       list =3D var ? &cls->static_vars : &cls->static_fns;
       break;
=20
+    case SC_UNKNOWN:
+    case SC_MEMBER:
     default:
       list =3D var ? &cls->vars : &cls->fns;
       break;
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 6243f666955..f55057ee2ea 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -718,6 +718,7 @@ write_globals (void)
 =09      seen_defun =3D true;
 =09    }
 =09  break;
+=09case INVALID:
 =09default:
 =09  fatal ("not a recognized DEFVAR_");
 =09}
diff --git a/src/alloc.c b/src/alloc.c
index 7fa05e54202..6eeffb3e4e9 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3341,7 +3341,6 @@ cleanup_vector (struct Lisp_Vector *vector)
       break;
     /* Keep the switch exhaustive.  */
     case PVEC_NORMAL_VECTOR:
-    case PVEC_FREE:
     case PVEC_SYMBOL_WITH_POS:
     case PVEC_MISC_PTR:
     case PVEC_PROCESS:
@@ -3361,6 +3360,8 @@ cleanup_vector (struct Lisp_Vector *vector)
     case PVEC_SUB_CHAR_TABLE:
     case PVEC_RECORD:
       break;
+    case PVEC_FREE: eassume (0);
+    default: eassume (0);
     }
 }
=20
@@ -5113,8 +5114,7 @@ mark_maybe_pointer (void *p, bool symbol_only)
 =09  }
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09default: eassume (0);
 =09}
=20
       mark_object (obj);
@@ -5492,8 +5492,7 @@ valid_lisp_object_p (Lisp_Object obj)
     case MEM_TYPE_VECTOR_BLOCK:
       return live_small_vector_p (m, p);
=20
-    default:
-      break;
+    default: eassume (0);
     }
=20
   return 0;
@@ -6727,10 +6726,31 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((vo=
id) 0)
 #endif
 =09=09break;
=20
-=09      case PVEC_FREE:
-=09=09emacs_abort ();
-
-=09      default:
+=09      case PVEC_NORMAL_VECTOR:
+=09      case PVEC_BIGNUM:
+=09      case PVEC_MARKER:
+=09      case PVEC_FINALIZER:
+=09      case PVEC_SYMBOL_WITH_POS:
+=09      case PVEC_MISC_PTR:
+=09      case PVEC_USER_PTR:
+=09      case PVEC_PROCESS:
+=09      case PVEC_TERMINAL:
+=09      case PVEC_WINDOW_CONFIGURATION:
+=09      case PVEC_OTHER:
+=09      case PVEC_XWIDGET:
+=09      case PVEC_XWIDGET_VIEW:
+=09      case PVEC_THREAD:
+=09      case PVEC_MUTEX:
+=09      case PVEC_CONDVAR:
+=09      case PVEC_MODULE_FUNCTION:
+=09      case PVEC_NATIVE_COMP_UNIT:
+=09      case PVEC_TS_PARSER:
+=09      case PVEC_TS_NODE:
+=09      case PVEC_TS_COMPILED_QUERY:
+=09      case PVEC_SQLITE:
+=09      case PVEC_CLOSURE:
+=09      case PVEC_RECORD:
+=09      case PVEC_FONT:
 =09=09{
 =09=09  /* A regular vector or pseudovector needing no special
 =09=09     treatment.  */
@@ -6741,6 +6761,8 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09=09  mark_stack_push_values (ptr->contents, size);
 =09=09}
 =09=09break;
+=09      case PVEC_FREE: eassume (0);
+=09      default: eassume (0);
 =09      }
 =09  }
 =09  break;
@@ -6790,7 +6812,7 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09=09   reachable from font_style_table which is also
 =09=09   staticpro'd.  */
 =09=09break;
-=09      default: emacs_abort ();
+=09      default: eassume (0);
 =09      }
 =09    set_string_marked (XSTRING (ptr->u.s.name));
 =09    mark_interval_tree (string_intervals (ptr->u.s.name));
@@ -6846,8 +6868,9 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09case Lisp_Int1:
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09case Lisp_Type_Unused0:
+=09  eassume (0);
+=09default: eassume (0);
 =09}
     }
=20
@@ -6926,8 +6949,8 @@ survives_gc_p (Lisp_Object obj)
         pdumper_object_p (XFLOAT (obj));
       break;
=20
-    default:
-      emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   return survives_p;
diff --git a/src/android.c b/src/android.c
index f8d2df8fcf5..bd3a6028c85 100644
--- a/src/android.c
+++ b/src/android.c
@@ -745,8 +745,7 @@ android_write_event (union android_event *event)
       kill (getpid (), SIGIO);
       break;
=20
-    default:
-      break;
+    default: eassume (0);
     }
 }
=20
@@ -3815,8 +3814,7 @@ android_create_pixmap_from_bitmap_data (char *data, u=
nsigned int width,
=20
       break;
=20
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   /* Unlock the bitmap itself.  */
@@ -4346,8 +4344,7 @@ android_copy_area (android_drawable src, android_draw=
able dest,
    /* do_blit =3D android_blit_invert; */
       /* A GC with its operation set to ANDROID_GC_INVERT is never given
 =09 to CopyArea.  */
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   /* Load the bounds of the destination rectangle.  */
@@ -4799,8 +4796,7 @@ android_get_image (android_drawable handle,
       break;
=20
       /* Other formats are currently not supported.  */
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   image->format =3D format;
diff --git a/src/bidi.c b/src/bidi.c
index d8754e2db73..9fd33a049c5 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -303,8 +303,20 @@ bidi_get_type (int ch, bidi_dir_t override)
       case FSI:
       case PDI:
 =09return default_type;
-      default:
-=09if (override =3D=3D L2R)
+    case UNKNOWN_BT:
+    case STRONG_L:
+    case STRONG_R:
+    case WEAK_EN:
+    case WEAK_AN:
+    case STRONG_AL:
+    case WEAK_ES:
+    case WEAK_ET:
+    case WEAK_CS:
+    case WEAK_NSM:
+    case NEUTRAL_S:
+    case NEUTRAL_WS:
+    case NEUTRAL_ON:
+    default: =09if (override =3D=3D L2R)
 =09  return STRONG_L;
 =09else if (override =3D=3D R2L)
 =09  return STRONG_R;
@@ -354,8 +366,7 @@ bidi_get_category (bidi_type_t type)
       case FSI:
       case PDI:
 =09return EXPLICIT_FORMATTING;
-      default:
-=09emacs_abort ();
+      default: =09emacs_abort ();
     }
 }
=20
@@ -2047,8 +2058,28 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
 =09=09new_level =3D bidi_pop_embedding_level (bidi_it);
 =09    }
 =09  break;
-=09default:
-=09  eassert (prev_type !=3D FSI);
+=09case UNKNOWN_BT:
+=09case STRONG_L:
+=09case STRONG_R:
+=09case WEAK_EN:
+=09case WEAK_AN:
+=09case WEAK_BN:
+=09case NEUTRAL_B:
+=09case STRONG_AL:
+=09case LRE:
+=09case LRO:
+=09case RLE:
+=09case RLO:
+=09case FSI:
+=09case PDI:
+=09case WEAK_ES:
+=09case WEAK_ET:
+=09case WEAK_CS:
+=09case WEAK_NSM:
+=09case NEUTRAL_S:
+=09case NEUTRAL_WS:
+=09case NEUTRAL_ON:
+=09default: =09  eassert (prev_type !=3D FSI);
 =09  /* Nothing.  */
 =09  break;
 =09}
@@ -2197,8 +2228,22 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
       bidi_check_type (bidi_it->type_after_wn);
       type =3D WEAK_BN; /* X9/Retaining */
       break;
-    default:
-      /* Nothing.  */
+    case UNKNOWN_BT:
+    case STRONG_L:
+    case STRONG_R:
+    case WEAK_EN:
+    case WEAK_AN:
+    case WEAK_BN:
+    case NEUTRAL_B:
+    case STRONG_AL:
+    case WEAK_ES:
+    case WEAK_ET:
+    case WEAK_CS:
+    case WEAK_NSM:
+    case NEUTRAL_S:
+    case NEUTRAL_WS:
+    case NEUTRAL_ON:
+    default: /* Nothing.  */
       break;
     }
=20
@@ -2723,8 +2768,27 @@ bidi_find_bracket_pairs (struct bidi_it *bidi_it)
 =09=09=09  : FLAG_OPPOSITE_INSIDE);
 =09=09  r2l_seen =3D true;
 =09=09  break;
-=09=09default:
-=09=09  break;
+=09=09case UNKNOWN_BT:
+=09=09case WEAK_BN:
+=09=09case NEUTRAL_B:
+=09=09case STRONG_AL:
+=09=09case LRE:
+=09=09case LRO:
+=09=09case RLE:
+=09=09case RLO:
+=09=09case PDF:
+=09=09case LRI:
+=09=09case RLI:
+=09=09case FSI:
+=09=09case PDI:
+=09=09case WEAK_ES:
+=09=09case WEAK_ET:
+=09=09case WEAK_CS:
+=09=09case WEAK_NSM:
+=09=09case NEUTRAL_S:
+=09=09case NEUTRAL_WS:
+=09=09case NEUTRAL_ON:
+=09=09default: =09=09  break;
 =09=09}
 =09      if (flag)
 =09=09{
@@ -2995,8 +3059,27 @@ bidi_resolve_brackets (struct bidi_it *bidi_it)
 =09=09? STRONG_L=09=09=09=09     /* N0c1 */
 =09=09: embedding_type;=09=09=09     /* N0c2 */
 =09      break;
-=09    default:
-=09      /* N0d: Do not set the type for that bracket pair.  */
+=09    case UNKNOWN_BT:
+=09    case WEAK_BN:
+=09    case NEUTRAL_B:
+=09    case STRONG_AL:
+=09    case LRE:
+=09    case LRO:
+=09    case RLE:
+=09    case RLO:
+=09    case PDF:
+=09    case LRI:
+=09    case RLI:
+=09    case FSI:
+=09    case PDI:
+=09    case WEAK_ES:
+=09    case WEAK_ET:
+=09    case WEAK_CS:
+=09    case WEAK_NSM:
+=09    case NEUTRAL_S:
+=09    case NEUTRAL_WS:
+=09    case NEUTRAL_ON:
+=09    default: =09      /* N0d: Do not set the type for that bracket pair=
.  */
 =09      break;
 =09    }
 =09}
@@ -3191,8 +3274,26 @@ bidi_resolve_neutral (struct bidi_it *bidi_it)
 =09=09     were R in terms of their influence on NIs."  */
 =09=09  next_type =3D STRONG_R;
 =09=09  break;
-=09=09default:
-=09=09  emacs_abort ();
+=09=09case UNKNOWN_BT:
+=09=09case WEAK_BN:
+=09=09case NEUTRAL_B:
+=09=09case LRE:
+=09=09case LRO:
+=09=09case RLE:
+=09=09case RLO:
+=09=09case PDF:
+=09=09case LRI:
+=09=09case RLI:
+=09=09case FSI:
+=09=09case PDI:
+=09=09case WEAK_ES:
+=09=09case WEAK_ET:
+=09=09case WEAK_CS:
+=09=09case WEAK_NSM:
+=09=09case NEUTRAL_S:
+=09=09case NEUTRAL_WS:
+=09=09case NEUTRAL_ON:
+=09=09default: =09=09  emacs_abort ();
 =09=09  break;
 =09=09}
 =09    }
diff --git a/src/buffer.c b/src/buffer.c
index 40f7ec83d6b..4e8f12727c1 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1389,7 +1389,7 @@ buffer_local_value (Lisp_Object variable, Lisp_Object=
 buffer)
 =09  result =3D Fdefault_value (variable);
 =09break;
       }
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   return result;
diff --git a/src/data.c b/src/data.c
index 5fcdda1b6e8..aac95f4329e 100644
--- a/src/data.c
+++ b/src/data.c
@@ -286,16 +286,18 @@ DEFUN ("cl-type-of", Fcl_type_of, Scl_type_of, 1, 1, =
0,
           return Qsub_char_table;
         /* "Impossible" cases.  */
 =09case PVEC_MISC_PTR:
-        case PVEC_OTHER:
-        case PVEC_FREE: ;
+        case PVEC_OTHER: break;
+        case PVEC_FREE: eassume (0);
         }
       emacs_abort ();
=20
     case Lisp_Float:
       return Qfloat;
=20
-    default:
-      emacs_abort ();
+    default: eassume (0);
+
+    case Lisp_Type_Unused0:
+      eassume (0);
     }
 }
=20
@@ -737,7 +739,7 @@ DEFUN ("boundp", Fboundp, Sboundp, 1, 1, 0,
       /* In set_internal, we un-forward vars when their value is
 =09 set to Qunbound.  */
       return Qt;
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   return (BASE_EQ (valcontents, Qunbound) ? Qnil : Qt);
@@ -1335,7 +1337,7 @@ do_symval_forwarding (lispfwd valcontents)
     case Lisp_Fwd_Kboard_Obj:
       return *(Lisp_Object *) (XKBOARD_OBJFWD (valcontents)->offset
 =09=09=09       + (char *) kboard_for_bindings ());
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -1592,7 +1594,7 @@ find_symbol_value (Lisp_Object symbol)
       }
     case SYMBOL_FORWARDED:
       return do_symval_forwarding (SYMBOL_FWD (sym));
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -1664,7 +1666,7 @@ set_internal (Lisp_Object symbol, Lisp_Object newval,=
 Lisp_Object where,
     case SYMBOL_UNTRAPPED_WRITE:
       break;
=20
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
  start:
@@ -1777,7 +1779,7 @@ set_internal (Lisp_Object symbol, Lisp_Object newval,=
 Lisp_Object where,
 =09store_symval_forwarding (/* sym, */ innercontents, newval, buf);
 =09break;
       }
-    default: emacs_abort ();
+    default: eassume (0);
     }
   return;
 }
@@ -1951,7 +1953,7 @@ default_value (Lisp_Object symbol)
 =09/* For other variables, get the current value.  */
 =09return do_symval_forwarding (valcontents);
       }
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -2009,7 +2011,7 @@ set_default_internal (Lisp_Object symbol, Lisp_Object=
 value,
     case SYMBOL_UNTRAPPED_WRITE:
       break;
=20
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
  start:
@@ -2075,7 +2077,7 @@ set_default_internal (Lisp_Object symbol, Lisp_Object=
 value,
           set_internal (symbol, value, Qnil, bindflag);
         return;
       }
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -2177,7 +2179,7 @@ DEFUN ("make-variable-buffer-local", Fmake_variable_b=
uffer_local,
       else if (BUFFER_OBJFWDP (valcontents.fwd))
 =09return variable;
       break;
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   if (SYMBOL_CONSTANT_P (variable))
@@ -2240,7 +2242,7 @@ DEFUN ("make-local-variable", Fmake_local_variable, S=
make_local_variable,
 =09error ("Symbol %s may not be buffer-local",
 =09       SDATA (SYMBOL_NAME (variable)));
       break;
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   if (sym->u.s.trapped_write =3D=3D SYMBOL_NOWRITE)
@@ -2337,7 +2339,7 @@ DEFUN ("kill-local-variable", Fkill_local_variable, S=
kill_local_variable,
     case SYMBOL_LOCALIZED:
       blv =3D SYMBOL_BLV (sym);
       break;
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   if (sym->u.s.trapped_write =3D=3D SYMBOL_TRAPPED_WRITE)
@@ -2410,7 +2412,7 @@ DEFUN ("local-variable-p", Flocal_variable_p, Slocal_=
variable_p,
 =09  }
 =09return Qnil;
       }
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -2445,7 +2447,7 @@ DEFUN ("local-variable-if-set-p", Flocal_variable_if_=
set_p, Slocal_variable_if_s
     case SYMBOL_FORWARDED:
       /* All BUFFER_OBJFWD slots become local if they are set.  */
       return (BUFFER_OBJFWDP (SYMBOL_FWD (sym)) ? Qt : Qnil);
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -2488,7 +2490,7 @@ DEFUN ("variable-binding-locus", Fvariable_binding_lo=
cus, Svariable_binding_locu
 =09return SYMBOL_BLV (sym)->where;
       else
 =09return Qnil;
-    default: emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -3133,7 +3135,10 @@ floatop_arith_driver (enum arithop code, ptrdiff_t n=
args, Lisp_Object *args,
 =09    xsignal0 (Qarith_error);
 =09  accum /=3D next;
 =09  break;
-=09default: eassume (false);
+=09case Alogior:
+=09case Alogxor:
+=09case Alogand:
+=09default: eassume (0);
 =09}
=20
     next_arg:
@@ -3193,8 +3198,7 @@ bignum_arith_driver (enum arithop code, ptrdiff_t nar=
gs, Lisp_Object *args,
 =09    xsignal0 (Qarith_error);
 =09  mpz_tdiv_q (mpz[0], *accum, *next);
 =09  break;
-=09default:
-=09  eassume (false);
+=09default: eassume (0);
 =09}
       accum =3D &mpz[0];
=20
@@ -3258,7 +3262,7 @@ arith_driver (enum arithop code, ptrdiff_t nargs, Lis=
p_Object *args,
 =09  case Alogand: accum &=3D next; continue;
 =09  case Alogior: accum |=3D next; continue;
 =09  case Alogxor: accum ^=3D next; continue;
-=09  default: eassume (false);
+=09  default: eassume (0);
 =09  }
 =09if (overflow)
 =09  break;
@@ -3772,8 +3776,8 @@ bool_vector_binop_driver (Lisp_Object a,
 =09destdata[i] =3D adata[i] &~ bdata[i];
       break;
=20
-    default:
-      eassume (0);
+    case bool_vector_subsetp:
+    default: eassume (0);
     }
=20
   return dest;
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 5f89122eaf7..e22347a7e1e 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -557,8 +557,7 @@ xd_signature (char *signature, int dtype, int parent_ty=
pe, Lisp_Object object)
       xd_signature_cat (signature, DBUS_DICT_ENTRY_END_CHAR_AS_STRING);
       break;
=20
-    default:
-      wrong_type_argument (QD_Bus, object);
+    default: wrong_type_argument (QD_Bus, object);
     }
=20
   XD_DEBUG_MESSAGE ("%s", signature);
@@ -985,8 +984,7 @@ xd_retrieve_arg (int dtype, DBusMessageIter *iter)
 =09return Fcons (xd_dbus_type_to_symbol (dtype), Fnreverse (result));
       }
=20
-    default:
-      XD_DEBUG_MESSAGE ("DBusType '%c' not supported", dtype);
+    default: XD_DEBUG_MESSAGE ("DBusType '%c' not supported", dtype);
       return Qnil;
     }
 }
diff --git a/src/dired.c b/src/dired.c
index 915a2097042..95108fb7b14 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -612,8 +612,7 @@ file_name_completion (Lisp_Object file, Lisp_Object dir=
name, bool all_flag,
 =09  directoryp =3D file_name_completion_dirp (fd, dp, len);
 =09  break;
=20
-=09default:
-=09  directoryp =3D false;
+=09default: =09  directoryp =3D false;
 =09  break;
 =09}
=20
diff --git a/src/dispextern.h b/src/dispextern.h
index 1b383164752..85b2e57402b 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -2337,9 +2337,11 @@ #define MAX_FRINGE_BITMAPS (1<<FRINGE_ID_BITS)
   GET_FROM_IMAGE,
   GET_FROM_STRETCH,
   GET_FROM_XWIDGET,
-  NUM_IT_METHODS
+  MAX_IT_METHOD =3D GET_FROM_XWIDGET
 };
=20
+#define NUM_IT_METHODS (MAX_IT_METHOD + 1)
+
 /* FIXME: What is this?  Why 5?  */
 #define IT_STACK_SIZE 5
=20
diff --git a/src/dispnew.c b/src/dispnew.c
index 5f5575d484b..cd1f2255c93 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -3608,6 +3608,8 @@ produce_box_glyphs (enum box box, struct glyph_row *r=
ow, int x, int n,
     case BOX_DOUBLE_UP_RIGHT:
     case BOX_DOUBLE_UP_LEFT:
       emacs_abort ();
+    default:
+      eassume (0);
     }
=20
   /* FIXME/tty: some face for the border.  */
diff --git a/src/emacs.c b/src/emacs.c
index f0281044c9e..72a2e42b193 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -846,6 +846,7 @@ dump_error_to_string (int result)
       return "dump file is result of failed dump attempt";
     case PDUMPER_LOAD_VERSION_MISMATCH:
       return "not built for this Emacs executable";
+    case PDUMPER_LOAD_ERROR:
     default:
       return (result <=3D PDUMPER_LOAD_ERROR
 =09      ? "generic error"
diff --git a/src/eval.c b/src/eval.c
index 70f533842b9..372b84d4d48 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -729,6 +729,19 @@ default_toplevel_binding (Lisp_Object symbol)
     {
       switch ((--pdl)->kind)
 =09{
+=09case SPECPDL_UNWIND:
+=09case SPECPDL_UNWIND_ARRAY:
+=09case SPECPDL_UNWIND_PTR:
+=09case SPECPDL_UNWIND_INT:
+=09case SPECPDL_UNWIND_INTMAX:
+=09case SPECPDL_UNWIND_EXCURSION:
+=09case SPECPDL_UNWIND_VOID:
+=09case SPECPDL_BACKTRACE:
+=09case SPECPDL_NOP:
+=09case SPECPDL_MODULE_RUNTIME:
+=09case SPECPDL_MODULE_ENVIRONMENT:
+=09case SPECPDL_LET_LOCAL:
+=09  break;
 =09case SPECPDL_LET_DEFAULT:
 =09case SPECPDL_LET:
 =09  if (EQ (specpdl_symbol (pdl), symbol))
@@ -762,6 +775,18 @@ lexbound_p (Lisp_Object symbol)
 =09    }
 =09  break;
=20
+=09case SPECPDL_UNWIND:
+=09case SPECPDL_UNWIND_ARRAY:
+=09case SPECPDL_UNWIND_PTR:
+=09case SPECPDL_UNWIND_INT:
+=09case SPECPDL_UNWIND_INTMAX:
+=09case SPECPDL_UNWIND_EXCURSION:
+=09case SPECPDL_UNWIND_VOID:
+=09case SPECPDL_BACKTRACE:
+=09case SPECPDL_NOP:
+=09case SPECPDL_MODULE_RUNTIME:
+=09case SPECPDL_MODULE_ENVIRONMENT:
+=09case SPECPDL_LET_LOCAL:
 =09default: break;
 =09}
     }
@@ -3489,6 +3514,7 @@ do_specbind (struct Lisp_Symbol *sym, union specbindi=
ng *bind,
       set_internal (specpdl_symbol (bind), value, Qnil, bindflag);
       break;
=20
+    case SYMBOL_VARALIAS:
     default:
       emacs_abort ();
     }
@@ -4081,6 +4107,15 @@ specpdl_unrewind (union specbinding *pdl, int distan=
ce, bool vars_only)
 =09  }
 =09  break;
=20
+=09case SPECPDL_UNWIND_ARRAY:
+=09case SPECPDL_UNWIND_PTR:
+=09case SPECPDL_UNWIND_INT:
+=09case SPECPDL_UNWIND_INTMAX:
+=09case SPECPDL_UNWIND_VOID:
+=09case SPECPDL_BACKTRACE:
+=09case SPECPDL_NOP:
+=09case SPECPDL_MODULE_RUNTIME:
+=09case SPECPDL_MODULE_ENVIRONMENT:
 =09default: break;
 =09}
     }
@@ -4149,6 +4184,18 @@ DEFUN ("backtrace--locals", Fbacktrace__locals, Sbac=
ktrace__locals, 1, 2, NULL,
       {
 =09switch (tmp->kind)
 =09  {
+=09  case SPECPDL_UNWIND:
+=09  case SPECPDL_UNWIND_ARRAY:
+=09  case SPECPDL_UNWIND_PTR:
+=09  case SPECPDL_UNWIND_INT:
+=09  case SPECPDL_UNWIND_INTMAX:
+=09  case SPECPDL_UNWIND_EXCURSION:
+=09  case SPECPDL_UNWIND_VOID:
+=09  case SPECPDL_BACKTRACE:
+=09  case SPECPDL_NOP:
+=09  case SPECPDL_MODULE_RUNTIME:
+=09  case SPECPDL_MODULE_ENVIRONMENT
+=09    break;
 =09  case SPECPDL_LET:
 =09  case SPECPDL_LET_DEFAULT:
 =09  case SPECPDL_LET_LOCAL:
diff --git a/src/filelock.c b/src/filelock.c
index e61c6776e3e..3105e8044d3 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -373,7 +373,9 @@ integer_prefixed (char const *s)
     ANOTHER_OWNS_IT =3D NEGATIVE_ERRNO ? 1 : -1,
=20
     /* This Emacs process owns it.  */
-    I_OWN_IT =3D 2 * ANOTHER_OWNS_IT
+    I_OWN_IT =3D 2 * ANOTHER_OWNS_IT,
+
+    NOBODY_OWNS_IT =3D 0,
   };
=20
 /* Return 0 if nobody owns the lock file LFNAME or the lock is obsolete,
@@ -800,7 +802,7 @@ DEFUN ("file-locked-p", Ffile_locked_p, Sfile_locked_p,=
 1, 1, 0,
     case ANOTHER_OWNS_IT:
       ret =3D make_string (locker.user, locker.at - locker.user);
       break;
-    case  0: ret =3D Qnil; break;
+    case NOBODY_OWNS_IT: ret =3D Qnil; break;
     default: report_file_errno ("Testing file lock", filename, owner);
     }
=20
diff --git a/src/fns.c b/src/fns.c
index ec1a39fada7..1d3ec32a637 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -2860,6 +2860,12 @@ internal_equal_1 (Lisp_Object o1, Lisp_Object o2, en=
um equal_kind equal_kind,
 =09    else
 =09      hash_put (h, o1, Fcons (o2, Qnil), hash);
 =09  }
+=09case Lisp_Symbol:
+=09case Lisp_Type_Unused0:
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09case Lisp_String:
+=09case Lisp_Float:
 =09default: ;
 =09}
     }
@@ -2986,8 +2992,12 @@ internal_equal_1 (Lisp_Object o1, Lisp_Object o2, en=
um equal_kind equal_kind,
 =09      && (equal_kind !=3D EQUAL_INCLUDING_PROPERTIES
 =09          || compare_string_intervals (o1, o2)));
=20
-    default:
-      break;
+    case Lisp_Type_Unused0:
+      eassume (0);
+    case Lisp_Symbol:
+    case Lisp_Int0:
+    case Lisp_Int1:
+    default: break;
     }
=20
   return false;
@@ -3195,8 +3205,35 @@ value_cmp (Lisp_Object a, Lisp_Object b, int maxdept=
h)
 =09=09b =3D XSYMBOL_WITH_POS_SYM (b);
 =09=09goto tail_recurse;
=20
-=09      default:
-=09=09/* Treat other types as unordered.  */
+=09      case PVEC_FREE: eassume (0);
+=09      case PVEC_OVERLAY:
+=09      case PVEC_FINALIZER:
+=09      case PVEC_MISC_PTR:
+=09      case PVEC_USER_PTR:
+=09      case PVEC_FRAME:
+=09      case PVEC_WINDOW:
+=09      case PVEC_HASH_TABLE:
+=09      case PVEC_OBARRAY:
+=09      case PVEC_TERMINAL:
+=09      case PVEC_WINDOW_CONFIGURATION:
+=09      case PVEC_SUBR:
+=09      case PVEC_OTHER:
+=09      case PVEC_XWIDGET:
+=09      case PVEC_XWIDGET_VIEW:
+=09      case PVEC_THREAD:
+=09      case PVEC_MUTEX:
+=09      case PVEC_CONDVAR:
+=09      case PVEC_MODULE_FUNCTION:
+=09      case PVEC_NATIVE_COMP_UNIT:
+=09      case PVEC_TS_PARSER:
+=09      case PVEC_TS_NODE:
+=09      case PVEC_TS_COMPILED_QUERY:
+=09      case PVEC_SQLITE:
+=09      case PVEC_CLOSURE:
+=09      case PVEC_CHAR_TABLE:
+=09      case PVEC_SUB_CHAR_TABLE:
+=09      case PVEC_FONT:
+=09      default: =09=09/* Treat other types as unordered.  */
 =09=09return 0;
 =09      }
 =09}
@@ -3226,8 +3263,8 @@ value_cmp (Lisp_Object a, Lisp_Object b, int maxdepth=
)
       }
       goto type_mismatch;
=20
-    default:
-      eassume (0);
+    case Lisp_Type_Unused0:
+    default: eassume (0);
     }
  type_mismatch:
   xsignal2 (Qtype_mismatch, a, b);
@@ -5572,8 +5609,9 @@ sxhash_obj (Lisp_Object obj, int depth)
     case Lisp_Float:
       return sxhash_float (XFLOAT_DATA (obj));
=20
-    default:
-      emacs_abort ();
+    case Lisp_Type_Unused0:
+      eassume (0);
+    default: emacs_abort ();
     }
 }
=20
diff --git a/src/font.c b/src/font.c
index dfe479f9355..1bbb27b07fc 100644
--- a/src/font.c
+++ b/src/font.c
@@ -432,8 +432,22 @@ font_style_to_value (enum font_property_index prop, Li=
sp_Object val,
 =09case FONT_WIDTH_INDEX:
 =09  Vfont_width_table =3D new_table;
 =09  break;
-=09default:
-=09  break;
+=09case FONT_TYPE_INDEX:
+=09case FONT_FOUNDRY_INDEX:
+=09case FONT_FAMILY_INDEX:
+=09case FONT_ADSTYLE_INDEX:
+=09case FONT_REGISTRY_INDEX:
+=09case FONT_SIZE_INDEX:
+=09case FONT_DPI_INDEX:
+=09case FONT_SPACING_INDEX:
+=09case FONT_AVGWIDTH_INDEX:
+=09case FONT_EXTRA_INDEX:
+=09case FONT_OBJLIST_INDEX:
+=09case FONT_NAME_INDEX:
+=09case FONT_FULLNAME_INDEX:
+=09case FONT_FILE_INDEX:
+=09case FONT_OBJECT_MAX:
+=09default: =09  eassume (0);
 =09}
       ASET (font_style_table, prop - FONT_WEIGHT_INDEX, new_table);
       return (100 << 8) | (i << 4);
diff --git a/src/fringe.c b/src/fringe.c
index 5cd6ff5fc8d..301ea0aba3d 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -861,8 +861,8 @@ draw_fringe_bitmap (struct window *w, struct glyph_row =
*row, int left_p)
 =09  cursor =3D Qhbar;
 =09  break;
 =09case NO_CURSOR:
-=09default:
-=09  w->phys_cursor_on_p =3D 0;
+=09case DEFAULT_CURSOR:
+=09default: =09  w->phys_cursor_on_p =3D 0;
 =09  row->cursor_in_fringe_p =3D 0;
 =09  break;
 =09}
diff --git a/src/keyboard.c b/src/keyboard.c
index 2d8c45c05ee..2b6a27c0604 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -4278,8 +4278,27 @@ kbd_buffer_get_event (KBOARD **kbp,
           kbd_fetch_ptr =3D next_kbd_event (event);
         }
         break;
-      default:
-=09{
+
+      case MULTIBYTE_CHAR_KEYSTROKE_EVENT:
+      case ASCII_KEYSTROKE_EVENT:
+      case NON_ASCII_KEYSTROKE_EVENT:
+      case TIMER_EVENT:
+      case MOUSE_CLICK_EVENT:
+      case WHEEL_EVENT:
+      case HORIZ_WHEEL_EVENT:
+      case SCROLL_BAR_CLICK_EVENT:
+      case HORIZONTAL_SCROLL_BAR_CLICK_EVENT:
+      case MENU_BAR_EVENT:
+      case DRAG_N_DROP_EVENT:
+      case USER_SIGNAL_EVENT:
+      case TAB_BAR_EVENT:
+      case TOOL_BAR_EVENT:
+      case TOUCH_END_EVENT:
+      case TOUCHSCREEN_UPDATE_EVENT:
+      case TOUCHSCREEN_BEGIN_EVENT:
+      case TOUCHSCREEN_END_EVENT:
+      case PINCH_EVENT:
+      default: =09{
 =09  /* If this event is on a different frame, return a
 =09     switch-frame this time, and leave the event in the queue
 =09     for next time.  */
@@ -7117,9 +7136,15 @@ make_lispy_event (struct input_event *event)
     case PREEDIT_TEXT_EVENT:
       return list2 (Qpreedit_text, event->arg);
=20
-      /* The 'kind' field of the event is something we don't recognize.  *=
/
-    default:
+    case SELECTION_REQUEST_EVENT:
+    case MENU_BAR_ACTIVATE_EVENT:
+    case SELECTION_CLEAR_EVENT:
+    case MONITORS_CHANGED_EVENT:
+    case TIMER_EVENT:
       emacs_abort ();
+
+      /* The 'kind' field of the event is something we don't recognize.  *=
/
+    default: emacs_abort ();
     }
 }
=20
@@ -12826,6 +12851,36 @@ is_ignored_event (union buffered_input_event *even=
t)
 #ifdef HAVE_DBUS
     case DBUS_EVENT: ignore_event =3D Qdbus_event; break;
 #endif
+    case ASCII_KEYSTROKE_EVENT:
+    case MULTIBYTE_CHAR_KEYSTROKE_EVENT:
+    case NON_ASCII_KEYSTROKE_EVENT:
+    case TIMER_EVENT:
+    case MOUSE_CLICK_EVENT:
+    case WHEEL_EVENT:
+    case HORIZ_WHEEL_EVENT:
+    case SCROLL_BAR_CLICK_EVENT:
+    case HORIZONTAL_SCROLL_BAR_CLICK_EVENT:
+    case SELECTION_CLEAR_EVENT:
+    case DELETE_WINDOW_EVENT:
+    case MENU_BAR_EVENT:
+    case MENU_BAR_ACTIVATE_EVENT:
+    case DRAG_N_DROP_EVENT:
+    case USER_SIGNAL_EVENT:
+    case TAB_BAR_EVENT:
+    case TOOL_BAR_EVENT:
+    case MOVE_FRAME_EVENT:
+    case SELECT_WINDOW_EVENT:
+    case SAVE_SESSION_EVENT:
+    case THREAD_EVENT:
+    case CONFIG_CHANGED_EVENT:
+    case PREEDIT_TEXT_EVENT:
+    case TOUCH_END_EVENT:
+    case TOUCHSCREEN_UPDATE_EVENT:
+    case TOUCHSCREEN_BEGIN_EVENT:
+    case TOUCHSCREEN_END_EVENT:
+    case PINCH_EVENT:
+    case MONITORS_CHANGED_EVENT:
+    case NO_EVENT:
     default: ignore_event =3D Qnil; break;
     }
=20
diff --git a/src/lread.c b/src/lread.c
index 6af95873bb8..5e2389b3a64 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -3994,8 +3994,14 @@ read0 (Lisp_Object readcharfun, bool locate_syms)
 =09  obj =3D string_props_from_rev_list (read_stack_pop () ->u.vector.elem=
s,
 =09=09=09=09=09    readcharfun);
 =09  break;
-=09default:
-=09  invalid_syntax (")", readcharfun);
+=09case RE_list_dot: /* ( a . ) */
+=09case RE_vector: /* [ a ) */
+=09case RE_char_table:
+=09case RE_sub_char_table:
+=09case RE_byte_code:
+=09case RE_special:
+=09case RE_numbered:
+=09default: =09  invalid_syntax (")", readcharfun);
 =09}
       break;
=20
@@ -4032,8 +4038,14 @@ read0 (Lisp_Object readcharfun, bool locate_syms)
 =09  obj =3D sub_char_table_from_rev_list (read_stack_pop ()->u.vector.ele=
ms,
 =09=09=09=09=09      readcharfun);
 =09  break;
-=09default:
-=09  invalid_syntax ("]", readcharfun);
+=09case RE_list_start:
+=09case RE_list:
+=09case RE_list_dot:
+=09case RE_record:
+=09case RE_string_props:
+=09case RE_special:
+=09case RE_numbered:
+=09default: =09  invalid_syntax ("]", readcharfun);
 =09  break;
 =09}
       break;
@@ -4695,8 +4707,14 @@ substitute_object_recurse (struct subst *subst, Lisp=
_Object subtree)
       }
=20
       /* Other types don't recurse any further.  */
-    default:
+    case Lisp_Int0:
+    case Lisp_Int1:
+    case Lisp_Float:
+    case Lisp_Symbol:
       return subtree;
+
+    case Lisp_Type_Unused0:
+    default: eassume (0);
     }
 }
=20
diff --git a/src/pdumper.c b/src/pdumper.c
index dee13fb9a81..9918a690e58 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -178,19 +178,35 @@ #define dump_offsetof(type, member)                  =
           \
     /* dump_ptr =3D dump_ptr + dump_base  */
     RELOC_DUMP_TO_DUMP_PTR_RAW,
     /* dump_mpz =3D [rebuild bignum]  */
+#ifdef HAVE_NATIVE_COMP
     RELOC_NATIVE_COMP_UNIT,
     RELOC_NATIVE_SUBR,
+#endif
     RELOC_BIGNUM,
     /* dump_lv =3D make_lisp_ptr (dump_lv + dump_base,
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol)
        Must be second-last.  */
     RELOC_DUMP_TO_DUMP_LV,
+    RELOC_DUMP_TO_DUMP_LV1,
+    RELOC_DUMP_TO_DUMP_LV2,
+    RELOC_DUMP_TO_DUMP_LV3,
+    RELOC_DUMP_TO_DUMP_LV4,
+    RELOC_DUMP_TO_DUMP_LV5,
+    RELOC_DUMP_TO_DUMP_LV6,
+    RELOC_DUMP_TO_DUMP_LV7,
     /* dump_lv =3D make_lisp_ptr (dump_lv + emacs_basis(),
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol.)
        Must be last.  */
     RELOC_DUMP_TO_EMACS_LV =3D RELOC_DUMP_TO_DUMP_LV + 8,
+    RELOC_DUMP_TO_EMACS_LV1,
+    RELOC_DUMP_TO_EMACS_LV2,
+    RELOC_DUMP_TO_EMACS_LV3,
+    RELOC_DUMP_TO_EMACS_LV4,
+    RELOC_DUMP_TO_EMACS_LV5,
+    RELOC_DUMP_TO_EMACS_LV6,
+    RELOC_DUMP_TO_EMACS_LV7,
   };
=20
 enum emacs_reloc_type
@@ -1445,6 +1461,9 @@ dump_reloc_dump_to_dump_lv (struct dump_context *ctx,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_DUMP_LV + type;
       break;
+    case Lisp_Type_Unused0: eassume (0);
+    case Lisp_Int0:
+    case Lisp_Int1:
     default:
       emacs_abort ();
     }
@@ -1494,8 +1513,12 @@ dump_reloc_dump_to_emacs_lv (struct dump_context *ct=
x,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_EMACS_LV + type;
       break;
+    case Lisp_Symbol:
+    case Lisp_Int0:
+    case Lisp_Int1:
     default:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
     }
=20
   dump_push (&ctx->dump_relocs[EARLY_RELOCS],
@@ -1817,8 +1840,12 @@ dump_field_lv_or_rawptr (struct dump_context *ctx,
         case Lisp_Float:
           value =3D make_lisp_ptr (ptrval, *ptr_raw_type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09  emacs_abort ();
+
+=09case Lisp_Type_Unused0: eassume (0);
+        default: eassume (0);
         }
     }
=20
@@ -2392,8 +2419,7 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
     case Lisp_Fwd_Kboard_Obj:
       offset =3D dump_fwd_kboard_obj (ctx, p);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   return offset;
@@ -2458,8 +2484,10 @@ dump_pre_dump_symbol (struct dump_context *ctx, stru=
ct Lisp_Symbol *symbol)
       dump_remember_symbol_aux (ctx, symbol_lv,
 =09=09=09=09dump_fwd (ctx, symbol->u.s.val.fwd));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
 }
@@ -2524,8 +2552,7 @@ dump_symbol (struct dump_context *ctx,
     case SYMBOL_FORWARDED:
       dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
@@ -2555,8 +2582,10 @@ dump_symbol (struct dump_context *ctx,
 =09  ? aux_offset
 =09  : dump_fwd (ctx, symbol->u.s.val.fwd)));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   return offset;
 }
@@ -3142,10 +3171,11 @@ dump_vectorlike (struct dump_context *ctx,
     case PVEC_SQLITE:
     case PVEC_MODULE_FUNCTION:
     case PVEC_SYMBOL_WITH_POS:
-    case PVEC_FREE:
     case PVEC_TS_PARSER:
     case PVEC_TS_NODE:
       break;
+    case PVEC_FREE: eassume (0);
+    default: eassume (0);
     }
   int iptype =3D ptype;
   static char const fmt[] =3D "pseudovector type %d";
@@ -3248,8 +3278,9 @@ dump_object (struct dump_context *ctx, Lisp_Object ob=
ject)
     case Lisp_Int1:
       eassert ("should not be dumping int: is self-representing" && 0);
       abort ();
-    default:
-      emacs_abort ();
+    case Lisp_Type_Unused0:
+      eassume (0);
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
=20
@@ -3605,8 +3636,7 @@ dump_drain_cold_data (struct dump_context *ctx)
 =09  dump_cold_native_subr (ctx, data);
 =09  break;
 #endif
-        default:
-          emacs_abo
rt ();
+        default: eassume (0);
         }
     }
=20
@@ -3633,8 +3663,12 @@ read_ptr_raw_and_lv (const void *mem,
         case Lisp_Float:
           *out_lv =3D make_lisp_ptr (*out_ptr, type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09  emacs_abort ();
+=09case Lisp_Type_Unused0:
+=09  eassume (0);
+=09default: eassume (0);
         }
     }
 }
@@ -3886,8 +3920,7 @@ decode_emacs_reloc (struct dump_context *ctx, Lisp_Ob=
ject lreloc)
           }
       }
       break;
-    default:
-      eassume (!"not reached");
+    default: eassume (0);
     }
=20
   /* We should have consumed the whole relocation descriptor.  */
@@ -4071,8 +4104,7 @@ dump_do_fixup (struct dump_context *ctx,
         do_write =3D false;
         break;
       }
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   if (do_write)
     dump_write (ctx, &dump_value, sizeof (dump_value));
@@ -4523,8 +4555,7 @@ dump_anonymous_allocate_w32 (void *base,
       mem_type =3D MEM_COMMIT;
       mem_prot =3D PAGE_READWRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D VirtualAlloc (base, size, mem_type, mem_prot);
@@ -4563,8 +4594,7 @@ dump_anonymous_allocate_posix (void *base,
     case DUMP_MEMORY_ACCESS_READWRITE:
       mem_prot =3D PROT_READ | PROT_WRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
@@ -4657,11 +4687,11 @@ dump_map_file_w32 (void *base, int fd, off_t offset=
, size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       protect =3D PAGE_WRITECOPY;=09/* for Windows 9X */
       break;
-    default:
     case DUMP_MEMORY_ACCESS_NONE:
     case DUMP_MEMORY_ACCESS_READ:
       protect =3D PAGE_READONLY;
       break;
+    default: eassume (0);
     }
=20
   section =3D CreateFileMapping (file,
@@ -4685,8 +4715,7 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       map_access =3D FILE_MAP_COPY;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D MapViewOfFileEx (section,
@@ -4729,8 +4758,7 @@ dump_map_file_posix (void *base, int fd, off_t offset=
, size_t size,
       mem_prot =3D PROT_READ | PROT_WRITE;
       mem_flags =3D MAP_PRIVATE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   if (base)
@@ -5531,13 +5559,16 @@ dump_do_dump_relocation (const uintptr_t dump_base,
         mpz_roinit_n (bignum->value, limbs, reload_info.nlimbs);
         break;
       }
-    default: /* Lisp_Object in the dump; precise type in reloc.type */
+    case RELOC_DUMP_TO_DUMP_LV ... RELOC_DUMP_TO_DUMP_LV + 7:
+    case RELOC_DUMP_TO_EMACS_LV ... RELOC_DUMP_TO_EMACS_LV + 7:
+      /* Lisp_Object in the dump; precise type in reloc.type */
       {
         Lisp_Object lv =3D dump_make_lv_from_reloc (dump_base, reloc);
         eassert (dump_reloc_size (reloc) =3D=3D sizeof (lv));
         dump_write_lv_to_dump (dump_base, reloc_offset, lv);
         break;
       }
+    default: eassume (0);
     }
 }
=20
@@ -5597,8 +5628,7 @@ dump_do_emacs_relocation (const uintptr_t dump_base,
         memcpy (emacs_ptr_at (reloc.emacs_offset), &lv, sizeof (lv));
         break;
       }
-    default:
-      fatal ("unrecognied relocation type %d", (int) reloc.type);
+    default: eassume (0);
     }
 }
=20
diff --git a/src/print.c b/src/print.c
index c7cba5bface..a2537fcf759 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1461,8 +1461,12 @@ print_preprocess (Lisp_Object obj)
 =09=09    break;
 =09=09  }
=20
-=09=09default:
-=09=09  break;
+=09=09case Lisp_Symbol:
+=09=09case Lisp_Type_Unused0:
+=09=09case Lisp_Int0:
+=09=09case Lisp_Int1:
+=09=09case Lisp_Float:
+=09=09default: =09=09  break;
 =09=09}
 =09    }
 =09}
@@ -2103,9 +2107,9 @@ print_vectorlike_unreadable (Lisp_Object obj, Lisp_Ob=
ject printcharfun,
     case PVEC_BIGNUM:
     case PVEC_BOOL_VECTOR:
     /* Impossible cases.  */
-    case PVEC_FREE:
     case PVEC_OTHER:
       break;
+    case PVEC_FREE: eassume (0);
     }
   emacs_abort ();
 }
@@ -2640,14 +2644,44 @@ print_object (Lisp_Object obj, Lisp_Object printcha=
rfun, bool escapeflag)
 =09  print_bool_vector (obj, printcharfun);
 =09  break;
=20
-=09default:
-=09  print_vectorlike_unreadable (obj, printcharfun, escapeflag, buf);
+=09case PVEC_MARKER:
+=09case PVEC_OVERLAY:
+=09case PVEC_FINALIZER:
+=09case PVEC_SYMBOL_WITH_POS:
+=09case PVEC_MISC_PTR:
+=09case PVEC_USER_PTR:
+=09case PVEC_PROCESS:
+=09case PVEC_FRAME:
+=09case PVEC_WINDOW:
+=09case PVEC_BUFFER:
+=09case PVEC_OBARRAY:
+=09case PVEC_TERMINAL:
+=09case PVEC_WINDOW_CONFIGURATION:
+=09case PVEC_SUBR:
+=09case PVEC_OTHER:
+=09case PVEC_XWIDGET:
+=09case PVEC_XWIDGET_VIEW:
+=09case PVEC_THREAD:
+=09case PVEC_MUTEX:
+=09case PVEC_CONDVAR:
+=09case PVEC_MODULE_FUNCTION:
+=09case PVEC_NATIVE_COMP_UNIT:
+=09case PVEC_TS_PARSER:
+=09case PVEC_TS_NODE:
+=09case PVEC_TS_COMPILED_QUERY:
+=09case PVEC_SQLITE:
+=09case PVEC_FONT:
+=09default: =09  print_vectorlike_unreadable (obj, printcharfun, escapefla=
g, buf);
 =09  break;
+
+=09case PVEC_FREE: eassume (0);
 =09}
 =09break;
=20
-    default:
-      emacs_abort ();
+    case Lisp_Type_Unused0:
+      eassume (0);
+
+    default: emacs_abort ();
     }
   print_depth--;
=20
diff --git a/src/process.c b/src/process.c
index 807f06f990b..00944710128 100644
--- a/src/process.c
+++ b/src/process.c
@@ -2949,8 +2949,8 @@ set_socket_option (int s, Lisp_Object opt, Lisp_Objec=
t val)
       }
 #endif
=20
-    default:
-      return 0;
+    case SOPT_UNKNOWN:
+    default: return 0;
     }
=20
   if (ret < 0)
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index d3017f46751..e568b4638f4 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -2907,9 +2907,36 @@ forall_firstchar_1 (re_char *p, re_char *pend,
 =09      case succeed_n:
 =09        newp2 =3D extract_address (newp1 + 1);
 =09        goto do_twoway_jump;
-=09      default:
+=09      case no_op:
 =09        newp2 =3D loop_end; /* "Safe" choice.  */
 =09        goto do_jump;
+=09      case succeed:
+=09      case exactn:
+=09      case anychar:
+=09      case charset:
+=09      case charset_not:
+=09      case start_memory:
+=09      case stop_memory:
+=09      case duplicate:
+=09      case begline:
+=09      case endline:
+=09      case begbuf:
+=09      case endbuf:
+=09      case jump:
+=09      case jump_n:
+=09      case set_number_at:
+=09      case wordbeg:
+=09      case wordend:
+=09      case wordbound:
+=09      case notwordbound:
+=09      case symbeg:
+=09      case symend:
+=09      case syntaxspec:
+=09      case notsyntaxspec:
+=09      case at_dot:
+=09      case categoryspec:
+=09      case notcategoryspec:
+=09      default: eassume (0);
 =09      }
=20
 =09  case on_failure_jump:
@@ -3221,7 +3248,18 @@ analyze_first_fastmap (const re_char *p, void *arg)
     case symend:
       /* This false doesn't mean failure but rather "not succeeded yet".  =
*/
       return false;
-
+    case no_op:
+    case start_memory:
+    case stop_memory:
+    case jump:
+    case on_failure_jump:
+    case on_failure_keep_string_jump:
+    case on_failure_jump_loop:
+    case on_failure_jump_nastyloop:
+    case on_failure_jump_smart:
+    case succeed_n:
+    case jump_n:
+    case set_number_at:
     default:
 #if ENABLE_CHECKING
       abort (); /* We have listed all the cases.  */
@@ -3270,6 +3308,18 @@ analyze_first_null (const re_char *p, void *arg)
       /* This false doesn't mean failure but rather "not succeeded yet".  =
*/
       return false;
=20
+    case no_op:
+    case start_memory:
+    case stop_memory:
+    case jump:
+    case on_failure_jump:
+    case on_failure_keep_string_jump:
+    case on_failure_jump_loop:
+    case on_failure_jump_nastyloop:
+    case on_failure_jump_smart:
+    case succeed_n:
+    case jump_n:
+    case set_number_at:
     default:
 #if ENABLE_CHECKING
       abort (); /* We have listed all the cases.  */
@@ -3739,8 +3789,32 @@ skip_one_char (re_char *p)
       p++;
       break;
=20
-    default:
-      p =3D NULL;
+    case no_op:
+    case succeed:
+    case start_memory:
+    case stop_memory:
+    case duplicate:
+    case begline:
+    case endline:
+    case begbuf:
+    case endbuf:
+    case jump:
+    case on_failure_jump:
+    case on_failure_keep_string_jump:
+    case on_failure_jump_loop:
+    case on_failure_jump_nastyloop:
+    case on_failure_jump_smart:
+    case succeed_n:
+    case jump_n:
+    case set_number_at:
+    case wordbeg:
+    case wordend:
+    case wordbound:
+    case notwordbound:
+    case symbeg:
+    case symend:
+    case at_dot:
+    default: p =3D NULL;
     }
   return p;
 }
@@ -3974,6 +4048,37 @@ #define RETURN_CONSTRAIN(v)        \
 =09     chars should cover all possible chars, which, as a matter of
 =09     fact, is virtually impossible in multibyte buffers.  */
 =09  return false;
+=09case no_op:
+=09case succeed:
+=09case anychar:
+=09case start_memory:
+=09case stop_memory:
+=09case duplicate:
+=09case begline:
+=09case endline:
+=09case begbuf:
+=09case endbuf:
+=09case jump:
+=09case on_failure_jump:
+=09case on_failure_keep_string_jump:
+=09case on_failure_jump_loop:
+=09case on_failure_jump_nastyloop:
+=09case on_failure_jump_smart:
+=09case succeed_n:
+=09case jump_n:
+=09case set_number_at:
+=09case wordbeg:
+=09case wordend:
+=09case wordbound:
+=09case notwordbound:
+=09case symbeg:
+=09case symend:
+=09case syntaxspec:
+=09case notsyntaxspec:
+=09case at_dot:
+=09case categoryspec:
+=09case notcategoryspec:
+=09  break;
 =09}
       return false;
     case anychar:
@@ -4011,6 +4116,18 @@ #define RETURN_CONSTRAIN(v)        \
       /* At this point, we know nothing about what this can match, sadly. =
 */
       return false;
=20
+    case no_op:
+    case start_memory:
+    case stop_memory:
+    case jump:
+    case on_failure_jump:
+    case on_failure_keep_string_jump:
+    case on_failure_jump_loop:
+    case on_failure_jump_nastyloop:
+    case on_failure_jump_smart:
+    case succeed_n:
+    case jump_n:
+    case set_number_at:
     default:
 #if ENABLE_CHECKING
       abort (); /* We have listed all the cases.  */
@@ -5225,8 +5342,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
 =09  }
 =09  break;
=20
-=09default:
-=09  abort ();
+=09default: =09  abort ();
 =09}
       continue;  /* Successfully executed one pattern command; keep going.=
  */
=20
@@ -5262,8 +5378,34 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
 =09      /* A special frame used for nastyloops. */
 =09      goto fail;
=20
-=09    default:
-=09      abort ();
+=09    case succeed:
+=09    case exactn:
+=09    case anychar:
+=09    case charset:
+=09    case charset_not:
+=09    case start_memory:
+=09    case stop_memory:
+=09    case duplicate:
+=09    case begline:
+=09    case endline:
+=09    case begbuf:
+=09    case endbuf:
+=09    case jump:
+=09    case on_failure_jump_smart:
+=09    case jump_n:
+=09    case set_number_at:
+=09    case wordbeg:
+=09    case wordend:
+=09    case wordbound:
+=09    case notwordbound:
+=09    case symbeg:
+=09    case symend:
+=09    case syntaxspec:
+=09    case notsyntaxspec:
+=09    case at_dot:
+=09    case categoryspec:
+=09    case notcategoryspec:
+=09    default: =09      abort ();
 =09    }
=20
 =09  eassert (p >=3D bufp->buffer && p <=3D pend);
diff --git a/src/syntax.c b/src/syntax.c
index 91dbe6a5f83..56db5c484fb 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -882,8 +882,18 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptr=
diff_t stop,
 =09    }
 =09  break;
=20
-=09default:
+=09case Swhitespace:
+=09case Spunct:
+=09case Sword:
+=09case Ssymbol:
+=09case Sclose:
+=09case Squote:
+=09case Smath:
+=09case Sescape:
+=09case Scharquote:
+=09case Sinherit:
 =09  break;
+=09default: =09  eassume (0);
 =09}
     }
=20
@@ -1399,9 +1409,7 @@ DEFUN ("internal-describe-syntax-value", Finternal_de=
scribe_syntax_value,
       insert_string ("comment fence"); break;
     case Sstring_fence:
       insert_string ("string fence"); break;
-    default:
-      insert_string ("invalid");
-      return syntax;
+    default: eassume (0);
     }
=20
   if (!NILP (match_lisp))
@@ -2738,8 +2746,19 @@ scan_lists (EMACS_INT from0, EMACS_INT count, EMACS_=
INT depth, bool sexpflag)
 =09=09    case Ssymbol:
 =09=09    case Squote:
 =09=09      break;
-=09=09    default:
+=09=09    case Swhitespace:
+=09=09    case Spunct:
+=09=09    case Sopen:
+=09=09    case Sclose:
+=09=09    case Sstring:
+=09=09    case Smath:
+=09=09    case Scomment:
+=09=09    case Sendcomment:
+=09=09    case Sinherit:
+=09=09    case Scomment_fence:
+=09=09    case Sstring_fence:
 =09=09      goto done;
+=09=09    default: =09=09      eassume (0);
 =09=09    }
 =09=09  inc_both (&from, &from_byte);
 =09=09  rarely_quit (++quit_count);
@@ -2819,9 +2838,14 @@ scan_lists (EMACS_INT from0, EMACS_INT count, EMACS_=
INT depth, bool sexpflag)
 =09      inc_both (&from, &from_byte);
 =09      if (!depth && sexpflag) goto done;
 =09      break;
-=09    default:
+=09    case Swhitespace:
+=09    case Spunct:
+=09    case Squote:
+=09    case Sendcomment:
+=09    case Sinherit:
 =09      /* Ignore whitespace, punctuation, quote, endcomment.  */
 =09      break;
+=09    default: =09      eassume (0);
 =09    }
 =09}
=20
@@ -2909,7 +2933,21 @@ scan_lists (EMACS_INT from0, EMACS_INT count, EMACS_=
INT depth, bool sexpflag)
 =09=09    switch (syntax_multibyte (c1, multibyte_symbol_p))
 =09=09      {
 =09=09      case Sword: case Ssymbol: case Squote: break;
-=09=09      default: goto done2;
+=09=09      case Spunct:
+=09=09      case Sopen:
+=09=09      case Sclose:
+=09=09      case Sstring:
+=09=09      case Smath:
+=09=09      case Sescape:
+=09=09      case Scharquote:
+=09=09      case Scomment:
+=09=09      case Sendcomment:
+=09=09      case Sinherit:
+=09=09      case Scomment_fence:
+=09=09      case Sstring_fence:
+=09=09      case Swhitespace:
+=09=09=09goto done2;
+=09=09      default: eassume (0);
 =09=09      }
 =09=09  dec_both (&from, &from_byte);
 =09=09  rarely_quit (++quit_count);
@@ -3000,9 +3038,14 @@ scan_lists (EMACS_INT from0, EMACS_INT count, EMACS_=
INT depth, bool sexpflag)
 =09=09}
 =09      if (!depth && sexpflag) goto done2;
 =09      break;
-=09    default:
+=09    case Spunct:
+=09    case Squote:
+=09    case Scomment:
+=09    case Sinherit:
+=09    case Swhitespace:
 =09      /* Ignore whitespace, punctuation, quote, endcomment.  */
 =09      break;
+=09    default: =09      eassume (0);
 =09    }
 =09}
=20
@@ -3304,8 +3347,19 @@ #define INC_FROM=09=09=09=09\
 =09=09case Ssymbol:
 =09=09case Squote:
 =09=09  break;
-=09=09default:
+=09=09case Spunct:
+=09=09case Sopen:
+=09=09case Sclose:
+=09=09case Sstring:
+=09=09case Smath:
+=09=09case Scomment:
+=09=09case Sendcomment:
+=09=09case Sinherit:
+=09=09case Scomment_fence:
+=09=09case Sstring_fence:
+=09=09case Swhitespace:
 =09=09  goto symdone;
+=09=09default: =09=09  eassume (0);
 =09=09}
 =09      INC_FROM;
 =09      rarely_quit (++quit_count);
@@ -3422,8 +3476,21 @@ #define INC_FROM=09=09=09=09\
 =09=09    if (from >=3D end) goto endquoted;
 =09=09    break;
=20
-=09=09  default:
+=09=09  case Spunct:
+=09=09  case Sword:
+=09=09  case Ssymbol:
+=09=09  case Sopen:
+=09=09  case Sclose:
+=09=09  case Squote:
+=09=09  case Sstring:
+=09=09  case Smath:
+=09=09  case Scomment:
+=09=09  case Sendcomment:
+=09=09  case Sinherit:
+=09=09  case Scomment_fence:
+=09=09  case Swhitespace:
 =09=09    break;
+=09=09  default: =09=09    eassume (0);
 =09=09  }
 =09=09INC_FROM;
 =09=09rarely_quit (++quit_count);
@@ -3439,9 +3506,14 @@ #define INC_FROM=09=09=09=09\
 =09case Smath:
 =09  /* FIXME: We should do something with it.  */
 =09  break;
-=09default:
+=09case Spunct:
+=09case Squote:
+=09case Sendcomment:
+=09case Sinherit:
+=09case Swhitespace:
 =09  /* Ignore whitespace, punctuation, quote, endcomment.  */
 =09  break;
+=09default: =09  eassume (0);
 =09}
     }
   goto done;
diff --git a/src/syntax.h b/src/syntax.h
index 354b116bfd1..c2c14d686b4 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -59,9 +59,10 @@ #define Vstandard_syntax_table BVAR (&buffer_defaults, s=
yntax_table)
 =09=09       other side by any char with the same syntaxcode.  */
     Sstring_fence,  /* Starts/ends string which is delimited on the
 =09=09       other side by any char with the same syntaxcode.  */
-    Smax=09 /* Upper bound on codes that are meaningful.  */
+    Smaxm1 =3D Sstring_fence=09 /* Upper bound on codes that are meaningfu=
l.  */
   };
=20
+#define Smax (Smaxm1 + 1)
=20
 struct gl_state_s
 {
diff --git a/src/sysdep.c b/src/sysdep.c
index a161b4af100..a3051c4978b 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2520,7 +2520,7 @@ emacs_fopen (char const *file, char const *mode)
     case 'r': omode =3D O_RDONLY; oflags =3D 0; break;
     case 'w': omode =3D O_WRONLY; oflags =3D O_CREAT | O_TRUNC; break;
     case 'a': omode =3D O_WRONLY; oflags =3D O_CREAT | O_APPEND; break;
-    default: emacs_abort ();
+    default: eassume (0);
     }
=20
   while (*m)
diff --git a/src/term.c b/src/term.c
index f307d709316..5cb545d8632 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3476,6 +3476,8 @@ tty_menu_activate (tty_menu *menu, int *pane, int *se=
lidx,
 =09=09first_item--;
 =09      leave =3D 0;
 =09      break;
+=09    case MI_CONTINUE:
+=09    case MI_ITEM_SELECTED:
 =09    default:
 =09      /* MI_ITEM_SELECTED is handled below, so nothing to do.  */
 =09      break;
diff --git a/src/textconv.c b/src/textconv.c
index 105a8077072..fe269aee8d7 100644
--- a/src/textconv.c
+++ b/src/textconv.c
@@ -267,9 +267,15 @@ textconv_query (struct frame *f, struct textconv_callb=
ack_struct *query,
 =09      pos =3D end;
 =09      break;
=20
-=09    default:
+=09    case TEXTCONV_BACKWARD_CHAR:
+=09    case TEXTCONV_BACKWARD_WORD:
+=09    case TEXTCONV_CARET_UP:
+=09    case TEXTCONV_PREVIOUS_LINE:
+=09    case TEXTCONV_LINE_END:
+=09    case TEXTCONV_ABSOLUTE_POSITION:
 =09      pos =3D max (BEGV, start - 1);
 =09      break;
+=09    default: =09      eassume (0);
 =09    }
 =09}
     }
@@ -433,8 +439,8 @@ textconv_query (struct frame *f, struct textconv_callba=
ck_struct *query,
 =09  return 1;
 =09}
=20
-    default:
-      break;
+    case TEXTCONV_RETRIEVAL:
+    default: break;
     }
=20
   /* Undo any changes to the excursion.  */
diff --git a/src/timefns.c b/src/timefns.c
index aab4dbb9206..db5eaa7a25c 100644
--- a/src/timefns.c
+++ b/src/timefns.c
@@ -577,8 +577,9 @@ decode_ticks_hz (Lisp_Object ticks, Lisp_Object hz, enu=
m cform cform)
     case CFORM_TICKS_HZ:
       return (union c_time) { .th =3D { .ticks =3D ticks, .hz =3D hz } };
=20
-    default:
-      return (union c_time) { .ts =3D ticks_hz_to_timespec (ticks, hz) };
+    case CFORM_TIMESPEC:
+    case CFORM_SECS_ONLY:
+    default: return (union c_time) { .ts =3D ticks_hz_to_timespec (ticks, =
hz) };
     }
 }
=20
diff --git a/src/treesit.c b/src/treesit.c
index 62606d99749..8bf18f9defb 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -1457,8 +1457,9 @@ treesit_query_error_to_string (TSQueryError error)
       return "Capture error at";
     case TSQueryErrorStructure:
       return "Structure error at";
-    default:
-      return "Unknown error";
+    case TSQueryErrorLanguage:
+      return "Language error at";
+    default: return "Unknown error";
     }
 }
=20
diff --git a/src/xdisp.c b/src/xdisp.c
index 36e82f873ab..9a167ff453f 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2961,6 +2961,8 @@ remember_mouse_glyph (struct frame *f, int gx, int gy=
, NativeRectangle *rect)
       height =3D WINDOW_BOTTOM_DIVIDER_WIDTH (w);
       goto add_edge;
=20
+    case ON_NOTHING:
+    case ON_HORIZONTAL_SCROLL_BAR: /* FIXME: is this right? */
     default:
       ;
     virtual_glyph:
@@ -11028,8 +11030,9 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, in=
t to_x, int to_y, int to_vpos
 =09    it->continuation_lines_width +=3D it->current_x;
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09case MOVE_UNDEFINED:
+=09case MOVE_X_REACHED:
+=09default: =09  emacs_abort ();
 =09}
=20
       /* Reset/increment for the next run.  */
@@ -20528,8 +20531,9 @@ redisplay_window (Lisp_Object window, bool just_thi=
s_one_p)
 =09case CURSOR_MOVEMENT_MUST_SCROLL:
 =09  goto try_to_scroll;
=20
-=09default:
-=09  emacs_abort ();
+=09case CURSOR_MOVEMENT_CANNOT_BE_USED:
+=09case CURSOR_MOVEMENT_NEED_LARGER_MATRICES:
+=09default: =09  emacs_abort ();
 =09}
     }
   /* If current starting point was originally the beginning of a line
@@ -26362,6 +26366,7 @@ DEFUN ("current-bidi-paragraph-direction", Fcurrent=
_bidi_paragraph_direction,
 =09case R2L:
 =09  return Qright_to_left;
 =09  break;
+=09case NEUTRAL_DIR: /* Is this right? */
 =09default:
 =09  emacs_abort ();
 =09}
@@ -28155,8 +28160,14 @@ display_mode_element (struct it *it, int depth, in=
t field_width, int precision,
       }
       break;
=20
-    default:
-    invalid:
+    case Lisp_Type_Unused0:
+      eassume (0);
+
+    case Lisp_Int0:
+    case Lisp_Int1:
+    case Lisp_Vectorlike:
+    case Lisp_Float:
+    default: invalid:
       elt =3D build_string ("*invalid*");
       goto tail_recurse;
     }
diff --git a/src/xfaces.c b/src/xfaces.c
index fbbaffb8889..6a701f89cd3 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1334,8 +1334,21 @@ load_color2 (struct frame *f, struct face *face, Lis=
p_Object name,
 =09  color->pixel =3D FRAME_FOREGROUND_PIXEL (f);
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09case LFACE_FAMILY_INDEX:
+=09case LFACE_FOUNDRY_INDEX:
+=09case LFACE_SWIDTH_INDEX:
+=09case LFACE_HEIGHT_INDEX:
+=09case LFACE_WEIGHT_INDEX:
+=09case LFACE_SLANT_INDEX:
+=09case LFACE_INVERSE_INDEX:
+=09case LFACE_STIPPLE_INDEX:
+=09case LFACE_FONT_INDEX:
+=09case LFACE_INHERIT_INDEX:
+=09case LFACE_FONTSET_INDEX:
+=09case LFACE_DISTANT_FOREGROUND_INDEX:
+=09case LFACE_EXTEND_INDEX:
+=09case LFACE_VECTOR_SIZE:
+=09default: =09  emacs_abort ();
 =09}
     }
 #ifdef GLYPH_DEBUG
@@ -1615,8 +1628,19 @@ DEFUN ("x-family-fonts", Fx_family_fonts, Sx_family_=
fonts, 0, 2, 0,
 =09font_props_for_sorting[i] =3D FONT_SIZE_INDEX; break;
       case XLFD_WEIGHT:
 =09font_props_for_sorting[i] =3D FONT_WEIGHT_INDEX; break;
-      default:
-=09font_props_for_sorting[i] =3D FONT_SLANT_INDEX; break;
+      case XLFD_FOUNDRY:
+      case XLFD_FAMILY:
+      case XLFD_SLANT:
+      case XLFD_ADSTYLE:
+      case XLFD_PIXEL_SIZE:
+      case XLFD_RESX:
+      case XLFD_RESY:
+      case XLFD_SPACING:
+      case XLFD_AVGWIDTH:
+      case XLFD_REGISTRY:
+      case XLFD_ENCODING:
+      case XLFD_LAST:
+      default: =09font_props_for_sorting[i] =3D FONT_SLANT_INDEX; break;
       }
   font_props_for_sorting[i++] =3D FONT_FAMILY_INDEX;
   font_props_for_sorting[i++] =3D FONT_FOUNDRY_INDEX;
@@ -4430,8 +4454,12 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2)
     case Lisp_Symbol:
       return false;
=20
-    default:
-      return !NILP (Fequal (v1, v2));
+    case Lisp_Type_Unused0:
+      eassume (0);
+    case Lisp_Vectorlike:
+    case Lisp_Cons:
+    case Lisp_Float:
+    default: return !NILP (Fequal (v1, v2));
     }
 }
=20
@@ -5138,8 +5166,8 @@ lookup_basic_face (struct window *w, struct frame *f,=
 int face_id)
     case INTERNAL_BORDER_FACE_ID:=09name =3D Qinternal_border; =09break;
     case CHILD_FRAME_BORDER_FACE_ID:=09name =3D Qchild_frame_border; =09br=
eak;
=20
-    default:
-      emacs_abort (); /* the caller is supposed to pass us a basic face id=
 */
+    case BASIC_FACE_ID_SENTINEL:
+    default: emacs_abort (); /* the caller is supposed to pass us a basic =
face id */
     }
=20
   /* Do a quick scan through Vface_remapping_alist, and return immediately
@@ -6611,8 +6639,24 @@ map_tty_color (struct frame *f, struct face *face, L=
isp_Object color,
       face->underline_color =3D pixel;
       break;
     case LFACE_BACKGROUND_INDEX:
-    default:
-      face->background =3D pixel;
+    case LFACE_FAMILY_INDEX:
+    case LFACE_FOUNDRY_INDEX:
+    case LFACE_SWIDTH_INDEX:
+    case LFACE_HEIGHT_INDEX:
+    case LFACE_WEIGHT_INDEX:
+    case LFACE_SLANT_INDEX:
+    case LFACE_INVERSE_INDEX:
+    case LFACE_STIPPLE_INDEX:
+    case LFACE_OVERLINE_INDEX:
+    case LFACE_STRIKE_THROUGH_INDEX:
+    case LFACE_BOX_INDEX:
+    case LFACE_FONT_INDEX:
+    case LFACE_INHERIT_INDEX:
+    case LFACE_FONTSET_INDEX:
+    case LFACE_DISTANT_FOREGROUND_INDEX:
+    case LFACE_EXTEND_INDEX:
+    case LFACE_VECTOR_SIZE:
+    default: face->background =3D pixel;
       break;
     }
 }
diff --git a/src/xfns.c b/src/xfns.c
index ec7d54180e4..2cfcba6f29a 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3379,8 +3379,14 @@ xic_preedit_caret_callback (XIC xic, XPointer client=
_data,
 =09case XIMBackwardWord:
 =09  call_data->position =3D max (0, output->preedit_caret--);
 =09  break;
-=09default:
-=09  call_data->position =3D output->preedit_caret;
+=09case XIMCaretUp:
+=09case XIMCaretDown:
+=09case XIMNextLine:
+=09case XIMPreviousLine:
+=09case XIMLineStart:
+=09case XIMLineEnd:
+=09case XIMDontChange:
+=09default: =09  call_data->position =3D output->preedit_caret;
 =09}
=20
       if (output->preedit_chars)
@@ -3874,8 +3880,8 @@ xic_string_conversion_callback (XIC ic, XPointer clie=
nt_data,
       request.direction =3D TEXTCONV_ABSOLUTE_POSITION;
       break;
=20
-    default:
-      goto failure;
+    case XIMDontChange:
+    default: goto failure;
     }
=20
   /* factor is signed in call_data but is actually a CARD16.  */
diff --git a/src/xterm.c b/src/xterm.c
index 0a877e9edf9..02c5f03830b 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -5652,10 +5652,10 @@ xi_populate_device_from_info (struct x_display_info=
 *dpyinfo,
 =09      xi_device->direct_p =3D true;
 =09    else
 =09      xi_device->direct_p =3D false;
+=09    break;
 =09  }
 #endif /* HAVE_XINPUT2_2 */
-=09default:
-=09  break;
+=09default: eassume (0);
 =09}
     }
=20
@@ -6150,8 +6150,30 @@ x_try_cr_xlib_drawable (struct frame *f, GC gc)
     case CAIRO_SURFACE_TYPE_IMAGE:
       break;
=20
-    default:
-      return false;
+    case CAIRO_SURFACE_TYPE_PDF:
+    case CAIRO_SURFACE_TYPE_PS:
+    case CAIRO_SURFACE_TYPE_XCB:
+    case CAIRO_SURFACE_TYPE_GLITZ:
+    case CAIRO_SURFACE_TYPE_QUARTZ:
+    case CAIRO_SURFACE_TYPE_WIN32:
+    case CAIRO_SURFACE_TYPE_BEOS:
+    case CAIRO_SURFACE_TYPE_DIRECTFB:
+    case CAIRO_SURFACE_TYPE_SVG:
+    case CAIRO_SURFACE_TYPE_OS2:
+    case CAIRO_SURFACE_TYPE_WIN32_PRINTING:
+    case CAIRO_SURFACE_TYPE_QUARTZ_IMAGE:
+    case CAIRO_SURFACE_TYPE_SCRIPT:
+    case CAIRO_SURFACE_TYPE_QT:
+    case CAIRO_SURFACE_TYPE_RECORDING:
+    case CAIRO_SURFACE_TYPE_VG:
+    case CAIRO_SURFACE_TYPE_GL:
+    case CAIRO_SURFACE_TYPE_DRM:
+    case CAIRO_SURFACE_TYPE_TEE:
+    case CAIRO_SURFACE_TYPE_XML:
+    case CAIRO_SURFACE_TYPE_SKIA:
+    case CAIRO_SURFACE_TYPE_SUBSURFACE:
+    case CAIRO_SURFACE_TYPE_COGL:
+    default: return false;
     }
=20
   /* FRAME_CR_CONTEXT (f) is an image surface we can not draw into
@@ -10928,8 +10950,7 @@ x_fill_underline (struct frame *f, struct glyph_str=
ing *s,
=20
     case FACE_NO_UNDERLINE:
     case FACE_UNDERLINE_WAVE:
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
 }
=20
@@ -15862,8 +15883,18 @@ xg_scroll_callback (GtkRange *range, GtkScrollType=
 scroll,
 =09      ? scroll_bar_after_handle : scroll_bar_below_handle);
       bar->dragging =3D -1;
       break;
-    default:
-      break;
+case GTK_SCROLL_NONE:
+case GTK_SCROLL_STEP_UP:
+case GTK_SCROLL_STEP_DOWN:
+case GTK_SCROLL_PAGE_UP:
+case GTK_SCROLL_PAGE_DOWN:
+case GTK_SCROLL_STEP_LEFT:
+case GTK_SCROLL_STEP_RIGHT:
+case GTK_SCROLL_PAGE_LEFT:
+case GTK_SCROLL_PAGE_RIGHT:
+case GTK_SCROLL_START:
+case GTK_SCROLL_END:
+    default: break;
     }
=20
   if (part !=3D scroll_bar_nowhere)
@@ -18030,6 +18061,10 @@ x_net_wm_state (struct frame *f, Window window)
     case FULLSCREEN_MAXIMIZED:
       lval =3D Qmaximized;
       break;
+    case FULLSCREEN_NONE:
+      lval =3D Qnil;
+      break;
+    default: eassume (0);
     }
=20
   store_frame_param (f, Qfullscreen, lval);
@@ -19139,6 +19174,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 =09=09    x_dnd_action_symbol =3D QXdndActionCopy;
 =09=09    break;
=20
+=09=09  case XM_DRAG_NOOP:
+=09=09  case XM_DRAG_LINK:
+=09=09  case XM_DRAG_LINK_REC:
 =09=09    /* This means XM_DRAG_OPERATION_IS_LINK (operation).  */
 =09=09  default:
 =09=09    x_dnd_action_symbol =3D QXdndActionLink;
@@ -26086,8 +26124,9 @@ x_draw_window_cursor (struct window *w, struct glyp=
h_row *glyph_row, int x,
 =09      w->phys_cursor_width =3D 0;
 =09      break;
=20
-=09    default:
+=09    case DEFAULT_CURSOR:
 =09      emacs_abort ();
+=09    default: =09      emacs_abort ();
 =09    }
 =09}
=20
@@ -28259,6 +28298,10 @@ x_handle_net_wm_state (struct frame *f, const XPro=
pertyEvent *event)
     case FULLSCREEN_MAXIMIZED:
       lval =3D Qmaximized;
       break;
+    case FULLSCREEN_NONE:
+      lval =3D Qnil;
+      break;
+    default: eassume (0);
     }
=20
   store_frame_param (f, Qfullscreen, lval);
@@ -28312,8 +28355,8 @@ x_check_fullscreen (struct frame *f)
           lval =3D Qfullheight;
           height =3D x_display_pixel_height (dpyinfo);
 =09  break;
-=09default:
-=09  emacs_abort ();
+=09case FULLSCREEN_NONE:
+=09default: =09  emacs_abort ();
         }
=20
       x_wm_set_size_hint (f, 0, false);
@@ -29919,8 +29962,7 @@ x_get_atom_name (struct x_display_info *dpyinfo, At=
om atom,
     case XA_FONT:
       return xstrdup ("FONT");
=20
-    default:
-      if (dpyinfo->motif_drag_atom
+    default: if (dpyinfo->motif_drag_atom
 =09  && atom =3D=3D dpyinfo->motif_drag_atom)
 =09return xstrdup (dpyinfo->motif_drag_atom_name);
=20
diff --git a/src/xwidget.c b/src/xwidget.c
index 4f5b46c692a..c2a29048ea2 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -196,8 +196,7 @@ xw_forward_event_translate (GdkEvent *event, struct xwi=
dget_view *xv,
 =09  return 1;
 =09}
       return 0;
-    default:
-      return 0;
+    default: eassume (0);
     }
 }
=20
@@ -1548,8 +1547,7 @@ xi_translate_notify_detail (int detail)
       return GDK_NOTIFY_NONLINEAR;
     case XINotifyNonlinearVirtual:
       return GDK_NOTIFY_NONLINEAR_VIRTUAL;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
 }
 #endif
@@ -2398,8 +2396,8 @@ webkit_create_cb (WebKitWebView *webview,
     case WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED:
     case WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED:
     case WEBKIT_NAVIGATION_TYPE_LINK_CLICKED:
-    default:
       return NULL;
+    default: eassume (0);
     }
 }
=20
@@ -2618,8 +2616,7 @@ webkit_decide_policy_cb (WebKitWebView *webView,
       return FALSE;
       break;
     }
-  default:
-    return FALSE;
+  default: eassume (0);
   }
 }
=20





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 10:34:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 05:34:38 2025
Received: from localhost ([127.0.0.1]:33242 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teXJF-0003VU-Pu
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 05:34:38 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:52296)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1teXJC-0003VE-Co
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 05:34:36 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1teXJ6-0001fn-6w; Sun, 02 Feb 2025 05:34:28 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=TPwZVSoc4Y0cLA6l+TJUd8aO2wWbADWV2OiQozS+8+w=; b=OnIqKGg4xlwz
 qW16Vj6jl6pBamWpavS3pIx6vuM+v3lI/hoOkQMAeu0xzg6MSIWDvMjiO6j251ZFmA5WzVqksPAEu
 /wgEIxw/E1P66rtvI8Jxi77PZNp/07lfV9Nv6y3iXPET9hO0q+ff4X6teoi24y8r+11PaMq2Ikjup
 Bzf8QWIC+IgqtUPHVzdpBfQT/n12A7K4SfnIqNpueeb/q3BCkWOW6v6xLstrccwbswplmyi8YcgSt
 /UO9V/XzOwCxYmABX7qrt+nO2/QqwCHd5SPHiOX+kyqKblnjw3B4idiaqdr2rgokaJf5JWnigtfnz
 rWle1x3bckZEwIrywaQ9wg==;
Date: Sun, 02 Feb 2025 12:34:24 +0200
Message-Id: <865xlseitr.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <87r04g8zpf.fsf@HIDDEN> (message from Pip Cet on Sun, 02
 Feb 2025 09:26:48 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
 <87r04g8zpf.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Sun, 02 Feb 2025 09:26:48 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> >> Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
> >> Date: Sun, 02 Feb 2025 08:39:11 +0000
> >> From:  Pip Cet via "Bug reports for GNU Emacs,
> >>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> >>
> >> I think we should enable -Wswitch-enum now, and expect it to generate
> >> more warnings in the future.
> >
> > I'm not sure I understand what "in the future" means here, but please
> 
> Future GCC versions may and will add warnings about cases that they
> currently fail to warn about, for the same switch.  I don't think we can
> change that.

If future GCC versions add warnings, we will handle them when that
happens and the warnings are reported or seen.  We don't need (and
really cannot) worry about that at this time.

> > Apologies if the above is not relevant to what you were discussing
> > regarding adding warning options.
> 
> I think it's highly relevant: I proposed several ways of adding the
> warning options:  one file at a time, #pragma'd out, or enabled globally
> and only merged once we can fix, at least, the common build systems.

SGTM, thanks.

> Simply enabling them globally and waiting for someone else to fix the
> warnings only leads to other warnings being missed.

Right.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 09:27:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 04:27:00 2025
Received: from localhost ([127.0.0.1]:33109 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teWFo-0005pD-Ii
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 04:27:00 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:11287)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teWFl-0005ox-TR
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 04:26:58 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738488411; x=1738747611;
 bh=7De/axBhOX1vzr0cD39dgvcChyiFi7M6FE3YTn4XOI4=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=wvC6EcttoNnNz824WeR+tYLGBS3Ox6i5irZ0W/EuVRtiHSmbI7B+gle8/K4IOpSO9
 EEcXfZdaA2B8vHqZwYCQyW/poZvoKPSUB6PAq3bCsOUnWGayrbUmGxrsNHpugJfhbv
 o/zccZZmEuOU/dPLEqtv5cvzZGp5UuTmdH3puwr8rEzk+JqStSpg35wvapmd12E/cc
 ithG6tDlUuGB53cfxf4M2j3txWF32v5N0l4FEOVbRQJgUSnQx+mTSuG5CYplGnIyEs
 yUaQk3KoxPsz0OiXdqVgod8cz/HV0QrfERxMdBkm7qP6SfcQ1ZYN5qQrsOxxBx4FGt
 sBy0QXIWPpPZQ==
Date: Sun, 02 Feb 2025 09:26:48 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87r04g8zpf.fsf@HIDDEN>
In-Reply-To: <867c68eno8.fsf@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN> <867c68eno8.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 1a217a4f582708889816f1bc625a70b7c3d6a6bb
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
>> Date: Sun, 02 Feb 2025 08:39:11 +0000
>> From:  Pip Cet via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>>
>> I think we should enable -Wswitch-enum now, and expect it to generate
>> more warnings in the future.
>
> I'm not sure I understand what "in the future" means here, but please

Future GCC versions may and will add warnings about cases that they
currently fail to warn about, for the same switch.  I don't think we can
change that.

> don't add warning options that will generate warnings while compiling
> the current sources; if they do, either the source code should be
> fixed to avoid the warnings before the warning option is turned on by
> default, or the warning option should not be turned on by default.  We

I agree.  Making GCC emit more warnings by changing its configuration
and then telling others to fix them isn't right.

> strive to have the current sources compile cleanly with the default
> warning options, so that any warning draws attention and is fixed
> ASAP; thus, having compilation warnings routinely emitted that cannot
> be easily fixed is not a good idea because that causes people to
> ignore warnings.

Agreed, as far as changing Emacs goes.  GCC, of course, can change
independently.

(In this case, it's unlikely I'll submit a GCC patch that produces
fixable warning in Emacs, but other projects may not be so lucky).

> Apologies if the above is not relevant to what you were discussing
> regarding adding warning options.

I think it's highly relevant: I proposed several ways of adding the
warning options:  one file at a time, #pragma'd out, or enabled globally
and only merged once we can fix, at least, the common build systems.
Simply enabling them globally and waiting for someone else to fix the
warnings only leads to other warnings being missed.

Is that an accurate summary?  If you have another option, or a
preference between the three options I mentioned, would you mind sharing
it?

Thanks!

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 08:49:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 03:49:56 2025
Received: from localhost ([127.0.0.1]:33025 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teVfw-00043a-4f
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:49:56 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:49030)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1teVft-00043D-J7
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:49:54 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1teVfn-00008A-7s; Sun, 02 Feb 2025 03:49:47 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=EmgisKs85bbqq3TIuXRHMUH/Er1Br3ygrh8ByD6NxJQ=; b=rwiDfimxtlgF
 YCHKLJ/vTymF7wLa8q30ILPCGLO5rFEq/7KgPbf1bBbCrU+8/Yi4P4fEiV4hdmyKs+1bctR+uno6S
 4WbvH1qTWuqr2vx4xit0ElOaoK6DFY6uf8G2ffkRsn9zyyMv8mMzCGgSSu4nr0hwrNsOu6oGrrwad
 WETIavKok7nzevAdZxV0YbpzX4OOt1znRF2lzyb8D/4ROO5MHtmVHuBoYuF1KG+jw0EXQ0wJvQEPN
 iAS1vQN5gBi58GrvJgNkGSjlcVd+OE9fcFZPGN7LqEuTI7LSVaCFFTifBJufaPxL4U/B+nButEEo0
 LIVHHiJg1Y18sMbpEcbJEg==;
Date: Sun, 02 Feb 2025 10:49:43 +0200
Message-Id: <867c68eno8.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <8734gwagh8.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
 <8734gwagh8.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: eggert@HIDDEN, 75964 <at> debbugs.gnu.org, stefankangas@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
> Date: Sun, 02 Feb 2025 08:39:11 +0000
> From:  Pip Cet via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> 
> I think we should enable -Wswitch-enum now, and expect it to generate
> more warnings in the future.

I'm not sure I understand what "in the future" means here, but please
don't add warning options that will generate warnings while compiling
the current sources; if they do, either the source code should be
fixed to avoid the warnings before the warning option is turned on by
default, or the warning option should not be turned on by default.  We
strive to have the current sources compile cleanly with the default
warning options, so that any warning draws attention and is fixed
ASAP; thus, having compilation warnings routinely emitted that cannot
be easily fixed is not a good idea because that causes people to
ignore warnings.

Apologies if the above is not relevant to what you were discussing
regarding adding warning options.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 08:39:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 03:39:28 2025
Received: from localhost ([127.0.0.1]:33014 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teVVn-0003Zj-Tk
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:39:28 -0500
Received: from mail-10630.protonmail.ch ([79.135.106.30]:35477)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teVVk-0003ZM-B4
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:39:25 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738485556; x=1738744756;
 bh=4RxX943dgJ8bfBCINdUVL+IVZ2qQEWIMveOsh0nLMks=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=w4oHlS91P0T5kvgpBZ5Kne5OAxW0HbYKhtfQ0iUWn2dwnf9a71y0rlZHQUl5lc2JG
 uFjn9sGKYk+jR1roPGaiey/Tx2pC+V0hz+y+vslgZSrDUe/LeiXehMMhFfcR2vrQjp
 msp1y/9Wa+yDHKshDZSd7QuHebFo/dGXdlh9sgj6cgUuU6biGNAjbirxLn12QiPtrr
 oMP0jxq/U52iTHVxQqhPqsKpocp4Wg2VlN+aIEV2w+0mICll4zhOOi5bfUjTQ+GKtf
 TqckzsVxN9prGkPnCjVyUQY41HCCglzEGIasBHNda+ZOkkjYE+snDRVm+4hGH2NABj
 fibO703V6HccQ==
Date: Sun, 02 Feb 2025 08:39:11 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <8734gwagh8.fsf@HIDDEN>
In-Reply-To: <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
 <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: c9fc8059f5ea69f7a7de02e6d685bad3e0717608
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-02-02 00:21, Pip Cet wrote:
>
>> emacs_abort () isn't equivalent to eassert (false), and that's
>> always been confusing to me.
>
> The inspiration is emacs_abort : abort :: eassert : assert. If we made
> emacs_abort () equivalent to eassert (false) we'd break that, as in C
> abort () is not equivalent to assert (false).

You're correct there.  I was confused because some software does turn
abort() into __builtin_unreachable(), but that's not what POSIX says.

>> can't we just enable
>> -Wswitch-enum and people live with what they get?
>
> Yes, if the new -Wswitch-enum behavior is in stable GCC and if Emacs
> compiles cleanly with the new GCC. Come to think of it, that'd be better
> than autoconfery.
>
> In other words, I'm thinking that the change to Emacs can wait until GCC
> is fixed, and once that happens we can change Emacs. We shouldn't need
> to fiddle with configure.ac or with Makefiles or whatever, other than to
> add -Wswitch-enum.

I think we should enable -Wswitch-enum now, and expect it to generate
more warnings in the future.  Not sure whether that's what you were
saying.  The current mixed collection of switches doesn't help
readability, IMHO.

Anyway, I'd like to convert a few more files first, then I'll have
another patch.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 08:32:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 03:32:00 2025
Received: from localhost ([127.0.0.1]:33005 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teVOa-0003Hl-EY
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:32:00 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:47086)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1teVOX-0003HM-Li
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:31:59 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 245603C00D402;
 Sun,  2 Feb 2025 00:31:51 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id ZwhYRNDIPphL; Sun,  2 Feb 2025 00:31:50 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 992E63C00D403;
 Sun,  2 Feb 2025 00:31:50 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 992E63C00D403
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738485110;
 bh=HSw/+Dk9ymjHYLpITza8n2Y9iMiLp9jVAdVUDwgoVXQ=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=VnCmRRfqvRqpe+hk6I9WMeFigrPxx1I1R2nMkBm9JkkadPeJApcbICqoChewXUiy2
 PHK9V3w7DbSRGOPc/fWZUH4kwFHKGEmM9WVoiVf+d+PBHcOXV5fn+HPnQJvINbpyCx
 ZhsG3RCbnJMrjbWwWx95ff7VWaPxUvf0D9ueVS32chN4jtt6NSZsC/gBagTr7EYr9T
 gvw9X85m/9jyNrT8gMBB55fMDLcq3eJ+z95GEimUn+sC61L5ATLDAwVKIEt2K0TmJi
 M2Fr1Z7edXRg5XHzOwTb3TM0DgbiAFbhs5uBaiVcUDIevQxR+LsyDnjCw5zu2ucwt4
 SMX7szPP18dHA==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id gkEMsCdWNgaU; Sun,  2 Feb 2025 00:31:50 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 7CC3A3C00D402;
 Sun,  2 Feb 2025 00:31:50 -0800 (PST)
Message-ID: <db22c77f-54b6-45df-b0ca-5f9d52c1c7c5@HIDDEN>
Date: Sun, 2 Feb 2025 00:31:47 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
 <87bjvkahb5.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87bjvkahb5.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-02-02 00:21, Pip Cet wrote:

> emacs_abort () isn't equivalent to eassert (false), and that's
> always been confusing to me.

The inspiration is emacs_abort : abort :: eassert : assert. If we made 
emacs_abort () equivalent to eassert (false) we'd break that, as in C 
abort () is not equivalent to assert (false).

> can't we just enable
> -Wswitch-enum and people live with what they get?

Yes, if the new -Wswitch-enum behavior is in stable GCC and if Emacs 
compiles cleanly with the new GCC. Come to think of it, that'd be better 
than autoconfery.

In other words, I'm thinking that the change to Emacs can wait until GCC 
is fixed, and once that happens we can change Emacs. We shouldn't need 
to fiddle with configure.ac or with Makefiles or whatever, other than to 
add -Wswitch-enum.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 08:21:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 03:21:30 2025
Received: from localhost ([127.0.0.1]:32994 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teVEQ-0002n1-DZ
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:21:30 -0500
Received: from mail-10628.protonmail.ch ([79.135.106.28]:24411)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teVEO-0002mk-9z
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 03:21:29 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738484481; x=1738743681;
 bh=N45FwWiugVfRuXkOhb8InrXnrJxqk+EbcrCUQMMtTNE=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=s+LSNUZXEcSuV4NdZS1sM/pnE96juN3ff2l8YSgOGW/bhSwxvy3k7qW1FOHBtkRCl
 z/1y8gX2tDMha+3XB+OZfAMSg/bvx8bRfGIBF5kcIpFJ3bYmiAaX3r6/WIPXc4RBlE
 vO1P8WCWyXCdrUd9OLvVAmUnlCKW8vWOO8/0c3TUeYVL+PDd2patkZWEujcEVLRcEY
 it3ozWagKbaKj+nAz8z/o+wQYQkN9qmNWiUoKaylP2Te7sREQ6wV33ajXNceqEAuLN
 WpuJHNzfb3E0apHMtTKhItjLXu1vpIbtTD9yiiNPUvJv54i2UKf9QZbz+vqhz1kAte
 FFcMM7VOaww7w==
Date: Sun, 02 Feb 2025 08:21:15 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87bjvkahb5.fsf@HIDDEN>
In-Reply-To: <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
 <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 86a743e05d3b5010b732f6106458085b8d7aaab6
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-02-01 10:54, Pip Cet wrote:
>
>> I don't know which builds eunreachable () would actually be treated as
>> unreachable in.  All optimized builds?  Only builds that also omit
>> emacs_abort ()?  What about machines where there's a single byte
>> "abort" instruction?
>
> I thought eunreachable () would be equivalent to eassume (false), for
> the same reason unreachable () is equivalent to assume (false). If we
> change the meaning of eassume (false), eunreachable () would change to
> match.

But emacs_abort () isn't equivalent to eassert (false), and that's
always been confusing to me.  Perhaps it needs to be that way, though.

>>> As long as there's an Autoconfy way to tell whether the new GCC behavio=
r
>>> is present we should be OK. This could be via a test program compiled
>>> with the relevant GCC options. If that approach works, it might be
>>> better to fold the new behavior into -Wswitch-enum.
>>
>> I don't think people will be very happy if we don't even try
>> understanding chained enums.  They're quite common.
>
> Not sure we're talking on the same wavelength. I was worried about a
> lesser problem: how 'configure' should detect whether GCC behaves as
> now, or behaves as you're proposing. I suspect such a configure-time
> test would be needed if we head in this direction.

I must have misread.  I was trying to say that rolling the enum-checking
behavior into -Wswitch-enum would be a bad idea because of chained
enums, in use by some people who don't know much about autoconf (such
as, erm, myself).

Is autoconf the best way to establish whether this warning exists and is
useful?  Do we need to know that, even, or can't we just enable
-Wswitch-enum and people live with what they get?  I honestly don't know
that, and if it increases the chances this code will be merged I'm happy
to change things!

>> I'm not sure whether you're suggesting to list only the remaining
>> "unfixed" (yes, yes, better name) files somewhere, or something else
>> that I don't understand :-)
>
> Oh, I was hoping that we'd just fix the files, so there would be no
> unfixed files and no need for makefilery to deal with unfixed files.

My preference, too, but I thought the per-file approach would seem less
aggressive to files like bidi.c: We've got to choose what to do there,
and artificially taking the "don't touch bidi.c, tell make not to pass
the switch there" option off the table seemed unwise to me.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 2 Feb 2025 07:46:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Feb 02 02:46:42 2025
Received: from localhost ([127.0.0.1]:32953 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teUgj-00018x-Lk
	for submit <at> debbugs.gnu.org; Sun, 02 Feb 2025 02:46:41 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:36420)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1teUgg-00018g-UA
 for 75964 <at> debbugs.gnu.org; Sun, 02 Feb 2025 02:46:39 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 5E05D3C00D402;
 Sat,  1 Feb 2025 23:46:32 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id cLo4S3szJVn8; Sat,  1 Feb 2025 23:46:32 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 029E83C00D403;
 Sat,  1 Feb 2025 23:46:32 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 029E83C00D403
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738482392;
 bh=xwGrCpOlTSHkp9t76no3diPL7Y9znibxMvzGIXUj7w0=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=C7GwKMXsOfaC6600ClqkaLfwcwuTaSEWsmpUWnrU9ksXG2YcvZUQcM5s3EsGJlILj
 qL6gYGsMVqZB+0qrjJ6xh0HXVjeV6xFby834YFyCCBPPT3K/cqxXzivFrirlDl0ywh
 Mt0mQDMUVS1XvvkfN+eFed/03dDywBkepUi4sLl7NJku6EMHyh46VxrShSlRhoALCP
 zZBGWkOiXxhvB+A9WfUCHbHAp/4GV18s1CHHRayFrwZ19yavV+3QfAvu6JC0u6HEXj
 XUuYeMLPLrawDVkb+joSWLrfO66CIebGmyGOKR/AwDTIfkwKSJ5TUykFr/FonoZ2V/
 8Ie4pGJuNeqgw==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id rG9YJsyH47BT; Sat,  1 Feb 2025 23:46:31 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id DB1253C00D402;
 Sat,  1 Feb 2025 23:46:31 -0800 (PST)
Message-ID: <d8ed134d-859b-40e2-bfaa-3e2ba1f215be@HIDDEN>
Date: Sat, 1 Feb 2025 23:46:30 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
 <87cyg1cx7v.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87cyg1cx7v.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-02-01 10:54, Pip Cet wrote:

> I don't know which builds eunreachable () would actually be treated as
> unreachable in.  All optimized builds?  Only builds that also omit
> emacs_abort ()?  What about machines where there's a single byte
> "abort" instruction?

I thought eunreachable () would be equivalent to eassume (false), for 
the same reason unreachable () is equivalent to assume (false). If we 
change the meaning of eassume (false), eunreachable () would change to 
match.

Currently, if !ENABLE_CHECKING, eassume (false) is equivalent to 
unreachable (). And ENABLE_CHECKING, eassume (false) is equivalent to 
(suppress_checking ? unreachable () : die (...)). I was thinking that 
eunreachable () would do the same. That is, if we change the die (...) 
to __builtin_abort () or emacs_abort () or whatever, that would affect 
both eassume and eunreachable.


>> As long as there's an Autoconfy way to tell whether the new GCC behavior
>> is present we should be OK. This could be via a test program compiled
>> with the relevant GCC options. If that approach works, it might be
>> better to fold the new behavior into -Wswitch-enum.
> 
> I don't think people will be very happy if we don't even try
> understanding chained enums.  They're quite common.

Not sure we're talking on the same wavelength. I was worried about a 
lesser problem: how 'configure' should detect whether GCC behaves as 
now, or behaves as you're proposing. I suspect such a configure-time 
test would be needed if we head in this direction.


> I'm not sure whether you're suggesting to list only the remaining
> "unfixed" (yes, yes, better name) files somewhere, or something else
> that I don't understand :-)

Oh, I was hoping that we'd just fix the files, so there would be no 
unfixed files and no need for makefilery to deal with unfixed files.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 1 Feb 2025 18:54:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 01 13:54:54 2025
Received: from localhost ([127.0.0.1]:59996 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teIdq-0000uP-98
	for submit <at> debbugs.gnu.org; Sat, 01 Feb 2025 13:54:54 -0500
Received: from mail-4316.protonmail.ch ([185.70.43.16]:61137)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1teIdn-0000u3-KT
 for 75964 <at> debbugs.gnu.org; Sat, 01 Feb 2025 13:54:52 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738436084; x=1738695284;
 bh=nIAdYjVCGGhHNd7D2aYpgA3AwlfLofywjC9I1TQYVYE=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=jIyrNgD1/iFpH95r3PAlgmJ+pOZqca9ILeZuvTdxLnODumzRQdvGAURlRVX2X8miI
 jojXVNht8smguaEhW19TiAhjoQxwQC0yZrAoHn3Ef1hdMnMHVAgcQM5R2q+O5KamFe
 swcxEyb5JhhNx2c0hN8Hlc0gv0STlEOdngaGQGGsUreqravQ2ceHxU+IO4j5MOUqtL
 2RecEsj5H0CaXIMyr3lU2zunoTGVQzNprVe0F4X3AXdF1VHTjqcji6UxXEaDx3upAW
 HAM7fj7bhLJSTBA/8+/hJwWnWAR79c/thZNhnQkkwRyuD+7Dq71Hm+jbhTqeiSLgUJ
 lp9diBPFjyu6w==
Date: Sat, 01 Feb 2025 18:54:40 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87cyg1cx7v.fsf@HIDDEN>
In-Reply-To: <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
 <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 440933db540eeca5cc5ede417c25eacbc2a91cd5
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-02-01 01:02, Pip Cet wrote:
>> "Paul Eggert" <eggert@HIDDEN> writes:
>>> Suppose the inference is wrong: how does one easily pacify the modified
>>> GCC? Is it something like "case +PVEC_NORMAL:"?
>>
>> I haven't submitted a patch yet, because I wasn't sure of such details.
>> In this case, yes, case +PVEC_NORMAL would work, but I had to test this =
:-)
>
> It'd be helpful to document this workaround in any proposed GCC patch
> (which I assume would include a doc patch).

Thanks for the subtle hint to actually document this.  Will do :-)

>>> Perhaps we should define a new macro eunreachable () that expands to
>>> eassume (false). eunreachable : unreachable :: eassert : assert. This
>>> might be a good idea regardless of anything else we do.
>>
>> I was thinking the same thing!
>>
>> I was going to propose emacs_unreachable (), but using the
>>
>> emacs_abort : emacs_unreachable :: eassert : eassume
>>
>> diagram.

> Either name would work of course. I mildly prefer just the "e" prefix.

Not so much about the name as about what it does by default.  We've
disagreed before on the merits of having eassume and eassert: I still
think we should have just one, and GCC can figure out itself whether the
information is useful for optimization (treat it as eassume) or not
(treat it as eassert)!

I don't know which builds eunreachable () would actually be treated as
unreachable in.  All optimized builds?  Only builds that also omit
emacs_abort ()?  What about machines where there's a single byte
"abort" instruction?

>>>  =C2=A0Perhaps the new GCC behavior should be enabled
>>> by a new GCC option (not -Wswitch-enum), so that it's easy to test
>>> whether the proposed GCC behavior is available.
>>
>> I believe that applies to the "mismatched enum" code (two different
>> enums/enums and ints), but simply inferring that a switch is an enum
>> switch because all of its case labels are seems safe to me.  But I'll
>> think about it some more.
>
> As long as there's an Autoconfy way to tell whether the new GCC behavior
> is present we should be OK. This could be via a test program compiled
> with the relev antGCC options. If that approach works, it might be
> better to fold the new behavior into -Wswitch-enum.

I don't think people will be very happy if we don't even try
understanding chained enums.  They're quite common.  And while detecting
enums with at least two distinct values forming a range is easy to do in
theory, it might use significant CPU resources on some builds.

> As you say, this requires some thought.

I'll work on the "infer type from case label" thing first.  That's
small, manageable, useful, and if I can't even get that in what's the
point writing long code to determine whether an enum is switchable?

>>>> +ALL_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLA=
GS} ${CFLAGS} ${PACIFYING_CFLAGS}
>>>>   CPP_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLA=
GS}
>>>>   o
>>>>   ALL_CXXFLAGS =3D $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
>>>>     ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} $=
{HAIKU_CFLAGS}
>>>>
>>>> +unfixed_Wswitch_obj +=3D ctags${EXEEXT}
>>>> +unfixed_Wswitch_obj +=3D etags${EXEEXT}
>>>
>>> This sort of thing can be confusing. Do we need it at all? That is, onc=
e
>>> the fixes are in the C source files we shouldn't need to change the
>>> Makefile.
>>
>> That was my initial reason for making it so unfixed_Wswitch_obj would
>> eventually be empty.
>
> It's the usual tradeoff between keeping each patch small and simple, vs
> minimizing the total size of all the patches. Here it might be better to
> opt for the latter, as changes like the above are a turnoff.

I'm not sure whether you're suggesting to list only the remaining
"unfixed" (yes, yes, better name) files somewhere, or something else
that I don't understand :-)

>> I've been bitten by "old" #pragmas disabling "bogus" warnings which
>> turned out not to be bogus before, and I think the #pragma syntax is
>> horrible, so I'd prefer the case +A: approach.
>
> I also dislike the pragmas, which is why I like to adorn them with
> comments containing the relevant GCC bug numbers. The intent is that the
> pragmas are "temporary" and should go away once the GCC bugs are fixed.

Thank you so much for the bug numbers! I'd go further and put the
pragmas into single-purpose include files, where we absolutely need
them.

_Pragma, well.

>> The modified GCC is in no way necessary to switch to switch-enum; it
>> does catch some more cases, but those cases caught by plain old GCC are
>> those we should fix first.
>
> Sounds good.

Of course it'd be even nicer if it were to remind us to turn "unsigned bf
: 3" into an ENUM_BF, but I have no idea, er, leave it as an exercise
for the reader.

I'll continue working on this.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 1 Feb 2025 18:18:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 01 13:18:39 2025
Received: from localhost ([127.0.0.1]:59946 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1teI4k-0007g8-Ek
	for submit <at> debbugs.gnu.org; Sat, 01 Feb 2025 13:18:38 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:56346)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1teI4g-0007ft-Mi
 for 75964 <at> debbugs.gnu.org; Sat, 01 Feb 2025 13:18:35 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 2BD253C00D402;
 Sat,  1 Feb 2025 10:18:28 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id oS1gI4rSm-0T; Sat,  1 Feb 2025 10:18:27 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id BB2AE3C00D405;
 Sat,  1 Feb 2025 10:18:27 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu BB2AE3C00D405
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738433907;
 bh=qOpz6VGBXLeJBJziIl7xuq7zG6NRcIRULc4GitV00Jk=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=DB/yREhYhGixgHkMBUWPZIb+lnoBI5jesZ/xj1l1STsz6viEWyx9l0pjzmCJkiQL9
 mPK/CkTVba8gUMqeKotbCobUy1sryAnl0V3ULzENBH6OwIeRfr1tCushLAbGrJq5Xw
 r4/ss8ouH+wL0gBy2skzDd25inGtqBptq2eBoSM+H7MgufdAvGrlauwnWyswcBYutD
 3uLvaBuBIUc4MHBZlAPvsRBVFmE9HfukBRaIdWcKTl4SU3QOioUXeawaTvVc7y5GJ1
 wIyXTFoz/ow5GNJwePHPT7DbW9slxrVLNL2cQ5ddg//1gwOflmlGmof5k+MXCvvnCC
 IlO0tXSB6RI/Q==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id owqa9FuYum6l; Sat,  1 Feb 2025 10:18:27 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 9FDB23C00D401;
 Sat,  1 Feb 2025 10:18:27 -0800 (PST)
Message-ID: <c5545404-f9f6-4c76-be1d-7870c7ec62a1@HIDDEN>
Date: Sat, 1 Feb 2025 10:18:26 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
 <87o6zm9gwq.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87o6zm9gwq.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-02-01 01:02, Pip Cet wrote:
> "Paul Eggert" <eggert@HIDDEN> writes:
>> Suppose the inference is wrong: how does one easily pacify the modifie=
d
>> GCC? Is it something like "case +PVEC_NORMAL:"?
>=20
> I haven't submitted a patch yet, because I wasn't sure of such details.
> In this case, yes, case +PVEC_NORMAL would work, but I had to test this=
 :-)

It'd be helpful to document this workaround in any proposed GCC patch=20
(which I assume would include a doc patch).



>> Perhaps we should define a new macro eunreachable () that expands to
>> eassume (false). eunreachable : unreachable :: eassert : assert. This
>> might be a good idea regardless of anything else we do.
>=20
> I was thinking the same thing!
>=20
> I was going to propose emacs_unreachable (), but using the
>=20
> emacs_abort : emacs_unreachable :: eassert : eassume
>=20
> diagram.

Either name would work of course. I mildly prefer just the "e" prefix.


>>  =C2=A0Perhaps the new GCC behavior should be enabled
>> by a new GCC option (not -Wswitch-enum), so that it's easy to test
>> whether the proposed GCC behavior is available.
>=20
> I believe that applies to the "mismatched enum" code (two different
> enums/enums and ints), but simply inferring that a switch is an enum
> switch because all of its case labels are seems safe to me.  But I'll
> think about it some more.

As long as there's an Autoconfy way to tell whether the new GCC behavior=20
is present we should be OK. This could be via a test program compiled=20
with the relev antGCC options. If that approach works, it might be=20
better to fold the new behavior into -Wswitch-enum. As you say, this=20
requires some thought.


>>> +ALL_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFL=
AGS} ${CFLAGS} ${PACIFYING_CFLAGS}
>>>   CPP_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFL=
AGS}
>>>   o
>>>   ALL_CXXFLAGS =3D $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
>>>     ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} =
${HAIKU_CFLAGS}
>>>
>>> +unfixed_Wswitch_obj +=3D ctags${EXEEXT}
>>> +unfixed_Wswitch_obj +=3D etags${EXEEXT}
>>
>> This sort of thing can be confusing. Do we need it at all? That is, on=
ce
>> the fixes are in the C source files we shouldn't need to change the
>> Makefile.
>=20
> That was my initial reason for making it so unfixed_Wswitch_obj would
> eventually be empty.

It's the usual tradeoff between keeping each patch small and simple, vs=20
minimizing the total size of all the patches. Here it might be better to=20
opt for the latter, as changes like the above are a turnoff.



> I've been bitten by "old" #pragmas disabling "bogus" warnings which
> turned out not to be bogus before, and I think the #pragma syntax is
> horrible, so I'd prefer the case +A: approach.

I also dislike the pragmas, which is why I like to adorn them with=20
comments containing the relevant GCC bug numbers. The intent is that the=20
pragmas are "temporary" and should go away once the GCC bugs are fixed.


> The modified GCC is in no way necessary to switch to switch-enum; it
> does catch some more cases, but those cases caught by plain old GCC are
> those we should fix first.

Sounds good.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 1 Feb 2025 09:03:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 01 04:03:10 2025
Received: from localhost ([127.0.0.1]:56241 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1te9PB-0007y5-Og
	for submit <at> debbugs.gnu.org; Sat, 01 Feb 2025 04:03:10 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:24387)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1te9P9-0007xU-DL
 for 75964 <at> debbugs.gnu.org; Sat, 01 Feb 2025 04:03:08 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738400580; x=1738659780;
 bh=f+HnKoA7hWUtyoIg9yjVQQkjvdHHpn9rHh7Eh2hn1Pk=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=yC0msW9965UNcs0fUVZ1amOZK4vnZtHSgDyHvYDZtF+QMqM1QDCrq2J2P/dEewuGT
 IaBW2VsQruYxyXBaPjGfMbNVuj6xxLzdKWTbU88cnGysFx6r83hVqcngwV5lybLOCQ
 /CzsBW2lms7E2jIUn6uSpt3lixw0XdK5RWtwjsE0y0YHYhgOO0puKztA4syCjiwC2R
 CEQie89lHkaUEOZvfLxgfdsPB9G8yQM6qaXDk+XhhxjSAomfjqw6fdTPgD6kxuVH8U
 uI8tH7kL3uD1nlP/2TrgAsgrst7r9mYEiI9C0mdw+lbpvZym/tp9bCtflRzisOkTld
 T8BO+QfMdyP/g==
Date: Sat, 01 Feb 2025 09:02:57 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87o6zm9gwq.fsf@HIDDEN>
In-Reply-To: <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 2154241043efd4fd974b655dab8d813ef03fc975
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-01-31 03:05, Pip Cet wrote:
>> This GCC version is also patched to "infer" a switch type
>
> Suppose the inference is wrong: how does one easily pacify the modified
> GCC? Is it something like "case +PVEC_NORMAL:"?

I haven't submitted a patch yet, because I wasn't sure of such details.
In this case, yes, case +PVEC_NORMAL would work, but I had to test this :-)

> Suppose one case has an enum type and another case has some other type:
> is that an error?

I have code to make mixing several enums and mixing enums and integer
types an error, but the second is in use in Emacs, so that switch would
be a bit useless, and extending enums by starting a second enum starting
with the last value of the first one is also quite common.

>
>> +    case PVEC_FREE: eassume (0);
>> +    default: eassume (0);
>
> Must this be written that way? Suppose I do this:
>
>     case PVEC_FREE:
>     default:
>       eassume (false);

> Does that also pacify the modified GCC? Also, does emacs_abort () also
> pacify the modified GCC?

Absolutely.  You can also handle the default case, of course, it just
has to be there in addition to one case per enumerated value.

> Perhaps we should define a new macro eunreachable () that expands to
> eassume (false). eunreachable : unreachable :: eassert : assert. This
> might be a good idea regardless of anything else we do.

I was thinking the same thing!

I was going to propose emacs_unreachable (), but using the

emacs_abort : emacs_unreachable :: eassert : eassume

diagram.

>> alloc.c was a simple case because the enums are all internal
>> to Emacs and unlikely to change drastically without people touching the
>> code anyway.  image.c is very different in that regard.
>
> How does that sort of thing pan out?

Not sure I understand the question.  Right now, image people extend
their enums, we don't handle the new cases, the bug goes unnoticed until
it bites the user.

>> +  ws=3D"$ws -Wswitch-enum"
>
> This won't work with the latest stable GCC, as it will cause false
> positives. We need a way to have Emacs use -Wswitch-enum only with the
> proposed patch installed.

While modifying GCC seems (to me) important, the behavior of unmodified
GCC is to produce some of the warnings we want, and I'm testing my patch
with both versions.

The difference is that modified GCC warns about some additional cases.
Most importantly, many enum values are stored in plain integer bitfields
rather than ENUM_BF ones, and the modified GCC warns about those.
(struct glyph::type is an example).  While that should be fixed by
turning them into ENUM_BF, we get warnings in the meantime.

>=C2=A0Perhaps the new GCC behavior should be enabled
> by a new GCC option (not -Wswitch-enum), so that it's easy to test
> whether the proposed GCC behavior is available.

I believe that applies to the "mismatched enum" code (two different
enums/enums and ints), but simply inferring that a switch is an enum
switch because all of its case labels are seems safe to me.  But I'll
think about it some more.

>> +ALL_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS=
} ${CFLAGS} ${PACIFYING_CFLAGS}
>>  CPP_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
>>  o
>>  ALL_CXXFLAGS =3D $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
>>    ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} ${HA=
IKU_CFLAGS}
>>
>> +unfixed_Wswitch_obj +=3D ctags${EXEEXT}
>> +unfixed_Wswitch_obj +=3D etags${EXEEXT}
>
> This sort of thing can be confusing. Do we need it at all? That is, once
> the fixes are in the C source files we shouldn't need to change the
> Makefile.

That was my initial reason for making it so unfixed_Wswitch_obj would
eventually be empty.

> Alternatively, perhaps it'd be better to use a pragma in the (I hope)
> rare places we need to pacify GCC.

I did propose that as an alternative, yes.

> E.g., how we currently treat
> -Wanalyzer-null-dereference in four .c files.

I've been bitten by "old" #pragmas disabling "bogus" warnings which
turned out not to be bogus before, and I think the #pragma syntax is
horrible, so I'd prefer the case +A: approach.

But the important thing is we start doing this to some files, not how we
fix what are likely to be two or three problematic files.  I'm totally
open to suggestions there.

The modified GCC is in no way necessary to switch to switch-enum; it
does catch some more cases, but those cases caught by plain old GCC are
those we should fix first.

The only effect of the modified GCC is that if we try working around the
current GCC's behavior by casting the switch value, that won't work with
the modified GCC.

Thank you so much for those comments!  Please do let me know if there's
anything else I can help with!

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 21:47:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 16:47:02 2025
Received: from localhost ([127.0.0.1]:55259 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdyqs-0007HJ-Bm
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 16:47:02 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:56730)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1tdyqq-0007Gn-MS
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 16:47:01 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 3E5C23C00E40A;
 Fri, 31 Jan 2025 13:46:54 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id qC9s_yWsupQ9; Fri, 31 Jan 2025 13:46:54 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id E5EA93C00E40E;
 Fri, 31 Jan 2025 13:46:53 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu E5EA93C00E40E
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738360013;
 bh=oaqigcB9lHG9HE0QjLgITAFApS1u0R582+pfljT6WOk=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=I34VvFwXKguuBxtowYhk+vZGB0u9/O7K23YRzbrbg3x8fULA9jvIVX1z4HBi76IbY
 dGy9xeeZvcv5Bza0GUNzhQSJ/+8dyk8lDx6GYoL9KCr+I2AwiM9LsW+fSGqjbhpp5Z
 p2ThrL2WFMFB9gjcTXN0TnlnF/evO9F5tATOPB51Kvc9h6RCz0ts6P3BJMZ1DeF3F+
 aAFFq+GpMgV8oyn7cv0lAcX28eYthoiCtM/evgSzpWYjklwE+MHcKbQ0qI0IVzL3nH
 U6ipotKDlWNTTnuzGheKX+enkKket1/KagdWK6lKYfOu27rN9b0k95eUa8LDIivTeV
 QXrrPeVP+y9lQ==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id KTEzlVrvnJcl; Fri, 31 Jan 2025 13:46:53 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id C2BA43C00E40A;
 Fri, 31 Jan 2025 13:46:53 -0800 (PST)
Message-ID: <46f0b395-71c0-4053-be3f-47ba6d844acb@HIDDEN>
Date: Fri, 31 Jan 2025 13:46:53 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>, 75964 <at> debbugs.gnu.org,
 Stefan Kangas <stefankangas@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87v7tvfdm6.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-01-31 03:05, Pip Cet wrote:
> This GCC version is also patched to "infer" a switch type

Suppose the inference is wrong: how does one easily pacify the modified 
GCC? Is it something like "case +PVEC_NORMAL:"?

Suppose one case has an enum type and another case has some other type: 
is that an error?

> +    case PVEC_FREE: eassume (0);
> +    default: eassume (0);

Must this be written that way? Suppose I do this:

    case PVEC_FREE:
    default:
      eassume (false);

Does that also pacify the modified GCC? Also, does emacs_abort () also 
pacify the modified GCC?

Perhaps we should define a new macro eunreachable () that expands to 
eassume (false). eunreachable : unreachable :: eassert : assert. This 
might be a good idea regardless of anything else we do.


> alloc.c was a simple case because the enums are all internal
> to Emacs and unlikely to change drastically without people touching the
> code anyway.  image.c is very different in that regard.

How does that sort of thing pan out?


> +  ws="$ws -Wswitch-enum"

This won't work with the latest stable GCC, as it will cause false 
positives. We need a way to have Emacs use -Wswitch-enum only with the 
proposed patch installed. Perhaps the new GCC behavior should be enabled 
by a new GCC option (not -Wswitch-enum), so that it's easy to test 
whether the proposed GCC behavior is available.


> +ALL_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${PACIFYING_CFLAGS}
>  CPP_CFLAGS = ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
>  o
>  ALL_CXXFLAGS = $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
>    ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} ${HAIKU_CFLAGS}
>  
> +unfixed_Wswitch_obj += ctags${EXEEXT}
> +unfixed_Wswitch_obj += etags${EXEEXT}

This sort of thing can be confusing. Do we need it at all? That is, once 
the fixes are in the C source files we shouldn't need to change the 
Makefile.

Alternatively, perhaps it'd be better to use a pragma in the (I hope) 
rare places we need to pacify GCC. E.g., how we currently treat 
-Wanalyzer-null-dereference in four .c files.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 18:41:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 13:41:58 2025
Received: from localhost ([127.0.0.1]:54279 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdvxm-0006Mw-A1
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 13:41:58 -0500
Received: from mail-40134.protonmail.ch ([185.70.40.134]:40493)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdvxj-0006Mf-Il
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 13:41:56 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738348908; x=1738608108;
 bh=/yCqFksZlCP9rIUGu94OMOhLrtu6BAv3kkgFTDjsqVM=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=C1RP0bk0M07s+2Y9z0l7BiA/bMN8NKb24iBmceGHE8mmt25qAif9JohFsS2jfcVAH
 JuIoq33x1hlWGKA37/FCojkcs0CcxEZ/Rp+ebQ7+ElZC6f7wLmdv8s5q4URbOaxyQB
 /eHInxiPUoxOaki7EHyIeYJLlC56ACNE+ZMfTboLiDu6mJk08EBiUbYFx7HK2iFwhx
 bqcDMQwtV8f6C0l6/KBNp7GNtoxdrpZTmJn9k7+gFwvMYo7sdwImJGfu2z/K0oxA8e
 bkflA7e6ZPVDnRHlhZ9/V2M7+0CK5kJ9kIHOYrxs6InSg9hK7F/JimAEIRQ4q1eHmV
 yEcR5ic1QJyFg==
Date: Fri, 31 Jan 2025 18:41:43 +0000
To: Paul Eggert <eggert@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87zfj6aks2.fsf@HIDDEN>
In-Reply-To: <f2f036f7-9f49-4ea2-be37-87ecf0bd1a55@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
 <f2f036f7-9f49-4ea2-be37-87ecf0bd1a55@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 25a3f747fc4447dce45ba50d817759e33ff3b55b
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Paul Eggert" <eggert@HIDDEN> writes:

> On 2025-01-31 03:05, Pip Cet wrote:
>> Unfortunately, GCC now thinks:
>>
>>    static const char hexchar[16] =3D "0123456789ABCDEF";
>>
>> is unsafe and the [16] should be [17] or omitted.
>
> This is GCC bug 117178
> <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D117178>, which also bites
> in several places in the Linux kernel. In the meantime I wouldn't worry
> about it, other than perhaps suppressing the false positive with current
> GCC.

Thanks! Easy enough to work around that for now, and there are many
other new warnings, it seems :-)





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 18:31:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 13:31:17 2025
Received: from localhost ([127.0.0.1]:54219 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdvnQ-0005sd-Jy
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 13:31:16 -0500
Received: from mail.cs.ucla.edu ([131.179.128.66]:59858)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eggert@HIDDEN>)
 id 1tdvnN-0005sN-UC
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 13:31:15 -0500
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 3C23D3C00E403;
 Fri, 31 Jan 2025 10:31:07 -0800 (PST)
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP
 id RIj9EPsbXZ1r; Fri, 31 Jan 2025 10:31:03 -0800 (PST)
Received: from localhost (localhost [127.0.0.1])
 by mail.cs.ucla.edu (Postfix) with ESMTP id 552443C00E40A;
 Fri, 31 Jan 2025 10:31:03 -0800 (PST)
DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 552443C00E40A
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu;
 s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1738348263;
 bh=vPpkpA02dz2+3KNWFrqs0e976zQlVmc7S0WhYp7aUzA=;
 h=Message-ID:Date:MIME-Version:To:From;
 b=K5byIcO20P9FptgHPx35SVi1g9My2p/JNRo5Np4vYC/iLeMqXnFwLo3N3Ud+XT3ke
 B+DEuIhI9tAphXTCDYlTWFkHVGmxOS80JurQj2FV7DNWykELHSwO5PxliuxIqDR5ZK
 0cbj7t4B9NStVreIQxYHRP4b5n8R9/UXQBGpuGb1YzFGOD4rWMCqREgk+KFD/MVpnO
 +FB60mj4LtHNLMBRPCpTmmtys83O8gyWCD20I9KQMU/UDP3eGTWHvYCDgsk+0AHxrL
 W2S/9eirBZXALj/2fUNYYpRsE/ukw/qiGB0BjK+1yzW+8iu7wGa9460HH5gkBFyWQq
 CQIt9VsH9crqw==
X-Virus-Scanned: amavis at mail.cs.ucla.edu
Received: from mail.cs.ucla.edu ([127.0.0.1])
 by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP
 id voBHd4LfzdTD; Fri, 31 Jan 2025 10:31:03 -0800 (PST)
Received: from [192.168.254.12] (unknown [47.154.28.214])
 by mail.cs.ucla.edu (Postfix) with ESMTPSA id 39FC13C00E403;
 Fri, 31 Jan 2025 10:31:03 -0800 (PST)
Message-ID: <f2f036f7-9f49-4ea2-be37-87ecf0bd1a55@HIDDEN>
Date: Fri, 31 Jan 2025 10:30:57 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
To: Pip Cet <pipcet@HIDDEN>
References: <87v7tvfdm6.fsf@HIDDEN>
Content-Language: en-US
From: Paul Eggert <eggert@HIDDEN>
Organization: UCLA Computer Science Department
In-Reply-To: <87v7tvfdm6.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org, Stefan Kangas <stefankangas@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 2025-01-31 03:05, Pip Cet wrote:
> Unfortunately, GCC now thinks:
> 
>    static const char hexchar[16] = "0123456789ABCDEF";
> 
> is unsafe and the [16] should be [17] or omitted.

This is GCC bug 117178 
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117178>, which also bites 
in several places in the Linux kernel. In the meantime I wouldn't worry 
about it, other than perhaps suppressing the false positive with current 
GCC.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 15:00:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 10:00:51 2025
Received: from localhost ([127.0.0.1]:53720 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdsVm-0004en-Ou
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 10:00:51 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:49688)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tdsVj-0004eL-Pj
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 10:00:49 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tdsVd-0008TK-Tw; Fri, 31 Jan 2025 10:00:42 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=3kGYns81W1aRW1N1cM1j8qL3PfU8yXigcYnlOLq6+Ww=; b=ZVXpQ4J1gg2t
 AMXTlsVsjSZCTjDLpoeo/M/vITQGTee1jKyUN5acQpvTeOG2QpimJmLgF2u9yBrW3U9CCbBvrFf8u
 JwQ0h1xPbLZMp6H6vkL1yAIc/gIKPxiCqT9EdJbSuvkdxu6YxenzY3iWanRQVOmk6JC4WzWYGH4o8
 GdOAHNmMjurLvP5dpu3tYYfuAiVuBCYDdxUuaxoSIFW5jTZolM+0xYP7Nzx9DFT4URkZ+TzZ3T2U9
 i3cAH6lbCE9/uedsyXnnSbJ+2OSV7cuw3VZ0R9Cu6rt5+t4bBQ+xftsPkSVtyyVmutvND9hLYI/qc
 6nzAlfB92Puude4vDJHSmA==;
Date: Fri, 31 Jan 2025 17:00:18 +0200
Message-Id: <86jzabhvul.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>,
 Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <87h65fdps6.fsf@HIDDEN> (message from Pip Cet on Fri, 31
 Jan 2025 14:25:21 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN> <86o6znhzh1.fsf@HIDDEN>
 <87h65fdps6.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Fri, 31 Jan 2025 14:25:21 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: 75964 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> > I think we need to have the problems we want to solve in mind when
> > considering the solutions, because the solutions are not without
> > costs.
> 
> Agreed.  I'm still looking for a smoking gun: a case label which we
> forgot and which caused the default case label to do the wrong thing.
> 
> The only reason I see to hurry here is that various people are
> pushing changes to master which follow this or that solution, and
> usually it's not the right one (in my very personal view).  If we could
> agree to stop doing that and leave switch statements alone for now, I'd
> be very happy (i.e. apply the three reverts to pdumper.c but not the
> fourth patch in the last series).

It would indeed be wise to stop pushing changes in this area as long
as we are not sure what would be the best solution.

Stefan, do you agree?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 14:25:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 09:25:36 2025
Received: from localhost ([127.0.0.1]:50636 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrxf-0007hZ-2E
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:25:36 -0500
Received: from mail-40131.protonmail.ch ([185.70.40.131]:52895)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdrxb-0007hJ-Qn
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:25:32 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738333525; x=1738592725;
 bh=iROdF7wxqh18Rr8YcRaOQW7CGEdly14TZwxu/qh7L5A=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=drP+AbdenK/NCOTkSFLqXOM5akqAmIQ9qxBm2fHb/RCpZdFM5r4wGd9JFqG8/lQLR
 inpiyhUH3/pLm+mZzFOFwukgRpCd34SlodnMzxobk5WsR87H4Qqw8+UidZ4F9d+PBk
 7WsbQhm1EG3GG830V3YI9wx5EuqNN4jjt3OwWWdgf13g38HVf3MI5RFGvBVYatYcS5
 WGxH9122fE5pisBazRlPGnKzfIl603YQB9yjpAMcR6th79ggGcYuA9GC3dFjQSdHye
 0EBkx5GqVu5Mz0Kbubq/WKivt/C9/FjQ6Y7S8dP1I5fsWcwakqde6zwVn1aibAbO2+
 hGAPhrqd+urZw==
Date: Fri, 31 Jan 2025 14:25:21 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87h65fdps6.fsf@HIDDEN>
In-Reply-To: <86o6znhzh1.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN> <86o6znhzh1.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 5ab823e39d1c9c43555c7b4708e30c7f13365532
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Fri, 31 Jan 2025 12:48:02 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: 75964 <at> debbugs.gnu.org
>>
>> "Eli Zaretskii" <eliz@HIDDEN> writes:
>>
>> >> 0. do nothing, keeping bidi.o on the list of unfixed Wswitch objects,
>> >> explaining that too many large switches are in use for the result of =
(1)
>> >> to be readable
>> >> 1. bite the bullet and apply a 184-line diff to bidi.c.
>> >> 2. add #pragma statements in bidi.c around the five large switch
>> >> statements, giving us the benefit of warnings for the other switch
>> >> statements in bidi.c
>> >> 3. turn bidi_type_t into a real integer type to avoid the warning
>> >> 4. cast bidi_type_t to a real integer type in the switch statement.
>> >> -1. use if() instead
>> >> -2. use arrays instead
>> >> -3. use arrays of function pointers instead
>> >
>> > That might be fine when the enumeration is ours, but if it comes from
>> > a system header file, the only practical option is 0, with 1 being a
>> > very distant second (having a switch with many dozens of values is
>> > hardly a good thing).
>>
>> You're talking about a different problem then.  If an
>> externally-controlled enum is expected to grow, we want a compiler
>> warning to let us know when this happens, but we also need a default:
>> handler that deals with this case.  So the right option is that we don't
>> need any of the extra options, the default behaviour will be just fine.
>
> Maybe.  I'm not yet sure.
>
> I also think we should maybe take a step back and summarize the
> problems the use of -Wswitch-enum everywhere is supposed to help us
> solve.  You mentioned other approaches that have limitations, but what
> are the specific problems in our sources that this and the other
> approaches aim to solve?

I'd like to say "look at these bugs we've fixed", but so far the list is
quite short: rsvg misbehaved for a newly-added unit, and treesitter
produced a suboptimal error message.

> I think we need to have the problems we want to solve in mind when
> considering the solutions, because the solutions are not without
> costs.

Agreed.  I'm still looking for a smoking gun: a case label which we
forgot and which caused the default case label to do the wrong thing.

The only reason I see to hurry here is that various people are
pushing changes to master which follow this or that solution, and
usually it's not the right one (in my very personal view).  If we could
agree to stop doing that and leave switch statements alone for now, I'd
be very happy (i.e. apply the three reverts to pdumper.c but not the
fourth patch in the last series).

> And if we end up leaving many source files in the "unfixed"
> class, then maybe we should turn this around and only use this switch
> for those few files where it doesn't cause us problems for which
> solutions we don't want to pay those costs.

Thanks!  That's a great idea!  I also shouldn't have used "unfixed" as a
name: there's nothing wrong with disabling warnings per file, and
different files have different requirements, and all that's perfectly
okay and not anyone's refusal to fix anything.

Thanks for the feedback!

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 14:11:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 09:11:22 2025
Received: from localhost ([127.0.0.1]:50585 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrjs-0006rk-PC
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:11:22 -0500
Received: from mail-4316.protonmail.ch ([185.70.43.16]:35471)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdrjp-0006rI-0l
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:11:18 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738332670; x=1738591870;
 bh=MCHZB7tJJhskhI/PxjoZOsINnXfNribbYvQuPUudez4=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=klLT+ZyKtfGCSsWJf+bgxj2p1t091ME56tkJexZfZwa295wWJqHzT7TGSFCq5tAOT
 7Y4tVv4uOC/ZPjb2sJMq+2RJ9FXFZPHxdzsJ8LVzD5+pNYTAgZzLS5fx/+QhCglrol
 tIk8SUGfzheTh4sSltoCOJilGF117ksM5TFKkjQnclozW3Af0TkxTgckwXVK31MJiW
 PU/GTSKt+RudTe3S9JAXLcVBWe8QHSPBmDzG7kMeBF4TW3H3skJyDXCTM/TIMUYe95
 VpQihSXtiCImXLha5veUkj2+CKY6FVGHKbRqF/auhV8AybpCscDbTBkd8yUNk9krX9
 VvIK3C6fi3ReA==
Date: Fri, 31 Jan 2025 14:11:00 +0000
To: Robert Pluim <rpluim@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87v7tvdqg5.fsf@HIDDEN>
In-Reply-To: <875xlvf5l0.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN> <875xlvf5l0.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 00acf5052f863a4bcf2232407ae8b4cb522c266a
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: bug-gnu-emacs@HIDDEN, 75964 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Robert Pluim" <rpluim@HIDDEN> writes:

>>>>>> On Fri, 31 Jan 2025 12:48:02 +0000, Pip Cet via "Bug reports for GNU=
 Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> said:
>     >>
>     >> That might be fine when the enumeration is ours, but if it comes f=
rom
>     >> a system header file, the only practical option is 0, with 1 being=
 a
>     >> very distant second (having a switch with many dozens of values is
>     >> hardly a good thing).
>
>     Pip> You're talking about a different problem then.  If an
>     Pip> externally-controlled enum is expected to grow, we want a compil=
er
>     Pip> warning to let us know when this happens, but we also need a def=
ault:
>     Pip> handler that deals with this case.  So the right option is that =
we don't
>     Pip> need any of the extra options, the default behaviour will be jus=
t fine.
>
> Both gcc and clang support case ranges these days, so handling large
> enums should not be a problem.

Thanks! Indeed, in many cases enums are ordered logically so we can use
case ranges.  Here's pdumper.c, which illustrates this:

(first three patches revert recent attempts to get more or fewer
warnings):

From 2fd1752051e7b7b1a3a51a659277bdc0e37aca8f Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 1/4] Revert "; * src/pdumper.c (dump_do_fixup): Pacify GCC.=
"

This reverts commit a99ba59aa02ef8cfd314737950b6cd8d97015925.
---
 src/pdumper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pdumper.c b/src/pdumper.c
index bfa790b963a..9f0447eb5aa 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -3990,7 +3990,7 @@ dump_do_fixup (struct dump_context *ctx,
   Lisp_Object arg =3D dump_pop (&fixup);
   eassert (NILP (fixup));
   dump_seek (ctx, dump_fixup_offset);
-  intptr_t dump_value UNINIT;
+  intptr_t dump_value;
   bool do_write =3D true;
   switch (type)
     {
--=20
2.48.1

From a56416559996359570ff70c8749a5972fb9e14d4 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 2/4] Revert "Pacify -Wanalyzer-use-of-uninitialized-value"

This reverts commit 1ed769a3cb753a86badba8a2878fa788a6fdc1f8.
---
 src/pdumper.c | 91 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 62 insertions(+), 29 deletions(-)

diff --git a/src/pdumper.c b/src/pdumper.c
index 9f0447eb5aa..45a44db0243 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2292,12 +2292,11 @@ dump_float (struct dump_context *ctx, const struct =
Lisp_Float *lfloat)
 }
=20
 static dump_off
-dump_fwd_int (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_int (struct dump_context *ctx, const struct Lisp_Intfwd *intfwd)
 {
 #if CHECK_STRUCTS && !defined HASH_Lisp_Intfwd_4D887A7387
 # error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Intfwd const *intfwd =3D fwdptr;
   dump_emacs_reloc_immediate_intmax_t (ctx, intfwd->intvar, *intfwd->intva=
r);
   struct Lisp_Intfwd out;
   dump_object_start (ctx, &out, sizeof (out));
@@ -2307,12 +2306,11 @@ dump_fwd_int (struct dump_context *ctx, void const =
*fwdptr)
 }
=20
 static dump_off
-dump_fwd_bool (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_bool (struct dump_context *ctx, const struct Lisp_Boolfwd *boolfw=
d)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Boolfwd_0EA1C7ADCC)
 # error "Lisp_Boolfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Boolfwd const *boolfwd =3D fwdptr;
   dump_emacs_reloc_immediate_bool (ctx, boolfwd->boolvar, *boolfwd->boolva=
r);
   struct Lisp_Boolfwd out;
   dump_object_start (ctx, &out, sizeof (out));
@@ -2322,12 +2320,11 @@ dump_fwd_bool (struct dump_context *ctx, void const=
 *fwdptr)
 }
=20
 static dump_off
-dump_fwd_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_obj (struct dump_context *ctx, const struct Lisp_Objfwd *objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Objfwd_45D3E513DC)
 # error "Lisp_Objfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Objfwd const *objfwd =3D fwdptr;
   if (NILP (Fgethash (dump_off_to_lisp (emacs_offset (objfwd->objvar)),
                       ctx->staticpro_table,
                       Qnil)))
@@ -2340,12 +2337,12 @@ dump_fwd_obj (struct dump_context *ctx, void const =
*fwdptr)
 }
=20
 static dump_off
-dump_fwd_buffer_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_buffer_obj (struct dump_context *ctx,
+                     const struct Lisp_Buffer_Objfwd *buffer_objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Buffer_Objfwd_611EBD13FF)
 # error "Lisp_Buffer_Objfwd changed. See CHECK_STRUCTS comment in config.h=
."
 #endif
-  struct Lisp_Buffer_Objfwd const *buffer_objfwd =3D fwdptr;
   struct Lisp_Buffer_Objfwd out;
   dump_object_start (ctx, &out, sizeof (out));
   DUMP_FIELD_COPY (&out, buffer_objfwd, type);
@@ -2356,12 +2353,12 @@ dump_fwd_buffer_obj (struct dump_context *ctx, void=
 const *fwdptr)
 }
=20
 static dump_off
-dump_fwd_kboard_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_kboard_obj (struct dump_context *ctx,
+                     const struct Lisp_Kboard_Objfwd *kboard_objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Kboard_Objfwd_CAA7E71069)
 # error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Kboard_Objfwd const *kboard_objfwd =3D fwdptr;
   struct Lisp_Kboard_Objfwd out;
   dump_object_start (ctx, &out, sizeof (out));
   DUMP_FIELD_COPY (&out, kboard_objfwd, type);
@@ -2375,16 +2372,29 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Fwd_Type_9CBA6EE55E)
 # error "Lisp_Fwd_Type changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  typedef dump_off (*dump_fwd_fnptr) (struct dump_context *, void const *)=
;
-  static dump_fwd_fnptr const dump_fwd_table[] =3D {
-    [Lisp_Fwd_Int] =3D dump_fwd_int,
-    [Lisp_Fwd_Bool] =3D dump_fwd_bool,
-    [Lisp_Fwd_Obj] =3D dump_fwd_obj,
-    [Lisp_Fwd_Buffer_Obj] =3D dump_fwd_buffer_obj,
-    [Lisp_Fwd_Kboard_Obj] =3D dump_fwd_kboard_obj,
-  };
+  void const *p =3D fwd.fwdptr;
+  dump_off offset;
=20
-  return dump_fwd_table[XFWDTYPE (fwd)] (ctx, fwd.fwdptr);
+  switch (XFWDTYPE (fwd))
+    {
+    case Lisp_Fwd_Int:
+      offset =3D dump_fwd_int (ctx, p);
+      break;
+    case Lisp_Fwd_Bool:
+      offset =3D dump_fwd_bool (ctx, p);
+      break;
+    case Lisp_Fwd_Obj:
+      offset =3D dump_fwd_obj (ctx, p);
+      break;
+    case Lisp_Fwd_Buffer_Obj:
+      offset =3D dump_fwd_buffer_obj (ctx, p);
+      break;
+    case Lisp_Fwd_Kboard_Obj:
+      offset =3D dump_fwd_kboard_obj (ctx, p);
+      break;
+    }
+
+  return offset;
 }
=20
 static dump_off
@@ -4534,19 +4544,26 @@ dump_anonymous_allocate_w32 (void *base,
 #  define MAP_ANONYMOUS MAP_ANON
 # endif
=20
-static int const mem_prot_posix_table[] =3D {
-  [DUMP_MEMORY_ACCESS_NONE] =3D PROT_NONE,
-  [DUMP_MEMORY_ACCESS_READ] =3D PROT_READ,
-  [DUMP_MEMORY_ACCESS_READWRITE] =3D PROT_READ | PROT_WRITE,
-};
-
 static void *
 dump_anonymous_allocate_posix (void *base,
                                size_t size,
                                enum dump_memory_protection protection)
 {
   void *ret;
-  int mem_prot =3D mem_prot_posix_table[protection];
+  int mem_prot;
+
+  switch (protection)
+    {
+    case DUMP_MEMORY_ACCESS_NONE:
+      mem_prot =3D PROT_NONE;
+      break;
+    case DUMP_MEMORY_ACCESS_READ:
+      mem_prot =3D PROT_READ;
+      break;
+    case DUMP_MEMORY_ACCESS_READWRITE:
+      mem_prot =3D PROT_READ | PROT_WRITE;
+      break;
+    }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
   if (mem_prot !=3D PROT_NONE)
@@ -4690,9 +4707,25 @@ dump_map_file_posix (void *base, int fd, off_t offse=
t, size_t size,
 =09=09     enum dump_memory_protection protection)
 {
   void *ret;
-  int mem_prot =3D mem_prot_posix_table[protection];
-  int mem_flags =3D (protection =3D=3D DUMP_MEMORY_ACCESS_READWRITE
-=09=09   ? MAP_PRIVATE : MAP_SHARED);
+  int mem_prot;
+  int mem_flags;
+
+  switch (protection)
+    {
+    case DUMP_MEMORY_ACCESS_NONE:
+      mem_prot =3D PROT_NONE;
+      mem_flags =3D MAP_SHARED;
+      break;
+    case DUMP_MEMORY_ACCESS_READ:
+      mem_prot =3D PROT_READ;
+      mem_flags =3D MAP_SHARED;
+      break;
+    case DUMP_MEMORY_ACCESS_READWRITE:
+      mem_prot =3D PROT_READ | PROT_WRITE;
+      mem_flags =3D MAP_PRIVATE;
+      break;
+    }
+
   if (base)
     mem_flags |=3D MAP_FIXED;
=20
--=20
2.48.1
From ae7fdb7348b25e35ea6778220105a536458bfdae Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 3/4] Revert "Prefer static switch-case checking in pdumper"

This reverts commit 6e2e7265a04f63f482db7fbdfd8e2519d8bfe03e.
---
 src/pdumper.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/pdumper.c b/src/pdumper.c
index 45a44db0243..71d82629b56 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2392,6 +2392,8 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
     case Lisp_Fwd_Kboard_Obj:
       offset =3D dump_fwd_kboard_obj (ctx, p);
       break;
+    default:
+      emacs_abort ();
     }
=20
   return offset;
@@ -2523,6 +2525,8 @@ dump_symbol (struct dump_context *ctx,
     case SYMBOL_FORWARDED:
       dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd);
       break;
+    default:
+      emacs_abort ();
     }
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
@@ -3603,6 +3607,8 @@ dump_drain_cold_data (struct dump_context *ctx)
 =09  dump_cold_native_subr (ctx, data);
 =09  break;
 #endif
+        default:
+          emacs_abort ();
         }
     }
=20
@@ -4067,6 +4073,8 @@ dump_do_fixup (struct dump_context *ctx,
         do_write =3D false;
         break;
       }
+    default:
+      emacs_abort ();
     }
   if (do_write)
     dump_write (ctx, &dump_value, sizeof (dump_value));
@@ -4525,6 +4533,8 @@ dump_anonymous_allocate_w32 (void *base,
       mem_type =3D MEM_COMMIT;
       mem_prot =3D PAGE_READWRITE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   ret =3D VirtualAlloc (base, size, mem_type, mem_prot);
@@ -4563,6 +4573,8 @@ dump_anonymous_allocate_posix (void *base,
     case DUMP_MEMORY_ACCESS_READWRITE:
       mem_prot =3D PROT_READ | PROT_WRITE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
@@ -4655,6 +4667,7 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       protect =3D PAGE_WRITECOPY;=09/* for Windows 9X */
       break;
+    default:
     case DUMP_MEMORY_ACCESS_NONE:
     case DUMP_MEMORY_ACCESS_READ:
       protect =3D PAGE_READONLY;
@@ -4682,6 +4695,8 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       map_access =3D FILE_MAP_COPY;
       break;
+    default:
+      emacs_abort ();
     }
=20
   ret =3D MapViewOfFileEx (section,
@@ -4724,6 +4739,8 @@ dump_map_file_posix (void *base, int fd, off_t offset=
, size_t size,
       mem_prot =3D PROT_READ | PROT_WRITE;
       mem_flags =3D MAP_PRIVATE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   if (base)
@@ -5590,6 +5607,8 @@ dump_do_emacs_relocation (const uintptr_t dump_base,
         memcpy (emacs_ptr_at (reloc.emacs_offset), &lv, sizeof (lv));
         break;
       }
+    default:
+      fatal ("unrecognied relocation type %d", (int) reloc.type);
     }
 }
=20
--=20
2.48.1

From 9aff2f5644f4933747d7af5412f2cffc8b2c98b2 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 4/4] Enable -Wswitch-enum in pdumper.c (bug#75964)

* src/Makefile.in (unfixed_Wswitch_obj): Remove 'pdumper.o'.
* src/pdumper.c (enum dump_reloc_type): Only include nativecomp cases
if HAVE_NATIVE_COMP.  Add additional cases to cover ranges.
(dump_reloc_dump_to_emacs_lv):
(dump_field_lv_or_rawptr):
(dump_fwd):
(dump_pre_dump_symbol):
(dump_symbol):
(dump_vectorlike):
(dump_drain_cold_data):
(read_ptr_raw_and_lv):
(decode_emacs_reloc):
(dump_do_fixup):
(dump_anonymous_allocate_w32):
(dump_anonymous_allocate_posix):
(dump_map_file_w32):
(dump_map_file_posix):
(dump_do_emacs_relocation): Expand 'default' labels.  Always
eassume (0) for 'default' labels.
(dump_object): Also use 'emacs_abort ()' rather than 'abort'.
(dump_do_dump_relocation): Also Handle case ranges explicitly.
---
 src/Makefile.in |  1 -
 src/pdumper.c   | 94 ++++++++++++++++++++++++++++++++-----------------
 2 files changed, 61 insertions(+), 34 deletions(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index 7388284fef2..79a88af3584 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -546,7 +546,6 @@ unfixed_Wswitch_obj +=3D
 unfixed_Wswitch_obj +=3D nsselect.o
 unfixed_Wswitch_obj +=3D nsterm.o
 unfixed_Wswitch_obj +=3D nsxwidget.o
-unfixed_Wswitch_obj +=3D pdumper.o
 unfixed_Wswitch_obj +=3D pgtkfns.o
 unfixed_Wswitch_obj +=3D pgtkterm.o
 unfixed_Wswitch_obj +=3D print.o
diff --git a/src/pdumper.c b/src/pdumper.c
index 71d82629b56..93119fd09c2 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -178,19 +178,35 @@ #define dump_offsetof(type, member)                  =
           \
     /* dump_ptr =3D dump_ptr + dump_base  */
     RELOC_DUMP_TO_DUMP_PTR_RAW,
     /* dump_mpz =3D [rebuild bignum]  */
+#ifdef HAVE_NATIVE_COMP
     RELOC_NATIVE_COMP_UNIT,
     RELOC_NATIVE_SUBR,
+#endif
     RELOC_BIGNUM,
     /* dump_lv =3D make_lisp_ptr (dump_lv + dump_base,
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol)
        Must be second-last.  */
     RELOC_DUMP_TO_DUMP_LV,
+    RELOC_DUMP_TO_DUMP_LV1,
+    RELOC_DUMP_TO_DUMP_LV2,
+    RELOC_DUMP_TO_DUMP_LV3,
+    RELOC_DUMP_TO_DUMP_LV4,
+    RELOC_DUMP_TO_DUMP_LV5,
+    RELOC_DUMP_TO_DUMP_LV6,
+    RELOC_DUMP_TO_DUMP_LV7,
     /* dump_lv =3D make_lisp_ptr (dump_lv + emacs_basis(),
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol.)
        Must be last.  */
     RELOC_DUMP_TO_EMACS_LV =3D RELOC_DUMP_TO_DUMP_LV + 8,
+    RELOC_DUMP_TO_EMACS_LV1,
+    RELOC_DUMP_TO_EMACS_LV2,
+    RELOC_DUMP_TO_EMACS_LV3,
+    RELOC_DUMP_TO_EMACS_LV4,
+    RELOC_DUMP_TO_EMACS_LV5,
+    RELOC_DUMP_TO_EMACS_LV6,
+    RELOC_DUMP_TO_EMACS_LV7,
   };
=20
 enum emacs_reloc_type
@@ -1445,8 +1461,11 @@ dump_reloc_dump_to_dump_lv (struct dump_context *ctx=
,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_DUMP_LV + type;
       break;
-    default:
+    case Lisp_Int0:
+    case Lisp_Int1:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   dump_push (&ctx->dump_relocs[EARLY_RELOCS],
@@ -1494,8 +1513,12 @@ dump_reloc_dump_to_emacs_lv (struct dump_context *ct=
x,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_EMACS_LV + type;
       break;
-    default:
+    case Lisp_Symbol:
+    case Lisp_Int0:
+    case Lisp_Int1:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   dump_push (&ctx->dump_relocs[EARLY_RELOCS],
@@ -1817,8 +1840,12 @@ dump_field_lv_or_rawptr (struct dump_context *ctx,
         case Lisp_Float:
           value =3D make_lisp_ptr (ptrval, *ptr_raw_type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09  emacs_abort ();
+
+=09case Lisp_Type_Unused0: eassume (0);
+        default: eassume (0);
         }
     }
=20
@@ -2392,8 +2419,7 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
     case Lisp_Fwd_Kboard_Obj:
       offset =3D dump_fwd_kboard_obj (ctx, p);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   return offset;
@@ -2458,8 +2484,10 @@ dump_pre_dump_symbol (struct dump_context *ctx, stru=
ct Lisp_Symbol *symbol)
       dump_remember_symbol_aux (ctx, symbol_lv,
 =09=09=09=09dump_fwd (ctx, symbol->u.s.val.fwd));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
 }
@@ -2525,8 +2553,7 @@ dump_symbol (struct dump_context *ctx,
     case SYMBOL_FORWARDED:
       dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
@@ -2556,8 +2583,10 @@ dump_symbol (struct dump_context *ctx,
 =09  ? aux_offset
 =09  : dump_fwd (ctx, symbol->u.s.val.fwd)));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   return offset;
 }
@@ -3144,10 +3173,11 @@ dump_vectorlike (struct dump_context *ctx,
     case PVEC_SQLITE:
     case PVEC_MODULE_FUNCTION:
     case PVEC_SYMBOL_WITH_POS:
-    case PVEC_FREE:
     case PVEC_TS_PARSER:
     case PVEC_TS_NODE:
       break;
+    case PVEC_FREE: eassume (0);
+    default: eassume (0);
     }
   int iptype =3D ptype;
   static char const fmt[] =3D "pseudovector type %d";
@@ -3249,9 +3279,9 @@ dump_object (struct dump_context *ctx, Lisp_Object ob=
ject)
     case Lisp_Int0:
     case Lisp_Int1:
       eassert ("should not be dumping int: is self-representing" && 0);
-      abort ();
-    default:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
=20
@@ -3607,8 +3637,7 @@ dump_drain_cold_data (struct dump_context *ctx)
 =09  dump_cold_native_subr (ctx, data);
 =09  break;
 #endif
-        default:
-          emacs_abort ();
+        default: eassume (0);
         }
     }
=20
@@ -3635,8 +3664,11 @@ read_ptr_raw_and_lv (const void *mem,
         case Lisp_Float:
           *out_lv =3D make_lisp_ptr (*out_ptr, type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09case Lisp_Type_Unused0:
+=09  eassume (0);
+=09default: eassume (0);
         }
     }
 }
@@ -3888,8 +3920,7 @@ decode_emacs_reloc (struct dump_context *ctx, Lisp_Ob=
ject lreloc)
           }
       }
       break;
-    default:
-      eassume (!"not reached");
+    default: eassume (0);
     }
=20
   /* We should have consumed the whole relocation descriptor.  */
@@ -4073,8 +4104,7 @@ dump_do_fixup (struct dump_context *ctx,
         do_write =3D false;
         break;
       }
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   if (do_write)
     dump_write (ctx, &dump_value, sizeof (dump_value));
@@ -4533,8 +4563,7 @@ dump_anonymous_allocate_w32 (void *base,
       mem_type =3D MEM_COMMIT;
       mem_prot =3D PAGE_READWRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D VirtualAlloc (base, size, mem_type, mem_prot);
@@ -4573,8 +4602,7 @@ dump_anonymous_allocate_posix (void *base,
     case DUMP_MEMORY_ACCESS_READWRITE:
       mem_prot =3D PROT_READ | PROT_WRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
@@ -4667,11 +4695,11 @@ dump_map_file_w32 (void *base, int fd, off_t offset=
, size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       protect =3D PAGE_WRITECOPY;=09/* for Windows 9X */
       break;
-    default:
     case DUMP_MEMORY_ACCESS_NONE:
     case DUMP_MEMORY_ACCESS_READ:
       protect =3D PAGE_READONLY;
       break;
+    default: eassume (0);
     }
=20
   section =3D CreateFileMapping (file,
@@ -4695,8 +4723,7 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       map_access =3D FILE_MAP_COPY;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D MapViewOfFileEx (section,
@@ -4739,8 +4766,7 @@ dump_map_file_posix (void *base, int fd, off_t offset=
, size_t size,
       mem_prot =3D PROT_READ | PROT_WRITE;
       mem_flags =3D MAP_PRIVATE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   if (base)
@@ -5541,13 +5567,16 @@ dump_do_dump_relocation (const uintptr_t dump_base,
         mpz_roinit_n (bignum->value, limbs, reload_info.nlimbs);
         break;
       }
-    default: /* Lisp_Object in the dump; precise type in reloc.type */
+    case RELOC_DUMP_TO_DUMP_LV ... RELOC_DUMP_TO_DUMP_LV + 7:
+    case RELOC_DUMP_TO_EMACS_LV ... RELOC_DUMP_TO_EMACS_LV + 7:
+      /* Lisp_Object in the dump; precise type in reloc.type */
       {
         Lisp_Object lv =3D dump_make_lv_from_reloc (dump_base, reloc);
         eassert (dump_reloc_size (reloc) =3D=3D sizeof (lv));
         dump_write_lv_to_dump (dump_base, reloc_offset, lv);
         break;
       }
+    default: eassume (0);
     }
 }
=20
@@ -5607,8 +5636,7 @@ dump_do_emacs_relocation (const uintptr_t dump_base,
         memcpy (emacs_ptr_at (reloc.emacs_offset), &lv, sizeof (lv));
         break;
       }
-    default:
-      fatal ("unrecognied relocation type %d", (int) reloc.type);
+    default: eassume (0);
     }
 }
=20
--=20
2.48.1



>
> Robert





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 31 Jan 2025 14:11:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 09:11:30 2025
Received: from localhost ([127.0.0.1]:50589 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrk1-0006s8-6R
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:11:30 -0500
Received: from lists.gnu.org ([2001:470:142::17]:47774)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdrju-0006rZ-HI
 for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 09:11:23 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tdrjo-0004vV-2u
 for bug-gnu-emacs@HIDDEN; Fri, 31 Jan 2025 09:11:16 -0500
Received: from mail-4316.protonmail.ch ([185.70.43.16])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tdrjl-0001JI-4D
 for bug-gnu-emacs@HIDDEN; Fri, 31 Jan 2025 09:11:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738332670; x=1738591870;
 bh=MCHZB7tJJhskhI/PxjoZOsINnXfNribbYvQuPUudez4=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=klLT+ZyKtfGCSsWJf+bgxj2p1t091ME56tkJexZfZwa295wWJqHzT7TGSFCq5tAOT
 7Y4tVv4uOC/ZPjb2sJMq+2RJ9FXFZPHxdzsJ8LVzD5+pNYTAgZzLS5fx/+QhCglrol
 tIk8SUGfzheTh4sSltoCOJilGF117ksM5TFKkjQnclozW3Af0TkxTgckwXVK31MJiW
 PU/GTSKt+RudTe3S9JAXLcVBWe8QHSPBmDzG7kMeBF4TW3H3skJyDXCTM/TIMUYe95
 VpQihSXtiCImXLha5veUkj2+CKY6FVGHKbRqF/auhV8AybpCscDbTBkd8yUNk9krX9
 VvIK3C6fi3ReA==
Date: Fri, 31 Jan 2025 14:11:00 +0000
To: Robert Pluim <rpluim@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87v7tvdqg5.fsf@HIDDEN>
In-Reply-To: <875xlvf5l0.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN> <875xlvf5l0.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 00acf5052f863a4bcf2232407ae8b4cb522c266a
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=185.70.43.16; envelope-from=pipcet@HIDDEN;
 helo=mail-4316.protonmail.ch
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
Cc: bug-gnu-emacs@HIDDEN, 75964 <at> debbugs.gnu.org, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

"Robert Pluim" <rpluim@HIDDEN> writes:

>>>>>> On Fri, 31 Jan 2025 12:48:02 +0000, Pip Cet via "Bug reports for GNU=
 Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> said:
>     >>
>     >> That might be fine when the enumeration is ours, but if it comes f=
rom
>     >> a system header file, the only practical option is 0, with 1 being=
 a
>     >> very distant second (having a switch with many dozens of values is
>     >> hardly a good thing).
>
>     Pip> You're talking about a different problem then.  If an
>     Pip> externally-controlled enum is expected to grow, we want a compil=
er
>     Pip> warning to let us know when this happens, but we also need a def=
ault:
>     Pip> handler that deals with this case.  So the right option is that =
we don't
>     Pip> need any of the extra options, the default behaviour will be jus=
t fine.
>
> Both gcc and clang support case ranges these days, so handling large
> enums should not be a problem.

Thanks! Indeed, in many cases enums are ordered logically so we can use
case ranges.  Here's pdumper.c, which illustrates this:

(first three patches revert recent attempts to get more or fewer
warnings):

From 2fd1752051e7b7b1a3a51a659277bdc0e37aca8f Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 1/4] Revert "; * src/pdumper.c (dump_do_fixup): Pacify GCC.=
"

This reverts commit a99ba59aa02ef8cfd314737950b6cd8d97015925.
---
 src/pdumper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pdumper.c b/src/pdumper.c
index bfa790b963a..9f0447eb5aa 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -3990,7 +3990,7 @@ dump_do_fixup (struct dump_context *ctx,
   Lisp_Object arg =3D dump_pop (&fixup);
   eassert (NILP (fixup));
   dump_seek (ctx, dump_fixup_offset);
-  intptr_t dump_value UNINIT;
+  intptr_t dump_value;
   bool do_write =3D true;
   switch (type)
     {
--=20
2.48.1

From a56416559996359570ff70c8749a5972fb9e14d4 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 2/4] Revert "Pacify -Wanalyzer-use-of-uninitialized-value"

This reverts commit 1ed769a3cb753a86badba8a2878fa788a6fdc1f8.
---
 src/pdumper.c | 91 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 62 insertions(+), 29 deletions(-)

diff --git a/src/pdumper.c b/src/pdumper.c
index 9f0447eb5aa..45a44db0243 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2292,12 +2292,11 @@ dump_float (struct dump_context *ctx, const struct =
Lisp_Float *lfloat)
 }
=20
 static dump_off
-dump_fwd_int (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_int (struct dump_context *ctx, const struct Lisp_Intfwd *intfwd)
 {
 #if CHECK_STRUCTS && !defined HASH_Lisp_Intfwd_4D887A7387
 # error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Intfwd const *intfwd =3D fwdptr;
   dump_emacs_reloc_immediate_intmax_t (ctx, intfwd->intvar, *intfwd->intva=
r);
   struct Lisp_Intfwd out;
   dump_object_start (ctx, &out, sizeof (out));
@@ -2307,12 +2306,11 @@ dump_fwd_int (struct dump_context *ctx, void const =
*fwdptr)
 }
=20
 static dump_off
-dump_fwd_bool (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_bool (struct dump_context *ctx, const struct Lisp_Boolfwd *boolfw=
d)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Boolfwd_0EA1C7ADCC)
 # error "Lisp_Boolfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Boolfwd const *boolfwd =3D fwdptr;
   dump_emacs_reloc_immediate_bool (ctx, boolfwd->boolvar, *boolfwd->boolva=
r);
   struct Lisp_Boolfwd out;
   dump_object_start (ctx, &out, sizeof (out));
@@ -2322,12 +2320,11 @@ dump_fwd_bool (struct dump_context *ctx, void const=
 *fwdptr)
 }
=20
 static dump_off
-dump_fwd_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_obj (struct dump_context *ctx, const struct Lisp_Objfwd *objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Objfwd_45D3E513DC)
 # error "Lisp_Objfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Objfwd const *objfwd =3D fwdptr;
   if (NILP (Fgethash (dump_off_to_lisp (emacs_offset (objfwd->objvar)),
                       ctx->staticpro_table,
                       Qnil)))
@@ -2340,12 +2337,12 @@ dump_fwd_obj (struct dump_context *ctx, void const =
*fwdptr)
 }
=20
 static dump_off
-dump_fwd_buffer_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_buffer_obj (struct dump_context *ctx,
+                     const struct Lisp_Buffer_Objfwd *buffer_objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Buffer_Objfwd_611EBD13FF)
 # error "Lisp_Buffer_Objfwd changed. See CHECK_STRUCTS comment in config.h=
."
 #endif
-  struct Lisp_Buffer_Objfwd const *buffer_objfwd =3D fwdptr;
   struct Lisp_Buffer_Objfwd out;
   dump_object_start (ctx, &out, sizeof (out));
   DUMP_FIELD_COPY (&out, buffer_objfwd, type);
@@ -2356,12 +2353,12 @@ dump_fwd_buffer_obj (struct dump_context *ctx, void=
 const *fwdptr)
 }
=20
 static dump_off
-dump_fwd_kboard_obj (struct dump_context *ctx, void const *fwdptr)
+dump_fwd_kboard_obj (struct dump_context *ctx,
+                     const struct Lisp_Kboard_Objfwd *kboard_objfwd)
 {
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Kboard_Objfwd_CAA7E71069)
 # error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  struct Lisp_Kboard_Objfwd const *kboard_objfwd =3D fwdptr;
   struct Lisp_Kboard_Objfwd out;
   dump_object_start (ctx, &out, sizeof (out));
   DUMP_FIELD_COPY (&out, kboard_objfwd, type);
@@ -2375,16 +2372,29 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
 #if CHECK_STRUCTS && !defined (HASH_Lisp_Fwd_Type_9CBA6EE55E)
 # error "Lisp_Fwd_Type changed. See CHECK_STRUCTS comment in config.h."
 #endif
-  typedef dump_off (*dump_fwd_fnptr) (struct dump_context *, void const *)=
;
-  static dump_fwd_fnptr const dump_fwd_table[] =3D {
-    [Lisp_Fwd_Int] =3D dump_fwd_int,
-    [Lisp_Fwd_Bool] =3D dump_fwd_bool,
-    [Lisp_Fwd_Obj] =3D dump_fwd_obj,
-    [Lisp_Fwd_Buffer_Obj] =3D dump_fwd_buffer_obj,
-    [Lisp_Fwd_Kboard_Obj] =3D dump_fwd_kboard_obj,
-  };
+  void const *p =3D fwd.fwdptr;
+  dump_off offset;
=20
-  return dump_fwd_table[XFWDTYPE (fwd)] (ctx, fwd.fwdptr);
+  switch (XFWDTYPE (fwd))
+    {
+    case Lisp_Fwd_Int:
+      offset =3D dump_fwd_int (ctx, p);
+      break;
+    case Lisp_Fwd_Bool:
+      offset =3D dump_fwd_bool (ctx, p);
+      break;
+    case Lisp_Fwd_Obj:
+      offset =3D dump_fwd_obj (ctx, p);
+      break;
+    case Lisp_Fwd_Buffer_Obj:
+      offset =3D dump_fwd_buffer_obj (ctx, p);
+      break;
+    case Lisp_Fwd_Kboard_Obj:
+      offset =3D dump_fwd_kboard_obj (ctx, p);
+      break;
+    }
+
+  return offset;
 }
=20
 static dump_off
@@ -4534,19 +4544,26 @@ dump_anonymous_allocate_w32 (void *base,
 #  define MAP_ANONYMOUS MAP_ANON
 # endif
=20
-static int const mem_prot_posix_table[] =3D {
-  [DUMP_MEMORY_ACCESS_NONE] =3D PROT_NONE,
-  [DUMP_MEMORY_ACCESS_READ] =3D PROT_READ,
-  [DUMP_MEMORY_ACCESS_READWRITE] =3D PROT_READ | PROT_WRITE,
-};
-
 static void *
 dump_anonymous_allocate_posix (void *base,
                                size_t size,
                                enum dump_memory_protection protection)
 {
   void *ret;
-  int mem_prot =3D mem_prot_posix_table[protection];
+  int mem_prot;
+
+  switch (protection)
+    {
+    case DUMP_MEMORY_ACCESS_NONE:
+      mem_prot =3D PROT_NONE;
+      break;
+    case DUMP_MEMORY_ACCESS_READ:
+      mem_prot =3D PROT_READ;
+      break;
+    case DUMP_MEMORY_ACCESS_READWRITE:
+      mem_prot =3D PROT_READ | PROT_WRITE;
+      break;
+    }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
   if (mem_prot !=3D PROT_NONE)
@@ -4690,9 +4707,25 @@ dump_map_file_posix (void *base, int fd, off_t offse=
t, size_t size,
 =09=09     enum dump_memory_protection protection)
 {
   void *ret;
-  int mem_prot =3D mem_prot_posix_table[protection];
-  int mem_flags =3D (protection =3D=3D DUMP_MEMORY_ACCESS_READWRITE
-=09=09   ? MAP_PRIVATE : MAP_SHARED);
+  int mem_prot;
+  int mem_flags;
+
+  switch (protection)
+    {
+    case DUMP_MEMORY_ACCESS_NONE:
+      mem_prot =3D PROT_NONE;
+      mem_flags =3D MAP_SHARED;
+      break;
+    case DUMP_MEMORY_ACCESS_READ:
+      mem_prot =3D PROT_READ;
+      mem_flags =3D MAP_SHARED;
+      break;
+    case DUMP_MEMORY_ACCESS_READWRITE:
+      mem_prot =3D PROT_READ | PROT_WRITE;
+      mem_flags =3D MAP_PRIVATE;
+      break;
+    }
+
   if (base)
     mem_flags |=3D MAP_FIXED;
=20
--=20
2.48.1
From ae7fdb7348b25e35ea6778220105a536458bfdae Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 3/4] Revert "Prefer static switch-case checking in pdumper"

This reverts commit 6e2e7265a04f63f482db7fbdfd8e2519d8bfe03e.
---
 src/pdumper.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/pdumper.c b/src/pdumper.c
index 45a44db0243..71d82629b56 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2392,6 +2392,8 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
     case Lisp_Fwd_Kboard_Obj:
       offset =3D dump_fwd_kboard_obj (ctx, p);
       break;
+    default:
+      emacs_abort ();
     }
=20
   return offset;
@@ -2523,6 +2525,8 @@ dump_symbol (struct dump_context *ctx,
     case SYMBOL_FORWARDED:
       dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd);
       break;
+    default:
+      emacs_abort ();
     }
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
@@ -3603,6 +3607,8 @@ dump_drain_cold_data (struct dump_context *ctx)
 =09  dump_cold_native_subr (ctx, data);
 =09  break;
 #endif
+        default:
+          emacs_abort ();
         }
     }
=20
@@ -4067,6 +4073,8 @@ dump_do_fixup (struct dump_context *ctx,
         do_write =3D false;
         break;
       }
+    default:
+      emacs_abort ();
     }
   if (do_write)
     dump_write (ctx, &dump_value, sizeof (dump_value));
@@ -4525,6 +4533,8 @@ dump_anonymous_allocate_w32 (void *base,
       mem_type =3D MEM_COMMIT;
       mem_prot =3D PAGE_READWRITE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   ret =3D VirtualAlloc (base, size, mem_type, mem_prot);
@@ -4563,6 +4573,8 @@ dump_anonymous_allocate_posix (void *base,
     case DUMP_MEMORY_ACCESS_READWRITE:
       mem_prot =3D PROT_READ | PROT_WRITE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
@@ -4655,6 +4667,7 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       protect =3D PAGE_WRITECOPY;=09/* for Windows 9X */
       break;
+    default:
     case DUMP_MEMORY_ACCESS_NONE:
     case DUMP_MEMORY_ACCESS_READ:
       protect =3D PAGE_READONLY;
@@ -4682,6 +4695,8 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       map_access =3D FILE_MAP_COPY;
       break;
+    default:
+      emacs_abort ();
     }
=20
   ret =3D MapViewOfFileEx (section,
@@ -4724,6 +4739,8 @@ dump_map_file_posix (void *base, int fd, off_t offset=
, size_t size,
       mem_prot =3D PROT_READ | PROT_WRITE;
       mem_flags =3D MAP_PRIVATE;
       break;
+    default:
+      emacs_abort ();
     }
=20
   if (base)
@@ -5590,6 +5607,8 @@ dump_do_emacs_relocation (const uintptr_t dump_base,
         memcpy (emacs_ptr_at (reloc.emacs_offset), &lv, sizeof (lv));
         break;
       }
+    default:
+      fatal ("unrecognied relocation type %d", (int) reloc.type);
     }
 }
=20
--=20
2.48.1

From 9aff2f5644f4933747d7af5412f2cffc8b2c98b2 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 4/4] Enable -Wswitch-enum in pdumper.c (bug#75964)

* src/Makefile.in (unfixed_Wswitch_obj): Remove 'pdumper.o'.
* src/pdumper.c (enum dump_reloc_type): Only include nativecomp cases
if HAVE_NATIVE_COMP.  Add additional cases to cover ranges.
(dump_reloc_dump_to_emacs_lv):
(dump_field_lv_or_rawptr):
(dump_fwd):
(dump_pre_dump_symbol):
(dump_symbol):
(dump_vectorlike):
(dump_drain_cold_data):
(read_ptr_raw_and_lv):
(decode_emacs_reloc):
(dump_do_fixup):
(dump_anonymous_allocate_w32):
(dump_anonymous_allocate_posix):
(dump_map_file_w32):
(dump_map_file_posix):
(dump_do_emacs_relocation): Expand 'default' labels.  Always
eassume (0) for 'default' labels.
(dump_object): Also use 'emacs_abort ()' rather than 'abort'.
(dump_do_dump_relocation): Also Handle case ranges explicitly.
---
 src/Makefile.in |  1 -
 src/pdumper.c   | 94 ++++++++++++++++++++++++++++++++-----------------
 2 files changed, 61 insertions(+), 34 deletions(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index 7388284fef2..79a88af3584 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -546,7 +546,6 @@ unfixed_Wswitch_obj +=3D
 unfixed_Wswitch_obj +=3D nsselect.o
 unfixed_Wswitch_obj +=3D nsterm.o
 unfixed_Wswitch_obj +=3D nsxwidget.o
-unfixed_Wswitch_obj +=3D pdumper.o
 unfixed_Wswitch_obj +=3D pgtkfns.o
 unfixed_Wswitch_obj +=3D pgtkterm.o
 unfixed_Wswitch_obj +=3D print.o
diff --git a/src/pdumper.c b/src/pdumper.c
index 71d82629b56..93119fd09c2 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -178,19 +178,35 @@ #define dump_offsetof(type, member)                  =
           \
     /* dump_ptr =3D dump_ptr + dump_base  */
     RELOC_DUMP_TO_DUMP_PTR_RAW,
     /* dump_mpz =3D [rebuild bignum]  */
+#ifdef HAVE_NATIVE_COMP
     RELOC_NATIVE_COMP_UNIT,
     RELOC_NATIVE_SUBR,
+#endif
     RELOC_BIGNUM,
     /* dump_lv =3D make_lisp_ptr (dump_lv + dump_base,
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol)
        Must be second-last.  */
     RELOC_DUMP_TO_DUMP_LV,
+    RELOC_DUMP_TO_DUMP_LV1,
+    RELOC_DUMP_TO_DUMP_LV2,
+    RELOC_DUMP_TO_DUMP_LV3,
+    RELOC_DUMP_TO_DUMP_LV4,
+    RELOC_DUMP_TO_DUMP_LV5,
+    RELOC_DUMP_TO_DUMP_LV6,
+    RELOC_DUMP_TO_DUMP_LV7,
     /* dump_lv =3D make_lisp_ptr (dump_lv + emacs_basis(),
 =09=09=09=09type - RELOC_DUMP_TO_DUMP_LV)
        (Special case for symbols: make_lisp_symbol.)
        Must be last.  */
     RELOC_DUMP_TO_EMACS_LV =3D RELOC_DUMP_TO_DUMP_LV + 8,
+    RELOC_DUMP_TO_EMACS_LV1,
+    RELOC_DUMP_TO_EMACS_LV2,
+    RELOC_DUMP_TO_EMACS_LV3,
+    RELOC_DUMP_TO_EMACS_LV4,
+    RELOC_DUMP_TO_EMACS_LV5,
+    RELOC_DUMP_TO_EMACS_LV6,
+    RELOC_DUMP_TO_EMACS_LV7,
   };
=20
 enum emacs_reloc_type
@@ -1445,8 +1461,11 @@ dump_reloc_dump_to_dump_lv (struct dump_context *ctx=
,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_DUMP_LV + type;
       break;
-    default:
+    case Lisp_Int0:
+    case Lisp_Int1:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   dump_push (&ctx->dump_relocs[EARLY_RELOCS],
@@ -1494,8 +1513,12 @@ dump_reloc_dump_to_emacs_lv (struct dump_context *ct=
x,
     case Lisp_Float:
       reloc_type =3D RELOC_DUMP_TO_EMACS_LV + type;
       break;
-    default:
+    case Lisp_Symbol:
+    case Lisp_Int0:
+    case Lisp_Int1:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   dump_push (&ctx->dump_relocs[EARLY_RELOCS],
@@ -1817,8 +1840,12 @@ dump_field_lv_or_rawptr (struct dump_context *ctx,
         case Lisp_Float:
           value =3D make_lisp_ptr (ptrval, *ptr_raw_type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09  emacs_abort ();
+
+=09case Lisp_Type_Unused0: eassume (0);
+        default: eassume (0);
         }
     }
=20
@@ -2392,8 +2419,7 @@ dump_fwd (struct dump_context *ctx, lispfwd fwd)
     case Lisp_Fwd_Kboard_Obj:
       offset =3D dump_fwd_kboard_obj (ctx, p);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   return offset;
@@ -2458,8 +2484,10 @@ dump_pre_dump_symbol (struct dump_context *ctx, stru=
ct Lisp_Symbol *symbol)
       dump_remember_symbol_aux (ctx, symbol_lv,
 =09=09=09=09dump_fwd (ctx, symbol->u.s.val.fwd));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
 }
@@ -2525,8 +2553,7 @@ dump_symbol (struct dump_context *ctx,
     case SYMBOL_FORWARDED:
       dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd);
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.function, WEIGHT_NORMAL);
   dump_field_lv (ctx, &out, symbol, &symbol->u.s.plist, WEIGHT_NORMAL);
@@ -2556,8 +2583,10 @@ dump_symbol (struct dump_context *ctx,
 =09  ? aux_offset
 =09  : dump_fwd (ctx, symbol->u.s.val.fwd)));
       break;
-    default:
+    case SYMBOL_PLAINVAL:
+    case SYMBOL_VARALIAS:
       break;
+    default: eassume (0);
     }
   return offset;
 }
@@ -3144,10 +3173,11 @@ dump_vectorlike (struct dump_context *ctx,
     case PVEC_SQLITE:
     case PVEC_MODULE_FUNCTION:
     case PVEC_SYMBOL_WITH_POS:
-    case PVEC_FREE:
     case PVEC_TS_PARSER:
     case PVEC_TS_NODE:
       break;
+    case PVEC_FREE: eassume (0);
+    default: eassume (0);
     }
   int iptype =3D ptype;
   static char const fmt[] =3D "pseudovector type %d";
@@ -3249,9 +3279,9 @@ dump_object (struct dump_context *ctx, Lisp_Object ob=
ject)
     case Lisp_Int0:
     case Lisp_Int1:
       eassert ("should not be dumping int: is self-representing" && 0);
-      abort ();
-    default:
       emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
   dump_clear_referrer (ctx);
=20
@@ -3607,8 +3637,7 @@ dump_drain_cold_data (struct dump_context *ctx)
 =09  dump_cold_native_subr (ctx, data);
 =09  break;
 #endif
-        default:
-          emacs_abort ();
+        default: eassume (0);
         }
     }
=20
@@ -3635,8 +3664,11 @@ read_ptr_raw_and_lv (const void *mem,
         case Lisp_Float:
           *out_lv =3D make_lisp_ptr (*out_ptr, type);
           break;
-        default:
-          emacs_abort ();
+=09case Lisp_Int0:
+=09case Lisp_Int1:
+=09case Lisp_Type_Unused0:
+=09  eassume (0);
+=09default: eassume (0);
         }
     }
 }
@@ -3888,8 +3920,7 @@ decode_emacs_reloc (struct dump_context *ctx, Lisp_Ob=
ject lreloc)
           }
       }
       break;
-    default:
-      eassume (!"not reached");
+    default: eassume (0);
     }
=20
   /* We should have consumed the whole relocation descriptor.  */
@@ -4073,8 +4104,7 @@ dump_do_fixup (struct dump_context *ctx,
         do_write =3D false;
         break;
       }
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
   if (do_write)
     dump_write (ctx, &dump_value, sizeof (dump_value));
@@ -4533,8 +4563,7 @@ dump_anonymous_allocate_w32 (void *base,
       mem_type =3D MEM_COMMIT;
       mem_prot =3D PAGE_READWRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D VirtualAlloc (base, size, mem_type, mem_prot);
@@ -4573,8 +4602,7 @@ dump_anonymous_allocate_posix (void *base,
     case DUMP_MEMORY_ACCESS_READWRITE:
       mem_prot =3D PROT_READ | PROT_WRITE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   int mem_flags =3D MAP_PRIVATE | MAP_ANONYMOUS;
@@ -4667,11 +4695,11 @@ dump_map_file_w32 (void *base, int fd, off_t offset=
, size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       protect =3D PAGE_WRITECOPY;=09/* for Windows 9X */
       break;
-    default:
     case DUMP_MEMORY_ACCESS_NONE:
     case DUMP_MEMORY_ACCESS_READ:
       protect =3D PAGE_READONLY;
       break;
+    default: eassume (0);
     }
=20
   section =3D CreateFileMapping (file,
@@ -4695,8 +4723,7 @@ dump_map_file_w32 (void *base, int fd, off_t offset, =
size_t size,
     case DUMP_MEMORY_ACCESS_READWRITE:
       map_access =3D FILE_MAP_COPY;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   ret =3D MapViewOfFileEx (section,
@@ -4739,8 +4766,7 @@ dump_map_file_posix (void *base, int fd, off_t offset=
, size_t size,
       mem_prot =3D PROT_READ | PROT_WRITE;
       mem_flags =3D MAP_PRIVATE;
       break;
-    default:
-      emacs_abort ();
+    default: eassume (0);
     }
=20
   if (base)
@@ -5541,13 +5567,16 @@ dump_do_dump_relocation (const uintptr_t dump_base,
         mpz_roinit_n (bignum->value, limbs, reload_info.nlimbs);
         break;
       }
-    default: /* Lisp_Object in the dump; precise type in reloc.type */
+    case RELOC_DUMP_TO_DUMP_LV ... RELOC_DUMP_TO_DUMP_LV + 7:
+    case RELOC_DUMP_TO_EMACS_LV ... RELOC_DUMP_TO_EMACS_LV + 7:
+      /* Lisp_Object in the dump; precise type in reloc.type */
       {
         Lisp_Object lv =3D dump_make_lv_from_reloc (dump_base, reloc);
         eassert (dump_reloc_size (reloc) =3D=3D sizeof (lv));
         dump_write_lv_to_dump (dump_base, reloc_offset, lv);
         break;
       }
+    default: eassume (0);
     }
 }
=20
@@ -5607,8 +5636,7 @@ dump_do_emacs_relocation (const uintptr_t dump_base,
         memcpy (emacs_ptr_at (reloc.emacs_offset), &lv, sizeof (lv));
         break;
       }
-    default:
-      fatal ("unrecognied relocation type %d", (int) reloc.type);
+    default: eassume (0);
     }
 }
=20
--=20
2.48.1



>
> Robert





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 13:58:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 08:58:30 2025
Received: from localhost ([127.0.0.1]:50563 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrXS-0006DZ-51
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:58:30 -0500
Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:52231)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <rpluim@HIDDEN>) id 1tdrXP-0006DE-Rg
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:58:28 -0500
Received: by mail-wm1-x32d.google.com with SMTP id
 5b1f17b1804b1-4363ae65100so23421515e9.0
 for <75964 <at> debbugs.gnu.org>; Fri, 31 Jan 2025 05:58:27 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1738331900; x=1738936700; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=6Cx4j+ZefWtGhG4rXakxO5cxGcjUXYOdZZtByfIHUDI=;
 b=GCh41imNEVhi9WaU6xiCTNWO18LV35HImuUTMqDfWXLdPxX4G/zGuIB+H2UEFMzDZc
 iDO71nlB04nhZKPuy3ga4bw6El/pCIgXvLaU3cw/Wkv0B1ATRJbvZ20Aa0hzgXJU2dpz
 WUiGzjUL3ghzKCxs+H523tjmcyco9uFF0zu6VbJ2Ff3E4P5a5Q9PxLeX+RS776tMfgDW
 gmWdPZ32/+DPzkFKBx7+MibwQvEAy9tIup5xbHJ9btY2QyQVg2fbWvSeZdhb22WWJkdu
 Yb4bBUclCdl9JkIk0sQ/0pKU/LMnU+etFl5Pv/WDl8beui5njnarbE+SeG4b8uVEFj0q
 ZqwA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1738331900; x=1738936700;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=6Cx4j+ZefWtGhG4rXakxO5cxGcjUXYOdZZtByfIHUDI=;
 b=hda4oRQjgpA33Z7KfgpGsp9GTjvtj22AF0B+mYJnWJ9WgOTzjD34cWB3woVGz2UI1q
 LPZ+/KLije068G4XB4rtQwINxLOBJWLC7876cjg8zQISJeWYIIeGZbX2RTgdrg+C/pzl
 /6ibOQdETWb7zms0vhpmK53QH6WH/wWnmJW2kK7QDRZPblujxycsA2Pbb2Q+mBbQ0RMz
 TgowLd6xOyiscgFTj+xEJBGSg5tjnW1jKpf7UxX+TQVPQmz9Kmf4ANloV5H9MRbkA6jQ
 Ha2KeqY7NhBt4WChHHiBCOpXyNg7Gp1Ho021mdgxnJ6OC1Ci45bqHj+SsxD1uUKaq4tC
 3HVw==
X-Forwarded-Encrypted: i=1;
 AJvYcCX0LLfOqg4uqeJfGUxedNL8esdSE7dMiGkG+b1W72l1LjU/hRKHLFwckyfv9rGPPf7UAuJkxQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yw5IWbVha9tRnpesEHOAq3+q/49vxnZWyT9H2/Fz3L6r3LAzdSK
 Y/R8TGBTHLbyoPU46KPw9UrxqjV+k844oXwB0Q8vz7VX3tjUXHaIHYeBsQ==
X-Gm-Gg: ASbGncvNgWjVi3DD/8CsdaIUdVt8VBttTZk+lDnuCformfPJFnaTXe9h51R2jmhigCc
 ENUPax2IExzzI5eLw6q9tcBkm3NIo3sjjzSy3sImVf7RZitat30hDP9/G80MVkBAI/Dqd7PTwZZ
 owSSJvVAHswFAGX2fQA6I+MbYEOnaC439B2IQR/vKr8S+WY3lm5bPj/gFOb6bK5hNJKmSBJi4T6
 uOsp5Fpj3Cd3gIbUUNC2QYL8RjDDsd7pPnMMbguwMJQ8G6imoR4luMN/YwGZbxzEl/rdqJ0IM7M
X-Google-Smtp-Source: AGHT+IFxEH0E4/+8LP1hS11Li2WVXO/XSvEIxpIB1/xhs66KBgnLY8MJf782Ljg+ftK2mDBrNCOiXQ==
X-Received: by 2002:a05:600c:3488:b0:434:f5c0:329f with SMTP id
 5b1f17b1804b1-438dc3cb2a8mr130445635e9.14.1738331900329; 
 Fri, 31 Jan 2025 05:58:20 -0800 (PST)
Received: from rltb ([2a01:e0a:3f3:fb51:bc9c:399:31a6:92d])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-438dcc6df36sm95483655e9.25.2025.01.31.05.58.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 31 Jan 2025 05:58:19 -0800 (PST)
From: Robert Pluim <rpluim@HIDDEN>
To: <bug-gnu-emacs@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <871pwjf8ut.fsf@HIDDEN> (Pip Cet via's message of "Fri,
 31 Jan 2025 12:48:02 +0000")
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN>
Date: Fri, 31 Jan 2025 14:58:19 +0100
Message-ID: <875xlvf5l0.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org,
 Pip Cet <pipcet@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

>>>>> On Fri, 31 Jan 2025 12:48:02 +0000, Pip Cet via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> said:
    >> 
    >> That might be fine when the enumeration is ours, but if it comes from
    >> a system header file, the only practical option is 0, with 1 being a
    >> very distant second (having a switch with many dozens of values is
    >> hardly a good thing).

    Pip> You're talking about a different problem then.  If an
    Pip> externally-controlled enum is expected to grow, we want a compiler
    Pip> warning to let us know when this happens, but we also need a default:
    Pip> handler that deals with this case.  So the right option is that we don't
    Pip> need any of the extra options, the default behaviour will be just fine.

Both gcc and clang support case ranges these days, so handling large
enums should not be a problem.

Robert
-- 




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 31 Jan 2025 13:58:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 08:58:37 2025
Received: from localhost ([127.0.0.1]:50566 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrXY-0006Ds-LB
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:58:37 -0500
Received: from lists.gnu.org ([2001:470:142::17]:36186)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rpluim@HIDDEN>) id 1tdrXS-0006DI-JC
 for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:58:30 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <rpluim@HIDDEN>) id 1tdrXM-0002vP-PK
 for bug-gnu-emacs@HIDDEN; Fri, 31 Jan 2025 08:58:24 -0500
Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <rpluim@HIDDEN>)
 id 1tdrXL-0005Pb-3r; Fri, 31 Jan 2025 08:58:24 -0500
Received: by mail-wm1-x331.google.com with SMTP id
 5b1f17b1804b1-436341f575fso23318475e9.1; 
 Fri, 31 Jan 2025 05:58:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1738331900; x=1738936700; darn=gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=6Cx4j+ZefWtGhG4rXakxO5cxGcjUXYOdZZtByfIHUDI=;
 b=IpkUNodflGGwn7WW2BO1YrEsyMeZs8VDVcCzFTFSaDSScW9GdXmZP84rAiKXUioCDn
 xKN6eBNMvOC9kDmBZw6BTVqDAtVaEsyaUaAoe+MQsMX/+wwTKw/Q7wr2L9073XRO1KLS
 aJRXlUsoTsFYmVea1HEO5+Fqnlq2f1fH4EEaWxsdaYjgHA8SiIfkVct1M+9hnRfR3CFI
 1Fo0oQ4GmuxOCON79GE5WLwajgXutqFRUBLmC4ssbflL96P6Se1qxaIW41xaOyz+RgHm
 JuHNQmkdwK6Qz7GOB00rAuusvcG/iznElO6hZb2wYxTdzbz85Lu6t6qjAKh/Pzj0scS+
 0gdg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1738331900; x=1738936700;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=6Cx4j+ZefWtGhG4rXakxO5cxGcjUXYOdZZtByfIHUDI=;
 b=FucjZ1MGfVqBoHCmdsrT+Oz/DsMB2U1JjzkoB87uK6HVOoM4lEV1Skd/eHbDQF5A8G
 b3Xv4PE5xdZakbGJLHzvzx42kYFlYg+bax2bLgUNFq1SUvRSui1Cr8woVbYVM44+b9FA
 t6ZctoKM+ZkxlLaPqsEOkD7rE3jUDxh8chKarBnY7uJOT5fXiljjeHmv6Nt+fb2IuUJv
 BKYNHAf7xOZBXKbdbCJ1IG5RP5MA48OJc8Ufky9patOgJAGlumHmYHfFzmdiqlfSEuPq
 HijT+VmsCPxSFtlKT4X3nQxb/PSDEIATASQ9Yq6Npb395Lqt6lB5ZAY+YZT15nA7qrx5
 QrpA==
X-Gm-Message-State: AOJu0YyNCGRf+nKId85ED2DFKJXTNatERoUdrSo+0ChFD0VTOwvsduER
 AxLh8NfD3wEzPt+nGXd27LbM/hl6u+xBk7vUN3D5imqNLaCn9zca
X-Gm-Gg: ASbGncv6sBfEFpjD/B3IKtlHogx0n2yAvz8qLLXZ9X1VKuJQfyYq0nHCvT4xaUhKaql
 zwvuoDOjkf6CH0uT0W5UawJk0n99nIf/nuI0r66Pt3jV0h1OkQzEPpTOjMwTEXB0vCEDc1FexC/
 b+2Jw0+dYE6w3OwREpP5vEZZEe9x7xJEUZjR95RyV+keVaQbgHz+tT7t1HV4kXww+gVvyUEz5SN
 3Loow1eorF8Z0ArsCxdd01SpOjz78n26m4o9uJHggmrjlt5MRI8+03nH8xaA0LQHFrd5a1MVP1X
X-Google-Smtp-Source: AGHT+IFxEH0E4/+8LP1hS11Li2WVXO/XSvEIxpIB1/xhs66KBgnLY8MJf782Ljg+ftK2mDBrNCOiXQ==
X-Received: by 2002:a05:600c:3488:b0:434:f5c0:329f with SMTP id
 5b1f17b1804b1-438dc3cb2a8mr130445635e9.14.1738331900329; 
 Fri, 31 Jan 2025 05:58:20 -0800 (PST)
Received: from rltb ([2a01:e0a:3f3:fb51:bc9c:399:31a6:92d])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-438dcc6df36sm95483655e9.25.2025.01.31.05.58.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 31 Jan 2025 05:58:19 -0800 (PST)
From: Robert Pluim <rpluim@HIDDEN>
To: <bug-gnu-emacs@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
In-Reply-To: <871pwjf8ut.fsf@HIDDEN> (Pip Cet via's message of "Fri,
 31 Jan 2025 12:48:02 +0000")
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN>
Date: Fri, 31 Jan 2025 14:58:19 +0100
Message-ID: <875xlvf5l0.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
Received-SPF: pass client-ip=2a00:1450:4864:20::331;
 envelope-from=rpluim@HIDDEN; helo=mail-wm1-x331.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
Cc: Eli Zaretskii <eliz@HIDDEN>, 75964 <at> debbugs.gnu.org,
 Pip Cet <pipcet@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

>>>>> On Fri, 31 Jan 2025 12:48:02 +0000, Pip Cet via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> said:
    >> 
    >> That might be fine when the enumeration is ours, but if it comes from
    >> a system header file, the only practical option is 0, with 1 being a
    >> very distant second (having a switch with many dozens of values is
    >> hardly a good thing).

    Pip> You're talking about a different problem then.  If an
    Pip> externally-controlled enum is expected to grow, we want a compiler
    Pip> warning to let us know when this happens, but we also need a default:
    Pip> handler that deals with this case.  So the right option is that we don't
    Pip> need any of the extra options, the default behaviour will be just fine.

Both gcc and clang support case ranges these days, so handling large
enums should not be a problem.

Robert
-- 




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 13:42:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 08:42:23 2025
Received: from localhost ([127.0.0.1]:50533 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdrHq-0005UA-VL
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:42:23 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:42400)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tdrHo-0005Tr-D5
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 08:42:21 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tdrHj-0002fL-2H; Fri, 31 Jan 2025 08:42:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=5CCiTreQAjyHqXvqLqgtlOVcDh93XhENtsaQYvdbocI=; b=RTCEZyhUD0Bw
 cpUlwTAkQx0819MPAMEiEaP9mY9iVfzPp1W1WklNPkUK+uNMWqPYBGduUl5h2eDW/pRW/ZeuzZW3f
 ITLMujEIY9UH2bZi5VX4V5T8r4UsBtq/qPaINY/zC4qx2/1vGKu/bb7lqDFLdjOKhJd6cEgzxeQHv
 r+PtJPpHEcKsJjEaycPg+/gmECIwVyqoNSG4XUO6/TF+O1WTi73xBcpBrHU0touw46FVV+ozeK3Ak
 jRcyPEveywUUeTspaN5K3N2SpCQouUM0+srIAMxNvIOqMlABFkVWGh9Jk9zmCpG7Exd0CwXctVRcM
 i8DkDAwxmzt0tC7YblHgjw==;
Date: Fri, 31 Jan 2025 15:42:02 +0200
Message-Id: <86o6znhzh1.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <871pwjf8ut.fsf@HIDDEN> (message from Pip Cet on Fri, 31
 Jan 2025 12:48:02 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
 <871pwjf8ut.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Fri, 31 Jan 2025 12:48:02 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: 75964 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> >> 0. do nothing, keeping bidi.o on the list of unfixed Wswitch objects,
> >> explaining that too many large switches are in use for the result of (1)
> >> to be readable
> >> 1. bite the bullet and apply a 184-line diff to bidi.c.
> >> 2. add #pragma statements in bidi.c around the five large switch
> >> statements, giving us the benefit of warnings for the other switch
> >> statements in bidi.c
> >> 3. turn bidi_type_t into a real integer type to avoid the warning
> >> 4. cast bidi_type_t to a real integer type in the switch statement.
> >> -1. use if() instead
> >> -2. use arrays instead
> >> -3. use arrays of function pointers instead
> >
> > That might be fine when the enumeration is ours, but if it comes from
> > a system header file, the only practical option is 0, with 1 being a
> > very distant second (having a switch with many dozens of values is
> > hardly a good thing).
> 
> You're talking about a different problem then.  If an
> externally-controlled enum is expected to grow, we want a compiler
> warning to let us know when this happens, but we also need a default:
> handler that deals with this case.  So the right option is that we don't
> need any of the extra options, the default behaviour will be just fine.

Maybe.  I'm not yet sure.

I also think we should maybe take a step back and summarize the
problems the use of -Wswitch-enum everywhere is supposed to help us
solve.  You mentioned other approaches that have limitations, but what
are the specific problems in our sources that this and the other
approaches aim to solve?

I think we need to have the problems we want to solve in mind when
considering the solutions, because the solutions are not without
costs.  And if we end up leaving many source files in the "unfixed"
class, then maybe we should turn this around and only use this switch
for those few files where it doesn't cause us problems for which
solutions we don't want to pay those costs.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 12:48:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 07:48:19 2025
Received: from localhost ([127.0.0.1]:50435 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdqRW-0002rY-RK
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:48:19 -0500
Received: from mail-4322.protonmail.ch ([185.70.43.22]:14445)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdqRT-0002rI-Tm
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:48:16 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738327689; x=1738586889;
 bh=q6DvtjEyC/YaVnToHKTtzv/5gAQbaWfQ43ExBarMdKg=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=G0QT/Ob5YtVYkXRQAIEOdTLPNFyPgqSxNGEI6tdleo46XOeJj6LsWI/5HCsjsDE42
 tslH265yETmoR3MGEIYvGuZFDAsjEo/me5VdA5TgXd3iYzcaT5oIO/LBjTDL3sH7sL
 OKWFBh79bHBEOvRNl9xagB1RtUWBkfon3pBkoLHX5M3EKr0Wvik0OTRIIDoObs+6Kh
 Tnlh6U4s12enP31pt+fHfxSqtP+cbOLWoOramYRhSPgFu+AjBMFSIgqHb8y1hkdJxx
 NNlCtXPYMkNdM9vhT7GsiMCJY7+A3pkwhO2J3VchQT0BKTsgjr0JekL8ps0KU3CtLx
 0Euzv196/yvcA==
Date: Fri, 31 Jan 2025 12:48:02 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <871pwjf8ut.fsf@HIDDEN>
In-Reply-To: <86plk3i32m.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN> <86plk3i32m.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 446fb56a4ee871e3956a35228a470fe9f0122b38
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Fri, 31 Jan 2025 12:15:04 +0000
>> From: Pip Cet <pipcet@HIDDEN>
>> Cc: 75964 <at> debbugs.gnu.org
>>
>> "Eli Zaretskii" <eliz@HIDDEN> writes:
>>
>> > What should one do if the enumeration is large and the code wants to
>> > treat all but the few values the same?  This is a legitimate use case,
>>
>> We have several options:
>>
>> 0. do nothing, keeping bidi.o on the list of unfixed Wswitch objects,
>> explaining that too many large switches are in use for the result of (1)
>> to be readable
>> 1. bite the bullet and apply a 184-line diff to bidi.c.
>> 2. add #pragma statements in bidi.c around the five large switch
>> statements, giving us the benefit of warnings for the other switch
>> statements in bidi.c
>> 3. turn bidi_type_t into a real integer type to avoid the warning
>> 4. cast bidi_type_t to a real integer type in the switch statement.
>> -1. use if() instead
>> -2. use arrays instead
>> -3. use arrays of function pointers instead
>
> That might be fine when the enumeration is ours, but if it comes from
> a system header file, the only practical option is 0, with 1 being a
> very distant second (having a switch with many dozens of values is
> hardly a good thing).

You're talking about a different problem then.  If an
externally-controlled enum is expected to grow, we want a compiler
warning to let us know when this happens, but we also need a default:
handler that deals with this case.  So the right option is that we don't
need any of the extra options, the default behaviour will be just fine.

>> > isn't it?  Having to spell out all of the values is quite tedious, and
>>
>> I don't think the (slight) pain of having to add the case labels is the
>> problem.  I'm willing to do that.
>
> We'll then need to update that each time the library headers add more
> values, so this is not something anyone of us can volunteer to do,
> forever.

It's a compiler warning caused by external code.  Those get added all
the time, and someone usually gets around to fixing or silencing them
eventually.

The last time this happened, our code just silently did the wrong thing
for the new value in an expanded enum.  Having to ignore a warning
letting you know that will happen seems better, IMHO.

>> > eassume will not do what we want in this case.
>>
>> Why not?
>
> Because I'm describing the case where we actually _want_ the default
> handling of an enumerated value to be something valid, whereas eassume
> is for when it's invalid.

Note that in several cases where I've done the conversion, it turns out
that the comment after default: indicated that cases X and Y could be
handled that way, but there's also a case Z that got caught by the
default label and shouldn't have been.  If nothing else, this hints
there are documentation bugs we can catch that way.

>> While "default: eassume (0);" is a weird way of putting it,
>> the semantics with -Werror=3Dswitch-enum are "I've handled all enumerate=
d
>> cases explicitly; if the enumeration holds an anonymous value different
>> from all named values, abort in debug builds and don't generate code for
>> this in optimized builds".
>>
>> That applies the same no matter how large the enum is.  What am I
>> missing here?
>
> AFAIU, you are talking about the case where all the enum values were
> spelled out in the switch, in which case eassume is indeed TRT.  But I
> was talking about a different case.

I understand now.  It'd be nice if we could disable -Wswitch-enum for a
specific switch or a specific enum, without using #pragmas, but I don't
think GCC has an option for that yet.  You can use a cast to turn off
the warning with standard GCC.

I think it would be good to tag the bidi_type_t enum so it doesn't
produce such warnings, for example, but only the two switches deep in
bidi_resolve_brackets and bidi_resolve_neutral really seem problematic
at a first glance, to me, and is that worth hacking GCC for?

I'd be perfectly happy making bidi.o a permanent exception (0).  Add a
comment explaining that decision, keep it in the obj list, done.

(I picked bidi.c as an example because it seems to me to be the most
difficult case: the bidi_type_t is large add somewhat tricky, and while
it's defined in the Emacs source code it's ultimately controlled by
Unicode.  If you have a better example, feel free to discuss that instead).

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 12:24:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 07:24:29 2025
Received: from localhost ([127.0.0.1]:50383 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdq4S-00078X-Pi
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:24:29 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:42746)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tdq4Q-00078H-4i
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:24:27 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tdq4K-0005DT-Nm; Fri, 31 Jan 2025 07:24:20 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=Q5GjFMpzs7kow2wgmuoeNUsUn5HeeXe8cT8zMbTedik=; b=X44AnceBZmfd
 j6HmO715Ak9A0nqy7W/dflryBs9QvBd+5tDRl+l3hz1GWwXTXIosof0xBjLk0bJDBJ5pOL1CqC6rD
 m6S1eApkYIvyZRadJO2CwDMsFVCFuzCxS02UwM7t90yOctqURGWycNNosBv0TSqdo2mdH23n+yNdJ
 cQszahKUea/OaE0dkZGFN3Y3oPSVEOav+9wMS0nUz4Yb+n0mGP4Do2steGrtTbhheu97W6IX0difl
 SSGIdDdo3mGD15ghehHQOgmX1tbYcFzvVfBnB3OtG7BKF1tx87RqtnO7aFUl/vvCVkpXJYUsALvTf
 H4nW1RNfcTh6aHf66VcG5A==;
Date: Fri, 31 Jan 2025 14:24:17 +0200
Message-Id: <86plk3i32m.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <877c6bfadr.fsf@HIDDEN> (message from Pip Cet on Fri, 31
 Jan 2025 12:15:04 +0000)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
 <877c6bfadr.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Fri, 31 Jan 2025 12:15:04 +0000
> From: Pip Cet <pipcet@HIDDEN>
> Cc: 75964 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz@HIDDEN> writes:
> 
> > What should one do if the enumeration is large and the code wants to
> > treat all but the few values the same?  This is a legitimate use case,
> 
> We have several options:
> 
> 0. do nothing, keeping bidi.o on the list of unfixed Wswitch objects,
> explaining that too many large switches are in use for the result of (1)
> to be readable
> 1. bite the bullet and apply a 184-line diff to bidi.c.
> 2. add #pragma statements in bidi.c around the five large switch
> statements, giving us the benefit of warnings for the other switch
> statements in bidi.c
> 3. turn bidi_type_t into a real integer type to avoid the warning
> 4. cast bidi_type_t to a real integer type in the switch statement.
> -1. use if() instead
> -2. use arrays instead
> -3. use arrays of function pointers instead

That might be fine when the enumeration is ours, but if it comes from
a system header file, the only practical option is 0, with 1 being a
very distant second (having a switch with many dozens of values is
hardly a good thing).

> > isn't it?  Having to spell out all of the values is quite tedious, and
> 
> I don't think the (slight) pain of having to add the case labels is the
> problem.  I'm willing to do that.

We'll then need to update that each time the library headers add more
values, so this is not something anyone of us can volunteer to do,
forever.

> The real harm is to readability, and that's really important.

Right.

> > eassume will not do what we want in this case.
> 
> Why not?

Because I'm describing the case where we actually _want_ the default
handling of an enumerated value to be something valid, whereas eassume
is for when it's invalid.

> While "default: eassume (0);" is a weird way of putting it,
> the semantics with -Werror=switch-enum are "I've handled all enumerated
> cases explicitly; if the enumeration holds an anonymous value different
> from all named values, abort in debug builds and don't generate code for
> this in optimized builds".
> 
> That applies the same no matter how large the enum is.  What am I
> missing here?

AFAIU, you are talking about the case where all the enum values were
spelled out in the switch, in which case eassume is indeed TRT.  But I
was talking about a different case.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 12:15:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 07:15:17 2025
Received: from localhost ([127.0.0.1]:50351 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdpvZ-0006ki-61
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:15:17 -0500
Received: from mail-40131.protonmail.ch ([185.70.40.131]:46389)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdpvW-0006fW-Pj
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 07:15:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738325708; x=1738584908;
 bh=euqVWspTutv9Hj90PfHRlW85PzBro6XOSZ/1J8Hfvxk=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=lkNfymH7dPXbwXA+K90D3f0zO7it+i/PbyU6epVl/B7TqX2fNSuw4YNRAhHQHpxeO
 w2W50sx47ahybnYyxiUAXKBtZs/06dVyOzEpJ+cj8rOgGHF83goijjWaGmGYUWUQXM
 us3FSEL9ZVi+vJUhLNJzLaMa6bzZ3mejryBQ5dBsON+VrajDY1DBUUv/6RxlSZhQlY
 U+tCIO0l/AaVjkMdB4tGY6SySwUgcg2gFgbclm/osHo6g0PdHe2WhX1Lp3J3ZsU0R2
 QJFKAHKlqkJ0oySe+UoEUApIpbjMsvkWFr/EvIQ1ZdYI/9/FUR1l9J6Vz5kl4E7AXn
 oXUdo1HDxSNVg==
Date: Fri, 31 Jan 2025 12:15:04 +0000
To: Eli Zaretskii <eliz@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <877c6bfadr.fsf@HIDDEN>
In-Reply-To: <86tt9fi4nf.fsf@HIDDEN>
References: <878qqrgw51.fsf@HIDDEN> <86tt9fi4nf.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 5c2c82fb5dc9ccf17e5535887ae84d6c65de3d0a
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Eli Zaretskii" <eliz@HIDDEN> writes:

>> Date: Fri, 31 Jan 2025 09:39:45 +0000
>> From:  Pip Cet via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>>
>> I'm proposing to enable -Wswitch-enum as a warning option when compiling
>> Emacs C sources in src/, and to modify those source files to make good
>> use of it.
>>
>> GCC's -Wswitch-enum will warn about a switch statement of the form
>>
>> enum ABC { A, B, C };
>>
>> enum ABC x =3D ...;
>>
>> switch (x)
>> {
>>   case A:
>>   case B:
>>     return 1;
>>   default:
>>     return 0;
>> }
>>
>> The reason is that the "default" branch covers both case C and the case
>> that the value of x isn't A, B, or, C.  C allows this latter case and
>> requires compilers to support it, and some Emacs code relies on
>> non-enumerated values to be valid.
>>
>> Instead, with -Wswitch-enum, one should write:
>>
>> enum ABC { A, B, C };
>>
>> enum ABC x =3D ...;
>>
>> switch (x)
>> {
>>   case A:
>>   case B:
>>     return 1;
>>   case C:
>>     return 0;
>>   default: eassume (false);
>> }
>>
>> assuming x is known never to have a non-enumerated value (this is almost
>> always the case in Emacs).
>
> What should one do if the enumeration is large and the code wants to
> treat all but the few values the same?  This is a legitimate use case,

We have several options:

0. do nothing, keeping bidi.o on the list of unfixed Wswitch objects,
explaining that too many large switches are in use for the result of (1)
to be readable
1. bite the bullet and apply a 184-line diff to bidi.c.
2. add #pragma statements in bidi.c around the five large switch
statements, giving us the benefit of warnings for the other switch
statements in bidi.c
3. turn bidi_type_t into a real integer type to avoid the warning
4. cast bidi_type_t to a real integer type in the switch statement.
-1. use if() instead
-2. use arrays instead
-3. use arrays of function pointers instead

The negative options are bad and I'd very much advise against them.  (0)
is easiest, and allows us to deal with that problem if we want to change
our approach.  I've done (1), but then I'm having a hard time reading
bidi.c with or without that patch.

(2) is bad because if we ever want to make sure the pragmas disabling
warnings are still appropriate, we've got to find them all.

(3) and (4) avoids the problem with standard GCC, but if my patch is
ever accepted, GCC will start warning about this in some fashion

> isn't it?  Having to spell out all of the values is quite tedious, and

I don't think the (slight) pain of having to add the case labels is the
problem.  I'm willing to do that.  The real harm is to readability, and
that's really important.

> eassume will not do what we want in this case.

Why not?  While "default: eassume (0);" is a weird way of putting it,
the semantics with -Werror=3Dswitch-enum are "I've handled all enumerated
cases explicitly; if the enumeration holds an anonymous value different
from all named values, abort in debug builds and don't generate code for
this in optimized builds".

That applies the same no matter how large the enum is.  What am I
missing here?

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 11:50:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 06:50:24 2025
Received: from localhost ([127.0.0.1]:50274 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdpXT-0005Y6-MW
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 06:50:24 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:34360)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tdpXQ-0005Xo-Qr
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 06:50:21 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1tdpXL-00030P-C1; Fri, 31 Jan 2025 06:50:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=ZUUn3FAk5f09Ni2/9zifWsU0Jbf9mGbiL+wxX5aCcVU=; b=HU1yy135rvrq
 aFaoJkYrGUom3bpFhA03wHFfUDSbSWnLaHQ42BNsvp8xz499WXlLhTrTirjWNTMNFTYyTx1getSLA
 uUo6uO5SDUqmgIzcoURc1N8T3ecAImGTYdKYYKoWnIzmKoI9SG5ocPj1+z7cDSfaKmdXMr+daJ+n1
 uafoMKBXicrklk2SFRoMfJEH2Fgka3Vy9WnSHLje31TQOK4wvW54z4lOmyhZQzJagDsMm/FkuUlt5
 SlEi1VvcfgbbD1mBqMlboqzc2uocq+vkbBuYeV+X54kFS1uV8tPm6GkTBOubf50KKTF0XZUO+kSRI
 tfQvlMbSsfTgxO/UNLnomQ==;
Date: Fri, 31 Jan 2025 13:50:12 +0200
Message-Id: <86tt9fi4nf.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
In-Reply-To: <878qqrgw51.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN)
Subject: Re: bug#75964: Switching the Emacs build to -Wswitch-enum in src/
References: <878qqrgw51.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75964
Cc: 75964 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Fri, 31 Jan 2025 09:39:45 +0000
> From:  Pip Cet via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> 
> I'm proposing to enable -Wswitch-enum as a warning option when compiling
> Emacs C sources in src/, and to modify those source files to make good
> use of it.
> 
> GCC's -Wswitch-enum will warn about a switch statement of the form
> 
> enum ABC { A, B, C };
> 
> enum ABC x = ...;
> 
> switch (x)
> {
>   case A:
>   case B:
>     return 1;
>   default:
>     return 0;
> }
> 
> The reason is that the "default" branch covers both case C and the case
> that the value of x isn't A, B, or, C.  C allows this latter case and
> requires compilers to support it, and some Emacs code relies on
> non-enumerated values to be valid.
> 
> Instead, with -Wswitch-enum, one should write:
> 
> enum ABC { A, B, C };
> 
> enum ABC x = ...;
> 
> switch (x)
> {
>   case A:
>   case B:
>     return 1;
>   case C:
>     return 0;
>   default: eassume (false);
> }
> 
> assuming x is known never to have a non-enumerated value (this is almost
> always the case in Emacs).

What should one do if the enumeration is large and the code wants to
treat all but the few values the same?  This is a legitimate use case,
isn't it?  Having to spell out all of the values is quite tedious, and
eassume will not do what we want in this case.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at 75964 <at> debbugs.gnu.org:


Received: (at 75964) by debbugs.gnu.org; 31 Jan 2025 11:05:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 06:05:30 2025
Received: from localhost ([127.0.0.1]:50182 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdoq1-0003Ox-ER
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 06:05:30 -0500
Received: from mail-4322.protonmail.ch ([185.70.43.22]:47597)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdopx-0003Oa-Bd
 for 75964 <at> debbugs.gnu.org; Fri, 31 Jan 2025 06:05:27 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738321518; x=1738580718;
 bh=IDJICPxpikbVqU8a5dM7zHXYOqnMSmVU4TnXoeb2lyI=;
 h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date:
 Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector:
 List-Unsubscribe:List-Unsubscribe-Post;
 b=qT19Dp4McNcOJ0SusCW9YM75LSMwcIZfXyds/78zMKpcnUWGYC/RdGvcSfzgPaNpv
 TwLhG2kO88aB2csfq7p/Xf08mCuGLWzFAfK2+xhyIiXhkce6p74JyUG36ZyFoV6Psa
 QmjgYb+asM9rmyz2Jbuu0G3CBYXCBDzJEZuUcVVoPw1RHsd3rDDRYZIQXyJxmKE+9e
 ZN7NkqylUCQRayWlZ/MUmfFOFRFVc3nBXiXBjPcUOuhf4JUWosDVB9CdvOExJUSGeJ
 Yl0MxcsOi1rBKfKfl3NaqKF1Y4cv9vb011vmutbav92TyN5hq0yopEMzm0+5ZL3V6d
 qi0kiJbXAMe0A==
Date: Fri, 31 Jan 2025 11:05:12 +0000
To: 75964 <at> debbugs.gnu.org, Paul Eggert <eggert@HIDDEN>,
 Stefan Kangas <stefankangas@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <87v7tvfdm6.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: e6e32105c131da942af1ba2b303133566ebc1625
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75964
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Pip Cet <pipcet@HIDDEN> writes:

> Some preliminary patches to follow once this has a bug number.

Here's a first small patch series.  Some initial remarks

1. I built a fresh GCC from scratch, so I'd be able to get the latest
warnings.  Unfortunately, GCC now thinks:

  static const char hexchar[16] =3D "0123456789ABCDEF";

is unsafe and the [16] should be [17] or omitted.  So while I changed
that in my build, I'm not including that in the patches.

This GCC version is also patched to "infer" a switch type: if you do

int x:n

switch (x)
{
case PVEC_NORMAL:
  return;
default:
  emacs_abort ();
}

this GCC version will warn about the other PVEC types, which should
appear explicitly in the enum, because PVEC_NORMAL is part of an
enumeration, even though x is an integer.

Onwards to the patches:

First. it enables -Wswitch-enum if the
compiler supports it:

From 474b0b2aa3deb1a674dd7b112bcdbbe596475ad1 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 1/5] Enable -Wswitch-enum (bug#75964)

* configure.ac: Enable warning -Wswitch-enum if available.
---
 configure.ac | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configure.ac b/configure.ac
index ba39074c83a..caa12347738 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1855,6 +1855,7 @@ AC_DEFUN
     [nw=3D"$nw -Wsuggest-attribute=3Dnoreturn"])
=20
   gl_MANYWARN_ALL_GCC([ws])
+  ws=3D"$ws -Wswitch-enum"
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
   for w in $ws; do
     gl_WARN_ADD([$w])
--=20
2.48.1

Then, it adds a PACIFYING_CFLAGS variable set on a per-file basis to
src/Makefile.in, so we can list those files which we don't want to
compile with this new warning flag yet:

From bb884c228ee27c97682007119a21ec202c3799ee Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH] Disable -Wswitch-enum in lib-src (bug#75964)

* lib-src/Makefile.in (PACIFYING_CFLAGS, unfixed_Wswitch_obj): New
variables.  Use it.
---
 lib-src/Makefile.in | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 439d9a1a52d..b2b596cfac4 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -274,12 +274,27 @@ BASE_CFLAGS =3D
 =09      -I. -I../src -I../lib \
 =09      -I${srcdir} -I${srcdir}/../src -I${srcdir}/../lib
=20
-ALL_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} $=
{CFLAGS}
+ALL_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} $=
{CFLAGS} ${PACIFYING_CFLAGS}
 CPP_CFLAGS =3D ${BASE_CFLAGS} ${PROFILING_CFLAGS} ${CPPFLAGS} ${CFLAGS}
=20
 ALL_CXXFLAGS =3D $(filter-out ${NON_CXX_CFLAGS},${BASE_CFLAGS}) \
   ${PROFILING_CFLAGS} ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS} ${HAIKU=
_CFLAGS}
=20
+unfixed_Wswitch_obj +=3D ctags${EXEEXT}
+unfixed_Wswitch_obj +=3D etags${EXEEXT}
+unfixed_Wswitch_obj +=3D ebrowse${EXEEXT}
+unfixed_Wswitch_obj +=3D ctags${EXEEXT}
+unfixed_Wswitch_obj +=3D asset-directory-tool${EXEEXT}
+unfixed_Wswitch_obj +=3D ebrowse${EXEEXT}
+unfixed_Wswitch_obj +=3D make-docfile${EXEEXT}
+unfixed_Wswitch_obj +=3D make-fingerprint${EXEEXT}
+unfixed_Wswitch_obj +=3D movemail${EXEEXT}
+unfixed_Wswitch_obj +=3D emacsclient${EXEEXT}
+unfixed_Wswitch_obj +=3D emacsclientw${EXEEXT}
+unfixed_Wswitch_obj +=3D hexl${EXEEXT}
+unfixed_Wswitch_obj +=3D update-game-score${EXEEXT}
+
+$(unfixed_Wswitch_obj): PACIFYING_CFLAGS +=3D -Wno-switch-enum -Wno-switch
 # Configuration files for .o files to depend on.
 config_h =3D ../src/config.h $(srcdir)/../src/conf_post.h
=20
--=20
2.48.1

From ccf6b7f0690bcc11d0cba55997cd427fd7d18804 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 3/5] Per-file flags to disable -Wswitch-enum in src
 (bug#75964)

* src/Makefile.in (unfixed_wenum_obj): New variable.  Make it include
all known objects. (.c.o): Use it.
---
 src/Makefile.in | 177 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 176 insertions(+), 1 deletion(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index d987124d29d..cb75ffc8482 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -455,7 +455,7 @@ ALL_CXX_CFLAGS =3D
=20
 .SUFFIXES: .c .m .cc
 .c.o:
-=09$(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) $<
+=09$(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) $(PACI=
FYING_CFLAGS) $<
 .m.o:
 =09$(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $(PROFILING_CFLAGS) $=
<
 .cc.o:
@@ -484,6 +484,181 @@ base_obj =3D
 =09$(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ)        =
\
 =09$(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ)=09=09=09       \
 =09$(HAIKU_OBJ) $(PGTK_OBJ) $(ANDROID_OBJ)
+
+unfixed_Wswitch_obj +=3D alloc.o
+unfixed_Wswitch_obj +=3D android-emacs.o
+unfixed_Wswitch_obj +=3D android.o
+unfixed_Wswitch_obj +=3D androidfns.o
+unfixed_Wswitch_obj +=3D androidfont.o
+unfixed_Wswitch_obj +=3D androidmenu.o
+unfixed_Wswitch_obj +=3D androidselect.o
+unfixed_Wswitch_obj +=3D androidterm.o
+unfixed_Wswitch_obj +=3D androidvfs.o
+unfixed_Wswitch_obj +=3D atimer.o
+unfixed_Wswitch_obj +=3D bidi.o
+unfixed_Wswitch_obj +=3D bignum.o
+unfixed_Wswitch_obj +=3D buffer.o
+unfixed_Wswitch_obj +=3D bytecode.o
+unfixed_Wswitch_obj +=3D callint.o
+unfixed_Wswitch_obj +=3D callproc.o
+unfixed_Wswitch_obj +=3D casefiddle.o
+unfixed_Wswitch_obj +=3D casetab.o
+unfixed_Wswitch_obj +=3D category.o
+unfixed_Wswitch_obj +=3D ccl.o
+unfixed_Wswitch_obj +=3D character.o
+unfixed_Wswitch_obj +=3D charset.o
+unfixed_Wswitch_obj +=3D chartab.o
+unfixed_Wswitch_obj +=3D cm.o
+unfixed_Wswitch_obj +=3D cmds.o
+unfixed_Wswitch_obj +=3D coding.o
+unfixed_Wswitch_obj +=3D comp.o
+unfixed_Wswitch_obj +=3D composite.o
+unfixed_Wswitch_obj +=3D cygw32.o
+unfixed_Wswitch_obj +=3D data.o
+unfixed_Wswitch_obj +=3D dbusbind.o
+unfixed_Wswitch_obj +=3D decompress.o
+unfixed_Wswitch_obj +=3D dired.o
+unfixed_Wswitch_obj +=3D dispnew.o
+unfixed_Wswitch_obj +=3D doc.o
+unfixed_Wswitch_obj +=3D doprnt.o
+unfixed_Wswitch_obj +=3D dosfns.o
+unfixed_Wswitch_obj +=3D dynlib.o
+unfixed_Wswitch_obj +=3D editfns.o
+unfixed_Wswitch_obj +=3D emacs-module.o
+unfixed_Wswitch_obj +=3D emacs.o
+unfixed_Wswitch_obj +=3D emacsgtkfixed.o
+unfixed_Wswitch_obj +=3D eval.o
+unfixed_Wswitch_obj +=3D fileio.o
+unfixed_Wswitch_obj +=3D filelock.o
+unfixed_Wswitch_obj +=3D firstfile.o
+unfixed_Wswitch_obj +=3D floatfns.o
+unfixed_Wswitch_obj +=3D fns.o
+unfixed_Wswitch_obj +=3D font.o
+unfixed_Wswitch_obj +=3D fontset.o
+unfixed_Wswitch_obj +=3D frame.o
+unfixed_Wswitch_obj +=3D fringe.o
+unfixed_Wswitch_obj +=3D ftcrfont.o
+unfixed_Wswitch_obj +=3D ftfont.o
+unfixed_Wswitch_obj +=3D gfilenotify.o
+unfixed_Wswitch_obj +=3D gmalloc.o
+unfixed_Wswitch_obj +=3D gnutls.o
+unfixed_Wswitch_obj +=3D gtkutil.o
+unfixed_Wswitch_obj +=3D haiku.o
+unfixed_Wswitch_obj +=3D haiku_io.o
+unfixed_Wswitch_obj +=3D haikufns.o
+unfixed_Wswitch_obj +=3D haikufont.o
+unfixed_Wswitch_obj +=3D haikuimage.o
+unfixed_Wswitch_obj +=3D haikumenu.o
+unfixed_Wswitch_obj +=3D haikuselect.o
+unfixed_Wswitch_obj +=3D haikuterm.o
+unfixed_Wswitch_obj +=3D hbfont.o
+unfixed_Wswitch_obj +=3D image.o
+unfixed_Wswitch_obj +=3D indent.o
+unfixed_Wswitch_obj +=3D inotify.o
+unfixed_Wswitch_obj +=3D insdel.o
+unfixed_Wswitch_obj +=3D intervals.o
+unfixed_Wswitch_obj +=3D itree.o
+unfixed_Wswitch_obj +=3D json.o
+unfixed_Wswitch_obj +=3D keyboard.o
+unfixed_Wswitch_obj +=3D keymap.o
+unfixed_Wswitch_obj +=3D kqueue.o
+unfixed_Wswitch_obj +=3D lastfile.o
+unfixed_Wswitch_obj +=3D lcms.o
+unfixed_Wswitch_obj +=3D lread.o
+unfixed_Wswitch_obj +=3D macfont.o
+unfixed_Wswitch_obj +=3D macros.o
+unfixed_Wswitch_obj +=3D marker.o
+unfixed_Wswitch_obj +=3D menu.o
+unfixed_Wswitch_obj +=3D minibuf.o
+unfixed_Wswitch_obj +=3D msdos.o
+unfixed_Wswitch_obj +=3D nsfns.o
+unfixed_Wswitch_obj +=3D nsfont.o
+unfixed_Wswitch_obj +=3D nsimage.o
+unfixed_Wswitch_obj +=3D nsmenu.o
+unfixed_Wswitch_obj +=3D nsselect.o
+unfixed_Wswitch_obj +=3D nsterm.o
+unfixed_Wswitch_obj +=3D nsxwidget.o
+unfixed_Wswitch_obj +=3D pdumper.o
+unfixed_Wswitch_obj +=3D pgtkfns.o
+unfixed_Wswitch_obj +=3D pgtkim.o
+unfixed_Wswitch_obj +=3D pgtkmenu.o
+unfixed_Wswitch_obj +=3D pgtkselect.o
+unfixed_Wswitch_obj +=3D pgtkterm.o
+unfixed_Wswitch_obj +=3D print.o
+unfixed_Wswitch_obj +=3D process.o
+unfixed_Wswitch_obj +=3D profiler.o
+unfixed_Wswitch_obj +=3D ralloc.o
+unfixed_Wswitch_obj +=3D regex-emacs.o
+unfixed_Wswitch_obj +=3D region-cache.o
+unfixed_Wswitch_obj +=3D scroll.o
+unfixed_Wswitch_obj +=3D search.o
+unfixed_Wswitch_obj +=3D sfnt.o
+unfixed_Wswitch_obj +=3D sfntfont-android.o
+unfixed_Wswitch_obj +=3D sfntfont.o
+unfixed_Wswitch_obj +=3D sheap.o
+unfixed_Wswitch_obj +=3D sort.o
+unfixed_Wswitch_obj +=3D sound.o
+unfixed_Wswitch_obj +=3D sqlite.o
+unfixed_Wswitch_obj +=3D syntax.o
+unfixed_Wswitch_obj +=3D sysdep.o
+unfixed_Wswitch_obj +=3D systhread.o
+unfixed_Wswitch_obj +=3D term.o
+unfixed_Wswitch_obj +=3D termcap.o
+unfixed_Wswitch_obj +=3D terminal.o
+unfixed_Wswitch_obj +=3D terminfo.o
+unfixed_Wswitch_obj +=3D textconv.o
+unfixed_Wswitch_obj +=3D textprop.o
+unfixed_Wswitch_obj +=3D thread.o
+unfixed_Wswitch_obj +=3D timefns.o
+unfixed_Wswitch_obj +=3D tparam.o
+unfixed_Wswitch_obj +=3D treesit.o
+unfixed_Wswitch_obj +=3D undo.o
+unfixed_Wswitch_obj +=3D unexaix.o
+unfixed_Wswitch_obj +=3D unexcoff.o
+unfixed_Wswitch_obj +=3D unexcw.o
+unfixed_Wswitch_obj +=3D unexelf.o
+unfixed_Wswitch_obj +=3D unexhp9k800.o
+unfixed_Wswitch_obj +=3D unexmacosx.o
+unfixed_Wswitch_obj +=3D unexsol.o
+unfixed_Wswitch_obj +=3D unexw32.o
+unfixed_Wswitch_obj +=3D vm-limit.o
+unfixed_Wswitch_obj +=3D w16select.o
+unfixed_Wswitch_obj +=3D w32.o
+unfixed_Wswitch_obj +=3D w32console.o
+unfixed_Wswitch_obj +=3D w32cygwinx.o
+unfixed_Wswitch_obj +=3D w32dwrite.o
+unfixed_Wswitch_obj +=3D w32fns.o
+unfixed_Wswitch_obj +=3D w32font.o
+unfixed_Wswitch_obj +=3D w32heap.o
+unfixed_Wswitch_obj +=3D w32image.o
+unfixed_Wswitch_obj +=3D w32inevt.o
+unfixed_Wswitch_obj +=3D w32menu.o
+unfixed_Wswitch_obj +=3D w32notify.o
+unfixed_Wswitch_obj +=3D w32proc.o
+unfixed_Wswitch_obj +=3D w32reg.o
+unfixed_Wswitch_obj +=3D w32select.o
+unfixed_Wswitch_obj +=3D w32term.o
+unfixed_Wswitch_obj +=3D w32uniscribe.o
+unfixed_Wswitch_obj +=3D w32xfns.o
+unfixed_Wswitch_obj +=3D widget.o
+unfixed_Wswitch_obj +=3D window.o
+unfixed_Wswitch_obj +=3D xdisp.o
+unfixed_Wswitch_obj +=3D xfaces.o
+unfixed_Wswitch_obj +=3D xfns.o
+unfixed_Wswitch_obj +=3D xfont.o
+unfixed_Wswitch_obj +=3D xftfont.o
+unfixed_Wswitch_obj +=3D xgselect.o
+unfixed_Wswitch_obj +=3D xmenu.o
+unfixed_Wswitch_obj +=3D xml.o
+unfixed_Wswitch_obj +=3D xrdb.o
+unfixed_Wswitch_obj +=3D xselect.o
+unfixed_Wswitch_obj +=3D xsettings.o
+unfixed_Wswitch_obj +=3D xsmfns.o
+unfixed_Wswitch_obj +=3D xterm.o
+unfixed_Wswitch_obj +=3D xwidget.o
+
+$(unfixed_Wswitch_obj): PACIFYING_CFLAGS +=3D -Wno-switch-enum -Wno-switch
+
 doc_obj =3D $(base_obj) $(NS_OBJC_OBJ)
 obj =3D $(doc_obj) $(HAIKU_CXX_OBJ)
=20
--=20
2.48.1

Since that listed *all* files, let's remove those which do not actually
contain any switch statements:

From 8ed603be95fdfe911cd567b88a7a1992695f4dc7 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 4/5] C files without switch statements are safe for
 -Wswitch-enum (bug#75964)

* src/Makefile.in (unfixed_Wswitch_obj): Remove files which do not
contain any switches.
---
 src/Makefile.in | 61 -------------------------------------------------
 1 file changed, 61 deletions(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index cb75ffc8482..8f54006e276 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -486,88 +486,57 @@ base_obj =3D
 =09$(HAIKU_OBJ) $(PGTK_OBJ) $(ANDROID_OBJ)
=20
 unfixed_Wswitch_obj +=3D alloc.o
-unfixed_Wswitch_obj +=3D android-emacs.o
 unfixed_Wswitch_obj +=3D android.o
 unfixed_Wswitch_obj +=3D androidfns.o
-unfixed_Wswitch_obj +=3D androidfont.o
-unfixed_Wswitch_obj +=3D androidmenu.o
-unfixed_Wswitch_obj +=3D androidselect.o
 unfixed_Wswitch_obj +=3D androidterm.o
 unfixed_Wswitch_obj +=3D androidvfs.o
 unfixed_Wswitch_obj +=3D atimer.o
 unfixed_Wswitch_obj +=3D bidi.o
-unfixed_Wswitch_obj +=3D bignum.o
 unfixed_Wswitch_obj +=3D buffer.o
 unfixed_Wswitch_obj +=3D bytecode.o
 unfixed_Wswitch_obj +=3D callint.o
-unfixed_Wswitch_obj +=3D callproc.o
-unfixed_Wswitch_obj +=3D casefiddle.o
-unfixed_Wswitch_obj +=3D casetab.o
-unfixed_Wswitch_obj +=3D category.o
 unfixed_Wswitch_obj +=3D ccl.o
-unfixed_Wswitch_obj +=3D character.o
-unfixed_Wswitch_obj +=3D charset.o
-unfixed_Wswitch_obj +=3D chartab.o
 unfixed_Wswitch_obj +=3D cm.o
-unfixed_Wswitch_obj +=3D cmds.o
 unfixed_Wswitch_obj +=3D coding.o
 unfixed_Wswitch_obj +=3D comp.o
-unfixed_Wswitch_obj +=3D composite.o
-unfixed_Wswitch_obj +=3D cygw32.o
 unfixed_Wswitch_obj +=3D data.o
 unfixed_Wswitch_obj +=3D dbusbind.o
-unfixed_Wswitch_obj +=3D decompress.o
 unfixed_Wswitch_obj +=3D dired.o
 unfixed_Wswitch_obj +=3D dispnew.o
-unfixed_Wswitch_obj +=3D doc.o
 unfixed_Wswitch_obj +=3D doprnt.o
 unfixed_Wswitch_obj +=3D dosfns.o
-unfixed_Wswitch_obj +=3D dynlib.o
 unfixed_Wswitch_obj +=3D editfns.o
 unfixed_Wswitch_obj +=3D emacs-module.o
 unfixed_Wswitch_obj +=3D emacs.o
-unfixed_Wswitch_obj +=3D emacsgtkfixed.o
 unfixed_Wswitch_obj +=3D eval.o
 unfixed_Wswitch_obj +=3D fileio.o
 unfixed_Wswitch_obj +=3D filelock.o
-unfixed_Wswitch_obj +=3D firstfile.o
-unfixed_Wswitch_obj +=3D floatfns.o
 unfixed_Wswitch_obj +=3D fns.o
 unfixed_Wswitch_obj +=3D font.o
 unfixed_Wswitch_obj +=3D fontset.o
 unfixed_Wswitch_obj +=3D frame.o
 unfixed_Wswitch_obj +=3D fringe.o
-unfixed_Wswitch_obj +=3D ftcrfont.o
 unfixed_Wswitch_obj +=3D ftfont.o
 unfixed_Wswitch_obj +=3D gfilenotify.o
 unfixed_Wswitch_obj +=3D gmalloc.o
 unfixed_Wswitch_obj +=3D gnutls.o
 unfixed_Wswitch_obj +=3D gtkutil.o
-unfixed_Wswitch_obj +=3D haiku.o
 unfixed_Wswitch_obj +=3D haiku_io.o
 unfixed_Wswitch_obj +=3D haikufns.o
 unfixed_Wswitch_obj +=3D haikufont.o
-unfixed_Wswitch_obj +=3D haikuimage.o
-unfixed_Wswitch_obj +=3D haikumenu.o
 unfixed_Wswitch_obj +=3D haikuselect.o
 unfixed_Wswitch_obj +=3D haikuterm.o
 unfixed_Wswitch_obj +=3D hbfont.o
 unfixed_Wswitch_obj +=3D image.o
 unfixed_Wswitch_obj +=3D indent.o
-unfixed_Wswitch_obj +=3D inotify.o
 unfixed_Wswitch_obj +=3D insdel.o
-unfixed_Wswitch_obj +=3D intervals.o
 unfixed_Wswitch_obj +=3D itree.o
 unfixed_Wswitch_obj +=3D json.o
 unfixed_Wswitch_obj +=3D keyboard.o
 unfixed_Wswitch_obj +=3D keymap.o
-unfixed_Wswitch_obj +=3D kqueue.o
-unfixed_Wswitch_obj +=3D lastfile.o
-unfixed_Wswitch_obj +=3D lcms.o
 unfixed_Wswitch_obj +=3D lread.o
 unfixed_Wswitch_obj +=3D macfont.o
 unfixed_Wswitch_obj +=3D macros.o
-unfixed_Wswitch_obj +=3D marker.o
 unfixed_Wswitch_obj +=3D menu.o
 unfixed_Wswitch_obj +=3D minibuf.o
 unfixed_Wswitch_obj +=3D msdos.o
@@ -580,80 +549,50 @@ unfixed_Wswitch_obj +=3D
 unfixed_Wswitch_obj +=3D nsxwidget.o
 unfixed_Wswitch_obj +=3D pdumper.o
 unfixed_Wswitch_obj +=3D pgtkfns.o
-unfixed_Wswitch_obj +=3D pgtkim.o
-unfixed_Wswitch_obj +=3D pgtkmenu.o
-unfixed_Wswitch_obj +=3D pgtkselect.o
 unfixed_Wswitch_obj +=3D pgtkterm.o
 unfixed_Wswitch_obj +=3D print.o
 unfixed_Wswitch_obj +=3D process.o
 unfixed_Wswitch_obj +=3D profiler.o
-unfixed_Wswitch_obj +=3D ralloc.o
 unfixed_Wswitch_obj +=3D regex-emacs.o
-unfixed_Wswitch_obj +=3D region-cache.o
-unfixed_Wswitch_obj +=3D scroll.o
 unfixed_Wswitch_obj +=3D search.o
 unfixed_Wswitch_obj +=3D sfnt.o
-unfixed_Wswitch_obj +=3D sfntfont-android.o
 unfixed_Wswitch_obj +=3D sfntfont.o
-unfixed_Wswitch_obj +=3D sheap.o
-unfixed_Wswitch_obj +=3D sort.o
 unfixed_Wswitch_obj +=3D sound.o
 unfixed_Wswitch_obj +=3D sqlite.o
 unfixed_Wswitch_obj +=3D syntax.o
 unfixed_Wswitch_obj +=3D sysdep.o
-unfixed_Wswitch_obj +=3D systhread.o
 unfixed_Wswitch_obj +=3D term.o
-unfixed_Wswitch_obj +=3D termcap.o
 unfixed_Wswitch_obj +=3D terminal.o
-unfixed_Wswitch_obj +=3D terminfo.o
 unfixed_Wswitch_obj +=3D textconv.o
 unfixed_Wswitch_obj +=3D textprop.o
 unfixed_Wswitch_obj +=3D thread.o
 unfixed_Wswitch_obj +=3D timefns.o
 unfixed_Wswitch_obj +=3D tparam.o
 unfixed_Wswitch_obj +=3D treesit.o
-unfixed_Wswitch_obj +=3D undo.o
 unfixed_Wswitch_obj +=3D unexaix.o
-unfixed_Wswitch_obj +=3D unexcoff.o
-unfixed_Wswitch_obj +=3D unexcw.o
 unfixed_Wswitch_obj +=3D unexelf.o
-unfixed_Wswitch_obj +=3D unexhp9k800.o
 unfixed_Wswitch_obj +=3D unexmacosx.o
-unfixed_Wswitch_obj +=3D unexsol.o
-unfixed_Wswitch_obj +=3D unexw32.o
-unfixed_Wswitch_obj +=3D vm-limit.o
 unfixed_Wswitch_obj +=3D w16select.o
 unfixed_Wswitch_obj +=3D w32.o
-unfixed_Wswitch_obj +=3D w32console.o
-unfixed_Wswitch_obj +=3D w32cygwinx.o
-unfixed_Wswitch_obj +=3D w32dwrite.o
 unfixed_Wswitch_obj +=3D w32fns.o
 unfixed_Wswitch_obj +=3D w32font.o
 unfixed_Wswitch_obj +=3D w32heap.o
 unfixed_Wswitch_obj +=3D w32image.o
 unfixed_Wswitch_obj +=3D w32inevt.o
 unfixed_Wswitch_obj +=3D w32menu.o
-unfixed_Wswitch_obj +=3D w32notify.o
 unfixed_Wswitch_obj +=3D w32proc.o
-unfixed_Wswitch_obj +=3D w32reg.o
 unfixed_Wswitch_obj +=3D w32select.o
 unfixed_Wswitch_obj +=3D w32term.o
-unfixed_Wswitch_obj +=3D w32uniscribe.o
 unfixed_Wswitch_obj +=3D w32xfns.o
-unfixed_Wswitch_obj +=3D widget.o
 unfixed_Wswitch_obj +=3D window.o
 unfixed_Wswitch_obj +=3D xdisp.o
 unfixed_Wswitch_obj +=3D xfaces.o
 unfixed_Wswitch_obj +=3D xfns.o
-unfixed_Wswitch_obj +=3D xfont.o
-unfixed_Wswitch_obj +=3D xftfont.o
 unfixed_Wswitch_obj +=3D xgselect.o
 unfixed_Wswitch_obj +=3D xmenu.o
-unfixed_Wswitch_obj +=3D xml.o
 unfixed_Wswitch_obj +=3D xrdb.o
 unfixed_Wswitch_obj +=3D xselect.o
 unfixed_Wswitch_obj +=3D xsettings.o
-unfixed_Wswitch_obj +=3D xsmfns.o
 unfixed_Wswitch_obj +=3D xterm.o
 unfixed_Wswitch_obj +=3D xwidget.o
=20
--=20
2.48.1

Finally, convert the first file (alloc.c) to use exhaustive switches in
a way that makes it safe for -Wswitch-enum:

From 0de72741ed4bb5ef1b299390e4a031135b042f65 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH 5/5] Make alloc.c safe for -Wswitch-enum (#75996)

---
 src/Makefile.in |  1 -
 src/alloc.c     | 51 +++++++++++++++++++++++++++++++++++--------------
 2 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index 8f54006e276..7388284fef2 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -485,7 +485,6 @@ base_obj =3D
 =09$(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ)=09=09=09       \
 =09$(HAIKU_OBJ) $(PGTK_OBJ) $(ANDROID_OBJ)
=20
-unfixed_Wswitch_obj +=3D alloc.o
 unfixed_Wswitch_obj +=3D android.o
 unfixed_Wswitch_obj +=3D androidfns.o
 unfixed_Wswitch_obj +=3D androidterm.o
diff --git a/src/alloc.c b/src/alloc.c
index b13c3e49224..e44e7223f90 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3405,7 +3405,6 @@ cleanup_vector (struct Lisp_Vector *vector)
       break;
     /* Keep the switch exhaustive.  */
     case PVEC_NORMAL_VECTOR:
-    case PVEC_FREE:
     case PVEC_SYMBOL_WITH_POS:
     case PVEC_MISC_PTR:
     case PVEC_PROCESS:
@@ -3425,6 +3424,8 @@ cleanup_vector (struct Lisp_Vector *vector)
     case PVEC_SUB_CHAR_TABLE:
     case PVEC_RECORD:
       break;
+    case PVEC_FREE: eassume (0);
+    default: eassume (0);
     }
 }
=20
@@ -5192,8 +5193,7 @@ mark_maybe_pointer (void *p, bool symbol_only)
 =09  }
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09default: eassume (0);
 =09}
=20
       mark_object (obj);
@@ -5573,8 +5573,7 @@ valid_lisp_object_p (Lisp_Object obj)
     case MEM_TYPE_VECTOR_BLOCK:
       return live_small_vector_p (m, p);
=20
-    default:
-      break;
+    default: eassume (0);
     }
=20
   return 0;
@@ -7274,10 +7273,31 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((vo=
id) 0)
 #endif
 =09=09break;
=20
-=09      case PVEC_FREE:
-=09=09emacs_abort ();
-
-=09      default:
+=09      case PVEC_NORMAL_VECTOR:
+=09      case PVEC_BIGNUM:
+=09      case PVEC_MARKER:
+=09      case PVEC_FINALIZER:
+=09      case PVEC_SYMBOL_WITH_POS:
+=09      case PVEC_MISC_PTR:
+=09      case PVEC_USER_PTR:
+=09      case PVEC_PROCESS:
+=09      case PVEC_TERMINAL:
+=09      case PVEC_WINDOW_CONFIGURATION:
+=09      case PVEC_OTHER:
+=09      case PVEC_XWIDGET:
+=09      case PVEC_XWIDGET_VIEW:
+=09      case PVEC_THREAD:
+=09      case PVEC_MUTEX:
+=09      case PVEC_CONDVAR:
+=09      case PVEC_MODULE_FUNCTION:
+=09      case PVEC_NATIVE_COMP_UNIT:
+=09      case PVEC_TS_PARSER:
+=09      case PVEC_TS_NODE:
+=09      case PVEC_TS_COMPILED_QUERY:
+=09      case PVEC_SQLITE:
+=09      case PVEC_CLOSURE:
+=09      case PVEC_RECORD:
+=09      case PVEC_FONT:
 =09=09{
 =09=09  /* A regular vector or pseudovector needing no special
 =09=09     treatment.  */
@@ -7288,6 +7308,9 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09=09  mark_stack_push_values (ptr->contents, size);
 =09=09}
 =09=09break;
+
+=09      case PVEC_FREE: eassume (0);
+=09      default: eassume (0);
 =09      }
 =09  }
 =09  break;
@@ -7337,7 +7360,7 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09=09   reachable from font_style_table which is also
 =09=09   staticpro'd.  */
 =09=09break;
-=09      default: emacs_abort ();
+=09      default: eassume (0);
 =09      }
 =09    if (!PURE_P (XSTRING (ptr->u.s.name)))
 =09      set_string_marked (XSTRING (ptr->u.s.name));
@@ -7391,8 +7414,8 @@ #define CHECK_ALLOCATED_AND_LIVE_SYMBOL()=09=09((void=
) 0)
 =09case Lisp_Int1:
 =09  break;
=20
-=09default:
-=09  emacs_abort ();
+=09case Lisp_Type_Unused0: eassume (0);
+=09default: eassume (0);
 =09}
     }
=20
@@ -7471,8 +7494,8 @@ survives_gc_p (Lisp_Object obj)
         pdumper_object_p (XFLOAT (obj));
       break;
=20
-    default:
-      emacs_abort ();
+    case Lisp_Type_Unused0: eassume (0);
+    default: eassume (0);
     }
=20
   return survives_p || PURE_P (XPNTR (obj));
--=20
2.48.1


I think this is a good place to stop for comments.  I've converted many
more files in my local tree, but let's agree on what we want to change
before having to do that work over and over again.

Note that alloc.c was a simple case because the enums are all internal
to Emacs and unlikely to change drastically without people touching the
code anyway.  image.c is very different in that regard.

Note that some additional work will be required to ensure we don't pass
-Wno-switch-enum or -Wno-switch to clang, assuming at least some version
of clang don't support these options.

I'll do pdumper.c next.

Thanks!

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 31 Jan 2025 09:40:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jan 31 04:40:04 2025
Received: from localhost ([127.0.0.1]:50012 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdnVL-0007Tz-N5
	for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 04:40:04 -0500
Received: from lists.gnu.org ([2001:470:142::17]:51194)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tdnVI-0007TL-Nu
 for submit <at> debbugs.gnu.org; Fri, 31 Jan 2025 04:40:01 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tdnVD-00011K-D8
 for bug-gnu-emacs@HIDDEN; Fri, 31 Jan 2025 04:39:55 -0500
Received: from mail-40133.protonmail.ch ([185.70.40.133])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tdnVB-0000ER-2r
 for bug-gnu-emacs@HIDDEN; Fri, 31 Jan 2025 04:39:55 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1738316390; x=1738575590;
 bh=FPqUOmge3fl3GE+/QRdtSTN+amkqSHeKVfc52VIooYo=;
 h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date:
 Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector:
 List-Unsubscribe:List-Unsubscribe-Post;
 b=hRXIqjwfiaahZlI+cLD2r03AQS2LAh6p5bNNTorh+QSx2Gia8rrfoQ5Y9Ux3gffEa
 ihFZbxJ+8OADKfNpnBOsy0tURZydojpiaMR9l/4TC5XcR42nvGKERoQzI5PsILr2q2
 pCCC8JadxgQ9oYNvyoeRAOSp7LMaEgSEOL6/fzVw//4dXe6QOzht910oYkrPdgBO4p
 wWbiv+IQlpUx3ZRWhuw5WulB3Ns5xQhpqC6pg+OM9iiWd6qYKn0iICY2JdcdM6qyLJ
 EzfEgYh7W+2+bfioYGhsm0bIwKJxmJBJZTI/raXN4gHmX3Z+LpvCd66tMVGUMLVSWW
 JUcyb7YSQv0lw==
Date: Fri, 31 Jan 2025 09:39:45 +0000
To: bug-gnu-emacs@HIDDEN
From: Pip Cet <pipcet@HIDDEN>
Subject: Switching the Emacs build to -Wswitch-enum in src/
Message-ID: <878qqrgw51.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: efe9c8a6d4db2d679f3c970a833582f77491f5aa
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=185.70.40.133; envelope-from=pipcet@HIDDEN;
 helo=mail-40133.protonmail.ch
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

I'm proposing to enable -Wswitch-enum as a warning option when compiling
Emacs C sources in src/, and to modify those source files to make good
use of it.

GCC's -Wswitch-enum will warn about a switch statement of the form

enum ABC { A, B, C };

enum ABC x =3D ...;

switch (x)
{
  case A:
  case B:
    return 1;
  default:
    return 0;
}

The reason is that the "default" branch covers both case C and the case
that the value of x isn't A, B, or, C.  C allows this latter case and
requires compilers to support it, and some Emacs code relies on
non-enumerated values to be valid.

Instead, with -Wswitch-enum, one should write:

enum ABC { A, B, C };

enum ABC x =3D ...;

switch (x)
{
  case A:
  case B:
    return 1;
  case C:
    return 0;
  default: eassume (false);
}

assuming x is known never to have a non-enumerated value (this is almost
always the case in Emacs).

The limitations of other approaches have become quite apparent in
previous threads discussing this.  Let's try this one.

While I think we can and should argue about the best way to write a
switch statement over an enum, I want to state one personal opinion:
replacing switch statements by if constructs, array lookups, or even
array lookups of function pointers is the wrong approach here.

Some preliminary patches to follow once this has a bug number.

Pip





Acknowledgement sent to Pip Cet <pipcet@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#75964; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Wed, 5 Feb 2025 12:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.