diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-01-25 20:50:56 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-01-25 20:50:56 +0100 |
commit | 6bdfdb96eeec5da99a6aa4ca592af1d6b9cef237 (patch) | |
tree | c3bf33476cd79def86c5357582c9dcc5d72f16bb /gcc | |
parent | 6be7b6686fa5ad8be50dd578a05dfd0f6d478353 (diff) | |
download | gcc-6bdfdb96eeec5da99a6aa4ca592af1d6b9cef237.zip gcc-6bdfdb96eeec5da99a6aa4ca592af1d6b9cef237.tar.gz gcc-6bdfdb96eeec5da99a6aa4ca592af1d6b9cef237.tar.bz2 |
re PR tree-optimization/47265 (Error: SSA name in freelist but still referenced)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr47265.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr47443.c | 14 | ||||
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 4 |
5 files changed, 50 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39b8d44..6e1c8f5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b23f02d..24fbc0b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..183c3f9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr47265.c @@ -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 index 0000000..fa7d6b9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr47443.c @@ -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)); +} diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 64c8e88..ee12e40 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -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 |