c++: Check DECL_TEMPLATE_PARM_P in duplicate_decls [PR97511]
authorPatrick Palka <ppalka@redhat.com>
Thu, 22 Oct 2020 11:27:55 +0000 (07:27 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 22 Oct 2020 11:27:55 +0000 (07:27 -0400)
commitb083a14dfe1f53446722f488885078e419238d24
tree26ea671b1e995beb0a517ab7e66d868f97de8974
parent03e93e1efebc12d9fba1a2a9cdcb3c12ecfec642
c++: Check DECL_TEMPLATE_PARM_P in duplicate_decls [PR97511]

This makes duplicate_decls differentiate a TYPE_DECL for an alias
template from a TYPE_DECL for one of its template parameters.  The
recently added assert in template_parm_to_arg revealed this latent issue
because merging of the two TYPE_DECLs cleared the DECL_TEMPLATE_PARM_P
flag.

With this patch, we now also correctly diagnose the name shadowing in
the below testcase (as required by [temp.local]/6).

gcc/cp/ChangeLog:

PR c++/97511
* decl.c (duplicate_decls): Return NULL_TREE if
DECL_TEMPLATE_PARM_P differ.

gcc/testsuite/ChangeLog:

PR c++/97511
* g++.dg/template/shadow3.C: New test.
gcc/cp/decl.c
gcc/testsuite/g++.dg/template/shadow3.C [new file with mode: 0644]