[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 Andrew Pinski changed: What|Removed |Added Target Milestone|--- |11.0
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 Marek Polacek changed: What|Removed |Added Resolution|--- |FIXED Status|ASSIGNED|RESOLVED --- Comment #4 from Marek Polacek --- Fixed in GCC 11.
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 --- Comment #3 from CVS Commits --- The master branch has been updated by Marek Polacek : https://gcc.gnu.org/g:90b160f8ec515f54ddc36519a6aaa60abdabdec1 commit r11-336-g90b160f8ec515f54ddc36519a6aaa60abdabdec1 Author: Marek Polacek 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) : 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.
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 Marek Polacek changed: What|Removed |Added Assignee|unassigned at gcc dot gnu.org |mpolacek at gcc dot gnu.org Status|NEW |ASSIGNED
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 Jonathan Wakely changed: What|Removed |Added Last reconfirmed||2020-05-12 Ever confirmed|0 |1 Status|UNCONFIRMED |NEW
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 --- Comment #2 from Marek Polacek --- This is where we're confused by the function introduced by M::f: /* We do not perform argument-dependent lookup if normal lookup finds a non-function, in accordance with the expected resolution of DR 218. */ else if (!args->is_empty () && is_overloaded_fn (postfix_expression)) { /* We only need to look at the first function, because all the fns share the attribute we're concerned with (all member fns or all local fns). */ tree fn = get_first_fn (postfix_expression); fn = STRIP_TEMPLATE (fn); /* Do not do argument dependent lookup if regular lookup finds a member function or a block-scope function declaration. [basic.lookup.argdep]/3 */ if (!((TREE_CODE (fn) == USING_DECL && DECL_DEPENDENT_P (fn)) || DECL_FUNCTION_MEMBER_P (fn) || DECL_LOCAL_FUNCTION_P (fn))) { koenig_p = true; if (!any_type_dependent_arguments_p (args)) postfix_expression = perform_koenig_lookup (postfix_expression, args, complain); } }
[Bug c++/95074] Function found via ADL when it should not
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95074 Marek Polacek changed: What|Removed |Added Keywords||accepts-invalid --- Comment #1 from Marek Polacek --- Not a regression.