From 1620ec58406fe122e7d3c141ad33c462484ee4ae Mon Sep 17 00:00:00 2001 From: Lukas Bergdoll Date: Sat, 29 Jul 2023 12:16:52 +0200 Subject: [PATCH] Replace assert! with intrinsics::abort() This shrinks the binary-size for things that should never happen and are considred logic bugs, but allows for safer function interfaces. --- src/merge.rs | 6 +++++- src/smallsort.rs | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/merge.rs b/src/merge.rs index c2dfcab..ad5b82b 100644 --- a/src/merge.rs +++ b/src/merge.rs @@ -1,4 +1,5 @@ use core::cmp; +use core::intrinsics; use core::mem::MaybeUninit; use core::ptr; @@ -154,7 +155,10 @@ where F: FnMut(&T, &T) -> bool, { let len = v.len(); - assert!(mid > 0 && mid < len && scratch.len() >= (cmp::min(mid, len - mid))); + + if mid == 0 || mid >= len || scratch.len() < cmp::min(mid, len - mid) { + intrinsics::abort(); + } // SAFETY: We checked that the two slices must be non-empty and `mid` must be in bounds. The // caller has to guarantee that Buffer `buf` must be long enough to hold a copy of the shorter diff --git a/src/smallsort.rs b/src/smallsort.rs index 9a36382..c2a8a48 100644 --- a/src/smallsort.rs +++ b/src/smallsort.rs @@ -95,8 +95,9 @@ where { let len = v.len(); - // Using assert here improves performance. - assert!(offset != 0 && offset <= len); + if offset == 0 || offset > len { + intrinsics::abort(); + } // Shift each element of the unsorted region v[i..] as far left as is needed to make v sorted. for i in offset..len {