From patchwork Wed Oct 24 19:48:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 193940 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id E00532C0123 for ; Thu, 25 Oct 2012 06:48:37 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1351712918; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Message-ID:Date:From:User-Agent:MIME-Version: To:CC:Subject:References:In-Reply-To:Content-Type:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=YfivSXVJSAW2JDQNmIgJPBm/Qk0=; b=cOYbbi6pEZiajY7ExYJun6tkepvKpRfl950IoJo1fBXJgyyF5FGcBzk2ASEwmJ NwNYQC6meC7VAMz2AeWBWzelQz1cgicQTAoh1UlhVoFWbth9EJgij+myXMFmNNNM A2uGLYlYJ7oX7MsGaUTCKodf9US284J+S2Csv8FeqlyPc= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=dHAguZ1//KJkyMpoIqH70OTYXXM3uOVQGQj5mZjfoWCHlZvZynBXWXHlFyBdna fJnrp76Q51E+ZlvS4xauy5fuviBORsSj8SDIb0YkMmOasjCNkXSuMbF6rezYL+ev cIKMdRqMU9XvGfJrxgwezUb7/sl1KQYorUaz/GtY5F0j8=; Received: (qmail 30870 invoked by alias); 24 Oct 2012 19:48:34 -0000 Received: (qmail 30862 invoked by uid 22791); 24 Oct 2012 19:48:33 -0000 X-SWARE-Spam-Status: No, hits=-8.0 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_THREADED, RCVD_IN_DNSWL_HI, RCVD_IN_HOSTKARMA_NO, RCVD_IN_HOSTKARMA_YE, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from acsinet15.oracle.com (HELO acsinet15.oracle.com) (141.146.126.227) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 24 Oct 2012 19:48:28 +0000 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by acsinet15.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id q9OJmOoM012015 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 24 Oct 2012 19:48:25 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q9OJmNUB010243 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 24 Oct 2012 19:48:24 GMT Received: from abhmt120.oracle.com (abhmt120.oracle.com [141.146.116.72]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q9OJmNcK004408; Wed, 24 Oct 2012 14:48:23 -0500 Received: from [192.168.1.4] (/79.52.211.59) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 24 Oct 2012 12:48:23 -0700 Message-ID: <50884604.2030308@oracle.com> Date: Wed, 24 Oct 2012 21:48:20 +0200 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121010 Thunderbird/16.0.1 MIME-Version: 1.0 To: Jason Merrill CC: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ Patch] PR 53761 References: <50759082.3040403@oracle.com> <50881DF7.4070604@redhat.com> In-Reply-To: <50881DF7.4070604@redhat.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, On 10/24/2012 06:57 PM, Jason Merrill wrote: > On 10/10/2012 11:13 AM, Paolo Carlini wrote: >> - error ("type transparent class %qT does not have any fields", t); >> + if (TREE_CODE (t) == UNION_TYPE) >> + error ("type transparent union %qT does not have any >> fields", t); >> + else >> + error ("type transparent class %qT does not have any >> fields", t); > If you use %q#T you don't need to repeat the class-key. Indeed. > >> + error ("type transparent union %qT cannot be made >> transparent", t); > > Let's say why not. Thus I tested the below. Thanks, Paolo. ////////////////////// Index: cp/class.c =================================================================== --- cp/class.c (revision 192762) +++ cp/class.c (working copy) @@ -6261,7 +6261,7 @@ finish_struct_1 (tree t) tree field = first_field (t); if (field == NULL_TREE || error_operand_p (field)) { - error ("type transparent class %qT does not have any fields", t); + error ("type transparent %q#T does not have any fields", t); TYPE_TRANSPARENT_AGGR (t) = 0; } else if (DECL_ARTIFICIAL (field)) @@ -6275,6 +6275,12 @@ finish_struct_1 (tree t) } TYPE_TRANSPARENT_AGGR (t) = 0; } + else if (TYPE_MODE (t) != DECL_MODE (field)) + { + error ("type transparent %q#T cannot be made transparent because " + "a field has neither pointer nor integer type", t); + TYPE_TRANSPARENT_AGGR (t) = 0; + } } } Index: testsuite/g++.dg/ext/transparent-union.C =================================================================== --- testsuite/g++.dg/ext/transparent-union.C (revision 0) +++ testsuite/g++.dg/ext/transparent-union.C (working copy) @@ -0,0 +1,5 @@ +// PR c++/53761 + +typedef union { // { dg-error "type transparent" } + double x; +} __attribute__(( __transparent_union__ )) example_t;