From: David Brown <david@westcontrol.com>
To: gcc@gcc.gnu.org
Subject: Re: More C type errors by default for GCC 14
Date: Wed, 10 May 2023 17:58:16 +0200 [thread overview]
Message-ID: <u3geuo$12pp$1@ciao.gmane.io> (raw)
In-Reply-To: <837ctg8e98.fsf@gnu.org>
On 10/05/2023 16:14, Eli Zaretskii via Gcc wrote:
>> Date: Wed, 10 May 2023 14:41:27 +0200
>> Cc: jwakely.gcc@gmail.com, fweimer@redhat.com, gcc@gcc.gnu.org,
>> arsen@aarsen.me
>> From: Gabriel Ravier <gabravier@gmail.com>
>>
>>>>> Because GCC is capable of compiling it.
>>>> That is not a good argument. GCC is capable of compiling any code in all
>>>> the reported accepts-invalid bugs on which it doesn't ICE. That doesn't
>>>> mean those bugs shouldn't be fixed.
>>> Fixing those bugs, if they are bugs, is not the job of the compiler.
>>> It's the job of the programmer, who is the one that knows what the
>>> code was supposed to do. If there's a significant risk that the code
>>> is a mistake or might behave in problematic ways, a warning to that
>>> effect is more than enough.
>>
>> Are you seriously saying that no accepts-invalid bug should ever be
>> fixed under any circumstances on the basis that some programmers might
>> rely on code exploiting that bug ??
>
> Sorry, I'm afraid I don't understand the question. What are
> "accepts-invalid bugs"?
>
They are cases where the C standards (plus documented gcc extensions)
have syntax or constraint requirements, but code which breaks these
requirements is accepted by the compiler. For example, if the compiler
accepted "long long long int" as a type, that would be an
"accepts-invalid" bug. They are important for two reasons. One is that
they mean the compiler fails to help the developer catch the mistake in
their code. The other is that the code might have an inconsistent
interpretation, and that might change in the future. In the
hypothetical example of a three-long int, a current compiler might treat
it as a "long long", while a future standard might add support for it as
a new type with minimum 128-bit size.
> In any case, I was not not talking about bug-compatibility, I was
> talking about being able to compile code which GCC was able to compile
> in past versions. Being able to compile that code is not a bug, it's
> a feature.
>
No, being able to compile /incorrect/ code by default is a bug. It is
not helpful.
(The compiler cannot, of course, spot /all/ mistakes - the gcc
developers are a smart group, but I think asking them to solve the
Halting Problem is a bit much!)
I've seen this kind of argument many times - "The compiler used to
accept my code and give the results I wanted, and now newer compiler
versions make a mess of it". The cause is almost invariably undefined
behaviour, but it can occasionally be through changes to the standards
such as removal of old behaviour or other differences in the
interpretation of code (there were a number of incompatibilities between
K&R and C90, and between C90 and C99).
The compiler is under /no/ obligation to compile undefined behaviour in
the same way as it might have done for a particular piece of code. It
is under /no/ obligation to continue to accept incorrect or invalid
code, just because it used to accept it. It /is/ - IMHO - under an
obligation to do what it can to help spot problems in code and help
developers get good quality correct code in the end. If it fails to do
that, people will, and should, move to using different tools.
New compiler versions are not required to do two's complement wrapping
of signed integer overflow, even though old broken code might have been
written under the assumption that it did and even though older, less
powerful versions of the compiler might have compiled that code into
something the developer wanted. In the same way, new compiler versions
are not required to support syntax that has been dead for decades - at
least not by default. (Unlike most other compilers, gcc developers go
far out of their way to support such outdated and incorrect code - all
they ask is that people use non-default flags to get such non-standard
syntax and semantics.)
If the gcc developers really were required to continue to compile /all/
programs that compiled before, with the same results, then the whole gcc
project can be stopped. The only way to ensure perfect backwards
compatibility would be to stop development, and no longer release any
new versions of the compiler. That is the logical consequence of "it
used to compile (with defaults or a given set of flags), so it should
continue to compile (with these same flags)" - assuming "compile" here
means "giving the same resulting behaviour in the executable" rather
than just "giving an executable that may or may not work".
Clearly, you don't mean gcc development should stop. That means a line
must be drawn, and some code that compiled with older gcc will not
compile with newer gcc. The only question is where the line should be.
next prev parent reply other threads:[~2023-05-10 15:58 UTC|newest]
Thread overview: 246+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-09 12:15 Florian Weimer
2023-05-09 14:16 ` Dave Blanchard
2023-05-09 15:03 ` David Edelsohn
2023-05-09 15:07 ` Sam James
2023-05-09 15:35 ` Dave Blanchard
2023-05-09 15:58 ` Jonathan Wakely
2023-05-09 16:26 ` Arsen Arsenović
2023-05-09 15:14 ` Jonathan Wakely
2023-05-09 15:22 ` Dave Blanchard
2023-05-09 16:38 ` Arsen Arsenović
2023-05-09 16:57 ` Eli Zaretskii
2023-05-09 17:05 ` Sam James
2023-05-09 18:55 ` Eli Zaretskii
2023-05-09 17:15 ` Jonathan Wakely
2023-05-09 19:04 ` Eli Zaretskii
2023-05-09 19:07 ` Jakub Jelinek
2023-05-09 19:22 ` Eli Zaretskii
2023-05-09 20:13 ` David Edelsohn
2023-05-09 20:21 ` Arsen Arsenović
2023-05-10 2:38 ` Eli Zaretskii
2023-05-10 8:36 ` Arsen Arsenović
2023-05-10 11:52 ` Eli Zaretskii
2023-05-10 11:56 ` Jonathan Wakely
2023-05-10 12:25 ` Eli Zaretskii
2023-05-10 12:30 ` Jonathan Wakely
2023-05-10 12:44 ` Eli Zaretskii
2023-05-15 12:28 ` Richard Earnshaw (lists)
2023-05-15 20:17 ` Eric Gallager
2023-05-16 7:05 ` Florian Weimer
2023-05-16 15:56 ` Jason Merrill
2023-05-09 20:40 ` Jonathan Wakely
2023-05-09 22:27 ` David Edelsohn
2023-05-09 22:37 ` Joel Sherrill
2023-05-09 22:45 ` Jonathan Wakely
2023-05-10 10:40 ` Eric Gallager
2023-05-10 10:45 ` Sam James
2023-05-10 10:56 ` Neal Gompa
2023-05-10 12:06 ` Eli Zaretskii
2023-05-10 12:10 ` Neal Gompa
2023-05-10 12:41 ` Eli Zaretskii
2023-05-10 10:48 ` Jonathan Wakely
2023-05-10 10:51 ` Jonathan Wakely
2023-05-10 12:00 ` Eli Zaretskii
2023-05-10 12:42 ` Sam James
2023-05-10 15:10 ` Joel Sherrill
2023-05-10 15:14 ` Jakub Jelinek
2023-05-10 16:36 ` Joel Sherrill
2023-05-10 16:44 ` Jakub Jelinek
2023-05-10 17:05 ` Jonathan Wakely
2023-05-10 18:37 ` James K. Lowden
2023-05-10 23:26 ` Jonathan Wakely
2023-05-11 18:47 ` Jason Merrill
2023-05-10 23:33 ` Sam James
2023-05-11 5:48 ` Eli Zaretskii
2023-05-11 2:28 ` Po Lu
2023-05-11 2:09 ` Po Lu
2023-05-11 2:14 ` Sam James
2023-05-11 2:23 ` Po Lu
2023-05-11 3:14 ` Eli Schwartz
2023-05-11 3:56 ` Po Lu
2023-05-11 4:46 ` Eli Schwartz
2023-05-11 4:49 ` Eli Schwartz
2023-05-11 6:23 ` Po Lu
2023-05-11 6:18 ` Po Lu
2023-05-11 22:41 ` Eli Schwartz
2023-05-12 2:08 ` Po Lu
2023-05-12 3:07 ` Eli Schwartz
2023-05-12 5:57 ` Po Lu
2023-05-12 11:05 ` Gabriel Ravier
2023-05-12 13:53 ` Po Lu
2023-05-12 14:03 ` Jonathan Wakely
2023-05-14 12:35 ` Mark Wielaard
2023-05-12 11:48 ` Is the GNUC dialect anything that GCC does when given source code containing UB? (Was: More C type errors by default for GCC 14) Eli Schwartz
2023-05-12 13:07 ` Is the GNUC dialect anything that GCC does when given source code containing UB? Po Lu
2023-05-12 6:56 ` More C type errors by default for GCC 14 Eli Zaretskii
2023-05-12 7:28 ` Jonathan Wakely
2023-05-12 10:36 ` Eli Zaretskii
2023-05-12 13:19 ` Po Lu
2023-05-12 13:25 ` Gabriel Ravier
2023-05-13 0:45 ` Po Lu
2023-05-13 5:30 ` Thomas Koenig
2023-05-13 5:53 ` Po Lu
2023-05-14 5:10 ` Eli Schwartz
2023-05-14 5:38 ` Po Lu
2023-05-14 9:46 ` David Brown
2023-05-14 10:21 ` Jonathan Wakely
2023-05-14 10:23 ` Jonathan Wakely
2023-05-14 5:08 ` Eli Schwartz
2023-05-14 5:28 ` Po Lu
2023-05-14 5:56 ` Eli Schwartz
2023-05-14 11:55 ` Po Lu
2023-05-14 12:22 ` Arsen Arsenović
2023-05-15 1:05 ` Po Lu
2023-05-14 6:03 ` Eli Schwartz
2023-05-14 8:47 ` Jonathan Wakely
2023-05-14 12:05 ` Po Lu
2023-05-14 12:48 ` Nicholas Vinson
2023-05-14 10:29 ` David Brown
2023-05-12 15:51 ` Jason Merrill
2023-05-17 10:06 ` Florian Weimer
2023-05-12 11:26 ` David Brown
2023-05-11 6:24 ` Eli Zaretskii
2023-05-11 22:43 ` Eli Schwartz
2023-05-12 2:38 ` Po Lu
2023-05-12 2:55 ` Jason Merrill
2023-05-12 6:01 ` Po Lu
2023-05-12 6:40 ` Jonathan Wakely
2023-05-12 13:23 ` Po Lu
2023-05-12 10:49 ` Pedro Alves
2023-05-12 13:26 ` Po Lu
2023-05-12 11:55 ` Eli Schwartz
2023-05-12 13:54 ` Po Lu
2023-05-12 6:49 ` Eli Zaretskii
2023-05-12 2:56 ` Sam James
2023-05-12 6:03 ` Po Lu
2023-05-12 3:06 ` Sam James
2023-05-12 6:25 ` Eli Zaretskii
2023-05-12 11:23 ` Gabriel Ravier
2023-05-11 6:12 ` Eli Zaretskii
2023-05-11 7:04 ` Jonathan Wakely
2023-05-11 22:30 ` Eli Schwartz
2023-05-11 22:35 ` Sam James
2023-05-12 2:40 ` Po Lu
2023-05-12 2:52 ` Sam James
2023-05-12 5:32 ` Po Lu
2023-05-12 2:39 ` Po Lu
2023-05-12 3:18 ` Eli Schwartz
2023-05-12 6:17 ` Eli Zaretskii
2023-05-11 7:59 ` David Brown
2023-05-09 21:00 ` Thomas Koenig
2023-05-09 21:17 ` Arsen Arsenović
2023-05-10 13:57 ` Florian Weimer
2023-05-10 11:00 ` David Brown
2023-05-11 10:49 ` James K. Lowden
2023-05-11 1:38 ` Po Lu
2023-05-11 1:43 ` Sam James
2023-05-11 2:20 ` Po Lu
2023-05-09 20:57 ` Florian Weimer
2023-05-10 2:33 ` Eli Zaretskii
2023-05-10 8:04 ` Jonathan Wakely
2023-05-10 8:46 ` Richard Biener
2023-05-10 12:26 ` Florian Weimer
2023-05-10 11:30 ` Eli Zaretskii
2023-05-10 12:03 ` Jakub Jelinek
2023-05-10 12:36 ` Eli Zaretskii
2023-05-10 12:41 ` Gabriel Ravier
2023-05-10 14:14 ` Eli Zaretskii
2023-05-10 14:22 ` Jakub Jelinek
2023-05-10 15:30 ` Eli Zaretskii
2023-05-10 16:02 ` Jakub Jelinek
2023-05-10 16:31 ` Eli Zaretskii
2023-05-10 16:33 ` Richard Biener
2023-05-10 16:57 ` Eli Zaretskii
2023-05-10 17:08 ` Joseph Myers
2023-05-10 18:18 ` Eli Zaretskii
2023-05-12 15:02 ` Florian Weimer
2023-05-12 17:52 ` Florian Weimer
2023-05-12 17:55 ` Gabriel Ravier
2023-05-12 18:00 ` Florian Weimer
2023-05-12 18:08 ` Alexander Monakov
2023-05-12 18:14 ` Florian Weimer
2023-05-15 12:51 ` Michael Matz
2023-05-16 8:55 ` Florian Weimer
2023-05-16 10:39 ` Alexander Monakov
2023-05-16 11:01 ` Jakub Jelinek
2023-05-16 11:09 ` Jonathan Wakely
2023-05-16 11:15 ` Florian Weimer
2023-05-12 19:44 ` Joseph Myers
2023-05-12 20:43 ` Florian Weimer
2023-05-12 20:18 ` Jason Merrill
2023-05-12 20:57 ` Florian Weimer
2023-05-12 21:20 ` Sam James
2023-05-12 21:21 ` Sam James
2023-05-12 21:37 ` Florian Weimer
2023-05-12 21:47 ` Sam James
2023-05-12 21:59 ` Florian Weimer
2023-05-10 15:58 ` David Brown [this message]
2023-05-10 16:28 ` Eli Zaretskii
2023-05-11 6:52 ` David Brown
2023-05-11 7:39 ` Eli Zaretskii
2023-05-10 14:31 ` Thomas Koenig
2023-05-10 15:37 ` Eli Zaretskii
2023-05-11 2:38 ` Po Lu
2023-05-11 7:38 ` Arsen Arsenović
2023-05-11 8:31 ` Po Lu
2023-05-11 8:44 ` Arsen Arsenović
2023-05-11 9:28 ` Po Lu
2023-05-11 21:10 ` Arsen Arsenović
2023-05-12 1:41 ` Po Lu
2023-05-11 10:35 ` Eli Zaretskii
2023-05-11 19:25 ` Arsen Arsenović
2023-05-12 2:36 ` Po Lu
2023-05-12 12:30 ` Gabriel Ravier
2023-05-12 13:56 ` Po Lu
2023-05-12 7:53 ` Eli Zaretskii
2023-05-12 8:15 ` Jakub Jelinek
2023-05-12 10:40 ` Eli Zaretskii
2023-05-12 8:45 ` Christian Groessler
2023-05-12 10:14 ` Jonathan Wakely
2023-05-12 9:11 ` Thomas Koenig
2023-05-11 8:53 ` Jonathan Wakely
2023-05-11 9:29 ` Po Lu
2023-05-10 8:49 ` David Brown
2023-05-10 11:37 ` Eli Zaretskii
2023-05-10 11:49 ` Jonathan Wakely
2023-05-10 12:22 ` Eli Zaretskii
2023-05-10 13:30 ` David Brown
2023-05-10 14:39 ` Eli Zaretskii
2023-05-10 15:21 ` Paul Koning
2023-05-10 16:20 ` David Brown
2023-05-10 16:48 ` Eli Zaretskii
2023-05-10 12:32 ` Sam James
2023-05-10 12:47 ` Eli Zaretskii
2023-05-09 19:33 ` Arsen Arsenović
2023-05-09 15:25 ` David Edelsohn
2023-05-11 1:25 ` Po Lu
2023-05-11 1:30 ` Sam James
2023-05-11 1:33 ` Sam James
2023-05-11 2:18 ` Po Lu
2023-05-11 6:44 ` Jonathan Wakely
2023-05-11 8:32 ` Po Lu
2023-05-11 8:52 ` Jonathan Wakely
2023-05-11 7:36 ` Arsen Arsenović
2023-05-11 8:23 ` Po Lu
2023-05-09 18:22 ` Florian Weimer
2023-05-11 21:32 ` Segher Boessenkool
2023-05-09 15:16 ` Richard Biener
2023-05-09 16:05 ` Jakub Jelinek
2023-05-09 16:11 ` Sam James
2023-05-09 16:13 ` David Edelsohn
[not found] ` <BBE9950C-28AA-4A1C-A4C5-7F486538004E@gmail.com>
2023-05-09 16:44 ` Florian Weimer
2023-05-09 16:58 ` Ian Lance Taylor
2023-05-09 17:08 ` Jason Merrill
2023-05-09 17:16 ` Sam James
2023-05-09 16:59 ` Florian Weimer
2023-05-09 17:07 ` Sam James
2023-05-09 17:35 ` Florian Weimer
2023-05-11 15:21 ` Peter0x44
2023-05-12 9:33 ` Martin Jambor
2023-05-12 12:30 ` Jakub Jelinek
2023-05-15 12:46 ` Michael Matz
2023-05-15 13:14 ` Richard Earnshaw (lists)
2023-05-10 12:41 Marcin Jaczewski
2023-05-10 14:19 ` Eli Zaretskii
2023-05-10 13:10 Basile Starynkevitch
2023-05-10 14:20 ` David Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='u3geuo$12pp$1@ciao.gmane.io' \
--to=david@westcontrol.com \
--cc=gcc@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).