From 2f067d147ab537bf949c89cdb977095db38ff511 Mon Sep 17 00:00:00 2001 From: law Date: Fri, 24 Mar 2006 23:21:27 +0000 Subject: [PATCH] * tree-ssa-dom.c (propagate_rhs_into_lhs): Don't call update_stmt directly. Call mark_new_vars_to_rename slightly earlier. * gcc.c-torture/pr26840.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112365 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 ++++ gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.c-torture/compile/pr26840.c | 42 +++++++++++++++++++++++++++ gcc/tree-ssa-dom.c | 10 +++---- 4 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr26840.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cdb1fdcaa82..51a9ae858c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-03-24 Jeff Law + + * tree-ssa-dom.c (propagate_rhs_into_lhs): Don't call update_stmt + directly. Call mark_new_vars_to_rename slightly earlier. + 2006-03-24 Geoffrey Keating PR 26793 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6857acec979..c7daaebf205 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-03-24 Jeff Law + + * gcc.c-torture/pr26840.c: New test. + 2006-03-24 Geoffrey Keating * g++.old-deja/g++.other/init19.C: New. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr26840.c b/gcc/testsuite/gcc.c-torture/compile/pr26840.c new file mode 100644 index 00000000000..8d864a295d8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr26840.c @@ -0,0 +1,42 @@ +extern int f1 (void **); +extern void f2 (void *); + +struct s +{ + unsigned char field1; + int field2; +}; + +static inline struct s * +get_globals (void) +{ + struct s * r; + void * rr; + + if (f1 (&rr)) + return 0; + r = rr; + if (! r) + { + extern struct s t; + r = &t; + } + r->field1 = 1; + return r; +} + +void +atexit_common (const void *dso) +{ + struct s *g = get_globals (); + + if (! g) + return; + if (g->field1) + { + g->field2 = 0; + f2 (g); + } + else + f2 (g); +} diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 9df59e9dc52..db9f873669e 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2160,7 +2160,11 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names) collapse control statements. */ propagate_value (use_p, rhs); fold_stmt_inplace (use_stmt); - update_stmt (use_stmt); + + /* Sometimes propagation can expose new operands to the + renamer. Note this will call update_stmt at the + appropriate time. */ + mark_new_vars_to_rename (use_stmt); /* Dump details. */ if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2170,10 +2174,6 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names) fprintf (dump_file, "\n"); } - /* Sometimes propagation can expose new operands to the - renamer. */ - mark_new_vars_to_rename (use_stmt); - /* If we replaced a variable index with a constant, then we would need to update the invariant flag for ADDR_EXPRs. */ if (TREE_CODE (use_stmt) == MODIFY_EXPR -- 2.11.0