Messages in this thread | | | From | Miguel Ojeda <> | Date | Sat, 7 Jan 2023 01:38:42 +0100 | Subject | Re: [bp:tip-x86-alternatives 1/1] error[E0588]: packed type cannot transitively contain a `#[repr(align)]` type |
| |
On Sat, Jan 7, 2023 at 12:58 AM Borislav Petkov <bp@alien8.de> wrote: > > I figured as much.
Sorry, I didn't mean otherwise, I should have quoted the next paragraph.
You are of course right that the instructions are not complete, I just meant to add a bit of context, i.e. that Rust got enabled due to the config, but as far as I understand, it shouldn't be getting enabled in the other ones for the moment.
> No need - I ran it by hand just to show that I don't have a rust compiler > installed.
My point was that the script expects some variables set by `Makefile`, similar to `$CC` etc., so that output does not imply you have (or not) a suitable Rust toolchain installed (i.e. it will currently also fail if you have it installed).
> Bottom line is: if I get a build report involving a rust compiler, there better > be in the reproduction instructions a hint how to install one so that I can > reproduce. Alternatively, I can always simply ignore it.
Cc'ing Yujie for the robot instructions. Once I reported something missing in the instructions (unrelated to Rust) and they were happy to get the report, so I assume they will want to improve it here too.
Meanwhile (of course it is not the same as proper reproduction instructions since the LKP team may do something different), the documentation on how to set it up for a normal developer is at: https://www.kernel.org/doc/html/latest/rust/quick-start.html, in case it helps (if you are up for it... :)
> And while we're reporting bugs: the error message from the compiler itself could > use some "humanization" - I have zero clue what it is trying to tell me.
What would you want to see? We can ask the relevant Rust team to see if they can improve it.
In general, note that you can ask `rustc` to further explain an error giving it the code with `--explain`. The compiler suggests this itself, but sadly the robot cut it out :(
For more information about this error, try `rustc --explain E0588`
In this case, it gives:
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 a 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); ```
You can also see it rendered in https://doc.rust-lang.org/error_codes/E0588.html, which is also useful if you don't have the toolchain around. Another option if you don't remember the URL is going to Compiler Explorer, e.g. https://godbolt.org/z/Ec17xnGsT.
Yujie: perhaps the robot could avoid dropping that line? Or even better, you could automatically add a URL like above and/or run the compiler with `--explain` and add it directly to the output (with a size limit I guess)? That could probably be very helpful for kernel developers that receive a Rust report.
Cheers, Miguel
| |