[Bug c++/103177] incorrect error message for ambiguous lookup with a static member function from a private base

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Mar 15 12:51:35 GMT 2022


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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

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

commit r12-7656-gffe9c0a0d3564a6083ea6194eb3374a89c29c085
Author: Patrick Palka <ppalka@redhat.com>
Date:   Tue Mar 15 08:50:24 2022 -0400

    c++: extraneous access error with ambiguous lookup [PR103177]

    When a lookup is ambiguous, lookup_member still attempts to check
    access of the first member found before diagnosing the ambiguity and
    propagating the error, and this may cause us to issue an extraneous
    access error as in the testcase below (for B1::foo).

    This patch fixes this by swapping the order of the ambiguity and access
    checks within lookup_member.  In passing, since the only thing that could
    go wrong during lookup_field_r is ambiguity, we might as well hardcode
    that in lookup_member and get rid of lookup_field_info::errstr.

            PR c++/103177

    gcc/cp/ChangeLog:

            * search.cc (lookup_field_info::errstr): Remove this data
            member.
            (lookup_field_r): Don't set errstr.
            (lookup_member): Check ambiguity before checking access.
            Simplify accordingly after errstr removal.  Exit early upon
            error or empty result.

    gcc/testsuite/ChangeLog:

            * g++.dg/lookup/ambig6.C: New test.


More information about the Gcc-bugs mailing list