From: bdemsky Date: Fri, 18 Mar 2011 21:14:12 +0000 (+0000) Subject: more bug fixes X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=37ce986cd2e93284977d9bbd21e5412aaba3262c;p=IRC.git more bug fixes --- diff --git a/Robust/src/Analysis/Disjoint/Canonical.java b/Robust/src/Analysis/Disjoint/Canonical.java index 3926b285..60e98711 100644 --- a/Robust/src/Analysis/Disjoint/Canonical.java +++ b/Robust/src/Analysis/Disjoint/Canonical.java @@ -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 ); } } diff --git a/Robust/src/Analysis/Disjoint/EffectsAnalysis.java b/Robust/src/Analysis/Disjoint/EffectsAnalysis.java index 64cc5df2..42826e80 100644 --- a/Robust/src/Analysis/Disjoint/EffectsAnalysis.java +++ b/Robust/src/Analysis/Disjoint/EffectsAnalysis.java @@ -60,7 +60,6 @@ public class EffectsAnalysis { } protected void add(Taint t, Effect e, FlatNode currentProgramPoint) { - Taint tNoPreds = Canonical.changePredsTo( t, ReachGraph.predsEmpty ); diff --git a/Robust/src/Analysis/Pointer/Delta.java b/Robust/src/Analysis/Pointer/Delta.java index 283161cc..7a94cb45 100644 --- a/Robust/src/Analysis/Pointer/Delta.java +++ b/Robust/src/Analysis/Pointer/Delta.java @@ -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(e)); - else + } else Edge.mergeEdgeInto(varedgeadd.get(e.srcvar), e); } diff --git a/Robust/src/Analysis/Pointer/Edge.java b/Robust/src/Analysis/Pointer/Edge.java index c2e2a138..23342c2a 100644 --- a/Robust/src/Analysis/Pointer/Edge.java +++ b/Robust/src/Analysis/Pointer/Edge.java @@ -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; } diff --git a/Robust/src/Analysis/Pointer/MySet.java b/Robust/src/Analysis/Pointer/MySet.java index 17202315..ee3537f2 100644 --- a/Robust/src/Analysis/Pointer/MySet.java +++ b/Robust/src/Analysis/Pointer/MySet.java @@ -41,7 +41,9 @@ public class MySet extends AbstractSet { 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) { diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index fbf43b28..0ba6759b 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -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 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 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> e: delta.varedgeadd.entrySet()) { TempDescriptor tmp=e.getKey(); MySet edgestoadd=e.getValue(); + System.out.println("ADDING:"+edgestoadd); if (graph.varMap.containsKey(tmp)) { Edge.mergeEdgesInto(graph.varMap.get(tmp), edgestoadd); } else