diff options
author | Jakub Jelinek <jakub@redhat.com> | 2004-09-29 11:04:21 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2004-09-29 11:04:21 +0200 |
commit | a7d6ba24118dc4ee5f4afc7c84bd52a0d5097f67 (patch) | |
tree | 2f7b3eee225a84af9a25b3a0d6f9d54711a3bb94 /gcc | |
parent | ac973acecf15e6c8830ce30c9a66f5c229417a2a (diff) | |
download | gcc-a7d6ba24118dc4ee5f4afc7c84bd52a0d5097f67.zip gcc-a7d6ba24118dc4ee5f4afc7c84bd52a0d5097f67.tar.gz gcc-a7d6ba24118dc4ee5f4afc7c84bd52a0d5097f67.tar.bz2 |
re PR tree-optimization/17697 (ICE: Statement marked for throw, but doesn't - verify_stmts failed)
PR tree-optimization/17697
* tree-ssa-ccp.c (execute_fold_all_builtins): Update eh and cleanup
cfg if needed.
* g++.dg/opt/pr17697-1.C: New test.
* g++.dg/opt/pr17697-2.C: New test.
* g++.dg/opt/pr17697-3.C: New test.
From-SVN: r88277
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr17697-1.C | 32 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr17697-2.C | 32 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr17697-3.C | 28 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 8 |
6 files changed, 113 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95c7d04..96721da 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-09-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/17697 + * tree-ssa-ccp.c (execute_fold_all_builtins): Update eh and cleanup + cfg if needed. + 2004-09-28 Per Bothner <per@bothner.com> * profile.c (branch_prob): Pass correct value to output_location, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1b59e73..dd80cf5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2004-09-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/17697 + * g++.dg/opt/pr17697-1.C: New test. + * g++.dg/opt/pr17697-2.C: New test. + * g++.dg/opt/pr17697-3.C: New test. + 2004-09-28 Joseph S. Myers <jsm@polyomino.org.uk> PR c/16409 diff --git a/gcc/testsuite/g++.dg/opt/pr17697-1.C b/gcc/testsuite/g++.dg/opt/pr17697-1.C new file mode 100644 index 0000000..0e2f671 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr17697-1.C @@ -0,0 +1,32 @@ +// PR tree-optimization/17697 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" +{ + extern int strcmp (const char *s, const char *t) throw () + __attribute__ ((pure)); +} + +namespace A +{ + extern int strcmp (const char *s, const char *t); +} + +inline int +A::strcmp (const char *s, const char *t) +{ + return ::strcmp (s, t); +} + +int +foo (char *x) throw () +{ + return A::strcmp ("", x); +} + +int +main () +{ + return foo ("") != 0 || foo ("a") == 0; +} diff --git a/gcc/testsuite/g++.dg/opt/pr17697-2.C b/gcc/testsuite/g++.dg/opt/pr17697-2.C new file mode 100644 index 0000000..11def66 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr17697-2.C @@ -0,0 +1,32 @@ +// PR tree-optimization/17697 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" +{ + extern int strcmp (const char *s, const char *t) throw () + __attribute__ ((pure)); +} + +namespace A +{ + extern int strcmp (const char *s, const char *t) throw (); +} + +inline int +A::strcmp (const char *s, const char *t) throw () +{ + return ::strcmp (s, t); +} + +int +foo (char *x) throw () +{ + return A::strcmp ("", x); +} + +int +main () +{ + return foo ("") != 0 || foo ("a") == 0; +} diff --git a/gcc/testsuite/g++.dg/opt/pr17697-3.C b/gcc/testsuite/g++.dg/opt/pr17697-3.C new file mode 100644 index 0000000..b1369d1 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr17697-3.C @@ -0,0 +1,28 @@ +// PR tree-optimization/17697 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" extern int strcmp (const char *s, const char *t); + +namespace A +{ + extern int strcmp (const char *s, const char *t); +} + +inline int +A::strcmp (const char *s, const char *t) +{ + return ::strcmp (s, t); +} + +int +foo (char *x) +{ + return A::strcmp ("", x); +} + +int +main () +{ + return foo ("") != 0 || foo ("a") == 0; +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index d3ad956..3e8fa7b 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2143,6 +2143,7 @@ convert_to_gimple_builtin (block_stmt_iterator *si_p, tree expr) static void execute_fold_all_builtins (void) { + bool cfg_changed = false; basic_block bb; FOR_EACH_BB (bb) { @@ -2187,6 +2188,9 @@ execute_fold_all_builtins (void) abort (); } modify_stmt (*stmtp); + if (maybe_clean_eh_stmt (*stmtp) + && tree_purge_dead_eh_edges (bb)) + cfg_changed = true; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -2196,6 +2200,10 @@ execute_fold_all_builtins (void) } } } + + /* Delete unreachable blocks. */ + if (cfg_changed) + cleanup_tree_cfg (); } |