diff options
| author | David Wood <david@davidtw.co> | 2018-02-06 17:37:49 +0000 |
|---|---|---|
| committer | David Wood <david@davidtw.co> | 2018-02-06 17:37:49 +0000 |
| commit | bb6e54d4bc7d4ce4c2372fecb84222867374b135 (patch) | |
| tree | 5bfb77786523a2c2a6530fd6a9b7633d9e2dad40 | |
| parent | 5cd4b4fd955ac57f64f45e175844c0e7e165989f (diff) | |
| download | rust-bb6e54d4bc7d4ce4c2372fecb84222867374b135.tar.gz rust-bb6e54d4bc7d4ce4c2372fecb84222867374b135.zip | |
Added and updated tests to enable/disable overflow checks.
| -rw-r--r-- | src/test/ui/issue-45697-1.rs | 35 | ||||
| -rw-r--r-- | src/test/ui/issue-45697-1.stderr | 18 | ||||
| -rw-r--r-- | src/test/ui/issue-45697.rs | 2 |
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 |
