]> git.lizzy.rs Git - rust.git/commitdiff
More small test case fixes. grr. cc #9629.
authorNiko Matsakis <niko@alum.mit.edu>
Wed, 11 Dec 2013 11:40:37 +0000 (06:40 -0500)
committerNiko Matsakis <niko@alum.mit.edu>
Wed, 11 Dec 2013 11:40:37 +0000 (06:40 -0500)
src/librustc/middle/borrowck/doc.rs
src/test/compile-fail/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs
src/test/compile-fail/borrowck-borrow-of-mut-base-ptr.rs

index f95547ea933d61b83dc32c0c4df10330d0fc2244..38e93cd39fad7c9fe64e988de1d664c260cf1179 100644 (file)
@@ -790,7 +790,15 @@ fn foo<'a>(mut t0: &'a mut int,
 
 In this case, creating the alias `t2` of `t0` is safe because the only
 thing `t2` can be used for is to further freeze `*t0`, which is
-already frozen.
+already frozen. In particular, we cannot assign to `*t0` through the
+new alias `t2`, as demonstrated in this test case:
+
+       // src/test/run-pass/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs
+       fn foo(t0: & &mut int) {
+           let t1 = t0;
+           let p: &int = &**t0;
+           **t1 = 22; //~ ERROR cannot assign
+       }
 
 This distinction is reflected in the rules. When doing an `&mut`
 borrow -- as in the first example -- the set `ACTIONS` will be
@@ -805,6 +813,8 @@ fn foo<'a>(mut t0: &'a mut int,
 others to freeze. Hence when these restrictions are propagated back to
 the base path, it will still be considered freezable.
 
+
+
 **FIXME #10520: Restrictions against mutating the base pointer.** When
 an `&mut` pointer is frozen or claimed, we currently pass along the
 restriction against MUTATE to the base pointer. I do not believe this
index 843b5436d842c7c89322641dc8c0c70a501df5ef..f72dacc2d813c6c58be605d80135b25dada90d70 100644 (file)
@@ -1,3 +1,13 @@
+// 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 attempt to reborrow an `&mut` pointer in an aliasable
 // location yields an error.
 //
@@ -7,7 +17,7 @@
 
 fn foo(t0: & &mut int) {
     let t1 = t0;
-    let p: &int = &**t0; //~ ERROR cannot borrow an `&mut` in a `&` pointer
+    let p: &int = &**t0;
     **t1 = 22; //~ ERROR cannot assign
 }
 
index fd6fda22be21e1f52d136f1e85143ec165eddf89..3f67952fa8ef026c436f4c4665cb58d5cb0271ab 100644 (file)
@@ -19,7 +19,7 @@ fn foo<'a>(mut t0: &'a mut int,
            mut t1: &'a mut int) {
     let p: &mut int = &mut *t0; // Claims `*t0`
     let mut t2 = &t0;           //~ ERROR cannot borrow `t0`
-    let q: &int = &*t2;         // Freezes `*t0` but not through `*p`
+    let q: &int = &**t2;        // Freezes `*t0` but not through `*p`
     *p += 1;                    // violates type of `*q`
 }