diff options
| -rw-r--r-- | library/alloc/src/raw_vec.rs | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index 5cf190423e3..f73b3866c9c 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -168,15 +168,9 @@ impl<T, A: Allocator> RawVec<T, A> { #[cfg(not(no_global_oom_handling))] fn allocate_in(capacity: usize, init: AllocInit, alloc: A) -> Self { - if mem::size_of::<T>() == 0 { + // Don't allocate here because `Drop` will not deallocate when `capacity` is 0. + if mem::size_of::<T>() == 0 || capacity == 0 { Self::new_in(alloc) - } else if capacity == 0 { - // Don't allocate here because `Drop` will not deallocate when `capacity` is 0. - Self { - ptr: unsafe { Unique::new_unchecked(NonNull::dangling().as_ptr()) }, - cap: capacity, - alloc, - } } else { // We avoid `unwrap_or_else` here because it bloats the amount of // LLVM IR generated. |
