Skip to content

Commit

Permalink
Rollup merge of #90305 - vandenheuvel:test_issue_87258, r=Mark-Simula…
Browse files Browse the repository at this point in the history
…crum

Add regression test for #87258

Closes #87258.
  • Loading branch information
matthiaskrgr authored Oct 26, 2021
2 parents 40d3819 + f934429 commit fcc9a9a
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/test/ui/generic-associated-types/issue-87258_a.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#![feature(type_alias_impl_trait)]
#![feature(generic_associated_types)]

// See https://github.com/rust-lang/rust/issues/87258#issuecomment-883293367

trait Trait1 {}

struct Struct<'b>(&'b ());

impl<'d> Trait1 for Struct<'d> {}

pub trait Trait2 {
type FooFuture<'a>: Trait1;
fn foo<'a>() -> Self::FooFuture<'a>;
}

impl<'c, S: Trait2> Trait2 for &'c mut S {
type FooFuture<'a> = impl Trait1;
fn foo<'a>() -> Self::FooFuture<'a> { //~ ERROR
Struct(unimplemented!())
}
}

fn main() {}
11 changes: 11 additions & 0 deletions src/test/ui/generic-associated-types/issue-87258_a.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
--> $DIR/issue-87258_a.rs:19:21
|
LL | fn foo<'a>() -> Self::FooFuture<'a> {
| ^^^^^^^^^^^^^^^^^^^
|
= note: hidden type `Struct<'_>` captures lifetime '_#7r

error: aborting due to previous error

For more information about this error, try `rustc --explain E0700`.
26 changes: 26 additions & 0 deletions src/test/ui/generic-associated-types/issue-87258_b.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#![feature(type_alias_impl_trait)]
#![feature(generic_associated_types)]

// See https://github.com/rust-lang/rust/issues/87258#issuecomment-883293367

trait Trait1 {}

struct Struct<'b>(&'b ());

impl<'d> Trait1 for Struct<'d> {}

pub trait Trait2 {
type FooFuture<'a>: Trait1;
fn foo<'a>() -> Self::FooFuture<'a>;
}

type Helper<'xenon, 'yttrium, KABOOM: Trait2> = impl Trait1;

impl<'c, S: Trait2> Trait2 for &'c mut S {
type FooFuture<'a> = Helper<'c, 'a, S>;
fn foo<'a>() -> Self::FooFuture<'a> { //~ ERROR
Struct(unimplemented!())
}
}

fn main() {}
11 changes: 11 additions & 0 deletions src/test/ui/generic-associated-types/issue-87258_b.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
--> $DIR/issue-87258_b.rs:21:21
|
LL | fn foo<'a>() -> Self::FooFuture<'a> {
| ^^^^^^^^^^^^^^^^^^^
|
= note: hidden type `Struct<'_>` captures lifetime '_#7r

error: aborting due to previous error

For more information about this error, try `rustc --explain E0700`.

0 comments on commit fcc9a9a

Please sign in to comment.