]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/47265 (Error: SSA name in freelist but still referenced)
authorJakub Jelinek <jakub@redhat.com>
Tue, 25 Jan 2011 19:50:56 +0000 (20:50 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 25 Jan 2011 19:50:56 +0000 (20:50 +0100)
PR tree-optimization/47265
PR tree-optimization/47443
* tree-ssa-forwprop.c (forward_propagate_addr_expr): Return false
if name still has some uses.

* gcc.c-torture/compile/pr47265.c: New test.
* gcc.dg/pr47443.c: New test.

From-SVN: r169250

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr47265.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr47443.c [new file with mode: 0644]
gcc/tree-ssa-forwprop.c

index 39b8d441cc5c9e47962ba08a1a9d3e570e6a5a44..6e1c8f5cd807f0468b334b05baa450b3cb5c0320 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/47265
+       PR tree-optimization/47443
+       * tree-ssa-forwprop.c (forward_propagate_addr_expr): Return false
+       if name still has some uses.
+
 2011-01-25  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/47382
index b23f02dd465fccc1758f52c008c2a6a4b1d84d39..24fbc0bba063e1dc3840a966ad3b2709359e0aa4 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/47265
+       PR tree-optimization/47443
+       * gcc.c-torture/compile/pr47265.c: New test.
+       * gcc.dg/pr47443.c: New test.
+
 2011-01-25  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/47382
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr47265.c b/gcc/testsuite/gcc.c-torture/compile/pr47265.c
new file mode 100644 (file)
index 0000000..183c3f9
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR tree-optimization/47265 */
+
+struct S
+{
+  char a[3];
+  char b[3];
+};
+
+void
+bar (char *dst, const char *src, unsigned n)
+{
+  while (n--)
+    *dst++ = *src ? *src++ : ' ';
+}
+
+void
+foo (struct S *s)
+{
+  bar (s->a, s->b, 3);
+}
diff --git a/gcc/testsuite/gcc.dg/pr47443.c b/gcc/testsuite/gcc.dg/pr47443.c
new file mode 100644 (file)
index 0000000..fa7d6b9
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/47443 */
+/* { dg-do compile } */
+/* { dg-options "-O -fstack-check=generic" } */
+
+static inline bar (char *c, int i)
+{
+  return c + i > c;
+}
+
+int foo ()
+{
+  char c[100];
+  return (bar (c, 1));
+}
index 64c8e88e26e125b93a8db4c5223026bf5db71fa1..ee12e40c9722c2c36b5571e2526aafb2485da2ff 100644 (file)
@@ -1,5 +1,5 @@
 /* Forward propagation of expressions for single use variables.
-   Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010
+   Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -1114,7 +1114,7 @@ forward_propagate_addr_expr (tree name, tree rhs)
        }
     }
 
-  return all;
+  return all && has_zero_uses (name);
 }
 
 /* Forward propagate the comparison defined in STMT like