http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49189
--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-05-27 11:13:11 UTC --- fold_truth_not_expr canonicalizes !(A & 1) to (A & 1) == 0 but fold_binary canonicalizes bool == 0 to !bool. A recipie for recursion. fold_truth_not_expr doesn't re-fold its result but its result is fold-converted to bool through which we then end up in that latent cycle.