Check for undefined on COND_EXPR before querying type.
authorAndrew MacLeod <amacleod@redhat.com>
Mon, 19 Jul 2021 19:16:25 +0000 (15:16 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Thu, 22 Jul 2021 12:51:59 +0000 (08:51 -0400)
gcc/
PR tree-optimization/101497
* gimple-range-fold.cc (fold_using_range::range_of_cond_expr): Check
for undefined.

gcc/testsuite
* gcc.dg/pr101497.c: New.

gcc/gimple-range-fold.cc
gcc/testsuite/gcc.dg/pr101497.c [new file with mode: 0644]

index f8578c0..f95af3d 100644 (file)
@@ -1111,7 +1111,8 @@ fold_using_range::range_of_cond_expr  (irange &r, gassign *s, fur_source &src)
       r = range1;
       r.union_ (range2);
     }
-  gcc_checking_assert (range_compatible_p (r.type (), type));
+  gcc_checking_assert (r.undefined_p ()
+                      || range_compatible_p (r.type (), type));
   return true;
 }
 
diff --git a/gcc/testsuite/gcc.dg/pr101497.c b/gcc/testsuite/gcc.dg/pr101497.c
new file mode 100644 (file)
index 0000000..fcfe059
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR tree-optimization/101497 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wno-div-by-zero" } */
+
+char uc_1;
+int i_4, func_12_uli_6;
+void func_12() {
+  int *ptr_8 = &func_12_uli_6;
+  *ptr_8 = 0 >= 211 - uc_1 <= 0;
+  i_4 %= 0;
+  i_4 *= *ptr_8;
+}
+