]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Fix comparison of fn() and ns::fn() [PR90711]
authorJason Merrill <jason@redhat.com>
Mon, 30 Mar 2020 20:09:43 +0000 (16:09 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 31 Mar 2020 17:04:40 +0000 (13:04 -0400)
commit0e66150084aa217811a5c45fb15e98d7ed3e8839
tree0f58d3b5455f18bc4e0a2801d6f2fcbd99f5f492
parent02a201f7158b4d2d2b937ff3b37640126ce936d2
c++: Fix comparison of fn() and ns::fn() [PR90711]

The resolution of CWG issue 1321 clarified that when deciding whether two
expressions involving template parameters are equivalent, two dependent
function calls where the function is named with an unqualified-id are
considered to be equivalent if the name is the same, even if unqualified
lookup finds different sets of functions.  We were wrongly treating
qualified-ids the same way, so that EXISTS and test::EXISTS were considered
to be equivalent even though they are looking up the name in different
scopes.  This also causes a mangling bug, but I don't think it's safe to fix
that for GCC 10; this patch just fixes the comparison.

gcc/cp/ChangeLog
2020-03-30  Jason Merrill  <jason@redhat.com>

PR c++/90711
* tree.c (cp_tree_equal) [CALL_EXPR]: Compare KOENIG_LOOKUP_P.
(called_fns_equal): Check DECL_CONTEXT.
gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/g++.dg/template/dependent-name14.C [new file with mode: 0644]