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

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Jason Merrill
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:3120ebf3228fde693beaafd5dcbb2aa9dfb48f46

commit r14-11908-g3120ebf3228fde693beaafd5dcbb2aa9dfb48f46
Author: Jason Merrill <ja...@redhat.com>
Date:   Fri Jul 25 20:49:17 2025 -0400

    c++: constexpr uninitialized union [PR120577]

    This was failing for two reasons:

    1) We were wrongly treating the basic_string constructor as
    zero-initializing the object, which it doesn't.
    2) Given that, when we went to look for a value for the anonymous union,
    we concluded that it was value-initialized, and trying to evaluate that
    broke because we weren't setting ctx->ctor for it.

    This patch fixes both issues, #1 by setting CONSTRUCTOR_NO_CLEARING and #2
    by inserting a new CONSTRUCTOR for the member rather than evaluate it out
of
    context, which is consistent with cxx_eval_store_expression.

            PR c++/120577

    gcc/cp/ChangeLog:

            * constexpr.cc (cxx_eval_call_expression): Set
            CONSTRUCTOR_NO_CLEARING on initial value for ctor.
            (cxx_eval_component_reference): Make value-initialization
            of an aggregate member explicit.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/constexpr-union9.C: New test.

    (cherry picked from commit f23b5df56e237df9f66b615ca4babc564d5f75de)

Reply via email to