From 6c22cffed94206645d16712e7a5b615d8a94f7e9 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 6 Apr 2011 08:11:57 +0000 Subject: [PATCH] bug fix...things are slower to compile...:( --- Robust/src/Analysis/Pointer/Pointer.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index c8eb7bbd..f1fddad9 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -1185,8 +1185,7 @@ public class Pointer implements HeapAnalysis{ newedge.srcvar=fcall.getReturnTemp(); if (seseCallers!=null) newedge.taintModify(seseCallers); - if (graph.getEdges(fcall.getReturnTemp())==null||!graph.getEdges(fcall.getReturnTemp()).contains(newedge)) - newDelta.addEdge(newedge); + mergeEdge(graph, newDelta, newedge); } } applyDiffs(graph, newDelta); @@ -1348,7 +1347,10 @@ public class Pointer implements HeapAnalysis{ MySet edgestoadd=e.getValue(); if (graph.varMap.containsKey(tmp)) { Edge.mergeEdgesInto(graph.varMap.get(tmp), edgestoadd); - } else + } else if (graph.parent.varMap.containsKey(tmp)) { + graph.varMap.put(tmp, new MySet(graph.parent.varMap.get(tmp))); + Edge.mergeEdgesInto(graph.varMap.get(tmp), edgestoadd); + } else graph.varMap.put(tmp, (MySet) edgestoadd.clone()); if (genbackwards) { for(Edge eadd:edgestoadd) { @@ -1735,8 +1737,6 @@ public class Pointer implements HeapAnalysis{ MySet oldedges=graph.getEdges(tmp); if (!oldedges.isEmpty()) delta.varedgeremove.put(tmp, (MySet) oldedges); - //Apply incoming diffs to graph - applyDiffs(graph, delta); //Note that we create a single node delta.addNodeAges.add(single); //Kill the old node @@ -1766,12 +1766,18 @@ public class Pointer implements HeapAnalysis{ if (entrytmp==tmp) { /* Check is this is the tmp we overwrite, if so add to remove set */ Util.relationUpdate(delta.varedgeremove, tmp, null, entry.getValue()); - } else { + } else if (graph.varMap.containsKey(entrytmp)) { /* Check if the target of the edge is changed */ MySet newset=(MySet)entry.getValue().clone(); MySet removeset=shrinkSet(newset, graph.varMap.get(entrytmp), single, summary); Util.relationUpdate(delta.varedgeremove, entrytmp, newset, removeset); Util.relationUpdate(delta.varedgeadd, entrytmp, null, newset); + } else { + /* Check if the target of the edge is changed */ + MySet newset=(MySet)entry.getValue().clone(); + MySet removeset=shrinkSet(newset, graph.parent.varMap.get(entrytmp), single, summary); + Util.relationUpdate(delta.varedgeremove, entrytmp, newset, removeset); + Util.relationUpdate(delta.varedgeadd, entrytmp, null, newset); } } -- 2.34.1