aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2021-07-19 15:16:25 -0400
committerAndrew MacLeod <amacleod@redhat.com>2021-07-22 08:51:59 -0400
commitea789238b2c24eedf70b56257235adf3d33c5a0a (patch)
treec09d1973925fbd28a1900c0ce6ad1233997a8354 /gcc
parente58093276a6e319c2a6d9f02e343fbf8400dab60 (diff)
downloadgcc-ea789238b2c24eedf70b56257235adf3d33c5a0a.zip
gcc-ea789238b2c24eedf70b56257235adf3d33c5a0a.tar.gz
gcc-ea789238b2c24eedf70b56257235adf3d33c5a0a.tar.bz2
Check for undefined on COND_EXPR before querying type.
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gimple-range-fold.cc3
-rw-r--r--gcc/testsuite/gcc.dg/pr101497.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index f8578c0..f95af3d 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -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
index 0000000..fcfe059
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr101497.c
@@ -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;
+}
+