1*055d4590SKeyi Gui /* 2*055d4590SKeyi Gui * Copyright (C) 2016 The Android Open Source Project 3*055d4590SKeyi Gui * 4*055d4590SKeyi Gui * Licensed under the Apache License, Version 2.0 (the "License"); 5*055d4590SKeyi Gui * you may not use this file except in compliance with the License. 6*055d4590SKeyi Gui * You may obtain a copy of the License at 7*055d4590SKeyi Gui * 8*055d4590SKeyi Gui * http://www.apache.org/licenses/LICENSE-2.0 9*055d4590SKeyi Gui * 10*055d4590SKeyi Gui * Unless required by applicable law or agreed to in writing, software 11*055d4590SKeyi Gui * distributed under the License is distributed on an "AS IS" BASIS, 12*055d4590SKeyi Gui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*055d4590SKeyi Gui * See the License for the specific language governing permissions and 14*055d4590SKeyi Gui * limitations under the License. 15*055d4590SKeyi Gui */ 16*055d4590SKeyi Gui 17*055d4590SKeyi Gui import java.lang.invoke.MethodHandle; 18*055d4590SKeyi Gui import java.lang.invoke.MethodHandles; 19*055d4590SKeyi Gui import java.lang.invoke.MethodHandles.Lookup; 20*055d4590SKeyi Gui import java.lang.invoke.MethodType; 21*055d4590SKeyi Gui 22*055d4590SKeyi Gui public class Main { assertEquals(int i1, int i2)23*055d4590SKeyi Gui public static void assertEquals(int i1, int i2) { 24*055d4590SKeyi Gui } 25*055d4590SKeyi Gui foof(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n, int o)26*055d4590SKeyi Gui public int foof(int a, int b, int c, int d, 27*055d4590SKeyi Gui int e, int f, int g, int h, 28*055d4590SKeyi Gui int i, int j, int k, int l, 29*055d4590SKeyi Gui int m, int n, int o) { 30*055d4590SKeyi Gui return a; 31*055d4590SKeyi Gui } 32*055d4590SKeyi Gui $opt$BasicTest()33*055d4590SKeyi Gui public static void $opt$BasicTest() throws Throwable { 34*055d4590SKeyi Gui Main m = null; 35*055d4590SKeyi Gui // OTH: >= 15 arguments to invokeExact tickles this bug. Fewer, no repro. 36*055d4590SKeyi Gui assertEquals(42, -42); 37*055d4590SKeyi Gui m.foof(0, 1, 2, 3, 38*055d4590SKeyi Gui 4, 5, 6, 7, 39*055d4590SKeyi Gui 8, 9, 10, 11, 40*055d4590SKeyi Gui 12, 13, 14); 41*055d4590SKeyi Gui MethodHandle mh0 = null; 42*055d4590SKeyi Gui mh0.invokeExact("bad"); 43*055d4590SKeyi Gui } 44*055d4590SKeyi Gui $opt$BasicTest2()45*055d4590SKeyi Gui public static int $opt$BasicTest2() throws Throwable { 46*055d4590SKeyi Gui Main m = null; 47*055d4590SKeyi Gui // OTH: >= 15 arguments to invokeExact tickles this bug. Fewer, no repro. 48*055d4590SKeyi Gui assertEquals(42, -42); 49*055d4590SKeyi Gui m.foof(0, 1, 2, 3, 50*055d4590SKeyi Gui 4, 5, 6, 7, 51*055d4590SKeyi Gui 8, 9, 10, 11, 52*055d4590SKeyi Gui 12, 13, 14); 53*055d4590SKeyi Gui MethodHandle mh0 = null; 54*055d4590SKeyi Gui return (int) mh0.invokeExact("bad"); 55*055d4590SKeyi Gui } 56*055d4590SKeyi Gui main(String[] args)57*055d4590SKeyi Gui public static void main(String[] args) throws Throwable { 58*055d4590SKeyi Gui $opt$BasicTest(); 59*055d4590SKeyi Gui } 60*055d4590SKeyi Gui } 61