gnu/gcc/977fd87bade47e7624d803ba0cc549d819c03fe1 Allow range invert to fail.
Return a boolean from range invert() to handle cases where an inversion
cannot be represented.
PR tree-optimization/126536
gcc/
* gimple-range-edge.cc (calc_switch_ranges): Check that invert worked.
* gimple-range-op.cc (cfn_toupper_tolower::fold_range): Likewise.
* range-op-ptr.cc (operator_equal::op1_range): Likewise.
(operator_not_equal::op1_range): Likewise.
* range-op.cc (operator_equal::op1_range): Likewise.
(operator_not_equal::op1_range): Likewise.
(operator_rshift::op1_range): Likewise.
(operator_logical_not::fold_range): Likewise.
* tree-ssa-loop-unswitch.cc (unswitch_predicate): Likewise.
* value-range.cc (irange_bitmask::range_from_mask): Likewise.
(prange::invert): Return bool for success/fail.
(irange::invert): Likewise.
(irange::snap_subranges): Check that invert worked.
(range_tests_int_range_max): Confirm failed invert works.
(range_tests_misc): Check invert return value.
* value-range.h (irange::invert): Add boolean return value.
(prange::invert): Add boolean return value.
* vr-values.cc (simplify_switch_using_ranges): Check invert result.
gcc/testsuite/
* gcc.dg/pr126536-1.c: New.
* gcc.dg/pr126536-2.c: New.
10 files changed