]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: cross-header-unit template definitions [PR 99153]
authorNathan Sidwell <nathan@acm.org>
Mon, 22 Feb 2021 14:43:32 +0000 (06:43 -0800)
committerNathan Sidwell <nathan@acm.org>
Mon, 22 Feb 2021 14:52:19 +0000 (06:52 -0800)
commitc49fcfddaa47f2828fe2af11ae857cd67f53e23f
tree5a9c6bd1dd5971b2f2d39da68146a32d2590762b
parent4c31a3a6d31b6214ea774d403bf8ab7ebe1ea862
c++: cross-header-unit template definitions [PR 99153]

A member function can be defined in a different header-file than the
one defining the class.  In such situations we must unmark the decl as
imported.  When the entity is a template we failed to unmark the
template_decl.

Perhaps the duplication of these flags on the template_decl from the
underlying decl is an error.  I set on the fence about it for a long
time during development, but I don't think now is the time to change
that (barring catastrophic bugs).

PR c++/99153
gcc/cp/
* decl.c (duplicate_decls): Move DECL_MODULE_IMPORT_P propagation
to common-path.
* module.cc (set_defining_module): Add assert.
gcc/testsuite/
* g++.dg/modules/pr99153_a.H: New.
* g++.dg/modules/pr99153_b.H: New.
gcc/cp/decl.c
gcc/cp/module.cc
gcc/testsuite/g++.dg/modules/pr99153_a.H [new file with mode: 0644]
gcc/testsuite/g++.dg/modules/pr99153_b.H [new file with mode: 0644]