diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-09-21 16:15:02 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-09-22 14:48:28 -0400 |
commit | 2f92f685da2ef9e82ee6262519919180df8f2dd9 (patch) | |
tree | ae1e971cdb3c1b762e97f5b5ab1484f2b3bb4b49 /gcc/tree-vrp.cc | |
parent | be2a25adbdc76a770f7470cc9f47892f7a4139ae (diff) | |
download | gcc-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.cc | 6 |
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, |