aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77988.c24
-rw-r--r--gcc/tree-vrp.c10
4 files changed, 35 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b5e6528..86df616 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-17 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77988
+ * tree-vrp.c (remove_range_assertions): Use replace_uses_by.
+
2016-10-17 Marek Polacek <polacek@redhat.com>
* Makefile.in (C_COMMON_OBJS): Add c-family/c-attribs.o.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b99ce7b..e73fcf5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-17 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77988
+ * gcc.dg/torture/pr77988.c: New testcase.
+
2016-10-17 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
* gcc.dg/pr71636-1.c: New test-case.
diff --git a/gcc/testsuite/gcc.dg/torture/pr77988.c b/gcc/testsuite/gcc.dg/torture/pr77988.c
new file mode 100644
index 0000000..9db6b9c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77988.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+static int a = 2;
+int b[1], c, d;
+
+int main ()
+{
+ int e = a, *f = &b[0];
+ if (d)
+ for (e = 0; e < 1; e++)
+ ;
+ if (e)
+ {
+L1:
+ if (b < f)
+ __builtin_abort ();
+ if (*f)
+ c++;
+ return 0;
+ }
+ f = 0;
+ goto L1;
+ return 0;
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 00a08fd..1aebc72 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -6882,7 +6882,6 @@ remove_range_assertions (void)
for (si = gsi_after_labels (bb), is_unreachable = -1; !gsi_end_p (si);)
{
gimple *stmt = gsi_stmt (si);
- gimple *use_stmt;
if (is_gimple_assign (stmt)
&& gimple_assign_rhs_code (stmt) == ASSERT_EXPR)
@@ -6890,8 +6889,6 @@ remove_range_assertions (void)
tree lhs = gimple_assign_lhs (stmt);
tree rhs = gimple_assign_rhs1 (stmt);
tree var;
- use_operand_p use_p;
- imm_use_iterator iter;
var = ASSERT_EXPR_VAR (rhs);
@@ -6927,12 +6924,7 @@ remove_range_assertions (void)
}
/* Propagate the RHS into every use of the LHS. */
- FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
- {
- FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
- SET_USE (use_p, var);
- update_stmt (use_stmt);
- }
+ replace_uses_by (lhs, var);
/* And finally, remove the copy, it is not needed. */
gsi_remove (&si, true);