http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60336
--- Comment #18 from Jason Merrill <jason at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #17) > classify_argument has an early exit: > > /* Zero sized arrays or structures are NO_CLASS. We return 0 to > signalize memory class, so handle it as special case. */ > > if (!words) > { > classes[0] = X86_64_NO_CLASS; > return 1; > } > > but it doesn't trigger for c++, where words gets calculated as 1. Yes, it looks like this special case is in order to return the same thing that C++ does through the normal logic: normally we return 'words', and since there are no fields classes[0] is still initialized to NO_CLASS.