You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "George Timoshenko (JIRA)" <ji...@apache.org> on 2007/08/01 11:15:53 UTC
[jira] Updated: (HARMONY-1874) [drlvm][jit] Jitrino/OPT does not
reject class which contains aastore instruction with incorrect argument on
Linux EM-64T
[ 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.