merge from gcc
authorDJ Delorie <dj@redhat.com>
Thu, 18 Dec 2008 15:56:12 +0000 (15:56 +0000)
committerDJ Delorie <dj@redhat.com>
Thu, 18 Dec 2008 15:56:12 +0000 (15:56 +0000)
libiberty/ChangeLog
libiberty/cp-demangle.c

index a6721bf..f46fe05 100644 (file)
@@ -1,3 +1,16 @@
+2008-12-18  Jason Merrill  <jason@redhat.com>
+
+       PR c++/38561
+       * cp-demangle.c (d_expression, d_print_comp): Revert
+       cast changes.
+
+2008-12-17  Jason Merrill  <jason@redhat.com>
+
+       * 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  <jason@redhat.com>
 
        * cp-demangle.c (cplus_demangle_type): Support fixed-point types.
index de0d9f7..5ae04c0 100644 (file)
@@ -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;