diff options
Diffstat (limited to 'tests/ui/disallowed-deconstructing')
6 files changed, 117 insertions, 0 deletions
diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.fixed b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.fixed new file mode 100644 index 000000000..ae0a84eea --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.fixed @@ -0,0 +1,21 @@ +// run-rustfix +struct X { + x: String, +} + +impl Drop for X { + fn drop(&mut self) { + println!("value: {}", self.x); + } +} + +fn unwrap(x: X) -> String { + let X { x: ref y } = x; //~ ERROR cannot move out of type + y.to_string() +} + +fn main() { + let x = X { x: "hello".to_string() }; + let y = unwrap(x); + println!("contents: {}", y); +} diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.rs b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.rs new file mode 100644 index 000000000..c8db78610 --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.rs @@ -0,0 +1,21 @@ +// run-rustfix +struct X { + x: String, +} + +impl Drop for X { + fn drop(&mut self) { + println!("value: {}", self.x); + } +} + +fn unwrap(x: X) -> String { + let X { x: y } = x; //~ ERROR cannot move out of type + y.to_string() +} + +fn main() { + let x = X { x: "hello".to_string() }; + let y = unwrap(x); + println!("contents: {}", y); +} diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.stderr b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.stderr new file mode 100644 index 000000000..596ad4bf7 --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-let.stderr @@ -0,0 +1,17 @@ +error[E0509]: cannot move out of type `X`, which implements the `Drop` trait + --> $DIR/disallowed-deconstructing-destructing-struct-let.rs:13:22 + | +LL | let X { x: y } = x; + | - ^ cannot move out of here + | | + | data moved here + | move occurs because `y` has type `String`, which does not implement the `Copy` trait + | +help: consider borrowing the pattern binding + | +LL | let X { x: ref y } = x; + | +++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0509`. diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.fixed b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.fixed new file mode 100644 index 000000000..c8a451efe --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.fixed @@ -0,0 +1,19 @@ +// run-rustfix +struct X { + x: String, +} + +impl Drop for X { + fn drop(&mut self) { + println!("value: {}", self.x); + } +} + +fn main() { + let x = X { x: "hello".to_string() }; + + match x { + //~^ ERROR cannot move out of type `X`, which implements the `Drop` trait + X { x: ref y } => println!("contents: {}", y) + } +} diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.rs b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.rs new file mode 100644 index 000000000..815567ffe --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.rs @@ -0,0 +1,19 @@ +// run-rustfix +struct X { + x: String, +} + +impl Drop for X { + fn drop(&mut self) { + println!("value: {}", self.x); + } +} + +fn main() { + let x = X { x: "hello".to_string() }; + + match x { + //~^ ERROR cannot move out of type `X`, which implements the `Drop` trait + X { x: y } => println!("contents: {}", y) + } +} diff --git a/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.stderr b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.stderr new file mode 100644 index 000000000..e32a4dd44 --- /dev/null +++ b/tests/ui/disallowed-deconstructing/disallowed-deconstructing-destructing-struct-match.stderr @@ -0,0 +1,20 @@ +error[E0509]: cannot move out of type `X`, which implements the `Drop` trait + --> $DIR/disallowed-deconstructing-destructing-struct-match.rs:15:11 + | +LL | match x { + | ^ cannot move out of here +LL | +LL | X { x: y } => println!("contents: {}", y) + | - + | | + | data moved here + | move occurs because `y` has type `String`, which does not implement the `Copy` trait + | +help: consider borrowing the pattern binding + | +LL | X { x: ref y } => println!("contents: {}", y) + | +++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0509`. |