Program: 186588
Project: 186588
Buggy source:
private void loadMethod(MethodInfo method){
  MethodCode mcode=method.getCode();
  InstructionHandle exit;
  exit=(InstructionHandle)method.getCustomValue(KEY_NOP);
  if (exit == null) {
    exit=new InstructionList(new NOP()).getStart();
    method.setCustomValue(KEY_NOP,exit);
  }
  this.getStatements().add(exit);
  for (Iterator<?> l=mcode.getInstructionList(true,false).iterator(); l.hasNext(); ) {
    InstructionHandle handle=(InstructionHandle)l.next();
    this.getStatements().add(handle);
    Instruction instr=handle.getInstruction();
    if (instr instanceof BranchInstruction) {
      if (instr instanceof Select) {
        Select s=(Select)instr;
        InstructionHandle[] target=s.getTargets();
        for (        InstructionHandle aTarget : target) {
          this.getFlow().addEdge(new FlowEdge(handle,aTarget,FlowEdge.TRUE_EDGE));
        }
        this.getFlow().addEdge(new FlowEdge(handle,s.getTarget(),FlowEdge.FALSE_EDGE));
      }
 else {
        BranchInstruction b=(BranchInstruction)instr;
        this.getFlow().addEdge(new FlowEdge(handle,b.getTarget(),FlowEdge.TRUE_EDGE));
      }
    }
    if (handle.getNext() != null && !(instr instanceof UnconditionalBranch || instr instanceof Select || instr instanceof ReturnInstruction)) {
      if (instr instanceof BranchInstruction) {
        this.getFlow().addEdge(new FlowEdge(handle,handle.getNext(),FlowEdge.FALSE_EDGE));
      }
 else {
        this.getFlow().addEdge(new FlowEdge(handle,handle.getNext(),FlowEdge.NORMAL_EDGE));
      }
    }
    if (instr instanceof ReturnInstruction) {
      this.getFlow().addEdge(new FlowEdge(handle,exit,FlowEdge.NORMAL_EDGE));
    }
  }
}

Fixed version (ground truth):
private void loadMethod(MethodInfo method){
  MethodCode mcode=method.getCode();
  InstructionHandle exit;
  exit=(InstructionHandle)method.getCustomValue(KEY_NOP);
  if (exit == null) {
    exit=new InstructionList(new NOP()).getStart();
    method.setCustomValue(KEY_NOP,exit);
  }
  this.getStatements().add(exit);
  InstructionList il=mcode.getInstructionList(true,false);
  il.setPositions();
  for (Iterator<?> l=il.iterator(); l.hasNext(); ) {
    InstructionHandle handle=(InstructionHandle)l.next();
    this.getStatements().add(handle);
    Instruction instr=handle.getInstruction();
    if (instr instanceof BranchInstruction) {
      if (instr instanceof Select) {
        Select s=(Select)instr;
        InstructionHandle[] target=s.getTargets();
        for (        InstructionHandle aTarget : target) {
          this.getFlow().addEdge(new FlowEdge(handle,aTarget,FlowEdge.TRUE_EDGE));
        }
        this.getFlow().addEdge(new FlowEdge(handle,s.getTarget(),FlowEdge.FALSE_EDGE));
      }
 else {
        BranchInstruction b=(BranchInstruction)instr;
        this.getFlow().addEdge(new FlowEdge(handle,b.getTarget(),FlowEdge.TRUE_EDGE));
      }
    }
    if (handle.getNext() != null && !(instr instanceof UnconditionalBranch || instr instanceof Select || instr instanceof ReturnInstruction)) {
      if (instr instanceof BranchInstruction) {
        this.getFlow().addEdge(new FlowEdge(handle,handle.getNext(),FlowEdge.FALSE_EDGE));
      }
 else {
        this.getFlow().addEdge(new FlowEdge(handle,handle.getNext(),FlowEdge.NORMAL_EDGE));
      }
    }
    if (instr instanceof ReturnInstruction) {
      this.getFlow().addEdge(new FlowEdge(handle,exit,FlowEdge.NORMAL_EDGE));
    }
  }
}