Program: 38316
Project: 38316
Buggy source:
protected void visitInvokeInternal(final SSAAbstractInvokeInstruction instruction,InvariantComputer invs){
  if (DEBUG) {
    System.err.println("String_Node_Str" + instruction);
  }
  PointerKey uniqueCatch=null;
  if (hasUniqueCatchBlock(instruction,ir)) {
    uniqueCatch=getBuilder().getUniqueCatchKey(instruction,ir,node);
  }
  InstanceKey[][] invariantParameters=invs.computeInvariantParameters(instruction);
  if (instruction.getCallSite().isStatic()) {
    for (    CGNode n : getBuilder().getTargetsForCall(node,instruction.getCallSite(),invariantParameters)) {
      getBuilder().processResolvedCall(node,instruction,n,invariantParameters,uniqueCatch);
      if (DEBUG) {
        System.err.println("String_Node_Str" + n);
      }
      processClassInitializer(n.getMethod().getDeclaringClass());
    }
  }
 else {
    IntSet params=getBuilder().getContextSelector().getRelevantParameters(node,instruction.getCallSite());
    if (!params.contains(0)) {
      params=IntSetUtil.makeMutableCopy(params);
      ((MutableIntSet)params).add(0);
    }
    final int vns[]=new int[params.size()];
    params.foreach(new IntSetAction(){
      private int i=0;
      public void act(      int x){
        vns[i++]=instruction.getUse(x);
      }
    }
);
    if (contentsAreInvariant(symbolTable,du,vns)) {
      for (      CGNode n : getBuilder().getTargetsForCall(node,instruction.getCallSite(),invariantParameters)) {
        getBuilder().processResolvedCall(node,instruction,n,invariantParameters,uniqueCatch);
        processClassInitializer(n.getMethod().getDeclaringClass());
      }
    }
 else {
      if (DEBUG) {
        System.err.println("String_Node_Str" + instruction + "String_Node_Str"+ params);
      }
      final List<PointerKey> pks=new ArrayList<PointerKey>(params.size());
      params.foreach(new IntSetAction(){
        public void act(        int x){
          if (!contentsAreInvariant(symbolTable,du,instruction.getUse(x))) {
            pks.add(getBuilder().getPointerKeyForLocal(node,instruction.getUse(x)));
          }
        }
      }
);
      DispatchOperator dispatchOperator=getBuilder().new DispatchOperator(instruction,node,invariantParameters,uniqueCatch,params);
      system.newSideEffect(dispatchOperator,pks.toArray(new PointerKey[pks.size()]));
    }
  }
}

Fixed version (ground truth):
protected void visitInvokeInternal(final SSAAbstractInvokeInstruction instruction,InvariantComputer invs){
  if (DEBUG) {
    System.err.println("String_Node_Str" + instruction);
  }
  PointerKey uniqueCatch=null;
  if (hasUniqueCatchBlock(instruction,ir)) {
    uniqueCatch=getBuilder().getUniqueCatchKey(instruction,ir,node);
  }
  InstanceKey[][] invariantParameters=invs.computeInvariantParameters(instruction);
  if (instruction.getCallSite().isStatic()) {
    for (    CGNode n : getBuilder().getTargetsForCall(node,instruction,invariantParameters)) {
      getBuilder().processResolvedCall(node,instruction,n,invariantParameters,uniqueCatch);
      if (DEBUG) {
        System.err.println("String_Node_Str" + n);
      }
      processClassInitializer(n.getMethod().getDeclaringClass());
    }
  }
 else {
    IntSet params=getBuilder().getContextSelector().getRelevantParameters(node,instruction.getCallSite());
    if (!params.contains(0)) {
      params=IntSetUtil.makeMutableCopy(params);
      ((MutableIntSet)params).add(0);
    }
    final int vns[]=new int[params.size()];
    params.foreach(new IntSetAction(){
      private int i=0;
      public void act(      int x){
        vns[i++]=instruction.getUse(x);
      }
    }
);
    if (contentsAreInvariant(symbolTable,du,vns)) {
      for (      CGNode n : getBuilder().getTargetsForCall(node,instruction,invariantParameters)) {
        getBuilder().processResolvedCall(node,instruction,n,invariantParameters,uniqueCatch);
        processClassInitializer(n.getMethod().getDeclaringClass());
      }
    }
 else {
      if (DEBUG) {
        System.err.println("String_Node_Str" + instruction + "String_Node_Str"+ params);
      }
      final List<PointerKey> pks=new ArrayList<PointerKey>(params.size());
      params.foreach(new IntSetAction(){
        public void act(        int x){
          if (!contentsAreInvariant(symbolTable,du,instruction.getUse(x))) {
            pks.add(getBuilder().getPointerKeyForLocal(node,instruction.getUse(x)));
          }
        }
      }
);
      DispatchOperator dispatchOperator=getBuilder().new DispatchOperator(instruction,node,invariantParameters,uniqueCatch,params);
      system.newSideEffect(dispatchOperator,pks.toArray(new PointerKey[pks.size()]));
    }
  }
}