Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Match RI behaviour for unrelfect with OpenJDK MHs in JDK8 #18552

Merged
merged 1 commit into from
Dec 5, 2023

Conversation

ThanHenderson
Copy link
Contributor

This patch addresses #14985.
For MethodHandles to private interface methods, the RI erroneously initializes the MethodHandle to have an InvokeInterface reference kind, leading to an invoke-time AbstractMethodError throw.

As per the spec, OpenJ9 initializes MethodHandles to private interface methods to have an InvokeSpecial reference kind which does not throw the error.

This distinction causes a test failure for a test reported in #14985. Though not-spec compliant, the test expects an AbstractMethodError to be thrown to conform to the RI behaviour in JDK8. For OpenJ9 MHs, MethodHandles.unreflect identifies private interface methods and installs an AbstractMethodError-thrower MH. This patch sets up a MethodHandleResolver method that installs the AbstractMethodError-thrower MH when called from OpenJDK MH unreflect implementation.

Issues: #14985
Signed-off-by: Nathan Henderson [email protected]

@ThanHenderson
Copy link
Contributor Author

ping @babsingh

@ThanHenderson
Copy link
Contributor Author

This patch addresses eclipse-openj9#14985.
For MethodHandles to private interface methods, the RI erroneously
initializes the MethodHandle to have an InvokeInterface reference
kind, leading to an invoke-time AbstractMethodError throw.

As per the spec, OpenJ9 initializes MethodHandles to private interface
methods to have an InvokeSpecial reference kind which does not throw
the error.

This distinction causes a test failure for a test reported in
eclipse-openj9#14985. Though not-spec compliant, the test expects
an AbstractMethodError to be thrown to conform to the RI behaviour in
JDK8. For OpenJ9 MHs, MethodHandles.unreflect identifies private
interface methods and installs an AbstractMethodError-thrower MH.
This patch sets up a MethodHandleResolver method that installs the
AbstractMethodError-thrower MH when called from OpenJDK MH unreflect
implementation.

Issues: eclipse-openj9#14985
Signed-off-by: Nathan Henderson <[email protected]>
@ThanHenderson
Copy link
Contributor Author

Issues seen here: #18552 (comment) are known and documented. Seem to be testing machine issues.

Copy link
Contributor

@babsingh babsingh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR builds were launched in ibmruntimes/openj9-openjdk-jdk8#715, and they look good.

@babsingh babsingh merged commit 58dc933 into eclipse-openj9:master Dec 5, 2023
2 checks passed
@ThanHenderson ThanHenderson added jdk8 comp:vm project:MH Used to track Method Handles related work labels Jan 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
comp:vm jdk8 project:MH Used to track Method Handles related work
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants