[gcc r16-6937] Do not trap on a stmt with no basic block.
Andrew Macleod
amacleod@gcc.gnu.org
Tue Jan 20 19:23:08 GMT 2026
https://gcc.gnu.org/g:4ac080e384cd30d37fac069d791b813100e6524a
commit r16-6937-g4ac080e384cd30d37fac069d791b813100e6524a
Author: Andrew MacLeod <amacleod@redhat.com>
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;
+ }
+}
More information about the Gcc-cvs
mailing list