Program: 186696
Project: 186696
Buggy source:
private void interpret(InstructionList il,Map<InstructionHandle,T> start,boolean initialize){
  if (initialize) {
    InstructionHandle ih=il.getStart();
    while (ih != null) {
      results.put(ih,analysis.bottom());
      ih=ih.getNext();
    }
    results.putAll(start);
  }
 else {
    for (InstructionHandle ih=il.getStart(); ih != null; ih=ih.getNext()) {
      if (results.containsKey(ih))       continue;
      if (ih.getPrev() == null && !ih.hasTargeters()) {
        results.put(ih,analysis.initial(ih));
      }
 else {
        results.put(ih,analysis.bottom());
        if (ih.hasTargeters()) {
          for (          InstructionTargeter targeter : ih.getTargeters()) {
            if (targeter instanceof CodeExceptionGen) {
              results.put(ih,analysis.initial((CodeExceptionGen)targeter));
              break;
            }
          }
        }
      }
    }
  }
  LinkedList<Edge> worklist=new LinkedList<Edge>();
  for (  InstructionHandle ih : start.keySet()) {
    if (initialize) {
      worklist.addAll(getOutEdges(ih));
    }
 else     if (ih.getPrev() == null && !ih.hasTargeters()) {
      worklist.addAll(getOutEdges(ih));
    }
 else {
      worklist.addAll(getInEdges(il,ih));
    }
  }
  while (!worklist.isEmpty()) {
    Edge edge=worklist.removeFirst();
    InstructionHandle tail=edge.getTail();
    InstructionHandle head=edge.getHead();
    T tailValue=results.get(tail);
    T headValue=results.get(head);
    T transferred=analysis.transfer(tailValue,edge);
    if (!analysis.compare(transferred,headValue)) {
      T newValue=analysis.join(transferred,headValue);
      results.put(head,newValue);
      if (edge.getType() == EdgeType.EXIT_EDGE) {
        continue;
      }
      List<Edge> outEdges=getOutEdges(head);
      for (      Edge outEdge : outEdges) {
        if (worklist.contains(outEdge)) {
          continue;
        }
        if (outEdges.size() > 1) {
          worklist.addLast(outEdge);
        }
 else {
          worklist.addFirst(outEdge);
        }
      }
    }
  }
}

Fixed version (ground truth):
private void interpret(InstructionList il,Map<InstructionHandle,T> start,boolean initialize){
  if (initialize) {
    InstructionHandle ih=il.getStart();
    while (ih != null) {
      results.put(ih,analysis.bottom());
      ih=ih.getNext();
    }
    results.putAll(start);
  }
 else {
    for (InstructionHandle ih=il.getStart(); ih != null; ih=ih.getNext()) {
      if (results.containsKey(ih))       continue;
      if (ih.getPrev() == null) {
        results.put(ih,analysis.initial(ih));
      }
 else {
        results.put(ih,analysis.bottom());
        if (ih.hasTargeters()) {
          for (          InstructionTargeter targeter : ih.getTargeters()) {
            if (targeter instanceof CodeExceptionGen) {
              results.put(ih,analysis.initial((CodeExceptionGen)targeter));
              break;
            }
          }
        }
      }
    }
  }
  LinkedList<Edge> worklist=new LinkedList<Edge>();
  for (  InstructionHandle ih : start.keySet()) {
    if (initialize) {
      worklist.addAll(getOutEdges(ih));
    }
 else {
      List<Edge> inEdges=getInEdges(il,ih);
      if (inEdges.isEmpty()) {
        worklist.addAll(getOutEdges(ih));
      }
 else {
        worklist.addAll(inEdges);
      }
    }
  }
  while (!worklist.isEmpty()) {
    Edge edge=worklist.removeFirst();
    InstructionHandle tail=edge.getTail();
    InstructionHandle head=edge.getHead();
    T tailValue=results.get(tail);
    T headValue=results.get(head);
    T transferred=analysis.transfer(tailValue,edge);
    if (!analysis.compare(transferred,headValue)) {
      T newValue=analysis.join(transferred,headValue);
      results.put(head,newValue);
      if (edge.getType() == EdgeType.EXIT_EDGE) {
        continue;
      }
      List<Edge> outEdges=getOutEdges(head);
      for (      Edge outEdge : outEdges) {
        if (worklist.contains(outEdge)) {
          continue;
        }
        if (outEdges.size() > 1) {
          worklist.addLast(outEdge);
        }
 else {
          worklist.addFirst(outEdge);
        }
      }
    }
  }
}