On Fri, 21 Nov 2025 17:26:59 GMT, Igor Rudenko <[email protected]> wrote:

>> Logic for creating IndexOutOfBoundsException in MemorySegment is reworked:
>> - separate logic of checking bounds and constructing exception messages for 
>> both `access` and `slice` cases 
>> - idea presented in 
>> [JDK-8288534](https://bugs.openjdk.org/browse/JDK-8288534) slightly reworked 
>> with preservation of the original approach
>
> Igor Rudenko has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   implement re-throwing approach according to reviewer recomandation

This should be fine, though compilers might prefer separate not-inlined methods 
for throwing exceptions, so the `catch` block may do  something like:

    @ForceInline
    void checkSliceBounds(long offset, long length) {
        try {
            checkBounds(offset, length);
        } catch (IndexOutOfBoundsException e) {
            throwOutOfBounds(offset, length, true);
        }
    }

    @DontInline
    void throwOutOfBounds(long offset, long length, boolean slice) {
            String msg = String.format("Out of bound access on segment %s; 
attempting to %s of length %d at offset %d " +
                    "which is outside the valid range 0 <= offset+length < 
byteSize (=%d)", this, slice ? "get slice" : "access an element", length, 
offset, this.length);
            throw new IndexOutOfBoundsException(msg);
        }
    }


So the inlined `checkSliceBounds`/`checkAccessBounds` is smaller.

-------------

Marked as reviewed by liach (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/28124#pullrequestreview-3516725181

Reply via email to