From: Cristian Kubis Date: Mon, 2 Sep 2019 12:15:52 +0000 (+0200) Subject: Add more UI tests for swap X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=9041856ab9785c8dd97aa47be8798e4126fbd504;p=rust.git Add more UI tests for swap These tests make sure that the swap warning will not be triggered for expressions that will cause multiple mutable references of the same owner --- diff --git a/tests/ui/swap.rs b/tests/ui/swap.rs index 9db8dcbf75e..093cd7fd04a 100644 --- a/tests/ui/swap.rs +++ b/tests/ui/swap.rs @@ -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(); diff --git a/tests/ui/swap.stderr b/tests/ui/swap.stderr index 5d818cf2056..bda0a0bf38b 100644 --- a/tests/ui/swap.stderr +++ b/tests/ui/swap.stderr @@ -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;