https://gcc.gnu.org/g:4ac080e384cd30d37fac069d791b813100e6524a

commit r16-6937-g4ac080e384cd30d37fac069d791b813100e6524a
Author: Andrew MacLeod <[email protected]>
Date:   Mon Jan 19 13:44:25 2026 -0500

    Do not trap on a stmt with no basic block.
    
    WHen calculating ranges for statements not in the IL, avoid looking for
    range on entry values.
    
            PR tree-optimization/123314
            gcc/
            * gimple-range.cc (gimple_ranger::range_on_entry): Do not check
            ranger cache for an SSA_NAME with no BB.
            (gimple_ranger::prefill_stmt_dependencies): Stop filling
            dependencies when an out-of IL name is encountered.
    
            gcc/testsuite/
            * gcc.dg/pr123314.c: New.

Diff:
---
 gcc/gimple-range.cc             |  6 ++++--
 gcc/testsuite/gcc.dg/pr123314.c | 17 +++++++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index f64c53a7371d..4c768ed3a07d 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -171,7 +171,7 @@ gimple_ranger::range_on_entry (vrange &r, basic_block bb, 
tree name)
   range_of_stmt (r, SSA_NAME_DEF_STMT (name), name);
 
   // Now see if there is any on_entry value which may refine it.
-  if (m_cache.block_range (entry_range, bb, name))
+  if (bb && m_cache.block_range (entry_range, bb, name))
     r.intersect (entry_range);
 
   if (idx)
@@ -389,7 +389,9 @@ gimple_ranger::prefill_stmt_dependencies (tree ssa)
 
   unsigned idx;
   gimple *stmt = SSA_NAME_DEF_STMT (ssa);
-  gcc_checking_assert (stmt && gimple_bb (stmt));
+  gcc_checking_assert (stmt);
+  if (!gimple_bb (stmt))
+    return;
 
   // Only pre-process range-ops and phis.
   if (!gimple_range_op_handler::supported_p (stmt) && !is_a<gphi *> (stmt))
diff --git a/gcc/testsuite/gcc.dg/pr123314.c b/gcc/testsuite/gcc.dg/pr123314.c
new file mode 100644
index 000000000000..785992b4ff35
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr123314.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-march=armv9-a" { target aarch64*-*-* } } */
+/* { dg-additional-options "-march=skylake-avx512" { target x86_64*-*-* } } */
+
+extern char a[];
+extern short b[], c[];
+extern int h[];
+void i() {
+  for (char d;;)
+    for (int e = 0; e < 9; e++) {
+      for (int f; f < 9; f += 4)
+        c[d] = 0;
+      for (int g = 0; g < 9; g += 3)
+        h[1 + d] = (a[d] ? a[3] : 7 ? b[7] : 0) / 6;
+    }
+}

Reply via email to