mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 21:07:30 +08:00
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:
parent
bd989e4c10
commit
338b5886ea
@ -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
|
||||
|
@ -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
|
||||
|
36
gcc/testsuite/gcc.dg/tree-ssa/pr25501.c
Normal file
36
gcc/testsuite/gcc.dg/tree-ssa/pr25501.c
Normal 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" } } */
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user