diff options
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index c47c65bd294..ff66bed4b03 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1182,8 +1182,10 @@ range_fold_binary_symbolics_p (value_range *vr, return true; } const range_operator *op = get_range_op_handler (vr, code, expr_type); - op->fold_range (*vr, expr_type, vr0->normalize_symbolics (), - vr1->normalize_symbolics ()); + value_range vr0_cst (*vr0), vr1_cst (*vr1); + vr0_cst.normalize_symbolics (); + vr1_cst.normalize_symbolics (); + op->fold_range (*vr, expr_type, vr0_cst, vr1_cst); return true; } return false; @@ -1217,8 +1219,9 @@ range_fold_unary_symbolics_p (value_range *vr, return true; } const range_operator *op = get_range_op_handler (vr, code, expr_type); - op->fold_range (*vr, expr_type, vr0->normalize_symbolics (), - value_range (expr_type)); + value_range vr0_cst (*vr0); + vr0_cst.normalize_symbolics (); + op->fold_range (*vr, expr_type, vr0_cst, value_range (expr_type)); return true; } return false; @@ -1245,8 +1248,9 @@ range_fold_binary_expr (value_range *vr, if (range_fold_binary_symbolics_p (vr, code, expr_type, &vr0, &vr1)) return; - op->fold_range (*vr, expr_type, vr0.normalize_addresses (), - vr1.normalize_addresses ()); + vr0.normalize_addresses (); + vr1.normalize_addresses (); + op->fold_range (*vr, expr_type, vr0, vr1); } /* Perform a unary operation on a range. */ @@ -1267,8 +1271,9 @@ range_fold_unary_expr (value_range *vr, if (range_fold_unary_symbolics_p (vr, code, expr_type, vr0)) return; - op->fold_range (*vr, expr_type, vr0->normalize_addresses (), - value_range (expr_type)); + value_range vr0_cst (*vr0); + vr0_cst.normalize_addresses (); + op->fold_range (*vr, expr_type, vr0_cst, value_range (expr_type)); } /* Given a COND_EXPR COND of the form 'V OP W', and an SSA name V, |