about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Wood <david@davidtw.co>2018-02-06 17:37:49 +0000
committerDavid Wood <david@davidtw.co>2018-02-06 17:37:49 +0000
commitbb6e54d4bc7d4ce4c2372fecb84222867374b135 (patch)
tree5bfb77786523a2c2a6530fd6a9b7633d9e2dad40
parent5cd4b4fd955ac57f64f45e175844c0e7e165989f (diff)
downloadrust-bb6e54d4bc7d4ce4c2372fecb84222867374b135.tar.gz
rust-bb6e54d4bc7d4ce4c2372fecb84222867374b135.zip
Added and updated tests to enable/disable overflow checks.
-rw-r--r--src/test/ui/issue-45697-1.rs35
-rw-r--r--src/test/ui/issue-45697-1.stderr18
-rw-r--r--src/test/ui/issue-45697.rs2
3 files changed, 54 insertions, 1 deletions
diff --git a/src/test/ui/issue-45697-1.rs b/src/test/ui/issue-45697-1.rs
new file mode 100644
index 00000000000..7734b14b2ab
--- /dev/null
+++ b/src/test/ui/issue-45697-1.rs
@@ -0,0 +1,35 @@
+// Copyright 2012 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.
+
+// Test that assignments to an `&mut` pointer which is found in a
+// borrowed (but otherwise non-aliasable) location is illegal.
+
+// compile-flags: -Z emit-end-regions -Z borrowck=compare -C overflow-checks=on
+
+struct S<'a> {
+    pointer: &'a mut isize
+}
+
+fn copy_borrowed_ptr<'a>(p: &'a mut S<'a>) -> S<'a> {
+    S { pointer: &mut *p.pointer }
+}
+
+fn main() {
+    let mut x = 1;
+
+    {
+        let mut y = S { pointer: &mut x };
+        let z = copy_borrowed_ptr(&mut y);
+        *y.pointer += 1;
+        //~^ ERROR cannot assign to `*y.pointer` because it is borrowed (Ast) [E0506]
+        //~| ERROR cannot use `*y.pointer` because it was mutably borrowed (Mir) [E0503]
+        *z.pointer += 1;
+    }
+}
diff --git a/src/test/ui/issue-45697-1.stderr b/src/test/ui/issue-45697-1.stderr
new file mode 100644
index 00000000000..09f32b93acc
--- /dev/null
+++ b/src/test/ui/issue-45697-1.stderr
@@ -0,0 +1,18 @@
+error[E0506]: cannot assign to `*y.pointer` because it is borrowed (Ast)
+  --> $DIR/issue-45697-1.rs:30:9
+   |
+29 |         let z = copy_borrowed_ptr(&mut y);
+   |                                        - borrow of `*y.pointer` occurs here
+30 |         *y.pointer += 1;
+   |         ^^^^^^^^^^^^^^^ assignment to borrowed `*y.pointer` occurs here
+
+error[E0503]: cannot use `*y.pointer` because it was mutably borrowed (Mir)
+  --> $DIR/issue-45697-1.rs:30:9
+   |
+29 |         let z = copy_borrowed_ptr(&mut y);
+   |                                   ------ borrow of `y` occurs here
+30 |         *y.pointer += 1;
+   |         ^^^^^^^^^^^^^^^ use of borrowed `y`
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/issue-45697.rs b/src/test/ui/issue-45697.rs
index b69ba97cc9b..4e93eccd6f6 100644
--- a/src/test/ui/issue-45697.rs
+++ b/src/test/ui/issue-45697.rs
@@ -11,7 +11,7 @@
 // Test that assignments to an `&mut` pointer which is found in a
 // borrowed (but otherwise non-aliasable) location is illegal.
 
-// compile-flags: -Z emit-end-regions -Z borrowck=compare
+// compile-flags: -Z emit-end-regions -Z borrowck=compare -C overflow-checks=off
 
 struct S<'a> {
     pointer: &'a mut isize