On Mon, Dec 14, 2015 at 2:08 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Mon, Dec 14, 2015 at 12:43 PM, Jason Merrill <ja...@redhat.com> wrote: >> On 12/14/2015 03:39 PM, H.J. Lu wrote: >>> >>> On Mon, Dec 14, 2015 at 12:16 PM, Jason Merrill <ja...@redhat.com> 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 >>>>>>>> <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. >>>>> >>>>> >>>>> >>>>> >>>>> 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 >
PING: https://gcc.gnu.org/ml/gcc-patches/2015-12/msg01444.html -- H.J.