From 76cf279504e794208ee49f2debaea33a2d37b207 Mon Sep 17 00:00:00 2001 From: Chris Vittal Date: Thu, 11 Jan 2018 18:08:28 -0500 Subject: [PATCH] Add NLL tests for #46557 and #38899 Closes #47366 Adapt the sample code from the issues into mir-borrowck/nll test cases. --- .../ui/nll/borrowed-referent-issue-38899.rs | 32 +++++++++++++++++++ .../nll/borrowed-referent-issue-38899.stderr | 11 +++++++ src/test/ui/nll/return-ref-mut-issue-46557.rs | 23 +++++++++++++ .../ui/nll/return-ref-mut-issue-46557.stderr | 13 ++++++++ 4 files changed, 79 insertions(+) create mode 100644 src/test/ui/nll/borrowed-referent-issue-38899.rs create mode 100644 src/test/ui/nll/borrowed-referent-issue-38899.stderr create mode 100644 src/test/ui/nll/return-ref-mut-issue-46557.rs create mode 100644 src/test/ui/nll/return-ref-mut-issue-46557.stderr diff --git a/src/test/ui/nll/borrowed-referent-issue-38899.rs b/src/test/ui/nll/borrowed-referent-issue-38899.rs new file mode 100644 index 0000000000000..1057e4ef6f375 --- /dev/null +++ b/src/test/ui/nll/borrowed-referent-issue-38899.rs @@ -0,0 +1,32 @@ +// 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 issue #38899 + +// compile-flags:-Znll -Zborrowck=mir -Zverbose + +#![feature(nll)] +#![allow(dead_code)] + +pub struct Block<'a> { + current: &'a u8, + unrelated: &'a u8, +} + +fn bump<'a>(mut block: &mut Block<'a>) { + let x = &mut block; + println!("{}", x.current); + let p: &'a u8 = &*block.current; + //~^ ERROR cannot borrow `*block.current` as immutable because it is also borrowed as mutable + drop(x); + drop(p); +} + +fn main() {} diff --git a/src/test/ui/nll/borrowed-referent-issue-38899.stderr b/src/test/ui/nll/borrowed-referent-issue-38899.stderr new file mode 100644 index 0000000000000..ff23880e7090f --- /dev/null +++ b/src/test/ui/nll/borrowed-referent-issue-38899.stderr @@ -0,0 +1,11 @@ +error[E0502]: cannot borrow `*block.current` as immutable because it is also borrowed as mutable + --> $DIR/borrowed-referent-issue-38899.rs:26:21 + | +24 | let x = &mut block; + | ---------- mutable borrow occurs here +25 | println!("{}", x.current); +26 | let p: &'a u8 = &*block.current; + | ^^^^^^^^^^^^^^^ immutable borrow occurs here + +error: aborting due to previous error + diff --git a/src/test/ui/nll/return-ref-mut-issue-46557.rs b/src/test/ui/nll/return-ref-mut-issue-46557.rs new file mode 100644 index 0000000000000..ee00e703f0523 --- /dev/null +++ b/src/test/ui/nll/return-ref-mut-issue-46557.rs @@ -0,0 +1,23 @@ +// 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 issue #46557 + +// compile-flags:-Znll -Zborrowck=mir -Zverbose + +#![feature(nll)] +#![allow(dead_code)] + +fn gimme_static_mut() -> &'static mut u32 { + let ref mut x = 1234543; //~ ERROR borrowed value does not live long enough [E0597] + x +} + +fn main() {} diff --git a/src/test/ui/nll/return-ref-mut-issue-46557.stderr b/src/test/ui/nll/return-ref-mut-issue-46557.stderr new file mode 100644 index 0000000000000..c5b5cf75813eb --- /dev/null +++ b/src/test/ui/nll/return-ref-mut-issue-46557.stderr @@ -0,0 +1,13 @@ +error[E0597]: borrowed value does not live long enough + --> $DIR/return-ref-mut-issue-46557.rs:19:21 + | +19 | let ref mut x = 1234543; //~ ERROR borrowed value does not live long enough [E0597] + | ^^^^^^^ temporary value does not live long enough +20 | x +21 | } + | - temporary value only lives until here + | + = note: borrowed value must be valid for lifetime '_#2r... + +error: aborting due to previous error +