Program: 184310
Project: 184310
Buggy source:
<T>byte[] doCompile(final String name,final Expr<T> expr,CompilerContext context){
  String actualClass=null;
  Class<?> cls=expr.getClass();
  do {
    if (cls.getGenericSuperclass() != null && cls.getGenericSuperclass() instanceof ParameterizedType) {
      ParameterizedType tp=(ParameterizedType)cls.getGenericSuperclass();
      if (tp.getActualTypeArguments()[0] instanceof Class) {
        Class<?> clz1=(Class<?>)tp.getActualTypeArguments()[0];
        actualClass=clz1.getName().replace('.','/');
        break;
      }
    }
    if (cls.getGenericInterfaces().length > 0) {
      for (      java.lang.reflect.Type tp : cls.getGenericInterfaces()) {
        ParameterizedType ttp=(ParameterizedType)tp;
        Class<?> clz1=(Class<?>)ttp.getActualTypeArguments()[0];
        actualClass=clz1.getName().replace('.','/');
        break;
      }
    }
    cls=cls.getSuperclass();
  }
 while (!Object.class.equals(cls));
  Preconditions.checkNotNull(actualClass);
  ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_MAXS);
  MethodVisitor mv;
  cw.visit(V1_6,ACC_PUBLIC + ACC_SUPER,name,"String_Node_Str","String_Node_Str",new String[]{"String_Node_Str"});
{
    mv=cw.visitMethod(ACC_PUBLIC,"String_Node_Str","String_Node_Str",null,null);
    mv.visitVarInsn(ALOAD,0);
    mv.visitMethodInsn(INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str");
    mv.visitInsn(RETURN);
    mv.visitMaxs(0,0);
    mv.visitEnd();
  }
{
    mv=cw.visitMethod(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC,"String_Node_Str","String_Node_Str",null,null);
    expr.compile(cw,mv,context);
switch (expr.getExprType(context).rawType) {
case Boolean:
      mv.visitMethodInsn(INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str");
    break;
case Long:
  mv.visitMethodInsn(INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str");
break;
default :
break;
}
mv.visitInsn(ARETURN);
mv.visitMaxs(0,0);
mv.visitEnd();
}
cw.visitEnd();
return cw.toByteArray();
}

Fixed version (ground truth):
<T>byte[] doCompile(final String name,final Expr<T> expr,CompilerContext context){
  String actualClass=null;
  Class<?> cls=expr.getClass();
  do {
    if (cls.getGenericSuperclass() != null && cls.getGenericSuperclass() instanceof ParameterizedType) {
      ParameterizedType tp=(ParameterizedType)cls.getGenericSuperclass();
      if (tp.getActualTypeArguments()[0] instanceof Class) {
        Class<?> clz1=(Class<?>)tp.getActualTypeArguments()[0];
        actualClass=clz1.getName().replace('.','/');
        break;
      }
    }
    if (cls.getGenericInterfaces().length > 0) {
      for (      java.lang.reflect.Type tp : cls.getGenericInterfaces()) {
        ParameterizedType ttp=(ParameterizedType)tp;
        Class<?> clz1=(Class<?>)ttp.getActualTypeArguments()[0];
        actualClass=clz1.getName().replace('.','/');
        break;
      }
    }
    cls=cls.getSuperclass();
  }
 while (!Object.class.equals(cls));
  Preconditions.checkNotNull(actualClass);
  ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_MAXS);
  MethodVisitor mv;
  cw.visit(V1_6,ACC_PUBLIC + ACC_SUPER,name,null,"String_Node_Str",new String[]{"String_Node_Str"});
{
    mv=cw.visitMethod(ACC_PUBLIC,"String_Node_Str","String_Node_Str",null,null);
    mv.visitVarInsn(ALOAD,0);
    mv.visitMethodInsn(INVOKESPECIAL,"String_Node_Str","String_Node_Str","String_Node_Str");
    mv.visitInsn(RETURN);
    mv.visitMaxs(0,0);
    mv.visitEnd();
  }
{
    mv=cw.visitMethod(ACC_PUBLIC,"String_Node_Str","String_Node_Str",null,null);
    expr.compile(cw,mv,context);
switch (expr.getExprType(context).rawType) {
case Boolean:
      mv.visitMethodInsn(INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str");
    break;
case Long:
  mv.visitMethodInsn(INVOKESTATIC,"String_Node_Str","String_Node_Str","String_Node_Str");
break;
default :
break;
}
mv.visitInsn(ARETURN);
mv.visitMaxs(0,0);
mv.visitEnd();
}
cw.visitEnd();
return cw.toByteArray();
}