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 MethodHandles.unrelfect with OpenJDK MHs #715

Merged
merged 1 commit into from
Dec 5, 2023

Conversation

ThanHenderson
Copy link
Contributor

This patch addresses eclipse-openj9/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/openj9#14985. Though not-spec compliant, the test expects an AbstractMethodError to be thrown to conform to the RI behaviour. For OpenJ9 MHs, MethodHandles.unreflect identifies private interface methods and installs an AbstractMethodError-thrower MH. This patch sets up a similar mechanisms for OpenJDK MHs by calling a MethodHandleResolver method that installs the AbstractMethodError-thrower MH.

Issues: eclipse-openj9/openj9#14985
Signed-off-by: Nathan Henderson nathan.henderson@ibm.com

@ThanHenderson
Copy link
Contributor Author

ping @babsingh

@ThanHenderson
Copy link
Contributor Author

@babsingh
Copy link
Member

babsingh commented Dec 4, 2023

... sets up a similar mechanisms ... -> ... sets up a similar mechanism ...

Copy link
Member

@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.

Code changes LGTM.

This patch addresses eclipse-openj9/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/openj9#14985. Though not-spec compliant, the test expects
an AbstractMethodError to be thrown to conform to the RI behaviour. For
OpenJ9 MHs, MethodHandles.unreflect identifies private interface methods
and installs an AbstractMethodError-thrower MH. This patch sets up a
similar mechanism for OpenJDK MHs by calling a MethodHandleResolver
method that installs the AbstractMethodError-thrower MH.

Issues: eclipse-openj9/openj9#14985
Signed-off-by: Nathan Henderson <nathan.henderson@ibm.com>
@babsingh
Copy link
Member

babsingh commented Dec 4, 2023

jenkins test sanity.functional,sanity.openjdk zlinuxojdk292 jdk8 depends eclipse-openj9/openj9#18552

@babsingh
Copy link
Member

babsingh commented Dec 4, 2023

jenkins test sanity.functional,sanity.openjdk plinux jdk8 depends eclipse-openj9/openj9#18552

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants