diff options
author | 2024-11-13 16:18:03 +0000 | |
---|---|---|
committer | 2024-11-27 15:40:50 +0000 | |
commit | b82da21e55c185dbe031dcfb260578dab576e4bc (patch) | |
tree | bfe0988b7f339fdd0bfede515206dd55bebba8cb /test/2277-methodhandle-invokeexact/src/JavaApiTest.java | |
parent | b16c991a56873f7baddec375ca63691f43a1afd6 (diff) |
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
Diffstat (limited to 'test/2277-methodhandle-invokeexact/src/JavaApiTest.java')
-rw-r--r-- | test/2277-methodhandle-invokeexact/src/JavaApiTest.java | 58 |
1 files changed, 58 insertions, 0 deletions
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); } @@ -345,7 +368,42 @@ public class JavaApiTest extends AbstractInvokeExactTest { } @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; + } } |