https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99101
--- Comment #14 from Richard Biener <rguenth at gcc dot gnu.org> --- Oh, and the testcase does not require the abort () call but can do with a regular exit and no unreachable blocks: volatile int xx; int main() { int read_finish_ = 1; int jobs_ = 1; int at_eof_ = 0; while (1) { int num_job = jobs_; for (int i = 0; i < jobs_; i++) { if (at_eof_) continue; if (read_finish_) { at_eof_ = 1; __builtin_printf ("1\n"); if (xx) return 1; } } jobs_ -= num_job; } return 0; } but it then of course shows the same post-dominance structure and thus exhibits the same control dependences which do not agree with what CD-DCE expects.