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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Simon Martin <simar...@gcc.gnu.org>:

https://gcc.gnu.org/g:a030fcad4f9f490a08db0a4cad4c22635a0585c1

commit r15-3797-ga030fcad4f9f490a08db0a4cad4c22635a0585c1
Author: Simon Martin <si...@nasilyan.com>
Date:   Mon Sep 16 13:45:32 2024 +0200

    c++: Don't crash when mangling member with anonymous union or template type
[PR100632, PR109790]

    We currently crash upon mangling members that have an anonymous union or
    a template operator type.

    The problem is that before calling write_unqualified_name,
    write_member_name asserts that it has a declaration whose DECL_NAME is
    an identifier node that is not that of an operator. This is wrong:
     - In PR100632, it's an anonymous union declaration, hence a 0 DECL_NAME
     - In PR109790, it's a legitimate template declaration for an operator
       (this was accepted up to GCC 10)

    This assert was added via r11-6301, to be sure that we do write the "on"
    marker for operator members.

    This patch removes that assert and instead
     - Lets members with an anonymous union type go through
     - For operators, adds the missing "on" marker for ABI versions greater
       than the highest usable with GCC 10

            PR c++/109790
            PR c++/100632

    gcc/cp/ChangeLog:

            * mangle.cc (write_member_name): Handle members whose type is an
            anonymous union member. Write missing "on" marker for operators
            when ABI version is at least 16.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/decltype83.C: New test.
            * g++.dg/cpp0x/decltype83a.C: New test.
            * g++.dg/cpp1y/lambda-ice3.C: New test.
            * g++.dg/cpp1y/lambda-ice3a.C: New test.
            * g++.dg/cpp2a/nontype-class67.C: New test.
  • [Bug c++/109790] [12/13/14/15 R... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to