harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "George Timoshenko (JIRA)" <j...@apache.org>
Subject [jira] Updated: (HARMONY-1874) [drlvm][jit] Jitrino/OPT does not reject class which contains aastore instruction with incorrect argument on Linux EM-64T
Date Wed, 01 Aug 2007 09:15:53 GMT

     [ https://issues.apache.org/jira/browse/HARMONY-1874?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

George Timoshenko updated HARMONY-1874:
---------------------------------------

    Attachment: HARMONY-1874.patch

the fix.

the problem was in the helper returned value consideration as a Ref

so the ZERO for comarison was not 0 but the base of compression

> [drlvm][jit] Jitrino/OPT does not reject class which contains aastore instruction with
incorrect argument on Linux EM-64T
> -------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-1874
>                 URL: https://issues.apache.org/jira/browse/HARMONY-1874
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: Linux EM-64T
>            Reporter: Irina Arkhipets
>         Attachments: cases.j, HARMONY-1874.patch, test.java
>
>
> J2SE VM Specification reads about the aastore instruction:
> ...
> The type of value must be assignment compatible (§2.6.6) with the type of the components
of the array referenced by arrayref. Assignment of a value of reference type S (source) to
a variable of reference type T (target) is allowed only when the type S supports all the operations
defined on type T. The detailed rules follow:
>     - If S is a class type, then: 
>         * If T is a class type, then S must be the same class (§2.8.1) as T, or S must
be a subclass of T; 
>         * If T is an interface type, S must implement (§2.13) interface T. 
>     - If S is an array type, namely the type SC[], that is, an array of components of
type SC, then: 
>         * If T is a class type, T must be Object (§2.4.6), or: 
>             ** If T is an array type, namely the type TC[], an array of components of
type TC, then eitherTC and SC must be the same primitive type, or 
>             ** TC and SC must both be reference types with type SC assignable to TC,
by these rules. 
> S cannot be an interface type, because there are no instances of interfaces, only instances
of classes and arrays.
> ...
> However,  VM does not reject class which contains incorrect aastore instructions:
>      - when T is class but it is  superclass of S
>      - when T is interface but S is not implemented T
>      - if S is interface and T is not Object class
>      - if T and S are different interfaces
> This bug is reproducible on Linux EM-64T with jitrino OPT only.
> It is not reproducible with interpreter and JET.
> Please, compile the following sources and run the test class with "-Xem:opt" switch on
Linux EM-64T server to reproduce this bug:
> --------- test.java ---------
> public class test {    
>     public static void main (String [] args)  throws InterruptedException {
>         /* T is class but it is  superclass of S */
>         try {
>             new cases().test1();
>             System.out.println("Case 1: FAILED");
>         } catch (ArrayStoreException e) {
>             System.out.println("Case 1: PASSED");
>         }
>         /* T is interface but S is not implemented T */
>         try {
>             new cases().test2();
>             System.out.println("Case 2: FAILED");
>         } catch (ArrayStoreException e) {
>             System.out.println("Case 2: PASSED");
>         }
>         /* S is interface and T is not Object class */
>         try {
>             new cases().test3();
>             System.out.println("Case3: FAILED");
>         } catch (ArrayStoreException e) {
>             System.out.println("Case 3: PASSED");
>         }
>         /* if T and S are different interfaces */
>         try {
>             new cases().test4();
>             System.out.println("Case3: FAILED");
>         } catch (ArrayStoreException e) {
>             System.out.println("Case 3: PASSED");
>         }
>    }
> }
> class MyClass extends MySuperClass {}
> class MySuperClass {}
> interface MyInterface {}
> interface MyInterface1 {}
> class MyImplClass implements MyInterface {}
> --------- cases.j ---------
> .class public cases
> .super java/lang/Object
> .field public testField LMyInterface;
> .method public <init>()V
>     aload_0
>     invokespecial java/lang/Object/<init>()V
>     return
> .end method 
> .method public test1()V
>     .limit locals 3
>     .limit stack 4
>     iconst_4
>     anewarray MyClass
>     astore_1
>     aload_1
>     iconst_1
>     new MySuperClass
>     dup
>     invokespecial MySuperClass/<init>()V
>     aastore 
>     return
> .end method
> .method public test2()V
>     .limit locals 3
>     .limit stack 4
>     iconst_4
>     anewarray MyInterface
>     astore_1 
>     aload_1
>     iconst_1
>     new MyClass
>     dup
>     invokespecial MyClass/<init>()V
>     aastore 
>     return
> .end method
> .method public test3()V
>     .limit locals 3
>     .limit stack 4
>     iconst_4
>     anewarray MyClass
>     astore_1 
>     aload_0
>     new MyImplClass
>     dup
>     invokespecial MyImplClass/<init>()V
>     putfield cases/testField LMyInterface;
>     aload_1
>     iconst_1
>     aload_0
>     getfield cases/testField LMyInterface;
>     aastore ; must throw java/lang/ArrayStoreException
>     return
> .end method
> .method public test4()V
>     .limit locals 3
>     .limit stack 4
>     iconst_4
>     anewarray MyInterface1
>     astore_1
>     aload_0
>     new MyImplClass
>     dup
>     invokespecial MyImplClass/<init>()V
>     putfield cases/testField LMyInterface;
>     aload_1
>     iconst_1
>     aload_0
>     getfield cases/testField LMyInterface;
>     aastore 
>     return
> .end method
> ------------------------------
> Sample output is:
> ...
> Case 1: FAILED
> Case 2: FAILED
> Case3: FAILED
> Case3: FAILED
> ...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message