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