From: rguenth Date: Wed, 29 Apr 2009 10:39:26 +0000 (+0000) Subject: 2009-04-29 Richard Guenther X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=86cf57b9cdb2979f0f96645567a9dca8ccb34bf7;p=thirdparty%2Fgcc.git 2009-04-29 Richard Guenther 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146948 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6e64b92fd2b..149e083d967f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-29 Richard Guenther + + PR tree-optimization/39941 + * tree-ssa-pre.c (eliminate): Schedule update-ssa after + eliminating an indirect call. + 2009-04-29 Richard Guenther * tree-cfg.c (verify_types_in_gimple_reference): Add require_lvalue diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd54a302f243..4533e4b1a332 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-29 Richard Guenther + + PR tree-optimization/39941 + * gcc.c-torture/compile/pr39941.c: New testcase. + 2009-04-29 Bernd Schmidt * 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 000000000000..b6209086be92 --- /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 61207b2f849c..11b88eddc36a 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; } } }