diff options
| -rw-r--r-- | src/test/ui/impl-trait/issues/issue-88236-2.rs | 23 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/issues/issue-88236-2.stderr | 20 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/issues/issue-88236.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/type-alias-impl-trait/issue-93411.rs | 2 |
4 files changed, 49 insertions, 2 deletions
diff --git a/src/test/ui/impl-trait/issues/issue-88236-2.rs b/src/test/ui/impl-trait/issues/issue-88236-2.rs new file mode 100644 index 00000000000..f89ab7fbd36 --- /dev/null +++ b/src/test/ui/impl-trait/issues/issue-88236-2.rs @@ -0,0 +1,23 @@ +// this used to cause stack overflows + +trait Hrtb<'a> { + type Assoc; +} + +impl<'a> Hrtb<'a> for () { + type Assoc = (); +} + +impl<'a> Hrtb<'a> for &'a () { + type Assoc = (); +} + +fn make_impl() -> impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> {} +fn make_weird_impl<'b>(x: &'b ()) -> impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> { + &() //~ ERROR implementation of `Hrtb` is not general enough +} +fn make_bad_impl<'b>(x: &'b ()) -> impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> { + x //~ ERROR implementation of `Hrtb` is not general enough +} + +fn main() {} diff --git a/src/test/ui/impl-trait/issues/issue-88236-2.stderr b/src/test/ui/impl-trait/issues/issue-88236-2.stderr new file mode 100644 index 00000000000..95c4a528036 --- /dev/null +++ b/src/test/ui/impl-trait/issues/issue-88236-2.stderr @@ -0,0 +1,20 @@ +error: implementation of `Hrtb` is not general enough + --> $DIR/issue-88236-2.rs:17:5 + | +LL | &() + | ^^^ implementation of `Hrtb` is not general enough + | + = note: `Hrtb<'0>` would have to be implemented for the type `&()`, for any lifetime `'0`... + = note: ...but `Hrtb<'1>` is actually implemented for the type `&'1 ()`, for some specific lifetime `'1` + +error: implementation of `Hrtb` is not general enough + --> $DIR/issue-88236-2.rs:20:5 + | +LL | x + | ^ implementation of `Hrtb` is not general enough + | + = note: `&()` must implement `Hrtb<'0>`, for any lifetime `'0`... + = note: ...but `Hrtb<'_>` is actually implemented for the type `&()` + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/impl-trait/issues/issue-88236.rs b/src/test/ui/impl-trait/issues/issue-88236.rs index 3bab46979ef..2ea35270a7e 100644 --- a/src/test/ui/impl-trait/issues/issue-88236.rs +++ b/src/test/ui/impl-trait/issues/issue-88236.rs @@ -10,6 +10,10 @@ impl<'a> Hrtb<'a> for () { type Assoc = (); } +impl<'a> Hrtb<'a> for &'a () { + type Assoc = (); +} + fn make_impl() -> impl for<'a> Hrtb<'a, Assoc = impl Send + 'a> {} -fn main() {} \ No newline at end of file +fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/issue-93411.rs b/src/test/ui/type-alias-impl-trait/issue-93411.rs index f0f2bcd7bb2..1f8c789267d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-93411.rs +++ b/src/test/ui/type-alias-impl-trait/issue-93411.rs @@ -16,4 +16,4 @@ fn main() { type BlahFut<'a> = impl Future<Output = ()> + Send + 'a; fn blah<'a>(_value: &'a u8) -> BlahFut<'a> { async {} -} \ No newline at end of file +} |
