about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChris Vittal <christopher.vittal@gmail.com>2018-01-11 18:08:28 -0500
committerChris Vittal <christopher.vittal@gmail.com>2018-01-11 18:08:28 -0500
commit76cf279504e794208ee49f2debaea33a2d37b207 (patch)
treecf3e518b7ea47452cab923a54ebcce67404a2d93 /src
parent73ac5d6a80f26c692f1e084b72d69637d7de2c8c (diff)
downloadrust-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.rs32
-rw-r--r--src/test/ui/nll/borrowed-referent-issue-38899.stderr11
-rw-r--r--src/test/ui/nll/return-ref-mut-issue-46557.rs23
-rw-r--r--src/test/ui/nll/return-ref-mut-issue-46557.stderr13
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
+