https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63186
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- For the case when any of the bbs considered for being split (into function.part.N) refers to a label which is defined in one of the basic blocks that are not considered for split we already kind of have code to handle that, the DECL_UID of the label is put into non_ssa_vars bitmap and then verify_non_ssa_vars is called which if it sees a GIMPLE_LABEL with a label set in non_ssa_vars bitmap will give up. Unfortunately, verify_non_ssa_vars doesn't walk all basic blocks that aren't being split off, but only those that can be executed before reaching the split entry_bb. In the testcase the label is in a basic block that just returns afterwards. So perhaps we'd need to remember if we put any LABEL_DECL uids into non_ssa_vars bitmap and if yes, in addition to what non_ssa_vars does right now also walk all other basic blocks that would not be split away (just the labels at the start of each) and just handle GIMPLE_LABELs for those. Or do that always. Not sure what is supposed to handle the case when a label anywhere in the split_bbs would be referenced from the header basic blocks though.