From da1f8963a30010de04639b0732f05f0d60432c1e Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 2 Nov 2004 16:38:18 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 +++ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gcc.c-torture/compile/pr16808.c | 38 +++++++++++++++++++ gcc/tree-ssa.c | 1 + 4 files changed, 50 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr16808.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e3ef271a0fe..00dc1027ea9 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 296b5c689bd..4fea2065878 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 00000000000..28527de5db1 --- /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 3ba15ee3c1c..8002565d343 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); -- 2.30.2