aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-08-20 10:26:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-08-20 10:26:45 +0000
commit491e0b9b0cfcf89ef51ecc5fb089618a6fb3c0bd (patch)
tree2313d187571808a912081c266c3a4d5315ed86ea /gcc
parent081db96050b57d83e0f82bd74c3a22cf7b93c2ed (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/gimple-fold.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr54327.c15
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 ();
+ }
+}