https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112738
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Summary|forwprop4 introduces |[14 Regression] forwprop4 |invalid wide signed Boolean |introduces invalid wide |values |signed Boolean values Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org Target Milestone|--- |14.0 Last reconfirmed| |2023-11-27 Keywords| |wrong-code Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Mine. ``` /* (nop_outer_cast)-(inner_cast)var -> -(outer_cast)(var) if var is smaller in precision. This is always safe for both doing the negative in signed or unsigned as the value for undefined will not show up. */ (simplify (convert (negate:s@1 (convert:s @0))) (if (INTEGRAL_TYPE_P (type) && tree_nop_conversion_p (type, TREE_TYPE (@1)) && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (@0))) (negate (convert @0)))) ``` This needs a check for !BOOLEAN_TYPE here I think. boolean is the special case ...