Invalid `derive(FromBytes)` is not eagerly checked for lifetime-generic `struct`
- Dominant language
- Rust
- Stars
- 2.6k
- Forks
- 179
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 29
Description
**Example:**
```rust
use zerocopy::FromBytes;
#[repr(C)]
#[derive(FromBytes)]
struct Foo<'a> {
x: &'a [u8],
}
```
**What I expect to happen:** This `derive` will be rejected as soon as it is declared, since `&[T]` is never `FromBytes`. Since it would never be valid for a type to conditionally `impl FromBytes` based on an internal lifetime, the lifetime parameter should not need to be taken into account to reject the `derive` before its first use.
**What actually happens:** The failure to `derive(FromBytes)` is only evident when you try to use it (e.g. `transmute!([0x01; size_of::()])`). If I change it to `struct Foo { x: &'static [u8] }`, the `derive` eagerly rejects as expected.
Contributor guide
Assessment
This issue has not been assessed yet.