summaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/et-forest.c11
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cb07b23752f..d567d60c55e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2010-10-14 Zdenek Dvorak <rakdver@kam.uniff.cz>
+ * et-forest.c (et_nca): Return NULL immediately when
+ the dominance forest has disjoint components.
+
2010-10-13 Vladimir Makarov <vmakarov@redhat.com>
* ira.c (setup_class_hard_regs): Fix typo in indexing
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)
{