summaryrefslogtreecommitdiffstats
path: root/tests/ui/borrowck/two-phase-across-loop.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/borrowck/two-phase-across-loop.rs')
-rw-r--r--tests/ui/borrowck/two-phase-across-loop.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/ui/borrowck/two-phase-across-loop.rs b/tests/ui/borrowck/two-phase-across-loop.rs
new file mode 100644
index 000000000..3fcea7d17
--- /dev/null
+++ b/tests/ui/borrowck/two-phase-across-loop.rs
@@ -0,0 +1,22 @@
+// Test that a borrow which starts as a two-phase borrow and gets
+// carried around a loop winds up conflicting with itself.
+
+struct Foo { x: String }
+
+impl Foo {
+ fn get_string(&mut self) -> &str {
+ &self.x
+ }
+}
+
+fn main() {
+ let mut foo = Foo { x: format!("Hello, world") };
+ let mut strings = vec![];
+
+ loop {
+ strings.push(foo.get_string()); //~ ERROR cannot borrow `foo` as mutable
+ if strings.len() > 2 { break; }
+ }
+
+ println!("{:?}", strings);
+}