From patchwork Mon Dec 21 01:31:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artemiy Volkov X-Patchwork-Id: 10081 Received: (qmail 95678 invoked by alias); 20 Dec 2015 22:35:27 -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 95148 invoked by uid 89); 20 Dec 2015 22:35:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=4107, Hx-languages-length:3354, 4098, 8937 X-HELO: mail-lf0-f66.google.com Received: from mail-lf0-f66.google.com (HELO mail-lf0-f66.google.com) (209.85.215.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 20 Dec 2015 22:35:20 +0000 Received: by mail-lf0-f66.google.com with SMTP id l133so10106534lfd.1 for ; Sun, 20 Dec 2015 14:35:19 -0800 (PST) X-Received: by 10.25.151.69 with SMTP id z66mr4158048lfd.122.1450650916279; Sun, 20 Dec 2015 14:35:16 -0800 (PST) Received: from localhost.localdomain ([37.204.1.155]) by smtp.gmail.com with ESMTPSA id m75sm4420435lfg.15.2015.12.20.14.35.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 20 Dec 2015 14:35:15 -0800 (PST) From: Artemiy Volkov To: gdb-patches@sourceware.org Cc: Artemiy Volkov Subject: [PATCH 06/11] [PR gdb/14441] gdb: print: implement correct printing of rvalue reference types and values Date: Mon, 21 Dec 2015 04:31:16 +0300 Message-Id: <1450661481-31178-7-git-send-email-artemiyv@acm.org> In-Reply-To: <1450661481-31178-1-git-send-email-artemiyv@acm.org> References: <1450661481-31178-1-git-send-email-artemiyv@acm.org> X-IsSubscribed: yes This patch provides the ability to print out names of rvalue reference types and values of those types. This is done in full similarity to regular references, and as with them, we don't print out "const" suffix because all rvalue references are const. ./ChangeLog: 2015-12-20 Artemiy Volkov * gdb/c-typeprint.c (c_print_type): Support printing rvalue reference types. (c_type_print_varspec_prefix): Likewise. (c_type_print_modifier): Likewise. (c_type_print_varspec_suffix): Likewise. (c_type_print_base): Likewise. * gdb/c-valprint.c (c_val_print): Support printing rvalue reference values. (c_value_print): Likewise. --- gdb/c-typeprint.c | 10 ++++++---- gdb/c-valprint.c | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 1af477c..1ed8cdc 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -112,7 +112,7 @@ c_print_type (struct type *type, && !TYPE_VECTOR (type)) || code == TYPE_CODE_MEMBERPTR || code == TYPE_CODE_METHODPTR - || code == TYPE_CODE_REF))) + || TYPE_REFERENCE (type)))) fputs_filtered (" ", stream); need_post_space = (varstring != NULL && strcmp (varstring, "") != 0); c_type_print_varspec_prefix (type, stream, show, 0, need_post_space, @@ -341,9 +341,10 @@ c_type_print_varspec_prefix (struct type *type, break; case TYPE_CODE_REF: + case TYPE_CODE_RVALUE_REF: c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 0, flags); - fprintf_filtered (stream, "&"); + fprintf_filtered (stream, TYPE_CODE(type) == TYPE_CODE_REF ? "&" : "&&"); c_type_print_modifier (type, stream, 1, need_post_space); break; @@ -409,8 +410,7 @@ c_type_print_modifier (struct type *type, struct ui_file *stream, /* We don't print `const' qualifiers for references --- since all operators affect the thing referenced, not the reference itself, every reference is `const'. */ - if (TYPE_CONST (type) - && TYPE_CODE (type) != TYPE_CODE_REF) + if (TYPE_CONST (type) && !TYPE_REFERENCE (type)) { if (need_pre_space) fprintf_filtered (stream, " "); @@ -725,6 +725,7 @@ c_type_print_varspec_suffix (struct type *type, case TYPE_CODE_PTR: case TYPE_CODE_REF: + case TYPE_CODE_RVALUE_REF: c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show, 1, 0, flags); break; @@ -892,6 +893,7 @@ c_type_print_base (struct type *type, struct ui_file *stream, case TYPE_CODE_PTR: case TYPE_CODE_MEMBERPTR: case TYPE_CODE_REF: + case TYPE_CODE_RVALUE_REF: case TYPE_CODE_FUNC: case TYPE_CODE_METHOD: case TYPE_CODE_METHODPTR: diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 473147a..32f4d3f 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -538,6 +538,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr, break; case TYPE_CODE_REF: + case TYPE_CODE_RVALUE_REF: case TYPE_CODE_ENUM: case TYPE_CODE_FLAGS: case TYPE_CODE_FUNC: @@ -583,8 +584,7 @@ c_value_print (struct value *val, struct ui_file *stream, val_type = value_type (val); type = check_typedef (val_type); - if (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF) + if (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_REFERENCE (type)) { /* Hack: remove (char *) for char strings. Their type is indicated by the quoted string anyway.