https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106654
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Note, I think for [[assume(i == j)]]; we can just emit if (i == j) ; else __builtin_unreachable (); - it is just the TREE_SIDE_EFFECTS case that would need the extra treatment (I think the no side-effect cases will be occur often enough that it is worth avoiding the outlining etc. costs). Well, possibly also anything that could trap or fault or with some expression size limit. If it doesn't have side-effects and can't trap/fault, we either DCE it, or it doesn't result in visible side-effects. But possible floating point side-effects, or integer division by zero, or memory dereferences etc. should go the new way.