From 26db71783f5611ed2d7898e9a4b08c1651eb9bdc Mon Sep 17 00:00:00 2001 From: Michael Layzell Date: Tue, 3 Nov 2015 13:03:36 -0500 Subject: [PATCH] Correct incorrect assertion in VecDeque::wrap_copy --- src/libcollections/vec_deque.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs index 937ace00fdc..67db0227cbe 100644 --- a/src/libcollections/vec_deque.rs +++ b/src/libcollections/vec_deque.rs @@ -148,9 +148,9 @@ impl VecDeque { /// Copies a contiguous block of memory len long from src to dst #[inline] unsafe fn copy(&self, dst: usize, src: usize, len: usize) { - debug_assert!(dst + len <= self.cap(), "dst={} src={} len={} cap={}", dst, src, len, + debug_assert!(dst + len <= self.cap(), "cpy dst={} src={} len={} cap={}", dst, src, len, self.cap()); - debug_assert!(src + len <= self.cap(), "dst={} src={} len={} cap={}", dst, src, len, + debug_assert!(src + len <= self.cap(), "cpy dst={} src={} len={} cap={}", dst, src, len, self.cap()); ptr::copy( self.ptr().offset(src as isize), @@ -161,9 +161,9 @@ impl VecDeque { /// Copies a contiguous block of memory len long from src to dst #[inline] unsafe fn copy_nonoverlapping(&self, dst: usize, src: usize, len: usize) { - debug_assert!(dst + len <= self.cap(), "dst={} src={} len={} cap={}", dst, src, len, + debug_assert!(dst + len <= self.cap(), "cno dst={} src={} len={} cap={}", dst, src, len, self.cap()); - debug_assert!(src + len <= self.cap(), "dst={} src={} len={} cap={}", dst, src, len, + debug_assert!(src + len <= self.cap(), "cno dst={} src={} len={} cap={}", dst, src, len, self.cap()); ptr::copy_nonoverlapping( self.ptr().offset(src as isize), @@ -175,9 +175,11 @@ impl VecDeque { /// (abs(dst - src) + len) must be no larger than cap() (There must be at /// most one continuous overlapping region between src and dest). unsafe fn wrap_copy(&self, dst: usize, src: usize, len: usize) { - debug_assert!( - (if src <= dst { dst - src } else { src - dst }) + len <= self.cap(), - "dst={} src={} len={} cap={}", dst, src, len, self.cap()); + #[allow(dead_code)] + fn diff(a: usize, b: usize) -> usize {if a <= b {b - a} else {a - b}} + debug_assert!(cmp::min(diff(dst, src), + self.cap() - diff(dst, src)) + len <= self.cap(), + "wrc dst={} src={} len={} cap={}", dst, src, len, self.cap()); if src == dst || len == 0 { return }