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