diff options
| author | Kirill Podoprigora <kirill.bast9@mail.ru> | 2025-03-12 00:35:16 +0200 |
|---|---|---|
| committer | Kirill Podoprigora <kirill.bast9@mail.ru> | 2025-03-12 00:35:16 +0200 |
| commit | 7398b39a0bfae6c778379b46f2d9e957c94f4f0d (patch) | |
| tree | 5a678eb8bd4ef6fbd220f95ac4062ac64d7a2979 | |
| parent | 64d143326f222ef477044d846e7e8f09ac6d6a3a (diff) | |
| download | rust-7398b39a0bfae6c778379b46f2d9e957c94f4f0d.tar.gz rust-7398b39a0bfae6c778379b46f2d9e957c94f4f0d.zip | |
Make panic's more specific
| -rw-r--r-- | compiler/rustc_index/src/slice.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/compiler/rustc_index/src/slice.rs b/compiler/rustc_index/src/slice.rs index 6e28d1ccf27..1f19d8c66f0 100644 --- a/compiler/rustc_index/src/slice.rs +++ b/compiler/rustc_index/src/slice.rs @@ -1,6 +1,7 @@ use std::fmt; use std::marker::PhantomData; use std::ops::{Index, IndexMut}; +use std::slice::GetDisjointMutError::*; use std::slice::{self, SliceIndex}; use crate::{Idx, IndexVec, IntoSliceIdx}; @@ -115,33 +116,35 @@ impl<I: Idx, T> IndexSlice<I, T> { /// Returns mutable references to two distinct elements, `a` and `b`. /// - /// Panics if `a == b`. + /// Panics if `a == b` or if some of them are out of bounds. #[inline] pub fn pick2_mut(&mut self, a: I, b: I) -> (&mut T, &mut T) { let (ai, bi) = (a.index(), b.index()); - assert!(ai != bi); - let len = self.raw.len(); - assert!(ai < len && bi < len); match self.raw.get_disjoint_mut([ai, bi]) { Ok([a, b]) => (a, b), - Err(_) => panic!("Can't get mutable references"), + Err(OverlappingIndices) => panic!("Indices {ai:?} and {bi:?} are not disjoint!"), + Err(IndexOutOfBounds) => { + panic!("Some indices among ({ai:?}, {bi:?}) are out of bounds") + } } } /// Returns mutable references to three distinct elements. /// - /// Panics if the elements are not distinct. + /// Panics if the elements are not distinct or if some of them are out of bounds. #[inline] pub fn pick3_mut(&mut self, a: I, b: I, c: I) -> (&mut T, &mut T, &mut T) { let (ai, bi, ci) = (a.index(), b.index(), c.index()); - assert!(ai != bi && bi != ci && ci != ai); - let len = self.raw.len(); - assert!(ai < len && bi < len && ci < len); match self.raw.get_disjoint_mut([ai, bi, ci]) { Ok([a, b, c]) => (a, b, c), - Err(_) => panic!("Can't get mutable references"), + Err(OverlappingIndices) => { + panic!("Indices {ai:?}, {bi:?} and {ci:?} are not disjoint!") + } + Err(IndexOutOfBounds) => { + panic!("Some indices among ({ai:?}, {bi:?}, {ci:?}) are out of bounds") + } } } |
