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

--- Comment #6 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:02dff52c60e5b89d290147f142f655c7817154c2

commit r15-3232-g02dff52c60e5b89d290147f142f655c7817154c2
Author: Simon Martin <si...@nasilyan.com>
Date:   Mon Aug 26 14:09:46 2024 +0200

    c++: Don't show constructor internal name in error message [PR105483]

    We mention 'X::__ct' instead of 'X::X' in the "names the constructor,
    not the type" error for this invalid code:

    === cut here ===
    struct X {};
    void g () {
      X::X x;
    }
    === cut here ===

    The problem is that we use %<%T::%D%> to build the error message, while
    %qE does exactly what we need since we have DECL_CONSTRUCTOR_P. This is
    what this patch does.

    It also skips until the end of the statement and returns error_mark_node
    for this and the preceding if block, to avoid emitting extra (useless)
    errors.

            PR c++/105483

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_expression_statement): Use %qE instead of
            incorrect %<%T::%D%>. Skip to end of statement and return
            error_mark_node in case of error.

    gcc/testsuite/ChangeLog:

            * g++.dg/parse/error36.C: Adjust test expectation.
            * g++.dg/tc1/dr147.C: Likewise.
            * g++.old-deja/g++.other/typename1.C: Likewise.
            * g++.dg/diagnostic/pr105483.C: New test.

Reply via email to