While playing with the API, I've realized that some of the out of bound error messgaes come out incorrectly.
This is because the bound check is performed as follows (to avoid overflow): Objects.checkIndex(offset, this.length - length + 1); So, if out-of-bounds access is detected, the resulting exception mentions the values of the first and second parameter, respectively - but since the second parameter is the result of a subtraction, it doesn't make sense. The solution is not to use `Objects.checkIndex` directly, but, instead, drop down one level, and pass our own "IOOB formatter": Preconditions.checkIndex(offset, this.length - length + 1, this); Note that, in order to recover the correct values, the formatter needs to know the segment size - so I made `AbstractMemorySegment` act as a formatter (so we don't need to allocate in such a hot path). The fix seems to bring back the desired messages - but I would like some confirmation that doing this won't disrupt intrinsification of the `checkIndex` method. ------------- Commit messages: - Initial push Changes: https://git.openjdk.org/jdk19/pull/24/files Webrev: https://webrevs.openjdk.org/?repo=jdk19&pr=24&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8288534 Stats: 24 lines in 2 files changed: 21 ins; 0 del; 3 mod Patch: https://git.openjdk.org/jdk19/pull/24.diff Fetch: git fetch https://git.openjdk.org/jdk19 pull/24/head:pull/24 PR: https://git.openjdk.org/jdk19/pull/24