aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2009-12-06 15:59:52 -0800
committerRichard Henderson <rth@gcc.gnu.org>2009-12-06 15:59:52 -0800
commit6edde5450540dd4eb265631370cc63f1cc56492d (patch)
tree5f40c8e021feb3e4a02b64b03edcf7ed051a1c76
parenta15b72fa7f318ab4e2bbdaddc0735b1f2185ddd0 (diff)
downloadgcc-6edde5450540dd4eb265631370cc63f1cc56492d.zip
gcc-6edde5450540dd4eb265631370cc63f1cc56492d.tar.gz
gcc-6edde5450540dd4eb265631370cc63f1cc56492d.tar.bz2
re PR debug/42234 (internal compiler error: verify_ssa failed)
PR debug/42234 * tree-ssa-dom.c (degenerate_phi_result): Check for NULL phi argument earlier. From-SVN: r155025
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr42234.c14
-rw-r--r--gcc/tree-ssa-dom.c4
3 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f172477..d18f9f1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-06 Richard Henderson <rth@redhat.com>
+
+ PR debug/42234
+ * tree-ssa-dom.c (degenerate_phi_result): Check for NULL phi
+ argument earlier.
+
2009-12-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* doc/install.texi: Document MPC is required.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr42234.c b/gcc/testsuite/gcc.c-torture/compile/pr42234.c
new file mode 100644
index 0000000..81bec9d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr42234.c
@@ -0,0 +1,14 @@
+/* { dg-options "-g" } */
+
+void
+foo (int x)
+{
+ struct S { int s; } d = { 1 };
+ unsigned int e = 1;
+ if (x)
+ e = x && d.s;
+ else
+ for (e = 0; e <= 3; e--)
+ ;
+ e++;
+}
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index dd9fd56..48f423b 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -2396,6 +2396,8 @@ degenerate_phi_result (gimple phi)
if (arg == lhs)
continue;
+ else if (!arg)
+ break;
else if (!val)
val = arg;
else if (arg == val)
@@ -2403,7 +2405,7 @@ degenerate_phi_result (gimple phi)
/* We bring in some of operand_equal_p not only to speed things
up, but also to avoid crashing when dereferencing the type of
a released SSA name. */
- else if (!arg || TREE_CODE (val) != TREE_CODE (arg)
+ else if (TREE_CODE (val) != TREE_CODE (arg)
|| TREE_CODE (val) == SSA_NAME
|| !operand_equal_p (arg, val, 0))
break;