diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-11-19 17:04:24 +0200 |
|---|---|---|
| committer | Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> | 2017-11-26 16:12:43 +0200 |
| commit | 617b413e18f8a6bbd24853f5bf84e8a4ac319ae1 (patch) | |
| tree | 1acc1883e0cd5414436f18f7fe6b2b81f94d1a3d /src/test | |
| parent | dee8a71cd5221536c319ca8c14108e93521092f5 (diff) | |
| download | rust-617b413e18f8a6bbd24853f5bf84e8a4ac319ae1.tar.gz rust-617b413e18f8a6bbd24853f5bf84e8a4ac319ae1.zip | |
limit packed copy-out to non-generic Copy structs
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/compile-fail/deriving-with-repr-packed-not-copy.rs | 8 | ||||
| -rw-r--r-- | src/test/run-pass/deriving-with-repr-packed.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/deriving-with-repr-packed.rs | 27 | ||||
| -rw-r--r-- | src/test/ui/deriving-with-repr-packed.stderr | 34 |
4 files changed, 66 insertions, 5 deletions
diff --git a/src/test/compile-fail/deriving-with-repr-packed-not-copy.rs b/src/test/compile-fail/deriving-with-repr-packed-not-copy.rs index 5ab916b91fa..55dc3380209 100644 --- a/src/test/compile-fail/deriving-with-repr-packed-not-copy.rs +++ b/src/test/compile-fail/deriving-with-repr-packed-not-copy.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![deny(safe_packed_borrows)] + // check that derive on a packed struct with non-Copy fields // correctly. This can't be made to work perfectly because // we can't just use the field from the struct as it might @@ -17,12 +19,10 @@ struct Y(usize); #[derive(PartialEq)] -//~^ ERROR cannot move out of borrowed -//~| ERROR cannot move out of borrowed -//~| ERROR cannot move out of borrowed -//~| ERROR cannot move out of borrowed #[repr(packed)] struct X(Y); +//~^ ERROR #[derive] can't be used on a non-Copy #[repr(packed)] +//~| hard error fn main() { } diff --git a/src/test/run-pass/deriving-with-repr-packed.rs b/src/test/run-pass/deriving-with-repr-packed.rs index fcc31b462f8..f5130908c0b 100644 --- a/src/test/run-pass/deriving-with-repr-packed.rs +++ b/src/test/run-pass/deriving-with-repr-packed.rs @@ -31,7 +31,7 @@ impl PartialEq for Aligned { } #[repr(packed)] -#[derive(PartialEq)] +#[derive(Copy, Clone, PartialEq)] struct Packed(Aligned, Aligned); #[derive(PartialEq)] diff --git a/src/test/ui/deriving-with-repr-packed.rs b/src/test/ui/deriving-with-repr-packed.rs new file mode 100644 index 00000000000..85e0c3ba14e --- /dev/null +++ b/src/test/ui/deriving-with-repr-packed.rs @@ -0,0 +1,27 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(safe_packed_borrows)] + +// check that deriving a non-Copy packed struct is an error. +#[derive(Copy, Clone, PartialEq, Eq)] +#[repr(packed)] +pub struct Foo<T>(T, T, T); +//~^ ERROR #[derive] can't be used +//~| hard error +//~^^^ ERROR #[derive] can't be used +//~| hard error +#[derive(PartialEq, Eq)] +#[repr(packed)] +pub struct Bar(u32, u32, u32); +//~^ ERROR #[derive] can't be used +//~| hard error + +fn main() {} diff --git a/src/test/ui/deriving-with-repr-packed.stderr b/src/test/ui/deriving-with-repr-packed.stderr new file mode 100644 index 00000000000..24ce8a1e59f --- /dev/null +++ b/src/test/ui/deriving-with-repr-packed.stderr @@ -0,0 +1,34 @@ +error: #[derive] can't be used on a #[repr(packed)] struct with type parameters (error E0133) + --> $DIR/deriving-with-repr-packed.rs:16:19 + | +16 | pub struct Foo<T>(T, T, T); + | ^^ + | +note: lint level defined here + --> $DIR/deriving-with-repr-packed.rs:11:9 + | +11 | #![deny(safe_packed_borrows)] + | ^^^^^^^^^^^^^^^^^^^ + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043> + +error: #[derive] can't be used on a #[repr(packed)] struct with type parameters (error E0133) + --> $DIR/deriving-with-repr-packed.rs:16:19 + | +16 | pub struct Foo<T>(T, T, T); + | ^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043> + +error: #[derive] can't be used on a non-Copy #[repr(packed)] struct (error E0133) + --> $DIR/deriving-with-repr-packed.rs:23:16 + | +23 | pub struct Bar(u32, u32, u32); + | ^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043> + +error: aborting due to 5 previous errors + |
