https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96108
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Bisection says this changed with r10-2587-gcc19f80ceb27cc3d31d259ebecaad12005acfd7e The change was in forwprop1, instead of what we used to do: _5 = a_4(D); ... = _5->b; ... _5->b = ...; we now propagate the uninitialized SSA_NAME: ... = a_4(D)->b; ... a_4(D)->b = ...; During fre1 before that commit it is propagated that way too, so we get identifal fre1 dump, but guess points-to info is different or something, and finally in dse1 the store is removed only in one case. But as Mark has said, we should be just replacing such accesses with __builtin_unreachable/__builtin_trap depending on user's choice instead of trying to optimize it some other way, because it is always UB.