re PR bootstrap/56689 (internal compiler error: in get_loop_body, at cfgloop.c:841)

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

	PR tree-optimization/56689
	* tree-vrp.c (execute_vrp): Mark loops for fixup if we removed
	any edge.

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

From-SVN: r197039
This commit is contained in:
Richard Biener 2013-03-25 12:54:56 +00:00 committed by Richard Biener
parent 374001cbee
commit 051b944668
4 changed files with 62 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2013-03-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/56689
* tree-vrp.c (execute_vrp): Mark loops for fixup if we removed
any edge.
2013-03-25 Richard Biener <rguenther@suse.de>
* tree-ssa-loop-im.c (struct mem_ref): Use bitmap_head instead

View File

@ -1,3 +1,8 @@
2013-03-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/56689
* gcc.dg/torture/pr56689.c: New testcase.
2013-03-25 Kai Tietz <ktietz@redhat.com>
* g++.dg/torture/20121105-1.C: Adjust for LLP64 targets.

View File

@ -0,0 +1,46 @@
/* { dg-do compile } */
extern int baz ();
extern void bar (void);
extern void noret (void) __attribute__ ((__noreturn__));
void
fix_register (const char *name, int fixed, int call_used, int nregs)
{
int i;
int reg;
if ((reg = baz ()) >= 0)
{
for (i = reg; i < nregs; i++)
{
if ((i == 15 || i == 11) && (fixed == 0 || call_used == 0))
{
switch (fixed)
{
case 0:
switch (call_used)
{
case 1:
bar ();
break;
default:
(noret ());
}
case 1:
switch (call_used)
{
case 1:
break;
case 0:
default:
(noret ());
}
break;
default:
(noret ());
}
}
}
}
}

View File

@ -9329,7 +9329,11 @@ execute_vrp (void)
}
if (to_remove_edges.length () > 0)
free_dominance_info (CDI_DOMINATORS);
{
free_dominance_info (CDI_DOMINATORS);
if (current_loops)
loops_state_set (LOOPS_NEED_FIXUP);
}
to_remove_edges.release ();
to_update_switch_stmts.release ();