comparison test/compiler/6987555/Test6987555.java @ 1849:5beba6174298

6987555: JSR 292 unboxing to a boolean value fails on big-endian SPARC Reviewed-by: never, jrose
author twisti
date Wed, 13 Oct 2010 01:19:43 -0700
parents
children 62a8557e8f36
comparison
equal deleted inserted replaced
1847:a932f331ef90 1849:5beba6174298
1 /*
2 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 /**
26 * @test
27 * @bug 6987555
28 * @summary JSR 292 unboxing to a boolean value fails on big-endian SPARC
29 *
30 * @run main/othervm -Xint -ea -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles -XX:+EnableInvokeDynamic -XX:+UnlockDiagnosticVMOptions -XX:+VerifyMethodHandles Test6987555
31 */
32
33 import java.dyn.*;
34
35 public class Test6987555 {
36 private static final Class CLASS = Test6987555.class;
37 private static final String NAME = "foo";
38 private static final boolean DEBUG = false;
39
40 public static void main(String[] args) throws Throwable {
41 testboolean();
42 testbyte();
43 testchar();
44 testshort();
45 testint();
46 }
47
48 // boolean
49 static void testboolean() throws Throwable {
50 doboolean(false);
51 doboolean(true);
52 }
53 static void doboolean(boolean x) throws Throwable {
54 if (DEBUG) System.out.println("boolean=" + x);
55 MethodHandle mh1 = MethodHandles.lookup().findStatic(CLASS, NAME, MethodType.methodType(boolean.class, boolean.class));
56 MethodHandle mh2 = mh1.asType(MethodType.methodType(boolean.class, Boolean.class));
57 boolean a = mh1.<boolean>invokeExact(x);
58 boolean b = mh2.<boolean>invokeExact(Boolean.valueOf(x));
59 assert a == b : a + " != " + b;
60 }
61
62 // byte
63 static void testbyte() throws Throwable {
64 byte[] a = new byte[] {
65 Byte.MIN_VALUE,
66 Byte.MIN_VALUE + 1,
67 -0x0F,
68 -1,
69 0,
70 1,
71 0x0F,
72 Byte.MAX_VALUE - 1,
73 Byte.MAX_VALUE
74 };
75 for (int i = 0; i < a.length; i++) {
76 dobyte(a[i]);
77 }
78 }
79 static void dobyte(byte x) throws Throwable {
80 if (DEBUG) System.out.println("byte=" + x);
81 MethodHandle mh1 = MethodHandles.lookup().findStatic(CLASS, NAME, MethodType.methodType(byte.class, byte.class));
82 MethodHandle mh2 = mh1.asType(MethodType.methodType(byte.class, Byte.class));
83 byte a = mh1.<byte>invokeExact(x);
84 byte b = mh2.<byte>invokeExact(Byte.valueOf(x));
85 assert a == b : a + " != " + b;
86 }
87
88 // char
89 static void testchar() throws Throwable {
90 char[] a = new char[] {
91 Character.MIN_VALUE,
92 Character.MIN_VALUE + 1,
93 0x000F,
94 0x00FF,
95 0x0FFF,
96 Character.MAX_VALUE - 1,
97 Character.MAX_VALUE
98 };
99 for (int i = 0; i < a.length; i++) {
100 dochar(a[i]);
101 }
102 }
103 static void dochar(char x) throws Throwable {
104 if (DEBUG) System.out.println("char=" + x);
105 MethodHandle mh1 = MethodHandles.lookup().findStatic(CLASS, NAME, MethodType.methodType(char.class, char.class));
106 MethodHandle mh2 = mh1.asType(MethodType.methodType(char.class, Character.class));
107 char a = mh1.<char>invokeExact(x);
108 char b = mh2.<char>invokeExact(Character.valueOf(x));
109 assert a == b : a + " != " + b;
110 }
111
112 // short
113 static void testshort() throws Throwable {
114 short[] a = new short[] {
115 Short.MIN_VALUE,
116 Short.MIN_VALUE + 1,
117 -0x0FFF,
118 -0x00FF,
119 -0x000F,
120 -1,
121 0,
122 1,
123 0x000F,
124 0x00FF,
125 0x0FFF,
126 Short.MAX_VALUE - 1,
127 Short.MAX_VALUE
128 };
129 for (int i = 0; i < a.length; i++) {
130 doshort(a[i]);
131 }
132 }
133 static void doshort(short x) throws Throwable {
134 if (DEBUG) System.out.println("short=" + x);
135 MethodHandle mh1 = MethodHandles.lookup().findStatic(CLASS, NAME, MethodType.methodType(short.class, short.class));
136 MethodHandle mh2 = mh1.asType(MethodType.methodType(short.class, Short.class));
137 short a = mh1.<short>invokeExact(x);
138 short b = mh2.<short>invokeExact(Short.valueOf(x));
139 assert a == b : a + " != " + b;
140 }
141
142 // int
143 static void testint() throws Throwable {
144 int[] a = new int[] {
145 Integer.MIN_VALUE,
146 Integer.MIN_VALUE + 1,
147 -0x00000FFF,
148 -0x000000FF,
149 -0x0000000F,
150 -1,
151 0,
152 1,
153 0x0000000F,
154 0x000000FF,
155 0x00000FFF,
156 Integer.MAX_VALUE - 1,
157 Integer.MAX_VALUE
158 };
159 for (int i = 0; i < a.length; i++) {
160 doint(a[i]);
161 }
162 }
163 static void doint(int x) throws Throwable {
164 if (DEBUG) System.out.println("int=" + x);
165 MethodHandle mh1 = MethodHandles.lookup().findStatic(CLASS, NAME, MethodType.methodType(int.class, int.class));
166 MethodHandle mh2 = mh1.asType(MethodType.methodType(int.class, Integer.class));
167 int a = mh1.<int>invokeExact(x);
168 int b = mh2.<int>invokeExact(Integer.valueOf(x));
169 assert a == b : a + " != " + b;
170 }
171
172 public static boolean foo(boolean i) { return i; }
173 public static byte foo(byte i) { return i; }
174 public static char foo(char i) { return i; }
175 public static short foo(short i) { return i; }
176 public static int foo(int i) { return i; }
177 }