From patchwork Sun Nov 11 02:13:22 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 198230 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 81DE92C0084 for ; Sun, 11 Nov 2012 13:13:52 +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=1353204833; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: References:In-Reply-To:Content-Type:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=AS9l3ZZo5pYXUQnSp9sWCxo1NOc=; b=B3GOZC2780VUS1H /gOX0oJ26Ae44q2kOxqW1u8MY7KkxWfTUBpiuAevPY6HC3AUmgPJQVpbLzoitRbB NCKFHZv04YY7n+SujICrxHDPamN46N/4o3cunMd3vkj8iEYT75XOI2e0FYIKhpTR ZBx8eGWQk6Fr67NF13xWwl+SV/d8= 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:Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:References:In-Reply-To:Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=QmKSXwZNWJG7djWtV2vRSBAXGcQFUIynYTr7RrtSad5Rq/6se1LHpC7zgAX7IN JniKyiQHlwQoafQzZpLh08ktTzokhPcpZVLWf9tQ6uPBQKm8No98bjvg3egkP2Ap wggbNLA1abApdxIXXeOTCJcF/P8NC/todUC299letaACQ=; Received: (qmail 27671 invoked by alias); 11 Nov 2012 02:13:47 -0000 Received: (qmail 27002 invoked by uid 22791); 11 Nov 2012 02:13:46 -0000 X-SWARE-Spam-Status: No, hits=-7.2 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_THREADED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 11 Nov 2012 02:13:35 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id qAB2DY7g006353 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 10 Nov 2012 21:13:34 -0500 Received: from [10.3.113.77] (ovpn-113-77.phx2.redhat.com [10.3.113.77]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id qAB2DY1v016905 for ; Sat, 10 Nov 2012 21:13:34 -0500 Message-ID: <509F09C2.3010901@redhat.com> Date: Sat, 10 Nov 2012 21:13:22 -0500 From: Jason Merrill User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121016 Thunderbird/16.0.1 MIME-Version: 1.0 To: gcc-patches List Subject: Re: RFC: PATCH to add abi_tag attribute References: <50988C19.8080905@redhat.com> In-Reply-To: <50988C19.8080905@redhat.com> 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 The demangler change was handling the tags in the wrong place; I'm writing them out with unqualified names, so the demangler should expect them in the same place. Tested x86_64-pc-linux-gnu, applied to trunk. commit 75eef303e5494f27a6d9bbef68aaf3200978a8f1 Author: Jason Merrill Date: Sat Nov 10 13:10:24 2012 -0500 * cp-demangle.c (d_unqualified_name): Handle abi tags here. (d_name): Not here. diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 86c7747..913d4bf 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -1246,17 +1246,14 @@ d_name (struct d_info *di) switch (peek) { case 'N': - dc = d_nested_name (di); - break; + return d_nested_name (di); case 'Z': - dc = d_local_name (di); - break; + return d_local_name (di); case 'L': case 'U': - dc = d_unqualified_name (di); - break; + return d_unqualified_name (di); case 'S': { @@ -1298,7 +1295,7 @@ d_name (struct d_info *di) d_template_args (di)); } - break; + return dc; } default: @@ -1313,12 +1310,8 @@ d_name (struct d_info *di) dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, d_template_args (di)); } - break; + return dc; } - - if (d_peek_char (di) == 'B') - dc = d_abi_tags (di, dc); - return dc; } /* ::= N [] E @@ -1446,15 +1439,14 @@ d_prefix (struct d_info *di) static struct demangle_component * d_unqualified_name (struct d_info *di) { + struct demangle_component *ret; char peek; peek = d_peek_char (di); if (IS_DIGIT (peek)) - return d_source_name (di); + ret = d_source_name (di); else if (IS_LOWER (peek)) { - struct demangle_component *ret; - ret = d_operator_name (di); if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR) { @@ -1463,14 +1455,11 @@ d_unqualified_name (struct d_info *di) ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret, d_source_name (di)); } - return ret; } else if (peek == 'C' || peek == 'D') - return d_ctor_dtor_name (di); + ret = d_ctor_dtor_name (di); else if (peek == 'L') { - struct demangle_component * ret; - d_advance (di, 1); ret = d_source_name (di); @@ -1478,22 +1467,27 @@ d_unqualified_name (struct d_info *di) return NULL; if (! d_discriminator (di)) return NULL; - return ret; } else if (peek == 'U') { switch (d_peek_next_char (di)) { case 'l': - return d_lambda (di); + ret = d_lambda (di); + break; case 't': - return d_unnamed_type (di); + ret = d_unnamed_type (di); + break; default: return NULL; } } else return NULL; + + if (d_peek_char (di) == 'B') + ret = d_abi_tags (di, ret); + return ret; } /* ::= <(positive length) number> */ diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 6b55d30..5b41b03 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -4084,6 +4084,9 @@ auto& f(int const&, int) --format=gnu-v3 _Z1gILi1EEvR1AIXT_EER1BIXscbT_EE void g<1>(A<1>&, B(1)>&) +--format=gnu-v3 +_ZNKSt7complexIiE4realB5cxx11Ev +std::complex::real[abi:cxx11]() const # # Ada (GNAT) tests. #