https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82697
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- So cselim transforms *pi = 1; if (f) *pl = 2; into *pi = 1; if (!f) tem = *pl; else tem = 2; *pl = tem; that is of course only valid in case we can validly load from *pl which we can't in this case. Given there's no check for validity here there's nothing else than using alias-set zero for the load ... We also have to avoid changing the dynamic type of the object which means the store _also_ has to use alias-set zero. I have a fix.