about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-05-30 13:45:02 +0200
committerGitHub <noreply@github.com>2020-05-30 13:45:02 +0200
commit93d45a01e79cf80ed5e4ffa85cdaa096c440dff3 (patch)
tree44849ef9c57e43d4a2e96e650ebedb3f8e92a7a9 /src/rustllvm/RustWrapper.cpp
parent35db8196f93a717173a8e58b076dd7c6d845629f (diff)
parent406852ae0d92e5dfda890fa75ac522963065f903 (diff)
downloadrust-93d45a01e79cf80ed5e4ffa85cdaa096c440dff3.tar.gz
rust-93d45a01e79cf80ed5e4ffa85cdaa096c440dff3.zip
Rollup merge of #72368 - CAD97:rangeto, r=dtolnay
Resolve overflow behavior for RangeFrom

This specifies a documented unspecified implementation detail of `RangeFrom` and makes it consistently implement the specified behavior.

Specifically, `(u8::MAX).next()` is defined to cause an overflow, and resolve that overflow in the same manner as the `Step::forward` implementation.

The inconsistency that has existed is `<RangeFrom as Iterator>::nth`. The existing behavior should be plain to see after #69659: the skipping part previously always panicked if it caused an overflow, but the final step (to set up the state for further iteration) has always been debug-checked.

The inconsistency, then, is that `RangeFrom::nth` does not implement the same behavior as the naive (and default) implementation of just calling `next` multiple times. This PR aligns `RangeFrom::nth` to have identical behavior to the naive implementation. It also lines up with the standard behavior of primitive math in Rust everywhere else in the language: debug checked overflow.

cc @Amanieu

---

Followup to #69659. Closes #25708 (by documenting the panic as intended).

The documentation wording is preliminary and can probably be improved.

This will probably need an FCP, as it changes observable stable behavior.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions