[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-bugs
Subject:    [Bug c++/102307] [10/11/12 Regression] internal compiler error: in reshape_init_r since r10-6388-ge9
From:       "cvs-commit at gcc dot gnu.org via Gcc-bugs" <gcc-bugs () gcc ! gnu ! org>
Date:       2022-05-31 19:31:44
Message-ID: bug-102307-4-PUia0qMCss () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]

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.=
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic