http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55155
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-10-31 21:44:20 UTC --- <bb 2>: _19 = num_prods_6(D) * 16; if (_19 != 0) goto <bb 4>; else goto <bb 3>; <bb 3>: return; <bb 4>: _16 = ASSERT_EXPR <_19, _19 != 0>; ... if (_16 <= 4) goto <bb 5>; else goto <bb 21>; We should have an assert_expr that _16 is also greater or equal to than 16. Note this is changing unsigned to __SIZE_TYPE__ so casting does not get in the way.