summaryrefslogtreecommitdiffstats
path: root/src/test/ui/nll/issue-54779-anon-static-lifetime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/nll/issue-54779-anon-static-lifetime.rs')
-rw-r--r--src/test/ui/nll/issue-54779-anon-static-lifetime.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/ui/nll/issue-54779-anon-static-lifetime.rs b/src/test/ui/nll/issue-54779-anon-static-lifetime.rs
new file mode 100644
index 000000000..260b6b109
--- /dev/null
+++ b/src/test/ui/nll/issue-54779-anon-static-lifetime.rs
@@ -0,0 +1,49 @@
+// Regression test for #54779, checks if the diagnostics are confusing.
+
+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() {}