harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elena Sayapina" <sayap...@gmail.com>
Subject [drlvm] VM crashes instead of throwing VerifyError
Date Mon, 21 May 2007 11:39:13 GMT
Hello, everybody

26 tests from DRLVM Validation test suite (
http://issues.apache.org/jira/browse/HARMONY-3206)
failed on Harmony-r539909 during the last test cycle.



All these tests are negative and expect java.lang.VerifyError to be thrown,

but DRLVM crashes instead or throws no error.

It looks like regression in Verifier because these tests passed on
Harmony-r539255.

Please, use this small test as the failure example:



(tests that if the type of class instance that is the target of a method
invocation instruction

is not assignment compatible with the class type specified in the
instruction then VerifyError is thrown)



------------------------------------------
Test.java---------------------------------------------------------------

import java.lang.reflect.Method;



public class Test {



            public static void main(String[] args) {

                         try {

                                    Method method =
Invoke.class.getDeclaredMethod("test", new Class[] {});

                                    method.invoke(new Invoke(), new Object[]
{});

                                    System.out.println("TEST FAILED: no
error");

                            } catch(VerifyError e) {

                                    System.out.println("TEST PASSED: " + e);

                            } catch(Throwable e) {

                                    System.out.println("TEST FAILED:
unexpected " + e);

                            }

            }

}



------------------------------------------
Invoke.j--------------------------------------------------------------------

.class public Invoke

.super java/lang/Object



.method public <init>()V

   aload_0

   invokespecial java/lang/Object/<init>()V

   return

.end method



; test method

.method public test()V

   .limit stack 2

   .limit locals 2



   aload_0 ; push this



   ; invoke method of java/lang/Throwable class on Invoke class

   invokevirtual java/lang/Throwable/getMessage()Ljava/lang/String;



   return

              .end method

-----------------------------------------------------------------------------------------------------------------------------



Steps to reproduce (test source and classes are attached as test.zip,
password 12345):

1) Compile Invoke class: java –jar jasmine.jar Invoke.j

2) Compile Test class

3) Run Test class on Harmony



Output on Harmony-r540035 msvc release build:



Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software
Foundation or its licensors,

as applicable.

java version "1.5.0"

pre-alpha : not complete or compatible

svn = r540035, (May 21 2007), Windows/ia32/msvc 1310, release build

http://incubator.apache.org/harmony



Windows reported exception: 0xc0000005

Registers:

    EAX: 0x00000000, EBX: 0x00000000, ECX: 0x0013cc24, EDX: 0x00000001

    ESI: 0x0013cc74, EDI: 0x011af638, ESP: 0x0013cb34, EBP: 0x0013cb60

    EIP: 0x00519640

Stack trace:

  0: std::operator<<<std::char_traits<char> > (c:\program files\microsoft
visual studio .net 2003\vc

7\include\ostream:704)

  1: vf_set_error
(c:\bt\build\checkouts\drlvm\vm\vmcore\src\verifier\ver_utils.cpp:1040)

  2:
java/lang/ClassLoader.defineClass0(Ljava/lang/String;[BII)Ljava/lang/Class;
(ClassLoader.java:-

2)

  3:
java/lang/ClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/

lang/Class; (ClassLoader.java:417)

  4:
java/security/SecureClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/CodeSource;)Lj

ava/lang/Class; (SecureClassLoader.java:70)

  5:
java/net/URLClassLoader.findClassImpl([Ljava/net/URL;Ljava/lang/String;)Ljava/lang/Class;
(URLC

lassLoader.java:1214)

  6: java/net/URLClassLoader$4.run()Ljava/lang/Class; (URLClassLoader.java
:625)

  7: java/net/URLClassLoader$4.run()Ljava/lang/Object; (URLClassLoader.java
:1)

  8:
java/security/AccessController.doPrivilegedImpl(Ljava/security/PrivilegedAction;Ljava/security/

AccessControlContext;)Ljava/lang/Object; (AccessController.java:171)

  9:
java/security/AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/Acce

ssControlContext;)Ljava/lang/Object; (AccessController.java:64)

 10: java/net/URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class;
(URLClassLoader.java:627

)

 11: java/lang/ClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class; (
ClassLoader.java:554)

 12:
java/lang/ClassLoader$SystemClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
(ClassL

oader.java:942)

 13: java/lang/ClassLoader.loadClass(Ljava/lang/String;)Ljava/lang/Class; (
ClassLoader.java:311)

 14: ?? (??:-1)

<end of stack trace>



Output on Harmony-r539255 msvc release build:



Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software
Foundation or its licensors,

as applicable.

java version "1.5.0"

pre-alpha : not complete or compatible

svn = r539255, (May 18 2007), Windows/ia32/msvc 1310, release build

http://incubator.apache.org/harmony



TEST PASSED: java.lang.VerifyError: (class: Invoke, method: test()V)
Incompatible argument for function





Failed tests are:

vm.jvms.classFile.attributes.code.code11.code11

vm.jvms.classFile.constraints.structural.constraint11.initialization06.initialization06

vm.jvms.classFile.constraints.structural.constraint11.initialization08.initialization08

vm.jvms.classFile.constraints.structural.constraint13.invocation01.invocation01

vm.jvms.classFile.constraints.structural.constraint14.return03.return03

vm.jvms.classFile.constraints.structural.constraint16.putfield01.putfield01

vm.jvms.classFile.constraints.structural.constraint16.putfield02.putfield02

vm.jvms.classFile.constraints.structural.constraint16.putfield04.putfield04

vm.jvms.classFile.constraints.structural.constraint16.putfield06.putfield06

vm.jvms.classFile.constraints.structural.constraint16.putfield07.putfield07

vm.jvms.classFile.constraints.structural.constraint19.athrow01.athrow01

vm.jvms.classFile.constraints.structural.constraint41.methods04.methods04

vm.jvms.classFile.constraints.structural.constraint41.methods06.methods06

vm.jvms.classFile.constraints.structural.constraint41.methods08.methods08

vm.jvms.classFile.constraints.structural.constraint41.methods09.methods09

vm.jvms.classFile.methods.accessFlags.accessFlags26.accessFlags26

vm.jvms.classFile.verifier.bytecode.bytecode10.bytecode10

vm.jvms.classFile.verifier.bytecode.bytecode13.bytecode13

vm.jvms.classFile.verifier.bytecode.bytecode14.bytecode14

vm.jvms.classFile.verifier.bytecode.bytecode18.bytecode18

vm.jvms.instructions.exceptions.athrow.athrow03.athrow0301.athrow0301

vm.jvms.instructions.invokeReturn.areturn.areturn04.areturn0405.areturn0405

vm.jvms.instructions.invokeReturn.invokespecial.invokespecial17.invokespecial1701.invokespecial1701

vm.jvms.instructions.reftypes.getfield.getfield21.getfield2101.getfield2101

vm.jvms.instructions.reftypes.putfield.putfield22.putfield2206.putfield2206

vm.jvms.instructions.reftypes.putstatic.putstatic25.putstatic2506.putstatic2506





Thank you, Lena

Mime
View raw message