Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0588: packed type cannot transitively contain a `#[repr(align)]` type
What it meansA type with packed representation hint has a field with align representation hint.
What rustc prints
error[E0588]: packed type cannot transitively contain a `#[repr(align)]` type --> main.rs:5:1 | 5 | struct Packed(Aligned); | ^^^^^^^^^^^^^ | note: `Aligned` has a `#[repr(align)]` attribute --> main.rs:2:1 | 2 | struct Aligned(i32); | ^^^^^^^^^^^^^^
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A type with packed representation hint has a field with align representation hint.
Erroneous code example:
#[repr(align(16))]
struct Aligned(i32);
#[repr(packed)] // error!
struct Packed(Aligned);
Just like you cannot have both align and packed representation hints on the same type, a packed type cannot contain another type with the align representation hint. However, you can do the opposite:
#[repr(packed)]
struct Packed(i32);
#[repr(align(16))] // ok!
struct Aligned(Packed);From rustc --explain E0588 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?