Fix Rc/Arc allocation layout#55764
Fix Rc/Arc allocation layout#55764bors merged 1 commit intorust-lang:masterfrom murarth:fix-rc-alloc
Conversation
|
r? @dtolnay (rust_highfive has picked a reviewer for you, use r? to override) |
|
r? @RalfJung |
|
This PR adds a new method I'm not sure if this is acceptable or if futher discussion is required. That's why I've cc'd the relevant tracking issue for these methods. |
src/liballoc/rc.rs
Outdated
There was a problem hiding this comment.
I personally would find this more readable if you unwrapped early and avoided and_then:
let layout = Layout::new::<RcBox<()>>()
.extend(Layout::for_value(&*ptr)).unwrap().0
.pad_to_align().unwrap();|
The Rc/Arc part looks good to me. Cc @Amanieu are you okay with the new unstable method on |
src/libcore/alloc.rs
Outdated
There was a problem hiding this comment.
Can you change this to use the new feature name and tracking issue from #55366?
* Rounds allocation layout up to a multiple of alignment * Adds a convenience method `Layout::pad_to_align` to perform rounding
|
I've made the requested changes and the tests have passed. |
|
📌 Commit 317f494 has been approved by |
|
@RalfJung Will do. Sorry about that. I thought amending was the expected convention. |
Fix Rc/Arc allocation layout * Rounds allocation layout up to a multiple of alignment * Adds a convenience method `Layout::pad_to_align` to perform rounding Closes rust-lang#55747 cc rust-lang#55724
Rollup of 17 pull requests Successful merges: - #55630 (resolve: Filter away macro prelude in modules with `#[no_implicit_prelude]` on 2018 edition) - #55687 (Take supertraits into account when calculating associated types) - #55745 (Convert `outlives_components`' return value to a `SmallVec` outparam.) - #55764 (Fix Rc/Arc allocation layout) - #55792 (Prevent ICE in const-prop array oob check) - #55799 (Removed unneeded instance of `// revisions` from a lint test) - #55800 (Fix ICE in `return_type_impl_trait`) - #55801 (NLL: Update box insensitivity test) - #55802 (Don't inline virtual calls (take 2)) - #55816 (Use `SmallVec` to avoid allocations in `from_decimal_string`.) - #55819 (Typecheck patterns of all match arms first, so we get types for bindings) - #55822 (ICE with #![feature(nll)] and elided lifetimes) - #55828 (Add missing `rustc_promotable` attribute to unsigned `min_value` and `max_value`) - #55839 (Fix docstring spelling mistakes) - #55844 (Fix documentation typos.) - #55845 (Set BINARYEN_TRAP_MODE=clamp) - #55856 (rustdoc: refactor: move all static-file include!s into a single module)
| let new_size = self.size().checked_add(pad) | ||
| .ok_or(LayoutErr { private: () })?; | ||
|
|
||
| Layout::from_size_align(new_size, self.align()) |
There was a problem hiding this comment.
This could be from_size_align_unchecked, right?
|
With this, miri's |
Layout::pad_to_alignto perform roundingCloses #55747
cc #55724