http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59014
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- It seems we create wrong ASSERT_EXPR: a.1_5 = a; _7 = (_Bool) a.1_5; _8 = _4 | _7; if (_8 != 0) goto <bb 5>; else goto <bb 6>; <bb 6>: a.1_15 = ASSERT_EXPR <a.1_5, a.1_5 == 0>; Why does it think that a.1_5 must be 0?