diff options
author | Nathan Sidwell <nathan@acm.org> | 2023-10-20 12:20:37 -0400 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2023-10-20 16:24:49 -0400 |
commit | 084addf8a700fab9222d4127ab8524920d0ca481 (patch) | |
tree | 1ce1f519ced10494d25476a8a194e7e2ed2d124a /gcc/rust/backend | |
parent | 7069ea909f5292a17d22e5e68218373186820d29 (diff) | |
download | gcc-084addf8a700fab9222d4127ab8524920d0ca481.zip gcc-084addf8a700fab9222d4127ab8524920d0ca481.tar.gz gcc-084addf8a700fab9222d4127ab8524920d0ca481.tar.bz2 |
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.
Diffstat (limited to 'gcc/rust/backend')
0 files changed, 0 insertions, 0 deletions