From: bdemsky Date: Thu, 10 Mar 2011 09:46:04 +0000 (+0000) Subject: more bug fixes... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e6e66e92c428f07fd6795be672c473f05cf00d4f;p=IRC.git more bug fixes... --- diff --git a/Robust/src/Analysis/Pointer/BasicBlock.java b/Robust/src/Analysis/Pointer/BasicBlock.java index 2f6e9903..80e122c4 100644 --- a/Robust/src/Analysis/Pointer/BasicBlock.java +++ b/Robust/src/Analysis/Pointer/BasicBlock.java @@ -63,13 +63,13 @@ public class BasicBlock { for(int i=0;i edges=varMap.get(old.srcvar); if (edges==null) edges=parent.varMap.get(old.srcvar); + if (edges==null) + return null; return edges.get(old); } else { MySet edges=nodeMap.get(old.src); if (edges==null) edges=parent.nodeMap.get(old.src); + if (edges==null) + return null; return edges.get(old); } } diff --git a/Robust/src/Analysis/Pointer/GraphManip.java b/Robust/src/Analysis/Pointer/GraphManip.java index ea998fae..163e9581 100644 --- a/Robust/src/Analysis/Pointer/GraphManip.java +++ b/Robust/src/Analysis/Pointer/GraphManip.java @@ -125,10 +125,12 @@ public class GraphManip { HashSet nodes=new HashSet(); for(AllocNode node:srcNodes) { MySet removeedges=delta.heapedgeremove.get(node); - for(Edge e:delta.baseheapedge.get(node)) { - if (e.fd==fd&&(removeedges==null||!removeedges.contains(e))) - nodes.add(e.dst); - } + MySet baseEdges=delta.baseheapedge.get(node); + if (baseEdges!=null) + for(Edge e:baseEdges) { + if (e.fd==fd&&(removeedges==null||!removeedges.contains(e))) + nodes.add(e.dst); + } if (delta.heapedgeadd.containsKey(node)) for(Edge e:delta.heapedgeadd.get(node)) { if (e.fd==fd) diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index 0c73bd53..a0b8441f 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -57,9 +57,9 @@ public class Pointer { public void doAnalysis() { toprocess.add(buildInitialContext()); - while(!toprocess.isEmpty()) { Delta delta=toprocess.remove(); + delta.print(); PPoint ppoint=delta.getBlock(); BBlock bblock=ppoint.getBBlock(); Vector nodes=bblock.nodes(); @@ -245,7 +245,6 @@ public class Pointer { /* Now we need to propagate newdelta */ if (!newDelta.heapedgeadd.isEmpty()||!newDelta.heapedgeremove.isEmpty()||!newDelta.varedgeadd.isEmpty()||!newDelta.addNodeAges.isEmpty()||!newDelta.addOldNodes.isEmpty()) { /* We have a delta to propagate */ - if (returnMap.containsKey(bblock)) { //exit of call block boolean first=true; @@ -292,6 +291,7 @@ public class Pointer { return processSetFieldElementNode(node, delta, newgraph); case FKind.FlatMethod: case FKind.FlatExit: + case FKind.FlatBackEdge: case FKind.FlatGenReachNode: return processFlatNop(node, delta, newgraph); case FKind.FlatCall: @@ -789,8 +789,10 @@ public class Pointer { } else { //Generate diff from parent graph MySet parentedges=graph.parent.nodeMap.get(node); - MySet newedgeset=Util.setSubtract(parentedges, edgestoremove); - graph.nodeMap.put(node, newedgeset); + if (parentedges!=null) { + MySet newedgeset=Util.setSubtract(parentedges, edgestoremove); + graph.nodeMap.put(node, newedgeset); + } } } diff --git a/Robust/src/Analysis/Pointer/Util.java b/Robust/src/Analysis/Pointer/Util.java index c0573003..c7bd09fb 100644 --- a/Robust/src/Analysis/Pointer/Util.java +++ b/Robust/src/Analysis/Pointer/Util.java @@ -19,7 +19,8 @@ public class Util { map.get(key).removeAll(toremove); map.get(key).addAll(toadd); } else { - map.put(key, (MySet) toadd.clone()); + if (toadd!=null) + map.put(key, (MySet) toadd.clone()); } }