@@ -172,6 +172,18 @@ public MyClass(int x) {
172
172
}
173
173
}
174
174
175
+ @ ImplicitlyConstructible
176
+ @ LooselyConsistentValue
177
+ static value class IntAndArrayOop {
178
+ int i ;
179
+ MyClass [] array ;
180
+
181
+ public IntAndArrayOop (int i , MyClass [] array ) {
182
+ this .i = i ;
183
+ this .array = array ;
184
+ }
185
+ }
186
+
175
187
public static void testWrite0 (OneByte [] array , int i , OneByte val ) {
176
188
array [i ] = val ;
177
189
}
@@ -691,6 +703,11 @@ public static void main(String[] args) {
691
703
ByteAndOop [] nullableArray5 = new ByteAndOop [3 ];
692
704
ByteAndOop [] nullableAtomicArray5 = (ByteAndOop [])ValueClass .newNullableAtomicArray (ByteAndOop .class , 3 );
693
705
706
+ IntAndArrayOop [] nullFreeArray6 = (IntAndArrayOop [])ValueClass .newNullRestrictedArray (IntAndArrayOop .class , 3 );
707
+ IntAndArrayOop [] nullFreeAtomicArray6 = (IntAndArrayOop [])ValueClass .newNullRestrictedAtomicArray (IntAndArrayOop .class , 3 );
708
+ IntAndArrayOop [] nullableArray6 = new IntAndArrayOop [3 ];
709
+ IntAndArrayOop [] nullableAtomicArray6 = (IntAndArrayOop [])ValueClass .newNullableAtomicArray (IntAndArrayOop .class , 3 );
710
+
694
711
// Write canary values to detect out of bound writes
695
712
nullFreeArray0 [0 ] = CANARY0 ;
696
713
nullFreeArray0 [2 ] = CANARY0 ;
@@ -870,6 +887,28 @@ public static void main(String[] args) {
870
887
testWrite5 (nullableArray5 , 1 , val5 );
871
888
testWrite5 (nullableAtomicArray5 , 1 , val5 );
872
889
890
+ IntAndArrayOop val6 = new IntAndArrayOop (i , new MyClass [1 ]);
891
+ nullFreeArray6 [1 ] = val6 ;
892
+ nullFreeArray6 [2 ] = nullFreeArray6 [1 ];
893
+ nullFreeAtomicArray6 [1 ] = val6 ;
894
+ nullFreeAtomicArray6 [2 ] = nullFreeAtomicArray6 [1 ];
895
+ nullableArray6 [1 ] = val6 ;
896
+ nullableArray6 [2 ] = nullableArray6 [1 ];
897
+ nullableAtomicArray6 [1 ] = val6 ;
898
+ nullableAtomicArray6 [2 ] = nullableAtomicArray6 [1 ];
899
+ Asserts .assertEQ (nullFreeArray6 [0 ], new IntAndArrayOop (0 , null ));
900
+ Asserts .assertEQ (nullFreeAtomicArray6 [0 ], new IntAndArrayOop (0 , null ));
901
+ Asserts .assertEQ (nullableArray6 [0 ], null );
902
+ Asserts .assertEQ (nullableAtomicArray6 [0 ], null );
903
+ Asserts .assertEQ (nullFreeArray6 [1 ], val6 );
904
+ Asserts .assertEQ (nullFreeAtomicArray6 [1 ], val6 );
905
+ Asserts .assertEQ (nullableArray6 [1 ], val6 );
906
+ Asserts .assertEQ (nullableAtomicArray6 [1 ], val6 );
907
+ Asserts .assertEQ (nullFreeArray6 [2 ], val6 );
908
+ Asserts .assertEQ (nullFreeAtomicArray6 [2 ], val6 );
909
+ Asserts .assertEQ (nullableArray6 [2 ], val6 );
910
+ Asserts .assertEQ (nullableAtomicArray6 [2 ], val6 );
911
+
873
912
if (i > (LIMIT - 50 )) {
874
913
// After warmup, produce some garbage to trigger GC
875
914
produceGarbage ();
0 commit comments