summaryrefslogtreecommitdiffstats
path: root/src/test/ui/borrowck/mutability-errors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/borrowck/mutability-errors.rs')
-rw-r--r--src/test/ui/borrowck/mutability-errors.rs82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/mutability-errors.rs b/src/test/ui/borrowck/mutability-errors.rs
new file mode 100644
index 000000000..5be0df137
--- /dev/null
+++ b/src/test/ui/borrowck/mutability-errors.rs
@@ -0,0 +1,82 @@
+// All the possible mutability error cases.
+
+#![allow(unused)]
+
+type MakeRef = fn() -> &'static (i32,);
+type MakePtr = fn() -> *const (i32,);
+
+fn named_ref(x: &(i32,)) {
+ *x = (1,); //~ ERROR
+ x.0 = 1; //~ ERROR
+ &mut *x; //~ ERROR
+ &mut x.0; //~ ERROR
+}
+
+fn unnamed_ref(f: MakeRef) {
+ *f() = (1,); //~ ERROR
+ f().0 = 1; //~ ERROR
+ &mut *f(); //~ ERROR
+ &mut f().0; //~ ERROR
+}
+
+unsafe fn named_ptr(x: *const (i32,)) {
+ *x = (1,); //~ ERROR
+ (*x).0 = 1; //~ ERROR
+ &mut *x; //~ ERROR
+ &mut (*x).0; //~ ERROR
+}
+
+unsafe fn unnamed_ptr(f: MakePtr) {
+ *f() = (1,); //~ ERROR
+ (*f()).0 = 1; //~ ERROR
+ &mut *f(); //~ ERROR
+ &mut (*f()).0; //~ ERROR
+}
+
+fn fn_ref<F: Fn()>(f: F) -> F { f }
+
+fn ref_closure(mut x: (i32,)) {
+ fn_ref(|| {
+ x = (1,); //~ ERROR
+ x.0 = 1; //~ ERROR
+ &mut x; //~ ERROR
+ &mut x.0; //~ ERROR
+ });
+ fn_ref(move || {
+ x = (1,); //~ ERROR
+ x.0 = 1; //~ ERROR
+ &mut x; //~ ERROR
+ &mut x.0; //~ ERROR
+ });
+}
+
+fn imm_local(x: (i32,)) {
+ &mut x; //~ ERROR
+ &mut x.0; //~ ERROR
+}
+
+fn imm_capture(x: (i32,)) {
+ || {
+ x = (1,); //~ ERROR
+ x.0 = 1; //~ ERROR
+ &mut x; //~ ERROR
+ &mut x.0; //~ ERROR
+ };
+ move || {
+ x = (1,); //~ ERROR
+ x.0 = 1; //~ ERROR
+ &mut x; //~ ERROR
+ &mut x.0; //~ ERROR
+ };
+}
+
+static X: (i32,) = (0,);
+
+fn imm_static() {
+ X = (1,); //~ ERROR
+ X.0 = 1; //~ ERROR
+ &mut X; //~ ERROR
+ &mut X.0; //~ ERROR
+}
+
+fn main() {}