c++/modules: Complain on imported GMF TU-local entities in instantiation [PR121574]

An unfortunate side effect of the previous patch is that even with
-pedantic-errors, unless the user specifies -Wtemplate-names-tu-local
when building the module interface there will be no diagnostic at all
from instantiating a template that exposes global TU-local entities,
either when building the module or its importer.

This patch solves this by recognising imported TU-local dependencies,
even if they weren't streamed as TU_LOCAL_ENTITY nodes.  The warnings
here are deliberately conservative for when we can be sure this was
actually an imported TU-local entity; in particular, we bail on any
TU-local entity that originated from a header module, without attempting
to determine if the entity came via a named module first.

	PR c++/121574

gcc/cp/ChangeLog:

	* cp-tree.h (instantiating_tu_local_entity): Declare.
	* module.cc (is_tu_local_entity): Extract from depset::hash.
	(is_tu_local_value): Likewise.
	(has_tu_local_tmpl_arg): Likewise.
	(depset::hash::is_tu_local_entity): Remove.
	(depset::hash::has_tu_local_tmpl_arg): Remove.
	(depset::hash::is_tu_local_value): Remove.
	(instantiating_tu_local_entity): New function.
	(depset::hash::add_binding_entity): No longer go through
	depset::hash to check is_tu_local_entity.
	* pt.cc (complain_about_tu_local_entity): Remove.
	(tsubst): Use instantiating_tu_local_entity.
	(tsubst_expr): Likewise.

gcc/testsuite/ChangeLog:

	* g++.dg/modules/internal-17_b.C: Check for diagnostics when
	instantiating imported TU-local entities.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
4 files changed