Program: 99668
Project: 99668
Buggy source:
protected void processIf(CAstNode n,boolean isExpr,WalkContext c,CAstVisitor<WalkContext> visitor){
  WalkContext context=c;
  PreBasicBlock trueB=null, falseB=null;
  CAstNode l=n.getChild(0);
  visitor.visit(l,context,visitor);
  context.cfg().addInstruction(insts.ConditionalBranchInstruction(context.cfg().currentInstruction,translateConditionOpcode(CAstOperator.OP_EQ),null,c.getValue(l),context.currentScope().getConstantValue(new Integer(0)),-1));
  PreBasicBlock srcB=context.cfg().getCurrentBlock();
  context.cfg().newBlock(true);
  CAstNode r=n.getChild(1);
  visitor.visit(r,context,visitor);
  if (isExpr)   context.cfg().addInstruction(new AssignInstruction(context.cfg().currentInstruction,c.getValue(n),c.getValue(r)));
  if (n.getChildCount() == 3) {
    if (!context.cfg().isDeadBlock(context.cfg().getCurrentBlock())) {
      context.cfg().addInstruction(insts.GotoInstruction(context.cfg().currentInstruction,-1));
      trueB=context.cfg().getCurrentBlock();
      context.cfg().newBlock(false);
    }
    falseB=context.cfg().getCurrentBlock();
    CAstNode f=n.getChild(2);
    visitor.visit(f,context,visitor);
    if (isExpr)     context.cfg().addInstruction(new AssignInstruction(context.cfg().currentInstruction,c.getValue(n),c.getValue(f)));
  }
  context.cfg().newBlock(true);
  if (n.getChildCount() == 3) {
    if (trueB != null)     context.cfg().addEdge(trueB,context.cfg().getCurrentBlock());
    context.cfg().addEdge(srcB,falseB);
  }
 else {
    context.cfg().addEdge(srcB,context.cfg().getCurrentBlock());
  }
}

Fixed version (ground truth):
protected void processIf(CAstNode n,boolean isExpr,WalkContext c,CAstVisitor<WalkContext> visitor){
  WalkContext context=c;
  PreBasicBlock trueB=null, falseB=null;
  CAstNode l=n.getChild(0);
  visitor.visit(l,context,visitor);
  context.cfg().addInstruction(insts.ConditionalBranchInstruction(context.cfg().currentInstruction,translateConditionOpcode(CAstOperator.OP_EQ),null,c.getValue(l),context.currentScope().getConstantValue(new Integer(0)),-1));
  PreBasicBlock srcB=context.cfg().getCurrentBlock();
  context.cfg().newBlock(true);
  CAstNode r=n.getChild(1);
  visitor.visit(r,context,visitor);
  if (isExpr)   context.cfg().addInstruction(new AssignInstruction(context.cfg().currentInstruction,c.getValue(n),c.getValue(r)));
  if (n.getChildCount() == 3) {
    if (!context.cfg().isDeadBlock(context.cfg().getCurrentBlock())) {
      context.cfg().addInstruction(insts.GotoInstruction(context.cfg().currentInstruction,-1));
      trueB=context.cfg().getCurrentBlock();
      context.cfg().newBlock(false);
    }
    falseB=context.cfg().getCurrentBlock();
    CAstNode f=n.getChild(2);
    context.cfg().deadBlocks.remove(falseB);
    visitor.visit(f,context,visitor);
    if (isExpr)     context.cfg().addInstruction(new AssignInstruction(context.cfg().currentInstruction,c.getValue(n),c.getValue(f)));
  }
  context.cfg().newBlock(true);
  if (n.getChildCount() == 3) {
    if (trueB != null)     context.cfg().addEdge(trueB,context.cfg().getCurrentBlock());
    context.cfg().addEdge(srcB,falseB);
  }
 else {
    context.cfg().addEdge(srcB,context.cfg().getCurrentBlock());
  }
}