test/hotspot/jtreg/compiler/jsr292/InvokerSignatureMismatch.java
author prr
Thu, 26 Jul 2018 10:00:40 -0700
changeset 51251 0a7a0a6dfa22
parent 50642 fff48b02d4a6
permissions -rw-r--r--
Merge
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
        for (int i = 0; i < 50_000; i++) { // OSR
43947
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    35
            mainLink(i);
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    36
            mainInvoke(i);
43943
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
    }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    39
43947
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    40
    static void mainLink(int i) throws Throwable {
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    41
        Object name = MethodHandleHelper.internalMemberName(INT_MH);
50642
fff48b02d4a6 8198719: MethodHandleHelper.linkToStatic should drop MH arg
dchuyko
parents: 47216
diff changeset
    42
        MethodHandleHelper.linkToStatic((float) i, name);
43947
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    43
    }
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    44
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    45
    static void mainInvoke(int i) throws Throwable {
a52ee13998f3 8174721: C1: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents: 43943
diff changeset
    46
        MethodHandleHelper.invokeBasicV(INT_MH, (float) i);
43943
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    47
    }
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
    static int cnt = 0;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    50
    static void bodyI(int x) {
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    51
        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
    52
            ++cnt;
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    53
        }
e2fdae30bbc1 8166110: Inlining through MH invokers/linkers in unreachable code is unsafe
vlivanov
parents:
diff changeset
    54
    }
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
}