On Sat, Jul 04, 2015 at 12:57:36PM +0200, Richard Biener wrote: > >>>> + if (!AGGREGATE_TYPE_P (type)) > >>>> + return TYPE_ALIGN (TYPE_MAIN_VARIANT (type)) > PARM_BOUNDARY; > >>>> + > >>>> + for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN > >>> (field)) > >>>> + if (DECL_ALIGN (field) > PARM_BOUNDARY) > >>>> + return true; > > I also believe this loop is equivalent to checking TYPE_ALIGN of the > aggregate type?
Is it? What if you do struct __attribute__((aligned (32))) S { char a; int b; char c; }; ? In this case, TYPE_MAIN_VARIANT of S is S itself, and has TYPE_USER_ALIGN and TYPE_ALIGN 256. Jakub