From 4e59450ef0333b385bb575153d00942dcd2112fd Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 18 Dec 2008 15:56:12 +0000 Subject: [PATCH] merge from gcc --- libiberty/ChangeLog | 13 +++++++++++++ libiberty/cp-demangle.c | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index a6721bf906d..f46fe05f379 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,16 @@ +2008-12-18 Jason Merrill + + PR c++/38561 + * cp-demangle.c (d_expression, d_print_comp): Revert + cast changes. + +2008-12-17 Jason Merrill + + * cp-demangle.c (d_expression): Handle rvalue stubs too. + [DEMANGLE_COMPONENT_CAST]: Update mangling. + (d_print_comp): Avoid extra ", " with empty template argument packs. + Remove handling for obsolete T() mangling. + 2008-12-10 Jason Merrill * cp-demangle.c (cplus_demangle_type): Support fixed-point types. diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index de0d9f7610e..5ae04c068f1 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -2561,7 +2561,8 @@ d_expression (struct d_info *di) d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, d_template_args (di))); } - else if (peek == 's' && d_peek_next_char (di) == 'T') + else if (peek == 's' + && (d_peek_next_char (di) == 'T' || d_peek_next_char (di) == 'R')) { /* Just demangle a parameter placeholder as its type. */ d_advance (di, 2); @@ -3763,8 +3764,14 @@ d_print_comp (struct d_print_info *dpi, d_print_comp (dpi, d_left (dc)); if (d_right (dc) != NULL) { + size_t len; d_append_string (dpi, ", "); + len = dpi->len; d_print_comp (dpi, d_right (dc)); + /* If that didn't print anything (which can happen with empty + template argument packs), remove the comma and space. */ + if (dpi->len == len) + dpi->len -= 2; } return; -- 2.30.2