about summary refs log tree commit diff
path: root/src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs')
-rw-r--r--src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs b/src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs
new file mode 100644
index 00000000000..4e1b85283a6
--- /dev/null
+++ b/src/test/ui/compile-fail-migration/borrowck/borrowck-anon-fields-variant.rs
@@ -0,0 +1,53 @@
+// Copyright 2014 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 we are able to distinguish when loans borrow different
+// anonymous fields of an enum variant vs the same anonymous field.
+
+enum Foo {
+    X, Y(usize, usize)
+}
+
+fn distinct_variant() {
+    let mut y = Foo::Y(1, 2);
+
+    let a = match y {
+      Foo::Y(ref mut a, _) => a,
+      Foo::X => panic!()
+    };
+
+    let b = match y {
+      Foo::Y(_, ref mut b) => b,
+      Foo::X => panic!()
+    };
+
+    *a += 1;
+    *b += 1;
+}
+
+fn same_variant() {
+    let mut y = Foo::Y(1, 2);
+
+    let a = match y {
+      Foo::Y(ref mut a, _) => a,
+      Foo::X => panic!()
+    };
+
+    let b = match y {
+      Foo::Y(ref mut b, _) => b, //~ ERROR cannot borrow
+      Foo::X => panic!()
+    };
+
+    *a += 1;
+    *b += 1;
+}
+
+fn main() {
+}