I've found a crash using the anonymous class loader. It appears when using the constructor without a host class, I was not able to isolate the bug, sorry.
the code to reproduce the errors can be found here: http://weblogs.java.net/blog/forax/archive/2009/07/dlr_expression_1.html then patch ExprBuilder to create an error in the bytecode, by example coment the line that add a return at the end of the constrcutor and comments the line that use the verifier of ASM. public MethodHandle createMethodHandle(Class<?> hostClass) { ... -->comment the line below //init.visitInsn(Opcodes.RETURN); init.visitMaxs(0, 0); init.visitEnd(); mv.accept(cw); byte[] byteArray = cw.toByteArray(); --> comment the two lines below //DEBUG !! //ClassReader reader = new ClassReader(byteArray); //CheckClassAdapter.verify(reader, false, new PrintWriter(System.out)); And change the AnonymousClassLoaderStub to use the constructor without parameters. ----------------------------------------------------------------------------------------------------------------- public class AnonymousClassLoaderStub { private AnonymousClassLoaderStub() { // no instance } static Class<?> loadClass(Class<?> hostClass, byte[] byteArray) { try { Object anonymousClassLoader = ANONYMOUS_CLASSLOADER_CONSTRUCTOR.newInstance(/*hostClass*/); return (Class<?>)LOAD_CLASS.invoke(anonymousClassLoader, byteArray); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e.getCause()); } } private static final Constructor<?> ANONYMOUS_CLASSLOADER_CONSTRUCTOR; private static final Method LOAD_CLASS; static { try { Class<?> ANONYMOUS_CLASSLOADER_CLASS = Class.forName("sun.dyn.anon.AnonymousClassLoader"); ANONYMOUS_CLASSLOADER_CONSTRUCTOR = ANONYMOUS_CLASSLOADER_CLASS.getConstructor(/*Class.class*/); LOAD_CLASS = ANONYMOUS_CLASSLOADER_CLASS.getMethod("loadClass", byte[].class); } catch (ClassNotFoundException e) { throw new AssertionError(e); } catch (NoSuchMethodException e) { throw new AssertionError(e); } } } --------------------------------------------------------------------------------------------------------------------------------------------------------- Rémi _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev