diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-08-02 17:31:37 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-08-02 19:23:47 -0400 |
commit | 70daecc03235aa7187b03681cebed6e04b32678e (patch) | |
tree | fb23690d47bf2152bf5f72296892bcd37b804349 | |
parent | 502605a277d36cee1b0570982a16d97a43eace67 (diff) |
Do not register edges for statements not understood.
Previously, all gimple_cond types were undserstoof, with float values,
this is no longer true. We should gracefully do nothing if the
gcond type is not supported.
PR tree-optimization/106510
gcc/
* gimple-range-fold.cc (fur_source::register_outgoing_edges):
Check for unsupported statements early.
gcc/testsuite
* gcc.dg/pr106510.c: New.
-rw-r--r-- | gcc/gimple-range-fold.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr106510.c | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index 923094abd62..689d8279627 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -1496,6 +1496,10 @@ fur_source::register_outgoing_edges (gcond *s, irange &lhs_range, edge e0, edge tree name; basic_block bb = gimple_bb (s); + range_op_handler handler (s); + if (!handler) + return; + if (e0) { // If this edge is never taken, ignore it. @@ -1524,8 +1528,6 @@ fur_source::register_outgoing_edges (gcond *s, irange &lhs_range, edge e0, edge tree ssa2 = gimple_range_ssa_p (gimple_range_operand2 (s)); if (ssa1 && ssa2) { - range_op_handler handler (s); - gcc_checking_assert (handler); if (e0) { relation_kind relation = handler.op1_op2_relation (e0_range); diff --git a/gcc/testsuite/gcc.dg/pr106510.c b/gcc/testsuite/gcc.dg/pr106510.c new file mode 100644 index 00000000000..24e91123f63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr106510.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +void foo (); +void ine_ok() { + float y, x; + if (x < y || x > y || y) + foo (); +} + |