From 386cfa6f3f1aeba33362f4f3717c2df2980ade6c Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 11 Oct 2005 15:11:02 +0000 Subject: [PATCH] re PR tree-optimization/23946 (ICE: verify_ssa failed ("definition ... follows the use")) 2005-10-11 Andrew Pinski PR tree-opt/23946 * gcc.c-torture/compile/pr23946.c: New test. 2005-10-11 Andrew Pinski PR tree-opt/23946 * tree-ssa-ccp.c (execute_fold_all_builtins): Call mark_new_vars_to_rename instead of update_stmt. From-SVN: r105239 --- gcc/ChangeLog | 6 ++ gcc/testsuite/ChangeLog | 5 ++ gcc/testsuite/gcc.c-torture/compile/pr23946.c | 72 +++++++++++++++++++ gcc/tree-ssa-ccp.c | 2 +- 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr23946.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e1b2fca0725..c4c063b3958 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-10-11 Andrew Pinski + + PR tree-opt/23946 + * tree-ssa-ccp.c (execute_fold_all_builtins): Call + mark_new_vars_to_rename instead of update_stmt. + 2005-10-11 Bernd Schmidt * config/bfin/crti.s (__init, __fini): Renamed from _init, _fini. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8ebe56ea235..96a21e9d986 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-11 Andrew Pinski + + PR tree-opt/23946 + * gcc.c-torture/compile/pr23946.c: New test. + 2005-10-11 Jakub Jelinek * g++.dg/opt/mmx2.C: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr23946.c b/gcc/testsuite/gcc.c-torture/compile/pr23946.c new file mode 100644 index 00000000000..ecaa5b1635c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr23946.c @@ -0,0 +1,72 @@ + +extern int foo (void); + +int +avi_parse_comments (int fd, char *buf, int space_left) +{ + int len = 0, readlen = 0, k; + char *data, *c, *d; + + if (fd <= 0 || !buf || space_left <= 0) + return -1; + + memset (buf, 0, space_left); + + readlen = foo (); + if (!(data = malloc (readlen * sizeof (char) + 1))) + return -1; + + c = data; + space_left--; + + while (len < space_left) + { + if (!c || *c == '\0') + break; + else if (*c == 'I') + { + d = c + 4; + + k = 0; + while (d[k] != '\r' && d[k] != '\n' && d[k] != '\0') + ++k; + if (k >= space_left) + return len; + + + memcpy (buf + len, c, 4); + len += 4; + + + long2str (buf + len, k + 1); + len += 4; + + + memcpy (buf + len, d, k); + + *(buf + len + k + 1) = '\0'; + + + if ((k + 1) & 1) + { + k++; + *(buf + len + k + 1) = '\0'; + } + len += k + 1; + + + while (*c != '\n' && *c != '\0') + ++c; + if (*c != '\0') + ++c; + else + break; + + } + } + free (data); + + return len; +} + + diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 43b8129109b..e9e1c0b9e42 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2460,7 +2460,7 @@ execute_fold_all_builtins (void) gcc_assert (ok); } } - update_stmt (*stmtp); + mark_new_vars_to_rename (*stmtp); if (maybe_clean_or_replace_eh_stmt (old_stmt, *stmtp) && tree_purge_dead_eh_edges (bb)) cfg_changed = true; -- 2.30.2