Unsafe was changed recently through: https://github.com/openjdk/jdk/pull/31249 to no longer treat any non-zero byte read as a `boolean` through Unsafe as `true`, but only treat the 'canonical' representation, where only the least significant bit in the byte is set, as `true`.
This change inadvertently leaked out through the memory access var handles. A user can write a `byte` into a memory segment (on or off-heap), and then read it back as a `boolean`, making this behavior change observable. Since the fallback linker depends on the previous behavior in the implementation, the tier5 test from the title was failing. But, there is really a gap in testing here, and we can observe the difference in behavior when just using the memory access parts of the API as well. It is important that the normalization of boolean values is the same in all these scenarios: - Normalizing a value returned from native code by a downcall - Normalizing an argument passed by native code to an upcall stub - Normalizing a value read from a memory segment using a var handle or the MemorySegment::get accessor To that end, this patch tweaks the memory segment var handles for boolean access to restore the old normalization behavior. I've also added the missing testing for this case. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - Cleanup - Add more thorough testing - Adapt segment view var handles instead - Adapt boolean memaccess var handles to restore old normilzation behavior Changes: https://git.openjdk.org/jdk/pull/31727/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=31727&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8386848 Stats: 166 lines in 4 files changed: 105 ins; 58 del; 3 mod Patch: https://git.openjdk.org/jdk/pull/31727.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/31727/head:pull/31727 PR: https://git.openjdk.org/jdk/pull/31727
