Program: 84437
Project: 84437
Buggy source:
@Override public void write(ClassWriter writer) throws BytecodeException {
  IType parType=this.type.resolveType(PAR_TYPE);
  IType returnType=this.type.resolveType(RETURN_TYPE);
  String parFrameType=parType.getInternalName();
  StringBuilder builder=new StringBuilder("String_Node_Str");
  this.type.appendSignature(builder);
  String signature=builder.toString();
  writer.visit(DyvilCompiler.classVersion,0,this.internalClassName,signature,"String_Node_Str",new String[]{"String_Node_Str"});
  MethodVisitor mv=writer.visitMethod(0,"String_Node_Str","String_Node_Str",null,null);
  mv.visitCode();
  mv.visitVarInsn(Opcodes.ALOAD,0);
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
  mv.visitInsn(Opcodes.RETURN);
  mv.visitMaxs(1,1);
  mv.visitEnd();
  StringBuilder descBuilder=new StringBuilder();
  descBuilder.append('(');
  parType.appendExtendedName(descBuilder);
  String definedDesc=descBuilder.append("String_Node_Str").toString();
  StringBuilder signatureBuilder=new StringBuilder();
  signatureBuilder.append('(');
  parType.appendSignature(signatureBuilder);
  signature=signatureBuilder.append("String_Node_Str").toString();
  MethodWriter mw=new MethodWriterImpl(writer,writer.visitMethod(Modifiers.PUBLIC,"String_Node_Str",definedDesc,signature,null));
  Label elseLabel=new Label();
  mw.begin();
  mw.setThisType(this.internalClassName);
  mw.setLocalType(1,parFrameType);
  this.pattern.writeInvJump(mw,1,elseLabel);
  if (this.condition != null) {
    this.condition.writeInvJump(mw,elseLabel);
  }
  mw.writeLDC(1);
  mw.writeInsn(Opcodes.IRETURN);
  mw.writeLabel(elseLabel);
  mw.writeLDC(0);
  mw.writeInsn(Opcodes.IRETURN);
  mw.end();
  descBuilder.deleteCharAt(descBuilder.length() - 1);
  returnType.appendExtendedName(descBuilder);
  String applyDesc=descBuilder.toString();
  signatureBuilder.deleteCharAt(signatureBuilder.length() - 1);
  returnType.appendExtendedName(signatureBuilder);
  signature=signatureBuilder.toString();
  mw=new MethodWriterImpl(writer,writer.visitMethod(Modifiers.PUBLIC,"String_Node_Str",applyDesc,signature,null));
  elseLabel=new Label();
  mw.begin();
  mw.setThisType(this.internalClassName);
  mw.setLocalType(1,parFrameType);
  this.pattern.writeInvJump(mw,1,elseLabel);
  if (this.condition != null) {
    this.condition.writeInvJump(mw,elseLabel);
  }
  mw.writeInsn(Opcodes.ACONST_NULL);
  mw.writeInsn(Opcodes.ARETURN);
  mw.writeLabel(elseLabel);
  if (this.action != null) {
    this.action.writeExpression(mw,returnType);
  }
 else {
    mw.writeInsn(Opcodes.ACONST_NULL);
  }
  mw.writeInsn(Opcodes.ARETURN);
  mw.end(returnType);
  if (!parType.classEquals(Types.OBJECT) || !returnType.classEquals(Types.OBJECT)) {
    mv=writer.visitMethod(Modifiers.PUBLIC | Modifiers.SYNTHETIC | Modifiers.BRIDGE,"String_Node_Str","String_Node_Str",null,null);
    mv.visitCode();
    mv.visitVarInsn(Opcodes.ALOAD,0);
    mv.visitVarInsn(Opcodes.ALOAD,1);
    mv.visitTypeInsn(Opcodes.CHECKCAST,parFrameType);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,this.internalClassName,"String_Node_Str",definedDesc,false);
    mv.visitInsn(Opcodes.IRETURN);
    mv.visitMaxs(2,2);
    mv=writer.visitMethod(Modifiers.PUBLIC | Modifiers.SYNTHETIC | Modifiers.BRIDGE,"String_Node_Str","String_Node_Str",null,null);
    mv.visitCode();
    mv.visitVarInsn(Opcodes.ALOAD,0);
    mv.visitVarInsn(Opcodes.ALOAD,1);
    mv.visitTypeInsn(Opcodes.CHECKCAST,parFrameType);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,this.internalClassName,"String_Node_Str",applyDesc,false);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(2,2);
  }
}

Fixed version (ground truth):
@Override public void write(ClassWriter writer) throws BytecodeException {
  IType parType=this.type.resolveTypeSafely(PAR_TYPE);
  IType returnType=this.type.resolveTypeSafely(RETURN_TYPE);
  String parFrameType=parType.getInternalName();
  StringBuilder builder=new StringBuilder("String_Node_Str");
  this.type.appendSignature(builder);
  String signature=builder.toString();
  writer.visit(DyvilCompiler.classVersion,0,this.internalClassName,signature,"String_Node_Str",new String[]{"String_Node_Str"});
  MethodVisitor mv=writer.visitMethod(0,"String_Node_Str","String_Node_Str",null,null);
  mv.visitCode();
  mv.visitVarInsn(Opcodes.ALOAD,0);
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str",false);
  mv.visitInsn(Opcodes.RETURN);
  mv.visitMaxs(1,1);
  mv.visitEnd();
  StringBuilder descBuilder=new StringBuilder();
  descBuilder.append('(');
  parType.appendExtendedName(descBuilder);
  String definedDesc=descBuilder.append("String_Node_Str").toString();
  StringBuilder signatureBuilder=new StringBuilder();
  signatureBuilder.append('(');
  parType.appendSignature(signatureBuilder);
  signature=signatureBuilder.append("String_Node_Str").toString();
  MethodWriter mw=new MethodWriterImpl(writer,writer.visitMethod(Modifiers.PUBLIC,"String_Node_Str",definedDesc,signature,null));
  Label elseLabel=new Label();
  mw.begin();
  mw.setThisType(this.internalClassName);
  mw.setLocalType(1,parFrameType);
  this.pattern.writeInvJump(mw,1,elseLabel);
  if (this.condition != null) {
    this.condition.writeInvJump(mw,elseLabel);
  }
  mw.writeLDC(1);
  mw.writeInsn(Opcodes.IRETURN);
  mw.writeLabel(elseLabel);
  mw.writeLDC(0);
  mw.writeInsn(Opcodes.IRETURN);
  mw.end();
  descBuilder.deleteCharAt(descBuilder.length() - 1);
  returnType.appendExtendedName(descBuilder);
  String applyDesc=descBuilder.toString();
  signatureBuilder.deleteCharAt(signatureBuilder.length() - 1);
  returnType.appendExtendedName(signatureBuilder);
  signature=signatureBuilder.toString();
  mw=new MethodWriterImpl(writer,writer.visitMethod(Modifiers.PUBLIC,"String_Node_Str",applyDesc,signature,null));
  elseLabel=new Label();
  mw.begin();
  mw.setThisType(this.internalClassName);
  mw.setLocalType(1,parFrameType);
  this.pattern.writeInvJump(mw,1,elseLabel);
  if (this.condition != null) {
    this.condition.writeInvJump(mw,elseLabel);
  }
  mw.writeInsn(Opcodes.ACONST_NULL);
  mw.writeInsn(Opcodes.ARETURN);
  mw.writeLabel(elseLabel);
  if (this.action != null) {
    this.action.writeExpression(mw,returnType);
  }
 else {
    mw.writeInsn(Opcodes.ACONST_NULL);
  }
  mw.writeInsn(Opcodes.ARETURN);
  mw.end(returnType);
  if (!parType.classEquals(Types.OBJECT) || !returnType.classEquals(Types.OBJECT)) {
    mv=writer.visitMethod(Modifiers.PUBLIC | Modifiers.SYNTHETIC | Modifiers.BRIDGE,"String_Node_Str","String_Node_Str",null,null);
    mv.visitCode();
    mv.visitVarInsn(Opcodes.ALOAD,0);
    mv.visitVarInsn(Opcodes.ALOAD,1);
    mv.visitTypeInsn(Opcodes.CHECKCAST,parFrameType);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,this.internalClassName,"String_Node_Str",definedDesc,false);
    mv.visitInsn(Opcodes.IRETURN);
    mv.visitMaxs(2,2);
    mv=writer.visitMethod(Modifiers.PUBLIC | Modifiers.SYNTHETIC | Modifiers.BRIDGE,"String_Node_Str","String_Node_Str",null,null);
    mv.visitCode();
    mv.visitVarInsn(Opcodes.ALOAD,0);
    mv.visitVarInsn(Opcodes.ALOAD,1);
    mv.visitTypeInsn(Opcodes.CHECKCAST,parFrameType);
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,this.internalClassName,"String_Node_Str",applyDesc,false);
    mv.visitInsn(Opcodes.ARETURN);
    mv.visitMaxs(2,2);
  }
}