From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 117282 invoked by alias); 12 Dec 2015 18:43:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 117269 invoked by uid 89); 12 Dec 2015 18:43:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail2-relais-roc.national.inria.fr Received: from mail2-relais-roc.national.inria.fr (HELO mail2-relais-roc.national.inria.fr) (192.134.164.83) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Sat, 12 Dec 2015 18:43:07 +0000 Received: from afontenayssb-151-1-12-96.w82-121.abo.wanadoo.fr (HELO laptop-mg.local) ([82.121.218.96]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Dec 2015 19:43:04 +0100 Date: Sat, 12 Dec 2015 18:43:00 -0000 From: Marc Glisse Reply-To: gcc-patches@gcc.gnu.org To: Jakub Jelinek cc: Jason Merrill , "H.J. Lu" , Richard Biener , Markus Trippelsdorf , GCC Patches Subject: Re: PING^1: [PATCH] Add TYPE_EMPTY_RECORD for C++ empty class In-Reply-To: <20151212152731.GB18720@tucnak.redhat.com> Message-ID: References: <20151209213118.GC317@x4> <566C346B.8030601@redhat.com> <20151212152731.GB18720@tucnak.redhat.com> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed X-SW-Source: 2015-12/txt/msg01333.txt.bz2 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)? >>>>> 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