http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54824
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> 2012-10-11 15:37:41 UTC --- In the second TC the user shouldn't lie to the compiler and put __attribute__((noreturn)) to a function, that in fact returns. Without this attribute, or with e.g. abort () in bar () the ICE does not happen. Otherwise something will be confused (maybe we don't properly update loop_father?) and we ICE.