After fixing PR107561 the following avoids looking at VR_ANTI_RANGE ranges where it doesn't seem obvious the code does the correct thing here (lower_bound and upper_bound do not work as expected).
Bootstrapped and tested on x86_64-unknown-linux-gnu. OK? Thanks, Richard. * gimple-ssa-sprintf.cc (get_int_range): Avoid VR_ANTI_RANGE by using range_int_cst_p. (format_integer): Likewise. (handle_printf_call): Guard against VR_ANTI_RANGE. * graphite-sese-to-poly.cc (add_param_constraints): Likewise. * tree-ssa-strlen.cc (set_strlen_range): Likewise. --- gcc/gimple-ssa-sprintf.cc | 6 +++--- gcc/graphite-sese-to-poly.cc | 2 +- gcc/tree-ssa-strlen.cc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/gimple-ssa-sprintf.cc b/gcc/gimple-ssa-sprintf.cc index 18975708d2c..61974072f62 100644 --- a/gcc/gimple-ssa-sprintf.cc +++ b/gcc/gimple-ssa-sprintf.cc @@ -1082,7 +1082,7 @@ get_int_range (tree arg, gimple *stmt, value_range vr; query->range_of_expr (vr, arg, stmt); - if (!vr.undefined_p () && !vr.varying_p ()) + if (range_int_cst_p (&vr)) { HOST_WIDE_INT type_min = (TYPE_UNSIGNED (argtype) @@ -1391,7 +1391,7 @@ format_integer (const directive &dir, tree arg, pointer_query &ptr_qry) value_range vr; ptr_qry.rvals->range_of_expr (vr, arg, dir.info->callstmt); - if (!vr.varying_p () && !vr.undefined_p ()) + if (range_int_cst_p (&vr)) { argmin = wide_int_to_tree (TREE_TYPE (arg), vr.lower_bound ()); argmax = wide_int_to_tree (TREE_TYPE (arg), vr.upper_bound ()); @@ -4623,7 +4623,7 @@ handle_printf_call (gimple_stmt_iterator *gsi, pointer_query &ptr_qry) value_range vr; ptr_qry.rvals->range_of_expr (vr, size, info.callstmt); - if (!vr.undefined_p ()) + if (!vr.undefined_p () && vr.kind () != VR_ANTI_RANGE) { tree type = TREE_TYPE (size); tree tmin = wide_int_to_tree (type, vr.lower_bound ()); diff --git a/gcc/graphite-sese-to-poly.cc b/gcc/graphite-sese-to-poly.cc index fbe7667380a..b89262640ac 100644 --- a/gcc/graphite-sese-to-poly.cc +++ b/gcc/graphite-sese-to-poly.cc @@ -426,7 +426,7 @@ add_param_constraints (scop_p scop, graphite_dim_t p, tree parameter) if (INTEGRAL_TYPE_P (type) && get_range_query (cfun)->range_of_expr (r, parameter) - && !r.undefined_p ()) + && range_int_cst_p (&r)) { min = r.lower_bound (); max = r.upper_bound (); diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc index 7508c1768a5..e1230522564 100644 --- a/gcc/tree-ssa-strlen.cc +++ b/gcc/tree-ssa-strlen.cc @@ -1936,7 +1936,7 @@ set_strlen_range (tree lhs, wide_int min, wide_int max, { value_range r; get_range_query (cfun)->range_of_expr (r, bound); - if (!r.undefined_p ()) + if (range_int_cst_p (&r)) { /* For a bound in a known range, adjust the range determined above as necessary. For a bound in some anti-range or -- 2.35.3