[PR c++/84973] don't defer output of uninstantiated templates
commit2a1efcf5ecb79aa9532b267b2ce53935b503bffa
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Mar 2018 05:05:14 +0000 (28 05:05 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Mar 2018 05:05:14 +0000 (28 05:05 +0000)
tree72d8d670b2283dea022de70c80a412d6b390705f
parent106682b12ec47fb34ce15a2f9fd8ccdef43dbb97
[PR c++/84973] don't defer output of uninstantiated templates

When an anon struct gets a name through a typedef, we reset its
linkage and that of its members.  Member functions may get vague
linkage, which schedules them for deferred output, but we don't want
to add them to the queue if they're uninstantiated templates,
e.g. because the enclosing function is a template.  They will be added
as needed when the enclosing template is instantiated.

for  gcc/cp/ChangeLog

PR c++/84973
* decl2.c (note_vague_linkage_fn): Don't defer uninstantiated
templates.

for  gcc/testsuite/ChangeLog

PR c++/84973
* g++.dg/template/pr84973.C: New.
* g++.dg/template/pr84973-2.C: New.
* g++.dg/template/pr84973-3.C: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258914 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/pr84973-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/pr84973-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/pr84973.C [new file with mode: 0644]