https://gcc.gnu.org/g:f5978fc4f173d04dd5c48318cdff107cc4fabc76
commit r16-5874-gf5978fc4f173d04dd5c48318cdff107cc4fabc76 Author: Eric Botcazou <[email protected]> Date: Wed Dec 3 17:26:49 2025 +0100 Fix miscompilation of gnatbind with profiled bootstrap Boolean types may have precision > 1 so using !undefined_p && !varying_p is not sufficient for them. gcc/ PR tree-optimization/122934 * tree-ssa-loop-niter.cc (simplify_using_initial_conditions): Use singleton_p predicate even with boolean ranges. Diff: --- gcc/tree-ssa-loop-niter.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc index f27a9e5cd113..8aa52dc54b01 100644 --- a/gcc/tree-ssa-loop-niter.cc +++ b/gcc/tree-ssa-loop-niter.cc @@ -3086,13 +3086,13 @@ simplify_using_initial_conditions (class loop *loop, tree expr) return expr; value_range expr_range (TREE_TYPE (expr)); + tree val; if (TREE_TYPE (expr) == boolean_type_node && get_range_query (cfun)->range_on_edge (expr_range, loop_preheader_edge (loop), expr) - && !expr_range.undefined_p () - && !expr_range.varying_p ()) - return expr_range.nonzero_p () ? boolean_true_node : boolean_false_node; + && expr_range.singleton_p (&val)) + return val; backup = expanded = expand_simple_operations (expr);
