[Bug c++/102307] [10/11/12 Regression] internal compiler error: in reshape_init_r since r10-6388-ge98ebda074bf8fc5

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue May 31 19:31:44 GMT 2022


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

--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Jason Merrill
<jason@gcc.gnu.org>:

https://gcc.gnu.org/g:a578b17b59651144a7b2737475d993184600a802

commit r12-8440-ga578b17b59651144a7b2737475d993184600a802
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Apr 26 11:15:04 2022 -0400

    c++: constexpr ref to array of array [PR102307]

    The problem here is that first check_initializer calls
    build_aggr_init_full_exprs, which does overload resolution, but then in the
    case of failed constexpr throws away the result and does it again in
    build_functional_cast.  But in the first overload resolution,
    reshape_init_array_1 decided to reuse the inner CONSTRUCTORs because
    tf_error is set, so we know we're committed.  But the second pass gets
    confused by the CONSTRUCTORs with non-init-list types.

    Fixed by avoiding a second pass: instead, pass the call from
build_aggr_init
    to build_cplus_new, which will turn it into a TARGET_EXPR.  I don't bother
    to change the object argument because it will be replaced later in
    simplify_aggr_init_expr.

            PR c++/102307

    gcc/cp/ChangeLog:

            * decl.cc (check_initializer): Use build_cplus_new in case of
            constexpr failure.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1z/constexpr-array2.C: New test.


More information about the Gcc-bugs mailing list