// run-pass // Test that a custom deref with a fat pointer return type does not ICE use std::ops::{Deref, DerefMut}; pub struct Arr { ptr: Box<[usize]> } impl Deref for Arr { type Target = [usize]; fn deref(&self) -> &[usize] { panic!(); } } impl DerefMut for Arr { fn deref_mut(&mut self) -> &mut [usize] { &mut *self.ptr } } pub fn foo(arr: &mut Arr) { let x: &mut [usize] = &mut **arr; assert_eq!(x[0], 1); assert_eq!(x[1], 2); assert_eq!(x[2], 3); } fn main() { let mut a = Arr { ptr: Box::new([1, 2, 3]) }; foo(&mut a); }