Program: 149784
Project: 149784
Buggy source:
/** 
 * Compute the in set for this block given the out, gen, and kill set
 * @param block the block of interest
 * @param reuseCurrentSet whether we can reuse the "currentSet" or elseclear it out and recompute the meet of our succs
 * @param ir the governing ir
 */
private boolean processBlock(BasicBlock block,boolean reuseCurrentSet,IR ir){
  if (verbose) {
    System.out.println("String_Node_Str" + block + "String_Node_Str"+ block.getNumberOfOut());
    block.printExtended();
  }
  LiveSet exceptionBlockSummary=new LiveSet();
  boolean blockHasHandlers=bbLiveInfo[block.getNumber()].getContainsPEIWithHandler();
  if (!reuseCurrentSet) {
    currentSet.clear();
    for (BasicBlockEnumeration bbEnum=block.getOut(); bbEnum.hasMoreElements(); ) {
      BasicBlock succ=bbEnum.next();
      if (blockHasHandlers && succ.isExceptionHandlerBasicBlock()) {
        exceptionBlockSummary.add(bbLiveInfo[succ.getNumber()].getIn());
      }
 else {
        currentSet.add(bbLiveInfo[succ.getNumber()].getIn());
      }
    }
  }
  if (verbose) {
    System.out.println("String_Node_Str");
    System.out.println("String_Node_Str" + currentSet);
    System.out.println("String_Node_Str" + exceptionBlockSummary);
  }
  if (bbLiveInfo[block.getNumber()].BBKillSet() == null) {
    bbLiveInfo[block.getNumber()].createKillAndGen();
    computeBlockGenAndKill(block,ir);
  }
  currentSet.remove(bbLiveInfo[block.getNumber()].BBKillSet());
  if (blockHasHandlers) {
    currentSet.add(exceptionBlockSummary);
    currentSet.remove(bbLiveInfo[block.getNumber()].firstPEIKillSet());
  }
  currentSet.add(bbLiveInfo[block.getNumber()].getGen());
  if (bbLiveInfo[block.getNumber()].getIn().add(currentSet)) {
    if (verbose) {
      System.out.println("String_Node_Str" + currentSet);
    }
    return true;
  }
 else {
    if (verbose) {
      System.out.println("String_Node_Str" + currentSet);
    }
    return false;
  }
}

Fixed version (ground truth):
/** 
 * Compute the in set for this block given the out, gen, and kill set
 * @param block the block of interest
 * @param reuseCurrentSet whether we can reuse the "currentSet" or elseclear it out and recompute the meet of our succs
 * @param ir the governing ir
 */
private boolean processBlock(BasicBlock block,boolean reuseCurrentSet,IR ir){
  if (verbose) {
    System.out.println("String_Node_Str" + block + "String_Node_Str"+ block.getNumberOfOut());
    block.printExtended();
  }
  if (bbLiveInfo[block.getNumber()].BBKillSet() == null) {
    bbLiveInfo[block.getNumber()].createKillAndGen();
    computeBlockGenAndKill(block,ir);
  }
  LiveSet exceptionBlockSummary=new LiveSet();
  boolean blockHasHandlers=bbLiveInfo[block.getNumber()].getContainsPEIWithHandler();
  if (!reuseCurrentSet) {
    currentSet.clear();
    for (BasicBlockEnumeration bbEnum=block.getOut(); bbEnum.hasMoreElements(); ) {
      BasicBlock succ=bbEnum.next();
      if (blockHasHandlers && succ.isExceptionHandlerBasicBlock()) {
        exceptionBlockSummary.add(bbLiveInfo[succ.getNumber()].getIn());
      }
 else {
        currentSet.add(bbLiveInfo[succ.getNumber()].getIn());
      }
    }
  }
  if (verbose) {
    System.out.println("String_Node_Str");
    System.out.println("String_Node_Str" + currentSet);
    System.out.println("String_Node_Str" + exceptionBlockSummary);
  }
  currentSet.remove(bbLiveInfo[block.getNumber()].BBKillSet());
  if (blockHasHandlers) {
    currentSet.add(exceptionBlockSummary);
    currentSet.remove(bbLiveInfo[block.getNumber()].firstPEIKillSet());
  }
  currentSet.add(bbLiveInfo[block.getNumber()].getGen());
  if (bbLiveInfo[block.getNumber()].getIn().add(currentSet)) {
    if (verbose) {
      System.out.println("String_Node_Str" + currentSet);
    }
    return true;
  }
 else {
    if (verbose) {
      System.out.println("String_Node_Str" + currentSet);
    }
    return false;
  }
}