public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior
@ 2020-06-07 23:34 barry.revzin at gmail dot com
  2020-06-09 14:52 ` [Bug c++/95567] " barry.revzin at gmail dot com
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: barry.revzin at gmail dot com @ 2020-06-07 23:34 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 95567
           Summary: Defaulted virtual <=> has the wrong behavior
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

Reduced from Twitter user @feder_and_ink:

#include <compare>

struct B {
  B(int i) : i(i) {}

  VIRTUAL std::strong_ordering operator<=>(B const& other) const = default;
  int i;
};

struct D : B {
  D(int i, int j) : B(i), j(j) {}
  int j;
};

bool check() {
    return B(2) == D(2, 3);
}

With -DVIRTUAL=, check() returns true.
With -DVIRTUAL=virtual, check() erroneously returns false.
On compiler explorer: https://godbolt.org/z/hc3U5f

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
@ 2020-06-09 14:52 ` barry.revzin at gmail dot com
  2020-10-28 12:53 ` redi at gcc dot gnu.org
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: barry.revzin at gmail dot com @ 2020-06-09 14:52 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Barry Revzin <barry.revzin at gmail dot com> ---
To follow up on this, it's not the operator<=> being virtual that's significant
but rather the class itself being polymorphic. This exhibits the same behavior:

#include <compare>

struct B {
  B(int i) : i(i) {}
  VIRTUAL ~B() = default;

  std::strong_ordering operator<=>(B const& other) const = default;
  int i;
};

struct D : B {
  D(int i, int j) : B(i), j(j) {}
  int j;
};

bool check() {
    return B(2) == D(2, 3);
}

https://godbolt.org/z/ZFqB59

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
  2020-06-09 14:52 ` [Bug c++/95567] " barry.revzin at gmail dot com
@ 2020-10-28 12:53 ` redi at gcc dot gnu.org
  2021-08-10 16:43 ` [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be pinskia at gcc dot gnu.org
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: redi at gcc dot gnu.org @ 2020-10-28 12:53 UTC (permalink / raw)
  To: gcc-bugs

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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2020-10-28

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
  2020-06-09 14:52 ` [Bug c++/95567] " barry.revzin at gmail dot com
  2020-10-28 12:53 ` redi at gcc dot gnu.org
@ 2021-08-10 16:43 ` pinskia at gcc dot gnu.org
  2021-09-29 14:33 ` ppalka at gcc dot gnu.org
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-10 16:43 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2020-10-28 00:00:00         |2021-8-10
            Summary|Defaulted virtual <=> has   |Defaulted virtual <=> has
                   |the wrong behavior          |the wrong behavior, vtable
                   |                            |is checked when it should
                   |                            |not be

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Right it is checking the vtable for equality.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
                   ` (2 preceding siblings ...)
  2021-08-10 16:43 ` [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be pinskia at gcc dot gnu.org
@ 2021-09-29 14:33 ` ppalka at gcc dot gnu.org
  2021-09-30 21:51 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-09-29 14:33 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |ppalka at gcc dot gnu.org
                 CC|                            |ppalka at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
                   ` (3 preceding siblings ...)
  2021-09-29 14:33 ` ppalka at gcc dot gnu.org
@ 2021-09-30 21:51 ` cvs-commit at gcc dot gnu.org
  2021-10-06 14:15 ` cvs-commit at gcc dot gnu.org
  2021-10-06 14:19 ` ppalka at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-09-30 21:51 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

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

commit r12-3995-gb6bca2e631b54f992c058ca8e445b45e9816690b
Author: Patrick Palka <ppalka@redhat.com>
Date:   Thu Sep 30 17:29:05 2021 -0400

    c++: defaulted comparisons and vptr fields [PR95567]

    We need to explicitly skip over vptr fields when synthesizing a
    defaulted comparison operator, because next_initializable_field
    doesn't do so for us.

            PR c++/95567

    gcc/cp/ChangeLog:

            * method.c (build_comparison_op): Skip DECL_VIRTUAL_P fields.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/spaceship-virtual1.C: New test.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
                   ` (4 preceding siblings ...)
  2021-09-30 21:51 ` cvs-commit at gcc dot gnu.org
@ 2021-10-06 14:15 ` cvs-commit at gcc dot gnu.org
  2021-10-06 14:19 ` ppalka at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-10-06 14:15 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:

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

commit r11-9084-ge84436a273f0fbb42b9785ff5bb1deaf9a500f37
Author: Patrick Palka <ppalka@redhat.com>
Date:   Thu Sep 30 17:29:05 2021 -0400

    c++: defaulted comparisons and vptr fields [PR95567]

    We need to explicitly skip over vptr fields when synthesizing a
    defaulted comparison operator, because next_initializable_field
    doesn't do so for us.

            PR c++/95567

    gcc/cp/ChangeLog:

            * method.c (build_comparison_op): Skip DECL_VIRTUAL_P fields.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/spaceship-virtual1.C: New test.

    (cherry picked from commit b6bca2e631b54f992c058ca8e445b45e9816690b)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be
  2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
                   ` (5 preceding siblings ...)
  2021-10-06 14:15 ` cvs-commit at gcc dot gnu.org
@ 2021-10-06 14:19 ` ppalka at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-10-06 14:19 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |11.3

--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed for GCC 11.3 and 12.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-10-06 14:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-07 23:34 [Bug c++/95567] New: Defaulted virtual <=> has the wrong behavior barry.revzin at gmail dot com
2020-06-09 14:52 ` [Bug c++/95567] " barry.revzin at gmail dot com
2020-10-28 12:53 ` redi at gcc dot gnu.org
2021-08-10 16:43 ` [Bug c++/95567] Defaulted virtual <=> has the wrong behavior, vtable is checked when it should not be pinskia at gcc dot gnu.org
2021-09-29 14:33 ` ppalka at gcc dot gnu.org
2021-09-30 21:51 ` cvs-commit at gcc dot gnu.org
2021-10-06 14:15 ` cvs-commit at gcc dot gnu.org
2021-10-06 14:19 ` ppalka at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).