Program: 82968
Project: 82968
Buggy source:
@Override public void writeExpression(MethodWriter writer,IType type) throws BytecodeException {
  final int typecode=this.field.getType().getTypecode();
  final int lineNumber=this.getLineNumber();
  boolean receiver=this.receiver != null;
  if (type == Types.VOID) {
    if (this.canUseIINC(typecode)) {
      writer.writeIINC(((IVariable)this.field).getLocalIndex(),this.value);
      return;
    }
    this.field.writeGet_PreReceiver(writer,lineNumber);
    if (receiver) {
      this.receiver.writeExpression(writer,null);
      writer.writeInsn(Opcodes.DUP);
    }
    this.field.writeGet_Get(writer,lineNumber);
    this.field.writeGet_Unwrap(writer,lineNumber);
    this.writeAdd1(writer,typecode);
    this.field.writeSet_Wrap(writer,lineNumber);
    this.field.writeSet_Set(writer,lineNumber);
    return;
  }
  if (this.canUseIINC(typecode)) {
    int localIndex=((IVariable)this.field).getLocalIndex();
    if (this.prefix) {
      writer.writeIINC(localIndex,this.value);
      writer.writeVarInsn(this.field.getType().getLoadOpcode(),localIndex);
    }
 else {
      writer.writeVarInsn(this.field.getType().getLoadOpcode(),localIndex);
      writer.writeIINC(localIndex,this.value);
    }
  }
 else {
    int localCount=0;
    this.field.writeSet_PreReceiver(writer,lineNumber);
    if (receiver) {
      localCount=writer.localCount();
      this.receiver.writeExpression(writer,null);
      writer.writeInsn(Opcodes.DUP);
      writer.writeVarInsn(Opcodes.ASTORE,localCount);
    }
    final boolean tempValue=this.field.writeSet_PreValue(writer,lineNumber);
    final int dupOpcode=tempValue ? Opcodes.AUTO_DUP_X1 : Opcodes.AUTO_DUP;
{
      this.field.writeGet_PreReceiver(writer,lineNumber);
      if (receiver) {
        writer.writeVarInsn(Opcodes.ALOAD,localCount);
      }
      this.field.writeGet_Get(writer,lineNumber);
      this.field.writeGet_Unwrap(writer,lineNumber);
    }
    if (this.prefix) {
      this.writeAdd1(writer,typecode);
      writer.writeInsn(dupOpcode);
    }
 else {
      writer.writeInsn(dupOpcode);
      this.writeAdd1(writer,typecode);
    }
    this.field.writeSet_Wrap(writer,lineNumber);
    this.field.writeSet_Set(writer,lineNumber);
    if (receiver) {
      writer.resetLocals(localCount);
    }
  }
  if (type != null) {
    this.field.getType().writeCast(writer,type,lineNumber);
  }
}

Fixed version (ground truth):
@Override public void writeExpression(MethodWriter writer,IType type) throws BytecodeException {
  final int typecode=this.field.getType().getTypecode();
  final int lineNumber=this.getLineNumber();
  boolean receiver=this.receiver != null;
  if (type == Types.VOID) {
    if (this.canUseIINC(typecode)) {
      writer.writeIINC(((IVariable)this.field).getLocalIndex(),this.value);
      return;
    }
    this.field.writeSet_PreValue(writer,lineNumber);
    if (receiver) {
      this.receiver.writeExpression(writer,null);
      writer.writeInsn(Opcodes.DUP);
    }
    this.field.writeGet_Get(writer,lineNumber);
    this.field.writeGet_Unwrap(writer,lineNumber);
    this.writeAdd1(writer,typecode);
    this.field.writeSet_Wrap(writer,lineNumber);
    this.field.writeSet_Set(writer,lineNumber);
    return;
  }
  if (this.canUseIINC(typecode)) {
    int localIndex=((IVariable)this.field).getLocalIndex();
    if (this.prefix) {
      writer.writeIINC(localIndex,this.value);
      writer.writeVarInsn(this.field.getType().getLoadOpcode(),localIndex);
    }
 else {
      writer.writeVarInsn(this.field.getType().getLoadOpcode(),localIndex);
      writer.writeIINC(localIndex,this.value);
    }
  }
 else {
    int receiverIndex=0;
    if (receiver) {
      receiverIndex=writer.localCount();
      this.receiver.writeExpression(writer,null);
      writer.writeInsn(Opcodes.DUP);
      writer.writeVarInsn(Opcodes.ASTORE,receiverIndex);
    }
    final boolean tempValue=this.field.writeSet_PreValue(writer,lineNumber);
    final int dupOpcode=tempValue || receiver ? Opcodes.AUTO_DUP_X1 : Opcodes.AUTO_DUP;
{
      if (receiver) {
        writer.writeVarInsn(Opcodes.ALOAD,receiverIndex);
      }
      this.field.writeGet_Get(writer,lineNumber);
      this.field.writeGet_Unwrap(writer,lineNumber);
    }
    if (this.prefix) {
      this.writeAdd1(writer,typecode);
      writer.writeInsn(dupOpcode);
    }
 else {
      writer.writeInsn(dupOpcode);
      this.writeAdd1(writer,typecode);
    }
    this.field.writeSet_Wrap(writer,lineNumber);
    this.field.writeSet_Set(writer,lineNumber);
    if (receiver) {
      writer.resetLocals(receiverIndex);
    }
  }
  if (type != null) {
    this.field.getType().writeCast(writer,type,lineNumber);
  }
}