re PR tree-optimization/25501 (Segfault)

gcc/
	PR tree-optimization/25501
	* tree-cfgcleanup.c (merge_phi_nodes): Check that RESULT is
	used in the PHI argument corresponding to the edge from BB to
	DEST.

gcc/testsuite/
	PR tree-optimization/25501
	* testsuite/gcc.dg/tree-ssa/pr25501.c: New.

From-SVN: r108853
This commit is contained in:
Kazu Hirata 2005-12-20 14:47:07 +00:00 committed by Kazu Hirata
parent bd989e4c10
commit 338b5886ea
4 changed files with 51 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2005-12-20 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25501
* tree-cfgcleanup.c (merge_phi_nodes): Check that RESULT is
used in the PHI argument corresponding to the edge from BB to
DEST.
2005-12-20 Richard Guenther <rguenther@suse.de>
Revert

View File

@ -1,3 +1,8 @@
2005-12-20 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25501
* testsuite/gcc.dg/tree-ssa/pr25501.c: New.
2005-12-20 Richard Guenther <rguenther@suse.de>
Revert

View File

@ -0,0 +1,36 @@
/* PR tree-optimization/25501
The PHI merge pass used to try to merge PHI nodes that cannot
actually merged, causing a segfault later. Make sure that does not
happen any more. */
/* { dg-options "-O1 -fdump-tree-mergephi" } */
int
foo (int a)
{
int b;
int c;
int d;
if (a == 2)
b = 3;
else
b = 5;
c = 7;
d = 11;
for (;;)
{
if (d == 5)
break;
d = b;
}
return 13;
}
/* { dg-final { scan-tree-dump-times "Removing basic block" 0 "mergephi"} } */
/* { dg-final { cleanup-tree-dump "mergephi" } } */

View File

@ -746,6 +746,7 @@ merge_phi_nodes (void)
else
{
tree phi;
unsigned int dest_idx = single_succ_edge (bb)->dest_idx;
/* BB dominates DEST. There may be many users of the PHI
nodes in BB. However, there is still a trivial case we
@ -767,7 +768,8 @@ merge_phi_nodes (void)
/* Get the single use of the result of this PHI node. */
if (!single_imm_use (result, &imm_use, &use_stmt)
|| TREE_CODE (use_stmt) != PHI_NODE
|| bb_for_stmt (use_stmt) != dest)
|| bb_for_stmt (use_stmt) != dest
|| PHI_ARG_DEF (use_stmt, dest_idx) != result)
break;
}