public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Nathan Sidwell <nathan@codesourcery.com>
To: Ziemowit Laski <zlaski@apple.com>
Cc: Steve Naroff <snaroff@apple.com>,
	gcc mailing list <gcc@gcc.gnu.org>,
	 Matt Austern <austern@apple.com>, Michael Matz <matz@suse.de>,
	Joe Buck <Joe.Buck@synopsys.com>,
	 Andrew Pinski <pinskia@physics.uc.edu>,
	Mike Stump <mrs@apple.com>
Subject: Re: generalized lvalues -- patch outline
Date: Tue, 23 Nov 2004 09:54:00 -0000	[thread overview]
Message-ID: <41A30346.8050602@codesourcery.com> (raw)
In-Reply-To: <24BB97A2-3CD3-11D9-B847-000D9330C50E@apple.com>

Ziemowit Laski wrote:

> The semantics are that a C-style cast of an lvalue will itself be 
> treated as an lvalue under the following circumstances:

Thanks for your description, but I find it incomplete.

>   - The lvalue cast does not induce a type conversion (if it does, then 
> we use the type conversion instead);

You can't possibly mean this.  If the cast does not change the type, then
there's no reason to have it there.  Clearly some type conversions are
permitted and some not -- please be specific about which.  May be
you meant integral conversion, maybe you meant integral-pointer conversions
maybe you meant integral promotion ...

>   - The lvalue cast is being assigned to, incremented or decremented;
... or modified.  What is the bitrepresentation of the lvalue?  Is it
that of the newly specified type, or is the static type of the location?
(I.e. what would a C interpreter that tracks dynamic type say about
that lvalue's type.)

>   - The lvalue is of a pointer type, and is being cast to a pointer 
> type.
ok, so this answers my questions about point 1. Any pointer type? Like
the disallowed func->object conversion in C++? What about references
and/or references to pointer types?  Does array/function->pointer
decay occur? It might make sense to restrict the original lvalue
type to 'void *'.

Are there any restrictions on the original lvalue that is being cast?
Is this extension composable? For instance what about the following,
	#define MAGIC_REGISTER ((void *)p)
	(int *)MAGIC_REGISTER += 2

What about
	(expr, (int *)p) = something
in C++?  In C++ operator, is an lvalue if its second operand is an
lvalue. Similarly for ?:

Have you thought about specifying this in terms of a rewriting rule?
Do you have an analysis of interaction with existing features? What
programming errors would fall into this?

 >  (This will need to be relaxed somewhat should people desire
> Microsoft compatibility, at least for C.)
ahh, this leads me on to a rationale.  Why do you want this extension?
I see 6 different possible rationales. Are they all applicable?

1) Microsoft VC++ compatibility.  What are the specifications of this
extension?  (I see Matt is trying to find out.)  If this is the reason,
the whole of that extension should be implemented, and it should be enabled
on the existing -fms-extensions flag.

2) CodeWarrior compatibility. Same questions.  Is the CW extension exactly
the same as the VC++ extension?  There should be a -fcw-extensions flag
if we want to go down that route.

3) It is used in Apple's code base.  Mike Stump posted some numbers.  Can
you provide Apple's coding guidelines that document where this extension
can be used, and what the semantics are presumed to be?  I understand
the Linux kernel had some uses, but they have all been removed in the 2.6
series, because of their removal from gcc.  I have no idea on the relative
task sizes of removing it from Linux's and Apple's code base.

4) It is in use in other code that is 'out there'.  What code? Give
examples.  Given that one of the biggest bits (Linux kernel) has been
cleaned, this other code needs to be widely used and difficult to clean.
Andrew, what fraction of 3.4 bug reports concern this feature? (Does the
C FE give a deprecated warning, or are C users in the dark?)

5) Some ObjC/ObjC++ garbage collection proposal.  Other syntaxes have been
proposed.  I've not seen a detailed description of this proposal.

6) It leads to clearer, more understandable code.  It seems to me the
only thing that would be clearer is
	void *p = something;
	(int *)p += offset;
... maybe.  I do not find this compelling.  This code is what one finds
in memory allocators, and their implementation is few and far between.
In an allocator one would either make P a 'char *' or provide an inline
function/macro to do the adjustment.

I do not like the idea of special flags per extension.  That way lies
N^2 different 'interesting' failure modes.

nathan

-- 
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk

  parent reply	other threads:[~2004-11-23  9:31 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
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 [this message]
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=41A30346.8050602@codesourcery.com \
    --to=nathan@codesourcery.com \
    --cc=Joe.Buck@synopsys.com \
    --cc=austern@apple.com \
    --cc=gcc@gcc.gnu.org \
    --cc=matz@suse.de \
    --cc=mrs@apple.com \
    --cc=pinskia@physics.uc.edu \
    --cc=snaroff@apple.com \
    --cc=zlaski@apple.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).