Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Daniel Berlin <dan@www.cgsoftware.com>
To: Eli Zaretskii <eliz@is.elta.co.il>
Cc: <gdb@sources.redhat.com>
Subject: Re: Cast to a struct in expressions
Date: Sat, 28 Apr 2001 11:09:00 -0000	[thread overview]
Message-ID: <Pine.LNX.4.33.0104281356111.19482-100000@www.cgsoftware.com> (raw)
In-Reply-To: <8011-Sat28Apr2001110937+0300-eliz@is.elta.co.il>

On Sat, 28 Apr 2001, Eli Zaretskii wrote:

> > Date: Fri, 27 Apr 2001 15:30:22 -0400
> > From: Daniel Berlin <dan@cgsoftware.com>
> > >
> > > I'm still missing something, because I don't see how "*(struct foo *)x"
> > > differs from "*(struct {long foo; unsigned bar;} *)x".  Both are valid
> > > C expression syntax, so the parser should be able to parse them both.
> >
> > No, they aren't both *expressions*, only one is.
> > One is a statement/declaration, and the other is an expression.
>
> I'm not a C language expert, but my references seem to disagree with
> you.  The "cast-expression" is defined as having the form
>
>    cast-expression:
>      unary-expression
>      ( type-name ) cast-expression
>
> and "type-name" is syntactically a declaration for a function or an
> object of that type with the object identifier omitted.

Errr, not possible.
You must be reading it wrong.
Try compiling
int main(void)
{
	int x;
	*((struct { long foo; unsigned bar;} *)x)->foo=5;
}

It won't work.
You can't define types in cast expressions, AFAIK.
What would their scope be?


>
> > No. It's done on purpose.  We aren't supposed to be handling statements and
> > declarations, only expressions.
> >
> > Doing more would require making the C parser into a mini-C compiler.
> > You'd have to start injecting types into the symbol table and whatnot.
>
> I think I understand the trade-offs and appreciate the problems.  I'm
> not saying GDB must support such expressions, but the language
> definition seems to say it's an expression, so users might expect them
> to be supported.  Perhaps something should be said in the docs.
>
Errr, i'm pretty sure you are the first user ever to try this, no offense
or anything.

The docs go over what is allowed to be used, and nowhere does it say
anything about being able to create types out of thin air in cast
expressions. Of cours,e it doesn't say you can't, either.
I have to modify that part of the docs since it says stabs is good for C++
(which hasn't been true for about 4 years now) anyway, so if you want me
to add smething about allowable cast expressions, i'll be happy to.


  parent reply	other threads:[~2001-04-28 11:09 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-27  1:10 Eli Zaretskii
2001-04-27  8:24 ` Daniel Berlin
2001-04-27 10:41   ` Eli Zaretskii
2001-04-27 12:30     ` Daniel Berlin
2001-04-28  1:08       ` Eli Zaretskii
2001-04-28  2:12         ` Paul Hilfinger
2001-04-28 11:30           ` Daniel Berlin
2001-04-28 11:09         ` Daniel Berlin [this message]
2001-04-28 23:47           ` Eli Zaretskii
2001-04-28 23:52             ` Daniel Berlin
2001-04-29  0:20               ` Eli Zaretskii

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.33.0104281356111.19482-100000@www.cgsoftware.com \
    --to=dan@www.cgsoftware.com \
    --cc=eliz@is.elta.co.il \
    --cc=gdb@sources.redhat.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