Program: 3319
Project: 3319
Buggy source:
@Override public double doTask(){
  if (y != null) {
    if (x.dataType() == DataBuffer.Type.FLOAT) {
      float[] xf=(float[])x.array();
      float[] yf=(float[])y.array();
      float accum=op.zeroFloat();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i],yf[offsetY + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i * incrX],yf[offsetY + i * incrY]);
        }
      }
      return accum;
    }
 else {
      double[] xd=(double[])x.array();
      double[] yd=(double[])y.array();
      double accum=op.zeroDouble();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i],yd[offsetY + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i * incrX],yd[offsetY + i * incrY]);
        }
      }
      return accum;
    }
  }
 else {
    if (x.dataType() == DataBuffer.Type.FLOAT) {
      float[] xf=(float[])x.array();
      float accum=op.zeroFloat();
      if (incrX == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i * incrX]);
        }
      }
      return accum;
    }
 else {
      double[] xd=(double[])x.array();
      double accum=op.zeroDouble();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i * incrX]);
        }
      }
      return accum;
    }
  }
}

Fixed version (ground truth):
@Override public double doTask(){
  if (y != null) {
    if (x.dataType() == DataBuffer.Type.FLOAT) {
      float[] xf=(float[])x.array();
      float[] yf=(float[])y.array();
      float accum=op.zeroFloat();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i],yf[offsetY + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i * incrX],yf[offsetY + i * incrY]);
        }
      }
      return (outerTask ? op.getFinalResult(accum) : accum);
    }
 else {
      double[] xd=(double[])x.array();
      double[] yd=(double[])y.array();
      double accum=op.zeroDouble();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i],yd[offsetY + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i * incrX],yd[offsetY + i * incrY]);
        }
      }
      return (outerTask ? op.getFinalResult(accum) : accum);
    }
  }
 else {
    if (x.dataType() == DataBuffer.Type.FLOAT) {
      float[] xf=(float[])x.array();
      float accum=op.zeroFloat();
      if (incrX == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xf[offsetX + i * incrX]);
        }
      }
      return (outerTask ? op.getFinalResult(accum) : accum);
    }
 else {
      double[] xd=(double[])x.array();
      double accum=op.zeroDouble();
      if (incrX == 1 && incrY == 1) {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i]);
        }
      }
 else {
        for (int i=0; i < n; i++) {
          accum=op.update(accum,xd[offsetX + i * incrX]);
        }
      }
      return (outerTask ? op.getFinalResult(accum) : accum);
    }
  }
}