https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83041
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2017-11-20 Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Both references get alias-set zero. Given we do not know the dynamic type of 'a' there can be very well a struct A live at that point which means p might point to a. For g there cannot be a B at a because it won't fit. We do not figure the "redundant" assignments because we're not able to CSE p->a[0] to the previous a[0] store. This "trick" is not implemented. I think we have a duplicate bug for this looking like void foo (int *p, int *q) { *p = 1; *q = 1; return *p; } which we should be able to optimize to return 1.