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  <rguenther@suse.de>

	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: r175808
This commit is contained in:
Richard Guenther 2011-07-04 12:21:45 +00:00 committed by Richard Biener
parent 1363965228
commit 97ba76388e
4 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-07-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/49615
* tree-cfgcleanup.c (split_bbs_on_noreturn_calls): Fix
basic-block index check.
2011-06-30 Eric Botcazou <ebotcazou@adacore.com>
PR tree-optimization/49572

View File

@ -1,3 +1,8 @@
2011-07-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/49615
* g++.dg/torture/pr49615.C: New testcase.
2011-06-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/38752

View File

@ -0,0 +1,29 @@
/* { dg-do compile } */
/* { dg-options "-g" } */
template <class T>
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 (;;) { }
}

View File

@ -496,7 +496,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
|| last_stmt (bb) == stmt
|| !gimple_call_noreturn_p (stmt))