diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-07-18 11:29:57 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-18 11:29:57 -0400 |
| commit | 4544b4d2884f34f1455e5a72dc58acbb0d3d777c (patch) | |
| tree | 9705c1bd80cb8f39a414f0bb19957d53e4f07b38 /src | |
| parent | ed83734a3bba59993352e90ee8ece2d3edef95dd (diff) | |
| parent | c56c5a861a83cd72ceda6590194506daa91fad33 (diff) | |
| download | rust-4544b4d2884f34f1455e5a72dc58acbb0d3d777c.tar.gz rust-4544b4d2884f34f1455e5a72dc58acbb0d3d777c.zip | |
Rollup merge of #62777 - gilescope:self-referencial-to-recursion, r=eddyb
Self-referencial type now called a recursive type As per Boat's suggestion - #62539, this makes the error message clearer.
Diffstat (limited to 'src')
5 files changed, 36 insertions, 18 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 1462c098b19..41b57decc10 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1321,7 +1321,7 @@ fn check_opaque<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, substs: SubstsRef<'tcx>, tcx.sess, span, E0720, "opaque type expands to a recursive type", ); - err.span_label(span, "expands to self-referential type"); + err.span_label(span, "expands to a recursive type"); if let ty::Opaque(..) = partially_expanded_type.sty { err.note("type resolves to itself"); } else { diff --git a/src/test/ui/async-await/recursive-async-impl-trait-type.stderr b/src/test/ui/async-await/recursive-async-impl-trait-type.stderr index abc9ff54bde..69914b6a791 100644 --- a/src/test/ui/async-await/recursive-async-impl-trait-type.stderr +++ b/src/test/ui/async-await/recursive-async-impl-trait-type.stderr @@ -2,7 +2,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-async-impl-trait-type.rs:7:40 | LL | async fn recursive_async_function() -> () { - | ^^ expands to self-referential type + | ^^ expands to a recursive type | = note: expanded type is `std::future::GenFuture<[static generator@$DIR/recursive-async-impl-trait-type.rs:7:43: 9:2 {impl std::future::Future, ()}]>` diff --git a/src/test/ui/generator/issue-62506-two_awaits.rs b/src/test/ui/generator/issue-62506-two_awaits.rs new file mode 100644 index 00000000000..774019b6a5b --- /dev/null +++ b/src/test/ui/generator/issue-62506-two_awaits.rs @@ -0,0 +1,18 @@ +// Output = String caused an ICE whereas Output = &'static str compiled successfully. +// Broken MIR: generator contains type std::string::String in MIR, +// but typeck only knows about {<S as T>::Future, ()} +// check-pass +// edition:2018 + +#![feature(async_await)] +use std::future::Future; + +pub trait T { + type Future: Future<Output = String>; + fn bar() -> Self::Future; +} +pub async fn foo<S>() where S: T { + S::bar().await; + S::bar().await; +} +pub fn main() {} diff --git a/src/test/ui/impl-trait/issues/infinite-impl-trait-issue-38064.stderr b/src/test/ui/impl-trait/issues/infinite-impl-trait-issue-38064.stderr index fb48ecd12b6..d10001e8a8e 100644 --- a/src/test/ui/impl-trait/issues/infinite-impl-trait-issue-38064.stderr +++ b/src/test/ui/impl-trait/issues/infinite-impl-trait-issue-38064.stderr @@ -2,7 +2,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/infinite-impl-trait-issue-38064.rs:8:13 | LL | fn foo() -> impl Quux { - | ^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^ expands to a recursive type | = note: expanded type is `foo::Foo<bar::Bar<impl Quux>>` @@ -10,7 +10,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/infinite-impl-trait-issue-38064.rs:14:13 | LL | fn bar() -> impl Quux { - | ^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^ expands to a recursive type | = note: expanded type is `bar::Bar<foo::Foo<impl Quux>>` diff --git a/src/test/ui/impl-trait/recursive-impl-trait-type.stderr b/src/test/ui/impl-trait/recursive-impl-trait-type.stderr index fce234eb87c..324607117dc 100644 --- a/src/test/ui/impl-trait/recursive-impl-trait-type.stderr +++ b/src/test/ui/impl-trait/recursive-impl-trait-type.stderr @@ -2,7 +2,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:6:22 | LL | fn option(i: i32) -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `std::option::Option<(impl Sized, i32)>` @@ -10,7 +10,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:14:15 | LL | fn tuple() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `(impl Sized,)` @@ -18,7 +18,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:18:15 | LL | fn array() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[impl Sized; 1]` @@ -26,7 +26,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:22:13 | LL | fn ptr() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `*const impl Sized` @@ -34,7 +34,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:26:16 | LL | fn fn_ptr() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `fn() -> impl Sized` @@ -42,7 +42,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:30:25 | LL | fn closure_capture() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[closure@$DIR/recursive-impl-trait-type.rs:32:5: 32:19 x:impl Sized]` @@ -50,7 +50,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:35:29 | LL | fn closure_ref_capture() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[closure@$DIR/recursive-impl-trait-type.rs:37:5: 37:20 x:impl Sized]` @@ -58,7 +58,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:40:21 | LL | fn closure_sig() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[closure@$DIR/recursive-impl-trait-type.rs:41:5: 41:21]` @@ -66,7 +66,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:44:23 | LL | fn generator_sig() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[closure@$DIR/recursive-impl-trait-type.rs:45:5: 45:23]` @@ -74,7 +74,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:48:27 | LL | fn generator_capture() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[generator@$DIR/recursive-impl-trait-type.rs:50:5: 50:26 x:impl Sized {()}]` @@ -82,7 +82,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:53:26 | LL | fn substs_change<T>() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `(impl Sized,)` @@ -90,7 +90,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:57:24 | LL | fn generator_hold() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: expanded type is `[generator@$DIR/recursive-impl-trait-type.rs:58:5: 62:6 {impl Sized, ()}]` @@ -98,7 +98,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:69:26 | LL | fn mutual_recursion() -> impl Sync { - | ^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^ expands to a recursive type | = note: type resolves to itself @@ -106,7 +106,7 @@ error[E0720]: opaque type expands to a recursive type --> $DIR/recursive-impl-trait-type.rs:73:28 | LL | fn mutual_recursion_b() -> impl Sized { - | ^^^^^^^^^^ expands to self-referential type + | ^^^^^^^^^^ expands to a recursive type | = note: type resolves to itself |
