re PR tree-optimization/56501 (gcc 4.6 ICE on noreturn function at -Os and above)

2013-04-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/56501
	* tree-switch-conversion.c (check_process_case): Properly
	handle !single_succ_p case.

	* gcc.dg/torture/pr56501.c: New testcase.

From-SVN: r197405
This commit is contained in:
Richard Biener 2013-04-03 12:02:56 +00:00 committed by Richard Biener
parent 71855a6aea
commit 1661e2108b
4 changed files with 44 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2013-04-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/56501
* tree-switch-conversion.c (check_process_case): Properly
handle !single_succ_p case.
2013-04-03 Jakub Jelinek <jakub@redhat.com>
Backported from mainline

View File

@ -1,3 +1,8 @@
2013-04-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/56501
* gcc.dg/torture/pr56501.c: New testcase.
2013-04-03 Tobias Burnus <burnus@net-b.de>
Backport from mainline:

View File

@ -0,0 +1,27 @@
/* { dg-do compile } */
/* { dg-options "-w" } */
int a;
void try_help () __attribute__ ((__noreturn__));
void try_help ()
{
}
int main ()
{
switch (a)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
break;
default:
try_help ();
}
}

View File

@ -283,7 +283,12 @@ check_process_case (tree cs)
return false;
}
e = single_succ_edge (label_bb);
if (!single_succ_p (label_bb))
{
info.reason
= " Bad case - a non-final BB without a single successor\n";
return false;
}
following_bb = single_succ (label_bb);
}