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 +