Program: 40597
Project: 40597
Buggy source:
public void makePassOverFieldStmts(){
  for (  StoreEdge storeEdge : encounteredStores) {
    PointerKeyAndState storedValAndState=storeEdge.val;
    IField field=storeEdge.field;
    PointerKeyAndState baseAndState=storeEdge.base;
    IntSet trackedSet=find(pkToTrackedSet,baseAndState);
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(trackedSet)) {
      if (forwInstKeyToFields.get(ikAndState).contains(field)) {
        if (!addToInitWorklist(storedValAndState)) {
          InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
          findOrCreate(instFieldKeyToP2Set,ifk).addAll(find(pkToP2Set,storedValAndState));
        }
      }
    }
  }
  for (  LoadEdge loadEdge : encounteredLoads) {
    PointerKeyAndState loadedValAndState=loadEdge.val;
    IField field=loadEdge.field;
    PointerKey basePointerKey=loadEdge.base.getPointerKey();
    State loadDstState=loadedValAndState.getState();
    PointerKeyAndState baseAndStateToHandle=new PointerKeyAndState(basePointerKey,loadDstState);
    if (Assertions.verifyAssertions) {
      boolean basePointerOkay=pointsToQueried.get(basePointerKey).contains(loadDstState) || !pointsToQueried.get(loadedValAndState.getPointerKey()).contains(loadDstState) || initWorklist.contains(loadedValAndState);
      Assertions._assert(basePointerOkay,"String_Node_Str" + loadedValAndState + "String_Node_Str"+ baseAndStateToHandle);
    }
    final IntSet curP2Set=find(pkToP2Set,baseAndStateToHandle);
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(curP2Set)) {
      InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
      if (addAllToP2Set(pkToP2Set,loadedValAndState,find(instFieldKeyToP2Set,ifk))) {
        if (DEBUG) {
          Trace.println("String_Node_Str" + loadEdge);
        }
        addToPToWorklist(loadedValAndState);
      }
    }
    PointerKeyAndState baseAndState=loadEdge.base;
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToTrackedSet,baseAndState))) {
      if (backInstKeyToFields.get(ikAndState).contains(field)) {
        InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
        if (findOrCreate(pkToTrackedSet,loadedValAndState).addAll(find(instFieldKeyToTrackedSet,ifk))) {
          if (DEBUG) {
            Trace.println("String_Node_Str" + loadEdge);
          }
          addToTrackedPToWorklist(loadedValAndState);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void makePassOverFieldStmts(){
  for (  StoreEdge storeEdge : encounteredStores) {
    PointerKeyAndState storedValAndState=storeEdge.val;
    IField field=storeEdge.field;
    PointerKeyAndState baseAndState=storeEdge.base;
    IntSet trackedSet=find(pkToTrackedSet,baseAndState);
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(trackedSet)) {
      if (forwInstKeyToFields.get(ikAndState).contains(field)) {
        if (!addToInitWorklist(storedValAndState)) {
          InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
          findOrCreate(instFieldKeyToP2Set,ifk).addAll(find(pkToP2Set,storedValAndState));
        }
      }
    }
  }
  for (  LoadEdge loadEdge : encounteredLoads) {
    PointerKeyAndState loadedValAndState=loadEdge.val;
    IField field=loadEdge.field;
    PointerKey basePointerKey=loadEdge.base.getPointerKey();
    State loadDstState=loadedValAndState.getState();
    PointerKeyAndState baseAndStateToHandle=new PointerKeyAndState(basePointerKey,loadDstState);
    if (Assertions.verifyAssertions) {
      boolean basePointerOkay=pointsToQueried.get(basePointerKey).contains(loadDstState) || !pointsToQueried.get(loadedValAndState.getPointerKey()).contains(loadDstState) || initWorklist.contains(loadedValAndState);
      Assertions._assert(basePointerOkay,"String_Node_Str" + loadedValAndState + "String_Node_Str"+ baseAndStateToHandle);
    }
    final IntSet curP2Set=find(pkToP2Set,baseAndStateToHandle);
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(curP2Set)) {
      InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
      if (addAllToP2Set(pkToP2Set,loadedValAndState,find(instFieldKeyToP2Set,ifk),AssignLabel.noFilter())) {
        if (DEBUG) {
          Trace.println("String_Node_Str" + loadEdge);
        }
        addToPToWorklist(loadedValAndState);
      }
    }
    PointerKeyAndState baseAndState=loadEdge.base;
    for (    InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToTrackedSet,baseAndState))) {
      if (backInstKeyToFields.get(ikAndState).contains(field)) {
        InstanceFieldKeyAndState ifk=getInstFieldKey(ikAndState,field);
        if (findOrCreate(pkToTrackedSet,loadedValAndState).addAll(find(instFieldKeyToTrackedSet,ifk))) {
          if (DEBUG) {
            Trace.println("String_Node_Str" + loadEdge);
          }
          addToTrackedPToWorklist(loadedValAndState);
        }
      }
    }
  }
}