1 /* 2 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 // -- This file was mechanically generated: Do not edit! -- // 25 26 /* 27 * @test 28 * @bug 8156486 8207257 29 * @run testng/othervm -XX:+EnableValhalla VarHandleTestMethodTypePoint 30 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false 31 * -XX:+EnableValhalla VarHandleTestMethodTypePoint 32 */ 33 34 import org.testng.annotations.BeforeClass; 35 import org.testng.annotations.DataProvider; 36 import org.testng.annotations.Test; 37 38 import java.lang.invoke.MethodHandles; 39 import java.lang.invoke.VarHandle; 40 import java.util.ArrayList; 41 import java.util.Arrays; 42 import java.util.List; 43 44 import static org.testng.Assert.*; 45 46 import static java.lang.invoke.MethodType.*; 47 48 public class VarHandleTestMethodTypePoint extends VarHandleBaseTest { 49 static final Point static_final_v = Point.getInstance(1,1); 50 51 static Point static_v = Point.getInstance(1,1); 52 53 final Point final_v = Point.getInstance(1,1); 54 55 Point v = Point.getInstance(1,1); 56 57 VarHandle vhFinalField; 58 59 VarHandle vhField; 60 61 VarHandle vhStaticField; 62 63 VarHandle vhStaticFinalField; 64 65 VarHandle vhArray; 66 67 @BeforeClass 68 public void setup() throws Exception { 69 vhFinalField = MethodHandles.lookup().findVarHandle( 70 VarHandleTestMethodTypePoint.class, "final_v", Point.class); 71 72 vhField = MethodHandles.lookup().findVarHandle( 73 VarHandleTestMethodTypePoint.class, "v", Point.class); 74 75 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle( 76 VarHandleTestMethodTypePoint.class, "static_final_v", Point.class); 77 78 vhStaticField = MethodHandles.lookup().findStaticVarHandle( 79 VarHandleTestMethodTypePoint.class, "static_v", Point.class); 80 81 vhArray = MethodHandles.arrayElementVarHandle(Point[].class); 82 } 83 84 @DataProvider 85 public Object[][] accessTestCaseProvider() throws Exception { 86 List<AccessTestCase<?>> cases = new ArrayList<>(); 87 88 cases.add(new VarHandleAccessTestCase("Instance field", 89 vhField, vh -> testInstanceFieldWrongMethodType(this, vh), 90 false)); 91 92 cases.add(new VarHandleAccessTestCase("Static field", 93 vhStaticField, VarHandleTestMethodTypePoint::testStaticFieldWrongMethodType, 94 false)); 95 96 cases.add(new VarHandleAccessTestCase("Array", 97 vhArray, VarHandleTestMethodTypePoint::testArrayWrongMethodType, 98 false)); 99 100 for (VarHandleToMethodHandle f : VarHandleToMethodHandle.values()) { 101 cases.add(new MethodHandleAccessTestCase("Instance field", 102 vhField, f, hs -> testInstanceFieldWrongMethodType(this, hs), 103 false)); 104 105 cases.add(new MethodHandleAccessTestCase("Static field", 106 vhStaticField, f, VarHandleTestMethodTypePoint::testStaticFieldWrongMethodType, 107 false)); 108 109 cases.add(new MethodHandleAccessTestCase("Array", 110 vhArray, f, VarHandleTestMethodTypePoint::testArrayWrongMethodType, 111 false)); 112 } 113 // Work around issue with jtreg summary reporting which truncates 114 // the String result of Object.toString to 30 characters, hence 115 // the first dummy argument 116 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new); 117 } 118 119 @Test(dataProvider = "accessTestCaseProvider") 120 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable { 121 T t = atc.get(); 122 int iters = atc.requiresLoop() ? ITERS : 1; 123 for (int c = 0; c < iters; c++) { 124 atc.testAccess(t); 125 } 126 } 127 128 129 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypePoint recv, VarHandle vh) throws Throwable { 130 // Get 131 // Incorrect argument types 132 checkNPE(() -> { // null receiver 133 Point x = (Point) vh.get(null); 134 }); 135 checkCCE(() -> { // receiver reference class 136 Point x = (Point) vh.get(Void.class); 137 }); 138 checkWMTE(() -> { // receiver primitive class 139 Point x = (Point) vh.get(0); 140 }); 141 // Incorrect return type 142 checkCCE(() -> { // reference class 143 Void x = (Void) vh.get(recv); 144 }); 145 checkWMTE(() -> { // primitive class 146 boolean x = (boolean) vh.get(recv); 147 }); 148 // Incorrect arity 149 checkWMTE(() -> { // 0 150 Point x = (Point) vh.get(); 151 }); 152 checkWMTE(() -> { // > 153 Point x = (Point) vh.get(recv, Void.class); 154 }); 155 156 157 // Set 158 // Incorrect argument types 159 checkNPE(() -> { // null receiver 160 vh.set(null, Point.getInstance(1,1)); 161 }); 162 checkCCE(() -> { // receiver reference class 163 vh.set(Void.class, Point.getInstance(1,1)); 164 }); 165 checkCCE(() -> { // value reference class 166 vh.set(recv, Void.class); 167 }); 168 checkWMTE(() -> { // receiver primitive class 169 vh.set(0, Point.getInstance(1,1)); 170 }); 171 // Incorrect arity 172 checkWMTE(() -> { // 0 173 vh.set(); 174 }); 175 checkWMTE(() -> { // > 176 vh.set(recv, Point.getInstance(1,1), Void.class); 177 }); 178 179 180 // GetVolatile 181 // Incorrect argument types 182 checkNPE(() -> { // null receiver 183 Point x = (Point) vh.getVolatile(null); 184 }); 185 checkCCE(() -> { // receiver reference class 186 Point x = (Point) vh.getVolatile(Void.class); 187 }); 188 checkWMTE(() -> { // receiver primitive class 189 Point x = (Point) vh.getVolatile(0); 190 }); 191 // Incorrect return type 192 checkCCE(() -> { // reference class 193 Void x = (Void) vh.getVolatile(recv); 194 }); 195 checkWMTE(() -> { // primitive class 196 boolean x = (boolean) vh.getVolatile(recv); 197 }); 198 // Incorrect arity 199 checkWMTE(() -> { // 0 200 Point x = (Point) vh.getVolatile(); 201 }); 202 checkWMTE(() -> { // > 203 Point x = (Point) vh.getVolatile(recv, Void.class); 204 }); 205 206 207 // SetVolatile 208 // Incorrect argument types 209 checkNPE(() -> { // null receiver 210 vh.setVolatile(null, Point.getInstance(1,1)); 211 }); 212 checkCCE(() -> { // receiver reference class 213 vh.setVolatile(Void.class, Point.getInstance(1,1)); 214 }); 215 checkCCE(() -> { // value reference class 216 vh.setVolatile(recv, Void.class); 217 }); 218 checkWMTE(() -> { // receiver primitive class 219 vh.setVolatile(0, Point.getInstance(1,1)); 220 }); 221 // Incorrect arity 222 checkWMTE(() -> { // 0 223 vh.setVolatile(); 224 }); 225 checkWMTE(() -> { // > 226 vh.setVolatile(recv, Point.getInstance(1,1), Void.class); 227 }); 228 229 230 // GetOpaque 231 // Incorrect argument types 232 checkNPE(() -> { // null receiver 233 Point x = (Point) vh.getOpaque(null); 234 }); 235 checkCCE(() -> { // receiver reference class 236 Point x = (Point) vh.getOpaque(Void.class); 237 }); 238 checkWMTE(() -> { // receiver primitive class 239 Point x = (Point) vh.getOpaque(0); 240 }); 241 // Incorrect return type 242 checkCCE(() -> { // reference class 243 Void x = (Void) vh.getOpaque(recv); 244 }); 245 checkWMTE(() -> { // primitive class 246 boolean x = (boolean) vh.getOpaque(recv); 247 }); 248 // Incorrect arity 249 checkWMTE(() -> { // 0 250 Point x = (Point) vh.getOpaque(); 251 }); 252 checkWMTE(() -> { // > 253 Point x = (Point) vh.getOpaque(recv, Void.class); 254 }); 255 256 257 // SetOpaque 258 // Incorrect argument types 259 checkNPE(() -> { // null receiver 260 vh.setOpaque(null, Point.getInstance(1,1)); 261 }); 262 checkCCE(() -> { // receiver reference class 263 vh.setOpaque(Void.class, Point.getInstance(1,1)); 264 }); 265 checkCCE(() -> { // value reference class 266 vh.setOpaque(recv, Void.class); 267 }); 268 checkWMTE(() -> { // receiver primitive class 269 vh.setOpaque(0, Point.getInstance(1,1)); 270 }); 271 // Incorrect arity 272 checkWMTE(() -> { // 0 273 vh.setOpaque(); 274 }); 275 checkWMTE(() -> { // > 276 vh.setOpaque(recv, Point.getInstance(1,1), Void.class); 277 }); 278 279 280 // GetAcquire 281 // Incorrect argument types 282 checkNPE(() -> { // null receiver 283 Point x = (Point) vh.getAcquire(null); 284 }); 285 checkCCE(() -> { // receiver reference class 286 Point x = (Point) vh.getAcquire(Void.class); 287 }); 288 checkWMTE(() -> { // receiver primitive class 289 Point x = (Point) vh.getAcquire(0); 290 }); 291 // Incorrect return type 292 checkCCE(() -> { // reference class 293 Void x = (Void) vh.getAcquire(recv); 294 }); 295 checkWMTE(() -> { // primitive class 296 boolean x = (boolean) vh.getAcquire(recv); 297 }); 298 // Incorrect arity 299 checkWMTE(() -> { // 0 300 Point x = (Point) vh.getAcquire(); 301 }); 302 checkWMTE(() -> { // > 303 Point x = (Point) vh.getAcquire(recv, Void.class); 304 }); 305 306 307 // SetRelease 308 // Incorrect argument types 309 checkNPE(() -> { // null receiver 310 vh.setRelease(null, Point.getInstance(1,1)); 311 }); 312 checkCCE(() -> { // receiver reference class 313 vh.setRelease(Void.class, Point.getInstance(1,1)); 314 }); 315 checkCCE(() -> { // value reference class 316 vh.setRelease(recv, Void.class); 317 }); 318 checkWMTE(() -> { // receiver primitive class 319 vh.setRelease(0, Point.getInstance(1,1)); 320 }); 321 // Incorrect arity 322 checkWMTE(() -> { // 0 323 vh.setRelease(); 324 }); 325 checkWMTE(() -> { // > 326 vh.setRelease(recv, Point.getInstance(1,1), Void.class); 327 }); 328 329 330 // CompareAndSet 331 // Incorrect argument types 332 checkNPE(() -> { // null receiver 333 boolean r = vh.compareAndSet(null, Point.getInstance(1,1), Point.getInstance(1,1)); 334 }); 335 checkCCE(() -> { // receiver reference class 336 boolean r = vh.compareAndSet(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 337 }); 338 checkCCE(() -> { // expected reference class 339 boolean r = vh.compareAndSet(recv, Void.class, Point.getInstance(1,1)); 340 }); 341 checkCCE(() -> { // actual reference class 342 boolean r = vh.compareAndSet(recv, Point.getInstance(1,1), Void.class); 343 }); 344 checkWMTE(() -> { // receiver primitive class 345 boolean r = vh.compareAndSet(0, Point.getInstance(1,1), Point.getInstance(1,1)); 346 }); 347 // Incorrect arity 348 checkWMTE(() -> { // 0 349 boolean r = vh.compareAndSet(); 350 }); 351 checkWMTE(() -> { // > 352 boolean r = vh.compareAndSet(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 353 }); 354 355 356 // WeakCompareAndSet 357 // Incorrect argument types 358 checkNPE(() -> { // null receiver 359 boolean r = vh.weakCompareAndSetPlain(null, Point.getInstance(1,1), Point.getInstance(1,1)); 360 }); 361 checkCCE(() -> { // receiver reference class 362 boolean r = vh.weakCompareAndSetPlain(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 363 }); 364 checkCCE(() -> { // expected reference class 365 boolean r = vh.weakCompareAndSetPlain(recv, Void.class, Point.getInstance(1,1)); 366 }); 367 checkCCE(() -> { // actual reference class 368 boolean r = vh.weakCompareAndSetPlain(recv, Point.getInstance(1,1), Void.class); 369 }); 370 checkWMTE(() -> { // receiver primitive class 371 boolean r = vh.weakCompareAndSetPlain(0, Point.getInstance(1,1), Point.getInstance(1,1)); 372 }); 373 // Incorrect arity 374 checkWMTE(() -> { // 0 375 boolean r = vh.weakCompareAndSetPlain(); 376 }); 377 checkWMTE(() -> { // > 378 boolean r = vh.weakCompareAndSetPlain(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 379 }); 380 381 382 // WeakCompareAndSetVolatile 383 // Incorrect argument types 384 checkNPE(() -> { // null receiver 385 boolean r = vh.weakCompareAndSet(null, Point.getInstance(1,1), Point.getInstance(1,1)); 386 }); 387 checkCCE(() -> { // receiver reference class 388 boolean r = vh.weakCompareAndSet(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 389 }); 390 checkCCE(() -> { // expected reference class 391 boolean r = vh.weakCompareAndSet(recv, Void.class, Point.getInstance(1,1)); 392 }); 393 checkCCE(() -> { // actual reference class 394 boolean r = vh.weakCompareAndSet(recv, Point.getInstance(1,1), Void.class); 395 }); 396 checkWMTE(() -> { // receiver primitive class 397 boolean r = vh.weakCompareAndSet(0, Point.getInstance(1,1), Point.getInstance(1,1)); 398 }); 399 // Incorrect arity 400 checkWMTE(() -> { // 0 401 boolean r = vh.weakCompareAndSet(); 402 }); 403 checkWMTE(() -> { // > 404 boolean r = vh.weakCompareAndSet(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 405 }); 406 407 408 // WeakCompareAndSetAcquire 409 // Incorrect argument types 410 checkNPE(() -> { // null receiver 411 boolean r = vh.weakCompareAndSetAcquire(null, Point.getInstance(1,1), Point.getInstance(1,1)); 412 }); 413 checkCCE(() -> { // receiver reference class 414 boolean r = vh.weakCompareAndSetAcquire(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 415 }); 416 checkCCE(() -> { // expected reference class 417 boolean r = vh.weakCompareAndSetAcquire(recv, Void.class, Point.getInstance(1,1)); 418 }); 419 checkCCE(() -> { // actual reference class 420 boolean r = vh.weakCompareAndSetAcquire(recv, Point.getInstance(1,1), Void.class); 421 }); 422 checkWMTE(() -> { // receiver primitive class 423 boolean r = vh.weakCompareAndSetAcquire(0, Point.getInstance(1,1), Point.getInstance(1,1)); 424 }); 425 // Incorrect arity 426 checkWMTE(() -> { // 0 427 boolean r = vh.weakCompareAndSetAcquire(); 428 }); 429 checkWMTE(() -> { // > 430 boolean r = vh.weakCompareAndSetAcquire(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 431 }); 432 433 434 // WeakCompareAndSetRelease 435 // Incorrect argument types 436 checkNPE(() -> { // null receiver 437 boolean r = vh.weakCompareAndSetRelease(null, Point.getInstance(1,1), Point.getInstance(1,1)); 438 }); 439 checkCCE(() -> { // receiver reference class 440 boolean r = vh.weakCompareAndSetRelease(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 441 }); 442 checkCCE(() -> { // expected reference class 443 boolean r = vh.weakCompareAndSetRelease(recv, Void.class, Point.getInstance(1,1)); 444 }); 445 checkCCE(() -> { // actual reference class 446 boolean r = vh.weakCompareAndSetRelease(recv, Point.getInstance(1,1), Void.class); 447 }); 448 checkWMTE(() -> { // receiver primitive class 449 boolean r = vh.weakCompareAndSetRelease(0, Point.getInstance(1,1), Point.getInstance(1,1)); 450 }); 451 // Incorrect arity 452 checkWMTE(() -> { // 0 453 boolean r = vh.weakCompareAndSetRelease(); 454 }); 455 checkWMTE(() -> { // > 456 boolean r = vh.weakCompareAndSetRelease(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 457 }); 458 459 460 // CompareAndExchange 461 // Incorrect argument types 462 checkNPE(() -> { // null receiver 463 Point x = (Point) vh.compareAndExchange(null, Point.getInstance(1,1), Point.getInstance(1,1)); 464 }); 465 checkCCE(() -> { // receiver reference class 466 Point x = (Point) vh.compareAndExchange(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 467 }); 468 checkCCE(() -> { // expected reference class 469 Point x = (Point) vh.compareAndExchange(recv, Void.class, Point.getInstance(1,1)); 470 }); 471 checkCCE(() -> { // actual reference class 472 Point x = (Point) vh.compareAndExchange(recv, Point.getInstance(1,1), Void.class); 473 }); 474 checkWMTE(() -> { // reciever primitive class 475 Point x = (Point) vh.compareAndExchange(0, Point.getInstance(1,1), Point.getInstance(1,1)); 476 }); 477 // Incorrect return type 478 checkCCE(() -> { // reference class 479 Void r = (Void) vh.compareAndExchange(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 480 }); 481 checkWMTE(() -> { // primitive class 482 boolean x = (boolean) vh.compareAndExchange(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 483 }); 484 // Incorrect arity 485 checkWMTE(() -> { // 0 486 Point x = (Point) vh.compareAndExchange(); 487 }); 488 checkWMTE(() -> { // > 489 Point x = (Point) vh.compareAndExchange(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 490 }); 491 492 493 // CompareAndExchangeAcquire 494 // Incorrect argument types 495 checkNPE(() -> { // null receiver 496 Point x = (Point) vh.compareAndExchangeAcquire(null, Point.getInstance(1,1), Point.getInstance(1,1)); 497 }); 498 checkCCE(() -> { // receiver reference class 499 Point x = (Point) vh.compareAndExchangeAcquire(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 500 }); 501 checkCCE(() -> { // expected reference class 502 Point x = (Point) vh.compareAndExchangeAcquire(recv, Void.class, Point.getInstance(1,1)); 503 }); 504 checkCCE(() -> { // actual reference class 505 Point x = (Point) vh.compareAndExchangeAcquire(recv, Point.getInstance(1,1), Void.class); 506 }); 507 checkWMTE(() -> { // reciever primitive class 508 Point x = (Point) vh.compareAndExchangeAcquire(0, Point.getInstance(1,1), Point.getInstance(1,1)); 509 }); 510 // Incorrect return type 511 checkCCE(() -> { // reference class 512 Void r = (Void) vh.compareAndExchangeAcquire(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 513 }); 514 checkWMTE(() -> { // primitive class 515 boolean x = (boolean) vh.compareAndExchangeAcquire(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 516 }); 517 // Incorrect arity 518 checkWMTE(() -> { // 0 519 Point x = (Point) vh.compareAndExchangeAcquire(); 520 }); 521 checkWMTE(() -> { // > 522 Point x = (Point) vh.compareAndExchangeAcquire(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 523 }); 524 525 526 // CompareAndExchangeRelease 527 // Incorrect argument types 528 checkNPE(() -> { // null receiver 529 Point x = (Point) vh.compareAndExchangeRelease(null, Point.getInstance(1,1), Point.getInstance(1,1)); 530 }); 531 checkCCE(() -> { // receiver reference class 532 Point x = (Point) vh.compareAndExchangeRelease(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 533 }); 534 checkCCE(() -> { // expected reference class 535 Point x = (Point) vh.compareAndExchangeRelease(recv, Void.class, Point.getInstance(1,1)); 536 }); 537 checkCCE(() -> { // actual reference class 538 Point x = (Point) vh.compareAndExchangeRelease(recv, Point.getInstance(1,1), Void.class); 539 }); 540 checkWMTE(() -> { // reciever primitive class 541 Point x = (Point) vh.compareAndExchangeRelease(0, Point.getInstance(1,1), Point.getInstance(1,1)); 542 }); 543 // Incorrect return type 544 checkCCE(() -> { // reference class 545 Void r = (Void) vh.compareAndExchangeRelease(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 546 }); 547 checkWMTE(() -> { // primitive class 548 boolean x = (boolean) vh.compareAndExchangeRelease(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 549 }); 550 // Incorrect arity 551 checkWMTE(() -> { // 0 552 Point x = (Point) vh.compareAndExchangeRelease(); 553 }); 554 checkWMTE(() -> { // > 555 Point x = (Point) vh.compareAndExchangeRelease(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 556 }); 557 558 559 // GetAndSet 560 // Incorrect argument types 561 checkNPE(() -> { // null receiver 562 Point x = (Point) vh.getAndSet(null, Point.getInstance(1,1)); 563 }); 564 checkCCE(() -> { // receiver reference class 565 Point x = (Point) vh.getAndSet(Void.class, Point.getInstance(1,1)); 566 }); 567 checkCCE(() -> { // value reference class 568 Point x = (Point) vh.getAndSet(recv, Void.class); 569 }); 570 checkWMTE(() -> { // reciever primitive class 571 Point x = (Point) vh.getAndSet(0, Point.getInstance(1,1)); 572 }); 573 // Incorrect return type 574 checkCCE(() -> { // reference class 575 Void r = (Void) vh.getAndSet(recv, Point.getInstance(1,1)); 576 }); 577 checkWMTE(() -> { // primitive class 578 boolean x = (boolean) vh.getAndSet(recv, Point.getInstance(1,1)); 579 }); 580 // Incorrect arity 581 checkWMTE(() -> { // 0 582 Point x = (Point) vh.getAndSet(); 583 }); 584 checkWMTE(() -> { // > 585 Point x = (Point) vh.getAndSet(recv, Point.getInstance(1,1), Void.class); 586 }); 587 588 // GetAndSetAcquire 589 // Incorrect argument types 590 checkNPE(() -> { // null receiver 591 Point x = (Point) vh.getAndSetAcquire(null, Point.getInstance(1,1)); 592 }); 593 checkCCE(() -> { // receiver reference class 594 Point x = (Point) vh.getAndSetAcquire(Void.class, Point.getInstance(1,1)); 595 }); 596 checkCCE(() -> { // value reference class 597 Point x = (Point) vh.getAndSetAcquire(recv, Void.class); 598 }); 599 checkWMTE(() -> { // reciever primitive class 600 Point x = (Point) vh.getAndSetAcquire(0, Point.getInstance(1,1)); 601 }); 602 // Incorrect return type 603 checkCCE(() -> { // reference class 604 Void r = (Void) vh.getAndSetAcquire(recv, Point.getInstance(1,1)); 605 }); 606 checkWMTE(() -> { // primitive class 607 boolean x = (boolean) vh.getAndSetAcquire(recv, Point.getInstance(1,1)); 608 }); 609 // Incorrect arity 610 checkWMTE(() -> { // 0 611 Point x = (Point) vh.getAndSetAcquire(); 612 }); 613 checkWMTE(() -> { // > 614 Point x = (Point) vh.getAndSetAcquire(recv, Point.getInstance(1,1), Void.class); 615 }); 616 617 // GetAndSetRelease 618 // Incorrect argument types 619 checkNPE(() -> { // null receiver 620 Point x = (Point) vh.getAndSetRelease(null, Point.getInstance(1,1)); 621 }); 622 checkCCE(() -> { // receiver reference class 623 Point x = (Point) vh.getAndSetRelease(Void.class, Point.getInstance(1,1)); 624 }); 625 checkCCE(() -> { // value reference class 626 Point x = (Point) vh.getAndSetRelease(recv, Void.class); 627 }); 628 checkWMTE(() -> { // reciever primitive class 629 Point x = (Point) vh.getAndSetRelease(0, Point.getInstance(1,1)); 630 }); 631 // Incorrect return type 632 checkCCE(() -> { // reference class 633 Void r = (Void) vh.getAndSetRelease(recv, Point.getInstance(1,1)); 634 }); 635 checkWMTE(() -> { // primitive class 636 boolean x = (boolean) vh.getAndSetRelease(recv, Point.getInstance(1,1)); 637 }); 638 // Incorrect arity 639 checkWMTE(() -> { // 0 640 Point x = (Point) vh.getAndSetRelease(); 641 }); 642 checkWMTE(() -> { // > 643 Point x = (Point) vh.getAndSetRelease(recv, Point.getInstance(1,1), Void.class); 644 }); 645 646 647 } 648 649 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypePoint recv, Handles hs) throws Throwable { 650 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 651 // Incorrect argument types 652 checkNPE(() -> { // null receiver 653 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class)). 654 invokeExact((VarHandleTestMethodTypePoint) null); 655 }); 656 hs.checkWMTEOrCCE(() -> { // receiver reference class 657 Point x = (Point) hs.get(am, methodType(Point.class, Class.class)). 658 invokeExact(Void.class); 659 }); 660 checkWMTE(() -> { // receiver primitive class 661 Point x = (Point) hs.get(am, methodType(Point.class, int.class)). 662 invokeExact(0); 663 }); 664 // Incorrect return type 665 hs.checkWMTEOrCCE(() -> { // reference class 666 Void x = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypePoint.class)). 667 invokeExact(recv); 668 }); 669 checkWMTE(() -> { // primitive class 670 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class)). 671 invokeExact(recv); 672 }); 673 // Incorrect arity 674 checkWMTE(() -> { // 0 675 Point x = (Point) hs.get(am, methodType(Point.class)). 676 invokeExact(); 677 }); 678 checkWMTE(() -> { // > 679 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Class.class)). 680 invokeExact(recv, Void.class); 681 }); 682 } 683 684 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 685 // Incorrect argument types 686 checkNPE(() -> { // null receiver 687 hs.get(am, methodType(void.class, VarHandleTestMethodTypePoint.class, Point.class)). 688 invokeExact((VarHandleTestMethodTypePoint) null, Point.getInstance(1,1)); 689 }); 690 hs.checkWMTEOrCCE(() -> { // receiver reference class 691 hs.get(am, methodType(void.class, Class.class, Point.class)). 692 invokeExact(Void.class, Point.getInstance(1,1)); 693 }); 694 hs.checkWMTEOrCCE(() -> { // value reference class 695 hs.get(am, methodType(void.class, VarHandleTestMethodTypePoint.class, Class.class)). 696 invokeExact(recv, Void.class); 697 }); 698 checkWMTE(() -> { // receiver primitive class 699 hs.get(am, methodType(void.class, int.class, Point.class)). 700 invokeExact(0, Point.getInstance(1,1)); 701 }); 702 // Incorrect arity 703 checkWMTE(() -> { // 0 704 hs.get(am, methodType(void.class)). 705 invokeExact(); 706 }); 707 checkWMTE(() -> { // > 708 hs.get(am, methodType(void.class, VarHandleTestMethodTypePoint.class, Point.class, Class.class)). 709 invokeExact(recv, Point.getInstance(1,1), Void.class); 710 }); 711 } 712 713 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 714 // Incorrect argument types 715 checkNPE(() -> { // null receiver 716 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class, Point.class, Point.class)). 717 invokeExact((VarHandleTestMethodTypePoint) null, Point.getInstance(1,1), Point.getInstance(1,1)); 718 }); 719 hs.checkWMTEOrCCE(() -> { // receiver reference class 720 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, Point.class, Point.class)). 721 invokeExact(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 722 }); 723 hs.checkWMTEOrCCE(() -> { // expected reference class 724 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class, Class.class, Point.class)). 725 invokeExact(recv, Void.class, Point.getInstance(1,1)); 726 }); 727 hs.checkWMTEOrCCE(() -> { // actual reference class 728 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class, Point.class, Class.class)). 729 invokeExact(recv, Point.getInstance(1,1), Void.class); 730 }); 731 checkWMTE(() -> { // receiver primitive class 732 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class , Point.class, Point.class)). 733 invokeExact(0, Point.getInstance(1,1), Point.getInstance(1,1)); 734 }); 735 // Incorrect arity 736 checkWMTE(() -> { // 0 737 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 738 invokeExact(); 739 }); 740 checkWMTE(() -> { // > 741 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class, Point.class, Point.class, Class.class)). 742 invokeExact(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 743 }); 744 } 745 746 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 747 checkNPE(() -> { // null receiver 748 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Point.class, Point.class)). 749 invokeExact((VarHandleTestMethodTypePoint) null, Point.getInstance(1,1), Point.getInstance(1,1)); 750 }); 751 hs.checkWMTEOrCCE(() -> { // receiver reference class 752 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, Point.class, Point.class)). 753 invokeExact(Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 754 }); 755 hs.checkWMTEOrCCE(() -> { // expected reference class 756 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Class.class, Point.class)). 757 invokeExact(recv, Void.class, Point.getInstance(1,1)); 758 }); 759 hs.checkWMTEOrCCE(() -> { // actual reference class 760 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Point.class, Class.class)). 761 invokeExact(recv, Point.getInstance(1,1), Void.class); 762 }); 763 checkWMTE(() -> { // reciever primitive class 764 Point x = (Point) hs.get(am, methodType(Point.class, int.class , Point.class, Point.class)). 765 invokeExact(0, Point.getInstance(1,1), Point.getInstance(1,1)); 766 }); 767 // Incorrect return type 768 hs.checkWMTEOrCCE(() -> { // reference class 769 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypePoint.class , Point.class, Point.class)). 770 invokeExact(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 771 }); 772 checkWMTE(() -> { // primitive class 773 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class , Point.class, Point.class)). 774 invokeExact(recv, Point.getInstance(1,1), Point.getInstance(1,1)); 775 }); 776 // Incorrect arity 777 checkWMTE(() -> { // 0 778 Point x = (Point) hs.get(am, methodType(Point.class)). 779 invokeExact(); 780 }); 781 checkWMTE(() -> { // > 782 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Point.class, Point.class, Class.class)). 783 invokeExact(recv, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 784 }); 785 } 786 787 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 788 checkNPE(() -> { // null receiver 789 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Point.class)). 790 invokeExact((VarHandleTestMethodTypePoint) null, Point.getInstance(1,1)); 791 }); 792 hs.checkWMTEOrCCE(() -> { // receiver reference class 793 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, Point.class)). 794 invokeExact(Void.class, Point.getInstance(1,1)); 795 }); 796 hs.checkWMTEOrCCE(() -> { // value reference class 797 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Class.class)). 798 invokeExact(recv, Void.class); 799 }); 800 checkWMTE(() -> { // reciever primitive class 801 Point x = (Point) hs.get(am, methodType(Point.class, int.class, Point.class)). 802 invokeExact(0, Point.getInstance(1,1)); 803 }); 804 // Incorrect return type 805 hs.checkWMTEOrCCE(() -> { // reference class 806 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypePoint.class, Point.class)). 807 invokeExact(recv, Point.getInstance(1,1)); 808 }); 809 checkWMTE(() -> { // primitive class 810 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypePoint.class, Point.class)). 811 invokeExact(recv, Point.getInstance(1,1)); 812 }); 813 // Incorrect arity 814 checkWMTE(() -> { // 0 815 Point x = (Point) hs.get(am, methodType(Point.class)). 816 invokeExact(); 817 }); 818 checkWMTE(() -> { // > 819 Point x = (Point) hs.get(am, methodType(Point.class, VarHandleTestMethodTypePoint.class, Point.class)). 820 invokeExact(recv, Point.getInstance(1,1), Void.class); 821 }); 822 } 823 824 825 } 826 827 828 static void testStaticFieldWrongMethodType(VarHandle vh) throws Throwable { 829 // Get 830 // Incorrect return type 831 checkCCE(() -> { // reference class 832 Void x = (Void) vh.get(); 833 }); 834 checkWMTE(() -> { // primitive class 835 boolean x = (boolean) vh.get(); 836 }); 837 // Incorrect arity 838 checkWMTE(() -> { // > 839 Point x = (Point) vh.get(Void.class); 840 }); 841 842 843 // Set 844 // Incorrect argument types 845 checkCCE(() -> { // value reference class 846 vh.set(Void.class); 847 }); 848 // Incorrect arity 849 checkWMTE(() -> { // 0 850 vh.set(); 851 }); 852 checkWMTE(() -> { // > 853 vh.set(Point.getInstance(1,1), Void.class); 854 }); 855 856 857 // GetVolatile 858 // Incorrect return type 859 checkCCE(() -> { // reference class 860 Void x = (Void) vh.getVolatile(); 861 }); 862 checkWMTE(() -> { // primitive class 863 boolean x = (boolean) vh.getVolatile(); 864 }); 865 checkWMTE(() -> { // > 866 Point x = (Point) vh.getVolatile(Void.class); 867 }); 868 869 870 // SetVolatile 871 // Incorrect argument types 872 checkCCE(() -> { // value reference class 873 vh.setVolatile(Void.class); 874 }); 875 // Incorrect arity 876 checkWMTE(() -> { // 0 877 vh.setVolatile(); 878 }); 879 checkWMTE(() -> { // > 880 vh.setVolatile(Point.getInstance(1,1), Void.class); 881 }); 882 883 884 // GetOpaque 885 // Incorrect return type 886 checkCCE(() -> { // reference class 887 Void x = (Void) vh.getOpaque(); 888 }); 889 checkWMTE(() -> { // primitive class 890 boolean x = (boolean) vh.getOpaque(); 891 }); 892 checkWMTE(() -> { // > 893 Point x = (Point) vh.getOpaque(Void.class); 894 }); 895 896 897 // SetOpaque 898 // Incorrect argument types 899 checkCCE(() -> { // value reference class 900 vh.setOpaque(Void.class); 901 }); 902 // Incorrect arity 903 checkWMTE(() -> { // 0 904 vh.setOpaque(); 905 }); 906 checkWMTE(() -> { // > 907 vh.setOpaque(Point.getInstance(1,1), Void.class); 908 }); 909 910 911 // GetAcquire 912 // Incorrect return type 913 checkCCE(() -> { // reference class 914 Void x = (Void) vh.getAcquire(); 915 }); 916 checkWMTE(() -> { // primitive class 917 boolean x = (boolean) vh.getAcquire(); 918 }); 919 checkWMTE(() -> { // > 920 Point x = (Point) vh.getAcquire(Void.class); 921 }); 922 923 924 // SetRelease 925 // Incorrect argument types 926 checkCCE(() -> { // value reference class 927 vh.setRelease(Void.class); 928 }); 929 // Incorrect arity 930 checkWMTE(() -> { // 0 931 vh.setRelease(); 932 }); 933 checkWMTE(() -> { // > 934 vh.setRelease(Point.getInstance(1,1), Void.class); 935 }); 936 937 938 // CompareAndSet 939 // Incorrect argument types 940 checkCCE(() -> { // expected reference class 941 boolean r = vh.compareAndSet(Void.class, Point.getInstance(1,1)); 942 }); 943 checkCCE(() -> { // actual reference class 944 boolean r = vh.compareAndSet(Point.getInstance(1,1), Void.class); 945 }); 946 // Incorrect arity 947 checkWMTE(() -> { // 0 948 boolean r = vh.compareAndSet(); 949 }); 950 checkWMTE(() -> { // > 951 boolean r = vh.compareAndSet(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 952 }); 953 954 955 // WeakCompareAndSet 956 // Incorrect argument types 957 checkCCE(() -> { // expected reference class 958 boolean r = vh.weakCompareAndSetPlain(Void.class, Point.getInstance(1,1)); 959 }); 960 checkCCE(() -> { // actual reference class 961 boolean r = vh.weakCompareAndSetPlain(Point.getInstance(1,1), Void.class); 962 }); 963 // Incorrect arity 964 checkWMTE(() -> { // 0 965 boolean r = vh.weakCompareAndSetPlain(); 966 }); 967 checkWMTE(() -> { // > 968 boolean r = vh.weakCompareAndSetPlain(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 969 }); 970 971 972 // WeakCompareAndSetVolatile 973 // Incorrect argument types 974 checkCCE(() -> { // expected reference class 975 boolean r = vh.weakCompareAndSet(Void.class, Point.getInstance(1,1)); 976 }); 977 checkCCE(() -> { // actual reference class 978 boolean r = vh.weakCompareAndSet(Point.getInstance(1,1), Void.class); 979 }); 980 // Incorrect arity 981 checkWMTE(() -> { // 0 982 boolean r = vh.weakCompareAndSet(); 983 }); 984 checkWMTE(() -> { // > 985 boolean r = vh.weakCompareAndSet(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 986 }); 987 988 989 // WeakCompareAndSetAcquire 990 // Incorrect argument types 991 checkCCE(() -> { // expected reference class 992 boolean r = vh.weakCompareAndSetAcquire(Void.class, Point.getInstance(1,1)); 993 }); 994 checkCCE(() -> { // actual reference class 995 boolean r = vh.weakCompareAndSetAcquire(Point.getInstance(1,1), Void.class); 996 }); 997 // Incorrect arity 998 checkWMTE(() -> { // 0 999 boolean r = vh.weakCompareAndSetAcquire(); 1000 }); 1001 checkWMTE(() -> { // > 1002 boolean r = vh.weakCompareAndSetAcquire(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1003 }); 1004 1005 1006 // WeakCompareAndSetRelease 1007 // Incorrect argument types 1008 checkCCE(() -> { // expected reference class 1009 boolean r = vh.weakCompareAndSetRelease(Void.class, Point.getInstance(1,1)); 1010 }); 1011 checkCCE(() -> { // actual reference class 1012 boolean r = vh.weakCompareAndSetRelease(Point.getInstance(1,1), Void.class); 1013 }); 1014 // Incorrect arity 1015 checkWMTE(() -> { // 0 1016 boolean r = vh.weakCompareAndSetRelease(); 1017 }); 1018 checkWMTE(() -> { // > 1019 boolean r = vh.weakCompareAndSetRelease(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1020 }); 1021 1022 1023 // CompareAndExchange 1024 // Incorrect argument types 1025 checkCCE(() -> { // expected reference class 1026 Point x = (Point) vh.compareAndExchange(Void.class, Point.getInstance(1,1)); 1027 }); 1028 checkCCE(() -> { // actual reference class 1029 Point x = (Point) vh.compareAndExchange(Point.getInstance(1,1), Void.class); 1030 }); 1031 // Incorrect return type 1032 checkCCE(() -> { // reference class 1033 Void r = (Void) vh.compareAndExchange(Point.getInstance(1,1), Point.getInstance(1,1)); 1034 }); 1035 checkWMTE(() -> { // primitive class 1036 boolean x = (boolean) vh.compareAndExchange(Point.getInstance(1,1), Point.getInstance(1,1)); 1037 }); 1038 // Incorrect arity 1039 checkWMTE(() -> { // 0 1040 Point x = (Point) vh.compareAndExchange(); 1041 }); 1042 checkWMTE(() -> { // > 1043 Point x = (Point) vh.compareAndExchange(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1044 }); 1045 1046 1047 // CompareAndExchangeAcquire 1048 // Incorrect argument types 1049 checkCCE(() -> { // expected reference class 1050 Point x = (Point) vh.compareAndExchangeAcquire(Void.class, Point.getInstance(1,1)); 1051 }); 1052 checkCCE(() -> { // actual reference class 1053 Point x = (Point) vh.compareAndExchangeAcquire(Point.getInstance(1,1), Void.class); 1054 }); 1055 // Incorrect return type 1056 checkCCE(() -> { // reference class 1057 Void r = (Void) vh.compareAndExchangeAcquire(Point.getInstance(1,1), Point.getInstance(1,1)); 1058 }); 1059 checkWMTE(() -> { // primitive class 1060 boolean x = (boolean) vh.compareAndExchangeAcquire(Point.getInstance(1,1), Point.getInstance(1,1)); 1061 }); 1062 // Incorrect arity 1063 checkWMTE(() -> { // 0 1064 Point x = (Point) vh.compareAndExchangeAcquire(); 1065 }); 1066 checkWMTE(() -> { // > 1067 Point x = (Point) vh.compareAndExchangeAcquire(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1068 }); 1069 1070 1071 // CompareAndExchangeRelease 1072 // Incorrect argument types 1073 checkCCE(() -> { // expected reference class 1074 Point x = (Point) vh.compareAndExchangeRelease(Void.class, Point.getInstance(1,1)); 1075 }); 1076 checkCCE(() -> { // actual reference class 1077 Point x = (Point) vh.compareAndExchangeRelease(Point.getInstance(1,1), Void.class); 1078 }); 1079 // Incorrect return type 1080 checkCCE(() -> { // reference class 1081 Void r = (Void) vh.compareAndExchangeRelease(Point.getInstance(1,1), Point.getInstance(1,1)); 1082 }); 1083 checkWMTE(() -> { // primitive class 1084 boolean x = (boolean) vh.compareAndExchangeRelease(Point.getInstance(1,1), Point.getInstance(1,1)); 1085 }); 1086 // Incorrect arity 1087 checkWMTE(() -> { // 0 1088 Point x = (Point) vh.compareAndExchangeRelease(); 1089 }); 1090 checkWMTE(() -> { // > 1091 Point x = (Point) vh.compareAndExchangeRelease(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1092 }); 1093 1094 1095 // GetAndSet 1096 // Incorrect argument types 1097 checkCCE(() -> { // value reference class 1098 Point x = (Point) vh.getAndSet(Void.class); 1099 }); 1100 // Incorrect return type 1101 checkCCE(() -> { // reference class 1102 Void r = (Void) vh.getAndSet(Point.getInstance(1,1)); 1103 }); 1104 checkWMTE(() -> { // primitive class 1105 boolean x = (boolean) vh.getAndSet(Point.getInstance(1,1)); 1106 }); 1107 // Incorrect arity 1108 checkWMTE(() -> { // 0 1109 Point x = (Point) vh.getAndSet(); 1110 }); 1111 checkWMTE(() -> { // > 1112 Point x = (Point) vh.getAndSet(Point.getInstance(1,1), Void.class); 1113 }); 1114 1115 1116 // GetAndSetAcquire 1117 // Incorrect argument types 1118 checkCCE(() -> { // value reference class 1119 Point x = (Point) vh.getAndSetAcquire(Void.class); 1120 }); 1121 // Incorrect return type 1122 checkCCE(() -> { // reference class 1123 Void r = (Void) vh.getAndSetAcquire(Point.getInstance(1,1)); 1124 }); 1125 checkWMTE(() -> { // primitive class 1126 boolean x = (boolean) vh.getAndSetAcquire(Point.getInstance(1,1)); 1127 }); 1128 // Incorrect arity 1129 checkWMTE(() -> { // 0 1130 Point x = (Point) vh.getAndSetAcquire(); 1131 }); 1132 checkWMTE(() -> { // > 1133 Point x = (Point) vh.getAndSetAcquire(Point.getInstance(1,1), Void.class); 1134 }); 1135 1136 1137 // GetAndSetRelease 1138 // Incorrect argument types 1139 checkCCE(() -> { // value reference class 1140 Point x = (Point) vh.getAndSetRelease(Void.class); 1141 }); 1142 // Incorrect return type 1143 checkCCE(() -> { // reference class 1144 Void r = (Void) vh.getAndSetRelease(Point.getInstance(1,1)); 1145 }); 1146 checkWMTE(() -> { // primitive class 1147 boolean x = (boolean) vh.getAndSetRelease(Point.getInstance(1,1)); 1148 }); 1149 // Incorrect arity 1150 checkWMTE(() -> { // 0 1151 Point x = (Point) vh.getAndSetRelease(); 1152 }); 1153 checkWMTE(() -> { // > 1154 Point x = (Point) vh.getAndSetRelease(Point.getInstance(1,1), Void.class); 1155 }); 1156 1157 1158 } 1159 1160 static void testStaticFieldWrongMethodType(Handles hs) throws Throwable { 1161 int i = 0; 1162 1163 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 1164 // Incorrect return type 1165 hs.checkWMTEOrCCE(() -> { // reference class 1166 Void x = (Void) hs.get(am, methodType(Void.class)). 1167 invokeExact(); 1168 }); 1169 checkWMTE(() -> { // primitive class 1170 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1171 invokeExact(); 1172 }); 1173 // Incorrect arity 1174 checkWMTE(() -> { // > 1175 Point x = (Point) hs.get(am, methodType(Class.class)). 1176 invokeExact(Void.class); 1177 }); 1178 } 1179 1180 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 1181 hs.checkWMTEOrCCE(() -> { // value reference class 1182 hs.get(am, methodType(void.class, Class.class)). 1183 invokeExact(Void.class); 1184 }); 1185 // Incorrect arity 1186 checkWMTE(() -> { // 0 1187 hs.get(am, methodType(void.class)). 1188 invokeExact(); 1189 }); 1190 checkWMTE(() -> { // > 1191 hs.get(am, methodType(void.class, Point.class, Class.class)). 1192 invokeExact(Point.getInstance(1,1), Void.class); 1193 }); 1194 } 1195 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 1196 // Incorrect argument types 1197 hs.checkWMTEOrCCE(() -> { // expected reference class 1198 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, Point.class)). 1199 invokeExact(Void.class, Point.getInstance(1,1)); 1200 }); 1201 hs.checkWMTEOrCCE(() -> { // actual reference class 1202 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point.class, Class.class)). 1203 invokeExact(Point.getInstance(1,1), Void.class); 1204 }); 1205 // Incorrect arity 1206 checkWMTE(() -> { // 0 1207 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 1208 invokeExact(); 1209 }); 1210 checkWMTE(() -> { // > 1211 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point.class, Point.class, Class.class)). 1212 invokeExact(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1213 }); 1214 } 1215 1216 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 1217 // Incorrect argument types 1218 hs.checkWMTEOrCCE(() -> { // expected reference class 1219 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, Point.class)). 1220 invokeExact(Void.class, Point.getInstance(1,1)); 1221 }); 1222 hs.checkWMTEOrCCE(() -> { // actual reference class 1223 Point x = (Point) hs.get(am, methodType(Point.class, Point.class, Class.class)). 1224 invokeExact(Point.getInstance(1,1), Void.class); 1225 }); 1226 // Incorrect return type 1227 hs.checkWMTEOrCCE(() -> { // reference class 1228 Void r = (Void) hs.get(am, methodType(Void.class, Point.class, Point.class)). 1229 invokeExact(Point.getInstance(1,1), Point.getInstance(1,1)); 1230 }); 1231 checkWMTE(() -> { // primitive class 1232 boolean x = (boolean) hs.get(am, methodType(boolean.class, Point.class, Point.class)). 1233 invokeExact(Point.getInstance(1,1), Point.getInstance(1,1)); 1234 }); 1235 // Incorrect arity 1236 checkWMTE(() -> { // 0 1237 Point x = (Point) hs.get(am, methodType(Point.class)). 1238 invokeExact(); 1239 }); 1240 checkWMTE(() -> { // > 1241 Point x = (Point) hs.get(am, methodType(Point.class, Point.class, Point.class, Class.class)). 1242 invokeExact(Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1243 }); 1244 } 1245 1246 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 1247 // Incorrect argument types 1248 hs.checkWMTEOrCCE(() -> { // value reference class 1249 Point x = (Point) hs.get(am, methodType(Point.class, Class.class)). 1250 invokeExact(Void.class); 1251 }); 1252 // Incorrect return type 1253 hs.checkWMTEOrCCE(() -> { // reference class 1254 Void r = (Void) hs.get(am, methodType(Void.class, Point.class)). 1255 invokeExact(Point.getInstance(1,1)); 1256 }); 1257 checkWMTE(() -> { // primitive class 1258 boolean x = (boolean) hs.get(am, methodType(boolean.class, Point.class)). 1259 invokeExact(Point.getInstance(1,1)); 1260 }); 1261 // Incorrect arity 1262 checkWMTE(() -> { // 0 1263 Point x = (Point) hs.get(am, methodType(Point.class)). 1264 invokeExact(); 1265 }); 1266 checkWMTE(() -> { // > 1267 Point x = (Point) hs.get(am, methodType(Point.class, Point.class, Class.class)). 1268 invokeExact(Point.getInstance(1,1), Void.class); 1269 }); 1270 } 1271 1272 1273 } 1274 1275 1276 static void testArrayWrongMethodType(VarHandle vh) throws Throwable { 1277 Point[] array = new Point[10]; 1278 Arrays.fill(array, Point.getInstance(1,1)); 1279 1280 // Get 1281 // Incorrect argument types 1282 checkNPE(() -> { // null array 1283 Point x = (Point) vh.get(null, 0); 1284 }); 1285 checkCCE(() -> { // array reference class 1286 Point x = (Point) vh.get(Void.class, 0); 1287 }); 1288 checkWMTE(() -> { // array primitive class 1289 Point x = (Point) vh.get(0, 0); 1290 }); 1291 checkWMTE(() -> { // index reference class 1292 Point x = (Point) vh.get(array, Void.class); 1293 }); 1294 // Incorrect return type 1295 checkCCE(() -> { // reference class 1296 Void x = (Void) vh.get(array, 0); 1297 }); 1298 checkWMTE(() -> { // primitive class 1299 boolean x = (boolean) vh.get(array, 0); 1300 }); 1301 // Incorrect arity 1302 checkWMTE(() -> { // 0 1303 Point x = (Point) vh.get(); 1304 }); 1305 checkWMTE(() -> { // > 1306 Point x = (Point) vh.get(array, 0, Void.class); 1307 }); 1308 1309 1310 // Set 1311 // Incorrect argument types 1312 checkNPE(() -> { // null array 1313 vh.set(null, 0, Point.getInstance(1,1)); 1314 }); 1315 checkCCE(() -> { // array reference class 1316 vh.set(Void.class, 0, Point.getInstance(1,1)); 1317 }); 1318 checkCCE(() -> { // value reference class 1319 vh.set(array, 0, Void.class); 1320 }); 1321 checkWMTE(() -> { // receiver primitive class 1322 vh.set(0, 0, Point.getInstance(1,1)); 1323 }); 1324 checkWMTE(() -> { // index reference class 1325 vh.set(array, Void.class, Point.getInstance(1,1)); 1326 }); 1327 // Incorrect arity 1328 checkWMTE(() -> { // 0 1329 vh.set(); 1330 }); 1331 checkWMTE(() -> { // > 1332 vh.set(array, 0, Point.getInstance(1,1), Void.class); 1333 }); 1334 1335 1336 // GetVolatile 1337 // Incorrect argument types 1338 checkNPE(() -> { // null array 1339 Point x = (Point) vh.getVolatile(null, 0); 1340 }); 1341 checkCCE(() -> { // array reference class 1342 Point x = (Point) vh.getVolatile(Void.class, 0); 1343 }); 1344 checkWMTE(() -> { // array primitive class 1345 Point x = (Point) vh.getVolatile(0, 0); 1346 }); 1347 checkWMTE(() -> { // index reference class 1348 Point x = (Point) vh.getVolatile(array, Void.class); 1349 }); 1350 // Incorrect return type 1351 checkCCE(() -> { // reference class 1352 Void x = (Void) vh.getVolatile(array, 0); 1353 }); 1354 checkWMTE(() -> { // primitive class 1355 boolean x = (boolean) vh.getVolatile(array, 0); 1356 }); 1357 // Incorrect arity 1358 checkWMTE(() -> { // 0 1359 Point x = (Point) vh.getVolatile(); 1360 }); 1361 checkWMTE(() -> { // > 1362 Point x = (Point) vh.getVolatile(array, 0, Void.class); 1363 }); 1364 1365 1366 // SetVolatile 1367 // Incorrect argument types 1368 checkNPE(() -> { // null array 1369 vh.setVolatile(null, 0, Point.getInstance(1,1)); 1370 }); 1371 checkCCE(() -> { // array reference class 1372 vh.setVolatile(Void.class, 0, Point.getInstance(1,1)); 1373 }); 1374 checkCCE(() -> { // value reference class 1375 vh.setVolatile(array, 0, Void.class); 1376 }); 1377 checkWMTE(() -> { // receiver primitive class 1378 vh.setVolatile(0, 0, Point.getInstance(1,1)); 1379 }); 1380 checkWMTE(() -> { // index reference class 1381 vh.setVolatile(array, Void.class, Point.getInstance(1,1)); 1382 }); 1383 // Incorrect arity 1384 checkWMTE(() -> { // 0 1385 vh.setVolatile(); 1386 }); 1387 checkWMTE(() -> { // > 1388 vh.setVolatile(array, 0, Point.getInstance(1,1), Void.class); 1389 }); 1390 1391 1392 // GetOpaque 1393 // Incorrect argument types 1394 checkNPE(() -> { // null array 1395 Point x = (Point) vh.getOpaque(null, 0); 1396 }); 1397 checkCCE(() -> { // array reference class 1398 Point x = (Point) vh.getOpaque(Void.class, 0); 1399 }); 1400 checkWMTE(() -> { // array primitive class 1401 Point x = (Point) vh.getOpaque(0, 0); 1402 }); 1403 checkWMTE(() -> { // index reference class 1404 Point x = (Point) vh.getOpaque(array, Void.class); 1405 }); 1406 // Incorrect return type 1407 checkCCE(() -> { // reference class 1408 Void x = (Void) vh.getOpaque(array, 0); 1409 }); 1410 checkWMTE(() -> { // primitive class 1411 boolean x = (boolean) vh.getOpaque(array, 0); 1412 }); 1413 // Incorrect arity 1414 checkWMTE(() -> { // 0 1415 Point x = (Point) vh.getOpaque(); 1416 }); 1417 checkWMTE(() -> { // > 1418 Point x = (Point) vh.getOpaque(array, 0, Void.class); 1419 }); 1420 1421 1422 // SetOpaque 1423 // Incorrect argument types 1424 checkNPE(() -> { // null array 1425 vh.setOpaque(null, 0, Point.getInstance(1,1)); 1426 }); 1427 checkCCE(() -> { // array reference class 1428 vh.setOpaque(Void.class, 0, Point.getInstance(1,1)); 1429 }); 1430 checkCCE(() -> { // value reference class 1431 vh.setOpaque(array, 0, Void.class); 1432 }); 1433 checkWMTE(() -> { // receiver primitive class 1434 vh.setOpaque(0, 0, Point.getInstance(1,1)); 1435 }); 1436 checkWMTE(() -> { // index reference class 1437 vh.setOpaque(array, Void.class, Point.getInstance(1,1)); 1438 }); 1439 // Incorrect arity 1440 checkWMTE(() -> { // 0 1441 vh.setOpaque(); 1442 }); 1443 checkWMTE(() -> { // > 1444 vh.setOpaque(array, 0, Point.getInstance(1,1), Void.class); 1445 }); 1446 1447 1448 // GetAcquire 1449 // Incorrect argument types 1450 checkNPE(() -> { // null array 1451 Point x = (Point) vh.getAcquire(null, 0); 1452 }); 1453 checkCCE(() -> { // array reference class 1454 Point x = (Point) vh.getAcquire(Void.class, 0); 1455 }); 1456 checkWMTE(() -> { // array primitive class 1457 Point x = (Point) vh.getAcquire(0, 0); 1458 }); 1459 checkWMTE(() -> { // index reference class 1460 Point x = (Point) vh.getAcquire(array, Void.class); 1461 }); 1462 // Incorrect return type 1463 checkCCE(() -> { // reference class 1464 Void x = (Void) vh.getAcquire(array, 0); 1465 }); 1466 checkWMTE(() -> { // primitive class 1467 boolean x = (boolean) vh.getAcquire(array, 0); 1468 }); 1469 // Incorrect arity 1470 checkWMTE(() -> { // 0 1471 Point x = (Point) vh.getAcquire(); 1472 }); 1473 checkWMTE(() -> { // > 1474 Point x = (Point) vh.getAcquire(array, 0, Void.class); 1475 }); 1476 1477 1478 // SetRelease 1479 // Incorrect argument types 1480 checkNPE(() -> { // null array 1481 vh.setRelease(null, 0, Point.getInstance(1,1)); 1482 }); 1483 checkCCE(() -> { // array reference class 1484 vh.setRelease(Void.class, 0, Point.getInstance(1,1)); 1485 }); 1486 checkCCE(() -> { // value reference class 1487 vh.setRelease(array, 0, Void.class); 1488 }); 1489 checkWMTE(() -> { // receiver primitive class 1490 vh.setRelease(0, 0, Point.getInstance(1,1)); 1491 }); 1492 checkWMTE(() -> { // index reference class 1493 vh.setRelease(array, Void.class, Point.getInstance(1,1)); 1494 }); 1495 // Incorrect arity 1496 checkWMTE(() -> { // 0 1497 vh.setRelease(); 1498 }); 1499 checkWMTE(() -> { // > 1500 vh.setRelease(array, 0, Point.getInstance(1,1), Void.class); 1501 }); 1502 1503 1504 // CompareAndSet 1505 // Incorrect argument types 1506 checkNPE(() -> { // null receiver 1507 boolean r = vh.compareAndSet(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1508 }); 1509 checkCCE(() -> { // receiver reference class 1510 boolean r = vh.compareAndSet(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1511 }); 1512 checkCCE(() -> { // expected reference class 1513 boolean r = vh.compareAndSet(array, 0, Void.class, Point.getInstance(1,1)); 1514 }); 1515 checkCCE(() -> { // actual reference class 1516 boolean r = vh.compareAndSet(array, 0, Point.getInstance(1,1), Void.class); 1517 }); 1518 checkWMTE(() -> { // receiver primitive class 1519 boolean r = vh.compareAndSet(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1520 }); 1521 checkWMTE(() -> { // index reference class 1522 boolean r = vh.compareAndSet(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1523 }); 1524 // Incorrect arity 1525 checkWMTE(() -> { // 0 1526 boolean r = vh.compareAndSet(); 1527 }); 1528 checkWMTE(() -> { // > 1529 boolean r = vh.compareAndSet(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1530 }); 1531 1532 1533 // WeakCompareAndSet 1534 // Incorrect argument types 1535 checkNPE(() -> { // null receiver 1536 boolean r = vh.weakCompareAndSetPlain(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1537 }); 1538 checkCCE(() -> { // receiver reference class 1539 boolean r = vh.weakCompareAndSetPlain(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1540 }); 1541 checkCCE(() -> { // expected reference class 1542 boolean r = vh.weakCompareAndSetPlain(array, 0, Void.class, Point.getInstance(1,1)); 1543 }); 1544 checkCCE(() -> { // actual reference class 1545 boolean r = vh.weakCompareAndSetPlain(array, 0, Point.getInstance(1,1), Void.class); 1546 }); 1547 checkWMTE(() -> { // receiver primitive class 1548 boolean r = vh.weakCompareAndSetPlain(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1549 }); 1550 checkWMTE(() -> { // index reference class 1551 boolean r = vh.weakCompareAndSetPlain(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1552 }); 1553 // Incorrect arity 1554 checkWMTE(() -> { // 0 1555 boolean r = vh.weakCompareAndSetPlain(); 1556 }); 1557 checkWMTE(() -> { // > 1558 boolean r = vh.weakCompareAndSetPlain(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1559 }); 1560 1561 1562 // WeakCompareAndSetVolatile 1563 // Incorrect argument types 1564 checkNPE(() -> { // null receiver 1565 boolean r = vh.weakCompareAndSet(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1566 }); 1567 checkCCE(() -> { // receiver reference class 1568 boolean r = vh.weakCompareAndSet(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1569 }); 1570 checkCCE(() -> { // expected reference class 1571 boolean r = vh.weakCompareAndSet(array, 0, Void.class, Point.getInstance(1,1)); 1572 }); 1573 checkCCE(() -> { // actual reference class 1574 boolean r = vh.weakCompareAndSet(array, 0, Point.getInstance(1,1), Void.class); 1575 }); 1576 checkWMTE(() -> { // receiver primitive class 1577 boolean r = vh.weakCompareAndSet(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1578 }); 1579 checkWMTE(() -> { // index reference class 1580 boolean r = vh.weakCompareAndSet(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1581 }); 1582 // Incorrect arity 1583 checkWMTE(() -> { // 0 1584 boolean r = vh.weakCompareAndSet(); 1585 }); 1586 checkWMTE(() -> { // > 1587 boolean r = vh.weakCompareAndSet(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1588 }); 1589 1590 1591 // WeakCompareAndSetAcquire 1592 // Incorrect argument types 1593 checkNPE(() -> { // null receiver 1594 boolean r = vh.weakCompareAndSetAcquire(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1595 }); 1596 checkCCE(() -> { // receiver reference class 1597 boolean r = vh.weakCompareAndSetAcquire(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1598 }); 1599 checkCCE(() -> { // expected reference class 1600 boolean r = vh.weakCompareAndSetAcquire(array, 0, Void.class, Point.getInstance(1,1)); 1601 }); 1602 checkCCE(() -> { // actual reference class 1603 boolean r = vh.weakCompareAndSetAcquire(array, 0, Point.getInstance(1,1), Void.class); 1604 }); 1605 checkWMTE(() -> { // receiver primitive class 1606 boolean r = vh.weakCompareAndSetAcquire(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1607 }); 1608 checkWMTE(() -> { // index reference class 1609 boolean r = vh.weakCompareAndSetAcquire(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1610 }); 1611 // Incorrect arity 1612 checkWMTE(() -> { // 0 1613 boolean r = vh.weakCompareAndSetAcquire(); 1614 }); 1615 checkWMTE(() -> { // > 1616 boolean r = vh.weakCompareAndSetAcquire(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1617 }); 1618 1619 1620 // WeakCompareAndSetRelease 1621 // Incorrect argument types 1622 checkNPE(() -> { // null receiver 1623 boolean r = vh.weakCompareAndSetRelease(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1624 }); 1625 checkCCE(() -> { // receiver reference class 1626 boolean r = vh.weakCompareAndSetRelease(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1627 }); 1628 checkCCE(() -> { // expected reference class 1629 boolean r = vh.weakCompareAndSetRelease(array, 0, Void.class, Point.getInstance(1,1)); 1630 }); 1631 checkCCE(() -> { // actual reference class 1632 boolean r = vh.weakCompareAndSetRelease(array, 0, Point.getInstance(1,1), Void.class); 1633 }); 1634 checkWMTE(() -> { // receiver primitive class 1635 boolean r = vh.weakCompareAndSetRelease(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1636 }); 1637 checkWMTE(() -> { // index reference class 1638 boolean r = vh.weakCompareAndSetRelease(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1639 }); 1640 // Incorrect arity 1641 checkWMTE(() -> { // 0 1642 boolean r = vh.weakCompareAndSetRelease(); 1643 }); 1644 checkWMTE(() -> { // > 1645 boolean r = vh.weakCompareAndSetRelease(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1646 }); 1647 1648 1649 // CompareAndExchange 1650 // Incorrect argument types 1651 checkNPE(() -> { // null receiver 1652 Point x = (Point) vh.compareAndExchange(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1653 }); 1654 checkCCE(() -> { // array reference class 1655 Point x = (Point) vh.compareAndExchange(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1656 }); 1657 checkCCE(() -> { // expected reference class 1658 Point x = (Point) vh.compareAndExchange(array, 0, Void.class, Point.getInstance(1,1)); 1659 }); 1660 checkCCE(() -> { // actual reference class 1661 Point x = (Point) vh.compareAndExchange(array, 0, Point.getInstance(1,1), Void.class); 1662 }); 1663 checkWMTE(() -> { // array primitive class 1664 Point x = (Point) vh.compareAndExchange(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1665 }); 1666 checkWMTE(() -> { // index reference class 1667 Point x = (Point) vh.compareAndExchange(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1668 }); 1669 // Incorrect return type 1670 checkCCE(() -> { // reference class 1671 Void r = (Void) vh.compareAndExchange(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1672 }); 1673 checkWMTE(() -> { // primitive class 1674 boolean x = (boolean) vh.compareAndExchange(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1675 }); 1676 // Incorrect arity 1677 checkWMTE(() -> { // 0 1678 Point x = (Point) vh.compareAndExchange(); 1679 }); 1680 checkWMTE(() -> { // > 1681 Point x = (Point) vh.compareAndExchange(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1682 }); 1683 1684 1685 // CompareAndExchangeAcquire 1686 // Incorrect argument types 1687 checkNPE(() -> { // null receiver 1688 Point x = (Point) vh.compareAndExchangeAcquire(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1689 }); 1690 checkCCE(() -> { // array reference class 1691 Point x = (Point) vh.compareAndExchangeAcquire(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1692 }); 1693 checkCCE(() -> { // expected reference class 1694 Point x = (Point) vh.compareAndExchangeAcquire(array, 0, Void.class, Point.getInstance(1,1)); 1695 }); 1696 checkCCE(() -> { // actual reference class 1697 Point x = (Point) vh.compareAndExchangeAcquire(array, 0, Point.getInstance(1,1), Void.class); 1698 }); 1699 checkWMTE(() -> { // array primitive class 1700 Point x = (Point) vh.compareAndExchangeAcquire(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1701 }); 1702 checkWMTE(() -> { // index reference class 1703 Point x = (Point) vh.compareAndExchangeAcquire(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1704 }); 1705 // Incorrect return type 1706 checkCCE(() -> { // reference class 1707 Void r = (Void) vh.compareAndExchangeAcquire(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1708 }); 1709 checkWMTE(() -> { // primitive class 1710 boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1711 }); 1712 // Incorrect arity 1713 checkWMTE(() -> { // 0 1714 Point x = (Point) vh.compareAndExchangeAcquire(); 1715 }); 1716 checkWMTE(() -> { // > 1717 Point x = (Point) vh.compareAndExchangeAcquire(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1718 }); 1719 1720 1721 // CompareAndExchangeRelease 1722 // Incorrect argument types 1723 checkNPE(() -> { // null receiver 1724 Point x = (Point) vh.compareAndExchangeRelease(null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1725 }); 1726 checkCCE(() -> { // array reference class 1727 Point x = (Point) vh.compareAndExchangeRelease(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1728 }); 1729 checkCCE(() -> { // expected reference class 1730 Point x = (Point) vh.compareAndExchangeRelease(array, 0, Void.class, Point.getInstance(1,1)); 1731 }); 1732 checkCCE(() -> { // actual reference class 1733 Point x = (Point) vh.compareAndExchangeRelease(array, 0, Point.getInstance(1,1), Void.class); 1734 }); 1735 checkWMTE(() -> { // array primitive class 1736 Point x = (Point) vh.compareAndExchangeRelease(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1737 }); 1738 checkWMTE(() -> { // index reference class 1739 Point x = (Point) vh.compareAndExchangeRelease(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1740 }); 1741 // Incorrect return type 1742 checkCCE(() -> { // reference class 1743 Void r = (Void) vh.compareAndExchangeRelease(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1744 }); 1745 checkWMTE(() -> { // primitive class 1746 boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1747 }); 1748 // Incorrect arity 1749 checkWMTE(() -> { // 0 1750 Point x = (Point) vh.compareAndExchangeRelease(); 1751 }); 1752 checkWMTE(() -> { // > 1753 Point x = (Point) vh.compareAndExchangeRelease(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1754 }); 1755 1756 1757 // GetAndSet 1758 // Incorrect argument types 1759 checkNPE(() -> { // null array 1760 Point x = (Point) vh.getAndSet(null, 0, Point.getInstance(1,1)); 1761 }); 1762 checkCCE(() -> { // array reference class 1763 Point x = (Point) vh.getAndSet(Void.class, 0, Point.getInstance(1,1)); 1764 }); 1765 checkCCE(() -> { // value reference class 1766 Point x = (Point) vh.getAndSet(array, 0, Void.class); 1767 }); 1768 checkWMTE(() -> { // reciarrayever primitive class 1769 Point x = (Point) vh.getAndSet(0, 0, Point.getInstance(1,1)); 1770 }); 1771 checkWMTE(() -> { // index reference class 1772 Point x = (Point) vh.getAndSet(array, Void.class, Point.getInstance(1,1)); 1773 }); 1774 // Incorrect return type 1775 checkCCE(() -> { // reference class 1776 Void r = (Void) vh.getAndSet(array, 0, Point.getInstance(1,1)); 1777 }); 1778 checkWMTE(() -> { // primitive class 1779 boolean x = (boolean) vh.getAndSet(array, 0, Point.getInstance(1,1)); 1780 }); 1781 // Incorrect arity 1782 checkWMTE(() -> { // 0 1783 Point x = (Point) vh.getAndSet(); 1784 }); 1785 checkWMTE(() -> { // > 1786 Point x = (Point) vh.getAndSet(array, 0, Point.getInstance(1,1), Void.class); 1787 }); 1788 1789 1790 // GetAndSetAcquire 1791 // Incorrect argument types 1792 checkNPE(() -> { // null array 1793 Point x = (Point) vh.getAndSetAcquire(null, 0, Point.getInstance(1,1)); 1794 }); 1795 checkCCE(() -> { // array reference class 1796 Point x = (Point) vh.getAndSetAcquire(Void.class, 0, Point.getInstance(1,1)); 1797 }); 1798 checkCCE(() -> { // value reference class 1799 Point x = (Point) vh.getAndSetAcquire(array, 0, Void.class); 1800 }); 1801 checkWMTE(() -> { // reciarrayever primitive class 1802 Point x = (Point) vh.getAndSetAcquire(0, 0, Point.getInstance(1,1)); 1803 }); 1804 checkWMTE(() -> { // index reference class 1805 Point x = (Point) vh.getAndSetAcquire(array, Void.class, Point.getInstance(1,1)); 1806 }); 1807 // Incorrect return type 1808 checkCCE(() -> { // reference class 1809 Void r = (Void) vh.getAndSetAcquire(array, 0, Point.getInstance(1,1)); 1810 }); 1811 checkWMTE(() -> { // primitive class 1812 boolean x = (boolean) vh.getAndSetAcquire(array, 0, Point.getInstance(1,1)); 1813 }); 1814 // Incorrect arity 1815 checkWMTE(() -> { // 0 1816 Point x = (Point) vh.getAndSetAcquire(); 1817 }); 1818 checkWMTE(() -> { // > 1819 Point x = (Point) vh.getAndSetAcquire(array, 0, Point.getInstance(1,1), Void.class); 1820 }); 1821 1822 1823 // GetAndSetRelease 1824 // Incorrect argument types 1825 checkNPE(() -> { // null array 1826 Point x = (Point) vh.getAndSetRelease(null, 0, Point.getInstance(1,1)); 1827 }); 1828 checkCCE(() -> { // array reference class 1829 Point x = (Point) vh.getAndSetRelease(Void.class, 0, Point.getInstance(1,1)); 1830 }); 1831 checkCCE(() -> { // value reference class 1832 Point x = (Point) vh.getAndSetRelease(array, 0, Void.class); 1833 }); 1834 checkWMTE(() -> { // reciarrayever primitive class 1835 Point x = (Point) vh.getAndSetRelease(0, 0, Point.getInstance(1,1)); 1836 }); 1837 checkWMTE(() -> { // index reference class 1838 Point x = (Point) vh.getAndSetRelease(array, Void.class, Point.getInstance(1,1)); 1839 }); 1840 // Incorrect return type 1841 checkCCE(() -> { // reference class 1842 Void r = (Void) vh.getAndSetRelease(array, 0, Point.getInstance(1,1)); 1843 }); 1844 checkWMTE(() -> { // primitive class 1845 boolean x = (boolean) vh.getAndSetRelease(array, 0, Point.getInstance(1,1)); 1846 }); 1847 // Incorrect arity 1848 checkWMTE(() -> { // 0 1849 Point x = (Point) vh.getAndSetRelease(); 1850 }); 1851 checkWMTE(() -> { // > 1852 Point x = (Point) vh.getAndSetRelease(array, 0, Point.getInstance(1,1), Void.class); 1853 }); 1854 1855 1856 } 1857 1858 static void testArrayWrongMethodType(Handles hs) throws Throwable { 1859 Point[] array = new Point[10]; 1860 Arrays.fill(array, Point.getInstance(1,1)); 1861 1862 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 1863 // Incorrect argument types 1864 checkNPE(() -> { // null array 1865 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class)). 1866 invokeExact((Point[]) null, 0); 1867 }); 1868 hs.checkWMTEOrCCE(() -> { // array reference class 1869 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, int.class)). 1870 invokeExact(Void.class, 0); 1871 }); 1872 checkWMTE(() -> { // array primitive class 1873 Point x = (Point) hs.get(am, methodType(Point.class, int.class, int.class)). 1874 invokeExact(0, 0); 1875 }); 1876 checkWMTE(() -> { // index reference class 1877 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, Class.class)). 1878 invokeExact(array, Void.class); 1879 }); 1880 // Incorrect return type 1881 hs.checkWMTEOrCCE(() -> { // reference class 1882 Void x = (Void) hs.get(am, methodType(Void.class, Point[].class, int.class)). 1883 invokeExact(array, 0); 1884 }); 1885 checkWMTE(() -> { // primitive class 1886 boolean x = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class)). 1887 invokeExact(array, 0); 1888 }); 1889 // Incorrect arity 1890 checkWMTE(() -> { // 0 1891 Point x = (Point) hs.get(am, methodType(Point.class)). 1892 invokeExact(); 1893 }); 1894 checkWMTE(() -> { // > 1895 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Class.class)). 1896 invokeExact(array, 0, Void.class); 1897 }); 1898 } 1899 1900 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 1901 // Incorrect argument types 1902 checkNPE(() -> { // null array 1903 hs.get(am, methodType(void.class, Point[].class, int.class, Point.class)). 1904 invokeExact((Point[]) null, 0, Point.getInstance(1,1)); 1905 }); 1906 hs.checkWMTEOrCCE(() -> { // array reference class 1907 hs.get(am, methodType(void.class, Class.class, int.class, Point.class)). 1908 invokeExact(Void.class, 0, Point.getInstance(1,1)); 1909 }); 1910 hs.checkWMTEOrCCE(() -> { // value reference class 1911 hs.get(am, methodType(void.class, Point[].class, int.class, Class.class)). 1912 invokeExact(array, 0, Void.class); 1913 }); 1914 checkWMTE(() -> { // receiver primitive class 1915 hs.get(am, methodType(void.class, int.class, int.class, Point.class)). 1916 invokeExact(0, 0, Point.getInstance(1,1)); 1917 }); 1918 checkWMTE(() -> { // index reference class 1919 hs.get(am, methodType(void.class, Point[].class, Class.class, Point.class)). 1920 invokeExact(array, Void.class, Point.getInstance(1,1)); 1921 }); 1922 // Incorrect arity 1923 checkWMTE(() -> { // 0 1924 hs.get(am, methodType(void.class)). 1925 invokeExact(); 1926 }); 1927 checkWMTE(() -> { // > 1928 hs.get(am, methodType(void.class, Point[].class, int.class, Class.class)). 1929 invokeExact(array, 0, Point.getInstance(1,1), Void.class); 1930 }); 1931 } 1932 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 1933 // Incorrect argument types 1934 checkNPE(() -> { // null receiver 1935 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Point.class, Point.class)). 1936 invokeExact((Point[]) null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1937 }); 1938 hs.checkWMTEOrCCE(() -> { // receiver reference class 1939 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, Point.class, Point.class)). 1940 invokeExact(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1941 }); 1942 hs.checkWMTEOrCCE(() -> { // expected reference class 1943 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Class.class, Point.class)). 1944 invokeExact(array, 0, Void.class, Point.getInstance(1,1)); 1945 }); 1946 hs.checkWMTEOrCCE(() -> { // actual reference class 1947 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Point.class, Class.class)). 1948 invokeExact(array, 0, Point.getInstance(1,1), Void.class); 1949 }); 1950 checkWMTE(() -> { // receiver primitive class 1951 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, Point.class, Point.class)). 1952 invokeExact(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1953 }); 1954 checkWMTE(() -> { // index reference class 1955 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point[].class, Class.class, Point.class, Point.class)). 1956 invokeExact(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1957 }); 1958 // Incorrect arity 1959 checkWMTE(() -> { // 0 1960 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 1961 invokeExact(); 1962 }); 1963 checkWMTE(() -> { // > 1964 boolean r = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Point.class, Point.class, Class.class)). 1965 invokeExact(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 1966 }); 1967 } 1968 1969 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 1970 // Incorrect argument types 1971 checkNPE(() -> { // null receiver 1972 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Point.class, Point.class)). 1973 invokeExact((Point[]) null, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1974 }); 1975 hs.checkWMTEOrCCE(() -> { // array reference class 1976 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, int.class, Point.class, Point.class)). 1977 invokeExact(Void.class, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1978 }); 1979 hs.checkWMTEOrCCE(() -> { // expected reference class 1980 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Class.class, Point.class)). 1981 invokeExact(array, 0, Void.class, Point.getInstance(1,1)); 1982 }); 1983 hs.checkWMTEOrCCE(() -> { // actual reference class 1984 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Point.class, Class.class)). 1985 invokeExact(array, 0, Point.getInstance(1,1), Void.class); 1986 }); 1987 checkWMTE(() -> { // array primitive class 1988 Point x = (Point) hs.get(am, methodType(Point.class, int.class, int.class, Point.class, Point.class)). 1989 invokeExact(0, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1990 }); 1991 checkWMTE(() -> { // index reference class 1992 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, Class.class, Point.class, Point.class)). 1993 invokeExact(array, Void.class, Point.getInstance(1,1), Point.getInstance(1,1)); 1994 }); 1995 // Incorrect return type 1996 hs.checkWMTEOrCCE(() -> { // reference class 1997 Void r = (Void) hs.get(am, methodType(Void.class, Point[].class, int.class, Point.class, Point.class)). 1998 invokeExact(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 1999 }); 2000 checkWMTE(() -> { // primitive class 2001 boolean x = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Point.class, Point.class)). 2002 invokeExact(array, 0, Point.getInstance(1,1), Point.getInstance(1,1)); 2003 }); 2004 // Incorrect arity 2005 checkWMTE(() -> { // 0 2006 Point x = (Point) hs.get(am, methodType(Point.class)). 2007 invokeExact(); 2008 }); 2009 checkWMTE(() -> { // > 2010 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Point.class, Point.class, Class.class)). 2011 invokeExact(array, 0, Point.getInstance(1,1), Point.getInstance(1,1), Void.class); 2012 }); 2013 } 2014 2015 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 2016 // Incorrect argument types 2017 checkNPE(() -> { // null array 2018 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Point.class)). 2019 invokeExact((Point[]) null, 0, Point.getInstance(1,1)); 2020 }); 2021 hs.checkWMTEOrCCE(() -> { // array reference class 2022 Point x = (Point) hs.get(am, methodType(Point.class, Class.class, int.class, Point.class)). 2023 invokeExact(Void.class, 0, Point.getInstance(1,1)); 2024 }); 2025 hs.checkWMTEOrCCE(() -> { // value reference class 2026 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Class.class)). 2027 invokeExact(array, 0, Void.class); 2028 }); 2029 checkWMTE(() -> { // array primitive class 2030 Point x = (Point) hs.get(am, methodType(Point.class, int.class, int.class, Point.class)). 2031 invokeExact(0, 0, Point.getInstance(1,1)); 2032 }); 2033 checkWMTE(() -> { // index reference class 2034 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, Class.class, Point.class)). 2035 invokeExact(array, Void.class, Point.getInstance(1,1)); 2036 }); 2037 // Incorrect return type 2038 hs.checkWMTEOrCCE(() -> { // reference class 2039 Void r = (Void) hs.get(am, methodType(Void.class, Point[].class, int.class, Point.class)). 2040 invokeExact(array, 0, Point.getInstance(1,1)); 2041 }); 2042 checkWMTE(() -> { // primitive class 2043 boolean x = (boolean) hs.get(am, methodType(boolean.class, Point[].class, int.class, Point.class)). 2044 invokeExact(array, 0, Point.getInstance(1,1)); 2045 }); 2046 // Incorrect arity 2047 checkWMTE(() -> { // 0 2048 Point x = (Point) hs.get(am, methodType(Point.class)). 2049 invokeExact(); 2050 }); 2051 checkWMTE(() -> { // > 2052 Point x = (Point) hs.get(am, methodType(Point.class, Point[].class, int.class, Point.class, Class.class)). 2053 invokeExact(array, 0, Point.getInstance(1,1), Void.class); 2054 }); 2055 } 2056 2057 2058 } 2059 }