annotate test/compiler/stable/TestStableObject.java @ 18408:2c3666f44855

Truffle: initial commit of object API implementation
author Andreas Woess <andreas.woess@jku.at>
date Tue, 18 Nov 2014 23:19:43 +0100
parents ee1c924763d2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
1 /*
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
4 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
7 * published by the Free Software Foundation. Oracle designates this
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
8 * particular file as subject to the "Classpath" exception as provided
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
9 * by Oracle in the LICENSE file that accompanied this code.
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
10 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
11 * This code is distributed in the hope that it will be useful, but WITHOUT
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
14 * version 2 for more details (a copy is included in the LICENSE file that
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
15 * accompanied this code).
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
16 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License version
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
18 * 2 along with this work; if not, write to the Free Software Foundation,
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
20 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
22 * or visit www.oracle.com if you need additional information or have any
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
23 * questions.
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
24 */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
25
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
26 /*
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
27 * @test TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
28 * @summary tests on stable fields and arrays
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
29 * @library /testlibrary /testlibrary/whitebox
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
30 * @build TestStableObject StableConfiguration sun.hotspot.WhiteBox
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
32 * @run main ClassFileInstaller
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
33 * java/lang/invoke/StableConfiguration
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
34 * java/lang/invoke/TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
35 * java/lang/invoke/TestStableObject$ObjectStable
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
36 * java/lang/invoke/TestStableObject$StaticObjectStable
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
37 * java/lang/invoke/TestStableObject$VolatileObjectStable
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
38 * java/lang/invoke/TestStableObject$ObjectArrayDim1
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
39 * java/lang/invoke/TestStableObject$ObjectArrayDim2
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
40 * java/lang/invoke/TestStableObject$ObjectArrayDim3
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
41 * java/lang/invoke/TestStableObject$ObjectArrayDim4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
42 * java/lang/invoke/TestStableObject$ObjectArrayLowerDim0
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
43 * java/lang/invoke/TestStableObject$ObjectArrayLowerDim1
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
44 * java/lang/invoke/TestStableObject$NestedStableField
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
45 * java/lang/invoke/TestStableObject$NestedStableField$A
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
46 * java/lang/invoke/TestStableObject$NestedStableField1
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
47 * java/lang/invoke/TestStableObject$NestedStableField1$A
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
48 * java/lang/invoke/TestStableObject$NestedStableField2
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
49 * java/lang/invoke/TestStableObject$NestedStableField2$A
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
50 * java/lang/invoke/TestStableObject$NestedStableField3
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
51 * java/lang/invoke/TestStableObject$NestedStableField3$A
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
52 * java/lang/invoke/TestStableObject$Values
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
53 * java/lang/invoke/TestStableObject$DefaultValue
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
54 * java/lang/invoke/TestStableObject$DefaultStaticValue
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
55 * java/lang/invoke/TestStableObject$ObjectArrayLowerDim2
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
56 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
57 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
58 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
59 * -server -XX:-TieredCompilation
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
60 * -XX:+FoldStableValues
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
61 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
62 * java.lang.invoke.TestStableObject
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
63 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
64 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
65 * -server -XX:-TieredCompilation
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
66 * -XX:-FoldStableValues
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
67 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
68 * java.lang.invoke.TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
69 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
70 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
71 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
72 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
73 * -XX:+FoldStableValues
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
74 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
75 * java.lang.invoke.TestStableObject
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
76 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
77 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
78 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
79 * -XX:-FoldStableValues
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
80 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
81 * java.lang.invoke.TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
82 *
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
83 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
84 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
85 * -client -XX:-TieredCompilation
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
86 * -XX:+FoldStableValues
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
87 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
88 * java.lang.invoke.TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
89 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
90 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
91 * -client -XX:-TieredCompilation
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
92 * -XX:-FoldStableValues
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
93 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
94 * java.lang.invoke.TestStableObject
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
95 */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
96 package java.lang.invoke;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
97
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
98 import java.lang.reflect.InvocationTargetException;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
99
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
100 public class TestStableObject {
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
101 static final boolean isStableEnabled = StableConfiguration.isStableEnabled;
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
102 static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
103
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
104 public static void main(String[] args) throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
105 run(DefaultValue.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
106 run(ObjectStable.class);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
107 run(DefaultStaticValue.class);
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
108 run(StaticObjectStable.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
109 run(VolatileObjectStable.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
110
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
111 // @Stable arrays: Dim 1-4
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
112 run(ObjectArrayDim1.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
113 run(ObjectArrayDim2.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
114 run(ObjectArrayDim3.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
115 run(ObjectArrayDim4.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
116
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
117 // @Stable Object field: dynamic arrays
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
118 run(ObjectArrayLowerDim0.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
119 run(ObjectArrayLowerDim1.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
120 run(ObjectArrayLowerDim2.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
121
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
122 // Nested @Stable fields
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
123 run(NestedStableField.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
124 run(NestedStableField1.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
125 run(NestedStableField2.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
126 run(NestedStableField3.class);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
127
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
128 if (failed) {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
129 throw new Error("TEST FAILED");
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
130 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
131 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
132
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
133 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
134
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
135 enum Values {A, B, C, D, E, F}
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
136
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
137 static class DefaultValue {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
138 public @Stable Object v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
139
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
140 public static final DefaultValue c = new DefaultValue();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
141 public static Object get() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
142 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
143 Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
144 c.v = Values.A; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
145 assertEquals(val1, null);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
146 assertEquals(val2, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
147 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
148 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
149
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
150 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
151
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
152 static class ObjectStable {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
153 public @Stable Values v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
154
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
155 public static final ObjectStable c = new ObjectStable ();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
156 public static Values get() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
157 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
158 c.v = Values.A; Values val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
159 c.v = Values.B; Values val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
160 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
161 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
162 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
163 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
164
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
165 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
166
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
167 static class DefaultStaticValue {
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
168 public static @Stable Object v;
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
169
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
170 public static final DefaultStaticValue c = new DefaultStaticValue();
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
171 public static Object get() { return c.v; }
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
172 public static void test() throws Exception {
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
173 Object val1 = get();
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
174 c.v = Values.A; Object val2 = get();
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
175 assertEquals(val1, null);
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
176 assertEquals(val2, Values.A);
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
177 }
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
178 }
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
179
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
180 /* ==================================================== */
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
181
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
182 static class StaticObjectStable {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
183 public static @Stable Values v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
184
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
185 public static final ObjectStable c = new ObjectStable ();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
186 public static Values get() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
187 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
188 c.v = Values.A; Values val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
189 c.v = Values.B; Values val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
190 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
191 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
192 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
193 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
194
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
195 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
196
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
197 static class VolatileObjectStable {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
198 public @Stable volatile Values v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
199
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
200 public static final VolatileObjectStable c = new VolatileObjectStable ();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
201 public static Values get() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
202 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
203 c.v = Values.A; Values val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
204 c.v = Values.B; Values val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
205 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
206 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
207 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
208 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
209
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
210 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
211 // @Stable array == field && all components are stable
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
212
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
213 static class ObjectArrayDim1 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
214 public @Stable Object[] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
215
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
216 public static final ObjectArrayDim1 c = new ObjectArrayDim1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
217 public static Object get() { return c.v[0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
218 public static Object get1() { return c.v[10]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
219 public static Object[] get2() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
220 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
221 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
222 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
223 c.v[0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
224 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
225 assertEquals(val2, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
226
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
227 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
228 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
229 : Values.C));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
230 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
231
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
232 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
233 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
234 c.v[10] = Values.B; Object val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
235 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
236 assertEquals(val2, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
237
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
238 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
239 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
240 : Values.C));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
241 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
242
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
243 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
244 c.v = new Object[1]; Object[] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
245 c.v = new Object[1]; Object[] val2 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
246 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
247 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
248 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
249 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
250
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
251 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
252
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
253 static class ObjectArrayDim2 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
254 public @Stable Object[][] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
255
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
256 public static final ObjectArrayDim2 c = new ObjectArrayDim2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
257 public static Object get() { return c.v[0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
258 public static Object[] get1() { return c.v[0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
259 public static Object[][] get2() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
260 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
261 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
262 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
263 c.v[0][0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
264 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
265 assertEquals(val2, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
266
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
267 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
268 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
269 : Values.C));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
270
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
271 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
272 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
273 : Values.D));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
274 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
275
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
276 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
277 c.v = new Object[1][1]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
278 c.v[0] = new Object[1]; Object[] val2 = get1();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
279 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
280 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
281
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
282 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
283 c.v = new Object[1][1]; Object[][] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
284 c.v = new Object[1][1]; Object[][] val2 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
285 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
286 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
287 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
288 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
289
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
290 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
291
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
292 static class ObjectArrayDim3 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
293 public @Stable Object[][][] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
294
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
295 public static final ObjectArrayDim3 c = new ObjectArrayDim3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
296 public static Object get() { return c.v[0][0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
297 public static Object[] get1() { return c.v[0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
298 public static Object[][] get2() { return c.v[0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
299 public static Object[][][] get3() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
300 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
301 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
302 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
303 c.v[0][0][0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
304 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
305 assertEquals(val2, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
306
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
307 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
308 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
309 : Values.C));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
310
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
311 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
312 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
313 : Values.D));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
314
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
315 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
316 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
317 : Values.E));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
318 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
319
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
320 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
321 c.v = new Object[1][1][1]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
322 c.v[0][0] = new Object[1]; Object[] val2 = get1();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
323 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
324 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
325
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
326 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
327 c.v = new Object[1][1][1]; Object[][] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
328 c.v[0] = new Object[1][1]; Object[][] val2 = get2();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
329 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
330 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
331
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
332 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
333 c.v = new Object[1][1][1]; Object[][][] val1 = get3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
334 c.v = new Object[1][1][1]; Object[][][] val2 = get3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
335 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
336 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
337 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
338 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
339
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
340 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
341
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
342 static class ObjectArrayDim4 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
343 public @Stable Object[][][][] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
344
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
345 public static final ObjectArrayDim4 c = new ObjectArrayDim4();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
346 public static Object get() { return c.v[0][0][0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
347 public static Object[] get1() { return c.v[0][0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
348 public static Object[][] get2() { return c.v[0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
349 public static Object[][][] get3() { return c.v[0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
350 public static Object[][][][] get4() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
351 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
352 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
353 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
354 c.v[0][0][0][0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
355 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
356 assertEquals(val2, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
357
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
358 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
359 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
360 : Values.C));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
361
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
362 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
363 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
364 : Values.D));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
365
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
366 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
367 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
368 : Values.E));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
369
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
370 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
371 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B)
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
372 : Values.F));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
373 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
374
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
375 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
376 c.v = new Object[1][1][1][1]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
377 c.v[0][0][0] = new Object[1]; Object[] val2 = get1();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
378 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
379 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
380
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
381 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
382 c.v = new Object[1][1][1][1]; Object[][] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
383 c.v[0][0] = new Object[1][1]; Object[][] val2 = get2();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
384 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
385 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
386
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
387 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
388 c.v = new Object[1][1][1][1]; Object[][][] val1 = get3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
389 c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3();
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
390 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
391 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
392
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
393 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
394 c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
395 c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
396 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
397 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
398 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
399 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
400
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
401 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
402 // Dynamic Dim is higher than static
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
403 static class ObjectArrayLowerDim0 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
404 public @Stable Object v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
405
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
406 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
407 public static Object get() { return ((Object[])c.v)[0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
408 public static Object[] get1() { return (Object[])c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
409
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
410 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
411 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
412 c.v = new Object[1]; ((Object[])c.v)[0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
413 ((Object[])c.v)[0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
414
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
415 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
416 assertEquals(val2, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
417 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
418
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
419 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
420 c.v = new Object[1]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
421 c.v = new Object[1]; Object[] val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
422 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
423 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
424 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
425 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
426
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
427 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
428
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
429 static class ObjectArrayLowerDim1 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
430 public @Stable Object[] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
431
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
432 public static final ObjectArrayLowerDim1 c = new ObjectArrayLowerDim1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
433 public static Object get() { return ((Object[][])c.v)[0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
434 public static Object[] get1() { return (Object[])(c.v[0]); }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
435 public static Object[] get2() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
436
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
437 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
438 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
439 c.v = new Object[1][1]; ((Object[][])c.v)[0][0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
440 ((Object[][])c.v)[0][0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
441
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
442 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
443 assertEquals(val2, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
444 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
445
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
446 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
447 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
448 c.v[0] = new Object[0]; Object[] val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
449
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
450 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
451 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
452
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
453 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
454 c.v = new Object[0][0]; Object[] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
455 c.v = new Object[0][0]; Object[] val2 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
456
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
457 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
458 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
459 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
460 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
461
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
462 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
463
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
464 static class ObjectArrayLowerDim2 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
465 public @Stable Object[][] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
466
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
467 public static final ObjectArrayLowerDim2 c = new ObjectArrayLowerDim2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
468 public static Object get() { return ((Object[][][])c.v)[0][0][0]; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
469 public static Object[] get1() { return (Object[])(c.v[0][0]); }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
470 public static Object[][] get2() { return (Object[][])(c.v[0]); }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
471 public static Object[][] get3() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
472
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
473 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
474 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
475 c.v = new Object[1][1][1]; ((Object[][][])c.v)[0][0][0] = Values.A; Object val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
476 ((Object[][][])c.v)[0][0][0] = Values.B; Object val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
477
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
478 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
479 assertEquals(val2, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
480 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
481
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
482 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
483 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
484 c.v[0][0] = new Object[0]; Object[] val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
485
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
486 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
487 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
488
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
489 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
490 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
491 c.v[0] = new Object[0][0]; Object[][] val2 = get2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
492
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
493 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
494 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
495
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
496 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
497 c.v = new Object[0][0][0]; Object[][] val1 = get3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
498 c.v = new Object[0][0][0]; Object[][] val2 = get3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
499
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
500 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
501 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
502 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
503 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
504
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
505 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
506
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
507 static class NestedStableField {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
508 static class A {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
509 public @Stable Object a;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
510
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
511 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
512 public @Stable A v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
513
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
514 public static final NestedStableField c = new NestedStableField();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
515 public static A get() { return c.v; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
516 public static Object get1() { return get().a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
517
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
518 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
519 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
520 c.v = new A(); c.v.a = Values.A; A val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
521 c.v.a = Values.B; A val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
522
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
523 assertEquals(val1.a, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
524 assertEquals(val2.a, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
525 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
526
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
527 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
528 c.v = new A(); c.v.a = Values.A; Object val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
529 c.v.a = Values.B; Object val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
530 c.v = new A(); c.v.a = Values.C; Object val3 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
531
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
532 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
533 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
534 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
535 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
536 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
537 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
538
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
539 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
540
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
541 static class NestedStableField1 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
542 static class A {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
543 public @Stable Object a;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
544 public @Stable A next;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
545 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
546 public @Stable A v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
547
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
548 public static final NestedStableField1 c = new NestedStableField1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
549 public static A get() { return c.v.next.next.next.next.next.next.next; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
550 public static Object get1() { return get().a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
551
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
552 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
553 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
554 c.v = new A(); c.v.next = new A(); c.v.next.next = c.v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
555 c.v.a = Values.A; c.v.next.a = Values.A; A val1 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
556 c.v.a = Values.B; c.v.next.a = Values.B; A val2 = get();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
557
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
558 assertEquals(val1.a, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
559 assertEquals(val2.a, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
560 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
561
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
562 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
563 c.v = new A(); c.v.next = c.v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
564 c.v.a = Values.A; Object val1 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
565 c.v.a = Values.B; Object val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
566 c.v = new A(); c.v.next = c.v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
567 c.v.a = Values.C; Object val3 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
568
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
569 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
570 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
571 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
572 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
573 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
574 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
575 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
576
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
577 static class NestedStableField2 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
578 static class A {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
579 public @Stable Object a;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
580 public @Stable A left;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
581 public A right;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
582 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
583
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
584 public @Stable A v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
585
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
586 public static final NestedStableField2 c = new NestedStableField2();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
587 public static Object get() { return c.v.left.left.left.a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
588 public static Object get1() { return c.v.left.left.right.left.a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
589
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
590 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
591 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
592 c.v = new A(); c.v.left = c.v.right = c.v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
593 c.v.a = Values.A; Object val1 = get(); Object val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
594 c.v.a = Values.B; Object val3 = get(); Object val4 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
595
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
596 assertEquals(val1, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
597 assertEquals(val3, (isStableEnabled ? Values.A : Values.B));
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
598
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
599 assertEquals(val2, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
600 assertEquals(val4, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
601 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
602 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
603 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
604
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
605 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
606
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
607 static class NestedStableField3 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
608 static class A {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
609 public @Stable Object a;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
610 public @Stable A[] left;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
611 public A[] right;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
612 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
613
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
614 public @Stable A[] v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
615
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
616 public static final NestedStableField3 c = new NestedStableField3();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
617 public static Object get() { return c.v[0].left[1].left[0].left[1].a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
618 public static Object get1() { return c.v[1].left[0].left[1].right[0].left[1].a; }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
619
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
620 public static void test() throws Exception {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
621 {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
622 A elem = new A();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
623 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
624 elem.a = Values.A; Object val1 = get(); Object val2 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
625 elem.a = Values.B; Object val3 = get(); Object val4 = get1();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
626
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
627 assertEquals(val1, Values.A);
18004
ee1c924763d2 8043546: C1 optimizes @Stable instance fields with default values
vlivanov
parents: 17820
diff changeset
628 assertEquals(val3, (isServerWithStable ? Values.A : Values.B));
17820
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
629
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
630 assertEquals(val2, Values.A);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
631 assertEquals(val4, Values.B);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
632 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
633 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
634 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
635
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
636 /* ==================================================== */
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
637 // Auxiliary methods
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
638 static void assertEquals(Object i, Object j) { if (i != j) throw new AssertionError(i + " != " + j); }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
639 static void assertTrue(boolean b) { if (!b) throw new AssertionError(); }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
640
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
641 static boolean failed = false;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
642
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
643 public static void run(Class<?> test) {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
644 Throwable ex = null;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
645 System.out.print(test.getName()+": ");
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
646 try {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
647 test.getMethod("test").invoke(null);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
648 } catch (InvocationTargetException e) {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
649 ex = e.getCause();
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
650 } catch (Throwable e) {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
651 ex = e;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
652 } finally {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
653 if (ex == null) {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
654 System.out.println("PASSED");
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
655 } else {
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
656 failed = true;
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
657 System.out.println("FAILED");
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
658 ex.printStackTrace(System.out);
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
659 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
660 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
661 }
248ff38d2950 8035828: Turn on @Stable support in VM
vlivanov
parents:
diff changeset
662 }