mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:50:50 +08:00
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:
parent
451f119935
commit
0675001e98
@ -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
|
||||
|
@ -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
|
||||
|
21
gcc/testsuite/gcc.dg/torture/pr64284.c
Normal file
21
gcc/testsuite/gcc.dg/torture/pr64284.c
Normal 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++;
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user