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

Reply via email to