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

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This was fixed by r10-6572-dfffecb802681fbdb56629d3bdd96491ac660be0

    c++: Fix static initialization from <=>.

    Constant evaluation of genericize_spaceship produced a CONSTRUCTOR, which
we
    then wanted to bind to a reference, which we can't do.  So wrap the result
    in a TARGET_EXPR so we get something with an address.

    We also need to handle treating the result of cxx_eval_binary_expression as
    a glvalue for SPACESHIP_EXPR.

    My earlier change to add uid_sensitive to maybe_constant_value was wrong;
we
    don't even look at the cache when manifestly_const_eval, and I failed to
    adjust the later call to cxx_eval_outermost_constant_expr.

    gcc/cp/ChangeLog
    2020-02-11  Jason Merrill  <ja...@redhat.com>

            PR c++/93650
            PR c++/90691
            * constexpr.c (maybe_constant_value): Correct earlier change.
            (cxx_eval_binary_expression) [SPACESHIP_EXPR]: Pass lval through.
            * method.c (genericize_spaceship): Wrap result in TARGET_EXPR.

Reply via email to