about summary refs log tree commit diff
path: root/tests/ui/borrowck/borrowck-argument.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/borrowck/borrowck-argument.rs')
-rw-r--r--tests/ui/borrowck/borrowck-argument.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/ui/borrowck/borrowck-argument.rs b/tests/ui/borrowck/borrowck-argument.rs
new file mode 100644
index 00000000000..5d776d4fca4
--- /dev/null
+++ b/tests/ui/borrowck/borrowck-argument.rs
@@ -0,0 +1,34 @@
+#[derive(Copy, Clone)]
+struct S;
+
+impl S {
+    fn mutate(&mut self) {
+    }
+}
+
+fn func(arg: S) {
+    arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable
+}
+
+impl S {
+    fn method(&self, arg: S) {
+        arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable
+    }
+}
+
+trait T {
+    fn default(&self, arg: S) {
+        arg.mutate(); //~ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable
+    }
+}
+
+impl T for S {}
+
+fn main() {
+    let s = S;
+    func(s);
+    s.method(s);
+    s.default(s);
+    (|arg: S| { arg.mutate() })(s);
+    //~^ ERROR: cannot borrow `arg` as mutable, as it is not declared as mutable
+}