public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: kaih@khms.westfalen.de (Kai Henningsen)
To: gcc@gcc.gnu.org
Subject: Re: generalized lvalues -- patch outline
Date: Wed, 24 Nov 2004 20:40:00 -0000	[thread overview]
Message-ID: <9LVefXpXw-B@khms.westfalen.de> (raw)
In-Reply-To: <m38y8to2sz.fsf@uniton.integrable-solutions.net>

gdr@integrable-solutions.net (Gabriel Dos Reis)  wrote on 23.11.04 in <m38y8to2sz.fsf@uniton.integrable-solutions.net>:

> Matt Austern <austern@apple.com> writes:
>
> | On Nov 22, 2004, at 12:45 PM, Andrew Pinski wrote:
> |
> | >
> | > On Nov 22, 2004, at 3:39 PM, Ziemowit Laski wrote:
> | >
> | >> On 19 Nov 2004, at 17.50, Ziemowit Laski wrote:
> | >>
> | >>> To put it another way, I'm only concerned with cases where the
> | >>> compiler currently complains
> | >>> about assigning to a non-lvalue, and the non-lvalue in question is
> | >>> a cast of an lvalue.
> | >>
> | >> Indeed, I now appear to have a mainline mod for C and C++ which
> | >> allows assignment to lvalue casts for pointer types.  What follows
> | >> is a high-level synopsis of what I did; if there is interest, I can
> | >> whip up a full-fledged patch, complete with docs.  Please let me
> | >> know.
> | >
> | >
> | > Just use a builtin as proposed by Nathan and others for the problem you
> | > are trying to solve.  The syntax for casts as lvalue just looks bad.
> | > The builtin can return a reference (yes even in the C front-end you
> | > can have references [varargs is an example of which is used as
> | > references in the front-end]).
> |
> | Unfortunately, there is another reason for allowing some tamed version
> | of assignment to casts: compatibility with other compilers.  Microsoft
> | and CodeWarrior both allow this in one form or another.  (Microsoft
> | for C only, CodeWarrior for C++ as well.  CodeWarrior only allows some
> | limited forms of assignments to casts, and doesn't treat a cast as a
> | true lvalue, so they still get overload resolution right.)
>
> I fear there is a circular reasoning here: compilers tend to be
> bug+feature compatible; there are high chances that those mentioned
> compiler implement that dubious construct because gcc invented them in
> the first place.  Now, saying those compilers implement that questionable
> construct as a reason to resurect that abomination does not sound
> right to me.

That's a somewhat circular history, but I can't see any circular  
reasoning. If the goal is (say) MS compatibility, it doesn't matter if MS  
is the way it is because it wanted to be somewhat gcc compatible, or  
because they independently had the same idea, or whatever. It just matters  
that they are the way they are.

In any case, *if* something like that comes back, I think it should be  
done this way:

1. To get it, you need an explicit flag of some kind - it's not there by  
default, so we have a guarantee that it doesn't hurt programs which don't  
use it. (I have no preferences as to what flag would be appropriate, just  
that it be off by default.)

2. It is defined exactly what it does, preferrably as a syntactic  
transform to a standard (or at least different) language construct (this  
also helps people who want to get rid of it).

For example (and I don't claim this is the semantic it ought to have),

        modification((type)lvalue)

        ->

        ({
                type __tmp = (type)lvalue;
                modification(__tmp);
                lvalue = (typeof(lvalue))__tmp;
                lvalue;
        })

(and similarly for any other allowed general lvalue constructs).

MfG Kai

  parent reply	other threads:[~2004-11-24 20:03 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-18  3:50 generalized lvalues Matt Austern
2004-11-18  3:52 ` Andrew Pinski
2004-11-18  4:01 ` Andrew Pinski
2004-11-18  4:18   ` Daniel Berlin
2004-11-18  4:21   ` Andrew Pinski
2004-11-18  4:27     ` Matt Austern
2004-11-18  7:15       ` Joe Buck
2004-11-18  7:37         ` Matt Austern
2004-11-18 13:17           ` Giovanni Bajo
2004-11-18 17:57           ` Joe Buck
2004-11-18 18:28         ` Mike Stump
2004-11-18 18:44           ` Joe Buck
2004-11-19  1:39             ` Mike Stump
2004-11-19  4:52               ` Matt Austern
2004-11-19 22:24                 ` Michael Matz
2004-11-19 22:30                   ` Robert McNulty Junior
2004-11-20  1:00                   ` Ziemowit Laski
2004-11-20  1:20                     ` Joe Buck
2004-11-20  1:51                       ` Ziemowit Laski
2004-11-20  5:04                         ` Joe Buck
2004-11-20  5:17                           ` Ziemowit Laski
2004-11-22 20:54                             ` generalized lvalues -- patch outline Ziemowit Laski
2004-11-22 21:01                               ` Andrew Pinski
2004-11-22 21:11                                 ` Ziemowit Laski
2004-11-22 21:39                                 ` Matt Austern
2004-11-22 22:11                                   ` Joe Buck
2004-11-22 22:12                                     ` Matt Austern
2004-11-23  0:06                                       ` Gabriel Dos Reis
2004-11-23  0:04                                   ` Gabriel Dos Reis
2004-11-23  0:27                                     ` Mike Stump
2004-11-24 20:40                                     ` Kai Henningsen [this message]
2004-11-23  0:11                                   ` Mark Mitchell
2004-11-23  1:19                                     ` Matt Austern
2004-11-23  1:26                                       ` Mark Mitchell
2004-11-23  1:32                                         ` Dale Johannesen
2004-11-23  1:42                                           ` Mark Mitchell
2004-11-23  1:45                                           ` Andrew Pinski
2004-11-23  1:55                                             ` Dale Johannesen
2004-11-23  1:56                                               ` Andrew Pinski
2004-11-23  2:12                                                 ` Dale Johannesen
2004-11-23  2:10                                               ` Marcus G. Daniels
2004-11-23  9:43                                       ` Eric Botcazou
2004-11-23 18:27                                       ` Aaron W. LaFramboise
2004-11-22 21:23                               ` Nathan Sidwell
2004-11-22 22:33                                 ` Ziemowit Laski
2004-11-23  0:09                                   ` Gabriel Dos Reis
2004-11-23  9:54                                   ` Nathan Sidwell
2004-11-23 13:35                                     ` Michael Matz
2004-11-23 14:56                                       ` Daniel Berlin
2004-11-23 15:02                                         ` Michael Matz
2004-11-23 15:15                                           ` Andrew Pinski
2004-11-23 15:47                                             ` Michael Matz
2004-11-23 15:56                                               ` Gabriel Dos Reis
2004-11-23 15:50                                             ` Steve Naroff
2004-11-23 15:51                                               ` Gabriel Dos Reis
2004-11-23 16:50                                             ` Eric Botcazou
2004-11-23 17:01                                               ` Paul Koning
2004-11-23 17:16                                                 ` Andreas Schwab
2004-11-23 18:03                                                 ` Thomas Kunert
2004-11-23 18:30                                                   ` Nathan Sidwell
2004-11-23 18:57                                                     ` Thomas Kunert
2004-11-23 21:21                                                   ` Paul Koning
2004-11-23 21:52                                                     ` Thomas Kunert
2004-11-23 15:51                                           ` Gabriel Dos Reis
2004-11-23 16:12                                             ` Michael Matz
2004-11-23 16:31                                               ` Richard Guenther
2004-11-23 16:44                                               ` Andreas Schwab
2004-11-23 20:16                                               ` Gabriel Dos Reis
2004-11-23 15:01                                       ` Nathan Sidwell
2004-11-23 15:09                                         ` Michael Matz
2004-11-23 19:11                                         ` Matt Austern
2004-11-23 21:10                                           ` Eric Botcazou
2004-11-23 21:34                                     ` Ziemowit Laski
2004-11-23 22:09                                       ` Joseph S. Myers
2004-11-23 22:23                                         ` Eric Botcazou
2004-11-23 22:27                                           ` Joseph S. Myers
2004-11-24  0:05                                             ` Eric Botcazou
2004-11-24  0:07                                               ` Steven Bosscher
2004-11-24  0:32                                               ` Joseph S. Myers
2004-11-25  8:41                                                 ` Ian Lance Taylor
2004-11-25 20:41                                                   ` Gabriel Dos Reis
2004-11-25 21:54                                                     ` Matt Austern
2004-11-25 23:27                                                       ` Gabriel Dos Reis
2004-11-29 18:06                                                       ` Joe Buck
2004-11-29 18:57                                                         ` Matt Austern
2004-11-23 23:27                                         ` Gabriel Dos Reis
2004-11-23 22:24                                       ` Nathan Sidwell
2004-11-23  0:07                                 ` Gabriel Dos Reis
2004-11-24 20:43                                   ` Kai Henningsen
2004-11-24 23:09                                     ` Gabriel Dos Reis
2004-11-24 23:17                                       ` Zack Weinberg
2004-11-22 21:31                               ` Richard Henderson
2004-11-23  0:11                                 ` Gabriel Dos Reis
2004-11-23  0:03                               ` Jonathan Lennox
2004-11-20  1:40                     ` generalized lvalues Joseph S. Myers
2004-11-18 19:11           ` Alex Rosenberg
2004-11-18  4:24   ` Matt Austern
2004-11-18  5:33 ` Dale Johannesen
2004-11-18 17:14 ` Fariborz Jahanian
2004-11-18 18:23   ` Joe Buck
2004-11-19  0:20     ` Ziemowit Laski
2004-11-19  0:40       ` Steven Bosscher
2004-11-19  1:20       ` Joe Buck
2004-11-19  2:00         ` Ziemowit Laski
2004-11-18 23:36 ` Ziemowit Laski
2004-11-18 23:37   ` Matt Austern
2004-11-18 23:49     ` Zack Weinberg
2004-11-19  1:38       ` Ziemowit Laski
2004-11-19  2:52         ` Zack Weinberg
2004-11-19  3:56           ` Ziemowit Laski
2004-11-19  4:22             ` Zack Weinberg
2004-11-19 13:10         ` Nathan Sidwell
2004-11-19 21:58           ` Ziemowit Laski
2004-11-18 23:44   ` Andrew Pinski
2004-11-18 23:45   ` Joe Buck
2004-11-25  4:42 ` Aaron W. LaFramboise

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=9LVefXpXw-B@khms.westfalen.de \
    --to=kaih@khms.westfalen.de \
    --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).