Skip to content

Commit 3335c63

Browse files
committed
Fix TinyVec::resize across inline/heap boundary
1 parent d0bdff5 commit 3335c63

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

src/tiny_vec.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,12 @@ impl<A: Arrayish> TinyVec<A> {
405405
A::Item: Clone,
406406
{
407407
match self {
408-
TinyVec::Inline(a) => a.resize(new_len, new_val),
408+
TinyVec::Inline(a) => if new_len > A::CAPACITY {
409+
self.move_to_the_heap();
410+
self.resize(new_len, new_val);
411+
} else {
412+
a.resize(new_len, new_val);
413+
},
409414
TinyVec::Heap(v) => v.resize(new_len, new_val),
410415
}
411416
}

tests/tinyvec.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,10 @@ fn TinyVec_drain() {
3131
assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);
3232
assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);
3333
}
34+
35+
#[test]
36+
fn TinyVec_resize() {
37+
let mut tv: TinyVec<[i32; 10]> = Default::default();
38+
tv.resize(20, 5);
39+
assert_eq!(&tv[..], &[5; 20]);
40+
}

0 commit comments

Comments
 (0)