From patchwork Mon Mar 21 20:59:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artemiy Volkov X-Patchwork-Id: 11459 Received: (qmail 76302 invoked by alias); 21 Mar 2016 21:02:28 -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 76213 invoked by uid 89); 21 Mar 2016 21:02:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=4108, 5386, 8957, 5838 X-HELO: mail-lb0-f196.google.com Received: from mail-lb0-f196.google.com (HELO mail-lb0-f196.google.com) (209.85.217.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 21 Mar 2016 21:02:20 +0000 Received: by mail-lb0-f196.google.com with SMTP id vk4so12123783lbb.1 for ; Mon, 21 Mar 2016 14:02:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=b3Gx6lpmOTpOzDkvrtx/oKpfOWdX/Nrpo2F56KbfVy0=; b=kiCLRLeFOvHB7bjn/QpXeF87LDDrRPUO8C/fEfsVZFbuR3Y/Q54BaedieWRO7k2UlJ dw0mcyzoM1kB9hWubzYvfbDX/HJMYPo1JpVO7sRrocuILfq7OnXn135MDoWMSoPs8Euy hGaQKR9wEc0LFrRIFEdLasQKmdWtKo/UKWF8W2YxI+5FB/OjL7DF7PF/nBR/cKwNWWGU ITtHnvejMd1Z1yX2MEa8BK5bcWcbK70fQxCt2ka371k2o7RQc35nzdEbmNa8RZK1ILxW uV80ZOqzkQP7K3imSg4pNmUAg1ySKdH7JYNcuM0dHpPyjiGjcjoX5sBcnAiQIOLUnqsY t5lw== X-Gm-Message-State: AD7BkJK0DhqsxMsGg5lTHyGW0pqNMEIXA1ogTYyMEyn7Kbxzc/28Jq3YIDpBdNZLxkwJxg== X-Received: by 10.25.218.1 with SMTP id r1mr9343108lfg.63.1458594137394; Mon, 21 Mar 2016 14:02:17 -0700 (PDT) Received: from arch.smware.local (broadband-90-154-70-182.nationalcablenetworks.ru. [90.154.70.182]) by smtp.gmail.com with ESMTPSA id 40sm4730939lfp.41.2016.03.21.14.02.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Mar 2016 14:02:16 -0700 (PDT) From: Artemiy Volkov To: gdb-patches@sourceware.org Cc: keiths@redhat.com, palves@redhat.com, Artemiy Volkov Subject: [PATCH v4 06/11] [PR gdb/14441] gdb: print: implement correct printing of rvalue reference types and values Date: Mon, 21 Mar 2016 13:59:13 -0700 Message-Id: <1458593958-25656-7-git-send-email-artemiyv@acm.org> In-Reply-To: <1458593958-25656-1-git-send-email-artemiyv@acm.org> References: <1457147955-21871-1-git-send-email-artemiyv@acm.org> <1458593958-25656-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. gdb/ChangeLog: 2016-03-21 Artemiy Volkov * c-typeprint.c (c_print_type, c_type_print_varspec_prefix) (c_type_print_modifier, c_type_print_varspec_suffix) (c_type_print_base): Support printing rvalue reference types. * c-valprint.c (c_val_print, c_value_print): Support printing rvalue reference values. --- 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 ed16fc3..569a803 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_IS_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; @@ -410,8 +411,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_IS_REFERENCE (type)) { if (need_pre_space) fprintf_filtered (stream, " "); @@ -726,6 +726,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; @@ -894,6 +895,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 7c8d9be..2b8aaf0 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_IS_REFERENCE (type)) { /* Hack: remove (char *) for char strings. Their type is indicated by the quoted string anyway.