diff options
| author | Chris Vittal <christopher.vittal@gmail.com> | 2018-01-11 18:08:28 -0500 |
|---|---|---|
| committer | Chris Vittal <christopher.vittal@gmail.com> | 2018-01-11 18:08:28 -0500 |
| commit | 76cf279504e794208ee49f2debaea33a2d37b207 (patch) | |
| tree | cf3e518b7ea47452cab923a54ebcce67404a2d93 /src | |
| parent | 73ac5d6a80f26c692f1e084b72d69637d7de2c8c (diff) | |
| download | rust-76cf279504e794208ee49f2debaea33a2d37b207.tar.gz rust-76cf279504e794208ee49f2debaea33a2d37b207.zip | |
Add NLL tests for #46557 and #38899
Closes #47366 Adapt the sample code from the issues into mir-borrowck/nll test cases.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/nll/borrowed-referent-issue-38899.rs | 32 | ||||
| -rw-r--r-- | src/test/ui/nll/borrowed-referent-issue-38899.stderr | 11 | ||||
| -rw-r--r-- | src/test/ui/nll/return-ref-mut-issue-46557.rs | 23 | ||||
| -rw-r--r-- | src/test/ui/nll/return-ref-mut-issue-46557.stderr | 13 |
4 files changed, 79 insertions, 0 deletions
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 00000000000..1057e4ef6f3 --- /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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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 00000000000..ff23880e709 --- /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 00000000000..ee00e703f05 --- /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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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 00000000000..c5b5cf75813 --- /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 + |
