--- old/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeBoolean.java 2016-05-31 12:16:49.246363652 +0300 +++ new/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeBoolean.java 2016-05-31 12:16:49.150364001 +0300 @@ -322,6 +322,263 @@ }); + // CompareAndSet + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.compareAndSet(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.compareAndSet(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.compareAndSet(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.compareAndSet(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.compareAndSet(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.compareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.compareAndSet(recv, true, true, Void.class); + }); + + + // WeakCompareAndSet + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSet(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSet(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSet(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSet(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSet(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSet(recv, true, true, Void.class); + }); + + + // WeakCompareAndSetVolatile + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetVolatile(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetVolatile(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetVolatile(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetVolatile(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetVolatile(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetVolatile(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetVolatile(recv, true, true, Void.class); + }); + + + // WeakCompareAndSetAcquire + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetAcquire(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetAcquire(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetAcquire(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetAcquire(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetAcquire(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetAcquire(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetAcquire(recv, true, true, Void.class); + }); + + + // WeakCompareAndSetRelease + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetRelease(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetRelease(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetRelease(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetRelease(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetRelease(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetRelease(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetRelease(recv, true, true, Void.class); + }); + + + // CompareAndExchangeVolatile + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeVolatile(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(recv, true, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) vh.compareAndExchangeVolatile(0, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeVolatile(recv, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeVolatile(recv, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeVolatile(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeVolatile(recv, true, true, Void.class); + }); + + + // CompareAndExchangeVolatileAcquire + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeAcquire(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(recv, true, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) vh.compareAndExchangeAcquire(0, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeAcquire(recv, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeAcquire(recv, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeAcquire(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeAcquire(recv, true, true, Void.class); + }); + + + // CompareAndExchangeRelease + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeRelease(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeRelease(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeRelease(recv, true, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) vh.compareAndExchangeRelease(0, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeRelease(recv, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeRelease(recv, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeRelease(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeRelease(recv, true, true, Void.class); + }); + + + // GetAndSet + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.getAndSet(null, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) vh.getAndSet(Void.class, true); + }); + checkWMTE(() -> { // value reference class + boolean x = (boolean) vh.getAndSet(recv, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) vh.getAndSet(0, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.getAndSet(recv, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.getAndSet(recv, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.getAndSet(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.getAndSet(recv, true, Void.class); + }); } @@ -389,6 +646,116 @@ }); } + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = (boolean) hs.get(am, methodType(boolean.class, Void.class, boolean.class, boolean.class)). + invoke(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class, boolean.class)). + invoke(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class, boolean.class)). + invoke(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, Class.class)). + invoke(recv, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class , boolean.class, boolean.class)). + invoke(0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class, Class.class)). + invoke(recv, true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { + checkNPE(() -> { // null receiver + boolean x = (boolean) hs.get(am, methodType(boolean.class, Void.class, boolean.class, boolean.class)). + invoke(null, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class, boolean.class)). + invoke(Void.class, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class, boolean.class)). + invoke(recv, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, Class.class)). + invoke(recv, true, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class , boolean.class, boolean.class)). + invoke(0, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class , boolean.class, boolean.class)). + invoke(recv, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class , boolean.class, boolean.class)). + invoke(recv, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class, boolean.class, Class.class)). + invoke(recv, true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { + checkNPE(() -> { // null receiver + boolean x = (boolean) hs.get(am, methodType(boolean.class, Void.class, boolean.class)). + invoke(null, true); + }); + checkCCE(() -> { // receiver reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). + invoke(Void.class, true); + }); + checkWMTE(() -> { // value reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, Class.class)). + invoke(recv, Void.class); + }); + checkWMTE(() -> { // reciever primitive class + boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, boolean.class)). + invoke(0, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). + invoke(recv, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). + invoke(recv, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeBoolean.class, boolean.class)). + invoke(recv, true, Void.class); + }); + } } @@ -503,6 +870,182 @@ }); + // CompareAndSet + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = vh.compareAndSet(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.compareAndSet(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.compareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.compareAndSet(true, true, Void.class); + }); + + + // WeakCompareAndSet + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSet(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSet(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSet(true, true, Void.class); + }); + + + // WeakCompareAndSetVolatile + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetVolatile(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetVolatile(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetVolatile(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetVolatile(true, true, Void.class); + }); + + + // WeakCompareAndSetAcquire + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetAcquire(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetAcquire(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetAcquire(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetAcquire(true, true, Void.class); + }); + + + // WeakCompareAndSetRelease + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetRelease(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetRelease(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetRelease(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetRelease(true, true, Void.class); + }); + + + // CompareAndExchangeVolatile + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(true, Void.class); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeVolatile(true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeVolatile(true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeVolatile(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeVolatile(true, true, Void.class); + }); + + + // CompareAndExchangeAcquire + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(true, Void.class); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeAcquire(true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeAcquire(true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeAcquire(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeAcquire(true, true, Void.class); + }); + + + // CompareAndExchangeRelease + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeRelease(true, Void.class); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeRelease(true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeRelease(true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeRelease(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeRelease(true, true, Void.class); + }); + + + // GetAndSet + // Incorrect argument types + checkWMTE(() -> { // value reference class + boolean x = (boolean) vh.getAndSet(Void.class); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.getAndSet(true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.getAndSet(true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.getAndSet(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.getAndSet(true, Void.class); + }); } @@ -526,18 +1069,94 @@ }); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { + for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { + checkWMTE(() -> { // value reference class + hs.get(am, methodType(void.class, Class.class)). + invoke(Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + hs.get(am, methodType(void.class)). + invoke(); + }); + checkWMTE(() -> { // > + hs.get(am, methodType(void.class, boolean.class, Class.class)). + invoke(true, Void.class); + }); + } + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). + invoke(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). + invoke(true, Void.class); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean.class, boolean.class, Class.class)). + invoke(true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { + // Incorrect argument types + checkWMTE(() -> { // expected reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, boolean.class)). + invoke(Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). + invoke(true, Void.class); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, boolean.class, boolean.class)). + invoke(true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, boolean.class, boolean.class)). + invoke(true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, boolean.class, Class.class)). + invoke(true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { + // Incorrect argument types checkWMTE(() -> { // value reference class - hs.get(am, methodType(void.class, Class.class)). + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class)). invoke(Void.class); }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, boolean.class)). + invoke(true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, boolean.class)). + invoke(true); + }); // Incorrect arity checkWMTE(() -> { // 0 - hs.get(am, methodType(void.class)). + boolean x = (boolean) hs.get(am, methodType(boolean.class)). invoke(); }); checkWMTE(() -> { // > - hs.get(am, methodType(void.class, boolean.class, Class.class)). + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean.class, Class.class)). invoke(true, Void.class); }); } @@ -773,6 +1392,290 @@ }); + // CompareAndSet + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.compareAndSet(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.compareAndSet(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.compareAndSet(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.compareAndSet(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.compareAndSet(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = vh.compareAndSet(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.compareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.compareAndSet(array, 0, true, true, Void.class); + }); + + + // WeakCompareAndSet + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSet(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSet(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSet(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSet(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSet(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = vh.weakCompareAndSet(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSet(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSet(array, 0, true, true, Void.class); + }); + + + // WeakCompareAndSetVolatile + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetVolatile(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetVolatile(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetVolatile(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetVolatile(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetVolatile(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = vh.weakCompareAndSetVolatile(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetVolatile(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetVolatile(array, 0, true, true, Void.class); + }); + + + // WeakCompareAndSetAcquire + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetAcquire(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetAcquire(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetAcquire(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetAcquire(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetAcquire(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = vh.weakCompareAndSetAcquire(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetAcquire(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetAcquire(array, 0, true, true, Void.class); + }); + + + // WeakCompareAndSetRelease + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = vh.weakCompareAndSetRelease(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = vh.weakCompareAndSetRelease(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = vh.weakCompareAndSetRelease(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = vh.weakCompareAndSetRelease(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = vh.weakCompareAndSetRelease(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = vh.weakCompareAndSetRelease(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = vh.weakCompareAndSetRelease(); + }); + checkWMTE(() -> { // > + boolean r = vh.weakCompareAndSetRelease(array, 0, true, true, Void.class); + }); + + + // CompareAndExchangeVolatile + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeVolatile(null, 0, true, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(array, 0, true, Void.class); + }); + checkWMTE(() -> { // array primitive class + boolean x = (boolean) vh.compareAndExchangeVolatile(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) vh.compareAndExchangeVolatile(array, Void.class, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeVolatile(array, 0, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeVolatile(array, 0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeVolatile(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeVolatile(array, 0, true, true, Void.class); + }); + + + // CompareAndExchangeAcquire + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeAcquire(null, 0, true, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, true, Void.class); + }); + checkWMTE(() -> { // array primitive class + boolean x = (boolean) vh.compareAndExchangeAcquire(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) vh.compareAndExchangeAcquire(array, Void.class, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeAcquire(array, 0, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeAcquire(array, 0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeAcquire(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, true, true, Void.class); + }); + + + // CompareAndExchangeRelease + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) vh.compareAndExchangeRelease(null, 0, true, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) vh.compareAndExchangeRelease(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, true, Void.class); + }); + checkWMTE(() -> { // array primitive class + boolean x = (boolean) vh.compareAndExchangeRelease(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) vh.compareAndExchangeRelease(array, Void.class, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.compareAndExchangeRelease(array, 0, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.compareAndExchangeRelease(array, 0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.compareAndExchangeRelease(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, true, true, Void.class); + }); + + + // GetAndSet + // Incorrect argument types + checkNPE(() -> { // null array + boolean x = (boolean) vh.getAndSet(null, 0, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) vh.getAndSet(Void.class, 0, true); + }); + checkWMTE(() -> { // value reference class + boolean x = (boolean) vh.getAndSet(array, 0, Void.class); + }); + checkWMTE(() -> { // reciarrayever primitive class + boolean x = (boolean) vh.getAndSet(0, 0, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) vh.getAndSet(array, Void.class, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) vh.getAndSet(array, 0, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) vh.getAndSet(array, 0, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) vh.getAndSet(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) vh.getAndSet(array, 0, true, Void.class); + }); } @@ -850,6 +1753,130 @@ invoke(array, 0, true, Void.class); }); } + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean r = (boolean) hs.get(am, methodType(boolean.class, Void.class, int.class, boolean.class, boolean.class)). + invoke(null, 0, true, true); + }); + checkCCE(() -> { // receiver reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class, boolean.class)). + invoke(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class, boolean.class)). + invoke(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). + invoke(array, 0, true, Void.class); + }); + checkWMTE(() -> { // receiver primitive class + boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class, boolean.class)). + invoke(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class, boolean.class)). + invoke(array, Void.class, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean r = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean r = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class, Class.class)). + invoke(array, 0, true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { + // Incorrect argument types + checkNPE(() -> { // null receiver + boolean x = (boolean) hs.get(am, methodType(boolean.class, Void.class, int.class, boolean.class, boolean.class)). + invoke(null, 0, true, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class, boolean.class)). + invoke(Void.class, 0, true, true); + }); + checkWMTE(() -> { // expected reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class, boolean.class)). + invoke(array, 0, Void.class, true); + }); + checkWMTE(() -> { // actual reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). + invoke(array, 0, true, Void.class); + }); + checkWMTE(() -> { // array primitive class + boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class, boolean.class)). + invoke(0, 0, true, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class, boolean.class)). + invoke(array, Void.class, true, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class, boolean.class, boolean.class)). + invoke(array, 0, true, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class, boolean.class, boolean.class)). + invoke(array, 0, true, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, boolean.class, Class.class)). + invoke(array, 0, true, true, Void.class); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { + // Incorrect argument types + checkNPE(() -> { // null array + boolean x = (boolean) hs.get(am, methodType(boolean.class, Void.class, int.class, boolean.class)). + invoke(null, 0, true); + }); + checkCCE(() -> { // array reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, boolean.class)). + invoke(Void.class, 0, true); + }); + checkWMTE(() -> { // value reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, Class.class)). + invoke(array, 0, Void.class); + }); + checkWMTE(() -> { // array primitive class + boolean x = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, boolean.class)). + invoke(0, 0, true); + }); + checkWMTE(() -> { // index reference class + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, Class.class, boolean.class)). + invoke(array, Void.class, true); + }); + // Incorrect return type + checkWMTE(() -> { // reference class + Void r = (Void) hs.get(am, methodType(Void.class, boolean[].class, int.class, boolean.class)). + invoke(array, 0, true); + }); + checkWMTE(() -> { // primitive class + int x = (int) hs.get(am, methodType(int.class, boolean[].class, int.class, boolean.class)). + invoke(array, 0, true); + }); + // Incorrect arity + checkWMTE(() -> { // 0 + boolean x = (boolean) hs.get(am, methodType(boolean.class)). + invoke(); + }); + checkWMTE(() -> { // > + boolean x = (boolean) hs.get(am, methodType(boolean.class, boolean[].class, int.class, boolean.class, Class.class)). + invoke(array, 0, true, Void.class); + }); + } } }