https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99322
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- void bar (void *); void foo (void) { bar (&&lab); #pragma omp parallel for (;;) ; lab:; } ICEs likely since r0-88143-gb357f682db35f4431e3011e7486a0ac865686e3e Not really sure what to do if we find unreachable blocks with labels that need to be preserved, we need to figure out where to place them exactly. As the problematic pass is only the cfg pass (if flag_openmp || flag_openacc || flag_openmp_simd), I wonder if we e.g. shouldn't keep bb_to_omp_idx valid across the cleanup_tree_cfg and if non-NULL, use that for the forced label from unreachable blocks placement.