Skip to content

Commit

Permalink
Add test for rust-lang#4666, which didn't *quite* seem to be covered by
Browse files Browse the repository at this point in the history
existing tests. The bug itself was fixed as part of recent borrowck
reform.

Fixes rust-lang#4666.
  • Loading branch information
nikomatsakis committed May 7, 2013
1 parent 154f3b0 commit 6af447a
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions src/test/run-pass/borrowck-scope-of-deref-issue-4666.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2012-2013 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.

// Tests that the scope of the pointer returned from `get()` is
// limited to the deref operation itself, and does not infect the
// block as a whole.

struct Box {
x: uint
}

impl Box {
fn get<'a>(&'a self) -> &'a uint {
&self.x
}
fn set(&mut self, x: uint) {
self.x = x;
}
}

fn fun1() {
// in the past, borrow checker behaved differently when
// init and decl of `v` were distinct
let v;
let mut box = Box {x: 0};
box.set(22);
v = *box.get();
box.set(v+1);
assert_eq!(23, *box.get());
}

fn fun2() {
let mut box = Box {x: 0};
box.set(22);
let v = *box.get();
box.set(v+1);
assert_eq!(23, *box.get());
}

pub fn main() {
fun1();
fun2();
}

1 comment on commit 6af447a

@nikomatsakis
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r+

Please sign in to comment.