hg: valhalla/valhalla/jdk: Fix specializer bug reported by Peter Levart related to improper handling of not-fully-instantiated class literals
Peter Levart
peter.levart at gmail.com
Sat Jan 10 14:20:35 UTC 2015
On 01/09/2015 10:44 PM, brian.goetz at oracle.com wrote:
> Changeset: 7a3e4270521d
> Author: briangoetz
> Date: 2015-01-09 16:44 -0500
> URL: http://hg.openjdk.java.net/valhalla/valhalla/jdk/rev/7a3e4270521d
>
> Fix specializer bug reported by Peter Levart related to improper handling of not-fully-instantiated class literals
>
> ! src/java.base/share/classes/valhalla/specializer/Specializer.java
> ! test/valhalla/test/valhalla/specializer/GenericMethodsTest.java
>
Thanks, I have another one. This time I think there's a problem with
array initializer in specialized code:
public class Pair<any T> {
T[] array;
public Pair(T v1, T v2) {
array = new T[]{v1, v2};
System.out.println("Ok for " + getClass());
}
public static void main(String[] args) {
new Pair<String>("aaa", "bbb");
new Pair<int>(1, 2);
new Pair<float>(1.1f, 2.2f);
}
}
This is the runtime failure:
Ok for class Pair
Specializing Pair${0=I}; searching for Pair.class (not found)
Specializing Pair${0=I}; searching for Pair.class (found)
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
Pair${0=I}.<init>(II)V @11: aastore
Reason:
Type integer (current frame, stack[4]) is not assignable to
'java/lang/Object'
Current Frame:
bci: @11
flags: { }
locals: { 'Pair${0=I}', integer, integer }
stack: { 'Pair${0=I}', '[I', '[I', integer, integer }
Bytecode:
0000000: 2ab7 000d 2a05 bc0a 5903 1b53 5904 1c53
0000010: b500 0fb2 0015 bb00 1759 b700 1812 1ab6
0000020: 001e 2ab6 0022 b600 25b6 0029 b600 2fb1
0000030:
at Pair.main(Pair.java:15)
Regards, Peter
More information about the valhalla-dev
mailing list