From: Andrew Pinski Date: Tue, 2 Nov 2004 16:38:18 +0000 (+0000) Subject: re PR tree-optimization/16808 (verify_ssa failed: Missing definition for SSA_NAME) X-Git-Tag: releases/gcc-4.0.0~3485 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da1f8963a30010de04639b0732f05f0d60432c1e;p=thirdparty%2Fgcc.git re PR tree-optimization/16808 (verify_ssa failed: Missing definition for SSA_NAME) 2004-11-02 Andrew Pinski PR tree-opt/16808 * gcc.c-torture/compile/pr16808.c: New test. 2004-11-02 Andrew Pinski PR tree-opt/16808 * tree-ssa.c (replace_immediate_uses): If we call fold_stmt, make sure that the vops get marked for renaming. From-SVN: r89990 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3ef271a0fe1..00dc1027ea9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-02 Andrew Pinski + + PR tree-opt/16808 + * tree-ssa.c (replace_immediate_uses): If we call fold_stmt, make sure + that the vops get marked for renaming. + 2004-11-02 Andreas Krebbel * config/s390/s390.md ("movcc"): Set type attribute. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 296b5c689bd9..4fea20658781 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-11-02 Andrew Pinski + + PR tree-opt/16808 + * gcc.c-torture/compile/pr16808.c: New test. + 2004-11-02 Nathan Sidwell PR rtl-optimization/17104 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr16808.c b/gcc/testsuite/gcc.c-torture/compile/pr16808.c new file mode 100644 index 000000000000..28527de5db13 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr16808.c @@ -0,0 +1,38 @@ +/* We used to ICE as we did not mark a Vop for rename as + we changed a function call to a normal modify statement + while folding exp(0.0); */ + +double exp(double); +void f0(void); +void f(double); +typedef struct Parser { + int x; + char *s; +} Parser; +static double pop(Parser *p) { + if (p->s[0] <= 0) { + f0(); + return 0; + } + --p->x; + return 0; +} +static void evalFactor(Parser *p) { + while (p->x) + f(exp(pop(p))); +} +static void evalTerm(Parser *p) { + while (p->s[0]) + evalFactor(p); +} +static void evalExpression(Parser *p) { + evalTerm(p); + while (p->s[0]) + evalTerm(p); +} +void evalPrimary(Parser *p) { + if (p->s) + return; + evalExpression(p); +} + diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 3ba15ee3c1cc..8002565d3437 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1124,6 +1124,7 @@ replace_immediate_uses (tree var, tree repl) { tree tmp = stmt; fold_stmt (&tmp); + mark_new_vars = true; if (tmp != stmt) { block_stmt_iterator si = bsi_for_stmt (stmt);