From 41f3ec5a36ba6a83070f94f98b7731b296b18c41 Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 17 Oct 2026 17:18:37 +0200 Subject: [PATCH 1/5] fix: correct inline repr --- src/lib.rs | 14 +++++++------- src/rawsmallvec.rs | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fa03ac5e..5a83c435 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -147,7 +147,7 @@ impl SmallVec { // Although we create a new buffer, since S and INLINE are known at // compile time, even with `-C opt-level=1`, it gets optimized // as best as it could be. (Checked with ) - let mut buf: MaybeUninit<[Item; INLINE]> = MaybeUninit::uninit(); + let mut buf: [MaybeUninit; INLINE] = [const { MaybeUninit::uninit() }; INLINE]; // SAFETY: buf and elements do not overlap, are aligned and have space // for at least S elements since S <= INLINE. @@ -162,7 +162,7 @@ impl SmallVec { // SAFETY: all the members in 0..S are initialized Self { length: LocatedLength::new(S, false), - raw: RawSmallVec::new_inline(buf), + raw: RawSmallVec::inline(buf), allocator: Global } } @@ -173,7 +173,7 @@ impl SmallVec { // SAFETY: all the members in 0..length are initialized let mut vec = Self { length: LocatedLength::new(length, false), - raw: RawSmallVec::new_inline(MaybeUninit::new(buf)), + raw: RawSmallVec::inline(buf.map(MaybeUninit::new)), allocator: Global }; // Deallocate the remaining elements so no memory is leaked. @@ -218,13 +218,13 @@ impl SmallVec { /// initialized #[inline] pub const unsafe fn from_buf_and_len_unchecked( - buf: MaybeUninit<[Item; INLINE]>, + buf: [MaybeUninit; INLINE], length: usize ) -> Self { debug_assert!(length <= INLINE); Self { length: LocatedLength::new(length, false), - raw: RawSmallVec::new_inline(buf), + raw: RawSmallVec::inline(buf), allocator: Global } } @@ -270,7 +270,7 @@ impl SmallVec { Self { length: LocatedLength::new(length, true), - raw: RawSmallVec::new_heap(ptr, cap), + raw: RawSmallVec::heap(ptr, cap), allocator: Global } } @@ -356,7 +356,7 @@ impl SmallVec { SmallVec { length: LocatedLength::new(length, true), - raw: RawSmallVec::new_heap(ptr, capacity), + raw: RawSmallVec::heap(ptr, capacity), allocator: Global } } diff --git a/src/rawsmallvec.rs b/src/rawsmallvec.rs index b10b4845..7508126f 100644 --- a/src/rawsmallvec.rs +++ b/src/rawsmallvec.rs @@ -19,7 +19,7 @@ use { #[repr(C)] pub union RawSmallVec { - pub inline: ManuallyDrop>, + pub inline: ManuallyDrop<[MaybeUninit; INLINE]>, pub heap: (NonNull, usize) } @@ -29,18 +29,18 @@ impl RawSmallVec { #[inline] pub const fn new() -> Self { - Self::new_inline(MaybeUninit::uninit()) + Self::inline([const { MaybeUninit::uninit() }; INLINE]) } #[inline] - pub const fn new_inline(inline: MaybeUninit<[Item; INLINE]>) -> Self { + pub const fn inline(inline: [MaybeUninit; INLINE]) -> Self { Self { inline: ManuallyDrop::new(inline) } } #[inline] - pub const fn new_heap(ptr: NonNull, capacity: usize) -> Self { + pub const fn heap(ptr: NonNull, capacity: usize) -> Self { Self { heap: (ptr, capacity) } From 3a08432d4e60f3450378baf455747304b018c333 Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 17 Oct 2026 17:22:38 +0200 Subject: [PATCH 2/5] fix: doctest --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 5a83c435..7f23f4b8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -207,7 +207,7 @@ impl SmallVec { /// }; /// /// let buf = [1, 2, 3, 4, 5, 0, 0, 0]; - /// let small_vec = unsafe { SmallVec::from_buf_and_len_unchecked(MaybeUninit::new(buf), 5) }; + /// let small_vec = unsafe { SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5) }; /// /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]); /// ``` From 87445894f5c92b7ac2628fc677c96eb0bc215da6 Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 17 Oct 2026 17:24:54 +0200 Subject: [PATCH 3/5] style: formatting --- src/lib.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 7f23f4b8..35d7f43e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -207,7 +207,9 @@ impl SmallVec { /// }; /// /// let buf = [1, 2, 3, 4, 5, 0, 0, 0]; - /// let small_vec = unsafe { SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5) }; + /// let small_vec = unsafe { + /// SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5) + /// }; /// /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]); /// ``` From 52e6614301aa7bfb3412f96a00e8950f62cf0c8d Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 17 Oct 2026 17:25:29 +0200 Subject: [PATCH 4/5] style: formatting --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 35d7f43e..1dce5afb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -207,8 +207,8 @@ impl SmallVec { /// }; /// /// let buf = [1, 2, 3, 4, 5, 0, 0, 0]; - /// let small_vec = unsafe { - /// SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5) + /// let small_vec = unsafe { + /// SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5); /// }; /// /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]); From 8391bc744c22f1abfefbed5c065459d10dc4edcd Mon Sep 17 00:00:00 2001 From: Alejandro Vaz Date: Sat, 17 Oct 2026 17:27:09 +0200 Subject: [PATCH 5/5] style: formatting --- src/lib.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1dce5afb..a8ef10f6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -207,11 +207,9 @@ impl SmallVec { /// }; /// /// let buf = [1, 2, 3, 4, 5, 0, 0, 0]; - /// let small_vec = unsafe { - /// SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5); - /// }; + /// let sv = unsafe { SmallVec::from_buf_and_len_unchecked(buf.map(MaybeUninit::new), 5) }; /// - /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]); + /// assert_eq!(&*sv, &[1, 2, 3, 4, 5]); /// ``` /// /// # Safety