Program: 88666
Project: 88666
Buggy source:
/** 
 * Creates a binary expression that is not a comparison
 */
private soot.Value getBinaryExpr(soot.Value lVal,soot.Value rVal,polyglot.ast.Binary.Operator operator){
  soot.Value rValue=null;
  if (lVal instanceof soot.jimple.ConditionExpr) {
    lVal=handleCondBinExpr((soot.jimple.ConditionExpr)lVal);
  }
  if (rVal instanceof soot.jimple.ConditionExpr) {
    rVal=handleCondBinExpr((soot.jimple.ConditionExpr)rVal);
  }
  if (operator == polyglot.ast.Binary.ADD) {
    rValue=soot.jimple.Jimple.v().newAddExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.SUB) {
    rValue=soot.jimple.Jimple.v().newSubExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.MUL) {
    rValue=soot.jimple.Jimple.v().newMulExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.DIV) {
    rValue=soot.jimple.Jimple.v().newDivExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.SHR) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newShrExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.USHR) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.SHL) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newShlExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.BIT_AND) {
    rValue=soot.jimple.Jimple.v().newAndExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.BIT_OR) {
    rValue=soot.jimple.Jimple.v().newOrExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.BIT_XOR) {
    rValue=soot.jimple.Jimple.v().newXorExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.MOD) {
    rValue=soot.jimple.Jimple.v().newRemExpr(lVal,rVal);
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  return rValue;
}

Fixed version (ground truth):
/** 
 * Creates a binary expression that is not a comparison
 */
private soot.Value getBinaryExpr(soot.Value lVal,soot.Value rVal,polyglot.ast.Binary.Operator operator){
  soot.Value rValue=null;
  if (lVal instanceof soot.jimple.ConditionExpr) {
    lVal=handleCondBinExpr((soot.jimple.ConditionExpr)lVal);
  }
  if (rVal instanceof soot.jimple.ConditionExpr) {
    rVal=handleCondBinExpr((soot.jimple.ConditionExpr)rVal);
  }
  if (operator == polyglot.ast.Binary.ADD) {
    rValue=soot.jimple.Jimple.v().newAddExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.SUB) {
    rValue=soot.jimple.Jimple.v().newSubExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.MUL) {
    rValue=soot.jimple.Jimple.v().newMulExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.DIV) {
    rValue=soot.jimple.Jimple.v().newDivExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.SHR) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newShrExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newShrExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.USHR) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newUshrExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.SHL) {
    if (rVal.getType().equals(soot.LongType.v())) {
      soot.Local intVal=lg.generateLocal(soot.IntType.v());
      soot.jimple.CastExpr castExpr=soot.jimple.Jimple.v().newCastExpr(rVal,soot.IntType.v());
      soot.jimple.AssignStmt assignStmt=soot.jimple.Jimple.v().newAssignStmt(intVal,castExpr);
      body.getUnits().add(assignStmt);
      rValue=soot.jimple.Jimple.v().newShlExpr(lVal,intVal);
    }
 else {
      rValue=soot.jimple.Jimple.v().newShlExpr(lVal,rVal);
    }
  }
 else   if (operator == polyglot.ast.Binary.BIT_AND) {
    rValue=soot.jimple.Jimple.v().newAndExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.BIT_OR) {
    rValue=soot.jimple.Jimple.v().newOrExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.BIT_XOR) {
    rValue=soot.jimple.Jimple.v().newXorExpr(lVal,rVal);
  }
 else   if (operator == polyglot.ast.Binary.MOD) {
    rValue=soot.jimple.Jimple.v().newRemExpr(lVal,rVal);
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  return rValue;
}