c++: lambda in template default argument [PR103186]
authorJason Merrill <jason@redhat.com>
Wed, 26 Jan 2022 21:42:57 +0000 (16:42 -0500)
committerJason Merrill <jason@redhat.com>
Tue, 1 Feb 2022 19:14:12 +0000 (14:14 -0500)
commit8a3789786205376e3ba19fdefadd8937e8ac534e
tree1e19312473196efe99eb7723c4e0ef3577b68b4d
parentb649071d4b3490aa43c6c2212312ace304c9ff1c
c++: lambda in template default argument [PR103186]

The problem with this testcase was that since my patch for PR97900 we
weren't preserving DECL_UID identity for parameters of instantiations of
templated functions, so using those parameters as the keys for the
defarg_inst map broke.  I think this was always fragile given the
possibility of redeclarations, so instead of reverting that change let's
switch to keying off the function.

Memory use compiling stdc++.h is not noticeably different.

PR c++/103186

gcc/cp/ChangeLog:

* pt.cc (defarg_inst): Use tree_vec_map_cache_hasher.
(defarg_insts_for): New.
(tsubst_default_argument): Adjust.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/lambda/lambda-defarg10.C: New test.
gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg10.C [new file with mode: 0644]