// SPDX-License-Identifier: GPL-2.0-or-later //! Defines a trait for structs that can be safely initialized with zero bytes. /// Encapsulates the requirement that /// `MaybeUninit::::zeroed().assume_init()` does not cause undefined /// behavior. /// /// # Safety /// /// Do not add this trait to a type unless all-zeroes is a valid value for the /// type. In particular, raw pointers can be zero, but references and /// `NonNull` cannot. pub unsafe trait Zeroable: Default { /// Return a value of Self whose memory representation consists of all /// zeroes, with the possible exclusion of padding bytes. const ZERO: Self = unsafe { ::core::mem::MaybeUninit::::zeroed().assume_init() }; } // bindgen does not derive Default here #[allow(clippy::derivable_impls)] impl Default for crate::bindings::VMStateFlags { fn default() -> Self { Self(0) } } unsafe impl Zeroable for crate::bindings::Property__bindgen_ty_1 {} unsafe impl Zeroable for crate::bindings::Property {} unsafe impl Zeroable for crate::bindings::VMStateFlags {} unsafe impl Zeroable for crate::bindings::VMStateField {} unsafe impl Zeroable for crate::bindings::VMStateDescription {} unsafe impl Zeroable for crate::bindings::MemoryRegionOps__bindgen_ty_1 {} unsafe impl Zeroable for crate::bindings::MemoryRegionOps__bindgen_ty_2 {} unsafe impl Zeroable for crate::bindings::MemoryRegionOps {} unsafe impl Zeroable for crate::bindings::MemTxAttrs {} unsafe impl Zeroable for crate::bindings::CharBackend {}