test/compiler/stable/TestStableByte.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 6747
ee1c924763d2
child 6876
710a3c8b516e
child 7787
1ec24746bb40
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

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

mercurial