diff options
Diffstat (limited to 'src/test/ui/issues/issue-23485.rs')
-rw-r--r-- | src/test/ui/issues/issue-23485.rs | 50 |
1 files changed, 0 insertions, 50 deletions
diff --git a/src/test/ui/issues/issue-23485.rs b/src/test/ui/issues/issue-23485.rs deleted file mode 100644 index 1dd3d9293..000000000 --- a/src/test/ui/issues/issue-23485.rs +++ /dev/null @@ -1,50 +0,0 @@ -// run-pass -#![allow(unused_imports)] -// Test for an ICE that occurred when a default method implementation -// was applied to a type that did not meet the prerequisites. The -// problem occurred specifically because normalizing -// `Self::Item::Target` was impossible in this case. - -use std::boxed::Box; -use std::marker::Sized; -use std::clone::Clone; -use std::ops::Deref; -use std::option::Option; -use std::option::Option::{Some,None}; - -trait Iterator { - type Item; - - fn next(&mut self) -> Option<Self::Item>; - - fn clone_first(mut self) -> Option<<Self::Item as Deref>::Target> where - Self: Sized, - Self::Item: Deref, - <Self::Item as Deref>::Target: Clone, - { - self.next().map(|x| x.clone()) - } -} - -struct Counter { - value: i32 -} - -struct Token { - value: i32 -} - -impl Iterator for Counter { - type Item = Token; - - fn next(&mut self) -> Option<Token> { - let x = self.value; - self.value += 1; - Some(Token { value: x }) - } -} - -fn main() { - let mut x: Box<dyn Iterator<Item=Token>> = Box::new(Counter { value: 22 }); - assert_eq!(x.next().unwrap().value, 22); -} |