diff --git a/library/alloc/src/collections/vec_deque/mod.rs b/library/alloc/src/collections/vec_deque/mod.rs index 1573b3d77dc16..3b9ae7e0a7bf9 100644 --- a/library/alloc/src/collections/vec_deque/mod.rs +++ b/library/alloc/src/collections/vec_deque/mod.rs @@ -981,7 +981,7 @@ impl VecDeque { unsafe { self.copy_nonoverlapping(target_cap, 0, len); } - } else if self.head >= target_cap { + } else if !self.is_contiguous() { // H := head // L := last element // L H diff --git a/library/alloc/src/collections/vec_deque/tests.rs b/library/alloc/src/collections/vec_deque/tests.rs index 220ad71beabd4..12ccb7c210eaf 100644 --- a/library/alloc/src/collections/vec_deque/tests.rs +++ b/library/alloc/src/collections/vec_deque/tests.rs @@ -1130,3 +1130,15 @@ fn issue_80303() { assert_eq!(vda, vdb); assert_eq!(hash_code(vda), hash_code(vdb)); } + +#[test] +fn issue_108453_shrink_to() { + let mut deque = VecDeque::with_capacity(10); + + deque.push_back(1u8); + deque.push_front(10); + deque.push_front(9); + deque.shrink_to(9); + + assert_eq!(deque, [9, 10, 1]); +}