Program: 186947
Project: 186947
Buggy source:
private void doInvokeVirtual(String methodName,String receiver,InstructionHandle stmt,Context context,ContextMap<TypeMapping,TypeMapping> input,Interpreter<TypeMapping,TypeMapping> interpreter,Map<InstructionHandle,ContextMap<TypeMapping,TypeMapping>> state,ContextMap<TypeMapping,TypeMapping> result){
  DFAAppInfo p=interpreter.getProgram();
  if (p.getMethod(methodName) == null) {
    System.out.println(context.method + "String_Node_Str" + stmt+ "String_Node_Str"+ methodName);
    return;
  }
  MethodGen method=p.getMethod(methodName).getMethodGen();
  String signature=method.getName() + method.getSignature();
  methodName=method.getClassName() + "String_Node_Str" + signature;
  recordReceiver(stmt,context,methodName);
  int varPtr=context.stackPtr - MethodHelper.getArgSize(method);
  Context c=new Context(context);
  c.stackPtr=method.getMaxLocals();
  c.constPool=method.getConstantPool();
  if (method.isSynchronized()) {
    c.syncLevel=context.syncLevel + 1;
  }
  c.method=methodName;
  boolean threaded=false;
  try {
    if (p.cliMap.get(receiver).clazz.instanceOf(p.cliMap.get("String_Node_Str").clazz) && signature.equals("String_Node_Str")) {
      c.createThread();
      threaded=true;
    }
  }
 catch (  ClassNotFoundException e) {
    e.printStackTrace();
    throw new Error();
  }
  ContextMap<TypeMapping,TypeMapping> tmpresult=new ContextMap<TypeMapping,TypeMapping>(c,new HashMap<TypeMapping,TypeMapping>());
  for (Iterator<TypeMapping> k=input.keySet().iterator(); k.hasNext(); ) {
    TypeMapping m=k.next();
    if (m.stackLoc < 0) {
      tmpresult.add(m);
    }
    if (m.stackLoc > varPtr) {
      tmpresult.add(new TypeMapping(m.stackLoc - varPtr,m.type));
    }
    if (m.stackLoc == varPtr) {
      if (receiver.equals(m.type.split("String_Node_Str")[0])) {
        tmpresult.add(new TypeMapping(0,m.type));
      }
    }
  }
  InstructionHandle entry=method.getInstructionList().getStart();
  state.put(entry,join(tmpresult,state.get(entry)));
  Map<InstructionHandle,ContextMap<TypeMapping,TypeMapping>> r=interpreter.interpret(c,entry,state,false);
  InstructionHandle exit=method.getInstructionList().getEnd();
  if (r.get(exit) != null) {
    filterReturnSet(r.get(exit),result,varPtr);
  }
  if (threaded) {
    threads.put(methodName,new ContextMap<TypeMapping,TypeMapping>(c,result));
    updateThreads(result,interpreter,state);
  }
}

Fixed version (ground truth):
private void doInvokeVirtual(String methodName,String receiver,InstructionHandle stmt,Context context,ContextMap<TypeMapping,TypeMapping> input,Interpreter<TypeMapping,TypeMapping> interpreter,Map<InstructionHandle,ContextMap<TypeMapping,TypeMapping>> state,ContextMap<TypeMapping,TypeMapping> result){
  DFAAppInfo p=interpreter.getProgram();
  if (p.getMethod(methodName) == null) {
    System.out.println(context.method + "String_Node_Str" + stmt+ "String_Node_Str"+ methodName);
    return;
  }
  MethodGen method=p.getMethod(methodName).getMethodGen();
  String signature=method.getName() + method.getSignature();
  methodName=method.getClassName() + "String_Node_Str" + signature;
  recordReceiver(stmt,context,methodName);
  int varPtr=context.stackPtr - MethodHelper.getArgSize(method);
  Context c=new Context(context);
  c.stackPtr=method.getMaxLocals();
  c.constPool=method.getConstantPool();
  if (method.isSynchronized()) {
    c.syncLevel=context.syncLevel + 1;
  }
  c.method=methodName;
  boolean threaded=false;
  try {
    if (p.cliMap.get(receiver).clazz.instanceOf(p.cliMap.get("String_Node_Str").clazz) && signature.equals("String_Node_Str")) {
      c.createThread();
      threaded=true;
    }
  }
 catch (  ClassNotFoundException e) {
    e.printStackTrace();
    throw new Error();
  }
  ContextMap<TypeMapping,TypeMapping> tmpresult=new ContextMap<TypeMapping,TypeMapping>(c,new HashMap<TypeMapping,TypeMapping>());
  for (Iterator<TypeMapping> k=input.keySet().iterator(); k.hasNext(); ) {
    TypeMapping m=k.next();
    if (m.stackLoc < 0) {
      tmpresult.add(m);
    }
    if (m.stackLoc > varPtr) {
      tmpresult.add(new TypeMapping(m.stackLoc - varPtr,m.type));
    }
    if (m.stackLoc == varPtr) {
      ClassInfo staticClass=(ClassInfo)p.cliMap.get(receiver);
      ClassInfo dynamicClass=(ClassInfo)p.cliMap.get(m.type.split("String_Node_Str")[0]);
      try {
        if (dynamicClass.clazz.instanceOf(staticClass.clazz)) {
          tmpresult.add(new TypeMapping(0,m.type));
        }
      }
 catch (      ClassNotFoundException exc) {
        tmpresult.add(new TypeMapping(0,m.type));
      }
    }
  }
  InstructionHandle entry=method.getInstructionList().getStart();
  state.put(entry,join(tmpresult,state.get(entry)));
  Map<InstructionHandle,ContextMap<TypeMapping,TypeMapping>> r=interpreter.interpret(c,entry,state,false);
  InstructionHandle exit=method.getInstructionList().getEnd();
  if (r.get(exit) != null) {
    filterReturnSet(r.get(exit),result,varPtr);
  }
  if (threaded) {
    threads.put(methodName,new ContextMap<TypeMapping,TypeMapping>(c,result));
    updateThreads(result,interpreter,state);
  }
}