summaryrefslogtreecommitdiff
path: root/gcc/et-forest.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@kam.uniff.cz>2010-10-14 09:08:45 +0200
committerAndrey Belevantsev <abel@gcc.gnu.org>2010-10-14 11:08:45 +0400
commitd2e60b7bc2c690b1572072dcac73fbdcc8b15677 (patch)
tree2daf4a110eab8df41f750f62efd0d842360f7b19 /gcc/et-forest.c
parent854edfcda4850b557f249c655ca1af5eef2cc1cc (diff)
et-forest.c (et_nca): Return NULL immediately when the dominance forest has disjoint components.
2010-10-14 Zdenek Dvorak <rakdver@kam.uniff.cz> * et-forest.c (et_nca): Return NULL immediately when the dominance forest has disjoint components. From-SVN: r165451
Diffstat (limited to 'gcc/et-forest.c')
-rw-r--r--gcc/et-forest.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/et-forest.c b/gcc/et-forest.c
index c15b6d8f2c3..94757c0afa9 100644
--- a/gcc/et-forest.c
+++ b/gcc/et-forest.c
@@ -661,7 +661,7 @@ et_nca (struct et_node *n1, struct et_node *n2)
if (r)
r->parent = o1;
}
- else
+ else if (r == o2 || (r && r->parent != NULL))
{
ret = o2->prev;
@@ -669,6 +669,15 @@ et_nca (struct et_node *n1, struct et_node *n2)
if (l)
l->parent = o1;
}
+ else
+ {
+ /* O1 and O2 are in different components of the forest. */
+ if (l)
+ l->parent = o1;
+ if (r)
+ r->parent = o1;
+ return NULL;
+ }
if (0 < o2->depth)
{