public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@transmeta.com>
To: Marc Espie <espie@quatramaran.ens.fr>
Cc: gcc@gcc.gnu.org
Subject: Re: GCC's statement expression extension
Date: Fri, 28 Jul 2000 11:50:00 -0000	[thread overview]
Message-ID: <Pine.LNX.4.10.10007281138530.1336-100000@penguin.transmeta.com> (raw)
In-Reply-To: <200007272342.BAA20362@quatramaran.ens.fr>

On Fri, 28 Jul 2000, Marc Espie wrote:
> 
> >How about a new warning instead:
> 
> >	strange.c:14: warning: programmer appears seriously deranged
> 
> >and then let users decide themselves if they really want to use local
> >labels inside expression statements..
> 
> In the long run, I believe that this approach loses.
> 
> Extensions need to have properly defined semantics, and anything that does
> not have fixed down semantics would need to be flagged as a bug, and downright
> not compile at all (not possible in the real world, of course).

Why?

Think about a basic C (and C++) expression:

	++i + ++i

What does the C standard say about the above?

Right. It has undefined behavior. It can return 42. It can format your
harddisk. And the compiler is still strictly conforming, and yes, you get
the occasional "bug-report" about it, but everybody agrees that it _is_
undefined behaviour, and everybody even agrees on _why_ it is undefined
behaviour, and there is really no problem.

What's so different about extensions?

I don't think anybody can really claim that statement expressions do not
fit the C language "spirit". They are _very_ much in spirit with the
language, and work like anonymous inline functions, and allow doing a lot
of very C-like things. It's definitely not an ugly wart on the language in
that sense (basically, what I'm trying to say is that people could imagine
that statement expressions could have been in the original K&R - they are
not fundamentally against the grain of C the way nested functions are).

And yes, like the expression "++i + ++i", there are undefined things. A
branch to within a statement expression is undefined behaviour, and a nice
and polite compiler will tell the programmer that he seems to be doing
something stupid - the same way it might be really nice if gcc actually
warned about "++i + ++i" so that the occasional bug-reports would fade..

> See, the issue is that those constructs only have an implementation-defined 
> meaning that might change from one release to the next because, well,
> because it's not documented, and it's hard to keep track of what other changes
> to that big fat gcc program are going to do.

Statement expressions are extremely well documented. They've been in gcc
(and documented) at least since I started using gcc in -90. And they do
NOT have "implementation-defined meaning that might change from one
release to the next".

Are you suggesting that the "++" operator should be removed because it can
be used in ways that make the result undefined? The result of bad use of
"++" can, right now, change not only from compiler version to compiler
version, but even with the same compiler depending on what the instruction
schedule ended up being (either due to different optimizations or due to
different code _around_ the offending use).

No, you're obviously not suggesting that. But you ARE using the very same
arguments against statement expressions.  You should probably look at your
arguments again.

		Linus

  parent reply	other threads:[~2000-07-28 11:50 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-07-21 16:31 Joseph S. Myers
2000-07-23  9:39 ` Jeffrey A Law
2000-07-23  9:52   ` Mark Mitchell
2000-07-24 15:48     ` Geoff Keating
2000-07-25  8:44       ` Mark Mitchell
2000-07-26 21:25       ` Richard Henderson
2000-07-26 21:24     ` Richard Henderson
2000-07-26 21:38       ` Mark Mitchell
2000-07-26 22:51         ` Linus Torvalds
2000-07-26 23:14           ` statement expressions Mark Mitchell
2000-07-27 21:14           ` GCC's statement expression extension Marc Espie
2000-07-27 21:28             ` Mark Mitchell
2000-07-27 21:29             ` Mo McKinlay
2000-07-28  0:45               ` Akbar A.
2000-07-28  7:27               ` Michael Meissner
2000-07-28 11:50             ` Linus Torvalds [this message]
2000-07-28 21:14               ` Marc Espie
2000-07-28 21:28                 ` Linus Torvalds
2000-07-29  1:40                   ` Marc Espie
2000-07-30 10:21                     ` Linus Torvalds
2000-07-27  4:34         ` Joseph S. Myers
2000-07-27  4:53           ` Gabriel Dos Reis
2000-07-27  9:42           ` Mark Mitchell
2000-07-27 15:14             ` Iterators (was: Re: GCC's statement expression extension) Joseph S. Myers
2000-07-27 22:26               ` Mark Mitchell
2000-07-27 17:32             ` GCC's statement expression extension Michael Meissner
2000-07-27 14:51           ` Alexandre Oliva
2000-07-29 10:41         ` Per Bothner
2000-07-29 14:36           ` Jamie Lokier
2000-07-27 18:24 Richard Kenner
2000-07-27 18:38 ` Mark Mitchell
2000-07-27 19:21   ` Michael Meissner
2000-07-27 21:15     ` Jim Wilson
2000-07-28  7:31       ` Michael Meissner
2000-07-28  9:08         ` Nick Ing-Simmons
2000-07-28  9:19           ` Gabriel Dos Reis
2000-07-28  9:37             ` Nick Ing-Simmons
2000-07-27 23:53   ` Gabriel Dos Reis
2000-07-28 12:08   ` Stan Shebs
2000-07-28 12:16     ` Gabriel Dos Reis
2000-07-28 13:07       ` Stan Shebs
2000-07-28 12:28     ` Mark Mitchell
2000-07-28 14:08       ` Stan Shebs
2000-07-28 17:49         ` llewelly
2000-07-28 22:54           ` Mark Mitchell
2000-07-28 22:40         ` Mark Mitchell
2000-07-29 10:28           ` Per Bothner
2000-07-29 10:43             ` Mark Mitchell
2000-07-29 11:48               ` Alexandre Oliva
2000-07-29 12:09                 ` Mark Mitchell
2000-07-29 12:30                   ` Alexandre Oliva
2000-07-29 12:52                     ` Mark Mitchell
2000-07-29 14:07                       ` Alexandre Oliva
2000-07-30 10:06                         ` Mark Mitchell
2000-07-30  9:29                   ` Per Bothner
2000-07-30 11:23                 ` Linus Torvalds
2000-07-29 18:00               ` Per Bothner
2000-07-29 16:20         ` Marc Espie
2000-07-27 18:41 Richard Kenner
2000-07-27 19:15 ` Mark Mitchell
2000-07-28  3:59   ` Marc Espie
2000-07-28  8:11     ` Mark Mitchell
2000-08-02 15:00   ` Kamil Iskra
2000-08-02 15:14     ` Mo McKinlay
2000-08-02 15:18     ` Mark Mitchell
2000-07-27 19:20 Richard Kenner
2000-07-27 19:26 ` Mark Mitchell
2000-07-30 12:09   ` Linus Torvalds
2000-07-27 19:29 Richard Kenner
2000-07-27 19:39 ` Jeffrey A Law
2000-07-27 19:45   ` Michael Meissner
2000-07-27 20:16     ` Mark Mitchell
2000-07-27 20:50       ` Michael Meissner
2000-07-27 20:57         ` Jim Wilson
2000-07-27 21:25         ` Mark Mitchell
2000-07-27 20:14 ` Mark Mitchell
2000-07-27 19:46 Richard Kenner
2000-07-27 21:11 ` Jim Wilson
2000-07-28 12:01 Anjul Srivastava
2000-07-28 12:11 ` Gabriel Dos Reis
2000-07-28 13:33 ` sidster
2000-07-28 12:14 Kaveh R. Ghazi
2000-07-28 12:22 ` Mark Mitchell
2000-07-28 13:08 Kaveh R. Ghazi
2000-07-28 13:45 ` Mark Mitchell
2000-07-30  3:49 Richard Kenner
2000-07-31  9:31 Phil Edwards
2000-08-01 18:14 Mike Stump
2000-08-01 21:52 ` Mark Mitchell
2000-08-02 16:59 ` Alexandre Oliva
2000-08-02 21:01   ` Per Bothner
2000-08-02 13:44 Mike Stump
2000-08-03 10:55 ` Jamie Lokier
2000-08-03 16:13   ` Mark Mitchell
2000-08-04 12:38     ` Kamil Iskra
2000-08-04 13:24       ` Mark Mitchell
2000-08-05 11:56         ` Kamil Iskra
2000-08-05 12:03           ` Mark Mitchell
2000-08-03 14:32 Mike Stump
2000-08-04  4:36 ` Jamie Lokier
2000-08-04  9:04   ` Mark Mitchell
2000-08-04  9:26     ` Jamie Lokier
2000-08-04 13:19       ` Mark Mitchell
2000-08-03 16:48 John Marshall
2000-08-03 16:55 ` Mark Mitchell
2000-08-04  5:39 Mark Kettenis
2000-08-04  9:06 ` Mark Mitchell

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=Pine.LNX.4.10.10007281138530.1336-100000@penguin.transmeta.com \
    --to=torvalds@transmeta.com \
    --cc=espie@quatramaran.ens.fr \
    --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).