https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90204
--- Comment #12 from rguenther at suse dot de <rguenther at suse dot de> --- On Thu, 25 Apr 2019, hjl.tools at gmail dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90204 > > --- Comment #11 from H.J. Lu <hjl.tools at gmail dot com> --- > (In reply to Hongtao.liu from comment #7) > > Yes, C++ with NRV optization, so the alignment of <retval>(res) is 4. > > and the alignment of res is 16 in C. > > > > g++/test.i.158t.vect: > > > > ../test.i:8:23: note: recording new base alignment for &<retval> > > alignment: 4 > > misalignment: 0 > > > > gcc/test.i.158t.vect: > > > > ../test.i:8:5: note: recording new base alignment for &res > > alignment: 16 > > misalignment: 0 > > > > When alignment of res is 16, that triggers loop peeling of vectorization. > > > > Why does struct v have different alignments in C and C++? I think we re-align automatic variables but obviously cannot do the same for incoming DECL_RESULT.