c++: Fix excessive instantiation inside decltype [PR71879]
authorPatrick Palka <ppalka@redhat.com>
Thu, 21 Jan 2021 19:04:55 +0000 (14:04 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 21 Jan 2021 19:04:55 +0000 (14:04 -0500)
commitf645da0e4ab9438dfd0c047c710c7ec6a7d6d8f3
tree74874eda6f57c92625bff229fec34338a408c563
parent7944753fad501194eb8a828d6b74270e79d14a4d
c++: Fix excessive instantiation inside decltype [PR71879]

Here after resolving the address of a template-id inside decltype, we
end up instantiating the chosen specialization (from the call to
mark_used in resolve_nondeduced_context), even though only its type is
needed.

This patch sets cp_unevaluated_operand throughout finish_decltype_type,
so that in particular it's set during the call to
resolve_nondeduced_context within.

gcc/cp/ChangeLog:

PR c++/71879
* semantics.c (finish_decltype_type): Set up a cp_unevaluated
sentinel at the start of the function.  Remove a now-redundant
manual adjustment of cp_unevaluated_operand.

gcc/testsuite/ChangeLog:

PR c++/71879
* g++.dg/cpp0x/decltype-71879.C: New test.
gcc/cp/semantics.c
gcc/testsuite/g++.dg/cpp0x/decltype-71879.C [new file with mode: 0644]