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

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

https://gcc.gnu.org/g:90b160f8ec515f54ddc36519a6aaa60abdabdec1

commit r11-336-g90b160f8ec515f54ddc36519a6aaa60abdabdec1
Author: Marek Polacek <pola...@redhat.com>
Date:   Tue May 12 14:56:13 2020 -0400

    c++: Function found via ADL when it should not [PR95074]

    I noticed that we don't implement [basic.lookup.argdep]/3: quite correctly;
    it says "If X (the lookup set produced by unqualified lookup) contains
    -- a block-scope function declaration that is not a using-declaration
    [...]
    then Y (the lookup set produced by ADL) is empty."
    but we were still performing ADL in fn1 in the attached test.  The
    problem was that we were only looking at the first function in the
    overload set which in this case happened to be a using-declaration, and
    those don't suppress ADL.  We have to look through the whole set to find
    out if unqualified lookup found a block-scope function declaration, or
    a member function declaration.

            PR c++/95074
            * parser.c (cp_parser_postfix_expression) <case CPP_OPEN_PAREN>:
When
            looking for a block-scope function declaration, look through the
whole
            set, not just the first function in the overload set.

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

Reply via email to