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

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Marek Polacek
<mpola...@gcc.gnu.org>:

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

commit r10-8942-gda76d98f1d547950e4e344016104a42cff2818de
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu Oct 15 16:10:45 2020 -0400

    c++: Fix verify_ctor_sanity ICE [PR96241]

    The code added in r10-6437 caused us to create a CONSTRUCTOR when we're
    {}-initializing an aggregate.  Then we pass this new CONSTRUCTOR down to
    cxx_eval_constant_expression which, if the CONSTRUCTOR isn't TREE_CONSTANT
    or reduced_constant_expression_p, calls cxx_eval_bare_aggregate.  In
    this case the CONSTRUCTOR wasn't reduced_constant_expression_p because
    for r_c_e_p a CONST_DECL isn't good enough so it returns false.  So we
    go to cxx_eval_bare_aggregate where we crash, because ctx->ctor wasn't
    set up properly.  So my fix is to do so.  Since we're value-initializing,
    I'm not setting CONSTRUCTOR_NO_CLEARING.  To avoid keeping a garbage
    constructor around, I call free_constructor in case the evaluation did
    not use it.

    gcc/cp/ChangeLog:

            PR c++/96241
            * constexpr.c (cxx_eval_array_reference): Set up ctx->ctor if we
            are initializing an aggregate.  Call free_constructor on the new
            CONSTRUCTOR if it isn't returned from cxx_eval_constant_expression.

    gcc/testsuite/ChangeLog:

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

    (cherry picked from commit 0df73beea03f9dc124dc6e98ec4bdeacca7a2eea)
  • [Bug c++/96241] [9/10 Regressio... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to