Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8033734 | 9 | Calvin Cheung | P3 | Closed | Fixed | b04 |
JDK-8045216 | 8u25 | Calvin Cheung | P3 | Resolved | Fixed | b01 |
JDK-8053221 | emb-8u26 | Calvin Cheung | P3 | Resolved | Fixed | b17 |
Consider the following case:
class T1 { public void m() {} }
class T2 { public abstract void m(); }
class T3 { public void m() {} }
Call site: T3 { invokevirtual T2.m()V T3 }
NB: class T2 isn't marked as abstract.
VM: AbstractMethodError: p1.T2.m()V
JVMS: T3.m() should be invoked
The following check during method resolution is removed in JVMS-8 [1]:
JVMS-5.4.3.3. Method Resolution
"If method lookup succeeds and the method is abstract, but C is not abstract, method resolution throws an AbstractMethodError."
ILW = HLM = P3
I = H = JVMS-8 violation; severely affects testing of default methods
L = L = javac doesn't generate such bytecode
W = M = add ACC_ABSTRACT to class' attributes
[1] http://cr.openjdk.java.net/~dlsmith/jsr335-0.9.1/J.html
class T1 { public void m() {} }
class T2 { public abstract void m(); }
class T3 { public void m() {} }
Call site: T3 { invokevirtual T2.m()V T3 }
NB: class T2 isn't marked as abstract.
VM: AbstractMethodError: p1.T2.m()V
JVMS: T3.m() should be invoked
The following check during method resolution is removed in JVMS-8 [1]:
JVMS-5.4.3.3. Method Resolution
"If method lookup succeeds and the method is abstract, but C is not abstract, method resolution throws an AbstractMethodError."
ILW = HLM = P3
I = H = JVMS-8 violation; severely affects testing of default methods
L = L = javac doesn't generate such bytecode
W = M = add ACC_ABSTRACT to class' attributes
[1] http://cr.openjdk.java.net/~dlsmith/jsr335-0.9.1/J.html
- backported by
-
JDK-8045216 Attempt to resolve abstract method in concrete class fails with AbstractMethodError
- Resolved
-
JDK-8053221 Attempt to resolve abstract method in concrete class fails with AbstractMethodError
- Resolved
-
JDK-8033734 Attempt to resolve abstract method in concrete class fails with AbstractMethodError
- Closed
- relates to
-
JDK-8031096 invokestatic: IncompatibleClassChangeError is thrown instead of AbstractMethodError
- Closed