[Bug c++/111482] [14 Regression] ice in lower_bound with -O3
guojiufu at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Sep 20 04:10:35 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111482
--- Comment #7 from Jiu Fu Guo <guojiufu at gcc dot gnu.org> ---
This is caused by missing to check a vr's "undefine_p".
In the pattern "(X + C) / N",
(if (exact_mod (c)
...
&& range_op_handler (PLUS_EXPR).overflow_free_p (vr0, vr1)
...)
(plus (op @0 @2) { wide_int_to_tree (type, plus_op1 (c)); })
(if (TYPE_UNSIGNED (type) && c.sign_mask () < 0
&& exact_mod (-c)
/* unsigned "X-(-C)" doesn't underflow. */
&& wi::geu_p (vr0.lower_bound (), -c))
In the "(if (exact_mode (c)" part, the code "overflow_free_p (vr0, vr1)" checks
v0/vr are defined.
But in the "else" part, "if (... && wi::geu_p (vr0.lower_bound (), -c)", vr0 is
not checked undefined_p.
More information about the Gcc-bugs
mailing list