From patchwork Fri Mar 10 20:04:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Keith Seitz X-Patchwork-Id: 19518 Received: (qmail 18983 invoked by alias); 10 Mar 2017 20:10:45 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 18898 invoked by uid 89); 10 Mar 2017 20:10:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=7706 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 10 Mar 2017 20:10:43 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7C4B44E4CF for ; Fri, 10 Mar 2017 20:04:49 +0000 (UTC) Received: from valrhona.uglyboxes.com (ovpn04.gateway.prod.ext.phx2.redhat.com [10.5.9.4]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v2AK4lX0029240 for ; Fri, 10 Mar 2017 15:04:49 -0500 From: Keith Seitz To: gdb-patches@sourceware.org Subject: [PATCH v6 05/11] Implement demangling for rvalue reference type names Date: Fri, 10 Mar 2017 12:04:40 -0800 Message-Id: <1489176286-27973-6-git-send-email-keiths@redhat.com> In-Reply-To: <1489176286-27973-1-git-send-email-keiths@redhat.com> References: <1489176286-27973-1-git-send-email-keiths@redhat.com> X-IsSubscribed: yes This patch fixes demangling of names containing rvalue reference typenames by handling DEMANGLE_COMPONENT_RVALUE_REFERENCE demangle component. There are no changes to this patch from v5. gdb/ChangeLog PR gdb/14441 From Artemiy Volkov * cp-name-parser.y (ptr_operator): Handle the '&&' token in typename. * cp-support.c (replace_typedefs): Handle DEMANGLE_COMPONENT_RVALUE_REFERENCE. * python/py-type.c (typy_lookup_type): Likewise. --- gdb/ChangeLog | 10 ++++++++++ gdb/cp-name-parser.y | 4 ++++ gdb/cp-support.c | 1 + gdb/python/py-type.c | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f7685ad..e7d5a6b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -2,6 +2,16 @@ PR gdb/14441 From Artemiy Volkov + * cp-name-parser.y (ptr_operator): Handle the '&&' token in + typename. + * cp-support.c (replace_typedefs): Handle + DEMANGLE_COMPONENT_RVALUE_REFERENCE. + * python/py-type.c (typy_lookup_type): Likewise. + +2017-MM-DD Keith Seitz + + PR gdb/14441 + From Artemiy Volkov * c-exp.y (ptr_operator): Handle the '&&' token in the typename. * parse.c (insert_type): Change assert statement. (follow_types): Handle rvalue reference types. diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y index fd1e949..89e4d79 100644 --- a/gdb/cp-name-parser.y +++ b/gdb/cp-name-parser.y @@ -769,6 +769,10 @@ ptr_operator : '*' qualifiers_opt { $$.comp = make_empty (DEMANGLE_COMPONENT_REFERENCE); $$.comp->u.s_binary.left = $$.comp->u.s_binary.right = NULL; $$.last = &d_left ($$.comp); } + | ANDAND + { $$.comp = make_empty (DEMANGLE_COMPONENT_RVALUE_REFERENCE); + $$.comp->u.s_binary.left = $$.comp->u.s_binary.right = NULL; + $$.last = &d_left ($$.comp); } | nested_name '*' qualifiers_opt { $$.comp = make_empty (DEMANGLE_COMPONENT_PTRMEM_TYPE); $$.comp->u.s_binary.left = $1.comp; diff --git a/gdb/cp-support.c b/gdb/cp-support.c index 1b0900e..b1b96c8 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -494,6 +494,7 @@ replace_typedefs (struct demangle_parse_info *info, case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_POINTER: case DEMANGLE_COMPONENT_REFERENCE: + case DEMANGLE_COMPONENT_RVALUE_REFERENCE: replace_typedefs (info, d_left (ret_comp), finder, data); break; diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index c4d5917..0249cbb 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -770,6 +770,7 @@ typy_lookup_type (struct demangle_component *demangled, if (demangled_type == DEMANGLE_COMPONENT_POINTER || demangled_type == DEMANGLE_COMPONENT_REFERENCE + || demangled_type == DEMANGLE_COMPONENT_RVALUE_REFERENCE || demangled_type == DEMANGLE_COMPONENT_CONST || demangled_type == DEMANGLE_COMPONENT_VOLATILE) { @@ -788,6 +789,9 @@ typy_lookup_type (struct demangle_component *demangled, case DEMANGLE_COMPONENT_REFERENCE: rtype = lookup_lvalue_reference_type (type); break; + case DEMANGLE_COMPONENT_RVALUE_REFERENCE: + rtype = lookup_rvalue_reference_type (type); + break; case DEMANGLE_COMPONENT_POINTER: rtype = lookup_pointer_type (type); break;