]> git.lizzy.rs Git - rust.git/commitdiff
Add more UI tests for swap
authorCristian Kubis <cristian.kubis@tsunix.de>
Mon, 2 Sep 2019 12:15:52 +0000 (14:15 +0200)
committerCristian Kubis <cristian.kubis@tsunix.de>
Mon, 2 Sep 2019 12:15:52 +0000 (14:15 +0200)
These tests make sure that the swap warning will not be triggered
for expressions that will cause multiple mutable references of the
same owner

tests/ui/swap.rs
tests/ui/swap.stderr

index 9db8dcbf75e28da35cac650edf298ea34fd3384c..093cd7fd04afaa3f10c53cd9785a32acfe73c66b 100644 (file)
@@ -3,6 +3,25 @@
 
 struct Foo(u32);
 
+#[derive(Clone)]
+struct Bar {
+    a: u32,
+    b: u32,
+}
+
+fn field() {
+    let mut bar = Bar { a: 1, b: 2 };
+
+    let temp = bar.a;
+    bar.a = bar.b;
+    bar.b = temp;
+
+    let mut baz = vec![bar.clone(), bar.clone()];
+    let temp = baz[0].a;
+    baz[0].a = baz[1].a;
+    baz[1].a = temp;
+}
+
 fn array() {
     let mut foo = [1, 2];
     let temp = foo[0];
@@ -32,6 +51,7 @@ fn vec() {
 
 #[rustfmt::skip]
 fn main() {
+    field();
     array();
     slice();
     vec();
index 5d818cf20566b6d1f4076bbc47faa53d835f98e5..bda0a0bf38b7b5fa148b41ed4624d625e92d6929 100644 (file)
@@ -1,5 +1,5 @@
 error: this looks like you are swapping elements of `foo` manually
-  --> $DIR/swap.rs:8:5
+  --> $DIR/swap.rs:27:5
    |
 LL | /     let temp = foo[0];
 LL | |     foo[0] = foo[1];
@@ -9,7 +9,7 @@ LL | |     foo[1] = temp;
    = note: `-D clippy::manual-swap` implied by `-D warnings`
 
 error: this looks like you are swapping elements of `foo` manually
-  --> $DIR/swap.rs:17:5
+  --> $DIR/swap.rs:36:5
    |
 LL | /     let temp = foo[0];
 LL | |     foo[0] = foo[1];
@@ -17,7 +17,7 @@ LL | |     foo[1] = temp;
    | |_________________^ help: try: `foo.swap(0, 1)`
 
 error: this looks like you are swapping elements of `foo` manually
-  --> $DIR/swap.rs:26:5
+  --> $DIR/swap.rs:45:5
    |
 LL | /     let temp = foo[0];
 LL | |     foo[0] = foo[1];
@@ -25,7 +25,7 @@ LL | |     foo[1] = temp;
    | |_________________^ help: try: `foo.swap(0, 1)`
 
 error: this looks like you are swapping `a` and `b` manually
-  --> $DIR/swap.rs:45:7
+  --> $DIR/swap.rs:65:7
    |
 LL |       ; let t = a;
    |  _______^
@@ -36,7 +36,7 @@ LL | |     b = t;
    = note: or maybe you should use `std::mem::replace`?
 
 error: this looks like you are swapping `c.0` and `a` manually
-  --> $DIR/swap.rs:54:7
+  --> $DIR/swap.rs:74:7
    |
 LL |       ; let t = c.0;
    |  _______^
@@ -47,7 +47,7 @@ LL | |     a = t;
    = note: or maybe you should use `std::mem::replace`?
 
 error: this looks like you are trying to swap `a` and `b`
-  --> $DIR/swap.rs:42:5
+  --> $DIR/swap.rs:62:5
    |
 LL | /     a = b;
 LL | |     b = a;
@@ -57,7 +57,7 @@ LL | |     b = a;
    = note: or maybe you should use `std::mem::replace`?
 
 error: this looks like you are trying to swap `c.0` and `a`
-  --> $DIR/swap.rs:51:5
+  --> $DIR/swap.rs:71:5
    |
 LL | /     c.0 = a;
 LL | |     a = c.0;