This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: ISO Aliasing rules question
- From: Michael Matz <matz at suse dot de>
- To: Mark Mitchell <mark at codesourcery dot com>
- Cc: "law at redhat dot com" <law at redhat dot com>,"gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Fri, 21 Feb 2003 21:20:32 +0100 (CET)
- Subject: Re: ISO Aliasing rules question
Hi,
On Fri, 21 Feb 2003, Mark Mitchell wrote:
> --On Friday, February 21, 2003 08:38:07 PM +0100 Michael Matz
> <matz at suse dot de> wrote:
>
> > Yes, but he's accessing a member, not the whole struct. And that access
>
> I'm pretty sure it's the pointer he's using that's the key.
>
> If he wrote:
>
> double *dp = (double*) b;
>
> *dp = 1.0;
>
> that would be fine, but saying b->d = 1.0 isn't.
Hmm. How's that then:
double *dp = &(b->d);
*dp = 1.0;
This definitely is accessing a 'double' object, and aliases ergo with
a->d. In this regard I fail to see the difference between
"*dp = 1.0" and "b->d = 1.0". If there _is_ a difference it could only
result from types, and then only if there would be the concept of
subtypes, or tagged types, or however we call them. I.e. if
type(*dp) != type(b->d) would be true. I don't think this concept exists
in C. Hmm.
Ciao,
Michael.