diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-01 17:02:07 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-01 17:02:07 -0400 |
commit | 4bbff96e369cf96ee1c6bd3fd9f7728c08e05da8 (patch) | |
tree | e2466ac7db646acfd78689bc5c745b698c31ba6f /libiberty/cp-demangle.c | |
parent | 3748a54ca39e4aa0d38cec50b8e8ee7b7a93df09 (diff) | |
download | gcc-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.c | 14 |
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); |