http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61082
--- Comment #14 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to David Greene from comment #13) > I see that 3.2.3 4 (b) is talking about considering adjacent fields in an > eightbyte. Is the intent to classify each eightbyte in an aggregate and > then consider each eightbyte separately for assigning argument and return > registers? That is correct. > The post-merger cleanup described in 5 appears to handle passing in memory > in that it considers all of the fields in the aggregate together. > > Given the above, if a field crosses an eightbyte either it is larger than an > eightbyte either it is unaligned which forces the whole argument to memory > or its eightbytes are classified separately in a recursive manner. > > Does this sound correct? If so, I think gcc is correct in what it's doing. I think GCC is correct.