diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-06-23 17:52:26 +0900 |
|---|---|---|
| committer | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-06-23 17:52:26 +0900 |
| commit | 43ef554b6ab72c4cc3c56dab8e9b61021c63b3b7 (patch) | |
| tree | d1d31a8dc9371fb19fca4bc90bd3fbeff8e7d6ad | |
| parent | bb882d74bd00477395e8d302463148f0a5f8cfe6 (diff) | |
Add test for issue-51506
| -rw-r--r-- | src/test/ui/never_type/issue-51506.rs | 41 | ||||
| -rw-r--r-- | src/test/ui/never_type/issue-51506.stderr | 14 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/test/ui/never_type/issue-51506.rs b/src/test/ui/never_type/issue-51506.rs new file mode 100644 index 00000000000..d0fe6a0f59a --- /dev/null +++ b/src/test/ui/never_type/issue-51506.rs @@ -0,0 +1,41 @@ +#![feature(never_type, specialization)] +#![allow(incomplete_features)] + +use std::iter::{self, Empty}; + +trait Trait { + type Out: Iterator<Item = u32>; + + fn f(&self) -> Option<Self::Out>; +} + +impl<T> Trait for T { + default type Out = !; //~ ERROR: `!` is not an iterator + + default fn f(&self) -> Option<Self::Out> { + None + } +} + +struct X; + +impl Trait for X { + type Out = Empty<u32>; + + fn f(&self) -> Option<Self::Out> { + Some(iter::empty()) + } +} + +fn f<T: Trait>(a: T) { + if let Some(iter) = a.f() { + println!("Some"); + for x in iter { + println!("x = {}", x); + } + } +} + +pub fn main() { + f(10); +} diff --git a/src/test/ui/never_type/issue-51506.stderr b/src/test/ui/never_type/issue-51506.stderr new file mode 100644 index 00000000000..73865a9b5a0 --- /dev/null +++ b/src/test/ui/never_type/issue-51506.stderr @@ -0,0 +1,14 @@ +error[E0277]: `!` is not an iterator + --> $DIR/issue-51506.rs:13:5 + | +LL | type Out: Iterator<Item = u32>; + | ------------------------------- required by `Trait::Out` +... +LL | default type Out = !; + | ^^^^^^^^^^^^^^^^^^^^^ `!` is not an iterator + | + = help: the trait `std::iter::Iterator` is not implemented for `!` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. |
