Program: 100159
Project: 100159
Buggy source:
void handleInitWorklist(){
  while (!initWorklist.isEmpty()) {
    incrementNumNodesTraversed();
    final PointerKeyAndState curPkAndState=initWorklist.iterator().next();
    initWorklist.remove(curPkAndState);
    final PointerKey curPk=curPkAndState.getPointerKey();
    final State curState=curPkAndState.getState();
    if (DEBUG)     Trace.println("String_Node_Str" + curPkAndState);
    if (Assertions.verifyAssertions && curPk instanceof LocalPointerKey) {
      Assertions._assert(g.hasSubgraphForNode(((LocalPointerKey)curPk).getNode()));
    }
    IFlowLabelVisitor v=new AbstractFlowLabelVisitor(){
      @Override public void visitNew(      NewLabel label,      Object dst){
        final InstanceKey ik=(InstanceKey)dst;
        if (DEBUG) {
          Trace.println("String_Node_Str" + ik + "String_Node_Str"+ curPk);
        }
        doTransition(curState,label,new Function<State,Object>(){
          public Object apply(          State newState){
            InstanceKeyAndState ikAndState=new InstanceKeyAndState(ik,newState);
            int n=ikAndStates.add(ikAndState);
            findOrCreate(pkToP2Set,curPkAndState).add(n);
            addToPToWorklist(curPkAndState);
            return null;
          }
        }
);
      }
      @Override public void visitGetField(      GetFieldLabel label,      Object dst){
        IField field=(label).getField();
        if (refineFieldAccesses(field)) {
          PointerKey loadBase=(PointerKey)dst;
          PointerKeyAndState loadBaseAndState=new PointerKeyAndState(loadBase,curState);
          addEncounteredLoad(new LoadEdge(loadBaseAndState,field,curPkAndState));
          if (!addToInitWorklist(loadBaseAndState)) {
            for (            InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToP2Set,loadBaseAndState))) {
              trackInstanceField(ikAndState,field,forwInstKeyToFields);
            }
          }
        }
 else {
          handleAllCopies(curPkAndState,g.getWritesToInstanceField(field),MatchLabel.v());
        }
      }
      @Override public void visitAssignGlobal(      AssignGlobalLabel label,      Object dst){
        handleAllCopies(curPkAndState,g.getWritesToStaticField((StaticFieldKey)dst),AssignGlobalLabel.v());
      }
      @Override public void visitAssign(      AssignLabel label,      Object dst){
        handleCopy(curPkAndState,(PointerKey)dst,AssignLabel.v());
      }
    }
;
    g.visitSuccs(curPk,v);
    handleForwInterproc(curPkAndState,new CopyHandler(){
      @Override void handle(      PointerKeyAndState src,      PointerKey dst,      IFlowLabel label){
        handleCopy(src,dst,label);
      }
    }
);
  }
}

Fixed version (ground truth):
void handleInitWorklist(){
  while (!initWorklist.isEmpty()) {
    incrementNumNodesTraversed();
    final PointerKeyAndState curPkAndState=initWorklist.iterator().next();
    initWorklist.remove(curPkAndState);
    final PointerKey curPk=curPkAndState.getPointerKey();
    final State curState=curPkAndState.getState();
    if (DEBUG)     Trace.println("String_Node_Str" + curPkAndState);
    if (Assertions.verifyAssertions && curPk instanceof LocalPointerKey) {
      Assertions._assert(g.hasSubgraphForNode(((LocalPointerKey)curPk).getNode()));
    }
    IFlowLabelVisitor v=new AbstractFlowLabelVisitor(){
      @Override public void visitNew(      NewLabel label,      Object dst){
        final InstanceKey ik=(InstanceKey)dst;
        if (DEBUG) {
          Trace.println("String_Node_Str" + ik + "String_Node_Str"+ curPk);
        }
        doTransition(curState,label,new Function<State,Object>(){
          public Object apply(          State newState){
            InstanceKeyAndState ikAndState=new InstanceKeyAndState(ik,newState);
            int n=ikAndStates.add(ikAndState);
            findOrCreate(pkToP2Set,curPkAndState).add(n);
            addToPToWorklist(curPkAndState);
            return null;
          }
        }
);
      }
      @Override public void visitGetField(      GetFieldLabel label,      Object dst){
        IField field=(label).getField();
        if (refineFieldAccesses(field)) {
          PointerKey loadBase=(PointerKey)dst;
          PointerKeyAndState loadBaseAndState=new PointerKeyAndState(loadBase,curState);
          addEncounteredLoad(new LoadEdge(loadBaseAndState,field,curPkAndState));
          if (!addToInitWorklist(loadBaseAndState)) {
            for (            InstanceKeyAndState ikAndState : makeOrdinalSet(find(pkToP2Set,loadBaseAndState))) {
              trackInstanceField(ikAndState,field,forwInstKeyToFields);
            }
          }
        }
 else {
          handleAllCopies(curPkAndState,g.getWritesToInstanceField(field),MatchLabel.v());
        }
      }
      @Override public void visitAssignGlobal(      AssignGlobalLabel label,      Object dst){
        handleAllCopies(curPkAndState,g.getWritesToStaticField((StaticFieldKey)dst),AssignGlobalLabel.v());
      }
      @Override public void visitAssign(      AssignLabel label,      Object dst){
        handleCopy(curPkAndState,(PointerKey)dst,AssignLabel.noFilter());
      }
    }
;
    g.visitSuccs(curPk,v);
    handleForwInterproc(curPkAndState,new CopyHandler(){
      @Override void handle(      PointerKeyAndState src,      PointerKey dst,      IFlowLabel label){
        handleCopy(src,dst,label);
      }
    }
);
  }
}