aboutsummaryrefslogtreecommitdiff
path: root/libiberty/cp-demangle.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-08-01 17:02:07 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-08-01 17:02:07 -0400
commit4bbff96e369cf96ee1c6bd3fd9f7728c08e05da8 (patch)
treee2466ac7db646acfd78689bc5c745b698c31ba6f /libiberty/cp-demangle.c
parent3748a54ca39e4aa0d38cec50b8e8ee7b7a93df09 (diff)
downloadgcc-4bbff96e369cf96ee1c6bd3fd9f7728c08e05da8.zip
gcc-4bbff96e369cf96ee1c6bd3fd9f7728c08e05da8.tar.gz
gcc-4bbff96e369cf96ee1c6bd3fd9f7728c08e05da8.tar.bz2
re PR c++/49932 ([C++0x] ICE on instantiating decltype(expr)::type with template)
PR c++/49932 gcc/cp/ * mangle.c (write_prefix): Handle decltype. libiberty/ * cp-demangle.c (d_prefix): Handle decltype. From-SVN: r177074
Diffstat (limited to 'libiberty/cp-demangle.c')
-rw-r--r--libiberty/cp-demangle.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index f41856b..d67a9e7 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1280,6 +1280,7 @@ d_nested_name (struct d_info *di)
/* <prefix> ::= <prefix> <unqualified-name>
::= <template-prefix> <template-args>
::= <template-param>
+ ::= <decltype>
::=
::= <substitution>
@@ -1308,10 +1309,19 @@ d_prefix (struct d_info *di)
<template-param> here. */
comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
- if (IS_DIGIT (peek)
+ if (peek == 'D')
+ {
+ char peek2 = d_peek_next_char (di);
+ if (peek2 == 'T' || peek2 == 't')
+ /* Decltype. */
+ dc = cplus_demangle_type (di);
+ else
+ /* Destructor name. */
+ dc = d_unqualified_name (di);
+ }
+ else if (IS_DIGIT (peek)
|| IS_LOWER (peek)
|| peek == 'C'
- || peek == 'D'
|| peek == 'U'
|| peek == 'L')
dc = d_unqualified_name (di);