about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2019-10-16 20:32:58 +0200
committerSimon Sapin <simon.sapin@exyr.org>2019-10-16 20:32:58 +0200
commitca1cfdab78d1966efd492cd550a3684f3b95527c (patch)
tree5ebfb66f91a01543d3e24eb8d2f1598decaf054b /src/liballoc
parent23d3ff1b9756c768c4412dcd1d80cff0617fd5c5 (diff)
downloadrust-ca1cfdab78d1966efd492cd550a3684f3b95527c.tar.gz
rust-ca1cfdab78d1966efd492cd550a3684f3b95527c.zip
Uninitialized boxes: check for zero-size allocation based on Layout::size
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/boxed.rs8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs
index 2693a64e13b..567b8ea7224 100644
--- a/src/liballoc/boxed.rs
+++ b/src/liballoc/boxed.rs
@@ -141,10 +141,10 @@ impl<T> Box<T> {
     /// ```
     #[unstable(feature = "new_uninit", issue = "63291")]
     pub fn new_uninit() -> Box<mem::MaybeUninit<T>> {
-        if mem::size_of::<T>() == 0 {
+        let layout = alloc::Layout::new::<mem::MaybeUninit<T>>();
+        if layout.size() == 0 {
             return Box(NonNull::dangling().into())
         }
-        let layout = alloc::Layout::new::<mem::MaybeUninit<T>>();
         let ptr = unsafe {
             Global.alloc(layout)
                 .unwrap_or_else(|_| alloc::handle_alloc_error(layout))
@@ -184,10 +184,10 @@ impl<T> Box<[T]> {
     /// ```
     #[unstable(feature = "new_uninit", issue = "63291")]
     pub fn new_uninit_slice(len: usize) -> Box<[mem::MaybeUninit<T>]> {
-        let ptr = if mem::size_of::<T>() == 0 || len == 0 {
+        let layout = alloc::Layout::array::<mem::MaybeUninit<T>>(len).unwrap();
+        let ptr = if layout.size() == 0 {
             NonNull::dangling()
         } else {
-            let layout = alloc::Layout::array::<mem::MaybeUninit<T>>(len).unwrap();
             unsafe {
                 Global.alloc(layout)
                     .unwrap_or_else(|_| alloc::handle_alloc_error(layout))