summaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r--gcc/tree-vrp.c21
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,