Index: osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx
===================================================================
--- osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx      (revision 3534)
+++ osprey/ipa/main/analyze/ipa_nystrom_alias_analyzer.cxx      (working copy)
@@ -444,8 +444,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_GBL);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_GBL);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_GBL);
       // Mark a changed global as modified so that its outgoing edges
@@ -465,8 +468,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_HZ);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_HZ);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_HZ);
       // Mark a changed global as modified so that its outgoing edges
@@ -486,8 +492,11 @@
       if (pNode->checkFlags(CG_NODE_FLAGS_COLLAPSED)) {
         FmtAssert(pNode != pNode->parent(), ("Expecting a distinct parent "
                   "for COLLAPSED node: %d\n", pNode->id()));
-        change = cgNode->parent()->addPointsTo(
-                 ConstraintGraph::cgNode(pNode->collapsedParent()), CQ_DN);
+        ConstraintGraphNode* collapseParent =
+                             ConstraintGraph::cgNode(pNode->collapsedParent());
+        while (collapseParent->checkFlags(CG_NODE_FLAGS_COLLAPSED))
+          collapseParent = ConstraintGraph::cgNode(collapseParent->collapsedParent());
+        change = cgNode->parent()->addPointsTo(collapseParent, CQ_DN);
       } else
         change = cgNode->parent()->addPointsTo(pNode, CQ_DN);
       if (change && cgNode->parent()->cg() == globalCG()) {
