Skip to content
Snippets Groups Projects
Commit 9fe7d3de authored by Iain Buclaw's avatar Iain Buclaw
Browse files

d: Fix undefined reference to nested lambda in template (PR108055)

Sometimes, nested lambdas of templated functions get no code generation
due to them being marked as instantianted outside of all modules being
compiled in the current compilation unit.  This despite enclosing
template instances being marked as instantiated inside the current
compilation unit.  To fix, all enclosing templates are now checked in
`function_defined_in_root_p'.

Because of this change, `function_needs_inline_definition_p' has also
been fixed up to only check whether the regular function definition
itself is to be emitted in the current compilation unit.

	PR d/108055

gcc/d/ChangeLog:

	* decl.cc (function_defined_in_root_p): Check all enclosing template
	instances for definition in a root module.
	(function_needs_inline_definition_p): Replace call to
	function_defined_in_root_p with test for outer module `isRoot'.

gcc/testsuite/ChangeLog:

	* gdc.dg/torture/imports/pr108055conv.d: New.
	* gdc.dg/torture/imports/pr108055spec.d: New.
	* gdc.dg/torture/imports/pr108055write.d: New.
	* gdc.dg/torture/pr108055.d: New test.
parent 2d7c73ee
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment