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.
Showing
- gcc/cp/module.cc 33 additions, 25 deletionsgcc/cp/module.cc
- gcc/testsuite/g++.dg/modules/decltype-1_a.C 28 additions, 0 deletionsgcc/testsuite/g++.dg/modules/decltype-1_a.C
- gcc/testsuite/g++.dg/modules/decltype-1_b.C 10 additions, 0 deletionsgcc/testsuite/g++.dg/modules/decltype-1_b.C
- gcc/testsuite/g++.dg/modules/lambda-5_a.C 24 additions, 0 deletionsgcc/testsuite/g++.dg/modules/lambda-5_a.C
- gcc/testsuite/g++.dg/modules/lambda-5_b.C 10 additions, 0 deletionsgcc/testsuite/g++.dg/modules/lambda-5_b.C
Loading
Please register or sign in to comment