aboutsummaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-01-20 20:58:53 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-01-20 20:58:53 -0500
commit4d43dcdeb57d58ad5e3aade44b93fa48d051c770 (patch)
tree7f36d32b649117c432fd4d50913d0ac71b47d393 /libiberty
parentf827f65933319275c46eccf2aa1df4f1d21d6783 (diff)
downloadgcc-4d43dcdeb57d58ad5e3aade44b93fa48d051c770.zip
gcc-4d43dcdeb57d58ad5e3aade44b93fa48d051c770.tar.gz
gcc-4d43dcdeb57d58ad5e3aade44b93fa48d051c770.tar.bz2
re PR c++/42338 ([c++0x] ICE on decltype usage with templates)
PR c++/42338 * mangle.c (write_expression): Handle tree codes that have extra arguments in the middle-end. * cp-demangle.c (d_print_comp): Fix array index printing. From-SVN: r156103
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog5
-rw-r--r--libiberty/cp-demangle.c15
2 files changed, 17 insertions, 3 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 6d30823..1e2fbff 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/42338
+ * cp-demangle.c (d_print_comp): Fix array index printing.
+
2010-01-11 Tristan Gingold <gingold@adacore.com>
* cplus-dem.c (ada_demangle): Remove prototype.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index d37c90e..f28e163 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -4037,9 +4037,18 @@ d_print_comp (struct d_print_info *dpi,
d_append_char (dpi, '(');
d_print_subexpr (dpi, d_left (d_right (dc)));
- if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
- d_print_expr_op (dpi, d_left (dc));
- d_print_subexpr (dpi, d_right (d_right (dc)));
+ if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
+ {
+ d_append_char (dpi, '[');
+ d_print_comp (dpi, d_right (d_right (dc)));
+ d_append_char (dpi, ']');
+ }
+ else
+ {
+ if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
+ d_print_expr_op (dpi, d_left (dc));
+ d_print_subexpr (dpi, d_right (d_right (dc)));
+ }
if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
&& d_left (dc)->u.s_operator.op->len == 1