diff options
| author | Mike Hommey <mh@glandium.org> | 2018-04-20 10:24:53 +0900 |
|---|---|---|
| committer | Mike Hommey <mh@glandium.org> | 2018-04-25 11:39:07 +0900 |
| commit | bd8c177d49c95d94f163e9bb3c3397f38ab72640 (patch) | |
| tree | e38da85ae2387fb6fb9b3b3928438d93ce206adf /src/liballoc/alloc.rs | |
| parent | 64f5233c445406cc576b9ce371af3211c05a26e4 (diff) | |
| download | rust-bd8c177d49c95d94f163e9bb3c3397f38ab72640.tar.gz rust-bd8c177d49c95d94f163e9bb3c3397f38ab72640.zip | |
Switch box_free to take the destructured contents of Box
As of now, Box only contains a Unique pointer, so this is the sole argument to box_free. Consequently, we remove the code supporting the previous box_free signature. We however keep the old definition for bootstrapping purpose.
Diffstat (limited to 'src/liballoc/alloc.rs')
| -rw-r--r-- | src/liballoc/alloc.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/liballoc/alloc.rs b/src/liballoc/alloc.rs index 68a617e0ffe..ed860678765 100644 --- a/src/liballoc/alloc.rs +++ b/src/liballoc/alloc.rs @@ -16,7 +16,7 @@ issue = "32838")] use core::intrinsics::{min_align_of_val, size_of_val}; -use core::ptr::NonNull; +use core::ptr::{NonNull, Unique}; use core::usize; #[doc(inline)] @@ -170,9 +170,17 @@ unsafe fn exchange_malloc(size: usize, align: usize) -> *mut u8 { } } -#[cfg_attr(not(test), lang = "box_free")] +#[cfg(stage0)] +#[lang = "box_free"] +#[inline] +unsafe fn old_box_free<T: ?Sized>(ptr: *mut T) { + box_free(Unique::new_unchecked(ptr)) +} + +#[cfg_attr(not(any(test, stage0)), lang = "box_free")] #[inline] -pub(crate) unsafe fn box_free<T: ?Sized>(ptr: *mut T) { +pub(crate) unsafe fn box_free<T: ?Sized>(ptr: Unique<T>) { + let ptr = ptr.as_ptr(); let size = size_of_val(&*ptr); let align = min_align_of_val(&*ptr); // We do not allocate for Box<T> when T is ZST, so deallocation is also not necessary. |
