public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration
@ 2020-09-19 20:37 warp at iki dot fi
  2020-10-26 17:19 ` [Bug c++/97121] " mpolacek at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: warp at iki dot fi @ 2020-09-19 20:37 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 97121
           Summary: ICE (segfault) on incorrect default three-way
                    comparison declaration
           Product: gcc
           Version: 10.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: warp at iki dot fi
  Target Milestone: ---

Consider the following code (which mistakenly tries to return 'bool' from the
three-way comparison rather than 'auto'):

//----------------------------------------------------------
#include <compare>

class MyClass
{
    int mValue;

 public:
    MyClass(int value): mValue(value) {}

    bool operator<=>(const MyClass&) const = default;
};

int main()
{
    MyClass a = 10, b = 15;
    return (a < b);
}
//----------------------------------------------------------

Trying to compile it causes a segfault:

------------------------------------------------------------
test.cc: In member function ‘constexpr bool MyClass::operator<=>(const
MyClass&) const’:
test.cc:11:10: internal compiler error: Segmentation fault
   11 |     bool operator<=>(const MyClass&) const = default;
      |          ^~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
------------------------------------------------------------

The correct version (ie. with an 'auto' return value) compiles successfully.

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
@ 2020-10-26 17:19 ` mpolacek at gcc dot gnu.org
  2021-04-13 17:05 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2020-10-26 17:19 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
                 CC|                            |mpolacek at gcc dot gnu.org
   Last reconfirmed|                            |2020-10-26

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Confirmed.

97121.C: In member function ‘constexpr bool MyClass::operator<=>(const
MyClass&) const’:
97121.C:10:10: internal compiler error: in genericize_spaceship, at
cp/method.c:1073
   10 |     bool operator<=>(const MyClass&) const = default;
      |          ^~~~~~~~
0xb75a50 genericize_spaceship(tree_node*, tree_node*, tree_node*)
        /home/mpolacek/src/gcc/gcc/cp/method.c:1073
0xa53e18 genericize_spaceship
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:901
0xa565ed cp_genericize_r
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1355
0x1af1612 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
        /home/mpolacek/src/gcc/gcc/tree.c:12008
0xd0e3c8 cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*,
void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)
        /home/mpolacek/src/gcc/gcc/cp/tree.c:5175
0x1af1722 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
        /home/mpolacek/src/gcc/gcc/tree.c:12031
0xa5700e cp_genericize_r
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1482
0x1af1612 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
        /home/mpolacek/src/gcc/gcc/tree.c:12008
0xa55847 cp_genericize_r
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1182
0x1af1612 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
        /home/mpolacek/src/gcc/gcc/tree.c:12008
0xa55847 cp_genericize_r
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1182
0x1af1612 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*,
tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*),
void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*))
        /home/mpolacek/src/gcc/gcc/tree.c:12008
0xa579cd cp_genericize_tree
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1595
0xa5859a cp_genericize(tree_node*)
        /home/mpolacek/src/gcc/gcc/cp/cp-gimplify.c:1741
0xad1be3 finish_function(bool)
        /home/mpolacek/src/gcc/gcc/cp/decl.c:17215
0xb781da synthesize_method(tree_node*)
        /home/mpolacek/src/gcc/gcc/cp/method.c:1612
0xc921a9 maybe_instantiate_noexcept(tree_node*, int)
        /home/mpolacek/src/gcc/gcc/cp/pt.c:25357
0xaf257b mark_used(tree_node*, int)
        /home/mpolacek/src/gcc/gcc/cp/decl2.c:5549
0x9b0bb6 build_over_call
        /home/mpolacek/src/gcc/gcc/cp/call.c:9149
0x9a58f7 build_new_op_1
        /home/mpolacek/src/gcc/gcc/cp/call.c:6341

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
  2020-10-26 17:19 ` [Bug c++/97121] " mpolacek at gcc dot gnu.org
@ 2021-04-13 17:05 ` redi at gcc dot gnu.org
  2021-04-13 17:07 ` redi at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2021-04-13 17:05 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Fixed on trunk by r11-5866

    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.

We should add a test and close it.

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
  2020-10-26 17:19 ` [Bug c++/97121] " mpolacek at gcc dot gnu.org
  2021-04-13 17:05 ` redi at gcc dot gnu.org
@ 2021-04-13 17:07 ` redi at gcc dot gnu.org
  2021-04-13 17:13 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2021-04-13 17:07 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |GCCBugzilla at DRHouck dot me

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
*** Bug 97216 has been marked as a duplicate of this bug. ***

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
                   ` (2 preceding siblings ...)
  2021-04-13 17:07 ` redi at gcc dot gnu.org
@ 2021-04-13 17:13 ` redi at gcc dot gnu.org
  2021-04-13 18:43 ` cvs-commit at gcc dot gnu.org
  2021-11-04 20:52 ` redi at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2021-04-13 17:13 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |crillion at tiscali dot it

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
*** Bug 99086 has been marked as a duplicate of this bug. ***

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
                   ` (3 preceding siblings ...)
  2021-04-13 17:13 ` redi at gcc dot gnu.org
@ 2021-04-13 18:43 ` cvs-commit at gcc dot gnu.org
  2021-11-04 20:52 ` redi at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-04-13 18:43 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

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

commit r11-8158-g4df918798b445e86305b63f86f5312a18e4017c5
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Apr 13 20:42:07 2021 +0200

    testsuite: Add testcase for already fixed PR97121

    This was fixed by r11-5866 aka PR96299 fix.

    2021-04-13  Jakub Jelinek  <jakub@redhat.com>

            PR c++/97121
            * g++.dg/cpp2a/spaceship-err6.C: New test.

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

* [Bug c++/97121] ICE (segfault) on incorrect default three-way comparison declaration
  2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
                   ` (4 preceding siblings ...)
  2021-04-13 18:43 ` cvs-commit at gcc dot gnu.org
@ 2021-11-04 20:52 ` redi at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2021-11-04 20:52 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
   Target Milestone|---                         |11.0
         Resolution|---                         |FIXED

--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Fixed in gcc 11.

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

end of thread, other threads:[~2021-11-04 20:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-19 20:37 [Bug c++/97121] New: ICE (segfault) on incorrect default three-way comparison declaration warp at iki dot fi
2020-10-26 17:19 ` [Bug c++/97121] " mpolacek at gcc dot gnu.org
2021-04-13 17:05 ` redi at gcc dot gnu.org
2021-04-13 17:07 ` redi at gcc dot gnu.org
2021-04-13 17:13 ` redi at gcc dot gnu.org
2021-04-13 18:43 ` cvs-commit at gcc dot gnu.org
2021-11-04 20:52 ` redi 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).