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

--- Comment #2 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:9792126ac769f2962c0f305991818c64f9e51221

commit r15-7731-g9792126ac769f2962c0f305991818c64f9e51221
Author: Marek Polacek <pola...@redhat.com>
Date:   Wed Feb 19 14:06:33 2025 -0500

    c++: ICE with GOTO_EXPR [PR118928]

    In this PR we crash in cxx_eval_constant_expression/GOTO_EXPR on:

      gcc_assert (cxx_dialect >= cxx23);

    The code obviously doesn't expect to see a goto pre-C++23.  But we can
    get here with the new prvalue optimization.  In this test we found
    ourselves in synthesize_method for X::X().  This function calls:

     a) finish_function, which does cp_genericize -> ... -> genericize_c_loops,
        which creates the GOTO_EXPR;
     b) expand_or_defer_fn -> maybe_clone_body -> ... -> cp_fold_function
        where we reach the new maybe_constant_init call and crash on the
        goto.

    Since we can validly get to that assert, I think we should just remove
    it.  I don't see other similar asserts like this one.

            PR c++/118928

    gcc/cp/ChangeLog:

            * constexpr.cc (cxx_eval_constant_expression) <case GOTO_EXPR>:
Remove
            an assert.

    gcc/testsuite/ChangeLog:

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

    Reviewed-by: Jason Merrill <ja...@redhat.com>
  • [Bug c++/118928] [15 Regression... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to