Rangers cache is implemented as a "read-only" range-query, but the
range_of_expr implementation fails to handle the case where these is no
context provided.
This patch adds support for that, picking up the global value from the
cache.
Bootstrapped on x86_64-pc-linux-gnu with no regressions. Pushed.
Andrew
From 63b9fd7f4f6ce8b100584efea704d2f94855fd0c Mon Sep 17 00:00:00 2001
From: Andrew MacLeod <[email protected]>
Date: Tue, 16 Dec 2025 13:44:45 -0500
Subject: [PATCH 5/6] Ranger_cache::range_of_expr should handle no context.
range_of_expr is suppose to return a global value if there is no context
and instead it was crashing.
* gimple-range-cache.cc (ranger_cache::range_of_expr): Handle
NULL statement.
---
gcc/gimple-range-cache.cc | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 02af482838d..f3aa256acb0 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -1274,19 +1274,21 @@ bool
ranger_cache::range_of_expr (vrange &r, tree name, gimple *stmt)
{
if (!gimple_range_ssa_p (name))
+ get_tree_range (r, name, stmt);
+ /* If no context is provided, pick up the global value. */
+ else if (!stmt)
+ get_global_range (r, name);
+ else
{
- get_tree_range (r, name, stmt);
- return true;
- }
-
- basic_block bb = gimple_bb (stmt);
- gimple *def_stmt = SSA_NAME_DEF_STMT (name);
- basic_block def_bb = gimple_bb (def_stmt);
+ basic_block bb = gimple_bb (stmt);
+ gimple *def_stmt = SSA_NAME_DEF_STMT (name);
+ basic_block def_bb = gimple_bb (def_stmt);
- if (bb == def_bb)
- range_of_def (r, name, bb);
- else
- entry_range (r, name, bb, RFD_NONE);
+ if (bb == def_bb)
+ range_of_def (r, name, bb);
+ else
+ entry_range (r, name, bb, RFD_NONE);
+ }
return true;
}
--
2.45.0