c++: Fix resolving the address of overloaded pmf [PR96647]
authorPatrick Palka <ppalka@redhat.com>
Wed, 9 Sep 2020 13:21:09 +0000 (09:21 -0400)
committerPatrick Palka <ppalka@redhat.com>
Wed, 9 Sep 2020 13:21:09 +0000 (09:21 -0400)
commit4e03e2e08b94f65f2be3db17f880c205ec262f87
tree5374563ac2681eda05b43e4349fcc27042e963c8
parent58905f90434ba9a64abac56324131d67c53910ae
c++: Fix resolving the address of overloaded pmf [PR96647]

In resolve_address_of_overloaded_function, currently only the second
pass over the overload set (which considers just the function templates
in the overload set) checks constraints and performs return type
deduction when necessary.  But as the testcases below show, we need to
do the same when considering non-template functions during the first
pass.

gcc/cp/ChangeLog:

PR c++/96647
* class.c (resolve_address_of_overloaded_function): Check
constraints_satisfied_p and perform return-type deduction via
maybe_instantiate_decl when considering non-template functions
in the overload set.
* cp-tree.h (maybe_instantiate_decl): Declare.
* decl2.c (maybe_instantiate_decl): Remove static.

gcc/testsuite/ChangeLog:

PR c++/96647
* g++.dg/cpp0x/auto-96647.C: New test.
* g++.dg/cpp0x/error9.C: New test.
* g++.dg/cpp2a/concepts-fn6.C: New test.
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl2.c
gcc/testsuite/g++.dg/cpp0x/auto-96647.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/error9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp2a/concepts-fn6.C [new file with mode: 0644]