https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82914
--- Comment #4 from Paul Eggert <eggert at gnu dot org> --- (In reply to Richard Biener from comment #2) > You are not using aligned on a 'struct or struct member' but on the variable > in all but (b). If that's the intent, then GCC is mishandling the first example I gave in comment #0: struct s { char mem; }; __attribute__ ((aligned (8))) struct s a; struct __attribute__ ((aligned (8))) s b; struct s __attribute__ ((aligned (8))) c; struct s d __attribute__ ((aligned (8))); Here, GCC says the alignment of 'b' is 1, not 8. What happened to the attribute? Later discussion in https://bugs.gnu.org/29183 has revealed that this first example is also relevant to Emacs, and that Emacs crashes due to problems in this area as well. In summary there seems to be no straightforward way in GNU C to get what Emacs wants, which is to say, "I want V's address to be a multiple of max(8, (natural alignment for V))." I think I'll look into fixing Emacs to use unions instead. Could you please fix the GCC documentation to clarify what's going on here? I don't understand it myself, so I'm afraid any doc patch that I propose wouldc be wrong.