re PR tree-optimization/64284 (ICE: Segmentation fault)

2014-12-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/64284
	* tree-ssa-threadupdate.c (duplicate_seme_region): Mark
	the loop for removal if we copied the loop header.

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

From-SVN: r218733
This commit is contained in:
Richard Biener 2014-12-15 08:19:55 +00:00 committed by Richard Biener
parent 451f119935
commit 0675001e98
4 changed files with 36 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2014-12-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/64284
* tree-ssa-threadupdate.c (duplicate_seme_region): Mark
the loop for removal if we copied the loop header.
2014-12-14 Jan Hubicka <hubicka@ucw.cz>
* ipa.c (process_references): Fix conditoinal on flag_optimize

View File

@ -1,3 +1,8 @@
2014-12-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/64284
* gcc.dg/torture/pr64284.c: New testcase.
2014-12-14 Jan Hubicka <hubicka@ucw.cz>
PR ipa/61602

View File

@ -0,0 +1,21 @@
/* { dg-do compile } */
int *a;
int b;
int
fn1() {
enum { QSTRING } c = 0;
while (1) {
switch (*a) {
case '\'':
c = 0;
default:
switch (c)
case 0:
if (b)
return 0;
c = 1;
}
a++;
}
}

View File

@ -2364,7 +2364,7 @@ duplicate_seme_region (edge entry, edge exit,
basic_block *region_copy)
{
unsigned i;
bool free_region_copy = false, copying_header = false;
bool free_region_copy = false;
struct loop *loop = entry->dest->loop_father;
edge exit_copy;
edge redirected;
@ -2388,10 +2388,7 @@ duplicate_seme_region (edge entry, edge exit,
initialize_original_copy_tables ();
if (copying_header)
set_loop_copy (loop, loop_outer (loop));
else
set_loop_copy (loop, loop);
set_loop_copy (loop, loop);
if (!region_copy)
{
@ -2453,6 +2450,8 @@ duplicate_seme_region (edge entry, edge exit,
}
/* Redirect the entry and add the phi node arguments. */
if (entry->dest == loop->header)
mark_loop_for_removal (loop);
redirected = redirect_edge_and_branch (entry, get_bb_copy (entry->dest));
gcc_assert (redirected != NULL);
flush_pending_stmts (entry);