diff options
Diffstat (limited to 'tests/ui-nightly')
-rw-r--r-- | tests/ui-nightly/invalid-impls/invalid-impls.rs | 25 | ||||
-rw-r--r-- | tests/ui-nightly/invalid-impls/invalid-impls.stderr | 107 | ||||
-rw-r--r-- | tests/ui-nightly/transmute-illegal.rs | 10 | ||||
-rw-r--r-- | tests/ui-nightly/transmute-illegal.stderr | 16 |
4 files changed, 158 insertions, 0 deletions
diff --git a/tests/ui-nightly/invalid-impls/invalid-impls.rs b/tests/ui-nightly/invalid-impls/invalid-impls.rs new file mode 100644 index 0000000..b9a60bd --- /dev/null +++ b/tests/ui-nightly/invalid-impls/invalid-impls.rs @@ -0,0 +1,25 @@ +// Copyright 2022 The Fuchsia Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Since some macros from `macros.rs` are unused. +#![allow(unused)] + +extern crate zerocopy; +extern crate zerocopy_derive; + +include!("../../../src/macros.rs"); + +use zerocopy::*; +use zerocopy_derive::*; + +fn main() {} + +#[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] +#[repr(transparent)] +struct Foo<T>(T); + +impl_or_verify!(T => FromZeroes for Foo<T>); +impl_or_verify!(T => FromBytes for Foo<T>); +impl_or_verify!(T => AsBytes for Foo<T>); +impl_or_verify!(T => Unaligned for Foo<T>); diff --git a/tests/ui-nightly/invalid-impls/invalid-impls.stderr b/tests/ui-nightly/invalid-impls/invalid-impls.stderr new file mode 100644 index 0000000..7d839ac --- /dev/null +++ b/tests/ui-nightly/invalid-impls/invalid-impls.stderr @@ -0,0 +1,107 @@ +error[E0277]: the trait bound `T: zerocopy::FromZeroes` is not satisfied + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:22:37 + | +22 | impl_or_verify!(T => FromZeroes for Foo<T>); + | ^^^^^^ the trait `zerocopy::FromZeroes` is not implemented for `T` + | +note: required for `Foo<T>` to implement `zerocopy::FromZeroes` + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:18:10 + | +18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] + | ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro +note: required by a bound in `_::Subtrait` + --> tests/ui-nightly/invalid-impls/../../../src/macros.rs + | + | trait Subtrait: $trait {} + | ^^^^^^ required by this bound in `Subtrait` + | + ::: tests/ui-nightly/invalid-impls/invalid-impls.rs:22:1 + | +22 | impl_or_verify!(T => FromZeroes for Foo<T>); + | ------------------------------------------- in this macro invocation + = note: this error originates in the derive macro `FromZeroes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) +help: consider restricting type parameter `T` + | +22 | impl_or_verify!(T: zerocopy::FromZeroes => FromZeroes for Foo<T>); + | ++++++++++++++++++++++ + +error[E0277]: the trait bound `T: zerocopy::FromBytes` is not satisfied + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:23:36 + | +23 | impl_or_verify!(T => FromBytes for Foo<T>); + | ^^^^^^ the trait `zerocopy::FromBytes` is not implemented for `T` + | +note: required for `Foo<T>` to implement `zerocopy::FromBytes` + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:18:22 + | +18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] + | ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro +note: required by a bound in `_::Subtrait` + --> tests/ui-nightly/invalid-impls/../../../src/macros.rs + | + | trait Subtrait: $trait {} + | ^^^^^^ required by this bound in `Subtrait` + | + ::: tests/ui-nightly/invalid-impls/invalid-impls.rs:23:1 + | +23 | impl_or_verify!(T => FromBytes for Foo<T>); + | ------------------------------------------ in this macro invocation + = note: this error originates in the derive macro `FromBytes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) +help: consider restricting type parameter `T` + | +23 | impl_or_verify!(T: zerocopy::FromBytes => FromBytes for Foo<T>); + | +++++++++++++++++++++ + +error[E0277]: the trait bound `T: zerocopy::AsBytes` is not satisfied + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:24:34 + | +24 | impl_or_verify!(T => AsBytes for Foo<T>); + | ^^^^^^ the trait `zerocopy::AsBytes` is not implemented for `T` + | +note: required for `Foo<T>` to implement `zerocopy::AsBytes` + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:18:33 + | +18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] + | ^^^^^^^ unsatisfied trait bound introduced in this `derive` macro +note: required by a bound in `_::Subtrait` + --> tests/ui-nightly/invalid-impls/../../../src/macros.rs + | + | trait Subtrait: $trait {} + | ^^^^^^ required by this bound in `Subtrait` + | + ::: tests/ui-nightly/invalid-impls/invalid-impls.rs:24:1 + | +24 | impl_or_verify!(T => AsBytes for Foo<T>); + | ---------------------------------------- in this macro invocation + = note: this error originates in the derive macro `AsBytes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) +help: consider restricting type parameter `T` + | +24 | impl_or_verify!(T: zerocopy::AsBytes => AsBytes for Foo<T>); + | +++++++++++++++++++ + +error[E0277]: the trait bound `T: zerocopy::Unaligned` is not satisfied + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:25:36 + | +25 | impl_or_verify!(T => Unaligned for Foo<T>); + | ^^^^^^ the trait `zerocopy::Unaligned` is not implemented for `T` + | +note: required for `Foo<T>` to implement `zerocopy::Unaligned` + --> tests/ui-nightly/invalid-impls/invalid-impls.rs:18:42 + | +18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] + | ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro +note: required by a bound in `_::Subtrait` + --> tests/ui-nightly/invalid-impls/../../../src/macros.rs + | + | trait Subtrait: $trait {} + | ^^^^^^ required by this bound in `Subtrait` + | + ::: tests/ui-nightly/invalid-impls/invalid-impls.rs:25:1 + | +25 | impl_or_verify!(T => Unaligned for Foo<T>); + | ------------------------------------------ in this macro invocation + = note: this error originates in the derive macro `Unaligned` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) +help: consider restricting type parameter `T` + | +25 | impl_or_verify!(T: zerocopy::Unaligned => Unaligned for Foo<T>); + | +++++++++++++++++++++ diff --git a/tests/ui-nightly/transmute-illegal.rs b/tests/ui-nightly/transmute-illegal.rs new file mode 100644 index 0000000..74b8439 --- /dev/null +++ b/tests/ui-nightly/transmute-illegal.rs @@ -0,0 +1,10 @@ +// Copyright 2022 The Fuchsia Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +extern crate zerocopy; + +fn main() {} + +// It is unsound to inspect the usize value of a pointer during const eval. +const POINTER_VALUE: usize = zerocopy::transmute!(&0usize as *const usize); diff --git a/tests/ui-nightly/transmute-illegal.stderr b/tests/ui-nightly/transmute-illegal.stderr new file mode 100644 index 0000000..a57544b --- /dev/null +++ b/tests/ui-nightly/transmute-illegal.stderr @@ -0,0 +1,16 @@ +error[E0277]: the trait bound `*const usize: AsBytes` is not satisfied + --> tests/ui-nightly/transmute-illegal.rs:10:30 + | +10 | const POINTER_VALUE: usize = zerocopy::transmute!(&0usize as *const usize); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | | + | the trait `AsBytes` is not implemented for `*const usize` + | required by a bound introduced by this call + | + = help: the trait `AsBytes` is implemented for `usize` +note: required by a bound in `POINTER_VALUE::transmute` + --> tests/ui-nightly/transmute-illegal.rs:10:30 + | +10 | const POINTER_VALUE: usize = zerocopy::transmute!(&0usize as *const usize); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `transmute` + = note: this error originates in the macro `zerocopy::transmute` (in Nightly builds, run with -Z macro-backtrace for more info) |