Revert Vec::spare_capacity_mut impl to prevent pointers invalidation#82564
Revert Vec::spare_capacity_mut impl to prevent pointers invalidation#82564bors merged 4 commits intorust-lang:masterfrom
Vec::spare_capacity_mut impl to prevent pointers invalidation#82564Conversation
|
Thanks! The implementation looks good, but we should also add a testcase in this function. Something like this should do it: // spare_capacity_mut
v.spare_capacity_mut();
assert_eq!(*v0, 13); |
|
@RalfJung I've tried adding the test, but it fails under miri. Backtrace
I would assume that the unique reference to the same allocation somewhat invalidates the pointer, but I'm not familiar enough with stacked borrows to be sure 😅 |
|
It still fails even with this PR? Uh... interesting. I might have to check out your branch and test locally, but it could be a few days until I have the time for that. Is line 1696 the new assert one that you added? |
|
You could run with |
Oh, well. Turns out, it's not. When I run the test with I assume there was a problem with caching, because after I run this: Test started passing. I've also changed |
Uh, so now I have to understand that function's implementation as well to review this PR.^^ EDIT: Ah, |
|
Aside from that comment nit, LGTM. Thanks! |
Co-authored-by: Ralf Jung <post@ralfj.de>
Yeah, sorry 😅
It reuses safe method ( EDIT: ooops, I'm a bit slow :p |
|
@bors r+ rollup |
|
📌 Commit 950f121 has been approved by |
…lfJung Revert `Vec::spare_capacity_mut` impl to prevent pointers invalidation The implementation was changed in rust-lang#79015. Later it was [pointed out](rust-lang#81944 (comment)) that the implementation invalidates pointers to the buffer (initialized elements) by creating a unique reference to the buffer. This PR reverts the implementation. r? `@RalfJung`
…lfJung Revert `Vec::spare_capacity_mut` impl to prevent pointers invalidation The implementation was changed in rust-lang#79015. Later it was [pointed out](rust-lang#81944 (comment)) that the implementation invalidates pointers to the buffer (initialized elements) by creating a unique reference to the buffer. This PR reverts the implementation. r? ``@RalfJung``
Rollup of 8 pull requests Successful merges: - rust-lang#80527 (Make rustdoc lints a tool lint instead of built-in) - rust-lang#82310 (Load rustdoc's JS search index on-demand.) - rust-lang#82315 (Improve page load performance in rustdoc) - rust-lang#82564 (Revert `Vec::spare_capacity_mut` impl to prevent pointers invalidation) - rust-lang#82697 (Fix stabilization version of move_ref_pattern) - rust-lang#82717 (Account for macros when suggesting adding lifetime) - rust-lang#82740 (Fix commit detected when using `download-rustc`) - rust-lang#82744 (Pass `CrateNum` by value instead of by reference) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
The implementation was changed in #79015.
Later it was pointed out that the implementation invalidates pointers to the buffer (initialized elements) by creating a unique reference to the buffer. This PR reverts the implementation.
r? @RalfJung