This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] PR 59195: C++ demangler handles conversion operator incorrectly

I've made a small revision to this patch to handle recursive
invocations of d_expression and d_operator_name, restoring the
previous values of is_expression and is_conversion instead of just
setting them to 0 upon return. I've also added the long test case that
results in a substitution misnumbering in the current demangler.


> 2013-11-19  Cary Coutant  <>
> 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.

Attachment: demangle-cv-patch-2.txt
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]