https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104459
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- On the other side, df-scan.cc does in 3 other spots: /* By adding the ref directly, df_insn_rescan my not find any differences even though the block will have changed. So we need to mark the block dirty ourselves. */ if (!DEBUG_INSN_P (DF_REF_INSN (ref))) df_set_bb_dirty (bb); and /* The block must be marked as dirty now, rather than later as in df_insn_rescan and df_notes_rescan because it may not be there at rescanning time and the mark would blow up. DEBUG_INSNs do not make a block's data flow solution dirty (at worst the LUIDs are no longer contiguous). */ if (bb != NULL && NONDEBUG_INSN_P (insn)) df_set_bb_dirty (bb); and if (!DEBUG_INSN_P (insn)) df_set_bb_dirty (bb); so I wonder if another fix wouldn't be just not call df_set_bb_dirty on DEBUG_INSN_P in df_insn_change_bb. But what do I know about df :(.