From cc6ad45148af89cf82855df27ec1a1b695592796 Mon Sep 17 00:00:00 2001 From: Sarthak Singh Date: Fri, 21 Oct 2022 13:08:30 +0530 Subject: [PATCH] replaced wrong test with the correct mcve --- .../bugs/issue-89008.stderr | 19 ------------- .../{bugs => }/issue-89008.rs | 28 ++++++++----------- 2 files changed, 11 insertions(+), 36 deletions(-) delete mode 100644 src/test/ui/generic-associated-types/bugs/issue-89008.stderr rename src/test/ui/generic-associated-types/{bugs => }/issue-89008.rs (55%) diff --git a/src/test/ui/generic-associated-types/bugs/issue-89008.stderr b/src/test/ui/generic-associated-types/bugs/issue-89008.stderr deleted file mode 100644 index 3f72734efa1..00000000000 --- a/src/test/ui/generic-associated-types/bugs/issue-89008.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0271]: type mismatch resolving ` as Stream>::Item == Repr` - --> $DIR/issue-89008.rs:38:43 - | -LL | fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> { - | ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type mismatch resolving ` as Stream>::Item == Repr` - | | - | this type parameter - | -note: expected this to be `()` - --> $DIR/issue-89008.rs:17:17 - | -LL | type Item = (); - | ^^ - = note: expected unit type `()` - found type parameter `Repr` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0271`. diff --git a/src/test/ui/generic-associated-types/bugs/issue-89008.rs b/src/test/ui/generic-associated-types/issue-89008.rs similarity index 55% rename from src/test/ui/generic-associated-types/bugs/issue-89008.rs rename to src/test/ui/generic-associated-types/issue-89008.rs index 012aa8df2fc..669dbafb5d5 100644 --- a/src/test/ui/generic-associated-types/bugs/issue-89008.rs +++ b/src/test/ui/generic-associated-types/issue-89008.rs @@ -1,42 +1,36 @@ -// check-fail +// check-pass // edition:2021 -// known-bug: #88908 - -// This should pass, but seems to run into a TAIT bug. #![feature(type_alias_impl_trait)] use std::future::Future; +use std::marker::PhantomData; trait Stream { type Item; } -struct Empty(T); -impl Stream for Empty { - type Item = (); +struct Empty { + _phantom: PhantomData, } -fn empty() -> Empty { - todo!() + +impl Stream for Empty { + type Item = T; } trait X { type LineStream<'a, Repr>: Stream where Self: 'a; - - type LineStreamFut<'a,Repr>: Future> where Self: 'a; - - fn line_stream<'a,Repr>(&'a self) -> Self::LineStreamFut<'a,Repr>; + type LineStreamFut<'a, Repr>: Future> where Self: 'a; + fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr>; } struct Y; impl X for Y { type LineStream<'a, Repr> = impl Stream; - - type LineStreamFut<'a, Repr> = impl Future> ; - + type LineStreamFut<'a, Repr> = impl Future>; fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> { - async {empty()} + async { Empty { _phantom: PhantomData } } } }