--- a/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java Thu Jan 25 14:47:27 2018 +0000
+++ b/test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java Fri Jan 26 09:35:15 2018 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -139,6 +139,9 @@
"read write", bav, vh, h -> testArrayReadWrite(bas, h),
true));
cases.add(new VarHandleSourceAccessTestCase(
+ "null array", bav, vh, h -> testArrayNPE(bas, h),
+ false));
+ cases.add(new VarHandleSourceAccessTestCase(
"unsupported", bav, vh, h -> testArrayUnsupported(bas, h),
false));
cases.add(new VarHandleSourceAccessTestCase(
@@ -163,6 +166,9 @@
}
cases.add(new VarHandleSourceAccessTestCase(
+ "null buffer", bav, vh, h -> testArrayNPE(bbs, h),
+ false));
+ cases.add(new VarHandleSourceAccessTestCase(
"unsupported", bav, vh, h -> testArrayUnsupported(bbs, h),
false));
cases.add(new VarHandleSourceAccessTestCase(
@@ -192,6 +198,266 @@
}
+ static void testArrayNPE(ByteArraySource bs, VarHandleSource vhs) {
+ VarHandle vh = vhs.s;
+ byte[] array = null;
+ int ci = 1;
+
+ checkNPE(() -> {
+ int x = (int) vh.get(array, ci);
+ });
+
+ checkNPE(() -> {
+ vh.set(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getVolatile(array, ci);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getAcquire(array, ci);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getOpaque(array, ci);
+ });
+
+ checkNPE(() -> {
+ vh.setVolatile(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ vh.setRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ vh.setOpaque(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.compareAndSet(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchange(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchangeAcquire(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchangeRelease(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetPlain(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSet(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetRelease(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSet(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSetAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSetRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAdd(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAddAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAddRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOrAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOrRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAnd(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAndAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAndRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXor(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXorAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXorRelease(array, ci, VALUE_1);
+ });
+ }
+
+ static void testArrayNPE(ByteBufferSource bs, VarHandleSource vhs) {
+ VarHandle vh = vhs.s;
+ ByteBuffer array = null;
+ int ci = 1;
+
+ checkNPE(() -> {
+ int x = (int) vh.get(array, ci);
+ });
+
+ checkNPE(() -> {
+ vh.set(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getVolatile(array, ci);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getAcquire(array, ci);
+ });
+
+ checkNPE(() -> {
+ int x = (int) vh.getOpaque(array, ci);
+ });
+
+ checkNPE(() -> {
+ vh.setVolatile(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ vh.setRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ vh.setOpaque(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.compareAndSet(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchange(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchangeAcquire(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int r = (int) vh.compareAndExchangeRelease(array, ci, VALUE_2, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetPlain(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSet(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ boolean r = vh.weakCompareAndSetRelease(array, ci, VALUE_1, VALUE_2);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSet(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSetAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndSetRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAdd(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAddAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndAddRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOrAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseOrRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAnd(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAndAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseAndRelease(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXor(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXorAcquire(array, ci, VALUE_1);
+ });
+
+ checkNPE(() -> {
+ int o = (int) vh.getAndBitwiseXorRelease(array, ci, VALUE_1);
+ });
+ }
+
static void testArrayUnsupported(ByteArraySource bs, VarHandleSource vhs) {
VarHandle vh = vhs.s;
byte[] array = bs.s;