@Override public boolean sameValue(IntSet that) { return that.isEmpty(); }
@Override public boolean sameValue(IntSet that) { return that.isEmpty(); }
@Override public boolean sameValue(IntSet that) { return that.isEmpty(); }
/** * */ private void checkIntegrity() { assert privatePart == null || !privatePart.isEmpty(); assert sharedPart == null || !sharedPart.isEmpty(); if (privatePart != null && sharedPart != null) { assert privatePart.intersection(sharedPart).isEmpty(); } }
/** * */ private void checkIntegrity() { assert privatePart == null || !privatePart.isEmpty(); assert sharedPart == null || !sharedPart.isEmpty(); if (privatePart != null && sharedPart != null) { assert privatePart.intersection(sharedPart).isEmpty(); } }
/** * */ private void checkIntegrity() { assert privatePart == null || !privatePart.isEmpty(); assert sharedPart == null || !sharedPart.isEmpty(); if (privatePart != null && sharedPart != null) { assert privatePart.intersection(sharedPart).isEmpty(); } }
if (s != null && !s.isEmpty()) { s.foreach(x -> { keys[pi] = system.getInstanceKey(x);
if (s != null && !s.isEmpty()) { s.foreach(x -> { keys[pi] = system.getInstanceKey(x);
@Override public void visitPutField(PutFieldLabel label, Object dst) { IField field = (label).getField(); PointerKey dstPtrKey = (PointerKey) dst; // pass barred label since this is for tracked points-to sets if (refineFieldAccesses(field, curPk, dstPtrKey, label.bar(), curState)) { // x.f = y, X updated // if Y' non-empty, then update // tracked set of X.f, to trace flow // to reads PointerKeyAndState storeDst = new PointerKeyAndState(dstPtrKey, curState); encounteredStores.add(new StoreEdge(curPkAndState, field, storeDst)); IntSet trackedSet = find(pkToTrackedSet, storeDst); if (!trackedSet.isEmpty()) { for (InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToP2Set, curPkAndState))) { InstanceFieldKeyAndState ifk = getInstFieldKey(ikAndState, field); findOrCreate(instFieldKeyToTrackedSet, ifk).addAll(trackedSet); trackInstanceField(ikAndState, field, backInstKeyToFields); } } } } };
@Override public void visitPutField(PutFieldLabel label, Object dst) { IField field = (label).getField(); PointerKey dstPtrKey = (PointerKey) dst; // pass barred label since this is for tracked points-to sets if (refineFieldAccesses(field, curPk, dstPtrKey, label.bar(), curState)) { // x.f = y, X updated // if Y' non-empty, then update // tracked set of X.f, to trace flow // to reads PointerKeyAndState storeDst = new PointerKeyAndState(dstPtrKey, curState); encounteredStores.add(new StoreEdge(curPkAndState, field, storeDst)); IntSet trackedSet = find(pkToTrackedSet, storeDst); if (!trackedSet.isEmpty()) { for (InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToP2Set, curPkAndState))) { InstanceFieldKeyAndState ifk = getInstFieldKey(ikAndState, field); findOrCreate(instFieldKeyToTrackedSet, ifk).addAll(trackedSet); trackInstanceField(ikAndState, field, backInstKeyToFields); } } } } };
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, final InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); if(receiver.length > index && receiver[index] instanceof ConstantKey) { Frequency f = usesFirstArgAsPropertyName(callee); if(f == Frequency.ALWAYS|| f == Frequency.SOMETIMES) return new PropNameContext(baseContext, receiver[index]); } if (PROPNAME_MARKER.equals(caller.getContext().get(PROPNAME_KEY))) { if (!identifyDependentParameters(caller, site).isEmpty()) { // use a MarkerForInContext to clone based on the InstanceKey used in the caller context @SuppressWarnings("unchecked") InstanceKey callerIk = ((ContextItem.Value<InstanceKey>)caller.getContext().get(INSTANCE_KEY_KEY)).getValue(); return new MarkerForInContext(baseContext, callerIk); } else { return baseContext; } } return baseContext; }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, final InstanceKey[] receiver) { Context baseContext = base.getCalleeTarget(caller, site, callee, receiver); if(receiver.length > index && receiver[index] instanceof ConstantKey) { Frequency f = usesFirstArgAsPropertyName(callee); if(f == Frequency.ALWAYS|| f == Frequency.SOMETIMES) return new PropNameContext(baseContext, receiver[index]); } if (PROPNAME_MARKER.equals(caller.getContext().get(PROPNAME_KEY))) { if (!identifyDependentParameters(caller, site).isEmpty()) { // use a MarkerForInContext to clone based on the InstanceKey used in the caller context @SuppressWarnings("unchecked") InstanceKey callerIk = ((ContextItem.Value<InstanceKey>)caller.getContext().get(INSTANCE_KEY_KEY)).getValue(); return new MarkerForInContext(baseContext, callerIk); } else { return baseContext; } } return baseContext; }
/** * handle possible updated flow in both directions for a call parameter */ private void repropCallArg(PointerKeyAndState src, PointerKeyAndState dst, IFlowLabel dstToSrcLabel) { if (DEBUG) { // System.err.println("re-propping from src " + src + " to dst " + dst); } for (PointerKeyAndState srcToHandle : matchingPToQueried(dst, src.getPointerKey(), dstToSrcLabel)) { handleCopy(srcToHandle, dst, dstToSrcLabel.bar()); } for (PointerKeyAndState dstToHandle : matchingTrackedQueried(src, dst.getPointerKey(), dstToSrcLabel)) { IntSet trackedSet = find(pkToTrackedSet, dstToHandle); if (!trackedSet.isEmpty()) { if (findOrCreate(pkToTrackedSet, src).addAll(trackedSet)) { addToTrackedPToWorklist(src); } } } }
/** * handle possible updated flow in both directions for a call parameter */ private void repropCallArg(PointerKeyAndState src, PointerKeyAndState dst, IFlowLabel dstToSrcLabel) { if (DEBUG) { // System.err.println("re-propping from src " + src + " to dst " + dst); } for (PointerKeyAndState srcToHandle : matchingPToQueried(dst, src.getPointerKey(), dstToSrcLabel)) { handleCopy(srcToHandle, dst, dstToSrcLabel.bar()); } for (PointerKeyAndState dstToHandle : matchingTrackedQueried(src, dst.getPointerKey(), dstToSrcLabel)) { IntSet trackedSet = find(pkToTrackedSet, dstToHandle); if (!trackedSet.isEmpty()) { if (findOrCreate(pkToTrackedSet, src).addAll(trackedSet)) { addToTrackedPToWorklist(src); } } } }
} else if (intersect.isEmpty()) { return NOT_CHANGED_AND_FIXED;
} else if (intersect.isEmpty()) { return NOT_CHANGED_AND_FIXED;
} else if (intersect.isEmpty()) { return NOT_CHANGED_AND_FIXED;
if (params.isEmpty()) { for (CGNode n : getBuilder().getTargetsForCall(node, instruction, invariantParameters)) { getBuilder().processResolvedCall(node, instruction, n, invariantParameters, uniqueCatch);
if (params.isEmpty()) { for (CGNode n : getBuilder().getTargetsForCall(node, instruction, invariantParameters)) { getBuilder().processResolvedCall(node, instruction, n, invariantParameters, uniqueCatch);
Assert.assertTrue(IntSetUtil.diff(x, x, factory).isEmpty()); Assert.assertTrue(IntSetUtil.diff(z, v, factory).isEmpty()); Assert.assertTrue(IntSetUtil.diff(v, z, factory).sameValue(SparseIntSet.singleton(17))); Assert.assertTrue(IntSetUtil.diff(z, v, factory).isEmpty()); Assert.assertTrue(z.isSubset(v)); temp = factory.make();