https://gcc.gnu.org/g:d428b0147e257e573f224d9230cd87d8ef89e934
commit r17-3027-gd428b0147e257e573f224d9230cd87d8ef89e934 Author: Aldy Hernandez <[email protected]> Date: Wed Aug 5 09:00:49 2026 +0000 Use !contains_zero_p for known nonzero tests instead of nonzero_p. These callers ask whether a range excludes zero, which nonzero_p () only approximated (i.e. it is false for e.g. [1, 5]). Tested on ppc64le Linux. gcc/ChangeLog: * gimple-range-path.cc (path_range_query::adjust_for_non_null_uses): Use !contains_zero_p instead of nonzero_p. * tree-ssa-structalias.cc (find_what_p_points_to): Likewise. * tree-ssanames.cc (set_range_info): Likewise. * tree-vrp.cc (execute_ranger_vrp): Likewise. gcc/analyzer/ChangeLog: * region-model.cc (region_model::eval_condition): Likewise. Diff: --- gcc/analyzer/region-model.cc | 2 +- gcc/gimple-range-path.cc | 2 +- gcc/tree-ssa-structalias.cc | 2 +- gcc/tree-ssanames.cc | 2 +- gcc/tree-vrp.cc | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 8addf1d9a070..f385e008fa76 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -5161,7 +5161,7 @@ region_model::eval_condition (const svalue *lhs, { if (out.zero_p ()) return tristate::TS_FALSE; - if (out.nonzero_p ()) + if (!out.contains_zero_p ()) return tristate::TS_TRUE; } } diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index a8d137741f1a..8a89da3dda37 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -460,7 +460,7 @@ path_range_query::adjust_for_non_null_uses (basic_block bb) if (get_cache (r, name)) { - if (r.nonzero_p ()) + if (!r.contains_zero_p ()) continue; } else diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc index 30f911e2c727..76fb3600e748 100644 --- a/gcc/tree-ssa-structalias.cc +++ b/gcc/tree-ssa-structalias.cc @@ -934,7 +934,7 @@ find_what_p_points_to (tree fndecl, tree p) varinfo_t vi; prange vr; get_range_query (DECL_STRUCT_FUNCTION (fndecl))->range_of_expr (vr, p); - bool nonnull = vr.nonzero_p (); + bool nonnull = !vr.contains_zero_p (); /* For parameters, get at the points-to set for the actual parm decl. */ diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc index d2ebb49909f0..9ad860df65a1 100644 --- a/gcc/tree-ssanames.cc +++ b/gcc/tree-ssanames.cc @@ -429,7 +429,7 @@ set_range_info (tree name, const vrange &r) { struct ptr_info_def *pi = get_ptr_info (name); // If R is nonnull and pi is not, set nonnull. - if (r.nonzero_p () && (!pi || pi->pt.null)) + if (!r.contains_zero_p () && (!pi || pi->pt.null)) set_ptr_nonnull (name); else return false; diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 49eeedb82669..da65d67b4052 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -1139,7 +1139,7 @@ execute_ranger_vrp (struct function *fun, bool final_p) { ipa_record_return_value_range (return_range); if (POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))) - && return_range.nonzero_p () + && !return_range.contains_zero_p () && cgraph_node::get (current_function_decl) ->add_detected_attribute ("returns_nonnull")) warn_function_returns_nonnull (current_function_decl);
