On Sat, Dec 12, 2015 at 7:27 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Sat, Dec 12, 2015 at 09:51:23AM -0500, Jason Merrill wrote: >> On 12/11/2015 06:52 PM, H.J. Lu wrote: >> >On Thu, Dec 10, 2015 at 3:24 AM, Richard Biener >> ><richard.guent...@gmail.com> wrote: >> >>On Wed, Dec 9, 2015 at 10:31 PM, Markus Trippelsdorf >> >><mar...@trippelsdorf.de> wrote: >> >>>On 2015.12.09 at 10:53 -0800, H.J. Lu wrote: >> >>>> >> >>>>Empty C++ class is a corner case which isn't covered in psABI nor C++ >> >>>>ABI. >> >>>>There is no mention of "empty record" in GCC documentation. But there >> >>>>are >> >>>>plenty of "empty class" in gcc/cp. This change affects all targets. >> >>>>C++ ABI >> >>>>should specify how it should be passed. >> >>> >> >>>There is a C++ ABI mailinglist, where you could discuss this issue: >> >>>http://sourcerytools.com/cgi-bin/mailman/listinfo/cxx-abi-dev >> >> >> >>Yep. As long as the ABI doesn't state how to pass those I'd rather _not_ >> >>change >> >>GCCs way. >> > >> >It is agreed that GCC is wrong on this: >> > >> >http://sourcerytools.com/pipermail/cxx-abi-dev/2015-December/002876.html >> >> Yes, I think this is just a (nasty) bug on some GCC targets. > > Well, the argument in that thread is weird, because C and C++ empty structs > are different, so it isn't surprising they are passed differently. > C++ makes those sizeof == 1, while C has them sizeof == 0. > So I rather think clang should change rather than GCC. >
But according to x86-64 psABI, sizeof == 1 should be passed in register, not on stack. This leads to weird GCC bugs like: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67239 -- H.J.