public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: "Arsen Arsenović" <arsen@aarsen.me>
Cc: luangruo@yahoo.com, jwakely.gcc@gmail.com, gcc@gcc.gnu.org
Subject: Re: More C type errors by default for GCC 14
Date: Fri, 12 May 2023 10:53:28 +0300	[thread overview]
Message-ID: <834joi3s07.fsf@gnu.org> (raw)
In-Reply-To: <865y8y8tjr.fsf@aarsen.me> (message from Arsen =?utf-8?Q?Arse?= =?utf-8?Q?novi=C4=87?= on Thu, 11 May 2023 21:25:53 +0200)

> From: Arsen Arsenović <arsen@aarsen.me>
> Cc: luangruo@yahoo.com, jwakely.gcc@gmail.com, gcc@gcc.gnu.org
> Date: Thu, 11 May 2023 21:25:53 +0200
> 
> >> This seems like a good route to me - it facilitates both veterans
> >> maintaining code and beginners just learning how to write C.
> >
> > No, it prefers beginners (which already have the warnings, unless they
> > deliberately turn them off) to veterans who know what they are doing,
> > and can live with those warnings.
> 
> Indeed.  I said facilitates, not treats equally.  I think the veterans
> here won't lose much by having to pass -fpermissive, and I think that's
> a worthwhile sacrifice to make, to nurture the new without pressuring
> the old very much.

Let's keep in mind that veterans are much more likely to have to deal
with very large programs than newbies, and so dealing with breakage
for them is much harder than doing that in a toy program.  Thus, the
proposal does "pressure the old very much".

> > The right balance is exactly what we have now: emitting warnings
> > without breaking builds.
> 
> I disagree - I think breaking builds here (remember, it takes 13 bytes
> to fix them) is a much lower weight than the other case being shot in
> the foot for an easily detectable and treatable error being made easily
> missable instead, so I reckon the scale is tipped heavily towards the
> veterans.

I described in an earlier message how this breakage looks in real
life, and why it causes a lot of frustration.  The main problem is
discovering that things broke because GCC defaults, and then
discovering how to pacify GCC with the least effort.  You are talking
only about what follows these two discovery processes, and that misses
the main disadvantage of this proposal (an in fact almost any breaking
proposal).

> On that note - lets presume a beginners role.  I've just started using
> GCC.  I run 'gcc -O2 -Wall main.c fun.c' and I get an a.out.  It
> mentions some 'implicit function generation', dunno what that means - if
> it mattered much, it'd have been an error.  I wrote a function called
> test that prints the int it got in hex, but I called it with 12.3, but
> it printed 1.. what the heck?
> 
> Why that happened is obvious to you and I (if you're on the same CPU as
> me), but to a beginner is utter nonsense.
> 
> At this point, I can only assume one goes to revisit that warning..  I'd
> hope so at least.

That's perfectly okay: the beginner made a mistake of ignoring a
warning, and now he or she will need to pay for that mistake.

But why should someone else pay, and pay dearly, for the mistakes of
such newbies?  That is simply unfair.  The payment should be on the
one who made the mistake.

> I doubt the beginner would know to pass
> -Werror=implicit-function-declaration in this case (or even about
> Werror...  I just told them what -Wall and to read the warnings, which
> was gleefully ignored)

They don't need to.  They just need to fix their bad code, that's all.

> Is it that much of a stretch to imagine that a maintainer of a codebase
> that has not seen revisions to get it past K&R-esque practices would
> know that they need to pass -std=c89 (or a variant of such), or even
> -fpermissive - assuming that they could even spare to use GCC 14 as
> opposed to 2.95?

If the program built okay till now, they might not know.

> As an anecdote, just recently I had to fix some code written for i686
> CPUs, presumably for GCC 4.something or less, because the GCC I insist
> on using (which is 13 and has been since 13.0 went into feature-freeze)
> has started using more than the GPRs on that machine (which lead to hard
> to debug crashes because said codebase does not enable the requisite CPU
> extensions, or handle the requisite registers properly).  I think this
> fits within the definition of 'worked yesterday, broke today'.

But it broke for a valid technical reasons: GCC was improved by
supporting more registers, and thus it now emits better code.  This
kind of reason is perfectly legitimate for breaking some old and
borderline-invalid programs, especially if GCC was emitting warnings
for those programs in past releases.

But the change discussed here is not like that.

> With all that to consider, is it *really* a significant cost to add
> -fpermissive?

See above (and my earlier message): the significant cost is to
discover the root cause of the problem, and that -fpermissive is the
solution.  The rest might be relatively easier, at least in some
projects.

> I expect no change in behavior from those that maintain these old
> codebases, they know what they're doing, and they have bigger fish to
> fry - however, I expect that this change will result in:
> 
> - A better reputation for GCC and the GCC project (by showing that we do
>   care for code correctness),
> - More new code being less error prone (by merit of simple errors being
>   detected more often),
> - Less 'cult knowledge' in the garden path,
> - More responsible beginners, and
> - Fewer people being able to effectively paint GNU and/or C/++ as the
>   backwards crowd using a error-prone technique of yesteryear.

These are not technical reasons in my book, they are PR stuff.
Breaking code that was building previously based on such reasons
should be unacceptable in any project that respects its users.

> Builds break.

Yes, and cars crash every day.  But we still consider car crashes to
be undesirable, and take measures to minimize that.  IOW, there's no
reason to be fatalistic about build breakage; we should instead
proactively try to minimize that.

  parent reply	other threads:[~2023-05-12  7:52 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
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 [this message]
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=834joi3s07.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=arsen@aarsen.me \
    --cc=gcc@gcc.gnu.org \
    --cc=jwakely.gcc@gmail.com \
    --cc=luangruo@yahoo.com \
    /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).