about summary refs log tree commit diff
path: root/compiler/rustc_index
diff options
context:
space:
mode:
authorKirill Podoprigora <kirill.bast9@mail.ru>2025-03-11 22:57:01 +0200
committerKirill Podoprigora <kirill.bast9@mail.ru>2025-03-11 22:57:01 +0200
commit64d143326f222ef477044d846e7e8f09ac6d6a3a (patch)
tree66b29385c8a5ea19bf4e12fcd76c398da3cc95d4 /compiler/rustc_index
parentf2d69d5a7c04617d122facd0a7a5bdde0af928ae (diff)
downloadrust-64d143326f222ef477044d846e7e8f09ac6d6a3a.tar.gz
rust-64d143326f222ef477044d846e7e8f09ac6d6a3a.zip
Refactor pick2_mut & pick3_mut to use get_disjoint_mut
Diffstat (limited to 'compiler/rustc_index')
-rw-r--r--compiler/rustc_index/src/slice.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/rustc_index/src/slice.rs b/compiler/rustc_index/src/slice.rs
index f17ea9e4b59..6e28d1ccf27 100644
--- a/compiler/rustc_index/src/slice.rs
+++ b/compiler/rustc_index/src/slice.rs
@@ -120,13 +120,12 @@ impl<I: Idx, T> IndexSlice<I, T> {
     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);
 
-        if ai < bi {
-            let (c1, c2) = self.raw.split_at_mut(bi);
-            (&mut c1[ai], &mut c2[0])
-        } else {
-            let (c2, c1) = self.pick2_mut(b, a);
-            (c1, c2)
+        match self.raw.get_disjoint_mut([ai, bi]) {
+            Ok([a, b]) => (a, b),
+            Err(_) => panic!("Can't get mutable references"),
         }
     }
 
@@ -139,8 +138,11 @@ impl<I: Idx, T> IndexSlice<I, T> {
         assert!(ai != bi && bi != ci && ci != ai);
         let len = self.raw.len();
         assert!(ai < len && bi < len && ci < len);
-        let ptr = self.raw.as_mut_ptr();
-        unsafe { (&mut *ptr.add(ai), &mut *ptr.add(bi), &mut *ptr.add(ci)) }
+
+        match self.raw.get_disjoint_mut([ai, bi, ci]) {
+            Ok([a, b, c]) => (a, b, c),
+            Err(_) => panic!("Can't get mutable references"),
+        }
     }
 
     #[inline]