From a7e877ebdd0c0dc7141b8bb898dd4aa4196f8c5f Mon Sep 17 00:00:00 2001 From: memoryruins Date: Tue, 14 Aug 2018 10:25:54 -0400 Subject: [PATCH 1/2] Add regression test for issue #48697 #48697 --- src/test/ui/nll/issue-48697.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/ui/nll/issue-48697.rs diff --git a/src/test/ui/nll/issue-48697.rs b/src/test/ui/nll/issue-48697.rs new file mode 100644 index 0000000000000..69ff82e16a1bf --- /dev/null +++ b/src/test/ui/nll/issue-48697.rs @@ -0,0 +1,24 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Regression test for #48697 + +// compile-pass + +#![feature(nll)] + +fn foo(x: &i32) -> &i32 { + let z = 4; + let f = &|y| y; + let k = f(&z); + f(x) +} + +fn main() {} From f4bed39c5c68e345e1d816f9af7cbf6b666bf717 Mon Sep 17 00:00:00 2001 From: memoryruins Date: Tue, 14 Aug 2018 10:26:47 -0400 Subject: [PATCH 2/2] Add regression test for issue #30104 #30104 --- src/test/ui/nll/issue-30104.rs | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/test/ui/nll/issue-30104.rs diff --git a/src/test/ui/nll/issue-30104.rs b/src/test/ui/nll/issue-30104.rs new file mode 100644 index 0000000000000..64c32a55d0496 --- /dev/null +++ b/src/test/ui/nll/issue-30104.rs @@ -0,0 +1,52 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Regression test for #30104 + +// compile-pass + +#![feature(nll)] + +use std::ops::{Deref, DerefMut}; + +fn box_two_field(v: &mut Box<(i32, i32)>) { + let _a = &mut v.0; + let _b = &mut v.1; +} + +fn box_destructure(v: &mut Box<(i32, i32)>) { + let (ref mut _head, ref mut _tail) = **v; +} + +struct Wrap(T); + +impl Deref for Wrap { + type Target = T; + fn deref(&self) -> &T { + &self.0 + } +} + +impl DerefMut for Wrap { + fn deref_mut(&mut self) -> &mut T { + &mut self.0 + } +} + +fn smart_two_field(v: &mut Wrap<(i32, i32)>) { + let _a = &mut v.0; + let _b = &mut v.1; +} + +fn smart_destructure(v: &mut Wrap<(i32, i32)>) { + let (ref mut _head, ref mut _tail) = **v; +} + +fn main() {}