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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jason Merrill <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:4ed1dc1275bba89af92bfc7d97c21b376e4c29c3

commit r11-5866-g4ed1dc1275bba89af92bfc7d97c21b376e4c29c3
Author: Jason Merrill <ja...@redhat.com>
Date:   Fri Dec 4 21:48:43 2020 -0500

    c++: Fix defaulted <=> fallback to < and == [PR96299]

    I thought I had implemented P1186R3, but apparently I didn't read it
closely
    enough to understand the point of the paper, namely that for a defaulted
    operator<=>, if a member type doesn't have a viable operator<=>, we will
use
    its operator< and operator== if the defaulted operator has an specific
    comparison category as its return type; the compiler can't guess if it
    should be strong_ordering or something else, but the user can make that
    choice explicit.

    The libstdc++ test change was necessary because of the change in
    genericize_spaceship from op0 > op1 to op1 < op0; this should be
equivalent,
    but isn't because of PR88173.

    gcc/cp/ChangeLog:

            PR c++/96299
            * cp-tree.h (build_new_op): Add overload that omits some parms.
            (genericize_spaceship): Add location_t parm.
            * constexpr.c (cxx_eval_binary_expression): Pass it.
            * cp-gimplify.c (genericize_spaceship): Pass it.
            * method.c (genericize_spaceship): Handle class-type arguments.
            (build_comparison_op): Fall back to op</== when appropriate.

    gcc/testsuite/ChangeLog:

            PR c++/96299
            * g++.dg/cpp2a/spaceship-synth-neg2.C: Move error.
            * g++.dg/cpp2a/spaceship-p1186.C: New test.

    libstdc++-v3/ChangeLog:

            PR c++/96299
            * testsuite/18_support/comparisons/algorithms/partial_order.cc:
            One more line needs to use VERIFY instead of static_assert.

Reply via email to