From: Linus Torvalds <torvalds@osdl.org>
To: Al Viro <viro@ftp.linux.org.uk>
Cc: Roman Zippel <zippel@linux-m68k.org>,
Willy Tarreau <willy@w.ods.org>, Robert Love <rml@novell.com>,
Russell King <rmk+lkml@arm.linux.org.uk>,
Linux Kernel List <linux-kernel@vger.kernel.org>
Subject: Re: p = kmalloc(sizeof(*p), )
Date: Sun, 18 Sep 2005 15:25:39 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.58.0509181513440.9106@g5.osdl.org> (raw)
In-Reply-To: <20050918215257.GA29417@ftp.linux.org.uk>
On Sun, 18 Sep 2005, Al Viro wrote:
>
> BTW, for some idea of how hard does it actually blow
Well, to be slightly more positive: it's not a very easy feature to do
properly.
The thing about "(cast) { .. }" initializers is that they aren't just
initializers: they really are local objects that can be used any way you
want to. So in the _generic_ case, gcc does exactly the right thing: it
introduces a local object that is filled in with the initializer.
So in the generic case, you could have
x = (cast) { ... }.member + 2;
instead of just a straight assignment.
The problem is just that the generic case is semantically pretty damn far
away from the case we actually want to use, ie the special case of an
assignment. So some generic top-level code has created the generic code,
and now the lower levels of the compiler need to "undo" that generic code,
and see what it actually boils down to. And that's quite hard.
The sane thing to do for good code generation would be to special-case the
assignment of this kind of thing, and just make it very obvious that an
assignment of a (cast) {...} is very different from the generic use of
same. But that would introduce two totally different cases for the thing.
So considering that almost nobody does this (certainly not SpecInt), and
it would probably require re-organizations at many levels, I'm not
surprised it hasn't gotten a lot of attention.
Linus
next prev parent reply other threads:[~2005-09-18 22:25 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-18 10:06 p = kmalloc(sizeof(*p), ) Russell King
2005-09-18 11:04 ` Alan Cox
2005-09-18 14:39 ` Al Viro
2005-09-18 16:25 ` Denis Vlasenko
2005-09-18 17:30 ` Al Viro
2005-09-18 18:00 ` Willy Tarreau
2005-09-18 17:47 ` Alan Cox
2005-09-18 16:32 ` Robert Love
2005-09-18 16:52 ` Willy Tarreau
2005-09-18 17:18 ` Al Viro
2005-09-18 17:31 ` Linus Torvalds
2005-09-18 17:45 ` Al Viro
2005-09-18 20:34 ` Roman Zippel
2005-09-18 21:12 ` Al Viro
2005-09-18 21:52 ` Al Viro
2005-09-18 22:25 ` Linus Torvalds [this message]
2005-09-18 23:07 ` Al Viro
2005-09-20 6:31 ` Richard Henderson
2005-09-19 21:20 ` Matthias Urlichs
2005-09-19 21:28 ` Matthias Urlichs
2005-09-18 19:07 ` Al Viro
2005-09-18 21:30 ` Alan Cox
2005-09-18 21:14 ` Al Viro
2005-09-19 6:09 ` Coywolf Qi Hunt
2005-09-21 2:18 ` Miles Bader
2005-09-18 17:32 ` Randy.Dunlap
2005-09-19 6:47 ` Coywolf Qi Hunt
2005-09-20 8:53 ` Pekka Enberg
2005-09-20 9:39 ` Al Viro
2005-09-20 9:47 ` Pekka J Enberg
2005-09-20 9:53 ` Al Viro
2005-09-20 10:07 ` Pekka J Enberg
2005-09-20 15:14 ` Randy.Dunlap
2005-09-20 11:18 ` Pekka Enberg
2005-09-20 11:40 ` Russell King
2005-09-20 11:56 ` Denis Vlasenko
2005-09-20 12:20 ` Pekka J Enberg
2005-09-20 12:31 ` Russell King
2005-09-20 12:35 ` Pekka J Enberg
2005-09-20 15:21 ` Randy.Dunlap
2005-09-20 12:53 ` Pekka J Enberg
2005-09-20 17:11 ` Andrew Morton
2005-09-20 17:17 ` Russell King
2005-09-20 18:02 ` Alan Cox
2005-09-20 17:59 ` Andrew Morton
2005-09-20 18:11 ` Russell King
2005-09-20 18:41 ` Jeff Garzik
2005-09-20 20:41 ` Alan Cox
2005-09-20 19:41 ` Horst von Brand
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.58.0509181513440.9106@g5.osdl.org \
--to=torvalds@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rmk+lkml@arm.linux.org.uk \
--cc=rml@novell.com \
--cc=viro@ftp.linux.org.uk \
--cc=willy@w.ods.org \
--cc=zippel@linux-m68k.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 NNTP newsgroup(s).