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)?


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)

So I rather think clang should change rather than GCC.

Passing empty arguments (with trivial copy constructor, etc) is a complete waste. Not passing them is strictly superior. The only reason to prefer passing them is that that's what gcc does and changing would break the ABI. I could understand clang being unhappy if they have to both break ABI compatibility with their older versions and move towards an inferior ABI... (arguably they could have copied the de facto gcc ABI to begin with) They might be willing to do it on linux-x86, but not on ios/mac where they dominate and compatibility with their own earlier versions matters more than compatibility with gcc?

--
Marc Glisse

Reply via email to