diff options
Diffstat (limited to 'test')
74 files changed, 8082 insertions, 292 deletions
diff --git a/test/030-bad-finalizer/expected.txt b/test/030-bad-finalizer/expected.txt index 74e208c3f9..0aca6f2e93 100644 --- a/test/030-bad-finalizer/expected.txt +++ b/test/030-bad-finalizer/expected.txt @@ -2,3 +2,4 @@ About to null reference.  Finalizer started and spinning...  Finalizer done spinning.  Finalizer sleeping forever now. +exit status: 2 diff --git a/test/911-get-stack-trace/build b/test/030-bad-finalizer/run index 10ffcc537d..7a0d0d05ab 100644..100755 --- a/test/911-get-stack-trace/build +++ b/test/030-bad-finalizer/run @@ -14,7 +14,6 @@  # See the License for the specific language governing permissions and  # limitations under the License. -# See b/65168732 -export USE_D8=false - -./default-build "$@" +# Squash the exit status and put it in expected +./default-run "$@" +echo "exit status:" $? diff --git a/test/034-call-null/expected.txt b/test/034-call-null/expected.txt index 4e0281e556..11aefde417 100644 --- a/test/034-call-null/expected.txt +++ b/test/034-call-null/expected.txt @@ -1,2 +1,3 @@  Exception in thread "main" java.lang.NullPointerException: Attempt to invoke direct method 'void Main.doStuff(int, int[][], java.lang.String, java.lang.String[][])' on a null object reference  	at Main.main(Main.java:26) +exit status: 1 diff --git a/test/1937-transform-soft-fail/check b/test/034-call-null/run index 7cee530291..7a0d0d05ab 100755 --- a/test/1937-transform-soft-fail/check +++ b/test/034-call-null/run @@ -1,12 +1,12 @@  #!/bin/bash  # -# Copyright (C) 2017 The Android Open Source Project +# Copyright 2017 The Android Open Source Project  #  # Licensed under the Apache License, Version 2.0 (the "License");  # you may not use this file except in compliance with the License.  # You may obtain a copy of the License at  # -#     http://www.apache.org/licenses/LICENSE-2.0 +#      http://www.apache.org/licenses/LICENSE-2.0  #  # Unless required by applicable law or agreed to in writing, software  # distributed under the License is distributed on an "AS IS" BASIS, @@ -14,6 +14,6 @@  # See the License for the specific language governing permissions and  # limitations under the License. -sed -e 's/:.*$//' "$2" > "$2.tmp" - -./default-check "$1" "$2.tmp" +# Squash the exit status and put it in expected +./default-run "$@" +echo "exit status:" $? diff --git a/test/038-inner-null/expected.txt b/test/038-inner-null/expected.txt index 2e925644e3..d148eff407 100644 --- a/test/038-inner-null/expected.txt +++ b/test/038-inner-null/expected.txt @@ -2,3 +2,4 @@ new Special()  Exception in thread "main" java.lang.NullPointerException: Attempt to invoke virtual method 'void Main$Blort.repaint()' on a null object reference  	at Main$Special.callInner(Main.java:31)  	at Main.main(Main.java:20) +exit status: 1 diff --git a/test/038-inner-null/run b/test/038-inner-null/run new file mode 100755 index 0000000000..7a0d0d05ab --- /dev/null +++ b/test/038-inner-null/run @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Copyright 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Squash the exit status and put it in expected +./default-run "$@" +echo "exit status:" $? diff --git a/test/046-reflect/src/Main.java b/test/046-reflect/src/Main.java index b8a48ea247..6d6cc132d1 100644 --- a/test/046-reflect/src/Main.java +++ b/test/046-reflect/src/Main.java @@ -232,10 +232,10 @@ public class Main {              field.set(instance, null);              /* -             * Try getDeclaredField on a non-existant field. +             * Try getDeclaredField on a non-existent field.               */              try { -                field = target.getDeclaredField("nonExistant"); +                field = target.getDeclaredField("nonExistent");                  System.out.println("ERROR: Expected NoSuchFieldException");              } catch (NoSuchFieldException nsfe) {                  String msg = nsfe.getMessage(); diff --git a/test/054-uncaught/expected.txt b/test/054-uncaught/expected.txt index 7d7f03c3a7..878260a07d 100644 --- a/test/054-uncaught/expected.txt +++ b/test/054-uncaught/expected.txt @@ -18,3 +18,4 @@ Uncaught exception DEFAULT!  java.lang.NullPointerException: Hi diddly-ho, neighborino.  	at Main.catchTheUncaught(Main.java:63)  	at Main.main(Main.java:26) +exit status: 1 diff --git a/test/054-uncaught/run b/test/054-uncaught/run new file mode 100755 index 0000000000..7a0d0d05ab --- /dev/null +++ b/test/054-uncaught/run @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Copyright 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Squash the exit status and put it in expected +./default-run "$@" +echo "exit status:" $? diff --git a/test/075-verification-error/src/Main.java b/test/075-verification-error/src/Main.java index 13aeaee7e4..2519de5132 100644 --- a/test/075-verification-error/src/Main.java +++ b/test/075-verification-error/src/Main.java @@ -31,7 +31,7 @@ public class Main {          testBadInterfaceMethod();       }      /** -     * Try to create and invoke a non-existant interface method. +     * Try to create and invoke a non-existent interface method.       */      static void testBadInterfaceMethod() {          BadInterface badiface = new BadIfaceImpl(); diff --git a/test/134-nodex2oat-nofallback/run b/test/134-nodex2oat-nofallback/run index 38b4adb183..33265ac471 100755 --- a/test/134-nodex2oat-nofallback/run +++ b/test/134-nodex2oat-nofallback/run @@ -18,3 +18,5 @@ flags="${@}"  # Make sure we cannot run without an oat file without fallback.  ${RUN} ${flags} --runtime-option -Xnodex2oat --runtime-option -Xno-dex-file-fallback +# Suppress the exit value. This isn't expected to be successful. +echo "Exit status:" $? diff --git a/test/1917-get-stack-frame/expected.txt b/test/1917-get-stack-frame/expected.txt index 4c9efcf157..06f5873d76 100644 --- a/test/1917-get-stack-frame/expected.txt +++ b/test/1917-get-stack-frame/expected.txt @@ -1,6 +1,6 @@  Recurring 5 times  'private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread)' line: -1 -'public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread)' line: 60 +'public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread)' line: 61  'public void art.Test1917$StackTraceGenerator.run()' line: 82  'public void art.Test1917$RecurCount.doRecur(int)' line: 104  'public void art.Test1917$RecurCount.doRecur(int)' line: 102 @@ -12,7 +12,7 @@ Recurring 5 times  'public static void art.Test1917.run() throws java.lang.Exception' line: 133  Recurring 5 times on another thread  'private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread)' line: -1 -'public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread)' line: 60 +'public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread)' line: 61  'public void art.Test1917$StackTraceGenerator.run()' line: 82  'public void art.Test1917$RecurCount.doRecur(int)' line: 104  'public void art.Test1917$RecurCount.doRecur(int)' line: 102 diff --git a/test/1917-get-stack-frame/src/art/StackTrace.java b/test/1917-get-stack-frame/src/art/StackTrace.java index b12c3df66b..2ea2f201e8 100644 --- a/test/1917-get-stack-frame/src/art/StackTrace.java +++ b/test/1917-get-stack-frame/src/art/StackTrace.java @@ -53,7 +53,8 @@ public class StackTrace {      // consistent we will suspend for the RI.      boolean suspend_thread =          !System.getProperty("java.vm.name").equals("Dalvik") && -        !thr.equals(Thread.currentThread()); +        !thr.equals(Thread.currentThread()) && +        !Suspension.isSuspended(thr);      if (suspend_thread) {        Suspension.suspend(thr);      } diff --git a/test/1927-exception-event/expected.txt b/test/1927-exception-event/expected.txt index be8f39c29a..fcdd814977 100644 --- a/test/1927-exception-event/expected.txt +++ b/test/1927-exception-event/expected.txt @@ -3,7 +3,7 @@ Running test_J  main: public static void art.Test1927.test_J() @ line = 110 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.test_J() @ line = 110 @@ -12,7 +12,7 @@ main: public static void art.Test1927.test_J() @ line = 110 throws class art.Tes  main: public static void art.Test1927.test_J() @ line = 111 caught class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J() @ line = 111 @@ -24,7 +24,7 @@ Running test_J_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -34,7 +34,7 @@ main: public static void art.Test1927.terminal_J() @ line = 103 throws class art  main: public static void art.Test1927.test_J_J() @ line = 122 caught class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_J() @ line = 122 @@ -44,7 +44,7 @@ Running test_J_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -54,7 +54,7 @@ main: public static native void art.Test1927.terminal_N() @ line = -1 throws cla  main: public static void art.Test1927.test_J_N() @ line = 130 caught class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_N() @ line = 130 @@ -64,7 +64,7 @@ Running test_N_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -76,7 +76,7 @@ Running test_N_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -88,7 +88,7 @@ Running test_J_J_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -99,7 +99,7 @@ main: public static void art.Test1927.terminal_J() @ line = 103 throws class art  main: public static void art.Test1927.test_J_J_J() @ line = 146 caught class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_J_J() @ line = 146 @@ -109,7 +109,7 @@ Running test_J_J_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -120,7 +120,7 @@ main: public static native void art.Test1927.terminal_N() @ line = -1 throws cla  main: public static void art.Test1927.test_J_J_N() @ line = 154 caught class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_J_N() @ line = 154 @@ -130,7 +130,7 @@ Running test_J_N_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -141,7 +141,7 @@ main: public static void art.Test1927.terminal_J() @ line = 103 throws class art  main: public static void art.Test1927.test_J_N_J() @ line = 162 caught class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_N_J() @ line = 162 @@ -151,7 +151,7 @@ Running test_J_N_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -162,7 +162,7 @@ main: public static native void art.Test1927.terminal_N() @ line = -1 throws cla  main: public static void art.Test1927.test_J_N_N() @ line = 170 caught class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 43  		public static void art.Test1927.test_J_N_N() @ line = 170 @@ -172,7 +172,7 @@ Running test_N_J_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -185,7 +185,7 @@ Running test_N_J_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -198,7 +198,7 @@ Running test_N_N_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -211,7 +211,7 @@ Running test_N_N_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -224,7 +224,7 @@ Running test_extra_N_J_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -238,7 +238,7 @@ Running test_extra_N_J_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 @@ -252,7 +252,7 @@ Running test_extra_N_N_J()  main: public static void art.Test1927.terminal_J() @ line = 103 throws class art.Test1927$TestException: from java  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static void art.Test1927.terminal_J() @ line = 103 @@ -266,7 +266,7 @@ Running test_extra_N_N_N()  main: public static native void art.Test1927.terminal_N() @ line = -1 throws class art.Test1927$TestException: from native  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1927.PrintStack() @ line = 28  		public static void art.Test1927.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 66  		public static native void art.Test1927.terminal_N() @ line = -1 diff --git a/test/1927-exception-event/src/art/StackTrace.java b/test/1927-exception-event/src/art/StackTrace.java index b12c3df66b..2ea2f201e8 100644 --- a/test/1927-exception-event/src/art/StackTrace.java +++ b/test/1927-exception-event/src/art/StackTrace.java @@ -53,7 +53,8 @@ public class StackTrace {      // consistent we will suspend for the RI.      boolean suspend_thread =          !System.getProperty("java.vm.name").equals("Dalvik") && -        !thr.equals(Thread.currentThread()); +        !thr.equals(Thread.currentThread()) && +        !Suspension.isSuspended(thr);      if (suspend_thread) {        Suspension.suspend(thr);      } diff --git a/test/1928-exception-event-exception/expected.txt b/test/1928-exception-event-exception/expected.txt index 1692d042e4..73c69727aa 100644 --- a/test/1928-exception-event-exception/expected.txt +++ b/test/1928-exception-event-exception/expected.txt @@ -2,235 +2,119 @@ Test "art.Test1928$DoThrowClass": Running with handler "art.Test1928$DoNothingHa  main: public static void art.Test1928.doThrow() @ line = 110 throws class art.Test1928$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.doThrow() @ line = 110  		public void art.Test1928$DoThrowClass.run() @ line = 114  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.run() throws java.lang.Exception @ line = 199 -exception is: art.Test1928$TestException: doThrow -	at art.Test1928.doThrow(Test1928.java:110) -	at art.Test1928$DoThrowClass.run(Test1928.java:114) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Doing nothing!  Test "art.Test1928$DoThrowClass": Caught error art.Test1928$TestException:"doThrow" with handler "art.Test1928$DoNothingHandler" -art.Test1928$TestException: doThrow -	at art.Test1928.doThrow(Test1928.java:110) -	at art.Test1928$DoThrowClass.run(Test1928.java:114) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowClass": Finished running with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowCatchBaseTestException": Running with handler "art.Test1928$DoNothingHandler"  main: public static void art.Test1928.throwCatchBaseTestException() @ line = 119 throws class art.Test1928$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchBaseTestException() @ line = 119  		public void art.Test1928$DoThrowCatchBaseTestException.run() @ line = 129  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.throwCatchBaseTestException() @ line = 120 -exception is: art.Test1928$TestException: throwCatchBaseTestException -	at art.Test1928.throwCatchBaseTestException(Test1928.java:119) -	at art.Test1928$DoThrowCatchBaseTestException.run(Test1928.java:129) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Doing nothing!  Caught art.Test1928$TestException: "throwCatchBaseTestException" -art.Test1928$TestException: throwCatchBaseTestException -	at art.Test1928.throwCatchBaseTestException(Test1928.java:119) -	at art.Test1928$DoThrowCatchBaseTestException.run(Test1928.java:129) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchBaseTestException": No error caught with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowCatchBaseTestException": Finished running with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowCatchTestException": Running with handler "art.Test1928$DoNothingHandler"  main: public static void art.Test1928.throwCatchTestException() @ line = 134 throws class art.Test1928$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchTestException() @ line = 134  		public void art.Test1928$DoThrowCatchTestException.run() @ line = 144  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.throwCatchTestException() @ line = 135 -exception is: art.Test1928$TestException: throwCatchTestException -	at art.Test1928.throwCatchTestException(Test1928.java:134) -	at art.Test1928$DoThrowCatchTestException.run(Test1928.java:144) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Doing nothing!  Caught art.Test1928$TestException: "throwCatchTestException" -art.Test1928$TestException: throwCatchTestException -	at art.Test1928.throwCatchTestException(Test1928.java:134) -	at art.Test1928$DoThrowCatchTestException.run(Test1928.java:144) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchTestException": No error caught with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowCatchTestException": Finished running with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Running with handler "art.Test1928$DoNothingHandler"  main: public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149 throws class art.Test1928$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149  		public void art.Test1928$DoThrowCatchTestExceptionNoRethrow.run() @ line = 159  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.run() throws java.lang.Exception @ line = 199 -exception is: art.Test1928$TestException: throwCatchTestExceptionNoRethrow -	at art.Test1928.throwCatchTestExceptionNoRethrow(Test1928.java:149) -	at art.Test1928$DoThrowCatchTestExceptionNoRethrow.run(Test1928.java:159) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Doing nothing!  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1928$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1928$DoNothingHandler" -art.Test1928$TestException: throwCatchTestExceptionNoRethrow -	at art.Test1928.throwCatchTestExceptionNoRethrow(Test1928.java:149) -	at art.Test1928$DoThrowCatchTestExceptionNoRethrow.run(Test1928.java:159) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1928$DoNothingHandler"  Test "art.Test1928$DoThrowClass": Running with handler "art.Test1928$ThrowCatchBase"  main: public static void art.Test1928.doThrow() @ line = 110 throws class art.Test1928$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.doThrow() @ line = 110  		public void art.Test1928$DoThrowClass.run() @ line = 114  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.run() throws java.lang.Exception @ line = 199 -exception is: art.Test1928$TestException: doThrow -	at art.Test1928.doThrow(Test1928.java:110) -	at art.Test1928$DoThrowClass.run(Test1928.java:114) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Throwing BaseTestException and catching it!  Caught art.Test1928$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1928.doThrow() @ line = 110" -art.Test1928$BaseTestException: ThrowBaseHandler during throw from public static void art.Test1928.doThrow() @ line = 110 -	at art.Test1928$ThrowCatchBase.exceptionOccurred(Test1928.java:99) -	at art.Test1928.ExceptionEvent(Test1928.java:66) -	at art.Test1928.doThrow(Test1928.java:110) -	at art.Test1928$DoThrowClass.run(Test1928.java:114) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19) -Caused by: art.Test1928$TestException: doThrow -	... 4 more  Test "art.Test1928$DoThrowClass": Caught error art.Test1928$TestException:"doThrow" with handler "art.Test1928$ThrowCatchBase" -art.Test1928$TestException: doThrow -	at art.Test1928.doThrow(Test1928.java:110) -	at art.Test1928$DoThrowClass.run(Test1928.java:114) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowClass": Finished running with handler "art.Test1928$ThrowCatchBase"  Test "art.Test1928$DoThrowCatchBaseTestException": Running with handler "art.Test1928$ThrowCatchBase"  main: public static void art.Test1928.throwCatchBaseTestException() @ line = 119 throws class art.Test1928$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchBaseTestException() @ line = 119  		public void art.Test1928$DoThrowCatchBaseTestException.run() @ line = 129  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.throwCatchBaseTestException() @ line = 120 -exception is: art.Test1928$TestException: throwCatchBaseTestException -	at art.Test1928.throwCatchBaseTestException(Test1928.java:119) -	at art.Test1928$DoThrowCatchBaseTestException.run(Test1928.java:129) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Throwing BaseTestException and catching it!  Caught art.Test1928$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1928.throwCatchBaseTestException() @ line = 119" -art.Test1928$BaseTestException: ThrowBaseHandler during throw from public static void art.Test1928.throwCatchBaseTestException() @ line = 119 -	at art.Test1928$ThrowCatchBase.exceptionOccurred(Test1928.java:99) -	at art.Test1928.ExceptionEvent(Test1928.java:66) -	at art.Test1928.throwCatchBaseTestException(Test1928.java:119) -	at art.Test1928$DoThrowCatchBaseTestException.run(Test1928.java:129) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19) -Caused by: art.Test1928$TestException: throwCatchBaseTestException -	... 4 more  Caught art.Test1928$TestException: "throwCatchBaseTestException" -art.Test1928$TestException: throwCatchBaseTestException -	at art.Test1928.throwCatchBaseTestException(Test1928.java:119) -	at art.Test1928$DoThrowCatchBaseTestException.run(Test1928.java:129) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchBaseTestException": No error caught with handler "art.Test1928$ThrowCatchBase"  Test "art.Test1928$DoThrowCatchBaseTestException": Finished running with handler "art.Test1928$ThrowCatchBase"  Test "art.Test1928$DoThrowCatchTestException": Running with handler "art.Test1928$ThrowCatchBase"  main: public static void art.Test1928.throwCatchTestException() @ line = 134 throws class art.Test1928$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchTestException() @ line = 134  		public void art.Test1928$DoThrowCatchTestException.run() @ line = 144  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.throwCatchTestException() @ line = 135 -exception is: art.Test1928$TestException: throwCatchTestException -	at art.Test1928.throwCatchTestException(Test1928.java:134) -	at art.Test1928$DoThrowCatchTestException.run(Test1928.java:144) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Throwing BaseTestException and catching it!  Caught art.Test1928$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1928.throwCatchTestException() @ line = 134" -art.Test1928$BaseTestException: ThrowBaseHandler during throw from public static void art.Test1928.throwCatchTestException() @ line = 134 -	at art.Test1928$ThrowCatchBase.exceptionOccurred(Test1928.java:99) -	at art.Test1928.ExceptionEvent(Test1928.java:66) -	at art.Test1928.throwCatchTestException(Test1928.java:134) -	at art.Test1928$DoThrowCatchTestException.run(Test1928.java:144) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19) -Caused by: art.Test1928$TestException: throwCatchTestException -	... 4 more  Caught art.Test1928$TestException: "throwCatchTestException" -art.Test1928$TestException: throwCatchTestException -	at art.Test1928.throwCatchTestException(Test1928.java:134) -	at art.Test1928$DoThrowCatchTestException.run(Test1928.java:144) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchTestException": No error caught with handler "art.Test1928$ThrowCatchBase"  Test "art.Test1928$DoThrowCatchTestException": Finished running with handler "art.Test1928$ThrowCatchBase"  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Running with handler "art.Test1928$ThrowCatchBase"  main: public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149 throws class art.Test1928$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1928.PrintStack() @ line = 35  		public static void art.Test1928.ExceptionEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable,java.lang.reflect.Executable,long) @ line = 59  		public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149  		public void art.Test1928$DoThrowCatchTestExceptionNoRethrow.run() @ line = 159  		public static void art.Test1928.run() throws java.lang.Exception @ line = 196  	Will be caught by: public static void art.Test1928.run() throws java.lang.Exception @ line = 199 -exception is: art.Test1928$TestException: throwCatchTestExceptionNoRethrow -	at art.Test1928.throwCatchTestExceptionNoRethrow(Test1928.java:149) -	at art.Test1928$DoThrowCatchTestExceptionNoRethrow.run(Test1928.java:159) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  	Throwing BaseTestException and catching it!  Caught art.Test1928$BaseTestException: "ThrowBaseHandler during throw from public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149" -art.Test1928$BaseTestException: ThrowBaseHandler during throw from public static void art.Test1928.throwCatchTestExceptionNoRethrow() @ line = 149 -	at art.Test1928$ThrowCatchBase.exceptionOccurred(Test1928.java:99) -	at art.Test1928.ExceptionEvent(Test1928.java:66) -	at art.Test1928.throwCatchTestExceptionNoRethrow(Test1928.java:149) -	at art.Test1928$DoThrowCatchTestExceptionNoRethrow.run(Test1928.java:159) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19) -Caused by: art.Test1928$TestException: throwCatchTestExceptionNoRethrow -	... 4 more  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Caught error art.Test1928$TestException:"throwCatchTestExceptionNoRethrow" with handler "art.Test1928$ThrowCatchBase" -art.Test1928$TestException: throwCatchTestExceptionNoRethrow -	at art.Test1928.throwCatchTestExceptionNoRethrow(Test1928.java:149) -	at art.Test1928$DoThrowCatchTestExceptionNoRethrow.run(Test1928.java:159) -	at art.Test1928.run(Test1928.java:196) -	at Main.main(Main.java:19)  Test "art.Test1928$DoThrowCatchTestExceptionNoRethrow": Finished running with handler "art.Test1928$ThrowCatchBase" diff --git a/test/1928-exception-event-exception/src/art/StackTrace.java b/test/1928-exception-event-exception/src/art/StackTrace.java index b12c3df66b..2ea2f201e8 100644 --- a/test/1928-exception-event-exception/src/art/StackTrace.java +++ b/test/1928-exception-event-exception/src/art/StackTrace.java @@ -53,7 +53,8 @@ public class StackTrace {      // consistent we will suspend for the RI.      boolean suspend_thread =          !System.getProperty("java.vm.name").equals("Dalvik") && -        !thr.equals(Thread.currentThread()); +        !thr.equals(Thread.currentThread()) && +        !Suspension.isSuspended(thr);      if (suspend_thread) {        Suspension.suspend(thr);      } diff --git a/test/1928-exception-event-exception/src/art/Test1928.java b/test/1928-exception-event-exception/src/art/Test1928.java index aec88a4079..864de8ea4d 100644 --- a/test/1928-exception-event-exception/src/art/Test1928.java +++ b/test/1928-exception-event-exception/src/art/Test1928.java @@ -22,7 +22,7 @@ import java.lang.reflect.Executable;  import java.lang.reflect.Method;  public class Test1928 { -  public static boolean PRINT_FULL_EXCEPTION = true; +  public static boolean PRINT_FULL_EXCEPTION = false;    public static ExceptionHandler HANDLER = null;    public static interface ExceptionHandler { diff --git a/test/1929-exception-catch-exception/expected.txt b/test/1929-exception-catch-exception/expected.txt index 7c23a31439..bc5608ac4e 100644 --- a/test/1929-exception-catch-exception/expected.txt +++ b/test/1929-exception-catch-exception/expected.txt @@ -2,7 +2,7 @@ Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -12,7 +12,7 @@ Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handl  main: public static void art.Test1929.throwCatchBaseTestException() @ line = 140 caught class art.Test1929$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchBaseTestException() @ line = 140 @@ -26,7 +26,7 @@ Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with  main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 @@ -40,7 +40,7 @@ Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "  main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchTestException() @ line = 207 @@ -54,7 +54,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with hand  main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 @@ -68,7 +68,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -78,7 +78,7 @@ Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -88,7 +88,7 @@ Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handl  main: public static void art.Test1929.throwCatchBaseTestException() @ line = 140 caught class art.Test1929$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchBaseTestException() @ line = 140 @@ -103,7 +103,7 @@ Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with  main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 @@ -117,7 +117,7 @@ Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "  main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchTestException() @ line = 207 @@ -132,7 +132,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with hand  main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 @@ -146,7 +146,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -156,7 +156,7 @@ Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -166,7 +166,7 @@ Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handl  main: public static void art.Test1929.throwCatchBaseTestException() @ line = 140 caught class art.Test1929$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchBaseTestException() @ line = 140 @@ -179,7 +179,7 @@ Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with  main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 @@ -193,7 +193,7 @@ Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "  main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchTestException() @ line = 207 @@ -206,7 +206,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with hand  main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 @@ -220,7 +220,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -230,7 +230,7 @@ Test "art.Test1929$DoThrowClass": Running breakpoint with handler "art.Test1929$  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: doThrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 @@ -240,7 +240,7 @@ Test "art.Test1929$DoThrowCatchBaseTestException": Running breakpoint with handl  main: public static void art.Test1929.throwCatchBaseTestException() @ line = 140 caught class art.Test1929$TestException: throwCatchBaseTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchBaseTestException() @ line = 140 @@ -253,7 +253,7 @@ Test "art.Test1929$DoThrowCatchBaseTestExceptionTwice": Running breakpoint with  main: public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 caught class art.Test1929$TestException: throwCatchBaseTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchBaseTestExceptionTwiceImpl() @ line = 161 @@ -267,7 +267,7 @@ Test "art.Test1929$DoThrowCatchTestException": Running breakpoint with handler "  main: public static void art.Test1929.throwCatchTestException() @ line = 207 caught class art.Test1929$TestException: throwCatchTestException  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.throwCatchTestException() @ line = 207 @@ -280,7 +280,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionTwice": Running breakpoint with hand  main: public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 caught class art.Test1929$TestException: throwCatchTestExceptionTwice  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929$Impl.throwCatchTestExceptionTwiceImpl() @ line = 179 @@ -294,7 +294,7 @@ Test "art.Test1929$DoThrowCatchTestExceptionNoRethrow": Running breakpoint with  main: public static void art.Test1929.run() throws java.lang.Exception @ line = 283 caught class art.Test1929$TestException: throwCatchTestExceptionNoRethrow  	Current Stack:  		private static native art.StackTrace$StackFrameData[] art.StackTrace.nativeGetStackTrace(java.lang.Thread) @ line = -1 -		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 60 +		public static art.StackTrace$StackFrameData[] art.StackTrace.GetStackTrace(java.lang.Thread) @ line = 61  		private static void art.Test1929.PrintStack() @ line = 52  		public static void art.Test1929.ExceptionCatchEvent(java.lang.Thread,java.lang.reflect.Executable,long,java.lang.Throwable) @ line = 65  		public static void art.Test1929.run() throws java.lang.Exception @ line = 283 diff --git a/test/1929-exception-catch-exception/src/art/StackTrace.java b/test/1929-exception-catch-exception/src/art/StackTrace.java index b12c3df66b..2ea2f201e8 100644 --- a/test/1929-exception-catch-exception/src/art/StackTrace.java +++ b/test/1929-exception-catch-exception/src/art/StackTrace.java @@ -53,7 +53,8 @@ public class StackTrace {      // consistent we will suspend for the RI.      boolean suspend_thread =          !System.getProperty("java.vm.name").equals("Dalvik") && -        !thr.equals(Thread.currentThread()); +        !thr.equals(Thread.currentThread()) && +        !Suspension.isSuspended(thr);      if (suspend_thread) {        Suspension.suspend(thr);      } diff --git a/test/1937-transform-soft-fail/src/art/Test1937.java b/test/1937-transform-soft-fail/src/art/Test1937.java index 7255a5ef96..19fa24e3f8 100644 --- a/test/1937-transform-soft-fail/src/art/Test1937.java +++ b/test/1937-transform-soft-fail/src/art/Test1937.java @@ -19,6 +19,8 @@ package art;  import java.util.Base64;  public class Test1937 { +  private static final boolean PRINT_MESSAGE = false; +    static class Transform {      public void sayHi() {        // Use lower 'h' to make sure the string will have a different string id @@ -83,7 +85,10 @@ public class Test1937 {      try {        t.sayHi();      } catch (Throwable e) { -      System.out.println("Caught exception " + e.getClass().getName() + ": " + e.getMessage()); +      System.out.println("Caught exception " + e.getClass().getName()); +      if (PRINT_MESSAGE) { +        System.out.println("Message: " + e.getMessage()); +      }      }    }  } diff --git a/test/1939-proxy-frames/expected.txt b/test/1939-proxy-frames/expected.txt index a4c97c9bbe..3aafd16a08 100644 --- a/test/1939-proxy-frames/expected.txt +++ b/test/1939-proxy-frames/expected.txt @@ -5,4 +5,4 @@ Running public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Run  Running public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Runnable) with "GetProxyFrameLocation" on remote thread.  "GetProxyFrameLocation" on public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Runnable) got value: -1  Running public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Runnable) with "GetProxyFrameMethod" on remote thread. -"GetProxyFrameMethod" on public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Runnable) got value: public final void $Proxy0.InterfaceProxyMethod(java.lang.Runnable) +"GetProxyFrameMethod" on public abstract void art.Test1939$Foo.InterfaceProxyMethod(java.lang.Runnable) got value: public final void $__PROXY__.InterfaceProxyMethod(java.lang.Runnable) diff --git a/test/1939-proxy-frames/src/art/Test1939.java b/test/1939-proxy-frames/src/art/Test1939.java index 83d0d2ca4b..5e86e54c0d 100644 --- a/test/1939-proxy-frames/src/art/Test1939.java +++ b/test/1939-proxy-frames/src/art/Test1939.java @@ -44,12 +44,22 @@ public class Test1939 {      public Object GetVar(Thread t, int depth);    } +  public static String SafeToString(Object o) { +    if (o instanceof Method && Proxy.isProxyClass(((Method)o).getDeclaringClass())) { +      // TODO This currently only really works on ART. It would be good if we could make it work for +      // the RI as well. +      return o.toString().replaceFirst("Proxy[0-9]+", "__PROXY__"); +    } else { +      return o.toString(); +    } +  } +    public static SafepointFunction NamedGet(final String type, final GetterFunction get) {      return new SafepointFunction() {        public void invoke(Thread t, Method method, int depth) {          try {            Object res = get.GetVar(t, depth); -          System.out.println(this + " on " + method + " got value: " + res); +          System.out.println(this + " on " + method + " got value: " + SafeToString(res));          } catch (Exception e) {            System.out.println(this + " on " + method + " failed due to " + e.getMessage());          } diff --git a/test/1944-sudden-exit/check b/test/1944-sudden-exit/check new file mode 100755 index 0000000000..591fbb87ee --- /dev/null +++ b/test/1944-sudden-exit/check @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#     http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# The number of paused background threads (and therefore InterruptedExceptions) +# can change so we will just delete their lines from the log. + +# Pure virtual function can be printed because sudden exits are not really +# supported. It is an error message but the test is to make sure that we exit +# with the right exit code. +cat "$2" \ +  | sed "/Pure virtual function called!/d" \ +  | diff --strip-trailing-cr -q "$1" - >/dev/null diff --git a/test/1944-sudden-exit/expected.txt b/test/1944-sudden-exit/expected.txt new file mode 100644 index 0000000000..4c6eb47fa7 --- /dev/null +++ b/test/1944-sudden-exit/expected.txt @@ -0,0 +1,3 @@ +All threads started +Exiting suddenly +exit status:  12 diff --git a/test/1944-sudden-exit/info.txt b/test/1944-sudden-exit/info.txt new file mode 100644 index 0000000000..d575ce5864 --- /dev/null +++ b/test/1944-sudden-exit/info.txt @@ -0,0 +1,5 @@ +Test to make sure the runtime will not crash if an agent calls exit(3) while +other threads are performing operations. + +In this case we have multiple threads all performing single stepping when we +call exit(3). diff --git a/test/1944-sudden-exit/run b/test/1944-sudden-exit/run new file mode 100755 index 0000000000..eb601fd348 --- /dev/null +++ b/test/1944-sudden-exit/run @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Copyright 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Ask for stack traces to be dumped to a file rather than to stdout. +./default-run "$@" --jvmti +echo "exit status: " $? diff --git a/test/983-source-transform-verify/source_transform.h b/test/1944-sudden-exit/src/Main.java index db9415aec1..1644c6ef0c 100644 --- a/test/983-source-transform-verify/source_transform.h +++ b/test/1944-sudden-exit/src/Main.java @@ -14,17 +14,8 @@   * limitations under the License.   */ -#ifndef ART_TEST_983_SOURCE_TRANSFORM_VERIFY_SOURCE_TRANSFORM_H_ -#define ART_TEST_983_SOURCE_TRANSFORM_VERIFY_SOURCE_TRANSFORM_H_ - -#include <jni.h> - -namespace art { -namespace Test983SourceTransformVerify { - -jint OnLoad(JavaVM* vm, char* options, void* reserved); - -}  // namespace Test983SourceTransformVerify -}  // namespace art - -#endif  // ART_TEST_983_SOURCE_TRANSFORM_VERIFY_SOURCE_TRANSFORM_H_ +public class Main { +  public static void main(String[] args) throws Exception { +    art.Test1944.run(); +  } +} diff --git a/test/1944-sudden-exit/src/art/Test1944.java b/test/1944-sudden-exit/src/art/Test1944.java new file mode 100644 index 0000000000..36cbb2b390 --- /dev/null +++ b/test/1944-sudden-exit/src/art/Test1944.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package art; + +import java.util.Arrays; +import java.lang.reflect.Executable; +import java.lang.reflect.Method; +import java.util.concurrent.Semaphore; + +public class Test1944 { +  // Just calculate fib forever. +  public static void fib(Semaphore started) { +    started.release(); +    long a = 1; +    long b = 1; +    while (true) { +      long c = a + b; +      a = b; +      b = c; +    } +  } + +  // Don't bother actually doing anything. +  public static void notifySingleStep(Thread thr, Executable e, long loc) { } + +  public static native void exitNow(); + +  private static int num_threads = 10; + +  public static void run() throws Exception { +    final Semaphore started = new Semaphore(-(num_threads - 1)); + +    Trace.enableSingleStepTracing(Test1944.class, +        Test1944.class.getDeclaredMethod( +            "notifySingleStep", Thread.class, Executable.class, Long.TYPE), +        null); + +    Thread[] threads = new Thread[num_threads]; +    for (int i = 0; i < num_threads; i++) { +      threads[i] = new Thread(() -> { fib(started); }); +      // Make half daemons. +      threads[i].setDaemon(i % 2 == 0); +      threads[i].start(); +    } +    // Wait for all threads to start. +    started.acquire(); +    System.out.println("All threads started"); +    // sleep a little +    Thread.sleep(10); +    // Die. +    System.out.println("Exiting suddenly"); +    exitNow(); +    System.out.println("FAILED: Should not reach here!"); +  } +} diff --git a/test/1944-sudden-exit/src/art/Trace.java b/test/1944-sudden-exit/src/art/Trace.java new file mode 100644 index 0000000000..8999bb1368 --- /dev/null +++ b/test/1944-sudden-exit/src/art/Trace.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package art; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class Trace { +  public static native void enableTracing(Class<?> methodClass, +                                          Method entryMethod, +                                          Method exitMethod, +                                          Method fieldAccess, +                                          Method fieldModify, +                                          Method singleStep, +                                          Thread thr); +  public static native void disableTracing(Thread thr); + +  public static void enableFieldTracing(Class<?> methodClass, +                                        Method fieldAccess, +                                        Method fieldModify, +                                        Thread thr) { +    enableTracing(methodClass, null, null, fieldAccess, fieldModify, null, thr); +  } + +  public static void enableMethodTracing(Class<?> methodClass, +                                         Method entryMethod, +                                         Method exitMethod, +                                         Thread thr) { +    enableTracing(methodClass, entryMethod, exitMethod, null, null, null, thr); +  } + +  public static void enableSingleStepTracing(Class<?> methodClass, +                                             Method singleStep, +                                             Thread thr) { +    enableTracing(methodClass, null, null, null, null, singleStep, thr); +  } + +  public static native void watchFieldAccess(Field f); +  public static native void watchFieldModification(Field f); +  public static native void watchAllFieldAccesses(); +  public static native void watchAllFieldModifications(); + +  // the names, arguments, and even line numbers of these functions are embedded in the tests so we +  // need to add to the bottom and not modify old ones to maintain compat. +  public static native void enableTracing2(Class<?> methodClass, +                                           Method entryMethod, +                                           Method exitMethod, +                                           Method fieldAccess, +                                           Method fieldModify, +                                           Method singleStep, +                                           Method ThreadStart, +                                           Method ThreadEnd, +                                           Thread thr); +} diff --git a/test/1944-sudden-exit/sudden_exit.cc b/test/1944-sudden-exit/sudden_exit.cc new file mode 100644 index 0000000000..e0a076efac --- /dev/null +++ b/test/1944-sudden-exit/sudden_exit.cc @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdlib.h> +#include "jni.h" + +namespace art { +namespace Test1944SuddenExit { + +extern "C" JNIEXPORT void JNICALL Java_art_Test1944_exitNow(JNIEnv*, jclass) +    __attribute__((noreturn)); + +extern "C" JNIEXPORT void JNICALL Java_art_Test1944_exitNow(JNIEnv*, jclass) { +  exit(12); +} + +}  // namespace Test1944SuddenExit +}  // namespace art + diff --git a/test/670-bitstring-type-check/build b/test/670-bitstring-type-check/build new file mode 100644 index 0000000000..38307f2c0f --- /dev/null +++ b/test/670-bitstring-type-check/build @@ -0,0 +1,216 @@ +#!/bin/bash +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#     http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Stop if something fails. +set -e + +# Write out the source file. + +mkdir src +cat >src/Main.java <<EOF +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +EOF + +for i in {0..8192}; do echo "class Level1Class$i { }" >>src/Main.java; done +for i in {0..1024}; do echo "class Level2Class$i extends Level1Class0 { }" >>src/Main.java; done + +cat >>src/Main.java <<EOF +class Level3Class0 extends Level2Class0 { } +class Level4Class0 extends Level3Class0 { } +class Level5Class0 extends Level4Class0 { } +class Level6Class0 extends Level5Class0 { } +class Level7Class0 extends Level6Class0 { } +class Level8Class0 extends Level7Class0 { } +class Level9Class0 extends Level8Class0 { } + +public class Main { +  public static void main(String[] args) throws Exception { +    // 8193 classes at level 1 make sure we shall have an overflow if there are 13 or +    // less bits for the level 1 character. 1025 classes at level 2 similarly guarantees +    // an overflow if the number of bits for level 2 character is 10 or less. To test +    // type checks also for the depth overflow, we provide a hierarchy 9 levels deep. + +    // Make sure the bitstrings are initialized. +    for (int i = 0; i <= 8192; ++i) { +      Class.forName("Level1Class" + i).newInstance(); +    } +    for (int i = 0; i <= 1024; ++i) { +      Class.forName("Level2Class" + i).newInstance(); +    } + +    // Note: Using a different class for tests so that verification of Main.main() does +    // not try to resolve classes used by the tests. This guarantees uninitialized type +    // check bitstrings when we enter Main.main() and start initializing them above. +    Helper.testInstanceOf(); +    Helper.testCheckCast(); +  } +} + +class Helper { +  public static void testInstanceOf() throws Exception { +    for (int i = 1; i <= 9; ++i) { +      Object o = createInstance("Level" + i + "Class0"); +      assertTrue(o instanceof Level1Class0); +      if (o instanceof Level2Class0) { +        assertFalse(i < 2); +      } else { +        assertTrue(i < 2); +      } +      if (o instanceof Level3Class0) { +        assertFalse(i < 3); +      } else { +        assertTrue(i < 3); +      } +      if (o instanceof Level4Class0) { +        assertFalse(i < 4); +      } else { +        assertTrue(i < 4); +      } +      if (o instanceof Level5Class0) { +        assertFalse(i < 5); +      } else { +        assertTrue(i < 5); +      } +      if (o instanceof Level6Class0) { +        assertFalse(i < 6); +      } else { +        assertTrue(i < 6); +      } +      if (o instanceof Level7Class0) { +        assertFalse(i < 7); +      } else { +        assertTrue(i < 7); +      } +      if (o instanceof Level8Class0) { +        assertFalse(i < 8); +      } else { +        assertTrue(i < 8); +      } +      if (o instanceof Level9Class0) { +        assertFalse(i < 9); +      } else { +        assertTrue(i < 9); +      } +    } + +    assertTrue(createInstance("Level1Class8192") instanceof Level1Class8192); +    assertFalse(createInstance("Level1Class8192") instanceof Level1Class0); +    assertTrue(createInstance("Level2Class1024") instanceof Level2Class1024); +    assertTrue(createInstance("Level2Class1024") instanceof Level1Class0); +    assertFalse(createInstance("Level2Class1024") instanceof Level2Class0); +  } + +  public static void testCheckCast() throws Exception { +    for (int i = 1; i <= 9; ++i) { +      Object o = createInstance("Level" + i + "Class0"); +      Level1Class0 l1c0 = (Level1Class0) o; +      try { +        Level2Class0 l2c0 = (Level2Class0) o; +        assertFalse(i < 2); +      } catch (ClassCastException cce) { +        assertTrue(i < 2); +      } +      try { +        Level3Class0 l3c0 = (Level3Class0) o; +        assertFalse(i < 3); +      } catch (ClassCastException cce) { +        assertTrue(i < 3); +      } +      try { +        Level4Class0 l4c0 = (Level4Class0) o; +        assertFalse(i < 4); +      } catch (ClassCastException cce) { +        assertTrue(i < 4); +      } +      try { +        Level5Class0 l5c0 = (Level5Class0) o; +        assertFalse(i < 5); +      } catch (ClassCastException cce) { +        assertTrue(i < 5); +      } +      try { +        Level6Class0 l6c0 = (Level6Class0) o; +        assertFalse(i < 6); +      } catch (ClassCastException cce) { +        assertTrue(i < 6); +      } +      try { +        Level7Class0 l7c0 = (Level7Class0) o; +        assertFalse(i < 7); +      } catch (ClassCastException cce) { +        assertTrue(i < 7); +      } +      try { +        Level8Class0 l8c0 = (Level8Class0) o; +        assertFalse(i < 8); +      } catch (ClassCastException cce) { +        assertTrue(i < 8); +      } +      try { +        Level9Class0 l9c0 = (Level9Class0) o; +        assertFalse(i < 9); +      } catch (ClassCastException cce) { +        assertTrue(i < 9); +      } +    } + +    Level1Class8192 l1c8192 = (Level1Class8192) createInstance("Level1Class8192"); +    try { +      Level1Class0 l1c0 = (Level1Class0) createInstance("Level1Class8192"); +      throw new AssertionError("Unexpected"); +    } catch (ClassCastException expected) {} +    Level2Class1024 l2c1024 = (Level2Class1024) createInstance("Level2Class1024"); +    Level1Class0 l1c0 = (Level1Class0) createInstance("Level2Class1024"); +    try { +      Level2Class0 l2c0 = (Level2Class0) createInstance("Level2Class1024"); +      throw new AssertionError("Unexpected"); +    } catch (ClassCastException expected) {} +  } + +  public static Object createInstance(String className) throws Exception { +    return Class.forName(className).newInstance(); +  } + +  public static void assertTrue(boolean value) throws Exception { +    if (!value) { +      throw new AssertionError(); +    } +  } + +  public static void assertFalse(boolean value) throws Exception { +    if (value) { +      throw new AssertionError(); +    } +  } +} +EOF + +./default-build "$@" diff --git a/test/670-bitstring-type-check/expected.txt b/test/670-bitstring-type-check/expected.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/670-bitstring-type-check/expected.txt diff --git a/test/670-bitstring-type-check/info.txt b/test/670-bitstring-type-check/info.txt new file mode 100644 index 0000000000..a34ba86171 --- /dev/null +++ b/test/670-bitstring-type-check/info.txt @@ -0,0 +1 @@ +Tests for the bitstring type checks. diff --git a/test/712-varhandle-invocations/build b/test/712-varhandle-invocations/build new file mode 100755 index 0000000000..253765be91 --- /dev/null +++ b/test/712-varhandle-invocations/build @@ -0,0 +1,39 @@ +#!/bin/bash +# +# Copyright 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Make us exit on a failure +set -e + +# Set variables for source directories. Using src-art so we use +# VarHandles in the bootclasspath and can compile with the Java 8 +# compiler. +MANUAL_SRC=src +GENERATED_SRC=src2 + +# Build the Java files +mkdir -p src2 + +# Collate list of manual test classes +MANUAL_TESTS=$(cd "${MANUAL_SRC}" && find . -name 'Var*Tests.java' | sed -e 's@.*\(Var.*Tests\).*@\1@g' | sort) + +# Generate tests and Main that covers both the generated tests and manual tests +python3 ./util-src/generate_java.py "${GENERATED_SRC}" ${MANUAL_TESTS} + +# Desugar is not happy with our Java 9 byte code, it shouldn't be necessary here anyway. +export USE_DESUGAR=false + +# Invoke default build with increased heap size for dx +./default-build "$@" --experimental var-handles --dx-vm-option -JXmx384m diff --git a/test/712-varhandle-invocations/expected.txt b/test/712-varhandle-invocations/expected.txt new file mode 100644 index 0000000000..af921901f8 --- /dev/null +++ b/test/712-varhandle-invocations/expected.txt @@ -0,0 +1,3183 @@ +FieldGetBoolean...OK +FieldGetByte...OK +FieldGetShort...OK +FieldGetChar...OK +FieldGetInt...OK +FieldGetLong...OK +FieldGetFloat...OK +FieldGetDouble...OK +FieldSetBoolean...OK +FieldSetByte...OK +FieldSetShort...OK +FieldSetChar...OK +FieldSetInt...OK +FieldSetLong...OK +FieldSetFloat...OK +FieldSetDouble...OK +FieldGetVolatileBoolean...OK +FieldGetVolatileByte...OK +FieldGetVolatileShort...OK +FieldGetVolatileChar...OK +FieldGetVolatileInt...OK +FieldGetVolatileLong...OK +FieldGetVolatileFloat...OK +FieldGetVolatileDouble...OK +FieldSetVolatileBoolean...OK +FieldSetVolatileByte...OK +FieldSetVolatileShort...OK +FieldSetVolatileChar...OK +FieldSetVolatileInt...OK +FieldSetVolatileLong...OK +FieldSetVolatileFloat...OK +FieldSetVolatileDouble...OK +FieldGetAcquireBoolean...OK +FieldGetAcquireByte...OK +FieldGetAcquireShort...OK +FieldGetAcquireChar...OK +FieldGetAcquireInt...OK +FieldGetAcquireLong...OK +FieldGetAcquireFloat...OK +FieldGetAcquireDouble...OK +FieldSetReleaseBoolean...OK +FieldSetReleaseByte...OK +FieldSetReleaseShort...OK +FieldSetReleaseChar...OK +FieldSetReleaseInt...OK +FieldSetReleaseLong...OK +FieldSetReleaseFloat...OK +FieldSetReleaseDouble...OK +FieldGetOpaqueBoolean...OK +FieldGetOpaqueByte...OK +FieldGetOpaqueShort...OK +FieldGetOpaqueChar...OK +FieldGetOpaqueInt...OK +FieldGetOpaqueLong...OK +FieldGetOpaqueFloat...OK +FieldGetOpaqueDouble...OK +FieldSetOpaqueBoolean...OK +FieldSetOpaqueByte...OK +FieldSetOpaqueShort...OK +FieldSetOpaqueChar...OK +FieldSetOpaqueInt...OK +FieldSetOpaqueLong...OK +FieldSetOpaqueFloat...OK +FieldSetOpaqueDouble...OK +FieldCompareAndSetBoolean...OK +FieldCompareAndSetByte...OK +FieldCompareAndSetShort...OK +FieldCompareAndSetChar...OK +FieldCompareAndSetInt...OK +FieldCompareAndSetLong...OK +FieldCompareAndSetFloat...OK +FieldCompareAndSetDouble...OK +FieldCompareAndExchangeBoolean...OK +FieldCompareAndExchangeByte...OK +FieldCompareAndExchangeShort...OK +FieldCompareAndExchangeChar...OK +FieldCompareAndExchangeInt...OK +FieldCompareAndExchangeLong...OK +FieldCompareAndExchangeFloat...OK +FieldCompareAndExchangeDouble...OK +FieldCompareAndExchangeAcquireBoolean...OK +FieldCompareAndExchangeAcquireByte...OK +FieldCompareAndExchangeAcquireShort...OK +FieldCompareAndExchangeAcquireChar...OK +FieldCompareAndExchangeAcquireInt...OK +FieldCompareAndExchangeAcquireLong...OK +FieldCompareAndExchangeAcquireFloat...OK +FieldCompareAndExchangeAcquireDouble...OK +FieldCompareAndExchangeReleaseBoolean...OK +FieldCompareAndExchangeReleaseByte...OK +FieldCompareAndExchangeReleaseShort...OK +FieldCompareAndExchangeReleaseChar...OK +FieldCompareAndExchangeReleaseInt...OK +FieldCompareAndExchangeReleaseLong...OK +FieldCompareAndExchangeReleaseFloat...OK +FieldCompareAndExchangeReleaseDouble...OK +FieldWeakCompareAndSetPlainBoolean...OK +FieldWeakCompareAndSetPlainByte...OK +FieldWeakCompareAndSetPlainShort...OK +FieldWeakCompareAndSetPlainChar...OK +FieldWeakCompareAndSetPlainInt...OK +FieldWeakCompareAndSetPlainLong...OK +FieldWeakCompareAndSetPlainFloat...OK +FieldWeakCompareAndSetPlainDouble...OK +FieldWeakCompareAndSetBoolean...OK +FieldWeakCompareAndSetByte...OK +FieldWeakCompareAndSetShort...OK +FieldWeakCompareAndSetChar...OK +FieldWeakCompareAndSetInt...OK +FieldWeakCompareAndSetLong...OK +FieldWeakCompareAndSetFloat...OK +FieldWeakCompareAndSetDouble...OK +FieldWeakCompareAndSetAcquireBoolean...OK +FieldWeakCompareAndSetAcquireByte...OK +FieldWeakCompareAndSetAcquireShort...OK +FieldWeakCompareAndSetAcquireChar...OK +FieldWeakCompareAndSetAcquireInt...OK +FieldWeakCompareAndSetAcquireLong...OK +FieldWeakCompareAndSetAcquireFloat...OK +FieldWeakCompareAndSetAcquireDouble...OK +FieldWeakCompareAndSetReleaseBoolean...OK +FieldWeakCompareAndSetReleaseByte...OK +FieldWeakCompareAndSetReleaseShort...OK +FieldWeakCompareAndSetReleaseChar...OK +FieldWeakCompareAndSetReleaseInt...OK +FieldWeakCompareAndSetReleaseLong...OK +FieldWeakCompareAndSetReleaseFloat...OK +FieldWeakCompareAndSetReleaseDouble...OK +FieldGetAndSetBoolean...OK +FieldGetAndSetByte...OK +FieldGetAndSetShort...OK +FieldGetAndSetChar...OK +FieldGetAndSetInt...OK +FieldGetAndSetLong...OK +FieldGetAndSetFloat...OK +FieldGetAndSetDouble...OK +FieldGetAndSetAcquireBoolean...OK +FieldGetAndSetAcquireByte...OK +FieldGetAndSetAcquireShort...OK +FieldGetAndSetAcquireChar...OK +FieldGetAndSetAcquireInt...OK +FieldGetAndSetAcquireLong...OK +FieldGetAndSetAcquireFloat...OK +FieldGetAndSetAcquireDouble...OK +FieldGetAndSetReleaseBoolean...OK +FieldGetAndSetReleaseByte...OK +FieldGetAndSetReleaseShort...OK +FieldGetAndSetReleaseChar...OK +FieldGetAndSetReleaseInt...OK +FieldGetAndSetReleaseLong...OK +FieldGetAndSetReleaseFloat...OK +FieldGetAndSetReleaseDouble...OK +FieldGetAndAddBoolean...OK +FieldGetAndAddByte...OK +FieldGetAndAddShort...OK +FieldGetAndAddChar...OK +FieldGetAndAddInt...OK +FieldGetAndAddLong...OK +FieldGetAndAddFloat...OK +FieldGetAndAddDouble...OK +FieldGetAndAddAcquireBoolean...OK +FieldGetAndAddAcquireByte...OK +FieldGetAndAddAcquireShort...OK +FieldGetAndAddAcquireChar...OK +FieldGetAndAddAcquireInt...OK +FieldGetAndAddAcquireLong...OK +FieldGetAndAddAcquireFloat...OK +FieldGetAndAddAcquireDouble...OK +FieldGetAndAddReleaseBoolean...OK +FieldGetAndAddReleaseByte...OK +FieldGetAndAddReleaseShort...OK +FieldGetAndAddReleaseChar...OK +FieldGetAndAddReleaseInt...OK +FieldGetAndAddReleaseLong...OK +FieldGetAndAddReleaseFloat...OK +FieldGetAndAddReleaseDouble...OK +FieldGetAndBitwiseOrBoolean...OK +FieldGetAndBitwiseOrByte...OK +FieldGetAndBitwiseOrShort...OK +FieldGetAndBitwiseOrChar...OK +FieldGetAndBitwiseOrInt...OK +FieldGetAndBitwiseOrLong...OK +FieldGetAndBitwiseOrFloat...OK +FieldGetAndBitwiseOrDouble...OK +FieldGetAndBitwiseOrReleaseBoolean...OK +FieldGetAndBitwiseOrReleaseByte...OK +FieldGetAndBitwiseOrReleaseShort...OK +FieldGetAndBitwiseOrReleaseChar...OK +FieldGetAndBitwiseOrReleaseInt...OK +FieldGetAndBitwiseOrReleaseLong...OK +FieldGetAndBitwiseOrReleaseFloat...OK +FieldGetAndBitwiseOrReleaseDouble...OK +FieldGetAndBitwiseOrAcquireBoolean...OK +FieldGetAndBitwiseOrAcquireByte...OK +FieldGetAndBitwiseOrAcquireShort...OK +FieldGetAndBitwiseOrAcquireChar...OK +FieldGetAndBitwiseOrAcquireInt...OK +FieldGetAndBitwiseOrAcquireLong...OK +FieldGetAndBitwiseOrAcquireFloat...OK +FieldGetAndBitwiseOrAcquireDouble...OK +FieldGetAndBitwiseAndBoolean...OK +FieldGetAndBitwiseAndByte...OK +FieldGetAndBitwiseAndShort...OK +FieldGetAndBitwiseAndChar...OK +FieldGetAndBitwiseAndInt...OK +FieldGetAndBitwiseAndLong...OK +FieldGetAndBitwiseAndFloat...OK +FieldGetAndBitwiseAndDouble...OK +FieldGetAndBitwiseAndReleaseBoolean...OK +FieldGetAndBitwiseAndReleaseByte...OK +FieldGetAndBitwiseAndReleaseShort...OK +FieldGetAndBitwiseAndReleaseChar...OK +FieldGetAndBitwiseAndReleaseInt...OK +FieldGetAndBitwiseAndReleaseLong...OK +FieldGetAndBitwiseAndReleaseFloat...OK +FieldGetAndBitwiseAndReleaseDouble...OK +FieldGetAndBitwiseAndAcquireBoolean...OK +FieldGetAndBitwiseAndAcquireByte...OK +FieldGetAndBitwiseAndAcquireShort...OK +FieldGetAndBitwiseAndAcquireChar...OK +FieldGetAndBitwiseAndAcquireInt...OK +FieldGetAndBitwiseAndAcquireLong...OK +FieldGetAndBitwiseAndAcquireFloat...OK +FieldGetAndBitwiseAndAcquireDouble...OK +FieldGetAndBitwiseXorBoolean...OK +FieldGetAndBitwiseXorByte...OK +FieldGetAndBitwiseXorShort...OK +FieldGetAndBitwiseXorChar...OK +FieldGetAndBitwiseXorInt...OK +FieldGetAndBitwiseXorLong...OK +FieldGetAndBitwiseXorFloat...OK +FieldGetAndBitwiseXorDouble...OK +FieldGetAndBitwiseXorReleaseBoolean...OK +FieldGetAndBitwiseXorReleaseByte...OK +FieldGetAndBitwiseXorReleaseShort...OK +FieldGetAndBitwiseXorReleaseChar...OK +FieldGetAndBitwiseXorReleaseInt...OK +FieldGetAndBitwiseXorReleaseLong...OK +FieldGetAndBitwiseXorReleaseFloat...OK +FieldGetAndBitwiseXorReleaseDouble...OK +FieldGetAndBitwiseXorAcquireBoolean...OK +FieldGetAndBitwiseXorAcquireByte...OK +FieldGetAndBitwiseXorAcquireShort...OK +FieldGetAndBitwiseXorAcquireChar...OK +FieldGetAndBitwiseXorAcquireInt...OK +FieldGetAndBitwiseXorAcquireLong...OK +FieldGetAndBitwiseXorAcquireFloat...OK +FieldGetAndBitwiseXorAcquireDouble...OK +FinalFieldGetBoolean...OK +FinalFieldGetByte...OK +FinalFieldGetShort...OK +FinalFieldGetChar...OK +FinalFieldGetInt...OK +FinalFieldGetLong...OK +FinalFieldGetFloat...OK +FinalFieldGetDouble...OK +FinalFieldSetBoolean...OK +FinalFieldSetByte...OK +FinalFieldSetShort...OK +FinalFieldSetChar...OK +FinalFieldSetInt...OK +FinalFieldSetLong...OK +FinalFieldSetFloat...OK +FinalFieldSetDouble...OK +FinalFieldGetVolatileBoolean...OK +FinalFieldGetVolatileByte...OK +FinalFieldGetVolatileShort...OK +FinalFieldGetVolatileChar...OK +FinalFieldGetVolatileInt...OK +FinalFieldGetVolatileLong...OK +FinalFieldGetVolatileFloat...OK +FinalFieldGetVolatileDouble...OK +FinalFieldSetVolatileBoolean...OK +FinalFieldSetVolatileByte...OK +FinalFieldSetVolatileShort...OK +FinalFieldSetVolatileChar...OK +FinalFieldSetVolatileInt...OK +FinalFieldSetVolatileLong...OK +FinalFieldSetVolatileFloat...OK +FinalFieldSetVolatileDouble...OK +FinalFieldGetAcquireBoolean...OK +FinalFieldGetAcquireByte...OK +FinalFieldGetAcquireShort...OK +FinalFieldGetAcquireChar...OK +FinalFieldGetAcquireInt...OK +FinalFieldGetAcquireLong...OK +FinalFieldGetAcquireFloat...OK +FinalFieldGetAcquireDouble...OK +FinalFieldSetReleaseBoolean...OK +FinalFieldSetReleaseByte...OK +FinalFieldSetReleaseShort...OK +FinalFieldSetReleaseChar...OK +FinalFieldSetReleaseInt...OK +FinalFieldSetReleaseLong...OK +FinalFieldSetReleaseFloat...OK +FinalFieldSetReleaseDouble...OK +FinalFieldGetOpaqueBoolean...OK +FinalFieldGetOpaqueByte...OK +FinalFieldGetOpaqueShort...OK +FinalFieldGetOpaqueChar...OK +FinalFieldGetOpaqueInt...OK +FinalFieldGetOpaqueLong...OK +FinalFieldGetOpaqueFloat...OK +FinalFieldGetOpaqueDouble...OK +FinalFieldSetOpaqueBoolean...OK +FinalFieldSetOpaqueByte...OK +FinalFieldSetOpaqueShort...OK +FinalFieldSetOpaqueChar...OK +FinalFieldSetOpaqueInt...OK +FinalFieldSetOpaqueLong...OK +FinalFieldSetOpaqueFloat...OK +FinalFieldSetOpaqueDouble...OK +FinalFieldCompareAndSetBoolean...OK +FinalFieldCompareAndSetByte...OK +FinalFieldCompareAndSetShort...OK +FinalFieldCompareAndSetChar...OK +FinalFieldCompareAndSetInt...OK +FinalFieldCompareAndSetLong...OK +FinalFieldCompareAndSetFloat...OK +FinalFieldCompareAndSetDouble...OK +FinalFieldCompareAndExchangeBoolean...OK +FinalFieldCompareAndExchangeByte...OK +FinalFieldCompareAndExchangeShort...OK +FinalFieldCompareAndExchangeChar...OK +FinalFieldCompareAndExchangeInt...OK +FinalFieldCompareAndExchangeLong...OK +FinalFieldCompareAndExchangeFloat...OK +FinalFieldCompareAndExchangeDouble...OK +FinalFieldCompareAndExchangeAcquireBoolean...OK +FinalFieldCompareAndExchangeAcquireByte...OK +FinalFieldCompareAndExchangeAcquireShort...OK +FinalFieldCompareAndExchangeAcquireChar...OK +FinalFieldCompareAndExchangeAcquireInt...OK +FinalFieldCompareAndExchangeAcquireLong...OK +FinalFieldCompareAndExchangeAcquireFloat...OK +FinalFieldCompareAndExchangeAcquireDouble...OK +FinalFieldCompareAndExchangeReleaseBoolean...OK +FinalFieldCompareAndExchangeReleaseByte...OK +FinalFieldCompareAndExchangeReleaseShort...OK +FinalFieldCompareAndExchangeReleaseChar...OK +FinalFieldCompareAndExchangeReleaseInt...OK +FinalFieldCompareAndExchangeReleaseLong...OK +FinalFieldCompareAndExchangeReleaseFloat...OK +FinalFieldCompareAndExchangeReleaseDouble...OK +FinalFieldWeakCompareAndSetPlainBoolean...OK +FinalFieldWeakCompareAndSetPlainByte...OK +FinalFieldWeakCompareAndSetPlainShort...OK +FinalFieldWeakCompareAndSetPlainChar...OK +FinalFieldWeakCompareAndSetPlainInt...OK +FinalFieldWeakCompareAndSetPlainLong...OK +FinalFieldWeakCompareAndSetPlainFloat...OK +FinalFieldWeakCompareAndSetPlainDouble...OK +FinalFieldWeakCompareAndSetBoolean...OK +FinalFieldWeakCompareAndSetByte...OK +FinalFieldWeakCompareAndSetShort...OK +FinalFieldWeakCompareAndSetChar...OK +FinalFieldWeakCompareAndSetInt...OK +FinalFieldWeakCompareAndSetLong...OK +FinalFieldWeakCompareAndSetFloat...OK +FinalFieldWeakCompareAndSetDouble...OK +FinalFieldWeakCompareAndSetAcquireBoolean...OK +FinalFieldWeakCompareAndSetAcquireByte...OK +FinalFieldWeakCompareAndSetAcquireShort...OK +FinalFieldWeakCompareAndSetAcquireChar...OK +FinalFieldWeakCompareAndSetAcquireInt...OK +FinalFieldWeakCompareAndSetAcquireLong...OK +FinalFieldWeakCompareAndSetAcquireFloat...OK +FinalFieldWeakCompareAndSetAcquireDouble...OK +FinalFieldWeakCompareAndSetReleaseBoolean...OK +FinalFieldWeakCompareAndSetReleaseByte...OK +FinalFieldWeakCompareAndSetReleaseShort...OK +FinalFieldWeakCompareAndSetReleaseChar...OK +FinalFieldWeakCompareAndSetReleaseInt...OK +FinalFieldWeakCompareAndSetReleaseLong...OK +FinalFieldWeakCompareAndSetReleaseFloat...OK +FinalFieldWeakCompareAndSetReleaseDouble...OK +FinalFieldGetAndSetBoolean...OK +FinalFieldGetAndSetByte...OK +FinalFieldGetAndSetShort...OK +FinalFieldGetAndSetChar...OK +FinalFieldGetAndSetInt...OK +FinalFieldGetAndSetLong...OK +FinalFieldGetAndSetFloat...OK +FinalFieldGetAndSetDouble...OK +FinalFieldGetAndSetAcquireBoolean...OK +FinalFieldGetAndSetAcquireByte...OK +FinalFieldGetAndSetAcquireShort...OK +FinalFieldGetAndSetAcquireChar...OK +FinalFieldGetAndSetAcquireInt...OK +FinalFieldGetAndSetAcquireLong...OK +FinalFieldGetAndSetAcquireFloat...OK +FinalFieldGetAndSetAcquireDouble...OK +FinalFieldGetAndSetReleaseBoolean...OK +FinalFieldGetAndSetReleaseByte...OK +FinalFieldGetAndSetReleaseShort...OK +FinalFieldGetAndSetReleaseChar...OK +FinalFieldGetAndSetReleaseInt...OK +FinalFieldGetAndSetReleaseLong...OK +FinalFieldGetAndSetReleaseFloat...OK +FinalFieldGetAndSetReleaseDouble...OK +FinalFieldGetAndAddBoolean...OK +FinalFieldGetAndAddByte...OK +FinalFieldGetAndAddShort...OK +FinalFieldGetAndAddChar...OK +FinalFieldGetAndAddInt...OK +FinalFieldGetAndAddLong...OK +FinalFieldGetAndAddFloat...OK +FinalFieldGetAndAddDouble...OK +FinalFieldGetAndAddAcquireBoolean...OK +FinalFieldGetAndAddAcquireByte...OK +FinalFieldGetAndAddAcquireShort...OK +FinalFieldGetAndAddAcquireChar...OK +FinalFieldGetAndAddAcquireInt...OK +FinalFieldGetAndAddAcquireLong...OK +FinalFieldGetAndAddAcquireFloat...OK +FinalFieldGetAndAddAcquireDouble...OK +FinalFieldGetAndAddReleaseBoolean...OK +FinalFieldGetAndAddReleaseByte...OK +FinalFieldGetAndAddReleaseShort...OK +FinalFieldGetAndAddReleaseChar...OK +FinalFieldGetAndAddReleaseInt...OK +FinalFieldGetAndAddReleaseLong...OK +FinalFieldGetAndAddReleaseFloat...OK +FinalFieldGetAndAddReleaseDouble...OK +FinalFieldGetAndBitwiseOrBoolean...OK +FinalFieldGetAndBitwiseOrByte...OK +FinalFieldGetAndBitwiseOrShort...OK +FinalFieldGetAndBitwiseOrChar...OK +FinalFieldGetAndBitwiseOrInt...OK +FinalFieldGetAndBitwiseOrLong...OK +FinalFieldGetAndBitwiseOrFloat...OK +FinalFieldGetAndBitwiseOrDouble...OK +FinalFieldGetAndBitwiseOrReleaseBoolean...OK +FinalFieldGetAndBitwiseOrReleaseByte...OK +FinalFieldGetAndBitwiseOrReleaseShort...OK +FinalFieldGetAndBitwiseOrReleaseChar...OK +FinalFieldGetAndBitwiseOrReleaseInt...OK +FinalFieldGetAndBitwiseOrReleaseLong...OK +FinalFieldGetAndBitwiseOrReleaseFloat...OK +FinalFieldGetAndBitwiseOrReleaseDouble...OK +FinalFieldGetAndBitwiseOrAcquireBoolean...OK +FinalFieldGetAndBitwiseOrAcquireByte...OK +FinalFieldGetAndBitwiseOrAcquireShort...OK +FinalFieldGetAndBitwiseOrAcquireChar...OK +FinalFieldGetAndBitwiseOrAcquireInt...OK +FinalFieldGetAndBitwiseOrAcquireLong...OK +FinalFieldGetAndBitwiseOrAcquireFloat...OK +FinalFieldGetAndBitwiseOrAcquireDouble...OK +FinalFieldGetAndBitwiseAndBoolean...OK +FinalFieldGetAndBitwiseAndByte...OK +FinalFieldGetAndBitwiseAndShort...OK +FinalFieldGetAndBitwiseAndChar...OK +FinalFieldGetAndBitwiseAndInt...OK +FinalFieldGetAndBitwiseAndLong...OK +FinalFieldGetAndBitwiseAndFloat...OK +FinalFieldGetAndBitwiseAndDouble...OK +FinalFieldGetAndBitwiseAndReleaseBoolean...OK +FinalFieldGetAndBitwiseAndReleaseByte...OK +FinalFieldGetAndBitwiseAndReleaseShort...OK +FinalFieldGetAndBitwiseAndReleaseChar...OK +FinalFieldGetAndBitwiseAndReleaseInt...OK +FinalFieldGetAndBitwiseAndReleaseLong...OK +FinalFieldGetAndBitwiseAndReleaseFloat...OK +FinalFieldGetAndBitwiseAndReleaseDouble...OK +FinalFieldGetAndBitwiseAndAcquireBoolean...OK +FinalFieldGetAndBitwiseAndAcquireByte...OK +FinalFieldGetAndBitwiseAndAcquireShort...OK +FinalFieldGetAndBitwiseAndAcquireChar...OK +FinalFieldGetAndBitwiseAndAcquireInt...OK +FinalFieldGetAndBitwiseAndAcquireLong...OK +FinalFieldGetAndBitwiseAndAcquireFloat...OK +FinalFieldGetAndBitwiseAndAcquireDouble...OK +FinalFieldGetAndBitwiseXorBoolean...OK +FinalFieldGetAndBitwiseXorByte...OK +FinalFieldGetAndBitwiseXorShort...OK +FinalFieldGetAndBitwiseXorChar...OK +FinalFieldGetAndBitwiseXorInt...OK +FinalFieldGetAndBitwiseXorLong...OK +FinalFieldGetAndBitwiseXorFloat...OK +FinalFieldGetAndBitwiseXorDouble...OK +FinalFieldGetAndBitwiseXorReleaseBoolean...OK +FinalFieldGetAndBitwiseXorReleaseByte...OK +FinalFieldGetAndBitwiseXorReleaseShort...OK +FinalFieldGetAndBitwiseXorReleaseChar...OK +FinalFieldGetAndBitwiseXorReleaseInt...OK +FinalFieldGetAndBitwiseXorReleaseLong...OK +FinalFieldGetAndBitwiseXorReleaseFloat...OK +FinalFieldGetAndBitwiseXorReleaseDouble...OK +FinalFieldGetAndBitwiseXorAcquireBoolean...OK +FinalFieldGetAndBitwiseXorAcquireByte...OK +FinalFieldGetAndBitwiseXorAcquireShort...OK +FinalFieldGetAndBitwiseXorAcquireChar...OK +FinalFieldGetAndBitwiseXorAcquireInt...OK +FinalFieldGetAndBitwiseXorAcquireLong...OK +FinalFieldGetAndBitwiseXorAcquireFloat...OK +FinalFieldGetAndBitwiseXorAcquireDouble...OK +StaticFieldGetBoolean...OK +StaticFieldGetByte...OK +StaticFieldGetShort...OK +StaticFieldGetChar...OK +StaticFieldGetInt...OK +StaticFieldGetLong...OK +StaticFieldGetFloat...OK +StaticFieldGetDouble...OK +StaticFieldSetBoolean...OK +StaticFieldSetByte...OK +StaticFieldSetShort...OK +StaticFieldSetChar...OK +StaticFieldSetInt...OK +StaticFieldSetLong...OK +StaticFieldSetFloat...OK +StaticFieldSetDouble...OK +StaticFieldGetVolatileBoolean...OK +StaticFieldGetVolatileByte...OK +StaticFieldGetVolatileShort...OK +StaticFieldGetVolatileChar...OK +StaticFieldGetVolatileInt...OK +StaticFieldGetVolatileLong...OK +StaticFieldGetVolatileFloat...OK +StaticFieldGetVolatileDouble...OK +StaticFieldSetVolatileBoolean...OK +StaticFieldSetVolatileByte...OK +StaticFieldSetVolatileShort...OK +StaticFieldSetVolatileChar...OK +StaticFieldSetVolatileInt...OK +StaticFieldSetVolatileLong...OK +StaticFieldSetVolatileFloat...OK +StaticFieldSetVolatileDouble...OK +StaticFieldGetAcquireBoolean...OK +StaticFieldGetAcquireByte...OK +StaticFieldGetAcquireShort...OK +StaticFieldGetAcquireChar...OK +StaticFieldGetAcquireInt...OK +StaticFieldGetAcquireLong...OK +StaticFieldGetAcquireFloat...OK +StaticFieldGetAcquireDouble...OK +StaticFieldSetReleaseBoolean...OK +StaticFieldSetReleaseByte...OK +StaticFieldSetReleaseShort...OK +StaticFieldSetReleaseChar...OK +StaticFieldSetReleaseInt...OK +StaticFieldSetReleaseLong...OK +StaticFieldSetReleaseFloat...OK +StaticFieldSetReleaseDouble...OK +StaticFieldGetOpaqueBoolean...OK +StaticFieldGetOpaqueByte...OK +StaticFieldGetOpaqueShort...OK +StaticFieldGetOpaqueChar...OK +StaticFieldGetOpaqueInt...OK +StaticFieldGetOpaqueLong...OK +StaticFieldGetOpaqueFloat...OK +StaticFieldGetOpaqueDouble...OK +StaticFieldSetOpaqueBoolean...OK +StaticFieldSetOpaqueByte...OK +StaticFieldSetOpaqueShort...OK +StaticFieldSetOpaqueChar...OK +StaticFieldSetOpaqueInt...OK +StaticFieldSetOpaqueLong...OK +StaticFieldSetOpaqueFloat...OK +StaticFieldSetOpaqueDouble...OK +StaticFieldCompareAndSetBoolean...OK +StaticFieldCompareAndSetByte...OK +StaticFieldCompareAndSetShort...OK +StaticFieldCompareAndSetChar...OK +StaticFieldCompareAndSetInt...OK +StaticFieldCompareAndSetLong...OK +StaticFieldCompareAndSetFloat...OK +StaticFieldCompareAndSetDouble...OK +StaticFieldCompareAndExchangeBoolean...OK +StaticFieldCompareAndExchangeByte...OK +StaticFieldCompareAndExchangeShort...OK +StaticFieldCompareAndExchangeChar...OK +StaticFieldCompareAndExchangeInt...OK +StaticFieldCompareAndExchangeLong...OK +StaticFieldCompareAndExchangeFloat...OK +StaticFieldCompareAndExchangeDouble...OK +StaticFieldCompareAndExchangeAcquireBoolean...OK +StaticFieldCompareAndExchangeAcquireByte...OK +StaticFieldCompareAndExchangeAcquireShort...OK +StaticFieldCompareAndExchangeAcquireChar...OK +StaticFieldCompareAndExchangeAcquireInt...OK +StaticFieldCompareAndExchangeAcquireLong...OK +StaticFieldCompareAndExchangeAcquireFloat...OK +StaticFieldCompareAndExchangeAcquireDouble...OK +StaticFieldCompareAndExchangeReleaseBoolean...OK +StaticFieldCompareAndExchangeReleaseByte...OK +StaticFieldCompareAndExchangeReleaseShort...OK +StaticFieldCompareAndExchangeReleaseChar...OK +StaticFieldCompareAndExchangeReleaseInt...OK +StaticFieldCompareAndExchangeReleaseLong...OK +StaticFieldCompareAndExchangeReleaseFloat...OK +StaticFieldCompareAndExchangeReleaseDouble...OK +StaticFieldWeakCompareAndSetPlainBoolean...OK +StaticFieldWeakCompareAndSetPlainByte...OK +StaticFieldWeakCompareAndSetPlainShort...OK +StaticFieldWeakCompareAndSetPlainChar...OK +StaticFieldWeakCompareAndSetPlainInt...OK +StaticFieldWeakCompareAndSetPlainLong...OK +StaticFieldWeakCompareAndSetPlainFloat...OK +StaticFieldWeakCompareAndSetPlainDouble...OK +StaticFieldWeakCompareAndSetBoolean...OK +StaticFieldWeakCompareAndSetByte...OK +StaticFieldWeakCompareAndSetShort...OK +StaticFieldWeakCompareAndSetChar...OK +StaticFieldWeakCompareAndSetInt...OK +StaticFieldWeakCompareAndSetLong...OK +StaticFieldWeakCompareAndSetFloat...OK +StaticFieldWeakCompareAndSetDouble...OK +StaticFieldWeakCompareAndSetAcquireBoolean...OK +StaticFieldWeakCompareAndSetAcquireByte...OK +StaticFieldWeakCompareAndSetAcquireShort...OK +StaticFieldWeakCompareAndSetAcquireChar...OK +StaticFieldWeakCompareAndSetAcquireInt...OK +StaticFieldWeakCompareAndSetAcquireLong...OK +StaticFieldWeakCompareAndSetAcquireFloat...OK +StaticFieldWeakCompareAndSetAcquireDouble...OK +StaticFieldWeakCompareAndSetReleaseBoolean...OK +StaticFieldWeakCompareAndSetReleaseByte...OK +StaticFieldWeakCompareAndSetReleaseShort...OK +StaticFieldWeakCompareAndSetReleaseChar...OK +StaticFieldWeakCompareAndSetReleaseInt...OK +StaticFieldWeakCompareAndSetReleaseLong...OK +StaticFieldWeakCompareAndSetReleaseFloat...OK +StaticFieldWeakCompareAndSetReleaseDouble...OK +StaticFieldGetAndSetBoolean...OK +StaticFieldGetAndSetByte...OK +StaticFieldGetAndSetShort...OK +StaticFieldGetAndSetChar...OK +StaticFieldGetAndSetInt...OK +StaticFieldGetAndSetLong...OK +StaticFieldGetAndSetFloat...OK +StaticFieldGetAndSetDouble...OK +StaticFieldGetAndSetAcquireBoolean...OK +StaticFieldGetAndSetAcquireByte...OK +StaticFieldGetAndSetAcquireShort...OK +StaticFieldGetAndSetAcquireChar...OK +StaticFieldGetAndSetAcquireInt...OK +StaticFieldGetAndSetAcquireLong...OK +StaticFieldGetAndSetAcquireFloat...OK +StaticFieldGetAndSetAcquireDouble...OK +StaticFieldGetAndSetReleaseBoolean...OK +StaticFieldGetAndSetReleaseByte...OK +StaticFieldGetAndSetReleaseShort...OK +StaticFieldGetAndSetReleaseChar...OK +StaticFieldGetAndSetReleaseInt...OK +StaticFieldGetAndSetReleaseLong...OK +StaticFieldGetAndSetReleaseFloat...OK +StaticFieldGetAndSetReleaseDouble...OK +StaticFieldGetAndAddBoolean...OK +StaticFieldGetAndAddByte...OK +StaticFieldGetAndAddShort...OK +StaticFieldGetAndAddChar...OK +StaticFieldGetAndAddInt...OK +StaticFieldGetAndAddLong...OK +StaticFieldGetAndAddFloat...OK +StaticFieldGetAndAddDouble...OK +StaticFieldGetAndAddAcquireBoolean...OK +StaticFieldGetAndAddAcquireByte...OK +StaticFieldGetAndAddAcquireShort...OK +StaticFieldGetAndAddAcquireChar...OK +StaticFieldGetAndAddAcquireInt...OK +StaticFieldGetAndAddAcquireLong...OK +StaticFieldGetAndAddAcquireFloat...OK +StaticFieldGetAndAddAcquireDouble...OK +StaticFieldGetAndAddReleaseBoolean...OK +StaticFieldGetAndAddReleaseByte...OK +StaticFieldGetAndAddReleaseShort...OK +StaticFieldGetAndAddReleaseChar...OK +StaticFieldGetAndAddReleaseInt...OK +StaticFieldGetAndAddReleaseLong...OK +StaticFieldGetAndAddReleaseFloat...OK +StaticFieldGetAndAddReleaseDouble...OK +StaticFieldGetAndBitwiseOrBoolean...OK +StaticFieldGetAndBitwiseOrByte...OK +StaticFieldGetAndBitwiseOrShort...OK +StaticFieldGetAndBitwiseOrChar...OK +StaticFieldGetAndBitwiseOrInt...OK +StaticFieldGetAndBitwiseOrLong...OK +StaticFieldGetAndBitwiseOrFloat...OK +StaticFieldGetAndBitwiseOrDouble...OK +StaticFieldGetAndBitwiseOrReleaseBoolean...OK +StaticFieldGetAndBitwiseOrReleaseByte...OK +StaticFieldGetAndBitwiseOrReleaseShort...OK +StaticFieldGetAndBitwiseOrReleaseChar...OK +StaticFieldGetAndBitwiseOrReleaseInt...OK +StaticFieldGetAndBitwiseOrReleaseLong...OK +StaticFieldGetAndBitwiseOrReleaseFloat...OK +StaticFieldGetAndBitwiseOrReleaseDouble...OK +StaticFieldGetAndBitwiseOrAcquireBoolean...OK +StaticFieldGetAndBitwiseOrAcquireByte...OK +StaticFieldGetAndBitwiseOrAcquireShort...OK +StaticFieldGetAndBitwiseOrAcquireChar...OK +StaticFieldGetAndBitwiseOrAcquireInt...OK +StaticFieldGetAndBitwiseOrAcquireLong...OK +StaticFieldGetAndBitwiseOrAcquireFloat...OK +StaticFieldGetAndBitwiseOrAcquireDouble...OK +StaticFieldGetAndBitwiseAndBoolean...OK +StaticFieldGetAndBitwiseAndByte...OK +StaticFieldGetAndBitwiseAndShort...OK +StaticFieldGetAndBitwiseAndChar...OK +StaticFieldGetAndBitwiseAndInt...OK +StaticFieldGetAndBitwiseAndLong...OK +StaticFieldGetAndBitwiseAndFloat...OK +StaticFieldGetAndBitwiseAndDouble...OK +StaticFieldGetAndBitwiseAndReleaseBoolean...OK +StaticFieldGetAndBitwiseAndReleaseByte...OK +StaticFieldGetAndBitwiseAndReleaseShort...OK +StaticFieldGetAndBitwiseAndReleaseChar...OK +StaticFieldGetAndBitwiseAndReleaseInt...OK +StaticFieldGetAndBitwiseAndReleaseLong...OK +StaticFieldGetAndBitwiseAndReleaseFloat...OK +StaticFieldGetAndBitwiseAndReleaseDouble...OK +StaticFieldGetAndBitwiseAndAcquireBoolean...OK +StaticFieldGetAndBitwiseAndAcquireByte...OK +StaticFieldGetAndBitwiseAndAcquireShort...OK +StaticFieldGetAndBitwiseAndAcquireChar...OK +StaticFieldGetAndBitwiseAndAcquireInt...OK +StaticFieldGetAndBitwiseAndAcquireLong...OK +StaticFieldGetAndBitwiseAndAcquireFloat...OK +StaticFieldGetAndBitwiseAndAcquireDouble...OK +StaticFieldGetAndBitwiseXorBoolean...OK +StaticFieldGetAndBitwiseXorByte...OK +StaticFieldGetAndBitwiseXorShort...OK +StaticFieldGetAndBitwiseXorChar...OK +StaticFieldGetAndBitwiseXorInt...OK +StaticFieldGetAndBitwiseXorLong...OK +StaticFieldGetAndBitwiseXorFloat...OK +StaticFieldGetAndBitwiseXorDouble...OK +StaticFieldGetAndBitwiseXorReleaseBoolean...OK +StaticFieldGetAndBitwiseXorReleaseByte...OK +StaticFieldGetAndBitwiseXorReleaseShort...OK +StaticFieldGetAndBitwiseXorReleaseChar...OK +StaticFieldGetAndBitwiseXorReleaseInt...OK +StaticFieldGetAndBitwiseXorReleaseLong...OK +StaticFieldGetAndBitwiseXorReleaseFloat...OK +StaticFieldGetAndBitwiseXorReleaseDouble...OK +StaticFieldGetAndBitwiseXorAcquireBoolean...OK +StaticFieldGetAndBitwiseXorAcquireByte...OK +StaticFieldGetAndBitwiseXorAcquireShort...OK +StaticFieldGetAndBitwiseXorAcquireChar...OK +StaticFieldGetAndBitwiseXorAcquireInt...OK +StaticFieldGetAndBitwiseXorAcquireLong...OK +StaticFieldGetAndBitwiseXorAcquireFloat...OK +StaticFieldGetAndBitwiseXorAcquireDouble...OK +StaticFinalFieldGetBoolean...OK +StaticFinalFieldGetByte...OK +StaticFinalFieldGetShort...OK +StaticFinalFieldGetChar...OK +StaticFinalFieldGetInt...OK +StaticFinalFieldGetLong...OK +StaticFinalFieldGetFloat...OK +StaticFinalFieldGetDouble...OK +StaticFinalFieldSetBoolean...OK +StaticFinalFieldSetByte...OK +StaticFinalFieldSetShort...OK +StaticFinalFieldSetChar...OK +StaticFinalFieldSetInt...OK +StaticFinalFieldSetLong...OK +StaticFinalFieldSetFloat...OK +StaticFinalFieldSetDouble...OK +StaticFinalFieldGetVolatileBoolean...OK +StaticFinalFieldGetVolatileByte...OK +StaticFinalFieldGetVolatileShort...OK +StaticFinalFieldGetVolatileChar...OK +StaticFinalFieldGetVolatileInt...OK +StaticFinalFieldGetVolatileLong...OK +StaticFinalFieldGetVolatileFloat...OK +StaticFinalFieldGetVolatileDouble...OK +StaticFinalFieldSetVolatileBoolean...OK +StaticFinalFieldSetVolatileByte...OK +StaticFinalFieldSetVolatileShort...OK +StaticFinalFieldSetVolatileChar...OK +StaticFinalFieldSetVolatileInt...OK +StaticFinalFieldSetVolatileLong...OK +StaticFinalFieldSetVolatileFloat...OK +StaticFinalFieldSetVolatileDouble...OK +StaticFinalFieldGetAcquireBoolean...OK +StaticFinalFieldGetAcquireByte...OK +StaticFinalFieldGetAcquireShort...OK +StaticFinalFieldGetAcquireChar...OK +StaticFinalFieldGetAcquireInt...OK +StaticFinalFieldGetAcquireLong...OK +StaticFinalFieldGetAcquireFloat...OK +StaticFinalFieldGetAcquireDouble...OK +StaticFinalFieldSetReleaseBoolean...OK +StaticFinalFieldSetReleaseByte...OK +StaticFinalFieldSetReleaseShort...OK +StaticFinalFieldSetReleaseChar...OK +StaticFinalFieldSetReleaseInt...OK +StaticFinalFieldSetReleaseLong...OK +StaticFinalFieldSetReleaseFloat...OK +StaticFinalFieldSetReleaseDouble...OK +StaticFinalFieldGetOpaqueBoolean...OK +StaticFinalFieldGetOpaqueByte...OK +StaticFinalFieldGetOpaqueShort...OK +StaticFinalFieldGetOpaqueChar...OK +StaticFinalFieldGetOpaqueInt...OK +StaticFinalFieldGetOpaqueLong...OK +StaticFinalFieldGetOpaqueFloat...OK +StaticFinalFieldGetOpaqueDouble...OK +StaticFinalFieldSetOpaqueBoolean...OK +StaticFinalFieldSetOpaqueByte...OK +StaticFinalFieldSetOpaqueShort...OK +StaticFinalFieldSetOpaqueChar...OK +StaticFinalFieldSetOpaqueInt...OK +StaticFinalFieldSetOpaqueLong...OK +StaticFinalFieldSetOpaqueFloat...OK +StaticFinalFieldSetOpaqueDouble...OK +StaticFinalFieldCompareAndSetBoolean...OK +StaticFinalFieldCompareAndSetByte...OK +StaticFinalFieldCompareAndSetShort...OK +StaticFinalFieldCompareAndSetChar...OK +StaticFinalFieldCompareAndSetInt...OK +StaticFinalFieldCompareAndSetLong...OK +StaticFinalFieldCompareAndSetFloat...OK +StaticFinalFieldCompareAndSetDouble...OK +StaticFinalFieldCompareAndExchangeBoolean...OK +StaticFinalFieldCompareAndExchangeByte...OK +StaticFinalFieldCompareAndExchangeShort...OK +StaticFinalFieldCompareAndExchangeChar...OK +StaticFinalFieldCompareAndExchangeInt...OK +StaticFinalFieldCompareAndExchangeLong...OK +StaticFinalFieldCompareAndExchangeFloat...OK +StaticFinalFieldCompareAndExchangeDouble...OK +StaticFinalFieldCompareAndExchangeAcquireBoolean...OK +StaticFinalFieldCompareAndExchangeAcquireByte...OK +StaticFinalFieldCompareAndExchangeAcquireShort...OK +StaticFinalFieldCompareAndExchangeAcquireChar...OK +StaticFinalFieldCompareAndExchangeAcquireInt...OK +StaticFinalFieldCompareAndExchangeAcquireLong...OK +StaticFinalFieldCompareAndExchangeAcquireFloat...OK +StaticFinalFieldCompareAndExchangeAcquireDouble...OK +StaticFinalFieldCompareAndExchangeReleaseBoolean...OK +StaticFinalFieldCompareAndExchangeReleaseByte...OK +StaticFinalFieldCompareAndExchangeReleaseShort...OK +StaticFinalFieldCompareAndExchangeReleaseChar...OK +StaticFinalFieldCompareAndExchangeReleaseInt...OK +StaticFinalFieldCompareAndExchangeReleaseLong...OK +StaticFinalFieldCompareAndExchangeReleaseFloat...OK +StaticFinalFieldCompareAndExchangeReleaseDouble...OK +StaticFinalFieldWeakCompareAndSetPlainBoolean...OK +StaticFinalFieldWeakCompareAndSetPlainByte...OK +StaticFinalFieldWeakCompareAndSetPlainShort...OK +StaticFinalFieldWeakCompareAndSetPlainChar...OK +StaticFinalFieldWeakCompareAndSetPlainInt...OK +StaticFinalFieldWeakCompareAndSetPlainLong...OK +StaticFinalFieldWeakCompareAndSetPlainFloat...OK +StaticFinalFieldWeakCompareAndSetPlainDouble...OK +StaticFinalFieldWeakCompareAndSetBoolean...OK +StaticFinalFieldWeakCompareAndSetByte...OK +StaticFinalFieldWeakCompareAndSetShort...OK +StaticFinalFieldWeakCompareAndSetChar...OK +StaticFinalFieldWeakCompareAndSetInt...OK +StaticFinalFieldWeakCompareAndSetLong...OK +StaticFinalFieldWeakCompareAndSetFloat...OK +StaticFinalFieldWeakCompareAndSetDouble...OK +StaticFinalFieldWeakCompareAndSetAcquireBoolean...OK +StaticFinalFieldWeakCompareAndSetAcquireByte...OK +StaticFinalFieldWeakCompareAndSetAcquireShort...OK +StaticFinalFieldWeakCompareAndSetAcquireChar...OK +StaticFinalFieldWeakCompareAndSetAcquireInt...OK +StaticFinalFieldWeakCompareAndSetAcquireLong...OK +StaticFinalFieldWeakCompareAndSetAcquireFloat...OK +StaticFinalFieldWeakCompareAndSetAcquireDouble...OK +StaticFinalFieldWeakCompareAndSetReleaseBoolean...OK +StaticFinalFieldWeakCompareAndSetReleaseByte...OK +StaticFinalFieldWeakCompareAndSetReleaseShort...OK +StaticFinalFieldWeakCompareAndSetReleaseChar...OK +StaticFinalFieldWeakCompareAndSetReleaseInt...OK +StaticFinalFieldWeakCompareAndSetReleaseLong...OK +StaticFinalFieldWeakCompareAndSetReleaseFloat...OK +StaticFinalFieldWeakCompareAndSetReleaseDouble...OK +StaticFinalFieldGetAndSetBoolean...OK +StaticFinalFieldGetAndSetByte...OK +StaticFinalFieldGetAndSetShort...OK +StaticFinalFieldGetAndSetChar...OK +StaticFinalFieldGetAndSetInt...OK +StaticFinalFieldGetAndSetLong...OK +StaticFinalFieldGetAndSetFloat...OK +StaticFinalFieldGetAndSetDouble...OK +StaticFinalFieldGetAndSetAcquireBoolean...OK +StaticFinalFieldGetAndSetAcquireByte...OK +StaticFinalFieldGetAndSetAcquireShort...OK +StaticFinalFieldGetAndSetAcquireChar...OK +StaticFinalFieldGetAndSetAcquireInt...OK +StaticFinalFieldGetAndSetAcquireLong...OK +StaticFinalFieldGetAndSetAcquireFloat...OK +StaticFinalFieldGetAndSetAcquireDouble...OK +StaticFinalFieldGetAndSetReleaseBoolean...OK +StaticFinalFieldGetAndSetReleaseByte...OK +StaticFinalFieldGetAndSetReleaseShort...OK +StaticFinalFieldGetAndSetReleaseChar...OK +StaticFinalFieldGetAndSetReleaseInt...OK +StaticFinalFieldGetAndSetReleaseLong...OK +StaticFinalFieldGetAndSetReleaseFloat...OK +StaticFinalFieldGetAndSetReleaseDouble...OK +StaticFinalFieldGetAndAddBoolean...OK +StaticFinalFieldGetAndAddByte...OK +StaticFinalFieldGetAndAddShort...OK +StaticFinalFieldGetAndAddChar...OK +StaticFinalFieldGetAndAddInt...OK +StaticFinalFieldGetAndAddLong...OK +StaticFinalFieldGetAndAddFloat...OK +StaticFinalFieldGetAndAddDouble...OK +StaticFinalFieldGetAndAddAcquireBoolean...OK +StaticFinalFieldGetAndAddAcquireByte...OK +StaticFinalFieldGetAndAddAcquireShort...OK +StaticFinalFieldGetAndAddAcquireChar...OK +StaticFinalFieldGetAndAddAcquireInt...OK +StaticFinalFieldGetAndAddAcquireLong...OK +StaticFinalFieldGetAndAddAcquireFloat...OK +StaticFinalFieldGetAndAddAcquireDouble...OK +StaticFinalFieldGetAndAddReleaseBoolean...OK +StaticFinalFieldGetAndAddReleaseByte...OK +StaticFinalFieldGetAndAddReleaseShort...OK +StaticFinalFieldGetAndAddReleaseChar...OK +StaticFinalFieldGetAndAddReleaseInt...OK +StaticFinalFieldGetAndAddReleaseLong...OK +StaticFinalFieldGetAndAddReleaseFloat...OK +StaticFinalFieldGetAndAddReleaseDouble...OK +StaticFinalFieldGetAndBitwiseOrBoolean...OK +StaticFinalFieldGetAndBitwiseOrByte...OK +StaticFinalFieldGetAndBitwiseOrShort...OK +StaticFinalFieldGetAndBitwiseOrChar...OK +StaticFinalFieldGetAndBitwiseOrInt...OK +StaticFinalFieldGetAndBitwiseOrLong...OK +StaticFinalFieldGetAndBitwiseOrFloat...OK +StaticFinalFieldGetAndBitwiseOrDouble...OK +StaticFinalFieldGetAndBitwiseOrReleaseBoolean...OK +StaticFinalFieldGetAndBitwiseOrReleaseByte...OK +StaticFinalFieldGetAndBitwiseOrReleaseShort...OK +StaticFinalFieldGetAndBitwiseOrReleaseChar...OK +StaticFinalFieldGetAndBitwiseOrReleaseInt...OK +StaticFinalFieldGetAndBitwiseOrReleaseLong...OK +StaticFinalFieldGetAndBitwiseOrReleaseFloat...OK +StaticFinalFieldGetAndBitwiseOrReleaseDouble...OK +StaticFinalFieldGetAndBitwiseOrAcquireBoolean...OK +StaticFinalFieldGetAndBitwiseOrAcquireByte...OK +StaticFinalFieldGetAndBitwiseOrAcquireShort...OK +StaticFinalFieldGetAndBitwiseOrAcquireChar...OK +StaticFinalFieldGetAndBitwiseOrAcquireInt...OK +StaticFinalFieldGetAndBitwiseOrAcquireLong...OK +StaticFinalFieldGetAndBitwiseOrAcquireFloat...OK +StaticFinalFieldGetAndBitwiseOrAcquireDouble...OK +StaticFinalFieldGetAndBitwiseAndBoolean...OK +StaticFinalFieldGetAndBitwiseAndByte...OK +StaticFinalFieldGetAndBitwiseAndShort...OK +StaticFinalFieldGetAndBitwiseAndChar...OK +StaticFinalFieldGetAndBitwiseAndInt...OK +StaticFinalFieldGetAndBitwiseAndLong...OK +StaticFinalFieldGetAndBitwiseAndFloat...OK +StaticFinalFieldGetAndBitwiseAndDouble...OK +StaticFinalFieldGetAndBitwiseAndReleaseBoolean...OK +StaticFinalFieldGetAndBitwiseAndReleaseByte...OK +StaticFinalFieldGetAndBitwiseAndReleaseShort...OK +StaticFinalFieldGetAndBitwiseAndReleaseChar...OK +StaticFinalFieldGetAndBitwiseAndReleaseInt...OK +StaticFinalFieldGetAndBitwiseAndReleaseLong...OK +StaticFinalFieldGetAndBitwiseAndReleaseFloat...OK +StaticFinalFieldGetAndBitwiseAndReleaseDouble...OK +StaticFinalFieldGetAndBitwiseAndAcquireBoolean...OK +StaticFinalFieldGetAndBitwiseAndAcquireByte...OK +StaticFinalFieldGetAndBitwiseAndAcquireShort...OK +StaticFinalFieldGetAndBitwiseAndAcquireChar...OK +StaticFinalFieldGetAndBitwiseAndAcquireInt...OK +StaticFinalFieldGetAndBitwiseAndAcquireLong...OK +StaticFinalFieldGetAndBitwiseAndAcquireFloat...OK +StaticFinalFieldGetAndBitwiseAndAcquireDouble...OK +StaticFinalFieldGetAndBitwiseXorBoolean...OK +StaticFinalFieldGetAndBitwiseXorByte...OK +StaticFinalFieldGetAndBitwiseXorShort...OK +StaticFinalFieldGetAndBitwiseXorChar...OK +StaticFinalFieldGetAndBitwiseXorInt...OK +StaticFinalFieldGetAndBitwiseXorLong...OK +StaticFinalFieldGetAndBitwiseXorFloat...OK +StaticFinalFieldGetAndBitwiseXorDouble...OK +StaticFinalFieldGetAndBitwiseXorReleaseBoolean...OK +StaticFinalFieldGetAndBitwiseXorReleaseByte...OK +StaticFinalFieldGetAndBitwiseXorReleaseShort...OK +StaticFinalFieldGetAndBitwiseXorReleaseChar...OK +StaticFinalFieldGetAndBitwiseXorReleaseInt...OK +StaticFinalFieldGetAndBitwiseXorReleaseLong...OK +StaticFinalFieldGetAndBitwiseXorReleaseFloat...OK +StaticFinalFieldGetAndBitwiseXorReleaseDouble...OK +StaticFinalFieldGetAndBitwiseXorAcquireBoolean...OK +StaticFinalFieldGetAndBitwiseXorAcquireByte...OK +StaticFinalFieldGetAndBitwiseXorAcquireShort...OK +StaticFinalFieldGetAndBitwiseXorAcquireChar...OK +StaticFinalFieldGetAndBitwiseXorAcquireInt...OK +StaticFinalFieldGetAndBitwiseXorAcquireLong...OK +StaticFinalFieldGetAndBitwiseXorAcquireFloat...OK +StaticFinalFieldGetAndBitwiseXorAcquireDouble...OK +ArrayElementGetBoolean...OK +ArrayElementGetByte...OK +ArrayElementGetShort...OK +ArrayElementGetChar...OK +ArrayElementGetInt...OK +ArrayElementGetLong...OK +ArrayElementGetFloat...OK +ArrayElementGetDouble...OK +ArrayElementSetBoolean...OK +ArrayElementSetByte...OK +ArrayElementSetShort...OK +ArrayElementSetChar...OK +ArrayElementSetInt...OK +ArrayElementSetLong...OK +ArrayElementSetFloat...OK +ArrayElementSetDouble...OK +ArrayElementGetVolatileBoolean...OK +ArrayElementGetVolatileByte...OK +ArrayElementGetVolatileShort...OK +ArrayElementGetVolatileChar...OK +ArrayElementGetVolatileInt...OK +ArrayElementGetVolatileLong...OK +ArrayElementGetVolatileFloat...OK +ArrayElementGetVolatileDouble...OK +ArrayElementSetVolatileBoolean...OK +ArrayElementSetVolatileByte...OK +ArrayElementSetVolatileShort...OK +ArrayElementSetVolatileChar...OK +ArrayElementSetVolatileInt...OK +ArrayElementSetVolatileLong...OK +ArrayElementSetVolatileFloat...OK +ArrayElementSetVolatileDouble...OK +ArrayElementGetAcquireBoolean...OK +ArrayElementGetAcquireByte...OK +ArrayElementGetAcquireShort...OK +ArrayElementGetAcquireChar...OK +ArrayElementGetAcquireInt...OK +ArrayElementGetAcquireLong...OK +ArrayElementGetAcquireFloat...OK +ArrayElementGetAcquireDouble...OK +ArrayElementSetReleaseBoolean...OK +ArrayElementSetReleaseByte...OK +ArrayElementSetReleaseShort...OK +ArrayElementSetReleaseChar...OK +ArrayElementSetReleaseInt...OK +ArrayElementSetReleaseLong...OK +ArrayElementSetReleaseFloat...OK +ArrayElementSetReleaseDouble...OK +ArrayElementGetOpaqueBoolean...OK +ArrayElementGetOpaqueByte...OK +ArrayElementGetOpaqueShort...OK +ArrayElementGetOpaqueChar...OK +ArrayElementGetOpaqueInt...OK +ArrayElementGetOpaqueLong...OK +ArrayElementGetOpaqueFloat...OK +ArrayElementGetOpaqueDouble...OK +ArrayElementSetOpaqueBoolean...OK +ArrayElementSetOpaqueByte...OK +ArrayElementSetOpaqueShort...OK +ArrayElementSetOpaqueChar...OK +ArrayElementSetOpaqueInt...OK +ArrayElementSetOpaqueLong...OK +ArrayElementSetOpaqueFloat...OK +ArrayElementSetOpaqueDouble...OK +ArrayElementCompareAndSetBoolean...OK +ArrayElementCompareAndSetByte...OK +ArrayElementCompareAndSetShort...OK +ArrayElementCompareAndSetChar...OK +ArrayElementCompareAndSetInt...OK +ArrayElementCompareAndSetLong...OK +ArrayElementCompareAndSetFloat...OK +ArrayElementCompareAndSetDouble...OK +ArrayElementCompareAndExchangeBoolean...OK +ArrayElementCompareAndExchangeByte...OK +ArrayElementCompareAndExchangeShort...OK +ArrayElementCompareAndExchangeChar...OK +ArrayElementCompareAndExchangeInt...OK +ArrayElementCompareAndExchangeLong...OK +ArrayElementCompareAndExchangeFloat...OK +ArrayElementCompareAndExchangeDouble...OK +ArrayElementCompareAndExchangeAcquireBoolean...OK +ArrayElementCompareAndExchangeAcquireByte...OK +ArrayElementCompareAndExchangeAcquireShort...OK +ArrayElementCompareAndExchangeAcquireChar...OK +ArrayElementCompareAndExchangeAcquireInt...OK +ArrayElementCompareAndExchangeAcquireLong...OK +ArrayElementCompareAndExchangeAcquireFloat...OK +ArrayElementCompareAndExchangeAcquireDouble...OK +ArrayElementCompareAndExchangeReleaseBoolean...OK +ArrayElementCompareAndExchangeReleaseByte...OK +ArrayElementCompareAndExchangeReleaseShort...OK +ArrayElementCompareAndExchangeReleaseChar...OK +ArrayElementCompareAndExchangeReleaseInt...OK +ArrayElementCompareAndExchangeReleaseLong...OK +ArrayElementCompareAndExchangeReleaseFloat...OK +ArrayElementCompareAndExchangeReleaseDouble...OK +ArrayElementWeakCompareAndSetPlainBoolean...OK +ArrayElementWeakCompareAndSetPlainByte...OK +ArrayElementWeakCompareAndSetPlainShort...OK +ArrayElementWeakCompareAndSetPlainChar...OK +ArrayElementWeakCompareAndSetPlainInt...OK +ArrayElementWeakCompareAndSetPlainLong...OK +ArrayElementWeakCompareAndSetPlainFloat...OK +ArrayElementWeakCompareAndSetPlainDouble...OK +ArrayElementWeakCompareAndSetBoolean...OK +ArrayElementWeakCompareAndSetByte...OK +ArrayElementWeakCompareAndSetShort...OK +ArrayElementWeakCompareAndSetChar...OK +ArrayElementWeakCompareAndSetInt...OK +ArrayElementWeakCompareAndSetLong...OK +ArrayElementWeakCompareAndSetFloat...OK +ArrayElementWeakCompareAndSetDouble...OK +ArrayElementWeakCompareAndSetAcquireBoolean...OK +ArrayElementWeakCompareAndSetAcquireByte...OK +ArrayElementWeakCompareAndSetAcquireShort...OK +ArrayElementWeakCompareAndSetAcquireChar...OK +ArrayElementWeakCompareAndSetAcquireInt...OK +ArrayElementWeakCompareAndSetAcquireLong...OK +ArrayElementWeakCompareAndSetAcquireFloat...OK +ArrayElementWeakCompareAndSetAcquireDouble...OK +ArrayElementWeakCompareAndSetReleaseBoolean...OK +ArrayElementWeakCompareAndSetReleaseByte...OK +ArrayElementWeakCompareAndSetReleaseShort...OK +ArrayElementWeakCompareAndSetReleaseChar...OK +ArrayElementWeakCompareAndSetReleaseInt...OK +ArrayElementWeakCompareAndSetReleaseLong...OK +ArrayElementWeakCompareAndSetReleaseFloat...OK +ArrayElementWeakCompareAndSetReleaseDouble...OK +ArrayElementGetAndSetBoolean...OK +ArrayElementGetAndSetByte...OK +ArrayElementGetAndSetShort...OK +ArrayElementGetAndSetChar...OK +ArrayElementGetAndSetInt...OK +ArrayElementGetAndSetLong...OK +ArrayElementGetAndSetFloat...OK +ArrayElementGetAndSetDouble...OK +ArrayElementGetAndSetAcquireBoolean...OK +ArrayElementGetAndSetAcquireByte...OK +ArrayElementGetAndSetAcquireShort...OK +ArrayElementGetAndSetAcquireChar...OK +ArrayElementGetAndSetAcquireInt...OK +ArrayElementGetAndSetAcquireLong...OK +ArrayElementGetAndSetAcquireFloat...OK +ArrayElementGetAndSetAcquireDouble...OK +ArrayElementGetAndSetReleaseBoolean...OK +ArrayElementGetAndSetReleaseByte...OK +ArrayElementGetAndSetReleaseShort...OK +ArrayElementGetAndSetReleaseChar...OK +ArrayElementGetAndSetReleaseInt...OK +ArrayElementGetAndSetReleaseLong...OK +ArrayElementGetAndSetReleaseFloat...OK +ArrayElementGetAndSetReleaseDouble...OK +ArrayElementGetAndAddBoolean...OK +ArrayElementGetAndAddByte...OK +ArrayElementGetAndAddShort...OK +ArrayElementGetAndAddChar...OK +ArrayElementGetAndAddInt...OK +ArrayElementGetAndAddLong...OK +ArrayElementGetAndAddFloat...OK +ArrayElementGetAndAddDouble...OK +ArrayElementGetAndAddAcquireBoolean...OK +ArrayElementGetAndAddAcquireByte...OK +ArrayElementGetAndAddAcquireShort...OK +ArrayElementGetAndAddAcquireChar...OK +ArrayElementGetAndAddAcquireInt...OK +ArrayElementGetAndAddAcquireLong...OK +ArrayElementGetAndAddAcquireFloat...OK +ArrayElementGetAndAddAcquireDouble...OK +ArrayElementGetAndAddReleaseBoolean...OK +ArrayElementGetAndAddReleaseByte...OK +ArrayElementGetAndAddReleaseShort...OK +ArrayElementGetAndAddReleaseChar...OK +ArrayElementGetAndAddReleaseInt...OK +ArrayElementGetAndAddReleaseLong...OK +ArrayElementGetAndAddReleaseFloat...OK +ArrayElementGetAndAddReleaseDouble...OK +ArrayElementGetAndBitwiseOrBoolean...OK +ArrayElementGetAndBitwiseOrByte...OK +ArrayElementGetAndBitwiseOrShort...OK +ArrayElementGetAndBitwiseOrChar...OK +ArrayElementGetAndBitwiseOrInt...OK +ArrayElementGetAndBitwiseOrLong...OK +ArrayElementGetAndBitwiseOrFloat...OK +ArrayElementGetAndBitwiseOrDouble...OK +ArrayElementGetAndBitwiseOrReleaseBoolean...OK +ArrayElementGetAndBitwiseOrReleaseByte...OK +ArrayElementGetAndBitwiseOrReleaseShort...OK +ArrayElementGetAndBitwiseOrReleaseChar...OK +ArrayElementGetAndBitwiseOrReleaseInt...OK +ArrayElementGetAndBitwiseOrReleaseLong...OK +ArrayElementGetAndBitwiseOrReleaseFloat...OK +ArrayElementGetAndBitwiseOrReleaseDouble...OK +ArrayElementGetAndBitwiseOrAcquireBoolean...OK +ArrayElementGetAndBitwiseOrAcquireByte...OK +ArrayElementGetAndBitwiseOrAcquireShort...OK +ArrayElementGetAndBitwiseOrAcquireChar...OK +ArrayElementGetAndBitwiseOrAcquireInt...OK +ArrayElementGetAndBitwiseOrAcquireLong...OK +ArrayElementGetAndBitwiseOrAcquireFloat...OK +ArrayElementGetAndBitwiseOrAcquireDouble...OK +ArrayElementGetAndBitwiseAndBoolean...OK +ArrayElementGetAndBitwiseAndByte...OK +ArrayElementGetAndBitwiseAndShort...OK +ArrayElementGetAndBitwiseAndChar...OK +ArrayElementGetAndBitwiseAndInt...OK +ArrayElementGetAndBitwiseAndLong...OK +ArrayElementGetAndBitwiseAndFloat...OK +ArrayElementGetAndBitwiseAndDouble...OK +ArrayElementGetAndBitwiseAndReleaseBoolean...OK +ArrayElementGetAndBitwiseAndReleaseByte...OK +ArrayElementGetAndBitwiseAndReleaseShort...OK +ArrayElementGetAndBitwiseAndReleaseChar...OK +ArrayElementGetAndBitwiseAndReleaseInt...OK +ArrayElementGetAndBitwiseAndReleaseLong...OK +ArrayElementGetAndBitwiseAndReleaseFloat...OK +ArrayElementGetAndBitwiseAndReleaseDouble...OK +ArrayElementGetAndBitwiseAndAcquireBoolean...OK +ArrayElementGetAndBitwiseAndAcquireByte...OK +ArrayElementGetAndBitwiseAndAcquireShort...OK +ArrayElementGetAndBitwiseAndAcquireChar...OK +ArrayElementGetAndBitwiseAndAcquireInt...OK +ArrayElementGetAndBitwiseAndAcquireLong...OK +ArrayElementGetAndBitwiseAndAcquireFloat...OK +ArrayElementGetAndBitwiseAndAcquireDouble...OK +ArrayElementGetAndBitwiseXorBoolean...OK +ArrayElementGetAndBitwiseXorByte...OK +ArrayElementGetAndBitwiseXorShort...OK +ArrayElementGetAndBitwiseXorChar...OK +ArrayElementGetAndBitwiseXorInt...OK +ArrayElementGetAndBitwiseXorLong...OK +ArrayElementGetAndBitwiseXorFloat...OK +ArrayElementGetAndBitwiseXorDouble...OK +ArrayElementGetAndBitwiseXorReleaseBoolean...OK +ArrayElementGetAndBitwiseXorReleaseByte...OK +ArrayElementGetAndBitwiseXorReleaseShort...OK +ArrayElementGetAndBitwiseXorReleaseChar...OK +ArrayElementGetAndBitwiseXorReleaseInt...OK +ArrayElementGetAndBitwiseXorReleaseLong...OK +ArrayElementGetAndBitwiseXorReleaseFloat...OK +ArrayElementGetAndBitwiseXorReleaseDouble...OK +ArrayElementGetAndBitwiseXorAcquireBoolean...OK +ArrayElementGetAndBitwiseXorAcquireByte...OK +ArrayElementGetAndBitwiseXorAcquireShort...OK +ArrayElementGetAndBitwiseXorAcquireChar...OK +ArrayElementGetAndBitwiseXorAcquireInt...OK +ArrayElementGetAndBitwiseXorAcquireLong...OK +ArrayElementGetAndBitwiseXorAcquireFloat...OK +ArrayElementGetAndBitwiseXorAcquireDouble...OK +ByteArrayViewLEGetShort...OK +ByteArrayViewLEGetChar...OK +ByteArrayViewLEGetInt...OK +ByteArrayViewLEGetLong...OK +ByteArrayViewLEGetFloat...OK +ByteArrayViewLEGetDouble...OK +ByteArrayViewLESetShort...OK +ByteArrayViewLESetChar...OK +ByteArrayViewLESetInt...OK +ByteArrayViewLESetLong...OK +ByteArrayViewLESetFloat...OK +ByteArrayViewLESetDouble...OK +ByteArrayViewLEGetVolatileShort...OK +ByteArrayViewLEGetVolatileChar...OK +ByteArrayViewLEGetVolatileInt...OK +ByteArrayViewLEGetVolatileLong...OK +ByteArrayViewLEGetVolatileFloat...OK +ByteArrayViewLEGetVolatileDouble...OK +ByteArrayViewLESetVolatileShort...OK +ByteArrayViewLESetVolatileChar...OK +ByteArrayViewLESetVolatileInt...OK +ByteArrayViewLESetVolatileLong...OK +ByteArrayViewLESetVolatileFloat...OK +ByteArrayViewLESetVolatileDouble...OK +ByteArrayViewLEGetAcquireShort...OK +ByteArrayViewLEGetAcquireChar...OK +ByteArrayViewLEGetAcquireInt...OK +ByteArrayViewLEGetAcquireLong...OK +ByteArrayViewLEGetAcquireFloat...OK +ByteArrayViewLEGetAcquireDouble...OK +ByteArrayViewLESetReleaseShort...OK +ByteArrayViewLESetReleaseChar...OK +ByteArrayViewLESetReleaseInt...OK +ByteArrayViewLESetReleaseLong...OK +ByteArrayViewLESetReleaseFloat...OK +ByteArrayViewLESetReleaseDouble...OK +ByteArrayViewLEGetOpaqueShort...OK +ByteArrayViewLEGetOpaqueChar...OK +ByteArrayViewLEGetOpaqueInt...OK +ByteArrayViewLEGetOpaqueLong...OK +ByteArrayViewLEGetOpaqueFloat...OK +ByteArrayViewLEGetOpaqueDouble...OK +ByteArrayViewLESetOpaqueShort...OK +ByteArrayViewLESetOpaqueChar...OK +ByteArrayViewLESetOpaqueInt...OK +ByteArrayViewLESetOpaqueLong...OK +ByteArrayViewLESetOpaqueFloat...OK +ByteArrayViewLESetOpaqueDouble...OK +ByteArrayViewLECompareAndSetShort...OK +ByteArrayViewLECompareAndSetChar...OK +ByteArrayViewLECompareAndSetInt...OK +ByteArrayViewLECompareAndSetLong...OK +ByteArrayViewLECompareAndSetFloat...OK +ByteArrayViewLECompareAndSetDouble...OK +ByteArrayViewLECompareAndExchangeShort...OK +ByteArrayViewLECompareAndExchangeChar...OK +ByteArrayViewLECompareAndExchangeInt...OK +ByteArrayViewLECompareAndExchangeLong...OK +ByteArrayViewLECompareAndExchangeFloat...OK +ByteArrayViewLECompareAndExchangeDouble...OK +ByteArrayViewLECompareAndExchangeAcquireShort...OK +ByteArrayViewLECompareAndExchangeAcquireChar...OK +ByteArrayViewLECompareAndExchangeAcquireInt...OK +ByteArrayViewLECompareAndExchangeAcquireLong...OK +ByteArrayViewLECompareAndExchangeAcquireFloat...OK +ByteArrayViewLECompareAndExchangeAcquireDouble...OK +ByteArrayViewLECompareAndExchangeReleaseShort...OK +ByteArrayViewLECompareAndExchangeReleaseChar...OK +ByteArrayViewLECompareAndExchangeReleaseInt...OK +ByteArrayViewLECompareAndExchangeReleaseLong...OK +ByteArrayViewLECompareAndExchangeReleaseFloat...OK +ByteArrayViewLECompareAndExchangeReleaseDouble...OK +ByteArrayViewLEWeakCompareAndSetPlainShort...OK +ByteArrayViewLEWeakCompareAndSetPlainChar...OK +ByteArrayViewLEWeakCompareAndSetPlainInt...OK +ByteArrayViewLEWeakCompareAndSetPlainLong...OK +ByteArrayViewLEWeakCompareAndSetPlainFloat...OK +ByteArrayViewLEWeakCompareAndSetPlainDouble...OK +ByteArrayViewLEWeakCompareAndSetShort...OK +ByteArrayViewLEWeakCompareAndSetChar...OK +ByteArrayViewLEWeakCompareAndSetInt...OK +ByteArrayViewLEWeakCompareAndSetLong...OK +ByteArrayViewLEWeakCompareAndSetFloat...OK +ByteArrayViewLEWeakCompareAndSetDouble...OK +ByteArrayViewLEWeakCompareAndSetAcquireShort...OK +ByteArrayViewLEWeakCompareAndSetAcquireChar...OK +ByteArrayViewLEWeakCompareAndSetAcquireInt...OK +ByteArrayViewLEWeakCompareAndSetAcquireLong...OK +ByteArrayViewLEWeakCompareAndSetAcquireFloat...OK +ByteArrayViewLEWeakCompareAndSetAcquireDouble...OK +ByteArrayViewLEWeakCompareAndSetReleaseShort...OK +ByteArrayViewLEWeakCompareAndSetReleaseChar...OK +ByteArrayViewLEWeakCompareAndSetReleaseInt...OK +ByteArrayViewLEWeakCompareAndSetReleaseLong...OK +ByteArrayViewLEWeakCompareAndSetReleaseFloat...OK +ByteArrayViewLEWeakCompareAndSetReleaseDouble...OK +ByteArrayViewLEGetAndSetShort...OK +ByteArrayViewLEGetAndSetChar...OK +ByteArrayViewLEGetAndSetInt...OK +ByteArrayViewLEGetAndSetLong...OK +ByteArrayViewLEGetAndSetFloat...OK +ByteArrayViewLEGetAndSetDouble...OK +ByteArrayViewLEGetAndSetAcquireShort...OK +ByteArrayViewLEGetAndSetAcquireChar...OK +ByteArrayViewLEGetAndSetAcquireInt...OK +ByteArrayViewLEGetAndSetAcquireLong...OK +ByteArrayViewLEGetAndSetAcquireFloat...OK +ByteArrayViewLEGetAndSetAcquireDouble...OK +ByteArrayViewLEGetAndSetReleaseShort...OK +ByteArrayViewLEGetAndSetReleaseChar...OK +ByteArrayViewLEGetAndSetReleaseInt...OK +ByteArrayViewLEGetAndSetReleaseLong...OK +ByteArrayViewLEGetAndSetReleaseFloat...OK +ByteArrayViewLEGetAndSetReleaseDouble...OK +ByteArrayViewLEGetAndAddShort...OK +ByteArrayViewLEGetAndAddChar...OK +ByteArrayViewLEGetAndAddInt...OK +ByteArrayViewLEGetAndAddLong...OK +ByteArrayViewLEGetAndAddFloat...OK +ByteArrayViewLEGetAndAddDouble...OK +ByteArrayViewLEGetAndAddAcquireShort...OK +ByteArrayViewLEGetAndAddAcquireChar...OK +ByteArrayViewLEGetAndAddAcquireInt...OK +ByteArrayViewLEGetAndAddAcquireLong...OK +ByteArrayViewLEGetAndAddAcquireFloat...OK +ByteArrayViewLEGetAndAddAcquireDouble...OK +ByteArrayViewLEGetAndAddReleaseShort...OK +ByteArrayViewLEGetAndAddReleaseChar...OK +ByteArrayViewLEGetAndAddReleaseInt...OK +ByteArrayViewLEGetAndAddReleaseLong...OK +ByteArrayViewLEGetAndAddReleaseFloat...OK +ByteArrayViewLEGetAndAddReleaseDouble...OK +ByteArrayViewLEGetAndBitwiseOrShort...OK +ByteArrayViewLEGetAndBitwiseOrChar...OK +ByteArrayViewLEGetAndBitwiseOrInt...OK +ByteArrayViewLEGetAndBitwiseOrLong...OK +ByteArrayViewLEGetAndBitwiseOrFloat...OK +ByteArrayViewLEGetAndBitwiseOrDouble...OK +ByteArrayViewLEGetAndBitwiseOrReleaseShort...OK +ByteArrayViewLEGetAndBitwiseOrReleaseChar...OK +ByteArrayViewLEGetAndBitwiseOrReleaseInt...OK +ByteArrayViewLEGetAndBitwiseOrReleaseLong...OK +ByteArrayViewLEGetAndBitwiseOrReleaseFloat...OK +ByteArrayViewLEGetAndBitwiseOrReleaseDouble...OK +ByteArrayViewLEGetAndBitwiseOrAcquireShort...OK +ByteArrayViewLEGetAndBitwiseOrAcquireChar...OK +ByteArrayViewLEGetAndBitwiseOrAcquireInt...OK +ByteArrayViewLEGetAndBitwiseOrAcquireLong...OK +ByteArrayViewLEGetAndBitwiseOrAcquireFloat...OK +ByteArrayViewLEGetAndBitwiseOrAcquireDouble...OK +ByteArrayViewLEGetAndBitwiseAndShort...OK +ByteArrayViewLEGetAndBitwiseAndChar...OK +ByteArrayViewLEGetAndBitwiseAndInt...OK +ByteArrayViewLEGetAndBitwiseAndLong...OK +ByteArrayViewLEGetAndBitwiseAndFloat...OK +ByteArrayViewLEGetAndBitwiseAndDouble...OK +ByteArrayViewLEGetAndBitwiseAndReleaseShort...OK +ByteArrayViewLEGetAndBitwiseAndReleaseChar...OK +ByteArrayViewLEGetAndBitwiseAndReleaseInt...OK +ByteArrayViewLEGetAndBitwiseAndReleaseLong...OK +ByteArrayViewLEGetAndBitwiseAndReleaseFloat...OK +ByteArrayViewLEGetAndBitwiseAndReleaseDouble...OK +ByteArrayViewLEGetAndBitwiseAndAcquireShort...OK +ByteArrayViewLEGetAndBitwiseAndAcquireChar...OK +ByteArrayViewLEGetAndBitwiseAndAcquireInt...OK +ByteArrayViewLEGetAndBitwiseAndAcquireLong...OK +ByteArrayViewLEGetAndBitwiseAndAcquireFloat...OK +ByteArrayViewLEGetAndBitwiseAndAcquireDouble...OK +ByteArrayViewLEGetAndBitwiseXorShort...OK +ByteArrayViewLEGetAndBitwiseXorChar...OK +ByteArrayViewLEGetAndBitwiseXorInt...OK +ByteArrayViewLEGetAndBitwiseXorLong...OK +ByteArrayViewLEGetAndBitwiseXorFloat...OK +ByteArrayViewLEGetAndBitwiseXorDouble...OK +ByteArrayViewLEGetAndBitwiseXorReleaseShort...OK +ByteArrayViewLEGetAndBitwiseXorReleaseChar...OK +ByteArrayViewLEGetAndBitwiseXorReleaseInt...OK +ByteArrayViewLEGetAndBitwiseXorReleaseLong...OK +ByteArrayViewLEGetAndBitwiseXorReleaseFloat...OK +ByteArrayViewLEGetAndBitwiseXorReleaseDouble...OK +ByteArrayViewLEGetAndBitwiseXorAcquireShort...OK +ByteArrayViewLEGetAndBitwiseXorAcquireChar...OK +ByteArrayViewLEGetAndBitwiseXorAcquireInt...OK +ByteArrayViewLEGetAndBitwiseXorAcquireLong...OK +ByteArrayViewLEGetAndBitwiseXorAcquireFloat...OK +ByteArrayViewLEGetAndBitwiseXorAcquireDouble...OK +ByteArrayViewBEGetShort...OK +ByteArrayViewBEGetChar...OK +ByteArrayViewBEGetInt...OK +ByteArrayViewBEGetLong...OK +ByteArrayViewBEGetFloat...OK +ByteArrayViewBEGetDouble...OK +ByteArrayViewBESetShort...OK +ByteArrayViewBESetChar...OK +ByteArrayViewBESetInt...OK +ByteArrayViewBESetLong...OK +ByteArrayViewBESetFloat...OK +ByteArrayViewBESetDouble...OK +ByteArrayViewBEGetVolatileShort...OK +ByteArrayViewBEGetVolatileChar...OK +ByteArrayViewBEGetVolatileInt...OK +ByteArrayViewBEGetVolatileLong...OK +ByteArrayViewBEGetVolatileFloat...OK +ByteArrayViewBEGetVolatileDouble...OK +ByteArrayViewBESetVolatileShort...OK +ByteArrayViewBESetVolatileChar...OK +ByteArrayViewBESetVolatileInt...OK +ByteArrayViewBESetVolatileLong...OK +ByteArrayViewBESetVolatileFloat...OK +ByteArrayViewBESetVolatileDouble...OK +ByteArrayViewBEGetAcquireShort...OK +ByteArrayViewBEGetAcquireChar...OK +ByteArrayViewBEGetAcquireInt...OK +ByteArrayViewBEGetAcquireLong...OK +ByteArrayViewBEGetAcquireFloat...OK +ByteArrayViewBEGetAcquireDouble...OK +ByteArrayViewBESetReleaseShort...OK +ByteArrayViewBESetReleaseChar...OK +ByteArrayViewBESetReleaseInt...OK +ByteArrayViewBESetReleaseLong...OK +ByteArrayViewBESetReleaseFloat...OK +ByteArrayViewBESetReleaseDouble...OK +ByteArrayViewBEGetOpaqueShort...OK +ByteArrayViewBEGetOpaqueChar...OK +ByteArrayViewBEGetOpaqueInt...OK +ByteArrayViewBEGetOpaqueLong...OK +ByteArrayViewBEGetOpaqueFloat...OK +ByteArrayViewBEGetOpaqueDouble...OK +ByteArrayViewBESetOpaqueShort...OK +ByteArrayViewBESetOpaqueChar...OK +ByteArrayViewBESetOpaqueInt...OK +ByteArrayViewBESetOpaqueLong...OK +ByteArrayViewBESetOpaqueFloat...OK +ByteArrayViewBESetOpaqueDouble...OK +ByteArrayViewBECompareAndSetShort...OK +ByteArrayViewBECompareAndSetChar...OK +ByteArrayViewBECompareAndSetInt...OK +ByteArrayViewBECompareAndSetLong...OK +ByteArrayViewBECompareAndSetFloat...OK +ByteArrayViewBECompareAndSetDouble...OK +ByteArrayViewBECompareAndExchangeShort...OK +ByteArrayViewBECompareAndExchangeChar...OK +ByteArrayViewBECompareAndExchangeInt...OK +ByteArrayViewBECompareAndExchangeLong...OK +ByteArrayViewBECompareAndExchangeFloat...OK +ByteArrayViewBECompareAndExchangeDouble...OK +ByteArrayViewBECompareAndExchangeAcquireShort...OK +ByteArrayViewBECompareAndExchangeAcquireChar...OK +ByteArrayViewBECompareAndExchangeAcquireInt...OK +ByteArrayViewBECompareAndExchangeAcquireLong...OK +ByteArrayViewBECompareAndExchangeAcquireFloat...OK +ByteArrayViewBECompareAndExchangeAcquireDouble...OK +ByteArrayViewBECompareAndExchangeReleaseShort...OK +ByteArrayViewBECompareAndExchangeReleaseChar...OK +ByteArrayViewBECompareAndExchangeReleaseInt...OK +ByteArrayViewBECompareAndExchangeReleaseLong...OK +ByteArrayViewBECompareAndExchangeReleaseFloat...OK +ByteArrayViewBECompareAndExchangeReleaseDouble...OK +ByteArrayViewBEWeakCompareAndSetPlainShort...OK +ByteArrayViewBEWeakCompareAndSetPlainChar...OK +ByteArrayViewBEWeakCompareAndSetPlainInt...OK +ByteArrayViewBEWeakCompareAndSetPlainLong...OK +ByteArrayViewBEWeakCompareAndSetPlainFloat...OK +ByteArrayViewBEWeakCompareAndSetPlainDouble...OK +ByteArrayViewBEWeakCompareAndSetShort...OK +ByteArrayViewBEWeakCompareAndSetChar...OK +ByteArrayViewBEWeakCompareAndSetInt...OK +ByteArrayViewBEWeakCompareAndSetLong...OK +ByteArrayViewBEWeakCompareAndSetFloat...OK +ByteArrayViewBEWeakCompareAndSetDouble...OK +ByteArrayViewBEWeakCompareAndSetAcquireShort...OK +ByteArrayViewBEWeakCompareAndSetAcquireChar...OK +ByteArrayViewBEWeakCompareAndSetAcquireInt...OK +ByteArrayViewBEWeakCompareAndSetAcquireLong...OK +ByteArrayViewBEWeakCompareAndSetAcquireFloat...OK +ByteArrayViewBEWeakCompareAndSetAcquireDouble...OK +ByteArrayViewBEWeakCompareAndSetReleaseShort...OK +ByteArrayViewBEWeakCompareAndSetReleaseChar...OK +ByteArrayViewBEWeakCompareAndSetReleaseInt...OK +ByteArrayViewBEWeakCompareAndSetReleaseLong...OK +ByteArrayViewBEWeakCompareAndSetReleaseFloat...OK +ByteArrayViewBEWeakCompareAndSetReleaseDouble...OK +ByteArrayViewBEGetAndSetShort...OK +ByteArrayViewBEGetAndSetChar...OK +ByteArrayViewBEGetAndSetInt...OK +ByteArrayViewBEGetAndSetLong...OK +ByteArrayViewBEGetAndSetFloat...OK +ByteArrayViewBEGetAndSetDouble...OK +ByteArrayViewBEGetAndSetAcquireShort...OK +ByteArrayViewBEGetAndSetAcquireChar...OK +ByteArrayViewBEGetAndSetAcquireInt...OK +ByteArrayViewBEGetAndSetAcquireLong...OK +ByteArrayViewBEGetAndSetAcquireFloat...OK +ByteArrayViewBEGetAndSetAcquireDouble...OK +ByteArrayViewBEGetAndSetReleaseShort...OK +ByteArrayViewBEGetAndSetReleaseChar...OK +ByteArrayViewBEGetAndSetReleaseInt...OK +ByteArrayViewBEGetAndSetReleaseLong...OK +ByteArrayViewBEGetAndSetReleaseFloat...OK +ByteArrayViewBEGetAndSetReleaseDouble...OK +ByteArrayViewBEGetAndAddShort...OK +ByteArrayViewBEGetAndAddChar...OK +ByteArrayViewBEGetAndAddInt...OK +ByteArrayViewBEGetAndAddLong...OK +ByteArrayViewBEGetAndAddFloat...OK +ByteArrayViewBEGetAndAddDouble...OK +ByteArrayViewBEGetAndAddAcquireShort...OK +ByteArrayViewBEGetAndAddAcquireChar...OK +ByteArrayViewBEGetAndAddAcquireInt...OK +ByteArrayViewBEGetAndAddAcquireLong...OK +ByteArrayViewBEGetAndAddAcquireFloat...OK +ByteArrayViewBEGetAndAddAcquireDouble...OK +ByteArrayViewBEGetAndAddReleaseShort...OK +ByteArrayViewBEGetAndAddReleaseChar...OK +ByteArrayViewBEGetAndAddReleaseInt...OK +ByteArrayViewBEGetAndAddReleaseLong...OK +ByteArrayViewBEGetAndAddReleaseFloat...OK +ByteArrayViewBEGetAndAddReleaseDouble...OK +ByteArrayViewBEGetAndBitwiseOrShort...OK +ByteArrayViewBEGetAndBitwiseOrChar...OK +ByteArrayViewBEGetAndBitwiseOrInt...OK +ByteArrayViewBEGetAndBitwiseOrLong...OK +ByteArrayViewBEGetAndBitwiseOrFloat...OK +ByteArrayViewBEGetAndBitwiseOrDouble...OK +ByteArrayViewBEGetAndBitwiseOrReleaseShort...OK +ByteArrayViewBEGetAndBitwiseOrReleaseChar...OK +ByteArrayViewBEGetAndBitwiseOrReleaseInt...OK +ByteArrayViewBEGetAndBitwiseOrReleaseLong...OK +ByteArrayViewBEGetAndBitwiseOrReleaseFloat...OK +ByteArrayViewBEGetAndBitwiseOrReleaseDouble...OK +ByteArrayViewBEGetAndBitwiseOrAcquireShort...OK +ByteArrayViewBEGetAndBitwiseOrAcquireChar...OK +ByteArrayViewBEGetAndBitwiseOrAcquireInt...OK +ByteArrayViewBEGetAndBitwiseOrAcquireLong...OK +ByteArrayViewBEGetAndBitwiseOrAcquireFloat...OK +ByteArrayViewBEGetAndBitwiseOrAcquireDouble...OK +ByteArrayViewBEGetAndBitwiseAndShort...OK +ByteArrayViewBEGetAndBitwiseAndChar...OK +ByteArrayViewBEGetAndBitwiseAndInt...OK +ByteArrayViewBEGetAndBitwiseAndLong...OK +ByteArrayViewBEGetAndBitwiseAndFloat...OK +ByteArrayViewBEGetAndBitwiseAndDouble...OK +ByteArrayViewBEGetAndBitwiseAndReleaseShort...OK +ByteArrayViewBEGetAndBitwiseAndReleaseChar...OK +ByteArrayViewBEGetAndBitwiseAndReleaseInt...OK +ByteArrayViewBEGetAndBitwiseAndReleaseLong...OK +ByteArrayViewBEGetAndBitwiseAndReleaseFloat...OK +ByteArrayViewBEGetAndBitwiseAndReleaseDouble...OK +ByteArrayViewBEGetAndBitwiseAndAcquireShort...OK +ByteArrayViewBEGetAndBitwiseAndAcquireChar...OK +ByteArrayViewBEGetAndBitwiseAndAcquireInt...OK +ByteArrayViewBEGetAndBitwiseAndAcquireLong...OK +ByteArrayViewBEGetAndBitwiseAndAcquireFloat...OK +ByteArrayViewBEGetAndBitwiseAndAcquireDouble...OK +ByteArrayViewBEGetAndBitwiseXorShort...OK +ByteArrayViewBEGetAndBitwiseXorChar...OK +ByteArrayViewBEGetAndBitwiseXorInt...OK +ByteArrayViewBEGetAndBitwiseXorLong...OK +ByteArrayViewBEGetAndBitwiseXorFloat...OK +ByteArrayViewBEGetAndBitwiseXorDouble...OK +ByteArrayViewBEGetAndBitwiseXorReleaseShort...OK +ByteArrayViewBEGetAndBitwiseXorReleaseChar...OK +ByteArrayViewBEGetAndBitwiseXorReleaseInt...OK +ByteArrayViewBEGetAndBitwiseXorReleaseLong...OK +ByteArrayViewBEGetAndBitwiseXorReleaseFloat...OK +ByteArrayViewBEGetAndBitwiseXorReleaseDouble...OK +ByteArrayViewBEGetAndBitwiseXorAcquireShort...OK +ByteArrayViewBEGetAndBitwiseXorAcquireChar...OK +ByteArrayViewBEGetAndBitwiseXorAcquireInt...OK +ByteArrayViewBEGetAndBitwiseXorAcquireLong...OK +ByteArrayViewBEGetAndBitwiseXorAcquireFloat...OK +ByteArrayViewBEGetAndBitwiseXorAcquireDouble...OK +DirectByteBufferViewLEGetShort...OK +DirectByteBufferViewLEGetChar...OK +DirectByteBufferViewLEGetInt...OK +DirectByteBufferViewLEGetLong...OK +DirectByteBufferViewLEGetFloat...OK +DirectByteBufferViewLEGetDouble...OK +DirectByteBufferViewLESetShort...OK +DirectByteBufferViewLESetChar...OK +DirectByteBufferViewLESetInt...OK +DirectByteBufferViewLESetLong...OK +DirectByteBufferViewLESetFloat...OK +DirectByteBufferViewLESetDouble...OK +DirectByteBufferViewLEGetVolatileShort...OK +DirectByteBufferViewLEGetVolatileChar...OK +DirectByteBufferViewLEGetVolatileInt...OK +DirectByteBufferViewLEGetVolatileLong...OK +DirectByteBufferViewLEGetVolatileFloat...OK +DirectByteBufferViewLEGetVolatileDouble...OK +DirectByteBufferViewLESetVolatileShort...OK +DirectByteBufferViewLESetVolatileChar...OK +DirectByteBufferViewLESetVolatileInt...OK +DirectByteBufferViewLESetVolatileLong...OK +DirectByteBufferViewLESetVolatileFloat...OK +DirectByteBufferViewLESetVolatileDouble...OK +DirectByteBufferViewLEGetAcquireShort...OK +DirectByteBufferViewLEGetAcquireChar...OK +DirectByteBufferViewLEGetAcquireInt...OK +DirectByteBufferViewLEGetAcquireLong...OK +DirectByteBufferViewLEGetAcquireFloat...OK +DirectByteBufferViewLEGetAcquireDouble...OK +DirectByteBufferViewLESetReleaseShort...OK +DirectByteBufferViewLESetReleaseChar...OK +DirectByteBufferViewLESetReleaseInt...OK +DirectByteBufferViewLESetReleaseLong...OK +DirectByteBufferViewLESetReleaseFloat...OK +DirectByteBufferViewLESetReleaseDouble...OK +DirectByteBufferViewLEGetOpaqueShort...OK +DirectByteBufferViewLEGetOpaqueChar...OK +DirectByteBufferViewLEGetOpaqueInt...OK +DirectByteBufferViewLEGetOpaqueLong...OK +DirectByteBufferViewLEGetOpaqueFloat...OK +DirectByteBufferViewLEGetOpaqueDouble...OK +DirectByteBufferViewLESetOpaqueShort...OK +DirectByteBufferViewLESetOpaqueChar...OK +DirectByteBufferViewLESetOpaqueInt...OK +DirectByteBufferViewLESetOpaqueLong...OK +DirectByteBufferViewLESetOpaqueFloat...OK +DirectByteBufferViewLESetOpaqueDouble...OK +DirectByteBufferViewLECompareAndSetShort...OK +DirectByteBufferViewLECompareAndSetChar...OK +DirectByteBufferViewLECompareAndSetInt...OK +DirectByteBufferViewLECompareAndSetLong...OK +DirectByteBufferViewLECompareAndSetFloat...OK +DirectByteBufferViewLECompareAndSetDouble...OK +DirectByteBufferViewLECompareAndExchangeShort...OK +DirectByteBufferViewLECompareAndExchangeChar...OK +DirectByteBufferViewLECompareAndExchangeInt...OK +DirectByteBufferViewLECompareAndExchangeLong...OK +DirectByteBufferViewLECompareAndExchangeFloat...OK +DirectByteBufferViewLECompareAndExchangeDouble...OK +DirectByteBufferViewLECompareAndExchangeAcquireShort...OK +DirectByteBufferViewLECompareAndExchangeAcquireChar...OK +DirectByteBufferViewLECompareAndExchangeAcquireInt...OK +DirectByteBufferViewLECompareAndExchangeAcquireLong...OK +DirectByteBufferViewLECompareAndExchangeAcquireFloat...OK +DirectByteBufferViewLECompareAndExchangeAcquireDouble...OK +DirectByteBufferViewLECompareAndExchangeReleaseShort...OK +DirectByteBufferViewLECompareAndExchangeReleaseChar...OK +DirectByteBufferViewLECompareAndExchangeReleaseInt...OK +DirectByteBufferViewLECompareAndExchangeReleaseLong...OK +DirectByteBufferViewLECompareAndExchangeReleaseFloat...OK +DirectByteBufferViewLECompareAndExchangeReleaseDouble...OK +DirectByteBufferViewLEWeakCompareAndSetPlainShort...OK +DirectByteBufferViewLEWeakCompareAndSetPlainChar...OK +DirectByteBufferViewLEWeakCompareAndSetPlainInt...OK +DirectByteBufferViewLEWeakCompareAndSetPlainLong...OK +DirectByteBufferViewLEWeakCompareAndSetPlainFloat...OK +DirectByteBufferViewLEWeakCompareAndSetPlainDouble...OK +DirectByteBufferViewLEWeakCompareAndSetShort...OK +DirectByteBufferViewLEWeakCompareAndSetChar...OK +DirectByteBufferViewLEWeakCompareAndSetInt...OK +DirectByteBufferViewLEWeakCompareAndSetLong...OK +DirectByteBufferViewLEWeakCompareAndSetFloat...OK +DirectByteBufferViewLEWeakCompareAndSetDouble...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireShort...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireChar...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireInt...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireLong...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireFloat...OK +DirectByteBufferViewLEWeakCompareAndSetAcquireDouble...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseShort...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseChar...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseInt...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseLong...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseFloat...OK +DirectByteBufferViewLEWeakCompareAndSetReleaseDouble...OK +DirectByteBufferViewLEGetAndSetShort...OK +DirectByteBufferViewLEGetAndSetChar...OK +DirectByteBufferViewLEGetAndSetInt...OK +DirectByteBufferViewLEGetAndSetLong...OK +DirectByteBufferViewLEGetAndSetFloat...OK +DirectByteBufferViewLEGetAndSetDouble...OK +DirectByteBufferViewLEGetAndSetAcquireShort...OK +DirectByteBufferViewLEGetAndSetAcquireChar...OK +DirectByteBufferViewLEGetAndSetAcquireInt...OK +DirectByteBufferViewLEGetAndSetAcquireLong...OK +DirectByteBufferViewLEGetAndSetAcquireFloat...OK +DirectByteBufferViewLEGetAndSetAcquireDouble...OK +DirectByteBufferViewLEGetAndSetReleaseShort...OK +DirectByteBufferViewLEGetAndSetReleaseChar...OK +DirectByteBufferViewLEGetAndSetReleaseInt...OK +DirectByteBufferViewLEGetAndSetReleaseLong...OK +DirectByteBufferViewLEGetAndSetReleaseFloat...OK +DirectByteBufferViewLEGetAndSetReleaseDouble...OK +DirectByteBufferViewLEGetAndAddShort...OK +DirectByteBufferViewLEGetAndAddChar...OK +DirectByteBufferViewLEGetAndAddInt...OK +DirectByteBufferViewLEGetAndAddLong...OK +DirectByteBufferViewLEGetAndAddFloat...OK +DirectByteBufferViewLEGetAndAddDouble...OK +DirectByteBufferViewLEGetAndAddAcquireShort...OK +DirectByteBufferViewLEGetAndAddAcquireChar...OK +DirectByteBufferViewLEGetAndAddAcquireInt...OK +DirectByteBufferViewLEGetAndAddAcquireLong...OK +DirectByteBufferViewLEGetAndAddAcquireFloat...OK +DirectByteBufferViewLEGetAndAddAcquireDouble...OK +DirectByteBufferViewLEGetAndAddReleaseShort...OK +DirectByteBufferViewLEGetAndAddReleaseChar...OK +DirectByteBufferViewLEGetAndAddReleaseInt...OK +DirectByteBufferViewLEGetAndAddReleaseLong...OK +DirectByteBufferViewLEGetAndAddReleaseFloat...OK +DirectByteBufferViewLEGetAndAddReleaseDouble...OK +DirectByteBufferViewLEGetAndBitwiseOrShort...OK +DirectByteBufferViewLEGetAndBitwiseOrChar...OK +DirectByteBufferViewLEGetAndBitwiseOrInt...OK +DirectByteBufferViewLEGetAndBitwiseOrLong...OK +DirectByteBufferViewLEGetAndBitwiseOrFloat...OK +DirectByteBufferViewLEGetAndBitwiseOrDouble...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseShort...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseChar...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseInt...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseLong...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseFloat...OK +DirectByteBufferViewLEGetAndBitwiseOrReleaseDouble...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireShort...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireChar...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireInt...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireLong...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireFloat...OK +DirectByteBufferViewLEGetAndBitwiseOrAcquireDouble...OK +DirectByteBufferViewLEGetAndBitwiseAndShort...OK +DirectByteBufferViewLEGetAndBitwiseAndChar...OK +DirectByteBufferViewLEGetAndBitwiseAndInt...OK +DirectByteBufferViewLEGetAndBitwiseAndLong...OK +DirectByteBufferViewLEGetAndBitwiseAndFloat...OK +DirectByteBufferViewLEGetAndBitwiseAndDouble...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseShort...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseChar...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseInt...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseLong...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseFloat...OK +DirectByteBufferViewLEGetAndBitwiseAndReleaseDouble...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireShort...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireChar...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireInt...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireLong...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireFloat...OK +DirectByteBufferViewLEGetAndBitwiseAndAcquireDouble...OK +DirectByteBufferViewLEGetAndBitwiseXorShort...OK +DirectByteBufferViewLEGetAndBitwiseXorChar...OK +DirectByteBufferViewLEGetAndBitwiseXorInt...OK +DirectByteBufferViewLEGetAndBitwiseXorLong...OK +DirectByteBufferViewLEGetAndBitwiseXorFloat...OK +DirectByteBufferViewLEGetAndBitwiseXorDouble...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseShort...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseChar...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseInt...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseLong...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseFloat...OK +DirectByteBufferViewLEGetAndBitwiseXorReleaseDouble...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireShort...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireChar...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireInt...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireLong...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireFloat...OK +DirectByteBufferViewLEGetAndBitwiseXorAcquireDouble...OK +DirectByteBufferViewBEGetShort...OK +DirectByteBufferViewBEGetChar...OK +DirectByteBufferViewBEGetInt...OK +DirectByteBufferViewBEGetLong...OK +DirectByteBufferViewBEGetFloat...OK +DirectByteBufferViewBEGetDouble...OK +DirectByteBufferViewBESetShort...OK +DirectByteBufferViewBESetChar...OK +DirectByteBufferViewBESetInt...OK +DirectByteBufferViewBESetLong...OK +DirectByteBufferViewBESetFloat...OK +DirectByteBufferViewBESetDouble...OK +DirectByteBufferViewBEGetVolatileShort...OK +DirectByteBufferViewBEGetVolatileChar...OK +DirectByteBufferViewBEGetVolatileInt...OK +DirectByteBufferViewBEGetVolatileLong...OK +DirectByteBufferViewBEGetVolatileFloat...OK +DirectByteBufferViewBEGetVolatileDouble...OK +DirectByteBufferViewBESetVolatileShort...OK +DirectByteBufferViewBESetVolatileChar...OK +DirectByteBufferViewBESetVolatileInt...OK +DirectByteBufferViewBESetVolatileLong...OK +DirectByteBufferViewBESetVolatileFloat...OK +DirectByteBufferViewBESetVolatileDouble...OK +DirectByteBufferViewBEGetAcquireShort...OK +DirectByteBufferViewBEGetAcquireChar...OK +DirectByteBufferViewBEGetAcquireInt...OK +DirectByteBufferViewBEGetAcquireLong...OK +DirectByteBufferViewBEGetAcquireFloat...OK +DirectByteBufferViewBEGetAcquireDouble...OK +DirectByteBufferViewBESetReleaseShort...OK +DirectByteBufferViewBESetReleaseChar...OK +DirectByteBufferViewBESetReleaseInt...OK +DirectByteBufferViewBESetReleaseLong...OK +DirectByteBufferViewBESetReleaseFloat...OK +DirectByteBufferViewBESetReleaseDouble...OK +DirectByteBufferViewBEGetOpaqueShort...OK +DirectByteBufferViewBEGetOpaqueChar...OK +DirectByteBufferViewBEGetOpaqueInt...OK +DirectByteBufferViewBEGetOpaqueLong...OK +DirectByteBufferViewBEGetOpaqueFloat...OK +DirectByteBufferViewBEGetOpaqueDouble...OK +DirectByteBufferViewBESetOpaqueShort...OK +DirectByteBufferViewBESetOpaqueChar...OK +DirectByteBufferViewBESetOpaqueInt...OK +DirectByteBufferViewBESetOpaqueLong...OK +DirectByteBufferViewBESetOpaqueFloat...OK +DirectByteBufferViewBESetOpaqueDouble...OK +DirectByteBufferViewBECompareAndSetShort...OK +DirectByteBufferViewBECompareAndSetChar...OK +DirectByteBufferViewBECompareAndSetInt...OK +DirectByteBufferViewBECompareAndSetLong...OK +DirectByteBufferViewBECompareAndSetFloat...OK +DirectByteBufferViewBECompareAndSetDouble...OK +DirectByteBufferViewBECompareAndExchangeShort...OK +DirectByteBufferViewBECompareAndExchangeChar...OK +DirectByteBufferViewBECompareAndExchangeInt...OK +DirectByteBufferViewBECompareAndExchangeLong...OK +DirectByteBufferViewBECompareAndExchangeFloat...OK +DirectByteBufferViewBECompareAndExchangeDouble...OK +DirectByteBufferViewBECompareAndExchangeAcquireShort...OK +DirectByteBufferViewBECompareAndExchangeAcquireChar...OK +DirectByteBufferViewBECompareAndExchangeAcquireInt...OK +DirectByteBufferViewBECompareAndExchangeAcquireLong...OK +DirectByteBufferViewBECompareAndExchangeAcquireFloat...OK +DirectByteBufferViewBECompareAndExchangeAcquireDouble...OK +DirectByteBufferViewBECompareAndExchangeReleaseShort...OK +DirectByteBufferViewBECompareAndExchangeReleaseChar...OK +DirectByteBufferViewBECompareAndExchangeReleaseInt...OK +DirectByteBufferViewBECompareAndExchangeReleaseLong...OK +DirectByteBufferViewBECompareAndExchangeReleaseFloat...OK +DirectByteBufferViewBECompareAndExchangeReleaseDouble...OK +DirectByteBufferViewBEWeakCompareAndSetPlainShort...OK +DirectByteBufferViewBEWeakCompareAndSetPlainChar...OK +DirectByteBufferViewBEWeakCompareAndSetPlainInt...OK +DirectByteBufferViewBEWeakCompareAndSetPlainLong...OK +DirectByteBufferViewBEWeakCompareAndSetPlainFloat...OK +DirectByteBufferViewBEWeakCompareAndSetPlainDouble...OK +DirectByteBufferViewBEWeakCompareAndSetShort...OK +DirectByteBufferViewBEWeakCompareAndSetChar...OK +DirectByteBufferViewBEWeakCompareAndSetInt...OK +DirectByteBufferViewBEWeakCompareAndSetLong...OK +DirectByteBufferViewBEWeakCompareAndSetFloat...OK +DirectByteBufferViewBEWeakCompareAndSetDouble...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireShort...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireChar...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireInt...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireLong...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireFloat...OK +DirectByteBufferViewBEWeakCompareAndSetAcquireDouble...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseShort...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseChar...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseInt...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseLong...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseFloat...OK +DirectByteBufferViewBEWeakCompareAndSetReleaseDouble...OK +DirectByteBufferViewBEGetAndSetShort...OK +DirectByteBufferViewBEGetAndSetChar...OK +DirectByteBufferViewBEGetAndSetInt...OK +DirectByteBufferViewBEGetAndSetLong...OK +DirectByteBufferViewBEGetAndSetFloat...OK +DirectByteBufferViewBEGetAndSetDouble...OK +DirectByteBufferViewBEGetAndSetAcquireShort...OK +DirectByteBufferViewBEGetAndSetAcquireChar...OK +DirectByteBufferViewBEGetAndSetAcquireInt...OK +DirectByteBufferViewBEGetAndSetAcquireLong...OK +DirectByteBufferViewBEGetAndSetAcquireFloat...OK +DirectByteBufferViewBEGetAndSetAcquireDouble...OK +DirectByteBufferViewBEGetAndSetReleaseShort...OK +DirectByteBufferViewBEGetAndSetReleaseChar...OK +DirectByteBufferViewBEGetAndSetReleaseInt...OK +DirectByteBufferViewBEGetAndSetReleaseLong...OK +DirectByteBufferViewBEGetAndSetReleaseFloat...OK +DirectByteBufferViewBEGetAndSetReleaseDouble...OK +DirectByteBufferViewBEGetAndAddShort...OK +DirectByteBufferViewBEGetAndAddChar...OK +DirectByteBufferViewBEGetAndAddInt...OK +DirectByteBufferViewBEGetAndAddLong...OK +DirectByteBufferViewBEGetAndAddFloat...OK +DirectByteBufferViewBEGetAndAddDouble...OK +DirectByteBufferViewBEGetAndAddAcquireShort...OK +DirectByteBufferViewBEGetAndAddAcquireChar...OK +DirectByteBufferViewBEGetAndAddAcquireInt...OK +DirectByteBufferViewBEGetAndAddAcquireLong...OK +DirectByteBufferViewBEGetAndAddAcquireFloat...OK +DirectByteBufferViewBEGetAndAddAcquireDouble...OK +DirectByteBufferViewBEGetAndAddReleaseShort...OK +DirectByteBufferViewBEGetAndAddReleaseChar...OK +DirectByteBufferViewBEGetAndAddReleaseInt...OK +DirectByteBufferViewBEGetAndAddReleaseLong...OK +DirectByteBufferViewBEGetAndAddReleaseFloat...OK +DirectByteBufferViewBEGetAndAddReleaseDouble...OK +DirectByteBufferViewBEGetAndBitwiseOrShort...OK +DirectByteBufferViewBEGetAndBitwiseOrChar...OK +DirectByteBufferViewBEGetAndBitwiseOrInt...OK +DirectByteBufferViewBEGetAndBitwiseOrLong...OK +DirectByteBufferViewBEGetAndBitwiseOrFloat...OK +DirectByteBufferViewBEGetAndBitwiseOrDouble...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseShort...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseChar...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseInt...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseLong...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseFloat...OK +DirectByteBufferViewBEGetAndBitwiseOrReleaseDouble...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireShort...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireChar...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireInt...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireLong...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireFloat...OK +DirectByteBufferViewBEGetAndBitwiseOrAcquireDouble...OK +DirectByteBufferViewBEGetAndBitwiseAndShort...OK +DirectByteBufferViewBEGetAndBitwiseAndChar...OK +DirectByteBufferViewBEGetAndBitwiseAndInt...OK +DirectByteBufferViewBEGetAndBitwiseAndLong...OK +DirectByteBufferViewBEGetAndBitwiseAndFloat...OK +DirectByteBufferViewBEGetAndBitwiseAndDouble...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseShort...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseChar...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseInt...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseLong...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseFloat...OK +DirectByteBufferViewBEGetAndBitwiseAndReleaseDouble...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireShort...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireChar...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireInt...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireLong...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireFloat...OK +DirectByteBufferViewBEGetAndBitwiseAndAcquireDouble...OK +DirectByteBufferViewBEGetAndBitwiseXorShort...OK +DirectByteBufferViewBEGetAndBitwiseXorChar...OK +DirectByteBufferViewBEGetAndBitwiseXorInt...OK +DirectByteBufferViewBEGetAndBitwiseXorLong...OK +DirectByteBufferViewBEGetAndBitwiseXorFloat...OK +DirectByteBufferViewBEGetAndBitwiseXorDouble...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseShort...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseChar...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseInt...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseLong...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseFloat...OK +DirectByteBufferViewBEGetAndBitwiseXorReleaseDouble...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireShort...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireChar...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireInt...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireLong...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireFloat...OK +DirectByteBufferViewBEGetAndBitwiseXorAcquireDouble...OK +HeapByteBufferViewLEGetShort...OK +HeapByteBufferViewLEGetChar...OK +HeapByteBufferViewLEGetInt...OK +HeapByteBufferViewLEGetLong...OK +HeapByteBufferViewLEGetFloat...OK +HeapByteBufferViewLEGetDouble...OK +HeapByteBufferViewLESetShort...OK +HeapByteBufferViewLESetChar...OK +HeapByteBufferViewLESetInt...OK +HeapByteBufferViewLESetLong...OK +HeapByteBufferViewLESetFloat...OK +HeapByteBufferViewLESetDouble...OK +HeapByteBufferViewLEGetVolatileShort...OK +HeapByteBufferViewLEGetVolatileChar...OK +HeapByteBufferViewLEGetVolatileInt...OK +HeapByteBufferViewLEGetVolatileLong...OK +HeapByteBufferViewLEGetVolatileFloat...OK +HeapByteBufferViewLEGetVolatileDouble...OK +HeapByteBufferViewLESetVolatileShort...OK +HeapByteBufferViewLESetVolatileChar...OK +HeapByteBufferViewLESetVolatileInt...OK +HeapByteBufferViewLESetVolatileLong...OK +HeapByteBufferViewLESetVolatileFloat...OK +HeapByteBufferViewLESetVolatileDouble...OK +HeapByteBufferViewLEGetAcquireShort...OK +HeapByteBufferViewLEGetAcquireChar...OK +HeapByteBufferViewLEGetAcquireInt...OK +HeapByteBufferViewLEGetAcquireLong...OK +HeapByteBufferViewLEGetAcquireFloat...OK +HeapByteBufferViewLEGetAcquireDouble...OK +HeapByteBufferViewLESetReleaseShort...OK +HeapByteBufferViewLESetReleaseChar...OK +HeapByteBufferViewLESetReleaseInt...OK +HeapByteBufferViewLESetReleaseLong...OK +HeapByteBufferViewLESetReleaseFloat...OK +HeapByteBufferViewLESetReleaseDouble...OK +HeapByteBufferViewLEGetOpaqueShort...OK +HeapByteBufferViewLEGetOpaqueChar...OK +HeapByteBufferViewLEGetOpaqueInt...OK +HeapByteBufferViewLEGetOpaqueLong...OK +HeapByteBufferViewLEGetOpaqueFloat...OK +HeapByteBufferViewLEGetOpaqueDouble...OK +HeapByteBufferViewLESetOpaqueShort...OK +HeapByteBufferViewLESetOpaqueChar...OK +HeapByteBufferViewLESetOpaqueInt...OK +HeapByteBufferViewLESetOpaqueLong...OK +HeapByteBufferViewLESetOpaqueFloat...OK +HeapByteBufferViewLESetOpaqueDouble...OK +HeapByteBufferViewLECompareAndSetShort...OK +HeapByteBufferViewLECompareAndSetChar...OK +HeapByteBufferViewLECompareAndSetInt...OK +HeapByteBufferViewLECompareAndSetLong...OK +HeapByteBufferViewLECompareAndSetFloat...OK +HeapByteBufferViewLECompareAndSetDouble...OK +HeapByteBufferViewLECompareAndExchangeShort...OK +HeapByteBufferViewLECompareAndExchangeChar...OK +HeapByteBufferViewLECompareAndExchangeInt...OK +HeapByteBufferViewLECompareAndExchangeLong...OK +HeapByteBufferViewLECompareAndExchangeFloat...OK +HeapByteBufferViewLECompareAndExchangeDouble...OK +HeapByteBufferViewLECompareAndExchangeAcquireShort...OK +HeapByteBufferViewLECompareAndExchangeAcquireChar...OK +HeapByteBufferViewLECompareAndExchangeAcquireInt...OK +HeapByteBufferViewLECompareAndExchangeAcquireLong...OK +HeapByteBufferViewLECompareAndExchangeAcquireFloat...OK +HeapByteBufferViewLECompareAndExchangeAcquireDouble...OK +HeapByteBufferViewLECompareAndExchangeReleaseShort...OK +HeapByteBufferViewLECompareAndExchangeReleaseChar...OK +HeapByteBufferViewLECompareAndExchangeReleaseInt...OK +HeapByteBufferViewLECompareAndExchangeReleaseLong...OK +HeapByteBufferViewLECompareAndExchangeReleaseFloat...OK +HeapByteBufferViewLECompareAndExchangeReleaseDouble...OK +HeapByteBufferViewLEWeakCompareAndSetPlainShort...OK +HeapByteBufferViewLEWeakCompareAndSetPlainChar...OK +HeapByteBufferViewLEWeakCompareAndSetPlainInt...OK +HeapByteBufferViewLEWeakCompareAndSetPlainLong...OK +HeapByteBufferViewLEWeakCompareAndSetPlainFloat...OK +HeapByteBufferViewLEWeakCompareAndSetPlainDouble...OK +HeapByteBufferViewLEWeakCompareAndSetShort...OK +HeapByteBufferViewLEWeakCompareAndSetChar...OK +HeapByteBufferViewLEWeakCompareAndSetInt...OK +HeapByteBufferViewLEWeakCompareAndSetLong...OK +HeapByteBufferViewLEWeakCompareAndSetFloat...OK +HeapByteBufferViewLEWeakCompareAndSetDouble...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireShort...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireChar...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireInt...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireLong...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireFloat...OK +HeapByteBufferViewLEWeakCompareAndSetAcquireDouble...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseShort...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseChar...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseInt...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseLong...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseFloat...OK +HeapByteBufferViewLEWeakCompareAndSetReleaseDouble...OK +HeapByteBufferViewLEGetAndSetShort...OK +HeapByteBufferViewLEGetAndSetChar...OK +HeapByteBufferViewLEGetAndSetInt...OK +HeapByteBufferViewLEGetAndSetLong...OK +HeapByteBufferViewLEGetAndSetFloat...OK +HeapByteBufferViewLEGetAndSetDouble...OK +HeapByteBufferViewLEGetAndSetAcquireShort...OK +HeapByteBufferViewLEGetAndSetAcquireChar...OK +HeapByteBufferViewLEGetAndSetAcquireInt...OK +HeapByteBufferViewLEGetAndSetAcquireLong...OK +HeapByteBufferViewLEGetAndSetAcquireFloat...OK +HeapByteBufferViewLEGetAndSetAcquireDouble...OK +HeapByteBufferViewLEGetAndSetReleaseShort...OK +HeapByteBufferViewLEGetAndSetReleaseChar...OK +HeapByteBufferViewLEGetAndSetReleaseInt...OK +HeapByteBufferViewLEGetAndSetReleaseLong...OK +HeapByteBufferViewLEGetAndSetReleaseFloat...OK +HeapByteBufferViewLEGetAndSetReleaseDouble...OK +HeapByteBufferViewLEGetAndAddShort...OK +HeapByteBufferViewLEGetAndAddChar...OK +HeapByteBufferViewLEGetAndAddInt...OK +HeapByteBufferViewLEGetAndAddLong...OK +HeapByteBufferViewLEGetAndAddFloat...OK +HeapByteBufferViewLEGetAndAddDouble...OK +HeapByteBufferViewLEGetAndAddAcquireShort...OK +HeapByteBufferViewLEGetAndAddAcquireChar...OK +HeapByteBufferViewLEGetAndAddAcquireInt...OK +HeapByteBufferViewLEGetAndAddAcquireLong...OK +HeapByteBufferViewLEGetAndAddAcquireFloat...OK +HeapByteBufferViewLEGetAndAddAcquireDouble...OK +HeapByteBufferViewLEGetAndAddReleaseShort...OK +HeapByteBufferViewLEGetAndAddReleaseChar...OK +HeapByteBufferViewLEGetAndAddReleaseInt...OK +HeapByteBufferViewLEGetAndAddReleaseLong...OK +HeapByteBufferViewLEGetAndAddReleaseFloat...OK +HeapByteBufferViewLEGetAndAddReleaseDouble...OK +HeapByteBufferViewLEGetAndBitwiseOrShort...OK +HeapByteBufferViewLEGetAndBitwiseOrChar...OK +HeapByteBufferViewLEGetAndBitwiseOrInt...OK +HeapByteBufferViewLEGetAndBitwiseOrLong...OK +HeapByteBufferViewLEGetAndBitwiseOrFloat...OK +HeapByteBufferViewLEGetAndBitwiseOrDouble...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseShort...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseChar...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseInt...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseLong...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseFloat...OK +HeapByteBufferViewLEGetAndBitwiseOrReleaseDouble...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireShort...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireChar...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireInt...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireLong...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireFloat...OK +HeapByteBufferViewLEGetAndBitwiseOrAcquireDouble...OK +HeapByteBufferViewLEGetAndBitwiseAndShort...OK +HeapByteBufferViewLEGetAndBitwiseAndChar...OK +HeapByteBufferViewLEGetAndBitwiseAndInt...OK +HeapByteBufferViewLEGetAndBitwiseAndLong...OK +HeapByteBufferViewLEGetAndBitwiseAndFloat...OK +HeapByteBufferViewLEGetAndBitwiseAndDouble...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseShort...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseChar...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseInt...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseLong...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseFloat...OK +HeapByteBufferViewLEGetAndBitwiseAndReleaseDouble...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireShort...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireChar...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireInt...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireLong...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireFloat...OK +HeapByteBufferViewLEGetAndBitwiseAndAcquireDouble...OK +HeapByteBufferViewLEGetAndBitwiseXorShort...OK +HeapByteBufferViewLEGetAndBitwiseXorChar...OK +HeapByteBufferViewLEGetAndBitwiseXorInt...OK +HeapByteBufferViewLEGetAndBitwiseXorLong...OK +HeapByteBufferViewLEGetAndBitwiseXorFloat...OK +HeapByteBufferViewLEGetAndBitwiseXorDouble...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseShort...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseChar...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseInt...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseLong...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseFloat...OK +HeapByteBufferViewLEGetAndBitwiseXorReleaseDouble...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireShort...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireChar...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireInt...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireLong...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireFloat...OK +HeapByteBufferViewLEGetAndBitwiseXorAcquireDouble...OK +HeapByteBufferViewBEGetShort...OK +HeapByteBufferViewBEGetChar...OK +HeapByteBufferViewBEGetInt...OK +HeapByteBufferViewBEGetLong...OK +HeapByteBufferViewBEGetFloat...OK +HeapByteBufferViewBEGetDouble...OK +HeapByteBufferViewBESetShort...OK +HeapByteBufferViewBESetChar...OK +HeapByteBufferViewBESetInt...OK +HeapByteBufferViewBESetLong...OK +HeapByteBufferViewBESetFloat...OK +HeapByteBufferViewBESetDouble...OK +HeapByteBufferViewBEGetVolatileShort...OK +HeapByteBufferViewBEGetVolatileChar...OK +HeapByteBufferViewBEGetVolatileInt...OK +HeapByteBufferViewBEGetVolatileLong...OK +HeapByteBufferViewBEGetVolatileFloat...OK +HeapByteBufferViewBEGetVolatileDouble...OK +HeapByteBufferViewBESetVolatileShort...OK +HeapByteBufferViewBESetVolatileChar...OK +HeapByteBufferViewBESetVolatileInt...OK +HeapByteBufferViewBESetVolatileLong...OK +HeapByteBufferViewBESetVolatileFloat...OK +HeapByteBufferViewBESetVolatileDouble...OK +HeapByteBufferViewBEGetAcquireShort...OK +HeapByteBufferViewBEGetAcquireChar...OK +HeapByteBufferViewBEGetAcquireInt...OK +HeapByteBufferViewBEGetAcquireLong...OK +HeapByteBufferViewBEGetAcquireFloat...OK +HeapByteBufferViewBEGetAcquireDouble...OK +HeapByteBufferViewBESetReleaseShort...OK +HeapByteBufferViewBESetReleaseChar...OK +HeapByteBufferViewBESetReleaseInt...OK +HeapByteBufferViewBESetReleaseLong...OK +HeapByteBufferViewBESetReleaseFloat...OK +HeapByteBufferViewBESetReleaseDouble...OK +HeapByteBufferViewBEGetOpaqueShort...OK +HeapByteBufferViewBEGetOpaqueChar...OK +HeapByteBufferViewBEGetOpaqueInt...OK +HeapByteBufferViewBEGetOpaqueLong...OK +HeapByteBufferViewBEGetOpaqueFloat...OK +HeapByteBufferViewBEGetOpaqueDouble...OK +HeapByteBufferViewBESetOpaqueShort...OK +HeapByteBufferViewBESetOpaqueChar...OK +HeapByteBufferViewBESetOpaqueInt...OK +HeapByteBufferViewBESetOpaqueLong...OK +HeapByteBufferViewBESetOpaqueFloat...OK +HeapByteBufferViewBESetOpaqueDouble...OK +HeapByteBufferViewBECompareAndSetShort...OK +HeapByteBufferViewBECompareAndSetChar...OK +HeapByteBufferViewBECompareAndSetInt...OK +HeapByteBufferViewBECompareAndSetLong...OK +HeapByteBufferViewBECompareAndSetFloat...OK +HeapByteBufferViewBECompareAndSetDouble...OK +HeapByteBufferViewBECompareAndExchangeShort...OK +HeapByteBufferViewBECompareAndExchangeChar...OK +HeapByteBufferViewBECompareAndExchangeInt...OK +HeapByteBufferViewBECompareAndExchangeLong...OK +HeapByteBufferViewBECompareAndExchangeFloat...OK +HeapByteBufferViewBECompareAndExchangeDouble...OK +HeapByteBufferViewBECompareAndExchangeAcquireShort...OK +HeapByteBufferViewBECompareAndExchangeAcquireChar...OK +HeapByteBufferViewBECompareAndExchangeAcquireInt...OK +HeapByteBufferViewBECompareAndExchangeAcquireLong...OK +HeapByteBufferViewBECompareAndExchangeAcquireFloat...OK +HeapByteBufferViewBECompareAndExchangeAcquireDouble...OK +HeapByteBufferViewBECompareAndExchangeReleaseShort...OK +HeapByteBufferViewBECompareAndExchangeReleaseChar...OK +HeapByteBufferViewBECompareAndExchangeReleaseInt...OK +HeapByteBufferViewBECompareAndExchangeReleaseLong...OK +HeapByteBufferViewBECompareAndExchangeReleaseFloat...OK +HeapByteBufferViewBECompareAndExchangeReleaseDouble...OK +HeapByteBufferViewBEWeakCompareAndSetPlainShort...OK +HeapByteBufferViewBEWeakCompareAndSetPlainChar...OK +HeapByteBufferViewBEWeakCompareAndSetPlainInt...OK +HeapByteBufferViewBEWeakCompareAndSetPlainLong...OK +HeapByteBufferViewBEWeakCompareAndSetPlainFloat...OK +HeapByteBufferViewBEWeakCompareAndSetPlainDouble...OK +HeapByteBufferViewBEWeakCompareAndSetShort...OK +HeapByteBufferViewBEWeakCompareAndSetChar...OK +HeapByteBufferViewBEWeakCompareAndSetInt...OK +HeapByteBufferViewBEWeakCompareAndSetLong...OK +HeapByteBufferViewBEWeakCompareAndSetFloat...OK +HeapByteBufferViewBEWeakCompareAndSetDouble...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireShort...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireChar...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireInt...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireLong...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireFloat...OK +HeapByteBufferViewBEWeakCompareAndSetAcquireDouble...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseShort...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseChar...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseInt...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseLong...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseFloat...OK +HeapByteBufferViewBEWeakCompareAndSetReleaseDouble...OK +HeapByteBufferViewBEGetAndSetShort...OK +HeapByteBufferViewBEGetAndSetChar...OK +HeapByteBufferViewBEGetAndSetInt...OK +HeapByteBufferViewBEGetAndSetLong...OK +HeapByteBufferViewBEGetAndSetFloat...OK +HeapByteBufferViewBEGetAndSetDouble...OK +HeapByteBufferViewBEGetAndSetAcquireShort...OK +HeapByteBufferViewBEGetAndSetAcquireChar...OK +HeapByteBufferViewBEGetAndSetAcquireInt...OK +HeapByteBufferViewBEGetAndSetAcquireLong...OK +HeapByteBufferViewBEGetAndSetAcquireFloat...OK +HeapByteBufferViewBEGetAndSetAcquireDouble...OK +HeapByteBufferViewBEGetAndSetReleaseShort...OK +HeapByteBufferViewBEGetAndSetReleaseChar...OK +HeapByteBufferViewBEGetAndSetReleaseInt...OK +HeapByteBufferViewBEGetAndSetReleaseLong...OK +HeapByteBufferViewBEGetAndSetReleaseFloat...OK +HeapByteBufferViewBEGetAndSetReleaseDouble...OK +HeapByteBufferViewBEGetAndAddShort...OK +HeapByteBufferViewBEGetAndAddChar...OK +HeapByteBufferViewBEGetAndAddInt...OK +HeapByteBufferViewBEGetAndAddLong...OK +HeapByteBufferViewBEGetAndAddFloat...OK +HeapByteBufferViewBEGetAndAddDouble...OK +HeapByteBufferViewBEGetAndAddAcquireShort...OK +HeapByteBufferViewBEGetAndAddAcquireChar...OK +HeapByteBufferViewBEGetAndAddAcquireInt...OK +HeapByteBufferViewBEGetAndAddAcquireLong...OK +HeapByteBufferViewBEGetAndAddAcquireFloat...OK +HeapByteBufferViewBEGetAndAddAcquireDouble...OK +HeapByteBufferViewBEGetAndAddReleaseShort...OK +HeapByteBufferViewBEGetAndAddReleaseChar...OK +HeapByteBufferViewBEGetAndAddReleaseInt...OK +HeapByteBufferViewBEGetAndAddReleaseLong...OK +HeapByteBufferViewBEGetAndAddReleaseFloat...OK +HeapByteBufferViewBEGetAndAddReleaseDouble...OK +HeapByteBufferViewBEGetAndBitwiseOrShort...OK +HeapByteBufferViewBEGetAndBitwiseOrChar...OK +HeapByteBufferViewBEGetAndBitwiseOrInt...OK +HeapByteBufferViewBEGetAndBitwiseOrLong...OK +HeapByteBufferViewBEGetAndBitwiseOrFloat...OK +HeapByteBufferViewBEGetAndBitwiseOrDouble...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseShort...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseChar...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseInt...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseLong...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseFloat...OK +HeapByteBufferViewBEGetAndBitwiseOrReleaseDouble...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireShort...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireChar...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireInt...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireLong...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireFloat...OK +HeapByteBufferViewBEGetAndBitwiseOrAcquireDouble...OK +HeapByteBufferViewBEGetAndBitwiseAndShort...OK +HeapByteBufferViewBEGetAndBitwiseAndChar...OK +HeapByteBufferViewBEGetAndBitwiseAndInt...OK +HeapByteBufferViewBEGetAndBitwiseAndLong...OK +HeapByteBufferViewBEGetAndBitwiseAndFloat...OK +HeapByteBufferViewBEGetAndBitwiseAndDouble...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseShort...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseChar...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseInt...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseLong...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseFloat...OK +HeapByteBufferViewBEGetAndBitwiseAndReleaseDouble...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireShort...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireChar...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireInt...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireLong...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireFloat...OK +HeapByteBufferViewBEGetAndBitwiseAndAcquireDouble...OK +HeapByteBufferViewBEGetAndBitwiseXorShort...OK +HeapByteBufferViewBEGetAndBitwiseXorChar...OK +HeapByteBufferViewBEGetAndBitwiseXorInt...OK +HeapByteBufferViewBEGetAndBitwiseXorLong...OK +HeapByteBufferViewBEGetAndBitwiseXorFloat...OK +HeapByteBufferViewBEGetAndBitwiseXorDouble...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseShort...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseChar...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseInt...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseLong...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseFloat...OK +HeapByteBufferViewBEGetAndBitwiseXorReleaseDouble...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireShort...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireChar...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireInt...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireLong...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireFloat...OK +HeapByteBufferViewBEGetAndBitwiseXorAcquireDouble...OK +HeapByteBufferReadOnlyViewLEGetShort...OK +HeapByteBufferReadOnlyViewLEGetChar...OK +HeapByteBufferReadOnlyViewLEGetInt...OK +HeapByteBufferReadOnlyViewLEGetLong...OK +HeapByteBufferReadOnlyViewLEGetFloat...OK +HeapByteBufferReadOnlyViewLEGetDouble...OK +HeapByteBufferReadOnlyViewLESetShort...OK +HeapByteBufferReadOnlyViewLESetChar...OK +HeapByteBufferReadOnlyViewLESetInt...OK +HeapByteBufferReadOnlyViewLESetLong...OK +HeapByteBufferReadOnlyViewLESetFloat...OK +HeapByteBufferReadOnlyViewLESetDouble...OK +HeapByteBufferReadOnlyViewLEGetVolatileShort...OK +HeapByteBufferReadOnlyViewLEGetVolatileChar...OK +HeapByteBufferReadOnlyViewLEGetVolatileInt...OK +HeapByteBufferReadOnlyViewLEGetVolatileLong...OK +HeapByteBufferReadOnlyViewLEGetVolatileFloat...OK +HeapByteBufferReadOnlyViewLEGetVolatileDouble...OK +HeapByteBufferReadOnlyViewLESetVolatileShort...OK +HeapByteBufferReadOnlyViewLESetVolatileChar...OK +HeapByteBufferReadOnlyViewLESetVolatileInt...OK +HeapByteBufferReadOnlyViewLESetVolatileLong...OK +HeapByteBufferReadOnlyViewLESetVolatileFloat...OK +HeapByteBufferReadOnlyViewLESetVolatileDouble...OK +HeapByteBufferReadOnlyViewLEGetAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAcquireDouble...OK +HeapByteBufferReadOnlyViewLESetReleaseShort...OK +HeapByteBufferReadOnlyViewLESetReleaseChar...OK +HeapByteBufferReadOnlyViewLESetReleaseInt...OK +HeapByteBufferReadOnlyViewLESetReleaseLong...OK +HeapByteBufferReadOnlyViewLESetReleaseFloat...OK +HeapByteBufferReadOnlyViewLESetReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetOpaqueShort...OK +HeapByteBufferReadOnlyViewLEGetOpaqueChar...OK +HeapByteBufferReadOnlyViewLEGetOpaqueInt...OK +HeapByteBufferReadOnlyViewLEGetOpaqueLong...OK +HeapByteBufferReadOnlyViewLEGetOpaqueFloat...OK +HeapByteBufferReadOnlyViewLEGetOpaqueDouble...OK +HeapByteBufferReadOnlyViewLESetOpaqueShort...OK +HeapByteBufferReadOnlyViewLESetOpaqueChar...OK +HeapByteBufferReadOnlyViewLESetOpaqueInt...OK +HeapByteBufferReadOnlyViewLESetOpaqueLong...OK +HeapByteBufferReadOnlyViewLESetOpaqueFloat...OK +HeapByteBufferReadOnlyViewLESetOpaqueDouble...OK +HeapByteBufferReadOnlyViewLECompareAndSetShort...OK +HeapByteBufferReadOnlyViewLECompareAndSetChar...OK +HeapByteBufferReadOnlyViewLECompareAndSetInt...OK +HeapByteBufferReadOnlyViewLECompareAndSetLong...OK +HeapByteBufferReadOnlyViewLECompareAndSetFloat...OK +HeapByteBufferReadOnlyViewLECompareAndSetDouble...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeShort...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeChar...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeInt...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeLong...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeFloat...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeDouble...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireShort...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireChar...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireInt...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireLong...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireFloat...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeAcquireDouble...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseShort...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseChar...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseInt...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseLong...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseFloat...OK +HeapByteBufferReadOnlyViewLECompareAndExchangeReleaseDouble...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainShort...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainChar...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainInt...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainLong...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainFloat...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainDouble...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetShort...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetChar...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetInt...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetLong...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetFloat...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetDouble...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireShort...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireChar...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireInt...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireLong...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireFloat...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireDouble...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseShort...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseChar...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseInt...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseLong...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseFloat...OK +HeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndSetShort...OK +HeapByteBufferReadOnlyViewLEGetAndSetChar...OK +HeapByteBufferReadOnlyViewLEGetAndSetInt...OK +HeapByteBufferReadOnlyViewLEGetAndSetLong...OK +HeapByteBufferReadOnlyViewLEGetAndSetFloat...OK +HeapByteBufferReadOnlyViewLEGetAndSetDouble...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAndSetAcquireDouble...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseShort...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseChar...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseInt...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseLong...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseFloat...OK +HeapByteBufferReadOnlyViewLEGetAndSetReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndAddShort...OK +HeapByteBufferReadOnlyViewLEGetAndAddChar...OK +HeapByteBufferReadOnlyViewLEGetAndAddInt...OK +HeapByteBufferReadOnlyViewLEGetAndAddLong...OK +HeapByteBufferReadOnlyViewLEGetAndAddFloat...OK +HeapByteBufferReadOnlyViewLEGetAndAddDouble...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAndAddAcquireDouble...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseShort...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseChar...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseInt...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseLong...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseFloat...OK +HeapByteBufferReadOnlyViewLEGetAndAddReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseDouble...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireShort...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireChar...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireInt...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireLong...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireFloat...OK +HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireDouble...OK +HeapByteBufferReadOnlyViewBEGetShort...OK +HeapByteBufferReadOnlyViewBEGetChar...OK +HeapByteBufferReadOnlyViewBEGetInt...OK +HeapByteBufferReadOnlyViewBEGetLong...OK +HeapByteBufferReadOnlyViewBEGetFloat...OK +HeapByteBufferReadOnlyViewBEGetDouble...OK +HeapByteBufferReadOnlyViewBESetShort...OK +HeapByteBufferReadOnlyViewBESetChar...OK +HeapByteBufferReadOnlyViewBESetInt...OK +HeapByteBufferReadOnlyViewBESetLong...OK +HeapByteBufferReadOnlyViewBESetFloat...OK +HeapByteBufferReadOnlyViewBESetDouble...OK +HeapByteBufferReadOnlyViewBEGetVolatileShort...OK +HeapByteBufferReadOnlyViewBEGetVolatileChar...OK +HeapByteBufferReadOnlyViewBEGetVolatileInt...OK +HeapByteBufferReadOnlyViewBEGetVolatileLong...OK +HeapByteBufferReadOnlyViewBEGetVolatileFloat...OK +HeapByteBufferReadOnlyViewBEGetVolatileDouble...OK +HeapByteBufferReadOnlyViewBESetVolatileShort...OK +HeapByteBufferReadOnlyViewBESetVolatileChar...OK +HeapByteBufferReadOnlyViewBESetVolatileInt...OK +HeapByteBufferReadOnlyViewBESetVolatileLong...OK +HeapByteBufferReadOnlyViewBESetVolatileFloat...OK +HeapByteBufferReadOnlyViewBESetVolatileDouble...OK +HeapByteBufferReadOnlyViewBEGetAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAcquireDouble...OK +HeapByteBufferReadOnlyViewBESetReleaseShort...OK +HeapByteBufferReadOnlyViewBESetReleaseChar...OK +HeapByteBufferReadOnlyViewBESetReleaseInt...OK +HeapByteBufferReadOnlyViewBESetReleaseLong...OK +HeapByteBufferReadOnlyViewBESetReleaseFloat...OK +HeapByteBufferReadOnlyViewBESetReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetOpaqueShort...OK +HeapByteBufferReadOnlyViewBEGetOpaqueChar...OK +HeapByteBufferReadOnlyViewBEGetOpaqueInt...OK +HeapByteBufferReadOnlyViewBEGetOpaqueLong...OK +HeapByteBufferReadOnlyViewBEGetOpaqueFloat...OK +HeapByteBufferReadOnlyViewBEGetOpaqueDouble...OK +HeapByteBufferReadOnlyViewBESetOpaqueShort...OK +HeapByteBufferReadOnlyViewBESetOpaqueChar...OK +HeapByteBufferReadOnlyViewBESetOpaqueInt...OK +HeapByteBufferReadOnlyViewBESetOpaqueLong...OK +HeapByteBufferReadOnlyViewBESetOpaqueFloat...OK +HeapByteBufferReadOnlyViewBESetOpaqueDouble...OK +HeapByteBufferReadOnlyViewBECompareAndSetShort...OK +HeapByteBufferReadOnlyViewBECompareAndSetChar...OK +HeapByteBufferReadOnlyViewBECompareAndSetInt...OK +HeapByteBufferReadOnlyViewBECompareAndSetLong...OK +HeapByteBufferReadOnlyViewBECompareAndSetFloat...OK +HeapByteBufferReadOnlyViewBECompareAndSetDouble...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeShort...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeChar...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeInt...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeLong...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeFloat...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeDouble...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireShort...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireChar...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireInt...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireLong...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireFloat...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeAcquireDouble...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseShort...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseChar...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseInt...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseLong...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseFloat...OK +HeapByteBufferReadOnlyViewBECompareAndExchangeReleaseDouble...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainShort...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainChar...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainInt...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainLong...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainFloat...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainDouble...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetShort...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetChar...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetInt...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetLong...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetFloat...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetDouble...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireShort...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireChar...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireInt...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireLong...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireFloat...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireDouble...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseShort...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseChar...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseInt...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseLong...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseFloat...OK +HeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndSetShort...OK +HeapByteBufferReadOnlyViewBEGetAndSetChar...OK +HeapByteBufferReadOnlyViewBEGetAndSetInt...OK +HeapByteBufferReadOnlyViewBEGetAndSetLong...OK +HeapByteBufferReadOnlyViewBEGetAndSetFloat...OK +HeapByteBufferReadOnlyViewBEGetAndSetDouble...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAndSetAcquireDouble...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseShort...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseChar...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseInt...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseLong...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseFloat...OK +HeapByteBufferReadOnlyViewBEGetAndSetReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndAddShort...OK +HeapByteBufferReadOnlyViewBEGetAndAddChar...OK +HeapByteBufferReadOnlyViewBEGetAndAddInt...OK +HeapByteBufferReadOnlyViewBEGetAndAddLong...OK +HeapByteBufferReadOnlyViewBEGetAndAddFloat...OK +HeapByteBufferReadOnlyViewBEGetAndAddDouble...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAndAddAcquireDouble...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseShort...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseChar...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseInt...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseLong...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseFloat...OK +HeapByteBufferReadOnlyViewBEGetAndAddReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseDouble...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireShort...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireChar...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireInt...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireLong...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireFloat...OK +HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireDouble...OK +FieldGetWidget...OK +FieldSetWidget...OK +FieldGetVolatileWidget...OK +FieldSetVolatileWidget...OK +FieldGetAcquireWidget...OK +FieldSetReleaseWidget...OK +FieldGetOpaqueWidget...OK +FieldSetOpaqueWidget...OK +FieldCompareAndSetWidget...OK +FieldCompareAndExchangeWidget...OK +FieldCompareAndExchangeAcquireWidget...OK +FieldCompareAndExchangeReleaseWidget...OK +FieldWeakCompareAndSetPlainWidget...OK +FieldWeakCompareAndSetWidget...OK +FieldWeakCompareAndSetAcquireWidget...OK +FieldWeakCompareAndSetReleaseWidget...OK +FieldGetAndSetWidget...OK +FieldGetAndSetAcquireWidget...OK +FieldGetAndSetReleaseWidget...OK +FieldGetAndAddWidget...OK +FieldGetAndAddAcquireWidget...OK +FieldGetAndAddReleaseWidget...OK +FieldGetAndBitwiseOrWidget...OK +FieldGetAndBitwiseOrReleaseWidget...OK +FieldGetAndBitwiseOrAcquireWidget...OK +FieldGetAndBitwiseAndWidget...OK +FieldGetAndBitwiseAndReleaseWidget...OK +FieldGetAndBitwiseAndAcquireWidget...OK +FieldGetAndBitwiseXorWidget...OK +FieldGetAndBitwiseXorReleaseWidget...OK +FieldGetAndBitwiseXorAcquireWidget...OK +FinalFieldGetWidget...OK +FinalFieldSetWidget...OK +FinalFieldGetVolatileWidget...OK +FinalFieldSetVolatileWidget...OK +FinalFieldGetAcquireWidget...OK +FinalFieldSetReleaseWidget...OK +FinalFieldGetOpaqueWidget...OK +FinalFieldSetOpaqueWidget...OK +FinalFieldCompareAndSetWidget...OK +FinalFieldCompareAndExchangeWidget...OK +FinalFieldCompareAndExchangeAcquireWidget...OK +FinalFieldCompareAndExchangeReleaseWidget...OK +FinalFieldWeakCompareAndSetPlainWidget...OK +FinalFieldWeakCompareAndSetWidget...OK +FinalFieldWeakCompareAndSetAcquireWidget...OK +FinalFieldWeakCompareAndSetReleaseWidget...OK +FinalFieldGetAndSetWidget...OK +FinalFieldGetAndSetAcquireWidget...OK +FinalFieldGetAndSetReleaseWidget...OK +FinalFieldGetAndAddWidget...OK +FinalFieldGetAndAddAcquireWidget...OK +FinalFieldGetAndAddReleaseWidget...OK +FinalFieldGetAndBitwiseOrWidget...OK +FinalFieldGetAndBitwiseOrReleaseWidget...OK +FinalFieldGetAndBitwiseOrAcquireWidget...OK +FinalFieldGetAndBitwiseAndWidget...OK +FinalFieldGetAndBitwiseAndReleaseWidget...OK +FinalFieldGetAndBitwiseAndAcquireWidget...OK +FinalFieldGetAndBitwiseXorWidget...OK +FinalFieldGetAndBitwiseXorReleaseWidget...OK +FinalFieldGetAndBitwiseXorAcquireWidget...OK +StaticFieldGetWidget...OK +StaticFieldSetWidget...OK +StaticFieldGetVolatileWidget...OK +StaticFieldSetVolatileWidget...OK +StaticFieldGetAcquireWidget...OK +StaticFieldSetReleaseWidget...OK +StaticFieldGetOpaqueWidget...OK +StaticFieldSetOpaqueWidget...OK +StaticFieldCompareAndSetWidget...OK +StaticFieldCompareAndExchangeWidget...OK +StaticFieldCompareAndExchangeAcquireWidget...OK +StaticFieldCompareAndExchangeReleaseWidget...OK +StaticFieldWeakCompareAndSetPlainWidget...OK +StaticFieldWeakCompareAndSetWidget...OK +StaticFieldWeakCompareAndSetAcquireWidget...OK +StaticFieldWeakCompareAndSetReleaseWidget...OK +StaticFieldGetAndSetWidget...OK +StaticFieldGetAndSetAcquireWidget...OK +StaticFieldGetAndSetReleaseWidget...OK +StaticFieldGetAndAddWidget...OK +StaticFieldGetAndAddAcquireWidget...OK +StaticFieldGetAndAddReleaseWidget...OK +StaticFieldGetAndBitwiseOrWidget...OK +StaticFieldGetAndBitwiseOrReleaseWidget...OK +StaticFieldGetAndBitwiseOrAcquireWidget...OK +StaticFieldGetAndBitwiseAndWidget...OK +StaticFieldGetAndBitwiseAndReleaseWidget...OK +StaticFieldGetAndBitwiseAndAcquireWidget...OK +StaticFieldGetAndBitwiseXorWidget...OK +StaticFieldGetAndBitwiseXorReleaseWidget...OK +StaticFieldGetAndBitwiseXorAcquireWidget...OK +StaticFinalFieldGetWidget...OK +StaticFinalFieldSetWidget...OK +StaticFinalFieldGetVolatileWidget...OK +StaticFinalFieldSetVolatileWidget...OK +StaticFinalFieldGetAcquireWidget...OK +StaticFinalFieldSetReleaseWidget...OK +StaticFinalFieldGetOpaqueWidget...OK +StaticFinalFieldSetOpaqueWidget...OK +StaticFinalFieldCompareAndSetWidget...OK +StaticFinalFieldCompareAndExchangeWidget...OK +StaticFinalFieldCompareAndExchangeAcquireWidget...OK +StaticFinalFieldCompareAndExchangeReleaseWidget...OK +StaticFinalFieldWeakCompareAndSetPlainWidget...OK +StaticFinalFieldWeakCompareAndSetWidget...OK +StaticFinalFieldWeakCompareAndSetAcquireWidget...OK +StaticFinalFieldWeakCompareAndSetReleaseWidget...OK +StaticFinalFieldGetAndSetWidget...OK +StaticFinalFieldGetAndSetAcquireWidget...OK +StaticFinalFieldGetAndSetReleaseWidget...OK +StaticFinalFieldGetAndAddWidget...OK +StaticFinalFieldGetAndAddAcquireWidget...OK +StaticFinalFieldGetAndAddReleaseWidget...OK +StaticFinalFieldGetAndBitwiseOrWidget...OK +StaticFinalFieldGetAndBitwiseOrReleaseWidget...OK +StaticFinalFieldGetAndBitwiseOrAcquireWidget...OK +StaticFinalFieldGetAndBitwiseAndWidget...OK +StaticFinalFieldGetAndBitwiseAndReleaseWidget...OK +StaticFinalFieldGetAndBitwiseAndAcquireWidget...OK +StaticFinalFieldGetAndBitwiseXorWidget...OK +StaticFinalFieldGetAndBitwiseXorReleaseWidget...OK +StaticFinalFieldGetAndBitwiseXorAcquireWidget...OK +ArrayElementGetWidget...OK +ArrayElementSetWidget...OK +ArrayElementGetVolatileWidget...OK +ArrayElementSetVolatileWidget...OK +ArrayElementGetAcquireWidget...OK +ArrayElementSetReleaseWidget...OK +ArrayElementGetOpaqueWidget...OK +ArrayElementSetOpaqueWidget...OK +ArrayElementCompareAndSetWidget...OK +ArrayElementCompareAndExchangeWidget...OK +ArrayElementCompareAndExchangeAcquireWidget...OK +ArrayElementCompareAndExchangeReleaseWidget...OK +ArrayElementWeakCompareAndSetPlainWidget...OK +ArrayElementWeakCompareAndSetWidget...OK +ArrayElementWeakCompareAndSetAcquireWidget...OK +ArrayElementWeakCompareAndSetReleaseWidget...OK +ArrayElementGetAndSetWidget...OK +ArrayElementGetAndSetAcquireWidget...OK +ArrayElementGetAndSetReleaseWidget...OK +ArrayElementGetAndAddWidget...OK +ArrayElementGetAndAddAcquireWidget...OK +ArrayElementGetAndAddReleaseWidget...OK +ArrayElementGetAndBitwiseOrWidget...OK +ArrayElementGetAndBitwiseOrReleaseWidget...OK +ArrayElementGetAndBitwiseOrAcquireWidget...OK +ArrayElementGetAndBitwiseAndWidget...OK +ArrayElementGetAndBitwiseAndReleaseWidget...OK +ArrayElementGetAndBitwiseAndAcquireWidget...OK +ArrayElementGetAndBitwiseXorWidget...OK +ArrayElementGetAndBitwiseXorReleaseWidget...OK +ArrayElementGetAndBitwiseXorAcquireWidget...OK +BoxingReturnGetBoolean...OK +BoxingSetBoolean...OK +BoxingReturnGetVolatileBoolean...OK +BoxingSetVolatileBoolean...OK +BoxingReturnGetAcquireBoolean...OK +BoxingSetReleaseBoolean...OK +BoxingReturnGetOpaqueBoolean...OK +BoxingSetOpaqueBoolean...OK +BoxingCompareAndSetBoolean...OK +BoxingCompareAndExchangeBoolean...OK +BoxingCompareAndExchangeAcquireBoolean...OK +BoxingCompareAndExchangeReleaseBoolean...OK +BoxingWeakCompareAndSetPlainBoolean...OK +BoxingWeakCompareAndSetBoolean...OK +BoxingWeakCompareAndSetAcquireBoolean...OK +BoxingWeakCompareAndSetReleaseBoolean...OK +BoxingGetAndSetBoolean...OK +BoxingGetAndSetAcquireBoolean...OK +BoxingGetAndSetReleaseBoolean...OK +BoxingGetAndAddBoolean...OK +BoxingGetAndAddAcquireBoolean...OK +BoxingGetAndAddReleaseBoolean...OK +BoxingGetAndBitwiseOrBoolean...OK +BoxingGetAndBitwiseOrReleaseBoolean...OK +BoxingGetAndBitwiseOrAcquireBoolean...OK +BoxingGetAndBitwiseAndBoolean...OK +BoxingGetAndBitwiseAndReleaseBoolean...OK +BoxingGetAndBitwiseAndAcquireBoolean...OK +BoxingGetAndBitwiseXorBoolean...OK +BoxingGetAndBitwiseXorReleaseBoolean...OK +BoxingGetAndBitwiseXorAcquireBoolean...OK +BoxingReturnGetByte...OK +BoxingSetByte...OK +BoxingReturnGetVolatileByte...OK +BoxingSetVolatileByte...OK +BoxingReturnGetAcquireByte...OK +BoxingSetReleaseByte...OK +BoxingReturnGetOpaqueByte...OK +BoxingSetOpaqueByte...OK +BoxingCompareAndSetByte...OK +BoxingCompareAndExchangeByte...OK +BoxingCompareAndExchangeAcquireByte...OK +BoxingCompareAndExchangeReleaseByte...OK +BoxingWeakCompareAndSetPlainByte...OK +BoxingWeakCompareAndSetByte...OK +BoxingWeakCompareAndSetAcquireByte...OK +BoxingWeakCompareAndSetReleaseByte...OK +BoxingGetAndSetByte...OK +BoxingGetAndSetAcquireByte...OK +BoxingGetAndSetReleaseByte...OK +BoxingGetAndAddByte...OK +BoxingGetAndAddAcquireByte...OK +BoxingGetAndAddReleaseByte...OK +BoxingGetAndBitwiseOrByte...OK +BoxingGetAndBitwiseOrReleaseByte...OK +BoxingGetAndBitwiseOrAcquireByte...OK +BoxingGetAndBitwiseAndByte...OK +BoxingGetAndBitwiseAndReleaseByte...OK +BoxingGetAndBitwiseAndAcquireByte...OK +BoxingGetAndBitwiseXorByte...OK +BoxingGetAndBitwiseXorReleaseByte...OK +BoxingGetAndBitwiseXorAcquireByte...OK +BoxingReturnGetShort...OK +BoxingSetShort...OK +BoxingReturnGetVolatileShort...OK +BoxingSetVolatileShort...OK +BoxingReturnGetAcquireShort...OK +BoxingSetReleaseShort...OK +BoxingReturnGetOpaqueShort...OK +BoxingSetOpaqueShort...OK +BoxingCompareAndSetShort...OK +BoxingCompareAndExchangeShort...OK +BoxingCompareAndExchangeAcquireShort...OK +BoxingCompareAndExchangeReleaseShort...OK +BoxingWeakCompareAndSetPlainShort...OK +BoxingWeakCompareAndSetShort...OK +BoxingWeakCompareAndSetAcquireShort...OK +BoxingWeakCompareAndSetReleaseShort...OK +BoxingGetAndSetShort...OK +BoxingGetAndSetAcquireShort...OK +BoxingGetAndSetReleaseShort...OK +BoxingGetAndAddShort...OK +BoxingGetAndAddAcquireShort...OK +BoxingGetAndAddReleaseShort...OK +BoxingGetAndBitwiseOrShort...OK +BoxingGetAndBitwiseOrReleaseShort...OK +BoxingGetAndBitwiseOrAcquireShort...OK +BoxingGetAndBitwiseAndShort...OK +BoxingGetAndBitwiseAndReleaseShort...OK +BoxingGetAndBitwiseAndAcquireShort...OK +BoxingGetAndBitwiseXorShort...OK +BoxingGetAndBitwiseXorReleaseShort...OK +BoxingGetAndBitwiseXorAcquireShort...OK +BoxingReturnGetChar...OK +BoxingSetChar...OK +BoxingReturnGetVolatileChar...OK +BoxingSetVolatileChar...OK +BoxingReturnGetAcquireChar...OK +BoxingSetReleaseChar...OK +BoxingReturnGetOpaqueChar...OK +BoxingSetOpaqueChar...OK +BoxingCompareAndSetChar...OK +BoxingCompareAndExchangeChar...OK +BoxingCompareAndExchangeAcquireChar...OK +BoxingCompareAndExchangeReleaseChar...OK +BoxingWeakCompareAndSetPlainChar...OK +BoxingWeakCompareAndSetChar...OK +BoxingWeakCompareAndSetAcquireChar...OK +BoxingWeakCompareAndSetReleaseChar...OK +BoxingGetAndSetChar...OK +BoxingGetAndSetAcquireChar...OK +BoxingGetAndSetReleaseChar...OK +BoxingGetAndAddChar...OK +BoxingGetAndAddAcquireChar...OK +BoxingGetAndAddReleaseChar...OK +BoxingGetAndBitwiseOrChar...OK +BoxingGetAndBitwiseOrReleaseChar...OK +BoxingGetAndBitwiseOrAcquireChar...OK +BoxingGetAndBitwiseAndChar...OK +BoxingGetAndBitwiseAndReleaseChar...OK +BoxingGetAndBitwiseAndAcquireChar...OK +BoxingGetAndBitwiseXorChar...OK +BoxingGetAndBitwiseXorReleaseChar...OK +BoxingGetAndBitwiseXorAcquireChar...OK +BoxingReturnGetInt...OK +BoxingSetInt...OK +BoxingReturnGetVolatileInt...OK +BoxingSetVolatileInt...OK +BoxingReturnGetAcquireInt...OK +BoxingSetReleaseInt...OK +BoxingReturnGetOpaqueInt...OK +BoxingSetOpaqueInt...OK +BoxingCompareAndSetInt...OK +BoxingCompareAndExchangeInt...OK +BoxingCompareAndExchangeAcquireInt...OK +BoxingCompareAndExchangeReleaseInt...OK +BoxingWeakCompareAndSetPlainInt...OK +BoxingWeakCompareAndSetInt...OK +BoxingWeakCompareAndSetAcquireInt...OK +BoxingWeakCompareAndSetReleaseInt...OK +BoxingGetAndSetInt...OK +BoxingGetAndSetAcquireInt...OK +BoxingGetAndSetReleaseInt...OK +BoxingGetAndAddInt...OK +BoxingGetAndAddAcquireInt...OK +BoxingGetAndAddReleaseInt...OK +BoxingGetAndBitwiseOrInt...OK +BoxingGetAndBitwiseOrReleaseInt...OK +BoxingGetAndBitwiseOrAcquireInt...OK +BoxingGetAndBitwiseAndInt...OK +BoxingGetAndBitwiseAndReleaseInt...OK +BoxingGetAndBitwiseAndAcquireInt...OK +BoxingGetAndBitwiseXorInt...OK +BoxingGetAndBitwiseXorReleaseInt...OK +BoxingGetAndBitwiseXorAcquireInt...OK +BoxingReturnGetLong...OK +BoxingSetLong...OK +BoxingReturnGetVolatileLong...OK +BoxingSetVolatileLong...OK +BoxingReturnGetAcquireLong...OK +BoxingSetReleaseLong...OK +BoxingReturnGetOpaqueLong...OK +BoxingSetOpaqueLong...OK +BoxingCompareAndSetLong...OK +BoxingCompareAndExchangeLong...OK +BoxingCompareAndExchangeAcquireLong...OK +BoxingCompareAndExchangeReleaseLong...OK +BoxingWeakCompareAndSetPlainLong...OK +BoxingWeakCompareAndSetLong...OK +BoxingWeakCompareAndSetAcquireLong...OK +BoxingWeakCompareAndSetReleaseLong...OK +BoxingGetAndSetLong...OK +BoxingGetAndSetAcquireLong...OK +BoxingGetAndSetReleaseLong...OK +BoxingGetAndAddLong...OK +BoxingGetAndAddAcquireLong...OK +BoxingGetAndAddReleaseLong...OK +BoxingGetAndBitwiseOrLong...OK +BoxingGetAndBitwiseOrReleaseLong...OK +BoxingGetAndBitwiseOrAcquireLong...OK +BoxingGetAndBitwiseAndLong...OK +BoxingGetAndBitwiseAndReleaseLong...OK +BoxingGetAndBitwiseAndAcquireLong...OK +BoxingGetAndBitwiseXorLong...OK +BoxingGetAndBitwiseXorReleaseLong...OK +BoxingGetAndBitwiseXorAcquireLong...OK +BoxingReturnGetFloat...OK +BoxingSetFloat...OK +BoxingReturnGetVolatileFloat...OK +BoxingSetVolatileFloat...OK +BoxingReturnGetAcquireFloat...OK +BoxingSetReleaseFloat...OK +BoxingReturnGetOpaqueFloat...OK +BoxingSetOpaqueFloat...OK +BoxingCompareAndSetFloat...OK +BoxingCompareAndExchangeFloat...OK +BoxingCompareAndExchangeAcquireFloat...OK +BoxingCompareAndExchangeReleaseFloat...OK +BoxingWeakCompareAndSetPlainFloat...OK +BoxingWeakCompareAndSetFloat...OK +BoxingWeakCompareAndSetAcquireFloat...OK +BoxingWeakCompareAndSetReleaseFloat...OK +BoxingGetAndSetFloat...OK +BoxingGetAndSetAcquireFloat...OK +BoxingGetAndSetReleaseFloat...OK +BoxingGetAndAddFloat...OK +BoxingGetAndAddAcquireFloat...OK +BoxingGetAndAddReleaseFloat...OK +BoxingGetAndBitwiseOrFloat...OK +BoxingGetAndBitwiseOrReleaseFloat...OK +BoxingGetAndBitwiseOrAcquireFloat...OK +BoxingGetAndBitwiseAndFloat...OK +BoxingGetAndBitwiseAndReleaseFloat...OK +BoxingGetAndBitwiseAndAcquireFloat...OK +BoxingGetAndBitwiseXorFloat...OK +BoxingGetAndBitwiseXorReleaseFloat...OK +BoxingGetAndBitwiseXorAcquireFloat...OK +BoxingReturnGetDouble...OK +BoxingSetDouble...OK +BoxingReturnGetVolatileDouble...OK +BoxingSetVolatileDouble...OK +BoxingReturnGetAcquireDouble...OK +BoxingSetReleaseDouble...OK +BoxingReturnGetOpaqueDouble...OK +BoxingSetOpaqueDouble...OK +BoxingCompareAndSetDouble...OK +BoxingCompareAndExchangeDouble...OK +BoxingCompareAndExchangeAcquireDouble...OK +BoxingCompareAndExchangeReleaseDouble...OK +BoxingWeakCompareAndSetPlainDouble...OK +BoxingWeakCompareAndSetDouble...OK +BoxingWeakCompareAndSetAcquireDouble...OK +BoxingWeakCompareAndSetReleaseDouble...OK +BoxingGetAndSetDouble...OK +BoxingGetAndSetAcquireDouble...OK +BoxingGetAndSetReleaseDouble...OK +BoxingGetAndAddDouble...OK +BoxingGetAndAddAcquireDouble...OK +BoxingGetAndAddReleaseDouble...OK +BoxingGetAndBitwiseOrDouble...OK +BoxingGetAndBitwiseOrReleaseDouble...OK +BoxingGetAndBitwiseOrAcquireDouble...OK +BoxingGetAndBitwiseAndDouble...OK +BoxingGetAndBitwiseAndReleaseDouble...OK +BoxingGetAndBitwiseAndAcquireDouble...OK +BoxingGetAndBitwiseXorDouble...OK +BoxingGetAndBitwiseXorReleaseDouble...OK +BoxingGetAndBitwiseXorAcquireDouble...OK +NullReceiverTest...OK +UnsupportedAccessModeTest...OK +WrongArgumentTypeCausingWrongMethodTypeTest...OK +TooManyArgumentsCausingWrongMethodTypeTest...OK +TooFewArgumentsCausingWrongMethodTypeTest...OK +ReturnTypeCausingWrongMethodTypeTest...OK +UnsupportedAccessModePreemptsWrongMethodTypeExceptionTest...OK +FieldCoordinateTypeTest...OK +ArrayElementOutOfBoundsIndexTest...OK +ArrayElementBadIndexTypeTest...OK +ArrayElementNullArrayTest...OK +ArrayElementWrongArrayTypeTest...OK +ArrayElementMissingIndexTest...OK +ByteArrayViewOutOfBoundsIndexTest...OK +ByteArrayViewUnalignedAccessesIndexTest...OK +ByteArrayViewBadIndexTypeTest...OK +ByteArrayViewMissingIndexTest...OK +ByteArrayViewBadByteArrayTest...OK +ByteBufferViewOutOfBoundsIndexTest...OK +ByteBufferViewUnalignedAccessesIndexTest...OK +ByteBufferViewBadIndexTypeTest...OK +ByteBufferViewMissingIndexTest...OK +ByteBufferViewBadByteBufferTest...OK +VoidReturnTypeTest...OK +BoxedNullBooleanThrowsNPETest...OK +BoxedNullByteThrowsNPETest...OK +BoxedNullCharacterThrowsNPETest...OK +BoxedNullShortThrowsNPETest...OK +BoxedNullIntegerThrowsNPETest...OK +BoxedNullLongThrowsNPETest...OK +BoxedNullFloatThrowsNPETest...OK +BoxedNullDoubleThrowsNPETest...OK +WideningBooleanArgumentTest...OK +WideningByteArgumentTest...OK +WideningCharacterArgumentTest...OK +WideningShortArgumentTest...OK +WideningIntegerArgumentTest...OK +WideningLongArgumentTest...OK +WideningFloatArgumentTest...OK +WideningDoubleArgumentTest...OK +WideningBooleanReturnValueTest...OK +WideningByteReturnValueTest...OK +WideningCharacterReturnValueTest...OK +WideningShortReturnValueTest...OK +WideningIntegerReturnValueTest...OK +WideningLongReturnValueTest...OK +WideningFloatReturnValueTest...OK +WideningDoubleReturnValueTest...OK +SubtypeTest...OK +SupertypeTest...OK +ImplicitBoxingIntegerTest...OK +3182 successes, 0 skips, 0 failures. diff --git a/test/712-varhandle-invocations/info.txt b/test/712-varhandle-invocations/info.txt new file mode 100644 index 0000000000..e2de024d8e --- /dev/null +++ b/test/712-varhandle-invocations/info.txt @@ -0,0 +1 @@ +Generates and runs tests that invoke VarHandle accessor methods. diff --git a/test/712-varhandle-invocations/src/SimpleTests.java b/test/712-varhandle-invocations/src/SimpleTests.java new file mode 100644 index 0000000000..6e62bff4b4 --- /dev/null +++ b/test/712-varhandle-invocations/src/SimpleTests.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +public class SimpleTests { +    public static class TestGuardSkips extends VarHandleUnitTest { +        public boolean checkGuard() { +            return false; +        } + +        @Override +        protected void doTest() { +            throw new IllegalStateException("Not reachable"); +        } + +        public static void main(String[] args) { +            new TestGuardSkips().run(); +        } +    } + +    public static class TestEqualsOK extends VarHandleUnitTest { +        @Override +        protected void doTest() { +            assertEquals(true, true); +        } +    } + +    public static class TestEqualsOK2 extends VarHandleUnitTest { +        @Override +        protected void doTest() { +            assertEquals(true, false); +        } +    } + +    public static class TestExceptionsFail extends VarHandleUnitTest { +        @Override +        protected void doTest() { +            throw new NullPointerException(); +        } +    } + +    public static void main(String[] args) { +        new TestGuardSkips().run(); +        new TestEqualsOK().run(); +        new TestEqualsOK2().run(); +        new TestExceptionsFail().run(); +        VarHandleUnitTest.DEFAULT_COLLECTOR.printSummary(); +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleAccessorExceptionTests.java b/test/712-varhandle-invocations/src/VarHandleAccessorExceptionTests.java new file mode 100644 index 0000000000..4c9013b14d --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleAccessorExceptionTests.java @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.lang.invoke.WrongMethodTypeException; + +// These tests cover DoVarHandleInvokeCommon in interpreter_common.cc. + +public class VarHandleAccessorExceptionTests { +    public static class NullReceiverTest extends VarHandleUnitTest { +        private static final VarHandle vh = null; + +        @Override +        protected void doTest() { +            try { +                vh.set(3); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new NullReceiverTest().run(); +        } +    } + +    public static class UnsupportedAccessModeTest extends VarHandleUnitTest { +        private static final boolean b = true; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = UnsupportedAccessModeTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "b", boolean.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            // A final field should not support an VarHandle access modes which can update it +            boolean isSupported = +                    vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_AND); +            assertFalse(isSupported); +            try { +                vh.getAndBitwiseAnd(true); +                failUnreachable(); +            } catch (UnsupportedOperationException ex) { +            } +        } + +        public static void main(String[] args) { +            new UnsupportedAccessModeTest().run(); +        } +    } + +    public static class WrongArgumentTypeCausingWrongMethodTypeTest extends VarHandleUnitTest { +        private short s; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WrongArgumentTypeCausingWrongMethodTypeTest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "s", short.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.set(this, (short) 0xcafe); +            try { +                vh.setVolatile(this, System.out); // System.out is a PrintStream, not short! +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WrongArgumentTypeCausingWrongMethodTypeTest().run(); +        } +    } + +    // Too many arguments causing WMTE +    public static class TooManyArgumentsCausingWrongMethodTypeTest extends VarHandleUnitTest { +        private int i; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = TooManyArgumentsCausingWrongMethodTypeTest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "i", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.set(this, 0x12345678); +            try { +                vh.setVolatile(this, 0x5a5a55aa, 0xc3c30f0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new TooManyArgumentsCausingWrongMethodTypeTest().run(); +        } +    } + +    public static class TooFewArgumentsCausingWrongMethodTypeTest extends VarHandleUnitTest { +        private int i; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = TooFewArgumentsCausingWrongMethodTypeTest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "i", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            i = 33; +            vh.compareAndSet(this, 33, 44); +            boolean updated = false; +            try { +                updated = (boolean) vh.compareAndSet(this, 44); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            assertFalse(updated); // Should have failed too few arguments +        } + +        public static void main(String[] args) { +            new TooFewArgumentsCausingWrongMethodTypeTest().run(); +        } +    } + +    public static class ReturnTypeCausingWrongMethodTypeTest extends VarHandleUnitTest { +        private int i; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = ReturnTypeCausingWrongMethodTypeTest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "i", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            i = 33; +            vh.getAndSet(this, 44); +            Runtime runtime = null; +            try { +                runtime = (Runtime) vh.getAndSet(this, 44); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            assertEquals(null, runtime); +        } + +        public static void main(String[] args) { +            new ReturnTypeCausingWrongMethodTypeTest().run(); +        } +    } + +    public static class UnsupportedAccessModePreemptsWrongMethodTypeExceptionTest +            extends VarHandleUnitTest { +        private static final boolean b = true; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = UnsupportedAccessModePreemptsWrongMethodTypeExceptionTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "b", boolean.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            // A final field should not support an VarHandle access modes which can update it +            boolean supported = vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_AND); +            assertFalse(supported); +            try { +                // The following is both unsupported and a wrong method type... +                vh.getAndBitwiseAnd(System.out); +                failUnreachable(); +            } catch (UnsupportedOperationException ex) { +            } +        } + +        public static void main(String[] args) { +            new UnsupportedAccessModePreemptsWrongMethodTypeExceptionTest().run(); +        } +    } + +    public static void main(String[] args) { +        NullReceiverTest.main(args); +        UnsupportedAccessModeTest.main(args); +        WrongArgumentTypeCausingWrongMethodTypeTest.main(args); +        TooManyArgumentsCausingWrongMethodTypeTest.main(args); +        TooFewArgumentsCausingWrongMethodTypeTest.main(args); +        ReturnTypeCausingWrongMethodTypeTest.main(args); +        UnsupportedAccessModePreemptsWrongMethodTypeExceptionTest.main(args); +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java b/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java new file mode 100644 index 0000000000..8f81c94a89 --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java @@ -0,0 +1,948 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.lang.invoke.WrongMethodTypeException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class VarHandleBadCoordinateTests { +    public static class FieldCoordinateTypeTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        public static class A { +            public byte field; +        } + +        public static class B extends A { +            private byte other_field; +        } + +        public static class C {} + +        static { +            try { +                vh = MethodHandles.lookup().findVarHandle(A.class, "field", byte.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.compareAndSet(new A(), (byte) 0, (byte) 3); +            vh.compareAndSet(new B(), (byte) 0, (byte) 3); +            try { +                vh.compareAndSet(new C(), (byte) 0, (byte) 3); +                failUnreachable(); +            } catch (ClassCastException ex) { +            } +            try { +                vh.compareAndSet(0xbad0bad0, (byte) 0, (byte) 3); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.compareAndSet(0xbad0bad0, (byte) 0, Integer.MAX_VALUE); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.compareAndSet(0xbad0bad0, (byte) 0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.compareAndSet(new A(), (byte) 0, Integer.MAX_VALUE); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.compareAndSet((A) null, (byte) 0, (byte) 3); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new FieldCoordinateTypeTest().run(); +        } +    } + +    public static class ArrayElementOutOfBoundsIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(long[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            long[] values = new long[33]; +            try { +                vh.get(values, -1); +                failUnreachable(); +            } catch (ArrayIndexOutOfBoundsException ex) { +            } +            try { +                vh.get(values, values.length); +                failUnreachable(); +            } catch (ArrayIndexOutOfBoundsException ex) { +            } +            try { +                vh.get(values, Integer.MAX_VALUE - 1); +                failUnreachable(); +            } catch (ArrayIndexOutOfBoundsException ex) { +            } +        } + +        public static void main(String[] args) { +            new ArrayElementOutOfBoundsIndexTest().run(); +        } +    } + +    public static class ArrayElementBadIndexTypeTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(long[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            long[] values = new long[33]; +            vh.set(values, Integer.valueOf(3), Long.MIN_VALUE); +            vh.set(values, Byte.valueOf((byte) 0), Long.MIN_VALUE); +            try { +                vh.set(values, 3.3f, Long.MAX_VALUE); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new ArrayElementBadIndexTypeTest().run(); +        } +    } + +    public static class ArrayElementNullArrayTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(long[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            long[] values = null; +            try { +                vh.get(values); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new ArrayElementNullArrayTest().run(); +        } +    } + +    public static class ArrayElementWrongArrayTypeTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(long[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.get(new char[10], 0); +                failUnreachable(); +            } catch (ClassCastException ex) { +            } +        } + +        public static void main(String[] args) { +            new ArrayElementWrongArrayTypeTest().run(); +        } +    } + +    public static class ArrayElementMissingIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(long[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            long[] values = new long[33]; +            try { +                vh.get(values); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new ArrayElementMissingIndexTest().run(); +        } +    } + +    public static class ByteArrayViewOutOfBoundsIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[16]; +            try { +                vh.get(bytes, -1); +                failUnreachable(); +            } catch (IndexOutOfBoundsException ex) { +            } +            try { +                vh.get(bytes, bytes.length); +                failUnreachable(); +            } catch (IndexOutOfBoundsException ex) { +            } +            try { +                vh.get(bytes, Integer.MAX_VALUE - 1); +                failUnreachable(); +            } catch (IndexOutOfBoundsException ex) { +            } +            try { +                vh.get(bytes, bytes.length - Integer.SIZE / 8 + 1); +                failUnreachable(); +            } catch (IndexOutOfBoundsException ex) { +            } +            vh.get(bytes, bytes.length - Integer.SIZE / 8); +        } + +        public static void main(String[] args) { +            new ByteArrayViewOutOfBoundsIndexTest().run(); +        } +    } + +    public static class ByteArrayViewUnalignedAccessesIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[33]; + +            int alignedIndex = VarHandleUnitTestHelpers.alignedOffset_int(bytes, 0); +            for (int i = alignedIndex; i < Integer.SIZE / 8; ++i) { +                // No exceptions are expected for GET and SET +                // accessors irrespective of the access alignment. +                vh.set(bytes, i, 380); +                vh.get(bytes, i); +                // Other accessors raise an IllegalStateException if +                // the access is unaligned. +                try { +                    vh.compareAndExchange(bytes, i, 777, 320); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.compareAndExchangeAcquire(bytes, i, 320, 767); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.compareAndExchangeRelease(bytes, i, 767, 321); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.compareAndSet(bytes, i, 767, 321); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAcquire(bytes, i); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndAdd(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndAddAcquire(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndAddRelease(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseAnd(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseAndAcquire(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseAndRelease(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseOr(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseOrAcquire(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseOrRelease(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseXor(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseXorAcquire(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndBitwiseXorRelease(bytes, i, 118); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndSet(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndSetAcquire(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getAndSetRelease(bytes, i, 117); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getOpaque(bytes, i); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.getVolatile(bytes, i); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.setOpaque(bytes, i, 777); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.setRelease(bytes, i, 319); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.setVolatile(bytes, i, 787); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.weakCompareAndSet(bytes, i, 787, 340); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.weakCompareAndSetAcquire(bytes, i, 787, 340); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.weakCompareAndSetPlain(bytes, i, 787, 340); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +                try { +                    vh.weakCompareAndSetRelease(bytes, i, 787, 340); +                    assertTrue(i == alignedIndex); +                } catch (IllegalStateException ex) { +                    assertFalse(i == alignedIndex); +                } +            } +        } + +        public static void main(String[] args) { +            new ByteArrayViewUnalignedAccessesIndexTest().run(); +        } +    } + +    public static class ByteArrayViewBadIndexTypeTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[16]; +            // Boxed index goes through argument conversion so no exception expected. +            vh.get(bytes, Integer.valueOf(3)); +            vh.get(bytes, Short.valueOf((short) 3)); + +            try { +                vh.get(bytes, System.out); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new ByteArrayViewBadIndexTypeTest().run(); +        } +    } + +    public static class ByteArrayViewMissingIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[16]; +            try { +                vh.get(bytes); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new ByteArrayViewMissingIndexTest().run(); +        } +    } + +    public static class ByteArrayViewBadByteArrayTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = null; +            try { +                vh.get(bytes, Integer.valueOf(3)); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +            try { +                vh.get(System.err, Integer.valueOf(3)); +                failUnreachable(); +            } catch (ClassCastException ex) { +            } +        } + +        public static void main(String[] args) { +            new ByteArrayViewBadByteArrayTest().run(); +        } +    } + +    public static class ByteBufferViewOutOfBoundsIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(float[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer[] buffers = +                    new ByteBuffer[] { +                        ByteBuffer.allocateDirect(16), +                        ByteBuffer.allocate(37), +                        ByteBuffer.wrap(new byte[27], 3, 27 - 3) +                    }; +            for (ByteBuffer buffer : buffers) { +                try { +                    vh.get(buffer, -1); +                    failUnreachable(); +                } catch (IndexOutOfBoundsException ex) { +                } +                try { +                    vh.get(buffer, buffer.limit()); +                    failUnreachable(); +                } catch (IndexOutOfBoundsException ex) { +                } +                try { +                    vh.get(buffer, Integer.MAX_VALUE - 1); +                    failUnreachable(); +                } catch (IndexOutOfBoundsException ex) { +                } +                try { +                    vh.get(buffer, buffer.limit() - Integer.SIZE / 8 + 1); +                    failUnreachable(); +                } catch (IndexOutOfBoundsException ex) { +                } +                vh.get(buffer, buffer.limit() - Integer.SIZE / 8); +            } +        } + +        public static void main(String[] args) { +            new ByteBufferViewOutOfBoundsIndexTest().run(); +        } +    } + +    public static class ByteBufferViewUnalignedAccessesIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer[] buffers = +                    new ByteBuffer[] { +                        ByteBuffer.allocateDirect(16), +                        ByteBuffer.allocate(37), +                        ByteBuffer.wrap(new byte[27], 3, 27 - 3) +                    }; + +            for (ByteBuffer buffer : buffers) { +                int alignedIndex = VarHandleUnitTestHelpers.alignedOffset_int(buffer, 0); +                for (int i = alignedIndex; i < Integer.SIZE / 8; ++i) { +                    // No exceptions are expected for GET and SET +                    // accessors irrespective of the access alignment. +                    vh.set(buffer, i, 380); +                    vh.get(buffer, i); +                    // Other accessors raise an IllegalStateException if +                    // the access is unaligned. +                    try { +                        vh.compareAndExchange(buffer, i, 777, 320); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.compareAndExchangeAcquire(buffer, i, 320, 767); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.compareAndExchangeRelease(buffer, i, 767, 321); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.compareAndSet(buffer, i, 767, 321); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAcquire(buffer, i); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndAdd(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndAddAcquire(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndAddRelease(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseAnd(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseAndAcquire(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseAndRelease(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseOr(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseOrAcquire(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseOrRelease(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseXor(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseXorAcquire(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndBitwiseXorRelease(buffer, i, 118); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndSet(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndSetAcquire(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getAndSetRelease(buffer, i, 117); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getOpaque(buffer, i); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.getVolatile(buffer, i); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.setOpaque(buffer, i, 777); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.setRelease(buffer, i, 319); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.setVolatile(buffer, i, 787); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.weakCompareAndSet(buffer, i, 787, 340); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.weakCompareAndSetAcquire(buffer, i, 787, 340); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.weakCompareAndSetPlain(buffer, i, 787, 340); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                    try { +                        vh.weakCompareAndSetRelease(buffer, i, 787, 340); +                        assertTrue(i == alignedIndex); +                    } catch (IllegalStateException ex) { +                        assertFalse(i == alignedIndex); +                    } +                } +            } +        } + +        public static void main(String[] args) { +            new ByteBufferViewUnalignedAccessesIndexTest().run(); +        } +    } + +    public static class ByteBufferViewBadIndexTypeTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer[] buffers = +                    new ByteBuffer[] { +                        ByteBuffer.allocateDirect(16), +                        ByteBuffer.allocate(16), +                        ByteBuffer.wrap(new byte[32], 4, 32 - 4) +                    }; + +            for (ByteBuffer buffer : buffers) { +                // Boxed index goes through argument conversion so no exception expected. +                vh.get(buffer, Integer.valueOf(3)); +                vh.get(buffer, Short.valueOf((short) 3)); +                vh.get(buffer, Byte.valueOf((byte) 7)); +                try { +                    vh.get(buffer, System.out); +                    failUnreachable(); +                } catch (WrongMethodTypeException ex) { +                } +            } +        } + +        public static void main(String[] args) { +            new ByteBufferViewBadIndexTypeTest().run(); +        } +    } + +    public static class ByteBufferViewMissingIndexTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer[] buffers = +                    new ByteBuffer[] { +                        ByteBuffer.allocateDirect(16), +                        ByteBuffer.allocate(16), +                        ByteBuffer.wrap(new byte[32], 4, 32 - 4) +                    }; +            for (ByteBuffer buffer : buffers) { +                try { +                    vh.get(buffer); +                    failUnreachable(); +                } catch (WrongMethodTypeException ex) { +                } +            } +        } + +        public static void main(String[] args) { +            new ByteBufferViewMissingIndexTest().run(); +        } +    } + +    public static class ByteBufferViewBadByteBufferTest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            if (VarHandleUnitTestHelpers.isRunningOnAndroid()) { +                ByteBuffer buffer = null; +                // The RI does not like this test +                try { +                    vh.get(buffer, 3); +                    failUnreachable(); +                } catch (NullPointerException ex) { +                } +            } +            try { +                vh.get(System.err, 3); +                failUnreachable(); +            } catch (ClassCastException ex) { +            } +        } + +        public static void main(String[] args) { +            new ByteBufferViewBadByteBufferTest().run(); +        } +    } + +    public static void main(String[] args) { +        FieldCoordinateTypeTest.main(args); + +        ArrayElementOutOfBoundsIndexTest.main(args); +        ArrayElementBadIndexTypeTest.main(args); +        ArrayElementNullArrayTest.main(args); +        ArrayElementWrongArrayTypeTest.main(args); +        ArrayElementMissingIndexTest.main(args); + +        ByteArrayViewOutOfBoundsIndexTest.main(args); +        ByteArrayViewUnalignedAccessesIndexTest.main(args); +        ByteArrayViewBadIndexTypeTest.main(args); +        ByteArrayViewMissingIndexTest.main(args); +        ByteArrayViewBadByteArrayTest.main(args); + +        ByteBufferViewOutOfBoundsIndexTest.main(args); +        ByteBufferViewUnalignedAccessesIndexTest.main(args); +        ByteBufferViewBadIndexTypeTest.main(args); +        ByteBufferViewMissingIndexTest.main(args); +        ByteBufferViewBadByteBufferTest.main(args); +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleReflectiveTest.java b/test/712-varhandle-invocations/src/VarHandleReflectiveTest.java new file mode 100644 index 0000000000..ae2f332171 --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleReflectiveTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class VarHandleReflectiveTest { +    public static class ReflectiveAccessorInvocations extends VarHandleUnitTest { +        private static final VarHandle vh; +        private static int field; + +        static { +            try { +                Class<?> cls = ReflectiveAccessorInvocations.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "field", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() throws Exception { +            for (VarHandle.AccessMode accessMode : VarHandle.AccessMode.values()) { +                Method accessorMethod = +                        VarHandle.class.getMethod(accessMode.methodName(), Object[].class); +                try { +                    accessorMethod.invoke(vh, new Object[] {new Object[] {}}); +                    failUnreachable(); +                } catch (InvocationTargetException e) { +                    assertEquals(e.getCause().getClass(), UnsupportedOperationException.class); +                } +            } +        } + +        public static void main(String[] args) { +            new ReflectiveAccessorInvocations().run(); +        } +    } + +    public static void main(String[] args) { +        ReflectiveAccessorInvocations.main(args); +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleTypeConversionTests.java b/test/712-varhandle-invocations/src/VarHandleTypeConversionTests.java new file mode 100644 index 0000000000..c0fbd492b2 --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleTypeConversionTests.java @@ -0,0 +1,1343 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.lang.invoke.WrongMethodTypeException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class VarHandleTypeConversionTests { +    public static class VoidReturnTypeTest extends VarHandleUnitTest { +        private int i; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = VoidReturnTypeTest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "i", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            // Void is always okay for a return type. +            vh.setVolatile(this, 33); +            vh.get(this); +            vh.compareAndSet(this, 33, 44); +            vh.compareAndSet(this, 27, 16); +            vh.weakCompareAndSet(this, 17, 19); +            vh.getAndSet(this, 200000); +            vh.getAndBitwiseXor(this, 0x5a5a5a5a); +            vh.getAndAdd(this, 99); +        } + +        public static void main(String[] args) { +            new VoidReturnTypeTest().run(); +        } +    } + +    // +    // Tests that a null reference as a boxed primitive type argument +    // throws a NullPointerException. These vary the VarHandle type +    // with each primitive for coverage. +    // + +    public static class BoxedNullBooleanThrowsNPETest extends VarHandleUnitTest { +        private static boolean z; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = BoxedNullBooleanThrowsNPETest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "z", boolean.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            Boolean newValue = null; +            try { +                vh.getAndSet(newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullBooleanThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullByteThrowsNPETest extends VarHandleUnitTest { +        private byte b; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = BoxedNullByteThrowsNPETest.class; +                vh = MethodHandles.lookup().findVarHandle(cls, "b", byte.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            Byte newValue = null; +            try { +                vh.getAndSet(this, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullByteThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullCharacterThrowsNPETest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.arrayElementVarHandle(char[].class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            char[] values = new char[3]; +            Character newValue = null; +            try { +                vh.getAndSet(values, 0, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullCharacterThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullShortThrowsNPETest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = BoxedNullShortThrowsNPETest.class; +                vh = MethodHandles.byteArrayViewVarHandle(short[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[2 * Short.SIZE]; +            int index = VarHandleUnitTestHelpers.alignedOffset_short(bytes, 0); +            Short newValue = null; +            try { +                vh.set(bytes, index, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullShortThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullIntegerThrowsNPETest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[2 * Integer.SIZE]; +            int index = VarHandleUnitTestHelpers.alignedOffset_int(bytes, 0); +            Integer newValue = null; +            try { +                vh.setVolatile(bytes, index, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullIntegerThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullLongThrowsNPETest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = BoxedNullLongThrowsNPETest.class; +                vh = MethodHandles.byteBufferViewVarHandle(long[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer bb = ByteBuffer.allocateDirect(2 * Long.SIZE); +            int index = VarHandleUnitTestHelpers.alignedOffset_long(bb, 0); +            Long newValue = null; +            try { +                vh.getAndAdd(bb, index, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullLongThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullFloatThrowsNPETest extends VarHandleUnitTest { +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = BoxedNullFloatThrowsNPETest.class; +                vh = MethodHandles.byteBufferViewVarHandle(float[].class, ByteOrder.BIG_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            ByteBuffer bb = ByteBuffer.allocate(2 * Float.SIZE); +            int index = VarHandleUnitTestHelpers.alignedOffset_float(bb, 0); +            Float newValue = null; +            try { +                vh.set(bb, index, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullFloatThrowsNPETest().run(); +        } +    } + +    public static class BoxedNullDoubleThrowsNPETest extends VarHandleUnitTest { +        private double d; +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.byteBufferViewVarHandle(double[].class, ByteOrder.LITTLE_ENDIAN); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            byte[] bytes = new byte[3 * Double.SIZE]; +            int offset = 1; +            ByteBuffer bb = ByteBuffer.wrap(bytes, offset, bytes.length - offset); +            int index = VarHandleUnitTestHelpers.alignedOffset_double(bb, 0); +            Double newValue = null; +            try { +                vh.set(bb, index, newValue); +                failUnreachable(); +            } catch (NullPointerException ex) { +            } +        } + +        public static void main(String[] args) { +            new BoxedNullDoubleThrowsNPETest().run(); +        } +    } + +    public static class WideningBooleanArgumentTest extends VarHandleUnitTest { +        private static boolean v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningBooleanArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", boolean.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.set(true); +            try { +                vh.set((byte) 3); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set('c'); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((short) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((int) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((long) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningBooleanArgumentTest().run(); +        } +    } + +    public static class WideningByteArgumentTest extends VarHandleUnitTest { +        private static byte v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningByteArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", byte.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            try { +                vh.set('c'); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((short) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((int) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((long) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningByteArgumentTest().run(); +        } +    } + +    public static class WideningCharacterArgumentTest extends VarHandleUnitTest { +        private static char v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningCharacterArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", char.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((byte) 3); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set('c'); +            try { +                vh.set((short) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((int) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((long) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningCharacterArgumentTest().run(); +        } +    } + +    public static class WideningShortArgumentTest extends VarHandleUnitTest { +        private static short v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningShortArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", short.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            try { +                vh.set('c'); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((short) 1); +            try { +                vh.set((int) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((long) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningShortArgumentTest().run(); +        } +    } + +    public static class WideningIntegerArgumentTest extends VarHandleUnitTest { +        private static int v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningIntegerArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            vh.set('c'); +            vh.set((char) 0x8fff); +            assertEquals(0x8fff, v); +            vh.set((short) 1); +            vh.set((int) 1); +            try { +                vh.set((long) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningIntegerArgumentTest().run(); +        } +    } + +    public static class WideningLongArgumentTest extends VarHandleUnitTest { +        private static long v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningLongArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", long.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            vh.set('c'); +            vh.set((short) 1); +            vh.set((int) 1); +            vh.set((long) 1); +            try { +                vh.set((float) 1.0f); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningLongArgumentTest().run(); +        } +    } + +    public static class WideningFloatArgumentTest extends VarHandleUnitTest { +        private static float v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningFloatArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", float.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            vh.set('c'); +            vh.set((short) 1); +            vh.set((int) 1); +            vh.set((long) 1); +            vh.set((float) 1.0f); +            try { +                vh.set((double) 1.0); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningFloatArgumentTest().run(); +        } +    } + +    public static class WideningDoubleArgumentTest extends VarHandleUnitTest { +        private static double v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningDoubleArgumentTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", double.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            vh.set((byte) 3); +            vh.set('c'); +            vh.set((short) 1); +            vh.set((int) 1); +            vh.set((long) 1); +            vh.set((double) 1.0f); +            vh.set((double) 1.0); +        } + +        public static void main(String[] args) { +            new WideningDoubleArgumentTest().run(); +        } +    } + +    public static class WideningBooleanReturnValueTest extends VarHandleUnitTest { +        private static boolean v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningBooleanReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", boolean.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.set(true); +            vh.get(); +            boolean z = (boolean) vh.get(); +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                int i = (int) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                long j = (long) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                float f = (float) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                double d = (double) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +        } + +        public static void main(String[] args) { +            new WideningBooleanReturnValueTest().run(); +        } +    } + +    public static class WideningByteReturnValueTest extends VarHandleUnitTest { +        private static byte v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningByteReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", byte.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        @Override +        protected void doTest() { +            vh.set((byte) 3); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } + +            byte b = (byte) vh.get(); +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            short s = (short) vh.get(); +            int i = (int) vh.get(); +            long j = (long) vh.get(); +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } + +        public static void main(String[] args) { +            new WideningByteReturnValueTest().run(); +        } +    } + +    public static class WideningCharacterReturnValueTest extends VarHandleUnitTest { +        private static char v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningCharacterReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", char.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningCharacterReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set('c'); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            char c = (char) vh.get(); +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            int i = (int) vh.get(); +            long j = (long) vh.get(); +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } +    } + +    public static class WideningShortReturnValueTest extends VarHandleUnitTest { +        private static short v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningShortReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", short.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningShortReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set((short) 8888); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            short s = (short) vh.get(); +            int i = (int) vh.get(); +            long j = (long) vh.get(); +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } +    } + +    public static class WideningIntegerReturnValueTest extends VarHandleUnitTest { +        private static int v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningIntegerReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", int.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningIntegerReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set(0x1234fedc); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            int i = (int) vh.get(); +            long j = (long) vh.get(); +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } +    } + +    public static class WideningLongReturnValueTest extends VarHandleUnitTest { +        private static long v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningLongReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", long.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningLongReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set(0xfedcba987654321l); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                int i = (int) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            long j = (long) vh.get(); +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } +    } + +    public static class WideningFloatReturnValueTest extends VarHandleUnitTest { +        private static float v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningFloatReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", float.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningFloatReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set(7.77e20f); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                int i = (int) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                long j = (long) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            float f = (float) vh.get(); +            double d = (double) vh.get(); +        } +    } + +    public static class WideningDoubleReturnValueTest extends VarHandleUnitTest { +        private static double v; +        private static final VarHandle vh; + +        static { +            try { +                Class<?> cls = WideningDoubleReturnValueTest.class; +                vh = MethodHandles.lookup().findStaticVarHandle(cls, "v", double.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new WideningDoubleReturnValueTest().run(); +        } + +        @Override +        protected void doTest() { +            vh.set(Math.E); +            vh.get(); +            try { +                boolean z = (boolean) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                byte b = (byte) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                char c = (char) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                short s = (short) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                int i = (int) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                long j = (long) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            try { +                float f = (float) vh.get(); +                failUnreachable(); +            } catch (WrongMethodTypeException ex) { +            } +            double d = (double) vh.get(); +        } +    } + +    public static class SubtypeTest extends VarHandleUnitTest { +        private static final Widget INITIAL_VALUE = Widget.ONE; +        private static final VarHandle vh; +        private Widget w = INITIAL_VALUE; + +        static { +            try { +                vh = MethodHandles.lookup().findVarHandle(SubtypeTest.class, "w", Widget.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new SubtypeTest().run(); +        } + +        // A sub-type of the Widget class +        public static class WidgetChild extends Widget { +            private int weight; + +            public WidgetChild(int requistionNumber, int weight) { +                super(requistionNumber); +                this.weight = weight; +            } + +            @Override +            public boolean equals(Object o) { +                if (this == o) { +                    return true; +                } +                if (o instanceof WidgetChild == false) { +                    return false; +                } +                WidgetChild wc = (WidgetChild) o; +                return (requisitionNumber == wc.requisitionNumber && weight == wc.weight); +            } + +            public static final WidgetChild ONE = new WidgetChild(1, 100); +            public static final WidgetChild TWO = new WidgetChild(2, 2000); +        } + +        @Override +        public void doTest() { +            assertEquals(INITIAL_VALUE, vh.getVolatile(this)); +            vh.setVolatile(this, null); +            Widget rw = (Widget) vh.compareAndExchange(this, null, WidgetChild.ONE); +            assertEquals(null, rw); +            assertEquals(WidgetChild.ONE, this.w); +            WidgetChild rwc = +                    (WidgetChild) +                            vh.compareAndExchangeRelease(this, WidgetChild.ONE, WidgetChild.TWO); +            assertEquals(WidgetChild.TWO, w); +            rwc = (WidgetChild) vh.compareAndExchangeAcquire(this, WidgetChild.TWO, Widget.ONE); +            assertEquals(Widget.ONE, w); +            assertEquals(false, (boolean) vh.compareAndSet(this, null, null)); +            assertEquals(true, vh.compareAndSet(this, Widget.ONE, Widget.TWO)); +            assertEquals(Widget.TWO, w); +            vh.set(this, null); +            assertEquals(null, (Widget) vh.get(this)); +            vh.setRelease(this, WidgetChild.ONE); +            assertEquals(WidgetChild.ONE, (WidgetChild) vh.getAcquire(this)); +            assertEquals(WidgetChild.ONE, w); +            vh.setOpaque(this, WidgetChild.TWO); +            assertEquals(WidgetChild.TWO, vh.getOpaque(this)); +            assertEquals(WidgetChild.TWO, w); +            vh.setVolatile(this, null); +            assertEquals(null, (Widget) vh.getVolatile(this)); +            assertEquals(null, w); +            assertEquals(null, (WidgetChild) vh.getAndSet(this, WidgetChild.ONE)); +            assertEquals(WidgetChild.ONE, w); +            assertEquals(WidgetChild.ONE, (WidgetChild) vh.getAndSetRelease(this, WidgetChild.TWO)); +            assertEquals(WidgetChild.TWO, (WidgetChild) vh.getAndSetAcquire(this, WidgetChild.ONE)); +            try { +                WidgetChild result = (WidgetChild) vh.getAndAdd(this, WidgetChild.ONE); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndAddAcquire(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndAddRelease(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseAnd(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseAndAcquire(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseAndRelease(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseOr(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseOrAcquire(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseOrRelease(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseXor(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseXorAcquire(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +            try { +                WidgetChild result = (WidgetChild) vh.getAndBitwiseXorRelease(this, 1); +                failUnreachable(); +            } catch (UnsupportedOperationException e) { +            } +        } +    } + +    public static class SupertypeTest extends VarHandleUnitTest { +        private Widget w = null; +        private static final VarHandle vh; + +        static { +            try { +                vh = MethodHandles.lookup().findVarHandle(SupertypeTest.class, "w", Widget.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new SupertypeTest().run(); +        } + +        @Override +        public void doTest() { +            assertEquals(null, (Object) vh.get(this)); +            vh.set(this, Widget.ONE); +            assertEquals(Widget.ONE, vh.getVolatile(this)); +            try { +                vh.setVolatile(this, new Object()); +            } catch (ClassCastException e) { +            } +        } +    } + +    public static class ImplicitBoxingIntegerTest extends VarHandleUnitTest { +        private static Integer field; +        private static final VarHandle vh; + +        static { +            try { +                vh = +                        MethodHandles.lookup() +                                .findStaticVarHandle( +                                        ImplicitBoxingIntegerTest.class, "field", Integer.class); +            } catch (Exception e) { +                throw new RuntimeException(e); +            } +        } + +        public static void main(String[] args) { +            new ImplicitBoxingIntegerTest().run(); +        } + +        @Override +        public void doTest() { +            try { +                vh.set(true); +                failUnreachable(); +            } catch (WrongMethodTypeException e) { +            } +            try { +                vh.set((byte) 0); +                failUnreachable(); +            } catch (WrongMethodTypeException e) { +            } +            try { +                vh.set((short) 1); +                failUnreachable(); +            } catch (WrongMethodTypeException e) { +            } +            try { +                vh.set('A'); +                failUnreachable(); +            } catch (WrongMethodTypeException e) { +            } +            vh.set(2); +            try { +                vh.setRelease(Long.MAX_VALUE); +            } catch (WrongMethodTypeException e) { +            } +            try { +                vh.setRelease(Float.MAX_VALUE); +            } catch (WrongMethodTypeException e) { +            } +            try { +                vh.setRelease(Double.MAX_VALUE); +            } catch (WrongMethodTypeException e) { +            } +            vh.set(null); +            vh.set(Integer.valueOf(Integer.MAX_VALUE)); +        } +    } + +    public static void main(String[] args) { +        VoidReturnTypeTest.main(args); + +        BoxedNullBooleanThrowsNPETest.main(args); +        BoxedNullByteThrowsNPETest.main(args); +        BoxedNullCharacterThrowsNPETest.main(args); +        BoxedNullShortThrowsNPETest.main(args); +        BoxedNullIntegerThrowsNPETest.main(args); +        BoxedNullLongThrowsNPETest.main(args); +        BoxedNullFloatThrowsNPETest.main(args); +        BoxedNullDoubleThrowsNPETest.main(args); + +        WideningBooleanArgumentTest.main(args); +        WideningByteArgumentTest.main(args); +        WideningCharacterArgumentTest.main(args); +        WideningShortArgumentTest.main(args); +        WideningIntegerArgumentTest.main(args); +        WideningLongArgumentTest.main(args); +        WideningFloatArgumentTest.main(args); +        WideningDoubleArgumentTest.main(args); + +        WideningBooleanReturnValueTest.main(args); +        WideningByteReturnValueTest.main(args); +        WideningCharacterReturnValueTest.main(args); +        WideningShortReturnValueTest.main(args); +        WideningIntegerReturnValueTest.main(args); +        WideningLongReturnValueTest.main(args); +        WideningFloatReturnValueTest.main(args); +        WideningDoubleReturnValueTest.main(args); + +        SubtypeTest.main(args); +        SupertypeTest.main(args); + +        ImplicitBoxingIntegerTest.main(args); +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleUnitTest.java b/test/712-varhandle-invocations/src/VarHandleUnitTest.java new file mode 100644 index 0000000000..601d470950 --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleUnitTest.java @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Base class for VarHandle unit tests for accessor operations +public abstract class VarHandleUnitTest { +    public static VarHandleUnitTestCollector DEFAULT_COLLECTOR = new VarHandleUnitTestCollector(); + +    // Error log (lazily initialized on failure). +    private StringBuilder lazyErrorLog = null; + +    // Tracker of test events (starts, skips, ends) +    private final VarHandleUnitTestCollector collector; + +    public VarHandleUnitTest(VarHandleUnitTestCollector collector) { +        this.collector = collector; +    } + +    public VarHandleUnitTest() { +        this.collector = DEFAULT_COLLECTOR; +    } + +    // Method that can be overloaded to signify that a test should be +    // run or skipped. Returns true if the test should be run and +    // false if the test should be skipped. +    public boolean checkGuard() { +        return true; +    } + +    // Method that implementations should use to perform a specific test. +    protected abstract void doTest() throws Exception; + +    public final void assertTrue(boolean value) { +        assertEquals(true, value); +    } + +    public final void assertFalse(boolean value) { +        assertEquals(false, value); +    } + +    public final void assertEquals(boolean expected, boolean actual) { +        assertEquals(Boolean.valueOf(expected), Boolean.valueOf(actual)); +    } + +    public final void assertEquals(byte expected, byte actual) { +        assertEquals(Byte.valueOf(expected), Byte.valueOf(actual)); +    } + +    public final void assertEquals(char expected, char actual) { +        assertEquals(Character.valueOf(expected), Character.valueOf(actual)); +    } + +    public final void assertEquals(short expected, short actual) { +        assertEquals(Short.valueOf(expected), Short.valueOf(actual)); +    } + +    public final void assertEquals(int expected, int actual) { +        assertEquals(Integer.valueOf(expected), Integer.valueOf(actual)); +    } + +    public final void assertEquals(long expected, long actual) { +        assertEquals(Long.valueOf(expected), Long.valueOf(actual)); +    } + +    public final void assertEquals(float expected, float actual) { +        assertEquals(Float.valueOf(expected), Float.valueOf(actual)); +    } + +    public final void assertEquals(double expected, double actual) { +        assertEquals(Double.valueOf(expected), Double.valueOf(actual)); +    } + +    public final void assertEquals(Object expected, Object actual) { +        if (expected == null) { +            if (actual == null) { +                return; +            } +        } else if (expected.equals(actual)) { +            return; +        } +        failNotEquals("Failed assertion (expected != actual)", expected, actual); +    } + +    public final void failUnreachable() { +        fail("Unreachable code"); +    } + +    public final void run() { +        collector.start(getClass().getSimpleName()); +        if (!checkGuard()) { +            collector.skip(); +            return; +        } + +        try { +            doTest(); +        } catch (Exception e) { +            fail("Unexpected exception", e); +        } finally { +            if (lazyErrorLog == null) { +                collector.success(); +            } else { +                collector.fail(lazyErrorLog.toString()); +            } +        } +    } + +    private void failNotEquals(String message, Object expected, Object actual) { +        errorLog() +                .append(message) +                .append(": ") +                .append(expected) +                .append(" != ") +                .append(actual) +                .append(" in ") +                .append(getSourceInfo()) +                .append('\n'); +    } + +    private void fail(String message) { +        errorLog().append(message).append(" in ").append(getSourceInfo()).append('\n'); +    } + +    private void fail(String message, String detail) { +        errorLog() +                .append(message) +                .append(": ") +                .append(detail) +                .append(" in ") +                .append(getSourceInfo()) +                .append('\n'); +    } + +    private void fail(String message, Exception e) { +        errorLog() +                .append(message) +                .append(": ") +                .append(e.toString()) +                .append(" in ") +                .append(getSourceInfo(e)) +                .append('\n'); +    } + +    private String getSourceInfo(Exception e) { +        // Unit test has thrown an exception. Stack likely looks like +        // runtime frames then unit test frames then +        // VarHandleUnitFrames. +        StackTraceElement[] stackTraceElements = e.getStackTrace(); +        int index = 1; +        for (int i = 1; i < stackTraceElements.length; ++i) { +            if ("VarHandleUnitTest".equals(stackTraceElements[i].getClassName())) { +                return stackTraceElements[i - 1].toString(); +            } +        } +        return "Unknown"; +    } + +    private String getSourceInfo() { +        // Gets source info for a failure such as an assertion. The +        // test has called a method on VarHandleUnitTest so the stack +        // looks like some frames in VarHandleUnitTest methods and then +        // a frame in the test itself. +        StackTraceElement[] stackTraceElements = new Exception().getStackTrace(); +        for (StackTraceElement stackTraceElement : stackTraceElements) { +            if (!"VarHandleUnitTest".equals(stackTraceElement.getClassName())) { +                return stackTraceElement.toString(); +            } +        } +        return "Unknown"; +    } + +    private StringBuilder errorLog() { +        if (lazyErrorLog == null) { +            lazyErrorLog = new StringBuilder(); +        } +        return lazyErrorLog; +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleUnitTestCollector.java b/test/712-varhandle-invocations/src/VarHandleUnitTestCollector.java new file mode 100644 index 0000000000..bc64c0c8b1 --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleUnitTestCollector.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.PrintStream; + +// Results collector for VarHandle Unit tests +public final class VarHandleUnitTestCollector { +    private final PrintStream out = System.out; + +    private int numberOfSuccesses; +    private int numberOfSkips; +    private int numberOfFailures; + +    public void start(String testName) { +        out.print(testName); +        out.print("..."); +    } + +    public void skip() { +        numberOfSkips += 1; +        out.println("SKIP"); +    } + +    public void success() { +        numberOfSuccesses += 1; +        out.println("OK"); +    } + +    public void fail(String errorMessage) { +        numberOfFailures += 1; +        out.println("FAIL"); +        out.print(errorMessage); +    } + +    public void printSummary() { +        out.append(Integer.toString(numberOfSuccesses)) +                .append(" successes, ") +                .append(Integer.toString(numberOfSkips)) +                .append(" skips, ") +                .append(Integer.toString(numberOfFailures)) +                .append(" failures."); +        out.println(); +    } + +    boolean failuresOccurred() { +        return numberOfFailures != 0; +    } +} diff --git a/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java b/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java new file mode 100644 index 0000000000..6f72e9962f --- /dev/null +++ b/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.VarHandle; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class VarHandleUnitTestHelpers { +    public static boolean isRunningOnAndroid() { +        return System.getProperty("java.vm.vendor").contains("Android"); +    } + +    public static boolean is64Bit() { +        // The behaviour of certain accessors depends on the ISA word size. +        if (isRunningOnAndroid()) { +            try { +                Class<?> runtimeClass = Class.forName("dalvik.system.VMRuntime"); +                MethodHandle getRuntimeMH = +                        MethodHandles.lookup() +                                .findStatic( +                                        runtimeClass, +                                        "getRuntime", +                                        MethodType.methodType(runtimeClass)); +                Object runtime = getRuntimeMH.invoke(); +                MethodHandle is64BitMH = +                        MethodHandles.lookup() +                                .findVirtual( +                                        runtimeClass, +                                        "is64Bit", +                                        MethodType.methodType(boolean.class)); +                return (boolean) is64BitMH.invoke(runtime); +            } catch (Throwable t) { +                throw new RuntimeException(t); +            } +        } else { +            return System.getProperty("sun.arch.data.model").equals("64"); +        } +    } + +    public static boolean getBytesAs_boolean(byte[] array, int index, ByteOrder order) { +        return getBytesAs_boolean(ByteBuffer.wrap(array), index, order); +    } + +    public static byte getBytesAs_byte(byte[] array, int index, ByteOrder order) { +        return getBytesAs_byte(ByteBuffer.wrap(array), index, order); +    } + +    public static char getBytesAs_char(byte[] array, int index, ByteOrder order) { +        return getBytesAs_char(ByteBuffer.wrap(array), index, order); +    } + +    public static short getBytesAs_short(byte[] array, int index, ByteOrder order) { +        return getBytesAs_short(ByteBuffer.wrap(array), index, order); +    } + +    public static int getBytesAs_int(byte[] array, int index, ByteOrder order) { +        return getBytesAs_int(ByteBuffer.wrap(array), index, order); +    } + +    public static long getBytesAs_long(byte[] array, int index, ByteOrder order) { +        return getBytesAs_long(ByteBuffer.wrap(array), index, order); +    } + +    public static float getBytesAs_float(byte[] array, int index, ByteOrder order) { +        return getBytesAs_float(ByteBuffer.wrap(array), index, order); +    } + +    public static double getBytesAs_double(byte[] array, int index, ByteOrder order) { +        return getBytesAs_double(ByteBuffer.wrap(array), index, order); +    } + +    public static boolean getBytesAs_boolean(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).get(index) != 0; +    } + +    public static byte getBytesAs_byte(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).get(index); +    } + +    public static char getBytesAs_char(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getChar(index); +    } + +    public static short getBytesAs_short(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getShort(index); +    } + +    public static int getBytesAs_int(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getInt(index); +    } + +    public static long getBytesAs_long(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getLong(index); +    } + +    public static float getBytesAs_float(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getFloat(index); +    } + +    public static double getBytesAs_double(ByteBuffer buffer, int index, ByteOrder order) { +        return buffer.order(order).getDouble(index); +    } + +    public static void setBytesAs_boolean(byte[] array, int index, boolean value, ByteOrder order) { +        setBytesAs_boolean(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_byte(byte[] array, int index, byte value, ByteOrder order) { +        setBytesAs_byte(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_char(byte[] array, int index, char value, ByteOrder order) { +        setBytesAs_char(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_short(byte[] array, int index, short value, ByteOrder order) { +        setBytesAs_short(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_int(byte[] array, int index, int value, ByteOrder order) { +        setBytesAs_int(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_long(byte[] array, int index, long value, ByteOrder order) { +        setBytesAs_long(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_float(byte[] array, int index, float value, ByteOrder order) { +        setBytesAs_float(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_double(byte[] array, int index, double value, ByteOrder order) { +        setBytesAs_double(ByteBuffer.wrap(array), index, value, order); +    } + +    public static void setBytesAs_boolean( +            ByteBuffer buffer, int index, boolean value, ByteOrder order) { +        buffer.order(order).put(index, value ? (byte) 1 : (byte) 0); +    } + +    public static void setBytesAs_byte(ByteBuffer buffer, int index, byte value, ByteOrder order) { +        buffer.order(order).put(index, value); +    } + +    public static void setBytesAs_char(ByteBuffer buffer, int index, char value, ByteOrder order) { +        buffer.order(order).putChar(index, value); +    } + +    public static void setBytesAs_short( +            ByteBuffer buffer, int index, short value, ByteOrder order) { +        buffer.order(order).putShort(index, value); +    } + +    public static void setBytesAs_int(ByteBuffer buffer, int index, int value, ByteOrder order) { +        buffer.order(order).putInt(index, value); +    } + +    public static void setBytesAs_long(ByteBuffer buffer, int index, long value, ByteOrder order) { +        buffer.order(order).putLong(index, value); +    } + +    public static void setBytesAs_float( +            ByteBuffer buffer, int index, float value, ByteOrder order) { +        buffer.order(order).putFloat(index, value); +    } + +    public static void setBytesAs_double( +            ByteBuffer buffer, int index, double value, ByteOrder order) { +        buffer.order(order).putDouble(index, value); +    } + +    // Until ART is running on an OpenJDK9 based runtime, there are no +    // calls to help with alignment. OpenJDK9 introduces +    // ByteBuffer.alignedSlice() and ByteBuffer.alignmentOffset(). RI +    // and ART have different data structure alignments which may make +    // porting code interesting. + +    public static int alignedOffset_char(ByteBuffer buffer, int start) { +        return alignedOffset_short(buffer, start); +    } + +    public static int alignedOffset_short(ByteBuffer buffer, int start) { +        for (int i = 0; i < Short.SIZE; ++i) { +            try { +                vh_probe_short.getVolatile(buffer, start + i); +                return start + i; +            } catch (IllegalStateException e) { +                // Unaligned access. +            } +        } +        return start; +    } + +    public static int alignedOffset_int(ByteBuffer buffer, int start) { +        for (int i = 0; i < Integer.SIZE; ++i) { +            try { +                vh_probe_int.getVolatile(buffer, start + i); +                return start + i; +            } catch (IllegalStateException e) { +                // Unaligned access. +            } catch (Exception e) { +                break; +            } +        } +        return start; +    } + +    public static int alignedOffset_long(ByteBuffer buffer, int start) { +        for (int i = 0; i < Long.SIZE; ++i) { +            try { +                vh_probe_long.getVolatile(buffer, start + i); +                return start + i; +            } catch (IllegalStateException e) { +                // Unaligned access. +            } catch (UnsupportedOperationException e) { +                // 64-bit operation is not supported irrespective of alignment. +                break; +            } +        } +        return start; +    } + +    public static int alignedOffset_float(ByteBuffer buffer, int start) { +        return alignedOffset_int(buffer, start); +    } + +    public static int alignedOffset_double(ByteBuffer buffer, int start) { +        return alignedOffset_long(buffer, start); +    } + +    public static int alignedOffset_char(byte[] array, int start) { +        return alignedOffset_char(ByteBuffer.wrap(array), start); +    } + +    public static int alignedOffset_short(byte[] array, int start) { +        return alignedOffset_short(ByteBuffer.wrap(array), start); +    } + +    public static int alignedOffset_int(byte[] array, int start) { +        return alignedOffset_int(ByteBuffer.wrap(array), start); +    } + +    public static int alignedOffset_long(byte[] array, int start) { +        return alignedOffset_long(ByteBuffer.wrap(array), start); +    } + +    public static int alignedOffset_float(byte[] array, int start) { +        return alignedOffset_float(ByteBuffer.wrap(array), start); +    } + +    public static int alignedOffset_double(byte[] array, int start) { +        return alignedOffset_double(ByteBuffer.wrap(array), start); +    } + +    static { +        ByteOrder order = ByteOrder.LITTLE_ENDIAN; +        vh_probe_short = MethodHandles.byteBufferViewVarHandle(short[].class, order); +        vh_probe_int = MethodHandles.byteBufferViewVarHandle(int[].class, order); +        vh_probe_long = MethodHandles.byteBufferViewVarHandle(long[].class, order); +    } + +    private static final VarHandle vh_probe_short; +    private static final VarHandle vh_probe_int; +    private static final VarHandle vh_probe_long; +} diff --git a/test/712-varhandle-invocations/src/Widget.java b/test/712-varhandle-invocations/src/Widget.java new file mode 100644 index 0000000000..0282ff8d64 --- /dev/null +++ b/test/712-varhandle-invocations/src/Widget.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Widget class for reference type accessor tests. +public class Widget { +    protected int requisitionNumber; + +    public Widget(int requisitionNumber) { +        this.requisitionNumber = requisitionNumber; +    } + +    @Override +    public boolean equals(Object o) { +        if (this == o) { +            return true; +        } +        if (!(o instanceof Widget)) { +            return false; +        } +        Widget wo = (Widget) o; +        return requisitionNumber == wo.requisitionNumber; +    } + +    public static final Widget ONE = new Widget(1); +    public static final Widget TWO = new Widget(2); +} diff --git a/test/712-varhandle-invocations/util-src/generate_java.py b/test/712-varhandle-invocations/util-src/generate_java.py new file mode 100644 index 0000000000..9520b53844 --- /dev/null +++ b/test/712-varhandle-invocations/util-src/generate_java.py @@ -0,0 +1,876 @@ +#!/usr/bin/python3 +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#     http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Generate java test files for 712-varhandle-invocations +""" + +from enum import Enum +from pathlib import Path +from random import Random +from string import Template + +import io +import re +import sys + +class JavaType(object): +    def __init__(self, name, examples, supports_bitwise=False, supports_numeric=False): +        self.name=name +        self.examples=examples +        self.supports_bitwise=supports_bitwise +        self.supports_numeric=supports_numeric + +    def is_value_type(self): +        return False + +    def __repr__(self): +        return self.name + +    def __str__(self): +        return self.name + +class ValueType(JavaType): +    def __init__(self, name, boxed_type, examples, ordinal=-1, width=-1, supports_bitwise=True, supports_numeric=True): +        JavaType.__init__(self, name, examples, supports_bitwise, supports_numeric) +        self.ordinal=ordinal +        self.width=width +        self.boxed_type=boxed_type + +    def boxing_method(self): +        return self.boxed_type + ".valueOf" + +    def unboxing_method(self): +        return self.name + "Value" + +    def is_value_type(self): +        return True + +    def __eq__(self, other): +        return self.ordinal == other.ordinal + +    def __hash__(self): +        return self.ordinal + +    def __le__(self, other): +        return self.ordinal < other.ordinal + +    def __repr__(self): +        return self.name + +    def __str__(self): +        return self.name + +BOOLEAN_TYPE = ValueType("boolean", "Boolean", [ "true", "false" ], ordinal = 0, width = 1, supports_numeric=False) +BYTE_TYPE=ValueType("byte", "Byte", [ "(byte) -128", "(byte) -61", "(byte) 7", "(byte) 127", "(byte) 33" ], ordinal=1, width=1) +SHORT_TYPE=ValueType("short", "Short", [ "(short) -32768", "(short) -384", "(short) 32767", "(short) 0xaa55" ], ordinal=2, width=2) +CHAR_TYPE=ValueType("char", "Character", [ r"'A'", r"'#'", r"'$'", r"'Z'", r"'t'", r"'c'" ], ordinal=3, width=2) +INT_TYPE=ValueType("int", "Integer", [ "-0x01234567", "0x7f6e5d4c", "0x12345678", "0x10215220", "42" ], ordinal=4, width=4) +LONG_TYPE=ValueType("long", "Long", [ "-0x0123456789abcdefl", "0x789abcdef0123456l", "0xfedcba9876543210l" ], ordinal=5, width=8) +FLOAT_TYPE=ValueType("float", "Float", [ "-7.77e23f", "1.234e-17f", "3.40e36f", "-8.888e3f", "4.442e11f" ], ordinal=6, width=4, supports_bitwise=False) +DOUBLE_TYPE=ValueType("double", "Double", [ "-1.0e-200", "1.11e200", "3.141", "1.1111", "6.022e23", "6.626e-34" ], ordinal=7, width=4, supports_bitwise=False) + +VALUE_TYPES = { BOOLEAN_TYPE, BYTE_TYPE, SHORT_TYPE, CHAR_TYPE, INT_TYPE, LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE } + +WIDENING_CONVERSIONS = { +    BOOLEAN_TYPE : set(), +    BYTE_TYPE : { SHORT_TYPE, INT_TYPE, LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE }, +    SHORT_TYPE : { INT_TYPE, LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE }, +    CHAR_TYPE : { INT_TYPE, LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE }, +    INT_TYPE : { LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE }, +    LONG_TYPE : { FLOAT_TYPE, DOUBLE_TYPE }, +    FLOAT_TYPE : { DOUBLE_TYPE }, +    DOUBLE_TYPE : set() +} + +def types_that_widen_to(var_type): +    types_that_widen = { var_type } +    for src_type in WIDENING_CONVERSIONS: +        if var_type in WIDENING_CONVERSIONS[src_type]: +            types_that_widen.add(src_type) +    return types_that_widen + +class VarHandleKind(object): +    ALL_SUPPORTED_TYPES = VALUE_TYPES +    VIEW_SUPPORTED_TYPES = list(filter(lambda x : x.width >= 2, ALL_SUPPORTED_TYPES)) + +    def __init__(self, name, imports=[], declarations=[], lookup='', coordinates=[], get_value='', may_throw_read_only=False): +        self.name = name +        self.imports = imports +        self.declarations = declarations +        self.lookup = lookup +        self.coordinates = coordinates +        self.get_value_ = get_value +        self.may_throw_read_only = may_throw_read_only + +    def get_name(self): +        return self.name + +    def get_coordinates(self): +        return self.coordinates + +    def get_field_declarations(self, dictionary): +        return list(map(lambda d: Template(d).safe_substitute(dictionary), self.declarations)) + +    def get_imports(self): +        return self.imports + +    def get_lookup(self, dictionary): +        return Template(self.lookup).safe_substitute(dictionary) + +    def get_supported_types(self): +        return VarHandleKind.VIEW_SUPPORTED_TYPES if self.is_view() else VarHandleKind.ALL_SUPPORTED_TYPES + +    def is_view(self): +        return "View" in self.name + +    def get_value(self, dictionary): +        return Template(self.get_value_).safe_substitute(dictionary) + +FIELD_VAR_HANDLE = VarHandleKind("Field", +                                 [ +                                     'java.lang.invoke.MethodHandles', +                                     'java.lang.invoke.VarHandle' +                                 ], +                                 [ +                                     "${var_type} field = ${initial_value}" +                                 ], +                                 'MethodHandles.lookup().findVarHandle(${test_class}.class, "field", ${var_type}.class)', +                                 [ +                                     'this' +                                 ], +                                 'field', +                                 may_throw_read_only = False) + +FINAL_FIELD_VAR_HANDLE = VarHandleKind("FinalField", +                                       [ +                                           'java.lang.invoke.MethodHandles', +                                           'java.lang.invoke.VarHandle' +                                       ], +                                       [ +                                           "${var_type} field = ${initial_value}" +                                       ], +                                       'MethodHandles.lookup().findVarHandle(${test_class}.class, "field", ${var_type}.class)', +                                       [ +                                           'this' +                                       ], +                                       'field', +                                       may_throw_read_only = False) + +STATIC_FIELD_VAR_HANDLE = VarHandleKind("StaticField", +                                        [ +                                            'java.lang.invoke.MethodHandles', +                                            'java.lang.invoke.VarHandle' +                                        ], +                                        [ +                                            "static ${var_type} field = ${initial_value}" +                                        ], +                                        'MethodHandles.lookup().findStaticVarHandle(${test_class}.class, "field", ${var_type}.class)', +                                        [], +                                        'field', +                                        may_throw_read_only = False) + +STATIC_FINAL_FIELD_VAR_HANDLE = VarHandleKind("StaticFinalField", +                                              [ +                                                  'java.lang.invoke.MethodHandles', +                                                  'java.lang.invoke.VarHandle' +                                              ], +                                              [ +                                                  "static ${var_type} field = ${initial_value}" +                                              ], +                                              'MethodHandles.lookup().findStaticVarHandle(${test_class}.class, "field", ${var_type}.class)', +                                              [], +                                              'field', +                                              may_throw_read_only = False) + +ARRAY_ELEMENT_VAR_HANDLE = VarHandleKind("ArrayElement", +                                         [ +                                             'java.lang.invoke.MethodHandles', +                                             'java.lang.invoke.VarHandle' +                                         ], +                                         [ +                                             "${var_type}[] array = new ${var_type}[11]", +                                             "int index = 3", +                                             "{ array[index] = ${initial_value}; }" +                                         ], +                                         'MethodHandles.arrayElementVarHandle(${var_type}[].class)', +                                         [ 'array', 'index'], +                                         'array[index]', +                                         may_throw_read_only = False) + +BYTE_ARRAY_LE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewLE", +                                              [ +                                                  'java.lang.invoke.MethodHandles', +                                                  'java.lang.invoke.VarHandle', +                                                  'java.nio.ByteOrder' +                                              ], +                                              [ +                                                  "byte[] array = new byte[27]", +                                                  "int index = 8", +                                                  "{" +                                                  "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" +                                                  "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" +                                                  "}" +                                              ], +                                              'MethodHandles.byteArrayViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', +                                              [ +                                                  'array', +                                                  'index' +                                              ], +                                              'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.LITTLE_ENDIAN)', +                                              may_throw_read_only = False) + +BYTE_ARRAY_BE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewBE", +                                              [ +                                                  'java.lang.invoke.MethodHandles', +                                                  'java.lang.invoke.VarHandle', +                                                  'java.nio.ByteOrder' +                                              ], +                                              [ +                                                  "byte[] array = new byte[27]", +                                                  "int index = 8", +                                                  "{" +                                                  "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" +                                                  "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" +                                                  "}" +                                              ], +                                              'MethodHandles.byteArrayViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', +                                              [ +                                                  'array', +                                                  'index' +                                              ], +                                              'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.BIG_ENDIAN)', +                                              may_throw_read_only = False) + +DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewLE", +                                                      [ +                                                          'java.lang.invoke.MethodHandles', +                                                          'java.lang.invoke.VarHandle', +                                                          'java.nio.ByteBuffer', +                                                          'java.nio.ByteOrder' +                                                      ], +                                                      [ +                                                          "ByteBuffer bb = ByteBuffer.allocateDirect(31)", +                                                          "int index = 8", +                                                          "{" +                                                          "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" +                                                          "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" +                                                          "}" +                                                      ], +                                                      'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', +                                                      [ +                                                          'bb', +                                                          'index' +                                                      ], +                                                      'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', +                                                      may_throw_read_only = False) + +DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewBE", +                                                      [ +                                                          'java.lang.invoke.MethodHandles', +                                                          'java.lang.invoke.VarHandle', +                                                          'java.nio.ByteBuffer', +                                                          'java.nio.ByteOrder' +                                                      ], +                                                      [ +                                                          "ByteBuffer bb = ByteBuffer.allocateDirect(31)", +                                                          "int index = 8", +                                                          "{" +                                                          "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" +                                                          "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" +                                                          "}" +                                                      ], +                                                      'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', +                                                      [ +                                                          'bb', +                                                          'index' +                                                      ], +                                                      'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', +                                                      may_throw_read_only = False) + +HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewLE", +                                                    [ +                                                        'java.lang.invoke.MethodHandles', +                                                        'java.lang.invoke.VarHandle', +                                                        'java.nio.ByteBuffer', +                                                        'java.nio.ByteOrder' +                                                    ], +                                                    [ +                                                        "byte[] array = new byte[36]", +                                                        "int offset = 8", +                                                        "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", +                                                        "int index = 8", +                                                        "{" +                                                        "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" +                                                        "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" +                                                        "}" +                                                    ], +                                                    'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', +                                                    [ +                                                        'bb', +                                                        'index' +                                                    ], +                                                    'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', +                                                    may_throw_read_only = False) + +HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewBE", +                                                    [ +                                                        'java.lang.invoke.MethodHandles', +                                                        'java.lang.invoke.VarHandle', +                                                        'java.nio.ByteBuffer', +                                                        'java.nio.ByteOrder' +                                                    ], +                                                    [ +                                                        "byte[] array = new byte[47]", +                                                        "int offset = 8", +                                                        "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", +                                                        "int index = 8", +                                                        "{" +                                                        "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" +                                                        "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" +                                                        "}" +                                                    ], +                                                    'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', +                                                    [ +                                                        'bb', +                                                        'index' +                                                    ], +                                                    'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', +                                                    may_throw_read_only = False) + +HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyViewLE", +                                                       [ +                                                           'java.lang.invoke.MethodHandles', +                                                           'java.lang.invoke.VarHandle', +                                                           'java.nio.ByteBuffer', +                                                           'java.nio.ByteOrder', +                                                           'java.nio.ReadOnlyBufferException' +                                                       ], +                                                       [ +                                                           "byte[] array = new byte[43]", +                                                           "int index = 8", +                                                           "ByteBuffer bb", +                                                           "{" +                                                           "  bb = ByteBuffer.wrap(array).asReadOnlyBuffer();" +                                                           "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" +                                                           "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" +                                                           "  bb = bb.asReadOnlyBuffer();" + +                                                           "}" +                                                       ], +                                                       'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', +                                                       [ +                                                           'bb', +                                                           'index' +                                                       ], +                                                       'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', +                                                       may_throw_read_only = True) + +HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyViewBE", +                                                       [ +                                                           'java.lang.invoke.MethodHandles', +                                                           'java.lang.invoke.VarHandle', +                                                           'java.nio.ByteBuffer', +                                                           'java.nio.ByteOrder', +                                                           'java.nio.ReadOnlyBufferException' +                                                       ], +                                                       [ +                                                           "byte[] array = new byte[29]", +                                                           "int index", +                                                           "ByteBuffer bb", +                                                           "{" +                                                           "  bb = ByteBuffer.wrap(array);" +                                                           "  index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, 8);" +                                                           "  VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" +                                                           "  bb = bb.asReadOnlyBuffer();" +                                                           "}" +                                                       ], +                                                       'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', +                                                       [ +                                                           'bb', +                                                           'index' +                                                       ], +                                                       'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', +                                                       may_throw_read_only = True) + +ALL_FIELD_VAR_HANDLE_KINDS = [ +    FIELD_VAR_HANDLE, +    FINAL_FIELD_VAR_HANDLE, +    STATIC_FIELD_VAR_HANDLE, +    STATIC_FINAL_FIELD_VAR_HANDLE +] + +ALL_BYTE_VIEW_VAR_HANDLE_KINDS = [ +    BYTE_ARRAY_LE_VIEW_VAR_HANDLE, +    BYTE_ARRAY_BE_VIEW_VAR_HANDLE, +    DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, +    DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, +    HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, +    HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, +    HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE, +    HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE +] + +ALL_VAR_HANDLE_KINDS = ALL_FIELD_VAR_HANDLE_KINDS + [ ARRAY_ELEMENT_VAR_HANDLE ] + ALL_BYTE_VIEW_VAR_HANDLE_KINDS + +class AccessModeForm(Enum): +    GET = 0 +    SET = 1 +    STRONG_COMPARE_AND_SET = 2 +    WEAK_COMPARE_AND_SET = 3 +    COMPARE_AND_EXCHANGE = 4 +    GET_AND_SET = 5 +    GET_AND_UPDATE_BITWISE = 6 +    GET_AND_UPDATE_NUMERIC = 7 + +class VarHandleAccessor: +    def __init__(self, method_name): +        self.method_name = method_name +        self.access_mode = self.get_access_mode(method_name) +        self.access_mode_form = self.get_access_mode_form(method_name) + +    def get_return_type(self, var_type): +        if self.access_mode_form == AccessModeForm.SET: +            return None +        elif (self.access_mode_form == AccessModeForm.STRONG_COMPARE_AND_SET or +              self.access_mode_form == AccessModeForm.WEAK_COMPARE_AND_SET): +            return BOOLEAN_TYPE +        else: +            return var_type + +    def get_number_of_var_type_arguments(self): +        if self.access_mode_form == AccessModeForm.GET: +            return 0 +        elif (self.access_mode_form == AccessModeForm.SET or +              self.access_mode_form == AccessModeForm.GET_AND_SET or +              self.access_mode_form == AccessModeForm.GET_AND_UPDATE_BITWISE or +              self.access_mode_form == AccessModeForm.GET_AND_UPDATE_NUMERIC): +            return 1 +        elif (self.access_mode_form == AccessModeForm.STRONG_COMPARE_AND_SET or +              self.access_mode_form == AccessModeForm.WEAK_COMPARE_AND_SET or +              self.access_mode_form == AccessModeForm.COMPARE_AND_EXCHANGE): +            return 2 +        else: +            raise ValueError(self.access_mode_form) + +    def is_read_only(self): +        return self.access_mode_form == AccessModeForm.GET + +    def get_java_bitwise_operator(self): +        if "BitwiseAnd" in self.method_name: +            return "&" +        elif "BitwiseOr" in self.method_name: +            return "|" +        elif "BitwiseXor" in self.method_name: +            return "^" +        raise ValueError(self.method_name) + +    def get_java_numeric_operator(self): +        if "Add" in self.method_name: +            return "+" +        raise ValueError(self.method_name) + +    @staticmethod +    def get_access_mode(accessor_method): +        """Converts an access method name to AccessMode value. For example, getAndSet becomes GET_AND_SET""" +        return re.sub('([A-Z])', r'_\1', accessor_method).upper() + +    @staticmethod +    def get_access_mode_form(accessor_method): +        prefix_mode_list = [ +            ('getAndAdd', AccessModeForm.GET_AND_UPDATE_NUMERIC), +            ('getAndBitwise', AccessModeForm.GET_AND_UPDATE_BITWISE), +            ('getAndSet', AccessModeForm.GET_AND_SET), +            ('get', AccessModeForm.GET), +            ('set', AccessModeForm.SET), +            ('compareAndSet', AccessModeForm.STRONG_COMPARE_AND_SET), +            ('weakCompareAndSet', AccessModeForm.WEAK_COMPARE_AND_SET), +            ('compareAndExchange', AccessModeForm.COMPARE_AND_EXCHANGE)] +        for prefix, mode in prefix_mode_list: +            if accessor_method.startswith(prefix): +                return mode +        raise ValueError(accessor_method) + +VAR_HANDLE_ACCESSORS = [ +    VarHandleAccessor('get'), +    VarHandleAccessor('set'), +    VarHandleAccessor('getVolatile'), +    VarHandleAccessor('setVolatile'), +    VarHandleAccessor('getAcquire'), +    VarHandleAccessor('setRelease'), +    VarHandleAccessor('getOpaque'), +    VarHandleAccessor('setOpaque'), +    VarHandleAccessor('compareAndSet'), +    VarHandleAccessor('compareAndExchange'), +    VarHandleAccessor('compareAndExchangeAcquire'), +    VarHandleAccessor('compareAndExchangeRelease'), +    VarHandleAccessor('weakCompareAndSetPlain'), +    VarHandleAccessor('weakCompareAndSet'), +    VarHandleAccessor('weakCompareAndSetAcquire'), +    VarHandleAccessor('weakCompareAndSetRelease'), +    VarHandleAccessor('getAndSet'), +    VarHandleAccessor('getAndSetAcquire'), +    VarHandleAccessor('getAndSetRelease'), +    VarHandleAccessor('getAndAdd'), +    VarHandleAccessor('getAndAddAcquire'), +    VarHandleAccessor('getAndAddRelease'), +    VarHandleAccessor('getAndBitwiseOr'), +    VarHandleAccessor('getAndBitwiseOrRelease'), +    VarHandleAccessor('getAndBitwiseOrAcquire'), +    VarHandleAccessor('getAndBitwiseAnd'), +    VarHandleAccessor('getAndBitwiseAndRelease'), +    VarHandleAccessor('getAndBitwiseAndAcquire'), +    VarHandleAccessor('getAndBitwiseXor'), +    VarHandleAccessor('getAndBitwiseXorRelease'), +    VarHandleAccessor('getAndBitwiseXorAcquire') +] + +# Pseudo-RNG used for arbitrary decisions +RANDOM = Random(0) + +BANNER = '// This file is generated by util-src/generate_java.py do not directly modify!' + +# List of generated test classes +GENERATED_TEST_CLASSES = [] + +def java_file_for_class(class_name): +    return class_name + ".java" + +def capitalize_first(word): +    return word[0].upper() + word[1:] + +def indent_code(code): +    """Applies rudimentary indentation to code""" +    return code + +def build_template_dictionary(test_class, var_handle_kind, accessor, var_type): +    initial_value = RANDOM.choice(var_type.examples) +    updated_value = RANDOM.choice(list(filter(lambda v : v != initial_value, var_type.examples))) +    coordinates = ", ".join(var_handle_kind.get_coordinates()) +    if accessor.get_number_of_var_type_arguments() != 0 and coordinates != "": +        coordinates += ", " +    dictionary = { +        'accessor_method' : accessor.method_name, +        'access_mode' : accessor.access_mode, +        'banner' : BANNER, +        'coordinates' : coordinates, +        'initial_value' : initial_value, +        'test_class' : test_class, +        'updated_value' : updated_value, +        'var_type' : var_type, +    } +    dictionary['imports'] = ";\n".join(list(map(lambda x: "import " + x, var_handle_kind.get_imports()))) +    dictionary['lookup'] = var_handle_kind.get_lookup(dictionary) +    dictionary['field_declarations'] = ";\n".join(var_handle_kind.get_field_declarations(dictionary)) +    dictionary['read_value'] = var_handle_kind.get_value(dictionary) +    return dictionary + +def emit_accessor_test(var_handle_kind, accessor, var_type, output_path): +    test_class = var_handle_kind.get_name() + capitalize_first(accessor.method_name) + capitalize_first(var_type.name) +    GENERATED_TEST_CLASSES.append(test_class) +    src_file_path = output_path / java_file_for_class(test_class) +    expansions = build_template_dictionary(test_class, var_handle_kind, accessor, var_type) +    # Compute test operation +    if accessor.access_mode_form == AccessModeForm.GET: +        test_template = Template(""" +        ${var_type} value = (${var_type}) vh.${accessor_method}(${coordinates}); +        assertEquals(${initial_value}, value);""") +    elif accessor.access_mode_form == AccessModeForm.SET: +        test_template = Template(""" +        vh.${accessor_method}(${coordinates}${updated_value}); +        assertEquals(${updated_value}, ${read_value});""") +    elif accessor.access_mode_form == AccessModeForm.STRONG_COMPARE_AND_SET: +        test_template = Template(""" +        assertEquals(${initial_value}, ${read_value}); +        // Test an update that should succeed. +        boolean applied = (boolean) vh.${accessor_method}(${coordinates}${initial_value}, ${updated_value}); +        assertEquals(${updated_value}, ${read_value}); +        assertTrue(applied); +        // Test an update that should fail. +        applied = (boolean) vh.${accessor_method}(${coordinates}${initial_value}, ${initial_value}); +        assertFalse(applied); +        assertEquals(${updated_value}, ${read_value});""") +    elif accessor.access_mode_form == AccessModeForm.WEAK_COMPARE_AND_SET: +        test_template = Template(""" +        assertEquals(${initial_value}, ${read_value}); +        // Test an update that should succeed. +        int attempts = 10000; +        boolean applied; +        do { +            applied = (boolean) vh.${accessor_method}(${coordinates}${initial_value}, ${updated_value}); +        } while (applied == false && attempts-- > 0); +        assertEquals(${updated_value}, ${read_value}); +        assertTrue(attempts > 0); +        // Test an update that should fail. +        applied = (boolean) vh.${accessor_method}(${coordinates}${initial_value}, ${initial_value}); +        assertFalse(applied); +        assertEquals(${updated_value}, ${read_value});""") +    elif accessor.access_mode_form == AccessModeForm.COMPARE_AND_EXCHANGE: +        test_template = Template(""" +        // This update should succeed. +        ${var_type} witness_value = (${var_type}) vh.${accessor_method}(${coordinates}${initial_value}, ${updated_value}); +        assertEquals(${initial_value}, witness_value); +        assertEquals(${updated_value}, ${read_value}); +        // This update should fail. +        witness_value = (${var_type}) vh.${accessor_method}(${coordinates}${initial_value}, ${initial_value}); +        assertEquals(${updated_value}, witness_value); +        assertEquals(${updated_value}, ${read_value});""") +    elif accessor.access_mode_form == AccessModeForm.GET_AND_SET: +        test_template = Template(""" +        ${var_type} old_value = (${var_type}) vh.${accessor_method}(${coordinates}${updated_value}); +        assertEquals(${initial_value}, old_value); +        assertEquals(${updated_value}, ${read_value});""") +    elif accessor.access_mode_form == AccessModeForm.GET_AND_UPDATE_BITWISE: +        if var_type.supports_bitwise == True: +            expansions['binop'] = accessor.get_java_bitwise_operator() +            test_template = Template(""" +            ${var_type} old_value = (${var_type}) vh.${accessor_method}(${coordinates}${updated_value}); +            assertEquals(${initial_value}, old_value); +            assertEquals(${initial_value} ${binop} ${updated_value}, ${read_value});""") +        else: +            test_template = Template(""" +            vh.${accessor_method}(${coordinates}${initial_value}, ${updated_value}); +            failUnreachable();""") +    elif accessor.access_mode_form == AccessModeForm.GET_AND_UPDATE_NUMERIC: +        if var_type.supports_numeric == True: +            expansions['binop'] = accessor.get_java_numeric_operator() +            test_template = Template(""" +            ${var_type} old_value = (${var_type}) vh.${accessor_method}(${coordinates}${updated_value}); +            assertEquals(${initial_value}, old_value); +            ${var_type} expected_value = (${var_type}) (${initial_value} ${binop} ${updated_value}); +            assertEquals(expected_value, ${read_value});""") +        else: +            test_template = Template(""" +            vh.${accessor_method}(${coordinates}${initial_value}, ${updated_value}); +            failUnreachable();""") +    else: +        raise ValueError(accessor.access_mode_form) + +    if var_handle_kind.may_throw_read_only and not accessor.is_read_only(): +        # ByteBufferViews can be read-only and dynamically raise ReadOnlyBufferException. +        expansions['try_statement'] = "try {" +        expansions['catch_statement'] = "failUnreachable();\n} catch (ReadOnlyBufferException ex) {}" +    else: +        expansions['try_statement'] = "" +        expansions['catch_statement'] = "" + +    expansions['test_body'] = test_template.safe_substitute(expansions) + +    s = Template("""${banner} + +${imports}; + +class ${test_class} extends VarHandleUnitTest { +    ${field_declarations}; +    static final VarHandle vh; +    static { +        try { +            vh = ${lookup}; +        } catch (Exception e) { +            throw new RuntimeException("Unexpected initialization exception", e); +        } +    } + +    @Override +    public void doTest() throws Exception { +        if (!vh.isAccessModeSupported(VarHandle.AccessMode.${access_mode})) { +            try { +                ${test_body} +                failUnreachable(); +            } catch (UnsupportedOperationException ex) {} +        } else { +            ${try_statement} +            ${test_body} +            ${catch_statement} +        } +    } + +    public static void main(String[] args) { +         new ${test_class}().run(); +    } +} +""").safe_substitute(expansions) +    with src_file_path.open("w") as src_file: +        print(s, file=src_file) + +def emit_value_type_accessor_tests(output_path): +    for var_handle_kind in ALL_VAR_HANDLE_KINDS: +        for accessor in VAR_HANDLE_ACCESSORS: +            for var_type in var_handle_kind.get_supported_types(): +                emit_accessor_test(var_handle_kind, accessor, var_type, output_path) + +def emit_reference_accessor_tests(output_path): +    ref_type = JavaType("Widget", [ "Widget.ONE", "Widget.TWO", "null" ]) +    for var_handle_kind in ALL_VAR_HANDLE_KINDS: +        if var_handle_kind.is_view(): +            # Views as reference type arrays are not supported. They +            # fail instantiation. This is tested in 710-varhandle-creation. +            continue +        for accessor in VAR_HANDLE_ACCESSORS: +            emit_accessor_test(var_handle_kind, accessor, ref_type, output_path) + +def emit_boxing_value_type_accessor_test(accessor, var_type, output_path): +    test_class = "Boxing" + capitalize_first(accessor.method_name) + capitalize_first(var_type.name) +    GENERATED_TEST_CLASSES.append(test_class) +    src_file_path = output_path / java_file_for_class(test_class) +    var_handle_kind = FIELD_VAR_HANDLE +    expansions = build_template_dictionary(test_class, var_handle_kind, accessor, var_type) +    template = Template(""" +${banner} + +${imports}; +import java.lang.invoke.WrongMethodTypeException; + +public class ${test_class} extends VarHandleUnitTest { +    ${field_declarations}; +    private static final VarHandle vh; +    static { +        try { +            vh = ${lookup}; +        } catch (Exception e) { +            throw new RuntimeException("Unexpected initialization exception", e); +        } +    } + +    @Override +    public void doTest() throws Exception { +       ${body} +    } + +    public static void main(String[] args) { +         new ${test_class}().run(); +    } +} +""") +    with io.StringIO() as body_text: +        compatible_types = types_that_widen_to(var_type) +        for value_type in VALUE_TYPES: +            print("try {", file=body_text) +            return_type = accessor.get_return_type(var_type) +            if return_type: +                print("{0} result = ({0}) ".format(return_type), end="", file=body_text) +            print("vh.{0}(this".format(accessor.method_name), end="", file=body_text) +            num_args = accessor.get_number_of_var_type_arguments() +            for i in range(0, num_args): +                print(", {0}({1})".format(value_type.boxing_method(), value_type.examples[i]), end="", file=body_text) +            print(");", file=body_text) +            if value_type in compatible_types: +                print("   assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.{0}));".format(accessor.access_mode), +                      file=body_text) +            else: +                print("failUnreachable();", file=body_text) +                print("} catch (WrongMethodTypeException e) {", file=body_text) +            print("} catch (UnsupportedOperationException e) {", file=body_text) +            print("   assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.{0}));".format(accessor.access_mode), +                  file=body_text) +            print("}", file=body_text) +        expansions['body'] = body_text.getvalue(); +        with src_file_path.open("w") as src_file: +            print(template.safe_substitute(expansions), file=src_file) + +def emit_boxing_return_value_type_test(accessor, var_type, output_path): +    test_class = "BoxingReturn" + capitalize_first(accessor.method_name) + capitalize_first(var_type.name) +    GENERATED_TEST_CLASSES.append(test_class) +    src_file_path = output_path / java_file_for_class(test_class) +    var_handle_kind = FIELD_VAR_HANDLE +    expansions = build_template_dictionary(test_class, var_handle_kind, accessor, var_type) +    template = Template(""" +${banner} + +${imports}; +import java.lang.invoke.WrongMethodTypeException; + +public class ${test_class} extends VarHandleUnitTest { +    ${field_declarations}; +    private static final VarHandle vh; +    static { +        try { +            vh = ${lookup}; +        } catch (Exception e) { +            throw new RuntimeException("Unexpected initialization exception", e); +        } +    } + +    @Override +    public void doTest() throws Exception { +       ${body} +    } + +    public static void main(String[] args) { +         new ${test_class}().run(); +    } +} +""") +    with io.StringIO() as body_text: +        return_type = accessor.get_return_type(var_type) +        compatible_types = { return_type } +        for value_type in VALUE_TYPES: +            print("try {", file=body_text) +            print("{0} result = ({0}) ".format(value_type.boxed_type), end="", file=body_text) +            print("vh.{0}(this".format(accessor.method_name), end="", file=body_text) +            num_args = accessor.get_number_of_var_type_arguments() +            for i in range(0, num_args): +                print(", {0})".format(var_type.examples[i]), end="", file=body_text) +            print(");", file=body_text) +            if value_type in compatible_types: +                print("   assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.{0}));".format(accessor.access_mode), +                      file=body_text) +            else: +                print("failUnreachable();", file=body_text) +                print("} catch (WrongMethodTypeException e) {", file=body_text) +            print("} catch (UnsupportedOperationException e) {", file=body_text) +            print("   assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.{0}));".format(accessor.access_mode), +                  file=body_text) +            print("}", file=body_text) +        expansions['body'] = body_text.getvalue(); +        with src_file_path.open("w") as src_file: +            print(template.safe_substitute(expansions), file=src_file) + +def emit_boxing_value_type_accessor_tests(output_path): +    for var_type in VALUE_TYPES: +        for accessor in VAR_HANDLE_ACCESSORS: +            if accessor.get_number_of_var_type_arguments() > 0: +                emit_boxing_value_type_accessor_test(accessor, var_type, output_path) +            else: +                emit_boxing_return_value_type_test(accessor, var_type, output_path) + +def emit_main(output_path, manual_test_classes): +    main_file_path = output_path / "Main.java" +    all_test_classes = GENERATED_TEST_CLASSES + manual_test_classes +    with main_file_path.open("w") as main_file: +        print("// " + BANNER, file=main_file) +        print(""" +public class Main { +    public static void main(String[] args) { +""", file=main_file) +        for cls in all_test_classes: +            print("         " + cls + ".main(args);", file=main_file) +        print("        VarHandleUnitTest.DEFAULT_COLLECTOR.printSummary();", file=main_file) +        print("        System.exit(VarHandleUnitTest.DEFAULT_COLLECTOR.failuresOccurred() ? 1 : 0);", file=main_file) +        print("    }\n}", file=main_file) + +def main(argv): +    final_java_dir = Path(argv[1]) +    if not final_java_dir.exists() or not final_java_dir.is_dir(): +        print("{} is not a valid java dir".format(final_java_dir), file=sys.stderr) +        sys.exit(1) +    emit_value_type_accessor_tests(final_java_dir) +    emit_reference_accessor_tests(final_java_dir) +    emit_boxing_value_type_accessor_tests(final_java_dir) +    emit_main(final_java_dir, argv[2:]) + +if __name__ == '__main__': +    main(sys.argv) diff --git a/test/714-invoke-custom-lambda-metafactory/expected.txt b/test/714-invoke-custom-lambda-metafactory/expected.txt index cbe98404c5..54b6c24798 100644 --- a/test/714-invoke-custom-lambda-metafactory/expected.txt +++ b/test/714-invoke-custom-lambda-metafactory/expected.txt @@ -2,3 +2,4 @@ Exception in thread "main" java.lang.BootstrapMethodError: Exception from call s  	at Main.main(Main.java:25)  Caused by: java.lang.NullPointerException: Bootstrap method returned null  	... 1 more +exit status: 1 diff --git a/test/714-invoke-custom-lambda-metafactory/run b/test/714-invoke-custom-lambda-metafactory/run new file mode 100755 index 0000000000..7a0d0d05ab --- /dev/null +++ b/test/714-invoke-custom-lambda-metafactory/run @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Copyright 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Squash the exit status and put it in expected +./default-run "$@" +echo "exit status:" $? diff --git a/test/800-smali/smali/b_22045582.smali b/test/800-smali/smali/b_22045582.smali index 3cb661a7cb..09ea784b5b 100644 --- a/test/800-smali/smali/b_22045582.smali +++ b/test/800-smali/smali/b_22045582.smali @@ -5,7 +5,7 @@  .super Ljava/lang/Object; -.method public static run()La/b/c/d/e/nonexistant; +.method public static run()La/b/c/d/e/nonexistent;      .registers 4      # v1 is undefined, and the return type cannot be resolved. The Undefined should take      # precedence here. diff --git a/test/988-TooDeepClassInstanceOf/expected.txt b/test/805-TooDeepClassInstanceOf/expected.txt index b0aad4deb5..b0aad4deb5 100644 --- a/test/988-TooDeepClassInstanceOf/expected.txt +++ b/test/805-TooDeepClassInstanceOf/expected.txt diff --git a/test/988-TooDeepClassInstanceOf/info.txt b/test/805-TooDeepClassInstanceOf/info.txt index 390b00d122..390b00d122 100644 --- a/test/988-TooDeepClassInstanceOf/info.txt +++ b/test/805-TooDeepClassInstanceOf/info.txt diff --git a/test/988-TooDeepClassInstanceOf/src/Main.java b/test/805-TooDeepClassInstanceOf/src/Main.java index 93a41e565b..93a41e565b 100644 --- a/test/988-TooDeepClassInstanceOf/src/Main.java +++ b/test/805-TooDeepClassInstanceOf/src/Main.java diff --git a/test/988-TooWideClassInstanceOf/expected.txt b/test/806-TooWideClassInstanceOf/expected.txt index b0aad4deb5..b0aad4deb5 100644 --- a/test/988-TooWideClassInstanceOf/expected.txt +++ b/test/806-TooWideClassInstanceOf/expected.txt diff --git a/test/988-TooWideClassInstanceOf/info.txt b/test/806-TooWideClassInstanceOf/info.txt index 30546fe076..30546fe076 100644 --- a/test/988-TooWideClassInstanceOf/info.txt +++ b/test/806-TooWideClassInstanceOf/info.txt diff --git a/test/988-TooWideClassInstanceOf/src/Main.java b/test/806-TooWideClassInstanceOf/src/Main.java index 332569c104..332569c104 100644 --- a/test/988-TooWideClassInstanceOf/src/Main.java +++ b/test/806-TooWideClassInstanceOf/src/Main.java diff --git a/test/911-get-stack-trace/expected_d8.diff b/test/911-get-stack-trace/expected_d8.diff index 3ce9bedf95..c12015a832 100644 --- a/test/911-get-stack-trace/expected_d8.diff +++ b/test/911-get-stack-trace/expected_d8.diff @@ -161,7 +161,7 @@  363c363  <  doTest ()V 122 59  --- ->  doTest ()V 119 59 +>  doTest ()V 120 59  376c376  <  baz (IIILart/ControlData;)Ljava/lang/Object; 9 34  --- @@ -325,15 +325,15 @@  598c598  <  doTest ()V 127 61  --- ->  doTest ()V 124 61 +>  doTest ()V 125 61  630c630  <  doTest ()V 112 54  --- ->  doTest ()V 109 54 +>  doTest ()V 110 54  677c677  <  doTest ()V 117 56  --- ->  doTest ()V 114 56 +>  doTest ()V 115 56  687c687  <  baz (IIILart/ControlData;)Ljava/lang/Object; 9 34  --- diff --git a/test/952-invoke-custom-lookup/build b/test/952-invoke-custom-lookup/build new file mode 100644 index 0000000000..f3fe95c135 --- /dev/null +++ b/test/952-invoke-custom-lookup/build @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Copyright 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#      http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# make us exit on a failure +set -e + +# This test uses previously prepared dex and jar files. They need to +# be re-packaged to match the files that the run-test-jar script +# expects. +if [[ $@ != *"--jvm"* ]]; then +  zip ${TEST_NAME}.jar classes.dex +else +  unzip -d classes classes.jar +fi diff --git a/test/952-invoke-custom-lookup/classes.dex b/test/952-invoke-custom-lookup/classes.dex Binary files differnew file mode 100644 index 0000000000..670d93dedf --- /dev/null +++ b/test/952-invoke-custom-lookup/classes.dex diff --git a/test/952-invoke-custom-lookup/classes.jar b/test/952-invoke-custom-lookup/classes.jar Binary files differnew file mode 100644 index 0000000000..aa6a1f65fa --- /dev/null +++ b/test/952-invoke-custom-lookup/classes.jar diff --git a/test/952-invoke-custom-lookup/expected.txt b/test/952-invoke-custom-lookup/expected.txt new file mode 100644 index 0000000000..0da2b866d2 --- /dev/null +++ b/test/952-invoke-custom-lookup/expected.txt @@ -0,0 +1,10 @@ +NAME: 1 +CALLER: Main +CALLER CLASS: class Main +THIS CLASS: class com.android.tools.r8.maindexlist.desugar.BootstrapHolder +invokedynamic target on Main +NAME: 2 +CALLER: Main +CALLER CLASS: class Main +THIS CLASS: class com.android.tools.r8.maindexlist.desugar.BootstrapHolder +invokedynamic target on BootstrapHolder diff --git a/test/952-invoke-custom-lookup/info.txt b/test/952-invoke-custom-lookup/info.txt new file mode 100644 index 0000000000..3bfe87dfd3 --- /dev/null +++ b/test/952-invoke-custom-lookup/info.txt @@ -0,0 +1 @@ +A temporary test for the lookup class used for invoke-custom (see b/73056094). diff --git a/test/965-default-verify/src/Iface.java b/test/965-default-verify/src/Iface.java index 180fba2833..698230a666 100644 --- a/test/965-default-verify/src/Iface.java +++ b/test/965-default-verify/src/Iface.java @@ -18,6 +18,6 @@ public interface Iface {      return "Hello";    }    public default void verificationSoftFail() { -    Statics.nonexistantFunction(); +    Statics.nonexistentFunction();    }  } diff --git a/test/965-default-verify/src/Statics.java b/test/965-default-verify/src/Statics.java index 2e17ba4174..23a4a01863 100644 --- a/test/965-default-verify/src/Statics.java +++ b/test/965-default-verify/src/Statics.java @@ -15,8 +15,7 @@   */  class Statics { -  public static void nonexistantFunction() { +  public static void nonexistentFunction() {      System.out.println("I don't exist");    }  } - diff --git a/test/965-default-verify/src2/Statics.java b/test/965-default-verify/src2/Statics.java index 7899ca9c5e..73c5ec6188 100644 --- a/test/965-default-verify/src2/Statics.java +++ b/test/965-default-verify/src2/Statics.java @@ -14,7 +14,7 @@   * limitations under the License.   */  class Statics { -  // public static void nonexistantFunction() { +  // public static void nonexistentFunction() {    //     System.out.println("I don't exist");    // }  } diff --git a/test/983-source-transform-verify/source_transform.cc b/test/983-source-transform-verify/source_transform.cc index dfefce207b..26c5668681 100644 --- a/test/983-source-transform-verify/source_transform.cc +++ b/test/983-source-transform-verify/source_transform.cc @@ -19,25 +19,19 @@  #include <cstdio>  #include <cstring>  #include <iostream> +#include <sstream>  #include <vector>  #include "android-base/stringprintf.h"  #include "jni.h"  #include "jvmti.h" +#include "scoped_local_ref.h" -#include "base/macros.h" -#include "bytecode_utils.h"  #include "dex/code_item_accessors-inl.h" -#include "dex/art_dex_file_loader.h" +#include "dex/dex_file_loader.h"  #include "dex/dex_file.h"  #include "dex/dex_file_loader.h"  #include "dex/dex_instruction.h" -#include "jit/jit.h" -#include "native_stack_dump.h" -#include "runtime.h" -#include "scoped_thread_state_change-inl.h" -#include "thread-current-inl.h" -#include "thread_list.h"  // Test infrastructure  #include "jvmti_helper.h" @@ -48,9 +42,19 @@ namespace Test983SourceTransformVerify {  constexpr bool kSkipInitialLoad = true; +static void Println(JNIEnv* env, std::ostringstream msg_stream) { +  std::string msg = msg_stream.str(); +  ScopedLocalRef<jclass> test_klass(env, env->FindClass("art/Test983")); +  jmethodID println_method = env->GetStaticMethodID(test_klass.get(), +                                                    "doPrintln", +                                                    "(Ljava/lang/String;)V"); +  ScopedLocalRef<jstring> data(env, env->NewStringUTF(msg.c_str())); +  env->CallStaticVoidMethod(test_klass.get(), println_method, data.get()); +} +  // The hook we are using.  void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED, -                              JNIEnv* jni_env ATTRIBUTE_UNUSED, +                              JNIEnv* env,                                jclass class_being_redefined,                                jobject loader ATTRIBUTE_UNUSED,                                const char* name, @@ -60,10 +64,11 @@ void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,                                jint* new_class_data_len ATTRIBUTE_UNUSED,                                unsigned char** new_class_data ATTRIBUTE_UNUSED) {    if (kSkipInitialLoad && class_being_redefined == nullptr) { -    // Something got loaded concurrently. Just ignore it for now. +    // Something got loaded concurrently. Just ignore it for now. To make sure the test is +    // repeatable we only care about things that come from RetransformClasses.      return;    } -  std::cout << "Dex file hook for " << name << std::endl; +  Println(env, std::ostringstream() << "Dex file hook for " << name);    if (IsJVM()) {      return;    } @@ -75,7 +80,7 @@ void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,    CHECK_LE(static_cast<jint>(header_file_size), class_data_len);    class_data_len = static_cast<jint>(header_file_size); -  const ArtDexFileLoader dex_file_loader; +  const DexFileLoader dex_file_loader;    std::string error;    std::unique_ptr<const DexFile> dex(dex_file_loader.Open(class_data,                                                            class_data_len, @@ -86,7 +91,8 @@ void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,                                                            /*verify_checksum*/ true,                                                            &error));    if (dex.get() == nullptr) { -    std::cout << "Failed to verify dex file for " << name << " because " << error << std::endl; +    Println(env, std::ostringstream() << "Failed to verify dex file for " +                                      << name << " because " << error);      return;    }    for (uint32_t i = 0; i < dex->NumClassDefs(); i++) { @@ -105,9 +111,10 @@ void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,          int forbiden_flags = (Instruction::kVerifyError | Instruction::kVerifyRuntimeOnly);          if (inst.Opcode() == Instruction::RETURN_VOID_NO_BARRIER ||              (inst.GetVerifyExtraFlags() & forbiden_flags) != 0) { -          std::cout << "Unexpected instruction found in " << dex->PrettyMethod(it.GetMemberIndex()) -                    << " [Dex PC: 0x" << std::hex << pair.DexPc() << std::dec << "] : " -                    << inst.DumpString(dex.get()) << std::endl; +          Println(env, std::ostringstream() << "Unexpected instruction found in " +                                            << dex->PrettyMethod(it.GetMemberIndex()) +                                            << " [Dex PC: 0x" << std::hex << pair.DexPc() +                                            << std::dec << "] : " << inst.DumpString(dex.get()));            continue;          }        } @@ -116,22 +123,11 @@ void JNICALL CheckDexFileHook(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,  }  // Get all capabilities except those related to retransformation. -jint OnLoad(JavaVM* vm, -            char* options ATTRIBUTE_UNUSED, -            void* reserved ATTRIBUTE_UNUSED) { -  if (vm->GetEnv(reinterpret_cast<void**>(&jvmti_env), JVMTI_VERSION_1_0)) { -    printf("Unable to get jvmti env!\n"); -    return 1; -  } -  SetStandardCapabilities(jvmti_env); +extern "C" JNIEXPORT void JNICALL Java_art_Test983_setupLoadHook(JNIEnv* env, jclass) {    jvmtiEventCallbacks cb;    memset(&cb, 0, sizeof(cb));    cb.ClassFileLoadHook = CheckDexFileHook; -  if (jvmti_env->SetEventCallbacks(&cb, sizeof(cb)) != JVMTI_ERROR_NONE) { -    printf("Unable to set class file load hook cb!\n"); -    return 1; -  } -  return 0; +  JvmtiErrorToException(env, jvmti_env, jvmti_env->SetEventCallbacks(&cb, sizeof(cb)));  }  }  // namespace Test983SourceTransformVerify diff --git a/test/983-source-transform-verify/src/art/Test983.java b/test/983-source-transform-verify/src/art/Test983.java index faae96aef6..7dc47ab06a 100644 --- a/test/983-source-transform-verify/src/art/Test983.java +++ b/test/983-source-transform-verify/src/art/Test983.java @@ -27,7 +27,15 @@ public class Test983 {      doTest();    } +  private native static void setupLoadHook(); + +  /* called from JNI */ +  public static void doPrintln(String str) { +    System.out.println(str); +  } +    public static void doTest() { +    setupLoadHook();      Redefinition.enableCommonRetransformation(true);      Redefinition.doCommonClassRetransformation(Transform.class);      Redefinition.doCommonClassRetransformation(Object.class); diff --git a/test/993-breakpoints/src/art/Breakpoint.java b/test/993-breakpoints/src/art/Breakpoint.java index 2a370ebd40..bbb89f707f 100644 --- a/test/993-breakpoints/src/art/Breakpoint.java +++ b/test/993-breakpoints/src/art/Breakpoint.java @@ -117,7 +117,7 @@ public class Breakpoint {                                                   Thread thr);    public static native void stopBreakpointWatch(Thread thr); -  public static final class LineNumber { +  public static final class LineNumber implements Comparable<LineNumber> {      public final long location;      public final int line; diff --git a/test/Android.bp b/test/Android.bp index 72e8eee95a..25556adf65 100644 --- a/test/Android.bp +++ b/test/Android.bp @@ -62,7 +62,7 @@ art_cc_defaults {          "libvixld-arm",          "libvixld-arm64",          "libart-gtest", -        "libdexfile", +        "libdexfiled",          "libbase",          "libicuuc", @@ -114,7 +114,7 @@ art_cc_defaults {      shared_libs: [          "libartd",          "libartd-compiler", -        "libdexfile", +        "libdexfiled",      ],      static_libs: [          "libgtest", @@ -151,7 +151,7 @@ art_cc_library {      shared_libs: [          "libartd",          "libartd-compiler", -        "libdexfile", +        "libdexfiled",          "libbase",          "libbacktrace",      ], @@ -238,6 +238,7 @@ art_cc_defaults {          "931-agent-thread/agent_thread.cc",          "933-misc-events/misc_events.cc",          "945-obsolete-native/obsolete_native.cc", +        "983-source-transform-verify/source_transform.cc",          "984-obsolete-invoke/obsolete_invoke.cc",          "986-native-method-bind/native_bind.cc",          "987-agent-bind/agent_bind.cc", @@ -267,12 +268,8 @@ art_cc_defaults {          "1942-suspend-raw-monitor-exit/native_suspend_monitor.cc",          "1943-suspend-raw-monitor-wait/native_suspend_monitor.cc",      ], -    shared_libs: [ -        "libdexfile", -        "libbase", -    ],      header_libs: [ -        "libnativehelper_header_only", +        "jni_headers",          "libopenjdkjvmti_headers",      ],      include_dirs: ["art/test/ti-agent"], @@ -292,15 +289,21 @@ art_cc_defaults {          "909-attach-agent/attach.cc",          "912-classes/classes_art.cc",          "936-search-onload/search_onload.cc", -        "983-source-transform-verify/source_transform.cc",          "1940-ddms-ext/ddm_ext.cc", +        "1944-sudden-exit/sudden_exit.cc", +    ], +    shared_libs: [ +        "libbase",      ],  }  art_cc_test_library {      name: "libtiagent",      defaults: ["libtiagent-defaults"], -    shared_libs: ["libart"], +    shared_libs: [ +        "libart", +        "libdexfile", +    ],  }  art_cc_test_library { @@ -309,7 +312,36 @@ art_cc_test_library {          "art_debug_defaults",          "libtiagent-defaults",      ], -    shared_libs: ["libartd"], +    shared_libs: [ +        "libartd", +        "libdexfiled", +    ], +} + +art_cc_test_library { +    name: "libctstiagent", +    defaults: ["libtiagent-base-defaults"], +    whole_static_libs: [ +        "libdexfile", +        "libz", +        "libziparchive", +    ], +    static_libs: [ +        "libbase", +        "libcutils", +        "libutils", +    ], +    shared_libs: [ +        "liblog", +    ], +    header_libs: [ +        // This is needed to resolve the base/ header file in libdexfile. Unfortunately there are +        // many problems with how we export headers that are making doing this the 'right' way +        // difficult. +        // TODO: move those headers to art/ rather than under runtime. +        "libart_runtime_headers", +    ], +    export_include_dirs: ["ti-agent"],  }  art_cc_defaults { @@ -340,12 +372,6 @@ art_cc_test_library {      shared_libs: ["libartd"],  } -art_cc_test_library { -    name: "libctstiagent", -    defaults: ["libtiagent-base-defaults"], -    export_include_dirs: ["ti-agent"], -} -  cc_defaults {      name: "libarttest-defaults",      defaults: [ @@ -399,7 +425,6 @@ cc_defaults {          "708-jit-cache-churn/jit.cc",      ],      shared_libs: [ -        "libdexfile",          "libbacktrace",          "libbase",          "libnativehelper", @@ -409,7 +434,10 @@ cc_defaults {  art_cc_test_library {      name: "libarttest",      defaults: ["libarttest-defaults"], -    shared_libs: ["libart"], +    shared_libs: [ +        "libart", +        "libdexfile", +    ],  }  art_cc_test_library { @@ -418,7 +446,10 @@ art_cc_test_library {          "art_debug_defaults",          "libarttest-defaults",      ], -    shared_libs: ["libartd"], +    shared_libs: [ +        "libartd", +        "libdexfiled", +    ],  }  art_cc_test_library { diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index 2df0cc6fae..464449c752 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -32,11 +32,6 @@ TEST_ART_RUN_TEST_DEPENDENCIES += \    $(HOST_OUT_EXECUTABLES)/d8-compat-dx  endif -# Convert's a rule name to the form used in variables, e.g. no-relocate to NO_RELOCATE -define name-to-var -$(shell echo $(1) | tr '[:lower:]' '[:upper:]' | tr '-' '_') -endef  # name-to-var -  # We need dex2oat and dalvikvm on the target as well as the core images (all images as we sync  # only once).  TEST_ART_TARGET_SYNC_DEPS += $(ART_TARGET_EXECUTABLES) $(TARGET_CORE_IMG_OUTS) @@ -124,13 +119,13 @@ define core-image-dependencies      endif    endif    ifeq ($(2),no-image) -    $(1)_prereq_rules += $$($(call name-to-var,$(1))_CORE_IMAGE_$$(image_suffix)_$(4)) +    $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_$(4))    else      ifeq ($(2),picimage) -      $(1)_prereq_rules += $$($(call name-to-var,$(1))_CORE_IMAGE_$$(image_suffix)_$(4)) +      $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_$(4))      else        ifeq ($(2),multipicimage) -        $(1)_prereq_rules += $$($(call name-to-var,$(1))_CORE_IMAGE_$$(image_suffix)_multi_$(4)) +        $(1)_prereq_rules += $$($(call to-upper,$(1))_CORE_IMAGE_$$(image_suffix)_multi_$(4))        endif      endif    endif @@ -174,7 +169,6 @@ test-art-run-test : test-art-host-run-test test-art-target-run-test  host_prereq_rules :=  target_prereq_rules :=  core-image-dependencies := -name-to-var :=  define-test-art-host-or-target-run-test-group :=  TARGET_TYPES :=  COMPILER_TYPES := diff --git a/test/etc/default-build b/test/etc/default-build index 4dc2393c54..6040f7d910 100755 --- a/test/etc/default-build +++ b/test/etc/default-build @@ -124,18 +124,20 @@ JACK_EXPERIMENTAL_ARGS[${DEFAULT_EXPERIMENT}]="-D jack.java.source.version=1.8 -  declare -A SMALI_EXPERIMENTAL_ARGS  SMALI_EXPERIMENTAL_ARGS["default-methods"]="--api 24"  SMALI_EXPERIMENTAL_ARGS["method-handles"]="--api 26" +SMALI_EXPERIMENTAL_ARGS["var-handles"]="--api 26"  SMALI_EXPERIMENTAL_ARGS["agents"]="--api 26"  declare -A JAVAC_EXPERIMENTAL_ARGS  JAVAC_EXPERIMENTAL_ARGS["default-methods"]="-source 1.8 -target 1.8"  JAVAC_EXPERIMENTAL_ARGS["lambdas"]="-source 1.8 -target 1.8"  JAVAC_EXPERIMENTAL_ARGS["method-handles"]="-source 1.8 -target 1.8" -# We need to leave javac at default 1.7 so that dx will continue to work +JAVAC_EXPERIMENTAL_ARGS["var-handles"]="-source 1.8 -target 1.8"  JAVAC_EXPERIMENTAL_ARGS[${DEFAULT_EXPERIMENT}]="-source 1.8 -target 1.8"  JAVAC_EXPERIMENTAL_ARGS["agents"]="-source 1.8 -target 1.8"  declare -A DX_EXPERIMENTAL_ARGS  DX_EXPERIMENTAL_ARGS["method-handles"]="--min-sdk-version=26" +DX_EXPERIMENTAL_ARGS["var-handles"]="--min-sdk-version=26"  while true; do    if [ "x$1" = "x--dx-option" ]; then @@ -441,7 +443,7 @@ else      if [ "${HAS_SRC2}" = "true" ]; then        mkdir -p classes -      ${JAVAC} ${JAVAC_ARGS} -d classes `find src2 -name '*.java'` +      ${JAVAC} ${JAVAC_ARGS} -classpath classes -d classes `find src2 -name '*.java'`      fi      if [[ "${HAS_SRC}" == "true" || "${HAS_SRC2}" == "true" || "${HAS_SRC_ART}" == "true" ]]; then diff --git a/test/etc/run-test-jar b/test/etc/run-test-jar index 02438701b8..b8427f491b 100755 --- a/test/etc/run-test-jar +++ b/test/etc/run-test-jar @@ -570,7 +570,7 @@ if [ "$HAVE_IMAGE" = "n" ]; then      if [ "${RELOCATE}" = "y" ] ; then        DALVIKVM_BOOT_OPT="-Ximage:${BOOT_IMAGE}"      else -      DALVIKVM_BOOT_OPT="-Ximage:/system/non-existant/core.art" +      DALVIKVM_BOOT_OPT="-Ximage:/system/non-existent/core.art"      fi  else      DALVIKVM_BOOT_OPT="-Ximage:${BOOT_IMAGE}" @@ -667,7 +667,8 @@ fi  if [ "$HOST" = "y" ]; then    max_filename_size=$(getconf NAME_MAX $DEX_LOCATION)  else -  # There is no getconf on device, fallback to standard value. See NAME_MAX in kernel <linux/limits.h> +  # There is no getconf on device, fallback to standard value. +  # See NAME_MAX in kernel <linux/limits.h>    max_filename_size=255  fi  # Compute VDEX_NAME. @@ -849,7 +850,7 @@ if [ "$HOST" = "n" ]; then      fi      # System libraries needed by libarttestd.so -    PUBLIC_LIBS=libart.so:libartd.so:libc++.so:libbacktrace.so:libdexfile.so:libbase.so:libnativehelper.so +    PUBLIC_LIBS=libart.so:libartd.so:libc++.so:libbacktrace.so:libdexfile.so:libdexfiled.so:libbase.so:libnativehelper.so      # Create a script with the command. The command can get longer than the longest      # allowed adb command and there is no way to get the exit status from a adb shell @@ -886,11 +887,14 @@ if [ "$HOST" = "n" ]; then        adb push $cmdfile $DEX_LOCATION/cmdline.sh > /dev/null 2>&1      fi +    exit_status=0      if [ "$DRY_RUN" != "y" ]; then        adb shell sh $DEX_LOCATION/cmdline.sh +      exit_status=$?      fi      rm -f $cmdfile +    exit $exit_status  else      # Host run.      export ANDROID_PRINTF_LOG=brief @@ -996,10 +1000,12 @@ else          trap 'kill -INT -$pid' INT          $cmdline "$@" 2>&1 & pid=$!          wait $pid +        exit_value=$?          # Add extra detail if time out is enabled. -        if [ ${PIPESTATUS[0]} = 124 ] && [ "$TIME_OUT" = "timeout" ]; then +        if [ $exit_value = 124 ] && [ "$TIME_OUT" = "timeout" ]; then            echo -e "\e[91mTEST TIMED OUT!\e[0m" >&2          fi +        exit $exit_value        else          # With a thread dump that uses gdb if a timeout.          trap 'kill -INT -$pid' INT @@ -1022,6 +1028,7 @@ else              # The test timed out.              echo -e "\e[91mTEST TIMED OUT!\e[0m" >&2            fi +          exit $test_exit_status          fi        fi      fi diff --git a/test/knownfailures.json b/test/knownfailures.json index 2b28409a1f..b483b93e19 100644 --- a/test/knownfailures.json +++ b/test/knownfailures.json @@ -1,12 +1,5 @@  [      { -        "tests": [ "1939-proxy-frames", "1914-get-local-instance" ], -        "description": ["Test 1939 & 1914 seems to consistently fail in gcstress on 64 bit with", -                        "a proxy this object having no associated class!"], -        "variant": "gcstress", -        "bug": "http://b/67679263" -    }, -    {          "tests": "1934-jvmti-signal-thread",          "description": ["Disables 1934-jvmti-signal-thread in tracing configurations"],          "variant": "trace | stream", @@ -660,8 +653,25 @@          "description": ["Test is designed to only check --compiler-filter=speed"]      },      { +        "test_patterns": [".*"], +        "description": ["Tests are timing out for weeks now, disable to fix."], +        "variant": "cdex-fast & redefine-stress" +    }, +    {          "tests": "674-HelloWorld-Dm",          "variant": "target",          "description": ["Requires zip, which isn't available on device"] +    }, +    { +        "tests": "712-varhandle-invocations", +        "variant": "speed-profile & debug & gcstress & target", +        "bug": "b/73275005", +        "description": ["Time out"] +    }, +    { +        "tests": ["130-hprof"], +        "env_vars": {"SANITIZE_HOST": "address"}, +        "bug": "b/73060923", +        "description": ["ASAN issue"]      }  ] diff --git a/test/ti-agent/common_load.cc b/test/ti-agent/common_load.cc index 9a7352e479..bfd165db10 100644 --- a/test/ti-agent/common_load.cc +++ b/test/ti-agent/common_load.cc @@ -28,7 +28,6 @@  #include "901-hello-ti-agent/basics.h"  #include "909-attach-agent/attach.h"  #include "936-search-onload/search_onload.h" -#include "983-source-transform-verify/source_transform.h"  #include "1919-vminit-thread-start-timing/vminit.h"  namespace art { @@ -83,7 +82,6 @@ static AgentLib agents[] = {    { "939-hello-transformation-bcp", common_redefine::OnLoad, nullptr },    { "941-recursive-obsolete-jit", common_redefine::OnLoad, nullptr },    { "943-private-recursive-jit", common_redefine::OnLoad, nullptr }, -  { "983-source-transform-verify", Test983SourceTransformVerify::OnLoad, nullptr },    { "1919-vminit-thread-start-timing", Test1919VMInitThreadStart::OnLoad, nullptr },  };  |