diff --git a/zerocopy-derive/tests/deprecated.rs b/zerocopy-derive/tests/deprecated.rs new file mode 100644 index 0000000000..9d11a711d5 --- /dev/null +++ b/zerocopy-derive/tests/deprecated.rs @@ -0,0 +1,48 @@ +// Copyright 2024 The Fuchsia Authors +// +// Licensed under a BSD-style license , Apache License, Version 2.0 +// , or the MIT +// license , at your option. +// This file may not be copied, modified, or distributed except according to +// those terms. + +// See comment in `include.rs` for why we disable the prelude. +#![no_implicit_prelude] +#![allow(warnings)] +#![deny(deprecated)] + +include!("include.rs"); + +// Make sure no deprecation warnings are generated from our derives (see #553). + +#[macro_export] +macro_rules! test { + ($name:ident => $ty:item => $($trait:ident),*) => { + #[allow(non_snake_case)] + mod $name { + $( + mod $trait { + use super::super::*; + + #[deprecated = "do not use"] + #[derive(imp::$trait)] + $ty + + #[allow(deprecated)] + fn _allow_deprecated() { + util_assert_impl_all!($name: imp::$trait); + } + } + )* + } + }; +} + +// NOTE: `FromBytes` is tested separately in `enum_from_bytes.rs` since it +// requires 256-variant enums which are extremely verbose; such enums are +// already in that file. +test!(Enum => #[repr(u8)] enum Enum { A, } => TryFromBytes, FromZeros, KnownLayout, Immutable, IntoBytes, Unaligned); + +test!(Struct => #[repr(C)] struct Struct; => TryFromBytes, FromZeros, FromBytes, KnownLayout, Immutable, IntoBytes, Unaligned); + +test!(Union => #[repr(C)] union Union{ a: (), } => TryFromBytes, FromZeros, FromBytes, KnownLayout, Immutable, IntoBytes, Unaligned); diff --git a/zerocopy-derive/tests/enum_from_bytes.rs b/zerocopy-derive/tests/enum_from_bytes.rs index 2fd33d5fcf..10479d87e1 100644 --- a/zerocopy-derive/tests/enum_from_bytes.rs +++ b/zerocopy-derive/tests/enum_from_bytes.rs @@ -9,6 +9,7 @@ // See comment in `include.rs` for why we disable the prelude. #![no_implicit_prelude] #![allow(warnings)] +#![deny(deprecated)] include!("include.rs"); @@ -29,6 +30,8 @@ include!("include.rs"); // `Variant128` has a discriminant of -128) since Rust won't automatically wrap // a signed discriminant around without you explicitly telling it to. +// Make sure no deprecation warning is generated from our derive (see #553). +#[deprecated = "do not use"] #[derive(imp::FromBytes)] #[repr(u8)] enum FooU8 { @@ -290,7 +293,10 @@ enum FooU8 { Variant255, } -util_assert_impl_all!(FooU8: imp::FromBytes); +#[allow(deprecated)] +fn _allow_deprecated() { + util_assert_impl_all!(FooU8: imp::FromBytes); +} #[derive(imp::FromBytes)] #[repr(i8)]