From f40e708f7c2afa6fcd4a3fc509916757e053d142 Mon Sep 17 00:00:00 2001 From: bluss Date: Sun, 25 Nov 2018 16:37:29 +0100 Subject: [PATCH] FIX: In truncate, don't access self while holding raw pointer derived from self Again, stacked borrows model makes the `self.set_len()` call illegal because we are holding (and are going to use) another raw pointer derived from self, `tail`. --- src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fb40456..e40b0a5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -461,11 +461,11 @@ impl ArrayVec { /// array.truncate(4); /// assert_eq!(&array[..], &[1, 2, 3]); /// ``` - pub fn truncate(&mut self, len: usize) { + pub fn truncate(&mut self, new_len: usize) { unsafe { - if len < self.len() { - let tail: *mut [_] = &mut self[len..]; - self.set_len(len); + if new_len < self.len() { + let tail: *mut [_] = &mut self[new_len..]; + self.len = Index::from(new_len); ptr::drop_in_place(tail); } }