//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);
}
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
HashSet<ConcreteRuntimeObjNode> enqueueToWaitingQueueUponConflict;
boolean decendantsPrimConflict;
boolean decendantsObjConflict;
+ boolean hasDirectObjConflict;
boolean hasPotentialToBeIncorrectDueToConflict;
boolean isInsetVar;
AllocSite allocSite;
isInsetVar = isInVar;
decendantsPrimConflict = false;
decendantsObjConflict = false;
+ hasDirectObjConflict = false;
hasPotentialToBeIncorrectDueToConflict = false;
}
return decendantsPrimConflict || decendantsObjConflict;
}
-
//returns true if at least one of the objects in points of access has been added
public boolean addPossibleWaitingQueueEnqueue(HashSet<ConcreteRuntimeObjNode> pointsOfAccess) {
boolean addedNew = false;
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)){