change global sweep to shrink reachability sets rather than trash them
authorjjenista <jjenista>
Wed, 4 Mar 2009 00:50:30 +0000 (00:50 +0000)
committerjjenista <jjenista>
Wed, 4 Mar 2009 00:50:30 +0000 (00:50 +0000)
Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java
Robust/src/Tests/OwnershipAnalysisTest/test05/test.java

index 6af319cb8ff21c10d1c692bb7d5ffa5a7436565c..ce1a386661a1afbab7fa0f8a05e2b5e256770f73 100644 (file)
@@ -2184,8 +2184,12 @@ public class OwnershipGraph {
       Iterator<ReferenceEdge> itrRes = hrn.iteratorToReferencers();
       while( itrRes.hasNext() ) {
        ReferenceEdge edge = itrRes.next();
-       if( edge.getBeta().containsWithZeroes( tts ) && 
-           !edge.getBetaNew().contains( tts ) ) {
+
+       if( (edge.getBeta().containsWithZeroes( tts ) ||
+            edge.getBeta().containsSuperSet  ( tts )   
+           ) && 
+           !edge.getBetaNew().contains( tts )                 ) {
+
          // okay, this is a valid propagation, and add to the
          // work set to further propagate it
          edge.setBetaNew( edge.getBetaNew().union( tts ) );
index b1fc0d65218d15cbaf559f76f76cdff3049838f2..a99a20b4455c8e0687bd70fc627ab58ec83fd061 100644 (file)
@@ -25,6 +25,7 @@ public class Test {
     X z;
     Y y;
     Y a;
+    X b = new X();
     Y g = new Y();
 
     x=disjoint X new X();
@@ -32,6 +33,7 @@ public class Test {
     x.f=y;
     z=x;
     a=z.f;
+    b.f=a;
     x.f=g;
   }
 }