aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2022-09-21 16:15:02 -0400
committerAndrew MacLeod <amacleod@redhat.com>2022-09-22 14:48:28 -0400
commit2f92f685da2ef9e82ee6262519919180df8f2dd9 (patch)
treeae1e971cdb3c1b762e97f5b5ab1484f2b3bb4b49 /gcc/tree-vrp.cc
parentbe2a25adbdc76a770f7470cc9f47892f7a4139ae (diff)
downloadgcc-2f92f685da2ef9e82ee6262519919180df8f2dd9.zip
gcc-2f92f685da2ef9e82ee6262519919180df8f2dd9.tar.gz
gcc-2f92f685da2ef9e82ee6262519919180df8f2dd9.tar.bz2
Always check the return value of fold_range.
The fold_range routine in range-ops returns FALSE if the operation fails. There are a few places which assume the operation was successful. Fix those. * gimple-range-fold.cc (range_of_range_op): Set result to VARYING if the call to fold_range fails. * tree-data-ref.cc (compute_distributive_range): Ditto. * tree-vrp.cc (range_fold_binary_expr): Ditto. (range_fold_unary_expr): Ditto. * value-query.cc (range_query::get_tree_range): Ditto.
Diffstat (limited to 'gcc/tree-vrp.cc')
-rw-r--r--gcc/tree-vrp.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
index c3030a1..93482e5 100644
--- a/gcc/tree-vrp.cc
+++ b/gcc/tree-vrp.cc
@@ -1069,7 +1069,8 @@ range_fold_binary_expr (value_range *vr,
vr1.set_varying (expr_type);
vr0.normalize_addresses ();
vr1.normalize_addresses ();
- op.fold_range (*vr, expr_type, vr0, vr1);
+ if (!op.fold_range (*vr, expr_type, vr0, vr1))
+ vr->set_varying (expr_type);
}
/* Perform a unary operation on a range. */
@@ -1095,7 +1096,8 @@ range_fold_unary_expr (value_range *vr,
value_range vr0_cst (*vr0);
vr0_cst.normalize_addresses ();
- op.fold_range (*vr, expr_type, vr0_cst, value_range (expr_type));
+ if (!op.fold_range (*vr, expr_type, vr0_cst, value_range (expr_type)))
+ vr->set_varying (expr_type);
}
/* If the range of values taken by OP can be inferred after STMT executes,