more bug fixes
authorbdemsky <bdemsky>
Fri, 18 Mar 2011 21:14:12 +0000 (21:14 +0000)
committerbdemsky <bdemsky>
Fri, 18 Mar 2011 21:14:12 +0000 (21:14 +0000)
Robust/src/Analysis/Disjoint/Canonical.java
Robust/src/Analysis/Disjoint/EffectsAnalysis.java
Robust/src/Analysis/Pointer/Delta.java
Robust/src/Analysis/Pointer/Edge.java
Robust/src/Analysis/Pointer/MySet.java
Robust/src/Analysis/Pointer/Pointer.java

index 3926b285e4547b37bcb501a7237e6a9bb508d205..60e9871158f5aeb4079d74984e57642a0f5e42e9 100644 (file)
@@ -1526,8 +1526,7 @@ abstract public class Canonical {
       // go through, anything where rblock doesn't match is
       // unaffected, and if the taint has a non-empty predicate
       // it is out of context so it should go through, too
-      if( t.getSESE() == null ||
-          t.getSESE()!=sese) {
+      if( t.getSESE()!=null && t.getSESE()!=sese) {
         out.taints.add( t );
       }
     }
index 64cc5df27cbe66e444d0e75ddd432221bb33ca39..42826e807d4e6503e8367d2d11db2d955553e579 100644 (file)
@@ -60,7 +60,6 @@ public class EffectsAnalysis {
   }
 
   protected void add(Taint t, Effect e, FlatNode currentProgramPoint) {
-
     Taint tNoPreds = Canonical.changePredsTo( t,
                                               ReachGraph.predsEmpty
                                               );
index 283161cc247cc5fb7f66aad89ac60859bbcedcac..7a94cb45b98fdb20e3f6f900e866de8925364354 100644 (file)
@@ -193,9 +193,9 @@ public class Delta {
   }
 
   public void addVarEdge(Edge e) {
-    if (!varedgeadd.containsKey(e.srcvar))
+    if (!varedgeadd.containsKey(e.srcvar)) {
       varedgeadd.put(e.srcvar, new MySet<Edge>(e));
-    else
+    else
       Edge.mergeEdgeInto(varedgeadd.get(e.srcvar), e);
   }
 
index c2e2a13846cb8202d5b76a8588abee4e549adcee..23342c2aa7f6146ccc2e1e2ad8eabcc9932b004b 100644 (file)
@@ -23,12 +23,15 @@ public class Edge {
   public static final int NEW=16;
 
   public String toString() {
+    String taintlist="";
+    if (taints!=null)
+      taintlist=", "+taints.toString();
     if (srcvar!=null)
-      return "<"+srcvar+", "+dst+">";
+      return "<"+srcvar+", "+dst+taintlist+">";
     else if (fd!=null)
-      return "<"+src+", "+statuspredicate+", "+fd+", "+dst+ ">";
+      return "<"+src+", "+statuspredicate+", "+fd+", "+dst+taintlist+ ">";
     else
-      return "<"+src+", "+statuspredicate+", [], "+dst+">";
+      return "<"+src+", "+statuspredicate+", [], "+dst+taintlist+">";
   }
 
   public static int mergeStatus(int stat1, int stat2) {
@@ -168,7 +171,7 @@ public class Edge {
       if (newe.taints==null)
        newe.taints=e.taints;
       else
-       newe.taints=newe.taints.merge(taints);
+       newe.taints=newe.taints.merge(e.taints);
     }
     return newe;
   }
index 172023154e7e37be7b3ecf63c46251b0d254c2f6..ee3537f24c3b17101e104ac089eb2aec58e02639 100644 (file)
@@ -41,7 +41,9 @@ public class MySet<T> extends AbstractSet<T> {
   public boolean add(T obj) {
     if (locked)
       throw new Error();
-    return map.put(obj, obj)==null;
+    boolean retval=map.remove(obj)==null;
+    map.put(obj, obj);
+    return retval;
   }
 
   public boolean contains(Object obj) {
index fbf43b2898715f401389dcd44aae8ee3450f6adc..0ba6759bf1e7f16bcc8a748e8f3e1505a5b52c63 100644 (file)
@@ -440,21 +440,25 @@ public class Pointer implements HeapAnalysis{
     if (delta.getInit()) {
       removeInitTaints(null, delta, graph);
       for (TempDescriptor tmp:sese.getInVarSet()) {
+       System.out.println("TMP variable:"+tmp);
        Taint taint=Taint.factory(sese,  null, tmp, AllocFactory.dummyNode, sese, ReachGraph.predsEmpty);
        MySet<Edge> edges=GraphManip.getEdges(graph, delta, tmp);
        for(Edge e:edges) {
          Edge newe=e.addTaint(taint);
          delta.addVarEdge(newe);
+         System.out.println("Adding Edge:"+newe);
        }
       }
     } else {
       removeDiffTaints(null, delta);
       for (TempDescriptor tmp:sese.getInVarSet()) {
+       System.out.println("TMP variable:"+tmp);
        Taint taint=Taint.factory(sese,  null, tmp, AllocFactory.dummyNode, sese, ReachGraph.predsEmpty);
        MySet<Edge> edges=GraphManip.getDiffEdges(delta, tmp);
        for(Edge e:edges) {
          Edge newe=e.addTaint(taint);
          delta.addVarEdge(newe);
+         System.out.println("DAdding Edge:"+newe);
        }
       }
     }
@@ -466,7 +470,8 @@ public class Pointer implements HeapAnalysis{
   
   private boolean isRecursive(FlatSESEEnterNode sese) {
     MethodDescriptor md=sese.getmdEnclosing();
-    return callGraph.getCalleeSet(md).contains(md);
+    boolean isrecursive=callGraph.getCalleeSet(md).contains(md);
+    return isrecursive;
   }
 
   Delta processSESEExitNode(FlatSESEExitNode seseexit, Delta delta, Graph graph) {
@@ -475,9 +480,9 @@ public class Pointer implements HeapAnalysis{
     FlatSESEEnterNode sese=seseexit.getFlatEnter();
     //Strip Taints from this SESE
     if (delta.getInit()) {
-      removeInitTaints(isRecursive(sese)?sese:null, delta, graph);
+      removeInitTaints(isRecursive(sese)?null:sese, delta, graph);
     } else {
-      removeDiffTaints(isRecursive(sese)?sese:null, delta);
+      removeDiffTaints(isRecursive(sese)?null:sese, delta);
     }
     applyDiffs(graph, delta);
     return delta;
@@ -1254,6 +1259,7 @@ public class Pointer implements HeapAnalysis{
     for(Map.Entry<TempDescriptor, MySet<Edge>> e: delta.varedgeadd.entrySet()) {
       TempDescriptor tmp=e.getKey();
       MySet<Edge> edgestoadd=e.getValue();
+      System.out.println("ADDING:"+edgestoadd);
       if (graph.varMap.containsKey(tmp)) {
        Edge.mergeEdgesInto(graph.varMap.get(tmp), edgestoadd);
       } else