From: David Mosberger-Tang <David.Mosberger@acm.org>
To: torvalds@osdl.org
Cc: rth@redhat.com, davidm@mostang.com, linux-kernel@vger.kernel.org
Subject: Re: GCC 3.4 Heads-up
Date: 06 Jan 2004 13:06:19 -0800 [thread overview]
Message-ID: <ug3casyegk.fsf@panda.mostang.com> (raw)
In-Reply-To: <16S5h-3no-5@gated-at.bofh.it>
>>>>> On Fri, 26 Dec 2003 05:50:07 +0100, Linus Torvalds <torvalds@osdl.org> said:
Linus> The cast/conditional expression as lvalue are _particularly_
Linus> ugly extensions, since there is absolutely zero point to
Linus> them.
I'd love to agree with that...
Linus> They are very much against what C is all about, and writing
Linus> something like this:
Linus> a ? b : c = d;
Linus> is something that only a high-level language person could
Linus> have come up with. The _real_ way to do this in C is to just
Linus> do
Linus> *(a ? &b : &c) = d;
Linus> which is portable C, does the same thing, and has no strange
Linus> semantics.
This works provided you can take the address of the lvalue, which
ain't true for bitfields. Example:
#define bit_field(var, bit, width) \
(((struct { long : bit; long _f : width; } *) &(var))->_f)
long l;
bit_field(l, 0, 4) = 13;
bit_field(l, 8, 12) = 42;
I wish I was making this up, but I know of at least one legacy app
where disabling GCC's ability to treat statement-expressions as
l-values will cause a major headache.
I'd love to know a way of doing this in ANSI C99 without requiring
changes to to uses of this kind of (atrocious) macro...
--david
--
David Mosberger; 35706 Runckel Lane; Fremont, CA 94536; David.Mosberger@acm.org
next parent reply other threads:[~2004-01-06 21:06 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <16PqK-8eK-1@gated-at.bofh.it>
[not found] ` <16RiU-2kO-1@gated-at.bofh.it>
[not found] ` <16S5h-3no-5@gated-at.bofh.it>
2004-01-06 21:06 ` David Mosberger-Tang [this message]
2004-01-06 22:33 ` GCC 3.4 Heads-up Richard Henderson
2004-01-06 23:23 ` Linus Torvalds
2004-01-07 9:54 ` Richard Henderson
2003-12-26 11:02 linux
2003-12-26 20:05 ` Linus Torvalds
2003-12-27 16:39 ` Andreas Schwab
-- strict thread matches above, loose matches on Subject: below --
2003-12-26 1:46 Chris Meadors
2003-12-26 3:46 ` H. Peter Anvin
2003-12-26 4:34 ` Linus Torvalds
2003-12-26 6:04 ` H. Peter Anvin
2003-12-26 6:58 ` Andy Isaacson
2003-12-26 7:07 ` H. Peter Anvin
2003-12-26 7:08 ` Linus Torvalds
2003-12-29 16:13 ` David Lloyd
2004-01-02 21:57 ` Bill Davidsen
2004-01-03 21:11 ` Krzysztof Halasa
2004-01-04 5:48 ` Bill Davidsen
2004-01-04 20:41 ` Linus Torvalds
2004-01-05 1:28 ` Bill Davidsen
2004-01-05 1:38 ` Måns Rullgård
2004-01-05 23:49 ` Ingo Oeser
2004-01-05 2:25 ` Linus Torvalds
2004-01-05 4:15 ` Bill Davidsen
2004-01-05 4:36 ` Linus Torvalds
2003-12-30 1:37 ` Rusty Russell
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=ug3casyegk.fsf@panda.mostang.com \
--to=david.mosberger@acm.org \
--cc=davidm@mostang.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rth@redhat.com \
--cc=torvalds@osdl.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).