diff options
author | Richard Guenther <rguenther@suse.de> | 2012-08-20 10:26:45 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-08-20 10:26:45 +0000 |
commit | 491e0b9b0cfcf89ef51ecc5fb089618a6fb3c0bd (patch) | |
tree | 2313d187571808a912081c266c3a4d5315ed86ea /gcc | |
parent | 081db96050b57d83e0f82bd74c3a22cf7b93c2ed (diff) | |
download | gcc-491e0b9b0cfcf89ef51ecc5fb089618a6fb3c0bd.zip gcc-491e0b9b0cfcf89ef51ecc5fb089618a6fb3c0bd.tar.gz gcc-491e0b9b0cfcf89ef51ecc5fb089618a6fb3c0bd.tar.bz2 |
re PR middle-end/54327 (Segmentation fault in init_ggc)
2012-08-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54327
* gimple-fold.c (get_maxval_strlen): Do not walk use-def chains
if the use is registered for SSA update.
* gcc.dg/torture/pr54327.c: New testcase.
From-SVN: r190528
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr54327.c | 15 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04c1dfa..c33069a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-08-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/54327 + * gimple-fold.c (get_maxval_strlen): Do not walk use-def chains + if the use is registered for SSA update. + 2012-08-20 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/54321 diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index d708c80..19a259e 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -736,6 +736,11 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type) return true; } + /* If ARG is registered for SSA update we cannot look at its defining + statement. */ + if (name_registered_for_update_p (arg)) + return false; + /* If we were already here, break the infinite cycle. */ if (!bitmap_set_bit (visited, SSA_NAME_VERSION (arg))) return true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3ef6c94..ba0b5b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-08-20 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/54327 + * gcc.dg/torture/pr54327.c: New testcase. + 2012-08-20 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/54321 diff --git a/gcc/testsuite/gcc.dg/torture/pr54327.c b/gcc/testsuite/gcc.dg/torture/pr54327.c new file mode 100644 index 0000000..fe7499a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr54327.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + +#include <string.h> +#include <stdlib.h> +void treathead () +{ + char *a = ';' == '\0' ? : 0; + if (*a == '=') + { + while (*a == (*a == 0) || *a == '\'') + a++; + if (strlen (a) < 2) + abort (); + } +} |