On Mon, 29 Jan 2024 19:45:41 GMT, Paul Sandoz <[email protected]> wrote:
> The implementation of method `VectorSpecies::fromMemorySegment`, in
> `AbstractSpecies::fromMemorySegment`, neglects to perform bounds checks on
> the offset argument when the method is compiled by C2 (bounds checks are
> performed when interpreted and by C1).
>
> This is an oversight and explicit bounds checks are required, as is already
> case for the other load and store memory access methods (including storing to
> memory memory segments).
>
> The workaround is to call the static method `{T}Vector::fromMemorySegment`.
>
> The fix is for the implementation(s) of `VectorSpecies::fromMemorySegment` to
> do the same and call `{T}Vector::fromMemorySegment`, following the same
> pattern for implementations of `VectorSpecies::fromArray`.
>
> The tests have been conservatively updated to call the species access method
> where possible in the knowledge that it calls the vector access method (the
> tests were intended to test out of bounds access when compiled by C2).
>
> Thinking ahead its tempting to remove the species access methods, simplifying
> functionality that is duplicated.
Marked as reviewed by jbhateja (Reviewer).
-------------
PR Review: https://git.openjdk.org/jdk/pull/17621#pullrequestreview-1856297285