Rollup merge of #96615 - JohnTitor:test-54779, r=compiler-errors

Add a regression test for #54779

Closes #54779
r? `@jackh726`
This commit is contained in:
Matthias Krüger 2022-05-13 16:03:23 +02:00 committed by GitHub
commit 281be096c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 0 deletions

View File

@ -0,0 +1,51 @@
// Regression test for #54779, checks if the diagnostics are confusing.
#![feature(nll)]
trait DebugWith<Cx: ?Sized> {
fn debug_with<'me>(&'me self, cx: &'me Cx) -> DebugCxPair<'me, Self, Cx> {
DebugCxPair { value: self, cx }
}
fn fmt_with(&self, cx: &Cx, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result;
}
struct DebugCxPair<'me, Value: ?Sized, Cx: ?Sized>
where
Value: DebugWith<Cx>,
{
value: &'me Value,
cx: &'me Cx,
}
trait DebugContext {}
struct Foo {
bar: Bar,
}
impl DebugWith<dyn DebugContext> for Foo {
fn fmt_with(
&self,
cx: &dyn DebugContext,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
let Foo { bar } = self;
bar.debug_with(cx); //~ ERROR: lifetime may not live long enough
Ok(())
}
}
struct Bar {}
impl DebugWith<dyn DebugContext> for Bar {
fn fmt_with(
&self,
cx: &dyn DebugContext,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
Ok(())
}
}
fn main() {}

View File

@ -0,0 +1,11 @@
error: lifetime may not live long enough
--> $DIR/issue-54779-anon-static-lifetime.rs:34:24
|
LL | cx: &dyn DebugContext,
| - let's call the lifetime of this reference `'1`
...
LL | bar.debug_with(cx);
| ^^ cast requires that `'1` must outlive `'static`
error: aborting due to previous error