diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-07-30 05:37:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-30 05:37:39 +0200 |
| commit | 09eb0b1b32410819f178f24b34f8f8d02a6f0ebd (patch) | |
| tree | 50fc09dcbe23f519b00dfc9e733bc970f1481b0b /src | |
| parent | f3750e34b460d0a1afd3c0c2531ba6854073585b (diff) | |
| parent | a54dd2318ae42fa4c6602cd37d07e837464df082 (diff) | |
| download | rust-09eb0b1b32410819f178f24b34f8f8d02a6f0ebd.tar.gz rust-09eb0b1b32410819f178f24b34f8f8d02a6f0ebd.zip | |
Rollup merge of #63096 - Centril:existential-type-add-tests, r=varkor
Add tests for some `existential_type` ICEs Fix #53678 Fix #60407 Fix #60564 https://github.com/rust-lang/rust/issues/54899 will need some minimization before it can be added. r? @varkor
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/existential_types/existential_type-pass.rs (renamed from src/test/ui/existential_type.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-58887.rs (renamed from src/test/ui/existential-type/issue-58887.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-58887.stderr (renamed from src/test/ui/existential-type/issue-58887.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-60371.rs (renamed from src/test/ui/existential-type/issue-60371.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-60371.stderr (renamed from src/test/ui/existential-type/issue-60371.stderr) | 0 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-60407.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-60564.rs | 26 | ||||
| -rw-r--r-- | src/test/ui/existential_types/issue-60564.stderr | 25 |
9 files changed, 85 insertions, 0 deletions
diff --git a/src/test/ui/existential_type.rs b/src/test/ui/existential_types/existential_type-pass.rs index c2cf0eeed3d..c2cf0eeed3d 100644 --- a/src/test/ui/existential_type.rs +++ b/src/test/ui/existential_types/existential_type-pass.rs diff --git a/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs b/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs new file mode 100644 index 00000000000..d964f2b74ff --- /dev/null +++ b/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs @@ -0,0 +1,19 @@ +// check-pass + +#![feature(const_fn, generators, generator_trait, existential_type)] + +use std::ops::Generator; + +existential type GenOnce<Y, R>: Generator<Yield = Y, Return = R>; + +const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> { + move || { + yield yielding; + + return returning; + } +} + +const FOO: GenOnce<usize, usize> = const_generator(10, 100); + +fn main() {} diff --git a/src/test/ui/existential-type/issue-58887.rs b/src/test/ui/existential_types/issue-58887.rs index f038648ec21..f038648ec21 100644 --- a/src/test/ui/existential-type/issue-58887.rs +++ b/src/test/ui/existential_types/issue-58887.rs diff --git a/src/test/ui/existential-type/issue-58887.stderr b/src/test/ui/existential_types/issue-58887.stderr index 800f4b7e059..800f4b7e059 100644 --- a/src/test/ui/existential-type/issue-58887.stderr +++ b/src/test/ui/existential_types/issue-58887.stderr diff --git a/src/test/ui/existential-type/issue-60371.rs b/src/test/ui/existential_types/issue-60371.rs index f9def11d193..f9def11d193 100644 --- a/src/test/ui/existential-type/issue-60371.rs +++ b/src/test/ui/existential_types/issue-60371.rs diff --git a/src/test/ui/existential-type/issue-60371.stderr b/src/test/ui/existential_types/issue-60371.stderr index 092cb31f97d..092cb31f97d 100644 --- a/src/test/ui/existential-type/issue-60371.stderr +++ b/src/test/ui/existential_types/issue-60371.stderr diff --git a/src/test/ui/existential_types/issue-60407.rs b/src/test/ui/existential_types/issue-60407.rs new file mode 100644 index 00000000000..52162c491b5 --- /dev/null +++ b/src/test/ui/existential_types/issue-60407.rs @@ -0,0 +1,15 @@ +// check-pass + +#![feature(existential_type)] + +existential type Debuggable: core::fmt::Debug; + +static mut TEST: Option<Debuggable> = None; + +fn main() { + unsafe { TEST = Some(foo()) } +} + +fn foo() -> Debuggable { + 0u32 +} diff --git a/src/test/ui/existential_types/issue-60564.rs b/src/test/ui/existential_types/issue-60564.rs new file mode 100644 index 00000000000..cb3914ddd1d --- /dev/null +++ b/src/test/ui/existential_types/issue-60564.rs @@ -0,0 +1,26 @@ +#![feature(existential_type)] + +trait IterBits { + type BitsIter: Iterator<Item = u8>; + fn iter_bits(self, n: u8) -> Self::BitsIter; +} + +existential type IterBitsIter<T, E, I>: std::iter::Iterator<Item = I>; +//~^ ERROR could not find defining uses + +impl<T, E> IterBits for T +where + T: std::ops::Shr<Output = T> + + std::ops::BitAnd<T, Output = T> + + std::convert::From<u8> + + std::convert::TryInto<u8, Error = E>, + E: std::fmt::Debug, +{ + type BitsIter = IterBitsIter<T, E, u8>; + fn iter_bits(self, n: u8) -> Self::BitsIter { + //~^ ERROR type parameter `E` is part of concrete type but not used + (0u8..n) + .rev() + .map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap()) + } +} diff --git a/src/test/ui/existential_types/issue-60564.stderr b/src/test/ui/existential_types/issue-60564.stderr new file mode 100644 index 00000000000..d8480b52157 --- /dev/null +++ b/src/test/ui/existential_types/issue-60564.stderr @@ -0,0 +1,25 @@ +error[E0601]: `main` function not found in crate `issue_60564` + | + = note: consider adding a `main` function to `$DIR/issue-60564.rs` + +error: type parameter `E` is part of concrete type but not used in parameter list for existential type + --> $DIR/issue-60564.rs:20:49 + | +LL | fn iter_bits(self, n: u8) -> Self::BitsIter { + | _________________________________________________^ +LL | | +LL | | (0u8..n) +LL | | .rev() +LL | | .map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap()) +LL | | } + | |_____^ + +error: could not find defining uses + --> $DIR/issue-60564.rs:8:1 + | +LL | existential type IterBitsIter<T, E, I>: std::iter::Iterator<Item = I>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0601`. |
