From 34eb2c1d4ff61693ab45863ee0f9ee298148a1ab Mon Sep 17 00:00:00 2001 From: Matthew Jasper Date: Wed, 22 Apr 2020 21:40:18 +0100 Subject: Report cannot move errors in promoted MIR --- src/test/ui/borrowck/move-error-in-promoted-2.rs | 10 ++++++++++ src/test/ui/borrowck/move-error-in-promoted-2.stderr | 12 ++++++++++++ src/test/ui/borrowck/move-error-in-promoted.rs | 17 +++++++++++++++++ src/test/ui/borrowck/move-error-in-promoted.stderr | 12 ++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 src/test/ui/borrowck/move-error-in-promoted-2.rs create mode 100644 src/test/ui/borrowck/move-error-in-promoted-2.stderr create mode 100644 src/test/ui/borrowck/move-error-in-promoted.rs create mode 100644 src/test/ui/borrowck/move-error-in-promoted.stderr (limited to 'src/test') diff --git a/src/test/ui/borrowck/move-error-in-promoted-2.rs b/src/test/ui/borrowck/move-error-in-promoted-2.rs new file mode 100644 index 00000000000..13da34f3922 --- /dev/null +++ b/src/test/ui/borrowck/move-error-in-promoted-2.rs @@ -0,0 +1,10 @@ +// Regression test for #70934 + +struct S; + +fn foo() { + &([S][0],); + //~^ ERROR cannot move out of type `[S; 1]` +} + +fn main() {} diff --git a/src/test/ui/borrowck/move-error-in-promoted-2.stderr b/src/test/ui/borrowck/move-error-in-promoted-2.stderr new file mode 100644 index 00000000000..38dba94bdd4 --- /dev/null +++ b/src/test/ui/borrowck/move-error-in-promoted-2.stderr @@ -0,0 +1,12 @@ +error[E0508]: cannot move out of type `[S; 1]`, a non-copy array + --> $DIR/move-error-in-promoted-2.rs:6:7 + | +LL | &([S][0],); + | ^^^^^^ + | | + | cannot move out of here + | move occurs because value has type `S`, which does not implement the `Copy` trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0508`. diff --git a/src/test/ui/borrowck/move-error-in-promoted.rs b/src/test/ui/borrowck/move-error-in-promoted.rs new file mode 100644 index 00000000000..b94db645131 --- /dev/null +++ b/src/test/ui/borrowck/move-error-in-promoted.rs @@ -0,0 +1,17 @@ +// Regression test for #70934 + +fn f() { + const C: [S2; 1] = [S2]; + let _ = S1(C[0]).clone(); + //~^ ERROR cannot move out of type `[S2; 1]` +} + +#[derive(Clone)] +struct S1(S2); + +#[derive(Clone)] +struct S2; + +fn main() { + f(); +} diff --git a/src/test/ui/borrowck/move-error-in-promoted.stderr b/src/test/ui/borrowck/move-error-in-promoted.stderr new file mode 100644 index 00000000000..a4432e38da0 --- /dev/null +++ b/src/test/ui/borrowck/move-error-in-promoted.stderr @@ -0,0 +1,12 @@ +error[E0508]: cannot move out of type `[S2; 1]`, a non-copy array + --> $DIR/move-error-in-promoted.rs:5:16 + | +LL | let _ = S1(C[0]).clone(); + | ^^^^ + | | + | cannot move out of here + | move occurs because value has type `S2`, which does not implement the `Copy` trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0508`. -- cgit 1.4.1-3-g733a5