On Thu, 15 Feb 2007 22:18:39 +0000 Ralf Baechle <ralf@xxxxxxxxxxxxxx> wrote: > On Thu, Feb 15, 2007 at 01:53:58PM -0800, Andrew Morton wrote: > > > > The whole union thing was only needed to get rid of a warning but Marcel's > > > solution does the same thing by attaching the packed keyword to the entire > > > structure instead, so this patch is now using his macros but using __packed > > > instead. > > > > How do we know this trick will work as-designed across all versions of gcc > > and icc (at least) and for all architectures and for all sets of compiler > > options? > > > > Basically, it has to be guaranteed by a C standard. Is it? > > Gcc info page says: > > [...] > `packed' > The `packed' attribute specifies that a variable or structure field > should have the smallest possible alignment--one byte for a > variable, and one bit for a field, unless you specify a larger > value with the `aligned' attribute. > [...] > hm. So if I have struct bar { unsigned long b; } __attribute__((packed)); struct foo { unsigned long u; struct bar b; }; then the compiler can see that foo.b.b is well-aligned, regardless of the packedness. Plus some crazy people compile the kernel with icc (or at least they used to). What happens there? > Qed? worried.