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

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>:

https://gcc.gnu.org/g:7e534fb7d8256a605b6bdc12451d209af1bed329

commit r11-7013-g7e534fb7d8256a605b6bdc12451d209af1bed329
Author: Patrick Palka <ppa...@redhat.com>
Date:   Mon Feb 1 10:27:45 2021 -0500

    c++: Fix ICE from verify_ctor_sanity [PR98295]

    In this testcase we're crashing during constexpr evaluation of the
    ARRAY_REF b[0] as part of evaluation of the lambda's by-copy capture of b
    (which is encoded as a VEC_INIT_EXPR<b>).  Since A's constexpr default
    constructor is not yet defined, b's initialization is not actually
    constant, but because A is an empty type, evaluation of b from
    cxx_eval_array_ref is successful and yields an empty CONSTRUCTOR.
    And since this CONSTRUCTOR is empty, we {}-initialize the desired array
    element, and end up crashing from verify_ctor_sanity during evaluation
    of this initializer because we updated new_ctx.ctor without updating
    new_ctx.object: the former now has type A[3] and the latter is still the
    target of a TARGET_EXPR for b[0][0] created from cxx_eval_vec_init
    (and so has type A).

    This patch fixes this by setting new_ctx.object appropriately at the
    same time that we set new_ctx.ctor from cxx_eval_array_reference.

    gcc/cp/ChangeLog:

            PR c++/98295
            * constexpr.c (cxx_eval_array_reference): Also set
            new_ctx.object when setting new_ctx.ctor.

    gcc/testsuite/ChangeLog:

            PR c++/98295
            * g++.dg/cpp0x/constexpr-98295.C: New test.

Reply via email to