hotspot/test/compiler/jsr292/InvokerSignatureMismatch.java
author vlivanov
Thu, 09 Feb 2017 19:00:48 +0300
changeset 43943 e2fdae30bbc1
child 43947 a52ee13998f3
permissions -rw-r--r--
8166110: Inlining through MH invokers/linkers in unreachable code is unsafe Reviewed-by: vlivanov Contributed-by: dmitry.chuyko@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43943
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     1
package compiler.jsr292;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     2
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     3
import java.lang.invoke.MethodHandle;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     4
import java.lang.invoke.MethodHandles;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     5
import java.lang.invoke.MethodType;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     6
import java.lang.invoke.MethodHandleHelper;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     7
import jdk.internal.vm.annotation.ForceInline;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     8
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
     9
/*
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    10
 * @test
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    11
 * @bug 8166110
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    12
 * @library /test/lib / patches
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    13
 * @modules java.base/jdk.internal.misc
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    14
 *          java.base/jdk.internal.vm.annotation
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    15
 *
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    16
 * @build java.base/java.lang.invoke.MethodHandleHelper
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    17
 * @run main/bootclasspath/othervm -XX:+IgnoreUnrecognizedVMOptions -Xbatch -XX:-TieredCompilation
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    18
 *                                 compiler.jsr292.InvokerSignatureMismatch
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    19
 */
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    20
public class InvokerSignatureMismatch {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    21
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    22
    static final MethodHandle INT_MH;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    23
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    24
    static {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    25
        MethodHandle mhI = null;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    26
        try {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    27
           mhI = MethodHandles.lookup().findStatic(InvokerSignatureMismatch.class, "bodyI", MethodType.methodType(void.class, int.class));
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    28
        } catch (Throwable e) {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    29
        }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    30
        INT_MH = mhI;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    31
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    32
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    33
    public static void main(String[] args) throws Throwable {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    34
        mainLink();
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    35
        mainInvoke();
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    36
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    37
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    38
    static void mainLink() throws Throwable {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    39
        for (int i = 0; i < 50_000; i++) { // OSR
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    40
            Object name = MethodHandleHelper.internalMemberName(INT_MH);
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    41
            MethodHandleHelper.linkToStatic(INT_MH, (float) i, name);
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    42
        }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    43
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    44
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    45
    static void mainInvoke() throws Throwable {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    46
        for (int i = 0; i < 50_000; i++) { // OSR
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    47
            MethodHandleHelper.invokeBasicV(INT_MH, (float) i);
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    48
        }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    49
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    50
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    51
    static int cnt = 0;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    52
    static void bodyI(int x) {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    53
        if ((x & 1023) == 0) { // already optimized x % 1024 == 0
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    54
            ++cnt;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    55
        }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    56
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    57
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    58
}