> In short, the issue is, when given the following code:
>
>
> struct A {...};
> struct B { ...; struct A a; ...; };
>
>
> void f() {
> B b;
> g(&b.a);
> }
>
> does the compiler have to assume that "g" may access the parts of "b"
> outside of "a".
I understand that you are talking about ISO C, but one relevant case (in C++)
to look out for that is similar is this one, which certainly constitutes
legitimate and widespread use of language features:
class A {...};
class B : public A { ... };
void f() {
B b;
g (static_cast<A*> (&b));
}
void g(A *a) {
B *b = dynamic_cast<B*>(a);
// do what you please with the full object B
}
dynamic_cast<> was invented for the particular reason to allow such
constructs.
I admit ignorance how exactly the C++ FE describes base class information (as
opposed to structure member information), but the aliasing code what have to
know about the difference.
Best
Wolfgang
-------------------------------------------------------------------------
Wolfgang Bangerth email: [EMAIL PROTECTED]
www: http://www.ices.utexas.edu/~bangerth/