Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8062280

C2: inlining failure due to access checks being too strict

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • 8u60, 9
    • hotspot
    • None
    • b64

        Paul Sandoz reported a problem with method inlining through method handles:
        http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2014-October/015993.html

        _@ 48 MHInlineTest::testPackageMH (24 bytes) inline (hot)
        __@ 7 java.lang.invoke.LambdaForm$MH/314265080::invokeExact_MT (17 bytes) force inline by annotation
        ___@ 2 java.lang.invoke.Invokers::checkExactType (30 bytes) force inline by annotation
        ____@ 11 java.lang.invoke.MethodHandle::type (5 bytes) accessor
        ___@ 13 java.lang.invoke.LambdaForm$DMH/285377351::invokeVirtual_LL_V (15 bytes) force inline by annotation
        ____@ 1 java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes) force inline by annotation
        ____@ 11 MHInlineTest$A::package_x (6 bytes) virtual call
         
        Failing test:
        public class MHInlineTest {
            public static class A {
                void package_x(String s) { ... }
            }

            public static final class B extends A {
                void package_x(String s) { ... }
            }

            static final MethodHandle A_PUBLIC_X;
            static final MethodHandle A_PROTECTED_X;
            static final MethodHandle A_PACKAGE_X;
            static final MethodHandle A_PACKAGE_FINAL_X;

            static {
                try {
                    A_PACKAGE_X = MethodHandles.lookup().findVirtual(
                            A.class, "package_x", MethodType.methodType(void.class, String.class));
                } catch (Exception e) {
                    throw new Error(e);
                }
            }

            static final A a = new B();

            public static void main(String[] args) {
                for (int i = 0; i < 1000_0000; i++) {
                    try {
                        A_PROTECTED_X.invokeExact(a, x);
                    } catch (Throwable throwable) {
                        throw new Error(throwable);
                    }
                }
            }
        }

              vlivanov Vladimir Ivanov
              vlivanov Vladimir Ivanov
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: