Program: 84682
Project: 84682
Buggy source:
@Override public void writeExpression(MethodWriter writer) throws BytecodeException {
  if (this.type.isArrayType()) {
    this.value1.writeExpression(writer);
    this.value2.writeExpression(writer);
    if (this.elementType.typeTag() == IType.PRIMITIVE) {
switch (((PrimitiveType)this.elementType).typecode) {
case ClassFormat.T_BYTE:
        writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
      return;
case ClassFormat.T_SHORT:
    writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
  return;
case ClassFormat.T_CHAR:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_INT:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_LONG:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_FLOAT:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_DOUBLE:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
return;
}
if (Types.STRING.isSuperTypeOf(this.elementType)) {
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
if (Types.STRING.isSuperTypeOf(this.elementType)) {
writer.writeTypeInsn(Opcodes.NEW,"String_Node_Str");
writer.writeInsn(Opcodes.DUP);
this.value1.writeExpression(writer);
this.value2.writeExpression(writer);
writer.writeInvokeInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
writer.writeTypeInsn(Opcodes.NEW,"String_Node_Str");
writer.writeInsn(Opcodes.DUP);
this.value1.writeExpression(writer);
this.value2.writeExpression(writer);
writer.writeInvokeInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
}

Fixed version (ground truth):
@Override public void writeExpression(MethodWriter writer) throws BytecodeException {
  if (this.type.isArrayType()) {
    this.firstValue.writeExpression(writer);
    this.lastValue.writeExpression(writer);
    if (this.elementType.typeTag() == IType.PRIMITIVE) {
switch (((PrimitiveType)this.elementType).typecode) {
case ClassFormat.T_BYTE:
        writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
      return;
case ClassFormat.T_SHORT:
    writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
  return;
case ClassFormat.T_CHAR:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_INT:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_LONG:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_FLOAT:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
case ClassFormat.T_DOUBLE:
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
return;
}
if (this.elementType.getTheClass() == Types.STRING_CLASS) {
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
writer.writeInvokeInsn(Opcodes.INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
if (this.elementType.getTheClass() == Types.STRING_CLASS) {
writer.writeTypeInsn(Opcodes.NEW,"String_Node_Str");
writer.writeInsn(Opcodes.DUP);
this.firstValue.writeExpression(writer);
this.lastValue.writeExpression(writer);
writer.writeInvokeInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
return;
}
writer.writeTypeInsn(Opcodes.NEW,"String_Node_Str");
writer.writeInsn(Opcodes.DUP);
this.firstValue.writeExpression(writer);
this.lastValue.writeExpression(writer);
writer.writeInvokeInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
}