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

--- Comment #10 from GCC 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:37977343ff4f9dcb047d966d8cbaa222964763f9

commit r15-3491-g37977343ff4f9dcb047d966d8cbaa222964763f9
Author: Patrick Palka <ppa...@redhat.com>
Date:   Thu Sep 5 14:31:00 2024 -0400

    c++: local class memfn synth from noexcept context [PR113063]

    Extending the PR113063 testcase to additionally constant evaluate the <=>
    expression causes us to trip over the assert in cxx_eval_call_expression

      /* We used to shortcut trivial constructor/op= here, but nowadays
         we can only get a trivial function here with -fno-elide-constructors. 
*/
      gcc_checking_assert (!trivial_fn_p (fun)
                           || !flag_elide_constructors
                           /* We don't elide constructors when processing
                              a noexcept-expression.  */
                           || cp_noexcept_operand);

    since the local class's <=> was first used and therefore synthesized in
    a noexcept context and so its definition contains unelided trivial
    constructors.

    This patch fixes this by clearing cp_noexcept_operand alongside
    cp_unevaluated_context in the function-local case of
    maybe_push_to_top_level.

            PR c++/113063

    gcc/cp/ChangeLog:

            * name-lookup.cc (local_state_t): Clear and restore
            cp_noexcept_operand as well.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/spaceship-synth16.C: Also constant evaluate
            the <=> expression.
            * g++.dg/cpp2a/spaceship-synth16a.C: Likewise.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to