On Mon, Dec 14, 2015 at 12:43 PM, Jason Merrill wrote: > On 12/14/2015 03:39 PM, H.J. Lu wrote: >> >> On Mon, Dec 14, 2015 at 12:16 PM, Jason Merrill wrote: >>> >>> On 12/12/2015 01:42 PM, Marc Glisse wrote: >>>> >>>> >>>> On Sat, 12 Dec 2015, Jakub Jelinek 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 >>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Dec 9, 2015 at 10:31 PM, Markus Trippelsdorf >>>>>>>> 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. >>>> >>>> >>>> >>>> >>>> About this patch, aren't we supposed to enable new C++ ABIs with >>>> -fabi-version=42 (or whatever the next number is)? >>> >>> >>> >>> Yes, the patch should definitely make this conditional on >>> abi_version_at_least. >>> >>>>>>>>> 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. >>>> >>>> >>>> >>>> Maybe it isn't surprising, but it isn't particularly helpful either. It >>>> increases the number of places where the 2 are incompatible. >>>> (I personally don't care about empty C structs) >>> >>> >>> >>> Yep. The C standard doesn't have empty structs; it's a GNU extension. >>> But >>> in any case argument passing can be compatible between C and C++, so it >>> really should be. >>> >>> >> >> Before I make any changes, I'd like to ask if we should make >> argument passing can be compatible between C and C++ for >> all targets GCC support or just x86. > > > All. Here is the patch to guard this ABI change with the ABI level 10, which is updated in GCC 6. OK for master if there is no regression on x86? The patch for non-x86 targets is at https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01063.html -- H.J.