Add some tests around recursion and "revealing"
This commit is contained in:
parent
1f46f771a6
commit
53c96ed528
23
src/test/ui/lazy-type-alias-impl-trait/recursion.rs
Normal file
23
src/test/ui/lazy-type-alias-impl-trait/recursion.rs
Normal file
@ -0,0 +1,23 @@
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
// check-pass
|
||||
|
||||
type Foo = impl std::fmt::Debug;
|
||||
|
||||
fn foo(b: bool) -> Foo {
|
||||
if b {
|
||||
return 42
|
||||
}
|
||||
let x: u32 = foo(false);
|
||||
99
|
||||
}
|
||||
|
||||
fn bar(b: bool) -> impl std::fmt::Debug {
|
||||
if b {
|
||||
return 42
|
||||
}
|
||||
let x: u32 = bar(false);
|
||||
99
|
||||
}
|
||||
|
||||
fn main() {}
|
21
src/test/ui/lazy-type-alias-impl-trait/recursion2.rs
Normal file
21
src/test/ui/lazy-type-alias-impl-trait/recursion2.rs
Normal file
@ -0,0 +1,21 @@
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
type Foo = impl std::fmt::Debug;
|
||||
|
||||
fn foo(b: bool) -> Foo {
|
||||
if b {
|
||||
return vec![];
|
||||
}
|
||||
let x: Vec<i32> = foo(false);
|
||||
std::iter::empty().collect() //~ ERROR `Foo` cannot be built from an iterator
|
||||
}
|
||||
|
||||
fn bar(b: bool) -> impl std::fmt::Debug {
|
||||
if b {
|
||||
return vec![]
|
||||
}
|
||||
let x: Vec<i32> = bar(false);
|
||||
std::iter::empty().collect()
|
||||
}
|
||||
|
||||
fn main() {}
|
16
src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr
Normal file
16
src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0277]: a value of type `Foo` cannot be built from an iterator over elements of type `_`
|
||||
--> $DIR/recursion2.rs:10:24
|
||||
|
|
||||
LL | std::iter::empty().collect()
|
||||
| ^^^^^^^ value of type `Foo` cannot be built from `std::iter::Iterator<Item=_>`
|
||||
|
|
||||
= help: the trait `FromIterator<_>` is not implemented for `Foo`
|
||||
note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
21
src/test/ui/lazy-type-alias-impl-trait/recursion3.rs
Normal file
21
src/test/ui/lazy-type-alias-impl-trait/recursion3.rs
Normal file
@ -0,0 +1,21 @@
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
type Foo = impl std::fmt::Debug;
|
||||
|
||||
fn foo(b: bool) -> Foo {
|
||||
if b {
|
||||
return 42
|
||||
}
|
||||
let x: u32 = foo(false) + 42; //~ ERROR cannot add
|
||||
99
|
||||
}
|
||||
|
||||
fn bar(b: bool) -> impl std::fmt::Debug {
|
||||
if b {
|
||||
return 42
|
||||
}
|
||||
let x: u32 = bar(false) + 42; //~ ERROR cannot add
|
||||
99
|
||||
}
|
||||
|
||||
fn main() {}
|
19
src/test/ui/lazy-type-alias-impl-trait/recursion3.stderr
Normal file
19
src/test/ui/lazy-type-alias-impl-trait/recursion3.stderr
Normal file
@ -0,0 +1,19 @@
|
||||
error[E0369]: cannot add `{integer}` to `Foo`
|
||||
--> $DIR/recursion3.rs:9:29
|
||||
|
|
||||
LL | let x: u32 = foo(false) + 42;
|
||||
| ---------- ^ -- {integer}
|
||||
| |
|
||||
| Foo
|
||||
|
||||
error[E0369]: cannot add `{integer}` to `impl Debug`
|
||||
--> $DIR/recursion3.rs:17:29
|
||||
|
|
||||
LL | let x: u32 = bar(false) + 42;
|
||||
| ---------- ^ -- {integer}
|
||||
| |
|
||||
| impl Debug
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0369`.
|
23
src/test/ui/lazy-type-alias-impl-trait/recursion4.rs
Normal file
23
src/test/ui/lazy-type-alias-impl-trait/recursion4.rs
Normal file
@ -0,0 +1,23 @@
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
type Foo = impl std::fmt::Debug;
|
||||
|
||||
fn foo(b: bool) -> Foo {
|
||||
if b {
|
||||
return vec![];
|
||||
}
|
||||
let mut x = foo(false);
|
||||
x = std::iter::empty().collect(); //~ ERROR `Foo` cannot be built from an iterator
|
||||
vec![]
|
||||
}
|
||||
|
||||
fn bar(b: bool) -> impl std::fmt::Debug {
|
||||
if b {
|
||||
return vec![];
|
||||
}
|
||||
let mut x = bar(false);
|
||||
x = std::iter::empty().collect(); //~ ERROR `impl Debug` cannot be built from an iterator
|
||||
vec![]
|
||||
}
|
||||
|
||||
fn main() {}
|
29
src/test/ui/lazy-type-alias-impl-trait/recursion4.stderr
Normal file
29
src/test/ui/lazy-type-alias-impl-trait/recursion4.stderr
Normal file
@ -0,0 +1,29 @@
|
||||
error[E0277]: a value of type `Foo` cannot be built from an iterator over elements of type `_`
|
||||
--> $DIR/recursion4.rs:10:28
|
||||
|
|
||||
LL | x = std::iter::empty().collect();
|
||||
| ^^^^^^^ value of type `Foo` cannot be built from `std::iter::Iterator<Item=_>`
|
||||
|
|
||||
= help: the trait `FromIterator<_>` is not implemented for `Foo`
|
||||
note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
|
||||
error[E0277]: a value of type `impl Debug` cannot be built from an iterator over elements of type `_`
|
||||
--> $DIR/recursion4.rs:19:28
|
||||
|
|
||||
LL | x = std::iter::empty().collect();
|
||||
| ^^^^^^^ value of type `impl Debug` cannot be built from `std::iter::Iterator<Item=_>`
|
||||
|
|
||||
= help: the trait `FromIterator<_>` is not implemented for `impl Debug`
|
||||
note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user