This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Proposed resolution to aliasing issue.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]