Status fields:
creation_ts: | 2008-07-07 17:49 |
---|---|
component: | verifier |
version: | 0.99.1 |
rep_platform: | All |
op_sys: | Linux |
bug_status: | NEW |
reporter: | gnu_andrew@member.fsf.org |
This is with 0.99.1 + the PPC64 patch (http://mips.complang.tuwien.ac.at/hg/cacao/rev/bb85a81bf759) java.lang.LinkageError: subtype constraint violated (C4 is not a subclass of java.lang.Iterable) at Test.<clinit>(Test.java:15) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:88) at java.lang.Thread.run(Thread.java:636) STATUS:Failed.`main' threw exception: java.lang.LinkageError: subtype constraint violated (C4 is not a subclass of java.lang.Iterable) result: Failed. Execution failed: `main' threw exception: java.lang.LinkageError: subtype constraint violated (C4 is not a subclass of java.lang.Iterable)
Edwin, is this one related to #82?
I looked at test 6571539 and it uses a class bad/C4.java that violates a subtype constrained on purpose (see hotspot/test/compiler/6571539/Test.java). The problem is that the test expects to get a IncompatibleClassChangeError when object.iterator() is called for the bad object for the first time. CACAO, however, throws a LinkageError when the <clinit> method does this: static Iterable badObject = new C4(); Correctly, I think, since C4 does not implement Iterable (the C4.class at runtime is from bad/C4.java). I know that HotSpot is correct by definition, but still: Why should any VM accept this assignment that violates the Java type system? The JVM Spec says about PUTSTATIC: If the field descriptor type is a reference type, then the value must be of a type that is assignment compatible (ยง2.6.7) with the field descriptor type. Do we really have to check that at runtime each time the PUTSTATIC is executed?
I take this one and will write an email to hotspot-dev.
For the record: http://mail.openjdk.java.net/pipermail/hotspot-dev/2008-July/000490.html
PR 90 seems to be the same bug.
From: David Holmes - Sun Microsystems <David.Holmes@Sun.COM> To: Christian Thalinger <twisti@complang.tuwien.ac.at> Subject: Re: Hotspot compiler test 6571539 problem with CACAO Date: Tue, 22 Jul 2008 08:21:35 +1000 (00:21 CEST) PS. For some historical references: http://gcc.gnu.org/ml/java/2001-01/msg00213.html and section 7 of 1998's "A Specification of Java Loading and Bytecode Verification" (http://citeseer.ist.psu.edu/goldberg98specification.html). David
Created an attachment (id=46) Verifier patch This one seems to fix the Verifier. It also allows Groovy to run (#90). Of course, nasty things happen at the time invokeinterface is actually executed.
Clojure works as well (bug 82).
date: | 2008-09-04 19:35 |
---|---|
desc: | Verifier patch |
type: | text/plain |
download: | udif |