https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105322

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathan Sidwell <nat...@gcc.gnu.org>:

https://gcc.gnu.org/g:084addf8a700fab9222d4127ab8524920d0ca481

commit r14-4806-g084addf8a700fab9222d4127ab8524920d0ca481
Author: Nathan Sidwell <nat...@acm.org>
Date:   Fri Oct 20 12:20:37 2023 -0400

    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.

Reply via email to