summaryrefslogtreecommitdiffstats
path: root/gcc/cplus-dem.c
diff options
context:
space:
mode:
authormerrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4>1996-09-19 00:47:43 +0000
committermerrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4>1996-09-19 00:47:43 +0000
commit457e67adf94a1ac9d1bb296c9f6dc612845f9659 (patch)
treefd9054355e2d88298c660b9da25b559ff1cfd84c /gcc/cplus-dem.c
parent013be3e42ace1b1c511e022c6fb5db2442c1d372 (diff)
downloadppe42-gcc-457e67adf94a1ac9d1bb296c9f6dc612845f9659.tar.gz
ppe42-gcc-457e67adf94a1ac9d1bb296c9f6dc612845f9659.zip
(demangle_template): Fix handling of address args.
(gnu_special): Handle type_info stuff. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@12746 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cplus-dem.c')
-rw-r--r--gcc/cplus-dem.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cplus-dem.c b/gcc/cplus-dem.c
index 3ac16808931..90969a9faed 100644
--- a/gcc/cplus-dem.c
+++ b/gcc/cplus-dem.c
@@ -1055,7 +1055,8 @@ demangle_template (work, mangled, tname, trawname)
}
else if (is_pointer)
{
- if (!get_count (mangled, &symbol_len))
+ symbol_len = consume_count (mangled);
+ if (symbol_len == 0)
{
success = 0;
break;
@@ -1596,6 +1597,29 @@ gnu_special (work, mangled, declp)
success = 0;
}
}
+ else if (strncmp (*mangled, "__t", 3) == 0
+ && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f'))
+ {
+ p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function";
+ (*mangled) += 4;
+ switch (**mangled)
+ {
+ case 'Q':
+ success = demangle_qualified (work, mangled, declp, 0, 1);
+ break;
+ case 't':
+ success = demangle_template (work, mangled, declp, 0);
+ break;
+ default:
+ n = consume_count (mangled);
+ string_appendn (declp, *mangled, n);
+ (*mangled) += n;
+ }
+ if (success && **mangled != '\0')
+ success = 0;
+ if (success)
+ string_append (declp, p);
+ }
else
{
success = 0;
OpenPOWER on IntegriCloud