Program: 6323
Project: 6323
Buggy source:
private void doInvoke(String methodName,InstructionHandle stmt,ContextMap<List<HashedString>,CacheMapping> input,Interpreter<List<HashedString>,CacheMapping> interpreter,Map<InstructionHandle,ContextMap<List<HashedString>,CacheMapping>> state,ContextMap<List<HashedString>,CacheMapping> result){
  Context context=new Context(input.getContext());
  AppInfo p=interpreter.getProgram();
  MethodGen method=p.getMethod(methodName).getMethodGen();
  if (method == null) {
    System.out.println(context.method + "String_Node_Str" + stmt+ "String_Node_Str"+ methodName);
    return;
  }
  if (method.isNative()) {
    result.putAll(input);
    return;
  }
  Context c=new Context(context);
  c.constPool=method.getConstantPool();
  c.method=methodName;
  c.callString=new LinkedList<HashedString>(context.callString);
  c.callString.add(new HashedString(context.method + "String_Node_Str" + stmt.getPosition()));
  ContextMap<List<HashedString>,CacheMapping> tmpresult=new ContextMap<List<HashedString>,CacheMapping>(c,new HashMap<List<HashedString>,CacheMapping>());
  CacheMapping mapping=new CacheMapping(input.get(context.callString));
  InstructionHandle last=method.getInstructionList().getEnd();
  mapping.fetch(methodName,last.getPosition());
  tmpresult.put(c.callString,mapping);
  while (c.callString.size() > CALLSTRING_LENGTH) {
    c.callString.removeFirst();
  }
  System.out.println("String_Node_Str" + stmt + "String_Node_Str"+ context.callString+ "String_Node_Str"+ context.method+ "String_Node_Str"+ methodName);
  InstructionHandle entry=method.getInstructionList().getStart();
  state.put(entry,join(tmpresult,state.get(entry)));
  Map<InstructionHandle,ContextMap<List<HashedString>,CacheMapping>> r=interpreter.interpret(c,entry,state,false);
  InstructionHandle exit=method.getInstructionList().getEnd();
  if (r.get(exit) != null) {
    MethodGen returnMethod=p.getMethod(context.method).getMethodGen();
    mapping=new CacheMapping(r.get(exit).get(c.callString));
    last=returnMethod.getInstructionList().getEnd();
    mapping.fetch(context.method,last.getPosition());
    result.put(context.callString,mapping);
  }
  if (result.isEmpty()) {
    System.out.println("String_Node_Str");
  }
}

Fixed version (ground truth):
private void doInvoke(String methodName,InstructionHandle stmt,ContextMap<List<HashedString>,CacheMapping> input,Interpreter<List<HashedString>,CacheMapping> interpreter,Map<InstructionHandle,ContextMap<List<HashedString>,CacheMapping>> state,ContextMap<List<HashedString>,CacheMapping> result){
  Context context=new Context(input.getContext());
  DFAAppInfo p=interpreter.getProgram();
  MethodGen method=p.getMethod(methodName).getMethodGen();
  if (method == null) {
    System.out.println(context.method + "String_Node_Str" + stmt+ "String_Node_Str"+ methodName);
    return;
  }
  if (method.isNative()) {
    result.putAll(input);
    return;
  }
  Context c=new Context(context);
  c.constPool=method.getConstantPool();
  c.method=methodName;
  c.callString=new LinkedList<HashedString>(context.callString);
  c.callString.add(new HashedString(context.method + "String_Node_Str" + stmt.getPosition()));
  ContextMap<List<HashedString>,CacheMapping> tmpresult=new ContextMap<List<HashedString>,CacheMapping>(c,new HashMap<List<HashedString>,CacheMapping>());
  CacheMapping mapping=new CacheMapping(input.get(context.callString));
  InstructionHandle last=method.getInstructionList().getEnd();
  mapping.fetch(methodName,last.getPosition());
  tmpresult.put(c.callString,mapping);
  while (c.callString.size() > CALLSTRING_LENGTH) {
    c.callString.removeFirst();
  }
  System.out.println("String_Node_Str" + stmt + "String_Node_Str"+ context.callString+ "String_Node_Str"+ context.method+ "String_Node_Str"+ methodName);
  InstructionHandle entry=method.getInstructionList().getStart();
  state.put(entry,join(tmpresult,state.get(entry)));
  Map<InstructionHandle,ContextMap<List<HashedString>,CacheMapping>> r=interpreter.interpret(c,entry,state,false);
  InstructionHandle exit=method.getInstructionList().getEnd();
  if (r.get(exit) != null) {
    MethodGen returnMethod=p.getMethod(context.method).getMethodGen();
    mapping=new CacheMapping(r.get(exit).get(c.callString));
    last=returnMethod.getInstructionList().getEnd();
    mapping.fetch(context.method,last.getPosition());
    result.put(context.callString,mapping);
  }
  if (result.isEmpty()) {
    System.out.println("String_Node_Str");
  }
}