https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82914
Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |egallager at gcc dot gnu.org --- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to Richard Biener from comment #2) > (In reply to Paul Eggert from comment #1) > > (In reply to Paul Eggert from comment #0) > > > > Sorry, but my example in comment #0 (although it illustrates a bug) doesn't > > illustrate the bug that crashed GCC. Here's a better example: > > > > struct t { long mem; }; > > __attribute__ ((aligned (2))) struct t a; > > struct __attribute__ ((aligned (2))) t b; > > struct t __attribute__ ((aligned (2))) c; > > struct t d __attribute__ ((aligned (2))); > > > > This compiles into: > > > > .comm a,8,2 > > .comm b,8,8 > > .comm c,8,2 > > .comm d,8,2 > > > > Here, only 'b' is aligned correctly. The variables a, c, and d have an > > alignment of only 2, but they should have an alignment of 8 because > > __attribute__ ((aligned (8))) is documented to never decrease the alignment > > of a structure, only to increase it. The GCC 7.2 documentation > > <https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Common-Variable-Attributes. > > html> says, "When used on a struct, or struct member, the 'aligned' > > attribute can only increase the alignment; in order to decrease it, the > > 'packed' attribute must be specified as well." > > I think this applies to types but not to variables. IIRC there's no packed > attribute for variables: > > int a __attribute__((aligned(2),packed)); > > gcc-7 -S t.c > t.c:1:1: warning: ‘packed’ attribute ignored [-Wattributes] > int a __attribute__((aligned(2),packed)); > ^~~ > > so yes, for type definitions you should need packed to decrease alignment > but for variable declarations aligned is taken literally. > > You are not using aligned on a 'struct or struct member' but on the variable > in all but (b). You'd still think there'd be a diagnostic from -Wattributes for the aligned attribute, too, not just the packed one...