rust/library
bors 85237886df Auto merge of #85874 - steffahn:fix_unsound_zip_optimization, r=yaahc
Remove unsound TrustedRandomAccess implementations

Removes the implementations that depend on the user-definable trait `Copy`.

Fixes #85873 in the most straightforward way.

<hr>

_Edit:_ This PR now contains additional trait infrastructure to avoid performance regressions around in-place collect, see the discussion in this thread starting from the codegen test failure at https://github.com/rust-lang/rust/pull/85874#issuecomment-872327577.

With this PR, `TrustedRandomAccess` gains additional documentation that specifically allows for and specifies the safety conditions around subtype coercions – those coercions can happen in safe Rust code with the `Zip` API’s usage of `TrustedRandomAccess`. This PR introduces a new supertrait of `TrustedRandomAccess`(currently named `TrustedRandomAccessNoCoerce`) that _doesn’t allow_ such coercions, which means it can be still be useful for optimizing cases such as in-place collect where no iterator is handed out to a user (who could do coercions) after a `get_unchecked` call; the benefit of the supertrait is that it doesn’t come with the additional safety conditions around supertraits either, so it can be implemented for more types than `TrustedRandomAccess`.

The `TrustedRandomAccess` implementations for `vec::IntoIter`, `vec_deque::IntoIter`, and `array::IntoIter` are removed as they don’t conform with the newly documented safety conditions, this way unsoundness is removed. But this PR in turn (re-)adds a `TrustedRandomAccessNoCoerce` implementation for `vec::IntoIter` to avoid performance regressions from stable in a case of in-place collecting of `Vec`s [the above-mentioned codegen test failure]. Re-introducing the (currently nightly+beta-only) impls for `VecDeque`’s and `[T; N]`’s iterators is technically possible, but goes beyond the scope of this PR (i.e. it can happen in a future PR).
2021-07-29 00:31:07 +00:00
..
alloc Auto merge of #85874 - steffahn:fix_unsound_zip_optimization, r=yaahc 2021-07-29 00:31:07 +00:00
backtrace@221483ebaf
core Auto merge of #85874 - steffahn:fix_unsound_zip_optimization, r=yaahc 2021-07-29 00:31:07 +00:00
panic_abort
panic_unwind Remove the deprecated core::raw and std::raw module. 2021-07-03 14:03:27 +08:00
proc_macro Rollup merge of #84029 - drahnr:master, r=petrochenkov 2021-07-03 03:15:07 +09:00
profiler_builtins Upgrade cc crate to 1.0.69 2021-07-13 17:58:50 +09:00
rtstartup
rustc-std-workspace-alloc
rustc-std-workspace-core
rustc-std-workspace-std
std Rollup merge of #86839 - D1mon:patch-1, r=JohnTitor 2021-07-29 06:11:43 +09:00
stdarch@3001c75a1d
test Remove unused stuff and switch to pub(crate) whenever possible. 2021-07-18 22:00:41 +08:00
unwind Upgrade cc crate to 1.0.69 2021-07-13 17:58:50 +09:00