diff options
author | Richard Guenther <rguenther@suse.de> | 2009-04-29 10:39:26 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-04-29 10:39:26 +0000 |
commit | de0b4ad5451aa82edae1d13c6424194e101e437b (patch) | |
tree | 76da54c7352e0b986776bba609efd66082fbd4e6 | |
parent | 3a19701a09db9a65dd41b6085e4a445d350b2a87 (diff) | |
download | gcc-de0b4ad5451aa82edae1d13c6424194e101e437b.zip gcc-de0b4ad5451aa82edae1d13c6424194e101e437b.tar.gz gcc-de0b4ad5451aa82edae1d13c6424194e101e437b.tar.bz2 |
re PR middle-end/39941 (ice in passes.c:execute_todo())
2009-04-29 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39941
* tree-ssa-pre.c (eliminate): Schedule update-ssa after
eliminating an indirect call.
* gcc.c-torture/compile/pr39941.c: New testcase.
From-SVN: r146948
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr39941.c | 12 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 5 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6e64b9..149e083 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2009-04-29 Richard Guenther <rguenther@suse.de> + PR tree-optimization/39941 + * tree-ssa-pre.c (eliminate): Schedule update-ssa after + eliminating an indirect call. + +2009-04-29 Richard Guenther <rguenther@suse.de> + * tree-cfg.c (verify_types_in_gimple_reference): Add require_lvalue parameter. Allow invariants as base if !require_lvalue. (verify_gimple_assign_single): Adjust. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd54a30..4533e4b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-29 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/39941 + * gcc.c-torture/compile/pr39941.c: New testcase. + 2009-04-29 Bernd Schmidt <bernd.schmidt@analog.com> * gcc.target/bfin/20090411-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39941.c b/gcc/testsuite/gcc.c-torture/compile/pr39941.c new file mode 100644 index 0000000..b620908 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr39941.c @@ -0,0 +1,12 @@ +typedef void (*entry_func) (void) __attribute__ ((noreturn)); +extern entry_func entry_addr; +static void bsd_boot_entry (void) +{ + stop (); +} +void bsd_boot (void) +{ + entry_addr = (entry_func) bsd_boot_entry; + (*entry_addr) (); +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 61207b2..11b88ed 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4131,6 +4131,11 @@ eliminate (void) update_stmt (stmt); if (maybe_clean_or_replace_eh_stmt (stmt, stmt)) gimple_purge_dead_eh_edges (b); + + /* Changing an indirect call to a direct call may + have exposed different semantics. This may + require an SSA update. */ + todo |= TODO_update_ssa; } } } |