http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55358
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-11-28 Ever Confirmed|0 |1 --- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-28 14:47:33 UTC --- (In reply to comment #7) > diff --git a/gcc/dse.c b/gcc/dse.c > index f879adb..8d12e8d 100644 > --- a/gcc/dse.c > +++ b/gcc/dse.c > @@ -2869,7 +2869,7 @@ dse_step1 (void) > INSN_UID (s_info->redundant_reason->insn)); > delete_dead_store_insn (ptr); > } > - if (s_info) > + if (ptr->store_rec && s_info) > s_info->redundant_reason = NULL; > free_store_info (ptr); > } Actually, I fail to see what is that if (s_info) s_info->redundant_reason = NULL; good for, the following free_store_info (ptr) should pool_free s_info if delete_dead_store_insn hasn't already called free_store_info. And it doesn't seem that pool_alloced store info recs would rely on the field being cleared, it seems we initialize it always: store_info->redundant_reason = redundant_reason; Thus, my preference would be just drop the two lines instead.