This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v5 06/11] [PR gdb/14441] gdb: print: implement correct printing of rvalue reference types and values
- From: Artemiy Volkov <artemiyv at acm dot org>
- To: gdb-patches at sourceware dot org
- Cc: palves at redhat dot com, keiths at redhat dot com, Artemiy Volkov <artemiyv at acm dot org>
- Date: Mon, 6 Jun 2016 22:22:20 +0300
- Subject: [PATCH v5 06/11] [PR gdb/14441] gdb: print: implement correct printing of rvalue reference types and values
- Authentication-results: sourceware.org; auth=none
- References: <1458593958-25656-1-git-send-email-artemiyv at acm dot org> <20160606192225 dot 12384-1-artemiyv at acm dot org>
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-06-06 Artemiy Volkov <artemiyv@acm.org>
PR gdb/14441
* 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 | 6 +++---
2 files changed, 9 insertions(+), 7 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 637acf0..f2e4fa2 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -540,6 +540,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:
@@ -585,8 +586,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.
@@ -637,7 +637,7 @@ c_value_print (struct value *val, struct ui_file *stream,
if (is_ref)
{
- val = value_ref (value_ind (val));
+ val = value_ref (value_ind (val), refcode);
type = value_type (val);
}
--
2.8.3