Proposed resolution to aliasing issue.
Mark Mitchell
mark@codesourcery.com
Wed May 11 23:46:00 GMT 2005
Wolfgang Bangerth wrote:
> Mark,
> it occurred to me that asking the question you pose may use language that is
> more unfamiliar than necessary. How about this question instead -- assume
>
> struct S { int s; };
> struct X {
> int i;
> struct S s;
> };
>
> void g(struct S*);
> void f() {
> X x;
> g(&x.s);
> }
>
> Would the compiler be allowed to realize that X::i is never referenced and
> therefore a dead variable? I assume the compiler doesn't do that right now,
> but it would be straightforward for a scalar replacement algorithm to not
> even allocate stack space for X::i, but only X::s, and hand the address of
> the only remaining stack object, of type S, to g().
I agree that this is the same issue, in another guise. My point of view
is that this optimization would not be valid, pending clarification of
the issues we've been discussing. As soon as any component of "x" is
addressed, we must assume that all of "x" is addressed -- unless we can
prove otherwise, by, say, looking at the body of "g".
--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304
More information about the Gcc
mailing list