aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-vrp.cc')
-rw-r--r--gcc/tree-vrp.cc22
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
index ed881be..c3030a1 100644
--- a/gcc/tree-vrp.cc
+++ b/gcc/tree-vrp.cc
@@ -3739,16 +3739,18 @@ vrp_asserts::remove_range_assertions ()
&& all_imm_uses_in_stmt_or_feed_cond (var, stmt,
single_pred (bb)))
{
- /* We could use duplicate_ssa_name_range_info here
- instead of peeking inside SSA_NAME_RANGE_INFO,
- but the aforementioned asserts that the
- destination has no global range. This is
- slated for removal anyhow. */
- value_range r (TREE_TYPE (lhs),
- SSA_NAME_RANGE_INFO (lhs)->get_min (),
- SSA_NAME_RANGE_INFO (lhs)->get_max (),
- SSA_NAME_RANGE_TYPE (lhs));
- set_range_info (var, r);
+ if (SSA_NAME_RANGE_INFO (var))
+ {
+ /* ?? This is a minor wart exposing the
+ internals of SSA_NAME_RANGE_INFO in order
+ to maintain existing behavior. This is
+ because duplicate_ssa_name_range_info below
+ needs a NULL destination range. This is
+ all slated for removal... */
+ ggc_free (SSA_NAME_RANGE_INFO (var));
+ SSA_NAME_RANGE_INFO (var) = NULL;
+ }
+ duplicate_ssa_name_range_info (var, lhs);
maybe_set_nonzero_bits (single_pred_edge (bb), var);
}
}