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