From 19e51aaef7cf2f7a9e0e72168caf73a94a1cbfb1 Mon Sep 17 00:00:00 2001 From: marmeladema Date: Tue, 20 Apr 2021 23:33:13 +0100 Subject: [PATCH] Add test for issue #79636 --- .../generic-associated-types/issue-79636-1.rs | 24 +++++++++++++++++++ .../issue-79636-1.stderr | 19 +++++++++++++++ .../generic-associated-types/issue-79636-2.rs | 18 ++++++++++++++ .../issue-79636-2.stderr | 19 +++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 src/test/ui/generic-associated-types/issue-79636-1.rs create mode 100644 src/test/ui/generic-associated-types/issue-79636-1.stderr create mode 100644 src/test/ui/generic-associated-types/issue-79636-2.rs create mode 100644 src/test/ui/generic-associated-types/issue-79636-2.stderr diff --git a/src/test/ui/generic-associated-types/issue-79636-1.rs b/src/test/ui/generic-associated-types/issue-79636-1.rs new file mode 100644 index 00000000000..17f9387e292 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-79636-1.rs @@ -0,0 +1,24 @@ +#![allow(incomplete_features)] +#![feature(generic_associated_types)] + +trait Monad { + type Unwrapped; + type Wrapped; + //~^ ERROR: missing generics for associated type `Monad::Wrapped` + + fn bind(self, f: F) -> Self::Wrapped { + todo!() + } +} + +fn join(outer: MOuter) -> MOuter::Wrapped +where + MOuter: Monad, + MInner: Monad>, +{ + outer.bind(|inner| inner) +} + +fn main() { + assert_eq!(join(Some(Some(true))), Some(true)); +} diff --git a/src/test/ui/generic-associated-types/issue-79636-1.stderr b/src/test/ui/generic-associated-types/issue-79636-1.stderr new file mode 100644 index 00000000000..58eeb43f70d --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-79636-1.stderr @@ -0,0 +1,19 @@ +error[E0107]: missing generics for associated type `Monad::Wrapped` + --> $DIR/issue-79636-1.rs:6:10 + | +LL | type Wrapped; + | ^^^^^^^ expected 1 type argument + | +note: associated type defined here, with 1 type parameter: `B` + --> $DIR/issue-79636-1.rs:6:10 + | +LL | type Wrapped; + | ^^^^^^^ - +help: use angle brackets to add missing type argument + | +LL | type Wrapped; + | ^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/generic-associated-types/issue-79636-2.rs b/src/test/ui/generic-associated-types/issue-79636-2.rs new file mode 100644 index 00000000000..5a654219375 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-79636-2.rs @@ -0,0 +1,18 @@ +#![allow(incomplete_features)] +#![feature(generic_associated_types)] + +trait SomeTrait { + type Wrapped: SomeTrait; + //~^ ERROR: missing generics for associated type `SomeTrait::Wrapped` + + fn f() -> (); +} + +fn program() -> () +where + W: SomeTrait, +{ + return W::f(); +} + +fn main() {} diff --git a/src/test/ui/generic-associated-types/issue-79636-2.stderr b/src/test/ui/generic-associated-types/issue-79636-2.stderr new file mode 100644 index 00000000000..d5e3c56ebb9 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-79636-2.stderr @@ -0,0 +1,19 @@ +error[E0107]: missing generics for associated type `SomeTrait::Wrapped` + --> $DIR/issue-79636-2.rs:5:10 + | +LL | type Wrapped: SomeTrait; + | ^^^^^^^ expected 1 type argument + | +note: associated type defined here, with 1 type parameter: `A` + --> $DIR/issue-79636-2.rs:5:10 + | +LL | type Wrapped: SomeTrait; + | ^^^^^^^ - +help: use angle brackets to add missing type argument + | +LL | type Wrapped: SomeTrait; + | ^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0107`.