https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64265
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- static void instrument_func_entry (void) { basic_block succ_bb; gimple_stmt_iterator gsi; tree ret_addr, builtin_decl; gimple g; succ_bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); gsi = gsi_after_labels (succ_bb); indeed. It should do succ_bb = split_edge (single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun))); gsi = gsi_after_labels (succ_bb); instead for example. Or use gsi_insert_on_edge_immediate () and insert on the edge (that avoids splitting the edge if not necessary).