From 30f1e6dea0609f34691ac032407347ed89df69c0 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 4 Jul 2011 12:06:17 +0000 Subject: [PATCH] re PR tree-optimization/49615 (internal compiler error: verify_stmts failed / LHS in noreturn call with pointer-to-never-returning-member) 2011-07-04 Richard Guenther PR tree-optimization/49615 * tree-cfgcleanup.c (split_bbs_on_noreturn_calls): Fix basic-block index check. * g++.dg/torture/pr49615.C: New testcase. From-SVN: r175803 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/torture/pr49615.C | 29 ++++++++++++++++++++++++++ gcc/tree-cfgcleanup.c | 2 +- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr49615.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8c0dc9ac79c..2ef91ce3047 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-07-04 Richard Guenther + + PR tree-optimization/49615 + * tree-cfgcleanup.c (split_bbs_on_noreturn_calls): Fix + basic-block index check. + 2011-07-04 Georg-Johann Lay * longlong.h (count_leading_zeros, count_trailing_zeros, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 326ba5f8770..70806e1acfa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-04 Richard Guenther + + PR tree-optimization/49615 + * g++.dg/torture/pr49615.C: New testcase. + 2011-07-03 Ira Rosen PR tree-optimization/49610 diff --git a/gcc/testsuite/g++.dg/torture/pr49615.C b/gcc/testsuite/g++.dg/torture/pr49615.C new file mode 100644 index 00000000000..98a2f95b8b3 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr49615.C @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-g" } */ + +template +static inline bool Dispatch (T* obj, void (T::*func) ()) +{ + (obj->*func) (); +} +class C +{ + bool f (int); + void g (); +}; +bool C::f (int n) +{ + bool b; + switch (n) + { + case 0: + b = Dispatch (this, &C::g); + case 1: + b = Dispatch (this, &C::g); + } +} +void C::g () +{ + for (;;) { } +} + diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 1036e1e98f3..0c8c0852024 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -599,7 +599,7 @@ split_bbs_on_noreturn_calls (void) BB is present in the cfg. */ if (bb == NULL || bb->index < NUM_FIXED_BLOCKS - || bb->index >= n_basic_blocks + || bb->index >= last_basic_block || BASIC_BLOCK (bb->index) != bb || !gimple_call_noreturn_p (stmt)) continue; -- 2.30.2