diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-10 22:11:44 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-10 22:11:44 +0000 |
commit | e4583147b7e2227255dea297dabfef54ee489073 (patch) | |
tree | 262e40a0acb4385f32e278194a774e3b2f7f60a0 /libiberty | |
parent | 0b09ae2a806790e0b8fd7732fd30a207b2b1f891 (diff) | |
download | gcc-e4583147b7e2227255dea297dabfef54ee489073.tar.gz |
PR c++/35319
* mangle.c (write_builtin_type): Add mangling for decimal floating
point and fixed point types.
(write_type): Pass FIXED_POINT_TYPE along.
* cp-demangle.c (cplus_demangle_type): Support fixed-point types.
(d_print_comp, d_dump): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142661 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 5 | ||||
-rw-r--r-- | libiberty/cp-demangle.c | 32 |
2 files changed, 37 insertions, 0 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index fd9d3000217..a6721bf906d 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2008-12-10 Jason Merrill <jason@redhat.com> + + * cp-demangle.c (cplus_demangle_type): Support fixed-point types. + (d_print_comp, d_dump): Likewise. + 2008-10-22 Daniel Jacobowitz <dan@codesourcery.com> * Makefile.in (CPPFLAGS): Define. diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 3fa5f1f21d3..de0d9f7610e 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -621,6 +621,9 @@ d_dump (struct demangle_component *dc, int indent) case DEMANGLE_COMPONENT_PTRMEM_TYPE: printf ("pointer to member type\n"); break; + case DEMANGLE_COMPONENT_FIXED_TYPE: + printf ("fixed-point type\n"); + break; case DEMANGLE_COMPONENT_ARGLIST: printf ("argument list\n"); break; @@ -2115,6 +2118,19 @@ cplus_demangle_type (struct d_info *di) ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]); di->expansion += ret->u.s_builtin.type->len; break; + + case 'F': + /* Fixed point types. DF<int bits><length><fract bits><sat> */ + ret = d_make_empty (di); + ret->type = DEMANGLE_COMPONENT_FIXED_TYPE; + if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di)))) + /* For demangling we don't care about the bits. */ + d_number (di); + ret->u.s_fixed.length = cplus_demangle_type (di); + d_number (di); + peek = d_next_char (di); + ret->u.s_fixed.sat = (peek == 's'); + break; } break; @@ -3725,6 +3741,22 @@ d_print_comp (struct d_print_info *dpi, return; } + case DEMANGLE_COMPONENT_FIXED_TYPE: + if (dc->u.s_fixed.sat) + d_append_string (dpi, "_Sat "); + /* Don't print "int _Accum". */ + if (dc->u.s_fixed.length->u.s_builtin.type + != &cplus_demangle_builtin_types['i'-'a']) + { + d_print_comp (dpi, dc->u.s_fixed.length); + d_append_char (dpi, ' '); + } + if (dc->u.s_fixed.accum) + d_append_string (dpi, "_Accum"); + else + d_append_string (dpi, "_Fract"); + return; + case DEMANGLE_COMPONENT_ARGLIST: case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: if (d_left (dc) != NULL) |