-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Rc/Arc allocation layout #55764
Fix Rc/Arc allocation layout #55764
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
.extend(Layout::for_value(&*ptr)).unwrap(); | ||
let layout = Layout::new::<RcBox<()>>() | ||
.extend(Layout::for_value(&*ptr)) | ||
.and_then(|(layout, _)| layout.pad_to_align()).unwrap(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
/// | ||
/// This is equivalent to adding the result of `padding_needed_for` | ||
/// to the layout's current size. | ||
#[unstable(feature = "allocator_api", issue = "32838")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be from_size_align_unchecked
, right?
With this, miri's |
Layout::pad_to_align
to perform roundingCloses #55747
cc #55724