Skip to content
Snippets Groups Projects
Commit 084addf8 authored by Nathan Sidwell's avatar Nathan Sidwell
Browse files

c++: Constructor streaming [PR105322]

An expresion node's type is streamed after the expression's operands,
because the type can come from some aspect of an operand (for instance
decltype and noexcept). There's a comment in the code explaining that.

But that doesn't work for constructors, which can directly reference
components of their type (eg FIELD_DECLS). If this is a
type-introducing CONSTRUCTOR, we need to ensure the type has been
streamed first. So move CONSTRUCTOR stream to after the type streaming.

The reason things like COMPONENT_REF work is that they stream their
first operand first, and that introduces the type that their second
operand looks up a field in.

	gcc/cp/
	PR c++/105322
	* module.cc (trees_out::core_vals): Stream CONSTRUCTOR operands
	after the type.
	(trees_in::core_vals): Likewise.
	gcc/testsuite/
	* g++.dg/modules/decltype-1_a.C: New.
	* g++.dg/modules/decltype-1_b.C: New.
	* g++.dg/modules/lambda-5_a.C: New.
	* g++.dg/modules/lambda-5_b.C: New.
parent 7069ea90
No related merge requests found
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