aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2005-07-13 14:42:16 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2005-07-13 14:42:16 +0000
commit3cb005cf5bc536c0be668c87ead9849eaa74457b (patch)
tree09057ca2cd80f841761f051ea6eb5f45fb5fa167 /gcc
parent5c3b86aff6041b487f09fe9c4aef6c34034ccd84 (diff)
downloadgcc-3cb005cf5bc536c0be668c87ead9849eaa74457b.zip
gcc-3cb005cf5bc536c0be668c87ead9849eaa74457b.tar.gz
gcc-3cb005cf5bc536c0be668c87ead9849eaa74457b.tar.bz2
re PR tree-optimization/21921 (internal compiler error: in tsi_link_before, at tree-iterator.c:113)
ChangeLog: 2005-07-13 Paolo Bonzini <bonzini@gnu.org> PR tree-optimization/21921 * tree-iterator.c (tsi_link_before): Support the case when tsi_end_p (tsi) == true. testsuite/ChangeLog: 2005-07-13 Paolo Bonzini <bonzini@gnu.org> PR tree-optimization/21921 * gcc.dg/tree-ssa/pr21921.c: New. From-SVN: r101970
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr21921.c14
-rw-r--r--gcc/tree-iterator.c8
4 files changed, 30 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dd21fc9..b5adb7d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-13 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/21921
+ * tree-iterator.c (tsi_link_before): Support the case when
+ tsi_end_p (tsi) == true.
+
2005-07-12 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/22442
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a2c26ce..ebc793e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-07-13 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/21921
+ * gcc.dg/tree-ssa/pr21921.c: New.
+
2005-07-12 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimizatio/22442
diff --git a/gcc/testsuite/gcc.dg/pr21921.c b/gcc/testsuite/gcc.dg/pr21921.c
new file mode 100644
index 0000000..d6a8a2a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr21921.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -funsafe-math-optimizations" } */
+
+void
+Q (double *s, double h)
+{
+ int i;
+ if (h > 1)
+ h = h - 1;
+
+ for (i = 1; i < 3; i++)
+ if (s[i] / h > 0)
+ s[0] = h, s[i] = s[i] / h;
+}
diff --git a/gcc/tree-iterator.c b/gcc/tree-iterator.c
index 7913bda..3c2acd3 100644
--- a/gcc/tree-iterator.c
+++ b/gcc/tree-iterator.c
@@ -110,8 +110,11 @@ tsi_link_before (tree_stmt_iterator *i, tree t, enum tsi_iterator_update mode)
}
else
{
- gcc_assert (!STATEMENT_LIST_TAIL (i->container));
- STATEMENT_LIST_HEAD (i->container) = head;
+ head->prev = STATEMENT_LIST_TAIL (i->container);
+ if (head->prev)
+ head->prev->next = head;
+ else
+ STATEMENT_LIST_HEAD (i->container) = head;
STATEMENT_LIST_TAIL (i->container) = tail;
}
@@ -127,7 +130,6 @@ tsi_link_before (tree_stmt_iterator *i, tree t, enum tsi_iterator_update mode)
i->ptr = tail;
break;
case TSI_SAME_STMT:
- gcc_assert (cur);
break;
}
}