summaryrefslogtreecommitdiff
path: root/libiberty/cp-demangle.h
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2013-11-22 22:25:49 +0000
committerCary Coutant <ccoutant@gcc.gnu.org>2013-11-22 14:25:49 -0800
commit85d09f6173f7b6af0e156222a0534be468e3d7ca (patch)
treecf760059b7f5810b1dae01b0b0f0aa1360c3155d /libiberty/cp-demangle.h
parent9065ada9b5fa30d47ec723fbfbbeaad1082035cb (diff)
downloadgcc-85d09f6173f7b6af0e156222a0534be468e3d7ca.tar.gz
Fix demangler to handle conversion operators correctly.
libiberty/ PR other/59195 * cp-demangle.c (struct d_info_checkpoint): New struct. (struct d_print_info): Add current_template field. (d_operator_name): Set flag when processing a conversion operator. (cplus_demangle_type): When processing <template-args> for a conversion operator, backtrack if necessary. (d_expression_1): Renamed from d_expression. (d_expression): New wrapper around d_expression_1. (d_checkpoint): New function. (d_backtrack): New function. (d_print_init): Initialize current_template. (d_print_comp): Set current_template. (d_print_cast): Put current_template in scope for printing conversion operator name. (cplus_demangle_init_info): Initialize is_expression and is_conversion. * cp-demangle.h (struct d_info): Add is_expression and is_conversion fields. * testsuite/demangle-expected: New test cases. From-SVN: r205292
Diffstat (limited to 'libiberty/cp-demangle.h')
-rw-r--r--libiberty/cp-demangle.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h
index ae635beb4cc..6fce0252dc4 100644
--- a/libiberty/cp-demangle.h
+++ b/libiberty/cp-demangle.h
@@ -122,6 +122,11 @@ struct d_info
mangled name to the demangled name, such as standard
substitutions and builtin types. */
int expansion;
+ /* Non-zero if we are parsing an expression. */
+ int is_expression;
+ /* Non-zero if we are parsing the type operand of a conversion
+ operator, but not when in an expression. */
+ int is_conversion;
};
/* To avoid running past the ending '\0', don't: