From f8110b60c76f4887fad36f66be799346c500bd86 Mon Sep 17 00:00:00 2001 From: stephey Date: Tue, 2 Nov 2010 00:31:07 +0000 Subject: [PATCH] Found a bug where if the inset variable itself has a reference conflict, it doesn't get a case statement. --- Robust/src/IR/Flat/RuntimeConflictResolver.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Robust/src/IR/Flat/RuntimeConflictResolver.java b/Robust/src/IR/Flat/RuntimeConflictResolver.java index e71407d5..143ad1e6 100644 --- a/Robust/src/IR/Flat/RuntimeConflictResolver.java +++ b/Robust/src/IR/Flat/RuntimeConflictResolver.java @@ -626,6 +626,7 @@ public class RuntimeConflictResolver { //Generate C cases for (ConcreteRuntimeObjNode node : created.values()) { printDebug(javaDebug, "Considering " + node.allocSite + " for traversal"); + System.out.println("\t"+cases.contains(node.allocSite)); if (!cases.containsKey(node.allocSite) && qualifiesForCaseStatement(node)) { printDebug(javaDebug, "+\t" + node.allocSite + " qualified for case statement"); addChecker(taint, node, cases, null, "ptr", 0); @@ -861,9 +862,11 @@ public class RuntimeConflictResolver { } private boolean qualifiesForCaseStatement(ConcreteRuntimeObjNode node) { + + System.out.println(node.isInsetVar+""+node.decendantsConflict()+node.hasPrimitiveConflicts()+node.hasDirectObjConflict); return ( //insetVariable case - (node.isInsetVar && (node.decendantsConflict() || node.hasPrimitiveConflicts())) || + (node.isInsetVar && (node.decendantsConflict() || node.hasPrimitiveConflicts()) || node.hasDirectObjConflict) || //non-inline-able code cases (node.getNumOfReachableParents() != 1 && node.decendantsConflict()) || //Cases where resumes are possible @@ -1133,6 +1136,7 @@ public class RuntimeConflictResolver { HashSet enqueueToWaitingQueueUponConflict; boolean decendantsPrimConflict; boolean decendantsObjConflict; + boolean hasDirectObjConflict; boolean hasPotentialToBeIncorrectDueToConflict; boolean isInsetVar; AllocSite allocSite; @@ -1149,6 +1153,7 @@ public class RuntimeConflictResolver { isInsetVar = isInVar; decendantsPrimConflict = false; decendantsObjConflict = false; + hasDirectObjConflict = false; hasPotentialToBeIncorrectDueToConflict = false; } @@ -1180,7 +1185,6 @@ public class RuntimeConflictResolver { return decendantsPrimConflict || decendantsObjConflict; } - //returns true if at least one of the objects in points of access has been added public boolean addPossibleWaitingQueueEnqueue(HashSet pointsOfAccess) { boolean addedNew = false; @@ -1203,6 +1207,7 @@ public class RuntimeConflictResolver { public void addObjChild(String field, ConcreteRuntimeObjNode child, CombinedObjEffects ce) { printDebug(javaDebug,this.allocSite.getUniqueAllocSiteID() + " added child at " + child.getAllocationSite()); + hasDirectObjConflict |= ce.hasConflict(); ObjRef ref = new ObjRef(field, child, ce); if(objectRefs.containsKey(field)){ -- 2.34.1