Program: 40417
Project: 40417
Buggy source:
/** 
 * Method getBasicBlockStarts, stolen from ShrikeBT verifier
 */
private void makeBasicBlocks(){
  ExceptionHandler[][] handlers;
  try {
    handlers=method.getHandlers();
  }
 catch (  InvalidClassFileException e) {
    e.printStackTrace();
    Assertions.UNREACHABLE();
    handlers=null;
  }
  boolean[] r=new boolean[getInstructions().length];
  boolean[] catchers=new boolean[getInstructions().length];
  int blockCount=2;
  r[0]=true;
  Instruction[] instructions=(Instruction[])getInstructions();
  for (int i=0; i < instructions.length; i++) {
    int[] targets=instructions[i].getBranchTargets();
    if (targets.length > 0 || !instructions[i].isFallThrough()) {
      if (i + 1 < instructions.length && !r[i + 1]) {
        r[i + 1]=true;
        blockCount++;
      }
    }
    for (int j=0; j < targets.length; j++) {
      if (!r[targets[j]]) {
        r[targets[j]]=true;
        blockCount++;
      }
    }
    if (Exceptions.isPEI(instructions[i])) {
      ExceptionHandler[] hs=handlers[i];
      if (i + 1 < instructions.length && !r[i + 1]) {
        r[i + 1]=true;
        blockCount++;
      }
      if (hs != null && hs.length > 0) {
        for (int j=0; j < hs.length; j++) {
          exceptionHandlers.add(hs[j]);
          if (!r[hs[j].getHandler()]) {
            r[hs[j].getHandler()]=true;
            blockCount++;
          }
          catchers[hs[j].getHandler()]=true;
        }
      }
    }
  }
  BasicBlock entry=new BasicBlock(-1);
  addNode(entry);
  int j=1;
  for (int i=0; i < r.length; i++) {
    if (r[i]) {
      BasicBlock b=new BasicBlock(i);
      addNode(b);
      if (catchers[i]) {
        setCatchBlock(j);
      }
      j++;
    }
  }
  BasicBlock exit=new BasicBlock(-1);
  addNode(exit);
}

Fixed version (ground truth):
private void makeBasicBlocks(){
  ExceptionHandler[][] handlers;
  try {
    handlers=method.getHandlers();
  }
 catch (  InvalidClassFileException e) {
    e.printStackTrace();
    Assertions.UNREACHABLE();
    handlers=null;
  }
  boolean[] r=new boolean[getInstructions().length];
  boolean[] catchers=new boolean[getInstructions().length];
  int blockCount=2;
  r[0]=true;
  Instruction[] instructions=(Instruction[])getInstructions();
  for (int i=0; i < instructions.length; i++) {
    int[] targets=instructions[i].getBranchTargets();
    if (targets.length > 0 || !instructions[i].isFallThrough()) {
      if (i + 1 < instructions.length && !r[i + 1]) {
        r[i + 1]=true;
        blockCount++;
      }
    }
    for (int j=0; j < targets.length; j++) {
      if (!r[targets[j]]) {
        r[targets[j]]=true;
        blockCount++;
      }
    }
    if (Exceptions.isPEI(instructions[i])) {
      ExceptionHandler[] hs=handlers[i];
      if (i + 1 < instructions.length && !r[i + 1]) {
        r[i + 1]=true;
        blockCount++;
      }
      if (hs != null && hs.length > 0) {
        for (int j=0; j < hs.length; j++) {
          exceptionHandlers.add(hs[j]);
          if (!r[hs[j].getHandler()]) {
            r[hs[j].getHandler()]=true;
            blockCount++;
          }
          catchers[hs[j].getHandler()]=true;
        }
      }
    }
  }
  BasicBlock entry=new BasicBlock(-1);
  addNode(entry);
  int j=1;
  for (int i=0; i < r.length; i++) {
    if (r[i]) {
      BasicBlock b=new BasicBlock(i);
      addNode(b);
      if (catchers[i]) {
        setCatchBlock(j);
      }
      j++;
    }
  }
  BasicBlock exit=new BasicBlock(-1);
  addNode(exit);
}