diff --git a/library/core/src/slice/mod.rs b/library/core/src/slice/mod.rs index 0e5c5ee726e54..9611c83e2c245 100644 --- a/library/core/src/slice/mod.rs +++ b/library/core/src/slice/mod.rs @@ -3468,27 +3468,7 @@ impl [T] { where P: FnMut(&T) -> bool, { - let mut left = 0; - let mut right = self.len(); - - while left != right { - let mid = left + (right - left) / 2; - // SAFETY: When `left < right`, `left <= mid < right`. - // Therefore `left` always increases and `right` always decreases, - // and either of them is selected. In both cases `left <= right` is - // satisfied. Therefore if `left < right` in a step, `left <= right` - // is satisfied in the next step. Therefore as long as `left != right`, - // `0 <= left < right <= len` is satisfied and if this case - // `0 <= mid < len` is satisfied too. - let value = unsafe { self.get_unchecked(mid) }; - if pred(value) { - left = mid + 1; - } else { - right = mid; - } - } - - left + self.binary_search_by(|x| if pred(x) { Less } else { Greater }).unwrap_or_else(|i| i) } }