From 87fd4496ce6f1c646382d44181fd9c0eab478807 Mon Sep 17 00:00:00 2001 From: jjenista Date: Tue, 15 Sep 2009 21:15:46 +0000 Subject: [PATCH] more null region fixes, but I think method results can still map outgoing edges to the null field --- .../OwnershipAnalysis/OwnershipGraph.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java index b1a3ef7e..23a22b7b 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java +++ b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java @@ -375,14 +375,20 @@ public class OwnershipGraph { Iterator itrYhrn = lnY.iteratorToReferencees(); while( itrYhrn.hasNext() ) { - ReferenceEdge edgeY = itrYhrn.next(); - HeapRegionNode hrnY = edgeY.getDst(); + ReferenceEdge edgeY = itrYhrn.next(); + HeapRegionNode hrnY = edgeY.getDst(); ReachabilitySet betaY = edgeY.getBeta(); + // skip the null region, load statement is not + // meaningful for this region + if( hrnY == hrnNull ) { + continue; + } + Iterator itrHrnFhrn = hrnY.iteratorToReferencees(); while( itrHrnFhrn.hasNext() ) { - ReferenceEdge edgeHrn = itrHrnFhrn.next(); - HeapRegionNode hrnHrn = edgeHrn.getDst(); + ReferenceEdge edgeHrn = itrHrnFhrn.next(); + HeapRegionNode hrnHrn = edgeHrn.getDst(); ReachabilitySet betaHrn = edgeHrn.getBeta(); if( edgeHrn.getType() == null || @@ -421,6 +427,11 @@ public class OwnershipGraph { ReferenceEdge edgeX = itrXhrn.next(); HeapRegionNode hrnX = edgeX.getDst(); + // if we are looking at the null region, skip + if( hrnX == hrnNull ) { + continue; + } + // we can do a strong update here if one of two cases holds if( f != null && f != OwnershipAnalysis.getArrayField( f.getType() ) && @@ -440,6 +451,11 @@ public class OwnershipGraph { HeapRegionNode hrnX = edgeX.getDst(); ReachabilitySet betaX = edgeX.getBeta(); + // if we are looking at the null region, skip + if( hrnX == hrnNull ) { + continue; + } + ReachabilitySet R = hrnX.getAlpha().intersection(edgeX.getBeta() ); Iterator itrYhrn = lnY.iteratorToReferencees(); @@ -494,6 +510,11 @@ public class OwnershipGraph { ReferenceEdge edgeX = itrXhrn.next(); HeapRegionNode hrnX = edgeX.getDst(); + // if we are looking at the null region, skip + if( hrnX == hrnNull ) { + continue; + } + Iterator itrYhrn = lnY.iteratorToReferencees(); while( itrYhrn.hasNext() ) { ReferenceEdge edgeY = itrYhrn.next(); -- 2.34.1