Do not rely on ArrayIndexOOBE
in new-Vector Vector.{head,last}
.
#8827
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is necessary for Scala.js, where
ArrayIndexOutOfBoundsException
s are Undefined Behavior, and cannot be reliably caught.Those methods throw a
NoSuchElementException
for an empty vector, and those exceptions have never been considered UB in Scala.js before. It is therefore a breach of contract forVector.{head,last}
to become UB on empty vectors.There are many other places where we catch AIOOBEs, but in those other places we throw an
IndexOutOfBoundsException
instead. While it is not quite correct to turn them into UBs either, at least there is precedent for OOBEs to be considered UB in Scala.js. So this commit does not change them, being afraid of the consequences to JVM performance.It is still bad, though (index out of bounds on Scala collections were never UB before), but at least it is a bit less bad than before.
This combines with #8828 to fix scala/bug#11920.