// Copyright 2023 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. extern crate zerocopy_renamed; use zerocopy_renamed::KnownLayout; fn main() {} // These tests cause errors which are generated by a later compilation pass than // the other errors we generate, and so if they're compiled in the same file, // the compiler will never get to that pass, and so we won't get the errors. // // KnownLayout errors // fn assert_kl(_: &T) {} // -| `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name | // -| N | Y | N | N | KL04 | #[derive(KnownLayout)] #[zerocopy(crate = "zerocopy_renamed")] struct KL04(u8, T); fn test_kl04(kl: &KL04) { assert_kl(kl); //~[msrv, stable, nightly]^ ERROR: the size for values of type `T` cannot be known at compilation time } // -| `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name | // -| N | Y | Y | N | KL06 | #[derive(KnownLayout)] #[zerocopy(crate = "zerocopy_renamed")] struct KL06(u8, T); fn test_kl06(kl: &KL06) { assert_kl(kl); //~[msrv, stable, nightly]^ ERROR: the size for values of type `T` cannot be known at compilation time } // -| `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name | // -| Y | Y | N | N | KL12 | #[derive(KnownLayout)] #[zerocopy(crate = "zerocopy_renamed")] #[repr(C)] struct KL12(u8, T); fn test_kl12(kl: &KL12) { assert_kl(kl) //~[msrv]^ ERROR: the trait bound `T: KnownLayout` is not satisfied //~[stable, nightly]^^ ERROR: the trait bound `KL12: KnownLayout` is not satisfied } // -| `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name | // -| Y | Y | N | Y | KL13 | #[derive(KnownLayout)] #[zerocopy(crate = "zerocopy_renamed")] #[repr(C)] struct KL13(u8, T); fn test_kl13(t: T) -> impl KnownLayout { //~[msrv, stable, nightly]^ ERROR: the trait bound `T: KnownLayout` is not satisfied KL13(0u8, t) }