https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82244
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-valid-code Priority|P3 |P2 Known to work| |6.4.0 Target Milestone|--- |7.3 Summary|-O2: ICE: tree check: |[7/8 Regression] -O2: ICE: |expected ssa_name, have |tree check: expected |integer_cst in |ssa_name, have integer_cst |replace_uses_by, at |in replace_uses_by, at |tree-cfg.c:1904 |tree-cfg.c:1904 --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- So we're creating <bb 10> [9.35%] [count: INV]: f_26 = ASSERT_EXPR <f_7(ab), (unsigned int) f_7(ab) <= 4294967289>; _2 = f_26 & 2; if (_2 != 0) goto <bb 11>; [33.00%] [count: INV] else goto <bb 12>; [67.00%] [count: INV] <bb 11> [3.08%] [count: INV]: f_27 = ASSERT_EXPR <f_26, (unsigned int) f_26 + 4294967294 <= 4294967293>; f_28(ab) = ASSERT_EXPR <f_27, f_27 != 0>; h (); where we are able to fold f_26 to zero and thus end up with f_28(ab) = ASSERT_EXPR <0, 0 != 0>; when we are trying to get rid of asserts. But we may not propagate the constant.