re PR tree-optimization/53163 (crash due to null ptr deref)
PR tree-optimization/53163 * tree-ssa-phiopt.c (cond_if_else_store_replacement): Don't ignore return value from compute_all_dependences. * gcc.c-torture/compile/pr53163.c: New test. From-SVN: r187038
This commit is contained in:
parent
6aae324cce
commit
795e8869fd
4 changed files with 52 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
2012-05-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/53163
|
||||
* tree-ssa-phiopt.c (cond_if_else_store_replacement): Don't ignore
|
||||
return value from compute_all_dependences.
|
||||
|
||||
PR rtl-optimization/53160
|
||||
* ree.c (combine_reaching_defs): Handle the case where cand->insn
|
||||
has been modified by ree pass already.
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2012-05-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/53163
|
||||
* gcc.c-torture/compile/pr53163.c: New test.
|
||||
|
||||
PR rtl-optimization/53160
|
||||
* gcc.c-torture/execute/pr53160.c: New test.
|
||||
|
||||
|
|
34
gcc/testsuite/gcc.c-torture/compile/pr53163.c
Normal file
34
gcc/testsuite/gcc.c-torture/compile/pr53163.c
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* PR tree-optimization/53163 */
|
||||
|
||||
struct S { int s; } b, f;
|
||||
int a, c;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
int d, e;
|
||||
for (d = 4; d < 19; ++d)
|
||||
for (e = 2; e >= 0; e--)
|
||||
{
|
||||
a = 0;
|
||||
a = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bar (void)
|
||||
{
|
||||
int g, h, i;
|
||||
for (i = 1; i >= 0; i--)
|
||||
{
|
||||
b = f;
|
||||
for (g = 0; g <= 1; g++)
|
||||
{
|
||||
if (c)
|
||||
break;
|
||||
for (h = 0; h <= 1; h++)
|
||||
foo ();
|
||||
foo ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1624,8 +1624,17 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
|
|||
/* Compute and check data dependencies in both basic blocks. */
|
||||
then_ddrs = VEC_alloc (ddr_p, heap, 1);
|
||||
else_ddrs = VEC_alloc (ddr_p, heap, 1);
|
||||
compute_all_dependences (then_datarefs, &then_ddrs, NULL, false);
|
||||
compute_all_dependences (else_datarefs, &else_ddrs, NULL, false);
|
||||
if (!compute_all_dependences (then_datarefs, &then_ddrs, NULL, false)
|
||||
|| !compute_all_dependences (else_datarefs, &else_ddrs, NULL, false))
|
||||
{
|
||||
free_dependence_relations (then_ddrs);
|
||||
free_dependence_relations (else_ddrs);
|
||||
free_data_refs (then_datarefs);
|
||||
free_data_refs (else_datarefs);
|
||||
VEC_free (gimple, heap, then_stores);
|
||||
VEC_free (gimple, heap, else_stores);
|
||||
return false;
|
||||
}
|
||||
blocks[0] = then_bb;
|
||||
blocks[1] = else_bb;
|
||||
blocks[2] = join_bb;
|
||||
|
|
Loading…
Add table
Reference in a new issue