From b82da21e55c185dbe031dcfb260578dab576e4bc Mon Sep 17 00:00:00 2001 From: Almaz Mingaleev Date: Wed, 13 Nov 2024 16:18:03 +0000 Subject: x86-64: handle invoke-interface in invokeExact intrinsic. Bug: 297147201 Test: ./art/test/testrunner/testrunner.py -b --host --64 Test: ./art/test/testrunner/testrunner.py -b --jvm Change-Id: I2c07ae919921363e8e419ec7296cd24696e7f3b5 --- .../src/JavaApiTest.java | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'test/2277-methodhandle-invokeexact/src/JavaApiTest.java') diff --git a/test/2277-methodhandle-invokeexact/src/JavaApiTest.java b/test/2277-methodhandle-invokeexact/src/JavaApiTest.java index 77b4bc0c73..88518eeaa9 100644 --- a/test/2277-methodhandle-invokeexact/src/JavaApiTest.java +++ b/test/2277-methodhandle-invokeexact/src/JavaApiTest.java @@ -63,6 +63,14 @@ public class JavaApiTest extends AbstractInvokeExactTest { private static final MethodHandle FOOBARIMPL_DEFAULT; private static final MethodHandle FOO_NONOVERRIDDEN_DEFAULT; private static final MethodHandle BAR_NONOVERRIDDEN_DEFAULT; + private static final MethodHandle TO_STRING_DEFINED_IN_AN_INTERFACE; + + private static final MethodHandle INTERFACE_ONE_METHOD; + private static final MethodHandle INTERFACE_TWO_METHOD; + private static final MethodHandle INTERFACE_THREE_METHOD; + private static final MethodHandle INTERFACE_FOUR_METHOD; + private static final MethodHandle FOO_AND_FOO_CONFLICT_DEFAULT; + private static final MethodHandle BASE_INTERFACE; static { try { @@ -150,6 +158,21 @@ public class JavaApiTest extends AbstractInvokeExactTest { .findVirtual(Foo.class, "nonOverriddenDefault", methodType(String.class)); BAR_NONOVERRIDDEN_DEFAULT = MethodHandles.lookup() .findVirtual(Bar.class, "nonOverriddenDefault", methodType(String.class)); + TO_STRING_DEFINED_IN_AN_INTERFACE = MethodHandles.lookup() + .findVirtual(ToStringable.class, "toString", methodType(String.class)); + + INTERFACE_ONE_METHOD = MethodHandles.lookup() + .findVirtual(Interface1.class, "methodOne", methodType(String.class)); + INTERFACE_TWO_METHOD = MethodHandles.lookup() + .findVirtual(Interface2.class, "methodTwo", methodType(String.class)); + INTERFACE_THREE_METHOD = MethodHandles.lookup() + .findVirtual(Interface3.class, "methodThree", methodType(String.class)); + INTERFACE_FOUR_METHOD = MethodHandles.lookup() + .findVirtual(Interface4.class, "methodFour", methodType(String.class)); + FOO_AND_FOO_CONFLICT_DEFAULT = MethodHandles.lookup() + .findVirtual(FooAndFooConflict.class, "defaultToOverride", methodType(String.class)); + BASE_INTERFACE = MethodHandles.lookup() + .findVirtual(BaseInterface.class, "method", methodType(String.class)); } catch (Exception e) { throw new RuntimeException(e); } @@ -344,8 +367,43 @@ public class JavaApiTest extends AbstractInvokeExactTest { return FOOBAR_NONDEFAULT; } + @Override + public MethodHandle toStringDefinedInAnInterface() { + return TO_STRING_DEFINED_IN_AN_INTERFACE; + } + @Override public MethodHandle optionalGet() { return OPTIONAL_GET; } + + @Override + public MethodHandle interfaceOneMethod() { + return INTERFACE_ONE_METHOD; + } + + @Override + public MethodHandle interfaceTwoMethod() { + return INTERFACE_TWO_METHOD; + } + + @Override + public MethodHandle interfaceThreeMethod() { + return INTERFACE_THREE_METHOD; + } + + @Override + public MethodHandle interfaceFourMethod() { + return INTERFACE_FOUR_METHOD; + } + + @Override + public MethodHandle fooAndFooConflictDefault() { + return FOO_AND_FOO_CONFLICT_DEFAULT; + } + + @Override + public MethodHandle baseInterface() { + return BASE_INTERFACE; + } } -- cgit v1.2.3-59-g8ed1b