1 /* 2 * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8156486 27 * @run testng/othervm VarHandleTestMethodTypeBoolean 28 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=true -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true VarHandleTestMethodTypeBoolean 29 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=false VarHandleTestMethodTypeBoolean 30 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true VarHandleTestMethodTypeBoolean 31 */ 32 33 import org.testng.annotations.BeforeClass; 34 import org.testng.annotations.DataProvider; 35 import org.testng.annotations.Test; 36 37 import java.lang.invoke.MethodHandles; 38 import java.lang.invoke.VarHandle; 39 import java.util.ArrayList; 40 import java.util.Arrays; 41 import java.util.List; 42 43 import static org.testng.Assert.*; 44 45 import static java.lang.invoke.MethodType.*; 46 47 public class VarHandleTestMethodTypeBoolean extends VarHandleBaseTest { 48 static final boolean static_final_v = true; 49 50 static boolean static_v = true; 51 52 final boolean final_v = true; 53 54 boolean v = true; 55 56 VarHandle vhFinalField; 57 58 VarHandle vhField; 59 60 VarHandle vhStaticField; 61 62 VarHandle vhStaticFinalField; 63 64 VarHandle vhArray; 65 66 @BeforeClass 67 public void setup() throws Exception { 68 vhFinalField = MethodHandles.lookup().findVarHandle( 69 VarHandleTestMethodTypeBoolean.class, "final_v", boolean.class); 70 71 vhField = MethodHandles.lookup().findVarHandle( 72 VarHandleTestMethodTypeBoolean.class, "v", boolean.class); 73 74 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle( 75 VarHandleTestMethodTypeBoolean.class, "static_final_v", boolean.class); 76 77 vhStaticField = MethodHandles.lookup().findStaticVarHandle( 78 VarHandleTestMethodTypeBoolean.class, "static_v", boolean.class); 79 80 vhArray = MethodHandles.arrayElementVarHandle(boolean[].class); 81 } 82 83 @DataProvider 84 public Object[][] accessTestCaseProvider() throws Exception { 85 List<AccessTestCase<?>> cases = new ArrayList<>(); 86 87 cases.add(new VarHandleAccessTestCase("Instance field", 88 vhField, vh -> testInstanceFieldWrongMethodType(this, vh), 89 false)); 90 91 cases.add(new VarHandleAccessTestCase("Static field", 92 vhStaticField, VarHandleTestMethodTypeBoolean::testStaticFieldWrongMethodType, 93 false)); 94 95 cases.add(new VarHandleAccessTestCase("Array", 96 vhArray, VarHandleTestMethodTypeBoolean::testArrayWrongMethodType, 97 false)); 98 99 for (VarHandleToMethodHandle f : VarHandleToMethodHandle.values()) { 100 cases.add(new MethodHandleAccessTestCase("Instance field", 101 vhField, f, hs -> testInstanceFieldWrongMethodType(this, hs), 102 false)); 103 104 cases.add(new MethodHandleAccessTestCase("Static field", 105 vhStaticField, f, VarHandleTestMethodTypeBoolean::testStaticFieldWrongMethodType, 106 false)); 107 108 cases.add(new MethodHandleAccessTestCase("Array", 109 vhArray, f, VarHandleTestMethodTypeBoolean::testArrayWrongMethodType, 110 false)); 111 } 112 // Work around issue with jtreg summary reporting which truncates 113 // the String result of Object.toString to 30 characters, hence 114 // the first dummy argument 115 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new); 116 } 117 118 @Test(dataProvider = "accessTestCaseProvider") 119 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable { 120 T t = atc.get(); 121 int iters = atc.requiresLoop() ? ITERS : 1; 122 for (int c = 0; c < iters; c++) { 123 atc.testAccess(t); 124 } 125 } 126 127 128 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeBoolean recv, VarHandle vh) throws Throwable { 129 // Get 130 // Incorrect argument types 131 checkNPE(() -> { // null receiver 132 boolean x = (boolean) vh.get(null); 133 }); 134 checkCCE(() -> { // receiver reference class 135 boolean x = (boolean) vh.get(Void.class); 136 }); 137 checkWMTE(() -> { // receiver primitive class 138 boolean x = (boolean) vh.get(0); 139 }); 140 // Incorrect return type 141 checkWMTE(() -> { // reference class 142 Void x = (Void) vh.get(recv); 143 }); 144 checkWMTE(() -> { // primitive class 145 int x = (int) vh.get(recv); 146 }); 147 // Incorrect arity 148 checkWMTE(() -> { // 0 149 boolean x = (boolean) vh.get(); 150 }); 151 checkWMTE(() -> { // > 152 boolean x = (boolean) vh.get(recv, Void.class); 153 }); 154 155 156 // Set 157 // Incorrect argument types 158 checkNPE(() -> { // null receiver 159 vh.set(null, true); 160 }); 161 checkCCE(() -> { // receiver reference class 162 vh.set(Void.class, true); 163 }); 164 checkWMTE(() -> { // value reference class 165 vh.set(recv, Void.class); 166 }); 167 checkWMTE(() -> { // receiver primitive class 168 vh.set(0, true); 169 }); 170 // Incorrect arity 171 checkWMTE(() -> { // 0 172 vh.set(); 173 }); 174 checkWMTE(() -> { // > 175 vh.set(recv, true, Void.class); 176 }); 177 178 179 // GetVolatile 180 // Incorrect argument types 181 checkNPE(() -> { // null receiver 182 boolean x = (boolean) vh.getVolatile(null); 183 }); 184 checkCCE(() -> { // receiver reference class 185 boolean x = (boolean) vh.getVolatile(Void.class); 186 }); 187 checkWMTE(() -> { // receiver primitive class 188 boolean x = (boolean) vh.getVolatile(0); 189 }); 190 // Incorrect return type 191 checkWMTE(() -> { // reference class 192 Void x = (Void) vh.getVolatile(recv); 193 }); 194 checkWMTE(() -> { // primitive class 195 int x = (int) vh.getVolatile(recv); 196 }); 197 // Incorrect arity 198 checkWMTE(() -> { // 0 199 boolean x = (boolean) vh.getVolatile(); 200 }); 201 checkWMTE(() -> { // > 202 boolean x = (boolean) vh.getVolatile(recv, Void.class); 203 }); 204 205 206 // SetVolatile 207 // Incorrect argument types 208 checkNPE(() -> { // null receiver 209 vh.setVolatile(null, true); 210 }); 211 checkCCE(() -> { // receiver reference class 212 vh.setVolatile(Void.class, true); 213 }); 214 checkWMTE(() -> { // value reference class 215 vh.setVolatile(recv, Void.class); 216 }); 217 checkWMTE(() -> { // receiver primitive class 218 vh.setVolatile(0, true); 219 }); 220 // Incorrect arity 221 checkWMTE(() -> { // 0 222 vh.setVolatile(); 223 }); 224 checkWMTE(() -> { // > 225 vh.setVolatile(recv, true, Void.class); 226 }); 227 228 229 // GetOpaque 230 // Incorrect argument types 231 checkNPE(() -> { // null receiver 232 boolean x = (boolean) vh.getOpaque(null); 233 }); 234 checkCCE(() -> { // receiver reference class 235 boolean x = (boolean) vh.getOpaque(Void.class); 236 }); 237 checkWMTE(() -> { // receiver primitive class 238 boolean x = (boolean) vh.getOpaque(0); 239 }); 240 // Incorrect return type 241 checkWMTE(() -> { // reference class 242 Void x = (Void) vh.getOpaque(recv); 243 }); 244 checkWMTE(() -> { // primitive class 245 int x = (int) vh.getOpaque(recv); 246 }); 247 // Incorrect arity 248 checkWMTE(() -> { // 0 249 boolean x = (boolean) vh.getOpaque(); 250 }); 251 checkWMTE(() -> { // > 252 boolean x = (boolean) vh.getOpaque(recv, Void.class); 253 }); 254 255 256 // SetOpaque 257 // Incorrect argument types 258 checkNPE(() -> { // null receiver 259 vh.setOpaque(null, true); 260 }); 261 checkCCE(() -> { // receiver reference class 262 vh.setOpaque(Void.class, true); 263 }); 264 checkWMTE(() -> { // value reference class 265 vh.setOpaque(recv, Void.class); 266 }); 267 checkWMTE(() -> { // receiver primitive class 268 vh.setOpaque(0, true); 269 }); 270 // Incorrect arity 271 checkWMTE(() -> { // 0 272 vh.setOpaque(); 273 }); 274 checkWMTE(() -> { // > 275 vh.setOpaque(recv, true, Void.class); 276 }); 277 278 279 // GetAcquire 280 // Incorrect argument types 281 checkNPE(() -> { // null receiver 282 boolean x = (boolean) vh.getAcquire(null); 283 }); 284 checkCCE(() -> { // receiver reference class 285 boolean x = (boolean) vh.getAcquire(Void.class); 286 }); 287 checkWMTE(() -> { // receiver primitive class 288 boolean x = (boolean) vh.getAcquire(0); 289 }); 290 // Incorrect return type 291 checkWMTE(() -> { // reference class 292 Void x = (Void) vh.getAcquire(recv); 293 }); 294 checkWMTE(() -> { // primitive class 295 int x = (int) vh.getAcquire(recv); 296 }); 297 // Incorrect arity 298 checkWMTE(() -> { // 0 299 boolean x = (boolean) vh.getAcquire(); 300 }); 301 checkWMTE(() -> { // > 302 boolean x = (boolean) vh.getAcquire(recv, Void.class); 303 }); 304 305 306 // SetRelease 307 // Incorrect argument types 308 checkNPE(() -> { // null receiver 309 vh.setRelease(null, true); 310 }); 311 checkCCE(() -> { // receiver reference class 312 vh.setRelease(Void.class, true); 313 }); 314 checkWMTE(() -> { // value reference class 315 vh.setRelease(recv, Void.class); 316 }); 317 checkWMTE(() -> { // receiver primitive class 318 vh.setRelease(0, true); 319 }); 320 // Incorrect arity 321 checkWMTE(() -> { // 0 322 vh.setRelease(); 323 }); 324 checkWMTE(() -> { // > 325 vh.setRelease(recv, true, Void.class); 326 }); 327 328 329 // CompareAndSet 330 // Incorrect argument types 331 checkNPE(() -> { // null receiver 332 boolean r = vh.compareAndSet(null, true, true); 333 }); 334 checkCCE(() -> { // receiver reference class 335 boolean r = vh.compareAndSet(Void.class, true, true); 336 }); 337 checkWMTE(() -> { // expected reference class 338 boolean r = vh.compareAndSet(recv, Void.class, true); 339 }); 340 checkWMTE(() -> { // actual reference class 341 boolean r = vh.compareAndSet(recv, true, Void.class); 342 }); 343 checkWMTE(() -> { // receiver primitive class 344 boolean r = vh.compareAndSet(0, true, true); 345 }); 346 // Incorrect arity 347 checkWMTE(() -> { // 0 348 boolean r = vh.compareAndSet(); 349 }); 350 checkWMTE(() -> { // > 351 boolean r = vh.compareAndSet(recv, true, true, Void.class); 352 }); 353 354 355 // WeakCompareAndSet 356 // Incorrect argument types 357 checkNPE(() -> { // null receiver 358 boolean r = vh.weakCompareAndSetPlain(null, true, true); 359 }); 360 checkCCE(() -> { // receiver reference class 361 boolean r = vh.weakCompareAndSetPlain(Void.class, true, true); 362 }); 363 checkWMTE(() -> { // expected reference class 364 boolean r = vh.weakCompareAndSetPlain(recv, Void.class, true); 365 }); 366 checkWMTE(() -> { // actual reference class 367 boolean r = vh.weakCompareAndSetPlain(recv, true, Void.class); 368 }); 369 checkWMTE(() -> { // receiver primitive class 370 boolean r = vh.weakCompareAndSetPlain(0, true, true); 371 }); 372 // Incorrect arity 373 checkWMTE(() -> { // 0 374 boolean r = vh.weakCompareAndSetPlain(); 375 }); 376 checkWMTE(() -> { // > 377 boolean r = vh.weakCompareAndSetPlain(recv, true, true, Void.class); 378 }); 379 380 381 // WeakCompareAndSetVolatile 382 // Incorrect argument types 383 checkNPE(() -> { // null receiver 384 boolean r = vh.weakCompareAndSet(null, true, true); 385 }); 386 checkCCE(() -> { // receiver reference class 387 boolean r = vh.weakCompareAndSet(Void.class, true, true); 388 }); 389 checkWMTE(() -> { // expected reference class 390 boolean r = vh.weakCompareAndSet(recv, Void.class, true); 391 }); 392 checkWMTE(() -> { // actual reference class 393 boolean r = vh.weakCompareAndSet(recv, true, Void.class); 394 }); 395 checkWMTE(() -> { // receiver primitive class 396 boolean r = vh.weakCompareAndSet(0, true, true); 397 }); 398 // Incorrect arity 399 checkWMTE(() -> { // 0 400 boolean r = vh.weakCompareAndSet(); 401 }); 402 checkWMTE(() -> { // > 403 boolean r = vh.weakCompareAndSet(recv, true, true, Void.class); 404 }); 405 406 407 // WeakCompareAndSetAcquire 408 // Incorrect argument types 409 checkNPE(() -> { // null receiver 410 boolean r = vh.weakCompareAndSetAcquire(null, true, true); 411 }); 412 checkCCE(() -> { // receiver reference class 413 boolean r = vh.weakCompareAndSetAcquire(Void.class, true, true); 414 }); 415 checkWMTE(() -> { // expected reference class 416 boolean r = vh.weakCompareAndSetAcquire(recv, Void.class, true); 417 }); 418 checkWMTE(() -> { // actual reference class 419 boolean r = vh.weakCompareAndSetAcquire(recv, true, Void.class); 420 }); 421 checkWMTE(() -> { // receiver primitive class 422 boolean r = vh.weakCompareAndSetAcquire(0, true, true); 423 }); 424 // Incorrect arity 425 checkWMTE(() -> { // 0 426 boolean r = vh.weakCompareAndSetAcquire(); 427 }); 428 checkWMTE(() -> { // > 429 boolean r = vh.weakCompareAndSetAcquire(recv, true, true, Void.class); 430 }); 431 432 433 // WeakCompareAndSetRelease 434 // Incorrect argument types 435 checkNPE(() -> { // null receiver 436 boolean r = vh.weakCompareAndSetRelease(null, true, true); 437 }); 438 checkCCE(() -> { // receiver reference class 439 boolean r = vh.weakCompareAndSetRelease(Void.class, true, true); 440 }); 441 checkWMTE(() -> { // expected reference class 442 boolean r = vh.weakCompareAndSetRelease(recv, Void.class, true); 443 }); 444 checkWMTE(() -> { // actual reference class 445 boolean r = vh.weakCompareAndSetRelease(recv, true, Void.class); 446 }); 447 checkWMTE(() -> { // receiver primitive class 448 boolean r = vh.weakCompareAndSetRelease(0, true, true); 449 }); 450 // Incorrect arity 451 checkWMTE(() -> { // 0 452 boolean r = vh.weakCompareAndSetRelease(); 453 }); 454 checkWMTE(() -> { // > 455 boolean r = vh.weakCompareAndSetRelease(recv, true, true, Void.class); 456 }); 457 458 459 // CompareAndExchange 460 // Incorrect argument types 461 checkNPE(() -> { // null receiver 462 boolean x = (boolean) vh.compareAndExchange(null, true, true); 463 }); 464 checkCCE(() -> { // receiver reference class 465 boolean x = (boolean) vh.compareAndExchange(Void.class, true, true); 466 }); 467 checkWMTE(() -> { // expected reference class 468 boolean x = (boolean) vh.compareAndExchange(recv, Void.class, true); 469 }); 470 checkWMTE(() -> { // actual reference class 471 boolean x = (boolean) vh.compareAndExchange(recv, true, Void.class); 472 }); 473 checkWMTE(() -> { // reciever primitive class 474 boolean x = (boolean) vh.compareAndExchange(0, true, true); 475 }); 476 // Incorrect return type 477 checkWMTE(() -> { // reference class 478 Void r = (Void) vh.compareAndExchange(recv, true, true); 479 }); 480 checkWMTE(() -> { // primitive class 481 int x = (int) vh.compareAndExchange(recv, true, true); 482 }); 483 // Incorrect arity 484 checkWMTE(() -> { // 0 485 boolean x = (boolean) vh.compareAndExchange(); 486 }); 487 checkWMTE(() -> { // > 488 boolean x = (boolean) vh.compareAndExchange(recv, true, true, Void.class); 489 }); 490 491 492 // CompareAndExchangeAcquire 493 // Incorrect argument types 494 checkNPE(() -> { // null receiver 495 boolean x = (boolean) vh.compareAndExchangeAcquire(null, true, true); 496 }); 497 checkCCE(() -> { // receiver reference class 498 boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, true, true); 499 }); 500 checkWMTE(() -> { // expected reference class 501 boolean x = (boolean) vh.compareAndExchangeAcquire(recv, Void.class, true); 502 }); 503 checkWMTE(() -> { // actual reference class 504 boolean x = (boolean) vh.compareAndExchangeAcquire(recv, true, Void.class); 505 }); 506 checkWMTE(() -> { // reciever primitive class 507 boolean x = (boolean) vh.compareAndExchangeAcquire(0, true, true); 508 }); 509 // Incorrect return type 510 checkWMTE(() -> { // reference class 511 Void r = (Void) vh.compareAndExchangeAcquire(recv, true, true); 512 }); 513 checkWMTE(() -> { // primitive class 514 int x = (int) vh.compareAndExchangeAcquire(recv, true, true); 515 }); 516 // Incorrect arity 517 checkWMTE(() -> { // 0 518 boolean x = (boolean) vh.compareAndExchangeAcquire(); 519 }); 520 checkWMTE(() -> { // > 521 boolean x = (boolean) vh.compareAndExchangeAcquire(recv, true, true, Void.class); 522 }); 523 524 525 // CompareAndExchangeRelease 526 // Incorrect argument types 527 checkNPE(() -> { // null receiver 528 boolean x = (boolean) vh.compareAndExchangeRelease(null, true, true); 529 }); 530 checkCCE(() -> { // receiver reference class 531 boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, true, true); 532 }); 533 checkWMTE(() -> { // expected reference class 534 boolean x = (boolean) vh.compareAndExchangeRelease(recv, Void.class, true); 535 }); 536 checkWMTE(() -> { // actual reference class 537 boolean x = (boolean) vh.compareAndExchangeRelease(recv, true, Void.class); 538 }); 539 checkWMTE(() -> { // reciever primitive class 540 boolean x = (boolean) vh.compareAndExchangeRelease(0, true, true); 541 }); 542 // Incorrect return type 543 checkWMTE(() -> { // reference class 544 Void r = (Void) vh.compareAndExchangeRelease(recv, true, true); 545 }); 546 checkWMTE(() -> { // primitive class 547 int x = (int) vh.compareAndExchangeRelease(recv, true, true); 548 }); 549 // Incorrect arity 550 checkWMTE(() -> { // 0 551 boolean x = (boolean) vh.compareAndExchangeRelease(); 552 }); 553 checkWMTE(() -> { // > 554 boolean x = (boolean) vh.compareAndExchangeRelease(recv, true, true, Void.class); 555 }); 556 557 558 // GetAndSet 559 // Incorrect argument types 560 checkNPE(() -> { // null receiver 561 boolean x = (boolean) vh.getAndSet(null, true); 562 }); 563 checkCCE(() -> { // receiver reference class 564 boolean x = (boolean) vh.getAndSet(Void.class, true); 565 }); 566 checkWMTE(() -> { // value reference class 567 boolean x = (boolean) vh.getAndSet(recv, Void.class); 568 }); 569 checkWMTE(() -> { // reciever primitive class 570 boolean x = (boolean) vh.getAndSet(0, true); 571 }); 572 // Incorrect return type 573 checkWMTE(() -> { // reference class 574 Void r = (Void) vh.getAndSet(recv, true); 575 }); 576 checkWMTE(() -> { // primitive class 577 int x = (int) vh.getAndSet(recv, true); 578 }); 579 // Incorrect arity 580 checkWMTE(() -> { // 0 581 boolean x = (boolean) vh.getAndSet(); 582 }); 583 checkWMTE(() -> { // > 584 boolean x = (boolean) vh.getAndSet(recv, true, Void.class); 585 }); 586 587 // GetAndSetAcquire 588 // Incorrect argument types 589 checkNPE(() -> { // null receiver 590 boolean x = (boolean) vh.getAndSetAcquire(null, true); 591 }); 592 checkCCE(() -> { // receiver reference class 593 boolean x = (boolean) vh.getAndSetAcquire(Void.class, true); 594 }); 595 checkWMTE(() -> { // value reference class 596 boolean x = (boolean) vh.getAndSetAcquire(recv, Void.class); 597 }); 598 checkWMTE(() -> { // reciever primitive class 599 boolean x = (boolean) vh.getAndSetAcquire(0, true); 600 }); 601 // Incorrect return type 602 checkWMTE(() -> { // reference class 603 Void r = (Void) vh.getAndSetAcquire(recv, true); 604 }); 605 checkWMTE(() -> { // primitive class 606 int x = (int) vh.getAndSetAcquire(recv, true); 607 }); 608 // Incorrect arity 609 checkWMTE(() -> { // 0 610 boolean x = (boolean) vh.getAndSetAcquire(); 611 }); 612 checkWMTE(() -> { // > 613 boolean x = (boolean) vh.getAndSetAcquire(recv, true, Void.class); 614 }); 615 616 // GetAndSetRelease 617 // Incorrect argument types 618 checkNPE(() -> { // null receiver 619 boolean x = (boolean) vh.getAndSetRelease(null, true); 620 }); 621 checkCCE(() -> { // receiver reference class 622 boolean x = (boolean) vh.getAndSetRelease(Void.class, true); 623 }); 624 checkWMTE(() -> { // value reference class 625 boolean x = (boolean) vh.getAndSetRelease(recv, Void.class); 626 }); 627 checkWMTE(() -> { // reciever primitive class 628 boolean x = (boolean) vh.getAndSetRelease(0, true); 629 }); 630 // Incorrect return type 631 checkWMTE(() -> { // reference class 632 Void r = (Void) vh.getAndSetRelease(recv, true); 633 }); 634 checkWMTE(() -> { // primitive class 635 int x = (int) vh.getAndSetRelease(recv, true); 636 }); 637 // Incorrect arity 638 checkWMTE(() -> { // 0 639 boolean x = (boolean) vh.getAndSetRelease(); 640 }); 641 checkWMTE(() -> { // > 642 boolean x = (boolean) vh.getAndSetRelease(recv, true, Void.class); 643 }); 644 645 646 // GetAndBitwiseOr 647 // Incorrect argument types 648 checkNPE(() -> { // null receiver 649 boolean x = (boolean) vh.getAndBitwiseOr(null, true); 650 }); 651 checkCCE(() -> { // receiver reference class 652 boolean x = (boolean) vh.getAndBitwiseOr(Void.class, true); 653 }); 654 checkWMTE(() -> { // value reference class 655 boolean x = (boolean) vh.getAndBitwiseOr(recv, Void.class); 656 }); 657 checkWMTE(() -> { // reciever primitive class 658 boolean x = (boolean) vh.getAndBitwiseOr(0, true); 659 }); 660 // Incorrect return type 661 checkWMTE(() -> { // reference class 662 Void r = (Void) vh.getAndBitwiseOr(recv, true); 663 }); 664 checkWMTE(() -> { // primitive class 665 int x = (int) vh.getAndBitwiseOr(recv, true); 666 }); 667 // Incorrect arity 668 checkWMTE(() -> { // 0 669 boolean x = (boolean) vh.getAndBitwiseOr(); 670 }); 671 checkWMTE(() -> { // > 672 boolean x = (boolean) vh.getAndBitwiseOr(recv, true, Void.class); 673 }); 674 675 676 // GetAndBitwiseOrAcquire 677 // Incorrect argument types 678 checkNPE(() -> { // null receiver 679 boolean x = (boolean) vh.getAndBitwiseOrAcquire(null, true); 680 }); 681 checkCCE(() -> { // receiver reference class 682 boolean x = (boolean) vh.getAndBitwiseOrAcquire(Void.class, true); 683 }); 684 checkWMTE(() -> { // value reference class 685 boolean x = (boolean) vh.getAndBitwiseOrAcquire(recv, Void.class); 686 }); 687 checkWMTE(() -> { // reciever primitive class 688 boolean x = (boolean) vh.getAndBitwiseOrAcquire(0, true); 689 }); 690 // Incorrect return type 691 checkWMTE(() -> { // reference class 692 Void r = (Void) vh.getAndBitwiseOrAcquire(recv, true); 693 }); 694 checkWMTE(() -> { // primitive class 695 int x = (int) vh.getAndBitwiseOrAcquire(recv, true); 696 }); 697 // Incorrect arity 698 checkWMTE(() -> { // 0 699 boolean x = (boolean) vh.getAndBitwiseOrAcquire(); 700 }); 701 checkWMTE(() -> { // > 702 boolean x = (boolean) vh.getAndBitwiseOrAcquire(recv, true, Void.class); 703 }); 704 705 706 // GetAndBitwiseOrRelease 707 // Incorrect argument types 708 checkNPE(() -> { // null receiver 709 boolean x = (boolean) vh.getAndBitwiseOrRelease(null, true); 710 }); 711 checkCCE(() -> { // receiver reference class 712 boolean x = (boolean) vh.getAndBitwiseOr(Void.class, true); 713 }); 714 checkWMTE(() -> { // value reference class 715 boolean x = (boolean) vh.getAndBitwiseOr(recv, Void.class); 716 }); 717 checkWMTE(() -> { // reciever primitive class 718 boolean x = (boolean) vh.getAndBitwiseOr(0, true); 719 }); 720 // Incorrect return type 721 checkWMTE(() -> { // reference class 722 Void r = (Void) vh.getAndBitwiseOr(recv, true); 723 }); 724 checkWMTE(() -> { // primitive class 725 int x = (int) vh.getAndBitwiseOr(recv, true); 726 }); 727 // Incorrect arity 728 checkWMTE(() -> { // 0 729 boolean x = (boolean) vh.getAndBitwiseOr(); 730 }); 731 checkWMTE(() -> { // > 732 boolean x = (boolean) vh.getAndBitwiseOr(recv, true, Void.class); 733 }); 734 735 736 // GetAndBitwiseAnd 737 // Incorrect argument types 738 checkNPE(() -> { // null receiver 739 boolean x = (boolean) vh.getAndBitwiseAnd(null, true); 740 }); 741 checkCCE(() -> { // receiver reference class 742 boolean x = (boolean) vh.getAndBitwiseAnd(Void.class, true); 743 }); 744 checkWMTE(() -> { // value reference class 745 boolean x = (boolean) vh.getAndBitwiseAnd(recv, Void.class); 746 }); 747 checkWMTE(() -> { // reciever primitive class 748 boolean x = (boolean) vh.getAndBitwiseAnd(0, true); 749 }); 750 // Incorrect return type 751 checkWMTE(() -> { // reference class 752 Void r = (Void) vh.getAndBitwiseAnd(recv, true); 753 }); 754 checkWMTE(() -> { // primitive class 755 int x = (int) vh.getAndBitwiseAnd(recv, true); 756 }); 757 // Incorrect arity 758 checkWMTE(() -> { // 0 759 boolean x = (boolean) vh.getAndBitwiseAnd(); 760 }); 761 checkWMTE(() -> { // > 762 boolean x = (boolean) vh.getAndBitwiseAnd(recv, true, Void.class); 763 }); 764 765 766 // GetAndBitwiseAndAcquire 767 // Incorrect argument types 768 checkNPE(() -> { // null receiver 769 boolean x = (boolean) vh.getAndBitwiseAndAcquire(null, true); 770 }); 771 checkCCE(() -> { // receiver reference class 772 boolean x = (boolean) vh.getAndBitwiseAndAcquire(Void.class, true); 773 }); 774 checkWMTE(() -> { // value reference class 775 boolean x = (boolean) vh.getAndBitwiseAndAcquire(recv, Void.class); 776 }); 777 checkWMTE(() -> { // reciever primitive class 778 boolean x = (boolean) vh.getAndBitwiseAndAcquire(0, true); 779 }); 780 // Incorrect return type 781 checkWMTE(() -> { // reference class 782 Void r = (Void) vh.getAndBitwiseAndAcquire(recv, true); 783 }); 784 checkWMTE(() -> { // primitive class 785 int x = (int) vh.getAndBitwiseAndAcquire(recv, true); 786 }); 787 // Incorrect arity 788 checkWMTE(() -> { // 0 789 boolean x = (boolean) vh.getAndBitwiseAndAcquire(); 790 }); 791 checkWMTE(() -> { // > 792 boolean x = (boolean) vh.getAndBitwiseAndAcquire(recv, true, Void.class); 793 }); 794 795 796 // GetAndBitwiseAndRelease 797 // Incorrect argument types 798 checkNPE(() -> { // null receiver 799 boolean x = (boolean) vh.getAndBitwiseAndRelease(null, true); 800 }); 801 checkCCE(() -> { // receiver reference class 802 boolean x = (boolean) vh.getAndBitwiseAnd(Void.class, true); 803 }); 804 checkWMTE(() -> { // value reference class 805 boolean x = (boolean) vh.getAndBitwiseAnd(recv, Void.class); 806 }); 807 checkWMTE(() -> { // reciever primitive class 808 boolean x = (boolean) vh.getAndBitwiseAnd(0, true); 809 }); 810 // Incorrect return type 811 checkWMTE(() -> { // reference class 812 Void r = (Void) vh.getAndBitwiseAnd(recv, true); 813 }); 814 checkWMTE(() -> { // primitive class 815 int x = (int) vh.getAndBitwiseAnd(recv, true); 816 }); 817 // Incorrect arity 818 checkWMTE(() -> { // 0 819 boolean x = (boolean) vh.getAndBitwiseAnd(); 820 }); 821 checkWMTE(() -> { // > 822 boolean x = (boolean) vh.getAndBitwiseAnd(recv, true, Void.class); 823 }); 824 825 826 // GetAndBitwiseXor 827 // Incorrect argument types 828 checkNPE(() -> { // null receiver 829 boolean x = (boolean) vh.getAndBitwiseXor(null, true); 830 }); 831 checkCCE(() -> { // receiver reference class 832 boolean x = (boolean) vh.getAndBitwiseXor(Void.class, true); 833 }); 834 checkWMTE(() -> { // value reference class 835 boolean x = (boolean) vh.getAndBitwiseXor(recv, Void.class); 836 }); 837 checkWMTE(() -> { // reciever primitive class 838 boolean x = (boolean) vh.getAndBitwiseXor(0, true); 839 }); 840 // Incorrect return type 841 checkWMTE(() -> { // reference class 842 Void r = (Void) vh.getAndBitwiseXor(recv, true); 843 }); 844 checkWMTE(() -> { // primitive class 845 int x = (int) vh.getAndBitwiseXor(recv, true); 846 }); 847 // Incorrect arity 848 checkWMTE(() -> { // 0 849 boolean x = (boolean) vh.getAndBitwiseXor(); 850 }); 851 checkWMTE(() -> { // > 852 boolean x = (boolean) vh.getAndBitwiseXor(recv, true, Void.class); 853 }); 854 855 856 // GetAndBitwiseXorAcquire 857 // Incorrect argument types 858 checkNPE(() -> { // null receiver 859 boolean x = (boolean) vh.getAndBitwiseXorAcquire(null, true); 860 }); 861 checkCCE(() -> { // receiver reference class 862 boolean x = (boolean) vh.getAndBitwiseXorAcquire(Void.class, true); 863 }); 864 checkWMTE(() -> { // value reference class 865 boolean x = (boolean) vh.getAndBitwiseXorAcquire(recv, Void.class); 866 }); 867 checkWMTE(() -> { // reciever primitive class 868 boolean x = (boolean) vh.getAndBitwiseXorAcquire(0, true); 869 }); 870 // Incorrect return type 871 checkWMTE(() -> { // reference class 872 Void r = (Void) vh.getAndBitwiseXorAcquire(recv, true); 873 }); 874 checkWMTE(() -> { // primitive class 875 int x = (int) vh.getAndBitwiseXorAcquire(recv, true); 876 }); 877 // Incorrect arity 878 checkWMTE(() -> { // 0 879 boolean x = (boolean) vh.getAndBitwiseXorAcquire(); 880 }); 881 checkWMTE(() -> { // > 882 boolean x = (boolean) vh.getAndBitwiseXorAcquire(recv, true, Void.class); 883 }); 884 885 886 // GetAndBitwiseXorRelease 887 // Incorrect argument types 888 checkNPE(() -> { // null receiver 889 boolean x = (boolean) vh.getAndBitwiseXorRelease(null, true); 890 }); 891 checkCCE(() -> { // receiver reference class 892 boolean x = (boolean) vh.getAndBitwiseXor(Void.class, true); 893 }); 894 checkWMTE(() -> { // value reference class 895 boolean x = (boolean) vh.getAndBitwiseXor(recv, Void.class); 896 }); 897 checkWMTE(() -> { // reciever primitive class 898 boolean x = (boolean) vh.getAndBitwiseXor(0, true); 899 }); 900 // Incorrect return type 901 checkWMTE(() -> { // reference class 902 Void r = (Void) vh.getAndBitwiseXor(recv, true); 903 }); 904 checkWMTE(() -> { // primitive class 905 int x = (int) vh.getAndBitwiseXor(recv, true); 906 }); 907 // Incorrect arity 908 checkWMTE(() -> { // 0 909 boolean x = (boolean) vh.getAndBitwiseXor(); 910 }); 911 checkWMTE(() -> { // > 912 boolean x = (boolean) vh.getAndBitwiseXor(recv, true, Void.class); 913 }); 914 } 915 916 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeBoolean recv, Handles hs) throws Throwable { 917 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 918 // Incorrect argument types 919 checkNPE(() -> { // null receiver 920 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class)). 921 invokeExact((VarHandleTestMethodTypeBoolean) null); 922 }); 923 hs.checkWMTEOrCCE(() -> { // receiver reference class 924 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class)). 925 invokeExact(Void.class); 926 }); 927 checkWMTE(() -> { // receiver primitive class 928 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class)). 929 invokeExact(0); 930 }); 931 // Incorrect return type 932 checkWMTE(() -> { // reference class 933 Void x = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class)). 934 invokeExact(recv); 935 }); 936 checkWMTE(() -> { // primitive class 937 int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class)). 938 invokeExact(recv); 939 }); 940 // Incorrect arity 941 checkWMTE(() -> { // 0 942 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 943 invokeExact(); 944 }); 945 checkWMTE(() -> { // > 946 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class)). 947 invokeExact(recv, Void.class); 948 }); 949 } 950 951 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 952 // Incorrect argument types 953 checkNPE(() -> { // null receiver 954 hs.get(am, methodType(void.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 955 invokeExact((VarHandleTestMethodTypeBoolean) null, true); 956 }); 957 hs.checkWMTEOrCCE(() -> { // receiver reference class 958 hs.get(am, methodType(void.class, Class.class, boolean.class)). 959 invokeExact(Void.class, true); 960 }); 961 checkWMTE(() -> { // value reference class 962 hs.get(am, methodType(void.class, VarHandleTestMethodTypeBoolean.class, Class.class)). 963 invokeExact(recv, Void.class); 964 }); 965 checkWMTE(() -> { // receiver primitive class 966 hs.get(am, methodType(void.class, int.class, boolean.class)). 967 invokeExact(0, true); 968 }); 969 // Incorrect arity 970 checkWMTE(() -> { // 0 971 hs.get(am, methodType(void.class)). 972 invokeExact(); 973 }); 974 checkWMTE(() -> { // > 975 hs.get(am, methodType(void.class, VarHandleTestMethodTypeBoolean.class, boolean.class, Class.class)). 976 invokeExact(recv, true, Void.class); 977 }); 978 } 979 980 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 981 // Incorrect argument types 982 checkNPE(() -> { // null receiver 983 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class)). 984 invokeExact((VarHandleTestMethodTypeBoolean) null, true, true); 985 }); 986 hs.checkWMTEOrCCE(() -> { // receiver reference class 987 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class, boolean.class)). 988 invokeExact(Void.class, true, true); 989 }); 990 checkWMTE(() -> { // expected reference class 991 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class, boolean.class)). 992 invokeExact(recv, Void.class, true); 993 }); 994 checkWMTE(() -> { // actual reference class 995 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, Class.class)). 996 invokeExact(recv, true, Void.class); 997 }); 998 checkWMTE(() -> { // receiver primitive class 999 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class , boolean.class, boolean.class)). 1000 invokeExact(0, true, true); 1001 }); 1002 // Incorrect arity 1003 checkWMTE(() -> { // 0 1004 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 1005 invokeExact(); 1006 }); 1007 checkWMTE(() -> { // > 1008 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class, Class.class)). 1009 invokeExact(recv, true, true, Void.class); 1010 }); 1011 } 1012 1013 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 1014 checkNPE(() -> { // null receiver 1015 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class)). 1016 invokeExact((VarHandleTestMethodTypeBoolean) null, true, true); 1017 }); 1018 hs.checkWMTEOrCCE(() -> { // receiver reference class 1019 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class, boolean.class)). 1020 invokeExact(Void.class, true, true); 1021 }); 1022 checkWMTE(() -> { // expected reference class 1023 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class, boolean.class)). 1024 invokeExact(recv, Void.class, true); 1025 }); 1026 checkWMTE(() -> { // actual reference class 1027 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, Class.class)). 1028 invokeExact(recv, true, Void.class); 1029 }); 1030 checkWMTE(() -> { // reciever primitive class 1031 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class , boolean.class, boolean.class)). 1032 invokeExact(0, true, true); 1033 }); 1034 // Incorrect return type 1035 checkWMTE(() -> { // reference class 1036 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class , boolean.class, boolean.class)). 1037 invokeExact(recv, true, true); 1038 }); 1039 checkWMTE(() -> { // primitive class 1040 int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class , boolean.class, boolean.class)). 1041 invokeExact(recv, true, true); 1042 }); 1043 // Incorrect arity 1044 checkWMTE(() -> { // 0 1045 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1046 invokeExact(); 1047 }); 1048 checkWMTE(() -> { // > 1049 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class, Class.class)). 1050 invokeExact(recv, true, true, Void.class); 1051 }); 1052 } 1053 1054 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 1055 checkNPE(() -> { // null receiver 1056 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1057 invokeExact((VarHandleTestMethodTypeBoolean) null, true); 1058 }); 1059 hs.checkWMTEOrCCE(() -> { // receiver reference class 1060 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). 1061 invokeExact(Void.class, true); 1062 }); 1063 checkWMTE(() -> { // value reference class 1064 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class)). 1065 invokeExact(recv, Void.class); 1066 }); 1067 checkWMTE(() -> { // reciever primitive class 1068 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, boolean.class)). 1069 invokeExact(0, true); 1070 }); 1071 // Incorrect return type 1072 checkWMTE(() -> { // reference class 1073 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1074 invokeExact(recv, true); 1075 }); 1076 checkWMTE(() -> { // primitive class 1077 int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1078 invokeExact(recv, true); 1079 }); 1080 // Incorrect arity 1081 checkWMTE(() -> { // 0 1082 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1083 invokeExact(); 1084 }); 1085 checkWMTE(() -> { // > 1086 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1087 invokeExact(recv, true, Void.class); 1088 }); 1089 } 1090 1091 1092 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) { 1093 checkNPE(() -> { // null receiver 1094 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1095 invokeExact((VarHandleTestMethodTypeBoolean) null, true); 1096 }); 1097 hs.checkWMTEOrCCE(() -> { // receiver reference class 1098 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). 1099 invokeExact(Void.class, true); 1100 }); 1101 checkWMTE(() -> { // value reference class 1102 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class)). 1103 invokeExact(recv, Void.class); 1104 }); 1105 checkWMTE(() -> { // reciever primitive class 1106 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, boolean.class)). 1107 invokeExact(0, true); 1108 }); 1109 // Incorrect return type 1110 checkWMTE(() -> { // reference class 1111 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1112 invokeExact(recv, true); 1113 }); 1114 checkWMTE(() -> { // primitive class 1115 int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1116 invokeExact(recv, true); 1117 }); 1118 // Incorrect arity 1119 checkWMTE(() -> { // 0 1120 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1121 invokeExact(); 1122 }); 1123 checkWMTE(() -> { // > 1124 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). 1125 invokeExact(recv, true, Void.class); 1126 }); 1127 } 1128 } 1129 1130 1131 static void testStaticFieldWrongMethodType(VarHandle vh) throws Throwable { 1132 // Get 1133 // Incorrect return type 1134 checkWMTE(() -> { // reference class 1135 Void x = (Void) vh.get(); 1136 }); 1137 checkWMTE(() -> { // primitive class 1138 int x = (int) vh.get(); 1139 }); 1140 // Incorrect arity 1141 checkWMTE(() -> { // > 1142 boolean x = (boolean) vh.get(Void.class); 1143 }); 1144 1145 1146 // Set 1147 // Incorrect argument types 1148 checkWMTE(() -> { // value reference class 1149 vh.set(Void.class); 1150 }); 1151 // Incorrect arity 1152 checkWMTE(() -> { // 0 1153 vh.set(); 1154 }); 1155 checkWMTE(() -> { // > 1156 vh.set(true, Void.class); 1157 }); 1158 1159 1160 // GetVolatile 1161 // Incorrect return type 1162 checkWMTE(() -> { // reference class 1163 Void x = (Void) vh.getVolatile(); 1164 }); 1165 checkWMTE(() -> { // primitive class 1166 int x = (int) vh.getVolatile(); 1167 }); 1168 checkWMTE(() -> { // > 1169 boolean x = (boolean) vh.getVolatile(Void.class); 1170 }); 1171 1172 1173 // SetVolatile 1174 // Incorrect argument types 1175 checkWMTE(() -> { // value reference class 1176 vh.setVolatile(Void.class); 1177 }); 1178 // Incorrect arity 1179 checkWMTE(() -> { // 0 1180 vh.setVolatile(); 1181 }); 1182 checkWMTE(() -> { // > 1183 vh.setVolatile(true, Void.class); 1184 }); 1185 1186 1187 // GetOpaque 1188 // Incorrect return type 1189 checkWMTE(() -> { // reference class 1190 Void x = (Void) vh.getOpaque(); 1191 }); 1192 checkWMTE(() -> { // primitive class 1193 int x = (int) vh.getOpaque(); 1194 }); 1195 checkWMTE(() -> { // > 1196 boolean x = (boolean) vh.getOpaque(Void.class); 1197 }); 1198 1199 1200 // SetOpaque 1201 // Incorrect argument types 1202 checkWMTE(() -> { // value reference class 1203 vh.setOpaque(Void.class); 1204 }); 1205 // Incorrect arity 1206 checkWMTE(() -> { // 0 1207 vh.setOpaque(); 1208 }); 1209 checkWMTE(() -> { // > 1210 vh.setOpaque(true, Void.class); 1211 }); 1212 1213 1214 // GetAcquire 1215 // Incorrect return type 1216 checkWMTE(() -> { // reference class 1217 Void x = (Void) vh.getAcquire(); 1218 }); 1219 checkWMTE(() -> { // primitive class 1220 int x = (int) vh.getAcquire(); 1221 }); 1222 checkWMTE(() -> { // > 1223 boolean x = (boolean) vh.getAcquire(Void.class); 1224 }); 1225 1226 1227 // SetRelease 1228 // Incorrect argument types 1229 checkWMTE(() -> { // value reference class 1230 vh.setRelease(Void.class); 1231 }); 1232 // Incorrect arity 1233 checkWMTE(() -> { // 0 1234 vh.setRelease(); 1235 }); 1236 checkWMTE(() -> { // > 1237 vh.setRelease(true, Void.class); 1238 }); 1239 1240 1241 // CompareAndSet 1242 // Incorrect argument types 1243 checkWMTE(() -> { // expected reference class 1244 boolean r = vh.compareAndSet(Void.class, true); 1245 }); 1246 checkWMTE(() -> { // actual reference class 1247 boolean r = vh.compareAndSet(true, Void.class); 1248 }); 1249 // Incorrect arity 1250 checkWMTE(() -> { // 0 1251 boolean r = vh.compareAndSet(); 1252 }); 1253 checkWMTE(() -> { // > 1254 boolean r = vh.compareAndSet(true, true, Void.class); 1255 }); 1256 1257 1258 // WeakCompareAndSet 1259 // Incorrect argument types 1260 checkWMTE(() -> { // expected reference class 1261 boolean r = vh.weakCompareAndSetPlain(Void.class, true); 1262 }); 1263 checkWMTE(() -> { // actual reference class 1264 boolean r = vh.weakCompareAndSetPlain(true, Void.class); 1265 }); 1266 // Incorrect arity 1267 checkWMTE(() -> { // 0 1268 boolean r = vh.weakCompareAndSetPlain(); 1269 }); 1270 checkWMTE(() -> { // > 1271 boolean r = vh.weakCompareAndSetPlain(true, true, Void.class); 1272 }); 1273 1274 1275 // WeakCompareAndSetVolatile 1276 // Incorrect argument types 1277 checkWMTE(() -> { // expected reference class 1278 boolean r = vh.weakCompareAndSet(Void.class, true); 1279 }); 1280 checkWMTE(() -> { // actual reference class 1281 boolean r = vh.weakCompareAndSet(true, Void.class); 1282 }); 1283 // Incorrect arity 1284 checkWMTE(() -> { // 0 1285 boolean r = vh.weakCompareAndSet(); 1286 }); 1287 checkWMTE(() -> { // > 1288 boolean r = vh.weakCompareAndSet(true, true, Void.class); 1289 }); 1290 1291 1292 // WeakCompareAndSetAcquire 1293 // Incorrect argument types 1294 checkWMTE(() -> { // expected reference class 1295 boolean r = vh.weakCompareAndSetAcquire(Void.class, true); 1296 }); 1297 checkWMTE(() -> { // actual reference class 1298 boolean r = vh.weakCompareAndSetAcquire(true, Void.class); 1299 }); 1300 // Incorrect arity 1301 checkWMTE(() -> { // 0 1302 boolean r = vh.weakCompareAndSetAcquire(); 1303 }); 1304 checkWMTE(() -> { // > 1305 boolean r = vh.weakCompareAndSetAcquire(true, true, Void.class); 1306 }); 1307 1308 1309 // WeakCompareAndSetRelease 1310 // Incorrect argument types 1311 checkWMTE(() -> { // expected reference class 1312 boolean r = vh.weakCompareAndSetRelease(Void.class, true); 1313 }); 1314 checkWMTE(() -> { // actual reference class 1315 boolean r = vh.weakCompareAndSetRelease(true, Void.class); 1316 }); 1317 // Incorrect arity 1318 checkWMTE(() -> { // 0 1319 boolean r = vh.weakCompareAndSetRelease(); 1320 }); 1321 checkWMTE(() -> { // > 1322 boolean r = vh.weakCompareAndSetRelease(true, true, Void.class); 1323 }); 1324 1325 1326 // CompareAndExchange 1327 // Incorrect argument types 1328 checkWMTE(() -> { // expected reference class 1329 boolean x = (boolean) vh.compareAndExchange(Void.class, true); 1330 }); 1331 checkWMTE(() -> { // actual reference class 1332 boolean x = (boolean) vh.compareAndExchange(true, Void.class); 1333 }); 1334 // Incorrect return type 1335 checkWMTE(() -> { // reference class 1336 Void r = (Void) vh.compareAndExchange(true, true); 1337 }); 1338 checkWMTE(() -> { // primitive class 1339 int x = (int) vh.compareAndExchange(true, true); 1340 }); 1341 // Incorrect arity 1342 checkWMTE(() -> { // 0 1343 boolean x = (boolean) vh.compareAndExchange(); 1344 }); 1345 checkWMTE(() -> { // > 1346 boolean x = (boolean) vh.compareAndExchange(true, true, Void.class); 1347 }); 1348 1349 1350 // CompareAndExchangeAcquire 1351 // Incorrect argument types 1352 checkWMTE(() -> { // expected reference class 1353 boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, true); 1354 }); 1355 checkWMTE(() -> { // actual reference class 1356 boolean x = (boolean) vh.compareAndExchangeAcquire(true, Void.class); 1357 }); 1358 // Incorrect return type 1359 checkWMTE(() -> { // reference class 1360 Void r = (Void) vh.compareAndExchangeAcquire(true, true); 1361 }); 1362 checkWMTE(() -> { // primitive class 1363 int x = (int) vh.compareAndExchangeAcquire(true, true); 1364 }); 1365 // Incorrect arity 1366 checkWMTE(() -> { // 0 1367 boolean x = (boolean) vh.compareAndExchangeAcquire(); 1368 }); 1369 checkWMTE(() -> { // > 1370 boolean x = (boolean) vh.compareAndExchangeAcquire(true, true, Void.class); 1371 }); 1372 1373 1374 // CompareAndExchangeRelease 1375 // Incorrect argument types 1376 checkWMTE(() -> { // expected reference class 1377 boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, true); 1378 }); 1379 checkWMTE(() -> { // actual reference class 1380 boolean x = (boolean) vh.compareAndExchangeRelease(true, Void.class); 1381 }); 1382 // Incorrect return type 1383 checkWMTE(() -> { // reference class 1384 Void r = (Void) vh.compareAndExchangeRelease(true, true); 1385 }); 1386 checkWMTE(() -> { // primitive class 1387 int x = (int) vh.compareAndExchangeRelease(true, true); 1388 }); 1389 // Incorrect arity 1390 checkWMTE(() -> { // 0 1391 boolean x = (boolean) vh.compareAndExchangeRelease(); 1392 }); 1393 checkWMTE(() -> { // > 1394 boolean x = (boolean) vh.compareAndExchangeRelease(true, true, Void.class); 1395 }); 1396 1397 1398 // GetAndSet 1399 // Incorrect argument types 1400 checkWMTE(() -> { // value reference class 1401 boolean x = (boolean) vh.getAndSet(Void.class); 1402 }); 1403 // Incorrect return type 1404 checkWMTE(() -> { // reference class 1405 Void r = (Void) vh.getAndSet(true); 1406 }); 1407 checkWMTE(() -> { // primitive class 1408 int x = (int) vh.getAndSet(true); 1409 }); 1410 // Incorrect arity 1411 checkWMTE(() -> { // 0 1412 boolean x = (boolean) vh.getAndSet(); 1413 }); 1414 checkWMTE(() -> { // > 1415 boolean x = (boolean) vh.getAndSet(true, Void.class); 1416 }); 1417 1418 1419 // GetAndSetAcquire 1420 // Incorrect argument types 1421 checkWMTE(() -> { // value reference class 1422 boolean x = (boolean) vh.getAndSetAcquire(Void.class); 1423 }); 1424 // Incorrect return type 1425 checkWMTE(() -> { // reference class 1426 Void r = (Void) vh.getAndSetAcquire(true); 1427 }); 1428 checkWMTE(() -> { // primitive class 1429 int x = (int) vh.getAndSetAcquire(true); 1430 }); 1431 // Incorrect arity 1432 checkWMTE(() -> { // 0 1433 boolean x = (boolean) vh.getAndSetAcquire(); 1434 }); 1435 checkWMTE(() -> { // > 1436 boolean x = (boolean) vh.getAndSetAcquire(true, Void.class); 1437 }); 1438 1439 1440 // GetAndSetRelease 1441 // Incorrect argument types 1442 checkWMTE(() -> { // value reference class 1443 boolean x = (boolean) vh.getAndSetRelease(Void.class); 1444 }); 1445 // Incorrect return type 1446 checkWMTE(() -> { // reference class 1447 Void r = (Void) vh.getAndSetRelease(true); 1448 }); 1449 checkWMTE(() -> { // primitive class 1450 int x = (int) vh.getAndSetRelease(true); 1451 }); 1452 // Incorrect arity 1453 checkWMTE(() -> { // 0 1454 boolean x = (boolean) vh.getAndSetRelease(); 1455 }); 1456 checkWMTE(() -> { // > 1457 boolean x = (boolean) vh.getAndSetRelease(true, Void.class); 1458 }); 1459 1460 1461 // GetAndBitwiseOr 1462 // Incorrect argument types 1463 checkWMTE(() -> { // value reference class 1464 boolean x = (boolean) vh.getAndBitwiseOr(Void.class); 1465 }); 1466 // Incorrect return type 1467 checkWMTE(() -> { // reference class 1468 Void r = (Void) vh.getAndBitwiseOr(true); 1469 }); 1470 checkWMTE(() -> { // primitive class 1471 int x = (int) vh.getAndBitwiseOr(true); 1472 }); 1473 // Incorrect arity 1474 checkWMTE(() -> { // 0 1475 boolean x = (boolean) vh.getAndBitwiseOr(); 1476 }); 1477 checkWMTE(() -> { // > 1478 boolean x = (boolean) vh.getAndBitwiseOr(true, Void.class); 1479 }); 1480 1481 1482 // GetAndBitwiseOrAcquire 1483 // Incorrect argument types 1484 checkWMTE(() -> { // value reference class 1485 boolean x = (boolean) vh.getAndBitwiseOrAcquire(Void.class); 1486 }); 1487 // Incorrect return type 1488 checkWMTE(() -> { // reference class 1489 Void r = (Void) vh.getAndBitwiseOrAcquire(true); 1490 }); 1491 checkWMTE(() -> { // primitive class 1492 int x = (int) vh.getAndBitwiseOrAcquire(true); 1493 }); 1494 // Incorrect arity 1495 checkWMTE(() -> { // 0 1496 boolean x = (boolean) vh.getAndBitwiseOrAcquire(); 1497 }); 1498 checkWMTE(() -> { // > 1499 boolean x = (boolean) vh.getAndBitwiseOrAcquire(true, Void.class); 1500 }); 1501 1502 1503 // GetAndBitwiseOrReleaseRelease 1504 // Incorrect argument types 1505 checkWMTE(() -> { // value reference class 1506 boolean x = (boolean) vh.getAndBitwiseOrRelease(Void.class); 1507 }); 1508 // Incorrect return type 1509 checkWMTE(() -> { // reference class 1510 Void r = (Void) vh.getAndBitwiseOrRelease(true); 1511 }); 1512 checkWMTE(() -> { // primitive class 1513 int x = (int) vh.getAndBitwiseOrRelease(true); 1514 }); 1515 // Incorrect arity 1516 checkWMTE(() -> { // 0 1517 boolean x = (boolean) vh.getAndBitwiseOrRelease(); 1518 }); 1519 checkWMTE(() -> { // > 1520 boolean x = (boolean) vh.getAndBitwiseOrRelease(true, Void.class); 1521 }); 1522 1523 1524 // GetAndBitwiseAnd 1525 // Incorrect argument types 1526 checkWMTE(() -> { // value reference class 1527 boolean x = (boolean) vh.getAndBitwiseAnd(Void.class); 1528 }); 1529 // Incorrect return type 1530 checkWMTE(() -> { // reference class 1531 Void r = (Void) vh.getAndBitwiseAnd(true); 1532 }); 1533 checkWMTE(() -> { // primitive class 1534 int x = (int) vh.getAndBitwiseAnd(true); 1535 }); 1536 // Incorrect arity 1537 checkWMTE(() -> { // 0 1538 boolean x = (boolean) vh.getAndBitwiseAnd(); 1539 }); 1540 checkWMTE(() -> { // > 1541 boolean x = (boolean) vh.getAndBitwiseAnd(true, Void.class); 1542 }); 1543 1544 1545 // GetAndBitwiseAndAcquire 1546 // Incorrect argument types 1547 checkWMTE(() -> { // value reference class 1548 boolean x = (boolean) vh.getAndBitwiseAndAcquire(Void.class); 1549 }); 1550 // Incorrect return type 1551 checkWMTE(() -> { // reference class 1552 Void r = (Void) vh.getAndBitwiseAndAcquire(true); 1553 }); 1554 checkWMTE(() -> { // primitive class 1555 int x = (int) vh.getAndBitwiseAndAcquire(true); 1556 }); 1557 // Incorrect arity 1558 checkWMTE(() -> { // 0 1559 boolean x = (boolean) vh.getAndBitwiseAndAcquire(); 1560 }); 1561 checkWMTE(() -> { // > 1562 boolean x = (boolean) vh.getAndBitwiseAndAcquire(true, Void.class); 1563 }); 1564 1565 1566 // GetAndBitwiseAndReleaseRelease 1567 // Incorrect argument types 1568 checkWMTE(() -> { // value reference class 1569 boolean x = (boolean) vh.getAndBitwiseAndRelease(Void.class); 1570 }); 1571 // Incorrect return type 1572 checkWMTE(() -> { // reference class 1573 Void r = (Void) vh.getAndBitwiseAndRelease(true); 1574 }); 1575 checkWMTE(() -> { // primitive class 1576 int x = (int) vh.getAndBitwiseAndRelease(true); 1577 }); 1578 // Incorrect arity 1579 checkWMTE(() -> { // 0 1580 boolean x = (boolean) vh.getAndBitwiseAndRelease(); 1581 }); 1582 checkWMTE(() -> { // > 1583 boolean x = (boolean) vh.getAndBitwiseAndRelease(true, Void.class); 1584 }); 1585 1586 1587 // GetAndBitwiseXor 1588 // Incorrect argument types 1589 checkWMTE(() -> { // value reference class 1590 boolean x = (boolean) vh.getAndBitwiseXor(Void.class); 1591 }); 1592 // Incorrect return type 1593 checkWMTE(() -> { // reference class 1594 Void r = (Void) vh.getAndBitwiseXor(true); 1595 }); 1596 checkWMTE(() -> { // primitive class 1597 int x = (int) vh.getAndBitwiseXor(true); 1598 }); 1599 // Incorrect arity 1600 checkWMTE(() -> { // 0 1601 boolean x = (boolean) vh.getAndBitwiseXor(); 1602 }); 1603 checkWMTE(() -> { // > 1604 boolean x = (boolean) vh.getAndBitwiseXor(true, Void.class); 1605 }); 1606 1607 1608 // GetAndBitwiseXorAcquire 1609 // Incorrect argument types 1610 checkWMTE(() -> { // value reference class 1611 boolean x = (boolean) vh.getAndBitwiseXorAcquire(Void.class); 1612 }); 1613 // Incorrect return type 1614 checkWMTE(() -> { // reference class 1615 Void r = (Void) vh.getAndBitwiseXorAcquire(true); 1616 }); 1617 checkWMTE(() -> { // primitive class 1618 int x = (int) vh.getAndBitwiseXorAcquire(true); 1619 }); 1620 // Incorrect arity 1621 checkWMTE(() -> { // 0 1622 boolean x = (boolean) vh.getAndBitwiseXorAcquire(); 1623 }); 1624 checkWMTE(() -> { // > 1625 boolean x = (boolean) vh.getAndBitwiseXorAcquire(true, Void.class); 1626 }); 1627 1628 1629 // GetAndBitwiseXorReleaseRelease 1630 // Incorrect argument types 1631 checkWMTE(() -> { // value reference class 1632 boolean x = (boolean) vh.getAndBitwiseXorRelease(Void.class); 1633 }); 1634 // Incorrect return type 1635 checkWMTE(() -> { // reference class 1636 Void r = (Void) vh.getAndBitwiseXorRelease(true); 1637 }); 1638 checkWMTE(() -> { // primitive class 1639 int x = (int) vh.getAndBitwiseXorRelease(true); 1640 }); 1641 // Incorrect arity 1642 checkWMTE(() -> { // 0 1643 boolean x = (boolean) vh.getAndBitwiseXorRelease(); 1644 }); 1645 checkWMTE(() -> { // > 1646 boolean x = (boolean) vh.getAndBitwiseXorRelease(true, Void.class); 1647 }); 1648 } 1649 1650 static void testStaticFieldWrongMethodType(Handles hs) throws Throwable { 1651 int i = 0; 1652 1653 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 1654 // Incorrect return type 1655 checkWMTE(() -> { // reference class 1656 Void x = (Void) hs.get(am, methodType(Void.class)). 1657 invokeExact(); 1658 }); 1659 checkWMTE(() -> { // primitive class 1660 int x = (int) hs.get(am, methodType(int.class)). 1661 invokeExact(); 1662 }); 1663 // Incorrect arity 1664 checkWMTE(() -> { // > 1665 boolean x = (boolean) hs.get(am, methodType(Class.class)). 1666 invokeExact(Void.class); 1667 }); 1668 } 1669 1670 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 1671 checkWMTE(() -> { // value reference class 1672 hs.get(am, methodType(void.class, Class.class)). 1673 invokeExact(Void.class); 1674 }); 1675 // Incorrect arity 1676 checkWMTE(() -> { // 0 1677 hs.get(am, methodType(void.class)). 1678 invokeExact(); 1679 }); 1680 checkWMTE(() -> { // > 1681 hs.get(am, methodType(void.class, boolean.class, Class.class)). 1682 invokeExact(true, Void.class); 1683 }); 1684 } 1685 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 1686 // Incorrect argument types 1687 checkWMTE(() -> { // expected reference class 1688 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). 1689 invokeExact(Void.class, true); 1690 }); 1691 checkWMTE(() -> { // actual reference class 1692 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). 1693 invokeExact(true, Void.class); 1694 }); 1695 // Incorrect arity 1696 checkWMTE(() -> { // 0 1697 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 1698 invokeExact(); 1699 }); 1700 checkWMTE(() -> { // > 1701 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean.class, boolean.class, Class.class)). 1702 invokeExact(true, true, Void.class); 1703 }); 1704 } 1705 1706 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 1707 // Incorrect argument types 1708 checkWMTE(() -> { // expected reference class 1709 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). 1710 invokeExact(Void.class, true); 1711 }); 1712 checkWMTE(() -> { // actual reference class 1713 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). 1714 invokeExact(true, Void.class); 1715 }); 1716 // Incorrect return type 1717 checkWMTE(() -> { // reference class 1718 Void r = (Void) hs.get(am, methodType(Void.class, boolean.class, boolean.class)). 1719 invokeExact(true, true); 1720 }); 1721 checkWMTE(() -> { // primitive class 1722 int x = (int) hs.get(am, methodType(int.class, boolean.class, boolean.class)). 1723 invokeExact(true, true); 1724 }); 1725 // Incorrect arity 1726 checkWMTE(() -> { // 0 1727 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1728 invokeExact(); 1729 }); 1730 checkWMTE(() -> { // > 1731 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, boolean.class, Class.class)). 1732 invokeExact(true, true, Void.class); 1733 }); 1734 } 1735 1736 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 1737 // Incorrect argument types 1738 checkWMTE(() -> { // value reference class 1739 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class)). 1740 invokeExact(Void.class); 1741 }); 1742 // Incorrect return type 1743 checkWMTE(() -> { // reference class 1744 Void r = (Void) hs.get(am, methodType(Void.class, boolean.class)). 1745 invokeExact(true); 1746 }); 1747 checkWMTE(() -> { // primitive class 1748 int x = (int) hs.get(am, methodType(int.class, boolean.class)). 1749 invokeExact(true); 1750 }); 1751 // Incorrect arity 1752 checkWMTE(() -> { // 0 1753 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1754 invokeExact(); 1755 }); 1756 checkWMTE(() -> { // > 1757 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). 1758 invokeExact(true, Void.class); 1759 }); 1760 } 1761 1762 1763 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) { 1764 // Incorrect argument types 1765 checkWMTE(() -> { // value reference class 1766 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class)). 1767 invokeExact(Void.class); 1768 }); 1769 // Incorrect return type 1770 checkWMTE(() -> { // reference class 1771 Void r = (Void) hs.get(am, methodType(Void.class, boolean.class)). 1772 invokeExact(true); 1773 }); 1774 checkWMTE(() -> { // primitive class 1775 int x = (int) hs.get(am, methodType(int.class, boolean.class)). 1776 invokeExact(true); 1777 }); 1778 // Incorrect arity 1779 checkWMTE(() -> { // 0 1780 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1781 invokeExact(); 1782 }); 1783 checkWMTE(() -> { // > 1784 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). 1785 invokeExact(true, Void.class); 1786 }); 1787 } 1788 } 1789 1790 1791 static void testArrayWrongMethodType(VarHandle vh) throws Throwable { 1792 boolean[] array = new boolean[10]; 1793 Arrays.fill(array, true); 1794 1795 // Get 1796 // Incorrect argument types 1797 checkNPE(() -> { // null array 1798 boolean x = (boolean) vh.get(null, 0); 1799 }); 1800 checkCCE(() -> { // array reference class 1801 boolean x = (boolean) vh.get(Void.class, 0); 1802 }); 1803 checkWMTE(() -> { // array primitive class 1804 boolean x = (boolean) vh.get(0, 0); 1805 }); 1806 checkWMTE(() -> { // index reference class 1807 boolean x = (boolean) vh.get(array, Void.class); 1808 }); 1809 // Incorrect return type 1810 checkWMTE(() -> { // reference class 1811 Void x = (Void) vh.get(array, 0); 1812 }); 1813 checkWMTE(() -> { // primitive class 1814 int x = (int) vh.get(array, 0); 1815 }); 1816 // Incorrect arity 1817 checkWMTE(() -> { // 0 1818 boolean x = (boolean) vh.get(); 1819 }); 1820 checkWMTE(() -> { // > 1821 boolean x = (boolean) vh.get(array, 0, Void.class); 1822 }); 1823 1824 1825 // Set 1826 // Incorrect argument types 1827 checkNPE(() -> { // null array 1828 vh.set(null, 0, true); 1829 }); 1830 checkCCE(() -> { // array reference class 1831 vh.set(Void.class, 0, true); 1832 }); 1833 checkWMTE(() -> { // value reference class 1834 vh.set(array, 0, Void.class); 1835 }); 1836 checkWMTE(() -> { // receiver primitive class 1837 vh.set(0, 0, true); 1838 }); 1839 checkWMTE(() -> { // index reference class 1840 vh.set(array, Void.class, true); 1841 }); 1842 // Incorrect arity 1843 checkWMTE(() -> { // 0 1844 vh.set(); 1845 }); 1846 checkWMTE(() -> { // > 1847 vh.set(array, 0, true, Void.class); 1848 }); 1849 1850 1851 // GetVolatile 1852 // Incorrect argument types 1853 checkNPE(() -> { // null array 1854 boolean x = (boolean) vh.getVolatile(null, 0); 1855 }); 1856 checkCCE(() -> { // array reference class 1857 boolean x = (boolean) vh.getVolatile(Void.class, 0); 1858 }); 1859 checkWMTE(() -> { // array primitive class 1860 boolean x = (boolean) vh.getVolatile(0, 0); 1861 }); 1862 checkWMTE(() -> { // index reference class 1863 boolean x = (boolean) vh.getVolatile(array, Void.class); 1864 }); 1865 // Incorrect return type 1866 checkWMTE(() -> { // reference class 1867 Void x = (Void) vh.getVolatile(array, 0); 1868 }); 1869 checkWMTE(() -> { // primitive class 1870 int x = (int) vh.getVolatile(array, 0); 1871 }); 1872 // Incorrect arity 1873 checkWMTE(() -> { // 0 1874 boolean x = (boolean) vh.getVolatile(); 1875 }); 1876 checkWMTE(() -> { // > 1877 boolean x = (boolean) vh.getVolatile(array, 0, Void.class); 1878 }); 1879 1880 1881 // SetVolatile 1882 // Incorrect argument types 1883 checkNPE(() -> { // null array 1884 vh.setVolatile(null, 0, true); 1885 }); 1886 checkCCE(() -> { // array reference class 1887 vh.setVolatile(Void.class, 0, true); 1888 }); 1889 checkWMTE(() -> { // value reference class 1890 vh.setVolatile(array, 0, Void.class); 1891 }); 1892 checkWMTE(() -> { // receiver primitive class 1893 vh.setVolatile(0, 0, true); 1894 }); 1895 checkWMTE(() -> { // index reference class 1896 vh.setVolatile(array, Void.class, true); 1897 }); 1898 // Incorrect arity 1899 checkWMTE(() -> { // 0 1900 vh.setVolatile(); 1901 }); 1902 checkWMTE(() -> { // > 1903 vh.setVolatile(array, 0, true, Void.class); 1904 }); 1905 1906 1907 // GetOpaque 1908 // Incorrect argument types 1909 checkNPE(() -> { // null array 1910 boolean x = (boolean) vh.getOpaque(null, 0); 1911 }); 1912 checkCCE(() -> { // array reference class 1913 boolean x = (boolean) vh.getOpaque(Void.class, 0); 1914 }); 1915 checkWMTE(() -> { // array primitive class 1916 boolean x = (boolean) vh.getOpaque(0, 0); 1917 }); 1918 checkWMTE(() -> { // index reference class 1919 boolean x = (boolean) vh.getOpaque(array, Void.class); 1920 }); 1921 // Incorrect return type 1922 checkWMTE(() -> { // reference class 1923 Void x = (Void) vh.getOpaque(array, 0); 1924 }); 1925 checkWMTE(() -> { // primitive class 1926 int x = (int) vh.getOpaque(array, 0); 1927 }); 1928 // Incorrect arity 1929 checkWMTE(() -> { // 0 1930 boolean x = (boolean) vh.getOpaque(); 1931 }); 1932 checkWMTE(() -> { // > 1933 boolean x = (boolean) vh.getOpaque(array, 0, Void.class); 1934 }); 1935 1936 1937 // SetOpaque 1938 // Incorrect argument types 1939 checkNPE(() -> { // null array 1940 vh.setOpaque(null, 0, true); 1941 }); 1942 checkCCE(() -> { // array reference class 1943 vh.setOpaque(Void.class, 0, true); 1944 }); 1945 checkWMTE(() -> { // value reference class 1946 vh.setOpaque(array, 0, Void.class); 1947 }); 1948 checkWMTE(() -> { // receiver primitive class 1949 vh.setOpaque(0, 0, true); 1950 }); 1951 checkWMTE(() -> { // index reference class 1952 vh.setOpaque(array, Void.class, true); 1953 }); 1954 // Incorrect arity 1955 checkWMTE(() -> { // 0 1956 vh.setOpaque(); 1957 }); 1958 checkWMTE(() -> { // > 1959 vh.setOpaque(array, 0, true, Void.class); 1960 }); 1961 1962 1963 // GetAcquire 1964 // Incorrect argument types 1965 checkNPE(() -> { // null array 1966 boolean x = (boolean) vh.getAcquire(null, 0); 1967 }); 1968 checkCCE(() -> { // array reference class 1969 boolean x = (boolean) vh.getAcquire(Void.class, 0); 1970 }); 1971 checkWMTE(() -> { // array primitive class 1972 boolean x = (boolean) vh.getAcquire(0, 0); 1973 }); 1974 checkWMTE(() -> { // index reference class 1975 boolean x = (boolean) vh.getAcquire(array, Void.class); 1976 }); 1977 // Incorrect return type 1978 checkWMTE(() -> { // reference class 1979 Void x = (Void) vh.getAcquire(array, 0); 1980 }); 1981 checkWMTE(() -> { // primitive class 1982 int x = (int) vh.getAcquire(array, 0); 1983 }); 1984 // Incorrect arity 1985 checkWMTE(() -> { // 0 1986 boolean x = (boolean) vh.getAcquire(); 1987 }); 1988 checkWMTE(() -> { // > 1989 boolean x = (boolean) vh.getAcquire(array, 0, Void.class); 1990 }); 1991 1992 1993 // SetRelease 1994 // Incorrect argument types 1995 checkNPE(() -> { // null array 1996 vh.setRelease(null, 0, true); 1997 }); 1998 checkCCE(() -> { // array reference class 1999 vh.setRelease(Void.class, 0, true); 2000 }); 2001 checkWMTE(() -> { // value reference class 2002 vh.setRelease(array, 0, Void.class); 2003 }); 2004 checkWMTE(() -> { // receiver primitive class 2005 vh.setRelease(0, 0, true); 2006 }); 2007 checkWMTE(() -> { // index reference class 2008 vh.setRelease(array, Void.class, true); 2009 }); 2010 // Incorrect arity 2011 checkWMTE(() -> { // 0 2012 vh.setRelease(); 2013 }); 2014 checkWMTE(() -> { // > 2015 vh.setRelease(array, 0, true, Void.class); 2016 }); 2017 2018 2019 // CompareAndSet 2020 // Incorrect argument types 2021 checkNPE(() -> { // null receiver 2022 boolean r = vh.compareAndSet(null, 0, true, true); 2023 }); 2024 checkCCE(() -> { // receiver reference class 2025 boolean r = vh.compareAndSet(Void.class, 0, true, true); 2026 }); 2027 checkWMTE(() -> { // expected reference class 2028 boolean r = vh.compareAndSet(array, 0, Void.class, true); 2029 }); 2030 checkWMTE(() -> { // actual reference class 2031 boolean r = vh.compareAndSet(array, 0, true, Void.class); 2032 }); 2033 checkWMTE(() -> { // receiver primitive class 2034 boolean r = vh.compareAndSet(0, 0, true, true); 2035 }); 2036 checkWMTE(() -> { // index reference class 2037 boolean r = vh.compareAndSet(array, Void.class, true, true); 2038 }); 2039 // Incorrect arity 2040 checkWMTE(() -> { // 0 2041 boolean r = vh.compareAndSet(); 2042 }); 2043 checkWMTE(() -> { // > 2044 boolean r = vh.compareAndSet(array, 0, true, true, Void.class); 2045 }); 2046 2047 2048 // WeakCompareAndSet 2049 // Incorrect argument types 2050 checkNPE(() -> { // null receiver 2051 boolean r = vh.weakCompareAndSetPlain(null, 0, true, true); 2052 }); 2053 checkCCE(() -> { // receiver reference class 2054 boolean r = vh.weakCompareAndSetPlain(Void.class, 0, true, true); 2055 }); 2056 checkWMTE(() -> { // expected reference class 2057 boolean r = vh.weakCompareAndSetPlain(array, 0, Void.class, true); 2058 }); 2059 checkWMTE(() -> { // actual reference class 2060 boolean r = vh.weakCompareAndSetPlain(array, 0, true, Void.class); 2061 }); 2062 checkWMTE(() -> { // receiver primitive class 2063 boolean r = vh.weakCompareAndSetPlain(0, 0, true, true); 2064 }); 2065 checkWMTE(() -> { // index reference class 2066 boolean r = vh.weakCompareAndSetPlain(array, Void.class, true, true); 2067 }); 2068 // Incorrect arity 2069 checkWMTE(() -> { // 0 2070 boolean r = vh.weakCompareAndSetPlain(); 2071 }); 2072 checkWMTE(() -> { // > 2073 boolean r = vh.weakCompareAndSetPlain(array, 0, true, true, Void.class); 2074 }); 2075 2076 2077 // WeakCompareAndSetVolatile 2078 // Incorrect argument types 2079 checkNPE(() -> { // null receiver 2080 boolean r = vh.weakCompareAndSet(null, 0, true, true); 2081 }); 2082 checkCCE(() -> { // receiver reference class 2083 boolean r = vh.weakCompareAndSet(Void.class, 0, true, true); 2084 }); 2085 checkWMTE(() -> { // expected reference class 2086 boolean r = vh.weakCompareAndSet(array, 0, Void.class, true); 2087 }); 2088 checkWMTE(() -> { // actual reference class 2089 boolean r = vh.weakCompareAndSet(array, 0, true, Void.class); 2090 }); 2091 checkWMTE(() -> { // receiver primitive class 2092 boolean r = vh.weakCompareAndSet(0, 0, true, true); 2093 }); 2094 checkWMTE(() -> { // index reference class 2095 boolean r = vh.weakCompareAndSet(array, Void.class, true, true); 2096 }); 2097 // Incorrect arity 2098 checkWMTE(() -> { // 0 2099 boolean r = vh.weakCompareAndSet(); 2100 }); 2101 checkWMTE(() -> { // > 2102 boolean r = vh.weakCompareAndSet(array, 0, true, true, Void.class); 2103 }); 2104 2105 2106 // WeakCompareAndSetAcquire 2107 // Incorrect argument types 2108 checkNPE(() -> { // null receiver 2109 boolean r = vh.weakCompareAndSetAcquire(null, 0, true, true); 2110 }); 2111 checkCCE(() -> { // receiver reference class 2112 boolean r = vh.weakCompareAndSetAcquire(Void.class, 0, true, true); 2113 }); 2114 checkWMTE(() -> { // expected reference class 2115 boolean r = vh.weakCompareAndSetAcquire(array, 0, Void.class, true); 2116 }); 2117 checkWMTE(() -> { // actual reference class 2118 boolean r = vh.weakCompareAndSetAcquire(array, 0, true, Void.class); 2119 }); 2120 checkWMTE(() -> { // receiver primitive class 2121 boolean r = vh.weakCompareAndSetAcquire(0, 0, true, true); 2122 }); 2123 checkWMTE(() -> { // index reference class 2124 boolean r = vh.weakCompareAndSetAcquire(array, Void.class, true, true); 2125 }); 2126 // Incorrect arity 2127 checkWMTE(() -> { // 0 2128 boolean r = vh.weakCompareAndSetAcquire(); 2129 }); 2130 checkWMTE(() -> { // > 2131 boolean r = vh.weakCompareAndSetAcquire(array, 0, true, true, Void.class); 2132 }); 2133 2134 2135 // WeakCompareAndSetRelease 2136 // Incorrect argument types 2137 checkNPE(() -> { // null receiver 2138 boolean r = vh.weakCompareAndSetRelease(null, 0, true, true); 2139 }); 2140 checkCCE(() -> { // receiver reference class 2141 boolean r = vh.weakCompareAndSetRelease(Void.class, 0, true, true); 2142 }); 2143 checkWMTE(() -> { // expected reference class 2144 boolean r = vh.weakCompareAndSetRelease(array, 0, Void.class, true); 2145 }); 2146 checkWMTE(() -> { // actual reference class 2147 boolean r = vh.weakCompareAndSetRelease(array, 0, true, Void.class); 2148 }); 2149 checkWMTE(() -> { // receiver primitive class 2150 boolean r = vh.weakCompareAndSetRelease(0, 0, true, true); 2151 }); 2152 checkWMTE(() -> { // index reference class 2153 boolean r = vh.weakCompareAndSetRelease(array, Void.class, true, true); 2154 }); 2155 // Incorrect arity 2156 checkWMTE(() -> { // 0 2157 boolean r = vh.weakCompareAndSetRelease(); 2158 }); 2159 checkWMTE(() -> { // > 2160 boolean r = vh.weakCompareAndSetRelease(array, 0, true, true, Void.class); 2161 }); 2162 2163 2164 // CompareAndExchange 2165 // Incorrect argument types 2166 checkNPE(() -> { // null receiver 2167 boolean x = (boolean) vh.compareAndExchange(null, 0, true, true); 2168 }); 2169 checkCCE(() -> { // array reference class 2170 boolean x = (boolean) vh.compareAndExchange(Void.class, 0, true, true); 2171 }); 2172 checkWMTE(() -> { // expected reference class 2173 boolean x = (boolean) vh.compareAndExchange(array, 0, Void.class, true); 2174 }); 2175 checkWMTE(() -> { // actual reference class 2176 boolean x = (boolean) vh.compareAndExchange(array, 0, true, Void.class); 2177 }); 2178 checkWMTE(() -> { // array primitive class 2179 boolean x = (boolean) vh.compareAndExchange(0, 0, true, true); 2180 }); 2181 checkWMTE(() -> { // index reference class 2182 boolean x = (boolean) vh.compareAndExchange(array, Void.class, true, true); 2183 }); 2184 // Incorrect return type 2185 checkWMTE(() -> { // reference class 2186 Void r = (Void) vh.compareAndExchange(array, 0, true, true); 2187 }); 2188 checkWMTE(() -> { // primitive class 2189 int x = (int) vh.compareAndExchange(array, 0, true, true); 2190 }); 2191 // Incorrect arity 2192 checkWMTE(() -> { // 0 2193 boolean x = (boolean) vh.compareAndExchange(); 2194 }); 2195 checkWMTE(() -> { // > 2196 boolean x = (boolean) vh.compareAndExchange(array, 0, true, true, Void.class); 2197 }); 2198 2199 2200 // CompareAndExchangeAcquire 2201 // Incorrect argument types 2202 checkNPE(() -> { // null receiver 2203 boolean x = (boolean) vh.compareAndExchangeAcquire(null, 0, true, true); 2204 }); 2205 checkCCE(() -> { // array reference class 2206 boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, 0, true, true); 2207 }); 2208 checkWMTE(() -> { // expected reference class 2209 boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, Void.class, true); 2210 }); 2211 checkWMTE(() -> { // actual reference class 2212 boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, true, Void.class); 2213 }); 2214 checkWMTE(() -> { // array primitive class 2215 boolean x = (boolean) vh.compareAndExchangeAcquire(0, 0, true, true); 2216 }); 2217 checkWMTE(() -> { // index reference class 2218 boolean x = (boolean) vh.compareAndExchangeAcquire(array, Void.class, true, true); 2219 }); 2220 // Incorrect return type 2221 checkWMTE(() -> { // reference class 2222 Void r = (Void) vh.compareAndExchangeAcquire(array, 0, true, true); 2223 }); 2224 checkWMTE(() -> { // primitive class 2225 int x = (int) vh.compareAndExchangeAcquire(array, 0, true, true); 2226 }); 2227 // Incorrect arity 2228 checkWMTE(() -> { // 0 2229 boolean x = (boolean) vh.compareAndExchangeAcquire(); 2230 }); 2231 checkWMTE(() -> { // > 2232 boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, true, true, Void.class); 2233 }); 2234 2235 2236 // CompareAndExchangeRelease 2237 // Incorrect argument types 2238 checkNPE(() -> { // null receiver 2239 boolean x = (boolean) vh.compareAndExchangeRelease(null, 0, true, true); 2240 }); 2241 checkCCE(() -> { // array reference class 2242 boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, 0, true, true); 2243 }); 2244 checkWMTE(() -> { // expected reference class 2245 boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, Void.class, true); 2246 }); 2247 checkWMTE(() -> { // actual reference class 2248 boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, true, Void.class); 2249 }); 2250 checkWMTE(() -> { // array primitive class 2251 boolean x = (boolean) vh.compareAndExchangeRelease(0, 0, true, true); 2252 }); 2253 checkWMTE(() -> { // index reference class 2254 boolean x = (boolean) vh.compareAndExchangeRelease(array, Void.class, true, true); 2255 }); 2256 // Incorrect return type 2257 checkWMTE(() -> { // reference class 2258 Void r = (Void) vh.compareAndExchangeRelease(array, 0, true, true); 2259 }); 2260 checkWMTE(() -> { // primitive class 2261 int x = (int) vh.compareAndExchangeRelease(array, 0, true, true); 2262 }); 2263 // Incorrect arity 2264 checkWMTE(() -> { // 0 2265 boolean x = (boolean) vh.compareAndExchangeRelease(); 2266 }); 2267 checkWMTE(() -> { // > 2268 boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, true, true, Void.class); 2269 }); 2270 2271 2272 // GetAndSet 2273 // Incorrect argument types 2274 checkNPE(() -> { // null array 2275 boolean x = (boolean) vh.getAndSet(null, 0, true); 2276 }); 2277 checkCCE(() -> { // array reference class 2278 boolean x = (boolean) vh.getAndSet(Void.class, 0, true); 2279 }); 2280 checkWMTE(() -> { // value reference class 2281 boolean x = (boolean) vh.getAndSet(array, 0, Void.class); 2282 }); 2283 checkWMTE(() -> { // reciarrayever primitive class 2284 boolean x = (boolean) vh.getAndSet(0, 0, true); 2285 }); 2286 checkWMTE(() -> { // index reference class 2287 boolean x = (boolean) vh.getAndSet(array, Void.class, true); 2288 }); 2289 // Incorrect return type 2290 checkWMTE(() -> { // reference class 2291 Void r = (Void) vh.getAndSet(array, 0, true); 2292 }); 2293 checkWMTE(() -> { // primitive class 2294 int x = (int) vh.getAndSet(array, 0, true); 2295 }); 2296 // Incorrect arity 2297 checkWMTE(() -> { // 0 2298 boolean x = (boolean) vh.getAndSet(); 2299 }); 2300 checkWMTE(() -> { // > 2301 boolean x = (boolean) vh.getAndSet(array, 0, true, Void.class); 2302 }); 2303 2304 2305 // GetAndSetAcquire 2306 // Incorrect argument types 2307 checkNPE(() -> { // null array 2308 boolean x = (boolean) vh.getAndSetAcquire(null, 0, true); 2309 }); 2310 checkCCE(() -> { // array reference class 2311 boolean x = (boolean) vh.getAndSetAcquire(Void.class, 0, true); 2312 }); 2313 checkWMTE(() -> { // value reference class 2314 boolean x = (boolean) vh.getAndSetAcquire(array, 0, Void.class); 2315 }); 2316 checkWMTE(() -> { // reciarrayever primitive class 2317 boolean x = (boolean) vh.getAndSetAcquire(0, 0, true); 2318 }); 2319 checkWMTE(() -> { // index reference class 2320 boolean x = (boolean) vh.getAndSetAcquire(array, Void.class, true); 2321 }); 2322 // Incorrect return type 2323 checkWMTE(() -> { // reference class 2324 Void r = (Void) vh.getAndSetAcquire(array, 0, true); 2325 }); 2326 checkWMTE(() -> { // primitive class 2327 int x = (int) vh.getAndSetAcquire(array, 0, true); 2328 }); 2329 // Incorrect arity 2330 checkWMTE(() -> { // 0 2331 boolean x = (boolean) vh.getAndSetAcquire(); 2332 }); 2333 checkWMTE(() -> { // > 2334 boolean x = (boolean) vh.getAndSetAcquire(array, 0, true, Void.class); 2335 }); 2336 2337 2338 // GetAndSetRelease 2339 // Incorrect argument types 2340 checkNPE(() -> { // null array 2341 boolean x = (boolean) vh.getAndSetRelease(null, 0, true); 2342 }); 2343 checkCCE(() -> { // array reference class 2344 boolean x = (boolean) vh.getAndSetRelease(Void.class, 0, true); 2345 }); 2346 checkWMTE(() -> { // value reference class 2347 boolean x = (boolean) vh.getAndSetRelease(array, 0, Void.class); 2348 }); 2349 checkWMTE(() -> { // reciarrayever primitive class 2350 boolean x = (boolean) vh.getAndSetRelease(0, 0, true); 2351 }); 2352 checkWMTE(() -> { // index reference class 2353 boolean x = (boolean) vh.getAndSetRelease(array, Void.class, true); 2354 }); 2355 // Incorrect return type 2356 checkWMTE(() -> { // reference class 2357 Void r = (Void) vh.getAndSetRelease(array, 0, true); 2358 }); 2359 checkWMTE(() -> { // primitive class 2360 int x = (int) vh.getAndSetRelease(array, 0, true); 2361 }); 2362 // Incorrect arity 2363 checkWMTE(() -> { // 0 2364 boolean x = (boolean) vh.getAndSetRelease(); 2365 }); 2366 checkWMTE(() -> { // > 2367 boolean x = (boolean) vh.getAndSetRelease(array, 0, true, Void.class); 2368 }); 2369 2370 2371 // GetAndBitwiseOr 2372 // Incorrect argument types 2373 checkNPE(() -> { // null array 2374 boolean x = (boolean) vh.getAndBitwiseOr(null, 0, true); 2375 }); 2376 checkCCE(() -> { // array reference class 2377 boolean x = (boolean) vh.getAndBitwiseOr(Void.class, 0, true); 2378 }); 2379 checkWMTE(() -> { // value reference class 2380 boolean x = (boolean) vh.getAndBitwiseOr(array, 0, Void.class); 2381 }); 2382 checkWMTE(() -> { // array primitive class 2383 boolean x = (boolean) vh.getAndBitwiseOr(0, 0, true); 2384 }); 2385 checkWMTE(() -> { // index reference class 2386 boolean x = (boolean) vh.getAndBitwiseOr(array, Void.class, true); 2387 }); 2388 // Incorrect return type 2389 checkWMTE(() -> { // reference class 2390 Void r = (Void) vh.getAndBitwiseOr(array, 0, true); 2391 }); 2392 checkWMTE(() -> { // primitive class 2393 int x = (int) vh.getAndBitwiseOr(array, 0, true); 2394 }); 2395 // Incorrect arity 2396 checkWMTE(() -> { // 0 2397 boolean x = (boolean) vh.getAndBitwiseOr(); 2398 }); 2399 checkWMTE(() -> { // > 2400 boolean x = (boolean) vh.getAndBitwiseOr(array, 0, true, Void.class); 2401 }); 2402 2403 2404 // GetAndBitwiseOrAcquire 2405 // Incorrect argument types 2406 checkNPE(() -> { // null array 2407 boolean x = (boolean) vh.getAndBitwiseOrAcquire(null, 0, true); 2408 }); 2409 checkCCE(() -> { // array reference class 2410 boolean x = (boolean) vh.getAndBitwiseOrAcquire(Void.class, 0, true); 2411 }); 2412 checkWMTE(() -> { // value reference class 2413 boolean x = (boolean) vh.getAndBitwiseOrAcquire(array, 0, Void.class); 2414 }); 2415 checkWMTE(() -> { // array primitive class 2416 boolean x = (boolean) vh.getAndBitwiseOrAcquire(0, 0, true); 2417 }); 2418 checkWMTE(() -> { // index reference class 2419 boolean x = (boolean) vh.getAndBitwiseOrAcquire(array, Void.class, true); 2420 }); 2421 // Incorrect return type 2422 checkWMTE(() -> { // reference class 2423 Void r = (Void) vh.getAndBitwiseOrAcquire(array, 0, true); 2424 }); 2425 checkWMTE(() -> { // primitive class 2426 int x = (int) vh.getAndBitwiseOrAcquire(array, 0, true); 2427 }); 2428 // Incorrect arity 2429 checkWMTE(() -> { // 0 2430 boolean x = (boolean) vh.getAndBitwiseOrAcquire(); 2431 }); 2432 checkWMTE(() -> { // > 2433 boolean x = (boolean) vh.getAndBitwiseOrAcquire(array, 0, true, Void.class); 2434 }); 2435 2436 2437 // GetAndBitwiseOrRelease 2438 // Incorrect argument types 2439 checkNPE(() -> { // null array 2440 boolean x = (boolean) vh.getAndBitwiseOrRelease(null, 0, true); 2441 }); 2442 checkCCE(() -> { // array reference class 2443 boolean x = (boolean) vh.getAndBitwiseOrRelease(Void.class, 0, true); 2444 }); 2445 checkWMTE(() -> { // value reference class 2446 boolean x = (boolean) vh.getAndBitwiseOrRelease(array, 0, Void.class); 2447 }); 2448 checkWMTE(() -> { // array primitive class 2449 boolean x = (boolean) vh.getAndBitwiseOrRelease(0, 0, true); 2450 }); 2451 checkWMTE(() -> { // index reference class 2452 boolean x = (boolean) vh.getAndBitwiseOrRelease(array, Void.class, true); 2453 }); 2454 // Incorrect return type 2455 checkWMTE(() -> { // reference class 2456 Void r = (Void) vh.getAndBitwiseOrRelease(array, 0, true); 2457 }); 2458 checkWMTE(() -> { // primitive class 2459 int x = (int) vh.getAndBitwiseOrRelease(array, 0, true); 2460 }); 2461 // Incorrect arity 2462 checkWMTE(() -> { // 0 2463 boolean x = (boolean) vh.getAndBitwiseOrRelease(); 2464 }); 2465 checkWMTE(() -> { // > 2466 boolean x = (boolean) vh.getAndBitwiseOrRelease(array, 0, true, Void.class); 2467 }); 2468 2469 2470 // GetAndBitwiseAnd 2471 // Incorrect argument types 2472 checkNPE(() -> { // null array 2473 boolean x = (boolean) vh.getAndBitwiseAnd(null, 0, true); 2474 }); 2475 checkCCE(() -> { // array reference class 2476 boolean x = (boolean) vh.getAndBitwiseAnd(Void.class, 0, true); 2477 }); 2478 checkWMTE(() -> { // value reference class 2479 boolean x = (boolean) vh.getAndBitwiseAnd(array, 0, Void.class); 2480 }); 2481 checkWMTE(() -> { // array primitive class 2482 boolean x = (boolean) vh.getAndBitwiseAnd(0, 0, true); 2483 }); 2484 checkWMTE(() -> { // index reference class 2485 boolean x = (boolean) vh.getAndBitwiseAnd(array, Void.class, true); 2486 }); 2487 // Incorrect return type 2488 checkWMTE(() -> { // reference class 2489 Void r = (Void) vh.getAndBitwiseAnd(array, 0, true); 2490 }); 2491 checkWMTE(() -> { // primitive class 2492 int x = (int) vh.getAndBitwiseAnd(array, 0, true); 2493 }); 2494 // Incorrect arity 2495 checkWMTE(() -> { // 0 2496 boolean x = (boolean) vh.getAndBitwiseAnd(); 2497 }); 2498 checkWMTE(() -> { // > 2499 boolean x = (boolean) vh.getAndBitwiseAnd(array, 0, true, Void.class); 2500 }); 2501 2502 2503 // GetAndBitwiseAndAcquire 2504 // Incorrect argument types 2505 checkNPE(() -> { // null array 2506 boolean x = (boolean) vh.getAndBitwiseAndAcquire(null, 0, true); 2507 }); 2508 checkCCE(() -> { // array reference class 2509 boolean x = (boolean) vh.getAndBitwiseAndAcquire(Void.class, 0, true); 2510 }); 2511 checkWMTE(() -> { // value reference class 2512 boolean x = (boolean) vh.getAndBitwiseAndAcquire(array, 0, Void.class); 2513 }); 2514 checkWMTE(() -> { // array primitive class 2515 boolean x = (boolean) vh.getAndBitwiseAndAcquire(0, 0, true); 2516 }); 2517 checkWMTE(() -> { // index reference class 2518 boolean x = (boolean) vh.getAndBitwiseAndAcquire(array, Void.class, true); 2519 }); 2520 // Incorrect return type 2521 checkWMTE(() -> { // reference class 2522 Void r = (Void) vh.getAndBitwiseAndAcquire(array, 0, true); 2523 }); 2524 checkWMTE(() -> { // primitive class 2525 int x = (int) vh.getAndBitwiseAndAcquire(array, 0, true); 2526 }); 2527 // Incorrect arity 2528 checkWMTE(() -> { // 0 2529 boolean x = (boolean) vh.getAndBitwiseAndAcquire(); 2530 }); 2531 checkWMTE(() -> { // > 2532 boolean x = (boolean) vh.getAndBitwiseAndAcquire(array, 0, true, Void.class); 2533 }); 2534 2535 2536 // GetAndBitwiseAndRelease 2537 // Incorrect argument types 2538 checkNPE(() -> { // null array 2539 boolean x = (boolean) vh.getAndBitwiseAndRelease(null, 0, true); 2540 }); 2541 checkCCE(() -> { // array reference class 2542 boolean x = (boolean) vh.getAndBitwiseAndRelease(Void.class, 0, true); 2543 }); 2544 checkWMTE(() -> { // value reference class 2545 boolean x = (boolean) vh.getAndBitwiseAndRelease(array, 0, Void.class); 2546 }); 2547 checkWMTE(() -> { // array primitive class 2548 boolean x = (boolean) vh.getAndBitwiseAndRelease(0, 0, true); 2549 }); 2550 checkWMTE(() -> { // index reference class 2551 boolean x = (boolean) vh.getAndBitwiseAndRelease(array, Void.class, true); 2552 }); 2553 // Incorrect return type 2554 checkWMTE(() -> { // reference class 2555 Void r = (Void) vh.getAndBitwiseAndRelease(array, 0, true); 2556 }); 2557 checkWMTE(() -> { // primitive class 2558 int x = (int) vh.getAndBitwiseAndRelease(array, 0, true); 2559 }); 2560 // Incorrect arity 2561 checkWMTE(() -> { // 0 2562 boolean x = (boolean) vh.getAndBitwiseAndRelease(); 2563 }); 2564 checkWMTE(() -> { // > 2565 boolean x = (boolean) vh.getAndBitwiseAndRelease(array, 0, true, Void.class); 2566 }); 2567 2568 2569 // GetAndBitwiseXor 2570 // Incorrect argument types 2571 checkNPE(() -> { // null array 2572 boolean x = (boolean) vh.getAndBitwiseXor(null, 0, true); 2573 }); 2574 checkCCE(() -> { // array reference class 2575 boolean x = (boolean) vh.getAndBitwiseXor(Void.class, 0, true); 2576 }); 2577 checkWMTE(() -> { // value reference class 2578 boolean x = (boolean) vh.getAndBitwiseXor(array, 0, Void.class); 2579 }); 2580 checkWMTE(() -> { // array primitive class 2581 boolean x = (boolean) vh.getAndBitwiseXor(0, 0, true); 2582 }); 2583 checkWMTE(() -> { // index reference class 2584 boolean x = (boolean) vh.getAndBitwiseXor(array, Void.class, true); 2585 }); 2586 // Incorrect return type 2587 checkWMTE(() -> { // reference class 2588 Void r = (Void) vh.getAndBitwiseXor(array, 0, true); 2589 }); 2590 checkWMTE(() -> { // primitive class 2591 int x = (int) vh.getAndBitwiseXor(array, 0, true); 2592 }); 2593 // Incorrect arity 2594 checkWMTE(() -> { // 0 2595 boolean x = (boolean) vh.getAndBitwiseXor(); 2596 }); 2597 checkWMTE(() -> { // > 2598 boolean x = (boolean) vh.getAndBitwiseXor(array, 0, true, Void.class); 2599 }); 2600 2601 2602 // GetAndBitwiseXorAcquire 2603 // Incorrect argument types 2604 checkNPE(() -> { // null array 2605 boolean x = (boolean) vh.getAndBitwiseXorAcquire(null, 0, true); 2606 }); 2607 checkCCE(() -> { // array reference class 2608 boolean x = (boolean) vh.getAndBitwiseXorAcquire(Void.class, 0, true); 2609 }); 2610 checkWMTE(() -> { // value reference class 2611 boolean x = (boolean) vh.getAndBitwiseXorAcquire(array, 0, Void.class); 2612 }); 2613 checkWMTE(() -> { // array primitive class 2614 boolean x = (boolean) vh.getAndBitwiseXorAcquire(0, 0, true); 2615 }); 2616 checkWMTE(() -> { // index reference class 2617 boolean x = (boolean) vh.getAndBitwiseXorAcquire(array, Void.class, true); 2618 }); 2619 // Incorrect return type 2620 checkWMTE(() -> { // reference class 2621 Void r = (Void) vh.getAndBitwiseXorAcquire(array, 0, true); 2622 }); 2623 checkWMTE(() -> { // primitive class 2624 int x = (int) vh.getAndBitwiseXorAcquire(array, 0, true); 2625 }); 2626 // Incorrect arity 2627 checkWMTE(() -> { // 0 2628 boolean x = (boolean) vh.getAndBitwiseXorAcquire(); 2629 }); 2630 checkWMTE(() -> { // > 2631 boolean x = (boolean) vh.getAndBitwiseXorAcquire(array, 0, true, Void.class); 2632 }); 2633 2634 2635 // GetAndBitwiseXorRelease 2636 // Incorrect argument types 2637 checkNPE(() -> { // null array 2638 boolean x = (boolean) vh.getAndBitwiseXorRelease(null, 0, true); 2639 }); 2640 checkCCE(() -> { // array reference class 2641 boolean x = (boolean) vh.getAndBitwiseXorRelease(Void.class, 0, true); 2642 }); 2643 checkWMTE(() -> { // value reference class 2644 boolean x = (boolean) vh.getAndBitwiseXorRelease(array, 0, Void.class); 2645 }); 2646 checkWMTE(() -> { // array primitive class 2647 boolean x = (boolean) vh.getAndBitwiseXorRelease(0, 0, true); 2648 }); 2649 checkWMTE(() -> { // index reference class 2650 boolean x = (boolean) vh.getAndBitwiseXorRelease(array, Void.class, true); 2651 }); 2652 // Incorrect return type 2653 checkWMTE(() -> { // reference class 2654 Void r = (Void) vh.getAndBitwiseXorRelease(array, 0, true); 2655 }); 2656 checkWMTE(() -> { // primitive class 2657 int x = (int) vh.getAndBitwiseXorRelease(array, 0, true); 2658 }); 2659 // Incorrect arity 2660 checkWMTE(() -> { // 0 2661 boolean x = (boolean) vh.getAndBitwiseXorRelease(); 2662 }); 2663 checkWMTE(() -> { // > 2664 boolean x = (boolean) vh.getAndBitwiseXorRelease(array, 0, true, Void.class); 2665 }); 2666 } 2667 2668 static void testArrayWrongMethodType(Handles hs) throws Throwable { 2669 boolean[] array = new boolean[10]; 2670 Arrays.fill(array, true); 2671 2672 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 2673 // Incorrect argument types 2674 checkNPE(() -> { // null array 2675 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class)). 2676 invokeExact((boolean[]) null, 0); 2677 }); 2678 hs.checkWMTEOrCCE(() -> { // array reference class 2679 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class)). 2680 invokeExact(Void.class, 0); 2681 }); 2682 checkWMTE(() -> { // array primitive class 2683 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class)). 2684 invokeExact(0, 0); 2685 }); 2686 checkWMTE(() -> { // index reference class 2687 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class)). 2688 invokeExact(array, Void.class); 2689 }); 2690 // Incorrect return type 2691 checkWMTE(() -> { // reference class 2692 Void x = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class)). 2693 invokeExact(array, 0); 2694 }); 2695 checkWMTE(() -> { // primitive class 2696 int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class)). 2697 invokeExact(array, 0); 2698 }); 2699 // Incorrect arity 2700 checkWMTE(() -> { // 0 2701 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 2702 invokeExact(); 2703 }); 2704 checkWMTE(() -> { // > 2705 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class)). 2706 invokeExact(array, 0, Void.class); 2707 }); 2708 } 2709 2710 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 2711 // Incorrect argument types 2712 checkNPE(() -> { // null array 2713 hs.get(am, methodType(void.class, boolean[].class, int.class, boolean.class)). 2714 invokeExact((boolean[]) null, 0, true); 2715 }); 2716 hs.checkWMTEOrCCE(() -> { // array reference class 2717 hs.get(am, methodType(void.class, Class.class, int.class, boolean.class)). 2718 invokeExact(Void.class, 0, true); 2719 }); 2720 checkWMTE(() -> { // value reference class 2721 hs.get(am, methodType(void.class, boolean[].class, int.class, Class.class)). 2722 invokeExact(array, 0, Void.class); 2723 }); 2724 checkWMTE(() -> { // receiver primitive class 2725 hs.get(am, methodType(void.class, int.class, int.class, boolean.class)). 2726 invokeExact(0, 0, true); 2727 }); 2728 checkWMTE(() -> { // index reference class 2729 hs.get(am, methodType(void.class, boolean[].class, Class.class, boolean.class)). 2730 invokeExact(array, Void.class, true); 2731 }); 2732 // Incorrect arity 2733 checkWMTE(() -> { // 0 2734 hs.get(am, methodType(void.class)). 2735 invokeExact(); 2736 }); 2737 checkWMTE(() -> { // > 2738 hs.get(am, methodType(void.class, boolean[].class, int.class, Class.class)). 2739 invokeExact(array, 0, true, Void.class); 2740 }); 2741 } 2742 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 2743 // Incorrect argument types 2744 checkNPE(() -> { // null receiver 2745 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class)). 2746 invokeExact((boolean[]) null, 0, true, true); 2747 }); 2748 hs.checkWMTEOrCCE(() -> { // receiver reference class 2749 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class, boolean.class)). 2750 invokeExact(Void.class, 0, true, true); 2751 }); 2752 checkWMTE(() -> { // expected reference class 2753 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class, boolean.class)). 2754 invokeExact(array, 0, Void.class, true); 2755 }); 2756 checkWMTE(() -> { // actual reference class 2757 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). 2758 invokeExact(array, 0, true, Void.class); 2759 }); 2760 checkWMTE(() -> { // receiver primitive class 2761 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class, boolean.class)). 2762 invokeExact(0, 0, true, true); 2763 }); 2764 checkWMTE(() -> { // index reference class 2765 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class, boolean.class)). 2766 invokeExact(array, Void.class, true, true); 2767 }); 2768 // Incorrect arity 2769 checkWMTE(() -> { // 0 2770 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 2771 invokeExact(); 2772 }); 2773 checkWMTE(() -> { // > 2774 boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class, Class.class)). 2775 invokeExact(array, 0, true, true, Void.class); 2776 }); 2777 } 2778 2779 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 2780 // Incorrect argument types 2781 checkNPE(() -> { // null receiver 2782 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class)). 2783 invokeExact((boolean[]) null, 0, true, true); 2784 }); 2785 hs.checkWMTEOrCCE(() -> { // array reference class 2786 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class, boolean.class)). 2787 invokeExact(Void.class, 0, true, true); 2788 }); 2789 checkWMTE(() -> { // expected reference class 2790 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class, boolean.class)). 2791 invokeExact(array, 0, Void.class, true); 2792 }); 2793 checkWMTE(() -> { // actual reference class 2794 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). 2795 invokeExact(array, 0, true, Void.class); 2796 }); 2797 checkWMTE(() -> { // array primitive class 2798 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class, boolean.class)). 2799 invokeExact(0, 0, true, true); 2800 }); 2801 checkWMTE(() -> { // index reference class 2802 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class, boolean.class)). 2803 invokeExact(array, Void.class, true, true); 2804 }); 2805 // Incorrect return type 2806 checkWMTE(() -> { // reference class 2807 Void r = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class, boolean.class, boolean.class)). 2808 invokeExact(array, 0, true, true); 2809 }); 2810 checkWMTE(() -> { // primitive class 2811 int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class, boolean.class, boolean.class)). 2812 invokeExact(array, 0, true, true); 2813 }); 2814 // Incorrect arity 2815 checkWMTE(() -> { // 0 2816 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 2817 invokeExact(); 2818 }); 2819 checkWMTE(() -> { // > 2820 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class, Class.class)). 2821 invokeExact(array, 0, true, true, Void.class); 2822 }); 2823 } 2824 2825 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 2826 // Incorrect argument types 2827 checkNPE(() -> { // null array 2828 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class)). 2829 invokeExact((boolean[]) null, 0, true); 2830 }); 2831 hs.checkWMTEOrCCE(() -> { // array reference class 2832 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class)). 2833 invokeExact(Void.class, 0, true); 2834 }); 2835 checkWMTE(() -> { // value reference class 2836 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class)). 2837 invokeExact(array, 0, Void.class); 2838 }); 2839 checkWMTE(() -> { // array primitive class 2840 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class)). 2841 invokeExact(0, 0, true); 2842 }); 2843 checkWMTE(() -> { // index reference class 2844 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class)). 2845 invokeExact(array, Void.class, true); 2846 }); 2847 // Incorrect return type 2848 checkWMTE(() -> { // reference class 2849 Void r = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class, boolean.class)). 2850 invokeExact(array, 0, true); 2851 }); 2852 checkWMTE(() -> { // primitive class 2853 int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class, boolean.class)). 2854 invokeExact(array, 0, true); 2855 }); 2856 // Incorrect arity 2857 checkWMTE(() -> { // 0 2858 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 2859 invokeExact(); 2860 }); 2861 checkWMTE(() -> { // > 2862 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). 2863 invokeExact(array, 0, true, Void.class); 2864 }); 2865 } 2866 2867 2868 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) { 2869 // Incorrect argument types 2870 checkNPE(() -> { // null array 2871 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class)). 2872 invokeExact((boolean[]) null, 0, true); 2873 }); 2874 hs.checkWMTEOrCCE(() -> { // array reference class 2875 boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class)). 2876 invokeExact(Void.class, 0, true); 2877 }); 2878 checkWMTE(() -> { // value reference class 2879 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class)). 2880 invokeExact(array, 0, Void.class); 2881 }); 2882 checkWMTE(() -> { // array primitive class 2883 boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class)). 2884 invokeExact(0, 0, true); 2885 }); 2886 checkWMTE(() -> { // index reference class 2887 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class)). 2888 invokeExact(array, Void.class, true); 2889 }); 2890 // Incorrect return type 2891 checkWMTE(() -> { // reference class 2892 Void r = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class, boolean.class)). 2893 invokeExact(array, 0, true); 2894 }); 2895 checkWMTE(() -> { // primitive class 2896 int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class, boolean.class)). 2897 invokeExact(array, 0, true); 2898 }); 2899 // Incorrect arity 2900 checkWMTE(() -> { // 0 2901 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 2902 invokeExact(); 2903 }); 2904 checkWMTE(() -> { // > 2905 boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). 2906 invokeExact(array, 0, true, Void.class); 2907 }); 2908 } 2909 } 2910 }