diff options
Diffstat (limited to 'tests/ui/nll/issue-30438-c.rs')
-rw-r--r-- | tests/ui/nll/issue-30438-c.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/ui/nll/issue-30438-c.rs b/tests/ui/nll/issue-30438-c.rs new file mode 100644 index 000000000..813c1d3e2 --- /dev/null +++ b/tests/ui/nll/issue-30438-c.rs @@ -0,0 +1,20 @@ +// Simplified regression test for #30438, inspired by arielb1. + +trait Trait { type Out; } + +struct Test<'a> { s: &'a str } + +fn silly<'y, 'z>(_s: &'y Test<'z>) -> &'y <Test<'z> as Trait>::Out where 'z: 'static { + let x = Test { s: "this cannot last" }; + &x + //~^ ERROR: cannot return reference to local variable `x` +} + +impl<'b> Trait for Test<'b> { type Out = Test<'b>; } + +fn main() { + let orig = Test { s: "Hello World" }; + let r = silly(&orig); + println!("{}", orig.s); // OK since `orig` is valid + println!("{}", r.s); // Segfault (method does not return a sane value) +} |