Thu, 23 Apr 2015 13:02:32 +0300
8038098: [TESTBUG] remove explicit set build flavor from hotspot/test/compiler/* tests
Reviewed-by: kvn, iignatyev
1 /*
2 * Copyright (c) 2014, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 /*
27 * @test TestStableLong
28 * @summary tests on stable fields and arrays
29 * @library /testlibrary /testlibrary/whitebox
30 * @build TestStableLong StableConfiguration sun.hotspot.WhiteBox
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
32 * @run main ClassFileInstaller
33 * java/lang/invoke/StableConfiguration
34 * java/lang/invoke/TestStableLong
35 * java/lang/invoke/TestStableLong$LongStable
36 * java/lang/invoke/TestStableLong$StaticLongStable
37 * java/lang/invoke/TestStableLong$VolatileLongStable
38 * java/lang/invoke/TestStableLong$LongArrayDim1
39 * java/lang/invoke/TestStableLong$LongArrayDim2
40 * java/lang/invoke/TestStableLong$LongArrayDim3
41 * java/lang/invoke/TestStableLong$LongArrayDim4
42 * java/lang/invoke/TestStableLong$ObjectArrayLowerDim0
43 * java/lang/invoke/TestStableLong$ObjectArrayLowerDim1
44 * java/lang/invoke/TestStableLong$NestedStableField
45 * java/lang/invoke/TestStableLong$NestedStableField$A
46 * java/lang/invoke/TestStableLong$NestedStableField1
47 * java/lang/invoke/TestStableLong$NestedStableField1$A
48 * java/lang/invoke/TestStableLong$NestedStableField2
49 * java/lang/invoke/TestStableLong$NestedStableField2$A
50 * java/lang/invoke/TestStableLong$NestedStableField3
51 * java/lang/invoke/TestStableLong$NestedStableField3$A
52 * java/lang/invoke/TestStableLong$DefaultValue
53 * java/lang/invoke/TestStableLong$DefaultStaticValue
54 * java/lang/invoke/TestStableLong$ObjectArrayLowerDim2
55 *
56 * @run main/othervm -Xbootclasspath/a:.
57 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
58 * -XX:-TieredCompilation
59 * -XX:+FoldStableValues
60 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
61 * java.lang.invoke.TestStableLong
62 * @run main/othervm -Xbootclasspath/a:.
63 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
64 * -XX:-TieredCompilation
65 * -XX:-FoldStableValues
66 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
67 * java.lang.invoke.TestStableLong
68 *
69 * @run main/othervm -Xbootclasspath/a:.
70 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
71 * -XX:+TieredCompilation -XX:TieredStopAtLevel=1
72 * -XX:+FoldStableValues
73 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
74 * java.lang.invoke.TestStableLong
75 * @run main/othervm -Xbootclasspath/a:.
76 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
77 * -XX:+TieredCompilation -XX:TieredStopAtLevel=1
78 * -XX:-FoldStableValues
79 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
80 * java.lang.invoke.TestStableLong
81 *
82 */
83 package java.lang.invoke;
85 import java.lang.reflect.InvocationTargetException;
87 public class TestStableLong {
88 static final boolean isStableEnabled = StableConfiguration.isStableEnabled;
89 static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
91 public static void main(String[] args) throws Exception {
92 run(DefaultValue.class);
93 run(LongStable.class);
94 run(DefaultStaticValue.class);
95 run(StaticLongStable.class);
96 run(VolatileLongStable.class);
98 // @Stable arrays: Dim 1-4
99 run(LongArrayDim1.class);
100 run(LongArrayDim2.class);
101 run(LongArrayDim3.class);
102 run(LongArrayDim4.class);
104 // @Stable Object field: dynamic arrays
105 run(ObjectArrayLowerDim0.class);
106 run(ObjectArrayLowerDim1.class);
107 run(ObjectArrayLowerDim2.class);
109 // Nested @Stable fields
110 run(NestedStableField.class);
111 run(NestedStableField1.class);
112 run(NestedStableField2.class);
113 run(NestedStableField3.class);
115 if (failed) {
116 throw new Error("TEST FAILED");
117 }
118 }
120 /* ==================================================== */
122 static class DefaultValue {
123 public @Stable long v;
125 public static final DefaultValue c = new DefaultValue();
126 public static long get() { return c.v; }
127 public static void test() throws Exception {
128 long val1 = get();
129 c.v = 1L; long val2 = get();
130 assertEquals(val1, 0);
131 assertEquals(val2, 1L);
132 }
133 }
135 /* ==================================================== */
137 static class LongStable {
138 public @Stable long v;
140 public static final LongStable c = new LongStable();
141 public static long get() { return c.v; }
142 public static void test() throws Exception {
143 c.v = 5; long val1 = get();
144 c.v = Long.MAX_VALUE; long val2 = get();
145 assertEquals(val1, 5);
146 assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE));
147 }
148 }
150 /* ==================================================== */
152 static class DefaultStaticValue {
153 public static @Stable long v;
155 public static final DefaultStaticValue c = new DefaultStaticValue();
156 public static long get() { return c.v; }
157 public static void test() throws Exception {
158 long val1 = get();
159 c.v = 1L; long val2 = get();
160 assertEquals(val1, 0);
161 assertEquals(val2, 1L);
162 }
163 }
165 /* ==================================================== */
167 static class StaticLongStable {
168 public static @Stable long v;
170 public static final StaticLongStable c = new StaticLongStable();
171 public static long get() { return c.v; }
172 public static void test() throws Exception {
173 c.v = 5; long val1 = get();
174 c.v = Long.MAX_VALUE; long val2 = get();
175 assertEquals(val1, 5);
176 assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE));
177 }
178 }
180 /* ==================================================== */
182 static class VolatileLongStable {
183 public @Stable volatile long v;
185 public static final VolatileLongStable c = new VolatileLongStable();
186 public static long get() { return c.v; }
187 public static void test() throws Exception {
188 c.v = 5; long val1 = get();
189 c.v = Long.MAX_VALUE; long val2 = get();
190 assertEquals(val1, 5);
191 assertEquals(val2, (isStableEnabled ? 5 : Long.MAX_VALUE));
192 }
193 }
195 /* ==================================================== */
196 // @Stable array == field && all components are stable
198 static class LongArrayDim1 {
199 public @Stable long[] v;
201 public static final LongArrayDim1 c = new LongArrayDim1();
202 public static long get() { return c.v[0]; }
203 public static long get1() { return c.v[10]; }
204 public static long[] get2() { return c.v; }
205 public static void test() throws Exception {
206 {
207 c.v = new long[1]; c.v[0] = 1; long val1 = get();
208 c.v[0] = 2; long val2 = get();
209 assertEquals(val1, 1);
210 assertEquals(val2, (isServerWithStable ? 1 : 2));
212 c.v = new long[1]; c.v[0] = 3; long val3 = get();
213 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
214 : 3));
215 }
217 {
218 c.v = new long[20]; c.v[10] = 1; long val1 = get1();
219 c.v[10] = 2; long val2 = get1();
220 assertEquals(val1, 1);
221 assertEquals(val2, (isServerWithStable ? 1 : 2));
223 c.v = new long[20]; c.v[10] = 3; long val3 = get1();
224 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
225 : 3));
226 }
228 {
229 c.v = new long[1]; long[] val1 = get2();
230 c.v = new long[1]; long[] val2 = get2();
231 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
232 }
233 }
234 }
236 /* ==================================================== */
238 static class LongArrayDim2 {
239 public @Stable long[][] v;
241 public static final LongArrayDim2 c = new LongArrayDim2();
242 public static long get() { return c.v[0][0]; }
243 public static long[] get1() { return c.v[0]; }
244 public static long[][] get2() { return c.v; }
245 public static void test() throws Exception {
246 {
247 c.v = new long[1][1]; c.v[0][0] = 1; long val1 = get();
248 c.v[0][0] = 2; long val2 = get();
249 assertEquals(val1, 1);
250 assertEquals(val2, (isServerWithStable ? 1 : 2));
252 c.v = new long[1][1]; c.v[0][0] = 3; long val3 = get();
253 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
254 : 3));
256 c.v[0] = new long[1]; c.v[0][0] = 4; long val4 = get();
257 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
258 : 4));
259 }
261 {
262 c.v = new long[1][1]; long[] val1 = get1();
263 c.v[0] = new long[1]; long[] val2 = get1();
264 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
265 }
267 {
268 c.v = new long[1][1]; long[][] val1 = get2();
269 c.v = new long[1][1]; long[][] val2 = get2();
270 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
271 }
272 }
273 }
275 /* ==================================================== */
277 static class LongArrayDim3 {
278 public @Stable long[][][] v;
280 public static final LongArrayDim3 c = new LongArrayDim3();
281 public static long get() { return c.v[0][0][0]; }
282 public static long[] get1() { return c.v[0][0]; }
283 public static long[][] get2() { return c.v[0]; }
284 public static long[][][] get3() { return c.v; }
285 public static void test() throws Exception {
286 {
287 c.v = new long[1][1][1]; c.v[0][0][0] = 1; long val1 = get();
288 c.v[0][0][0] = 2; long val2 = get();
289 assertEquals(val1, 1);
290 assertEquals(val2, (isServerWithStable ? 1 : 2));
292 c.v = new long[1][1][1]; c.v[0][0][0] = 3; long val3 = get();
293 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
294 : 3));
296 c.v[0] = new long[1][1]; c.v[0][0][0] = 4; long val4 = get();
297 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
298 : 4));
300 c.v[0][0] = new long[1]; c.v[0][0][0] = 5; long val5 = get();
301 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
302 : 5));
303 }
305 {
306 c.v = new long[1][1][1]; long[] val1 = get1();
307 c.v[0][0] = new long[1]; long[] val2 = get1();
308 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
309 }
311 {
312 c.v = new long[1][1][1]; long[][] val1 = get2();
313 c.v[0] = new long[1][1]; long[][] val2 = get2();
314 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
315 }
317 {
318 c.v = new long[1][1][1]; long[][][] val1 = get3();
319 c.v = new long[1][1][1]; long[][][] val2 = get3();
320 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
321 }
322 }
323 }
325 /* ==================================================== */
327 static class LongArrayDim4 {
328 public @Stable long[][][][] v;
330 public static final LongArrayDim4 c = new LongArrayDim4();
331 public static long get() { return c.v[0][0][0][0]; }
332 public static long[] get1() { return c.v[0][0][0]; }
333 public static long[][] get2() { return c.v[0][0]; }
334 public static long[][][] get3() { return c.v[0]; }
335 public static long[][][][] get4() { return c.v; }
336 public static void test() throws Exception {
337 {
338 c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 1; long val1 = get();
339 c.v[0][0][0][0] = 2; long val2 = get();
340 assertEquals(val1, 1);
341 assertEquals(val2, (isServerWithStable ? 1 : 2));
343 c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 3; long val3 = get();
344 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
345 : 3));
347 c.v[0] = new long[1][1][1]; c.v[0][0][0][0] = 4; long val4 = get();
348 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
349 : 4));
351 c.v[0][0] = new long[1][1]; c.v[0][0][0][0] = 5; long val5 = get();
352 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
353 : 5));
355 c.v[0][0][0] = new long[1]; c.v[0][0][0][0] = 6; long val6 = get();
356 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2)
357 : 6));
358 }
360 {
361 c.v = new long[1][1][1][1]; long[] val1 = get1();
362 c.v[0][0][0] = new long[1]; long[] val2 = get1();
363 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
364 }
366 {
367 c.v = new long[1][1][1][1]; long[][] val1 = get2();
368 c.v[0][0] = new long[1][1]; long[][] val2 = get2();
369 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
370 }
372 {
373 c.v = new long[1][1][1][1]; long[][][] val1 = get3();
374 c.v[0] = new long[1][1][1]; long[][][] val2 = get3();
375 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
376 }
378 {
379 c.v = new long[1][1][1][1]; long[][][][] val1 = get4();
380 c.v = new long[1][1][1][1]; long[][][][] val2 = get4();
381 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
382 }
383 }
384 }
386 /* ==================================================== */
387 // Dynamic Dim is higher than static
388 static class ObjectArrayLowerDim0 {
389 public @Stable Object v;
391 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0();
392 public static long get() { return ((long[])c.v)[0]; }
393 public static long[] get1() { return (long[])c.v; }
395 public static void test() throws Exception {
396 {
397 c.v = new long[1]; ((long[])c.v)[0] = 1; long val1 = get();
398 ((long[])c.v)[0] = 2; long val2 = get();
400 assertEquals(val1, 1);
401 assertEquals(val2, 2);
402 }
404 {
405 c.v = new long[1]; long[] val1 = get1();
406 c.v = new long[1]; long[] val2 = get1();
407 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
408 }
409 }
410 }
412 /* ==================================================== */
414 static class ObjectArrayLowerDim1 {
415 public @Stable Object[] v;
417 public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1();
418 public static long get() { return ((long[][])c.v)[0][0]; }
419 public static long[] get1() { return (long[])(c.v[0]); }
420 public static Object[] get2() { return c.v; }
422 public static void test() throws Exception {
423 {
424 c.v = new long[1][1]; ((long[][])c.v)[0][0] = 1; long val1 = get();
425 ((long[][])c.v)[0][0] = 2; long val2 = get();
427 assertEquals(val1, 1);
428 assertEquals(val2, 2);
429 }
431 {
432 c.v = new long[1][1]; c.v[0] = new long[0]; long[] val1 = get1();
433 c.v[0] = new long[0]; long[] val2 = get1();
435 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
436 }
438 {
439 c.v = new long[0][0]; Object[] val1 = get2();
440 c.v = new long[0][0]; Object[] val2 = get2();
442 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
443 }
444 }
445 }
447 /* ==================================================== */
449 static class ObjectArrayLowerDim2 {
450 public @Stable Object[][] v;
452 public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2();
453 public static long get() { return ((long[][][])c.v)[0][0][0]; }
454 public static long[] get1() { return (long[])(c.v[0][0]); }
455 public static long[][] get2() { return (long[][])(c.v[0]); }
456 public static Object[][] get3() { return c.v; }
458 public static void test() throws Exception {
459 {
460 c.v = new long[1][1][1]; ((long[][][])c.v)[0][0][0] = 1L; long val1 = get();
461 ((long[][][])c.v)[0][0][0] = 2L; long val2 = get();
463 assertEquals(val1, 1L);
464 assertEquals(val2, 2L);
465 }
467 {
468 c.v = new long[1][1][1]; c.v[0][0] = new long[0]; long[] val1 = get1();
469 c.v[0][0] = new long[0]; long[] val2 = get1();
471 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
472 }
474 {
475 c.v = new long[1][1][1]; c.v[0] = new long[0][0]; long[][] val1 = get2();
476 c.v[0] = new long[0][0]; long[][] val2 = get2();
478 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
479 }
481 {
482 c.v = new long[0][0][0]; Object[][] val1 = get3();
483 c.v = new long[0][0][0]; Object[][] val2 = get3();
485 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
486 }
487 }
488 }
490 /* ==================================================== */
492 static class NestedStableField {
493 static class A {
494 public @Stable long a;
496 }
497 public @Stable A v;
499 public static final NestedStableField c = new NestedStableField();
500 public static A get() { return c.v; }
501 public static long get1() { return get().a; }
503 public static void test() throws Exception {
504 {
505 c.v = new A(); c.v.a = 1; A val1 = get();
506 c.v.a = 2; A val2 = get();
508 assertEquals(val1.a, 2);
509 assertEquals(val2.a, 2);
510 }
512 {
513 c.v = new A(); c.v.a = 1; long val1 = get1();
514 c.v.a = 2; long val2 = get1();
515 c.v = new A(); c.v.a = 3; long val3 = get1();
517 assertEquals(val1, 1);
518 assertEquals(val2, (isStableEnabled ? 1 : 2));
519 assertEquals(val3, (isStableEnabled ? 1 : 3));
520 }
521 }
522 }
524 /* ==================================================== */
526 static class NestedStableField1 {
527 static class A {
528 public @Stable long a;
529 public @Stable A next;
530 }
531 public @Stable A v;
533 public static final NestedStableField1 c = new NestedStableField1();
534 public static A get() { return c.v.next.next.next.next.next.next.next; }
535 public static long get1() { return get().a; }
537 public static void test() throws Exception {
538 {
539 c.v = new A(); c.v.next = new A(); c.v.next.next = c.v;
540 c.v.a = 1; c.v.next.a = 1; A val1 = get();
541 c.v.a = 2; c.v.next.a = 2; A val2 = get();
543 assertEquals(val1.a, 2);
544 assertEquals(val2.a, 2);
545 }
547 {
548 c.v = new A(); c.v.next = c.v;
549 c.v.a = 1; long val1 = get1();
550 c.v.a = 2; long val2 = get1();
551 c.v = new A(); c.v.next = c.v;
552 c.v.a = 3; long val3 = get1();
554 assertEquals(val1, 1);
555 assertEquals(val2, (isStableEnabled ? 1 : 2));
556 assertEquals(val3, (isStableEnabled ? 1 : 3));
557 }
558 }
559 }
560 /* ==================================================== */
562 static class NestedStableField2 {
563 static class A {
564 public @Stable long a;
565 public @Stable A left;
566 public A right;
567 }
569 public @Stable A v;
571 public static final NestedStableField2 c = new NestedStableField2();
572 public static long get() { return c.v.left.left.left.a; }
573 public static long get1() { return c.v.left.left.right.left.a; }
575 public static void test() throws Exception {
576 {
577 c.v = new A(); c.v.left = c.v.right = c.v;
578 c.v.a = 1; long val1 = get(); long val2 = get1();
579 c.v.a = 2; long val3 = get(); long val4 = get1();
581 assertEquals(val1, 1);
582 assertEquals(val3, (isStableEnabled ? 1 : 2));
584 assertEquals(val2, 1);
585 assertEquals(val4, 2);
586 }
587 }
588 }
590 /* ==================================================== */
592 static class NestedStableField3 {
593 static class A {
594 public @Stable long a;
595 public @Stable A[] left;
596 public A[] right;
597 }
599 public @Stable A[] v;
601 public static final NestedStableField3 c = new NestedStableField3();
602 public static long get() { return c.v[0].left[1].left[0].left[1].a; }
603 public static long get1() { return c.v[1].left[0].left[1].right[0].left[1].a; }
605 public static void test() throws Exception {
606 {
607 A elem = new A();
608 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
609 elem.a = 1; long val1 = get(); long val2 = get1();
610 elem.a = 2; long val3 = get(); long val4 = get1();
612 assertEquals(val1, 1);
613 assertEquals(val3, (isServerWithStable ? 1 : 2));
615 assertEquals(val2, 1);
616 assertEquals(val4, 2);
617 }
618 }
619 }
621 /* ==================================================== */
622 // Auxiliary methods
623 static void assertEquals(long i, long j) { if (i != j) throw new AssertionError(i + " != " + j); }
624 static void assertTrue(boolean b) { if (!b) throw new AssertionError(); }
626 static boolean failed = false;
628 public static void run(Class<?> test) {
629 Throwable ex = null;
630 System.out.print(test.getName()+": ");
631 try {
632 test.getMethod("test").invoke(null);
633 } catch (InvocationTargetException e) {
634 ex = e.getCause();
635 } catch (Throwable e) {
636 ex = e;
637 } finally {
638 if (ex == null) {
639 System.out.println("PASSED");
640 } else {
641 failed = true;
642 System.out.println("FAILED");
643 ex.printStackTrace(System.out);
644 }
645 }
646 }
647 }