[Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jan 22 18:02:56 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98545

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:25fc4d01a8ed1888e6a65597a3387349eb3c950c

commit r11-6864-g25fc4d01a8ed1888e6a65597a3387349eb3c950c
Author: Marek Polacek <polacek@redhat.com>
Date:   Wed Jan 13 16:33:39 2021 -0500

    c++: ICE when mangling operator name [PR98545]

    r11-6301 added some asserts in mangle.c, and now we trip over one of
    them.  In particular, it's the one asserting that we didn't get
    IDENTIFIER_ANY_OP_P when mangling an expression with a dependent name.

    As this testcase shows, it's possible to get that, so turn the assert
    into an if and write "on".  That changes the mangling in the following
    way:

    With this patch:

    $ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTonclspcvT__EEEDpS2_
    decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double,
a>(a, double, a)

    G++10:
    $ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTclspcvT__EEEDpS2_
    decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double,
a>(a, double, a)

    clang++/icc:
    $ c++filt _ZN1i1hIJ1adS1_EEEDTclonclspcvT__EEEDpS2_
    decltype ((operator())((a)(), (double)(), (a)())) i::h<a, double, a>(a,
double, a)

    This is now tracked in PR98756.

    gcc/cp/ChangeLog:

            PR c++/98545
            * mangle.c (write_member_name): Emit
abi_warn_or_compat_version_crosses
            warnings regardless of abi_version_at_least.
            (write_expression): When the expression is a dependent name
            and an operator name, write "on" before writing its name.

    gcc/ChangeLog:

            PR c++/98545
            * doc/invoke.texi: Update C++ ABI Version 15 description.

    gcc/testsuite/ChangeLog:

            PR c++/98545
            * g++.dg/abi/mangle76.C: New test.


More information about the Gcc-bugs mailing list