[Bug c++/95074] Function found via ADL when it should not

2021-12-02 Thread pinskia at gcc dot gnu.org via Gcc-bugs
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

2020-05-12 Thread mpolacek at gcc dot gnu.org
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

2020-05-12 Thread cvs-commit at gcc dot gnu.org
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

2020-05-12 Thread mpolacek at gcc dot gnu.org
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

2020-05-12 Thread redi at gcc dot gnu.org
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

2020-05-11 Thread mpolacek at gcc dot gnu.org
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

2020-05-11 Thread mpolacek at gcc dot gnu.org
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.