https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53037
--- Comment #29 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to r...@cebitec.uni-bielefeld.de from comment #28) > > --- Comment #27 from H.J. Lu <hjl.tools at gmail dot com> --- > > > What are error messages? > > None, the warnings are simply missing. > > Rainer Sparc defines STRICT_ALIGNMENT which leads to unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type)); /* Don't override a larger alignment requirement coming from a user alignment of one of the fields. */ if (mode_align >= TYPE_ALIGN (type)) { SET_TYPE_ALIGN (type, mode_align); TYPE_USER_ALIGN (type) = 0; } so __attribute__ ((packed)) is basically ignored on Sparc. This patch diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 3028d55773a..6dd605810ac 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1784,7 +1784,7 @@ finalize_type_size (tree type) /* Don't override a larger alignment requirement coming from a user alignment of one of the fields. */ - if (mode_align >= TYPE_ALIGN (type)) + if (mode_align > TYPE_ALIGN (type)) { SET_TYPE_ALIGN (type, mode_align); TYPE_USER_ALIGN (type) = 0; works with cross compiler. But I have no idea if it is correct.