Program: 40516
Project: 40516
Buggy source:
protected void visitInvokeInternal(SSAAbstractInvokeInstruction instruction){
  if (DEBUG) {
    System.err.println("String_Node_Str" + instruction);
  }
  PointerKey uniqueCatch=null;
  if (hasUniqueCatchBlock(instruction,ir)) {
    uniqueCatch=getBuilder().getUniqueCatchKey(instruction,ir,node);
  }
  if (instruction.getCallSite().isStatic()) {
    CGNode n=getTargetForCall(node,instruction.getCallSite(),(InstanceKey)null);
    if (n == null) {
      Warnings.add(ResolutionFailure.create(node,instruction));
    }
 else {
      getBuilder().processResolvedCall(node,instruction,n,computeInvariantParameters(instruction),uniqueCatch);
      if (DEBUG) {
        System.err.println("String_Node_Str" + n);
      }
      processClassInitializer(n.getMethod().getDeclaringClass());
    }
  }
 else {
    PointerKey receiver=getPointerKeyForLocal(instruction.getReceiver());
    if (contentsAreInvariant(symbolTable,du,instruction.getReceiver())) {
      system.recordImplicitPointsToSet(receiver);
      InstanceKey[] ik=getInvariantContents(instruction.getReceiver());
      for (int i=0; i < ik.length; i++) {
        system.findOrCreateIndexForInstanceKey(ik[i]);
        CGNode n=getTargetForCall(node,instruction.getCallSite(),ik[i]);
        if (n == null) {
          Warnings.add(ResolutionFailure.create(node,instruction));
        }
 else {
          getBuilder().processResolvedCall(node,instruction,n,computeInvariantParameters(instruction),uniqueCatch);
          processClassInitializer(n.getMethod().getDeclaringClass());
        }
      }
    }
 else {
      if (DEBUG) {
        System.err.println("String_Node_Str" + instruction + "String_Node_Str"+ receiver);
      }
      DispatchOperator dispatchOperator=getBuilder().new DispatchOperator(instruction,node,computeInvariantParameters(instruction),uniqueCatch);
      system.newSideEffect(dispatchOperator,receiver);
    }
  }
}

Fixed version (ground truth):
protected void visitInvokeInternal(SSAAbstractInvokeInstruction instruction){
  if (DEBUG) {
    System.err.println("String_Node_Str" + instruction);
  }
  PointerKey uniqueCatch=null;
  if (hasUniqueCatchBlock(instruction,ir)) {
    uniqueCatch=getBuilder().getUniqueCatchKey(instruction,ir,node);
  }
  if (instruction.getCallSite().isStatic()) {
    CGNode n=getTargetForCall(node,instruction.getCallSite(),(InstanceKey)null);
    if (n == null) {
      Warnings.add(ResolutionFailure.create(node,instruction.getCallSite()));
    }
 else {
      getBuilder().processResolvedCall(node,instruction,n,computeInvariantParameters(instruction),uniqueCatch);
      if (DEBUG) {
        System.err.println("String_Node_Str" + n);
      }
      processClassInitializer(n.getMethod().getDeclaringClass());
    }
  }
 else {
    PointerKey receiver=getPointerKeyForLocal(instruction.getReceiver());
    if (contentsAreInvariant(symbolTable,du,instruction.getReceiver())) {
      system.recordImplicitPointsToSet(receiver);
      InstanceKey[] ik=getInvariantContents(instruction.getReceiver());
      for (int i=0; i < ik.length; i++) {
        system.findOrCreateIndexForInstanceKey(ik[i]);
        CGNode n=getTargetForCall(node,instruction.getCallSite(),ik[i]);
        if (n == null) {
          Warnings.add(ResolutionFailure.create(node,instruction));
        }
 else {
          getBuilder().processResolvedCall(node,instruction,n,computeInvariantParameters(instruction),uniqueCatch);
          processClassInitializer(n.getMethod().getDeclaringClass());
        }
      }
    }
 else {
      if (DEBUG) {
        System.err.println("String_Node_Str" + instruction + "String_Node_Str"+ receiver);
      }
      DispatchOperator dispatchOperator=getBuilder().new DispatchOperator(instruction,node,computeInvariantParameters(instruction),uniqueCatch);
      system.newSideEffect(dispatchOperator,receiver);
    }
  }
}