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

--- Comment #15 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jason Merrill <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:4822108e61ab879067482704f2f7d1670813d61a

commit r12-8066-g4822108e61ab879067482704f2f7d1670813d61a
Author: Jason Merrill <ja...@redhat.com>
Date:   Fri Apr 8 15:33:41 2022 -0400

    c++: constexpr non-trivial aggregate init [PR105191]

    My patch for PR92385 made us use VEC_INIT_EXPR for aggregate initialization
    of an array where some elements are not explicitly initialized.  Constexpr
    handling of that was treating initialization from {} as equivalent to
    value-initialization, which is problematic for classes with default member
    initializers that make the default constructor non-trivial; in older
    standard modes, not initializing all members makes a constructor
    non-constexpr, but aggregate initialization is fine.

            PR c++/105191
            PR c++/92385

    gcc/cp/ChangeLog:

            * tree.cc (build_vec_init_elt): Do {}-init for aggregates.
            * constexpr.cc (cxx_eval_vec_init): Only treat {} as value-init
            for non-aggregate types.
            (build_vec_init_expr): Also check constancy of explicit
            initializer elements.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/constexpr-array28.C: New test.

Reply via email to